@pure-ds/core 0.7.5 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/js/common/toast.js"],
4
- "sourcesContent": ["/**\r\n * Toast notification utilities for PDS\r\n * Ensures pds-toaster component is properly initialized before use\r\n */\r\n\r\n/**\r\n * Ensures pds-toaster exists in DOM and is fully loaded\r\n * @returns {Promise<HTMLElement>} The pds-toaster element\r\n * @private\r\n */\r\nasync function ensureToaster() {\r\n let toaster = document.querySelector('pds-toaster');\r\n if (!toaster) {\r\n toaster = document.createElement('pds-toaster');\r\n document.body.appendChild(toaster);\r\n await customElements.whenDefined('pds-toaster');\r\n }\r\n return toaster;\r\n}\r\n\r\n/**\r\n * Display a toast notification\r\n * \r\n * This method automatically ensures the pds-toaster component exists and is loaded\r\n * before displaying the notification. The toaster element is appended to document.body\r\n * if not already present.\r\n * \r\n * @param {string} message - The message to display\r\n * @param {Object} [options={}] - Toast configuration\r\n * @param {\"information\"|\"success\"|\"warning\"|\"error\"} [options.type=\"information\"] - Toast type/severity\r\n * @param {number} [options.duration] - Duration in milliseconds (auto-calculated if not provided based on message length)\r\n * @param {boolean} [options.closable=true] - Whether the toast can be manually closed\r\n * @param {boolean} [options.persistent=false] - If true, toast won't auto-dismiss (requires manual close)\r\n * @param {boolean} [options.html=false] - Render `message` as HTML (trusted content only)\r\n * @param {{label: string, onClick?: Function, dismissOnClick?: boolean}} [options.action] - Optional action button config\r\n * @returns {Promise<string>} Toast ID (can be used to dismiss programmatically)\r\n * \r\n * @example\r\n * // Simple success toast\r\n * await PDS.toast('Changes saved successfully!', { type: 'success' });\r\n * \r\n * @example\r\n * // Error with custom duration\r\n * await PDS.toast('Failed to save changes', { \r\n * type: 'error',\r\n * duration: 8000 \r\n * });\r\n * \r\n * @example\r\n * // Persistent warning (must be manually closed)\r\n * await PDS.toast('This action cannot be undone', { \r\n * type: 'warning',\r\n * persistent: true \r\n * });\r\n * \r\n * @example\r\n * // Get toast ID to dismiss later\r\n * const toastId = await PDS.toast('Processing...', { persistent: true });\r\n * // ... later\r\n * const toaster = document.querySelector('pds-toaster');\r\n * toaster.dismissToast(toastId);\r\n */\r\nexport async function toast(message, options = {}) {\r\n const toaster = await ensureToaster();\r\n return toaster.toast(message, options);\r\n}\r\n\r\n/**\r\n * Display a success toast (convenience method)\r\n * \r\n * @param {string} message - The success message\r\n * @param {Object} [options={}] - Additional toast options (type is preset to 'success')\r\n * @returns {Promise<string>} Toast ID\r\n * \r\n * @example\r\n * await PDS.toast.success('Profile updated!');\r\n */\r\ntoast.success = async function(message, options = {}) {\r\n return toast(message, { ...options, type: 'success' });\r\n};\r\n\r\n/**\r\n * Display an error toast (convenience method)\r\n * \r\n * @param {string} message - The error message\r\n * @param {Object} [options={}] - Additional toast options (type is preset to 'error')\r\n * @returns {Promise<string>} Toast ID\r\n * \r\n * @example\r\n * await PDS.toast.error('Failed to connect to server');\r\n */\r\ntoast.error = async function(message, options = {}) {\r\n return toast(message, { ...options, type: 'error' });\r\n};\r\n\r\n/**\r\n * Display a warning toast (convenience method)\r\n * \r\n * @param {string} message - The warning message\r\n * @param {Object} [options={}] - Additional toast options (type is preset to 'warning')\r\n * @returns {Promise<string>} Toast ID\r\n * \r\n * @example\r\n * await PDS.toast.warning('Session will expire in 5 minutes');\r\n */\r\ntoast.warning = async function(message, options = {}) {\r\n return toast(message, { ...options, type: 'warning' });\r\n};\r\n\r\n/**\r\n * Display an information toast (convenience method)\r\n * \r\n * @param {string} message - The information message\r\n * @param {Object} [options={}] - Additional toast options (type is preset to 'information')\r\n * @returns {Promise<string>} Toast ID\r\n * \r\n * @example\r\n * await PDS.toast.info('New features available!');\r\n */\r\ntoast.info = async function(message, options = {}) {\r\n return toast(message, { ...options, type: 'information' });\r\n};\r\n"],
5
- "mappings": ";AAUA,eAAe,gBAAgB;AAC7B,MAAI,UAAU,SAAS,cAAc,aAAa;AAClD,MAAI,CAAC,SAAS;AACZ,cAAU,SAAS,cAAc,aAAa;AAC9C,aAAS,KAAK,YAAY,OAAO;AACjC,UAAM,eAAe,YAAY,aAAa;AAAA,EAChD;AACA,SAAO;AACT;AA4CA,eAAsB,MAAM,SAAS,UAAU,CAAC,GAAG;AACjD,QAAM,UAAU,MAAM,cAAc;AACpC,SAAO,QAAQ,MAAM,SAAS,OAAO;AACvC;AAYA,MAAM,UAAU,eAAe,SAAS,UAAU,CAAC,GAAG;AACpD,SAAO,MAAM,SAAS,EAAE,GAAG,SAAS,MAAM,UAAU,CAAC;AACvD;AAYA,MAAM,QAAQ,eAAe,SAAS,UAAU,CAAC,GAAG;AAClD,SAAO,MAAM,SAAS,EAAE,GAAG,SAAS,MAAM,QAAQ,CAAC;AACrD;AAYA,MAAM,UAAU,eAAe,SAAS,UAAU,CAAC,GAAG;AACpD,SAAO,MAAM,SAAS,EAAE,GAAG,SAAS,MAAM,UAAU,CAAC;AACvD;AAYA,MAAM,OAAO,eAAe,SAAS,UAAU,CAAC,GAAG;AACjD,SAAO,MAAM,SAAS,EAAE,GAAG,SAAS,MAAM,cAAc,CAAC;AAC3D;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/js/pds-core/pds-registry.js", "../../../src/js/pds-core/pds-runtime.js", "../../../src/js/pds-core/pds-enums.js", "../../../src/js/common/common.js", "../../../src/js/pds-core/pds-paths.js", "../../../node_modules/pure-web/src/js/auto-definer.js", "../../../src/js/pds-core/pds-start-helpers.js", "../../../src/js/pds-core/pds-theme-utils.js", "../../../src/js/pds.js"],
4
- "sourcesContent": ["\n// ============================================================================\n// PDS REGISTRY - Global mode manager for live vs static mode\n// ============================================================================\n\nclass PDSRegistry {\n constructor() {\n this._mode = \"static\"; // Default to static mode\n this._staticPaths = {\n tokens: \"/assets/pds/styles/pds-tokens.css.js\",\n primitives: \"/assets/pds/styles/pds-primitives.css.js\",\n components: \"/assets/pds/styles/pds-components.css.js\",\n utilities: \"/assets/pds/styles/pds-utilities.css.js\",\n styles: \"/assets/pds/styles/pds-styles.css.js\",\n };\n }\n\n /**\n * Switch to live mode\n */\n setLiveMode() {\n this._mode = \"live\";\n }\n\n /**\n * Switch to static mode with custom paths\n * Called by consumers who want to use static CSS files\n */\n setStaticMode(paths = {}) {\n this._mode = \"static\";\n this._staticPaths = { ...this._staticPaths, ...paths };\n }\n\n /**\n * Get stylesheet for adoption in shadow DOM\n * Returns CSSStyleSheet object (constructable stylesheet)\n */\n async getStylesheet(layer) {\n if (this._mode === \"live\") {\n // In live mode, stylesheets should be retrieved from Generator.instance\n // If we are here, it means adoptLayers fell back or something is wrong\n return null;\n } else {\n // Import from static path\n try {\n const module = await import(/* @vite-ignore */ this._staticPaths[layer]);\n return module[layer]; // Return exported stylesheet\n } catch (error) {\n // No access to config in static mode, fall back to console\n console.error(`[PDS Registry] Failed to load static ${layer}:`, error);\n console.error(`[PDS Registry] Looking for: ${this._staticPaths[layer]}`);\n console.error(`[PDS Registry] Make sure you've run 'npm run pds:build' and configured PDS.start() with the correct static.root path`);\n // Return empty stylesheet as fallback\n const fallback = new CSSStyleSheet();\n fallback.replaceSync(\"/* Failed to load \" + layer + \" */\");\n return fallback;\n }\n }\n }\n\n /**\n * Get current mode\n */\n get mode() {\n return this._mode;\n }\n\n /**\n * Check if in live mode\n */\n get isLive() {\n return this._mode === \"live\";\n }\n}\n\n// Export singleton instance\nexport const registry = new PDSRegistry();\n", "/**\r\n * Runtime helpers for applying and adopting PDS styles in live and static modes.\r\n * These functions are intentionally separated from the Generator to keep the\r\n * generator bundle lean and optional.\r\n */\r\nimport { registry as pdsRegistry } from \"./pds-registry.js\";\r\n\r\n/**\r\n * Install runtime styles for PDS using constructable stylesheets when\r\n * available, otherwise update a single <style id=\"pds-runtime-stylesheet\">.\r\n * This approach reduces flicker and avoids link/blob swapping.\r\n */\r\nexport function installRuntimeStyles(cssText) {\r\n try {\r\n if (typeof document === \"undefined\") return; // server-side guard\r\n\r\n // Preferred: constructable stylesheet (fast, atomic)\r\n if (\r\n typeof CSSStyleSheet !== \"undefined\" &&\r\n \"adoptedStyleSheets\" in Document.prototype\r\n ) {\r\n const sheet = new CSSStyleSheet();\r\n // replaceSync is synchronous and atomic for the stylesheet\r\n sheet.replaceSync(cssText);\r\n\r\n // Tag it so we can keep existing non-PDS sheets\r\n sheet._pds = true;\r\n\r\n const others = (document.adoptedStyleSheets || []).filter(\r\n (s) => s._pds !== true\r\n );\r\n document.adoptedStyleSheets = [...others, sheet];\r\n return;\r\n }\r\n\r\n // Fallback: single <style> element in the document head\r\n const styleId = \"pds-runtime-stylesheet\";\r\n let el = document.getElementById(styleId);\r\n if (!el) {\r\n el = document.createElement(\"style\");\r\n el.id = styleId;\r\n el.type = \"text/css\";\r\n const head = document.head || document.getElementsByTagName(\"head\")[0];\r\n if (head) head.appendChild(el);\r\n else document.documentElement.appendChild(el);\r\n }\r\n\r\n // Update the stylesheet content in place\r\n el.textContent = cssText;\r\n } catch (err) {\r\n console.warn(\"installRuntimeStyles failed:\", err);\r\n }\r\n}\r\n\r\n/**\r\n * Apply generated styles to the current document.\r\n * @param {Generator} [generator] - Optional Generator instance (defaults to singleton)\r\n */\r\nexport function applyStyles(generator) {\r\n const target = generator;\r\n\r\n if (!target || typeof target !== \"object\") {\r\n console.error(\r\n \"[Runtime] applyStyles requires an explicit generator instance in live mode\"\r\n );\r\n return;\r\n }\r\n\r\n // Preferred: apply layered CSS so tokens + primitives + components + utilities\r\n // are available in light DOM (ensures primitives like :where(button):active apply)\r\n const cssText = target.layeredCSS || target.css || \"\";\r\n if (!cssText) {\r\n target.options?.log?.(\r\n \"warn\",\r\n \"[Runtime] No CSS available on generator to apply\"\r\n );\r\n return;\r\n }\r\n\r\n // Install/update runtime styles atomically to avoid flicker\r\n installRuntimeStyles(cssText);\r\n}\r\n\r\n// ============================================================================\r\n// PDS ADOPTER - Helper for web components\r\n// ============================================================================\r\n\r\n/**\r\n * Adopt primitives stylesheet into a shadow root.\r\n * This is the primary method components should use.\r\n *\r\n * @param {ShadowRoot} shadowRoot - The shadow root to adopt into\r\n * @param {CSSStyleSheet[]} additionalSheets - Additional component-specific stylesheets\r\n * @returns {Promise<void>}\r\n */\r\nexport async function adoptPrimitives(\r\n shadowRoot,\r\n additionalSheets = [],\r\n generator = null\r\n) {\r\n try {\r\n // Prefer live generator when provided\r\n const primitives = generator?.primitivesStylesheet\r\n ? generator.primitivesStylesheet\r\n : await pdsRegistry.getStylesheet(\"primitives\");\r\n\r\n // Adopt primitives + additional sheets\r\n shadowRoot.adoptedStyleSheets = [primitives, ...additionalSheets];\r\n } catch (error) {\r\n const componentName = shadowRoot.host?.tagName?.toLowerCase() || \"unknown\";\r\n console.error(\r\n `[PDS Adopter] <${componentName}> failed to adopt primitives:`,\r\n error\r\n );\r\n // Continue with just additional sheets as fallback\r\n shadowRoot.adoptedStyleSheets = additionalSheets;\r\n }\r\n}\r\n\r\n/**\r\n * Adopt multiple layers into a shadow root.\r\n * For complex components that need more than just primitives.\r\n *\r\n * @param {ShadowRoot} shadowRoot - The shadow root to adopt into\r\n * @param {string[]} layers - Array of layer names to adopt (e.g., ['tokens', 'primitives', 'components'])\r\n * @param {CSSStyleSheet[]} additionalSheets - Additional component-specific stylesheets\r\n * @returns {Promise<void>}\r\n */\r\nexport async function adoptLayers(\r\n shadowRoot,\r\n layers = [\"primitives\"],\r\n additionalSheets = [],\r\n generator = null\r\n) {\r\n try {\r\n // Get all requested stylesheets\r\n const stylesheets = await Promise.all(\r\n layers.map(async (layer) => {\r\n if (generator) {\r\n switch (layer) {\r\n case \"tokens\":\r\n return generator.tokensStylesheet;\r\n case \"primitives\":\r\n return generator.primitivesStylesheet;\r\n case \"components\":\r\n return generator.componentsStylesheet;\r\n case \"utilities\":\r\n return generator.utilitiesStylesheet;\r\n default:\r\n break;\r\n }\r\n }\r\n return pdsRegistry.getStylesheet(layer);\r\n })\r\n );\r\n\r\n // Filter out any null results\r\n const validStylesheets = stylesheets.filter((sheet) => sheet !== null);\r\n\r\n // Adopt all layers + additional sheets\r\n shadowRoot.adoptedStyleSheets = [...validStylesheets, ...additionalSheets];\r\n } catch (error) {\r\n const componentName = shadowRoot.host?.tagName?.toLowerCase() || \"unknown\";\r\n console.error(\r\n `[PDS Adopter] <${componentName}> failed to adopt layers:`,\r\n error\r\n );\r\n // Continue with just additional sheets as fallback\r\n shadowRoot.adoptedStyleSheets = additionalSheets;\r\n }\r\n}\r\n\r\n/**\r\n * Create a component-specific stylesheet from CSS string.\r\n * Helper to create constructable stylesheets.\r\n *\r\n * @param {string} css - CSS string\r\n * @returns {CSSStyleSheet}\r\n */\r\nexport function createStylesheet(css) {\r\n const sheet = new CSSStyleSheet();\r\n sheet.replaceSync(css);\r\n return sheet;\r\n}\r\n", "// Static enums for design system values\nexport const enums = {\n FontWeights: {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n LineHeights: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n\n BorderWidths: {\n hairline: 0.5,\n thin: 1,\n medium: 2,\n thick: 3,\n },\n\n RadiusSizes: {\n none: 0,\n small: 4,\n medium: 8,\n large: 16,\n xlarge: 24,\n xxlarge: 32\n },\n\n ShadowDepths: {\n none: \"none\",\n light: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n medium:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n deep: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n extreme: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n },\n TransitionSpeeds: {\n fast: 150,\n normal: 250,\n slow: 350,\n },\n\n AnimationEasings: {\n linear: \"linear\",\n ease: \"ease\",\n \"ease-in\": \"ease-in\",\n \"ease-out\": \"ease-out\",\n \"ease-in-out\": \"ease-in-out\",\n bounce: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n },\n TouchTargetSizes: {\n compact: 36,\n standard: 44, // iOS/Android accessibility standard\n comfortable: 48,\n spacious: 56,\n },\n\n LinkStyles: {\n inline: \"inline\", // Normal inline text links\n block: \"block\", // Block-level links\n button: \"button\", // Button-like links (flex with touch target)\n },\n\n FocusStyles: {\n ring: \"ring\", // Box-shadow ring (default)\n outline: \"outline\", // Browser outline\n border: \"border\", // Border change\n glow: \"glow\", // Subtle glow effect\n },\n\n TabSizes: {\n compact: 2,\n standard: 4,\n wide: 8,\n },\n\n SelectIcons: {\n chevron: \"chevron\", // Standard chevron down\n arrow: \"arrow\", // Simple arrow\n caret: \"caret\", // Triangle caret\n none: \"none\", // No icon\n },\n IconSizes: {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 48,\n \"2xl\": 64,\n \"3xl\": 96,\n },\n};\n", "export function isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function deepMerge(target, source) {\n const output = { ...target };\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target))\n Object.assign(output, { [key]: source[key] });\n else\n output[key] = deepMerge(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n/**\n * Build a DocumentFragment from a template-like object (strings + values)\n * @param {{strings: string[], values: unknown[]}} templateLike\n * @returns {DocumentFragment}\n */\nexport function fragmentFromTemplateLike(templateLike) {\n const strings = Array.isArray(templateLike?.strings) ? templateLike.strings : [];\n const values = Array.isArray(templateLike?.values) ? templateLike.values : [];\n const consumedValues = new Set();\n const htmlParts = [];\n\n const propBindingPattern = /(\\s)(\\.[\\w-]+)=\\s*$/;\n\n for (let i = 0; i < strings.length; i += 1) {\n let chunk = strings[i] ?? \"\";\n const match = chunk.match(propBindingPattern);\n\n if (match && i < values.length) {\n const propToken = match[2];\n const propName = propToken.slice(1);\n const marker = `pds-val-${i}`;\n chunk = chunk.replace(\n propBindingPattern,\n `$1data-pds-prop=\"${propName}:${marker}\"`\n );\n consumedValues.add(i);\n }\n\n htmlParts.push(chunk);\n\n if (i < values.length && !consumedValues.has(i)) {\n htmlParts.push(`<!--pds-val-${i}-->`);\n }\n }\n\n const tpl = document.createElement(\"template\");\n tpl.innerHTML = htmlParts.join(\"\");\n\n const replaceValueAtMarker = (markerNode, value) => {\n const parent = markerNode.parentNode;\n if (!parent) return;\n\n if (value == null) {\n parent.removeChild(markerNode);\n return;\n }\n\n const insertValue = (val) => {\n if (val == null) return;\n if (val instanceof Node) {\n parent.insertBefore(val, markerNode);\n return;\n }\n if (Array.isArray(val)) {\n val.forEach((item) => insertValue(item));\n return;\n }\n parent.insertBefore(document.createTextNode(String(val)), markerNode);\n };\n\n insertValue(value);\n parent.removeChild(markerNode);\n };\n\n const walker = document.createTreeWalker(tpl.content, NodeFilter.SHOW_COMMENT);\n const markers = [];\n while (walker.nextNode()) {\n const node = walker.currentNode;\n if (node?.nodeValue?.startsWith(\"pds-val-\")) {\n markers.push(node);\n }\n }\n\n markers.forEach((node) => {\n const index = Number(node.nodeValue.replace(\"pds-val-\", \"\"));\n replaceValueAtMarker(node, values[index]);\n });\n\n const elements = tpl.content.querySelectorAll(\"*\");\n elements.forEach((el) => {\n const propAttr = el.getAttribute(\"data-pds-prop\");\n if (!propAttr) return;\n const [propName, markerValue] = propAttr.split(\":\");\n const index = Number(String(markerValue).replace(\"pds-val-\", \"\"));\n if (propName && Number.isInteger(index)) {\n el[propName] = values[index];\n }\n el.removeAttribute(\"data-pds-prop\");\n });\n\n return tpl.content;\n}\n\n/**\n * Parses an HTML string into a NodeList\n * @param {String} html\n * @returns {NodeListOf<ChildNode>}\n */\nexport function parseHTML(html) {\n return new DOMParser().parseFromString(html, \"text/html\").body.childNodes;\n}", "const DEFAULT_SEGMENT = \"pds\";\nconst URL_PATTERN = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\nconst DRIVE_PATTERN = /^[a-z]:/i;\n\nfunction ensureTrailingSlash(value = \"\") {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nfunction appendSegmentIfMissing(input = \"\", segment = DEFAULT_SEGMENT) {\n const trimmed = input.replace(/\\/+$/, \"\");\n const regex = new RegExp(`(?:^|\\/)${segment}$`, \"i\");\n if (regex.test(trimmed)) {\n return trimmed;\n }\n return `${trimmed}/${segment}`;\n}\n\nfunction stripLeadingDotSlash(value) {\n return value.replace(/^\\.\\/+/, \"\");\n}\n\nfunction stripDriveLetter(value) {\n if (DRIVE_PATTERN.test(value)) {\n return value.replace(DRIVE_PATTERN, \"\").replace(/^\\/+/, \"\");\n }\n return value;\n}\n\nfunction stripPublicPrefix(value) {\n if (value.startsWith(\"public/\")) {\n return value.substring(\"public/\".length);\n }\n return value;\n}\n\n/**\n * Resolve the public asset root URL for PDS static assets based on the consumer config.\n * Falls back to \"/assets/pds/\" when no root is provided. Automatically appends the\n * \"pds\" segment when the provided root omits it.\n *\n * @param {object} config - Unified PDS configuration.\n * @param {{ defaultRoot?: string, segment?: string }} [options]\n * @returns {string} Normalized URL (always ends with a trailing slash).\n */\nexport function resolvePublicAssetURL(config, options = {}) {\n const segment = options.segment || DEFAULT_SEGMENT;\n const defaultRoot = options.defaultRoot || `/assets/${segment}/`;\n const candidate =\n (config?.public && config.public?.root) ||\n (config?.static && config.static?.root) ||\n null;\n\n if (!candidate || typeof candidate !== \"string\") {\n return ensureTrailingSlash(defaultRoot);\n }\n\n let normalized = candidate.trim();\n if (!normalized) {\n return ensureTrailingSlash(defaultRoot);\n }\n\n normalized = normalized.replace(/\\\\/g, \"/\");\n normalized = appendSegmentIfMissing(normalized, segment);\n normalized = ensureTrailingSlash(normalized);\n\n if (URL_PATTERN.test(normalized)) {\n return normalized;\n }\n\n normalized = stripLeadingDotSlash(normalized);\n normalized = stripDriveLetter(normalized);\n\n if (normalized.startsWith(\"/\")) {\n return ensureTrailingSlash(normalized);\n }\n\n normalized = stripPublicPrefix(normalized);\n\n if (!normalized.startsWith(\"/\")) {\n normalized = `/${normalized}`;\n }\n\n normalized = normalized.replace(/\\/+/g, (match, offset) =>\n offset === 0 ? match : \"/\"\n );\n\n return ensureTrailingSlash(normalized);\n}\n\n/**\n * Extract the raw public root candidate from config for reuse in Node-side helpers.\n * @param {object} config\n * @returns {string|null}\n */\nexport function getPublicRootCandidate(config) {\n if (config?.public?.root) return config.public.root;\n if (config?.static?.root) return config.static.root;\n return null;\n}\n\nexport const __internal = {\n ensureTrailingSlash,\n appendSegmentIfMissing,\n stripLeadingDotSlash,\n stripDriveLetter,\n stripPublicPrefix,\n URL_PATTERN,\n DEFAULT_SEGMENT,\n};\n", "/**\r\n * Dynamically load and (idempotently) define a set of web components by tag name.\r\n */\r\nasync function defineWebComponents(...args) {\r\n let opts = {};\r\n if (args.length && typeof args[args.length - 1] === \"object\") {\r\n opts = args.pop() || {};\r\n }\r\n const tags = args;\r\n\r\n const {\r\n baseURL,\r\n mapper = (tag) => `${tag}.js`,\r\n onError = (tag, err) => console.error(`[defineWebComponents] ${tag}:`, err),\r\n } = opts;\r\n\r\n const base = baseURL\r\n ? new URL(\r\n baseURL,\r\n typeof location !== \"undefined\" ? location.href : import.meta.url\r\n )\r\n : new URL(\"./\", import.meta.url);\r\n\r\n const toPascal = (tag) =>\r\n tag.toLowerCase().replace(/(^|-)([a-z])/g, (_, __, c) => c.toUpperCase());\r\n\r\n const loadOne = async (tag) => {\r\n try {\r\n if (customElements.get(tag)) return { tag, status: \"already-defined\" };\r\n\r\n // Allow mapper to return either a string (path) or a URL instance\r\n const spec = mapper(tag);\r\n const href = spec instanceof URL ? spec.href : new URL(spec, base).href;\r\n const mod = await import(href);\r\n const Named = mod?.default ?? mod?.[toPascal(tag)];\r\n\r\n if (!Named) {\r\n if (customElements.get(tag)) return { tag, status: \"self-defined\" };\r\n throw new Error(\r\n `No export found for ${tag}. Expected default export or named export \"${toPascal(\r\n tag\r\n )}\".`\r\n );\r\n }\r\n\r\n if (!customElements.get(tag)) {\r\n customElements.define(tag, Named);\r\n return { tag, status: \"defined\" };\r\n }\r\n return { tag, status: \"race-already-defined\" };\r\n } catch (err) {\r\n onError(tag, err);\r\n throw err;\r\n }\r\n };\r\n\r\n return Promise.all(tags.map(loadOne));\r\n}\r\n\r\n/**\r\n * Auto-definer that also works inside open Shadow DOM.\r\n * Automatically defines unknown custom elements (tags with a dash)\r\n * and attach progressive enhancers to given selectors.\r\n *\r\n * Options:\r\n * baseURL: string | URL\r\n * mapper: (tag) => string\r\n * onError: (tag, err) => void\r\n * predicate: (tag, el) => boolean\r\n * attributeModule: string = \"data-module\"\r\n * root: Node = document\r\n * scanExisting: boolean = true\r\n * debounceMs: number = 16\r\n * observeShadows: boolean = true\r\n * enhancers: Array<{selector: string, run: (elem: Element) => void}> = []\r\n * patchAttachShadow: boolean = true\r\n * mapper: (tag) => string | URL\r\n *\r\n * Returns: { stop(): void, flush(): Promise<void> }\r\n */\r\nexport class AutoDefiner {\r\n constructor(options = {}) {\r\n const {\r\n baseURL,\r\n mapper,\r\n onError,\r\n predicate = () => true,\r\n attributeModule = \"data-module\",\r\n root = document,\r\n scanExisting = true,\r\n debounceMs = 16,\r\n observeShadows = true,\r\n enhancers = [], // [{String selector, Function run(elem)}]\r\n patchAttachShadow = true,\r\n } = options;\r\n\r\n const pending = new Set(); // tags queued for definition\r\n const inFlight = new Set(); // tags currently importing\r\n const knownMissing = new Set(); // tags that failed before\r\n const perTagModulePath = new Map(); // tag -> explicit module path (from data-module)\r\n const shadowObservers = new WeakMap(); // ShadowRoot -> MutationObserver\r\n const enhancerApplied = new WeakMap(); // element -> Set of applied enhancer selectors\r\n let timer = 0;\r\n let stopped = false;\r\n let restoreAttachShadow = null;\r\n\r\n const applyEnhancers = (element) => {\r\n // Skip if no enhancers provided\r\n if (!element || !enhancers.length) return;\r\n\r\n // Get or create the set of applied enhancers for this element\r\n let appliedEnhancers = enhancerApplied.get(element);\r\n if (!appliedEnhancers) {\r\n appliedEnhancers = new Set();\r\n enhancerApplied.set(element, appliedEnhancers);\r\n }\r\n\r\n // Check each enhancer\r\n for (const enhancer of enhancers) {\r\n if (!enhancer.selector || !enhancer.run) continue;\r\n\r\n // Skip if this enhancer was already applied to this element\r\n if (appliedEnhancers.has(enhancer.selector)) continue;\r\n\r\n try {\r\n // Check if element matches the selector\r\n if (element.matches && element.matches(enhancer.selector)) {\r\n enhancer.run(element);\r\n // Mark this enhancer as applied to this element\r\n appliedEnhancers.add(enhancer.selector);\r\n }\r\n } catch (err) {\r\n console.warn(\r\n `[AutoDefiner] Error applying enhancer for selector \"${enhancer.selector}\":`,\r\n err\r\n );\r\n }\r\n }\r\n };\r\n\r\n const queueTag = (tag, el /* optional */) => {\r\n if (stopped) return;\r\n if (!tag || !tag.includes(\"-\")) return;\r\n if (customElements.get(tag)) return;\r\n if (inFlight.has(tag)) return;\r\n if (knownMissing.has(tag)) return;\r\n\r\n // Capture per-instance module override from the element itself (works in shadow DOM)\r\n if (el && el.getAttribute) {\r\n const override = el.getAttribute(attributeModule);\r\n if (override && !perTagModulePath.has(tag)) {\r\n perTagModulePath.set(tag, override);\r\n }\r\n }\r\n\r\n pending.add(tag);\r\n schedule();\r\n };\r\n\r\n const schedule = () => {\r\n if (timer) return;\r\n timer = setTimeout(flush, debounceMs);\r\n };\r\n\r\n const crawlTree = (rootNode) => {\r\n // rootNode can be Document, Element, ShadowRoot\r\n if (!rootNode) return;\r\n\r\n // Process the root node if it's an element\r\n if (rootNode.nodeType === 1) {\r\n const el = /** @type {Element} */ (rootNode);\r\n const tag = el.tagName?.toLowerCase();\r\n if (\r\n tag &&\r\n tag.includes(\"-\") &&\r\n !customElements.get(tag) &&\r\n predicate(tag, el)\r\n ) {\r\n queueTag(tag, el);\r\n }\r\n\r\n // Apply enhancers to this element\r\n applyEnhancers(el);\r\n\r\n // Observe/open shadow roots we encounter\r\n if (observeShadows && el.shadowRoot) {\r\n observeShadowRoot(el.shadowRoot);\r\n }\r\n }\r\n\r\n // Process all descendant elements (but not the root node again)\r\n if (rootNode.querySelectorAll) {\r\n rootNode.querySelectorAll(\"*\").forEach((e) => {\r\n const t = e.tagName?.toLowerCase();\r\n if (\r\n t &&\r\n t.includes(\"-\") &&\r\n !customElements.get(t) &&\r\n predicate(t, e)\r\n ) {\r\n queueTag(t, e);\r\n }\r\n\r\n // Apply enhancers to descendant elements\r\n applyEnhancers(e);\r\n\r\n if (observeShadows && e.shadowRoot) {\r\n observeShadowRoot(e.shadowRoot);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const observeShadowRoot = (sr) => {\r\n if (!sr || shadowObservers.has(sr)) return;\r\n // Initial scan inside this shadow\r\n crawlTree(sr);\r\n\r\n const mo = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n m.addedNodes?.forEach((n) => {\r\n crawlTree(n);\r\n });\r\n if (m.type === \"attributes\" && m.target) {\r\n crawlTree(m.target);\r\n }\r\n }\r\n });\r\n mo.observe(sr, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\r\n attributeModule,\r\n ...enhancers\r\n .map((e) => e.selector)\r\n .filter((s) => s.startsWith(\"data-\")),\r\n ],\r\n });\r\n shadowObservers.set(sr, mo);\r\n };\r\n\r\n async function flush() {\r\n clearTimeout(timer);\r\n timer = 0;\r\n if (!pending.size) return;\r\n\r\n const tags = Array.from(pending);\r\n pending.clear();\r\n tags.forEach((t) => inFlight.add(t));\r\n\r\n try {\r\n const effectiveMapper = (tag) =>\r\n perTagModulePath.get(tag) ?? (mapper ? mapper(tag) : `${tag}.js`);\r\n\r\n await defineWebComponents(...tags, {\r\n baseURL,\r\n mapper: effectiveMapper,\r\n onError: (tag, err) => {\r\n knownMissing.add(tag);\r\n onError?.(tag, err);\r\n },\r\n });\r\n } catch {\r\n // errors per tag recorded via onError\r\n } finally {\r\n tags.forEach((t) => inFlight.delete(t));\r\n }\r\n }\r\n\r\n // Root observer (document or provided root)\r\n const mountNode = root === document ? document.documentElement : root;\r\n const obs = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n m.addedNodes?.forEach((n) => {\r\n crawlTree(n);\r\n });\r\n if (m.type === \"attributes\" && m.target) {\r\n crawlTree(m.target);\r\n }\r\n }\r\n });\r\n obs.observe(mountNode, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\r\n attributeModule,\r\n ...enhancers\r\n .map((e) => e.selector)\r\n .filter((s) => s.startsWith(\"data-\")),\r\n ],\r\n });\r\n\r\n // Patch attachShadow to auto-observe newly created open shadows\r\n if (observeShadows && patchAttachShadow && Element.prototype.attachShadow) {\r\n const orig = Element.prototype.attachShadow;\r\n Element.prototype.attachShadow = function patchedAttachShadow(init) {\r\n const sr = orig.call(this, init);\r\n if (init && init.mode === \"open\") {\r\n observeShadowRoot(sr);\r\n // queue potential unknown host tag too\r\n const tag = this.tagName?.toLowerCase();\r\n if (tag && tag.includes(\"-\") && !customElements.get(tag)) {\r\n queueTag(tag, this);\r\n }\r\n }\r\n return sr;\r\n };\r\n restoreAttachShadow = () => (Element.prototype.attachShadow = orig);\r\n }\r\n\r\n // Initial scan\r\n if (scanExisting) {\r\n crawlTree(mountNode);\r\n }\r\n\r\n return {\r\n stop() {\r\n stopped = true;\r\n obs.disconnect();\r\n if (restoreAttachShadow) restoreAttachShadow();\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = 0;\r\n }\r\n // Disconnect all shadow observers\r\n shadowObservers.forEach((mo) => mo.disconnect());\r\n },\r\n flush,\r\n };\r\n }\r\n\r\n /**\r\n * Dynamically load and (idempotently) define a set of web components by tag name.\r\n */\r\n static async define(...args) {\r\n let opts = {};\r\n if (args.length && typeof args[args.length - 1] === \"object\") {\r\n opts = args.pop() || {};\r\n }\r\n const tags = args;\r\n\r\n const {\r\n baseURL,\r\n mapper = (tag) => `${tag}.js`,\r\n onError = (tag, err) =>\r\n console.error(`[defineWebComponents] ${tag}:`, err),\r\n } = opts;\r\n\r\n const base = baseURL\r\n ? new URL(\r\n baseURL,\r\n typeof location !== \"undefined\" ? location.href : import.meta.url\r\n )\r\n : new URL(\"./\", import.meta.url);\r\n\r\n const toPascal = (tag) =>\r\n tag.toLowerCase().replace(/(^|-)([a-z])/g, (_, __, c) => c.toUpperCase());\r\n\r\n const loadOne = async (tag) => {\r\n try {\r\n if (customElements.get(tag)) return { tag, status: \"already-defined\" };\r\n\r\n // Allow mapper to return either a string (path) or a URL instance\r\n const spec = mapper(tag);\r\n const href = spec instanceof URL ? spec.href : new URL(spec, base).href;\r\n const mod = await import(href);\r\n const Named = mod?.default ?? mod?.[toPascal(tag)];\r\n\r\n if (!Named) {\r\n if (customElements.get(tag)) return { tag, status: \"self-defined\" };\r\n throw new Error(\r\n `No export found for ${tag}. Expected default export or named export \"${toPascal(\r\n tag\r\n )}\".`\r\n );\r\n }\r\n\r\n if (!customElements.get(tag)) {\r\n customElements.define(tag, Named);\r\n return { tag, status: \"defined\" };\r\n }\r\n return { tag, status: \"race-already-defined\" };\r\n } catch (err) {\r\n onError(tag, err);\r\n throw err;\r\n }\r\n };\r\n\r\n return Promise.all(tags.map(loadOne));\r\n }\r\n}\r\n", "/**\r\n * Shared initialization helpers for static and live startup.\r\n * Kept separate to avoid pulling live-only logic into the base runtime bundle.\r\n */\r\n\r\nimport { AutoDefiner as CoreAutoDefiner } from \"pure-web/auto-definer\";\r\n\r\nconst __ABSOLUTE_URL_PATTERN__ = /^[a-z][a-z0-9+\\-.]*:\\/\\//i;\r\nconst __MODULE_URL__ = (() => {\r\n try {\r\n return import.meta.url;\r\n } catch (e) {\r\n return undefined;\r\n }\r\n})();\r\n\r\nexport const ensureTrailingSlash = (value) =>\r\n typeof value === \"string\" && value.length && !value.endsWith(\"/\")\r\n ? `${value}/`\r\n : value;\r\n\r\nexport function ensureAbsoluteAssetURL(value, options = {}) {\r\n if (!value || __ABSOLUTE_URL_PATTERN__.test(value)) {\r\n return value;\r\n }\r\n\r\n const { preferModule = true } = options;\r\n\r\n const tryModule = () => {\r\n if (!__MODULE_URL__) return null;\r\n try {\r\n return new URL(value, __MODULE_URL__).href;\r\n } catch (e) {\r\n return null;\r\n }\r\n };\r\n\r\n const tryWindow = () => {\r\n if (typeof window === \"undefined\" || !window.location?.origin) {\r\n return null;\r\n }\r\n try {\r\n return new URL(value, window.location.origin).href;\r\n } catch (e) {\r\n return null;\r\n }\r\n };\r\n\r\n const resolved = preferModule\r\n ? tryModule() || tryWindow()\r\n : tryWindow() || tryModule();\r\n\r\n return resolved || value;\r\n}\r\n\r\nconst __MODULE_DEFAULT_ASSET_ROOT__ = (() => {\r\n if (!__MODULE_URL__) return undefined;\r\n try {\r\n const parsed = new URL(__MODULE_URL__);\r\n if (/\\/public\\/assets\\/js\\//.test(parsed.pathname)) {\r\n return new URL(\"../pds/\", __MODULE_URL__).href;\r\n }\r\n } catch (e) {\r\n return undefined;\r\n }\r\n return undefined;\r\n})();\r\n\r\nlet __foucListenerAttached = false;\r\n\r\nexport function attachFoucListener(PDS) {\r\n if (__foucListenerAttached || typeof document === \"undefined\") return;\r\n __foucListenerAttached = true;\r\n PDS.addEventListener(\"pds:ready\", (event) => {\r\n const mode = event.detail?.mode;\r\n if (mode) {\r\n document.documentElement.classList.add(`pds-${mode}`, \"pds-ready\");\r\n }\r\n });\r\n}\r\n\r\n// Internal: deep merge utility (arrays replace; objects merge)\r\nfunction __deepMerge(target = {}, source = {}) {\r\n if (!source || typeof source !== \"object\") return target;\r\n const out = Array.isArray(target) ? [...target] : { ...target };\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\r\n out[key] = __deepMerge(\r\n out[key] && typeof out[key] === \"object\" ? out[key] : {},\r\n value\r\n );\r\n } else {\r\n out[key] = value;\r\n }\r\n }\r\n return out;\r\n}\r\n\r\n// Internal: create a slug for matching names like \"Paper & Ink\" -> \"paper-and-ink\"\r\nfunction __slugify(str = \"\") {\r\n return String(str)\r\n .toLowerCase()\r\n .replace(/&/g, \" and \")\r\n .replace(/[^a-z0-9]+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\");\r\n}\r\n\r\n// Internal: recursively remove functions from an object to make it cloneable\r\nexport function stripFunctions(obj) {\r\n if (obj === null || obj === undefined) return obj;\r\n if (typeof obj === \"function\") return undefined;\r\n if (typeof obj !== \"object\") return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => stripFunctions(item)).filter((item) => item !== undefined);\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n if (typeof value !== \"function\") {\r\n const stripped = stripFunctions(value);\r\n if (stripped !== undefined) {\r\n result[key] = stripped;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// Internal: normalize first-arg config to a full generator config and extract enhancers if provided inline\r\nexport function normalizeInitConfig(\r\n inputConfig = {},\r\n options = {},\r\n { presets, defaultLog, validateDesignConfig, validateInitConfig } = {}\r\n) {\r\n const logFn =\r\n inputConfig && typeof inputConfig.log === \"function\"\r\n ? inputConfig.log\r\n : defaultLog;\r\n\r\n // If caller passed a plain design config (legacy), keep as-is\r\n const hasDesignKeys =\r\n typeof inputConfig === \"object\" &&\r\n (\"colors\" in inputConfig ||\r\n \"typography\" in inputConfig ||\r\n \"spatialRhythm\" in inputConfig ||\r\n \"shape\" in inputConfig ||\r\n \"behavior\" in inputConfig ||\r\n \"layout\" in inputConfig ||\r\n \"advanced\" in inputConfig ||\r\n \"a11y\" in inputConfig ||\r\n \"components\" in inputConfig ||\r\n \"icons\" in inputConfig);\r\n\r\n // Extract potential inline enhancers from config; prefer inline over options\r\n let inlineEnhancers = inputConfig && inputConfig.enhancers;\r\n if (inlineEnhancers && !Array.isArray(inlineEnhancers)) {\r\n // If an object was provided, convert to array of values\r\n inlineEnhancers = Object.values(inlineEnhancers);\r\n }\r\n const enhancers = inlineEnhancers ?? options.enhancers ?? [];\r\n\r\n // New API: { preset?: string, design?: object }\r\n const presetId = inputConfig && inputConfig.preset;\r\n const designOverrides = inputConfig && inputConfig.design;\r\n const iconOverrides =\r\n inputConfig &&\r\n inputConfig.icons &&\r\n typeof inputConfig.icons === \"object\"\r\n ? inputConfig.icons\r\n : null;\r\n\r\n const hasNewShape =\r\n \"preset\" in (inputConfig || {}) ||\r\n \"design\" in (inputConfig || {}) ||\r\n \"enhancers\" in (inputConfig || {});\r\n\r\n if (inputConfig && typeof inputConfig === \"object\" && typeof validateInitConfig === \"function\") {\r\n validateInitConfig(inputConfig, { log: logFn, context: \"PDS.start\" });\r\n }\r\n\r\n let generatorConfig;\r\n let presetInfo = null;\r\n\r\n if (hasNewShape) {\r\n if (\r\n designOverrides &&\r\n typeof designOverrides === \"object\" &&\r\n typeof validateDesignConfig === \"function\"\r\n ) {\r\n validateDesignConfig(designOverrides, { log: logFn, context: \"PDS.start\" });\r\n }\r\n // Always resolve a preset; default if none provided\r\n const effectivePreset = String(presetId || \"default\").toLowerCase();\r\n const found =\r\n presets?.[effectivePreset] ||\r\n Object.values(presets || {}).find(\r\n (p) =>\r\n __slugify(p.name) === effectivePreset ||\r\n String(p.name || \"\").toLowerCase() === effectivePreset\r\n );\r\n if (!found)\r\n throw new Error(`PDS preset not found: \"${presetId || \"default\"}\"`);\r\n\r\n presetInfo = {\r\n id: found.id || __slugify(found.name),\r\n name: found.name || found.id || String(effectivePreset),\r\n };\r\n\r\n // Merge preset with design overrides\r\n let mergedDesign = structuredClone(found);\r\n if (\r\n (designOverrides && typeof designOverrides === \"object\") ||\r\n iconOverrides\r\n ) {\r\n // Strip functions before cloning to avoid DataCloneError\r\n const cloneableDesign = designOverrides\r\n ? stripFunctions(designOverrides)\r\n : {};\r\n const cloneableIcons = iconOverrides\r\n ? stripFunctions(iconOverrides)\r\n : null;\r\n const mergedOverrides = cloneableIcons\r\n ? __deepMerge(cloneableDesign, { icons: cloneableIcons })\r\n : cloneableDesign;\r\n mergedDesign = __deepMerge(\r\n mergedDesign,\r\n structuredClone(mergedOverrides)\r\n );\r\n }\r\n\r\n // Build structured config with design nested\r\n // Exclude runtime-specific properties that shouldn't be passed to Generator\r\n const {\r\n mode, autoDefine, applyGlobalStyles, manageTheme,\r\n themeStorageKey, preloadStyles, criticalLayers,\r\n managerURL, manager,\r\n preset: _preset, design: _design, enhancers: _enhancers,\r\n log: userLog,\r\n ...otherProps\r\n } = inputConfig;\r\n\r\n generatorConfig = {\r\n ...otherProps,\r\n design: mergedDesign,\r\n preset: presetInfo.name,\r\n log: userLog || defaultLog,\r\n };\r\n } else if (hasDesignKeys) {\r\n if (typeof validateDesignConfig === \"function\") {\r\n validateDesignConfig(inputConfig, { log: logFn, context: \"PDS.start\" });\r\n }\r\n // Back-compat: treat the provided object as the full design, wrap it\r\n const { log: userLog, ...designConfig } = inputConfig;\r\n generatorConfig = {\r\n design: structuredClone(designConfig),\r\n log: userLog || defaultLog,\r\n };\r\n } else {\r\n // Nothing recognizable: use default preset\r\n const foundDefault =\r\n presets?.[\"default\"] ||\r\n Object.values(presets || {}).find((p) => __slugify(p.name) === \"default\");\r\n if (!foundDefault) throw new Error(\"PDS default preset not available\");\r\n presetInfo = {\r\n id: foundDefault.id || \"default\",\r\n name: foundDefault.name || \"Default\",\r\n };\r\n generatorConfig = {\r\n design: structuredClone(foundDefault),\r\n preset: presetInfo.name,\r\n log: defaultLog,\r\n };\r\n }\r\n\r\n return { generatorConfig, enhancers, presetInfo };\r\n}\r\n\r\n// Internal: resolve theme and set html[data-theme], return resolvedTheme and storedTheme\r\nexport function resolveThemeAndApply({ manageTheme, themeStorageKey, applyResolvedTheme, setupSystemListenerIfNeeded }) {\r\n let resolvedTheme = \"light\";\r\n let storedTheme = null;\r\n if (manageTheme && typeof window !== \"undefined\") {\r\n // Read raw preference (may be null, 'system', 'light', 'dark') using provided storage key\r\n try {\r\n storedTheme = localStorage.getItem(themeStorageKey) || null;\r\n } catch (e) {\r\n storedTheme = null;\r\n }\r\n\r\n // Apply the resolved theme and ensure system listener exists when needed\r\n try {\r\n applyResolvedTheme?.(storedTheme);\r\n setupSystemListenerIfNeeded?.(storedTheme);\r\n } catch (e) {}\r\n\r\n // Compute explicit resolvedTheme to return\r\n if (storedTheme) {\r\n if (storedTheme === \"system\") {\r\n const prefersDark =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n resolvedTheme = prefersDark ? \"dark\" : \"light\";\r\n } else {\r\n resolvedTheme = storedTheme;\r\n }\r\n } else {\r\n const prefersDark =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n resolvedTheme = prefersDark ? \"dark\" : \"light\";\r\n }\r\n }\r\n return { resolvedTheme, storedTheme };\r\n}\r\n\r\nexport function resolveRuntimeAssetRoot(config, { resolvePublicAssetURL }) {\r\n const hasCustomRoot = Boolean(config?.public?.root || config?.static?.root);\r\n let candidate = resolvePublicAssetURL(config);\r\n\r\n if (!hasCustomRoot && __MODULE_DEFAULT_ASSET_ROOT__) {\r\n candidate = __MODULE_DEFAULT_ASSET_ROOT__;\r\n }\r\n\r\n return ensureTrailingSlash(ensureAbsoluteAssetURL(candidate));\r\n}\r\n\r\n// Internal: setup AutoDefiner and run enhancers\r\nexport async function setupAutoDefinerAndEnhancers(options, { baseEnhancers = [] } = {}) {\r\n const {\r\n autoDefineBaseURL = \"/auto-define/\",\r\n autoDefinePreload = [],\r\n autoDefineMapper = null,\r\n enhancers = [],\r\n autoDefineOverrides = null,\r\n autoDefinePreferModule = true,\r\n } = options;\r\n\r\n // Merge defaults with user enhancers (user overrides by selector)\r\n const mergedEnhancers = (() => {\r\n const map = new Map();\r\n (baseEnhancers || []).forEach((e) => map.set(e.selector, e));\r\n (enhancers || []).forEach((e) => map.set(e.selector, e));\r\n return Array.from(map.values());\r\n })();\r\n\r\n // Setup AutoDefiner in browser context (it already observes shadow DOMs)\r\n let autoDefiner = null;\r\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\r\n const AutoDefinerCtor = CoreAutoDefiner;\r\n\r\n const defaultMapper = (tag) => {\r\n switch (tag) {\r\n case \"pds-tabpanel\":\r\n return \"pds-tabstrip.js\";\r\n default:\r\n return `${tag}.js`;\r\n }\r\n };\r\n\r\n // Respect user overrides but never allow them to overwrite our mapper wrapper.\r\n // Also merge `autoDefine.enhancers` safely instead of allowing it to clobber\r\n // default enhancers (this previously caused silent loss of required/dropdown behavior).\r\n const {\r\n mapper: _overrideMapperIgnored,\r\n enhancers: overrideEnhancers,\r\n ...restAutoDefineOverrides\r\n } =\r\n autoDefineOverrides && typeof autoDefineOverrides === \"object\"\r\n ? autoDefineOverrides\r\n : {};\r\n\r\n const normalizedOverrideEnhancers = (() => {\r\n if (!overrideEnhancers) return [];\r\n if (Array.isArray(overrideEnhancers)) return overrideEnhancers;\r\n if (typeof overrideEnhancers === \"object\") {\r\n return Object.values(overrideEnhancers);\r\n }\r\n return [];\r\n })();\r\n\r\n const resolvedEnhancers = (() => {\r\n const map = new Map();\r\n (mergedEnhancers || []).forEach((enhancer) => {\r\n if (!enhancer?.selector) return;\r\n map.set(enhancer.selector, enhancer);\r\n });\r\n\r\n (normalizedOverrideEnhancers || []).forEach((enhancer) => {\r\n if (!enhancer?.selector) return;\r\n const existing = map.get(enhancer.selector) || null;\r\n map.set(enhancer.selector, {\r\n ...(existing || {}),\r\n ...enhancer,\r\n run:\r\n typeof enhancer?.run === \"function\"\r\n ? enhancer.run\r\n : existing?.run,\r\n });\r\n });\r\n\r\n return Array.from(map.values());\r\n })();\r\n\r\n const normalizedBaseURL = autoDefineBaseURL\r\n ? ensureTrailingSlash(\r\n ensureAbsoluteAssetURL(autoDefineBaseURL, {\r\n preferModule: autoDefinePreferModule,\r\n })\r\n )\r\n : autoDefineBaseURL;\r\n\r\n const autoDefineConfig = {\r\n baseURL: normalizedBaseURL,\r\n predefine: autoDefinePreload,\r\n scanExisting: true,\r\n observeShadows: true,\r\n patchAttachShadow: true,\r\n debounceMs: 16,\r\n enhancers: resolvedEnhancers,\r\n onError: (tag, err) => {\r\n if (typeof tag === \"string\" && tag.startsWith(\"pds-\")) {\r\n const litDependentComponents = [\"pds-form\", \"pds-drawer\"];\r\n const isLitComponent = litDependentComponents.includes(tag);\r\n const isMissingLitError = err?.message?.includes(\"#pds/lit\") ||\r\n err?.message?.includes(\"Failed to resolve module specifier\");\r\n\r\n if (isLitComponent && isMissingLitError) {\r\n console.error(\r\n `\u274C PDS component <${tag}> requires Lit but #pds/lit is not in import map.\r\n See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`\r\n );\r\n } else {\r\n console.warn(\r\n `\u26A0\uFE0F PDS component <${tag}> not found. Assets may not be installed.`\r\n );\r\n }\r\n } else {\r\n console.error(`\u274C Auto-define error for <${tag}>:`, err);\r\n }\r\n },\r\n // Apply all user overrides except mapper so we can still wrap it\r\n ...restAutoDefineOverrides,\r\n mapper: (tag) => {\r\n // If already defined, do nothing\r\n if (customElements.get(tag)) return null;\r\n\r\n // If a custom mapper exists, let it try first; if it returns a non-value, fallback to default\r\n if (typeof autoDefineMapper === \"function\") {\r\n try {\r\n const mapped = autoDefineMapper(tag);\r\n if (mapped === undefined) {\r\n return defaultMapper(tag);\r\n }\r\n return mapped;\r\n } catch (e) {\r\n console.warn(\r\n \"Custom autoDefine.mapper error; falling back to default:\",\r\n e?.message || e\r\n );\r\n return defaultMapper(tag);\r\n }\r\n }\r\n\r\n // No custom mapper provided \u2014 use default\r\n return defaultMapper(tag);\r\n },\r\n };\r\n\r\n autoDefiner = new AutoDefinerCtor(autoDefineConfig);\r\n if (\r\n autoDefinePreload.length > 0 &&\r\n typeof AutoDefinerCtor.define === \"function\"\r\n ) {\r\n await AutoDefinerCtor.define(...autoDefinePreload, {\r\n baseURL: autoDefineBaseURL,\r\n mapper: autoDefineConfig.mapper,\r\n onError: autoDefineConfig.onError,\r\n });\r\n }\r\n }\r\n\r\n return { autoDefiner, mergedEnhancers };\r\n}\r\n", "const DEFAULT_THEMES = [\"light\", \"dark\"];\r\nconst VALID_THEMES = new Set(DEFAULT_THEMES);\r\n\r\nexport function normalizePresetThemes(preset) {\r\n const themes = Array.isArray(preset?.themes)\r\n ? preset.themes.map((theme) => String(theme).toLowerCase())\r\n : DEFAULT_THEMES;\r\n const normalized = themes.filter((theme) => VALID_THEMES.has(theme));\r\n return normalized.length ? normalized : DEFAULT_THEMES;\r\n}\r\n\r\nexport function resolveThemePreference(preference, { preferDocument = true } = {}) {\r\n const normalized = String(preference || \"\").toLowerCase();\r\n if (VALID_THEMES.has(normalized)) return normalized;\r\n\r\n if (preferDocument && typeof document !== \"undefined\") {\r\n const applied = document.documentElement?.getAttribute(\"data-theme\");\r\n if (VALID_THEMES.has(applied)) return applied;\r\n }\r\n\r\n if (typeof window !== \"undefined\" && window.matchMedia) {\r\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n return prefersDark ? \"dark\" : \"light\";\r\n }\r\n\r\n return \"light\";\r\n}\r\n\r\nexport function isPresetThemeCompatible(preset, themePreference) {\r\n const resolvedTheme = resolveThemePreference(themePreference);\r\n const themes = normalizePresetThemes(preset);\r\n return themes.includes(resolvedTheme);\r\n}\r\n", "/// <reference path=\"./pds.d.ts\" />\n\n/**\n * Public PDS runtime object exported to consumers.\n *\n * This object exposes the core runtime building blocks for the Pure Design System.\n * It intentionally provides a small, stable surface area so consuming apps can:\n * - programmatically generate design system artifacts (via `getGenerator()` in live mode),\n * - adopt styles into Shadow DOM (via `adoptLayers` / `adoptPrimitives`),\n * - query runtime mode and obtain constructable stylesheets (via `registry`).\n *\n * Common events in the PDS ecosystem (emitted by other packages/components):\n * - `design-updated` \u2014 emitted by the designer component when the in-memory design changes (detail: { config }).\n * - `pds-generated` \u2014 emitted by the PDS configurator when generation completes (detail: { modules, meta }).\n * - `pds-error` \u2014 emitted by the PDS configurator when generation fails (detail: Error).\n *\n * Error handling notes:\n * - Methods that perform dynamic imports (e.g. `adoptLayers` via the registry) may log and return fallbacks\n * rather than throwing; consumers should check return values (e.g. null) and listen for `pds-error` in UI flows.\n * - `createStylesheet(css)` will throw synchronously if the provided CSS cannot be parsed by the browser's\n * `CSSStyleSheet.replaceSync()` \u2014 callers should guard invalid input or wrap calls in try/catch.\n *\n * @typedef {Object} PDSAPI\n * @property {import(\"./pds-core/pds-registry.js\").PDSRegistry} registry - Singleton runtime registry for live/static mode\n * @property {(generator?: import(\"./pds-core/pds-generator.js\").Generator) => void} applyStyles - Apply generated styles to the document (live-only)\n * @property {(shadowRoot: ShadowRoot, layers?: string[], additionalSheets?: CSSStyleSheet[]) => Promise<void>} adoptLayers - Adopt multiple layers into a ShadowRoot. May log errors and fallback to additionalSheets when static imports fail.\n * @property {(shadowRoot: ShadowRoot, additionalSheets?: CSSStyleSheet[]) => Promise<void>} adoptPrimitives - Adopt primitives layer into a ShadowRoot. Designed as a convenience for components.\n * @property {(css:string) => CSSStyleSheet} createStylesheet - Create a constructable stylesheet from CSS text. @throws {DOMException} on invalid CSS in some browsers.\n * @property {() => boolean} isLiveMode - Returns true when running in live/designer-backed mode\n * @property {() => Promise<typeof import(\"./pds-core/pds-generator.js\").Generator>} getGenerator - Live-only accessor for the Generator class\n */\n\n/**\n * Workspace for the Pure Design System runtime API\n * PDS is now an EventTarget so consumers can subscribe to a single, consistent\n * event bus instead of listening on window/document or individual elements.\n */\nclass PDSBase extends EventTarget {}\n/** @type {PDSAPI & PDSBase} */\nconst PDS = new PDSBase();\n\n// State properties\nPDS.initializing = false;\nPDS.currentPreset = null;\nPDS.debug = false;\n\nimport {\n adoptLayers,\n adoptPrimitives,\n createStylesheet,\n} from \"./pds-core/pds-runtime.js\";\nimport { registry } from \"./pds-core/pds-registry.js\";\nimport { enums } from \"./pds-core/pds-enums.js\";\nimport * as common from \"./common/common.js\";\nimport { resolvePublicAssetURL } from \"./pds-core/pds-paths.js\";\nimport {\n ensureAbsoluteAssetURL,\n ensureTrailingSlash,\n attachFoucListener,\n resolveRuntimeAssetRoot,\n resolveThemeAndApply,\n setupAutoDefinerAndEnhancers,\n} from \"./pds-core/pds-start-helpers.js\";\nimport {\n isPresetThemeCompatible,\n resolveThemePreference,\n} from \"./pds-core/pds-theme-utils.js\";\n\nlet __autoCompletePromise = null;\nlet __askPromise = null;\nlet __toastPromise = null;\nlet __defaultEnhancersPromise = null;\n\nfunction __resolveExternalRuntimeModuleURL(filename, overrideURL) {\n if (overrideURL && typeof overrideURL === \"string\") {\n return overrideURL;\n }\n const assetRootURL = resolveRuntimeAssetRoot(PDS.currentConfig || {}, {\n resolvePublicAssetURL,\n });\n return `${assetRootURL}core/${filename}`;\n}\n\nasync function __loadDefaultEnhancers() {\n if (Array.isArray(PDS.defaultEnhancers) && PDS.defaultEnhancers.length > 0) {\n return PDS.defaultEnhancers;\n }\n if (!__defaultEnhancersPromise) {\n const enhancersModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-enhancers.js\",\n PDS.currentConfig?.enhancersURL\n );\n __defaultEnhancersPromise = import(enhancersModuleURL)\n .then((mod) => {\n const enhancers = Array.isArray(mod?.defaultPDSEnhancers)\n ? mod.defaultPDSEnhancers\n : [];\n PDS.defaultEnhancers = enhancers;\n return enhancers;\n })\n .catch((error) => {\n __defaultEnhancersPromise = null;\n throw error;\n });\n }\n return __defaultEnhancersPromise;\n}\n\nasync function __loadAsk() {\n if (typeof PDS.ask === \"function\" && PDS.ask !== __lazyAsk) {\n return PDS.ask;\n }\n if (!__askPromise) {\n const askModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-ask.js\",\n PDS.currentConfig?.askURL\n );\n __askPromise = import(askModuleURL)\n .then((mod) => {\n const impl = mod?.ask;\n if (typeof impl !== \"function\") {\n throw new Error(\"Failed to load ask helper\");\n }\n PDS.ask = impl;\n return impl;\n })\n .catch((error) => {\n __askPromise = null;\n throw error;\n });\n }\n return __askPromise;\n}\n\nasync function __loadToast() {\n if (typeof PDS.toast === \"function\" && PDS.toast !== __lazyToast) {\n return PDS.toast;\n }\n if (!__toastPromise) {\n const toastModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-toast.js\",\n PDS.currentConfig?.toastURL\n );\n __toastPromise = import(toastModuleURL)\n .then((mod) => {\n const impl = mod?.toast;\n if (typeof impl !== \"function\") {\n throw new Error(\"Failed to load toast helper\");\n }\n PDS.toast = impl;\n return impl;\n })\n .catch((error) => {\n __toastPromise = null;\n throw error;\n });\n }\n return __toastPromise;\n}\n\nasync function __lazyAsk(...args) {\n const askImpl = await __loadAsk();\n return askImpl(...args);\n}\n\nasync function __lazyToast(...args) {\n const toastImpl = await __loadToast();\n return toastImpl(...args);\n}\n\n__lazyToast.success = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.success(...args);\n};\n__lazyToast.error = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.error(...args);\n};\n__lazyToast.warning = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.warning(...args);\n};\n__lazyToast.info = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.info(...args);\n};\n\nconst __defaultLog = function (level = \"log\", message, ...data) {\n const isStaticMode = Boolean(PDS.registry && !PDS.registry.isLive);\n const debug =\n (this?.debug || this?.design?.debug || PDS.debug || false) === true;\n\n if (isStaticMode) {\n if (!PDS.debug) return;\n } else if (!debug && level !== \"error\" && level !== \"warn\") {\n return;\n }\n\n const method = console[level] || console.log;\n if (data.length > 0) {\n method(message, ...data);\n } else {\n method(message);\n }\n};\n\nfunction __stripFunctionsForClone(value) {\n if (value === null || value === undefined) return value;\n if (typeof value === \"function\") return undefined;\n if (typeof value !== \"object\") return value;\n\n if (Array.isArray(value)) {\n return value\n .map((item) => __stripFunctionsForClone(item))\n .filter((item) => item !== undefined);\n }\n\n const result = {};\n for (const [key, entry] of Object.entries(value)) {\n const stripped = __stripFunctionsForClone(entry);\n if (stripped !== undefined) {\n result[key] = stripped;\n }\n }\n return result;\n}\n\nasync function __loadRuntimeConfig(assetRootURL, config = {}) {\n if (config?.runtimeConfig === false) return null;\n if (typeof fetch !== \"function\") return null;\n const runtimeUrl =\n config?.runtimeConfigURL || `${assetRootURL}pds-runtime-config.json`;\n try {\n const res = await fetch(runtimeUrl, { cache: \"no-store\" });\n if (!res.ok) return null;\n return await res.json();\n } catch (e) {\n return null;\n }\n}\n\n/** Singleton runtime registry. Use `registry.setLiveMode()` to enable live mode or `registry.setStaticMode()` for static assets */\nPDS.registry = registry;\n\n/** Expose enums in static and live modes */\nPDS.enums = enums;\n\n/** Adopt a set of layered stylesheets into a ShadowRoot */\nPDS.adoptLayers = adoptLayers;\n\n/** Convenience to adopt only primitives into a ShadowRoot */\nPDS.adoptPrimitives = adoptPrimitives;\n\n/** Parse an HTML string into a NodeList */\nPDS.parse = common.parseHTML;\n\n/** Create a constructable CSSStyleSheet from a CSS string */\nPDS.createStylesheet = createStylesheet;\n\n/** Return true when running inside a live/designer-backed environment */\nPDS.isLiveMode = () => registry.isLive;\nPDS.ask = __lazyAsk;\nPDS.toast = __lazyToast;\nPDS.common = common;\nPDS.AutoComplete = null;\nPDS.loadAutoComplete = async () => {\n if (PDS.AutoComplete && typeof PDS.AutoComplete.connect === \"function\") {\n return PDS.AutoComplete;\n }\n\n const autoCompleteModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-autocomplete.js\",\n PDS.currentConfig?.autoCompleteURL\n );\n\n if (!__autoCompletePromise) {\n __autoCompletePromise = import(autoCompleteModuleURL)\n .then((mod) => {\n const autoCompleteCtor =\n mod?.AutoComplete ||\n mod?.default?.AutoComplete ||\n mod?.default ||\n null;\n if (!autoCompleteCtor) {\n throw new Error(\"AutoComplete export not found in module\");\n }\n PDS.AutoComplete = autoCompleteCtor;\n return autoCompleteCtor;\n })\n .catch((error) => {\n __autoCompletePromise = null;\n throw error;\n });\n }\n return __autoCompletePromise;\n};\n\nfunction __emitPDSReady(detail) {\n const hasCustomEvent = typeof CustomEvent === \"function\";\n\n try {\n const readyEvent = hasCustomEvent\n ? new CustomEvent(\"pds:ready\", { detail })\n : new Event(\"pds:ready\");\n PDS.dispatchEvent(readyEvent);\n } catch (e) {}\n\n if (typeof document !== \"undefined\") {\n if (hasCustomEvent) {\n const eventOptions = { detail, bubbles: true, composed: true };\n try {\n document.dispatchEvent(new CustomEvent(\"pds:ready\", eventOptions));\n } catch (e) {}\n try {\n document.dispatchEvent(new CustomEvent(\"pds-ready\", eventOptions));\n } catch (e) {}\n } else {\n try {\n document.dispatchEvent(new Event(\"pds:ready\"));\n } catch (e) {}\n try {\n document.dispatchEvent(new Event(\"pds-ready\"));\n } catch (e) {}\n }\n }\n}\n\nfunction __emitPDSConfigChanged(detail = {}) {\n const hasCustomEvent = typeof CustomEvent === \"function\";\n const payload = {\n at: Date.now(),\n ...detail,\n };\n\n try {\n const changedEvent = hasCustomEvent\n ? new CustomEvent(\"pds:config-changed\", { detail: payload })\n : new Event(\"pds:config-changed\");\n PDS.dispatchEvent(changedEvent);\n } catch (e) {}\n\n if (typeof document !== \"undefined\") {\n if (hasCustomEvent) {\n const eventOptions = { detail: payload, bubbles: true, composed: true };\n try {\n document.dispatchEvent(\n new CustomEvent(\"pds:config-changed\", eventOptions)\n );\n } catch (e) {}\n } else {\n try {\n document.dispatchEvent(new Event(\"pds:config-changed\"));\n } catch (e) {}\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Theme management (centralized on PDS.theme)\n// Consumers may read/write `PDS.theme` with values: 'system' | 'light' | 'dark'\n// Setting the property persists to localStorage (when available), updates\n// document.documentElement[data-theme] to an explicit 'light'|'dark' value\n// and emits a `pds:theme:changed` event. Reading the property returns the\n// raw stored preference (or null if none).\n\n// Private module-level variables for theme management\nconst __themeStorageKey = \"pure-ds-theme\";\nlet __themeMQ = null;\nlet __themeMQListener = null;\n\n// Private: Apply resolved theme to document\nfunction __applyResolvedTheme(raw) {\n try {\n if (typeof document === \"undefined\") return;\n let resolved = \"light\";\n if (!raw) {\n // No stored preference: use OS preference\n const prefersDark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n resolved = prefersDark ? \"dark\" : \"light\";\n } else if (raw === \"system\") {\n const prefersDark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n resolved = prefersDark ? \"dark\" : \"light\";\n } else {\n resolved = raw;\n }\n document.documentElement.setAttribute(\"data-theme\", resolved);\n } catch (e) {}\n}\n\n// Private: Setup system theme change listener when needed\nfunction __setupSystemListenerIfNeeded(raw) {\n try {\n // Remove any existing listener first\n if (__themeMQ && __themeMQListener) {\n try {\n if (typeof __themeMQ.removeEventListener === \"function\")\n __themeMQ.removeEventListener(\"change\", __themeMQListener);\n else if (typeof __themeMQ.removeListener === \"function\")\n __themeMQ.removeListener(__themeMQListener);\n } catch (e) {}\n __themeMQ = null;\n __themeMQListener = null;\n }\n\n if (\n raw === \"system\" &&\n typeof window !== \"undefined\" &&\n window.matchMedia\n ) {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const listener = (e) => {\n const isDark = e?.matches === undefined ? mq.matches : e.matches;\n try {\n const newTheme = isDark ? \"dark\" : \"light\";\n document.documentElement.setAttribute(\"data-theme\", newTheme);\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:changed\", {\n detail: { theme: newTheme, source: \"system\" },\n })\n );\n } catch (ex) {}\n };\n __themeMQ = mq;\n __themeMQListener = listener;\n if (typeof mq.addEventListener === \"function\")\n mq.addEventListener(\"change\", listener);\n else if (typeof mq.addListener === \"function\") mq.addListener(listener);\n }\n } catch (e) {}\n}\n\nObject.defineProperty(PDS, \"theme\", {\n get() {\n try {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(__themeStorageKey) || null;\n } catch (e) {\n return null;\n }\n },\n set(value) {\n try {\n if (typeof window === \"undefined\") return;\n const currentPreset = PDS.currentConfig?.design || null;\n const resolvedTheme = resolveThemePreference(value);\n if (currentPreset && !isPresetThemeCompatible(currentPreset, resolvedTheme)) {\n const presetName =\n currentPreset?.name ||\n PDS.currentPreset?.name ||\n PDS.currentConfig?.preset ||\n \"current preset\";\n console.warn(\n `PDS theme \"${resolvedTheme}\" not supported by preset \"${presetName}\".`\n );\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:blocked\", {\n detail: { theme: value, resolvedTheme, preset: presetName },\n })\n );\n return;\n }\n if (value === null || value === undefined) {\n localStorage.removeItem(__themeStorageKey);\n } else {\n localStorage.setItem(__themeStorageKey, value);\n }\n\n // Apply resolved (light/dark) value to document\n __applyResolvedTheme(value);\n // Setup system change listener only when 'system' is selected\n __setupSystemListenerIfNeeded(value);\n\n // Emit a notification with the raw preference (value may be 'system')\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:changed\", {\n detail: { theme: value, source: \"api\" },\n })\n );\n } catch (e) {}\n },\n});\n\n// ----------------------------------------------------------------------------\n// Default Enhancers \u2014 first-class citizens alongside AutoDefiner\n// ----------------------------------------------------------------------------\n/**\n * Default DOM enhancers shipped with PDS. These are lightweight progressive\n * enhancements that can be applied to vanilla markup. Consumers can override\n * or add to these via the `enhancers` option of PDS.start({ mode }).\n */\nPDS.defaultEnhancers = [];\n\n/**\n * Initialize PDS in live mode with the given configuration (new unified shape).\n * Typically invoked via PDS.start({ mode: 'live', ... }).\n *\n * Shape:\n * PDS.start({\n * mode: 'live',\n * preset?: string,\n * design?: object,\n * autoDefine?: {\n * baseURL?: string,\n * predefine?: string[],\n * mapper?: (tag:string)=>string|undefined|null, // return undefined/null/false to let PDS default mapper handle it\n * // plus any AutoDefiner flags: scanExisting, observeShadows, patchAttachShadow, debounceMs, onError\n * },\n * // runtime flags (optional)\n * applyGlobalStyles?: boolean,\n * manageTheme?: boolean,\n * themeStorageKey?: string,\n * preloadStyles?: boolean,\n * criticalLayers?: string[]\n * })\n *\n * @param {object} config - The PDS configuration object (unified shape)\n * @returns {Promise<{generator: Generator, config: object, theme: string, autoDefiner?: any}>}\n *\n * @example\n * await PDS.start({ mode: 'live',\n * preset: 'paper-and-ink',\n * design: { colors: { accent: '#FF4081' } },\n * autoDefine: { predefine: ['pds-icon'] }\n * });\n */\n\n/**\n * Start PDS given a unified configuration and an explicit mode.\n *\n * @param {object} config - Unified configuration\n * @param {('live'|'static')} [config.mode='live'] - Runtime mode selector\n * @returns {Promise<any>} Live returns { generator, config, theme, autoDefiner }; Static returns { config, theme, autoDefiner }\n */\nasync function start(config) {\n const mode = (config && config.mode) || \"live\";\n const { mode: _omit, ...rest } = config || {};\n \n if (mode === \"static\") return staticInit(rest);\n const assetRootURL = resolveRuntimeAssetRoot(rest, { resolvePublicAssetURL });\n const managerUrl =\n rest?.managerURL ||\n rest?.public?.managerURL ||\n rest?.manager?.url ||\n new URL(\"core/pds-manager.js\", assetRootURL).href ||\n new URL(\"./pds-manager.js\", import.meta.url).href;\n const { startLive } = await import(managerUrl);\n return startLive(PDS, rest, {\n emitReady: __emitPDSReady,\n emitConfigChanged: __emitPDSConfigChanged,\n applyResolvedTheme: __applyResolvedTheme,\n setupSystemListenerIfNeeded: __setupSystemListenerIfNeeded,\n });\n}\n\n/** Primary unified entry point */\nPDS.start = start;\n\n/**\n * Initialize PDS in static mode with the same unified configuration shape as live mode.\n *\n * Shape:\n * PDS.start({\n * mode: 'static',\n * preset?: string,\n * design?: object,\n * autoDefine?: {\n * baseURL?: string,\n * predefine?: string[],\n * mapper?: (tag:string)=>string,\n * // plus any AutoDefiner flags\n * },\n * // static/runtime flags (optional)\n * applyGlobalStyles?: boolean,\n * manageTheme?: boolean,\n * themeStorageKey?: string,\n * staticPaths?: Record<string,string>\n * })\n */\nasync function staticInit(config) {\n if (!config || typeof config !== \"object\") {\n throw new Error(\n \"PDS.start({ mode: 'static', ... }) requires a valid configuration object\"\n );\n }\n\n const applyGlobalStyles = config.applyGlobalStyles ?? true;\n const manageTheme = config.manageTheme ?? true;\n const themeStorageKey = config.themeStorageKey ?? \"pure-ds-theme\";\n let staticPaths = config.staticPaths ?? {};\n const assetRootURL = resolveRuntimeAssetRoot(config, { resolvePublicAssetURL });\n const cfgAuto = (config && config.autoDefine) || null;\n let autoDefineBaseURL;\n if (cfgAuto && cfgAuto.baseURL) {\n autoDefineBaseURL = ensureTrailingSlash(\n ensureAbsoluteAssetURL(cfgAuto.baseURL, { preferModule: false })\n );\n } else {\n autoDefineBaseURL = `${assetRootURL}components/`;\n }\n const autoDefinePreload =\n (cfgAuto && Array.isArray(cfgAuto.predefine) && cfgAuto.predefine) || [];\n const autoDefineMapper =\n (cfgAuto && typeof cfgAuto.mapper === \"function\" && cfgAuto.mapper) || null;\n\n try {\n attachFoucListener(PDS);\n // 1) Theme\n const { resolvedTheme } = resolveThemeAndApply({\n manageTheme,\n themeStorageKey,\n applyResolvedTheme: __applyResolvedTheme,\n setupSystemListenerIfNeeded: __setupSystemListenerIfNeeded,\n });\n\n // Load runtime config for static assets; config metadata remains live-mode only\n const runtimeConfig = await __loadRuntimeConfig(assetRootURL, config);\n const userEnhancers = Array.isArray(config?.enhancers)\n ? config.enhancers\n : config?.enhancers && typeof config.enhancers === \"object\"\n ? Object.values(config.enhancers)\n : [];\n const resolvedConfig = runtimeConfig?.config\n ? {\n ...runtimeConfig.config,\n ...config,\n design: config?.design || runtimeConfig.config.design,\n preset: config?.preset || runtimeConfig.config.preset,\n }\n : { ...config };\n \n\n // 2) Derive static asset URLs from the normalized public root\n const baseStaticPaths = {\n tokens: `${assetRootURL}styles/pds-tokens.css.js`,\n primitives: `${assetRootURL}styles/pds-primitives.css.js`,\n components: `${assetRootURL}styles/pds-components.css.js`,\n utilities: `${assetRootURL}styles/pds-utilities.css.js`,\n styles: `${assetRootURL}styles/pds-styles.css.js`,\n };\n const runtimePaths = runtimeConfig?.paths || {};\n staticPaths = { ...baseStaticPaths, ...runtimePaths, ...staticPaths };\n\n // 3) Static mode registry\n PDS.registry.setStaticMode(staticPaths);\n\n // 4) Apply global static styles if requested\n if (applyGlobalStyles && typeof document !== \"undefined\") {\n try {\n // Always adopt from exported css.js modules so static mode loads from JS exports\n const stylesSheet = await PDS.registry.getStylesheet(\"styles\");\n if (stylesSheet) {\n // Tag and adopt alongside existing non-PDS sheets\n stylesSheet._pds = true;\n const others = (document.adoptedStyleSheets || []).filter(\n (s) => s._pds !== true\n );\n document.adoptedStyleSheets = [...others, stylesSheet];\n __emitPDSConfigChanged({\n mode: \"static\",\n source: \"static:styles-applied\",\n });\n }\n } catch (e) {\n __defaultLog.call(PDS, \"warn\", \"Failed to apply static styles:\", e);\n }\n }\n\n // 5) AutoDefiner + Enhancers\n let autoDefiner = null;\n let mergedEnhancers = [];\n try {\n const defaultPDSEnhancers = await __loadDefaultEnhancers();\n const res = await setupAutoDefinerAndEnhancers({\n autoDefineBaseURL,\n autoDefinePreload,\n autoDefineMapper,\n enhancers: userEnhancers,\n autoDefineOverrides: cfgAuto || null,\n autoDefinePreferModule: !(cfgAuto && cfgAuto.baseURL),\n }, { baseEnhancers: defaultPDSEnhancers });\n autoDefiner = res.autoDefiner;\n mergedEnhancers = res.mergedEnhancers || [];\n } catch (error) {\n __defaultLog.call(\n PDS,\n \"error\",\n \"\u274C Failed to initialize AutoDefiner/Enhancers (static):\",\n error\n );\n }\n\n // Expose current config as frozen read-only on PDS, preserving input shape\n // Strip functions before cloning to avoid DataCloneError\n const cloneableConfig = __stripFunctionsForClone(config);\n PDS.currentConfig = Object.freeze({\n mode: \"static\",\n ...structuredClone(cloneableConfig),\n design: structuredClone(resolvedConfig.design || {}),\n preset: resolvedConfig.preset,\n theme: resolvedTheme,\n enhancers: mergedEnhancers,\n });\n\n // 6) Emit ready event (unified)\n __emitPDSReady({\n mode: \"static\",\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n });\n return {\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n };\n } catch (error) {\n PDS.dispatchEvent(new CustomEvent(\"pds:error\", { detail: { error } }));\n throw error;\n }\n}\n\n// Note: PDS.static is not exported. Use PDS.start({ mode: 'static', ... }).\n\n// Note: PDS object is not frozen to allow runtime properties like currentConfig\n// to be set during initialization. The config object itself is frozen for immutability.\n\nexport const applyResolvedTheme = __applyResolvedTheme;\nexport const setupSystemListenerIfNeeded = __setupSystemListenerIfNeeded;\nexport { PDS };\n"],
5
- "mappings": "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",
6
- "names": ["ensureTrailingSlash", "PDS", "applyResolvedTheme", "setupSystemListenerIfNeeded", "resolvePublicAssetURL", "ensureTrailingSlash", "ensureTrailingSlash"]
7
- }