@verbb/plugin-kit-web 2.0.6 → 2.0.8

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.
Files changed (83) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/a11y/scroll-lock.d.ts +13 -7
  3. package/dist/a11y/scroll-lock.d.ts.map +1 -1
  4. package/dist/chunks/{autoloader-DXK9MVuw.js → autoloader-hkX3zcAt.js} +2 -21
  5. package/dist/chunks/autoloader-hkX3zcAt.js.map +1 -0
  6. package/dist/chunks/{pk-combobox-DtkXaX67.js → pk-combobox-BqaSsLJb.js} +2 -2
  7. package/dist/chunks/{pk-combobox-DtkXaX67.js.map → pk-combobox-BqaSsLJb.js.map} +1 -1
  8. package/dist/chunks/{pk-dialog-DZZd1Tzb.js → pk-dialog-BXJr3iEo.js} +17 -6
  9. package/dist/chunks/pk-dialog-BXJr3iEo.js.map +1 -0
  10. package/dist/chunks/{pk-editable-table-DVqOEz3W.js → pk-editable-table-sZO9JwiR.js} +4 -4
  11. package/dist/chunks/{pk-editable-table-DVqOEz3W.js.map → pk-editable-table-sZO9JwiR.js.map} +1 -1
  12. package/dist/chunks/{pk-select-odSNU1tN.js → pk-select-BPnO9qgj.js} +2 -2
  13. package/dist/chunks/{pk-select-odSNU1tN.js.map → pk-select-BPnO9qgj.js.map} +1 -1
  14. package/dist/chunks/{pk-time-picker-DtX0LtID.js → pk-time-picker-CZGr2dI2.js} +2 -2
  15. package/dist/chunks/{pk-time-picker-DtX0LtID.js.map → pk-time-picker-CZGr2dI2.js.map} +1 -1
  16. package/dist/chunks/{pk-tiptap-editor-CdoutapZ.js → pk-tiptap-editor-HemVPILE.js} +2 -2
  17. package/dist/chunks/{pk-tiptap-editor-CdoutapZ.js.map → pk-tiptap-editor-HemVPILE.js.map} +1 -1
  18. package/dist/chunks/{register-BYPBQHrq.js → register-BCiqL-PO.js} +7 -7
  19. package/dist/chunks/{register-BYPBQHrq.js.map → register-BCiqL-PO.js.map} +1 -1
  20. package/dist/chunks/scroll-lock-Bbh3Sc5g.js +160 -0
  21. package/dist/chunks/scroll-lock-Bbh3Sc5g.js.map +1 -0
  22. package/dist/components/combobox/pk-combobox.js +1 -1
  23. package/dist/components/combobox.js +1 -1
  24. package/dist/components/dialog/pk-dialog.d.ts +5 -0
  25. package/dist/components/dialog/pk-dialog.d.ts.map +1 -1
  26. package/dist/components/dialog/pk-dialog.js +1 -1
  27. package/dist/components/dialog/pk-dialog.styles.d.ts.map +1 -1
  28. package/dist/components/dialog.js +1 -1
  29. package/dist/components/editable-table/pk-editable-table.js +1 -1
  30. package/dist/components/editable-table.js +1 -1
  31. package/dist/components/select/pk-select.js +1 -1
  32. package/dist/components/select.js +1 -1
  33. package/dist/components/time-picker/pk-time-picker.js +1 -1
  34. package/dist/components/time-picker.js +1 -1
  35. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  36. package/dist/components/tiptap-editor.js +1 -1
  37. package/dist/index.js +9 -9
  38. package/dist/plugin-kit.css +2 -5
  39. package/dist/plugin-kit.js +2 -2
  40. package/dist/register.js +7 -7
  41. package/dist/tokens.css +2 -5
  42. package/dist/utils/config.d.ts +2 -2
  43. package/dist/utils/config.d.ts.map +1 -1
  44. package/dist/utils/documentScrollStability.d.ts +3 -7
  45. package/dist/utils/documentScrollStability.d.ts.map +1 -1
  46. package/dist-loader/chunks/{pk-a11y-Cx5RZvhu.js → pk-a11y-CjB4-U-R.js} +61 -94
  47. package/dist-loader/chunks/{pk-combobox-fXGaY4L0.js → pk-combobox-IyQd9a1s.js} +1 -1
  48. package/dist-loader/chunks/{pk-date-picker-CE4TlRRZ.js → pk-date-picker-38hUgJ2-.js} +1 -1
  49. package/dist-loader/chunks/{pk-dialog-CP1YT85H.js → pk-dialog-DNAhdVbM.js} +16 -5
  50. package/dist-loader/chunks/{pk-dropdown-menu-CajQAobW.js → pk-dropdown-menu-DsHJ-4Ys.js} +1 -1
  51. package/dist-loader/chunks/{pk-field-BbKmQmTF.js → pk-field-tDfxz4Fd.js} +1 -1
  52. package/dist-loader/chunks/{pk-input-CXE7_rTQ.js → pk-input-88DVgoVz.js} +1 -1
  53. package/dist-loader/chunks/{pk-select-CbmPJCx8.js → pk-select-ClUdE4yB.js} +1 -1
  54. package/dist-loader/chunks/{pk-textarea-Ch8JpP83.js → pk-textarea-LC_CPUav.js} +1 -1
  55. package/dist-loader/chunks/{pk-time-picker-DZljwJn9.js → pk-time-picker-Bc6UkCYG.js} +1 -1
  56. package/dist-loader/chunks/{pk-tooltip-DHiCn33o.js → pk-tooltip-DRU95AZ6.js} +1 -1
  57. package/dist-loader/chunks/{tiptap.styles-CDjt6Iz4.js → tiptap.styles-gpE_nQ_B.js} +1 -1
  58. package/dist-loader/components/code-editor/code-editor.js +5 -5
  59. package/dist-loader/components/combobox/combobox.js +1 -1
  60. package/dist-loader/components/date-picker/date-picker.js +1 -1
  61. package/dist-loader/components/dialog/dialog.js +1 -1
  62. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  63. package/dist-loader/components/editable-table/editable-table.js +7 -7
  64. package/dist-loader/components/field/field.js +1 -1
  65. package/dist-loader/components/input/input.js +1 -1
  66. package/dist-loader/components/popover/popover.js +1 -1
  67. package/dist-loader/components/select/option-group.js +1 -1
  68. package/dist-loader/components/select/select.js +1 -1
  69. package/dist-loader/components/tabs/tabs.js +1 -1
  70. package/dist-loader/components/textarea/textarea.js +1 -1
  71. package/dist-loader/components/time-picker/time-picker.js +1 -1
  72. package/dist-loader/components/tiptap/tiptap-content.js +1 -1
  73. package/dist-loader/components/tiptap/tiptap-editor.js +7 -7
  74. package/dist-loader/components/tiptap/tiptap-input.js +1 -1
  75. package/dist-loader/components/tooltip/tooltip.js +1 -1
  76. package/dist-loader/plugin-kit.css +2 -5
  77. package/dist-loader/plugin-kit.loader.js +2 -22
  78. package/dist-loader/tokens.css +2 -5
  79. package/package.json +8 -7
  80. package/dist/chunks/autoloader-DXK9MVuw.js.map +0 -1
  81. package/dist/chunks/pk-dialog-DZZd1Tzb.js.map +0 -1
  82. package/dist/chunks/scroll-lock-B4o9vdzJ.js +0 -193
  83. package/dist/chunks/scroll-lock-B4o9vdzJ.js.map +0 -1
@@ -2,12 +2,12 @@ import { c as r, l as n, m as i, p as b, s as e, u as t } from "../../chunks/lit
2
2
  import { c as __decorate, i as PkFormAssociatedElement, n as formControlStyles } from "../../chunks/pk-base-BlxAYXJD.js";
3
3
  import { t as MirrorValidator } from "../../chunks/mirror-validator-DEz3BsbN.js";
4
4
  import { T as EditorState, _ as highlightActiveLine, a as html, b as keymap, c as closeBracketsKeymap, d as defaultHighlightStyle, f as indentOnInput, g as drawSelection, h as EditorView, i as json, l as css, m as syntaxHighlighting, n as history, o as javascript, p as indentUnit, r as historyKeymap, s as closeBrackets, t as defaultKeymap, u as bracketMatching, v as highlightActiveLineGutter, w as Compartment, x as lineNumbers, y as highlightSpecialChars } from "../../chunks/codemirror-CHXb-wYU.js";
5
- //#region ../plugin-kit-codemirror-core/dist/constants.js
5
+ //#region node_modules/@verbb/plugin-kit-codemirror-core/dist/constants.js
6
6
  function computeCodeEditorMinHeight(rows = 12) {
7
7
  return `${Math.max(Number(rows) || 12, 4) * 18 + 12}px`;
8
8
  }
9
9
  //#endregion
10
- //#region ../plugin-kit-codemirror-core/dist/languages.js
10
+ //#region node_modules/@verbb/plugin-kit-codemirror-core/dist/languages.js
11
11
  function languageUsesSyntaxHelpers(language) {
12
12
  return language !== "text";
13
13
  }
@@ -21,7 +21,7 @@ function createLanguageExtension(language) {
21
21
  }
22
22
  }
23
23
  //#endregion
24
- //#region ../plugin-kit-codemirror-core/dist/theme.js
24
+ //#region node_modules/@verbb/plugin-kit-codemirror-core/dist/theme.js
25
25
  /** Editor content surface — matches @uiw/react-codemirror default light theme. */
26
26
  var CODE_EDITOR_SURFACE_BG = "#ffffff";
27
27
  /** Gutter strip beside line numbers. */
@@ -71,7 +71,7 @@ var codeEditorTheme = EditorView.theme({
71
71
  ".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection": { backgroundColor: `rgba(59, 130, 246, 0.35) !important` }
72
72
  });
73
73
  //#endregion
74
- //#region ../plugin-kit-codemirror-core/dist/extensions.js
74
+ //#region node_modules/@verbb/plugin-kit-codemirror-core/dist/extensions.js
75
75
  function createEditorSetupExtensions(language, showLineNumbers) {
76
76
  const usesSyntaxHelpers = languageUsesSyntaxHelpers(language);
77
77
  const extensions = [
@@ -118,7 +118,7 @@ function createCodeEditorExtensions({ language = "html", tabSize = 4, lineNumber
118
118
  return extensions;
119
119
  }
120
120
  //#endregion
121
- //#region ../plugin-kit-codemirror-core/dist/host.js
121
+ //#region node_modules/@verbb/plugin-kit-codemirror-core/dist/host.js
122
122
  var CodeMirrorHost = class {
123
123
  view = null;
124
124
  editableCompartment = new Compartment();
@@ -1,2 +1,2 @@
1
- import { t as PkCombobox } from "../../chunks/pk-combobox-fXGaY4L0.js";
1
+ import { t as PkCombobox } from "../../chunks/pk-combobox-IyQd9a1s.js";
2
2
  export { PkCombobox };
@@ -1,2 +1,2 @@
1
- import { t as PkDatePicker } from "../../chunks/pk-date-picker-CE4TlRRZ.js";
1
+ import { t as PkDatePicker } from "../../chunks/pk-date-picker-38hUgJ2-.js";
2
2
  export { PkDatePicker };
@@ -1,2 +1,2 @@
1
- import { t as PkDialog } from "../../chunks/pk-dialog-CP1YT85H.js";
1
+ import { t as PkDialog } from "../../chunks/pk-dialog-DNAhdVbM.js";
2
2
  export { PkDialog };
@@ -1,2 +1,2 @@
1
- import { t as PkDropdownMenu } from "../../chunks/pk-dropdown-menu-CajQAobW.js";
1
+ import { t as PkDropdownMenu } from "../../chunks/pk-dropdown-menu-DsHJ-4Ys.js";
2
2
  export { PkDropdownMenu };
@@ -6,17 +6,17 @@ import "../../chunks/pk-button-CK5FZiwP.js";
6
6
  import { t as RequiredValidator } from "../../chunks/required-validator-DXqqPVeW.js";
7
7
  import "../../chunks/pk-checkbox-CoDX2G3J.js";
8
8
  import "../../chunks/pk-color-input-B73zaGYj.js";
9
- import "../../chunks/pk-input-CXE7_rTQ.js";
10
- import "../../chunks/pk-textarea-Ch8JpP83.js";
9
+ import "../../chunks/pk-input-88DVgoVz.js";
10
+ import "../../chunks/pk-textarea-LC_CPUav.js";
11
11
  import { n as renderIconHtml } from "../../chunks/render-BCU9WDSk.js";
12
12
  import "../../chunks/pk-dropdown-item-DkZRcPJ5.js";
13
- import "../../chunks/pk-dropdown-menu-CajQAobW.js";
13
+ import "../../chunks/pk-dropdown-menu-DsHJ-4Ys.js";
14
14
  import "../../chunks/pk-lightswitch-BHEOy7aK.js";
15
15
  import "../../chunks/pk-option-vh8UvSAI.js";
16
- import "../../chunks/pk-select-CbmPJCx8.js";
17
- import "../../chunks/pk-date-picker-CE4TlRRZ.js";
18
- import "../../chunks/pk-combobox-fXGaY4L0.js";
19
- import "../../chunks/pk-time-picker-DZljwJn9.js";
16
+ import "../../chunks/pk-select-ClUdE4yB.js";
17
+ import "../../chunks/pk-date-picker-38hUgJ2-.js";
18
+ import "../../chunks/pk-combobox-IyQd9a1s.js";
19
+ import "../../chunks/pk-time-picker-Bc6UkCYG.js";
20
20
  //#region src/components/editable-table/editable-table-dnd.ts
21
21
  /**
22
22
  * Table-native pointer drag for `<pk-editable-table>` rows.
@@ -1,2 +1,2 @@
1
- import { t as PkField } from "../../chunks/pk-field-BbKmQmTF.js";
1
+ import { t as PkField } from "../../chunks/pk-field-tDfxz4Fd.js";
2
2
  export { PkField };
@@ -1,2 +1,2 @@
1
- import { t as PkInput } from "../../chunks/pk-input-CXE7_rTQ.js";
1
+ import { t as PkInput } from "../../chunks/pk-input-88DVgoVz.js";
2
2
  export { PkInput };
@@ -1,4 +1,4 @@
1
- import { d as registerDismissible, f as unregisterDismissible, n as uniqueId, u as isTopDismissible } from "../../chunks/pk-a11y-Cx5RZvhu.js";
1
+ import { d as registerDismissible, f as unregisterDismissible, n as uniqueId, u as isTopDismissible } from "../../chunks/pk-a11y-CjB4-U-R.js";
2
2
  import { c as r, f as A, i as e, l as n, m as i, p as b, s as e$1, u as t } from "../../chunks/lit-Dnn7gEi2.js";
3
3
  import { c as __decorate, l as PkElement } from "../../chunks/pk-base-BlxAYXJD.js";
4
4
  import { r as buttonGroupCornerRoleStyles } from "../../chunks/button-group-item.styles-BNc-ksl1.js";
@@ -1,4 +1,4 @@
1
- import { n as uniqueId } from "../../chunks/pk-a11y-Cx5RZvhu.js";
1
+ import { n as uniqueId } from "../../chunks/pk-a11y-CjB4-U-R.js";
2
2
  import { l as n, m as i, p as b, u as t } from "../../chunks/lit-Dnn7gEi2.js";
3
3
  import { c as __decorate, l as PkElement } from "../../chunks/pk-base-BlxAYXJD.js";
4
4
  //#region src/components/select/pk-option-group.styles.ts
@@ -1,2 +1,2 @@
1
- import { t as PkSelect } from "../../chunks/pk-select-CbmPJCx8.js";
1
+ import { t as PkSelect } from "../../chunks/pk-select-ClUdE4yB.js";
2
2
  export { PkSelect };
@@ -1,4 +1,4 @@
1
- import { n as uniqueId } from "../../chunks/pk-a11y-Cx5RZvhu.js";
1
+ import { n as uniqueId } from "../../chunks/pk-a11y-CjB4-U-R.js";
2
2
  import { c as r, f as A, l as n, m as i, p as b, u as t } from "../../chunks/lit-Dnn7gEi2.js";
3
3
  import { c as __decorate, l as PkElement } from "../../chunks/pk-base-BlxAYXJD.js";
4
4
  //#region src/components/tabs/pk-tabs.styles.ts
@@ -1,2 +1,2 @@
1
- import { t as PkTextarea } from "../../chunks/pk-textarea-Ch8JpP83.js";
1
+ import { t as PkTextarea } from "../../chunks/pk-textarea-LC_CPUav.js";
2
2
  export { PkTextarea };
@@ -1,2 +1,2 @@
1
- import { t as PkTimePicker } from "../../chunks/pk-time-picker-DZljwJn9.js";
1
+ import { t as PkTimePicker } from "../../chunks/pk-time-picker-Bc6UkCYG.js";
2
2
  export { PkTimePicker };
@@ -1,7 +1,7 @@
1
1
  import { l as n, m as i, p as b, s as e, u as t } from "../../chunks/lit-Dnn7gEi2.js";
2
2
  import { c as __decorate, l as PkElement } from "../../chunks/pk-base-BlxAYXJD.js";
3
3
  import { k as Editor } from "../../chunks/tiptap-_LAjdgeV.js";
4
- import { A as createTiptapExtensions, i as createVariableTagDomNodeView, k as valueToContent, t as tiptapContentProseMirrorStyles } from "../../chunks/tiptap.styles-CDjt6Iz4.js";
4
+ import { A as createTiptapExtensions, i as createVariableTagDomNodeView, k as valueToContent, t as tiptapContentProseMirrorStyles } from "../../chunks/tiptap.styles-gpE_nQ_B.js";
5
5
  //#region src/components/tiptap/pk-tiptap-content.styles.ts
6
6
  var pkTiptapContentStyles = i`
7
7
  @layer pk-component {
@@ -1,20 +1,20 @@
1
- import { n as uniqueId } from "../../chunks/pk-a11y-Cx5RZvhu.js";
1
+ import { n as uniqueId } from "../../chunks/pk-a11y-CjB4-U-R.js";
2
2
  import { a as o, c as r, f as A, l as n, m as i, p as b, s as e, u as t } from "../../chunks/lit-Dnn7gEi2.js";
3
3
  import { c as __decorate, i as PkFormAssociatedElement, n as formControlStyles } from "../../chunks/pk-base-BlxAYXJD.js";
4
4
  import { A as highlighter, B as quoteRight, C as h1, D as h5, E as h4, F as listOl, G as textSlash, H as subscript, I as listUl, K as triangleExclamation, L as minus, M as italic, O as h6, P as link, R as paragraph, T as h3, U as superscript, V as strikethrough, W as table, a as alignRight, c as arrowRotateRight, d as bold, f as bracketsCurly, h as chevronDown, i as alignLeft, k as heading, n as alignCenter, q as underline, r as alignJustify, s as arrowRotateLeft, w as h2, x as fileDashedLine, y as code } from "../../chunks/svg-BCGsRUz7.js";
5
5
  import "../../chunks/pk-button-CK5FZiwP.js";
6
6
  import { t as MirrorValidator } from "../../chunks/mirror-validator-DEz3BsbN.js";
7
7
  import "../../chunks/pk-checkbox-CoDX2G3J.js";
8
- import "../../chunks/pk-input-CXE7_rTQ.js";
8
+ import "../../chunks/pk-input-88DVgoVz.js";
9
9
  import { M as posToDOMRect, j as getMarkRange, k as Editor } from "../../chunks/tiptap-_LAjdgeV.js";
10
- import { A as createTiptapExtensions, D as getFatalTiptapContentError, O as normalizeContentArray, S as openCraftElementLinkSelector, _ as getLinkOpenInNewTab, a as getToolbarGroupDefaultIcon, b as getCraftLinkOptions, c as isFormattingToolbarPreset, d as parseToolbarConfig, f as runToolbarButton, g as getLinkEditState, h as applyLinkToEditor, i as createVariableTagDomNodeView, k as valueToContent, l as isHeadingsOnlyToolbarPreset, m as isTiptapButtonActive, o as getToolbarGroupMenuItems, p as toolbarIncludesButton, r as tiptapProseMirrorStyles, s as getToolbarGroupTriggerState, u as isToolbarButtonActive, v as getSelectedText, x as getLinkOptionsElementSiteId, y as unsetLinkFromEditor } from "../../chunks/tiptap.styles-CDjt6Iz4.js";
10
+ import { A as createTiptapExtensions, D as getFatalTiptapContentError, O as normalizeContentArray, S as openCraftElementLinkSelector, _ as getLinkOpenInNewTab, a as getToolbarGroupDefaultIcon, b as getCraftLinkOptions, c as isFormattingToolbarPreset, d as parseToolbarConfig, f as runToolbarButton, g as getLinkEditState, h as applyLinkToEditor, i as createVariableTagDomNodeView, k as valueToContent, l as isHeadingsOnlyToolbarPreset, m as isTiptapButtonActive, o as getToolbarGroupMenuItems, p as toolbarIncludesButton, r as tiptapProseMirrorStyles, s as getToolbarGroupTriggerState, u as isToolbarButtonActive, v as getSelectedText, x as getLinkOptionsElementSiteId, y as unsetLinkFromEditor } from "../../chunks/tiptap.styles-gpE_nQ_B.js";
11
11
  import { n as renderIconHtml } from "../../chunks/render-BCU9WDSk.js";
12
- import "../../chunks/pk-field-BbKmQmTF.js";
13
- import "../../chunks/pk-dialog-CP1YT85H.js";
12
+ import "../../chunks/pk-field-tDfxz4Fd.js";
13
+ import "../../chunks/pk-dialog-DNAhdVbM.js";
14
14
  import "../../chunks/pk-dropdown-item-DkZRcPJ5.js";
15
- import "../../chunks/pk-dropdown-menu-CajQAobW.js";
15
+ import "../../chunks/pk-dropdown-menu-DsHJ-4Ys.js";
16
16
  import "../dropdown-menu/dropdown-separator.js";
17
- import "../../chunks/pk-tooltip-DHiCn33o.js";
17
+ import "../../chunks/pk-tooltip-DRU95AZ6.js";
18
18
  //#region src/components/tiptap/tiptap-editor-host.ts
19
19
  function serializeTiptapDocumentContent(content) {
20
20
  return JSON.stringify(normalizeContentArray(content));
@@ -2,7 +2,7 @@ import { c as r, l as n, m as i, p as b, s as e, u as t } from "../../chunks/lit
2
2
  import { c as __decorate, i as PkFormAssociatedElement, n as formControlStyles } from "../../chunks/pk-base-BlxAYXJD.js";
3
3
  import { t as MirrorValidator } from "../../chunks/mirror-validator-DEz3BsbN.js";
4
4
  import { k as Editor } from "../../chunks/tiptap-_LAjdgeV.js";
5
- import { C as contentToValue, E as valueToContent, T as flattenVariableOptions, i as createVariableTagDomNodeView, j as createTiptapInputExtensions, n as tiptapInputProseMirrorStyles, w as dedupeVariableOptions } from "../../chunks/tiptap.styles-CDjt6Iz4.js";
5
+ import { C as contentToValue, E as valueToContent, T as flattenVariableOptions, i as createVariableTagDomNodeView, j as createTiptapInputExtensions, n as tiptapInputProseMirrorStyles, w as dedupeVariableOptions } from "../../chunks/tiptap.styles-gpE_nQ_B.js";
6
6
  //#region src/components/tiptap/pk-tiptap-input.styles.ts
7
7
  var pkTiptapInputStyles = i`
8
8
  @layer pk-component {
@@ -1,2 +1,2 @@
1
- import { t as PkTooltip } from "../../chunks/pk-tooltip-DHiCn33o.js";
1
+ import { t as PkTooltip } from "../../chunks/pk-tooltip-DRU95AZ6.js";
2
2
  export { PkTooltip };
@@ -399,11 +399,8 @@
399
399
 
400
400
  /* Scroll lock — class is a state marker; locking logic lives in a11y/scroll-lock.ts.
401
401
  * Do NOT pad body for the scrollbar: that shifts position:fixed Craft/playground chrome.
402
- * Prefer permanent stable gutter so Path A succeeds more often. */
403
- html {
404
- scrollbar-gutter: stable;
405
- }
406
-
402
+ * Do NOT set permanent `scrollbar-gutter: stable` on html — that leaves an empty strip
403
+ * on every Craft CP page. Lock applies compensation only while overlays are open. */
407
404
  html.pk-scroll-lock {
408
405
  --pk-scroll-lock: 1;
409
406
  }
@@ -1,4 +1,4 @@
1
- import { a as getScrollLockDepth, i as forceClearScrollLock, l as getDismissibleStackSnapshot } from "./chunks/pk-a11y-Cx5RZvhu.js";
1
+ import { a as getScrollLockDepth, i as forceClearScrollLock, l as getDismissibleStackSnapshot } from "./chunks/pk-a11y-CjB4-U-R.js";
2
2
  //#region src/component-registry.ts
3
3
  /**
4
4
  * Canonical tag → loader module path mapping for the autoloader.
@@ -224,26 +224,6 @@ async function allDefined(options = {}) {
224
224
  await Promise.all(tagsToAwait.map((tag) => customElements.whenDefined(tag)));
225
225
  await new Promise(requestAnimationFrame);
226
226
  }
227
- //#endregion
228
- //#region src/utils/documentScrollStability.ts
229
- var DOCUMENT_SCROLL_STABILITY_STYLE_ID = "plugin-kit-document-scroll-stability";
230
- /**
231
- * Reserve scrollbar space on the document root so overlay scroll lock
232
- * can use the stable gutter path instead of body width compensation.
233
- * Safe to call multiple times; only injects once.
234
- *
235
- * tokens.css already sets `html { scrollbar-gutter: stable }` for kit surfaces
236
- * that import tokens. This injector covers hosts that load components without
237
- * tokens (e.g. craft CP early boot / ShadowRoot portal config).
238
- */
239
- var ensureDocumentScrollStability = () => {
240
- if (typeof document === "undefined") return;
241
- if (document.querySelector(`style[data-plugin-kit-style-id="${DOCUMENT_SCROLL_STABILITY_STYLE_ID}"]`)) return;
242
- const style = document.createElement("style");
243
- style.setAttribute("data-plugin-kit-style-id", DOCUMENT_SCROLL_STABILITY_STYLE_ID);
244
- style.textContent = "html { scrollbar-gutter: stable; }";
245
- document.head.appendChild(style);
246
- };
247
227
  var setPortalClassName = (className) => {
248
228
  className.trim();
249
229
  };
@@ -254,7 +234,7 @@ var setShadowRootSelectors = (selectors) => {
254
234
  //#endregion
255
235
  //#region src/utils/config.ts
256
236
  var configurePluginKitWeb = (config) => {
257
- if (config.portalContainer instanceof ShadowRoot) ensureDocumentScrollStability();
237
+ if (config.portalContainer instanceof ShadowRoot);
258
238
  if (config.shadowRootSelectors) setShadowRootSelectors(config.shadowRootSelectors);
259
239
  };
260
240
  //#endregion
@@ -398,11 +398,8 @@
398
398
 
399
399
  /* Scroll lock — class is a state marker; locking logic lives in a11y/scroll-lock.ts.
400
400
  * Do NOT pad body for the scrollbar: that shifts position:fixed Craft/playground chrome.
401
- * Prefer permanent stable gutter so Path A succeeds more often. */
402
- html {
403
- scrollbar-gutter: stable;
404
- }
405
-
401
+ * Do NOT set permanent `scrollbar-gutter: stable` on html — that leaves an empty strip
402
+ * on every Craft CP page. Lock applies compensation only while overlays are open. */
406
403
  html.pk-scroll-lock {
407
404
  --pk-scroll-lock: 1;
408
405
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verbb/plugin-kit-web",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
4
4
  "description": "Plugin Kit web components (shadow DOM, Craft design system)",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
@@ -9,6 +9,7 @@
9
9
  "./src/components/**/*.ts",
10
10
  "./dist/register.js",
11
11
  "./dist/components/**/*.js",
12
+ "./dist/chunks/**/*.js",
12
13
  "./dist-loader/**/*.js"
13
14
  ],
14
15
  "files": [
@@ -936,18 +937,18 @@
936
937
  },
937
938
  "peerDependencies": {
938
939
  "@floating-ui/dom": "^1.7.3",
939
- "@verbb/plugin-kit-core": "^2.0.6",
940
- "@verbb/plugin-kit-icons": "^2.0.6",
940
+ "@verbb/plugin-kit-core": "^2.0.8",
941
+ "@verbb/plugin-kit-icons": "^2.0.8",
941
942
  "lit": "^3.3.0"
942
943
  },
943
944
  "license": "MIT",
944
945
  "dependencies": {
945
946
  "@floating-ui/dom": "^1.7.3",
946
947
  "@tiptap/core": "^3.22.4",
947
- "@verbb/plugin-kit-codemirror-core": "2.0.6",
948
- "@verbb/plugin-kit-core": "^2.0.6",
949
- "@verbb/plugin-kit-icons": "^2.0.6",
950
- "@verbb/plugin-kit-tiptap-core": "^2.0.6",
948
+ "@verbb/plugin-kit-codemirror-core": "2.0.8",
949
+ "@verbb/plugin-kit-core": "^2.0.8",
950
+ "@verbb/plugin-kit-icons": "^2.0.8",
951
+ "@verbb/plugin-kit-tiptap-core": "^2.0.8",
951
952
  "composed-offset-position": "^0.0.6",
952
953
  "lit": "^3.3.0"
953
954
  },
@@ -1 +0,0 @@
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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-dialog-DZZd1Tzb.js","names":[],"sources":["../../src/utils/craft-host-modal.ts","../../src/components/dialog/pk-dialog.styles.ts","../../src/components/dialog/pk-dialog.ts"],"sourcesContent":["/**\n * Craft CP Garnish modals (element selector, asset picker, …) live in normal\n * document stacking — not the browser top layer. Native `<dialog>.showModal()`\n * always paints above them, so open kit dialogs must briefly yield.\n */\n\nconst HOST_MODAL_SELECTOR = '.modal-shade, .modal';\n\nconst isVisiblyShown = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return style.display !== 'none'\n && style.visibility !== 'hidden'\n && Number.parseFloat(style.opacity || '1') > 0;\n};\n\n/** True when a Craft/Garnish modal or shade is present and visible. */\nexport function isCraftHostModalOpen(root: ParentNode = document): boolean {\n const nodes = root.querySelectorAll(HOST_MODAL_SELECTOR);\n\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue;\n }\n\n // Ignore kit chrome that happens to reuse `.modal` inside a dialog.\n if (node.closest('pk-dialog')) {\n continue;\n }\n\n if (isVisiblyShown(node)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport type CraftHostModalObserver = {\n disconnect: () => void;\n};\n\n/**\n * Watch the document for Craft modal mount/unmount and invoke `onChange`\n * whenever presence flips. Used by `pk-dialog` to leave/re-enter the top layer.\n */\nexport function observeCraftHostModal(\n onChange: (open: boolean) => void,\n options: { root?: ParentNode; getDocument?: () => Document } = {},\n): CraftHostModalObserver {\n const doc = options.getDocument?.() ?? document;\n const root = options.root ?? doc.body;\n let lastOpen = isCraftHostModalOpen(doc);\n\n const emit = () => {\n const next = isCraftHostModalOpen(doc);\n if (next === lastOpen) {\n return;\n }\n lastOpen = next;\n onChange(next);\n };\n\n const observer = new MutationObserver(() => {\n emit();\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['class', 'style', 'hidden'],\n });\n\n // Craft sometimes toggles visibility a frame after insert.\n const intervalId = window.setInterval(emit, 250);\n\n return {\n disconnect: () => {\n observer.disconnect();\n window.clearInterval(intervalId);\n },\n };\n}\n","import { css } from 'lit';\n\nexport const pkDialogStyles = css`\n @layer pk-component {\n :host {\n /* Not display:contents — that flattens the trigger slot into flex parents\n (e.g. playground cards) and stretches pk-button full width, same class of\n bug as the dropdown host. Dialog host is display none/block, not contents. */\n display: inline-block;\n width: fit-content;\n max-width: 100%;\n align-self: flex-start;\n flex: none;\n vertical-align: middle;\n }\n\n /*\n * Controlled dialogs (no slot=\"trigger\") — panel is top-layer / fixed while\n * yielding. An inline-block host still sizes to the open <dialog> box in some\n * engines and expands parents (Formie nested field cards grow a blank gap).\n */\n :host(:not([data-has-trigger])) {\n position: absolute;\n width: 0;\n height: 0;\n max-width: none;\n margin: 0;\n padding: 0;\n overflow: visible;\n vertical-align: unset;\n }\n\n .dialog {\n display: flex;\n flex-direction: column;\n width: min(100%, var(--pk-dialog-width, var(--pk-dialog-max-width, 32rem)));\n min-width: var(--pk-dialog-min-width, 0);\n /* Keep UA :modal inset (0) — that + margin:auto centers the panel. Do not\n * unset inset; it breaks centering (field edit landed top-left). */\n height: var(--pk-dialog-height, fit-content);\n min-height: var(--pk-dialog-min-height, 0);\n max-height: var(--pk-dialog-max-height, calc(100vh - 2rem));\n margin: auto;\n padding: 0;\n /* v1 DialogContent: no CSS border — edge is the 1px ring inside --pk-shadow-modal. */\n border: 0;\n border-radius: var(--pk-radius-lg);\n background: var(--pk-color-white);\n box-shadow: var(--pk-shadow-modal);\n color: var(--pk-color-gray-900);\n overflow: hidden;\n opacity: 1;\n transform: scale(1);\n }\n\n .dialog:focus,\n .dialog:focus-visible {\n outline: none;\n }\n\n .dialog:not([open]) {\n display: none;\n }\n\n .dialog--wide {\n --pk-dialog-max-width: 42rem;\n }\n\n /* motion only via animateWithClass — never auto-animate on [open] alone. */\n .dialog.show {\n animation: pk-dialog-in 0.15s ease;\n }\n\n .dialog.hide {\n animation: pk-dialog-out 0.15s ease forwards;\n }\n\n .dialog.pulse {\n animation: pk-dialog-pulse 0.25s ease;\n }\n\n @keyframes pk-dialog-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes pk-dialog-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n\n @keyframes pk-dialog-pulse {\n 0%, 100% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(0.98);\n }\n }\n\n .dialog.show::backdrop {\n animation: pk-dialog-backdrop-in 0.15s ease;\n }\n\n .dialog.hide::backdrop {\n animation: pk-dialog-backdrop-in 0.15s ease reverse;\n }\n\n .dialog::backdrop {\n background: hsl(from var(--pk-color-gray-900) h s l / 0.2);\n opacity: 1;\n }\n\n @keyframes pk-dialog-backdrop-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n }\n\n .header {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n gap: 0.2rem;\n padding: 1rem;\n border-bottom: 1px solid var(--pk-color-gray-150);\n border-radius: var(--pk-radius-lg) var(--pk-radius-lg) 0 0;\n background: #f3f7fb;\n text-align: left;\n }\n\n .title {\n margin: 0;\n padding-inline-end: 2rem;\n font-size: 0.9375rem;\n font-weight: 600;\n line-height: 1.2;\n color: var(--pk-color-gray-900);\n }\n\n .description {\n margin: 0;\n padding-inline-end: 2rem;\n font-size: 0.75rem;\n font-weight: 400;\n line-height: 1.4;\n color: var(--pk-color-gray-500);\n }\n\n .close {\n --pk-dialog-close-focus-padding: 0.25rem;\n position: absolute;\n top: calc(1rem - var(--pk-dialog-close-focus-padding));\n right: calc(1rem - var(--pk-dialog-close-focus-padding));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: calc(1.125rem + 2 * var(--pk-dialog-close-focus-padding));\n height: calc(1.125rem + 2 * var(--pk-dialog-close-focus-padding));\n margin: 0;\n padding: var(--pk-dialog-close-focus-padding);\n border: 0;\n border-radius: var(--pk-radius-sm);\n background: transparent;\n color: var(--pk-color-gray-600);\n cursor: pointer;\n line-height: 0;\n opacity: 0.7;\n transition: opacity 0.12s ease;\n box-sizing: border-box;\n }\n\n .close-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n\n .close-icon svg {\n display: block;\n width: 1.125rem;\n height: 1.125rem;\n }\n\n .close:hover {\n opacity: 1;\n background: transparent;\n }\n\n .close:focus-visible {\n opacity: 1;\n box-shadow: 0 0 0 2px var(--pk-color-gray-600);\n }\n\n .body {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n padding: 0;\n /* v1 DialogContent inherited CP text defaults (14px / gray-700) — do not\n * downshift body copy to sm/gray-600 or slotted content reads smaller than v1. */\n font-size: var(--pk-font-size-base);\n line-height: 1.5;\n color: var(--pk-color-gray-700);\n }\n\n .body--padded {\n padding: 1rem;\n }\n\n .footer {\n display: flex;\n flex-shrink: 0;\n flex-direction: row;\n justify-content: flex-end;\n gap: 0.5rem;\n padding: 0.625rem 1rem;\n border-top: 1px solid var(--pk-color-gray-150);\n border-radius: 0 0 var(--pk-radius-lg) var(--pk-radius-lg);\n background: #e4edf6;\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport type { PropertyValues } from 'lit';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nimport { isTopDismissible, registerDismissible, unregisterDismissible } from '../../a11y/dismissible-stack.js';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../a11y/scroll-lock.js';\nimport { PkElement } from '../../base/pk-element.js';\nimport { xmark, renderIconHtml } from '../../icons/index.js';\nimport {\n PkAfterHideEvent,\n PkAfterShowEvent,\n PkHideEvent,\n PkShowEvent,\n type PkOverlaySource,\n} from '../../events/overlay-lifecycle.js';\nimport { animateWithClass } from '../../utils/animate-with-class.js';\nimport { observeCraftHostModal, isCraftHostModalOpen, type CraftHostModalObserver } from '../../utils/craft-host-modal.js';\nimport { pkDialogStyles } from './pk-dialog.styles.js';\n\nconst CLOSE_ICON = renderIconHtml(xmark);\n\n/**\n * Modal dialog — literal `pk-dialog` lifecycle with Plugin Kit styling.\n *\n * Craft CP Garnish modals (asset/element selectors) are not top-layer. While one\n * is open, this dialog temporarily uses `show()` instead of `showModal()` so the\n * Craft UI can stack above — same interop intent as v1 Base UI dialog + `.modal`.\n *\n * @slot trigger - Opens the dialog (optional — use `open` for declarative control)\n * @slot header - Custom header region (replaces the built-in `label` header)\n * @slot label - Dialog title\n * @slot footer - Dialog footer actions\n * @slot - Dialog body\n *\n * @csspart panel - Native dialog element\n * @csspart header - Header region\n * @csspart body - Body region\n * @csspart footer - Footer region\n */\n@customElement('pk-dialog')\nexport class PkDialog extends PkElement {\n static override styles = pkDialogStyles;\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property()\n label = '';\n\n /** Optional subtitle under the title in the built-in header (v1 DialogDescription). */\n @property()\n description = '';\n\n /** Maps to `light-dismiss` (inverted). */\n @property({ attribute: 'disable-pointer-dismissal', type: Boolean, reflect: true })\n disablePointerDismissal = false;\n\n @property({ attribute: 'without-header', type: Boolean, reflect: true })\n withoutHeader = false;\n\n /**\n * Opt out of the default 1rem body padding applied when the built-in header is shown.\n * Use for flush layouts (sidebars, full-bleed pickers) that own their own inset.\n */\n @property({ attribute: 'without-body-padding', type: Boolean, reflect: true })\n withoutBodyPadding = false;\n\n @property({ reflect: true })\n size: 'default' | 'wide' = 'default';\n\n @query('dialog')\n private dialogElement!: HTMLDialogElement;\n\n @state()\n private triggerElement: HTMLElement | null = null;\n\n private previouslyFocused: HTMLElement | null = null;\n\n /** True while demoted from `showModal` so a Craft Garnish modal can stack above. */\n private yieldingToHostModal = false;\n\n private hostModalObserver: CraftHostModalObserver | null = null;\n\n /** Inline box captured before yield — cleared on restore. */\n private yieldBox: { top: number; left: number; width: number; height: number } | null = null;\n\n /** Light-DOM `slot=\"header\"` only — ignore built-in header fallback inside the shadow slot. */\n private hasCustomHeaderSlot(): boolean {\n return this.querySelector(':scope > [slot=\"header\"]') !== null;\n }\n\n private handleDocumentKeyDown = (event: KeyboardEvent): void => {\n // Craft modal owns Escape while we have yielded the top layer.\n if (this.yieldingToHostModal) {\n return;\n }\n\n if (event.key === 'Escape' && this.open && isTopDismissible(this)) {\n event.preventDefault();\n event.stopPropagation();\n void this.requestClose('escape');\n }\n };\n\n /** Pin modeless dialog to the viewport box it had under `showModal`. */\n private applyYieldPosition(box: { top: number; left: number; width: number; height: number }): void {\n const el = this.dialogElement;\n el.style.position = 'fixed';\n el.style.top = `${box.top}px`;\n el.style.left = `${box.left}px`;\n el.style.width = `${box.width}px`;\n el.style.height = `${box.height}px`;\n el.style.margin = '0';\n el.style.maxHeight = 'none';\n // Below typical Garnish.Modal z-index (≥100); keeps page chrome from covering us.\n el.style.zIndex = '99';\n el.toggleAttribute('data-yielding', true);\n }\n\n private clearYieldPosition(): void {\n const el = this.dialogElement;\n if (!el) {\n return;\n }\n\n el.style.position = '';\n el.style.top = '';\n el.style.left = '';\n el.style.width = '';\n el.style.height = '';\n el.style.margin = '';\n el.style.maxHeight = '';\n el.style.zIndex = '';\n el.removeAttribute('data-yielding');\n this.yieldBox = null;\n }\n\n /** Demote `showModal` → `show` so Craft Garnish can paint above (not inert/under). */\n private yieldToHostModal(): void {\n if (this.yieldingToHostModal || !this.open || !this.dialogElement?.open) {\n return;\n }\n\n // Capture centered modal box before leaving the top layer — `show()` is\n // in-flow and would otherwise jump to the host's layout position.\n const rect = this.dialogElement.getBoundingClientRect();\n this.yieldBox = {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n };\n this.yieldingToHostModal = true;\n\n try {\n this.dialogElement.close();\n this.dialogElement.show();\n this.applyYieldPosition(this.yieldBox);\n } catch {\n this.yieldingToHostModal = false;\n this.clearYieldPosition();\n }\n }\n\n /** Restore top-layer modal after Craft Garnish closes. */\n private restoreFromHostModal(): void {\n if (!this.yieldingToHostModal) {\n return;\n }\n\n this.yieldingToHostModal = false;\n this.clearYieldPosition();\n\n if (!this.open || !this.dialogElement) {\n return;\n }\n\n try {\n if (this.dialogElement.open) {\n this.dialogElement.close();\n }\n this.dialogElement.showModal();\n } catch {\n /* noop — next open cycle will recover */\n }\n }\n\n private onHostModalPresenceChange = (hostModalOpen: boolean): void => {\n if (hostModalOpen) {\n this.yieldToHostModal();\n } else {\n this.restoreFromHostModal();\n }\n };\n\n override firstUpdated(): void {\n // Mount-with-open (React `{open && <Dialog open>}` / `<Dialog open>`) must\n // use show() so the enter animation runs. A bare showModal() here used to\n // open instantly, then updated()→show() no-op'd because dialogElement.open\n // was already true — page-settings (always mounted, open toggled) still\n // animated because it only went through show().\n if (this.open) {\n void this.show();\n }\n }\n\n override disconnectedCallback(): void {\n unlockBodyScrolling(this);\n this.removeOpenListeners();\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n super.updated(changed);\n\n if (!changed.has('open') || !this.hasUpdated) {\n return;\n }\n\n this.handleOpenChange();\n }\n\n /** `handleOpenChange` — declarative `open` drives show/close. */\n private handleOpenChange(): void {\n if (this.open && !this.dialogElement.open) {\n void this.show();\n } else if (!this.open && this.dialogElement.open) {\n this.open = true;\n void this.requestClose('api');\n }\n }\n\n private showing = false;\n\n /** Shows the dialog — `show()`. */\n async show(_source: PkOverlaySource = 'api'): Promise<void> {\n if (this.showing || this.dialogElement?.open) {\n return;\n }\n\n this.showing = true;\n\n try {\n const showEvent = new PkShowEvent();\n\n if (!this.dispatchEvent(showEvent)) {\n this.open = false;\n return;\n }\n\n this.addOpenListeners();\n this.previouslyFocused = document.activeElement as HTMLElement | null;\n this.open = true;\n this.dialogElement.showModal();\n lockBodyScrolling(this);\n\n requestAnimationFrame(() => {\n const elementToFocus = this.querySelector<HTMLElement>('[autofocus]');\n\n if (elementToFocus) {\n const innerControl = elementToFocus.shadowRoot?.querySelector<HTMLElement>(\n 'input, textarea, select, button',\n );\n\n (innerControl ?? elementToFocus).focus({ preventScroll: true });\n return;\n }\n\n this.dialogElement.focus({ preventScroll: true });\n });\n\n await animateWithClass(this.dialogElement, 'show');\n\n this.dispatchEvent(new CustomEvent('pk-open-change', {\n detail: { open: true },\n bubbles: true,\n composed: true,\n }));\n this.dispatchEvent(new PkAfterShowEvent());\n } finally {\n this.showing = false;\n }\n }\n\n async hide(source: PkOverlaySource = 'unknown'): Promise<void> {\n await this.requestClose(source);\n }\n\n closeDialog(): void {\n void this.requestClose('close-button');\n }\n\n /** `requestClose()`. */\n async requestClose(source: PkOverlaySource | EventTarget = 'unknown'): Promise<void> {\n const overlaySource: PkOverlaySource = typeof source === 'string'\n ? source\n : 'close-button';\n\n const hideEvent = new PkHideEvent(overlaySource);\n\n if (!this.dispatchEvent(hideEvent)) {\n this.open = true;\n await animateWithClass(this.dialogElement, 'pulse');\n return;\n }\n\n this.removeOpenListeners();\n await animateWithClass(this.dialogElement, 'hide');\n this.open = false;\n this.dialogElement.close();\n unlockBodyScrolling(this);\n\n const restoreFocus = this.previouslyFocused;\n this.previouslyFocused = null;\n\n if (restoreFocus?.isConnected) {\n window.setTimeout(() => {\n restoreFocus.focus({ preventScroll: true });\n }, 0);\n }\n\n this.dispatchEvent(new PkAfterHideEvent());\n this.dispatchEvent(new CustomEvent('pk-open-change', {\n detail: { open: false },\n bubbles: true,\n composed: true,\n }));\n }\n\n /** Recovery hook — clears hung modal state from overlay races. */\n forceOverlayReset(): void {\n this.open = false;\n this.yieldingToHostModal = false;\n this.clearYieldPosition();\n this.removeOpenListeners();\n\n if (this.dialogElement?.open) {\n try {\n this.dialogElement.close();\n } catch {\n /* noop */\n }\n }\n\n this.dialogElement?.classList.remove('hide', 'show', 'pulse');\n unlockBodyScrolling(this);\n }\n\n private addOpenListeners(): void {\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n registerDismissible(this);\n this.hostModalObserver?.disconnect();\n this.hostModalObserver = observeCraftHostModal(this.onHostModalPresenceChange);\n // Craft modal may already be open when this dialog mounts (rare).\n this.onHostModalPresenceChange(isCraftHostModalOpen());\n }\n\n private removeOpenListeners(): void {\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n unregisterDismissible(this);\n this.hostModalObserver?.disconnect();\n this.hostModalObserver = null;\n this.yieldingToHostModal = false;\n this.clearYieldPosition();\n }\n\n private handleDialogCancel = (event: Event): void => {\n event.preventDefault();\n\n if (!this.dialogElement.classList.contains('hide') && isTopDismissible(this)) {\n void this.requestClose('escape');\n }\n };\n\n private handleDialogClick = (event: Event): void => {\n const closeViaPath = event.composedPath().some(\n (node): node is Element =>\n node instanceof Element && node.matches('[data-dialog=\"close\"], [data-dialog-close]'),\n );\n\n if (closeViaPath) {\n event.stopPropagation();\n void this.requestClose('close-button');\n }\n };\n\n private handleDialogPointerDown = async (event: Event): Promise<void> => {\n if (event.target !== this.dialogElement) {\n return;\n }\n\n if (!this.disablePointerDismissal) {\n void this.requestClose('pointer-dismiss');\n return;\n }\n\n await animateWithClass(this.dialogElement, 'pulse');\n };\n\n private syncHasTriggerAttribute(): void {\n // Drives :host(:not([data-has-trigger])) zero-footprint layout (see styles).\n this.toggleAttribute('data-has-trigger', Boolean(this.triggerElement));\n }\n\n private onTriggerSlotChange(event: Event): void {\n const slot = event.target as HTMLSlotElement;\n const [trigger] = slot.assignedElements({ flatten: true }) as HTMLElement[];\n\n if (this.triggerElement) {\n this.triggerElement.removeEventListener('click', this.onTriggerClick);\n }\n\n this.triggerElement = trigger ?? null;\n this.syncHasTriggerAttribute();\n\n if (this.triggerElement) {\n this.triggerElement.addEventListener('click', this.onTriggerClick);\n }\n }\n\n private onTriggerClick = (event: Event): void => {\n event.preventDefault();\n this.open = true;\n };\n\n /** Re-render when footer actions are added/removed so the chrome is not shown empty. */\n private onFooterSlotChange = (): void => {\n this.requestUpdate();\n };\n\n override render() {\n const showBuiltInHeader = !this.hasCustomHeaderSlot()\n && !this.withoutHeader\n && Boolean(this.label);\n const padBody = showBuiltInHeader && !this.withoutBodyPadding;\n const hasFooter = this.querySelector(':scope > [slot=\"footer\"]') !== null;\n\n return html`\n <slot name=\"trigger\" @slotchange=${this.onTriggerSlotChange}></slot>\n <dialog\n part=\"panel\"\n class=${classMap({\n dialog: true,\n open: this.open,\n 'dialog--wide': this.size === 'wide',\n })}\n tabindex=\"-1\"\n @cancel=${this.handleDialogCancel}\n @click=${this.handleDialogClick}\n @pointerdown=${this.handleDialogPointerDown}\n >\n <slot name=\"header\">\n ${showBuiltInHeader\n ? html`\n <header part=\"header\" class=\"header\">\n <h2 part=\"title\" class=\"title\">\n <slot name=\"label\">${this.label}</slot>\n </h2>\n ${this.description\n ? html`\n <p part=\"description\" class=\"description\">\n <slot name=\"description\">${this.description}</slot>\n </p>\n `\n : html`<slot name=\"description\" hidden></slot>`}\n <button type=\"button\" class=\"close\" data-dialog=\"close\" aria-label=\"Close\">\n <span class=\"close-icon\" aria-hidden=\"true\">${unsafeSVG(CLOSE_ICON)}</span>\n </button>\n </header>\n `\n : nothing}\n </slot>\n <div\n part=\"body\"\n class=${classMap({\n body: true,\n 'body--padded': padBody,\n })}\n >\n <slot></slot>\n </div>\n ${hasFooter\n ? html`\n <footer part=\"footer\" class=\"footer\">\n <slot name=\"footer\" @slotchange=${this.onFooterSlotChange}></slot>\n </footer>\n `\n : html`<slot name=\"footer\" @slotchange=${this.onFooterSlotChange} hidden></slot>`}\n </dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-dialog': PkDialog;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAMA,IAAM,sBAAsB;AAE5B,IAAM,kBAAkB,YAAkC;CACtD,MAAM,QAAQ,iBAAiB,QAAQ;AAEvC,QAAO,MAAM,YAAY,UAClB,MAAM,eAAe,YACrB,OAAO,WAAW,MAAM,WAAW,IAAI,GAAG;;;AAIrD,SAAgB,qBAAqB,OAAmB,UAAmB;CACvE,MAAM,QAAQ,KAAK,iBAAiB,oBAAoB;AAExD,MAAK,MAAM,QAAQ,OAAO;AACtB,MAAI,EAAE,gBAAgB,aAClB;AAIJ,MAAI,KAAK,QAAQ,YAAY,CACzB;AAGJ,MAAI,eAAe,KAAK,CACpB,QAAO;;AAIf,QAAO;;;;;;AAWX,SAAgB,sBACZ,UACA,UAA+D,EAAE,EAC3C;CACtB,MAAM,MAAM,QAAQ,eAAe,IAAI;CACvC,MAAM,OAAO,QAAQ,QAAQ,IAAI;CACjC,IAAI,WAAW,qBAAqB,IAAI;CAExC,MAAM,aAAa;EACf,MAAM,OAAO,qBAAqB,IAAI;AACtC,MAAI,SAAS,SACT;AAEJ,aAAW;AACX,WAAS,KAAK;;CAGlB,MAAM,WAAW,IAAI,uBAAuB;AACxC,QAAM;GACR;AAEF,UAAS,QAAQ,MAAM;EACnB,WAAW;EACX,SAAS;EACT,YAAY;EACZ,iBAAiB;GAAC;GAAS;GAAS;GAAS;EAChD,CAAC;CAGF,MAAM,aAAa,OAAO,YAAY,MAAM,IAAI;AAEhD,QAAO,EACH,kBAAkB;AACd,WAAS,YAAY;AACrB,SAAO,cAAc,WAAW;IAEvC;;;;AChFL,IAAa,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACmBjC,IAAM,aAAa,eAAe,cAAA,MAAM;AAqBjC,IAAA,WAAA,MAAM,iBAAiB,UAAU;;;cAI7B;eAGC;qBAIM;iCAIY;uBAGV;4BAOK;cAGM;wBAMkB;2BAEG;6BAGlB;2BAE6B;kBAG6B;gCAOvD,UAA+B;AAE5D,OAAI,KAAK,oBACL;AAGJ,OAAI,MAAM,QAAQ,YAAY,KAAK,QAAQ,iBAAiB,KAAK,EAAE;AAC/D,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;AAClB,SAAK,aAAa,SAAS;;;oCAuFH,kBAAiC;AAClE,OAAI,cACA,MAAK,kBAAkB;OAEvB,MAAK,sBAAsB;;iBAyCjB;6BAsIY,UAAuB;AACjD,SAAM,gBAAgB;AAEtB,OAAI,CAAC,KAAK,cAAc,UAAU,SAAS,OAAO,IAAI,iBAAiB,KAAK,CACnE,MAAK,aAAa,SAAS;;4BAIX,UAAuB;AAMhD,OALqB,MAAM,cAAc,CAAC,MACrC,SACG,gBAAgB,WAAW,KAAK,QAAQ,+CAA6C,CAGzF,EAAc;AACd,UAAM,iBAAiB;AAClB,SAAK,aAAa,eAAe;;;iCAIZ,OAAO,UAAgC;AACrE,OAAI,MAAM,WAAW,KAAK,cACtB;AAGJ,OAAI,CAAC,KAAK,yBAAyB;AAC1B,SAAK,aAAa,kBAAkB;AACzC;;AAGJ,SAAM,iBAAiB,KAAK,eAAe,QAAQ;;yBAwB7B,UAAuB;AAC7C,SAAM,gBAAgB;AACtB,QAAK,OAAO;;kCAIyB;AACrC,QAAK,eAAe;;;;gBAlYC;;;CA8CzB,sBAAuC;AACnC,SAAO,KAAK,cAAc,6BAA2B,KAAK;;;CAiB9D,mBAA2B,KAAyE;EAChG,MAAM,KAAK,KAAK;AAChB,KAAG,MAAM,WAAW;AACpB,KAAG,MAAM,MAAM,GAAG,IAAI,IAAI;AAC1B,KAAG,MAAM,OAAO,GAAG,IAAI,KAAK;AAC5B,KAAG,MAAM,QAAQ,GAAG,IAAI,MAAM;AAC9B,KAAG,MAAM,SAAS,GAAG,IAAI,OAAO;AAChC,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,YAAY;AAErB,KAAG,MAAM,SAAS;AAClB,KAAG,gBAAgB,iBAAiB,KAAK;;CAG7C,qBAAmC;EAC/B,MAAM,KAAK,KAAK;AAChB,MAAI,CAAC,GACD;AAGJ,KAAG,MAAM,WAAW;AACpB,KAAG,MAAM,MAAM;AACf,KAAG,MAAM,OAAO;AAChB,KAAG,MAAM,QAAQ;AACjB,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,YAAY;AACrB,KAAG,MAAM,SAAS;AAClB,KAAG,gBAAgB,gBAAgB;AACnC,OAAK,WAAW;;;CAIpB,mBAAiC;AAC7B,MAAI,KAAK,uBAAuB,CAAC,KAAK,QAAQ,CAAC,KAAK,eAAe,KAC/D;EAKJ,MAAM,OAAO,KAAK,cAAc,uBAAuB;AACvD,OAAK,WAAW;GACZ,KAAK,KAAK;GACV,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GAChB;AACD,OAAK,sBAAsB;AAE3B,MAAI;AACA,QAAK,cAAc,OAAO;AAC1B,QAAK,cAAc,MAAM;AACzB,QAAK,mBAAmB,KAAK,SAAS;UAClC;AACJ,QAAK,sBAAsB;AAC3B,QAAK,oBAAoB;;;;CAKjC,uBAAqC;AACjC,MAAI,CAAC,KAAK,oBACN;AAGJ,OAAK,sBAAsB;AAC3B,OAAK,oBAAoB;AAEzB,MAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,cACpB;AAGJ,MAAI;AACA,OAAI,KAAK,cAAc,KACnB,MAAK,cAAc,OAAO;AAE9B,QAAK,cAAc,WAAW;UAC1B;;CAaZ,eAA8B;AAM1B,MAAI,KAAK,KACA,MAAK,MAAM;;CAIxB,uBAAsC;AAClC,sBAAoB,KAAK;AACzB,OAAK,qBAAqB;AAC1B,QAAM,sBAAsB;;CAGhC,QAAiB,SAA+B;AAC5C,QAAM,QAAQ,QAAQ;AAEtB,MAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,WAC9B;AAGJ,OAAK,kBAAkB;;;CAI3B,mBAAiC;AAC7B,MAAI,KAAK,QAAQ,CAAC,KAAK,cAAc,KAC5B,MAAK,MAAM;WACT,CAAC,KAAK,QAAQ,KAAK,cAAc,MAAM;AAC9C,QAAK,OAAO;AACP,QAAK,aAAa,MAAM;;;;CAOrC,MAAM,KAAK,UAA2B,OAAsB;AACxD,MAAI,KAAK,WAAW,KAAK,eAAe,KACpC;AAGJ,OAAK,UAAU;AAEf,MAAI;GACA,MAAM,YAAY,IAAI,aAAa;AAEnC,OAAI,CAAC,KAAK,cAAc,UAAU,EAAE;AAChC,SAAK,OAAO;AACZ;;AAGJ,QAAK,kBAAkB;AACvB,QAAK,oBAAoB,SAAS;AAClC,QAAK,OAAO;AACZ,QAAK,cAAc,WAAW;AAC9B,qBAAkB,KAAK;AAEvB,+BAA4B;IACxB,MAAM,iBAAiB,KAAK,cAA2B,cAAc;AAErE,QAAI,gBAAgB;AAKhB,MAJqB,eAAe,YAAY,cAC5C,kCACH,IAEgB,gBAAgB,MAAM,EAAE,eAAe,MAAM,CAAC;AAC/D;;AAGJ,SAAK,cAAc,MAAM,EAAE,eAAe,MAAM,CAAC;KACnD;AAEF,SAAM,iBAAiB,KAAK,eAAe,OAAO;AAElD,QAAK,cAAc,IAAI,YAAY,kBAAkB;IACjD,QAAQ,EAAE,MAAM,MAAM;IACtB,SAAS;IACT,UAAU;IACb,CAAC,CAAC;AACH,QAAK,cAAc,IAAI,kBAAkB,CAAC;YACpC;AACN,QAAK,UAAU;;;CAIvB,MAAM,KAAK,SAA0B,WAA0B;AAC3D,QAAM,KAAK,aAAa,OAAO;;CAGnC,cAAoB;AACX,OAAK,aAAa,eAAe;;;CAI1C,MAAM,aAAa,SAAwC,WAA0B;EAKjF,MAAM,YAAY,IAAI,YAJiB,OAAO,WAAW,WACnD,SACA,eAE0C;AAEhD,MAAI,CAAC,KAAK,cAAc,UAAU,EAAE;AAChC,QAAK,OAAO;AACZ,SAAM,iBAAiB,KAAK,eAAe,QAAQ;AACnD;;AAGJ,OAAK,qBAAqB;AAC1B,QAAM,iBAAiB,KAAK,eAAe,OAAO;AAClD,OAAK,OAAO;AACZ,OAAK,cAAc,OAAO;AAC1B,sBAAoB,KAAK;EAEzB,MAAM,eAAe,KAAK;AAC1B,OAAK,oBAAoB;AAEzB,MAAI,cAAc,YACd,QAAO,iBAAiB;AACpB,gBAAa,MAAM,EAAE,eAAe,MAAM,CAAC;KAC5C,EAAE;AAGT,OAAK,cAAc,IAAI,kBAAkB,CAAC;AAC1C,OAAK,cAAc,IAAI,YAAY,kBAAkB;GACjD,QAAQ,EAAE,MAAM,OAAO;GACvB,SAAS;GACT,UAAU;GACb,CAAC,CAAC;;;CAIP,oBAA0B;AACtB,OAAK,OAAO;AACZ,OAAK,sBAAsB;AAC3B,OAAK,oBAAoB;AACzB,OAAK,qBAAqB;AAE1B,MAAI,KAAK,eAAe,KACpB,KAAI;AACA,QAAK,cAAc,OAAO;UACtB;AAKZ,OAAK,eAAe,UAAU,OAAO,QAAQ,QAAQ,QAAQ;AAC7D,sBAAoB,KAAK;;CAG7B,mBAAiC;AAC7B,WAAS,iBAAiB,WAAW,KAAK,sBAAsB;AAChE,sBAAoB,KAAK;AACzB,OAAK,mBAAmB,YAAY;AACpC,OAAK,oBAAoB,sBAAsB,KAAK,0BAA0B;AAE9E,OAAK,0BAA0B,sBAAsB,CAAC;;CAG1D,sBAAoC;AAChC,WAAS,oBAAoB,WAAW,KAAK,sBAAsB;AACnE,wBAAsB,KAAK;AAC3B,OAAK,mBAAmB,YAAY;AACpC,OAAK,oBAAoB;AACzB,OAAK,sBAAsB;AAC3B,OAAK,oBAAoB;;CAoC7B,0BAAwC;AAEpC,OAAK,gBAAgB,oBAAoB,QAAQ,KAAK,eAAe,CAAC;;CAG1E,oBAA4B,OAAoB;EAE5C,MAAM,CAAC,WADM,MAAM,OACI,iBAAiB,EAAE,SAAS,MAAM,CAAC;AAE1D,MAAI,KAAK,eACL,MAAK,eAAe,oBAAoB,SAAS,KAAK,eAAe;AAGzE,OAAK,iBAAiB,WAAW;AACjC,OAAK,yBAAyB;AAE9B,MAAI,KAAK,eACL,MAAK,eAAe,iBAAiB,SAAS,KAAK,eAAe;;CAc1E,SAAkB;EACd,MAAM,oBAAoB,CAAC,KAAK,qBAAqB,IAC9C,CAAC,KAAK,iBACN,QAAQ,KAAK,MAAM;EAC1B,MAAM,UAAU,qBAAqB,CAAC,KAAK;EAC3C,MAAM,YAAY,KAAK,cAAc,6BAA2B,KAAK;AAErE,SAAO,IAAI;+CAC4B,KAAK,oBAAoB;;;wBAGhD,SAAS;GACb,QAAQ;GACR,MAAM,KAAK;GACX,gBAAgB,KAAK,SAAS;GACjC,CAAC,CAAC;;0BAEO,KAAK,mBAAmB;yBACzB,KAAK,kBAAkB;+BACjB,KAAK,wBAAwB;;;sBAGtC,oBACI,IAAI;;;yDAG2B,KAAK,MAAM;;kCAElC,KAAK,cACD,IAAI;;uEAE6B,KAAK,YAAY;;wCAGlD,IAAI,0CAA0C;;kFAEF,UAAU,WAAW,CAAC;;;4BAI9E,QAAQ;;;;4BAIN,SAAS;GACb,MAAM;GACN,gBAAgB;GACnB,CAAC,CAAC;;;;kBAIL,YACI,IAAI;;8DAEoC,KAAK,mBAAmB;;wBAGhE,IAAI,mCAAmC,KAAK,mBAAmB,iBAAiB;;;;;YA5bjG,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,SAAA,WAAA,QAAA,KAAA,EAAA;YAG1C,UAAU,CAAA,EAAA,SAAA,WAAA,SAAA,KAAA,EAAA;YAIV,UAAU,CAAA,EAAA,SAAA,WAAA,eAAA,KAAA,EAAA;YAIV,SAAS;CAAE,WAAW;CAA6B,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,SAAA,WAAA,2BAAA,KAAA,EAAA;YAGlF,SAAS;CAAE,WAAW;CAAkB,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,SAAA,WAAA,iBAAA,KAAA,EAAA;YAOvE,SAAS;CAAE,WAAW;CAAwB,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,SAAA,WAAA,sBAAA,KAAA,EAAA;YAG7E,SAAS,EAAE,SAAS,MAAM,CAAC,CAAA,EAAA,SAAA,WAAA,QAAA,KAAA,EAAA;YAG3B,MAAM,SAAS,CAAA,EAAA,SAAA,WAAA,iBAAA,KAAA,EAAA;YAGf,OAAO,CAAA,EAAA,SAAA,WAAA,kBAAA,KAAA,EAAA;uBAlCX,cAAc,YAAY,CAAA,EAAA,SAAA"}