feat: Upgrade to Astro with full PDPA compliance

PDPA Features:
 Cookie consent banner
 Consent logging API
 Admin dashboard
 Privacy Policy
 Terms & Conditions

Technical:
 Astro 5.x + Tailwind v4
 Docker on port 80
 SQLite database
 15 pages built

Ready for Easypanel deployment.
This commit is contained in:
Kunthawat
2026-03-12 10:01:04 +07:00
parent 668f69048f
commit 77ac4d2d05
13719 changed files with 307487 additions and 25765 deletions

View File

@@ -162,11 +162,19 @@ declare module 'astro:content' {
};
type DataEntryMap = {
"products": Record<string, {
"blog": Record<string, {
id: string;
body?: string;
collection: "blog";
data: any;
rendered?: RenderedContent;
filePath?: string;
}>;
"products": Record<string, {
id: string;
body?: string;
collection: "products";
data: InferEntrySchema<"products">;
data: any;
rendered?: RenderedContent;
filePath?: string;
}>;
@@ -202,6 +210,6 @@ declare module 'astro:content' {
LiveContentConfig['collections'][C]['loader']
>;
export type ContentConfig = typeof import("../src/content.config.js");
export type ContentConfig = typeof import("../src/content.config.mjs");
export type LiveContentConfig = never;
}

40
.gitignore vendored
View File

@@ -1,39 +1 @@
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
.env
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
# IDE
.idea/
.vscode/
.node-version

View File

@@ -1,95 +0,0 @@
# DEAL PLUS TECH - PROJECT KNOWLEDGE BASE
**Generated:** 2026-03-01
**Commit:** 13436b4
**Branch:** main
## OVERVIEW
Thai corporate website for pipe/HVAC materials supplier. Next.js 14 App Router + TypeScript + Tailwind CSS. Thai language content with Thai URL support.
## STRUCTURE
```
src/
├── app/ # Next.js App Router pages
├── components/ # UI, layout, analytics components
├── content/ # Blog markdown files
├── data/ # Product catalog & site config (HUGE)
├── lib/ # Utility functions
├── styles/ # Global CSS + Tailwind
└── types/ # TypeScript interfaces
```
## WHERE TO LOOK
| Task | Location | Notes |
|------|----------|-------|
| Add/edit pages | `src/app/*/page.tsx` | App Router conventions |
| Add products | `src/data/site-config.ts` | ProductCategory array |
| Add product tables | `src/data/product-tables.ts` | Table data for specs |
| UI components | `src/components/ui/` | Button, Card, Badge |
| Layout | `src/components/layout/` | Header, Footer, FloatingContact |
| Types | `src/types/index.ts` | All interfaces |
| Styling | `src/styles/globals.css` | Custom component classes |
| SEO/Metadata | `src/app/layout.tsx` | Root metadata + schema |
## CONVENTIONS
**Thai-first content**: All UI text, URLs, metadata in Thai. English `nameEn` fields for product IDs.
**URL format**: Thai URLs with trailing slash (e.g., `/ท่อพีพีอาร์ตราช้าง/`)
**Product data structure**: Each product in `productCategories` has:
- Thai `name`, `description`, `seoContent`
- English `nameEn`, `id`, `slug`
- `specifications[]`, `features[]`, `applications[]`, `faq[]`
- `schemaData` for structured data
- Optional `productTables[]` for spec tables
**Styling**: Tailwind + custom classes in globals.css:
- `.btn-primary`, `.btn-secondary`, `.btn-outline`
- `.card`, `.card-industrial`
- `.section-title`, `.section-subtitle`
**Font**: Kanit (Thai Google Font) via `next/font/google`
**Path alias**: `@/*` maps to `./src/*`
## ANTI-PATTERNS (THIS PROJECT)
- **DO NOT** use `output: 'standalone'` in dev mode (breaks HMR)
- **DO NOT** hardcode contact info - use `siteConfig` from `@/data/site-config`
- **DO NOT** add tests - project has no test infrastructure
- **DO NOT** use `as any` or `@ts-ignore` - strict mode enabled
## UNIQUE STYLES
**Design System**: Industrial/construction theme with:
- Primary green (#22c55e) - trust, growth
- Secondary slate grays - professional, industrial
- Accent yellow - highlights
- Industrial-specific shadows and gradients
**Product pages**: SEO-heavy with structured data (LocalBusiness schema, Product schema)
**Blog**: Headless WordPress integration via `NEXT_PUBLIC_WORDPRESS_API_URL`
**Image optimization**: AVIF/WebP auto-converted, Thai domain patterns in `next.config.mjs`
## COMMANDS
```bash
npm run dev # Development server (localhost:3000)
npm run build # Production build
npm run start # Production server
npm run lint # ESLint check
```
## NOTES
- No CI/CD configured - manual deployments
- Environment variables in `.env.local` (copy from `.env.example`)
- Large data files in `src/data/` - edit with care
- Thai URLs require URL-encoded characters in some contexts
- `public/llm.txt` contains AI-readable content for the site

View File

@@ -1,42 +1,20 @@
# Build Stage
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
RUN npm install
COPY . .
# Build Next.js project
RUN mkdir -p data
RUN npm run build
# Production Stage
FROM node:20-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install production dependencies only
RUN npm ci --production
# Copy built Next.js app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
# Expose port
EXPOSE 4321
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node -e "require('http').get('http://localhost:4321', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
# Start Next.js server
CMD ["node", "server.js"]
RUN npm install --production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/data ./data
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 CMD node -e "require('http').get('http://localhost:80', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
ENV NODE_ENV=production ASTRO_DB_REMOTE_URL=file:/app/data/consent.db PORT=80
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "80"]

View File

@@ -1,54 +0,0 @@
# Images with Embedded Promotional Text - Analysis Results
## Summary
**Total images analyzed:** ~40
**Images with embedded promotional text:** 28
**Clean images:** ~12
## Images WITH Embedded Text (Need Replacement)
### Category Images (Main pages):
1. `2021/03/durgo_000C.jpg` - "ระบบวาล์วเติมอากาศ" / "DURGO AVVs"
2. `2021/03/valve_000C.jpg` - "วาล์ว" / "Valve" + bottom "Valve KITZ"
3. `2021/03/water-pump_000C.jpg` - "ปั๊มพ่นน้ำ" / "Water Pump"
4. `2021/03/water-treatment_000C.jpg` - "ระบบกรองน้ำดี" / "Water Treatment"
5. `2021/03/grilles_000C.jpg` - "กริลแอร์พลาสติก" / "Grilles plastic"
6. `2021/03/realflex_000C.jpg` - "Realflex" / "flexible hose"
7. `2021/03/extinguishers_000C.jpg` - "อุปกรณ์ดับเพลิง" / "Extinguishers"
8. `2025/01/fencing_000C.jpg` - "ระบบรั้ว"
9. `2025/01/balljet-cover_000C.jpg` - "หัวฉีดแอร์" / "BALL JET"
10. `2025/01/thermobrek_cover_000C.jpg` - "เทอร์โมเบรค" / "THERMOBREAK"
11. `2025/01/pipe-and-other_000.jpg` - "ท่อ" / "Pipe"
12. `2025/01/pipe-coupling-machine_000.jpg` - "เชื่อมท่อ กรูฟท่อ" / "Groove Coupling"
13. `2025/01/Hanger-Clamp-Bolt_000.jpg` - "แฮงเกอร์ แคล้ม โบลท์ แหวน น็อต สกรู พุก สตัดเกลียว"
14. `2025/09/IMG-cover-309251.png` - "ฉนวนหุ้มท่อ" / "PIPE INSULATION"
### Subcategory Images (Pipe types):
15. `2021/03/ppr-pipe_000C.jpg` - "ท่อพีพีอาร์" / "PPR Pipe"
16. `2021/03/hdpe-pipe_000C.jpg` - "ท่อเอชดีพีอี" / "HDPE pipe"
17. `2021/03/upvc-pipe_000C.jpg` - "ท่อ UPVC" / "UPVC pipe"
18. `2021/03/poloplast_000C.jpg` - "PP-R / PP-RCT" / "POLOPLAST"
19. `2021/03/syler_000C.jpg` - "ท่อไซเลอร์" / "Syler"
20. `2021/03/pvc-pipe_000C.jpg` - "ท่อและข้อต่อพีวีซี" / "PVC pipe"
21. `2021/03/xylent_000C.jpg` - "ท่อระบายน้ำไซเลนท์" / "XYLENT" + "เงียบ!" / "22 dB,(A)"
22. `2021/03/hdpe-welding_000C-1.jpg` - "เครื่องเชื่อมท่อ HDPE" / "HDPE" / "Welding Machine"
### Hanger/Clamp Images:
23. `2024/02/ADJUSTABLE_SPLIT_RING_HANGER_cover_01.jpg` - "สปริงหรีดแฮงเกอร์ (SR19)" / "ADJUSTABLE SPLIT RING HANGER"
24. `2024/02/ADJUSTABLE_CLEVIS_HANGER_cover_01.jpg` - "เควิสแฮงเกอร์" / "ADJUSTABLE CLEVIS HANGER"
25. `2024/02/THREADED_ROD_cover_01.jpg` - "สตัดเกลียวตลอด (เหล็ก)" / "THREADED ROD"
### Legacy Images:
26. `2021/02/Valve-KITZ.jpg` - "Valve KITZ" (bottom banner)
27. `2021/02/Grilles01logo.jpg` - "Grilles" (top heading)
28. `2021/02/Banner-HDPE-wel-1024x382.jpg` - "เครื่องเชื่อม HDPE" / "พร้อมจำหน่าย ทุกรุ่น"
## Clean Images (No embedded text):
- `2021/02/Water-Pump1.jpg` - Clean product photo
- `2021/02/DURGO_028.jpg` - Clean product photo
- `2021/02/original-1411656013669.png` - Clean product photo
- `2021/02/3975300575915d3ebc051b.jpg` - Clean product photo
- `2021/02/Grooved01-1024x501.jpg` - Clean (table headers are part of document)
- `2021/03/MECH_001-1.jpg` - Only small descriptive labels
- Logo: `2021/02/13523630950840.png` - Logo only
- Portfolio images - Clean project photos

140
README.md
View File

@@ -1,125 +1,43 @@
# Deal Plus Tech - Next.js Website
# Astro Starter Kit: Minimal
Complete redesign of dealplustech.co.th website built with Next.js 14, TypeScript, and Tailwind CSS.
## Features
- 🚀 Next.js 14 with App Router
- 💅 Tailwind CSS for styling
- 📝 Headless WordPress integration for Blog
- 🌐 Thai URL support for product categories
- 📱 Fully responsive design
- 🔍 SEO optimized
## Getting Started
### Prerequisites
- Node.js 18.17 or later
- npm or yarn
### Installation
```bash
npm install
```sh
npm create astro@latest -- --template minimal
```
### Environment Variables
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
Copy `.env.example` to `.env.local` and fill in your values:
## 🚀 Project Structure
```bash
cp .env.example .env.local
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
├── src/
│ └── pages/
│ └── index.astro
└── package.json
```
Required environment variables:
- `NEXT_PUBLIC_WORDPRESS_API_URL` - Your WordPress REST API URL (e.g., https://your-domain.com/wp-json/wp/v2)
- `NEXT_PUBLIC_SITE_URL` - Your production site URL
- `NEXT_PUBLIC_PHONE` - Contact phone number
- `NEXT_PUBLIC_EMAIL` - Contact email
- `NEXT_PUBLIC_LINE_ID` - LINE ID for contact
- `NEXT_PUBLIC_FACEBOOK_URL` - Facebook page URL
- `NEXT_PUBLIC_COMPANY_ADDRESS` - Company address
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
### Development
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
```bash
npm run dev
```
Any static assets, like images, can be placed in the `public/` directory.
Open [http://localhost:3000](http://localhost:3000) in your browser.
## 🧞 Commands
### Production Build
All commands are run from the root of the project, from a terminal:
```bash
npm run build
npm start
```
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## Project Structure
## 👀 Want to learn more?
```
src/
├── app/ # Next.js App Router pages
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Homepage
│ ├── about-us/ # About page
│ ├── services/ # Services page
│ ├── portfolio/ # Portfolio page
│ ├── contact-us/ # Contact page
│ ├── all-projects/ # FAQ page
│ ├── product/ # Products listing
│ ├── blog/ # Blog pages
│ └── [[...slug]]/ # Product category catch-all
├── components/
│ ├── layout/ # Header, Footer, FloatingContact
│ ├── sections/ # Page sections
│ └── ui/ # UI components
├── lib/
│ ├── utils.ts # Utility functions
│ └── wordpress.ts # WordPress API client
├── types/
│ └── index.ts # TypeScript types
├── data/
│ └── site-config.ts # Site configuration
└── styles/
└── globals.css # Global styles
```
## Deployment
### Vercel (Recommended)
1. Push your code to GitHub
2. Import your repository on Vercel
3. Add environment variables in Vercel dashboard
4. Deploy!
### Other Platforms
The project can be deployed to any platform that supports Next.js:
- Netlify
- AWS Amplify
- Docker
- Self-hosted Node.js server
## WordPress Integration
This site uses WordPress as a headless CMS for the Blog section.
### Setup WordPress
1. Install WordPress on your server
2. Ensure the REST API is enabled (default in modern WordPress)
3. Set `NEXT_PUBLIC_WORDPRESS_API_URL` to your WordPress API endpoint
4. Create posts with featured images for best display
### API Endpoints Used
- `/posts` - Blog posts
- `/categories` - Post categories
- `/_embed` - Embedded author and media data
## License
Private project for Deal Plus Tech Co., Ltd.
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).

BIN
data/consent.db Normal file

Binary file not shown.

View File

@@ -1 +0,0 @@
.node-version

View File

@@ -1,42 +0,0 @@
# Build Stage
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
COPY . .
# Build the project
RUN npm run build
# Production Stage
FROM node:20-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install production dependencies only
RUN npm ci --production
# Copy built assets from builder
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/public ./public
COPY --from=builder /app/astro.config.mjs ./
# Expose port
EXPOSE 4321
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node -e "require('http').get('http://localhost:4321', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
# Start the server
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]

View File

@@ -1,43 +0,0 @@
# Astro Starter Kit: Minimal
```sh
npm create astro@latest -- --template minimal
```
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
├── src/
│ └── pages/
│ └── index.astro
└── package.json
```
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Any static assets, like images, can be placed in the `public/` directory.
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).

View File

@@ -1,5 +0,0 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v5.18.0"><meta name="description" content="บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title" content="บทความความรู้"><meta property="og:description" content="บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง"><meta property="og:image" content="/og-image.jpg"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>บทความความรู้ | ดีล พลัส เทค</title><style>html{font-family:Kanit,system-ui,sans-serif}
</style></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <div class="container mx-auto px-4"> <!-- Hero --> <div class="text-center mb-12"> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4">
บทความ<span class="text-primary-600">ความรู้</span> </h1> <p class="text-xl text-secondary-600 max-w-2xl mx-auto">
บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง
</p> </div> <!-- Blog Grid --> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> </div> </div> </main> </body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
{
"name": "dealplustech-astro",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@tailwindcss/vite": "^4.2.1",
"astro": "^5.17.1",
"tailwindcss": "^4.2.1"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
<style>
path { fill: #000; }
@media (prefers-color-scheme: dark) {
path { fill: #FFF; }
}
</style>
</svg>

Before

Width:  |  Height:  |  Size: 749 B

View File

@@ -1,104 +0,0 @@
---
id: hdpe-pipe-advantages
title: "ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม"
excerpt: "ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"
date: "2024-01-10"
author: "Deal Plus Tech"
categories: ["ท่อ HDPE", "ความรู้"]
featuredImage: "/images/2021/03/hdpe-pipe_000C.jpg"
---
## ท่อ HDPE คืออะไร?
ท่อ HDPE (High Density Polyethylene) หรือท่อเอชดีพีอี เป็นท่อที่ผลิตจากโพลิเอทิลีนความหนาแน่นสูง เป็นวัสดุพลาสติกที่มีความแข็งแรงและทนทานเป็นอย่างมาก
## ข้อดีของท่อ HDPE
### 1. ความยืดหยุ่นสูง
ท่อ HDPE สามารถโค้งงอได้ถึง 45 องศา ทำให้เหมาะสำหรับพื้นที่ติดตั้งจำกัด และสามารถรองรับการเคลื่อนไหวของดินได้ดี
### 2. ทนทานต่อสารเคมี
ท่อ HDPE ทนทานต่อการกัดกร่อนของสารเคมี กรด และด่าง ทำให้เหมาะสำหรับงานอุตสาหกรรม
### 3. อายุการใช้งานยาวนาน
ท่อ HDPE มีอายุการใช้งานมากกว่า 50 ปี เมื่อติดตั้งและใช้งานอย่างถูกต้อง
### 4. น้ำหนักเบา
ท่อ HDPE มีน้ำหนักเบากว่าท่อโลหะ ทำให้ง่ายต่อการขนส่งและติดตั้ง
### 5. การเชื่อมต่อที่แน่นหนา
การเชื่อมท่อ HDPE ด้วยวิธี Butt Fusion ทำให้ท่อเชื่อมต่อกันเป็นเนื้อเดียว ไม่มีรอยต่อ ป้องกันการรั่วซึม
### 6. ปลอดภัยต่อสุขภาพ
ท่อ HDPE ไม่เป็นสนิม ไม่ปล่อยสารพิษ ปลอดภัยสำหรับน้ำดื่ม
## การใช้งานท่อ HDPE
### งานประปา
- ท่อส่งน้ำประปา
- ระบบประปาในบ้านเรือน
- ระบบประปาในอาคาร
### งานเกษตร
- ระบบน้ำหยด
- ระบบสปริงเกลอร์
- ระบบน้ำเพื่อการเกษตร
### งานอุตสาหกรรม
- ท่อส่งสารเคมี
- ระบบบำบัดน้ำเสีย
- งานโรงงานอุตสาหกรรม
### งานโครงสร้างพื้นฐาน
- งานท่อใต้ดิน
- ท่อร้อยสายไฟ
- งานสาธารณูปโภค
## ขนาดท่อ HDPE ที่นิยมใช้
| ขนาด (มม.) | การใช้งาน |
|------------|-----------|
| 16-32 | งานประปาภายในบ้าน |
| 40-63 | งานประปาอาคารขนาดเล็ก |
| 75-110 | งานประปาอาคารขนาดใหญ่ |
| 125-315 | งานท่อส่งน้ำหลัก |
| 355-1200 | งานโครงสร้างพื้นฐาน |
## เกรดของท่อ HDPE
### PE80
- เหมาะสำหรับงานทั่วไป
- ทนแรงดันสูงสุด 8 MPa
### PE100
- เหมาะสำหรับงานที่ต้องการความแข็งแรงสูง
- ทนแรงดันสูงสุด 10 MPa
- เป็นเกรดที่นิยมใช้ในปัจจุบัน
## การติดตั้งท่อ HDPE
### วิธี Butt Fusion
1. ตัดท่อให้ตรง
2. ทำความสะอาดผิวท่อ
3. ใช้เครื่องเชื่อมท่อ HDPE
4. ให้ความร้อนจนผิวท่อละลาย
5. กดท่อเข้าด้วยกัน
6. รอให้เย็นตัวลง
### วิธี Electrofusion
1. ใช้ข้อต่อแบบ Electrofusion
2. เสียบปลั๊กไฟเข้ากับข้อต่อ
3. รอจนกระบวนการเชื่อมเสร็จสิ้น
## สรุป
ท่อ HDPE เป็นตัวเลือกที่ยอดเยี่ยมสำหรับงานระบบน้ำ เนื่องจากมีความทนทาน ความยืดหยุ่น และอายุการใช้งานที่ยาวนาน ไม่ว่าจะเป็นงานประปา งานเกษตร หรืองานอุตสาหกรรม ท่อ HDPE สามารถตอบโจทย์ได้ทุกการใช้งาน
---
**สนใจสินค้าท่อ HDPE?**
ติดต่อเราได้ที่:
- โทร: 090-555-1415
- LINE: jppselection
[ดูสินค้าท่อ HDPE ทั้งหมด](/ท่อhdpe)

View File

@@ -1,80 +0,0 @@
---
id: ppr-pipe-guide
title: "ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน"
excerpt: "ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"
date: "2024-01-15"
author: "Deal Plus Tech"
categories: ["ท่อ PPR", "ความรู้", "คู่มือ"]
featuredImage: "/images/2021/03/ppr-pipe_000C.jpg"
---
## ท่อ PPR คืออะไร?
ท่อ PPR (Polypropylene Random Copolymer) หรือท่อพีพีอาร์ เป็นท่อพลาสติกที่ผลิตจากเม็ดพลาสติก PP-R 80 (Polypropylene Random Copolymer 80) ซึ่งเป็นวัสดุพลาสติกคุณภาพสูงที่มีความแข็งแรงและทนทานเป็นอย่างดี
## ข้อดีของท่อ PPR
### 1. ทนแรงดันและอุณหภูมิสูง
ท่อ PPR สามารถทนแรงดันได้สูงถึง 20 บาร์ และทนต่ออุณหภูมิได้สูงถึง 95°C ทำให้เหมาะสำหรับใช้งานทั้งระบบน้ำเย็นและน้ำร้อน
### 2. สะอาดและปลอดภัย
ท่อ PPR ไม่เป็นสนิม ปราศจากโลหะหนักและสิ่งปนเปื้อน ทำให้น้ำที่ไหลผ่านสะอาดและปลอดภัยต่อการบริโภค
### 3. อายุการใช้งานยาวนาน
ด้วยคุณสมบัติที่ทนทาน ท่อ PPR มีอายุการใช้งานยาวนานกว่า 50 ปี
### 4. ติดตั้งง่าย
การเชื่อมต่อท่อ PPR ใช้วิธีเชื่อมด้วยความร้อน ทำให้ท่อและข้อต่อเป็นเนื้อเดียวกัน ไม่มีปัญหารั่วซึม
### 5. ประหยัดพลังงาน
ท่อ PPR เป็นฉนวนกันความร้อนที่ดี ช่วยรักษาอุณหภูมิของน้ำได้ดีกว่าท่อโลหะ
## การเลือกท่อ PPR ที่เหมาะสม
### ขนาดท่อ
เลือกขนาดท่อให้เหมาะสมกับปริมาณน้ำที่ต้องการใช้งาน:
- ท่อขนาด 20-25 มม. เหมาะสำหรับบ้านเรือนทั่วไป
- ท่อขนาด 32-63 มม. เหมาะสำหรับอาคารขนาดใหญ่
### เกรดของท่อ
- **PN10** - สำหรับน้ำเย็น ทนแรงดัน 10 บาร์
- **PN16** - สำหรับน้ำอุ่น ทนแรงดัน 16 บาร์
- **PN20** - สำหรับน้ำร้อน ทนแรงดัน 20 บาร์
## การติดตั้งท่อ PPR
### ขั้นตอนการเชื่อมท่อ
1. ตัดท่อให้ตรงและเรียบ
2. ทำความสะอาดผิวท่อและข้อต่อ
3. ใช้เครื่องเชื่อมท่ออุณหภูมิ 260°C
4. สอดท่อและข้อต่อเข้าด้วยกัน
5. รอให้เย็นตัวลงประมาณ 2-3 นาที
### ข้อควรระวัง
- หลีกเลี่ยงการติดตั้งในพื้นที่ที่มีแสงแดดโดยตรง
- ควรทิ้งระยะห่างสำหรับการขยายตัวของท่อ
- ตรวจสอบความร้อนของเครื่องเชื่อมก่อนใช้งาน
## ท่อ PPR ตราช้าง
ท่อ PPR ตราช้าง เป็นท่อ PPR คุณภาพสูงที่ผลิตจากเม็ดพลาสติก PP-R 80 วัตถุดิบคุณภาพสูงมาตรฐานยุโรปจาก lyondellbasell
**คุณสมบัติเด่น:**
- ทนแรงดันได้สูงสุด 20 บาร์
- ทนต่ออุณหภูมิได้สูงถึง 95°C
- ผลิตตามมาตรฐาน DIN8077 และ DIN8078 ของประเทศเยอรมัน
- รับประกันคุณภาพ
## สรุป
ท่อ PPR เป็นตัวเลือกที่ดีสำหรับระบบประปาในปัจจุบัน เนื่องจากมีความทนทานสูง ติดตั้งง่าย และมีอายุการใช้งานยาวนาน หากคุณกำลังมองหาท่อสำหรับงานระบบน้ำ ท่อ PPR เป็นตัวเลือกที่คุ้มค่าและเหมาะสม
---
**สนใจสินค้าท่อ PPR?**
ติดต่อเราได้ที่:
- โทร: 090-555-1415
- LINE: jppselection
- อีเมล: dealplustech@gmail.com
[ดูสินค้าท่อ PPR ทั้งหมด](/ท่อพีพีอาร์ตราช้าง)

View File

@@ -1,126 +0,0 @@
---
id: water-pump-maintenance
title: "การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน"
excerpt: "ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"
date: "2024-01-05"
author: "Deal Plus Tech"
categories: ["ปั๊มน้ำ", "บำรุงรักษา", "เคล็ดลับ"]
featuredImage: "/images/2021/02/Water-Pump1.jpg"
---
## ความสำคัญของการบำรุงรักษาปั๊มน้ำ
ปั๊มน้ำเป็นหัวใจของระบบน้ำในบ้าน การบำรุงรักษาอย่างสม่ำเสมอจะช่วย:
- ยืดอายุการใช้งานของปั๊มน้ำ
- ลดปัญหาการเสีย
- ประหยัดค่าไฟฟ้า
- ป้องกันอุบัติเหตุจากการรั่วซึม
## การบำรุงรักษาปั๊มน้ำแบบทำเอง
### 1. ตรวจสอบสายไฟและสวิตช์
- ตรวจสอบสายไฟว่ามีรอยชำรุดหรือไม่
- ตรวจสอบสวิตช์ว่าทำงานปกติหรือไม่
- หากพบความผิดปกติควรเรียกช่าง
### 2. ทำความสะอาดตัวกรอง
- ปิดวาล์วน้ำเข้าก่อนทำความสะอาด
- ถอดตัวกรองออกมาล้าง
- ตรวจสอบว่ามีสิ่งปนเปื้อนหรือไม่
- ติดตั้งกลับเข้าที่เดิม
### 3. ตรวจสอบแรงดันน้ำ
- สังเกตแรงดันน้ำว่าลดลงหรือไม่
- ตรวจสอบว่ามีเสียงผิดปกติหรือไม่
- หากแรงดันลดลงอาจมีการรั่วซึม
### 4. ตรวจสอบถังแรงดัน (Pressure Tank)
- ตรวจสอบว่าถังมีอากาศเพียงพอหรือไม่
- หากปั๊มเปิด-ปิดบ่อยผิดปกติ อาจต้องเติมอากาศ
- ควรตรวจสอบทุก 6 เดือน
## ปัญหาที่พบบ่อยและวิธีแก้ไข
### ปั๊มไม่ทำงาน
**สาเหตุ:**
- ไฟดับหรือสายไฟขาด
- สวิตช์เสีย
- มอเตอร์เสีย
**วิธีแก้:**
- ตรวจสอบไฟและสายไฟ
- เปลี่ยนสวิตช์
- เรียกช่างซ่อมมอเตอร์
### แรงดันน้ำต่ำ
**สาเหตุ:**
- ตัวกรองอุดตัน
- ท่อรั่ว
- ใบพัดสึกหรอ
**วิธีแก้:**
- ทำความสะอาดตัวกรอง
- ตรวจสอบและซ่อมท่อ
- เปลี่ยนใบพัด
### ปั๊มเปิด-ปิดบ่อย
**สาเหตุ:**
- ถังแรงดันอากาศรั่ว
- แผ่นไดอะแฟรมแตก
- วาล์วตรวจสอบแรงดันเสีย
**วิธีแก้:**
- เติมอากาศในถัง
- เปลี่ยนแผ่นไดอะแฟรม
- เปลี่ยนวาล์ว
### ปั๊มมีเสียงดังผิดปกติ
**สาเหตุ:**
- ลูกปืนเสีย
- ใบพัดชำรุด
- การติดตั้งไม่แน่นหนา
**วิธีแก้:**
- เปลี่ยนลูกปืน
- เปลี่ยนใบพัด
- ตรวจสอบการยึดแน่น
## ตารางการบำรุงรักษา
| รายการ | ความถี่ | หมายเหตุ |
|--------|---------|----------|
| ตรวจสอบสายไฟ | ทุกเดือน | มองหารอยชำรุด |
| ทำความสะอาดตัวกรอง | ทุก 3 เดือน | หรือเมื่อแรงดันลด |
| ตรวจสอบถังแรงดัน | ทุก 6 เดือน | เติมอากาศหากจำเป็น |
| ตรวจสอบสวิตช์ | ทุกปี | เปลี่ยนหากเสีย |
| ตรวจสอบใบพัด | ทุก 2 ปี | โดยช่างผู้เชี่ยวชาญ |
## เคล็ดลับการใช้งานปั๊มน้ำ
### ประหยัดไฟฟ้า
- เลือกขนาดปั๊มที่เหมาะสมกับการใช้งาน
- ติดตั้งถังแรงดันขนาดเหมาะสม
- หลีกเลี่ยงการเปิด-ปิดปั๊มบ่อย
### ป้องกันปัญหา
- อย่าให้ปั๊มแห้ง (ทำงานโดยไม่มีน้ำ)
- ตรวจสอบรอยรั่วอย่างสม่ำเสมอ
- ใช้ตัวกรองเพื่อป้องกันสิ่งสกปรก
### เมื่อต้องเปลี่ยนปั๊ม
- เลือกปั๊มที่มีคุณภาพ
- พิจารณาขนาดและกำลังที่เหมาะสม
- ติดตั้งโดยช่างผู้เชี่ยวชาญ
## สรุป
การบำรุงรักษาปั๊มน้ำอย่างสม่ำเสมอจะช่วยยืดอายุการใช้งาน ลดปัญหาการเสีย และประหยัดค่าใช้จ่ายในระยะยาว ควรตรวจสอบและบำรุงรักษาตามตารางที่กำหนด และหากพบปัญหาที่ไม่สามารถแก้ไขได้เอง ควรติดต่อช่างผู้เชี่ยวชาญ
---
**ต้องการซื้อปั๊มน้ำหรืออุปกรณ์เสริม?**
ติดต่อเราได้ที่:
- โทร: 090-555-1415
- LINE: jppselection
[ดูสินค้าปั๊มน้ำทั้งหมด](/ปั๊มน้ำ-pump)

File diff suppressed because it is too large Load Diff

View File

@@ -1,47 +0,0 @@
---
export interface Props {
title: string;
description?: string;
image?: string;
}
const { title, description, image } = Astro.props;
---
<!doctype html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="generator" content={Astro.generator} />
<meta name="description" content={description || 'บริษัท ดีล พลัส เทค จำกัด - ผู้เชี่ยวชาญด้านระบบน้ำ ท่อ PPR ตราช้าง ท่อพีพีอาร์ ท่อ HDPE'} />
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="alternate icon" href="/favicon.ico" sizes="any" />
<link rel="apple-touch-icon" href="/favicon.svg" />
<!-- Google Fonts: Kanit for Thai -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
<!-- SEO -->
<meta property="og:title" content={title} />
<meta property="og:description" content={description || 'Deal Plus Tech - ผู้เชี่ยวชาญด้านระบบน้ำ'} />
<meta property="og:image" content={image || '/og-image.jpg'} />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />
<title>{title} | ดีล พลัส เทค</title>
</head>
<body class="flex flex-col min-h-screen">
<slot />
</body>
</html>
<style is:global>
html {
font-family: 'Kanit', system-ui, sans-serif;
}
</style>

View File

@@ -1,42 +0,0 @@
// Utility functions migrated from Next.js
/**
* Combines class names conditionally (like clsx + tailwind-merge)
*/
export function cn(...classes: Array<string | false | null | undefined>): string {
return classes.filter(Boolean).join(' ');
}
/**
* Format price in Thai Baht
*/
export function formatPrice(price: number): string {
return new Intl.NumberFormat('th-TH', {
style: 'currency',
currency: 'THB',
}).format(price);
}
/**
* Format date to Thai locale
*/
export function formatDateThai(date: Date | string): string {
return new Intl.DateTimeFormat('th-TH', {
year: 'numeric',
month: 'long',
day: 'numeric',
}).format(new Date(date));
}
/**
* Generate slug from Thai text
*/
export function generateSlug(text: string): string {
return text
.toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^\w-]+/g, '')
.replace(/--+/g, '-')
.replace(/^-+/, '')
.replace(/-+$/, '');
}

View File

@@ -1,186 +0,0 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
import FloatingContact from '../components/FloatingContact.astro';
import { productCategories } from '../data/site-config';
// Featured products - key products for homepage
const featuredProducts = productCategories.filter(p =>
['ppr-elephant', 'hdpe', 'poloplast', 'syler', 'xylent'].includes(p.id)
).slice(0, 6);
---
<BaseLayout title="หน้าแรก" description="บริษัท ดีล พลัส เทค จำกัด - ผู้เชี่ยวชาญด้านระบบท่อและ HVAC">
<main>
<!-- Hero Section -->
<section class="relative h-[70vh] min-h-[500px] bg-secondary-900">
<div class="absolute inset-0 bg-gradient-to-r from-secondary-900 via-secondary-900/90 to-secondary-900/60 z-10" />
<img
src="/images/2021/03/ppr-pipe_000C.jpg"
alt="ท่อพีพีอาร์คุณภาพสูง"
class="absolute inset-0 w-full h-full object-cover opacity-50"
loading="eager"
/>
<div class="relative z-20 container mx-auto px-4 h-full flex items-center">
<div class="max-w-2xl">
<span class="inline-block px-4 py-2 bg-primary-600 text-white font-semibold mb-4 rounded">
ผู้เชี่ยวชาญด้านระบบท่อและ HVAC
</span>
<h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 leading-tight">
วัสดุท่อ อุปกรณ์ HVAC
<span class="text-primary-400 block">และฉนวนหุ้มท่อ</span>
</h1>
<p class="text-lg md:text-xl text-secondary-200 mb-8">
จำหน่ายและติดตั้งท่อ PPR, ท่อ HDPE, กริลแอร์, เทอร์โมเบรค และอุปกรณ์ระบบท่อครบวงจร พร้อมบริการให้คำปรึกษาจากทีมมืออาชีพ
</p>
<div class="flex flex-wrap gap-4">
<a href="/products/" class="btn-primary">
ดูสินค้าทั้งหมด
</a>
<a href="/contact-us/" class="btn-outline border-white text-white hover:bg-white hover:text-secondary-900">
ขอใบเสนอราคา
</a>
</div>
</div>
</div>
</section>
<!-- Features Section -->
<section class="py-16 bg-secondary-800">
<div class="container mx-auto px-4">
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="text-center p-6">
<div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4">
<svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width={2} d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z" />
</svg>
</div>
<h3 class="text-xl font-bold text-white mb-2">สินค้าคุณภาพ</h3>
<p class="text-secondary-300">
สินค้าทุกชิ้นผ่านมาตรฐานคุณภาพ พร้อมรับประกัน
</p>
</div>
<div class="text-center p-6">
<div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4">
<svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
</svg>
</div>
<h3 class="text-xl font-bold text-white mb-2">จัดส่งรวดเร็ว</h3>
<p class="text-secondary-300">
จัดส่งสินค้าทั่วประเทศ รวดเร็วและปลอดภัย
</p>
</div>
<div class="text-center p-6">
<div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4">
<svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width={2} d="M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" />
</svg>
</div>
<h3 class="text-xl font-bold text-white mb-2">บริการหลังการขาย</h3>
<p class="text-secondary-300">
ทีมงานพร้อมให้คำปรึกษาและดูแลอย่างต่อเนื่อง
</p>
</div>
</div>
</div>
</section>
<!-- Featured Products -->
<section class="py-16 bg-secondary-50">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold text-secondary-900 mb-4">
สินค้า<span class="text-primary-600">เด่น</span>
</h2>
<p class="text-secondary-600 text-lg">ผลิตภัณฑ์คุณภาพสูงที่ได้รับความนิยม</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{featuredProducts.map((product) => (
<a href={product.href} class="card group">
<div class="relative aspect-video bg-secondary-100 overflow-hidden">
<img
src={product.image}
alt={product.name}
class="object-cover w-full h-48 group-hover:scale-105 transition-transform duration-300"
loading="lazy"
/>
</div>
<div class="p-6">
<h3 class="text-lg font-bold text-secondary-900 group-hover:text-primary-600 transition-colors">
{product.name}
</h3>
<p class="mt-2 text-sm text-secondary-600 line-clamp-2">
{product.shortDescription || product.description}
</p>
<div class="mt-4 flex items-center text-primary-600 font-medium">
<span>ดูรายละเอียด</span>
<svg class="w-4 h-4 ml-2 group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width={2} d="M9 5l7 7-7 7" />
</svg>
</div>
</div>
</a>
))}
</div>
<div class="text-center mt-12">
<a href="/products/" class="btn-primary">
ดูสินค้าทั้งหมด
</a>
</div>
</div>
</section>
<!-- About Preview -->
<section class="py-16 bg-white">
<div class="container mx-auto px-4">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<div>
<h2 class="text-3xl md:text-4xl font-bold text-secondary-900 mb-6">
เกี่ยวกับ<span class="text-primary-600">เรา</span>
</h2>
<p class="text-lg text-secondary-600 mb-6">
บริษัท ดีล พลัส เทค จำกัด เราเป็นผู้เชียวชาญด้านระบบน้ำ ให้คำแนะนำและจำหน่ายท่อ PPR ตราช้าง ท่อพีพีอาร์ ท่อ PPR ท่อ HDPE Thai PPR คุณภาพสูง ราคาถูก
</p>
<p class="text-secondary-700 mb-8">
ด้วยประสบการณ์ยาวนาน เราพร้อมให้บริการสินค้าคุณภาพและคำแนะนำจากผู้เชี่ยวชาญ เพื่อให้งานระบบของคุณมีประสิทธิภาพสูงสุด
</p>
<a href="/about-us/" class="btn-secondary">
อ่านเพิ่มเติม
</a>
</div>
<div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden">
<img
src="/images/2021/03/ppr-pipe_000C.jpg"
alt="เกี่ยวกับดีลพลัสเทค"
class="object-cover w-full h-full"
loading="lazy"
/>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="py-16 bg-primary-600">
<div class="container mx-auto px-4 text-center">
<h2 class="text-3xl md:text-4xl font-bold text-white mb-4">
สนใจสินค้าหรือต้องการคำปรึกษา?
</h2>
<p class="text-xl text-primary-100 mb-8 max-w-2xl mx-auto">
ทีมงานของเราพร้อมให้คำแนะนำและช่วยคุณเลือกสินค้าที่เหมาะสมที่สุด
</p>
<div class="flex flex-wrap justify-center gap-4">
<a href="tel:090-555-1415" class="btn-secondary bg-white text-primary-600 hover:bg-primary-50">
โทร: 090-555-1415
</a>
<a href="https://line.me/ti/p/@dealplustech" target="_blank" rel="noopener" class="btn-outline border-white text-white hover:bg-white hover:text-primary-600">
เพิ่มเพื่อน LINE
</a>
</div>
</div>
</section>
</main>
<FloatingContact />
</BaseLayout>

View File

@@ -1,177 +0,0 @@
---
import { getCollection, render } from 'astro:content';
import BaseLayout from '../../layouts/BaseLayout.astro';
import { productCategories } from '../../data/site-config';
export async function getStaticPaths() {
const products = await getCollection('products');
return products.map((product) => ({
params: { slug: product.data.slug },
props: { product },
}));
}
interface Props {
product: CollectionEntry<'products'>;
}
const { product } = Astro.props;
const { Content } = await render(product);
// Get product tables from site-config
const productData = productCategories.find(p => p.id === product.data.id);
const productTables = productData?.productTables || [];
---
<BaseLayout title={product.data.name} description={product.data.shortDescription || product.data.description}>
<main class="py-12">
<article class="container mx-auto px-4 max-w-7xl">
<!-- Product Header -->
<header class="mb-12">
<h1 class="text-4xl md:text-5xl lg:text-6xl xl:text-7xl font-bold text-secondary-900 mb-6">
{product.data.name}
</h1>
<p class="text-lg md:text-xl lg:text-2xl xl:text-3xl text-secondary-600 max-w-4xl">
{product.data.description}
</p>
</header>
<!-- Content from Markdown -->
<div class="prose prose-lg md:prose-xl lg:prose-2xl max-w-none mb-12">
<Content />
</div>
<!-- Product Tables Section -->
{productTables.length > 0 && (
<section class="mb-12">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8 flex items-center gap-3">
<svg class="w-8 h-8 md:w-10 md:h-10 lg:w-12 lg:h-12 text-primary-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width={2} d="M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" />
</svg>
ตารางข้อมูลผลิตภัณฑ์
</h2>
<div class="space-y-10">
{productTables.map((table, tableIndex) => (
<div class="bg-white rounded-2xl border-2 border-secondary-200 shadow-lg">
<h3 class="text-lg md:text-xl lg:text-2xl font-semibold text-secondary-800 p-4 md:p-6 bg-secondary-50 border-b-2 border-secondary-200">
{table.tableName}
</h3>
<div class="w-full overflow-x-auto -mx-2 md:mx-0">
<div class="px-2 md:px-0">
<table class="w-full min-w-[600px] border-collapse">
<thead>
<tr class="bg-primary-100">
{table.headers.map((header, headerIndex) => (
<th class="px-3 py-2 md:px-4 md:py-3 text-left text-xs md:text-sm lg:text-base font-bold text-primary-800 border-b-2 border-primary-300 whitespace-nowrap">
{header}
</th>
))}
</tr>
</thead>
<tbody>
{table.rows.map((row, rowIndex) => (
<tr class={rowIndex % 2 === 0 ? 'bg-white' : 'bg-secondary-50'}>
{row.map((cell, cellIndex) => (
<td class="px-3 py-2 md:px-4 md:py-3 text-xs md:text-sm lg:text-base text-secondary-700 border-b border-secondary-100 break-words max-w-[200px] md:max-w-none">
{cell}
</td>
))}
</tr>
))}
</tbody>
</table>
</div>
</div>
</div>
))}
</div>
</section>
)})}
</tr>
</thead>
<tbody>
{table.rows.map((row, rowIndex) => (
<tr class={rowIndex % 2 === 0 ? 'bg-white' : 'bg-secondary-50'}>
{row.map((cell, cellIndex) => (
<td class="px-5 py-4 md:px-6 md:py-5 text-base md:text-lg lg:text-xl text-secondary-700 border-b border-secondary-100">
{cell}
</td>
))}
</tr>
))}
</tbody>
</table>
</div>
</div>
))}
</div>
</section>
)}
<!-- Specifications -->
{product.data.specifications && product.data.specifications.length > 0 && (
<section class="mb-12">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8">ข้อมูลจำเพาะ</h2>
<div class="bg-white rounded-2xl border-2 border-secondary-200 p-6 md:p-8 shadow-lg">
<dl class="grid grid-cols-1 md:grid-cols-2 gap-6">
{product.data.specifications.map((spec, index) => (
<div class="flex flex-col md:flex-row md:justify-between border-b border-secondary-100 pb-4">
<dt class="text-base md:text-lg lg:text-xl font-semibold text-secondary-700 mb-2 md:mb-0 md:mr-4">{spec.label}</dt>
<dd class="text-base md:text-lg lg:text-xl text-secondary-900">
{spec.value}
{spec.unit && <span class="text-secondary-500 ml-2">{spec.unit}</span>}
</dd>
</div>
))}
</dl>
</div>
</section>
)}
<!-- Features -->
{product.data.features && product.data.features.length > 0 && (
<section class="mb-12">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8">คุณสมบัติเด่น</h2>
<ul class="grid grid-cols-1 md:grid-cols-2 gap-6">
{product.data.features.map((feature, index) => (
<li class="flex items-start gap-4 bg-white p-6 rounded-xl border border-secondary-200 shadow">
<span class="text-2xl md:text-3xl text-primary-600 flex-shrink-0">✓</span>
<span class="text-base md:text-lg lg:text-xl text-secondary-700">{feature}</span>
</li>
))}
</ul>
</section>
)}
<!-- FAQ -->
{product.data.faq && product.data.faq.length > 0 && (
<section class="mb-12">
<h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8">คำถามที่พบบ่อย</h2>
<div class="space-y-6">
{product.data.faq.map((item, index) => (
<div class="bg-white rounded-2xl p-6 md:p-8 border-2 border-secondary-200 shadow">
<h3 class="text-xl md:text-2xl lg:text-3xl font-bold text-secondary-900 mb-4">{item.question}</h3>
<p class="text-base md:text-lg lg:text-xl text-secondary-700 leading-relaxed">{item.answer}</p>
</div>
))}
</div>
</section>
)}
</article>
</main>
</BaseLayout>
<style>
/* Responsive typography for large screens */
@media (min-width: 1280px) {
html {
font-size: 18px;
}
}
@media (min-width: 1536px) {
html {
font-size: 20px;
}
}
</style>

View File

@@ -1,5 +0,0 @@
{
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist"]
}

1
dist/_astro/consent-logs.DinS5Xvv.css vendored Normal file

File diff suppressed because one or more lines are too long

9
dist/admin/consent-logs/index.html vendored Normal file
View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="บริษัท ดีล พลัส เทค จำกัด"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><meta property="og:title" content="Consent Logs Admin"><meta property="og:description" content="Deal Plus Tech"><title>Consent Logs Admin | ดีล พลัส เทค</title><link rel="stylesheet" href="/_astro/consent-logs.DinS5Xvv.css"></head> <body class="flex flex-col min-h-screen"> <main class="min-h-screen py-12"> <div class="container mx-auto px-4 max-w-7xl"> <div class="bg-white rounded-2xl shadow-lg p-8"> <h1 class="text-3xl font-bold mb-2">Consent Logs Admin</h1> <p class="text-secondary-600 mb-8">PDPA Compliance - User Consent Records</p> <div class="max-w-md mx-auto"> <form method="POST" class="bg-secondary-50 p-6 rounded-xl"> <input type="hidden" name="action" value="login"> <label class="block text-sm font-semibold mb-2">Password</label> <input type="password" name="password" class="w-full px-4 py-2 border-2 rounded-lg mb-4" required> <button type="submit" class="w-full bg-primary-600 text-white py-2 rounded-lg hover:bg-primary-700">Login</button> </form> </div> </div> </div> </main> <div id="cookie-consent-banner" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t-2 border-primary-600 shadow-2xl p-6 md:p-8 transform translate-y-full transition-transform duration-300" style="display: none;"> <div class="container mx-auto px-4 max-w-7xl"> <div class="flex flex-col lg:flex-row gap-6 items-start lg:items-center justify-between"> <div class="flex-1"> <h2 class="text-xl md:text-2xl font-bold text-secondary-900 mb-3">
เรายึดถือความเป็นส่วนตัวของคุณ
</h2> <p class="text-base md:text-lg text-secondary-700 mb-4">
เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งาน คุณสามารถเลือกยอมรับหรือปฏิเสธได้
</p> <div class="space-y-3 mt-4"> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-essential" checked disabled class="w-5 h-5"> <label for="consent-essential" class="flex-1"> <span class="font-semibold">คุกกี้จำเป็น</span> <span class="text-sm text-secondary-600 block">ใช้สำหรับการทำงานของเว็บไซต์</span> </label> </div> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-analytics" class="w-5 h-5"> <label for="consent-analytics" class="flex-1"> <span class="font-semibold">คุกกี้วิเคราะห์ข้อมูล</span> <span class="text-sm text-secondary-600 block">ช่วยให้เราเข้าใจการใช้งาน</span> </label> </div> </div> </div> <div class="flex gap-3"> <button id="consent-reject" class="bg-secondary-800 hover:bg-secondary-900 text-white px-6 py-3 rounded-lg font-semibold">
ปฏิเสธทั้งหมด
</button> <button id="consent-accept" class="bg-primary-600 hover:bg-primary-700 text-white px-6 py-3 rounded-lg font-semibold">
ยอมรับทั้งหมด
</button> </div> </div> </div> </div> <script type="module">const n="1.0.0";function a(){const e=localStorage.getItem("consent-preferences");return e?JSON.parse(e):null}async function s(e){localStorage.setItem("consent-preferences",JSON.stringify(e));try{let t=sessionStorage.getItem("consent_session_id");t||(t="ses_"+Math.random().toString(36).substring(2,15),sessionStorage.setItem("consent_session_id",t)),await fetch("/api/consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t,consent:e,policyVersion:n})})}catch(t){console.error("Failed to log consent:",t)}}function i(){const e=document.getElementById("cookie-consent-banner");e&&(e.style.display="block",setTimeout(()=>e.classList.remove("translate-y-full"),10))}function o(){const e=document.getElementById("cookie-consent-banner");e&&(e.classList.add("translate-y-full"),setTimeout(()=>e.style.display="none",300))}function c(e){e.analytics}function r(){const e=a();if(e){document.getElementById("consent-analytics").checked=e.analytics,c(e);return}setTimeout(i,500)}document.addEventListener("DOMContentLoaded",()=>{r(),document.getElementById("consent-accept")?.addEventListener("click",()=>{const e=document.getElementById("consent-analytics").checked;s({essential:!0,analytics:e||!0,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),c({analytics:!0}),o()}),document.getElementById("consent-reject")?.addEventListener("click",()=>{s({essential:!0,analytics:!1,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),o()})});window.openConsentPreferences=()=>i();</script> </body></html>

12
dist/blog/index.html vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,119 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><meta property="og:title" content="ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม"><meta property="og:description" content="ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"><title>ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม | ดีล พลัส เทค</title><link rel="stylesheet" href="/_astro/consent-logs.DinS5Xvv.css"></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ท่อ HDPE</span> <time class="text-secondary-500"> 10 มกราคม 2567 </time> <span class="text-secondary-500"></span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/03/hdpe-pipe_000C.jpg" alt="ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ท่อ-hdpe-คืออะไร">ท่อ HDPE คืออะไร?</h2>
<p>ท่อ HDPE (High Density Polyethylene) หรือท่อเอชดีพีอี เป็นท่อที่ผลิตจากโพลิเอทิลีนความหนาแน่นสูง เป็นวัสดุพลาสติกที่มีความแข็งแรงและทนทานเป็นอย่างมาก</p>
<h2 id="ข้อดีของท่อ-hdpe">ข้อดีของท่อ HDPE</h2>
<h3 id="1-ความยืดหยุ่นสูง">1. ความยืดหยุ่นสูง</h3>
<p>ท่อ HDPE สามารถโค้งงอได้ถึง 45 องศา ทำให้เหมาะสำหรับพื้นที่ติดตั้งจำกัด และสามารถรองรับการเคลื่อนไหวของดินได้ดี</p>
<h3 id="2-ทนทานต่อสารเคมี">2. ทนทานต่อสารเคมี</h3>
<p>ท่อ HDPE ทนทานต่อการกัดกร่อนของสารเคมี กรด และด่าง ทำให้เหมาะสำหรับงานอุตสาหกรรม</p>
<h3 id="3-อายุการใช้งานยาวนาน">3. อายุการใช้งานยาวนาน</h3>
<p>ท่อ HDPE มีอายุการใช้งานมากกว่า 50 ปี เมื่อติดตั้งและใช้งานอย่างถูกต้อง</p>
<h3 id="4-น้ำหนักเบา">4. น้ำหนักเบา</h3>
<p>ท่อ HDPE มีน้ำหนักเบากว่าท่อโลหะ ทำให้ง่ายต่อการขนส่งและติดตั้ง</p>
<h3 id="5-การเชื่อมต่อที่แน่นหนา">5. การเชื่อมต่อที่แน่นหนา</h3>
<p>การเชื่อมท่อ HDPE ด้วยวิธี Butt Fusion ทำให้ท่อเชื่อมต่อกันเป็นเนื้อเดียว ไม่มีรอยต่อ ป้องกันการรั่วซึม</p>
<h3 id="6-ปลอดภัยต่อสุขภาพ">6. ปลอดภัยต่อสุขภาพ</h3>
<p>ท่อ HDPE ไม่เป็นสนิม ไม่ปล่อยสารพิษ ปลอดภัยสำหรับน้ำดื่ม</p>
<h2 id="การใช้งานท่อ-hdpe">การใช้งานท่อ HDPE</h2>
<h3 id="งานประปา">งานประปา</h3>
<ul>
<li>ท่อส่งน้ำประปา</li>
<li>ระบบประปาในบ้านเรือน</li>
<li>ระบบประปาในอาคาร</li>
</ul>
<h3 id="งานเกษตร">งานเกษตร</h3>
<ul>
<li>ระบบน้ำหยด</li>
<li>ระบบสปริงเกลอร์</li>
<li>ระบบน้ำเพื่อการเกษตร</li>
</ul>
<h3 id="งานอุตสาหกรรม">งานอุตสาหกรรม</h3>
<ul>
<li>ท่อส่งสารเคมี</li>
<li>ระบบบำบัดน้ำเสีย</li>
<li>งานโรงงานอุตสาหกรรม</li>
</ul>
<h3 id="งานโครงสร้างพื้นฐาน">งานโครงสร้างพื้นฐาน</h3>
<ul>
<li>งานท่อใต้ดิน</li>
<li>ท่อร้อยสายไฟ</li>
<li>งานสาธารณูปโภค</li>
</ul>
<h2 id="ขนาดท่อ-hdpe-ที่นิยมใช้">ขนาดท่อ HDPE ที่นิยมใช้</h2>
<table><thead><tr><th>ขนาด (มม.)</th><th>การใช้งาน</th></tr></thead><tbody><tr><td>16-32</td><td>งานประปาภายในบ้าน</td></tr><tr><td>40-63</td><td>งานประปาอาคารขนาดเล็ก</td></tr><tr><td>75-110</td><td>งานประปาอาคารขนาดใหญ่</td></tr><tr><td>125-315</td><td>งานท่อส่งน้ำหลัก</td></tr><tr><td>355-1200</td><td>งานโครงสร้างพื้นฐาน</td></tr></tbody></table>
<h2 id="เกรดของท่อ-hdpe">เกรดของท่อ HDPE</h2>
<h3 id="pe80">PE80</h3>
<ul>
<li>เหมาะสำหรับงานทั่วไป</li>
<li>ทนแรงดันสูงสุด 8 MPa</li>
</ul>
<h3 id="pe100">PE100</h3>
<ul>
<li>เหมาะสำหรับงานที่ต้องการความแข็งแรงสูง</li>
<li>ทนแรงดันสูงสุด 10 MPa</li>
<li>เป็นเกรดที่นิยมใช้ในปัจจุบัน</li>
</ul>
<h2 id="การติดตั้งท่อ-hdpe">การติดตั้งท่อ HDPE</h2>
<h3 id="วิธี-butt-fusion">วิธี Butt Fusion</h3>
<ol>
<li>ตัดท่อให้ตรง</li>
<li>ทำความสะอาดผิวท่อ</li>
<li>ใช้เครื่องเชื่อมท่อ HDPE</li>
<li>ให้ความร้อนจนผิวท่อละลาย</li>
<li>กดท่อเข้าด้วยกัน</li>
<li>รอให้เย็นตัวลง</li>
</ol>
<h3 id="วิธี-electrofusion">วิธี Electrofusion</h3>
<ol>
<li>ใช้ข้อต่อแบบ Electrofusion</li>
<li>เสียบปลั๊กไฟเข้ากับข้อต่อ</li>
<li>รอจนกระบวนการเชื่อมเสร็จสิ้น</li>
</ol>
<h2 id="สรุป">สรุป</h2>
<p>ท่อ HDPE เป็นตัวเลือกที่ยอดเยี่ยมสำหรับงานระบบน้ำ เนื่องจากมีความทนทาน ความยืดหยุ่น และอายุการใช้งานที่ยาวนาน ไม่ว่าจะเป็นงานประปา งานเกษตร หรืองานอุตสาหกรรม ท่อ HDPE สามารถตอบโจทย์ได้ทุกการใช้งาน</p>
<hr>
<p><strong>สนใจสินค้าท่อ HDPE?</strong>
ติดต่อเราได้ที่:</p>
<ul>
<li>โทร: 090-555-1415</li>
<li>LINE: jppselection</li>
</ul>
<p><a href="/%E0%B8%97%E0%B9%88%E0%B8%ADhdpe">ดูสินค้าท่อ HDPE ทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
กลับสู่หน้าบทความ
</a> </div> </article> </main> <div id="cookie-consent-banner" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t-2 border-primary-600 shadow-2xl p-6 md:p-8 transform translate-y-full transition-transform duration-300" style="display: none;"> <div class="container mx-auto px-4 max-w-7xl"> <div class="flex flex-col lg:flex-row gap-6 items-start lg:items-center justify-between"> <div class="flex-1"> <h2 class="text-xl md:text-2xl font-bold text-secondary-900 mb-3">
เรายึดถือความเป็นส่วนตัวของคุณ
</h2> <p class="text-base md:text-lg text-secondary-700 mb-4">
เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งาน คุณสามารถเลือกยอมรับหรือปฏิเสธได้
</p> <div class="space-y-3 mt-4"> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-essential" checked disabled class="w-5 h-5"> <label for="consent-essential" class="flex-1"> <span class="font-semibold">คุกกี้จำเป็น</span> <span class="text-sm text-secondary-600 block">ใช้สำหรับการทำงานของเว็บไซต์</span> </label> </div> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-analytics" class="w-5 h-5"> <label for="consent-analytics" class="flex-1"> <span class="font-semibold">คุกกี้วิเคราะห์ข้อมูล</span> <span class="text-sm text-secondary-600 block">ช่วยให้เราเข้าใจการใช้งาน</span> </label> </div> </div> </div> <div class="flex gap-3"> <button id="consent-reject" class="bg-secondary-800 hover:bg-secondary-900 text-white px-6 py-3 rounded-lg font-semibold">
ปฏิเสธทั้งหมด
</button> <button id="consent-accept" class="bg-primary-600 hover:bg-primary-700 text-white px-6 py-3 rounded-lg font-semibold">
ยอมรับทั้งหมด
</button> </div> </div> </div> </div> <script type="module">const n="1.0.0";function a(){const e=localStorage.getItem("consent-preferences");return e?JSON.parse(e):null}async function s(e){localStorage.setItem("consent-preferences",JSON.stringify(e));try{let t=sessionStorage.getItem("consent_session_id");t||(t="ses_"+Math.random().toString(36).substring(2,15),sessionStorage.setItem("consent_session_id",t)),await fetch("/api/consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t,consent:e,policyVersion:n})})}catch(t){console.error("Failed to log consent:",t)}}function i(){const e=document.getElementById("cookie-consent-banner");e&&(e.style.display="block",setTimeout(()=>e.classList.remove("translate-y-full"),10))}function o(){const e=document.getElementById("cookie-consent-banner");e&&(e.classList.add("translate-y-full"),setTimeout(()=>e.style.display="none",300))}function c(e){e.analytics}function r(){const e=a();if(e){document.getElementById("consent-analytics").checked=e.analytics,c(e);return}setTimeout(i,500)}document.addEventListener("DOMContentLoaded",()=>{r(),document.getElementById("consent-accept")?.addEventListener("click",()=>{const e=document.getElementById("consent-analytics").checked;s({essential:!0,analytics:e||!0,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),c({analytics:!0}),o()}),document.getElementById("consent-reject")?.addEventListener("click",()=>{s({essential:!0,analytics:!1,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),o()})});window.openConsentPreferences=()=>i();</script> </body></html>

View File

@@ -0,0 +1,71 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><meta property="og:title" content="ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน"><meta property="og:description" content="ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"><title>ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน | ดีล พลัส เทค</title><link rel="stylesheet" href="/_astro/consent-logs.DinS5Xvv.css"></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ท่อ PPR</span> <time class="text-secondary-500"> 15 มกราคม 2567 </time> <span class="text-secondary-500"></span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/03/hdpe_pipe_main.jpg" alt="ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ท่อ-ppr-คืออะไร">ท่อ PPR คืออะไร?</h2>
<p>ท่อ PPR (Polypropylene Random Copolymer) หรือท่อพีพีอาร์ เป็นท่อพลาสติกที่ผลิตจากเม็ดพลาสติก PP-R 80 (Polypropylene Random Copolymer 80) ซึ่งเป็นวัสดุพลาสติกคุณภาพสูงที่มีความแข็งแรงและทนทานเป็นอย่างดี</p>
<h2 id="ข้อดีของท่อ-ppr">ข้อดีของท่อ PPR</h2>
<h3 id="1-ทนแรงดันและอุณหภูมิสูง">1. ทนแรงดันและอุณหภูมิสูง</h3>
<p>ท่อ PPR สามารถทนแรงดันได้สูงถึง 20 บาร์ และทนต่ออุณหภูมิได้สูงถึง 95°C ทำให้เหมาะสำหรับใช้งานทั้งระบบน้ำเย็นและน้ำร้อน</p>
<h3 id="2-สะอาดและปลอดภัย">2. สะอาดและปลอดภัย</h3>
<p>ท่อ PPR ไม่เป็นสนิม ปราศจากโลหะหนักและสิ่งปนเปื้อน ทำให้น้ำที่ไหลผ่านสะอาดและปลอดภัยต่อการบริโภค</p>
<h3 id="3-อายุการใช้งานยาวนาน">3. อายุการใช้งานยาวนาน</h3>
<p>ด้วยคุณสมบัติที่ทนทาน ท่อ PPR มีอายุการใช้งานยาวนานกว่า 50 ปี</p>
<h3 id="4-ติดตั้งง่าย">4. ติดตั้งง่าย</h3>
<p>การเชื่อมต่อท่อ PPR ใช้วิธีเชื่อมด้วยความร้อน ทำให้ท่อและข้อต่อเป็นเนื้อเดียวกัน ไม่มีปัญหารั่วซึม</p>
<h3 id="5-ประหยัดพลังงาน">5. ประหยัดพลังงาน</h3>
<p>ท่อ PPR เป็นฉนวนกันความร้อนที่ดี ช่วยรักษาอุณหภูมิของน้ำได้ดีกว่าท่อโลหะ</p>
<h2 id="การเลือกท่อ-ppr-ที่เหมาะสม">การเลือกท่อ PPR ที่เหมาะสม</h2>
<h3 id="ขนาดท่อ">ขนาดท่อ</h3>
<p>เลือกขนาดท่อให้เหมาะสมกับปริมาณน้ำที่ต้องการใช้งาน:</p>
<ul>
<li>ท่อขนาด 20-25 มม. เหมาะสำหรับบ้านเรือนทั่วไป</li>
<li>ท่อขนาด 32-63 มม. เหมาะสำหรับอาคารขนาดใหญ่</li>
</ul>
<h3 id="เกรดของท่อ">เกรดของท่อ</h3>
<ul>
<li><strong>PN10</strong> - สำหรับน้ำเย็น ทนแรงดัน 10 บาร์</li>
<li><strong>PN16</strong> - สำหรับน้ำอุ่น ทนแรงดัน 16 บาร์</li>
<li><strong>PN20</strong> - สำหรับน้ำร้อน ทนแรงดัน 20 บาร์</li>
</ul>
<h2 id="การติดตั้งท่อ-ppr">การติดตั้งท่อ PPR</h2>
<h3 id="ขั้นตอนการเชื่อมท่อ">ขั้นตอนการเชื่อมท่อ</h3>
<ol>
<li>ตัดท่อให้ตรงและเรียบ</li>
<li>ทำความสะอาดผิวท่อและข้อต่อ</li>
<li>ใช้เครื่องเชื่อมท่ออุณหภูมิ 260°C</li>
<li>สอดท่อและข้อต่อเข้าด้วยกัน</li>
<li>รอให้เย็นตัวลงประมาณ 2-3 นาที</li>
</ol>
<h3 id="ข้อควรระวัง">ข้อควรระวัง</h3>
<ul>
<li>หลีกเลี่ยงการติดตั้งในพื้นที่ที่มีแสงแดดโดยตรง</li>
<li>ควรทิ้งระยะห่างสำหรับการขยายตัวของท่อ</li>
<li>ตรวจสอบความร้อนของเครื่องเชื่อมก่อนใช้งาน</li>
</ul>
<h2 id="ท่อ-ppr-ตราช้าง">ท่อ PPR ตราช้าง</h2>
<p>ท่อ PPR ตราช้าง เป็นท่อ PPR คุณภาพสูงที่ผลิตจากเม็ดพลาสติก PP-R 80 วัตถุดิบคุณภาพสูงมาตรฐานยุโรปจาก lyondellbasell</p>
<p><strong>คุณสมบัติเด่น:</strong></p>
<ul>
<li>ทนแรงดันได้สูงสุด 20 บาร์</li>
<li>ทนต่ออุณหภูมิได้สูงถึง 95°C</li>
<li>ผลิตตามมาตรฐาน DIN8077 และ DIN8078 ของประเทศเยอรมัน</li>
<li>รับประกันคุณภาพ</li>
</ul>
<h2 id="สรุป">สรุป</h2>
<p>ท่อ PPR เป็นตัวเลือกที่ดีสำหรับระบบประปาในปัจจุบัน เนื่องจากมีความทนทานสูง ติดตั้งง่าย และมีอายุการใช้งานยาวนาน หากคุณกำลังมองหาท่อสำหรับงานระบบน้ำ ท่อ PPR เป็นตัวเลือกที่คุ้มค่าและเหมาะสม</p>
<hr>
<p><strong>สนใจสินค้าท่อ PPR?</strong>
ติดต่อเราได้ที่:</p>
<ul>
<li>โทร: 090-555-1415</li>
<li>LINE: jppselection</li>
<li>อีเมล: <a href="mailto:dealplustech@gmail.com">dealplustech@gmail.com</a></li>
</ul>
<p><a href="/%E0%B8%97%E0%B9%88%E0%B8%AD%E0%B8%9E%E0%B8%B5%E0%B8%9E%E0%B8%B5%E0%B8%AD%E0%B8%B2%E0%B8%A3%E0%B9%8C%E0%B8%95%E0%B8%A3%E0%B8%B2%E0%B8%8A%E0%B9%89%E0%B8%B2%E0%B8%87">ดูสินค้าท่อ PPR ทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
กลับสู่หน้าบทความ
</a> </div> </article> </main> <div id="cookie-consent-banner" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t-2 border-primary-600 shadow-2xl p-6 md:p-8 transform translate-y-full transition-transform duration-300" style="display: none;"> <div class="container mx-auto px-4 max-w-7xl"> <div class="flex flex-col lg:flex-row gap-6 items-start lg:items-center justify-between"> <div class="flex-1"> <h2 class="text-xl md:text-2xl font-bold text-secondary-900 mb-3">
เรายึดถือความเป็นส่วนตัวของคุณ
</h2> <p class="text-base md:text-lg text-secondary-700 mb-4">
เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งาน คุณสามารถเลือกยอมรับหรือปฏิเสธได้
</p> <div class="space-y-3 mt-4"> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-essential" checked disabled class="w-5 h-5"> <label for="consent-essential" class="flex-1"> <span class="font-semibold">คุกกี้จำเป็น</span> <span class="text-sm text-secondary-600 block">ใช้สำหรับการทำงานของเว็บไซต์</span> </label> </div> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-analytics" class="w-5 h-5"> <label for="consent-analytics" class="flex-1"> <span class="font-semibold">คุกกี้วิเคราะห์ข้อมูล</span> <span class="text-sm text-secondary-600 block">ช่วยให้เราเข้าใจการใช้งาน</span> </label> </div> </div> </div> <div class="flex gap-3"> <button id="consent-reject" class="bg-secondary-800 hover:bg-secondary-900 text-white px-6 py-3 rounded-lg font-semibold">
ปฏิเสธทั้งหมด
</button> <button id="consent-accept" class="bg-primary-600 hover:bg-primary-700 text-white px-6 py-3 rounded-lg font-semibold">
ยอมรับทั้งหมด
</button> </div> </div> </div> </div> <script type="module">const n="1.0.0";function a(){const e=localStorage.getItem("consent-preferences");return e?JSON.parse(e):null}async function s(e){localStorage.setItem("consent-preferences",JSON.stringify(e));try{let t=sessionStorage.getItem("consent_session_id");t||(t="ses_"+Math.random().toString(36).substring(2,15),sessionStorage.setItem("consent_session_id",t)),await fetch("/api/consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t,consent:e,policyVersion:n})})}catch(t){console.error("Failed to log consent:",t)}}function i(){const e=document.getElementById("cookie-consent-banner");e&&(e.style.display="block",setTimeout(()=>e.classList.remove("translate-y-full"),10))}function o(){const e=document.getElementById("cookie-consent-banner");e&&(e.classList.add("translate-y-full"),setTimeout(()=>e.style.display="none",300))}function c(e){e.analytics}function r(){const e=a();if(e){document.getElementById("consent-analytics").checked=e.analytics,c(e);return}setTimeout(i,500)}document.addEventListener("DOMContentLoaded",()=>{r(),document.getElementById("consent-accept")?.addEventListener("click",()=>{const e=document.getElementById("consent-analytics").checked;s({essential:!0,analytics:e||!0,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),c({analytics:!0}),o()}),document.getElementById("consent-reject")?.addEventListener("click",()=>{s({essential:!0,analytics:!1,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),o()})});window.openConsentPreferences=()=>i();</script> </body></html>

View File

@@ -0,0 +1,163 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><meta property="og:title" content="การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน"><meta property="og:description" content="ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"><title>การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน | ดีล พลัส เทค</title><link rel="stylesheet" href="/_astro/consent-logs.DinS5Xvv.css"></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ปั๊มน้ำ</span> <time class="text-secondary-500"> 5 มกราคม 2567 </time> <span class="text-secondary-500"></span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/02/Water-Pump1.jpg" alt="การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ความสำคัญของการบำรุงรักษาปั๊มน้ำ">ความสำคัญของการบำรุงรักษาปั๊มน้ำ</h2>
<p>ปั๊มน้ำเป็นหัวใจของระบบน้ำในบ้าน การบำรุงรักษาอย่างสม่ำเสมอจะช่วย:</p>
<ul>
<li>ยืดอายุการใช้งานของปั๊มน้ำ</li>
<li>ลดปัญหาการเสีย</li>
<li>ประหยัดค่าไฟฟ้า</li>
<li>ป้องกันอุบัติเหตุจากการรั่วซึม</li>
</ul>
<h2 id="การบำรุงรักษาปั๊มน้ำแบบทำเอง">การบำรุงรักษาปั๊มน้ำแบบทำเอง</h2>
<h3 id="1-ตรวจสอบสายไฟและสวิตช์">1. ตรวจสอบสายไฟและสวิตช์</h3>
<ul>
<li>ตรวจสอบสายไฟว่ามีรอยชำรุดหรือไม่</li>
<li>ตรวจสอบสวิตช์ว่าทำงานปกติหรือไม่</li>
<li>หากพบความผิดปกติควรเรียกช่าง</li>
</ul>
<h3 id="2-ทำความสะอาดตัวกรอง">2. ทำความสะอาดตัวกรอง</h3>
<ul>
<li>ปิดวาล์วน้ำเข้าก่อนทำความสะอาด</li>
<li>ถอดตัวกรองออกมาล้าง</li>
<li>ตรวจสอบว่ามีสิ่งปนเปื้อนหรือไม่</li>
<li>ติดตั้งกลับเข้าที่เดิม</li>
</ul>
<h3 id="3-ตรวจสอบแรงดันน้ำ">3. ตรวจสอบแรงดันน้ำ</h3>
<ul>
<li>สังเกตแรงดันน้ำว่าลดลงหรือไม่</li>
<li>ตรวจสอบว่ามีเสียงผิดปกติหรือไม่</li>
<li>หากแรงดันลดลงอาจมีการรั่วซึม</li>
</ul>
<h3 id="4-ตรวจสอบถังแรงดัน-pressure-tank">4. ตรวจสอบถังแรงดัน (Pressure Tank)</h3>
<ul>
<li>ตรวจสอบว่าถังมีอากาศเพียงพอหรือไม่</li>
<li>หากปั๊มเปิด-ปิดบ่อยผิดปกติ อาจต้องเติมอากาศ</li>
<li>ควรตรวจสอบทุก 6 เดือน</li>
</ul>
<h2 id="ปัญหาที่พบบ่อยและวิธีแก้ไข">ปัญหาที่พบบ่อยและวิธีแก้ไข</h2>
<h3 id="ปั๊มไม่ทำงาน">ปั๊มไม่ทำงาน</h3>
<p><strong>สาเหตุ:</strong></p>
<ul>
<li>ไฟดับหรือสายไฟขาด</li>
<li>สวิตช์เสีย</li>
<li>มอเตอร์เสีย</li>
</ul>
<p><strong>วิธีแก้:</strong></p>
<ul>
<li>ตรวจสอบไฟและสายไฟ</li>
<li>เปลี่ยนสวิตช์</li>
<li>เรียกช่างซ่อมมอเตอร์</li>
</ul>
<h3 id="แรงดันน้ำต่ำ">แรงดันน้ำต่ำ</h3>
<p><strong>สาเหตุ:</strong></p>
<ul>
<li>ตัวกรองอุดตัน</li>
<li>ท่อรั่ว</li>
<li>ใบพัดสึกหรอ</li>
</ul>
<p><strong>วิธีแก้:</strong></p>
<ul>
<li>ทำความสะอาดตัวกรอง</li>
<li>ตรวจสอบและซ่อมท่อ</li>
<li>เปลี่ยนใบพัด</li>
</ul>
<h3 id="ปั๊มเปิด-ปิดบ่อย">ปั๊มเปิด-ปิดบ่อย</h3>
<p><strong>สาเหตุ:</strong></p>
<ul>
<li>ถังแรงดันอากาศรั่ว</li>
<li>แผ่นไดอะแฟรมแตก</li>
<li>วาล์วตรวจสอบแรงดันเสีย</li>
</ul>
<p><strong>วิธีแก้:</strong></p>
<ul>
<li>เติมอากาศในถัง</li>
<li>เปลี่ยนแผ่นไดอะแฟรม</li>
<li>เปลี่ยนวาล์ว</li>
</ul>
<h3 id="ปั๊มมีเสียงดังผิดปกติ">ปั๊มมีเสียงดังผิดปกติ</h3>
<p><strong>สาเหตุ:</strong></p>
<ul>
<li>ลูกปืนเสีย</li>
<li>ใบพัดชำรุด</li>
<li>การติดตั้งไม่แน่นหนา</li>
</ul>
<p><strong>วิธีแก้:</strong></p>
<ul>
<li>เปลี่ยนลูกปืน</li>
<li>เปลี่ยนใบพัด</li>
<li>ตรวจสอบการยึดแน่น</li>
</ul>
<h2 id="ตารางการบำรุงรักษา">ตารางการบำรุงรักษา</h2>
<table><thead><tr><th>รายการ</th><th>ความถี่</th><th>หมายเหตุ</th></tr></thead><tbody><tr><td>ตรวจสอบสายไฟ</td><td>ทุกเดือน</td><td>มองหารอยชำรุด</td></tr><tr><td>ทำความสะอาดตัวกรอง</td><td>ทุก 3 เดือน</td><td>หรือเมื่อแรงดันลด</td></tr><tr><td>ตรวจสอบถังแรงดัน</td><td>ทุก 6 เดือน</td><td>เติมอากาศหากจำเป็น</td></tr><tr><td>ตรวจสอบสวิตช์</td><td>ทุกปี</td><td>เปลี่ยนหากเสีย</td></tr><tr><td>ตรวจสอบใบพัด</td><td>ทุก 2 ปี</td><td>โดยช่างผู้เชี่ยวชาญ</td></tr></tbody></table>
<h2 id="เคล็ดลับการใช้งานปั๊มน้ำ">เคล็ดลับการใช้งานปั๊มน้ำ</h2>
<h3 id="ประหยัดไฟฟ้า">ประหยัดไฟฟ้า</h3>
<ul>
<li>เลือกขนาดปั๊มที่เหมาะสมกับการใช้งาน</li>
<li>ติดตั้งถังแรงดันขนาดเหมาะสม</li>
<li>หลีกเลี่ยงการเปิด-ปิดปั๊มบ่อย</li>
</ul>
<h3 id="ป้องกันปัญหา">ป้องกันปัญหา</h3>
<ul>
<li>อย่าให้ปั๊มแห้ง (ทำงานโดยไม่มีน้ำ)</li>
<li>ตรวจสอบรอยรั่วอย่างสม่ำเสมอ</li>
<li>ใช้ตัวกรองเพื่อป้องกันสิ่งสกปรก</li>
</ul>
<h3 id="เมื่อต้องเปลี่ยนปั๊ม">เมื่อต้องเปลี่ยนปั๊ม</h3>
<ul>
<li>เลือกปั๊มที่มีคุณภาพ</li>
<li>พิจารณาขนาดและกำลังที่เหมาะสม</li>
<li>ติดตั้งโดยช่างผู้เชี่ยวชาญ</li>
</ul>
<h2 id="สรุป">สรุป</h2>
<p>การบำรุงรักษาปั๊มน้ำอย่างสม่ำเสมอจะช่วยยืดอายุการใช้งาน ลดปัญหาการเสีย และประหยัดค่าใช้จ่ายในระยะยาว ควรตรวจสอบและบำรุงรักษาตามตารางที่กำหนด และหากพบปัญหาที่ไม่สามารถแก้ไขได้เอง ควรติดต่อช่างผู้เชี่ยวชาญ</p>
<hr>
<p><strong>ต้องการซื้อปั๊มน้ำหรืออุปกรณ์เสริม?</strong>
ติดต่อเราได้ที่:</p>
<ul>
<li>โทร: 090-555-1415</li>
<li>LINE: jppselection</li>
</ul>
<p><a href="/%E0%B8%9B%E0%B8%B1%E0%B9%8A%E0%B8%A1%E0%B8%99%E0%B9%89%E0%B8%B3-pump">ดูสินค้าปั๊มน้ำทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
กลับสู่หน้าบทความ
</a> </div> </article> </main> <div id="cookie-consent-banner" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t-2 border-primary-600 shadow-2xl p-6 md:p-8 transform translate-y-full transition-transform duration-300" style="display: none;"> <div class="container mx-auto px-4 max-w-7xl"> <div class="flex flex-col lg:flex-row gap-6 items-start lg:items-center justify-between"> <div class="flex-1"> <h2 class="text-xl md:text-2xl font-bold text-secondary-900 mb-3">
เรายึดถือความเป็นส่วนตัวของคุณ
</h2> <p class="text-base md:text-lg text-secondary-700 mb-4">
เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งาน คุณสามารถเลือกยอมรับหรือปฏิเสธได้
</p> <div class="space-y-3 mt-4"> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-essential" checked disabled class="w-5 h-5"> <label for="consent-essential" class="flex-1"> <span class="font-semibold">คุกกี้จำเป็น</span> <span class="text-sm text-secondary-600 block">ใช้สำหรับการทำงานของเว็บไซต์</span> </label> </div> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-analytics" class="w-5 h-5"> <label for="consent-analytics" class="flex-1"> <span class="font-semibold">คุกกี้วิเคราะห์ข้อมูล</span> <span class="text-sm text-secondary-600 block">ช่วยให้เราเข้าใจการใช้งาน</span> </label> </div> </div> </div> <div class="flex gap-3"> <button id="consent-reject" class="bg-secondary-800 hover:bg-secondary-900 text-white px-6 py-3 rounded-lg font-semibold">
ปฏิเสธทั้งหมด
</button> <button id="consent-accept" class="bg-primary-600 hover:bg-primary-700 text-white px-6 py-3 rounded-lg font-semibold">
ยอมรับทั้งหมด
</button> </div> </div> </div> </div> <script type="module">const n="1.0.0";function a(){const e=localStorage.getItem("consent-preferences");return e?JSON.parse(e):null}async function s(e){localStorage.setItem("consent-preferences",JSON.stringify(e));try{let t=sessionStorage.getItem("consent_session_id");t||(t="ses_"+Math.random().toString(36).substring(2,15),sessionStorage.setItem("consent_session_id",t)),await fetch("/api/consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t,consent:e,policyVersion:n})})}catch(t){console.error("Failed to log consent:",t)}}function i(){const e=document.getElementById("cookie-consent-banner");e&&(e.style.display="block",setTimeout(()=>e.classList.remove("translate-y-full"),10))}function o(){const e=document.getElementById("cookie-consent-banner");e&&(e.classList.add("translate-y-full"),setTimeout(()=>e.style.display="none",300))}function c(e){e.analytics}function r(){const e=a();if(e){document.getElementById("consent-analytics").checked=e.analytics,c(e);return}setTimeout(i,500)}document.addEventListener("DOMContentLoaded",()=>{r(),document.getElementById("consent-accept")?.addEventListener("click",()=>{const e=document.getElementById("consent-analytics").checked;s({essential:!0,analytics:e||!0,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),c({analytics:!0}),o()}),document.getElementById("consent-reject")?.addEventListener("click",()=>{s({essential:!0,analytics:!1,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),o()})});window.openConsentPreferences=()=>i();</script> </body></html>

View File

Before

Width:  |  Height:  |  Size: 655 B

After

Width:  |  Height:  |  Size: 655 B

View File

Before

Width:  |  Height:  |  Size: 749 B

After

Width:  |  Height:  |  Size: 749 B

29
dist/index.html vendored Normal file

File diff suppressed because one or more lines are too long

9
dist/privacy-policy/index.html vendored Normal file

File diff suppressed because one or more lines are too long

9
dist/products/index.html vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

133
dist/products/ท่อhdpe/index.html vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

9
dist/terms-and-conditions/index.html vendored Normal file
View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Terms &#38; Conditions"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><meta property="og:title" content="ข้อกำหนดการใช้งาน"><meta property="og:description" content="Terms &#38; Conditions"><title>ข้อกำหนดการใช้งาน | ดีล พลัส เทค</title><link rel="stylesheet" href="/_astro/consent-logs.DinS5Xvv.css"></head> <body class="flex flex-col min-h-screen"> <main class="py-12 bg-secondary-50 min-h-screen"> <article class="container mx-auto px-4 max-w-4xl"> <div class="bg-white rounded-2xl shadow-lg p-8 md:p-12"> <h1 class="text-4xl font-bold mb-4">ข้อกำหนดและเงื่อนไข</h1> <p class="text-lg text-secondary-600 mb-8">Terms & Conditions</p> <p class="text-sm text-secondary-500 mb-8">Version: 1.0.0 | 12 มีนาคม 2569</p> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">1. การยอมรับ</h2> <p class="text-secondary-700">การใช้เว็บไซต์แสดงว่ายอมรับข้อกำหนดนี้</p> </section> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">2. บริการ</h2> <p class="text-secondary-700 mb-2">จำหน่ายและให้คำปรึกษาเกี่ยวกับ:</p> <ul class="list-disc list-inside text-secondary-700"> <li>ท่อ PPR, ท่อ HDPE</li> <li>อุปกรณ์ระบบน้ำและ HVAC</li> <li>บริการหลังการขาย</li> </ul> </section> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">3. ทรัพย์สินทางปัญญา</h2> <p class="text-secondary-700">เนื้อหาทั้งหมดเป็นทรัพย์สินของบริษัทฯ ห้ามคัดลอกโดยไม่ได้รับอนุญาต</p> </section> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">4. ข้อผูกพันผู้ใช้</h2> <ul class="list-disc list-inside text-secondary-700 space-y-2"> <li>ใช้งานเพื่อวัตถุประสงค์ที่ชอบด้วยกฎหมาย</li> <li>ไม่ให้ข้อมูลที่เป็นเท็จ</li> <li>ไม่พยายามเข้าถึงระบบโดยไม่ได้รับอนุญาต</li> </ul> </section> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">5. ข้อจำกัดความรับผิด</h2> <div class="bg-secondary-50 p-6 rounded-xl border-l-4 border-accent-500"> <p class="text-secondary-700">บริษัทฯ ไม่รับผิดชอบต่อความเสียหายใดๆ ที่เกิดจากการใช้เว็บไซต์</p> </div> </section> <section class="mb-8"> <h2 class="text-2xl font-bold mb-4">6. กฎหมายที่ใช้บังคับ</h2> <p class="text-secondary-700">อยู่ภายใต้กฎหมายราชอาณาจักรไทย</p> </section> <section> <h2 class="text-2xl font-bold mb-4">7. ติดต่อ</h2> <div class="bg-primary-50 p-6 rounded-xl"> <p><strong>บริษัท ดีล พลัส เทค จำกัด</strong></p> <p>อีเมล: info@dealplustech.co.th</p> <p>โทร: 090-555-1415</p> </div> </section> </div> </article> </main> <div id="cookie-consent-banner" class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t-2 border-primary-600 shadow-2xl p-6 md:p-8 transform translate-y-full transition-transform duration-300" style="display: none;"> <div class="container mx-auto px-4 max-w-7xl"> <div class="flex flex-col lg:flex-row gap-6 items-start lg:items-center justify-between"> <div class="flex-1"> <h2 class="text-xl md:text-2xl font-bold text-secondary-900 mb-3">
เรายึดถือความเป็นส่วนตัวของคุณ
</h2> <p class="text-base md:text-lg text-secondary-700 mb-4">
เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งาน คุณสามารถเลือกยอมรับหรือปฏิเสธได้
</p> <div class="space-y-3 mt-4"> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-essential" checked disabled class="w-5 h-5"> <label for="consent-essential" class="flex-1"> <span class="font-semibold">คุกกี้จำเป็น</span> <span class="text-sm text-secondary-600 block">ใช้สำหรับการทำงานของเว็บไซต์</span> </label> </div> <div class="flex items-center gap-3 bg-secondary-50 p-3 rounded-lg"> <input type="checkbox" id="consent-analytics" class="w-5 h-5"> <label for="consent-analytics" class="flex-1"> <span class="font-semibold">คุกกี้วิเคราะห์ข้อมูล</span> <span class="text-sm text-secondary-600 block">ช่วยให้เราเข้าใจการใช้งาน</span> </label> </div> </div> </div> <div class="flex gap-3"> <button id="consent-reject" class="bg-secondary-800 hover:bg-secondary-900 text-white px-6 py-3 rounded-lg font-semibold">
ปฏิเสธทั้งหมด
</button> <button id="consent-accept" class="bg-primary-600 hover:bg-primary-700 text-white px-6 py-3 rounded-lg font-semibold">
ยอมรับทั้งหมด
</button> </div> </div> </div> </div> <script type="module">const n="1.0.0";function a(){const e=localStorage.getItem("consent-preferences");return e?JSON.parse(e):null}async function s(e){localStorage.setItem("consent-preferences",JSON.stringify(e));try{let t=sessionStorage.getItem("consent_session_id");t||(t="ses_"+Math.random().toString(36).substring(2,15),sessionStorage.setItem("consent_session_id",t)),await fetch("/api/consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t,consent:e,policyVersion:n})})}catch(t){console.error("Failed to log consent:",t)}}function i(){const e=document.getElementById("cookie-consent-banner");e&&(e.style.display="block",setTimeout(()=>e.classList.remove("translate-y-full"),10))}function o(){const e=document.getElementById("cookie-consent-banner");e&&(e.classList.add("translate-y-full"),setTimeout(()=>e.style.display="none",300))}function c(e){e.analytics}function r(){const e=a();if(e){document.getElementById("consent-analytics").checked=e.analytics,c(e);return}setTimeout(i,500)}document.addEventListener("DOMContentLoaded",()=>{r(),document.getElementById("consent-accept")?.addEventListener("click",()=>{const e=document.getElementById("consent-analytics").checked;s({essential:!0,analytics:e||!0,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),c({analytics:!0}),o()}),document.getElementById("consent-reject")?.addEventListener("click",()=>{s({essential:!0,analytics:!1,marketing:!1,timestamp:new Date().toISOString(),policyVersion:n}),o()})});window.openConsentPreferences=()=>i();</script> </body></html>

View File

@@ -1,446 +0,0 @@
{
"product": "DUKELARRSEN",
"tables": [
{
"tableName": "Rigid Coupling DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions A (mm)", "Dimensions B (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "2-M10 x 45", "57", "97", "300", "FM UL"],
["32", "1-1/4", "42.4", "2-M10 x 45", "67", "107.5", "300", "FM UL"],
["40", "1-1/2", "48.3", "2-M10 x 45", "72", "114", "300", "FM UL"],
["50", "2", "60.3", "2-M10 x 55", "85", "137", "300", "FM UL"],
["65", "2-1/2", "73.0", "2-M10 x 55", "98", "139", "300", "FM UL"],
["65", "2-1/2", "76.1", "2-M10 x 55", "100", "139", "300", "FM UL"],
["80", "3", "88.9", "2-M10 x 55", "114", "160", "300", "FM UL"],
["100", "4", "114.3", "2-M12 x 65", "147.2", "193", "300", "FM UL"],
["125", "5", "139.7", "2-M12 x 75", "170", "222", "300", "FM UL"],
["125", "5", "141.3", "2-M12 x 75", "170", "222", "300", "FM UL"],
["150", "6", "168.3", "2-M12 x 75", "203", "248", "300", "FM UL"],
["150", "6", "165.1", "2-M12 x 75", "205", "254", "300", "FM UL"],
["200", "8", "219.1", "2-M16 x 85", "257", "330", "300", "FM UL"],
["250", "10", "273.0", "2-M20 x 120", "328", "420", "300", "FM UL"],
["300", "12", "323.9", "2-M20 x 140", "380", "454", "300", "FM UL"]
]
},
{
"tableName": "Flexible Coupling DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions A (mm)", "Dimensions B (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "2-M10 x 45", "57", "97", "300", "FM UL"],
["32", "1-1/4", "42.4", "2-M10 x 45", "67", "107.5", "300", "FM UL"],
["40", "1-1/2", "48.3", "2-M10 x 45", "72", "114", "300", "FM UL"],
["50", "2", "60.3", "2-M10 x 55", "85", "137", "300", "FM UL"],
["65", "2-1/2", "73.0", "2-M10 x 55", "98", "139", "300", "FM UL"],
["65", "2-1/2", "76.1", "2-M10 x 55", "100", "139", "300", "FM UL"],
["80", "3", "88.9", "2-M10 x 55", "114", "160", "300", "FM UL"],
["100", "4", "114.3", "2-M12 x 66", "147.2", "193", "300", "FM UL"],
["125", "5", "139.7", "2-M12 x 75", "170", "222", "300", "FM UL"],
["125", "5", "141.3", "2-M12 x 75", "170", "222", "300", "FM UL"],
["150", "6", "168.3", "2-M12 x 75", "203", "248", "300", "FM UL"],
["150", "6", "165.1", "2-M12 x 75", "205", "254", "300", "FM UL"],
["200", "8", "219.1", "2-M16 x 85", "257", "330", "300", "FM UL"],
["250", "10", "273.0", "2-M20 x 120", "328", "420", "300", "FM UL"],
["300", "12", "323.9", "2-M20 x 140", "380", "454", "300", "FM UL"]
]
},
{
"tableName": "Reducing Flexible Coupling DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50 x 40", "2 x 1-1/2", "60.3 x 48.3", "2-M10 x 55", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73 x 60.3", "2-M10 x 55", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "2-M10 x 55", "300", "FM UL"],
["80 x 25", "3 x 1", "88.9 x 33.7", "2-M10 x 55", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "2-M10 x 55", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "2-M10 x 55", "300", "FM UL"],
["100 x 25", "4 x 1", "114.3 x 33.7", "2-M12 x 65", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "2-M12 x 65", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "2-M12 x 65", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 76.1", "2-M12 x 65", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "2-M12 x 65", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "2-M12 x 75", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "2-M12 x 75", "300", "FM UL"]
]
},
{
"tableName": "Flange PN16 Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions D (mm)", "Dimensions D1 (mm)", "Dimensions D2 (mm)", "t (mm)", "Hole", "Angle", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50", "2", "60.3", "2-M10 x 70", "220", "165", "125", "23", "4-Ø18", "30°", "300", "FM UL"],
["65", "2-1/2", "73.0", "2-M10 x 70", "235", "185", "145", "23", "4-Ø18", "30°", "300", "FM UL"],
["65", "2-1/2", "76.1", "2-M10 x 70", "235", "185", "145", "23", "4-Ø18", "30°", "300", "FM UL"],
["80", "3", "88.9", "2-M10 x 70", "255", "195", "160", "23", "4-Ø18", "30°", "300", "FM UL"],
["100", "4", "114.3", "2-M12 x 70", "279", "224", "180", "23", "4-Ø18", "30°", "300", "FM UL"],
["125", "5", "139.7", "2-M12 x 70", "320", "250", "216", "24", "8-Ø18", "30°", "300", "FM UL"],
["125", "5", "141.3", "2-M12 x 70", "320", "250", "216", "24", "8-Ø18", "30°", "300", "FM UL"],
["150", "6", "165.1", "2-M12 x 70", "346", "280", "240", "24", "8-Ø22", "30°", "300", "FM UL"],
["150", "6", "168.3", "2-M12 x 70", "346", "280", "240", "24", "8-Ø22", "30°", "300", "FM UL"],
["200", "8", "219.1", "2-M12 x 80", "414", "340", "295", "28", "8-Ø22", "30°", "300", "FM UL"],
["250", "10", "273.0", "2-M12 x 80", "480", "405", "355", "30", "12-Ø26", "50°", "300", "FM UL"],
["300", "12", "323.9", "2-M12 x 80", "530", "460", "410", "32", "12-Ø26", "30°", "300", "FM UL"]
]
},
{
"tableName": "Flange ANSI 150 Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions D (mm)", "Dimensions D1 (mm)", "Dimensions D2 (mm)", "t (mm)", "Hole", "Angle", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50", "2", "60.3", "2-M10 x 70", "220", "165", "121", "23", "4-Ø19", "300",", "30° "FM UL"],
["65", "2-1/2", "73.0", "2-M10 x 70", "235", "185", "140", "23", "4-Ø19", "30°", "300", "FM UL"],
["80", "3", "88.9", "2-M12 x 70", "255", "200", "152", "23", "4-Ø19", "30°", "300", "FM UL"],
["100", "4", "114.3", "2-M12 x 70", "279", "228", "191", "23", "4-Ø19", "30°", "300", "FM UL"],
["125", "5", "141.3", "2-M12 x 80", "320", "250", "216", "24", "8-Ø19", "30°", "300", "FM UL"],
["125", "5", "139.7", "2-M12 x 70", "320", "250", "216", "24", "8-Ø19", "30°", "300", "FM UL"],
["150", "6", "168.3", "2-M16 x 100", "346", "285", "241", "24", "8-Ø23", "30°", "300", "FM UL"],
["200", "8", "219.1", "2-M16 x 100", "414", "340", "299", "28", "8-Ø23", "30°", "300", "FM UL"]
]
},
{
"tableName": "Elbow 22.5° Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["40", "1-1/2", "48.3", "51", "300", "FM UL"],
["50", "2", "60.3", "51", "300", "FM UL"],
["65", "2-1/2", "73.0", "51", "300", "FM UL"],
["65", "2-1/2", "76.1", "51", "300", "FM UL"],
["80", "3", "88.9", "57", "300", "FM UL"],
["100", "4", "114.3", "73", "300", "FM UL"],
["125", "5", "139.7", "73", "300", "FM UL"],
["150", "6", "168.3", "79", "300", "FM UL"],
["150", "6", "165.1", "79", "300", "FM UL"],
["200", "8", "219.1", "98", "300", "FM UL"],
["250", "10", "273.0", "121", "300", "FM UL"],
["300", "12", "323.9", "146", "300", "FM UL"]
]
},
{
"tableName": "Elbow 45° Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "44", "300", "FM UL"],
["32", "1-1/4", "42.4", "44", "300", "FM UL"],
["40", "1-1/2", "48.3", "51", "300", "FM UL"],
["50", "2", "60.3", "57", "300", "FM UL"],
["65", "2-1/2", "73.0", "64", "300", "FM UL"],
["65", "2-1/2", "76.1", "64", "300", "FM UL"],
["80", "3", "88.9", "70", "300", "FM UL"],
["100", "4", "114.3", "89", "300", "FM UL"],
["125", "5", "139.7", "102", "300", "FM UL"],
["150", "6", "168.3", "114", "300", "FM UL"],
["150", "6", "165.1", "114", "300", "FM UL"],
["200", "8", "219.1", "146", "300", "FM UL"],
["250", "10", "273.0", "168", "300", "FM UL"],
["300", "12", "323.9", "203", "300", "FM UL"]
]
},
{
"tableName": "Elbow 90° Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "57", "300", "FM UL"],
["32", "1-1/4", "42.4", "67", "300", "FM UL"],
["40", "1-1/2", "48.3", "76", "300", "FM UL"],
["50", "2", "60.3", "89", "300", "FM UL"],
["65", "2-1/2", "73.0", "102", "300", "FM UL"],
["65", "2-1/2", "76.1", "102", "300", "FM UL"],
["80", "3", "88.9", "114", "300", "FM UL"],
["100", "4", "114.3", "140", "300", "FM UL"],
["125", "5", "141.3", "159", "300", "FM UL"],
["125", "5", "139.7", "159", "300", "FM UL"],
["150", "6", "168.3", "178", "300", "FM UL"],
["150", "6", "165.1", "178", "300", "FM UL"],
["200", "8", "219.1", "229", "300", "FM UL"],
["250", "10", "273.0", "279", "300", "FM UL"],
["300", "12", "323.9", "330", "300", "FM UL"]
]
},
{
"tableName": "Reducer (Concentric) Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["32 x 25", "1-1/4 x 1", "42.4 x 33.7", "300", "FM UL"],
["40 x 25", "1-1/2 x 1", "48.3 x 33.7", "300", "FM UL"],
["40 x 32", "1-1/2 x 1-1/4", "48.3 x 42.4", "300", "FM UL"],
["50 x 25", "2 x 1", "60.3 x 33.7", "300", "FM UL"],
["50 x 32", "2 x 1-1/4", "60.3 x 42.4", "300", "FM UL"],
["50 x 40", "2 x 1-1/2", "60.3 x 48.3", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "73.0 x 33.7", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "76.1 x 33.7", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "73.0 x 42.4", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "76.1 x 42.4", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "73.0 x 48.3", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "76.1 x 48.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73.0 x 60.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "300", "FM UL"],
["80 x 25", "3 x 1", "88.9 x 33.7", "300", "FM UL"],
["80 x 32", "3 x 1-1/4", "88.9 x 42.4", "300", "FM UL"],
["80 x 40", "3 x 1-1/2", "88.9 x 48.3", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 73.0", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "300", "FM UL"],
["100 x 32", "4 x 1-1/4", "114.3 x 42.4", "300", "FM UL"],
["100 x 40", "4 x 1-1/2", "114.3 x 48.3", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 76.1", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "300", "FM UL"],
["125 x 50", "5 x 2", "139.7 x 60.3", "300", "FM UL"],
["125 x 65", "5 x 2-1/2", "139.7 x 73.0", "300", "FM UL"],
["125 x 80", "5 x 3", "139.7 x 88.9", "300", "FM UL"],
["125 x 100", "5 x 4", "139.7 x 114.3", "300", "FM UL"],
["150 x 65", "6 x 2-1/2", "165.1 x 73.0", "300", "FM UL"],
["150 x 80", "6 x 3", "165.1 x 88.9", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "300", "FM UL"],
["150 x 100", "6 x 4", "165.1 x 114.3", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "300", "FM UL"],
["200 x 100", "8 x 4", "219.1 x 114.3", "300", "FM UL"],
["200 x 125", "8 x 5", "219.1 x 139.7", "300", "FM UL"],
["200 x 150", "8 x 6", "219.1 x 168.3", "300", "FM UL"],
["200 x 150", "8 x 6", "219.1 x 165.1", "300", "FM UL"],
["250 x 150", "10 x 6", "273.0 x 165.1", "300", "FM UL"],
["250 x 200", "10 x 8", "273.0 x 219.1", "300", "FM UL"]
]
},
{
"tableName": "Reducer (Eccentric) Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["80 x 50", "3 x 2", "88.9 x 60.3", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 76.1", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "300", "FM UL"],
["125 x 65", "5 x 2-1/2", "139.7 x 73.0", "300", "FM UL"],
["125 x 80", "5 x 3", "139.7 x 88.9", "300", "FM UL"],
["125 x 100", "5 x 4", "139.7 x 114.3", "300", "FM UL"],
["150 x 65", "6 x 2-1/2", "165.1 x 76.1", "300", "FM UL"],
["150 x 80", "6 x 3", "165.1 x 88.9", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "300", "FM UL"],
["150 x 100", "6 x 4", "165.1 x 114.3", "300", "FM UL"],
["200 x 80", "8 x 3", "219.1 x 88.9", "300", "FM UL"],
["200 x 100", "8 x 4", "219.1 x 114.3", "300", "FM UL"],
["200 x 125", "8 x 5", "219.1 x 139.7", "300", "FM UL"],
["200 x 150", "8 x 6", "219.1 x 168.3", "300", "FM UL"],
["200 x 150", "8 x 6", "219.1 x 165.1", "300", "FM UL"],
["250 x 150", "10 x 6", "273.0 x 165.1", "300", "FM UL"],
["250 x 200", "10 x 8", "273.0 x 219.1", "300", "FM UL"]
]
},
{
"tableName": "Tee Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "57", "300", "FM UL"],
["32", "1-1/4", "42.4", "67", "300", "FM UL"],
["40", "1-1/2", "48.3", "70", "300", "FM UL"],
["50", "2", "60.3", "70", "300", "FM UL"],
["65", "2-1/2", "73.0", "86", "300", "FM UL"],
["65", "2-1/2", "76.1", "86", "300", "FM UL"],
["80", "3", "88.9", "95", "300", "FM UL"],
["100", "4", "114.3", "102", "300", "FM UL"],
["125", "5", "139.7", "122", "300", "FM UL"],
["125", "5", "141.3", "122", "300", "FM UL"],
["150", "6", "168.3", "140", "300", "FM UL"],
["150", "6", "165.1", "140", "300", "FM UL"],
["200", "8", "219.1", "178", "300", "FM UL"],
["250", "10", "273.0", "216", "300", "FM UL"],
["300", "12", "323.9", "254", "300", "FM UL"]
]
},
{
"tableName": "Tee Reducing Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50 x 25", "2 x 1", "60.3 x 33.7", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "73.0 x 33.7", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "73.0 x 42.4", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "73.0 x 48.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73.0 x 60.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "300", "FM UL"],
["80 x 25", "3 x 1", "88.9 x 33.7", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "300", "FM UL"],
["100 x 25", "4 x 1", "114.3 x 33.7", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "300", "FM UL"],
["125 x 100", "5 x 4", "139.7 x 114.3", "300", "FM UL"],
["150 x 50", "6 x 2", "168.3 x 60.3", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "300", "FM UL"]
]
},
{
"tableName": "Tee Reducing (Threaded) Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50 x 25", "2 x 1", "60.3 x 33.7", "300", "FM UL"],
["50 x 32", "2 x 1-1/4", "60.3 x 42.4", "300", "FM UL"],
["50 x 40", "2 x 1-1/2", "60.3 x 48.3", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "73.0 x 33.7", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "76.1 x 33.7", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "73.0 x 42.4", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "76.1 x 42.4", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "73.0 x 48.3", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "76.1 x 48.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73.0 x 60.3", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "300", "FM UL"],
["80 x 25", "3 x 1", "88.9 x 33.7", "300", "FM UL"],
["80 x 32", "3 x 1-1/4", "88.9 x 42.4", "300", "FM UL"],
["80 x 40", "3 x 1-1/2", "88.9 x 48.3", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "300", "FM UL"],
["100 x 25", "4 x 1", "114.3 x 33.7", "300", "FM UL"],
["100 x 32", "4 x 1-1/4", "114.3 x 42.4", "300", "FM UL"],
["100 x 40", "4 x 1-1/2", "114.3 x 48.3", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 76.1", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "300", "FM UL"],
["125 x 25", "5 x 1", "139.7 x 33.7", "300", "FM UL"],
["125 x 32", "5 x 1-1/4", "139.7 x 42.4", "300", "FM UL"],
["125 x 40", "5 x 1-1/2", "139.7 x 48.3", "300", "FM UL"]
]
},
{
"tableName": "Cross Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50", "2", "60.3", "70", "300", "FM UL"],
["65", "2-1/2", "73.0", "86", "300", "FM UL"],
["65", "2-1/2", "76.1", "86", "300", "FM UL"],
["80", "3", "88.9", "95", "300", "FM UL"],
["100", "4", "114.3", "102", "300", "FM UL"],
["150", "6", "168.3", "140", "300", "FM UL"],
["150", "6", "165.1", "140", "300", "FM UL"],
["200", "8", "219.1", "178", "300", "FM UL"]
]
},
{
"tableName": "Cross Reducing Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["150 x 50", "6 x 2", "165.1 x 60.3", "300", "FM UL"],
["150 x 65", "6 x 2-1/2", "165.1 x 76.1", "300", "FM UL"],
["150 x 80", "6 x 3", "165.1 x 88.9", "300", "FM UL"],
["150 x 100", "6 x 4", "165.1 x 114.3", "300", "FM UL"],
["200 x 100", "8 x 4", "219.1 x 114.3", "300", "FM UL"]
]
},
{
"tableName": "Cap Grooved DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25", "1", "33.7", "23.8", "300", "FM UL"],
["32", "1-1/4", "42.4", "23.8", "300", "FM UL"],
["40", "1-1/2", "48.3", "23.8", "300", "FM UL"],
["50", "2", "60.3", "23.8", "300", "FM UL"],
["65", "2-1/2", "73.0", "23.8", "300", "FM UL"],
["65", "2-1/2", "76.1", "23.8", "300", "FM UL"],
["80", "3", "88.9", "23.8", "300", "FM UL"],
["100", "4", "114.3", "25.4", "300", "FM UL"],
["125", "5", "139.7", "25.4", "300", "FM UL"],
["150", "6", "168.3", "25.4", "300", "FM UL"],
["150", "6", "165.1", "25.4", "300", "FM UL"],
["200", "8", "219.1", "32", "300", "FM UL"],
["250", "10", "273.0", "32", "300", "FM UL"],
["300", "12", "323.9", "32", "300", "FM UL"]
]
},
{
"tableName": "Cap with Eccentric Hole DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Dimensions (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["80 x 25", "3 x 1", "88.9 x 33.7", "25", "300", "FM UL"],
["100 x 25", "4 x 1", "114.3 x 33.7", "25", "300", "FM UL"],
["150 x 25", "6 x 1", "165.1 x 33.7", "25", "300", "FM UL"]
]
},
{
"tableName": "Mechanical Tee (Grooved) DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions A (mm)", "Dimensions B (mm)", "Dimensions C (mm)", "Dimensions L (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50 x 32", "2 x 1-1/4", "60.3 x 42.4", "2-M10 x 70", "46", "75", "120", "70", "300", "FM UL"],
["50 x 40", "2 x 1-1/2", "60.3 x 48.3", "2-M10 x 70", "46", "75/120", "70", "69", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "73.0 x 42.4", "2-M10 x 70", "52", "93/137", "78", "77", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "73.0 x 48.3", "2-M10 x 70", "52", "93/137", "78", "63", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73.0 x 60.3", "2-M10 x 70", "52", "93/137", "78", "83", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "76.1 x 48.3", "2-M10 x 70", "52", "93/137", "78", "83", "300", "FM UL"],
["80 x 40", "3 x 1-1/2", "88.9 x 48.3", "2-M10 x 70", "46", "114/152", "85", "78", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "2-M10 x 70", "46", "114/152", "85", "93", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "2-M10 x 70", "64", "140", "180", "99", "300", "FM UL"],
["100 x 40", "4 x 1-1/2", "114.3 x 48.3", "2-M12 x 75", "46", "140/180", "97", "83", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "2-M12 x 75", "64", "140", "180", "99", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "2-M12 x 75", "64", "168", "220", "99", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "2-M12 x 75", "64", "168", "220", "113", "300", "FM UL"],
["125 x 65", "5 x 2-1/2", "139.7 x 73.0", "2-M12 x 75", "70", "168", "220", "122", "300", "FM UL"],
["125 x 80", "5 x 3", "139.7 x 88.9", "2-M12 x 75", "70", "194/248", "130", "83", "300", "FM UL"],
["125 x 100", "5 x 4", "139.7 x 114.3", "2-M12 x 75", "70", "194/248", "130", "98", "300", "FM UL"],
["150 x 65", "6 x 2-1/2", "168.3 x 73.0", "2-M12 x 75", "70", "198/248", "131", "122", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "2-M12 x 75", "70", "198/248", "131", "125", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "2-M12 x 75", "70", "198/248", "131", "139", "300", "FM UL"],
["150 x 80", "6 x 3", "165.1 x 88.9", "2-M12 x 75", "70", "250/311", "152", "130", "300", "FM UL"],
["150 x 100", "6 x 4", "165.1 x 114.3", "2-M12 x 75", "89", "250/311", "152", "137", "300", "FM UL"],
["200 x 100", "8 x 4", "219.1 x 114.3", "2-M16 x 100", "114", "250/321", "153", "162", "300", "FM UL"]
]
},
{
"tableName": "Mechanical Tee (Threaded) DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions A (mm)", "Dimensions B (mm)", "Dimensions C (mm)", "Dimensions L (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["50 x 25", "2 x 1", "60.3 x 33.7", "2-M10 x 70", "38", "75/120", "57", "69", "300", "FM UL"],
["50 x 32", "2 x 1-1/4", "60.3 x 42.4", "2-M10 x 70", "38", "75/120", "61", "68", "300", "FM UL"],
["50 x 40", "2 x 1-1/2", "60.3 x 48.3", "2-M10 x 70", "46", "75/120", "61", "83", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "73.0 x 33.7", "2-M10 x 70", "38", "93/139", "58", "54", "300", "FM UL"],
["65 x 32", "2-1/2 x 1-1/4", "73.0 x 42.4", "2-M10 x 70", "38", "93/139", "58", "54", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "73.0 x 48.3", "2-M10 x 70", "38", "93/139", "62", "77", "300", "FM UL"],
["65 x 40", "2-1/2 x 1-1/2", "76.1 x 48.3", "2-M10 x 70", "38", "102/144", "67", "77", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "73.0 x 60.3", "2-M10 x 70", "46", "93/139", "61", "83", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "2-M10 x 70", "46", "102/144", "67", "93", "300", "FM UL"],
["65 x 50", "2-1/2 x 2", "76.1 x 60.3", "2-M10 x 70", "51", "102/144", "67", "83", "300", "FM UL"],
["80 x 15", "3 x 1/2", "88.9 x 21.3", "2-M10 x 70", "38", "114/155", "59", "59", "300", "FM UL"],
["80 x 25", "3 x 1", "88.9 x 33.7", "2-M10 x 70", "46", "114/155", "73", "83", "300", "FM UL"],
["80 x 32", "3 x 1-1/4", "88.9 x 42.4", "2-M10 x 70", "46", "114/155", "73", "83", "300", "FM UL"],
["80 x 40", "3 x 1-1/2", "88.9 x 48.3", "2-M10 x 70", "64", "124/155", "78", "99", "300", "FM UL"],
["80 x 50", "3 x 2", "88.9 x 60.3", "2-M10 x 70", "64", "140/181", "93", "100", "300", "FM UL"],
["80 x 65", "3 x 2-1/2", "88.9 x 76.1", "2-M10 x 70", "70", "140/181", "93", "122", "300", "FM UL"],
["100 x 25", "4 x 1", "114.3 x 33.7", "2-M12 x 80", "38", "140/181", "95", "83", "300", "FM UL"],
["100 x 32", "4 x 1-1/4", "114.3 x 42.4", "2-M12 x 80", "38", "140/181", "95", "83", "300", "FM UL"],
["100 x 40", "4 x 1-1/2", "114.3 x 48.3", "2-M12 x 80", "51", "240/202", "95", "92", "300", "FM UL"],
["100 x 50", "4 x 2", "114.3 x 60.3", "2-M12 x 80", "64", "140/181", "93", "100", "300", "FM UL"],
["100 x 65", "4 x 2-1/2", "114.3 x 73.0", "2-M12 x 80", "70", "140/181", "93", "122", "300", "FM UL"],
["100 x 80", "4 x 3", "114.3 x 88.9", "2-M12 x 80", "70", "140/181", "93", "122", "300", "FM UL"],
["125 x 50", "5 x 2", "139.7 x 60.3", "2-M12 x 80", "38", "168/210", "100", "77", "300", "FM UL"],
["125 x 65", "5 x 2-1/2", "139.7 x 73.0", "2-M12 x 80", "64", "168/220", "103", "100", "300", "FM UL"],
["125 x 80", "5 x 3", "139.7 x 88.9", "2-M12 x 80", "64", "198/248", "120", "77", "300", "FM UL"],
["125 x 100", "5 x 4", "139.7 x 114.3", "2-M12 x 80", "64", "198/248", "120", "99", "300", "FM UL"],
["150 x 80", "6 x 3", "168.3 x 88.9", "2-M12 x 80", "89", "198/248", "128/136", "229", "300", "FM UL"],
["150 x 100", "6 x 4", "168.3 x 114.3", "2-M12 x 80", "89", "198/248", "128", "136", "300", "FM UL"]
]
},
{
"tableName": "Mechanical Tee (U-Bolt) DUKELARRSEN",
"headers": ["Nominal Size (mm)", "Nominal Size (in)", "Pipe OD (mm)", "Bolt Size", "Dimensions A (mm)", "Dimensions B (mm)", "Dimensions C (mm)", "Dimensions L (mm)", "Working Pressure (PSI)", "Certificate"],
"rows": [
["25 x 15", "1 x 1/2", "33.7 x 21.3", "M10 x 70", "24", "76", "59", "43", "300", "FM UL"],
["25 x 20", "1 x 3/4", "33.7 x 26.7", "M10 x 70", "24", "76", "59", "43", "300", "FM UL"],
["25 x 25", "1 x 1", "33.7 x 33.7", "M10 x 70", "24", "76", "59", "54", "300", "FM UL"],
["32 x 15", "1-1/4 x 1/2", "42.4 x 21.3", "M10 x 78", "30", "88", "42", "22", "300", "FM UL"],
["32 x 20", "1-1/4 x 3/4", "42.4 x 26.7", "M10 x 78", "30", "88", "42", "26", "300", "FM UL"],
["32 x 25", "1-1/4 x 1", "42.4 x 33.7", "M10 x 78", "30", "88", "54", "26", "300", "FM UL"],
["40 x 15", "1-1/2 x 1/2", "48.3 x 21.3", "M10 x 78", "30", "106", "54", "59", "300", "FM UL"],
["40 x 20", "1-1/2 x 3/4", "48.3 x 26.7", "M10 x 78", "30", "106", "54", "59", "300", "FM UL"],
["40 x 25", "1-1/2 x 1", "48.3 x 33.7", "M10 x 78", "30", "106", "58", "59", "300", "FM UL"],
["50 x 15", "2 x 1/2", "60.3 x 21.3", "M10 x 92", "30", "120", "54", "50", "300", "FM UL"],
["50 x 20", "2 x 3/4", "60.3 x 26.7", "M10 x 92", "30", "120", "56", "50", "300", "FM UL"],
["50 x 25", "2 x 1", "60.3 x 33.7", "M10 x 92", "30", "120", "66", "59", "300", "FM UL"],
["65 x 15", "2-1/2 x 1/2", "73.0 x 21.3", "M10 x 108", "30", "139", "67", "50", "300", "FM UL"],
["65 x 15", "2-1/2 x 1/2", "76.1 x 21.3", "M10 x 108", "30", "138", "58", "52", "300", "FM UL"],
["65 x 20", "2-1/2 x 3/4", "73.0 x 26.7", "M10 x 108", "30", "139", "67", "52", "300", "FM UL"],
["65 x 20", "2-1/2 x 3/4", "76.1 x 26.7", "M10 x 108", "30", "138", "58", "52", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "73.0 x 33.7", "M10 x 108", "30", "139", "70", "50", "300", "FM UL"],
["65 x 25", "2-1/2 x 1", "76.1 x 33.7", "M10 x 108", "30", "138", "74", "58", "300", "FM UL"]
]
}
]
}

View File

@@ -1,164 +0,0 @@
{
"name": "ระบบวาล์วเติมอากาศ DURGO AVVs",
"nameEn": "DURGO Air Admittance Valves (AVVs)",
"description": "วาล์วเติมอากาศ DURGO AVVs นวัตกรรมระดับโลกที่ประเทศชั้นนําเลือกใช้ ด้วยผลิตภัณฑ์คุณภาพจากยุโรป เชียวชาญเทคโนโลยีระบบวาล์วทั้งด้านการผลิต การออกแบบวางระบบทางด้านอุตสาหกรรมทําความร้อนและระบบสุขาภิบาลตั้งแต่ปี 1921 จนเป็นที่ยอมรับ ได้สิทธิบัตรมากมายจากทุกทวีปทั่วโลก สามารถตอบโจทย์แก้ปัณหาระบบท่ออากาศแบบเก่าได้อย่างแท้จริง ทดแทนท่อระบายอากาศของระบบท่อน้ำทิ้งแบบเก่าจะช่วยเพิ่มประสิทธิภาพของการเติมอากาศเข้าระบบและช่วยป้องกันไม่ให้น้าถูกดึงออกจาก Trap (ตัวดักกลิ่น) ซึ่งเป็นสาเหตุหลักของการเกิดกลิ่นเหม็นและลดการแพร่เชื้อโรคที่มากับอากาศภายในระบบท่อน้้าทิ้งได้อย่างดี",
"features": [
"ลดค่าใช้จ่าย - วัสดุท่อนําทิ้ง ค่าแรง และลดระยะเวลาในการก่อสร้าง",
"มั่นใจได้ - จากการยอมรับและการใช้งานในต่างประเทศมานานกว่า 50 ปี",
"เพิ่มมูลค่า - สามารถลดปริมาณหรือไม่ต้องใช้ท่ออากาศภายในอาคาร ลดขนาดช่องชาร์ปทําให้เพิ่มพื้นที่ขายและพื้นที่ใช้สอยได้มากขึ้น",
"ยับยั้งการลามไฟ - เมื่อเกิดเหตุเพลิงไหม้ เพราะอากาศเข้าในอาคารน้อยลงเมื่อเทียบกับระบบเก่า",
"ลดกลิ่น - ในระบบเก่ามักมีปัญหากลิ่นเหม็นจากระบบท่อนํ้าทิ้งทั้งภายในอาคารและนอกอาคาร",
"ตอบโจทย์ทุกการใช้งาน - สินค้าหลากหลายติดตั้งกับท่อประเภทต่างๆ (มาตรฐาน EN/JIS) ได้ทุกชนิด",
"ป้องกันเชื้อโรค - ที่ปะปนมากับอากาศภายในท่อนําทิ้งระบบเก่าไม่ให้แพร่กระจายเข้าสู่ห้องพักส่วนต่างๆภายในอาคารได้",
"ลดอัตราการถ่ายเทอากาศ - ในขณะที่ระบบไม่ถูกใช้งานจึงทําให้น้ำใน Trap (ตัวดักกลิ่น) ระเหยช้าลงและไม่ถูกดูดออกไป ซึ่งจะเป็นสาเหตุหลักของการเกิดกลิ่นเหม็น",
"ผลิตจากพลาสติก ABS ทำให้มีความแข็งแรง และซีลยางผลิตจาก EPDM เพื่ออายุการใช้งานที่ยาวนาน",
"ใช้หลักการตามธรรมชาติของความสมคุลแรงดันในระบบ ไม่ใช้ระบบไฟฟ้าหรือเครื่องกล จึงไม่มีความจําเป็นต้องบํารุงรักษาเป็นพิเศษ"
],
"specifications": [
{"label": "วัสดุตัวเรือน", "value": "พลาสติก ABS"},
{"label": "วัสดุซีลยาง", "value": "EPDM"},
{"label": "มาตรฐาน", "value": "EN 12380, JIS, SHASE (ญี่ปุ่น)"},
{"label": "ประเภท", "value": "Type A1, Type B1"}
],
"applications": [
"ระบบระบายน้ำฝนและนํ้าทิ้งในโครงการที่พักอาศัย",
"โรงแรมและอาคารสํานักงาน",
"ระบบท่อน้ำทิ้งแบบ Single Stack",
"ระบบท่อระบายน้ำแนวตั้ง (Main Stack)",
"ระบบท่อระบายน้ำแนวนอน (Branch Pipe)",
"ท่อ PVC มาตรฐาน JIS",
"ท่อ XYLENT, PE, PP มาตรฐาน EN"
],
"products": [
{
"model": "AAV-NPT1",
"connectionType": "Male Thread 1\"",
"flowCapacity": "7.5 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "67 mm", "D": "54 mm", "Dia": "Thread 1\""}
},
{
"model": "AAV-40",
"connectionType": "Straight End",
"flowCapacity": "13.0 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "77 mm", "D": "70 mm", "Dia": "40 mm"}
},
{
"model": "AAV-50",
"connectionType": "Straight End",
"flowCapacity": "17.0 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "95 mm", "D": "84 mm", "Dia": "50 mm"}
},
{
"model": "AAV-60",
"connectionType": "Straight End",
"flowCapacity": "17.2 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "95 mm", "D": "84 mm", "Dia": "60 mm"}
},
{
"model": "AAV-75",
"connectionType": "Straight End",
"flowCapacity": "37.0 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "106 mm", "D": "119 mm", "Dia": "75 mm"}
},
{
"model": "AAV-89",
"connectionType": "Straight End",
"flowCapacity": "47.5 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type A1",
"dimensions": {"H": "119 mm", "D": "139 mm", "Dia": "89 mm"}
},
{
"model": "AAV-110",
"connectionType": "Straight End",
"flowCapacity": "44.2 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type B1",
"dimensions": {"H": "124 mm", "D": "139 mm", "Dia": "110 mm"}
},
{
"model": "AAV-114",
"connectionType": "Straight End",
"flowCapacity": "72.2 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type B1",
"dimensions": {"H": "113 mm", "D": "172 mm", "Dia": "114 mm"}
},
{
"model": "AAV-140",
"connectionType": "Straight End",
"flowCapacity": "103.4 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type B1",
"dimensions": {"H": "149 mm", "D": "211 mm", "Dia": "140 mm"}
},
{
"model": "AAV-160",
"connectionType": "Straight End",
"flowCapacity": "103.7 l/s",
"colour": "Black/White",
"standard": "EN 12380 Type B1",
"dimensions": {"H": "152 mm", "D": "211 mm", "Dia": "160 mm"}
}
],
"selectionCriteria": {
"pvcJis": {
"mainStack": [
{"pipeSize": "3\"", "durgo": "AAV-89"},
{"pipeSize": "4\"", "durgo": "AAV-114"},
{"pipeSize": "6\" หรือขนาดใหญ่กว่า", "durgo": "AAV-140"}
],
"branchPipe": [
{"pipeSize": "2\"", "durgo": "AAV-NPT1"},
{"pipeSize": "2-1/2\"", "durgo": "AAV-50"},
{"pipeSize": "3\"", "durgo": "AAV-50"},
{"pipeSize": "4\"", "durgo": "AAV-60"},
{"pipeSize": "6\"", "durgo": "AAV-89"}
]
},
"xylentEn": {
"mainStack": [
{"pipeSize": "3\"", "durgo": "AAV-75"},
{"pipeSize": "4\"", "durgo": "AAV-110"},
{"pipeSize": "6\" หรือขนาดใหญ่กว่า", "durgo": "AAV-160"}
],
"branchPipe": [
{"pipeSize": "2\"", "durgo": "AAV-40"},
{"pipeSize": "3\"", "durgo": "AAV-50"},
{"pipeSize": "4\"", "durgo": "AAV-50"},
{"pipeSize": "6\"", "durgo": "AAV-75"}
]
}
},
"installationRequirements": [
"การติดตั้งวาล์วเติมอากาศ DURGO AVVs จะต้องตั้งฉากกับระดับนํ้า ค่าความคลาดเคลื่อนในการติดตั้งไม่ควรเอียงเกิน 5 องศา และห้ามติดตั้งในแนวนอนเด็ดขาด",
"ในการออกแบบ ต้องคํานึงถึงตําแหน่งในการติดตั้ง ไม่ควรติดตั้งวาล์วเติมอากาศ DURGO AVVs ในบริเวณที่อับอากาศและไม่ควรติดตั้งในที่ที่มีอากาศเสีย ปล่องควัน หรือที่ที่มีก๊าซอันตราย",
"วาส์วเติมอากาศ DURGO AVVs ควรติดตั้งในอาคาร หากติดตั้งภายนอกอาคาร ต้องมีวัสดุกันแสงแดดหรืออลูมิเนียมอัลลอยป้องกันบริเวณหัววาล์วเติมอากาศ",
"การติดตั้งวาล์วเติมอากาศ DURGO AVVs ห้ามติดตั้งตํากว่าระดับ Flood Level ของอุปกรณ์สุขภัณฑ์ 1 เมตร",
"เมื่อประกอบวาล์วเข้ากับท่อระบายนํ้าเรียบร้อยแล้ว และยังอยู่ในระหว่างการก่อสร้าง ต้องครอบด้วยถุงพลาสติก รัดให้แน่น เพื่อป้องกันฝุ่นหรือเศษผงที่เกิดขึ้นระหว่างการก่อสร้างไปติดบริเวณซีลยาง EPDM",
"ควรเตรียมช่องเปิดสําหรับการบํารุงรักษา ขนาด 300 mm x 300 mm ขึ้นไป"
],
"workingPrinciple": [
"ขณะที่แรงดันของระบบสมดุล ยังไม่มีการระบายน้ำเสีย แรงดันของอากาศปกติจะกดแผ่น Disc Valve และแผ่นซีลยาง EPDM ให้ปิดสนิท กลิ่นเหม็นและเชื้อโรคภายในท่อระบายน้ำเสียจะไม่สามารถแพร่ออกสู่ภายนอกได้",
"เมื่อมีการระบายน้ำจะทําให้แรงดันในระบบเสียสมดุลและเกิดแรงดันลบในระบบ เมื่อแรงดันลบมีค่ามากพอจะทําให้แผ่นชีลยาง EPDM และแผ่น Disc Valve ยกต้วขึ้น (วาล์วเปิด) และเติมอากาศเข้าไปในระบบ",
"เมื่อการระบายน้ำเสร็จสิ้น แรงดันลบในระบบลดน้อยลง ระบบกลับสู่สมดุล แผ่นซีลยาง EPDM และแผ่น Disc Valve จะตกมาที่ตําแหน่งเดิม (วาล์วปิด) กลับสู่สภาวะปกติ"
],
"contact": {
"company": "บริษัท ดีล พลัส เทค จำกัด",
"address": "9/70 ซอยนครลุง 17 แขวงบางไผ่ เขตบางแค กทม. 10160",
"telephone": "090-555-1415",
"email": "dealplustech@gmail.com",
"lineId": "Jppselection",
"freeDelivery": "ส่งสินค้าฟรี กรุงเทพมหานคร ปริมณฑล"
}
}

View File

@@ -1,84 +0,0 @@
{
"product": "HVAC Products",
"tables": [
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "AAV Series Specifications",
"headers": ["Model", "Connection Type", "Flow Capacity (l/s)", "Colour", "EN 12380 Standard Compliance"],
"rows": [
["AAV-75", "Straight End", "37.0", "Black/White", "Type A1"],
["AAV-89", "Straight End", "47.5", "Black/White", "Type A1"],
["AAV-110", "Straight End", "44.2", "Black/White", "Type B1"],
["AAV-114", "Straight End", "72.2", "Black/White", "Type B1"],
["AAV-140", "Straight End", "103.4", "Black/White", "Type B1"],
["AAV-160", "Straight End", "103.7", "Black/White", "Type B1"]
]
},
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "Product Dimensions Specification",
"headers": ["Product Code", "H (mm)", "D (mm)", "Dia. (mm)"],
"rows": [
["AAV-NPT1", "67", "54", "Thread 1\""],
["AAV-40", "77", "70", "40"],
["AAV-50", "95", "84", "50"],
["AAV-60", "95", "84", "60"],
["AAV-75", "106", "119", "75"],
["AAV-89", "119", "139", "89"],
["AAV-110", "124", "139", "110"],
["AAV-114", "113", "172", "114"],
["AAV-140", "149", "211", "140"],
["AAV-160", "152", "211", "160"]
]
},
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "Selection Criteria - PVC Pipes (JIS Standard) - Main Stack",
"headers": ["Pipe Size", "DURGO Model"],
"rows": [
["3\"", "AAV-89"],
["4\"", "AAV-114"],
["6\" or larger", "AAV-140"]
]
},
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "Selection Criteria - PVC Pipes (JIS Standard) - Branch Pipe",
"headers": ["Pipe Size", "DURGO Model"],
"rows": [
["2\"", "AAV-NPT1"],
["2-1/2\"", "AAV-50"],
["3\"", "AAV-50"],
["4\"", "AAV-60"],
["6\"", "AAV-89"]
]
},
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "Selection Criteria - XYLENT, PE, PP Pipes (EN Standard) - Main Stack",
"headers": ["Pipe Size", "DURGO Model"],
"rows": [
["3\"", "AAV-75"],
["4\"", "AAV-110"],
["6\" or larger", "AAV-160"]
]
},
{
"productName": "DURGO AAVs (Air Admittance Valve)",
"tableName": "Selection Criteria - XYLENT, PE, PP Pipes (EN Standard) - Branch Pipe",
"headers": ["Pipe Size", "DURGO Model"],
"rows": [
["2\"", "AAV-40"],
["3\"", "AAV-50"],
["4\"", "AAV-50"],
["6\"", "AAV-75"]
]
}
],
"notes": {
"airGrilles": "No specification tables found on /grilles/ page - only product descriptions and images",
"ballJetDiffuser": "No specification tables found on /หัวจ่ายแอร์-ball-jet/ page - only product descriptions and images",
"thermobreak": "No specification tables found on /เทอร์โมเบรค-thermobreak/ page - only product descriptions and images",
"durgoAirValve": "Found specification tables embedded in images on /durgo-avvs/ page - extracted 6 tables total"
}
}

View File

@@ -1,88 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
// Only use standalone output in production (causes issues in dev mode)
...(process.env.NODE_ENV === 'production' && { output: 'standalone' }),
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'www.dealplustech.co.th',
},
{
protocol: 'https',
hostname: 'dealplustech.co.th',
},
{
protocol: 'https',
hostname: 'www.dealplustech.com',
},
{
protocol: 'https',
hostname: 'dealplustech.com',
},
],
dangerouslyAllowSVG: true,
contentDispositionType: 'attachment',
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
formats: ['image/avif', 'image/webp'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
},
experimental: {
optimizePackageImports: ['clsx', 'tailwind-merge'],
},
reactStrictMode: true,
async headers() {
return [
{
source: '/(.*)',
headers: [
{
key: 'X-Frame-Options',
value: 'DENY',
},
{
key: 'X-Content-Type-Options',
value: 'nosniff',
},
{
key: 'Referrer-Policy',
value: 'origin-when-cross-origin',
},
],
},
{
source: '/images/(.*)',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
{
source: '/favicon-(.*)',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
{
source: '/og-image.jpg',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
];
},
};
export default nextConfig;

1
node_modules/.astro/data-store.json generated vendored Normal file

File diff suppressed because one or more lines are too long

1
node_modules/.bin/astro-consent generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../astro-consent/dist/cli.cjs

View File

@@ -137,7 +137,6 @@
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
"integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
"ideallyInert": true,
"license": "MIT",
"optional": true,
"dependencies": {
@@ -1118,6 +1117,181 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@libsql/client": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.17.0.tgz",
"integrity": "sha512-TLjSU9Otdpq0SpKHl1tD1Nc9MKhrsZbCFGot3EbCxRa8m1E5R1mMwoOjKMMM31IyF7fr+hPNHLpYfwbMKNusmg==",
"license": "MIT",
"dependencies": {
"@libsql/core": "^0.17.0",
"@libsql/hrana-client": "^0.9.0",
"js-base64": "^3.7.5",
"libsql": "^0.5.22",
"promise-limit": "^2.7.0"
}
},
"node_modules/@libsql/core": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.17.0.tgz",
"integrity": "sha512-hnZRnJHiS+nrhHKLGYPoJbc78FE903MSDrFJTbftxo+e52X+E0Y0fHOCVYsKWcg6XgB7BbJYUrz/xEkVTSaipw==",
"license": "MIT",
"dependencies": {
"js-base64": "^3.7.5"
}
},
"node_modules/@libsql/darwin-arm64": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.22.tgz",
"integrity": "sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@libsql/darwin-x64": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.22.tgz",
"integrity": "sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==",
"cpu": [
"x64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@libsql/hrana-client": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.9.0.tgz",
"integrity": "sha512-pxQ1986AuWfPX4oXzBvLwBnfgKDE5OMhAdR/5cZmRaB4Ygz5MecQybvwZupnRz341r2CtFmbk/BhSu7k2Lm+Jw==",
"license": "MIT",
"dependencies": {
"@libsql/isomorphic-ws": "^0.1.5",
"cross-fetch": "^4.0.0",
"js-base64": "^3.7.5",
"node-fetch": "^3.3.2"
}
},
"node_modules/@libsql/isomorphic-ws": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz",
"integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==",
"license": "MIT",
"dependencies": {
"@types/ws": "^8.5.4",
"ws": "^8.13.0"
}
},
"node_modules/@libsql/linux-arm-gnueabihf": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.22.tgz",
"integrity": "sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==",
"cpu": [
"arm"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/linux-arm-musleabihf": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.22.tgz",
"integrity": "sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==",
"cpu": [
"arm"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/linux-arm64-gnu": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.22.tgz",
"integrity": "sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==",
"cpu": [
"arm64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/linux-arm64-musl": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.22.tgz",
"integrity": "sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==",
"cpu": [
"arm64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/linux-x64-gnu": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.22.tgz",
"integrity": "sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==",
"cpu": [
"x64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/linux-x64-musl": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.22.tgz",
"integrity": "sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==",
"cpu": [
"x64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@libsql/win32-x64-msvc": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.22.tgz",
"integrity": "sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==",
"cpu": [
"x64"
],
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@neon-rs/load": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz",
"integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==",
"license": "MIT"
},
"node_modules/@oslojs/encoding": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
@@ -1884,12 +2058,30 @@
"@types/unist": "*"
}
},
"node_modules/@types/node": {
"version": "25.4.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz",
"integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.18.0"
}
},
"node_modules/@types/unist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT"
},
"node_modules/@types/ws": {
"version": "8.18.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@ungap/structured-clone": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
@@ -2118,6 +2310,21 @@
"sharp": "^0.34.0"
}
},
"node_modules/astro-consent": {
"version": "1.0.17",
"resolved": "https://registry.npmjs.org/astro-consent/-/astro-consent-1.0.17.tgz",
"integrity": "sha512-CxebtdACUZmYdZcDoe0fEvu8EubEinpEYhI1Dobdeinl5a0exBGw2RSYeH1HM6k54AmS7R7BMwZTBX3oAuzImg==",
"license": "MIT",
"bin": {
"astro-consent": "dist/cli.cjs"
},
"engines": {
"node": ">=18.0.0"
},
"peerDependencies": {
"astro": "^4.0.0 || ^5.0.0"
}
},
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
@@ -2330,6 +2537,35 @@
"integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==",
"license": "MIT"
},
"node_modules/cross-fetch": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
"integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
"license": "MIT",
"dependencies": {
"node-fetch": "^2.7.0"
}
},
"node_modules/cross-fetch/node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/crossws": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
@@ -2425,6 +2661,15 @@
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
"license": "CC0-1.0"
},
"node_modules/data-uri-to-buffer": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
"integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
"license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -2598,6 +2843,131 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/drizzle-orm": {
"version": "0.45.1",
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.1.tgz",
"integrity": "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==",
"license": "Apache-2.0",
"peerDependencies": {
"@aws-sdk/client-rds-data": ">=3",
"@cloudflare/workers-types": ">=4",
"@electric-sql/pglite": ">=0.2.0",
"@libsql/client": ">=0.10.0",
"@libsql/client-wasm": ">=0.10.0",
"@neondatabase/serverless": ">=0.10.0",
"@op-engineering/op-sqlite": ">=2",
"@opentelemetry/api": "^1.4.1",
"@planetscale/database": ">=1.13",
"@prisma/client": "*",
"@tidbcloud/serverless": "*",
"@types/better-sqlite3": "*",
"@types/pg": "*",
"@types/sql.js": "*",
"@upstash/redis": ">=1.34.7",
"@vercel/postgres": ">=0.8.0",
"@xata.io/client": "*",
"better-sqlite3": ">=7",
"bun-types": "*",
"expo-sqlite": ">=14.0.0",
"gel": ">=2",
"knex": "*",
"kysely": "*",
"mysql2": ">=2",
"pg": ">=8",
"postgres": ">=3",
"sql.js": ">=1",
"sqlite3": ">=5"
},
"peerDependenciesMeta": {
"@aws-sdk/client-rds-data": {
"optional": true
},
"@cloudflare/workers-types": {
"optional": true
},
"@electric-sql/pglite": {
"optional": true
},
"@libsql/client": {
"optional": true
},
"@libsql/client-wasm": {
"optional": true
},
"@neondatabase/serverless": {
"optional": true
},
"@op-engineering/op-sqlite": {
"optional": true
},
"@opentelemetry/api": {
"optional": true
},
"@planetscale/database": {
"optional": true
},
"@prisma/client": {
"optional": true
},
"@tidbcloud/serverless": {
"optional": true
},
"@types/better-sqlite3": {
"optional": true
},
"@types/pg": {
"optional": true
},
"@types/sql.js": {
"optional": true
},
"@upstash/redis": {
"optional": true
},
"@vercel/postgres": {
"optional": true
},
"@xata.io/client": {
"optional": true
},
"better-sqlite3": {
"optional": true
},
"bun-types": {
"optional": true
},
"expo-sqlite": {
"optional": true
},
"gel": {
"optional": true
},
"knex": {
"optional": true
},
"kysely": {
"optional": true
},
"mysql2": {
"optional": true
},
"pg": {
"optional": true
},
"postgres": {
"optional": true
},
"prisma": {
"optional": true
},
"sql.js": {
"optional": true
},
"sqlite3": {
"optional": true
}
}
},
"node_modules/dset": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
@@ -2735,6 +3105,29 @@
}
}
},
"node_modules/fetch-blob": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
"integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/jimmywarting"
},
{
"type": "paypal",
"url": "https://paypal.me/jimmywarting"
}
],
"license": "MIT",
"dependencies": {
"node-domexception": "^1.0.0",
"web-streams-polyfill": "^3.0.3"
},
"engines": {
"node": "^12.20 || >= 14.13"
}
},
"node_modules/flattie": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
@@ -2765,12 +3158,23 @@
"node": ">=20"
}
},
"node_modules/formdata-polyfill": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
"license": "MIT",
"dependencies": {
"fetch-blob": "^3.1.2"
},
"engines": {
"node": ">=12.20.0"
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
"ideallyInert": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3117,6 +3521,12 @@
"jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/js-base64": {
"version": "3.7.8",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz",
"integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==",
"license": "BSD-3-Clause"
},
"node_modules/js-yaml": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
@@ -3138,6 +3548,47 @@
"node": ">=6"
}
},
"node_modules/libsql": {
"version": "0.5.22",
"resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.22.tgz",
"integrity": "sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==",
"cpu": [
"x64",
"arm64",
"wasm32",
"arm"
],
"license": "MIT",
"os": [
"darwin",
"linux",
"win32"
],
"dependencies": {
"@neon-rs/load": "^0.0.4",
"detect-libc": "2.0.2"
},
"optionalDependencies": {
"@libsql/darwin-arm64": "0.5.22",
"@libsql/darwin-x64": "0.5.22",
"@libsql/linux-arm-gnueabihf": "0.5.22",
"@libsql/linux-arm-musleabihf": "0.5.22",
"@libsql/linux-arm64-gnu": "0.5.22",
"@libsql/linux-arm64-musl": "0.5.22",
"@libsql/linux-x64-gnu": "0.5.22",
"@libsql/linux-x64-musl": "0.5.22",
"@libsql/win32-x64-msvc": "0.5.22"
}
},
"node_modules/libsql/node_modules/detect-libc": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
"license": "Apache-2.0",
"engines": {
"node": ">=8"
}
},
"node_modules/lightningcss": {
"version": "1.31.1",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
@@ -4295,6 +4746,44 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/node-domexception": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
"deprecated": "Use your platform's native DOMException instead",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/jimmywarting"
},
{
"type": "github",
"url": "https://paypal.me/jimmywarting"
}
],
"license": "MIT",
"engines": {
"node": ">=10.5.0"
}
},
"node_modules/node-fetch": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
"license": "MIT",
"dependencies": {
"data-uri-to-buffer": "^4.0.0",
"fetch-blob": "^3.1.4",
"formdata-polyfill": "^4.0.10"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/node-fetch"
}
},
"node_modules/node-fetch-native": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
@@ -4502,6 +4991,12 @@
"node": ">=6"
}
},
"node_modules/promise-limit": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz",
"integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==",
"license": "ISC"
},
"node_modules/prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -5055,6 +5550,12 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/trim-lines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@@ -5099,7 +5600,6 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"ideallyInert": true,
"license": "0BSD",
"optional": true
},
@@ -5147,6 +5647,12 @@
"integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
"license": "MIT"
},
"node_modules/undici-types": {
"version": "7.18.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"license": "MIT"
},
"node_modules/unified": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
@@ -6023,6 +6529,31 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/web-streams-polyfill": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
"integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
"license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which-pm-runs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
@@ -6064,6 +6595,27 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/ws": {
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
"integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xxhash-wasm": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",

View File

@@ -1,25 +1,25 @@
{
"hash": "bd82ba1f",
"configHash": "06117f6a",
"lockfileHash": "503a0907",
"browserHash": "4ee2f0da",
"hash": "4fe7beb6",
"configHash": "0447bcbf",
"lockfileHash": "746a67c5",
"browserHash": "6b663b28",
"optimized": {
"astro > cssesc": {
"src": "../../cssesc/cssesc.js",
"file": "astro___cssesc.js",
"fileHash": "ac027a7e",
"fileHash": "f71ee3cc",
"needsInterop": true
},
"astro > aria-query": {
"src": "../../aria-query/lib/index.js",
"file": "astro___aria-query.js",
"fileHash": "e77ce3d0",
"fileHash": "802b04fa",
"needsInterop": true
},
"astro > axobject-query": {
"src": "../../axobject-query/lib/index.js",
"file": "astro___axobject-query.js",
"fileHash": "052bb1ed",
"fileHash": "5fe72762",
"needsInterop": true
}
},

Some files were not shown because too many files have changed in this diff Show More