Initial commit: New MoreminiMore website with fresh design
42
.astro/collections/blog.schema.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pubDate": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tags": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imagePrompt": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"$schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"title",
|
||||||
|
"description",
|
||||||
|
"pubDate",
|
||||||
|
"author",
|
||||||
|
"category",
|
||||||
|
"tags"
|
||||||
|
]
|
||||||
|
}
|
||||||
1
.astro/content-assets.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
1
.astro/content-modules.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
162
.astro/content.d.ts
vendored
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
declare module 'astro:content' {
|
||||||
|
export interface RenderResult {
|
||||||
|
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
||||||
|
headings: import('astro').MarkdownHeading[];
|
||||||
|
remarkPluginFrontmatter: Record<string, any>;
|
||||||
|
}
|
||||||
|
interface Render {
|
||||||
|
'.md': Promise<RenderResult>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RenderedContent {
|
||||||
|
html: string;
|
||||||
|
metadata?: {
|
||||||
|
imagePaths: Array<string>;
|
||||||
|
[key: string]: unknown;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
||||||
|
|
||||||
|
export type CollectionKey = keyof DataEntryMap;
|
||||||
|
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
|
||||||
|
|
||||||
|
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
||||||
|
|
||||||
|
export type ReferenceDataEntry<
|
||||||
|
C extends CollectionKey,
|
||||||
|
E extends keyof DataEntryMap[C] = string,
|
||||||
|
> = {
|
||||||
|
collection: C;
|
||||||
|
id: E;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
||||||
|
collection: C;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => entry is E,
|
||||||
|
): Promise<E[]>;
|
||||||
|
export function getCollection<C extends keyof DataEntryMap>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => unknown,
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter?: LiveLoaderCollectionFilterType<C>,
|
||||||
|
): Promise<
|
||||||
|
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
||||||
|
>;
|
||||||
|
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
entry: ReferenceDataEntry<C, E>,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
id: E,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? string extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]> | undefined
|
||||||
|
: Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter: string | LiveLoaderEntryFilterType<C>,
|
||||||
|
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
||||||
|
|
||||||
|
/** Resolve an array of entry references from the same collection */
|
||||||
|
export function getEntries<C extends keyof DataEntryMap>(
|
||||||
|
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function render<C extends keyof DataEntryMap>(
|
||||||
|
entry: DataEntryMap[C][string],
|
||||||
|
): Promise<RenderResult>;
|
||||||
|
|
||||||
|
export function reference<
|
||||||
|
C extends
|
||||||
|
| keyof DataEntryMap
|
||||||
|
// Allow generic `string` to avoid excessive type errors in the config
|
||||||
|
// if `dev` is not running to update as you edit.
|
||||||
|
// Invalid collection names will be caught at build time.
|
||||||
|
| (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
): import('astro/zod').ZodPipe<
|
||||||
|
import('astro/zod').ZodString,
|
||||||
|
import('astro/zod').ZodTransform<
|
||||||
|
C extends keyof DataEntryMap
|
||||||
|
? {
|
||||||
|
collection: C;
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
: never,
|
||||||
|
string
|
||||||
|
>
|
||||||
|
>;
|
||||||
|
|
||||||
|
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
||||||
|
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
|
||||||
|
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
||||||
|
>;
|
||||||
|
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
|
||||||
|
type InferLoaderSchema<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
|
||||||
|
> = L extends { schema: import('astro/zod').ZodSchema }
|
||||||
|
? import('astro/zod').infer<L['schema']>
|
||||||
|
: any;
|
||||||
|
|
||||||
|
type DataEntryMap = {
|
||||||
|
"blog": Record<string, {
|
||||||
|
id: string;
|
||||||
|
body?: string;
|
||||||
|
collection: "blog";
|
||||||
|
data: InferEntrySchema<"blog">;
|
||||||
|
rendered?: RenderedContent;
|
||||||
|
filePath?: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
||||||
|
infer TData,
|
||||||
|
infer TEntryFilter,
|
||||||
|
infer TCollectionFilter,
|
||||||
|
infer TError
|
||||||
|
>
|
||||||
|
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
||||||
|
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
||||||
|
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
||||||
|
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
||||||
|
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
||||||
|
|
||||||
|
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
LiveContentConfig['collections'][C]['schema'] extends undefined
|
||||||
|
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
||||||
|
: import('astro/zod').infer<
|
||||||
|
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
||||||
|
>;
|
||||||
|
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
||||||
|
LiveContentConfig['collections'][C]['loader']
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ContentConfig = typeof import("../src/content.config.js");
|
||||||
|
export type LiveContentConfig = never;
|
||||||
|
}
|
||||||
0
.astro/content.db
Normal file
4
.astro/integrations/astro_db/db.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
// This file is generated by Astro DB
|
||||||
|
declare module 'astro:db' {
|
||||||
|
|
||||||
|
}
|
||||||
3
.astro/types.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/// <reference types="astro/client" />
|
||||||
|
/// <reference path="integrations/astro_db/db.d.ts" />
|
||||||
|
/// <reference path="content.d.ts" />
|
||||||
15
Dockerfile
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
FROM node:20-alpine AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm ci
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
FROM node:20-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm ci --production
|
||||||
|
COPY --from=builder /app/dist ./dist
|
||||||
|
RUN mkdir -p public/icons
|
||||||
|
EXPOSE 4321
|
||||||
|
CMD ["node", "dist/server/entry.mjs"]
|
||||||
20
astro.config.mjs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
import sitemap from '@astrojs/sitemap';
|
||||||
|
import node from '@astrojs/node';
|
||||||
|
import db from '@astrojs/db';
|
||||||
|
import tailwindcss from '@tailwindcss/vite';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
site: 'https://www.moreminimore.com',
|
||||||
|
output: 'server',
|
||||||
|
adapter: node({
|
||||||
|
mode: 'standalone',
|
||||||
|
}),
|
||||||
|
integrations: [
|
||||||
|
sitemap(),
|
||||||
|
db(),
|
||||||
|
],
|
||||||
|
vite: {
|
||||||
|
plugins: [tailwindcss()],
|
||||||
|
},
|
||||||
|
});
|
||||||
0
data/consent.db
Normal file
1
dist/client/_astro/Layout.B7dzA6iv.css
vendored
Normal file
1
dist/client/_astro/index@_@astro.CCxQJyrh.css
vendored
Normal file
BIN
dist/client/apple-touch-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
dist/client/favicon-192.png
vendored
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
dist/client/favicon-32.png
vendored
Normal file
|
After Width: | Height: | Size: 687 B |
4
dist/client/favicon.svg
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||||
|
<rect width="100" height="100" rx="20" fill="#fed400"/>
|
||||||
|
<text x="50" y="65" font-family="Arial, sans-serif" font-size="48" font-weight="bold" text-anchor="middle" fill="#000000">M</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 260 B |
3
dist/client/icons/social/line.svg
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#06C755">
|
||||||
|
<path d="M19.365 9.863c.349 0 .63.285.63.631 0 .345-.281.63-.63.63H17.61v1.125h1.755c.349 0 .63.283.63.63 0 .344-.281.629-.63.629h-2.386c-.345 0-.63-.285-.63-.629V8.108c0-.345.285-.63.63-.63h2.386c.345 0 .555.284.555.629 0 .349-.21.631-.555.631H17.61v1.125h1.755zm-3.855 3.016c0 .27-.174.51-.432.596-.064.021-.133.031-.199.031-.211 0-.391-.09-.51-.25l-2.443-3.317v2.94c0 .344-.279.629-.631.629-.346 0-.626-.285-.626-.629V8.108c0-.27.173-.51.43-.595.06-.023.136-.033.194-.033.195 0 .375.104.495.254l2.462 3.33V8.108c0-.345.285-.63.63-.63.345 0 .63.285.63.63v4.771zm-5.741 0c0 .344-.282.629-.631.629-.345 0-.627-.285-.627-.629V8.108c0-.345.282-.63.627-.63.349 0 .631.285.631.63v4.771zm-2.466.629H4.917c-.345 0-.63-.285-.63-.629V8.108c0-.345.285-.63.63-.63.348 0 .63.285.63.63v4.141h1.756c.348 0 .629.283.629.63 0 .344-.282.629-.629.629M24 10.314C24 4.943 18.615.572 12 .572S0 4.943 0 10.314c0 4.811 4.27 8.842 10.035 9.608.391.082.923.258 1.058.59.12.301.079.766.038 1.08l-.164 1.02c-.045.301-.24 1.186 1.049.645 1.291-.539 6.916-4.078 9.436-6.975C23.176 14.393 24 12.458 24 10.314"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
dist/client/images/about.jpg
vendored
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
dist/client/images/ai-automation.jpg
vendored
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
dist/client/images/blog/5-ways-ai-increase-sales.jpg
vendored
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
dist/client/images/blog/ai-content-google-love.jpg
vendored
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
dist/client/images/blog/ai-for-sme-thailand.jpg
vendored
Normal file
|
After Width: | Height: | Size: 183 KiB |
BIN
dist/client/images/blog/back-office-automation.jpg
vendored
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
dist/client/images/blog/chatbot-business-case-study.jpg
vendored
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
dist/client/images/blog/data-driven-marketing.jpg
vendored
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
dist/client/images/blog/digital-transformation.jpg
vendored
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
dist/client/images/blog/marketing-automation-guide.jpg
vendored
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
dist/client/images/blog/seo-2026-business-guide.jpg
vendored
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
dist/client/images/blog/website-2026-must-have.jpg
vendored
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
dist/client/images/contact.jpg
vendored
Normal file
|
After Width: | Height: | Size: 219 KiB |
BIN
dist/client/images/hero.jpg
vendored
Normal file
|
After Width: | Height: | Size: 396 KiB |
BIN
dist/client/images/marketing-automation.jpg
vendored
Normal file
|
After Width: | Height: | Size: 268 KiB |
BIN
dist/client/images/tech-consult.jpg
vendored
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
dist/client/images/web-development.jpg
vendored
Normal file
|
After Width: | Height: | Size: 270 KiB |
1
dist/client/sitemap-0.xml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://www.moreminimore.com/</loc></url><url><loc>https://www.moreminimore.com/about-us/</loc></url><url><loc>https://www.moreminimore.com/admin/consent-logs/</loc></url><url><loc>https://www.moreminimore.com/ai-automation/</loc></url><url><loc>https://www.moreminimore.com/blog/</loc></url><url><loc>https://www.moreminimore.com/contact-us/</loc></url><url><loc>https://www.moreminimore.com/faq/</loc></url><url><loc>https://www.moreminimore.com/marketing-automation/</loc></url><url><loc>https://www.moreminimore.com/portfolio/</loc></url><url><loc>https://www.moreminimore.com/privacy-policy/</loc></url><url><loc>https://www.moreminimore.com/tech-consult/</loc></url><url><loc>https://www.moreminimore.com/terms-and-conditions/</loc></url><url><loc>https://www.moreminimore.com/web-development/</loc></url></urlset>
|
||||||
1
dist/client/sitemap-index.xml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://www.moreminimore.com/sitemap-0.xml</loc></sitemap></sitemapindex>
|
||||||
70
dist/server/chunks/Layout_DdK69uya.mjs
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { k as createRenderInstruction, m as maybeRenderHead, f as addAttribute, r as renderTemplate, l as renderHead, h as renderComponent, n as renderSlot } from './server_CW1mBpZH.mjs';
|
||||||
|
import 'clsx';
|
||||||
|
|
||||||
|
async function renderScript(result, id) {
|
||||||
|
const inlined = result.inlinedScripts.get(id);
|
||||||
|
let content = "";
|
||||||
|
if (inlined != null) {
|
||||||
|
if (inlined) {
|
||||||
|
content = `<script type="module">${inlined}</script>`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const resolved = await result.resolve(id);
|
||||||
|
content = `<script type="module" src="${result.userAssetsBase ? (result.base === "/" ? "" : result.base) + result.userAssetsBase : ""}${resolved}"></script>`;
|
||||||
|
}
|
||||||
|
return createRenderInstruction({ type: "script", id, content });
|
||||||
|
}
|
||||||
|
|
||||||
|
const $$Header = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
const Astro2 = $$result.createAstro($$props, $$slots);
|
||||||
|
Astro2.self = $$Header;
|
||||||
|
const navItems = [
|
||||||
|
{ label: "หน้าหลัก", href: "/" },
|
||||||
|
{ label: "เกี่ยวกับเรา", href: "/about-us" },
|
||||||
|
{ label: "บริการ", href: "/web-development" },
|
||||||
|
{ label: "ผลงาน", href: "/portfolio" },
|
||||||
|
{ label: "บล็อก", href: "/blog" },
|
||||||
|
{ label: "ติดต่อเรา", href: "/contact-us" }
|
||||||
|
];
|
||||||
|
const currentPath = Astro2.url.pathname;
|
||||||
|
return renderTemplate`${maybeRenderHead()}<header class="header" data-astro-cid-3ef6ksr2> <div class="container header-inner" data-astro-cid-3ef6ksr2> <a href="/" class="logo" data-astro-cid-3ef6ksr2> <img src="https://moreminimore.com/wp-content/uploads/2022/09/Moreminimore-logo-long-black.png" alt="MoreminiMore" data-astro-cid-3ef6ksr2> </a> <nav class="nav" data-astro-cid-3ef6ksr2> <ul class="nav-list" data-astro-cid-3ef6ksr2> ${navItems.map((item) => renderTemplate`<li data-astro-cid-3ef6ksr2> <a${addAttribute(item.href, "href")}${addAttribute(["nav-link", { active: currentPath === item.href }], "class:list")} data-astro-cid-3ef6ksr2> ${item.label} </a> </li>`)} </ul> </nav> <a href="/contact-us" class="btn-primary" data-astro-cid-3ef6ksr2>ปรึกษาฟรี</a> </div> </header>`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/components/Header.astro", void 0);
|
||||||
|
|
||||||
|
const $$Footer = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
const services = [
|
||||||
|
{ label: "พัฒนาเว็บไซต์", href: "/web-development" },
|
||||||
|
{ label: "Marketing Automation", href: "/marketing-automation" },
|
||||||
|
{ label: "AI Automation", href: "/ai-automation" },
|
||||||
|
{ label: "ให้คำปรึกษา", href: "/tech-consult" }
|
||||||
|
];
|
||||||
|
const company = [
|
||||||
|
{ label: "เกี่ยวกับเรา", href: "/about-us" },
|
||||||
|
{ label: "ผลงาน", href: "/portfolio" },
|
||||||
|
{ label: "บล็อก", href: "/blog" },
|
||||||
|
{ label: "FAQ", href: "/faq" }
|
||||||
|
];
|
||||||
|
const legal = [
|
||||||
|
{ label: "นโยบายความเป็นส่วนตัว", href: "/privacy-policy" },
|
||||||
|
{ label: "ข้อกำหนดการใช้งาน", href: "/terms-and-conditions" }
|
||||||
|
];
|
||||||
|
return renderTemplate`${maybeRenderHead()}<footer class="footer" data-astro-cid-sz7xmlte> <div class="container footer-inner" data-astro-cid-sz7xmlte> <div class="footer-section" data-astro-cid-sz7xmlte> <a href="/" class="footer-logo" data-astro-cid-sz7xmlte> <img src="https://moreminimore.com/wp-content/uploads/2022/09/Moreminimore-logo-long-black.png" alt="MoreminiMore" data-astro-cid-sz7xmlte> </a> <p class="footer-desc" data-astro-cid-sz7xmlte>
|
||||||
|
บริษัท มอร์มินิมอร์ จำกัด<br data-astro-cid-sz7xmlte>
|
||||||
|
ผู้เชี่ยวชาญด้าน IT และ Digital Transformation<br data-astro-cid-sz7xmlte>
|
||||||
|
สำหรับธุรกิจ SMEs ไทย
|
||||||
|
</p> <div class="footer-contact" data-astro-cid-sz7xmlte> <p data-astro-cid-sz7xmlte>โทร: 080-995-5945</p> <p data-astro-cid-sz7xmlte>อีเมล: contact@moreminimore.com</p> <p data-astro-cid-sz7xmlte>ที่อยู่: 53 หมู่ 1 ต.บ้านแพ้ว อ.บ้านแพ้ว สมุทรสาคร 74120</p> </div> </div> <div class="footer-section" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>บริการ</h4> <ul data-astro-cid-sz7xmlte> ${services.map((item) => renderTemplate`<li data-astro-cid-sz7xmlte><a${addAttribute(item.href, "href")} data-astro-cid-sz7xmlte>${item.label}</a></li>`)} </ul> </div> <div class="footer-section" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>บริษัท</h4> <ul data-astro-cid-sz7xmlte> ${company.map((item) => renderTemplate`<li data-astro-cid-sz7xmlte><a${addAttribute(item.href, "href")} data-astro-cid-sz7xmlte>${item.label}</a></li>`)} </ul> </div> <div class="footer-section" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>ข้อมูลทางกฎหมาย</h4> <ul data-astro-cid-sz7xmlte> ${legal.map((item) => renderTemplate`<li data-astro-cid-sz7xmlte><a${addAttribute(item.href, "href")} data-astro-cid-sz7xmlte>${item.label}</a></li>`)} </ul> </div> </div> <div class="footer-bottom" data-astro-cid-sz7xmlte> <p data-astro-cid-sz7xmlte>© ${(/* @__PURE__ */ new Date()).getFullYear()} บริษัท มอร์มินิมอร์ จำกัด. สงวนลิขสิทธิ์.</p> </div> </footer>`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/components/Footer.astro", void 0);
|
||||||
|
|
||||||
|
const $$CookieBanner = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${maybeRenderHead()}<div id="cookie-banner" class="cookie-banner" style="display: none;" data-astro-cid-lomijygd> <div class="cookie-content" data-astro-cid-lomijygd> <h3 data-astro-cid-lomijygd>🍪 การใช้คุกกี้</h3> <p data-astro-cid-lomijygd>เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งานเว็บไซต์ของคุณ คุณสามารถเลือกได้ว่าจะอนุญาตคุกกี้ประเภทใด</p> <div class="cookie-options" data-astro-cid-lomijygd> <label class="cookie-option" data-astro-cid-lomijygd> <input type="checkbox" id="cookie-necessary" checked disabled data-astro-cid-lomijygd> <span data-astro-cid-lomijygd>จำเป็น (necessary)</span> </label> <label class="cookie-option" data-astro-cid-lomijygd> <input type="checkbox" id="cookie-performance" data-astro-cid-lomijygd> <span data-astro-cid-lomijygd>ประสิทธิภาพ (performance)</span> </label> <label class="cookie-option" data-astro-cid-lomijygd> <input type="checkbox" id="cookie-marketing" data-astro-cid-lomijygd> <span data-astro-cid-lomijygd>การตลาด (marketing)</span> </label> </div> <div class="cookie-buttons" data-astro-cid-lomijygd> <button id="cookie-accept-all" class="btn-primary" data-astro-cid-lomijygd>ยอมรับทั้งหมด</button> <button id="cookie-reject-all" class="btn-secondary" data-astro-cid-lomijygd>ปฏิเสธทั้งหมด</button> <button id="cookie-save" class="btn-outline" data-astro-cid-lomijygd>บันทึกการตั้งค่า</button> </div> <a href="/privacy-policy" class="cookie-link" data-astro-cid-lomijygd>อ่านนโยบายความเป็นส่วนตัว</a> </div> </div> ${renderScript($$result, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/components/consent/CookieBanner.astro?astro&type=script&index=0&lang.ts")}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/components/consent/CookieBanner.astro", void 0);
|
||||||
|
|
||||||
|
const $$Layout = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
const Astro2 = $$result.createAstro($$props, $$slots);
|
||||||
|
Astro2.self = $$Layout;
|
||||||
|
const { title, description = "บริษัท มอร์มินิมอร์ จำกัด - ผู้เชี่ยวชาญด้าน IT และ Digital Transformation สำหรับธุรกิจ SMEs ไทย" } = Astro2.props;
|
||||||
|
return renderTemplate`<html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description"${addAttribute(description, "content")}><link rel="icon" type="image/svg+xml" href="/favicon.svg"><title>${title} | MoreminiMore</title>${renderHead()}</head> <body> ${renderComponent($$result, "Header", $$Header, {})} <main> ${renderSlot($$result, $$slots["default"])} </main> ${renderComponent($$result, "Footer", $$Footer, {})} ${renderComponent($$result, "CookieBanner", $$CookieBanner, {})} </body></html>`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/layouts/Layout.astro", void 0);
|
||||||
|
|
||||||
|
export { $$Layout as $, renderScript as r };
|
||||||
209
dist/server/chunks/_astro_content_Beg-Bg2V.mjs
vendored
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
import 'html-escaper';
|
||||||
|
import { Traverse } from 'neotraverse/modern';
|
||||||
|
import * as z from 'zod/v4';
|
||||||
|
import { i as generateCspDigest, s as spreadAttributes, u as unescapeHTML, r as renderTemplate, A as AstroError, j as UnknownContentCollectionError } from './server_CW1mBpZH.mjs';
|
||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'clsx';
|
||||||
|
import { removeBase, isRemotePath } from '@astrojs/internal-helpers/path';
|
||||||
|
import { b as VALID_INPUT_FORMATS } from './consts_BLFvATRa.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import * as devalue from 'devalue';
|
||||||
|
|
||||||
|
function createSvgComponent({ meta, attributes, children, styles }) {
|
||||||
|
const hasStyles = styles.length > 0;
|
||||||
|
const Component = createComponent({
|
||||||
|
async factory(result, props) {
|
||||||
|
const normalizedProps = normalizeProps(attributes, props);
|
||||||
|
if (hasStyles && result.cspDestination) {
|
||||||
|
for (const style of styles) {
|
||||||
|
const hash = await generateCspDigest(style, result.cspAlgorithm);
|
||||||
|
result._metadata.extraStyleHashes.push(hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return renderTemplate`<svg${spreadAttributes(normalizedProps)}>${unescapeHTML(children)}</svg>`;
|
||||||
|
},
|
||||||
|
propagation: hasStyles ? "self" : "none"
|
||||||
|
});
|
||||||
|
Object.defineProperty(Component, "toJSON", {
|
||||||
|
value: () => meta,
|
||||||
|
enumerable: false
|
||||||
|
});
|
||||||
|
return Object.assign(Component, meta);
|
||||||
|
}
|
||||||
|
const ATTRS_TO_DROP = ["xmlns", "xmlns:xlink", "version"];
|
||||||
|
const DEFAULT_ATTRS = {};
|
||||||
|
function dropAttributes(attributes) {
|
||||||
|
for (const attr of ATTRS_TO_DROP) {
|
||||||
|
delete attributes[attr];
|
||||||
|
}
|
||||||
|
return attributes;
|
||||||
|
}
|
||||||
|
function normalizeProps(attributes, props) {
|
||||||
|
return dropAttributes({ ...DEFAULT_ATTRS, ...attributes, ...props });
|
||||||
|
}
|
||||||
|
|
||||||
|
const CONTENT_IMAGE_FLAG = "astroContentImageFlag";
|
||||||
|
const IMAGE_IMPORT_PREFIX = "__ASTRO_IMAGE_";
|
||||||
|
|
||||||
|
function imageSrcToImportId(imageSrc, filePath) {
|
||||||
|
imageSrc = removeBase(imageSrc, IMAGE_IMPORT_PREFIX);
|
||||||
|
if (isRemotePath(imageSrc)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ext = imageSrc.split(".").at(-1)?.toLowerCase();
|
||||||
|
if (!ext || !VALID_INPUT_FORMATS.includes(ext)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const params = new URLSearchParams(CONTENT_IMAGE_FLAG);
|
||||||
|
if (filePath) {
|
||||||
|
params.set("importer", filePath);
|
||||||
|
}
|
||||||
|
return `${imageSrc}?${params.toString()}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ImmutableDataStore {
|
||||||
|
_collections = /* @__PURE__ */ new Map();
|
||||||
|
constructor() {
|
||||||
|
this._collections = /* @__PURE__ */ new Map();
|
||||||
|
}
|
||||||
|
get(collectionName, key) {
|
||||||
|
return this._collections.get(collectionName)?.get(String(key));
|
||||||
|
}
|
||||||
|
entries(collectionName) {
|
||||||
|
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||||
|
return [...collection.entries()];
|
||||||
|
}
|
||||||
|
values(collectionName) {
|
||||||
|
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||||
|
return [...collection.values()];
|
||||||
|
}
|
||||||
|
keys(collectionName) {
|
||||||
|
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||||
|
return [...collection.keys()];
|
||||||
|
}
|
||||||
|
has(collectionName, key) {
|
||||||
|
const collection = this._collections.get(collectionName);
|
||||||
|
if (collection) {
|
||||||
|
return collection.has(String(key));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
hasCollection(collectionName) {
|
||||||
|
return this._collections.has(collectionName);
|
||||||
|
}
|
||||||
|
collections() {
|
||||||
|
return this._collections;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Attempts to load a DataStore from the virtual module.
|
||||||
|
* This only works in Vite.
|
||||||
|
*/
|
||||||
|
static async fromModule() {
|
||||||
|
try {
|
||||||
|
const data = await import('./_astro_data-layer-content_Cj7QvjDI.mjs');
|
||||||
|
if (data.default instanceof Map) {
|
||||||
|
return ImmutableDataStore.fromMap(data.default);
|
||||||
|
}
|
||||||
|
const map = devalue.unflatten(data.default);
|
||||||
|
return ImmutableDataStore.fromMap(map);
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
return new ImmutableDataStore();
|
||||||
|
}
|
||||||
|
static async fromMap(data) {
|
||||||
|
const store = new ImmutableDataStore();
|
||||||
|
store._collections = data;
|
||||||
|
return store;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function dataStoreSingleton() {
|
||||||
|
let instance = void 0;
|
||||||
|
return {
|
||||||
|
get: async () => {
|
||||||
|
if (!instance) {
|
||||||
|
instance = ImmutableDataStore.fromModule();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
},
|
||||||
|
set: (store) => {
|
||||||
|
instance = store;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const globalDataStore = dataStoreSingleton();
|
||||||
|
|
||||||
|
z.object({
|
||||||
|
tags: z.array(z.string()).optional(),
|
||||||
|
lastModified: z.date().optional()
|
||||||
|
});
|
||||||
|
function createGetCollection({
|
||||||
|
liveCollections
|
||||||
|
}) {
|
||||||
|
return async function getCollection(collection, filter) {
|
||||||
|
if (collection in liveCollections) {
|
||||||
|
throw new AstroError({
|
||||||
|
...UnknownContentCollectionError,
|
||||||
|
message: `Collection "${collection}" is a live collection. Use getLiveCollection() instead of getCollection().`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const hasFilter = typeof filter === "function";
|
||||||
|
const store = await globalDataStore.get();
|
||||||
|
if (store.hasCollection(collection)) {
|
||||||
|
const { default: imageAssetMap } = await import('./content-assets_DleWbedO.mjs');
|
||||||
|
const result = [];
|
||||||
|
for (const rawEntry of store.values(collection)) {
|
||||||
|
const data = updateImageReferencesInData(rawEntry.data, rawEntry.filePath, imageAssetMap);
|
||||||
|
let entry = {
|
||||||
|
...rawEntry,
|
||||||
|
data,
|
||||||
|
collection
|
||||||
|
};
|
||||||
|
if (hasFilter && !filter(entry)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
result.push(entry);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
console.warn(
|
||||||
|
`The collection ${JSON.stringify(
|
||||||
|
collection
|
||||||
|
)} does not exist or is empty. Please check your content config file for errors.`
|
||||||
|
);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function updateImageReferencesInData(data, fileName, imageAssetMap) {
|
||||||
|
return new Traverse(data).map(function(ctx, val) {
|
||||||
|
if (typeof val === "string" && val.startsWith(IMAGE_IMPORT_PREFIX)) {
|
||||||
|
const src = val.replace(IMAGE_IMPORT_PREFIX, "");
|
||||||
|
const id = imageSrcToImportId(src, fileName);
|
||||||
|
if (!id) {
|
||||||
|
ctx.update(src);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const imported = imageAssetMap?.get(id);
|
||||||
|
if (imported) {
|
||||||
|
if (imported.__svgData) {
|
||||||
|
const { __svgData: svgData, ...meta } = imported;
|
||||||
|
ctx.update(createSvgComponent({ meta, ...svgData }));
|
||||||
|
} else {
|
||||||
|
ctx.update(imported);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ctx.update(src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// astro-head-inject
|
||||||
|
|
||||||
|
const liveCollections = {};
|
||||||
|
|
||||||
|
const getCollection = createGetCollection({
|
||||||
|
liveCollections,
|
||||||
|
});
|
||||||
|
|
||||||
|
export { getCollection as g };
|
||||||
3
dist/server/chunks/_astro_data-layer-content_Cj7QvjDI.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const _astro_dataLayerContent = [["Map",1,2],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://www.moreminimore.com\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"server\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":false,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\",\"entrypoint\":\"astro/assets/endpoint/node\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":{\"backticks\":true,\"closingQuotes\":{\"double\":\"”\",\"single\":\"’\"},\"dashes\":true,\"ellipses\":true,\"openingQuotes\":{\"double\":\"“\",\"single\":\"‘\"},\"quotes\":true}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"svgo\":false,\"rustCompiler\":false,\"queuedRendering\":{\"enabled\":false}},\"legacy\":{\"collectionsBackwardsCompat\":false},\"session\":{\"driver\":{\"entrypoint\":\"unstorage/drivers/fs-lite\",\"config\":{\"base\":\"/Users/kunthawatgreethong/Gitea/moreminimore-new/node_modules/.astro/sessions\"}}}}","astro-version","6.1.8","content-config-digest","29418499c0163d6c"];
|
||||||
|
|
||||||
|
export { _astro_dataLayerContent as default };
|
||||||
39
dist/server/chunks/_slug__Derd8MtL.mjs
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead, f as addAttribute } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
import { g as getCollection } from './_astro_content_Beg-Bg2V.mjs';
|
||||||
|
|
||||||
|
async function getStaticPaths() {
|
||||||
|
const posts = await getCollection("blog");
|
||||||
|
return posts.map((post) => ({
|
||||||
|
params: { slug: post.slug },
|
||||||
|
props: { post }
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
const $$slug = createComponent(async ($$result, $$props, $$slots) => {
|
||||||
|
const Astro2 = $$result.createAstro($$props, $$slots);
|
||||||
|
Astro2.self = $$slug;
|
||||||
|
const { post } = Astro2.props;
|
||||||
|
const { Content } = await post.render();
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": post.data.title, "description": post.data.description, "data-astro-cid-4sn4zg3r": true }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<article class="blog-post" data-astro-cid-4sn4zg3r> <header class="post-header" data-astro-cid-4sn4zg3r> <div class="container" data-astro-cid-4sn4zg3r> <h1 data-astro-cid-4sn4zg3r>${post.data.title}</h1> <div class="post-meta" data-astro-cid-4sn4zg3r> <span class="author" data-astro-cid-4sn4zg3r>${post.data.author}</span> <span class="separator" data-astro-cid-4sn4zg3r>•</span> <time${addAttribute(post.data.pubDate.toISOString(), "datetime")} data-astro-cid-4sn4zg3r> ${post.data.pubDate.toLocaleDateString("th-TH", {
|
||||||
|
year: "numeric",
|
||||||
|
month: "long",
|
||||||
|
day: "numeric"
|
||||||
|
})} </time> <span class="separator" data-astro-cid-4sn4zg3r>•</span> <span class="category" data-astro-cid-4sn4zg3r>${post.data.category}</span> </div> <div class="tags" data-astro-cid-4sn4zg3r> ${post.data.tags?.map((tag) => renderTemplate`<span class="tag" data-astro-cid-4sn4zg3r>${tag}</span>`)} </div> </div> </header> <div class="post-content" data-astro-cid-4sn4zg3r> <div class="container container-narrow" data-astro-cid-4sn4zg3r> ${renderComponent($$result2, "Content", Content, { "data-astro-cid-4sn4zg3r": true })} </div> </div> <footer class="post-footer" data-astro-cid-4sn4zg3r> <div class="container container-narrow" data-astro-cid-4sn4zg3r> <a href="/blog" class="btn-back" data-astro-cid-4sn4zg3r>← กลับไปหน้าบล็อก</a> </div> </footer> </article> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/blog/[slug].astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/blog/[slug].astro";
|
||||||
|
const $$url = "/blog/[slug]";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$slug,
|
||||||
|
file: $$file,
|
||||||
|
getStaticPaths,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
7
dist/server/chunks/_virtual_astro_server-island-manifest_CQQ1F5PF.mjs
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
const serverIslandMap = new Map([
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
const serverIslandNameMap = new Map([]);
|
||||||
|
|
||||||
|
export { serverIslandMap, serverIslandNameMap };
|
||||||
4
dist/server/chunks/_virtual_astro_session-driver_Bk3Q189E.mjs
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import * as _default from 'unstorage/drivers/fs-lite';
|
||||||
|
import _default__default from 'unstorage/drivers/fs-lite';
|
||||||
|
export * from 'unstorage/drivers/fs-lite';
|
||||||
|
export { default } from 'unstorage/drivers/fs-lite';
|
||||||
49
dist/server/chunks/about-us_zliJ4YdZ.mjs
vendored
Normal file
50
dist/server/chunks/ai-automation_Dt8C381f.mjs
vendored
Normal file
37
dist/server/chunks/astro-component_Y0jc7Trv.mjs
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { A as AstroError, o as InvalidComponentArgs } from './server_CW1mBpZH.mjs';
|
||||||
|
|
||||||
|
function validateArgs(args) {
|
||||||
|
if (args.length !== 3) return false;
|
||||||
|
if (!args[0] || typeof args[0] !== "object") return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function baseCreateComponent(cb, moduleId, propagation) {
|
||||||
|
const name = moduleId?.split("/").pop()?.replace(".astro", "") ?? "";
|
||||||
|
const fn = (...args) => {
|
||||||
|
if (!validateArgs(args)) {
|
||||||
|
throw new AstroError({
|
||||||
|
...InvalidComponentArgs,
|
||||||
|
message: InvalidComponentArgs.message(name)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return cb(...args);
|
||||||
|
};
|
||||||
|
Object.defineProperty(fn, "name", { value: name, writable: false });
|
||||||
|
fn.isAstroComponentFactory = true;
|
||||||
|
fn.moduleId = moduleId;
|
||||||
|
fn.propagation = propagation;
|
||||||
|
return fn;
|
||||||
|
}
|
||||||
|
function createComponentWithOptions(opts) {
|
||||||
|
const cb = baseCreateComponent(opts.factory, opts.moduleId, opts.propagation);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
function createComponent(arg1, moduleId, propagation) {
|
||||||
|
if (typeof arg1 === "function") {
|
||||||
|
return baseCreateComponent(arg1, moduleId, propagation);
|
||||||
|
} else {
|
||||||
|
return createComponentWithOptions(arg1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { createComponent as c };
|
||||||
22
dist/server/chunks/consent-logs_C6Muj3PH.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout, r as renderScript } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$ConsentLogs = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "Consent Logs", "description": "Cookie consent logs - Admin only", "data-astro-cid-5yvbipfl": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-5yvbipfl> <div class="container" data-astro-cid-5yvbipfl> <h1 data-astro-cid-5yvbipfl>Consent Logs</h1> <p data-astro-cid-5yvbipfl>Cookie consent records</p> </div> </section> <section class="content" data-astro-cid-5yvbipfl> <div class="container" data-astro-cid-5yvbipfl> <p data-astro-cid-5yvbipfl>This is the admin page for viewing cookie consent logs.</p> <p data-astro-cid-5yvbipfl>Logs are stored locally in the browser's localStorage.</p> <div id="consent-logs" data-astro-cid-5yvbipfl> <p data-astro-cid-5yvbipfl>Loading consent logs...</p> </div> <button id="clear-logs" class="btn-secondary" data-astro-cid-5yvbipfl>Clear Logs</button> </div> </section> ` })} ${renderScript($$result, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/admin/consent-logs.astro?astro&type=script&index=0&lang.ts")}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/admin/consent-logs.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/admin/consent-logs.astro";
|
||||||
|
const $$url = "/admin/consent-logs";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$ConsentLogs,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
33
dist/server/chunks/consts_BLFvATRa.mjs
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const VALID_INPUT_FORMATS = [
|
||||||
|
"jpeg",
|
||||||
|
"jpg",
|
||||||
|
"png",
|
||||||
|
"tiff",
|
||||||
|
"webp",
|
||||||
|
"gif",
|
||||||
|
"svg",
|
||||||
|
"avif"
|
||||||
|
];
|
||||||
|
const VALID_SUPPORTED_FORMATS = [
|
||||||
|
"jpeg",
|
||||||
|
"jpg",
|
||||||
|
"png",
|
||||||
|
"tiff",
|
||||||
|
"webp",
|
||||||
|
"gif",
|
||||||
|
"svg",
|
||||||
|
"avif"
|
||||||
|
];
|
||||||
|
const DEFAULT_OUTPUT_FORMAT = "webp";
|
||||||
|
const DEFAULT_HASH_PROPS = [
|
||||||
|
"src",
|
||||||
|
"width",
|
||||||
|
"height",
|
||||||
|
"format",
|
||||||
|
"quality",
|
||||||
|
"fit",
|
||||||
|
"position",
|
||||||
|
"background"
|
||||||
|
];
|
||||||
|
|
||||||
|
export { DEFAULT_OUTPUT_FORMAT as D, VALID_SUPPORTED_FORMATS as V, DEFAULT_HASH_PROPS as a, VALID_INPUT_FORMATS as b };
|
||||||
22
dist/server/chunks/contact-us_Cnf_9Gbs.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$ContactUs = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "ติดต่อเรา", "description": "ติดต่อทีมงาน MoreminiMore สำหรับปรึกษาฟรี", "data-astro-cid-5c24fmmt": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-5c24fmmt> <div class="container" data-astro-cid-5c24fmmt> <h1 data-astro-cid-5c24fmmt>ติดต่อเรา</h1> <p data-astro-cid-5c24fmmt>พร้อมให้บริการ ปรึกษาฟรี!</p> </div> </section> <section class="content" data-astro-cid-5c24fmmt> <div class="container contact-grid" data-astro-cid-5c24fmmt> <div class="contact-info" data-astro-cid-5c24fmmt> <h2 data-astro-cid-5c24fmmt>ข้อมูลการติดต่อ</h2> <div class="info-item" data-astro-cid-5c24fmmt> <strong data-astro-cid-5c24fmmt>โทร:</strong> <span data-astro-cid-5c24fmmt>080-995-5945</span> </div> <div class="info-item" data-astro-cid-5c24fmmt> <strong data-astro-cid-5c24fmmt>อีเมล:</strong> <span data-astro-cid-5c24fmmt>contact@moreminimore.com</span> </div> <div class="info-item" data-astro-cid-5c24fmmt> <strong data-astro-cid-5c24fmmt>ที่อยู่:</strong> <span data-astro-cid-5c24fmmt>53 หมู่ 1 ต.บ้านแพ้ว อ.บ้านแพ้ว สมุทรสาคร 74120</span> </div> </div> <div class="contact-form" data-astro-cid-5c24fmmt> <h2 data-astro-cid-5c24fmmt>ส่งข้อความ</h2> <form data-astro-cid-5c24fmmt> <div class="form-group" data-astro-cid-5c24fmmt> <label for="name" data-astro-cid-5c24fmmt>ชื่อ</label> <input type="text" id="name" name="name" required data-astro-cid-5c24fmmt> </div> <div class="form-group" data-astro-cid-5c24fmmt> <label for="email" data-astro-cid-5c24fmmt>อีเมล</label> <input type="email" id="email" name="email" required data-astro-cid-5c24fmmt> </div> <div class="form-group" data-astro-cid-5c24fmmt> <label for="phone" data-astro-cid-5c24fmmt>เบอร์โทร</label> <input type="tel" id="phone" name="phone" data-astro-cid-5c24fmmt> </div> <div class="form-group" data-astro-cid-5c24fmmt> <label for="message" data-astro-cid-5c24fmmt>ข้อความ</label> <textarea id="message" name="message" rows="5" required data-astro-cid-5c24fmmt></textarea> </div> <button type="submit" class="btn-primary" data-astro-cid-5c24fmmt>ส่งข้อความ</button> </form> </div> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/contact-us.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/contact-us.astro";
|
||||||
|
const $$url = "/contact-us";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$ContactUs,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
3
dist/server/chunks/content-assets_DleWbedO.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const contentAssets = new Map();
|
||||||
|
|
||||||
|
export { contentAssets as default };
|
||||||
22
dist/server/chunks/faq_BPWnYJ6k.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$Faq = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "คำถามที่พบบ่อย", "description": "คำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับบริการของ MoreminiMore", "data-astro-cid-6kmwghhu": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-6kmwghhu> <div class="container" data-astro-cid-6kmwghhu> <h1 data-astro-cid-6kmwghhu>คำถามที่พบบ่อย</h1> </div> </section> <section class="content" data-astro-cid-6kmwghhu> <div class="container" data-astro-cid-6kmwghhu> <details data-astro-cid-6kmwghhu> <summary data-astro-cid-6kmwghhu>ทำไมต้องมีเว็บไซต์?</summary> <p data-astro-cid-6kmwghhu>เว็บไซต์คือหน้าบ้านของธุรกิจในยุคดิจิทัล ลูกค้าจำนวนมากค้นหาข้อ<EFBFBD><EFBFBD>ูลออนไลน์ก่อนตัดสินใจซื้อ</p> </details> <details data-astro-cid-6kmwghhu> <summary data-astro-cid-6kmwghhu>ระบบอัตโนมัติทางการตลาดคืออะไร?</summary> <p data-astro-cid-6kmwghhu>คือระบบที่ช่วยทำงานทางการตลาดโดยอัตโนมัติ เช่น ส่งอีเมล ตอบ LINE ดูแล Social Media</p> </details> <details data-astro-cid-6kmwghhu> <summary data-astro-cid-6kmwghhu>AI ช่วยธุรกิจได้อย่างไร?</summary> <p data-astro-cid-6kmwghhu>AI ช่วยตอบลูกค้า วิเคราะห์ข้อมูล สร้างเนื้อหา และทำงานซ้ำๆ แทนคน</p> </details> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/faq.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/faq.astro";
|
||||||
|
const $$url = "/faq";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$Faq,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
31
dist/server/chunks/index_BVOKZ5y3.mjs
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead, f as addAttribute } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
import { g as getCollection } from './_astro_content_Beg-Bg2V.mjs';
|
||||||
|
|
||||||
|
const $$Index = createComponent(async ($$result, $$props, $$slots) => {
|
||||||
|
const posts = await getCollection("blog");
|
||||||
|
const sortedPosts = posts.sort(
|
||||||
|
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
|
||||||
|
);
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "บล็อก", "description": "บทความและความรู้ด้าน Digital Transformation, AI และการตลาดออนไลน์สำหรับ SMEs ไทย", "data-astro-cid-5tznm7mj": true }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-5tznm7mj> <div class="container" data-astro-cid-5tznm7mj> <h1 data-astro-cid-5tznm7mj>บล็อก</h1> <p data-astro-cid-5tznm7mj>บทความและความรู้ด้านเทคโนโลยีและการตลาดสำหรับธุรกิจ SMEs ไทย</p> </div> </section> <section class="blog-list" data-astro-cid-5tznm7mj> <div class="container" data-astro-cid-5tznm7mj> <div class="posts-grid" data-astro-cid-5tznm7mj> ${sortedPosts.map((post) => renderTemplate`<article class="post-card" data-astro-cid-5tznm7mj> <h2 data-astro-cid-5tznm7mj> <a${addAttribute(`/blog/${post.slug}`, "href")} data-astro-cid-5tznm7mj>${post.data.title}</a> </h2> <p class="post-meta" data-astro-cid-5tznm7mj> <span data-astro-cid-5tznm7mj>${post.data.author}</span> <span data-astro-cid-5tznm7mj>•</span> <time${addAttribute(post.data.pubDate.toISOString(), "datetime")} data-astro-cid-5tznm7mj> ${post.data.pubDate.toLocaleDateString("th-TH", {
|
||||||
|
year: "numeric",
|
||||||
|
month: "long",
|
||||||
|
day: "numeric"
|
||||||
|
})} </time> </p> <p class="post-description" data-astro-cid-5tznm7mj>${post.data.description}</p> <div class="post-tags" data-astro-cid-5tznm7mj> ${post.data.tags?.slice(0, 3).map((tag) => renderTemplate`<span class="tag" data-astro-cid-5tznm7mj>${tag}</span>`)} </div> </article>`)} </div> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/blog/index.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/blog/index.astro";
|
||||||
|
const $$url = "/blog";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$Index,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
142
dist/server/chunks/index_jaCs8rJw.mjs
vendored
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead, u as unescapeHTML } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
var __freeze = Object.freeze;
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(cooked.slice()) }));
|
||||||
|
var _a;
|
||||||
|
const $$Index = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
const schemaData = {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "ProfessionalService",
|
||||||
|
"name": "บริษัท มอร์มินิมอร์ จำกัด",
|
||||||
|
"description": "รับทำเว็บไซต์ SEO AI Chatbot และ Marketing Automation สำหรับ SMEs ไทย เพิ่มยอดขาย ลดต้นทุน ด้วยเทคโนโลยีที่ทันสมัย",
|
||||||
|
"url": "https://www.moreminimore.com",
|
||||||
|
"telephone": "0809955945",
|
||||||
|
"email": "contact@moreminimore.com",
|
||||||
|
"address": {
|
||||||
|
"@type": "PostalAddress",
|
||||||
|
"streetAddress": "53 หมู่ 1 ต.บ้านแพ้ว อ.บ้านแพ้ว",
|
||||||
|
"addressLocality": "สมุทรสาคร",
|
||||||
|
"postalCode": "74120",
|
||||||
|
"addressCountry": "TH"
|
||||||
|
},
|
||||||
|
"priceRange": "฿฿",
|
||||||
|
"areaServed": "Thailand",
|
||||||
|
"sameAs": [
|
||||||
|
"https://www.facebook.com/moreminimore",
|
||||||
|
"https://twitter.com/moreminimore",
|
||||||
|
"https://www.linkedin.com/company/moreminimore"
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "รับทำเว็บไซต์ SEO AI Chatbot | MoreminiMore - โซลูชัน IT เพื่อ SMEs ไทย", "data-astro-cid-j7pv25f6": true }, { "default": ($$result2) => renderTemplate(_a || (_a = __template([' <script type="application/ld+json">', "<\/script> ", `<section id="hero" class="relative min-h-[100dvh] flex items-center justify-center overflow-hidden bg-black" data-astro-cid-j7pv25f6> <!-- Animated Gradient Background --> <div class="absolute inset-0" data-astro-cid-j7pv25f6> <!-- Primary gradient base --> <div class="absolute inset-0 bg-gradient-to-br from-[#fed400] via-[#ffed4a] to-[#fed400]" data-astro-cid-j7pv25f6></div> <!-- Animated mesh gradient --> <div class="hero-mesh" data-astro-cid-j7pv25f6></div> <!-- Floating orbs --> <div class="orb orb-1" data-astro-cid-j7pv25f6></div> <div class="orb orb-2" data-astro-cid-j7pv25f6></div> <div class="orb orb-3" data-astro-cid-j7pv25f6></div> <div class="orb orb-4" data-astro-cid-j7pv25f6></div> </div> <!-- Geometric shapes --> <div class="absolute inset-0 overflow-hidden pointer-events-none" data-astro-cid-j7pv25f6> <div class="shape shape-1" data-astro-cid-j7pv25f6></div> <div class="shape shape-2" data-astro-cid-j7pv25f6></div> <div class="shape shape-3" data-astro-cid-j7pv25f6></div> <div class="shape shape-4" data-astro-cid-j7pv25f6></div> </div> <!-- Noise texture overlay --> <div class="absolute inset-0 opacity-[0.03]" style="background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");" data-astro-cid-j7pv25f6></div> <!-- Content --> <div class="container mx-auto px-4 relative z-10 py-20" data-astro-cid-j7pv25f6> <div class="max-w-5xl mx-auto text-center" data-astro-cid-j7pv25f6> <!-- Hero badge --> <div class="hero-badge" data-astro-cid-j7pv25f6> <span class="badge-dot" data-astro-cid-j7pv25f6></span> <span class="badge-text" data-astro-cid-j7pv25f6>พร้อมช่วยธุรกิจคุณเติบโต</span> </div> <!-- Main headline --> <h1 class="hero-title" data-astro-cid-j7pv25f6>
|
||||||
|
เปลี่ยนธุรกิจให้<br data-astro-cid-j7pv25f6> <span class="text-black" data-astro-cid-j7pv25f6>เติบโตด้วย AI</span> </h1> <!-- Subheadline --> <p class="hero-subtitle" data-astro-cid-j7pv25f6>
|
||||||
|
รับทำเว็บไซต์ AI Chatbot และระบบอัตโนมัติทางการตลาด
|
||||||
|
ที่ช่วยเพิ่มยอดขาย ลดต้นทุน ให้ธุรกิจ SMEs ไทย
|
||||||
|
</p> <!-- CTAs --> <div class="hero-buttons" data-astro-cid-j7pv25f6> <a href="tel:0809955945" class="btn-primary-dark" data-astro-cid-j7pv25f6> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
โทรหาเรา
|
||||||
|
</a> <a href="https://line.me/ti/p/~@539hdlul" target="_blank" rel="noopener noreferrer" class="btn-secondary-light" data-astro-cid-j7pv25f6> <svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-j7pv25f6> <path d="M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.952 10.125 11.854-.188-.9-.357-2.308.077-3.305.39-.896 2.522-5.927 2.522-5.927s-.512-.512-.512-1.267c0-1.186.687-2.073 1.543-2.073.728 0 1.08.546 1.08 1.2 0 .731-.467 1.823-.708 2.835-.203.852.428 1.548 1.268 1.548 1.523 0 2.692-1.606 2.692-3.922 0-1.628-1.169-2.768-2.838-2.768-1.936 0-3.073 1.454-3.073 2.956 0 .695.268 1.44.601 1.842.066.08.075.15.055.231-.065.26-.21.86-.238.979-.034.148-.11.18-.252.109a12.007 12.007 0 01-8.023-2.522A12.013 12.013 0 0112 24c6.627 0 12-5.373 12-12z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
เพิ่ม Line
|
||||||
|
</a> </div> <!-- Trust badges --> <div class="hero-trust" data-astro-cid-j7pv25f6> <p class="trust-label" data-astro-cid-j7pv25f6>เชื่อถือได้</p> <div class="trust-items" data-astro-cid-j7pv25f6> <span class="trust-item" data-astro-cid-j7pv25f6> <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ปรึกษาฟรี
|
||||||
|
</span> <span class="trust-item" data-astro-cid-j7pv25f6> <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ดูแลหลังขาย
|
||||||
|
</span> <span class="trust-item" data-astro-cid-j7pv25f6> <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ราคาเหมาะสม
|
||||||
|
</span> </div> </div> </div> <!-- Scroll indicator --> <div class="scroll-indicator" data-astro-cid-j7pv25f6> <div class="scroll-mouse" data-astro-cid-j7pv25f6> <div class="scroll-wheel" data-astro-cid-j7pv25f6></div> </div> </div> </div> </section> <section id="services" class="py-24 bg-[#0f0f0f]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4" data-astro-cid-j7pv25f6> <!-- Section header --> <div class="text-center mb-16" data-astro-cid-j7pv25f6> <span class="inline-block px-4 py-1.5 bg-[#fed400]/20 text-[#fed400] rounded-full text-sm font-medium mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
บริการของเรา
|
||||||
|
</span> <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-white mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
โซลูชันครบวงจร<br data-astro-cid-j7pv25f6>สำหรับธุรกิจของคุณ
|
||||||
|
</h2> <p class="text-gray-400 text-lg max-w-2xl mx-auto" data-astro-cid-j7pv25f6>
|
||||||
|
เราช่วยคุณตั้งแต่เริ่มต้นจนถึงการเติบโต ด้วยเทคโนโลยีที่เหมาะกับง<E0B89A><E0B887><EFBFBD>ประมาณ
|
||||||
|
</p> </div> <!-- Bento Grid --> <div class="services-grid" data-astro-cid-j7pv25f6> <!-- Service 1 - Large card --> <a href="/web-development" class="service-card-large group" data-astro-cid-j7pv25f6> <div class="service-icon" data-astro-cid-j7pv25f6> <svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="text-2xl font-bold text-white mb-2 group-hover:text-[#fed400] transition-colors" data-astro-cid-j7pv25f6>AI-Enhanced Website</h3> <p class="text-gray-400 mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
เว็บไซต์ที่มี AI Chatbot ตอบคำถามลูกค้า 24/7 พร้อมระบบ SEO ที่ติดอันดับ Google
|
||||||
|
</p> <span class="service-link" data-astro-cid-j7pv25f6>
|
||||||
|
ดูรายละเอียด
|
||||||
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" data-astro-cid-j7pv25f6></path> </svg> </span> </a> <!-- Service 2 --> <a href="/marketing-automation" class="service-card group" data-astro-cid-j7pv25f6> <div class="service-icon" data-astro-cid-j7pv25f6> <svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2" data-astro-cid-j7pv25f6>Marketing Automation</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>
|
||||||
|
ระบบการตลาดอัตโนมัติ รวม SEO, LINE, Facebook, Email ลดงานซ้ำซ้อน
|
||||||
|
</p> </a> <!-- Service 3 --> <a href="/ai-automation" class="service-card group" data-astro-cid-j7pv25f6> <div class="service-icon" data-astro-cid-j7pv25f6> <svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" data-astro-cid-j7pv25f6></path> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2" data-astro-cid-j7pv25f6>AI Automation</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>
|
||||||
|
ระบบอัตโนมัติทุกอย่าง ตอบคำถาม ส่งข้อมูล บันทึกออร์เดอร์ 24/7
|
||||||
|
</p> </a> <!-- Service 4 --> <a href="/tech-consult" class="service-card group" data-astro-cid-j7pv25f6> <div class="service-icon" data-astro-cid-j7pv25f6> <svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2" data-astro-cid-j7pv25f6>Tech Consult</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>
|
||||||
|
คำปรึกษาระบบ IT และ Cloud เลือกเครื่องมือที่เหมาะกับธุรกิจคุณ
|
||||||
|
</p> </a> <!-- CTA Card --> <div class="service-card-cta bg-[#fed400]" data-astro-cid-j7pv25f6> <h3 class="text-xl font-bold text-black mb-2" data-astro-cid-j7pv25f6>ไม่แน่ใจเลือกอะไร?</h3> <p class="text-black/70 text-sm mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
ปรึกษาฟรี! เราพร้อมแนะนำโซลูชันที่เหมาะกับธุรกิจและงบประมาณของคุณ
|
||||||
|
</p> <a href="tel:0809955945" class="btn-primary-black" data-astro-cid-j7pv25f6>ปรึกษาฟรี</a> </div> </div> </div> </section> <section id="why-choose-us" class="py-24 bg-[#e8e8e8]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4" data-astro-cid-j7pv25f6> <div class="max-w-4xl mx-auto" data-astro-cid-j7pv25f6> <h2 class="text-3xl md:text-4xl font-bold text-center mb-12 text-black" data-astro-cid-j7pv25f6>
|
||||||
|
ทำไมเลือกเรา?
|
||||||
|
</h2> <div class="grid md:grid-cols-2 gap-6" data-astro-cid-j7pv25f6> <div class="benefit-card group" data-astro-cid-j7pv25f6> <div class="benefit-icon" data-astro-cid-j7pv25f6> <svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="font-bold text-xl mb-2 text-black" data-astro-cid-j7pv25f6>เน้นผลลัพธ์</h3> <p class="text-gray-600 leading-relaxed" data-astro-cid-j7pv25f6>เราวัดผลทุกอย่าง และมุ่งเน้นให้เห็นผลจริงในการเพิ่มยอดขาย</p> </div> <div class="benefit-card group" data-astro-cid-j7pv25f6> <div class="benefit-icon" data-astro-cid-j7pv25f6> <svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="font-bold text-xl mb-2 text-black" data-astro-cid-j7pv25f6>ราคาเหมาะสม</h3> <p class="text-gray-600 leading-relaxed" data-astro-cid-j7pv25f6>ออกแบบมาให้ SMEs สามารถเริ่มต้นได้ง่าย ไม่ต้องลงทุนมาก</p> </div> <div class="benefit-card group" data-astro-cid-j7pv25f6> <div class="benefit-icon" data-astro-cid-j7pv25f6> <svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="font-bold text-xl mb-2 text-black" data-astro-cid-j7pv25f6>ดูแลต่อเนื่อง</h3> <p class="text-gray-600 leading-relaxed" data-astro-cid-j7pv25f6>ไม่ทิ้งหลังขาย พร้อมอบรมและสนับสนุนตลอดการใช้งาน</p> </div> <div class="benefit-card group" data-astro-cid-j7pv25f6> <div class="benefit-icon" data-astro-cid-j7pv25f6> <svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" data-astro-cid-j7pv25f6></path> </svg> </div> <h3 class="font-bold text-xl mb-2 text-black" data-astro-cid-j7pv25f6>ทำงานเร็ว</h3> <p class="text-gray-600 leading-relaxed" data-astro-cid-j7pv25f6>เข้าใจว่าธุรกิจต้องการผลลัพธ์เร็ว ทำงานตรงเวลา ไม่ผัดวัน</p> </div> </div> </div> </div> </section> <section id="process" class="py-24 bg-[#0f0f0f]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4" data-astro-cid-j7pv25f6> <div class="text-center mb-16" data-astro-cid-j7pv25f6> <span class="inline-block px-4 py-1.5 bg-[#fed400]/20 text-[#fed400] rounded-full text-sm font-medium mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
กระบวนการทำงาน
|
||||||
|
</span> <h2 class="text-3xl md:text-4xl font-bold text-white" data-astro-cid-j7pv25f6>
|
||||||
|
เริ่มต้นง่ายๆ 4 ขั้นตอน
|
||||||
|
</h2> </div> <!-- Timeline --> <div class="timeline" data-astro-cid-j7pv25f6> <!-- Step 1 --> <div class="timeline-item" data-astro-cid-j7pv25f6> <div class="timeline-number" data-astro-cid-j7pv25f6>1</div> <div class="timeline-content" data-astro-cid-j7pv25f6> <h3 class="font-bold text-lg text-white mb-2" data-astro-cid-j7pv25f6>ปรึกษาฟรี</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>พูดคุยกับเราฟรี! เราจะฟังความต้องการของคุณและแนะนำโซลูชันท<E0B899><E0B897><EFBFBD>่<EFBFBD><E0B988><EFBFBD>หมาะสม</p> </div> </div> <!-- Step 2 --> <div class="timeline-item" data-astro-cid-j7pv25f6> <div class="timeline-number" data-astro-cid-j7pv25f6>2</div> <div class="timeline-content" data-astro-cid-j7pv25f6> <h3 class="font-bold text-lg text-white mb-2" data-astro-cid-j7pv25f6>วางแผนและเสนอราคา</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>เราจะส่ง proposal พร้อมราคาและ timeline ที่ชัดเจน ไม่มีค่าใช้จ่ายซ่อนเร้น</p> </div> </div> <!-- Step 3 --> <div class="timeline-item" data-astro-cid-j7pv25f6> <div class="timeline-number" data-astro-cid-j7pv25f6>3</div> <div class="timeline-content" data-astro-cid-j7pv25f6> <h3 class="font-bold text-lg text-white mb-2" data-astro-cid-j7pv25f6>พัฒนาและติดตั้ง</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>ทีมงานเริ่มพัฒนาระบบให้คุณ พร้อมอัปเดตความคืบหน้าตลอด</p> </div> </div> <!-- Step 4 --> <div class="timeline-item" data-astro-cid-j7pv25f6> <div class="timeline-number" data-astro-cid-j7pv25f6>4</div> <div class="timeline-content" data-astro-cid-j7pv25f6> <h3 class="font-bold text-lg text-white mb-2" data-astro-cid-j7pv25f6>ส่งมอบและดูแลต่อเนื่อง</h3> <p class="text-gray-400 text-sm" data-astro-cid-j7pv25f6>ส่งมอบพร้อมอบรมการใช้งาน และดูแลหลังการขายให้ตลอด</p> </div> </div> </div> </div> </section> <section id="quick-cta" class="py-20 bg-[#fed400]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4 text-center" data-astro-cid-j7pv25f6> <h2 class="text-3xl md:text-4xl font-bold text-black mb-4" data-astro-cid-j7pv25f6>
|
||||||
|
พร้อมเปลี่ยนธุรกิจแล้วหรือยัง?
|
||||||
|
</h2> <p class="text-black/70 mb-10 max-w-xl mx-auto text-lg" data-astro-cid-j7pv25f6>
|
||||||
|
เริ่มต้นง่ายๆ แค่โทรหาหรือเพิ่ม LINE มาคุยกันก่อน ไม่มีค่าใช้จ่าย!
|
||||||
|
</p> <div class="flex flex-col sm:flex-row gap-4 justify-center" data-astro-cid-j7pv25f6> <a href="tel:0809955945" class="btn-primary-black" data-astro-cid-j7pv25f6> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
080-995-5945
|
||||||
|
</a> <a href="https://line.me/ti/p/~@539hdlul" target="_blank" rel="noopener noreferrer" class="btn-secondary-black" data-astro-cid-j7pv25f6> <svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-j7pv25f6> <path d="M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.952 10.125 11.854-.188-.9-.357-2.308.077-3.305.39-.896 2.522-5.927 2.522-5.927s-.512-.512-.512-1.267c0-1.186.687-2.073 1.543-2.073.728 0 1.08.546 1.08 1.2 0 .731-.467 1.823-.708 2.835-.203.852.428 1.548 1.268 1.548 1.523 0 2.692-1.606 2.692-3.922 0-1.628-1.169-2.768-2.838-2.768-1.936 0-3.073 1.454-3.073 2.956 0 .695.268 1.44.601 1.842.066.08.075.15.055.231-.065.26-.21.86-.238.979-.034.148-.11.18-.252.109a12.007 12.007 0 01-8.023-2.522A12.013 12.013 0 0112 24c6.627 0 12-5.373 12-12z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
เพิ่ม Line
|
||||||
|
</a> </div> </div> </section> <section id="seo-content" class="py-24 bg-[#e8e8e8]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4" data-astro-cid-j7pv25f6> <div class="max-w-4xl mx-auto" data-astro-cid-j7pv25f6> <h2 class="text-3xl md:text-4xl font-bold mb-8 text-center text-black" data-astro-cid-j7pv25f6>
|
||||||
|
บริการรับทำเว็บไซต์ SEO และ AI Chatbot เพื่อธุรกิจ SMEs
|
||||||
|
</h2> <div class="prose-content space-y-8" data-astro-cid-j7pv25f6> <div data-astro-cid-j7pv25f6> <p class="text-gray-700 leading-relaxed" data-astro-cid-j7pv25f6> <strong class="text-black" data-astro-cid-j7pv25f6>บริษัท มอร์มินิมอร์ จำกัด</strong> ให้บริการรับทำเว็บไซต์ SEO และ AI Chatbot ครบวงจร สำหรับธุรกิจ SMEs ทั่วประเทศ เราเข้าใจดีว่าในยุคดิจิทัลปัจจุบัน การมีเว็บไซต์ที่สวยงามอย่างเดียวไม่เพียงพอ แต่ต้องเป็นเว็บไซต์ที่สามารถเพิ่มยอดขายได้จริง ติดอันดับ Google และมีระบบอัตโนมัติที่ช่วยลดต้นทุนในการดำเนินงาน
|
||||||
|
</p> </div> <div data-astro-cid-j7pv25f6> <h3 class="text-xl font-bold mt-8 mb-4 text-black" data-astro-cid-j7pv25f6>ทำไมต้องเลือกบริการของเรา?</h3> <p class="text-gray-700 leading-relaxed" data-astro-cid-j7pv25f6>
|
||||||
|
ด้วยประสบการณ์ในการพัฒนาระบบ IT และ AI ให้กับธุรกิจหลากหลายประเภท เราพร้อมมอบโซลูชันที่เหมาะสมกับงบประมาณและความต้องการของคุณ ไม่ว่าจะเป็นเว็บไซต์สำหรับร้านค้าออนไลน์ ระบบ Chatbot ตอบคำถามอัตโนมัติ หรือการทำ SEO ให้เว็ติดอันดับ Google เราดูแลครบทุกขั้นตอนตั้งแต่ต้นจนจบ
|
||||||
|
</p> </div> <div data-astro-cid-j7pv25f6> <h3 class="text-xl font-bold mt-8 mb-4 text-black" data-astro-cid-j7pv25f6>บริการรับทำเว็บไซต์ครบวงจร</h3> <ul class="service-list" data-astro-cid-j7pv25f6> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ออกแบบ UI/UX ที่ใช้งานง่าย สวยงาม ทันสมัย
|
||||||
|
</li> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
รองรับ SEO ตั้งแต่โครงสร้างเว็บไซต์
|
||||||
|
</li> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
Responsive Design แสดงผลสวยงามทุกอุปกรณ์
|
||||||
|
</li> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ระบบจัดการเนื้อหา (CMS) ใช้งานง่าย
|
||||||
|
</li> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ติดตั้ง SSL Certificate เพื่อความปลอดภัย
|
||||||
|
</li> <li data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
เชื่อมต่อ Google Analytics และ Search Console
|
||||||
|
</li> </ul> </div> <div class="cta-box" data-astro-cid-j7pv25f6> <h3 class="text-xl font-bold mb-4 text-black" data-astro-cid-j7pv25f6>เริ่มต้นอย่างไร?</h3> <p class="text-gray-700 leading-relaxed" data-astro-cid-j7pv25f6>
|
||||||
|
หากคุณสนใจบริการของเรา สามารถติดต่อมาปรึกษาฟรี ไม่มีค่าใช้จ่าย เราพร้อมช่วยคุณวิเคราะห์ความต้องการและแนะนำโซลูชันที่เหมาะสมที่สุดกับธุรกิจและงบประมาณของคุณ
|
||||||
|
</p> </div> </div> </div> </div> </section> <section id="faq" class="py-24 bg-[#0f0f0f]" data-astro-cid-j7pv25f6> <div class="container mx-auto px-4 max-w-3xl" data-astro-cid-j7pv25f6> <h2 class="text-3xl md:text-4xl font-bold text-center mb-12 text-white" data-astro-cid-j7pv25f6>
|
||||||
|
คำถามที่พบบ่อย
|
||||||
|
</h2> <div class="faq-list space-y-4" data-astro-cid-j7pv25f6> <details class="faq-item" data-astro-cid-j7pv25f6> <summary class="faq-question" data-astro-cid-j7pv25f6> <span data-astro-cid-j7pv25f6>SMEs ขนาดเล็ก ใช้บริการของคุณได้ไหม?</span> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" data-astro-cid-j7pv25f6></path> </svg> </summary> <div class="faq-answer" data-astro-cid-j7pv25f6>
|
||||||
|
ได้แน่นอน! เราออกแบบบริการสำหรับ SMEs โดยเฉพาะ มีทั้ง Package เล็กสำหรับธุรกิจเริ่มต้น และโซลูชันใหญ่สำหรับธุรกิจที่กำลังขยาย
|
||||||
|
</div> </details> <details class="faq-item" data-astro-cid-j7pv25f6> <summary class="faq-question" data-astro-cid-j7pv25f6> <span data-astro-cid-j7pv25f6>ต้องใช้ความรู้ทางเทคนิคไหม?</span> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" data-astro-cid-j7pv25f6></path> </svg> </summary> <div class="faq-answer" data-astro-cid-j7pv25f6>
|
||||||
|
ไม่จำเป็น! เราดูแลทุกอย่างตั้งแต่ต้นจนจบ และอบรมทีมของคุณให้ใช้งานระบบได้อย่างมั่นใจ
|
||||||
|
</div> </details> <details class="faq-item" data-astro-cid-j7pv25f6> <summary class="faq-question" data-astro-cid-j7pv25f6> <span data-astro-cid-j7pv25f6>ใช้เวลานานแค่ไหนถึงจะเห็นผล?</span> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" data-astro-cid-j7pv25f6></path> </svg> </summary> <div class="faq-answer" data-astro-cid-j7pv25f6>
|
||||||
|
ขึ้นอยู่กับบริการ: เว็บไซต์ใช้เวลา 2-6 สัปดาห์, Marketing Automation เห็นผลใน 1-3 เดือน, SEO ใช้เวลา 3-6 เดือนในการติดอันดับ
|
||||||
|
</div> </details> <details class="faq-item" data-astro-cid-j7pv25f6> <summary class="faq-question" data-astro-cid-j7pv25f6> <span data-astro-cid-j7pv25f6>มีบริการหลังการขายไหม?</span> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" data-astro-cid-j7pv25f6></path> </svg> </summary> <div class="faq-answer" data-astro-cid-j7pv25f6>
|
||||||
|
มี! เราดูแลหลังการติดตั้ง อบรมการใช้งาน และพร้อมให้คำปรึกษาเมื่อคุณต้องการ
|
||||||
|
</div> </details> <details class="faq-item" data-astro-cid-j7pv25f6> <summary class="faq-question" data-astro-cid-j7pv25f6> <span data-astro-cid-j7pv25f6>เริ่มต้นอย่างไร?</span> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" data-astro-cid-j7pv25f6></path> </svg> </summary> <div class="faq-answer" data-astro-cid-j7pv25f6>
|
||||||
|
ติดต่อเราเพื่อคุยกันและให้คำปรึกษาฟรี! เราจะพูดคุยความต้องการ และแนะนำโซลูชันที่เหมาะสมที่สุดสำหรับธุรกิจคุณ
|
||||||
|
</div> </details> </div> </div> </section> <section id="final-cta" class="relative py-32 bg-black overflow-hidden" data-astro-cid-j7pv25f6> <!-- Background effects --> <div class="absolute inset-0" data-astro-cid-j7pv25f6> <div class="absolute top-0 left-1/4 w-96 h-96 bg-[#fed400] rounded-full blur-[150px] opacity-20" data-astro-cid-j7pv25f6></div> <div class="absolute bottom-0 right-1/4 w-72 h-72 bg-purple-600 rounded-full blur-[120px] opacity-30" data-astro-cid-j7pv25f6></div> </div> <div class="container mx-auto px-4 text-center relative z-10" data-astro-cid-j7pv25f6> <div class="max-w-3xl mx-auto" data-astro-cid-j7pv25f6> <span class="inline-block px-4 py-1.5 bg-[#fed400]/20 text-[#fed400] rounded-full text-sm font-medium mb-6" data-astro-cid-j7pv25f6>
|
||||||
|
เริ่มต้นวันนี้
|
||||||
|
</span> <h2 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 text-white leading-tight" data-astro-cid-j7pv25f6>
|
||||||
|
พร้อมเปลี่ยน<br data-astro-cid-j7pv25f6><span class="text-[#fed400]" data-astro-cid-j7pv25f6>องค์กรด้วย AI</span> หรือยัง?
|
||||||
|
</h2> <p class="text-gray-400 text-lg mb-12 max-w-xl mx-auto leading-relaxed" data-astro-cid-j7pv25f6>
|
||||||
|
ปรึกษาผู้เชี่ยวชาญฟรี เราพร้อมช่วยคุณวางกลยุทธ์ AI ที่วัดผลได้
|
||||||
|
</p> <div class="flex flex-col sm:flex-row gap-6 justify-center" data-astro-cid-j7pv25f6> <a href="tel:0809955945" class="btn-primary-yellow" data-astro-cid-j7pv25f6> <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6> <path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
080-995-5945
|
||||||
|
</a> <a href="https://line.me/ti/p/~@539hdlul" target="_blank" rel="noopener noreferrer" class="btn-final-line" data-astro-cid-j7pv25f6> <svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-j7pv25f6> <path d="M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.952 10.125 11.854-.188-.9-.357-2.308.077-3.305.39-.896 2.522-5.927 2.522-5.927s-.512-.512-.512-1.267c0-1.186.687-2.073 1.543-2.073.728 0 1.08.546 1.08 1.2 0 .731-.467 1.823-.708 2.835-.203.852.428 1.548 1.268 1.548 1.523 0 2.692-1.606 2.692-3.922 0-1.628-1.169-2.768-2.838-2.768-1.936 0-3.073 1.454-3.073 2.956 0 .695.268 1.44.601 1.842.066.08.075.15.055.231-.065.26-.21.86-.238.979-.034.148-.11.18-.252.109a12.007 12.007 0 01-8.023-2.522A12.013 12.013 0 0112 24c6.627 0 12-5.373 12-12z" data-astro-cid-j7pv25f6></path> </svg>
|
||||||
|
เพิ่ม Line
|
||||||
|
</a> </div> <!-- Final trust badges --> <div class="final-trust" data-astro-cid-j7pv25f6> <div class="flex flex-wrap justify-center gap-8 text-gray-500 text-sm" data-astro-cid-j7pv25f6> <span class="flex items-center gap-2" data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-500" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ปรึกษาฟรี
|
||||||
|
</span> <span class="flex items-center gap-2" data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-500" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ไม่มีค่าใช้จ่ายเริ่มต้น
|
||||||
|
</span> <span class="flex items-center gap-2" data-astro-cid-j7pv25f6> <svg class="w-5 h-5 text-green-500" fill="currentColor" viewBox="0 0 24 24" data-astro-cid-j7pv25f6><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" data-astro-cid-j7pv25f6></path></svg>
|
||||||
|
ดูแลต่อเนื่อง
|
||||||
|
</span> </div> </div> </div> </div> </section> `])), unescapeHTML(JSON.stringify(schemaData)), maybeRenderHead()) })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/index.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/index.astro";
|
||||||
|
const $$url = "";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$Index,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
50
dist/server/chunks/marketing-automation_u7n4LNmE.mjs
vendored
Normal file
1951
dist/server/chunks/node_CXM37Qne.mjs
vendored
Normal file
3
dist/server/chunks/noop-entrypoint_BOlrdqWF.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const server = {};
|
||||||
|
|
||||||
|
export { server };
|
||||||
22
dist/server/chunks/portfolio_BfApnBuw.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$Portfolio = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "ผลงาน", "description": "ตัวอย่างผลงานการพัฒนาเว็บไซต์และระบบของ MoreminiMore", "data-astro-cid-hcjuqwdu": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-hcjuqwdu> <div class="container" data-astro-cid-hcjuqwdu> <h1 data-astro-cid-hcjuqwdu>ผลงานของเรา</h1> <p data-astro-cid-hcjuqwdu>ตัวอย่างผลงานที่ผ่านมา</p> </div> </section> <section class="content" data-astro-cid-hcjuqwdu> <div class="container" data-astro-cid-hcjuqwdu> <p data-astro-cid-hcjuqwdu>ผลงานกำลังจะมาเร็วๆ นี้</p> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/portfolio.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/portfolio.astro";
|
||||||
|
const $$url = "/portfolio";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$Portfolio,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
22
dist/server/chunks/privacy-policy_Cs6j-U88.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$PrivacyPolicy = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "นโยบายความเป็นส่วนตัว", "description": "นโยบายความเป็นส่วนตัว - บริษัท มอร์มินิมอร์ จำกัด", "data-astro-cid-3llnt6j6": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-3llnt6j6> <div class="container" data-astro-cid-3llnt6j6> <h1 data-astro-cid-3llnt6j6>นโยบายความเป็นส่วนตัว</h1> </div> </section> <section class="content" data-astro-cid-3llnt6j6> <div class="container" data-astro-cid-3llnt6j6> <h2 data-astro-cid-3llnt6j6>นโยบายความเป็นส่วนตัว (Privacy Policy)</h2> <p data-astro-cid-3llnt6j6>บริษัท มอร์มินิมอร์ จำกัด ตระหนักถึงความสำคัญของข้อมูลส่วนบุคคล จึงได้จัดทำนโยบายความเป็นส่วนตัวฉบับนี้ขึ้นเพื่อแจ้งให้ท่านทราบเกี่ยวกับการเก็บรวบรวม ใช้ และเปิดเผยข้อมูลส่วนบุคคลของท่าน</p> <h3 data-astro-cid-3llnt6j6>1. ข้อมูลที่เก็บรวบรวม</h3> <ul data-astro-cid-3llnt6j6> <li data-astro-cid-3llnt6j6>ข้อมูลที่ท่านให้เรา เช่น ชื่อ อีเมล เบอร์โทร</li> <li data-astro-cid-3llnt6j6>ข้อมูลการใช้งานเว็บไซต์</li> <li data-astro-cid-3llnt6j6>ข้อมูลจากคุกกี้</li> </ul> <h3 data-astro-cid-3llnt6j6>2. วัตถุประสงค์ในการใช้ข้อมูล</h3> <ul data-astro-cid-3llnt6j6> <li data-astro-cid-3llnt6j6>เพื่อให้บริการแก่ท่าน</li> <li data-astro-cid-3llnt6j6>เพื่อติดต่อสื่อสารกับท่าน</li> <li data-astro-cid-3llnt6j6>เพื่อปรับปรุงบริการ</li> </ul> <h3 data-astro-cid-3llnt6j6>3. การคุ้มครองข้อมูล</h3> <p data-astro-cid-3llnt6j6>เราจะเก็บรักษาข้อมูลส่วนบุคคลของท่านอย่างปลอดภัยและเป็นความลับ</p> <h3 data-astro-cid-3llnt6j6>4. ติดต่อเรา</h3> <p data-astro-cid-3llnt6j6>หากท่านมีคำถามเกี่ยวกับนโยบายความเป็นส่วนตัวนี้ กรุณาติดต่อเราที่:</p> <ul data-astro-cid-3llnt6j6> <li data-astro-cid-3llnt6j6>โทร: 080-995-5945</li> <li data-astro-cid-3llnt6j6>อีเมล: contact@moreminimore.com</li> </ul> <p data-astro-cid-3llnt6j6><em data-astro-cid-3llnt6j6>อัปเดตล่าสุด: ${(/* @__PURE__ */ new Date()).toLocaleDateString("th-TH")}</em></p> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/privacy-policy.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/privacy-policy.astro";
|
||||||
|
const $$url = "/privacy-policy";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$PrivacyPolicy,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
9339
dist/server/chunks/server_CW1mBpZH.mjs
vendored
Normal file
142
dist/server/chunks/sharp_EalPyCjR.mjs
vendored
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
import { A as AstroError, p as MissingSharp } from './server_CW1mBpZH.mjs';
|
||||||
|
import { b as baseService, p as parseQuality } from './node_CXM37Qne.mjs';
|
||||||
|
|
||||||
|
let sharp;
|
||||||
|
const qualityTable = {
|
||||||
|
low: 25,
|
||||||
|
mid: 50,
|
||||||
|
high: 80,
|
||||||
|
max: 100
|
||||||
|
};
|
||||||
|
function resolveSharpQuality(quality) {
|
||||||
|
if (!quality) return void 0;
|
||||||
|
const parsedQuality = parseQuality(quality);
|
||||||
|
if (typeof parsedQuality === "number") {
|
||||||
|
return parsedQuality;
|
||||||
|
}
|
||||||
|
return quality in qualityTable ? qualityTable[quality] : void 0;
|
||||||
|
}
|
||||||
|
function resolveSharpEncoderOptions(transform, inputFormat, serviceConfig = {}) {
|
||||||
|
const quality = resolveSharpQuality(transform.quality);
|
||||||
|
switch (transform.format) {
|
||||||
|
case "jpg":
|
||||||
|
case "jpeg":
|
||||||
|
return {
|
||||||
|
...serviceConfig.jpeg,
|
||||||
|
...quality === void 0 ? {} : { quality }
|
||||||
|
};
|
||||||
|
case "png":
|
||||||
|
return {
|
||||||
|
...serviceConfig.png,
|
||||||
|
...quality === void 0 ? {} : { quality }
|
||||||
|
};
|
||||||
|
case "webp": {
|
||||||
|
const webpOptions = {
|
||||||
|
...serviceConfig.webp,
|
||||||
|
...quality === void 0 ? {} : { quality }
|
||||||
|
};
|
||||||
|
if (inputFormat === "gif") {
|
||||||
|
webpOptions.loop ??= 0;
|
||||||
|
}
|
||||||
|
return webpOptions;
|
||||||
|
}
|
||||||
|
case "avif":
|
||||||
|
return {
|
||||||
|
...serviceConfig.avif,
|
||||||
|
...quality === void 0 ? {} : { quality }
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
return quality === void 0 ? void 0 : { quality };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function loadSharp() {
|
||||||
|
let sharpImport;
|
||||||
|
try {
|
||||||
|
sharpImport = (await import('sharp')).default;
|
||||||
|
} catch {
|
||||||
|
throw new AstroError(MissingSharp);
|
||||||
|
}
|
||||||
|
sharpImport.cache(false);
|
||||||
|
return sharpImport;
|
||||||
|
}
|
||||||
|
const fitMap = {
|
||||||
|
fill: "fill",
|
||||||
|
contain: "inside",
|
||||||
|
cover: "cover",
|
||||||
|
none: "outside",
|
||||||
|
"scale-down": "inside",
|
||||||
|
outside: "outside",
|
||||||
|
inside: "inside"
|
||||||
|
};
|
||||||
|
const sharpService = {
|
||||||
|
validateOptions: baseService.validateOptions,
|
||||||
|
getURL: baseService.getURL,
|
||||||
|
parseURL: baseService.parseURL,
|
||||||
|
getHTMLAttributes: baseService.getHTMLAttributes,
|
||||||
|
getSrcSet: baseService.getSrcSet,
|
||||||
|
getRemoteSize: baseService.getRemoteSize,
|
||||||
|
async transform(inputBuffer, transformOptions, config) {
|
||||||
|
if (!sharp) sharp = await loadSharp();
|
||||||
|
const transform = transformOptions;
|
||||||
|
const kernel = config.service.config.kernel;
|
||||||
|
if (transform.format === "svg") return { data: inputBuffer, format: "svg" };
|
||||||
|
const result = sharp(inputBuffer, {
|
||||||
|
failOnError: false,
|
||||||
|
pages: -1,
|
||||||
|
limitInputPixels: config.service.config.limitInputPixels
|
||||||
|
});
|
||||||
|
result.rotate();
|
||||||
|
const { format } = await result.metadata();
|
||||||
|
if (transform.width && transform.height) {
|
||||||
|
const fit = transform.fit ? fitMap[transform.fit] ?? "inside" : void 0;
|
||||||
|
result.resize({
|
||||||
|
width: Math.round(transform.width),
|
||||||
|
height: Math.round(transform.height),
|
||||||
|
kernel,
|
||||||
|
fit,
|
||||||
|
position: transform.position,
|
||||||
|
withoutEnlargement: true
|
||||||
|
});
|
||||||
|
} else if (transform.height && !transform.width) {
|
||||||
|
result.resize({
|
||||||
|
height: Math.round(transform.height),
|
||||||
|
withoutEnlargement: true,
|
||||||
|
kernel
|
||||||
|
});
|
||||||
|
} else if (transform.width) {
|
||||||
|
result.resize({
|
||||||
|
width: Math.round(transform.width),
|
||||||
|
withoutEnlargement: true,
|
||||||
|
kernel
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (transform.background) {
|
||||||
|
result.flatten({ background: transform.background });
|
||||||
|
}
|
||||||
|
if (transform.format) {
|
||||||
|
const encoderOptions = resolveSharpEncoderOptions(transform, format, config.service.config);
|
||||||
|
if (transform.format === "webp" && format === "gif") {
|
||||||
|
result.webp(encoderOptions);
|
||||||
|
} else if (transform.format === "webp") {
|
||||||
|
result.webp(encoderOptions);
|
||||||
|
} else if (transform.format === "png") {
|
||||||
|
result.png(encoderOptions);
|
||||||
|
} else if (transform.format === "avif") {
|
||||||
|
result.avif(encoderOptions);
|
||||||
|
} else if (transform.format === "jpeg" || transform.format === "jpg") {
|
||||||
|
result.jpeg(encoderOptions);
|
||||||
|
} else {
|
||||||
|
result.toFormat(transform.format, encoderOptions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const { data, info } = await result.toBuffer({ resolveWithObject: true });
|
||||||
|
const needsCopy = "buffer" in data && data.buffer instanceof SharedArrayBuffer;
|
||||||
|
return {
|
||||||
|
data: needsCopy ? new Uint8Array(data) : data,
|
||||||
|
format: info.format
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var sharp_default = sharpService;
|
||||||
|
|
||||||
|
export { sharp_default as default, resolveSharpEncoderOptions };
|
||||||
50
dist/server/chunks/tech-consult_dhkPn_uG.mjs
vendored
Normal file
22
dist/server/chunks/terms-and-conditions_BFJ09p_I.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$TermsAndConditions = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "ข้อกำหนดการใช้งาน", "description": "ข้อกำหนดการใช้งานเว็บไซต์ - บริษัท มอร์มินิมอร์ จำกัด", "data-astro-cid-uh6gtrza": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-uh6gtrza> <div class="container" data-astro-cid-uh6gtrza> <h1 data-astro-cid-uh6gtrza>ข้อกำหนดการใช้งาน</h1> </div> </section> <section class="content" data-astro-cid-uh6gtrza> <div class="container" data-astro-cid-uh6gtrza> <h2 data-astro-cid-uh6gtrza>ข้อกำหนดและเงื่อนไขการใช้งาน</h2> <p data-astro-cid-uh6gtrza>การเข้าใช้งานเว็บไซต์นี้ ถือว่าท่านยอมรับข้อกำหนดและเงื่อนไขต่อไปนี้</p> <h3 data-astro-cid-uh6gtrza>1. การยอมรับเงื่อนไข</h3> <p data-astro-cid-uh6gtrza>ท่านตกลงที่จะใช้งานเว็บไซต์ตามข้อกำหนดและเงื่อนไขที่ระบุไว้</p> <h3 data-astro-cid-uh6gtrza>2. ลิขสิทธิ์</h3> <p data-astro-cid-uh6gtrza>เนื้อหาทั้งหมดบนเว็บไซต์นี้เป็นลิขสิทธิ์ของบริษัท มอร์มินิมอร์ จำกัด</p> <h3 data-astro-cid-uh6gtrza>3. การห้ามใช้งาน</h3> <p data-astro-cid-uh6gtrza>ท่านไม่สามารถ:</p> <ul data-astro-cid-uh6gtrza> <li data-astro-cid-uh6gtrza>คัดลอกหรือเผยแพร่เนื้อหาโดยไม่ได้รับอนุญาต</li> <li data-astro-cid-uh6gtrza>ใช้งานเว็บไซต์ในทางที่ผิดกฎหมาย</li> <li data-astro-cid-uh6gtrza>รบกวนการทำงานของเว็บไซต์</li> </ul> <h3 data-astro-cid-uh6gtrza>4. ข้อจำกัดความรับผิด</h3> <p data-astro-cid-uh6gtrza>เราไม่รับผิดชอบต่อความเสียหายใดๆ ที่เกิดจากการใช้งานเว็บไซต์นี้</p> <h3 data-astro-cid-uh6gtrza>5. ติดต่อเรา</h3> <p data-astro-cid-uh6gtrza>หากท่านมีคำถามเกี่ยวกับข้อกำหนดนี้ กรุณาติดต่อเราที่ contact@moreminimore.com</p> <p data-astro-cid-uh6gtrza><em data-astro-cid-uh6gtrza>อัปเดตล่าสุด: ${(/* @__PURE__ */ new Date()).toLocaleDateString("th-TH")}</em></p> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/terms-and-conditions.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/terms-and-conditions.astro";
|
||||||
|
const $$url = "/terms-and-conditions";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$TermsAndConditions,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
22
dist/server/chunks/web-development_Dg8hVUpA.mjs
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { c as createComponent } from './astro-component_Y0jc7Trv.mjs';
|
||||||
|
import 'piccolore';
|
||||||
|
import { h as renderComponent, r as renderTemplate, m as maybeRenderHead } from './server_CW1mBpZH.mjs';
|
||||||
|
import { $ as $$Layout } from './Layout_DdK69uya.mjs';
|
||||||
|
|
||||||
|
const $$WebDevelopment = createComponent(($$result, $$props, $$slots) => {
|
||||||
|
return renderTemplate`${renderComponent($$result, "Layout", $$Layout, { "title": "บริการพัฒนาเว็บไซต์", "description": "บริการพัฒนาเว็บไซต์สวยงามและทันสมัยสำหรับธุรกิจ SMEs", "data-astro-cid-5jmbf5qv": true }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<section class="page-header" data-astro-cid-5jmbf5qv> <div class="container" data-astro-cid-5jmbf5qv> <h1 data-astro-cid-5jmbf5qv>บริการพัฒนาเว็บไซต์</h1> <p data-astro-cid-5jmbf5qv>เราพัฒนาเว็บไซต์ที่ตอบโจทย์ธุรกิจของคุณ</p> </div> </section> <section class="content" data-astro-cid-5jmbf5qv> <div class="container" data-astro-cid-5jmbf5qv> <h2 data-astro-cid-5jmbf5qv>ทำไมต้องมีเว็บไซต์?</h2> <ul data-astro-cid-5jmbf5qv> <li data-astro-cid-5jmbf5qv>เป็นหน้าบ้านดิจิทัลของธุรกิจ</li> <li data-astro-cid-5jmbf5qv>สร้างความน่าเชื่อถือ</li> <li data-astro-cid-5jmbf5qv>เข้าถึงลูกค้าได้ตลอด 24 ชั่วโมง</li> <li data-astro-cid-5jmbf5qv>เพิ่มโอกาสในการขาย</li> </ul> <h2 data-astro-cid-5jmbf5qv>รูปแบบเว็บไซต์</h2> <ul data-astro-cid-5jmbf5qv> <li data-astro-cid-5jmbf5qv>เว็บไซต์บริษัท/องค์กร</li> <li data-astro-cid-5jmbf5qv>เว็บไซต์ร้านค้าออนไลน์</li> <li data-astro-cid-5jmbf5qv>Landing Page</li> <li data-astro-cid-5jmbf5qv>ระบบหลังร้าน</li> </ul> <a href="/contact-us" class="btn-primary" data-astro-cid-5jmbf5qv>สอบถามราคา</a> </div> </section> ` })}`;
|
||||||
|
}, "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/web-development.astro", void 0);
|
||||||
|
|
||||||
|
const $$file = "/Users/kunthawatgreethong/Gitea/moreminimore-new/src/pages/web-development.astro";
|
||||||
|
const $$url = "/web-development";
|
||||||
|
|
||||||
|
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||||
|
__proto__: null,
|
||||||
|
default: $$WebDevelopment,
|
||||||
|
file: $$file,
|
||||||
|
url: $$url
|
||||||
|
}, Symbol.toStringTag, { value: 'Module' }));
|
||||||
|
|
||||||
|
const page = () => _page;
|
||||||
|
|
||||||
|
export { page };
|
||||||
6
dist/server/entry.mjs
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export { q as handler, t as options, v as startServer } from './chunks/server_CW1mBpZH.mjs';
|
||||||
|
import '@astrojs/internal-helpers/path';
|
||||||
|
import '@astrojs/internal-helpers/remote';
|
||||||
|
import 'piccolore';
|
||||||
|
import 'es-module-lexer';
|
||||||
|
import 'clsx';
|
||||||
3
dist/server/virtual_astro_middleware.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const onRequest = (_, next) => next();
|
||||||
|
|
||||||
|
export { onRequest };
|
||||||
1
node_modules/.astro/data-store.json
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[["Map",1,2],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://www.moreminimore.com\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"server\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":false,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\",\"entrypoint\":\"astro/assets/endpoint/node\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":{\"backticks\":true,\"closingQuotes\":{\"double\":\"”\",\"single\":\"’\"},\"dashes\":true,\"ellipses\":true,\"openingQuotes\":{\"double\":\"“\",\"single\":\"‘\"},\"quotes\":true}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"svgo\":false,\"rustCompiler\":false,\"queuedRendering\":{\"enabled\":false}},\"legacy\":{\"collectionsBackwardsCompat\":false},\"session\":{\"driver\":{\"entrypoint\":\"unstorage/drivers/fs-lite\",\"config\":{\"base\":\"/Users/kunthawatgreethong/Gitea/moreminimore-new/node_modules/.astro/sessions\"}}}}","astro-version","6.1.8","content-config-digest","29418499c0163d6c"]
|
||||||
1
node_modules/.bin/astro
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../astro/bin/astro.mjs
|
||||||
1
node_modules/.bin/esbuild
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../esbuild/bin/esbuild
|
||||||
1
node_modules/.bin/is-docker
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../is-docker/cli.js
|
||||||
1
node_modules/.bin/is-inside-container
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../is-inside-container/cli.js
|
||||||
1
node_modules/.bin/jiti
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../jiti/lib/jiti-cli.mjs
|
||||||
1
node_modules/.bin/js-yaml
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../js-yaml/bin/js-yaml.js
|
||||||
1
node_modules/.bin/nanoid
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../nanoid/bin/nanoid.js
|
||||||
1
node_modules/.bin/parser
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../@babel/parser/bin/babel-parser.js
|
||||||
1
node_modules/.bin/rolldown
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../rolldown/bin/cli.mjs
|
||||||
1
node_modules/.bin/rollup
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../rollup/dist/bin/rollup
|
||||||
1
node_modules/.bin/semver
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../semver/bin/semver.js
|
||||||
1
node_modules/.bin/sitemap
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../sitemap/dist/esm/cli.js
|
||||||
1
node_modules/.bin/svgo
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../svgo/bin/svgo.js
|
||||||
1
node_modules/.bin/tsc
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../typescript/bin/tsc
|
||||||
1
node_modules/.bin/tsconfck
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../tsconfck/bin/tsconfck.js
|
||||||
1
node_modules/.bin/tsserver
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../typescript/bin/tsserver
|
||||||
1
node_modules/.bin/vite
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../vite/bin/vite.js
|
||||||
4765
node_modules/.package-lock.json
generated
vendored
Normal file
32
node_modules/.vite/deps/_metadata.json
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"hash": "54ca2ad6",
|
||||||
|
"configHash": "b72eebe6",
|
||||||
|
"lockfileHash": "46a9de66",
|
||||||
|
"browserHash": "2780b9ac",
|
||||||
|
"optimized": {
|
||||||
|
"astro > aria-query": {
|
||||||
|
"src": "../../aria-query/lib/index.js",
|
||||||
|
"file": "astro_n_aria-query.js",
|
||||||
|
"fileHash": "c18eadfb",
|
||||||
|
"needsInterop": true
|
||||||
|
},
|
||||||
|
"astro > axobject-query": {
|
||||||
|
"src": "../../axobject-query/lib/index.js",
|
||||||
|
"file": "astro_n_axobject-query.js",
|
||||||
|
"fileHash": "5e6b6b3e",
|
||||||
|
"needsInterop": true
|
||||||
|
},
|
||||||
|
"astro > html-escaper": {
|
||||||
|
"src": "../../html-escaper/esm/index.js",
|
||||||
|
"file": "astro_n_html-escaper.js",
|
||||||
|
"fileHash": "1f9347b8",
|
||||||
|
"needsInterop": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chunks": {
|
||||||
|
"chunk-CFx7f7Oh": {
|
||||||
|
"file": "chunk-CFx7f7Oh.js",
|
||||||
|
"isDynamicEntry": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6391
node_modules/.vite/deps/astro_n_aria-query.js
generated
vendored
Normal file
1
node_modules/.vite/deps/astro_n_aria-query.js.map
generated
vendored
Normal file
2703
node_modules/.vite/deps/astro_n_axobject-query.js
generated
vendored
Normal file
1
node_modules/.vite/deps/astro_n_axobject-query.js.map
generated
vendored
Normal file
67
node_modules/.vite/deps/astro_n_html-escaper.js
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
//#region node_modules/html-escaper/esm/index.js
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
var { replace } = "";
|
||||||
|
var es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;
|
||||||
|
var ca = /[&<>'"]/g;
|
||||||
|
var esca = {
|
||||||
|
"&": "&",
|
||||||
|
"<": "<",
|
||||||
|
">": ">",
|
||||||
|
"'": "'",
|
||||||
|
"\"": """
|
||||||
|
};
|
||||||
|
var pe = (m) => esca[m];
|
||||||
|
/**
|
||||||
|
* Safely escape HTML entities such as `&`, `<`, `>`, `"`, and `'`.
|
||||||
|
* @param {string} es the input to safely escape
|
||||||
|
* @returns {string} the escaped input, and it **throws** an error if
|
||||||
|
* the input type is unexpected, except for boolean and numbers,
|
||||||
|
* converted as string.
|
||||||
|
*/
|
||||||
|
var escape = (es) => replace.call(es, ca, pe);
|
||||||
|
var unes = {
|
||||||
|
"&": "&",
|
||||||
|
"&": "&",
|
||||||
|
"<": "<",
|
||||||
|
"<": "<",
|
||||||
|
">": ">",
|
||||||
|
">": ">",
|
||||||
|
"'": "'",
|
||||||
|
"'": "'",
|
||||||
|
""": "\"",
|
||||||
|
""": "\""
|
||||||
|
};
|
||||||
|
var cape = (m) => unes[m];
|
||||||
|
/**
|
||||||
|
* Safely unescape previously escaped entities such as `&`, `<`, `>`, `"`,
|
||||||
|
* and `'`.
|
||||||
|
* @param {string} un a previously escaped string
|
||||||
|
* @returns {string} the unescaped input, and it **throws** an error if
|
||||||
|
* the input type is unexpected, except for boolean and numbers,
|
||||||
|
* converted as string.
|
||||||
|
*/
|
||||||
|
var unescape = (un) => replace.call(un, es, cape);
|
||||||
|
//#endregion
|
||||||
|
export { escape, unescape };
|
||||||
|
|
||||||
|
//# sourceMappingURL=astro_n_html-escaper.js.map
|
||||||
1
node_modules/.vite/deps/astro_n_html-escaper.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"astro_n_html-escaper.js","names":[],"sources":["../../html-escaper/esm/index.js"],"sourcesContent":["/**\n * Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst {replace} = '';\n\n// escape\nconst es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst ca = /[&<>'\"]/g;\n\nconst esca = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n};\nconst pe = m => esca[m];\n\n/**\n * Safely escape HTML entities such as `&`, `<`, `>`, `\"`, and `'`.\n * @param {string} es the input to safely escape\n * @returns {string} the escaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const escape = es => replace.call(es, ca, pe);\n\n\n// unescape\nconst unes = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"'\n};\nconst cape = m => unes[m];\n\n/**\n * Safely unescape previously escaped entities such as `&`, `<`, `>`, `\"`,\n * and `'`.\n * @param {string} un a previously escaped string\n * @returns {string} the unescaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const unescape = un => replace.call(un, es, cape);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAM,EAAC,YAAW;AAGlB,IAAM,KAAK;AACX,IAAM,KAAK;AAEX,IAAM,OAAO;CACX,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAK;CACN;AACD,IAAM,MAAK,MAAK,KAAK;;;;;;;;AASrB,IAAa,UAAS,OAAM,QAAQ,KAAK,IAAI,IAAI,GAAG;AAIpD,IAAM,OAAO;CACX,SAAS;CACT,SAAS;CACT,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,SAAS;CACT,UAAU;CACV,SAAS;CACT,UAAU;CACV,SAAS;CACV;AACD,IAAM,QAAO,MAAK,KAAK;;;;;;;;;AAUvB,IAAa,YAAW,OAAM,QAAQ,KAAK,IAAI,IAAI,KAAK"}
|
||||||
4
node_modules/.vite/deps/chunk-CFx7f7Oh.js
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
//#region \0rolldown/runtime.js
|
||||||
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
||||||
|
//#endregion
|
||||||
|
export { __commonJSMin as t };
|
||||||
3
node_modules/.vite/deps/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
53
node_modules/@astrojs/compiler/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 [Astro contributors](https://github.com/withastro/compiler/graphs/contributors)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
"""
|
||||||
|
This license applies to parts of the `internal/` subdirectory originating from
|
||||||
|
the https://cs.opensource.google/go/x/net/+/master:html/ repository:
|
||||||
|
|
||||||
|
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
72
node_modules/@astrojs/compiler/README.md
generated
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# Astro Compiler
|
||||||
|
|
||||||
|
Astro’s [Go](https://golang.org/) + WASM compiler.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install @astrojs/compiler
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
#### Transform `.astro` to valid TypeScript
|
||||||
|
|
||||||
|
The Astro compiler can convert `.astro` syntax to a TypeScript Module whose default export generates HTML.
|
||||||
|
|
||||||
|
**Some notes**...
|
||||||
|
|
||||||
|
- TypeScript is valid `.astro` syntax! The output code may need an additional post-processing step to generate valid JavaScript.
|
||||||
|
- `.astro` files rely on a server implementation exposed as `astro/runtime/server/index.js` in the Node ecosystem. Other runtimes currently need to bring their own rendering implementation and reference it via `internalURL`. This is a pain point we're looking into fixing.
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { transform, type TransformResult } from "@astrojs/compiler";
|
||||||
|
|
||||||
|
const result = await transform(source, {
|
||||||
|
filename: "/Users/astro/Code/project/src/pages/index.astro",
|
||||||
|
sourcemap: "both",
|
||||||
|
internalURL: "astro/runtime/server/index.js",
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parse `.astro` and return an AST
|
||||||
|
|
||||||
|
The Astro compiler can emit an AST using the `parse` method.
|
||||||
|
|
||||||
|
**Some notes**...
|
||||||
|
|
||||||
|
- Position data is currently incomplete and in some cases incorrect. We're working on it!
|
||||||
|
- A `TextNode` can represent both HTML `text` and JavaScript/TypeScript source code.
|
||||||
|
- The `@astrojs/compiler/utils` entrypoint exposes `walk` and `walkAsync` functions that can be used to traverse the AST. It also exposes the `is` helper which can be used as guards to derive the proper types for each `node`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { parse } from "@astrojs/compiler";
|
||||||
|
import { walk, walkAsync, is } from "@astrojs/compiler/utils";
|
||||||
|
|
||||||
|
const result = await parse(source, {
|
||||||
|
position: false, // defaults to `true`
|
||||||
|
});
|
||||||
|
|
||||||
|
walk(result.ast, (node) => {
|
||||||
|
// `tag` nodes are `element` | `custom-element` | `component`
|
||||||
|
if (is.tag(node)) {
|
||||||
|
console.log(node.name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await walkAsync(result.ast, async (node) => {
|
||||||
|
if (is.tag(node)) {
|
||||||
|
node.value = await expensiveCalculation(node)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Develop
|
||||||
|
|
||||||
|
### VSCode / CodeSpaces
|
||||||
|
|
||||||
|
A `devcontainer` configuration is available for use with VSCode's [Remote Development extension pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) and GitHub CodeSpaces.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
[CONTRIBUTING.md](/CONTRIBUTING.md)
|
||||||
BIN
node_modules/@astrojs/compiler/dist/astro.wasm
generated
vendored
Normal file
2
node_modules/@astrojs/compiler/dist/browser/index.cjs
generated
vendored
Normal file
11
node_modules/@astrojs/compiler/dist/browser/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { transform as transform$1, parse as parse$1, convertToTSX as convertToTSX$1, teardown as teardown$1, initialize as initialize$1 } from '../shared/types.js';
|
||||||
|
import '../shared/ast.js';
|
||||||
|
import '../shared/diagnostics.js';
|
||||||
|
|
||||||
|
declare const transform: typeof transform$1;
|
||||||
|
declare const parse: typeof parse$1;
|
||||||
|
declare const convertToTSX: typeof convertToTSX$1;
|
||||||
|
declare const teardown: typeof teardown$1;
|
||||||
|
declare const initialize: typeof initialize$1;
|
||||||
|
|
||||||
|
export { convertToTSX, initialize, parse, teardown, transform };
|
||||||
1
node_modules/@astrojs/compiler/dist/browser/index.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
import{a as f}from"../chunk-QR6QDSEV.js";var u=(t,e)=>p().transform(t,e),S=(t,e)=>p().parse(t,e),v=(t,e)=>p().convertToTSX(t,e),a,i,h=()=>{a=void 0,i=void 0,globalThis["@astrojs/compiler"]=void 0},T=async t=>{let e=t.wasmURL;if(!e)throw new Error('Must provide the "wasmURL" option');e+="",a||(a=m(e).catch(n=>{throw a=void 0,n})),i=i||await a},p=()=>{if(!a)throw new Error('You need to call "initialize" before calling this');if(!i)throw new Error('You need to wait for the promise returned from "initialize" to be resolved before calling this');return i},y=async(t,e)=>{let n;return WebAssembly.instantiateStreaming?n=await WebAssembly.instantiateStreaming(fetch(t),e):n=await(async()=>{let s=await fetch(t).then(o=>o.arrayBuffer());return WebAssembly.instantiate(s,e)})(),n},m=async t=>{let e=new f,n=await y(t,e.importObject);e.run(n.instance);let c=globalThis["@astrojs/compiler"];return{transform:(s,o)=>new Promise(r=>r(c.transform(s,o||{}))),convertToTSX:(s,o)=>new Promise(r=>r(c.convertToTSX(s,o||{}))).then(r=>({...r,map:JSON.parse(r.map)})),parse:(s,o)=>new Promise(r=>r(c.parse(s,o||{}))).then(r=>({...r,ast:JSON.parse(r.ast)}))}};export{v as convertToTSX,T as initialize,S as parse,h as teardown,u as transform};
|
||||||
3
node_modules/@astrojs/compiler/dist/browser/utils.cjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"use strict";var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var t in e)c(o,t,{get:e[t],enumerable:!0})},f=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!N.call(o,r)&&r!==t&&c(o,r,{get:()=>e[r],enumerable:!(a=d(e,r))||a.enumerable});return o};var y=o=>f(c({},"__esModule",{value:!0}),o);var v={};u(v,{is:()=>s,serialize:()=>k,walk:()=>h,walkAsync:()=>x});module.exports=y(v);function n(o){return e=>e.type===o}var s={parent(o){return Array.isArray(o.children)},literal(o){return typeof o.value=="string"},tag(o){return o.type==="element"||o.type==="custom-element"||o.type==="component"||o.type==="fragment"},whitespace(o){return o.type==="text"&&o.value.trim().length===0},root:n("root"),element:n("element"),customElement:n("custom-element"),component:n("component"),fragment:n("fragment"),expression:n("expression"),text:n("text"),doctype:n("doctype"),comment:n("comment"),frontmatter:n("frontmatter")},l=class{constructor(e){this.callback=e}async visit(e,t,a){if(await this.callback(e,t,a),s.parent(e)){let r=[];for(let i=0;i<e.children.length;i++){let m=e.children[i];r.push(this.callback(m,e,i))}await Promise.all(r)}}};function h(o,e){new l(e).visit(o)}function x(o,e){return new l(e).visit(o)}function g(o){let e="";for(let t of o.attributes)switch(e+=" ",t.kind){case"empty":{e+=`${t.name}`;break}case"expression":{e+=`${t.name}={${t.value}}`;break}case"quoted":{e+=`${t.name}=${t.raw}`;break}case"template-literal":{e+=`${t.name}=\`${t.value}\``;break}case"shorthand":{e+=`{${t.name}}`;break}case"spread":{e+=`{...${t.value}}`;break}}return e}function k(o,e={selfClose:!0}){let t="";function a(r){if(s.root(r))for(let i of r.children)a(i);else if(s.frontmatter(r))t+=`---${r.value}---
|
||||||
|
|
||||||
|
`;else if(s.comment(r))t+=`<!--${r.value}-->`;else if(s.expression(r)){t+="{";for(let i of r.children)a(i);t+="}"}else if(s.literal(r))t+=r.value;else if(s.tag(r))if(t+=`<${r.name}`,t+=g(r),r.children.length===0&&e.selfClose)t+=" />";else{t+=">";for(let i of r.children)a(i);t+=`</${r.name}>`}}return a(o),t}0&&(module.exports={is,serialize,walk,walkAsync});
|
||||||
29
node_modules/@astrojs/compiler/dist/browser/utils.d.ts
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { Node, ParentNode, LiteralNode, TagLikeNode, TextNode, RootNode, ElementNode, CustomElementNode, ComponentNode, FragmentNode, ExpressionNode, DoctypeNode, CommentNode, FrontmatterNode } from '../shared/ast.js';
|
||||||
|
|
||||||
|
type Visitor = (node: Node, parent?: ParentNode, index?: number) => void | Promise<void>;
|
||||||
|
declare const is: {
|
||||||
|
parent(node: Node): node is ParentNode;
|
||||||
|
literal(node: Node): node is LiteralNode;
|
||||||
|
tag(node: Node): node is TagLikeNode;
|
||||||
|
whitespace(node: Node): node is TextNode;
|
||||||
|
root: (node: Node) => node is RootNode;
|
||||||
|
element: (node: Node) => node is ElementNode;
|
||||||
|
customElement: (node: Node) => node is CustomElementNode;
|
||||||
|
component: (node: Node) => node is ComponentNode;
|
||||||
|
fragment: (node: Node) => node is FragmentNode;
|
||||||
|
expression: (node: Node) => node is ExpressionNode;
|
||||||
|
text: (node: Node) => node is TextNode;
|
||||||
|
doctype: (node: Node) => node is DoctypeNode;
|
||||||
|
comment: (node: Node) => node is CommentNode;
|
||||||
|
frontmatter: (node: Node) => node is FrontmatterNode;
|
||||||
|
};
|
||||||
|
declare function walk(node: ParentNode, callback: Visitor): void;
|
||||||
|
declare function walkAsync(node: ParentNode, callback: Visitor): Promise<void>;
|
||||||
|
interface SerializeOptions {
|
||||||
|
selfClose: boolean;
|
||||||
|
}
|
||||||
|
/** @deprecated Please use `SerializeOptions` */
|
||||||
|
type SerializeOtions = SerializeOptions;
|
||||||
|
declare function serialize(root: Node, opts?: SerializeOptions): string;
|
||||||
|
|
||||||
|
export { SerializeOptions, SerializeOtions, Visitor, is, serialize, walk, walkAsync };
|
||||||