@verbb/plugin-kit-web 2.0.3 → 2.0.4
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.
- package/CHANGELOG.md +13 -0
- package/dist/chunks/{autoloader-DzOTQqe6.js → autoloader-DXK9MVuw.js} +2 -2
- package/dist/chunks/{autoloader-DzOTQqe6.js.map → autoloader-DXK9MVuw.js.map} +1 -1
- package/dist/chunks/{component-registry-CpZiIDh4.js → component-registry-BOlxFlou.js} +1 -1
- package/dist/chunks/{component-registry-CpZiIDh4.js.map → component-registry-BOlxFlou.js.map} +1 -1
- package/dist/chunks/{pk-button-Cilu5WAT.js → pk-button-QpDDlRbG.js} +8 -3
- package/dist/chunks/pk-button-QpDDlRbG.js.map +1 -0
- package/dist/chunks/{pk-checkbox-select-ZEJ6WIQn.js → pk-checkbox-select-9lqd9Rwz.js} +2 -1
- package/dist/chunks/{pk-checkbox-select-ZEJ6WIQn.js.map → pk-checkbox-select-9lqd9Rwz.js.map} +1 -1
- package/dist/chunks/{pk-combobox-Dd1ik0Ko.js → pk-combobox-DtkXaX67.js} +3 -2
- package/dist/chunks/pk-combobox-DtkXaX67.js.map +1 -0
- package/dist/chunks/{pk-copy-button-DPh5TOF9.js → pk-copy-button-C17MLLYS.js} +2 -1
- package/dist/chunks/{pk-copy-button-DPh5TOF9.js.map → pk-copy-button-C17MLLYS.js.map} +1 -1
- package/dist/chunks/{pk-date-picker-CkwU4DzD.js → pk-date-picker-DIoQlPI9.js} +3 -2
- package/dist/chunks/pk-date-picker-DIoQlPI9.js.map +1 -0
- package/dist/chunks/{pk-dropdown-item-BFyjtsL5.js → pk-dropdown-item-P3LLojCI.js} +16 -1
- package/dist/chunks/pk-dropdown-item-P3LLojCI.js.map +1 -0
- package/dist/chunks/{pk-dropdown-label-DfACId-K.js → pk-dropdown-label-ibVrU6-U.js} +10 -4
- package/dist/chunks/pk-dropdown-label-ibVrU6-U.js.map +1 -0
- package/dist/chunks/{pk-dropdown-menu-DWlxkDIs.js → pk-dropdown-menu-CsX95MCP.js} +2 -2
- package/dist/chunks/pk-dropdown-menu-CsX95MCP.js.map +1 -0
- package/dist/chunks/{pk-editable-table-pBkD6izs.js → pk-editable-table-wtsSKfzS.js} +14 -1
- package/dist/chunks/{pk-editable-table-pBkD6izs.js.map → pk-editable-table-wtsSKfzS.js.map} +1 -1
- package/dist/chunks/{pk-option-C3Zqmu3z.js → pk-option-C-cR-jOv.js} +11 -3
- package/dist/chunks/pk-option-C-cR-jOv.js.map +1 -0
- package/dist/chunks/{pk-popover-XZZdJ4WI.js → pk-popover-CVvwXMld.js} +2 -2
- package/dist/chunks/pk-popover-CVvwXMld.js.map +1 -0
- package/dist/chunks/{pk-select-B17rV6BR.js → pk-select-odSNU1tN.js} +3 -2
- package/dist/chunks/pk-select-odSNU1tN.js.map +1 -0
- package/dist/chunks/{pk-tab-CzV7pOdp.js → pk-tab-BdoPiYfT.js} +8 -2
- package/dist/chunks/pk-tab-BdoPiYfT.js.map +1 -0
- package/dist/chunks/{pk-time-picker-DbW_hMs2.js → pk-time-picker-DtX0LtID.js} +3 -2
- package/dist/chunks/{pk-time-picker-DbW_hMs2.js.map → pk-time-picker-DtX0LtID.js.map} +1 -1
- package/dist/chunks/{pk-tiptap-editor-umIuEaXh.js → pk-tiptap-editor-CdoutapZ.js} +10 -1
- package/dist/chunks/{pk-tiptap-editor-umIuEaXh.js.map → pk-tiptap-editor-CdoutapZ.js.map} +1 -1
- package/dist/chunks/pk-tooltip-fcUbVGli.js.map +1 -1
- package/dist/chunks/popup-pointer-DMnuZDQl.js +34 -0
- package/dist/chunks/popup-pointer-DMnuZDQl.js.map +1 -0
- package/dist/chunks/register-22v142C-.js +143 -0
- package/dist/chunks/register-22v142C-.js.map +1 -0
- package/dist/chunks/{register-components-DNw6EYNo.js → register-components-BG_6_v_T.js} +1 -1
- package/dist/chunks/{register-components-DNw6EYNo.js.map → register-components-BG_6_v_T.js.map} +1 -1
- package/dist/components/button/pk-button.js +1 -1
- package/dist/components/button/pk-button.styles.d.ts.map +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
- package/dist/components/checkbox-select.js +1 -1
- package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
- package/dist/components/combobox/pk-combobox.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/copy-button/pk-copy-button.js +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/date-picker/pk-date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/pk-date-picker.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-size.styles.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.styles.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-label.styles.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu.js +3 -3
- package/dist/components/editable-table/pk-editable-table.js +1 -1
- package/dist/components/editable-table.js +1 -1
- package/dist/components/popover/pk-popover.d.ts.map +1 -1
- package/dist/components/popover/pk-popover.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/select/pk-option.js +1 -1
- package/dist/components/select/pk-option.styles.d.ts.map +1 -1
- package/dist/components/select/pk-select.d.ts.map +1 -1
- package/dist/components/select/pk-select.js +1 -1
- package/dist/components/select.js +2 -2
- package/dist/components/tabs/pk-tab.js +1 -1
- package/dist/components/tabs/pk-tab.styles.d.ts.map +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/time-picker/pk-time-picker.js +1 -1
- package/dist/components/time-picker.js +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
- package/dist/components/tiptap-editor.js +1 -1
- package/dist/components/tooltip/pk-tooltip.d.ts.map +1 -1
- package/dist/index.js +19 -19
- package/dist/plugin-kit.js +2 -2
- package/dist/register-components.js +1 -1
- package/dist/register.js +18 -79
- package/dist/utils/popup-pointer.d.ts +3 -0
- package/dist/utils/popup-pointer.d.ts.map +1 -1
- package/dist-loader/chunks/{pk-button-BlSs4e6V.js → pk-button-CK5FZiwP.js} +9 -5
- package/dist-loader/chunks/{pk-calendar-RXCDDhLI.js → pk-calendar-Ir5izQJH.js} +3 -3
- package/dist-loader/chunks/{pk-checkbox-hJCj8In8.js → pk-checkbox-CoDX2G3J.js} +2 -2
- package/dist-loader/chunks/{pk-color-input-BfNtLznP.js → pk-color-input-BEmVZXSP.js} +2 -2
- package/dist-loader/chunks/{pk-combobox-1PJBcIrV.js → pk-combobox-fXGaY4L0.js} +11 -10
- package/dist-loader/chunks/{pk-date-picker-D4vCtbw-.js → pk-date-picker-B3eWgHtv.js} +12 -11
- package/dist-loader/chunks/{pk-dialog-D1RZjwQN.js → pk-dialog-CP1YT85H.js} +4 -4
- package/dist-loader/chunks/{pk-dropdown-item-BJIhQ0Mw.js → pk-dropdown-item-DkZRcPJ5.js} +20 -5
- package/dist-loader/chunks/{pk-dropdown-menu-I1s3TBiA.js → pk-dropdown-menu-CajQAobW.js} +6 -6
- package/dist-loader/chunks/{pk-field-BnKPT_Kk.js → pk-field-CIfymz5G.js} +3 -3
- package/dist-loader/chunks/{pk-input-Oarjv7Vc.js → pk-input-CXE7_rTQ.js} +6 -6
- package/dist-loader/chunks/{pk-lightswitch-D-UrNM3y.js → pk-lightswitch-BHEOy7aK.js} +4 -4
- package/dist-loader/chunks/{pk-option-CCZebfif.js → pk-option-vh8UvSAI.js} +12 -4
- package/dist-loader/chunks/{pk-popup-BNRyCsVX.js → pk-popup-BYFbKaHH.js} +2 -2
- package/dist-loader/chunks/{pk-select-BcbtjIoP.js → pk-select-CbmPJCx8.js} +11 -10
- package/dist-loader/chunks/{pk-textarea-CC6WXpIu.js → pk-textarea-Ch8JpP83.js} +4 -4
- package/dist-loader/chunks/{pk-time-picker-BtGXo-KJ.js → pk-time-picker-DZljwJn9.js} +4 -3
- package/dist-loader/chunks/{pk-tooltip-JJRxVXYD.js → pk-tooltip-DHiCn33o.js} +3 -3
- package/dist-loader/chunks/popup-pointer-BTS3Y6LE.js +32 -0
- package/dist-loader/chunks/{render-DApFfV9S.js → render-BCU9WDSk.js} +1 -1
- package/dist-loader/chunks/{icons-B1i-oRoD.js → svg-BCGsRUz7.js} +34 -1
- package/dist-loader/chunks/{tiptap-Db7MTUH1.js → tiptap-_LAjdgeV.js} +1 -1
- package/dist-loader/chunks/{tiptap.styles-DAH_90Fi.js → tiptap.styles-CDjt6Iz4.js} +1 -1
- package/dist-loader/components/button/button.js +1 -1
- package/dist-loader/components/button-group/button-group-text.js +1 -1
- package/dist-loader/components/calendar/calendar.js +1 -1
- package/dist-loader/components/checkbox/checkbox.js +1 -1
- package/dist-loader/components/checkbox-select/checkbox-select.js +1 -0
- package/dist-loader/components/code-editor/code-editor.js +2 -2
- package/dist-loader/components/color-input/color-input.js +1 -1
- package/dist-loader/components/combobox/combobox.js +1 -1
- package/dist-loader/components/copy-button/copy-button.js +3 -2
- package/dist-loader/components/date-picker/date-picker.js +1 -1
- package/dist-loader/components/dialog/dialog.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-label.js +9 -3
- package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
- package/dist-loader/components/editable-table/editable-table.js +16 -3
- package/dist-loader/components/field/field.js +1 -1
- package/dist-loader/components/icon/icon.js +43 -2
- package/dist-loader/components/input/input.js +1 -1
- package/dist-loader/components/input-group/input-group.js +1 -1
- package/dist-loader/components/lightswitch/lightswitch.js +1 -1
- package/dist-loader/components/popover/popover.js +6 -6
- package/dist-loader/components/popup/popup.js +1 -1
- package/dist-loader/components/radio-group/radio-group.js +3 -3
- package/dist-loader/components/select/option.js +1 -1
- package/dist-loader/components/select/select.js +1 -1
- package/dist-loader/components/tabs/tab.js +7 -1
- package/dist-loader/components/textarea/textarea.js +1 -1
- package/dist-loader/components/time-picker/time-picker.js +1 -1
- package/dist-loader/components/tiptap/tiptap-content.js +2 -2
- package/dist-loader/components/tiptap/tiptap-editor.js +13 -5
- package/dist-loader/components/tiptap/tiptap-input.js +3 -3
- package/dist-loader/components/toggle/toggle.js +1 -1
- package/dist-loader/components/tooltip/tooltip.js +1 -1
- package/package.json +8 -7
- package/dist/chunks/pk-button-Cilu5WAT.js.map +0 -1
- package/dist/chunks/pk-combobox-Dd1ik0Ko.js.map +0 -1
- package/dist/chunks/pk-date-picker-CkwU4DzD.js.map +0 -1
- package/dist/chunks/pk-dropdown-item-BFyjtsL5.js.map +0 -1
- package/dist/chunks/pk-dropdown-label-DfACId-K.js.map +0 -1
- package/dist/chunks/pk-dropdown-menu-DWlxkDIs.js.map +0 -1
- package/dist/chunks/pk-option-C3Zqmu3z.js.map +0 -1
- package/dist/chunks/pk-popover-XZZdJ4WI.js.map +0 -1
- package/dist/chunks/pk-select-B17rV6BR.js.map +0 -1
- package/dist/chunks/pk-tab-CzV7pOdp.js.map +0 -1
- package/dist/chunks/popup-pointer-C8lypj8V.js +0 -21
- package/dist/chunks/popup-pointer-C8lypj8V.js.map +0 -1
- package/dist/register.js.map +0 -1
- package/dist-loader/chunks/popup-pointer-BC4n_sNb.js +0 -19
- package/dist-loader/chunks/svg-Boar0Kf1.js +0 -34
- /package/dist-loader/chunks/{animate-with-class-DT0jwaR_.js → animate-with-class-B2hHgK5M.js} +0 -0
- /package/dist-loader/chunks/{button-group-item.styles-Dwakbyx5.js → button-group-item.styles-BNc-ksl1.js} +0 -0
- /package/dist-loader/chunks/{codemirror-CSgOT0QM.js → codemirror-CHXb-wYU.js} +0 -0
- /package/dist-loader/chunks/{field-labels-D3lKQ2nq.js → field-labels-Vo3wHq49.js} +0 -0
- /package/dist-loader/chunks/{floating-ui-87vslRWW.js → floating-ui-BTBNFWAR.js} +0 -0
- /package/dist-loader/chunks/{has-slot-BGJeJdHr.js → has-slot-BZDcCpf9.js} +0 -0
- /package/dist-loader/chunks/{mirror-validator-C5XrXPaq.js → mirror-validator-DEz3BsbN.js} +0 -0
- /package/dist-loader/chunks/{overlay-lifecycle-C3tSQ3UR.js → overlay-lifecycle-BG4QMRLw.js} +0 -0
- /package/dist-loader/chunks/{pk-clear-BMZUzwDt.js → pk-clear-BRS8vkV-.js} +0 -0
- /package/dist-loader/chunks/{popup-content-animation.styles-S6CK-zPp.js → popup-content-animation.styles-C9ffC35f.js} +0 -0
- /package/dist-loader/chunks/{popup-placement-animation-WlEXnS85.js → popup-placement-animation-BPjq650B.js} +0 -0
- /package/dist-loader/chunks/{required-validator-0XwZtX9k.js → required-validator-DXqqPVeW.js} +0 -0
- /package/dist-loader/chunks/{sync-listbox-separators-Bcja51HC.js → sync-listbox-separators-CT3oGzTf.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 2.0.4 - 2026-07-21
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Slotted light-DOM labels on dropdown items (and related slotty hosts) no longer inherit Craft CP / page line-height via `font: inherit`. `:host` pins size-token `font-size` / `line-height` / `color` so the same `size` looks identical under tight Craft metrics and comfortable Tailwind metrics. Also covers `pk-dropdown-label`, `pk-option`, `pk-tab`, and `pk-button` slotted labels.
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Workshop dual-host stress lab at `/tools/slotted-host` (Craft-like vs Tailwind-like page metrics, ellipsis + text-trigger menus, ancestor `line-height: normal` noise case, overlay mode, item-height measure).
|
|
12
|
+
|
|
13
|
+
## 2.0.4 - 2026-07-19
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Light-dismiss hit testing no longer treats *any* `pk-popup` in the composed path as inside the open overlay. Sibling dropdown triggers (which slot inside their own `pk-popup`) now correctly dismiss open popovers/selects/comboboxes/date pickers instead of leaving two overlays open.
|
|
17
|
+
|
|
5
18
|
## 2.0.3 - 2026-07-19
|
|
6
19
|
|
|
7
20
|
### Changed
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as SUPPORTS_POPOVER } from "./supports-popover-CUBsbHpS.js";
|
|
2
|
-
import { n as COMPONENT_MODULE_PATHS } from "./component-registry-
|
|
2
|
+
import { n as COMPONENT_MODULE_PATHS } from "./component-registry-BOlxFlou.js";
|
|
3
3
|
//#region src/utils/documentScrollStability.ts
|
|
4
4
|
var DOCUMENT_SCROLL_STABILITY_STYLE_ID = "plugin-kit-document-scroll-stability";
|
|
5
5
|
/**
|
|
@@ -174,4 +174,4 @@ var DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;
|
|
|
174
174
|
//#endregion
|
|
175
175
|
export { setPortalClassName as _, startLoader as a, setBasePath as c, getPortalClassName as d, getPortalContainer as f, resolvePositionMethod as g, getShadowRootSelectors as h, preventTurboFouce as i, allDefined as l, getPortalTargetForAppend as m, FOUCE_TIMEOUT_MS as n, stopLoader as o, getPortalMountElement as p, discover as r, getBasePath as s, DISCOVERY_COMPLETE_EVENT as t, configurePluginKitWeb as u, setPortalContainer as v, setShadowRootSelectors as y };
|
|
176
176
|
|
|
177
|
-
//# sourceMappingURL=autoloader-
|
|
177
|
+
//# sourceMappingURL=autoloader-DXK9MVuw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoloader-DzOTQqe6.js","names":[],"sources":["../../src/utils/documentScrollStability.ts","../../src/utils/portal.ts","../../src/utils/config.ts","../../src/utilities/defined.ts","../../src/utilities/base-path.ts","../../src/utilities/autoloader.ts"],"sourcesContent":["const DOCUMENT_SCROLL_STABILITY_STYLE_ID = 'plugin-kit-document-scroll-stability';\n\n/**\n * Reserve scrollbar space on the document root so overlay scroll lock\n * can use the stable gutter path instead of body width compensation.\n * Safe to call multiple times; only injects once.\n *\n * tokens.css already sets `html { scrollbar-gutter: stable }` for kit surfaces\n * that import tokens. This injector covers hosts that load components without\n * tokens (e.g. craft CP early boot / ShadowRoot portal config).\n */\nexport const ensureDocumentScrollStability = (): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.querySelector(`style[data-plugin-kit-style-id=\"${DOCUMENT_SCROLL_STABILITY_STYLE_ID}\"]`)) {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('data-plugin-kit-style-id', DOCUMENT_SCROLL_STABILITY_STYLE_ID);\n style.textContent = 'html { scrollbar-gutter: stable; }';\n document.head.appendChild(style);\n};\n","import { SUPPORTS_POPOVER } from './supports-popover.js';\n\nexport type PortalContainer = HTMLElement | ShadowRoot | null;\n\nlet defaultPortalClassName: string | undefined;\nlet defaultPortalContainer: PortalContainer | undefined;\nlet defaultShadowRootSelectors: string[] = ['[data-plugin-kit-shadow-root]'];\n\nexport const setPortalClassName = (className: string): void => {\n defaultPortalClassName = className.trim() || undefined;\n};\n\nexport const getPortalClassName = (className?: string): string | undefined => {\n return (className ?? defaultPortalClassName)?.trim() || undefined;\n};\n\nexport const setPortalContainer = (container: PortalContainer): void => {\n defaultPortalContainer = container;\n};\n\nexport const getPortalContainer = (container?: PortalContainer): PortalContainer | undefined => {\n return container ?? defaultPortalContainer;\n};\n\nexport const setShadowRootSelectors = (selectors: string[]): void => {\n const normalizedSelectors = (selectors || [])\n .map((selector) => selector.trim())\n .filter(Boolean);\n\n defaultShadowRootSelectors = normalizedSelectors.length > 0\n ? normalizedSelectors\n : ['[data-plugin-kit-shadow-root]'];\n};\n\nexport const getShadowRootSelectors = (): string[] => {\n return defaultShadowRootSelectors;\n};\n\n/**\n * Returns an HTMLElement suitable for appendChild — mirrors React `getPortalTargetForAppend`.\n * When the portal container is a ShadowRoot, prefers a dedicated mount node inside it.\n */\nexport function getPortalTargetForAppend(container?: PortalContainer): HTMLElement | undefined {\n const resolved = getPortalContainer(container);\n\n if (!resolved) {\n return undefined;\n }\n\n if (resolved instanceof HTMLElement) {\n return resolved;\n }\n\n const shadowRoot = resolved;\n\n const target = getShadowRootSelectors()\n .map((selector) => shadowRoot.querySelector<HTMLElement>(selector))\n .find((node) => Boolean(node));\n\n if (target) {\n return target;\n }\n\n return shadowRoot.host instanceof HTMLElement ? shadowRoot.host : undefined;\n}\n\n/** Resolves where floating popup layers should mount. Falls back to `document.body`. */\nexport function getPortalMountElement(container?: PortalContainer): HTMLElement {\n return getPortalTargetForAppend(container) ?? document.body;\n}\n\nexport function resolvePositionMethod(\n positionMethod: 'fixed' | 'absolute' | undefined,\n container?: PortalContainer,\n): 'fixed' | 'absolute' {\n if (positionMethod) {\n return positionMethod;\n }\n\n if (SUPPORTS_POPOVER) {\n return 'absolute';\n }\n\n const resolved = getPortalContainer(container);\n\n if (resolved instanceof ShadowRoot) {\n return 'fixed';\n }\n\n return 'absolute';\n}\n","import { ensureDocumentScrollStability } from './documentScrollStability.js';\nimport {\n setShadowRootSelectors,\n type PortalContainer,\n} from './portal.js';\n\nexport type PluginKitWebConfig = {\n /**\n * @deprecated Popups use the Popover API top layer — not DOM reparenting. Ignored if set.\n */\n portalClassName?: string;\n /**\n * When a `ShadowRoot`, enables document scroll-gutter stability for overlay scroll lock\n * in embedded hosts (e.g. Craft CP). React/Base UI compat still uses this as a portal target.\n */\n portalContainer?: PortalContainer;\n shadowRootSelectors?: string[];\n};\n\nexport const configurePluginKitWeb = (config: PluginKitWebConfig): void => {\n if (config.portalContainer instanceof ShadowRoot) {\n ensureDocumentScrollStability();\n }\n\n if (config.shadowRootSelectors) {\n setShadowRootSelectors(config.shadowRootSelectors);\n }\n};\n","export type AllDefinedOptions = {\n /**\n * Accepts a custom element tag name and returns `true` if the element should be awaited.\n * Tag names are always lowercase.\n */\n match?: (tagName: string) => boolean;\n /** Additional tag names to await that may not be in the DOM yet. */\n additionalElements?: string | string[];\n /** Root to search within. Defaults to `document`. Shadow roots are not traversed. */\n root?: Document | ShadowRoot;\n};\n\n/**\n * Waits for custom elements on the page to be registered before resolving.\n * By default, waits for all undefined `pk-*` elements.\n */\nexport async function allDefined(options: AllDefinedOptions = {}): Promise<void> {\n const opts = {\n match: (tagName: string) => tagName.startsWith('pk-'),\n additionalElements: [] as string[],\n root: document,\n ...options,\n };\n\n const additionalElements = Array.isArray(opts.additionalElements)\n ? opts.additionalElements\n : [opts.additionalElements];\n\n const undefinedElements = [...opts.root.querySelectorAll(':not(:defined)')]\n .map((el) => el.localName)\n .filter((tag, index, arr) => arr.indexOf(tag) === index)\n .filter((tag) => opts.match(tag));\n\n const tagsToAwait = [...undefinedElements, ...additionalElements];\n await Promise.all(tagsToAwait.map((tag) => customElements.whenDefined(tag)));\n await new Promise(requestAnimationFrame);\n}\n","let basePath = '';\n\nexport function setBasePath(path: string): void {\n basePath = path;\n}\n\nexport function getBasePath(subpath = ''): string {\n if (!basePath) {\n const el = document.querySelector('[data-plugin-kit]');\n\n if (el?.hasAttribute('data-plugin-kit')) {\n const rootRelativeUrl = new URL(el.getAttribute('data-plugin-kit') ?? '', window.location.href).pathname;\n setBasePath(rootRelativeUrl);\n } else {\n const scripts = [...document.getElementsByTagName('script')];\n const pkScript = scripts.find(\n (script) =>\n script.src.endsWith('plugin-kit.js') || script.src.endsWith('plugin-kit.loader.js'),\n );\n\n if (pkScript) {\n const path = String(pkScript.getAttribute('src'));\n setBasePath(path.split('/').slice(0, -1).join('/'));\n }\n }\n }\n\n return basePath.replace(/\\/$/, '') + (subpath ? `/${subpath.replace(/^\\//, '')}` : '');\n}\n","import { COMPONENT_MODULE_PATHS } from '../component-registry.js';\nimport { getBasePath } from './base-path.js';\n\nconst PK_PREFIX = 'pk-';\nconst DISCOVERY_EVENT = 'pk-discovery-complete';\n\nconst observer = new MutationObserver((mutations) => {\n for (const { addedNodes } of mutations) {\n for (const node of addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n void discover(node as Element);\n }\n }\n }\n});\n\nexport function startLoader(): void {\n void discover(document.documentElement);\n observer.observe(document.documentElement, { subtree: true, childList: true });\n}\n\nexport function stopLoader(): void {\n observer.disconnect();\n}\n\nexport async function discover(root: Document | Element = document): Promise<void> {\n const rootTagName = root instanceof Element ? root.tagName.toLowerCase() : '';\n const rootIsPluginKitComponent = rootTagName.startsWith(PK_PREFIX);\n const tags = [...root.querySelectorAll(':not(:defined)')]\n .map((el) => el.tagName.toLowerCase())\n .filter((tag) => tag.startsWith(PK_PREFIX));\n\n if (rootIsPluginKitComponent && !customElements.get(rootTagName)) {\n tags.push(rootTagName);\n }\n\n const preloadSelectors = root.querySelectorAll('[data-pk-preload]');\n const preloadRoots =\n root instanceof Element && root.hasAttribute('data-pk-preload')\n ? [root, ...preloadSelectors]\n : preloadSelectors;\n\n for (const el of preloadRoots) {\n tags.push(\n ...el\n .getAttribute('data-pk-preload')!\n .split(/\\s+/)\n .filter((tag) => tag.startsWith(PK_PREFIX)),\n );\n }\n\n const tagsToRegister = [...new Set(tags)];\n const imports = await Promise.allSettled(tagsToRegister.map((tagName) => register(tagName)));\n\n for (const imp of imports) {\n if (imp.status === 'rejected') {\n console.warn(imp.reason);\n }\n }\n\n await new Promise(requestAnimationFrame);\n\n root.dispatchEvent(\n new CustomEvent(DISCOVERY_EVENT, {\n bubbles: false,\n cancelable: false,\n composed: true,\n }),\n );\n}\n\nfunction register(tagName: string): Promise<void> {\n if (customElements.get(tagName)) {\n return Promise.resolve();\n }\n\n const modulePath = COMPONENT_MODULE_PATHS[tagName];\n\n if (!modulePath) {\n return Promise.reject(new Error(`Unable to autoload <${tagName}> — no module path registered`));\n }\n\n const path = getBasePath(modulePath);\n\n return import(/* @vite-ignore */ path).then(() => undefined);\n}\n\nlet turboTimeout = 2000;\n\n/** Prevent FOUCE when navigating with Turbo (Hotwire). */\nexport function preventTurboFouce(timeout = 2000): void {\n turboTimeout = timeout;\n document.addEventListener('turbo:before-render', handleTurboRender);\n}\n\nasync function handleTurboRender(event: Event): Promise<void> {\n const turboEvent = event as CustomEvent<{ newBody: Element; resume: () => void }>;\n const newBody = turboEvent.detail.newBody;\n\n turboEvent.preventDefault();\n\n try {\n await Promise.race([\n discover(newBody),\n new Promise<void>((resolve) => setTimeout(resolve, turboTimeout)),\n ]);\n } finally {\n turboEvent.detail.resume();\n }\n}\n\nexport const FOUCE_TIMEOUT_MS = 2000;\nexport const DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autoloader-DXK9MVuw.js","names":[],"sources":["../../src/utils/documentScrollStability.ts","../../src/utils/portal.ts","../../src/utils/config.ts","../../src/utilities/defined.ts","../../src/utilities/base-path.ts","../../src/utilities/autoloader.ts"],"sourcesContent":["const DOCUMENT_SCROLL_STABILITY_STYLE_ID = 'plugin-kit-document-scroll-stability';\n\n/**\n * Reserve scrollbar space on the document root so overlay scroll lock\n * can use the stable gutter path instead of body width compensation.\n * Safe to call multiple times; only injects once.\n *\n * tokens.css already sets `html { scrollbar-gutter: stable }` for kit surfaces\n * that import tokens. This injector covers hosts that load components without\n * tokens (e.g. craft CP early boot / ShadowRoot portal config).\n */\nexport const ensureDocumentScrollStability = (): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.querySelector(`style[data-plugin-kit-style-id=\"${DOCUMENT_SCROLL_STABILITY_STYLE_ID}\"]`)) {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('data-plugin-kit-style-id', DOCUMENT_SCROLL_STABILITY_STYLE_ID);\n style.textContent = 'html { scrollbar-gutter: stable; }';\n document.head.appendChild(style);\n};\n","import { SUPPORTS_POPOVER } from './supports-popover.js';\n\nexport type PortalContainer = HTMLElement | ShadowRoot | null;\n\nlet defaultPortalClassName: string | undefined;\nlet defaultPortalContainer: PortalContainer | undefined;\nlet defaultShadowRootSelectors: string[] = ['[data-plugin-kit-shadow-root]'];\n\nexport const setPortalClassName = (className: string): void => {\n defaultPortalClassName = className.trim() || undefined;\n};\n\nexport const getPortalClassName = (className?: string): string | undefined => {\n return (className ?? defaultPortalClassName)?.trim() || undefined;\n};\n\nexport const setPortalContainer = (container: PortalContainer): void => {\n defaultPortalContainer = container;\n};\n\nexport const getPortalContainer = (container?: PortalContainer): PortalContainer | undefined => {\n return container ?? defaultPortalContainer;\n};\n\nexport const setShadowRootSelectors = (selectors: string[]): void => {\n const normalizedSelectors = (selectors || [])\n .map((selector) => selector.trim())\n .filter(Boolean);\n\n defaultShadowRootSelectors = normalizedSelectors.length > 0\n ? normalizedSelectors\n : ['[data-plugin-kit-shadow-root]'];\n};\n\nexport const getShadowRootSelectors = (): string[] => {\n return defaultShadowRootSelectors;\n};\n\n/**\n * Returns an HTMLElement suitable for appendChild — mirrors React `getPortalTargetForAppend`.\n * When the portal container is a ShadowRoot, prefers a dedicated mount node inside it.\n */\nexport function getPortalTargetForAppend(container?: PortalContainer): HTMLElement | undefined {\n const resolved = getPortalContainer(container);\n\n if (!resolved) {\n return undefined;\n }\n\n if (resolved instanceof HTMLElement) {\n return resolved;\n }\n\n const shadowRoot = resolved;\n\n const target = getShadowRootSelectors()\n .map((selector) => shadowRoot.querySelector<HTMLElement>(selector))\n .find((node) => Boolean(node));\n\n if (target) {\n return target;\n }\n\n return shadowRoot.host instanceof HTMLElement ? shadowRoot.host : undefined;\n}\n\n/** Resolves where floating popup layers should mount. Falls back to `document.body`. */\nexport function getPortalMountElement(container?: PortalContainer): HTMLElement {\n return getPortalTargetForAppend(container) ?? document.body;\n}\n\nexport function resolvePositionMethod(\n positionMethod: 'fixed' | 'absolute' | undefined,\n container?: PortalContainer,\n): 'fixed' | 'absolute' {\n if (positionMethod) {\n return positionMethod;\n }\n\n if (SUPPORTS_POPOVER) {\n return 'absolute';\n }\n\n const resolved = getPortalContainer(container);\n\n if (resolved instanceof ShadowRoot) {\n return 'fixed';\n }\n\n return 'absolute';\n}\n","import { ensureDocumentScrollStability } from './documentScrollStability.js';\nimport {\n setShadowRootSelectors,\n type PortalContainer,\n} from './portal.js';\n\nexport type PluginKitWebConfig = {\n /**\n * @deprecated Popups use the Popover API top layer — not DOM reparenting. Ignored if set.\n */\n portalClassName?: string;\n /**\n * When a `ShadowRoot`, enables document scroll-gutter stability for overlay scroll lock\n * in embedded hosts (e.g. Craft CP). React/Base UI compat still uses this as a portal target.\n */\n portalContainer?: PortalContainer;\n shadowRootSelectors?: string[];\n};\n\nexport const configurePluginKitWeb = (config: PluginKitWebConfig): void => {\n if (config.portalContainer instanceof ShadowRoot) {\n ensureDocumentScrollStability();\n }\n\n if (config.shadowRootSelectors) {\n setShadowRootSelectors(config.shadowRootSelectors);\n }\n};\n","export type AllDefinedOptions = {\n /**\n * Accepts a custom element tag name and returns `true` if the element should be awaited.\n * Tag names are always lowercase.\n */\n match?: (tagName: string) => boolean;\n /** Additional tag names to await that may not be in the DOM yet. */\n additionalElements?: string | string[];\n /** Root to search within. Defaults to `document`. Shadow roots are not traversed. */\n root?: Document | ShadowRoot;\n};\n\n/**\n * Waits for custom elements on the page to be registered before resolving.\n * By default, waits for all undefined `pk-*` elements.\n */\nexport async function allDefined(options: AllDefinedOptions = {}): Promise<void> {\n const opts = {\n match: (tagName: string) => tagName.startsWith('pk-'),\n additionalElements: [] as string[],\n root: document,\n ...options,\n };\n\n const additionalElements = Array.isArray(opts.additionalElements)\n ? opts.additionalElements\n : [opts.additionalElements];\n\n const undefinedElements = [...opts.root.querySelectorAll(':not(:defined)')]\n .map((el) => el.localName)\n .filter((tag, index, arr) => arr.indexOf(tag) === index)\n .filter((tag) => opts.match(tag));\n\n const tagsToAwait = [...undefinedElements, ...additionalElements];\n await Promise.all(tagsToAwait.map((tag) => customElements.whenDefined(tag)));\n await new Promise(requestAnimationFrame);\n}\n","let basePath = '';\n\nexport function setBasePath(path: string): void {\n basePath = path;\n}\n\nexport function getBasePath(subpath = ''): string {\n if (!basePath) {\n const el = document.querySelector('[data-plugin-kit]');\n\n if (el?.hasAttribute('data-plugin-kit')) {\n const rootRelativeUrl = new URL(el.getAttribute('data-plugin-kit') ?? '', window.location.href).pathname;\n setBasePath(rootRelativeUrl);\n } else {\n const scripts = [...document.getElementsByTagName('script')];\n const pkScript = scripts.find(\n (script) =>\n script.src.endsWith('plugin-kit.js') || script.src.endsWith('plugin-kit.loader.js'),\n );\n\n if (pkScript) {\n const path = String(pkScript.getAttribute('src'));\n setBasePath(path.split('/').slice(0, -1).join('/'));\n }\n }\n }\n\n return basePath.replace(/\\/$/, '') + (subpath ? `/${subpath.replace(/^\\//, '')}` : '');\n}\n","import { COMPONENT_MODULE_PATHS } from '../component-registry.js';\nimport { getBasePath } from './base-path.js';\n\nconst PK_PREFIX = 'pk-';\nconst DISCOVERY_EVENT = 'pk-discovery-complete';\n\nconst observer = new MutationObserver((mutations) => {\n for (const { addedNodes } of mutations) {\n for (const node of addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n void discover(node as Element);\n }\n }\n }\n});\n\nexport function startLoader(): void {\n void discover(document.documentElement);\n observer.observe(document.documentElement, { subtree: true, childList: true });\n}\n\nexport function stopLoader(): void {\n observer.disconnect();\n}\n\nexport async function discover(root: Document | Element = document): Promise<void> {\n const rootTagName = root instanceof Element ? root.tagName.toLowerCase() : '';\n const rootIsPluginKitComponent = rootTagName.startsWith(PK_PREFIX);\n const tags = [...root.querySelectorAll(':not(:defined)')]\n .map((el) => el.tagName.toLowerCase())\n .filter((tag) => tag.startsWith(PK_PREFIX));\n\n if (rootIsPluginKitComponent && !customElements.get(rootTagName)) {\n tags.push(rootTagName);\n }\n\n const preloadSelectors = root.querySelectorAll('[data-pk-preload]');\n const preloadRoots =\n root instanceof Element && root.hasAttribute('data-pk-preload')\n ? [root, ...preloadSelectors]\n : preloadSelectors;\n\n for (const el of preloadRoots) {\n tags.push(\n ...el\n .getAttribute('data-pk-preload')!\n .split(/\\s+/)\n .filter((tag) => tag.startsWith(PK_PREFIX)),\n );\n }\n\n const tagsToRegister = [...new Set(tags)];\n const imports = await Promise.allSettled(tagsToRegister.map((tagName) => register(tagName)));\n\n for (const imp of imports) {\n if (imp.status === 'rejected') {\n console.warn(imp.reason);\n }\n }\n\n await new Promise(requestAnimationFrame);\n\n root.dispatchEvent(\n new CustomEvent(DISCOVERY_EVENT, {\n bubbles: false,\n cancelable: false,\n composed: true,\n }),\n );\n}\n\nfunction register(tagName: string): Promise<void> {\n if (customElements.get(tagName)) {\n return Promise.resolve();\n }\n\n const modulePath = COMPONENT_MODULE_PATHS[tagName];\n\n if (!modulePath) {\n return Promise.reject(new Error(`Unable to autoload <${tagName}> — no module path registered`));\n }\n\n const path = getBasePath(modulePath);\n\n return import(/* @vite-ignore */ path).then(() => undefined);\n}\n\nlet turboTimeout = 2000;\n\n/** Prevent FOUCE when navigating with Turbo (Hotwire). */\nexport function preventTurboFouce(timeout = 2000): void {\n turboTimeout = timeout;\n document.addEventListener('turbo:before-render', handleTurboRender);\n}\n\nasync function handleTurboRender(event: Event): Promise<void> {\n const turboEvent = event as CustomEvent<{ newBody: Element; resume: () => void }>;\n const newBody = turboEvent.detail.newBody;\n\n turboEvent.preventDefault();\n\n try {\n await Promise.race([\n discover(newBody),\n new Promise<void>((resolve) => setTimeout(resolve, turboTimeout)),\n ]);\n } finally {\n turboEvent.detail.resume();\n }\n}\n\nexport const FOUCE_TIMEOUT_MS = 2000;\nexport const DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;\n"],"mappings":"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"}
|
|
@@ -127,4 +127,4 @@ var BUNDLER_TAG_IMPORT_PATHS = Object.fromEntries(Object.keys(BUNDLER_COMPONENT_
|
|
|
127
127
|
//#endregion
|
|
128
128
|
export { COMPONENT_MODULE_PATHS as n, BUNDLER_TAG_IMPORT_PATHS as t };
|
|
129
129
|
|
|
130
|
-
//# sourceMappingURL=component-registry-
|
|
130
|
+
//# sourceMappingURL=component-registry-BOlxFlou.js.map
|
package/dist/chunks/{component-registry-CpZiIDh4.js.map → component-registry-BOlxFlou.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry-CpZiIDh4.js","names":[],"sources":["../../src/component-registry.ts"],"sourcesContent":["/**\n * Canonical tag → loader module path mapping for the autoloader.\n * Module paths are relative to the directory that contains plugin-kit.loader.js.\n */\nexport const COMPONENT_MODULE_PATHS: Record<string, string> = {\n 'pk-spinner': 'components/spinner/spinner.js',\n 'pk-icon': 'components/icon/icon.js',\n 'pk-button': 'components/button/button.js',\n 'pk-checkbox': 'components/checkbox/checkbox.js',\n 'pk-checkbox-select': 'components/checkbox-select/checkbox-select.js',\n 'pk-color-input': 'components/color-input/color-input.js',\n 'pk-code-editor': 'components/code-editor/code-editor.js',\n 'pk-input': 'components/input/input.js',\n 'pk-input-group': 'components/input-group/input-group.js',\n 'pk-input-group-addon': 'components/input-group/input-group-addon.js',\n 'pk-input-group-button': 'components/input-group/input-group-button.js',\n 'pk-input-group-input': 'components/input-group/input-group-input.js',\n 'pk-input-group-text': 'components/input-group/input-group-text.js',\n 'pk-input-group-textarea': 'components/input-group/input-group-textarea.js',\n 'pk-textarea': 'components/textarea/textarea.js',\n 'pk-tiptap-editor': 'components/tiptap/tiptap-editor.js',\n 'pk-tiptap-input': 'components/tiptap/tiptap-input.js',\n 'pk-tiptap-content': 'components/tiptap/tiptap-content.js',\n 'pk-field': 'components/field/field.js',\n 'pk-separator': 'components/separator/separator.js',\n 'pk-status': 'components/status/status.js',\n 'pk-toggle': 'components/toggle/toggle.js',\n 'pk-toggle-group': 'components/toggle-group/toggle-group.js',\n 'pk-lightswitch': 'components/lightswitch/lightswitch.js',\n 'pk-button-group': 'components/button-group/button-group.js',\n 'pk-button-group-separator': 'components/button-group/button-group-separator.js',\n 'pk-button-group-text': 'components/button-group/button-group-text.js',\n 'pk-dialog': 'components/dialog/dialog.js',\n 'pk-popup': 'components/popup/popup.js',\n 'pk-dropdown-label': 'components/dropdown-menu/dropdown-label.js',\n 'pk-dropdown-item': 'components/dropdown-menu/dropdown-item.js',\n 'pk-dropdown-separator': 'components/dropdown-menu/dropdown-separator.js',\n 'pk-dropdown-menu': 'components/dropdown-menu/dropdown-menu.js',\n 'pk-popover': 'components/popover/popover.js',\n 'pk-tooltip': 'components/tooltip/tooltip.js',\n 'pk-radio': 'components/radio-group/radio.js',\n 'pk-radio-group': 'components/radio-group/radio-group.js',\n 'pk-tab': 'components/tabs/tab.js',\n 'pk-tab-heading': 'components/tabs/tab-heading.js',\n 'pk-tab-panel': 'components/tabs/tab-panel.js',\n 'pk-tabs': 'components/tabs/tabs.js',\n 'pk-scroll-area': 'components/scroll-area/scroll-area.js',\n 'pk-option': 'components/select/option.js',\n 'pk-option-group': 'components/select/option-group.js',\n 'pk-select': 'components/select/select.js',\n 'pk-calendar': 'components/calendar/calendar.js',\n 'pk-date-picker': 'components/date-picker/date-picker.js',\n 'pk-combobox': 'components/combobox/combobox.js',\n 'pk-time-picker': 'components/time-picker/time-picker.js',\n 'pk-copy-button': 'components/copy-button/copy-button.js',\n 'pk-editable-table': 'components/editable-table/editable-table.js',\n};\n\n/**\n * Canonical list of every `pk-*` custom element tag.\n * Single source of truth for FOUCE CSS generation and any tag enumeration.\n */\nexport const PK_COMPONENT_TAGS: readonly string[] = Object.keys(COMPONENT_MODULE_PATHS);\n\n/** Vite loader-build entries: output key → source module. */\nexport const LOADER_COMPONENT_ENTRIES: Record<string, string> = {\n 'components/spinner/spinner': 'src/components/spinner/pk-spinner.ts',\n // Loader ships the full icon set; bundler family `components/icon.js` stays opt-in.\n 'components/icon/icon': 'src/components/icon/pk-icon-loader.ts',\n 'components/button/button': 'src/components/button/pk-button.ts',\n 'components/checkbox/checkbox': 'src/components/checkbox/pk-checkbox.ts',\n 'components/checkbox-select/checkbox-select': 'src/components/checkbox-select/pk-checkbox-select.ts',\n 'components/color-input/color-input': 'src/components/color-input/pk-color-input.ts',\n 'components/code-editor/code-editor': 'src/components/code-editor/pk-code-editor.ts',\n 'components/input/input': 'src/components/input/pk-input.ts',\n 'components/input-group/input-group': 'src/components/input-group/pk-input-group.ts',\n 'components/input-group/input-group-addon': 'src/components/input-group/pk-input-group-addon.ts',\n 'components/input-group/input-group-button': 'src/components/input-group/pk-input-group-button.ts',\n 'components/input-group/input-group-input': 'src/components/input-group/pk-input-group-input.ts',\n 'components/input-group/input-group-text': 'src/components/input-group/pk-input-group-text.ts',\n 'components/input-group/input-group-textarea': 'src/components/input-group/pk-input-group-textarea.ts',\n 'components/textarea/textarea': 'src/components/textarea/pk-textarea.ts',\n 'components/tiptap/tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'components/tiptap/tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'components/tiptap/tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'components/field/field': 'src/components/field/pk-field.ts',\n 'components/separator/separator': 'src/components/separator/pk-separator.ts',\n 'components/status/status': 'src/components/status/pk-status.ts',\n 'components/toggle/toggle': 'src/components/toggle/pk-toggle.ts',\n 'components/toggle-group/toggle-group': 'src/components/toggle-group/pk-toggle-group.ts',\n 'components/lightswitch/lightswitch': 'src/components/lightswitch/pk-lightswitch.ts',\n 'components/button-group/button-group': 'src/components/button-group/pk-button-group.ts',\n 'components/button-group/button-group-separator': 'src/components/button-group/pk-button-group-separator.ts',\n 'components/button-group/button-group-text': 'src/components/button-group/pk-button-group-text.ts',\n 'components/dialog/dialog': 'src/components/dialog/pk-dialog.ts',\n 'components/popup/popup': 'src/components/popup/pk-popup.ts',\n 'components/dropdown-menu/dropdown-label': 'src/components/dropdown-menu/pk-dropdown-label.ts',\n 'components/dropdown-menu/dropdown-item': 'src/components/dropdown-menu/pk-dropdown-item.ts',\n 'components/dropdown-menu/dropdown-separator': 'src/components/dropdown-menu/pk-dropdown-separator.ts',\n 'components/dropdown-menu/dropdown-menu': 'src/components/dropdown-menu/pk-dropdown-menu.ts',\n 'components/popover/popover': 'src/components/popover/pk-popover.ts',\n 'components/tooltip/tooltip': 'src/components/tooltip/pk-tooltip.ts',\n 'components/radio-group/radio': 'src/components/radio-group/pk-radio.ts',\n 'components/radio-group/radio-group': 'src/components/radio-group/pk-radio-group.ts',\n 'components/tabs/tab': 'src/components/tabs/pk-tab.ts',\n 'components/tabs/tab-heading': 'src/components/tabs/pk-tab-heading.ts',\n 'components/tabs/tab-panel': 'src/components/tabs/pk-tab-panel.ts',\n 'components/tabs/tabs': 'src/components/tabs/pk-tabs.ts',\n 'components/scroll-area/scroll-area': 'src/components/scroll-area/pk-scroll-area.ts',\n 'components/select/option': 'src/components/select/pk-option.ts',\n 'components/select/option-group': 'src/components/select/pk-option-group.ts',\n 'components/select/select': 'src/components/select/pk-select.ts',\n 'components/calendar/calendar': 'src/components/calendar/pk-calendar.ts',\n 'components/date-picker/date-picker': 'src/components/date-picker/pk-date-picker.ts',\n 'components/combobox/combobox': 'src/components/combobox/pk-combobox.ts',\n 'components/time-picker/time-picker': 'src/components/time-picker/pk-time-picker.ts',\n 'components/copy-button/copy-button': 'src/components/copy-button/pk-copy-button.ts',\n 'components/editable-table/editable-table': 'src/components/editable-table/pk-editable-table.ts',\n};\n\n/** Loader-only shims → real element modules for the bundler dist graph. */\nconst BUNDLER_SRC_OVERRIDES: Record<string, string> = {\n 'src/components/icon/pk-icon-loader.ts': 'src/components/icon/pk-icon.ts',\n};\n\n/**\n * Vite `dist/` build entries for bundler cherry-picking.\n * Output paths mirror source layout, e.g. `dist/components/button/pk-button.js`.\n */\nexport const BUNDLER_COMPONENT_ENTRIES: Record<string, string> = Object.fromEntries(\n Object.values(LOADER_COMPONENT_ENTRIES).map((srcRel) => {\n const bundlerSrc = BUNDLER_SRC_OVERRIDES[srcRel] ?? srcRel;\n const key = bundlerSrc.replace(/^src\\//, '').replace(/\\.ts$/, '');\n return [key, bundlerSrc];\n }),\n);\n\n/** Tag → bundler dist subpath (relative to package root, no `./` prefix). */\nexport const BUNDLER_TAG_IMPORT_PATHS: Record<string, string> = Object.fromEntries(\n Object.keys(BUNDLER_COMPONENT_ENTRIES).map((key) => {\n const tag = key.split('/').pop()!;\n return [tag, `${key}.js`];\n }),\n);\n\nexport type PkComponentTag = keyof typeof BUNDLER_TAG_IMPORT_PATHS;\n\n/**\n * Short consumer entries published as `@verbb/plugin-kit-web/components/{key}.js`.\n * Each module side-effect-registers its family (compound folders register every tag).\n *\n * TipTap stays split — importing one surface must not pull the other two.\n */\nexport const COMPONENT_FAMILY_ENTRIES: Record<string, string> = {\n 'button': 'src/components/button/index.ts',\n 'button-group': 'src/components/button-group/index.ts',\n 'calendar': 'src/components/calendar/index.ts',\n 'checkbox': 'src/components/checkbox/index.ts',\n 'checkbox-select': 'src/components/checkbox-select/index.ts',\n 'code-editor': 'src/components/code-editor/index.ts',\n 'color-input': 'src/components/color-input/index.ts',\n 'combobox': 'src/components/combobox/index.ts',\n 'copy-button': 'src/components/copy-button/index.ts',\n 'date-picker': 'src/components/date-picker/index.ts',\n 'dialog': 'src/components/dialog/index.ts',\n 'dropdown-menu': 'src/components/dropdown-menu/index.ts',\n 'editable-table': 'src/components/editable-table/index.ts',\n 'field': 'src/components/field/index.ts',\n 'icon': 'src/components/icon/index.ts',\n 'input': 'src/components/input/index.ts',\n 'input-group': 'src/components/input-group/index.ts',\n 'lightswitch': 'src/components/lightswitch/index.ts',\n 'popover': 'src/components/popover/index.ts',\n 'popup': 'src/components/popup/index.ts',\n 'radio-group': 'src/components/radio-group/index.ts',\n 'scroll-area': 'src/components/scroll-area/index.ts',\n 'select': 'src/components/select/index.ts',\n 'separator': 'src/components/separator/index.ts',\n 'spinner': 'src/components/spinner/index.ts',\n 'status': 'src/components/status/index.ts',\n 'tabs': 'src/components/tabs/index.ts',\n 'textarea': 'src/components/textarea/index.ts',\n 'time-picker': 'src/components/time-picker/index.ts',\n 'tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'toggle': 'src/components/toggle/index.ts',\n 'toggle-group': 'src/components/toggle-group/index.ts',\n 'tooltip': 'src/components/tooltip/index.ts',\n};\n"],"mappings":";;;;;AAIA,IAAa,yBAAiD;CAC1D,cAAc;CACd,WAAW;CACX,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,wBAAwB;CACxB,yBAAyB;CACzB,wBAAwB;CACxB,uBAAuB;CACvB,2BAA2B;CAC3B,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB,qBAAqB;CACrB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,kBAAkB;CAClB,mBAAmB;CACnB,6BAA6B;CAC7B,wBAAwB;CACxB,aAAa;CACb,YAAY;CACZ,qBAAqB;CACrB,oBAAoB;CACpB,yBAAyB;CACzB,oBAAoB;CACpB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,kBAAkB;CAClB,UAAU;CACV,kBAAkB;CAClB,gBAAgB;CAChB,WAAW;CACX,kBAAkB;CAClB,aAAa;CACb,mBAAmB;CACnB,aAAa;CACb,eAAe;CACf,kBAAkB;CAClB,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,qBAAqB;CACxB;;AASD,IAAa,2BAAmD;CAC5D,8BAA8B;CAE9B,wBAAwB;CACxB,4BAA4B;CAC5B,gCAAgC;CAChC,8CAA8C;CAC9C,sCAAsC;CACtC,sCAAsC;CACtC,0BAA0B;CAC1B,sCAAsC;CACtC,4CAA4C;CAC5C,6CAA6C;CAC7C,4CAA4C;CAC5C,2CAA2C;CAC3C,+CAA+C;CAC/C,gCAAgC;CAChC,mCAAmC;CACnC,kCAAkC;CAClC,oCAAoC;CACpC,0BAA0B;CAC1B,kCAAkC;CAClC,4BAA4B;CAC5B,4BAA4B;CAC5B,wCAAwC;CACxC,sCAAsC;CACtC,wCAAwC;CACxC,kDAAkD;CAClD,6CAA6C;CAC7C,4BAA4B;CAC5B,0BAA0B;CAC1B,2CAA2C;CAC3C,0CAA0C;CAC1C,+CAA+C;CAC/C,0CAA0C;CAC1C,8BAA8B;CAC9B,8BAA8B;CAC9B,gCAAgC;CAChC,sCAAsC;CACtC,uBAAuB;CACvB,+BAA+B;CAC/B,6BAA6B;CAC7B,wBAAwB;CACxB,sCAAsC;CACtC,4BAA4B;CAC5B,kCAAkC;CAClC,4BAA4B;CAC5B,gCAAgC;CAChC,sCAAsC;CACtC,gCAAgC;CAChC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC/C;;AAGD,IAAM,wBAAgD,EAClD,yCAAyC,kCAC5C;;;;;AAMD,IAAa,4BAAoD,OAAO,YACpE,OAAO,OAAO,yBAAyB,CAAC,KAAK,WAAW;CACpD,MAAM,aAAa,sBAAsB,WAAW;AAEpD,QAAO,CADK,WAAW,QAAQ,UAAU,GAAG,CAAC,QAAQ,SAAS,GACtD,EAAK,WAAW;EAC1B,CACL;;AAGD,IAAa,2BAAmD,OAAO,YACnE,OAAO,KAAK,0BAA0B,CAAC,KAAK,QAAQ;AAEhD,QAAO,CADK,IAAI,MAAM,IAAI,CAAC,KACnB,EAAK,GAAG,IAAI,KAAK;EAC3B,CACL"}
|
|
1
|
+
{"version":3,"file":"component-registry-BOlxFlou.js","names":[],"sources":["../../src/component-registry.ts"],"sourcesContent":["/**\n * Canonical tag → loader module path mapping for the autoloader.\n * Module paths are relative to the directory that contains plugin-kit.loader.js.\n */\nexport const COMPONENT_MODULE_PATHS: Record<string, string> = {\n 'pk-spinner': 'components/spinner/spinner.js',\n 'pk-icon': 'components/icon/icon.js',\n 'pk-button': 'components/button/button.js',\n 'pk-checkbox': 'components/checkbox/checkbox.js',\n 'pk-checkbox-select': 'components/checkbox-select/checkbox-select.js',\n 'pk-color-input': 'components/color-input/color-input.js',\n 'pk-code-editor': 'components/code-editor/code-editor.js',\n 'pk-input': 'components/input/input.js',\n 'pk-input-group': 'components/input-group/input-group.js',\n 'pk-input-group-addon': 'components/input-group/input-group-addon.js',\n 'pk-input-group-button': 'components/input-group/input-group-button.js',\n 'pk-input-group-input': 'components/input-group/input-group-input.js',\n 'pk-input-group-text': 'components/input-group/input-group-text.js',\n 'pk-input-group-textarea': 'components/input-group/input-group-textarea.js',\n 'pk-textarea': 'components/textarea/textarea.js',\n 'pk-tiptap-editor': 'components/tiptap/tiptap-editor.js',\n 'pk-tiptap-input': 'components/tiptap/tiptap-input.js',\n 'pk-tiptap-content': 'components/tiptap/tiptap-content.js',\n 'pk-field': 'components/field/field.js',\n 'pk-separator': 'components/separator/separator.js',\n 'pk-status': 'components/status/status.js',\n 'pk-toggle': 'components/toggle/toggle.js',\n 'pk-toggle-group': 'components/toggle-group/toggle-group.js',\n 'pk-lightswitch': 'components/lightswitch/lightswitch.js',\n 'pk-button-group': 'components/button-group/button-group.js',\n 'pk-button-group-separator': 'components/button-group/button-group-separator.js',\n 'pk-button-group-text': 'components/button-group/button-group-text.js',\n 'pk-dialog': 'components/dialog/dialog.js',\n 'pk-popup': 'components/popup/popup.js',\n 'pk-dropdown-label': 'components/dropdown-menu/dropdown-label.js',\n 'pk-dropdown-item': 'components/dropdown-menu/dropdown-item.js',\n 'pk-dropdown-separator': 'components/dropdown-menu/dropdown-separator.js',\n 'pk-dropdown-menu': 'components/dropdown-menu/dropdown-menu.js',\n 'pk-popover': 'components/popover/popover.js',\n 'pk-tooltip': 'components/tooltip/tooltip.js',\n 'pk-radio': 'components/radio-group/radio.js',\n 'pk-radio-group': 'components/radio-group/radio-group.js',\n 'pk-tab': 'components/tabs/tab.js',\n 'pk-tab-heading': 'components/tabs/tab-heading.js',\n 'pk-tab-panel': 'components/tabs/tab-panel.js',\n 'pk-tabs': 'components/tabs/tabs.js',\n 'pk-scroll-area': 'components/scroll-area/scroll-area.js',\n 'pk-option': 'components/select/option.js',\n 'pk-option-group': 'components/select/option-group.js',\n 'pk-select': 'components/select/select.js',\n 'pk-calendar': 'components/calendar/calendar.js',\n 'pk-date-picker': 'components/date-picker/date-picker.js',\n 'pk-combobox': 'components/combobox/combobox.js',\n 'pk-time-picker': 'components/time-picker/time-picker.js',\n 'pk-copy-button': 'components/copy-button/copy-button.js',\n 'pk-editable-table': 'components/editable-table/editable-table.js',\n};\n\n/**\n * Canonical list of every `pk-*` custom element tag.\n * Single source of truth for FOUCE CSS generation and any tag enumeration.\n */\nexport const PK_COMPONENT_TAGS: readonly string[] = Object.keys(COMPONENT_MODULE_PATHS);\n\n/** Vite loader-build entries: output key → source module. */\nexport const LOADER_COMPONENT_ENTRIES: Record<string, string> = {\n 'components/spinner/spinner': 'src/components/spinner/pk-spinner.ts',\n // Loader ships the full icon set; bundler family `components/icon.js` stays opt-in.\n 'components/icon/icon': 'src/components/icon/pk-icon-loader.ts',\n 'components/button/button': 'src/components/button/pk-button.ts',\n 'components/checkbox/checkbox': 'src/components/checkbox/pk-checkbox.ts',\n 'components/checkbox-select/checkbox-select': 'src/components/checkbox-select/pk-checkbox-select.ts',\n 'components/color-input/color-input': 'src/components/color-input/pk-color-input.ts',\n 'components/code-editor/code-editor': 'src/components/code-editor/pk-code-editor.ts',\n 'components/input/input': 'src/components/input/pk-input.ts',\n 'components/input-group/input-group': 'src/components/input-group/pk-input-group.ts',\n 'components/input-group/input-group-addon': 'src/components/input-group/pk-input-group-addon.ts',\n 'components/input-group/input-group-button': 'src/components/input-group/pk-input-group-button.ts',\n 'components/input-group/input-group-input': 'src/components/input-group/pk-input-group-input.ts',\n 'components/input-group/input-group-text': 'src/components/input-group/pk-input-group-text.ts',\n 'components/input-group/input-group-textarea': 'src/components/input-group/pk-input-group-textarea.ts',\n 'components/textarea/textarea': 'src/components/textarea/pk-textarea.ts',\n 'components/tiptap/tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'components/tiptap/tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'components/tiptap/tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'components/field/field': 'src/components/field/pk-field.ts',\n 'components/separator/separator': 'src/components/separator/pk-separator.ts',\n 'components/status/status': 'src/components/status/pk-status.ts',\n 'components/toggle/toggle': 'src/components/toggle/pk-toggle.ts',\n 'components/toggle-group/toggle-group': 'src/components/toggle-group/pk-toggle-group.ts',\n 'components/lightswitch/lightswitch': 'src/components/lightswitch/pk-lightswitch.ts',\n 'components/button-group/button-group': 'src/components/button-group/pk-button-group.ts',\n 'components/button-group/button-group-separator': 'src/components/button-group/pk-button-group-separator.ts',\n 'components/button-group/button-group-text': 'src/components/button-group/pk-button-group-text.ts',\n 'components/dialog/dialog': 'src/components/dialog/pk-dialog.ts',\n 'components/popup/popup': 'src/components/popup/pk-popup.ts',\n 'components/dropdown-menu/dropdown-label': 'src/components/dropdown-menu/pk-dropdown-label.ts',\n 'components/dropdown-menu/dropdown-item': 'src/components/dropdown-menu/pk-dropdown-item.ts',\n 'components/dropdown-menu/dropdown-separator': 'src/components/dropdown-menu/pk-dropdown-separator.ts',\n 'components/dropdown-menu/dropdown-menu': 'src/components/dropdown-menu/pk-dropdown-menu.ts',\n 'components/popover/popover': 'src/components/popover/pk-popover.ts',\n 'components/tooltip/tooltip': 'src/components/tooltip/pk-tooltip.ts',\n 'components/radio-group/radio': 'src/components/radio-group/pk-radio.ts',\n 'components/radio-group/radio-group': 'src/components/radio-group/pk-radio-group.ts',\n 'components/tabs/tab': 'src/components/tabs/pk-tab.ts',\n 'components/tabs/tab-heading': 'src/components/tabs/pk-tab-heading.ts',\n 'components/tabs/tab-panel': 'src/components/tabs/pk-tab-panel.ts',\n 'components/tabs/tabs': 'src/components/tabs/pk-tabs.ts',\n 'components/scroll-area/scroll-area': 'src/components/scroll-area/pk-scroll-area.ts',\n 'components/select/option': 'src/components/select/pk-option.ts',\n 'components/select/option-group': 'src/components/select/pk-option-group.ts',\n 'components/select/select': 'src/components/select/pk-select.ts',\n 'components/calendar/calendar': 'src/components/calendar/pk-calendar.ts',\n 'components/date-picker/date-picker': 'src/components/date-picker/pk-date-picker.ts',\n 'components/combobox/combobox': 'src/components/combobox/pk-combobox.ts',\n 'components/time-picker/time-picker': 'src/components/time-picker/pk-time-picker.ts',\n 'components/copy-button/copy-button': 'src/components/copy-button/pk-copy-button.ts',\n 'components/editable-table/editable-table': 'src/components/editable-table/pk-editable-table.ts',\n};\n\n/** Loader-only shims → real element modules for the bundler dist graph. */\nconst BUNDLER_SRC_OVERRIDES: Record<string, string> = {\n 'src/components/icon/pk-icon-loader.ts': 'src/components/icon/pk-icon.ts',\n};\n\n/**\n * Vite `dist/` build entries for bundler cherry-picking.\n * Output paths mirror source layout, e.g. `dist/components/button/pk-button.js`.\n */\nexport const BUNDLER_COMPONENT_ENTRIES: Record<string, string> = Object.fromEntries(\n Object.values(LOADER_COMPONENT_ENTRIES).map((srcRel) => {\n const bundlerSrc = BUNDLER_SRC_OVERRIDES[srcRel] ?? srcRel;\n const key = bundlerSrc.replace(/^src\\//, '').replace(/\\.ts$/, '');\n return [key, bundlerSrc];\n }),\n);\n\n/** Tag → bundler dist subpath (relative to package root, no `./` prefix). */\nexport const BUNDLER_TAG_IMPORT_PATHS: Record<string, string> = Object.fromEntries(\n Object.keys(BUNDLER_COMPONENT_ENTRIES).map((key) => {\n const tag = key.split('/').pop()!;\n return [tag, `${key}.js`];\n }),\n);\n\nexport type PkComponentTag = keyof typeof BUNDLER_TAG_IMPORT_PATHS;\n\n/**\n * Short consumer entries published as `@verbb/plugin-kit-web/components/{key}.js`.\n * Each module side-effect-registers its family (compound folders register every tag).\n *\n * TipTap stays split — importing one surface must not pull the other two.\n */\nexport const COMPONENT_FAMILY_ENTRIES: Record<string, string> = {\n 'button': 'src/components/button/index.ts',\n 'button-group': 'src/components/button-group/index.ts',\n 'calendar': 'src/components/calendar/index.ts',\n 'checkbox': 'src/components/checkbox/index.ts',\n 'checkbox-select': 'src/components/checkbox-select/index.ts',\n 'code-editor': 'src/components/code-editor/index.ts',\n 'color-input': 'src/components/color-input/index.ts',\n 'combobox': 'src/components/combobox/index.ts',\n 'copy-button': 'src/components/copy-button/index.ts',\n 'date-picker': 'src/components/date-picker/index.ts',\n 'dialog': 'src/components/dialog/index.ts',\n 'dropdown-menu': 'src/components/dropdown-menu/index.ts',\n 'editable-table': 'src/components/editable-table/index.ts',\n 'field': 'src/components/field/index.ts',\n 'icon': 'src/components/icon/index.ts',\n 'input': 'src/components/input/index.ts',\n 'input-group': 'src/components/input-group/index.ts',\n 'lightswitch': 'src/components/lightswitch/index.ts',\n 'popover': 'src/components/popover/index.ts',\n 'popup': 'src/components/popup/index.ts',\n 'radio-group': 'src/components/radio-group/index.ts',\n 'scroll-area': 'src/components/scroll-area/index.ts',\n 'select': 'src/components/select/index.ts',\n 'separator': 'src/components/separator/index.ts',\n 'spinner': 'src/components/spinner/index.ts',\n 'status': 'src/components/status/index.ts',\n 'tabs': 'src/components/tabs/index.ts',\n 'textarea': 'src/components/textarea/index.ts',\n 'time-picker': 'src/components/time-picker/index.ts',\n 'tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'toggle': 'src/components/toggle/index.ts',\n 'toggle-group': 'src/components/toggle-group/index.ts',\n 'tooltip': 'src/components/tooltip/index.ts',\n};\n"],"mappings":";;;;;AAIA,IAAa,yBAAiD;CAC1D,cAAc;CACd,WAAW;CACX,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,wBAAwB;CACxB,yBAAyB;CACzB,wBAAwB;CACxB,uBAAuB;CACvB,2BAA2B;CAC3B,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB,qBAAqB;CACrB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,kBAAkB;CAClB,mBAAmB;CACnB,6BAA6B;CAC7B,wBAAwB;CACxB,aAAa;CACb,YAAY;CACZ,qBAAqB;CACrB,oBAAoB;CACpB,yBAAyB;CACzB,oBAAoB;CACpB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,kBAAkB;CAClB,UAAU;CACV,kBAAkB;CAClB,gBAAgB;CAChB,WAAW;CACX,kBAAkB;CAClB,aAAa;CACb,mBAAmB;CACnB,aAAa;CACb,eAAe;CACf,kBAAkB;CAClB,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,qBAAqB;CACxB;;AASD,IAAa,2BAAmD;CAC5D,8BAA8B;CAE9B,wBAAwB;CACxB,4BAA4B;CAC5B,gCAAgC;CAChC,8CAA8C;CAC9C,sCAAsC;CACtC,sCAAsC;CACtC,0BAA0B;CAC1B,sCAAsC;CACtC,4CAA4C;CAC5C,6CAA6C;CAC7C,4CAA4C;CAC5C,2CAA2C;CAC3C,+CAA+C;CAC/C,gCAAgC;CAChC,mCAAmC;CACnC,kCAAkC;CAClC,oCAAoC;CACpC,0BAA0B;CAC1B,kCAAkC;CAClC,4BAA4B;CAC5B,4BAA4B;CAC5B,wCAAwC;CACxC,sCAAsC;CACtC,wCAAwC;CACxC,kDAAkD;CAClD,6CAA6C;CAC7C,4BAA4B;CAC5B,0BAA0B;CAC1B,2CAA2C;CAC3C,0CAA0C;CAC1C,+CAA+C;CAC/C,0CAA0C;CAC1C,8BAA8B;CAC9B,8BAA8B;CAC9B,gCAAgC;CAChC,sCAAsC;CACtC,uBAAuB;CACvB,+BAA+B;CAC/B,6BAA6B;CAC7B,wBAAwB;CACxB,sCAAsC;CACtC,4BAA4B;CAC5B,kCAAkC;CAClC,4BAA4B;CAC5B,gCAAgC;CAChC,sCAAsC;CACtC,gCAAgC;CAChC,sCAAsC;CACtC,sCAAsC;CACtC,4CAA4C;CAC/C;;AAGD,IAAM,wBAAgD,EAClD,yCAAyC,kCAC5C;;;;;AAMD,IAAa,4BAAoD,OAAO,YACpE,OAAO,OAAO,yBAAyB,CAAC,KAAK,WAAW;CACpD,MAAM,aAAa,sBAAsB,WAAW;AAEpD,QAAO,CADK,WAAW,QAAQ,UAAU,GAAG,CAAC,QAAQ,SAAS,GACtD,EAAK,WAAW;EAC1B,CACL;;AAGD,IAAa,2BAAmD,OAAO,YACnE,OAAO,KAAK,0BAA0B,CAAC,KAAK,QAAQ;AAEhD,QAAO,CADK,IAAI,MAAM,IAAI,CAAC,KACnB,EAAK,GAAG,IAAI,KAAK;EAC3B,CACL"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { n as PkElement, r as hostDisplayInlineBlock, t as __decorate } from "./decorate-W02hmVTt.js";
|
|
2
2
|
import { n as resolveSpinnerVariant, t as getButtonSpinnerSize } from "./spinner-utils-CDfHypTv.js";
|
|
3
|
+
import "./pk-spinner-Blxd3SIH.js";
|
|
3
4
|
import { t as iconStyles } from "./icon.styles-BLTWLqYp.js";
|
|
4
5
|
import { i as buttonGroupIndentStyles, n as buttonGroupCornerRadiusStyles, r as buttonGroupCornerRoleStyles, t as buttonGroupBorderJoinStyles } from "./button-group-item.styles-DYmBR28a.js";
|
|
5
6
|
import { css, html, nothing } from "lit";
|
|
@@ -19,8 +20,6 @@ var pkButtonStyles = [
|
|
|
19
20
|
@layer pk-component {
|
|
20
21
|
:host {
|
|
21
22
|
font-family: var(--pk-font-family);
|
|
22
|
-
font-size: var(--pk-font-size-base);
|
|
23
|
-
line-height: var(--pk-line-height);
|
|
24
23
|
cursor: pointer;
|
|
25
24
|
--pk-btn-height: var(--pk-btn-height-default);
|
|
26
25
|
--pk-btn-font: var(--pk-btn-font-default);
|
|
@@ -29,6 +28,12 @@ var pkButtonStyles = [
|
|
|
29
28
|
--pk-btn-icon-gap: var(--pk-btn-icon-gap-default);
|
|
30
29
|
--pk-btn-caret-size: var(--pk-btn-caret-size-default);
|
|
31
30
|
--pk-btn-radius: var(--pk-btn-radius-default);
|
|
31
|
+
/*
|
|
32
|
+
* Slotted labels inherit from the host — pin the size-token font
|
|
33
|
+
* (and button line-height) so Craft CP / Tailwind hosts match.
|
|
34
|
+
*/
|
|
35
|
+
font-size: var(--pk-btn-font);
|
|
36
|
+
line-height: 1.2;
|
|
32
37
|
}
|
|
33
38
|
|
|
34
39
|
:host([disabled]) {
|
|
@@ -837,4 +842,4 @@ PkButton = __decorate([customElement("pk-button")], PkButton);
|
|
|
837
842
|
//#endregion
|
|
838
843
|
export { PkButton as t };
|
|
839
844
|
|
|
840
|
-
//# sourceMappingURL=pk-button-
|
|
845
|
+
//# sourceMappingURL=pk-button-QpDDlRbG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-button-QpDDlRbG.js","names":[],"sources":["../../src/components/button/pk-button.styles.ts","../../src/components/button/pk-button.ts"],"sourcesContent":["import { css } from 'lit';\n\nimport { hostDisplayInlineBlock } from '../../base/styles.js';\nimport { iconStyles } from '../../base/icon.styles.js';\nimport {\n buttonGroupBorderJoinStyles,\n buttonGroupCornerRadiusStyles,\n buttonGroupCornerRoleStyles,\n buttonGroupIndentStyles,\n} from '../button-group/button-group-item.styles.js';\n\nexport const pkButtonStyles = [\n hostDisplayInlineBlock,\n iconStyles,\n buttonGroupCornerRoleStyles(),\n buttonGroupCornerRadiusStyles('.button'),\n buttonGroupIndentStyles(),\n buttonGroupBorderJoinStyles('.button'),\n css`\n @layer pk-component {\n :host {\n font-family: var(--pk-font-family);\n cursor: pointer;\n --pk-btn-height: var(--pk-btn-height-default);\n --pk-btn-font: var(--pk-btn-font-default);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-default);\n --pk-btn-icon-size: var(--pk-btn-icon-size-default);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-default);\n --pk-btn-caret-size: var(--pk-btn-caret-size-default);\n --pk-btn-radius: var(--pk-btn-radius-default);\n /*\n * Slotted labels inherit from the host — pin the size-token font\n * (and button line-height) so Craft CP / Tailwind hosts match.\n */\n font-size: var(--pk-btn-font);\n line-height: 1.2;\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n pointer-events: none;\n }\n\n :host([loading]):not([disabled]) {\n pointer-events: none;\n }\n\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--pk-btn-icon-gap);\n box-sizing: border-box;\n width: auto;\n margin: 0;\n /* Every button carries a 1px border (transparent for fill/plain variants) so the box\n * model is identical across variants and states. Prevents width shift when swapping a\n * button between filled and outline/dashed, or toggling states. Matches Bootstrap\n * (transparent baseline) and (border always present, only color changes).\n */\n border: 1px solid transparent;\n border-radius: var(--pk-btn-radius);\n font: inherit;\n font-size: var(--pk-btn-font);\n font-weight: 400;\n line-height: 1.2;\n text-decoration: none;\n white-space: nowrap;\n /* Inherit host cursor so className/style (e.g. cursor-move) pierce shadow. */\n cursor: inherit;\n user-select: none;\n vertical-align: middle;\n appearance: none;\n background: var(--pk-btn-fill, var(--pk-action-fill));\n color: var(--pk-btn-on, var(--pk-action-on));\n height: var(--pk-btn-height);\n min-height: var(--pk-btn-height);\n /* Block padding defaults to 0 (height tokens center content). Override for nav rows. */\n padding-block: var(--pk-btn-padding-block, 0);\n padding-inline: var(--pk-btn-padding-inline);\n transition: background-color 0.12s ease, box-shadow 0.12s ease, color 0.12s ease;\n }\n\n .button:disabled {\n opacity: 0.5;\n }\n\n .icon-slot {\n display: none;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n }\n\n .icon-slot--has-content {\n display: inline-flex;\n }\n\n /* Fixed token sizes for all icons (labeled or icon-only) — matches plugin-kit-react Button. */\n .icon-slot slot::slotted(svg),\n slot[name='start']::slotted(svg),\n slot[name='end']::slotted(svg) {\n display: block;\n width: var(--pk-btn-icon-size);\n height: var(--pk-btn-icon-size);\n flex-shrink: 0;\n pointer-events: none;\n }\n\n .icon-slot slot::slotted(img),\n slot[name='start']::slotted(img),\n slot[name='end']::slotted(img) {\n display: block;\n width: var(--pk-btn-icon-size);\n height: var(--pk-btn-icon-size);\n object-fit: contain;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n /* pk-icon sizes itself from font-size (1em), so scale it to the\n * icon token. This keeps the idiomatic slotted pk-icon usage in\n * sync with raw slotted svg. Set width/height explicitly — %/size-full\n * collapses when the icon-slot has no definite box.\n */\n .icon-slot slot::slotted(pk-icon),\n slot[name='start']::slotted(pk-icon),\n slot[name='end']::slotted(pk-icon) {\n font-size: var(--pk-btn-icon-size);\n width: var(--pk-btn-icon-size);\n height: var(--pk-btn-icon-size);\n /* Kill pk-icon's text-baseline nudge (-0.125em) — flex slots center optically. */\n vertical-align: 0;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n .label {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n line-height: 1.2;\n }\n\n /* Trailing slot (status): grow + clip the label so end sits at the far edge\n * and long titles truncate instead of colliding with the indicator.\n */\n .button:has(.icon-slot--end.icon-slot--has-content) .label:not(.is-empty) {\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .label.is-empty {\n display: none;\n }\n\n /* Icon-only (no label): square hit box = size height. Button owns the target;\n * glyph size comes from --pk-btn-icon-size. Do not Tailwind-size the Icon.\n * Opt out with icon (compact), size=none, or group-trigger (narrow disclosure cap).\n */\n :host(:not([icon]):not([size='none']):not([group-trigger])) .button:not(.has-label) {\n width: var(--pk-btn-height);\n min-width: var(--pk-btn-height);\n padding-inline: 0;\n }\n\n /* Compact density (icon attr): padless box that hugs the glyph.\n * size still drives --pk-btn-icon-size; height/width tiers do not apply.\n * Use for dense x / ellipsis in cells — not for table action rows (prefer square above).\n * line-height: 0 collapses whitespace flex-struts so the glyph sits dead-center.\n */\n :host([icon]) {\n display: inline-flex;\n line-height: 0;\n vertical-align: middle;\n }\n\n :host([icon]) .button {\n display: flex;\n width: auto;\n min-width: 0;\n height: auto;\n min-height: 0;\n padding-inline: 0.25rem;\n padding-block: 0;\n line-height: 0;\n align-items: center;\n justify-content: center;\n }\n\n /* Keep label space while loading even before slotchange runs. */\n .button.loading .label.is-empty {\n display: inline-flex;\n visibility: hidden;\n }\n\n /* Sizes — token-driven scale (see tokens.css) */\n :host([size='xxs']) {\n --pk-btn-height: var(--pk-btn-height-xxs);\n --pk-btn-font: var(--pk-btn-font-xxs);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-xxs);\n --pk-btn-icon-size: var(--pk-btn-icon-size-xxs);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-xxs);\n --pk-btn-caret-size: var(--pk-btn-caret-size-xxs);\n --pk-btn-radius: var(--pk-btn-radius-xxs);\n }\n\n :host([size='xs']) {\n --pk-btn-height: var(--pk-btn-height-xs);\n --pk-btn-font: var(--pk-btn-font-xs);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-xs);\n --pk-btn-icon-size: var(--pk-btn-icon-size-xs);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-xs);\n --pk-btn-caret-size: var(--pk-btn-caret-size-xs);\n --pk-btn-radius: var(--pk-btn-radius-xs);\n }\n\n :host([size='sm']) {\n --pk-btn-height: var(--pk-btn-height-sm);\n --pk-btn-font: var(--pk-btn-font-sm);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-sm);\n --pk-btn-icon-size: var(--pk-btn-icon-size-sm);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-sm);\n --pk-btn-caret-size: var(--pk-btn-caret-size-sm);\n --pk-btn-radius: var(--pk-btn-radius-sm);\n }\n\n :host([size='default']) {\n --pk-btn-height: var(--pk-btn-height-default);\n --pk-btn-font: var(--pk-btn-font-default);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-default);\n --pk-btn-icon-size: var(--pk-btn-icon-size-default);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-default);\n --pk-btn-caret-size: var(--pk-btn-caret-size-default);\n --pk-btn-radius: var(--pk-btn-radius-default);\n }\n\n :host([size='lg']) {\n --pk-btn-height: var(--pk-btn-height-lg);\n --pk-btn-font: var(--pk-btn-font-lg);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-lg);\n --pk-btn-icon-size: var(--pk-btn-icon-size-lg);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-lg);\n --pk-btn-caret-size: var(--pk-btn-caret-size-lg);\n --pk-btn-radius: var(--pk-btn-radius-lg);\n }\n\n :host([size='xl']) {\n --pk-btn-height: var(--pk-btn-height-xl);\n --pk-btn-font: var(--pk-btn-font-xl);\n --pk-btn-padding-inline: var(--pk-btn-padding-inline-xl);\n --pk-btn-icon-size: var(--pk-btn-icon-size-xl);\n --pk-btn-icon-gap: var(--pk-btn-icon-gap-xl);\n --pk-btn-caret-size: var(--pk-btn-caret-size-xl);\n --pk-btn-radius: var(--pk-btn-radius-xl);\n }\n\n /* No preset scale — size to content or set --pk-btn-* on the host for one-off dimensions\n * (height, padding, font, icon, radius) without fighting a named size tier.\n * Pair with icon for a padless glyph host, or set --pk-btn-padding-inline / --pk-btn-height yourself.\n */\n :host([size='none']) {\n --pk-btn-height: auto;\n --pk-btn-font: inherit;\n --pk-btn-padding-inline: 0px;\n --pk-btn-padding-block: 0px;\n --pk-btn-icon-size: 1em;\n --pk-btn-icon-gap: 0px;\n --pk-btn-caret-size: 1em;\n --pk-btn-radius: 0px;\n }\n\n :host([size='none']) .button {\n height: auto;\n min-height: auto;\n width: 100%;\n }\n\n /* Variants */\n :host([variant='default']) {\n --pk-btn-fill: var(--pk-action-fill);\n --pk-btn-fill-hover: var(--pk-action-fill-hover);\n --pk-btn-fill-active: var(--pk-action-fill-active);\n --pk-btn-on: var(--pk-action-on);\n }\n\n :host([variant='primary']) {\n --pk-btn-fill: var(--pk-action-primary-fill);\n --pk-btn-fill-hover: var(--pk-action-primary-fill-hover);\n --pk-btn-fill-active: var(--pk-action-primary-fill-active);\n --pk-btn-on: var(--pk-action-primary-on);\n }\n\n :host([variant='primary']) .button,\n :host([variant='secondary']) .button {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n }\n\n :host([variant='secondary']) {\n --pk-btn-fill: var(--pk-color-gray-500);\n --pk-btn-fill-hover: var(--pk-color-gray-550);\n --pk-btn-fill-active: var(--pk-color-gray-600);\n --pk-btn-on: var(--pk-color-white);\n }\n\n :host([variant='outline']) .button {\n background: transparent;\n border-color: var(--pk-color-slate-400);\n color: var(--pk-color-gray-700);\n }\n\n :host([variant='transparent']) .button {\n background: transparent;\n color: var(--pk-color-gray-700);\n }\n\n /* link/none opt out of the shared transparent 1px border: they never render a border, so\n * carrying one only pads the box by 2px inline (and 2px block at size='none', where height\n * is auto). These are the \"inline text\" / \"no chrome\" variants — content-sized is the point,\n * and neither participates in button-group border joins. Other variants keep the stable box.\n */\n /*\n * Craft CP sets --link-color on :root (inherits into shadow). Prefer that,\n * then kit --pk-color-link — not sky-700 (reads as a different “CP blue”).\n * Color on :host so consumer utilities (e.g. text-[var(--link-color)]) can override.\n * Height must be content-sized — default --pk-btn-height (34px) bloated table rows.\n */\n :host([variant='link']) {\n color: var(--link-color, var(--pk-color-link));\n --pk-btn-height: auto;\n --pk-btn-padding-inline: 0;\n --pk-btn-padding-block: 0;\n }\n\n :host([variant='link']) .button {\n background: transparent;\n border-width: 0;\n border-radius: 0;\n color: inherit;\n width: auto;\n height: auto;\n min-height: 0;\n padding: 0;\n text-underline-offset: 2px;\n }\n\n :host([variant='dashed']) .button {\n background: transparent;\n border-style: dashed;\n border-color: var(--pk-color-slate-500);\n color: var(--pk-color-gray-700);\n }\n\n :host([variant='none']) .button {\n border-width: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n }\n\n /* Interaction — pseudo-classes only; playground matrices use dev/pk-button-demo-states.css */\n .button:hover:not(:disabled) {\n background: var(--pk-btn-fill-hover, var(--pk-btn-fill));\n }\n\n :host([variant='outline']) .button:hover:not(:disabled),\n :host([variant='transparent']) .button:hover:not(:disabled),\n :host([variant='dashed']) .button:hover:not(:disabled) {\n background: var(--pk-color-slate-150);\n }\n\n :host([variant='link']) .button:hover:not(:disabled) {\n background: transparent;\n text-decoration: underline;\n }\n\n :host([variant='none']) .button:hover:not(:disabled) {\n background: transparent;\n }\n\n .button:active:not(:disabled) {\n background: var(--pk-btn-fill-active, var(--pk-btn-fill-hover, var(--pk-btn-fill)));\n }\n\n :host([variant='outline']) .button:active:not(:disabled),\n :host([variant='transparent']) .button:active:not(:disabled),\n :host([variant='dashed']) .button:active:not(:disabled) {\n background: var(--pk-color-slate-200);\n }\n\n :host([variant='link']) .button:active:not(:disabled),\n :host([variant='none']) .button:active:not(:disabled) {\n background: transparent;\n }\n\n .button:focus {\n outline: none;\n }\n\n .button:focus-visible {\n box-shadow: var(--pk-shadow-focus);\n }\n\n /* Bordered variants: fold the button's own border into the focus ring by recoloring it to\n * the accent (and solidifying dashed) so focus reads as one cohesive ring instead of a\n * doubled border. The ring is thinned to 1px here because the recolored 1px border already\n * supplies the other half — total 2px, matching the filled variants' ring weight.\n */\n :host([variant='outline']) .button:focus-visible,\n :host([variant='dashed']) .button:focus-visible {\n border-color: var(--pk-color-sky-600);\n box-shadow: 0 0 0 1px var(--pk-color-sky-600), 0 0 5px 1px hsl(from var(--pk-color-sky-600) h s l / 0.7);\n }\n\n :host([variant='dashed']) .button:focus-visible {\n border-style: solid;\n }\n\n :host(.pk-dialog__close) .button:focus-visible {\n box-shadow: 0 0 0 2px var(--pk-color-gray-600);\n }\n\n :host-context(pk-button-group) {\n position: relative;\n }\n\n :host-context(pk-button-group[orientation='vertical']) {\n display: block;\n width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n }\n\n :host-context(pk-button-group[orientation='vertical']) .button {\n width: 100%;\n box-sizing: border-box;\n }\n\n :host-context(pk-button-group:focus-visible) {\n z-index: 2;\n }\n\n /* Bordered variants — matching border divider (filled uses margin gap via buttonGroupIndentStyles) */\n\n :host([variant='primary']) .button:focus-visible,\n :host([variant='secondary']) .button:focus-visible {\n box-shadow: var(--pk-shadow-focus-inset);\n }\n\n :host-context(pk-button-group[exclusive]):host([aria-pressed='true']) .button {\n background: var(--pk-color-gray-500);\n color: var(--pk-color-white);\n }\n\n :host-context(pk-button-group[exclusive]):host([aria-pressed='true']) .button:hover:not(:disabled) {\n background: var(--pk-color-gray-550);\n }\n\n :host-context(pk-button-group[exclusive]):host([aria-pressed='true']) .button:active:not(:disabled) {\n background: var(--pk-color-gray-600);\n }\n\n :host-context(pk-button-group[exclusive]):host([aria-pressed='true']) .button:focus-visible {\n box-shadow: var(--pk-shadow-focus);\n }\n\n :host([variant='link']) .button:focus-visible {\n box-shadow: none;\n text-decoration: underline;\n }\n\n .button.loading {\n position: relative;\n cursor: default;\n pointer-events: none;\n }\n\n .label.loading {\n visibility: hidden;\n }\n\n .button.loading .icon-slot,\n .button.loading slot[name='start']::slotted(*),\n .button.loading slot[name='end']::slotted(*) {\n visibility: hidden;\n }\n\n .button.caret .icon-slot--end.icon-slot--has-content {\n display: none;\n }\n\n /* Scope to the caret span — the button host also gets class caret when\n with-caret is set; an unscoped .caret rule was adding 2px margin\n to the whole button and shifting dropdown anchors left. */\n .button > .caret {\n display: inline-flex;\n align-self: center;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n /* Sits slightly further from the label than the flex gap alone. */\n margin-inline-start: 2px;\n }\n\n /* Caret has its own per-size token (--pk-btn-caret-size), kept deliberately smaller than\n * --pk-btn-icon-size so it reads as a subordinate dropdown affordance next to real icons.\n */\n .button > .caret svg {\n display: block;\n width: var(--pk-btn-caret-size);\n height: var(--pk-btn-caret-size);\n }\n\n :host([group-trigger]) .button {\n padding-inline: 6px;\n }\n\n /* Compact disclosure cap — hide content, keep only the shared SVG caret (centered). */\n :host([group-trigger]) .label,\n :host([group-trigger]) .icon-slot {\n display: none;\n }\n\n :host([group-trigger]) .button > .caret {\n margin-inline-start: 0;\n }\n\n :host([size='sm'][group-trigger]) .button,\n :host([size='xs'][group-trigger]) .button,\n :host([size='xxs'][group-trigger]) .button {\n padding-inline: 6px;\n }\n\n :host([size='lg'][group-trigger]) .button {\n padding-inline: 10px;\n }\n\n :host([size='xl'][group-trigger]) .button {\n padding-inline: 12px;\n }\n\n :host-context(pk-button-group[orientation='horizontal']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='outline']) .button,\n :host-context(pk-button-group[orientation='horizontal']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='dashed']) .button,\n :host-context(pk-button-group[orientation='horizontal']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='transparent']) .button {\n border-left-width: 0;\n }\n\n :host-context(pk-button-group[orientation='vertical']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='outline']) .button,\n :host-context(pk-button-group[orientation='vertical']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='dashed']) .button,\n :host-context(pk-button-group[orientation='vertical']):host([data-pk-group-join]:not([data-pk-group-divider])[variant='transparent']) .button {\n border-top-width: 0;\n }\n\n :host([data-pk-group-orientation='horizontal'][data-pk-group-join]:not([data-pk-group-divider])[variant='outline']) .button,\n :host([data-pk-group-orientation='horizontal'][data-pk-group-join]:not([data-pk-group-divider])[variant='dashed']) .button,\n :host([data-pk-group-orientation='horizontal'][data-pk-group-join]:not([data-pk-group-divider])[variant='transparent']) .button {\n border-left-width: 0;\n }\n\n :host([data-pk-group-orientation='vertical'][data-pk-group-join]:not([data-pk-group-divider])[variant='outline']) .button,\n :host([data-pk-group-orientation='vertical'][data-pk-group-join]:not([data-pk-group-divider])[variant='dashed']) .button,\n :host([data-pk-group-orientation='vertical'][data-pk-group-join]:not([data-pk-group-divider])[variant='transparent']) .button {\n border-top-width: 0;\n }\n\n :host([data-pk-group-orientation='horizontal'][data-pk-group-divider][variant='outline']) .button {\n box-shadow: none;\n border-left-width: 1px;\n border-left-style: solid;\n border-left-color: var(--pk-btn-group-divider-color-outline, var(--pk-color-slate-400));\n }\n\n :host([data-pk-group-orientation='vertical'][data-pk-group-divider][variant='outline']) .button {\n box-shadow: none;\n border-top-width: 1px;\n border-top-style: solid;\n border-top-color: var(--pk-btn-group-divider-color-outline, var(--pk-color-slate-400));\n }\n\n :host([data-pk-group-orientation='horizontal'][data-pk-group-divider][variant='dashed']) .button {\n box-shadow: none;\n border-left-width: 1px;\n border-left-style: dashed;\n border-left-color: var(--pk-btn-group-divider-color-dashed, var(--pk-color-slate-500));\n }\n\n :host([data-pk-group-orientation='vertical'][data-pk-group-divider][variant='dashed']) .button {\n box-shadow: none;\n border-top-width: 1px;\n border-top-style: dashed;\n border-top-color: var(--pk-btn-group-divider-color-dashed, var(--pk-color-slate-500));\n }\n\n :host([data-pk-group-orientation='horizontal'][data-pk-group-divider][variant='outline']) .button:focus-visible,\n :host([data-pk-group-orientation='horizontal'][data-pk-group-divider][variant='dashed']) .button:focus-visible {\n box-shadow: var(--pk-shadow-focus);\n }\n\n :host([data-pk-group-orientation='vertical'][data-pk-group-divider][variant='outline']) .button:focus-visible,\n :host([data-pk-group-orientation='vertical'][data-pk-group-divider][variant='dashed']) .button:focus-visible {\n box-shadow: var(--pk-shadow-focus);\n }\n\n :host([data-pk-group-orientation='horizontal'][data-pk-group-internal-trail][variant='outline']) .button,\n :host([data-pk-group-orientation='horizontal'][data-pk-group-internal-trail][variant='dashed']) .button {\n border-right-width: 0;\n }\n\n :host([data-pk-group-orientation='vertical'][data-pk-group-internal-trail][variant='outline']) .button,\n :host([data-pk-group-orientation='vertical'][data-pk-group-internal-trail][variant='dashed']) .button {\n border-bottom-width: 0;\n }\n }\n `,\n];\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { chevronDown, iconToSvg } from '@verbb/plugin-kit-icons';\n\nimport { PkElement } from '../../base/pk-element.js';\nimport { getButtonSpinnerSize, resolveSpinnerVariant } from '../spinner/spinner-utils.js';\nimport type { PkSpinnerSize, PkSpinnerTone, PkSpinnerVariant } from '../spinner/pk-spinner.js';\n\nexport type { PkSpinnerSize };\nimport '../spinner/pk-spinner.js';\nimport { pkButtonStyles } from './pk-button.styles.js';\n\nexport type PkButtonVariant =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'transparent'\n | 'link'\n | 'dashed'\n | 'none';\n\nexport type PkButtonSize = 'default' | 'xxs' | 'xs' | 'sm' | 'lg' | 'xl' | 'none';\n\nconst CARET_ICON = iconToSvg(chevronDown);\n\n/**\n * Craft-aligned action button.\n *\n * @slot - Button label\n * @slot start - Leading icon or prefix\n * @slot end - Trailing icon or suffix\n *\n * @csspart base - The native button element\n */\n@customElement('pk-button')\nexport class PkButton extends PkElement {\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n static override styles = pkButtonStyles;\n\n @property({ reflect: true })\n variant: PkButtonVariant = 'default';\n\n @property({ reflect: true })\n size: PkButtonSize = 'default';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n loading = false;\n\n /**\n * Override loading spinner size. When unset, derived from `size` via\n * `getButtonSpinnerSize` — same defaults as v1 Button (xxs/xs → xxs, lg/xl → sm, else xs).\n * Formie New Form passes `xs` on `size=\"lg\"` so the ring stays size-4 (1rem), not sm (1.5rem).\n */\n @property({ reflect: true, attribute: 'spinner-size' })\n spinnerSize?: PkSpinnerSize;\n\n @property({ reflect: true, attribute: 'spinner-variant' })\n spinnerVariant?: PkSpinnerVariant;\n\n @property({ reflect: true, attribute: 'spinner-tone' })\n spinnerTone?: PkSpinnerTone;\n\n @property({ type: Boolean, reflect: true, attribute: 'with-caret' })\n withCaret = false;\n\n /**\n * Compact chevron-only trigger for grouped split actions — Craft `.menubtn`.\n *\n * Not a variant or size: set this boolean on the disclosure end-cap in a split group.\n * Hides label/icons and draws a CSS `::after` chevron (0.4375rem, 2px borders).\n * Inherits `variant`/`size` from sibling buttons; inline padding narrows to 8px.\n * Do not pass a chevron icon — use `icon` + a start-slot icon for a padless square control.\n */\n @property({ type: Boolean, reflect: true, attribute: 'group-trigger' })\n groupTrigger = false;\n\n /**\n * Compact icon density: padless box that hugs the glyph (no square hit target).\n *\n * Prefer default icon-only usage for action rows — without this flag, icon-only\n * buttons are square (`width`/`height` = size height) with the glyph from\n * `--pk-btn-icon-size`. Use `icon` for dense × / ⋯ in cells.\n * For one-off dimensions use `size=\"none\"` and set `--pk-btn-*` on the host.\n */\n @property({ type: Boolean, reflect: true })\n icon = false;\n\n @property()\n href?: string;\n\n @property()\n target?: string;\n\n @property()\n rel?: string;\n\n @property()\n name?: string;\n\n @property()\n value?: string;\n\n @property()\n title = '';\n\n @property()\n type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * HTML form owner id — same as native `<button form=\"…\">`.\n * Needed when the submit control lives outside the `<form>` (e.g. dialog footer).\n */\n @property({ reflect: true })\n form?: string;\n\n @state()\n private hasDefaultSlotContent = false;\n\n @state()\n private hasStartSlotContent = false;\n\n @state()\n private hasEndSlotContent = false;\n\n private defaultSlotChanged(event: Event): void {\n const slot = event.target as HTMLSlotElement;\n this.hasDefaultSlotContent = slot.assignedNodes({ flatten: true }).some((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent?.trim();\n }\n\n return node.nodeType === Node.ELEMENT_NODE;\n });\n }\n\n private iconSlotChanged(event: Event, which: 'start' | 'end'): void {\n const slot = event.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes({ flatten: true }).some((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent?.trim();\n }\n\n return node.nodeType === Node.ELEMENT_NODE;\n });\n\n if (which === 'start') {\n this.hasStartSlotContent = hasContent;\n } else {\n this.hasEndSlotContent = hasContent;\n }\n }\n\n private startSlotChanged = (event: Event): void => {\n this.iconSlotChanged(event, 'start');\n };\n\n private endSlotChanged = (event: Event): void => {\n this.iconSlotChanged(event, 'end');\n };\n\n private buttonClasses() {\n return classMap({\n button: true,\n 'has-label': this.hasDefaultSlotContent,\n loading: this.loading,\n caret: this.withCaret,\n 'group-trigger': this.groupTrigger,\n });\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('data-slot', 'button');\n this.addEventListener('click', this.handleHostClick);\n }\n\n override disconnectedCallback(): void {\n this.removeEventListener('click', this.handleHostClick);\n super.disconnectedCallback();\n }\n\n /**\n * Resolve the light-DOM form for submit/reset.\n * Prefer `form` id (dialog footer submitters), then ancestor `<form>`.\n * Never target Craft’s `#main` shell.\n */\n private resolveAssociatedForm(): HTMLFormElement | null {\n const byId = (this.form || this.getAttribute('form') || '').trim();\n\n if (byId) {\n const el = this.ownerDocument?.getElementById(byId);\n\n if (el instanceof HTMLFormElement && el.id !== 'main') {\n return el;\n }\n }\n\n const closest = this.closest('form');\n\n if (closest && closest.id !== 'main') {\n return closest;\n }\n\n return null;\n }\n\n /**\n * Shadow inner `<button type=\"submit|reset\">` is not a form owner for an\n * ancestor light-DOM `<form>` — bridge click → `requestSubmit` / `reset`.\n * Skip Craft’s `#main` shell form (same guard as implicit Enter submit).\n */\n private handleHostClick = (event: MouseEvent): void => {\n if (this.disabled || this.loading || this.href) {\n return;\n }\n\n if (this.type !== 'submit' && this.type !== 'reset') {\n return;\n }\n\n const form = this.resolveAssociatedForm();\n\n if (!form) {\n return;\n }\n\n // Stop the inner shadow button’s non-associated default; we own submit/reset.\n event.preventDefault();\n event.stopPropagation();\n\n if (this.type === 'reset') {\n form.reset();\n return;\n }\n\n if (typeof form.requestSubmit === 'function') {\n form.requestSubmit();\n return;\n }\n\n form.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n };\n\n override render() {\n // Explicit spinner-size wins (v1 Button `spinnerSize`); else map from button size.\n const spinnerSize = this.spinnerSize || getButtonSpinnerSize(this.size);\n const spinnerVariant = resolveSpinnerVariant(this.variant, this.spinnerVariant);\n const isLink = Boolean(this.href);\n\n return html`\n ${isLink\n ? html`\n <a\n part=\"base\"\n class=${this.buttonClasses()}\n href=${this.href!}\n target=${this.target ?? nothing}\n rel=${this.rel ?? nothing}\n title=${this.title || nothing}\n >\n ${this.renderInner(spinnerSize, spinnerVariant)}\n </a>\n `\n : html`\n <button\n part=\"base\"\n class=${this.buttonClasses()}\n type=${this.type}\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-busy=${this.loading ? 'true' : nothing}\n name=${this.name ?? nothing}\n value=${this.value ?? nothing}\n title=${this.title || nothing}\n >\n ${this.renderInner(spinnerSize, spinnerVariant)}\n </button>\n `}\n `;\n }\n\n private renderInner(spinnerSize: PkSpinnerSize, spinnerVariant: PkSpinnerVariant) {\n return html`\n <span\n class=${classMap({\n 'icon-slot': true,\n 'icon-slot--start': true,\n 'icon-slot--has-content': this.hasStartSlotContent,\n })}\n >\n <slot name=\"start\" @slotchange=${this.startSlotChanged}></slot>\n </span>\n ${this.loading\n ? html`\n <pk-spinner\n variant=${spinnerVariant}\n size=${spinnerSize}\n tone=${this.spinnerTone ?? nothing}\n centered\n ></pk-spinner>\n `\n : nothing}\n <span\n class=${classMap({\n label: true,\n 'is-empty': !this.hasDefaultSlotContent,\n loading: this.loading,\n })}\n >\n <slot @slotchange=${this.defaultSlotChanged}></slot>\n </span>\n <span\n class=${classMap({\n 'icon-slot': true,\n 'icon-slot--end': true,\n 'icon-slot--has-content': this.hasEndSlotContent,\n })}\n >\n <slot name=\"end\" @slotchange=${this.endSlotChanged}></slot>\n </span>\n ${this.withCaret || this.groupTrigger\n ? html`<span part=\"caret\" class=\"caret\">${unsafeSVG(CARET_ICON)}</span>`\n : nothing}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-button': PkButton;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { n as PkElement, t as __decorate } from "./decorate-W02hmVTt.js";
|
|
2
|
+
import "./pk-checkbox-Bavq3-9C.js";
|
|
2
3
|
import { css, html } from "lit";
|
|
3
4
|
import { classMap } from "lit/directives/class-map.js";
|
|
4
5
|
import { customElement, property, state } from "lit/decorators.js";
|
|
@@ -218,4 +219,4 @@ PkCheckboxSelect = __decorate([customElement("pk-checkbox-select")], PkCheckboxS
|
|
|
218
219
|
//#endregion
|
|
219
220
|
export { PkCheckboxSelect as n, ALL_VALUE as t };
|
|
220
221
|
|
|
221
|
-
//# sourceMappingURL=pk-checkbox-select-
|
|
222
|
+
//# sourceMappingURL=pk-checkbox-select-9lqd9Rwz.js.map
|
package/dist/chunks/{pk-checkbox-select-ZEJ6WIQn.js.map → pk-checkbox-select-9lqd9Rwz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pk-checkbox-select-ZEJ6WIQn.js","names":[],"sources":["../../src/components/checkbox-select/pk-checkbox-select.styles.ts","../../src/components/checkbox-select/pk-checkbox-select.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCheckboxSelectStyles = css`\n @layer pk-component {\n :host {\n display: block;\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-sm);\n line-height: var(--pk-line-height);\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .options {\n display: flex;\n flex-direction: column;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n .options--horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n ::slotted(pk-checkbox),\n pk-checkbox {\n display: block;\n }\n\n .options--horizontal pk-checkbox.all-option {\n width: 100%;\n }\n }\n`;\n","import { html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { ComplexAttributeConverter, PropertyValues } from 'lit';\n\nimport { PkElement } from '../../base/pk-element.js';\n// Side-effect import — option rows are created as `pk-checkbox` in the shadow tree.\nimport '../checkbox/pk-checkbox.js';\nimport type { PkCheckbox } from '../checkbox/pk-checkbox.js';\nimport { pkCheckboxSelectStyles } from './pk-checkbox-select.styles.js';\n\nexport const ALL_VALUE = '*' as const;\n\nexport type PkCheckboxSelectOption = {\n label: string;\n value: string;\n};\n\nexport type PkCheckboxSelectValue = typeof ALL_VALUE | string[];\n\nexport type PkCheckboxSelectOrientation = 'horizontal' | 'vertical';\n\n/** JSON array for Craft/Twig + docs HTML; property assignment still preferred in JS. */\nconst optionsConverter: ComplexAttributeConverter<PkCheckboxSelectOption[]> = {\n fromAttribute(value) {\n if (!value) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed)\n ? parsed\n .filter((item): item is PkCheckboxSelectOption => Boolean(item && typeof item === 'object' && 'value' in item))\n .map((item) => ({\n label: String((item as PkCheckboxSelectOption).label ?? (item as PkCheckboxSelectOption).value),\n value: String((item as PkCheckboxSelectOption).value),\n }))\n : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return JSON.stringify(value ?? []);\n },\n};\n\n/** `*` for all-selected, otherwise a JSON string array. */\nconst valueConverter: ComplexAttributeConverter<PkCheckboxSelectValue> = {\n fromAttribute(value) {\n if (value == null || value === '') {\n return [];\n }\n\n if (value === '*') {\n return ALL_VALUE;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n if (parsed === '*') {\n return ALL_VALUE;\n }\n\n return Array.isArray(parsed) ? parsed.map(String) : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return value === ALL_VALUE ? '*' : JSON.stringify(value ?? []);\n },\n};\n\n/**\n * Multi-select checkbox group — options via the `options` property/attribute (not slotted\n * checkboxes). Wrap in `pk-field` for label/instructions (mirrors React `CheckboxSelect` + `FieldLayout`).\n *\n * @fires pk-change - `{ value: string[] | '*' }`\n *\n * @csspart base - Checkbox options container\n */\n@customElement('pk-checkbox-select')\nexport class PkCheckboxSelect extends PkElement {\n static override styles = pkCheckboxSelectStyles;\n\n @property({ attribute: 'options', converter: optionsConverter })\n options: PkCheckboxSelectOption[] = [];\n\n /** Selected values, or `*` when the All option is active. */\n @property({ attribute: 'value', converter: valueConverter })\n value: PkCheckboxSelectValue = [];\n @property({ type: Boolean, attribute: 'show-all-option' })\n showAllOption = false;\n\n @property({ attribute: 'all-label' })\n allLabel = 'All';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n orientation: PkCheckboxSelectOrientation = 'vertical';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @state()\n private optionElements: PkCheckbox[] = [];\n\n private allOptionElement: PkCheckbox | null = null;\n\n override connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n\n super.connectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('options') || changed.has('showAllOption')) {\n this.rebuildOptionElements();\n return;\n }\n\n if (changed.has('value') || changed.has('disabled')) {\n this.updateOptionStates();\n }\n }\n\n override firstUpdated(): void {\n this.rebuildOptionElements();\n }\n\n override focus(options?: FocusOptions): void {\n const first = this.optionElements.find((element) => !element.disabled);\n\n first?.focus(options);\n }\n\n private get isAllSelected(): boolean {\n return this.value === ALL_VALUE;\n }\n\n private get selectedValues(): string[] {\n if (this.isAllSelected) {\n return this.options.map((option) => option.value);\n }\n\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private dispatchValueChange(): void {\n const detailValue = this.isAllSelected ? ALL_VALUE : [...this.selectedValues];\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: detailValue },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleAllChange = (event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n this.value = event.detail.checked ? ALL_VALUE : [];\n this.dispatchValueChange();\n };\n\n private handleItemChange = (optionValue: string, event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n\n if (this.isAllSelected) {\n return;\n }\n\n const checked = event.detail.checked;\n const current = this.selectedValues;\n this.value = checked\n ? [...current, optionValue]\n : current.filter((value) => value !== optionValue);\n\n this.dispatchValueChange();\n };\n\n private rebuildOptionElements(): void {\n const container = this.shadowRoot?.querySelector('.options');\n\n if (!container) {\n return;\n }\n\n for (const element of this.optionElements) {\n element.remove();\n }\n\n this.optionElements = [];\n this.allOptionElement = null;\n\n if (this.showAllOption) {\n const allCheckbox = document.createElement('pk-checkbox') as PkCheckbox;\n allCheckbox.classList.add('all-option');\n allCheckbox.append(this.allLabel);\n allCheckbox.addEventListener('pk-change', this.handleAllChange as EventListener);\n\n container.append(allCheckbox);\n this.allOptionElement = allCheckbox;\n this.optionElements.push(allCheckbox);\n }\n\n for (const option of this.options) {\n const checkbox = document.createElement('pk-checkbox') as PkCheckbox;\n checkbox.checkboxValue = option.value;\n checkbox.append(option.label);\n checkbox.addEventListener('pk-change', (event) => {\n this.handleItemChange(option.value, event as CustomEvent<{ checked: boolean }>);\n });\n\n container.append(checkbox);\n this.optionElements.push(checkbox);\n }\n\n this.updateOptionStates();\n }\n\n private updateOptionStates(): void {\n if (this.allOptionElement) {\n this.allOptionElement.checked = this.isAllSelected;\n this.allOptionElement.disabled = this.disabled;\n }\n\n for (const option of this.options) {\n const checkbox = this.optionElements.find(\n (element) => element !== this.allOptionElement && element.checkboxValue === option.value,\n );\n\n if (!checkbox) {\n continue;\n }\n\n checkbox.checked = this.isAllSelected || this.selectedValues.includes(option.value);\n checkbox.disabled = this.disabled || this.isAllSelected;\n }\n }\n\n override render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n options: true,\n 'options--horizontal': this.orientation === 'horizontal',\n })}\n ></div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-checkbox-select': PkCheckboxSelect;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pk-checkbox-select-9lqd9Rwz.js","names":[],"sources":["../../src/components/checkbox-select/pk-checkbox-select.styles.ts","../../src/components/checkbox-select/pk-checkbox-select.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCheckboxSelectStyles = css`\n @layer pk-component {\n :host {\n display: block;\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-sm);\n line-height: var(--pk-line-height);\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .options {\n display: flex;\n flex-direction: column;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n .options--horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n ::slotted(pk-checkbox),\n pk-checkbox {\n display: block;\n }\n\n .options--horizontal pk-checkbox.all-option {\n width: 100%;\n }\n }\n`;\n","import { html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { ComplexAttributeConverter, PropertyValues } from 'lit';\n\nimport { PkElement } from '../../base/pk-element.js';\n// Side-effect import — option rows are created as `pk-checkbox` in the shadow tree.\nimport '../checkbox/pk-checkbox.js';\nimport type { PkCheckbox } from '../checkbox/pk-checkbox.js';\nimport { pkCheckboxSelectStyles } from './pk-checkbox-select.styles.js';\n\nexport const ALL_VALUE = '*' as const;\n\nexport type PkCheckboxSelectOption = {\n label: string;\n value: string;\n};\n\nexport type PkCheckboxSelectValue = typeof ALL_VALUE | string[];\n\nexport type PkCheckboxSelectOrientation = 'horizontal' | 'vertical';\n\n/** JSON array for Craft/Twig + docs HTML; property assignment still preferred in JS. */\nconst optionsConverter: ComplexAttributeConverter<PkCheckboxSelectOption[]> = {\n fromAttribute(value) {\n if (!value) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed)\n ? parsed\n .filter((item): item is PkCheckboxSelectOption => Boolean(item && typeof item === 'object' && 'value' in item))\n .map((item) => ({\n label: String((item as PkCheckboxSelectOption).label ?? (item as PkCheckboxSelectOption).value),\n value: String((item as PkCheckboxSelectOption).value),\n }))\n : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return JSON.stringify(value ?? []);\n },\n};\n\n/** `*` for all-selected, otherwise a JSON string array. */\nconst valueConverter: ComplexAttributeConverter<PkCheckboxSelectValue> = {\n fromAttribute(value) {\n if (value == null || value === '') {\n return [];\n }\n\n if (value === '*') {\n return ALL_VALUE;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n if (parsed === '*') {\n return ALL_VALUE;\n }\n\n return Array.isArray(parsed) ? parsed.map(String) : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return value === ALL_VALUE ? '*' : JSON.stringify(value ?? []);\n },\n};\n\n/**\n * Multi-select checkbox group — options via the `options` property/attribute (not slotted\n * checkboxes). Wrap in `pk-field` for label/instructions (mirrors React `CheckboxSelect` + `FieldLayout`).\n *\n * @fires pk-change - `{ value: string[] | '*' }`\n *\n * @csspart base - Checkbox options container\n */\n@customElement('pk-checkbox-select')\nexport class PkCheckboxSelect extends PkElement {\n static override styles = pkCheckboxSelectStyles;\n\n @property({ attribute: 'options', converter: optionsConverter })\n options: PkCheckboxSelectOption[] = [];\n\n /** Selected values, or `*` when the All option is active. */\n @property({ attribute: 'value', converter: valueConverter })\n value: PkCheckboxSelectValue = [];\n @property({ type: Boolean, attribute: 'show-all-option' })\n showAllOption = false;\n\n @property({ attribute: 'all-label' })\n allLabel = 'All';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n orientation: PkCheckboxSelectOrientation = 'vertical';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @state()\n private optionElements: PkCheckbox[] = [];\n\n private allOptionElement: PkCheckbox | null = null;\n\n override connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n\n super.connectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('options') || changed.has('showAllOption')) {\n this.rebuildOptionElements();\n return;\n }\n\n if (changed.has('value') || changed.has('disabled')) {\n this.updateOptionStates();\n }\n }\n\n override firstUpdated(): void {\n this.rebuildOptionElements();\n }\n\n override focus(options?: FocusOptions): void {\n const first = this.optionElements.find((element) => !element.disabled);\n\n first?.focus(options);\n }\n\n private get isAllSelected(): boolean {\n return this.value === ALL_VALUE;\n }\n\n private get selectedValues(): string[] {\n if (this.isAllSelected) {\n return this.options.map((option) => option.value);\n }\n\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private dispatchValueChange(): void {\n const detailValue = this.isAllSelected ? ALL_VALUE : [...this.selectedValues];\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: detailValue },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleAllChange = (event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n this.value = event.detail.checked ? ALL_VALUE : [];\n this.dispatchValueChange();\n };\n\n private handleItemChange = (optionValue: string, event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n\n if (this.isAllSelected) {\n return;\n }\n\n const checked = event.detail.checked;\n const current = this.selectedValues;\n this.value = checked\n ? [...current, optionValue]\n : current.filter((value) => value !== optionValue);\n\n this.dispatchValueChange();\n };\n\n private rebuildOptionElements(): void {\n const container = this.shadowRoot?.querySelector('.options');\n\n if (!container) {\n return;\n }\n\n for (const element of this.optionElements) {\n element.remove();\n }\n\n this.optionElements = [];\n this.allOptionElement = null;\n\n if (this.showAllOption) {\n const allCheckbox = document.createElement('pk-checkbox') as PkCheckbox;\n allCheckbox.classList.add('all-option');\n allCheckbox.append(this.allLabel);\n allCheckbox.addEventListener('pk-change', this.handleAllChange as EventListener);\n\n container.append(allCheckbox);\n this.allOptionElement = allCheckbox;\n this.optionElements.push(allCheckbox);\n }\n\n for (const option of this.options) {\n const checkbox = document.createElement('pk-checkbox') as PkCheckbox;\n checkbox.checkboxValue = option.value;\n checkbox.append(option.label);\n checkbox.addEventListener('pk-change', (event) => {\n this.handleItemChange(option.value, event as CustomEvent<{ checked: boolean }>);\n });\n\n container.append(checkbox);\n this.optionElements.push(checkbox);\n }\n\n this.updateOptionStates();\n }\n\n private updateOptionStates(): void {\n if (this.allOptionElement) {\n this.allOptionElement.checked = this.isAllSelected;\n this.allOptionElement.disabled = this.disabled;\n }\n\n for (const option of this.options) {\n const checkbox = this.optionElements.find(\n (element) => element !== this.allOptionElement && element.checkboxValue === option.value,\n );\n\n if (!checkbox) {\n continue;\n }\n\n checkbox.checked = this.isAllSelected || this.selectedValues.includes(option.value);\n checkbox.disabled = this.disabled || this.isAllSelected;\n }\n }\n\n override render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n options: true,\n 'options--horizontal': this.orientation === 'horizontal',\n })}\n ></div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-checkbox-select': PkCheckboxSelect;\n }\n}\n"],"mappings":"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"}
|
|
@@ -10,9 +10,10 @@ import { i as unregisterDismissible, n as isTopDismissible, r as registerDismiss
|
|
|
10
10
|
import { i as scrollIntoView } from "./scroll-lock-B4o9vdzJ.js";
|
|
11
11
|
import { t as PkClearEvent } from "./pk-clear--mPWZP7H.js";
|
|
12
12
|
import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-D0pkTQyI.js";
|
|
13
|
+
import "./pk-popup-CgiXok-U.js";
|
|
13
14
|
import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "./popup-placement-animation-WlEXnS85.js";
|
|
14
15
|
import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS, t as syncListboxSeparators } from "./sync-listbox-separators-B1-V0oJi.js";
|
|
15
|
-
import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-
|
|
16
|
+
import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-DMnuZDQl.js";
|
|
16
17
|
import { t as popupContentAnimationStyles } from "./popup-content-animation.styles-Dc6d9quJ.js";
|
|
17
18
|
import { css, html, nothing } from "lit";
|
|
18
19
|
import { classMap } from "lit/directives/class-map.js";
|
|
@@ -2012,4 +2013,4 @@ PkCombobox = __decorate([customElement("pk-combobox")], PkCombobox);
|
|
|
2012
2013
|
//#endregion
|
|
2013
2014
|
export { PkCreateEvent as n, PkCombobox as t };
|
|
2014
2015
|
|
|
2015
|
-
//# sourceMappingURL=pk-combobox-
|
|
2016
|
+
//# sourceMappingURL=pk-combobox-DtkXaX67.js.map
|