@k2b/ui 0.43.0 → 0.45.0
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/dist/browser/actions/Tabs.js +3 -4
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/menu-sheet.js +2 -3
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/actions/phone-sheet.js +4 -0
- package/dist/browser/actions/phone-sheet.js.map +1 -0
- package/dist/browser/content/DataTable.js +47 -51
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +5 -1
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/dialog-tone.js +26 -0
- package/dist/browser/feedback/dialog-tone.js.map +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompt-confirm.js +223 -0
- package/dist/browser/feedback/prompt-confirm.js.map +1 -0
- package/dist/browser/feedback/prompts.js +195 -343
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/ChoiceList.js +45 -17
- package/dist/browser/inputs/ChoiceList.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +1647 -334
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +5 -4
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/date-input-messages.js +128 -0
- package/dist/browser/inputs/date-input-messages.js.map +1 -0
- package/dist/browser/inputs/date-input-status.js +132 -0
- package/dist/browser/inputs/date-input-status.js.map +1 -0
- package/dist/browser/inputs/date-input.js +334 -0
- package/dist/browser/inputs/date-input.js.map +1 -0
- package/dist/browser/inputs/date-sheet.js +49 -0
- package/dist/browser/inputs/date-sheet.js.map +1 -0
- package/dist/browser/internal/reveal-in-scroller.js +28 -0
- package/dist/browser/internal/reveal-in-scroller.js.map +1 -0
- package/dist/browser/intl/messages.js +6 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +536 -512
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +3 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +167 -132
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/Settings.js +175 -139
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +2 -4
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +12 -2
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js +47 -14
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +7 -0
- package/dist/browser/text-editor/TextEditor.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +3 -4
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/menu-sheet.js +2 -3
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/actions/phone-sheet.js +4 -0
- package/dist/ssr/actions/phone-sheet.js.map +1 -0
- package/dist/ssr/content/DataTable.js +1 -2
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +5 -1
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/dialog-tone.js +26 -0
- package/dist/ssr/feedback/dialog-tone.js.map +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompt-confirm.js +123 -0
- package/dist/ssr/feedback/prompt-confirm.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +60 -132
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/ChoiceList.js +29 -9
- package/dist/ssr/inputs/ChoiceList.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +1183 -166
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +5 -4
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/date-input-messages.js +128 -0
- package/dist/ssr/inputs/date-input-messages.js.map +1 -0
- package/dist/ssr/inputs/date-input-status.js +132 -0
- package/dist/ssr/inputs/date-input-status.js.map +1 -0
- package/dist/ssr/inputs/date-input.js +334 -0
- package/dist/ssr/inputs/date-input.js.map +1 -0
- package/dist/ssr/inputs/date-sheet.js +44 -0
- package/dist/ssr/inputs/date-sheet.js.map +1 -0
- package/dist/ssr/internal/reveal-in-scroller.js +28 -0
- package/dist/ssr/internal/reveal-in-scroller.js.map +1 -0
- package/dist/ssr/intl/messages.js +6 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +44 -23
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +3 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +48 -30
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/Settings.js +34 -18
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +2 -4
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +12 -2
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js +26 -8
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +7 -0
- package/dist/ssr/text-editor/TextEditor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/menu-sheet.d.ts +1 -3
- package/dist/types/actions/phone-sheet.d.ts +3 -0
- package/dist/types/feedback/dialog-tone.d.ts +10 -0
- package/dist/types/feedback/index.d.ts +1 -0
- package/dist/types/feedback/prompt-confirm.d.ts +19 -0
- package/dist/types/feedback/prompts.d.ts +4 -8
- package/dist/types/inputs/ChoiceList.d.ts +7 -3
- package/dist/types/inputs/DatePicker.d.ts +13 -3
- package/dist/types/inputs/TextInput.d.ts +1 -1
- package/dist/types/inputs/date-input-messages.d.ts +64 -0
- package/dist/types/inputs/date-input-status.d.ts +35 -0
- package/dist/types/inputs/date-input.d.ts +90 -0
- package/dist/types/inputs/date-sheet.d.ts +14 -0
- package/dist/types/internal/reveal-in-scroller.d.ts +6 -0
- package/dist/types/intl/messages.d.ts +3 -0
- package/dist/types/layout/AppWorkspace.d.ts +14 -0
- package/dist/types/layout/BottomSheet.d.ts +3 -0
- package/dist/types/layout/PanelDialog.d.ts +3 -0
- package/dist/types/layout/Settings.d.ts +17 -1
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/layout/navigation-model.d.ts +1 -1
- package/dist/types/surfaces/StatusBadge.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/BottomSheet.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useUiMessages } from \"../intl/messages\";\nimport PanelDialog from \"./PanelDialog\";\n\n/** Initial focus goes to the first input of the top sheet, otherwise to the\n * dialog element itself. Native `showModal()` focuses the first focusable\n * descendant, which is the drag handle; iOS shows a ring for that programmatic\n * focus, so the sheet moves it to the ring-less dialog before the next paint. */\nconst sheetInitialFocus = (dialog: HTMLDialogElement): HTMLElement => {\n const input = dialog.lastElementChild?.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])\",\n );\n if (input) return input;\n dialog.tabIndex = -1;\n return dialog;\n};\n\nexport const bottomSheetOptions = {\n panelClassName: \"k2b-dialog k2b-bottom-sheet-frame\",\n contentClassName: \"k2b-panel-dialog-viewport k2b-bottom-sheet-viewport\",\n initialFocus: sheetInitialFocus,\n} satisfies OpenDialogOptions;\n\n/** A sheet on phones and a centered dialog from 48rem up, for decisions and forms; menus keep\n * `bottomSheetOptions`. The stylesheet picks the mode with the phone media query, so the first\n * frame is already right and a rotation or resize switches it in place, without a remount. */\nexport const bottomSheetAdaptiveOptions = {\n ...bottomSheetOptions,\n panelClassName: `${bottomSheetOptions.panelClassName} is-adaptive`,\n} satisfies OpenDialogOptions;\n\nexport type BottomSheetProps = {\n children: JSX.Element;\n /** Pass dialogCore's render context requestDismiss, never the completion callback. */\n onDismiss: () => void | Promise<void>;\n dismissDisabled?: boolean;\n dismissLabel?: string;\n handle?: boolean;\n};\n\nfunction BottomSheetRoot(props: BottomSheetProps) {\n const messages = useUiMessages();\n let pointer: { id: number; y: number; releaseTextSelection: () => void } | undefined;\n let suppressClick = false;\n const dismiss = () => {\n if (!props.dismissDisabled) void props.onDismiss();\n };\n return (\n <PanelDialog>\n <Show when={props.handle !== false}>\n <button\n type=\"button\"\n class=\"k2b-bottom-sheet__handle\"\n aria-label={props.dismissLabel ?? messages().close}\n disabled={props.dismissDisabled}\n onPointerDown={(event) => {\n if (!event.isPrimary || event.button !== 0 || props.dismissDisabled) return;\n suppressClick = false;\n pointer = { id: event.pointerId, y: event.clientY, releaseTextSelection: suppressTextSelection(event.pointerId) };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerUp={(event) => {\n if (pointer?.id !== event.pointerId) return;\n const distance = event.clientY - pointer.y;\n pointer.releaseTextSelection();\n pointer = undefined;\n // A drag must not turn into a second dismiss request through click.\n suppressClick = Math.abs(distance) > 8;\n if (distance > 60) dismiss();\n }}\n onPointerCancel={() => {\n pointer?.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }}\n onLostPointerCapture={() => {\n if (pointer) {\n pointer.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }\n }}\n onClick={(event) => {\n if (event.detail !== 0 && suppressClick) {\n suppressClick = false;\n return;\n }\n dismiss();\n }}\n >\n <span aria-hidden=\"true\" />\n </button>\n </Show>\n {props.children}\n </PanelDialog>\n );\n}\n\n/** Bottom-edge presentation; dialogCore continues to own all modal state. */\nconst BottomSheet = Object.assign(BottomSheetRoot, {\n Header: PanelDialog.Header,\n Body: PanelDialog.Body,\n Footer: PanelDialog.Footer,\n Section: PanelDialog.Section,\n Tabs: PanelDialog.Tabs,\n});\nexport default BottomSheet;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/BottomSheet.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport type { DialogTone } from \"../feedback/dialog-tone\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useUiMessages } from \"../intl/messages\";\nimport PanelDialog from \"./PanelDialog\";\n\n/** Initial focus goes to the first input of the top sheet, otherwise to the\n * dialog element itself. Native `showModal()` focuses the first focusable\n * descendant, which is the drag handle; iOS shows a ring for that programmatic\n * focus, so the sheet moves it to the ring-less dialog before the next paint. */\nconst sheetInitialFocus = (dialog: HTMLDialogElement): HTMLElement => {\n const input = dialog.lastElementChild?.querySelector<HTMLElement>(\n \"input:not([type='hidden']):not([disabled]), textarea:not([disabled]), select:not([disabled]), [role='combobox']:not([disabled]):not([aria-disabled='true'])\",\n );\n if (input) return input;\n dialog.tabIndex = -1;\n return dialog;\n};\n\nexport const bottomSheetOptions = {\n panelClassName: \"k2b-dialog k2b-bottom-sheet-frame\",\n contentClassName: \"k2b-panel-dialog-viewport k2b-bottom-sheet-viewport\",\n initialFocus: sheetInitialFocus,\n} satisfies OpenDialogOptions;\n\n/** A sheet on phones and a centered dialog from 48rem up, for decisions and forms; menus keep\n * `bottomSheetOptions`. The stylesheet picks the mode with the phone media query, so the first\n * frame is already right and a rotation or resize switches it in place, without a remount. */\nexport const bottomSheetAdaptiveOptions = {\n ...bottomSheetOptions,\n panelClassName: `${bottomSheetOptions.panelClassName} is-adaptive`,\n} satisfies OpenDialogOptions;\n\nexport type BottomSheetProps = {\n children: JSX.Element;\n /** Pass dialogCore's render context requestDismiss, never the completion callback. */\n onDismiss: () => void | Promise<void>;\n dismissDisabled?: boolean;\n dismissLabel?: string;\n handle?: boolean;\n /** See `PanelDialog`'s `tone`. */\n tone?: DialogTone;\n};\n\nfunction BottomSheetRoot(props: BottomSheetProps) {\n const messages = useUiMessages();\n let pointer: { id: number; y: number; releaseTextSelection: () => void } | undefined;\n let suppressClick = false;\n const dismiss = () => {\n if (!props.dismissDisabled) void props.onDismiss();\n };\n return (\n <PanelDialog tone={props.tone}>\n <Show when={props.handle !== false}>\n <button\n type=\"button\"\n class=\"k2b-bottom-sheet__handle\"\n aria-label={props.dismissLabel ?? messages().close}\n disabled={props.dismissDisabled}\n onPointerDown={(event) => {\n if (!event.isPrimary || event.button !== 0 || props.dismissDisabled) return;\n suppressClick = false;\n pointer = { id: event.pointerId, y: event.clientY, releaseTextSelection: suppressTextSelection(event.pointerId) };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerUp={(event) => {\n if (pointer?.id !== event.pointerId) return;\n const distance = event.clientY - pointer.y;\n pointer.releaseTextSelection();\n pointer = undefined;\n // A drag must not turn into a second dismiss request through click.\n suppressClick = Math.abs(distance) > 8;\n if (distance > 60) dismiss();\n }}\n onPointerCancel={() => {\n pointer?.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }}\n onLostPointerCapture={() => {\n if (pointer) {\n pointer.releaseTextSelection();\n pointer = undefined;\n suppressClick = true;\n }\n }}\n onClick={(event) => {\n if (event.detail !== 0 && suppressClick) {\n suppressClick = false;\n return;\n }\n dismiss();\n }}\n >\n <span aria-hidden=\"true\" />\n </button>\n </Show>\n {props.children}\n </PanelDialog>\n );\n}\n\n/** Bottom-edge presentation; dialogCore continues to own all modal state. */\nconst BottomSheet = Object.assign(BottomSheetRoot, {\n Header: PanelDialog.Header,\n Body: PanelDialog.Body,\n Footer: PanelDialog.Footer,\n Section: PanelDialog.Section,\n Tabs: PanelDialog.Tabs,\n});\nexport default BottomSheet;\n"],"mappings":";;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AAGzC,SAAS,qBAAqB,QAAQ,4BAA4B;AAClE,SAAS,aAAa,QAAQ,kBAAkB;AAChD,OAAO,WAAW,MAAM,eAAe;;AAEvC;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAI,MAAyB,IAAkB;EACpE,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAClD,6JACF,CAAC;EACD,IAAI,KAAK,EAAE,OAAO,KAAK;EACvB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;EACpB,OAAO,MAAM;AACf,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG;EAChC,cAAc,EAAE,mCAAmC;EACnD,gBAAgB,EAAE,qDAAqD;EACvE,YAAY,EAAE;AAChB,CAA6B;;AAE7B;AACA;AACA;AACA,OAAO,MAAM,0BAA0B,GAAG;EACxC,GAAG,kBAAkB;EACrB,cAAc,EAAE,GAAG,kBAAkB,CAAC,cAAc;AACtD,CAA6B;AAa7B,SAAS,eAAe,CAAC,KAAuB,EAAE;EAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,IAAI,OAAgF;EACpF,IAAI,aAAa,GAAG,KAAK;EACzB,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;EACpD,CAAC;EACD,yBACG,WAAW;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA;MAAA,0BAC1B,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,MAAM,KAAK,KAAK;QAAA;QAAA;UAAA;UAAA,eAiCpB,KAAK,IAAK;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,EAAE;cACvC,aAAa,GAAG,KAAK;cACrB;YACF;YACA,OAAO,CAAC,CAAC;UACX,CAAC;UAAA,4CAbqB,MAAM;YAC1B,IAAI,OAAO,EAAE;cACX,OAAO,CAAC,oBAAoB,CAAC,CAAC;cAC9B,OAAO,GAAG,SAAS;cACnB,aAAa,GAAG,IAAI;YACtB;UACF,CAAC;UAAA,uCAXgB,MAAM;YACrB,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAC/B,OAAO,GAAG,SAAS;YACnB,aAAa,GAAG,IAAI;UACtB,CAAC;UAAA,mBAba,KAAK,IAAK;YACtB,IAAI,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,SAAS,EAAE;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO,GAAG,SAAS;YACnB;YACA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtC,IAAI,QAAQ,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;UAC9B,CAAC;UAAA,qBAde,KAAK,IAAK;YACxB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,EAAE;YACrE,aAAa,GAAG,KAAK;YACrB,OAAO,GAAG;cAAE,EAAE,EAAE,KAAK,CAAC,SAAS;cAAE,CAAC,EAAE,KAAK,CAAC,OAAO;cAAE,oBAAoB,EAAE,qBAAqB,CAAC,KAAK,CAAC,SAAS;YAAE,CAAC;YACjH,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;UACxD,CAAC;UAAA;YAAA,UAPW,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK;cAAA,OACxC,KAAK,CAAC,eAAe;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;UAAA;UAAA;QAAA;MAAA,iBAuClC,KAAK,CAAC,QAAQ;IAAA;EAAA;AAGrB;;AAEA;AACA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;EACjD,MAAM,EAAE,WAAW,CAAC,MAAM;EAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;EACtB,MAAM,EAAE,WAAW,CAAC,MAAM;EAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;EAC5B,IAAI,EAAE,WAAW,CAAC;AACpB,CAAC,CAAC;AACF,eAAe,WAAW;AAAC","ignoreList":[]}
|
|
@@ -15,30 +15,33 @@ import { createComponent as _$createComponent } from "solid-js/web";
|
|
|
15
15
|
var _tmpl$ = /*#__PURE__*/_$template(`<p>`),
|
|
16
16
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog__actions>`),
|
|
17
17
|
_tmpl$3 = /*#__PURE__*/_$template(`<button type=button class=k2b-dialog__close><i class="ti ti-x"aria-hidden=true>`),
|
|
18
|
-
_tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-panel-dialog__header><!$><!/><div class=k2b-panel-dialog__heading
|
|
18
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-panel-dialog__header><!$><!/><div class=k2b-panel-dialog__heading><!$><!/><h2></h2><!$><!/></div><!$><!/><!$><!/>`),
|
|
19
19
|
_tmpl$5 = /*#__PURE__*/_$template(`<span class="k2b-panel-dialog__icon k2b-icon-tile"aria-hidden=true><i>`),
|
|
20
|
-
_tmpl$6 = /*#__PURE__*/_$template(`<
|
|
21
|
-
_tmpl$7 = /*#__PURE__*/_$template(`<
|
|
22
|
-
_tmpl$8 = /*#__PURE__*/_$template(`<
|
|
23
|
-
_tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-
|
|
24
|
-
_tmpl$0 = /*#__PURE__*/_$template(`<
|
|
25
|
-
_tmpl$1 = /*#__PURE__*/_$template(`<
|
|
26
|
-
_tmpl$10 = /*#__PURE__*/_$template(`<
|
|
27
|
-
_tmpl$11 = /*#__PURE__*/_$template(`<
|
|
28
|
-
_tmpl$12 = /*#__PURE__*/_$template(`<
|
|
29
|
-
_tmpl$13 = /*#__PURE__*/_$template(`<
|
|
30
|
-
_tmpl$14 = /*#__PURE__*/_$template(`<
|
|
31
|
-
_tmpl$15 = /*#__PURE__*/_$template(`<
|
|
20
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-sr-only data-dialog-tone-label>`),
|
|
21
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog__body>`),
|
|
22
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<footer class=k2b-panel-dialog__footer>`),
|
|
23
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-subtitle>`),
|
|
24
|
+
_tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-copy><span class=k2b-panel-dialog__section-title></span><!$><!/>`),
|
|
25
|
+
_tmpl$1 = /*#__PURE__*/_$template(`<i class="ti ti-eye"aria-hidden=true>`),
|
|
26
|
+
_tmpl$10 = /*#__PURE__*/_$template(`<div>`),
|
|
27
|
+
_tmpl$11 = /*#__PURE__*/_$template(`<p class=k2b-panel-dialog__section-subtitle>`),
|
|
28
|
+
_tmpl$12 = /*#__PURE__*/_$template(`<i class="ti ti-eye-off"aria-hidden=true>`),
|
|
29
|
+
_tmpl$13 = /*#__PURE__*/_$template(`<section class=k2b-panel-dialog__section><!$><!/><header><!$><!/><div><h3></h3><!$><!/></div><!$><!/><!$><!/></header><div class=k2b-panel-dialog__section-body>`),
|
|
30
|
+
_tmpl$14 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
31
|
+
_tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-icon><i aria-hidden=true>`),
|
|
32
|
+
_tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog>`);
|
|
32
33
|
import { createContext, createEffect, createSignal, createUniqueId, Show, useContext } from "solid-js";
|
|
33
34
|
import { Button } from "../actions/Button";
|
|
34
35
|
import { Tabs } from "../actions/Tabs";
|
|
36
|
+
import { dialogToneIcon, dialogToneLabel } from "../feedback/dialog-tone";
|
|
37
|
+
import { sharedPrompts } from "../feedback/prompt-confirm";
|
|
35
38
|
import { resolvePromptMessages } from "../feedback/prompt-messages";
|
|
36
|
-
import { prompts } from "../feedback/prompts";
|
|
37
39
|
import { useUiMessages } from "../intl/messages";
|
|
38
40
|
import { usePanelDialogMessages } from "./panel-dialog-messages";
|
|
39
41
|
import { createScrollFade } from "./scroll-fade";
|
|
40
42
|
const PanelDialogSurfaceContext = createContext("contained");
|
|
41
43
|
const usePanelDialogSurface = () => useContext(PanelDialogSurfaceContext);
|
|
44
|
+
const PanelDialogToneContext = createContext(() => undefined);
|
|
42
45
|
const panelDialogBasePanelClass = "k2b-dialog k2b-panel-dialog-frame";
|
|
43
46
|
export const panelDialogPanelClass = `${panelDialogBasePanelClass} is-standard`;
|
|
44
47
|
export const panelDialogOptions = {
|
|
@@ -63,7 +66,7 @@ export const panelDialogWorkspaceOptions = {
|
|
|
63
66
|
export const confirmDiscardIfDirty = async dirty => {
|
|
64
67
|
const hasChanges = typeof dirty === "function" ? dirty() : dirty;
|
|
65
68
|
if (!hasChanges) return true;
|
|
66
|
-
return Boolean(await
|
|
69
|
+
return Boolean(await sharedPrompts.confirm(resolvePromptMessages().discardUnsavedChanges, {
|
|
67
70
|
title: resolvePromptMessages().unsavedChangesTitle,
|
|
68
71
|
variant: "danger",
|
|
69
72
|
confirmText: resolvePromptMessages().discard
|
|
@@ -71,29 +74,55 @@ export const confirmDiscardIfDirty = async dirty => {
|
|
|
71
74
|
};
|
|
72
75
|
const PanelDialogHeader = props => {
|
|
73
76
|
const messages = useUiMessages();
|
|
77
|
+
const tone = useContext(PanelDialogToneContext);
|
|
78
|
+
const icon = () => {
|
|
79
|
+
const value = tone();
|
|
80
|
+
return value ? dialogToneIcon(value) : props.icon;
|
|
81
|
+
};
|
|
74
82
|
return (() => {
|
|
75
83
|
var _el$ = _$getNextElement(_tmpl$4),
|
|
76
|
-
_el$
|
|
77
|
-
[_el$0, _co$2] = _$getNextMarker(_el$9.nextSibling),
|
|
78
|
-
_el$2 = _el$0.nextSibling,
|
|
79
|
-
_el$3 = _el$2.firstChild,
|
|
80
|
-
_el$5 = _el$3.nextSibling,
|
|
81
|
-
[_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
|
|
82
|
-
_el$1 = _el$2.nextSibling,
|
|
84
|
+
_el$1 = _el$.firstChild,
|
|
83
85
|
[_el$10, _co$3] = _$getNextMarker(_el$1.nextSibling),
|
|
84
|
-
_el$
|
|
85
|
-
|
|
86
|
+
_el$2 = _el$10.nextSibling,
|
|
87
|
+
_el$5 = _el$2.firstChild,
|
|
88
|
+
[_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
|
|
89
|
+
_el$3 = _el$6.nextSibling,
|
|
90
|
+
_el$7 = _el$3.nextSibling,
|
|
91
|
+
[_el$8, _co$2] = _$getNextMarker(_el$7.nextSibling),
|
|
92
|
+
_el$11 = _el$2.nextSibling,
|
|
93
|
+
[_el$12, _co$4] = _$getNextMarker(_el$11.nextSibling),
|
|
94
|
+
_el$13 = _el$12.nextSibling,
|
|
95
|
+
[_el$14, _co$5] = _$getNextMarker(_el$13.nextSibling);
|
|
86
96
|
_$insert(_el$, _$createComponent(Show, {
|
|
87
97
|
get when() {
|
|
88
|
-
return
|
|
98
|
+
return icon();
|
|
89
99
|
},
|
|
90
100
|
children: icon => (() => {
|
|
91
|
-
var _el$
|
|
92
|
-
_el$
|
|
93
|
-
_$effect(
|
|
94
|
-
|
|
101
|
+
var _el$15 = _$getNextElement(_tmpl$5),
|
|
102
|
+
_el$16 = _el$15.firstChild;
|
|
103
|
+
_$effect(_p$ => {
|
|
104
|
+
var _v$5 = tone(),
|
|
105
|
+
_v$6 = icon();
|
|
106
|
+
_v$5 !== _p$.e && _$setAttribute(_el$15, "data-tone", _p$.e = _v$5);
|
|
107
|
+
_v$6 !== _p$.t && _$className(_el$16, _p$.t = _v$6);
|
|
108
|
+
return _p$;
|
|
109
|
+
}, {
|
|
110
|
+
e: undefined,
|
|
111
|
+
t: undefined
|
|
112
|
+
});
|
|
113
|
+
return _el$15;
|
|
114
|
+
})()
|
|
115
|
+
}), _el$10, _co$3);
|
|
116
|
+
_$insert(_el$2, _$createComponent(Show, {
|
|
117
|
+
get when() {
|
|
118
|
+
return tone();
|
|
119
|
+
},
|
|
120
|
+
children: value => (() => {
|
|
121
|
+
var _el$17 = _$getNextElement(_tmpl$6);
|
|
122
|
+
_$insert(_el$17, () => dialogToneLabel(messages(), value()));
|
|
123
|
+
return _el$17;
|
|
95
124
|
})()
|
|
96
|
-
}), _el$
|
|
125
|
+
}), _el$6, _co$);
|
|
97
126
|
_$insert(_el$3, () => props.title);
|
|
98
127
|
_$insert(_el$2, _$createComponent(Show, {
|
|
99
128
|
get when() {
|
|
@@ -104,38 +133,38 @@ const PanelDialogHeader = props => {
|
|
|
104
133
|
_$insert(_el$4, () => props.subtitle);
|
|
105
134
|
return _el$4;
|
|
106
135
|
}
|
|
107
|
-
}), _el$
|
|
136
|
+
}), _el$8, _co$2);
|
|
108
137
|
_$insert(_el$, _$createComponent(Show, {
|
|
109
138
|
get when() {
|
|
110
139
|
return props.actions;
|
|
111
140
|
},
|
|
112
141
|
get children() {
|
|
113
|
-
var _el$
|
|
114
|
-
_$insert(_el$
|
|
115
|
-
return _el$
|
|
142
|
+
var _el$9 = _$getNextElement(_tmpl$2);
|
|
143
|
+
_$insert(_el$9, () => props.actions);
|
|
144
|
+
return _el$9;
|
|
116
145
|
}
|
|
117
|
-
}), _el$
|
|
146
|
+
}), _el$12, _co$4);
|
|
118
147
|
_$insert(_el$, _$createComponent(Show, {
|
|
119
148
|
get when() {
|
|
120
149
|
return props.close;
|
|
121
150
|
},
|
|
122
151
|
get children() {
|
|
123
|
-
var _el$
|
|
124
|
-
_$addEventListener(_el$
|
|
152
|
+
var _el$0 = _$getNextElement(_tmpl$3);
|
|
153
|
+
_$addEventListener(_el$0, "click", props.close, true);
|
|
125
154
|
_$effect(_p$ => {
|
|
126
155
|
var _v$ = props.closeLabel ?? messages().closeDialog,
|
|
127
156
|
_v$2 = props.closeDisabled;
|
|
128
|
-
_v$ !== _p$.e && _$setAttribute(_el$
|
|
129
|
-
_v$2 !== _p$.t && _$setProperty(_el$
|
|
157
|
+
_v$ !== _p$.e && _$setAttribute(_el$0, "aria-label", _p$.e = _v$);
|
|
158
|
+
_v$2 !== _p$.t && _$setProperty(_el$0, "disabled", _p$.t = _v$2);
|
|
130
159
|
return _p$;
|
|
131
160
|
}, {
|
|
132
161
|
e: undefined,
|
|
133
162
|
t: undefined
|
|
134
163
|
});
|
|
135
164
|
_$runHydrationEvents();
|
|
136
|
-
return _el$
|
|
165
|
+
return _el$0;
|
|
137
166
|
}
|
|
138
|
-
}), _el$
|
|
167
|
+
}), _el$14, _co$5);
|
|
139
168
|
_$effect(_p$ => {
|
|
140
169
|
var _v$3 = usePanelDialogSurface(),
|
|
141
170
|
_v$4 = Boolean(props.subtitle);
|
|
@@ -153,31 +182,31 @@ const PanelDialogBody = props => {
|
|
|
153
182
|
let body;
|
|
154
183
|
createScrollFade(() => body, () => props.scrollFade !== false);
|
|
155
184
|
return (() => {
|
|
156
|
-
var _el$
|
|
185
|
+
var _el$18 = _$getNextElement(_tmpl$7);
|
|
157
186
|
var _ref$ = body;
|
|
158
|
-
typeof _ref$ === "function" ? _$use(_ref$, _el$
|
|
159
|
-
_$insert(_el$
|
|
187
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$18) : body = _el$18;
|
|
188
|
+
_$insert(_el$18, () => props.children);
|
|
160
189
|
_$effect(_p$ => {
|
|
161
|
-
var _v$
|
|
162
|
-
_v$
|
|
163
|
-
_v$
|
|
164
|
-
_v$
|
|
165
|
-
_v$
|
|
166
|
-
_v$
|
|
190
|
+
var _v$7 = props.scrollPreserveKey,
|
|
191
|
+
_v$8 = usePanelDialogSurface(),
|
|
192
|
+
_v$9 = props.scrollFade !== false ? "both" : undefined;
|
|
193
|
+
_v$7 !== _p$.e && _$setAttribute(_el$18, "data-scroll-preserve", _p$.e = _v$7);
|
|
194
|
+
_v$8 !== _p$.t && _$setAttribute(_el$18, "data-surface", _p$.t = _v$8);
|
|
195
|
+
_v$9 !== _p$.a && _$setAttribute(_el$18, "data-scroll-fade-mode", _p$.a = _v$9);
|
|
167
196
|
return _p$;
|
|
168
197
|
}, {
|
|
169
198
|
e: undefined,
|
|
170
199
|
t: undefined,
|
|
171
200
|
a: undefined
|
|
172
201
|
});
|
|
173
|
-
return _el$
|
|
202
|
+
return _el$18;
|
|
174
203
|
})();
|
|
175
204
|
};
|
|
176
205
|
const PanelDialogFooter = props => (() => {
|
|
177
|
-
var _el$
|
|
178
|
-
_$insert(_el$
|
|
179
|
-
_$effect(() => _$setAttribute(_el$
|
|
180
|
-
return _el$
|
|
206
|
+
var _el$19 = _$getNextElement(_tmpl$8);
|
|
207
|
+
_$insert(_el$19, () => props.children);
|
|
208
|
+
_$effect(() => _$setAttribute(_el$19, "data-surface", usePanelDialogSurface()));
|
|
209
|
+
return _el$19;
|
|
181
210
|
})();
|
|
182
211
|
const PanelDialogSection = props => {
|
|
183
212
|
const id = `k2b-panel-dialog-section-${createUniqueId()}`;
|
|
@@ -202,30 +231,30 @@ const PanelDialogSection = props => {
|
|
|
202
231
|
});
|
|
203
232
|
});
|
|
204
233
|
return (() => {
|
|
205
|
-
var _el$
|
|
206
|
-
_el$
|
|
234
|
+
var _el$20 = _$getNextElement(_tmpl$13),
|
|
235
|
+
_el$43 = _el$20.firstChild,
|
|
236
|
+
[_el$44, _co$1] = _$getNextMarker(_el$43.nextSibling),
|
|
237
|
+
_el$28 = _el$44.nextSibling,
|
|
238
|
+
_el$36 = _el$28.firstChild,
|
|
239
|
+
[_el$37, _co$8] = _$getNextMarker(_el$36.nextSibling),
|
|
240
|
+
_el$29 = _el$37.nextSibling,
|
|
241
|
+
_el$30 = _el$29.firstChild,
|
|
242
|
+
_el$32 = _el$30.nextSibling,
|
|
243
|
+
[_el$33, _co$7] = _$getNextMarker(_el$32.nextSibling),
|
|
244
|
+
_el$38 = _el$29.nextSibling,
|
|
245
|
+
[_el$39, _co$9] = _$getNextMarker(_el$38.nextSibling),
|
|
246
|
+
_el$40 = _el$39.nextSibling,
|
|
207
247
|
[_el$41, _co$0] = _$getNextMarker(_el$40.nextSibling),
|
|
208
|
-
_el$
|
|
209
|
-
_el$33 = _el$25.firstChild,
|
|
210
|
-
[_el$34, _co$7] = _$getNextMarker(_el$33.nextSibling),
|
|
211
|
-
_el$26 = _el$34.nextSibling,
|
|
212
|
-
_el$27 = _el$26.firstChild,
|
|
213
|
-
_el$29 = _el$27.nextSibling,
|
|
214
|
-
[_el$30, _co$6] = _$getNextMarker(_el$29.nextSibling),
|
|
215
|
-
_el$35 = _el$26.nextSibling,
|
|
216
|
-
[_el$36, _co$8] = _$getNextMarker(_el$35.nextSibling),
|
|
217
|
-
_el$37 = _el$36.nextSibling,
|
|
218
|
-
[_el$38, _co$9] = _$getNextMarker(_el$37.nextSibling),
|
|
219
|
-
_el$39 = _el$25.nextSibling;
|
|
248
|
+
_el$42 = _el$28.nextSibling;
|
|
220
249
|
var _ref$2 = section;
|
|
221
|
-
typeof _ref$2 === "function" ? _$use(_ref$2, _el$
|
|
222
|
-
_$insert(_el$
|
|
250
|
+
typeof _ref$2 === "function" ? _$use(_ref$2, _el$20) : section = _el$20;
|
|
251
|
+
_$insert(_el$20, _$createComponent(Show, {
|
|
223
252
|
get when() {
|
|
224
253
|
return props.hideable;
|
|
225
254
|
},
|
|
226
255
|
get children() {
|
|
227
|
-
var _el$
|
|
228
|
-
_$insert(_el$
|
|
256
|
+
var _el$21 = _$getNextElement(_tmpl$10);
|
|
257
|
+
_$insert(_el$21, _$createComponent(Button, {
|
|
229
258
|
ref(r$) {
|
|
230
259
|
var _ref$3 = expand;
|
|
231
260
|
typeof _ref$3 === "function" ? _ref$3(r$) : expand = r$;
|
|
@@ -244,69 +273,69 @@ const PanelDialogSection = props => {
|
|
|
244
273
|
return props.icon;
|
|
245
274
|
},
|
|
246
275
|
children: icon => (() => {
|
|
247
|
-
var _el$
|
|
248
|
-
_$effect(() => _$className(_el$
|
|
249
|
-
return _el$
|
|
276
|
+
var _el$45 = _$getNextElement(_tmpl$14);
|
|
277
|
+
_$effect(() => _$className(_el$45, icon()));
|
|
278
|
+
return _el$45;
|
|
250
279
|
})()
|
|
251
280
|
}), (() => {
|
|
252
|
-
var _el$
|
|
253
|
-
_el$
|
|
254
|
-
_el$
|
|
255
|
-
[_el$
|
|
256
|
-
_$setAttribute(_el$
|
|
257
|
-
_$insert(_el$
|
|
258
|
-
_$insert(_el$
|
|
281
|
+
var _el$22 = _$getNextElement(_tmpl$0),
|
|
282
|
+
_el$23 = _el$22.firstChild,
|
|
283
|
+
_el$25 = _el$23.nextSibling,
|
|
284
|
+
[_el$26, _co$6] = _$getNextMarker(_el$25.nextSibling);
|
|
285
|
+
_$setAttribute(_el$23, "id", `${id}-closed`);
|
|
286
|
+
_$insert(_el$23, () => props.title);
|
|
287
|
+
_$insert(_el$22, _$createComponent(Show, {
|
|
259
288
|
get when() {
|
|
260
289
|
return props.subtitle;
|
|
261
290
|
},
|
|
262
291
|
get children() {
|
|
263
|
-
var _el$
|
|
264
|
-
_$insert(_el$
|
|
265
|
-
return _el$
|
|
292
|
+
var _el$24 = _$getNextElement(_tmpl$9);
|
|
293
|
+
_$insert(_el$24, () => props.subtitle);
|
|
294
|
+
return _el$24;
|
|
266
295
|
}
|
|
267
|
-
}), _el$
|
|
268
|
-
return _el$
|
|
269
|
-
})(), _$getNextElement(_tmpl$
|
|
296
|
+
}), _el$26, _co$6);
|
|
297
|
+
return _el$22;
|
|
298
|
+
})(), _$getNextElement(_tmpl$1)];
|
|
270
299
|
}
|
|
271
300
|
}));
|
|
272
|
-
_$effect(() => _$setProperty(_el$
|
|
273
|
-
return _el$
|
|
301
|
+
_$effect(() => _$setProperty(_el$21, "hidden", open()));
|
|
302
|
+
return _el$21;
|
|
274
303
|
}
|
|
275
|
-
}), _el$
|
|
276
|
-
_$insert(_el$
|
|
304
|
+
}), _el$44, _co$1);
|
|
305
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
277
306
|
get when() {
|
|
278
307
|
return props.icon;
|
|
279
308
|
},
|
|
280
309
|
children: icon => (() => {
|
|
281
|
-
var _el$
|
|
282
|
-
_el$
|
|
283
|
-
_$effect(() => _$className(_el$
|
|
284
|
-
return _el$
|
|
310
|
+
var _el$46 = _$getNextElement(_tmpl$15),
|
|
311
|
+
_el$47 = _el$46.firstChild;
|
|
312
|
+
_$effect(() => _$className(_el$47, icon()));
|
|
313
|
+
return _el$46;
|
|
285
314
|
})()
|
|
286
|
-
}), _el$
|
|
287
|
-
_$setAttribute(_el$
|
|
288
|
-
_$insert(_el$
|
|
289
|
-
_$insert(_el$
|
|
315
|
+
}), _el$37, _co$8);
|
|
316
|
+
_$setAttribute(_el$30, "id", id);
|
|
317
|
+
_$insert(_el$30, () => props.title);
|
|
318
|
+
_$insert(_el$29, _$createComponent(Show, {
|
|
290
319
|
get when() {
|
|
291
320
|
return props.subtitle;
|
|
292
321
|
},
|
|
293
322
|
get children() {
|
|
294
|
-
var _el$
|
|
295
|
-
_$insert(_el$
|
|
296
|
-
return _el$
|
|
323
|
+
var _el$31 = _$getNextElement(_tmpl$11);
|
|
324
|
+
_$insert(_el$31, () => props.subtitle);
|
|
325
|
+
return _el$31;
|
|
297
326
|
}
|
|
298
|
-
}), _el$
|
|
299
|
-
_$insert(_el$
|
|
327
|
+
}), _el$33, _co$7);
|
|
328
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
300
329
|
get when() {
|
|
301
330
|
return props.actions;
|
|
302
331
|
},
|
|
303
332
|
get children() {
|
|
304
|
-
var _el$
|
|
305
|
-
_$insert(_el$
|
|
306
|
-
return _el$
|
|
333
|
+
var _el$34 = _$getNextElement(_tmpl$2);
|
|
334
|
+
_$insert(_el$34, () => props.actions);
|
|
335
|
+
return _el$34;
|
|
307
336
|
}
|
|
308
|
-
}), _el$
|
|
309
|
-
_$insert(_el$
|
|
337
|
+
}), _el$39, _co$9);
|
|
338
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
310
339
|
get when() {
|
|
311
340
|
return props.hideable;
|
|
312
341
|
},
|
|
@@ -327,26 +356,26 @@ const PanelDialogSection = props => {
|
|
|
327
356
|
"aria-controls": `${id}-body`,
|
|
328
357
|
onClick: () => toggle(false),
|
|
329
358
|
get children() {
|
|
330
|
-
return _$getNextElement(_tmpl$
|
|
359
|
+
return _$getNextElement(_tmpl$12);
|
|
331
360
|
}
|
|
332
361
|
});
|
|
333
362
|
}
|
|
334
|
-
}), _el$
|
|
335
|
-
_$setAttribute(_el$
|
|
336
|
-
_$insert(_el$
|
|
363
|
+
}), _el$41, _co$0);
|
|
364
|
+
_$setAttribute(_el$42, "id", `${id}-body`);
|
|
365
|
+
_$insert(_el$42, () => props.children);
|
|
337
366
|
_$effect(_p$ => {
|
|
338
|
-
var _v$
|
|
339
|
-
_v$
|
|
340
|
-
_v$
|
|
341
|
-
_v$
|
|
342
|
-
_v$
|
|
343
|
-
_v$
|
|
344
|
-
_v$
|
|
345
|
-
_v$
|
|
346
|
-
_v$
|
|
347
|
-
_v$
|
|
348
|
-
_v$
|
|
349
|
-
_v$
|
|
367
|
+
var _v$0 = usePanelDialogSurface(),
|
|
368
|
+
_v$1 = props.hideable || undefined,
|
|
369
|
+
_v$10 = props.hideable ? open() : undefined,
|
|
370
|
+
_v$11 = open() ? id : `${id}-closed`,
|
|
371
|
+
_v$12 = !open(),
|
|
372
|
+
_v$13 = !open();
|
|
373
|
+
_v$0 !== _p$.e && _$setAttribute(_el$20, "data-surface", _p$.e = _v$0);
|
|
374
|
+
_v$1 !== _p$.t && _$setAttribute(_el$20, "data-hideable", _p$.t = _v$1);
|
|
375
|
+
_v$10 !== _p$.a && _$setAttribute(_el$20, "data-open", _p$.a = _v$10);
|
|
376
|
+
_v$11 !== _p$.o && _$setAttribute(_el$20, "aria-labelledby", _p$.o = _v$11);
|
|
377
|
+
_v$12 !== _p$.i && _$setProperty(_el$28, "hidden", _p$.i = _v$12);
|
|
378
|
+
_v$13 !== _p$.n && _$setProperty(_el$42, "hidden", _p$.n = _v$13);
|
|
350
379
|
return _p$;
|
|
351
380
|
}, {
|
|
352
381
|
e: undefined,
|
|
@@ -356,7 +385,7 @@ const PanelDialogSection = props => {
|
|
|
356
385
|
i: undefined,
|
|
357
386
|
n: undefined
|
|
358
387
|
});
|
|
359
|
-
return _el$
|
|
388
|
+
return _el$20;
|
|
360
389
|
})();
|
|
361
390
|
};
|
|
362
391
|
const PanelDialogTabs = props => {
|
|
@@ -382,10 +411,16 @@ const PanelDialog = props => {
|
|
|
382
411
|
return _$createComponent(PanelDialogSurfaceContext.Provider, {
|
|
383
412
|
value: surface,
|
|
384
413
|
get children() {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
414
|
+
return _$createComponent(PanelDialogToneContext.Provider, {
|
|
415
|
+
value: () => props.tone,
|
|
416
|
+
get children() {
|
|
417
|
+
var _el$48 = _$getNextElement(_tmpl$16);
|
|
418
|
+
_$setAttribute(_el$48, "data-surface", surface);
|
|
419
|
+
_$insert(_el$48, () => props.children);
|
|
420
|
+
_$effect(() => _$setAttribute(_el$48, "data-tone", props.tone));
|
|
421
|
+
return _el$48;
|
|
422
|
+
}
|
|
423
|
+
});
|
|
389
424
|
}
|
|
390
425
|
});
|
|
391
426
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/PanelDialog.tsx"],"sourcesContent":["import { createContext, createEffect, createSignal, createUniqueId, type JSX, Show, useContext } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { Tabs } from \"../actions/Tabs\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport { resolvePromptMessages } from \"../feedback/prompt-messages\";\nimport { prompts } from \"../feedback/prompts\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { usePanelDialogMessages } from \"./panel-dialog-messages\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type PanelDialogSurface = \"contained\" | \"floating\";\n\nexport type PanelDialogProps = {\n children: JSX.Element;\n surface?: PanelDialogSurface;\n};\n\nexport type PanelDialogHeaderProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n close?: () => void;\n closeDisabled?: boolean;\n closeLabel?: string;\n};\n\nexport type PanelDialogBodyProps = {\n children: JSX.Element;\n scrollPreserveKey?: string;\n scrollFade?: boolean;\n};\n\nexport type PanelDialogFooterProps = {\n children: JSX.Element;\n};\n\nexport type PanelDialogSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n} & (\n | { hideable?: false; open?: never; defaultOpen?: never; onOpenChange?: never; disabled?: never }\n | { hideable: true; open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; disabled?: boolean }\n);\n\nexport type PanelDialogTabOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type PanelDialogTabsProps<T extends string = string> = {\n options: readonly PanelDialogTabOption<T>[];\n value: T | (() => T);\n onValueChange: (value: T) => void;\n ariaLabel?: string;\n label?: string;\n};\n\ntype PanelDialogComponent = ((props: PanelDialogProps) => JSX.Element) & {\n Header: (props: PanelDialogHeaderProps) => JSX.Element;\n Body: (props: PanelDialogBodyProps) => JSX.Element;\n Footer: (props: PanelDialogFooterProps) => JSX.Element;\n Section: (props: PanelDialogSectionProps) => JSX.Element;\n Tabs: <T extends string>(props: PanelDialogTabsProps<T>) => JSX.Element;\n};\n\nconst PanelDialogSurfaceContext = createContext<PanelDialogSurface>(\"contained\");\nconst usePanelDialogSurface = () => useContext(PanelDialogSurfaceContext);\n\nconst panelDialogBasePanelClass = \"k2b-dialog k2b-panel-dialog-frame\";\n\nexport const panelDialogPanelClass = `${panelDialogBasePanelClass} is-standard`;\nexport const panelDialogOptions = {\n panelClassName: panelDialogPanelClass,\n contentClassName: \"k2b-panel-dialog-viewport\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogWidePanelClass = `${panelDialogBasePanelClass} is-wide`;\nexport const panelDialogWideOptions = {\n panelClassName: panelDialogWidePanelClass,\n contentClassName: \"k2b-panel-dialog-viewport\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogFixedPanelClass = `${panelDialogBasePanelClass} is-fixed`;\nexport const panelDialogFixedOptions = {\n panelClassName: panelDialogFixedPanelClass,\n contentClassName: \"k2b-panel-dialog-viewport is-fixed\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogWorkspacePanelClass = `${panelDialogBasePanelClass} is-workspace`;\nexport const panelDialogWorkspaceOptions = {\n panelClassName: panelDialogWorkspacePanelClass,\n contentClassName: \"k2b-panel-dialog-viewport is-workspace\",\n} satisfies OpenDialogOptions;\n\nexport const confirmDiscardIfDirty = async (dirty: boolean | (() => boolean)): Promise<boolean> => {\n const hasChanges = typeof dirty === \"function\" ? dirty() : dirty;\n if (!hasChanges) return true;\n return Boolean(\n await prompts.confirm(resolvePromptMessages().discardUnsavedChanges, {\n title: resolvePromptMessages().unsavedChangesTitle,\n variant: \"danger\",\n confirmText: resolvePromptMessages().discard,\n }),\n );\n};\n\nconst PanelDialogHeader = (props: PanelDialogHeaderProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <header class=\"k2b-panel-dialog__header\" data-surface={usePanelDialogSurface()} data-has-subtitle={Boolean(props.subtitle)}>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-panel-dialog__icon k2b-icon-tile\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Show>\n <div class=\"k2b-panel-dialog__heading\">\n <h2>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-panel-dialog__actions\">{props.actions}</div>\n </Show>\n <Show when={props.close}>\n <button\n type=\"button\"\n class=\"k2b-dialog__close\"\n aria-label={props.closeLabel ?? messages().closeDialog}\n disabled={props.closeDisabled}\n onClick={props.close}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </header>\n );\n};\n\nconst PanelDialogBody = (props: PanelDialogBodyProps): JSX.Element => {\n let body: HTMLDivElement | undefined;\n createScrollFade(\n () => body,\n () => props.scrollFade !== false,\n );\n return (\n <div\n ref={body}\n class=\"k2b-panel-dialog__body\"\n data-scroll-preserve={props.scrollPreserveKey}\n data-surface={usePanelDialogSurface()}\n data-scroll-fade-mode={props.scrollFade !== false ? \"both\" : undefined}\n >\n {props.children}\n </div>\n );\n};\n\nconst PanelDialogFooter = (props: PanelDialogFooterProps): JSX.Element => (\n <footer class=\"k2b-panel-dialog__footer\" data-surface={usePanelDialogSurface()}>\n {props.children}\n </footer>\n);\n\nconst PanelDialogSection = (props: PanelDialogSectionProps): JSX.Element => {\n const id = `k2b-panel-dialog-section-${createUniqueId()}`;\n const [internalOpen, setInternalOpen] = createSignal(props.defaultOpen ?? false);\n const open = () => !props.hideable || (props.open ?? internalOpen());\n let section: HTMLElement | undefined;\n let expand: HTMLButtonElement | undefined;\n let collapse: HTMLButtonElement | undefined;\n const toggle = (next: boolean) => {\n if (props.disabled) return;\n if (props.open === undefined) setInternalOpen(next);\n props.onOpenChange?.(next);\n };\n createEffect(() => {\n if (!props.hideable) return;\n const expanded = open();\n queueMicrotask(() => {\n if (expanded !== open()) return;\n const active = section?.ownerDocument.activeElement;\n if (expanded && active === expand) collapse?.focus();\n if (!expanded && active && active !== expand && section?.contains(active)) expand?.focus();\n });\n });\n\n return (\n <section\n ref={section}\n class=\"k2b-panel-dialog__section\"\n data-surface={usePanelDialogSurface()}\n data-hideable={props.hideable || undefined}\n data-open={props.hideable ? open() : undefined}\n aria-labelledby={open() ? id : `${id}-closed`}\n >\n <Show when={props.hideable}>\n <div hidden={open()}>\n <Button\n ref={expand}\n variant=\"ghost\"\n class=\"k2b-panel-dialog__section-summary\"\n disabled={props.disabled}\n aria-expanded={false}\n aria-controls={`${id}-body`}\n onClick={() => toggle(true)}\n >\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span class=\"k2b-panel-dialog__section-copy\">\n <span id={`${id}-closed`} class=\"k2b-panel-dialog__section-title\">\n {props.title}\n </span>\n <Show when={props.subtitle}>\n <span class=\"k2b-panel-dialog__section-subtitle\">{props.subtitle}</span>\n </Show>\n </span>\n <i class=\"ti ti-eye\" aria-hidden=\"true\" />\n </Button>\n </div>\n </Show>\n <header hidden={!open()}>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-panel-dialog__section-icon\">\n <i class={icon()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.subtitle}>\n <p class=\"k2b-panel-dialog__section-subtitle\">{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-panel-dialog__actions\">{props.actions}</div>\n </Show>\n <Show when={props.hideable}>\n <Button\n ref={collapse}\n variant=\"ghost\"\n size=\"sm\"\n class=\"k2b-icon-button\"\n disabled={props.disabled}\n aria-labelledby={id}\n aria-expanded={true}\n aria-controls={`${id}-body`}\n onClick={() => toggle(false)}\n >\n <i class=\"ti ti-eye-off\" aria-hidden=\"true\" />\n </Button>\n </Show>\n </header>\n <div id={`${id}-body`} class=\"k2b-panel-dialog__section-body\" hidden={!open()}>\n {props.children}\n </div>\n </section>\n );\n};\n\nconst PanelDialogTabs = <T extends string>(props: PanelDialogTabsProps<T>): JSX.Element => {\n const panelDialogMessages = usePanelDialogMessages();\n return (\n <Tabs\n class=\"k2b-panel-dialog__tabs\"\n value={props.value}\n onValueChange={props.onValueChange}\n ariaLabel={props.ariaLabel ?? props.label ?? panelDialogMessages().dialogTabs}\n options={props.options}\n />\n );\n};\n\nconst PanelDialog = ((props: PanelDialogProps): JSX.Element => {\n const surface = props.surface ?? \"contained\";\n return (\n <PanelDialogSurfaceContext.Provider value={surface}>\n <div class=\"k2b-panel-dialog\" data-surface={surface}>\n {props.children}\n </div>\n </PanelDialogSurfaceContext.Provider>\n );\n}) as PanelDialogComponent;\n\nPanelDialog.Header = PanelDialogHeader;\nPanelDialog.Body = PanelDialogBody;\nPanelDialog.Footer = PanelDialogFooter;\nPanelDialog.Section = PanelDialogSection;\nPanelDialog.Tabs = PanelDialogTabs;\n\nexport default PanelDialog;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/PanelDialog.tsx"],"sourcesContent":["import { createContext, createEffect, createSignal, createUniqueId, type JSX, Show, useContext } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { Tabs } from \"../actions/Tabs\";\nimport type { OpenDialogOptions } from \"../feedback/dialog-core\";\nimport { type DialogTone, dialogToneIcon, dialogToneLabel } from \"../feedback/dialog-tone\";\nimport { sharedPrompts } from \"../feedback/prompt-confirm\";\nimport { resolvePromptMessages } from \"../feedback/prompt-messages\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { usePanelDialogMessages } from \"./panel-dialog-messages\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type PanelDialogSurface = \"contained\" | \"floating\";\n\nexport type PanelDialogProps = {\n children: JSX.Element;\n surface?: PanelDialogSurface;\n /** A 2 px edge in the tone's colour inside the dialog frame; the header shows the tone's icon instead of its own. */\n tone?: DialogTone;\n};\n\nexport type PanelDialogHeaderProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n close?: () => void;\n closeDisabled?: boolean;\n closeLabel?: string;\n};\n\nexport type PanelDialogBodyProps = {\n children: JSX.Element;\n scrollPreserveKey?: string;\n scrollFade?: boolean;\n};\n\nexport type PanelDialogFooterProps = {\n children: JSX.Element;\n};\n\nexport type PanelDialogSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n} & (\n | { hideable?: false; open?: never; defaultOpen?: never; onOpenChange?: never; disabled?: never }\n | { hideable: true; open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; disabled?: boolean }\n);\n\nexport type PanelDialogTabOption<T extends string = string> = {\n value: T;\n label: JSX.Element;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type PanelDialogTabsProps<T extends string = string> = {\n options: readonly PanelDialogTabOption<T>[];\n value: T | (() => T);\n onValueChange: (value: T) => void;\n ariaLabel?: string;\n label?: string;\n};\n\ntype PanelDialogComponent = ((props: PanelDialogProps) => JSX.Element) & {\n Header: (props: PanelDialogHeaderProps) => JSX.Element;\n Body: (props: PanelDialogBodyProps) => JSX.Element;\n Footer: (props: PanelDialogFooterProps) => JSX.Element;\n Section: (props: PanelDialogSectionProps) => JSX.Element;\n Tabs: <T extends string>(props: PanelDialogTabsProps<T>) => JSX.Element;\n};\n\nconst PanelDialogSurfaceContext = createContext<PanelDialogSurface>(\"contained\");\nconst usePanelDialogSurface = () => useContext(PanelDialogSurfaceContext);\nconst PanelDialogToneContext = createContext<() => DialogTone | undefined>(() => undefined);\n\nconst panelDialogBasePanelClass = \"k2b-dialog k2b-panel-dialog-frame\";\n\nexport const panelDialogPanelClass = `${panelDialogBasePanelClass} is-standard`;\nexport const panelDialogOptions = {\n panelClassName: panelDialogPanelClass,\n contentClassName: \"k2b-panel-dialog-viewport\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogWidePanelClass = `${panelDialogBasePanelClass} is-wide`;\nexport const panelDialogWideOptions = {\n panelClassName: panelDialogWidePanelClass,\n contentClassName: \"k2b-panel-dialog-viewport\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogFixedPanelClass = `${panelDialogBasePanelClass} is-fixed`;\nexport const panelDialogFixedOptions = {\n panelClassName: panelDialogFixedPanelClass,\n contentClassName: \"k2b-panel-dialog-viewport is-fixed\",\n} satisfies OpenDialogOptions;\n\nexport const panelDialogWorkspacePanelClass = `${panelDialogBasePanelClass} is-workspace`;\nexport const panelDialogWorkspaceOptions = {\n panelClassName: panelDialogWorkspacePanelClass,\n contentClassName: \"k2b-panel-dialog-viewport is-workspace\",\n} satisfies OpenDialogOptions;\n\nexport const confirmDiscardIfDirty = async (dirty: boolean | (() => boolean)): Promise<boolean> => {\n const hasChanges = typeof dirty === \"function\" ? dirty() : dirty;\n if (!hasChanges) return true;\n return Boolean(\n await sharedPrompts.confirm(resolvePromptMessages().discardUnsavedChanges, {\n title: resolvePromptMessages().unsavedChangesTitle,\n variant: \"danger\",\n confirmText: resolvePromptMessages().discard,\n }),\n );\n};\n\nconst PanelDialogHeader = (props: PanelDialogHeaderProps): JSX.Element => {\n const messages = useUiMessages();\n const tone = useContext(PanelDialogToneContext);\n const icon = () => {\n const value = tone();\n return value ? dialogToneIcon(value) : props.icon;\n };\n return (\n <header class=\"k2b-panel-dialog__header\" data-surface={usePanelDialogSurface()} data-has-subtitle={Boolean(props.subtitle)}>\n <Show when={icon()}>\n {(icon) => (\n <span class=\"k2b-panel-dialog__icon k2b-icon-tile\" data-tone={tone()} aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Show>\n <div class=\"k2b-panel-dialog__heading\">\n <Show when={tone()}>\n {(value) => (\n <span class=\"k2b-sr-only\" data-dialog-tone-label>\n {dialogToneLabel(messages(), value())}\n </span>\n )}\n </Show>\n <h2>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-panel-dialog__actions\">{props.actions}</div>\n </Show>\n <Show when={props.close}>\n <button\n type=\"button\"\n class=\"k2b-dialog__close\"\n aria-label={props.closeLabel ?? messages().closeDialog}\n disabled={props.closeDisabled}\n onClick={props.close}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </header>\n );\n};\n\nconst PanelDialogBody = (props: PanelDialogBodyProps): JSX.Element => {\n let body: HTMLDivElement | undefined;\n createScrollFade(\n () => body,\n () => props.scrollFade !== false,\n );\n return (\n <div\n ref={body}\n class=\"k2b-panel-dialog__body\"\n data-scroll-preserve={props.scrollPreserveKey}\n data-surface={usePanelDialogSurface()}\n data-scroll-fade-mode={props.scrollFade !== false ? \"both\" : undefined}\n >\n {props.children}\n </div>\n );\n};\n\nconst PanelDialogFooter = (props: PanelDialogFooterProps): JSX.Element => (\n <footer class=\"k2b-panel-dialog__footer\" data-surface={usePanelDialogSurface()}>\n {props.children}\n </footer>\n);\n\nconst PanelDialogSection = (props: PanelDialogSectionProps): JSX.Element => {\n const id = `k2b-panel-dialog-section-${createUniqueId()}`;\n const [internalOpen, setInternalOpen] = createSignal(props.defaultOpen ?? false);\n const open = () => !props.hideable || (props.open ?? internalOpen());\n let section: HTMLElement | undefined;\n let expand: HTMLButtonElement | undefined;\n let collapse: HTMLButtonElement | undefined;\n const toggle = (next: boolean) => {\n if (props.disabled) return;\n if (props.open === undefined) setInternalOpen(next);\n props.onOpenChange?.(next);\n };\n createEffect(() => {\n if (!props.hideable) return;\n const expanded = open();\n queueMicrotask(() => {\n if (expanded !== open()) return;\n const active = section?.ownerDocument.activeElement;\n if (expanded && active === expand) collapse?.focus();\n if (!expanded && active && active !== expand && section?.contains(active)) expand?.focus();\n });\n });\n\n return (\n <section\n ref={section}\n class=\"k2b-panel-dialog__section\"\n data-surface={usePanelDialogSurface()}\n data-hideable={props.hideable || undefined}\n data-open={props.hideable ? open() : undefined}\n aria-labelledby={open() ? id : `${id}-closed`}\n >\n <Show when={props.hideable}>\n <div hidden={open()}>\n <Button\n ref={expand}\n variant=\"ghost\"\n class=\"k2b-panel-dialog__section-summary\"\n disabled={props.disabled}\n aria-expanded={false}\n aria-controls={`${id}-body`}\n onClick={() => toggle(true)}\n >\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span class=\"k2b-panel-dialog__section-copy\">\n <span id={`${id}-closed`} class=\"k2b-panel-dialog__section-title\">\n {props.title}\n </span>\n <Show when={props.subtitle}>\n <span class=\"k2b-panel-dialog__section-subtitle\">{props.subtitle}</span>\n </Show>\n </span>\n <i class=\"ti ti-eye\" aria-hidden=\"true\" />\n </Button>\n </div>\n </Show>\n <header hidden={!open()}>\n <Show when={props.icon}>\n {(icon) => (\n <span class=\"k2b-panel-dialog__section-icon\">\n <i class={icon()} aria-hidden=\"true\" />\n </span>\n )}\n </Show>\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.subtitle}>\n <p class=\"k2b-panel-dialog__section-subtitle\">{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-panel-dialog__actions\">{props.actions}</div>\n </Show>\n <Show when={props.hideable}>\n <Button\n ref={collapse}\n variant=\"ghost\"\n size=\"sm\"\n class=\"k2b-icon-button\"\n disabled={props.disabled}\n aria-labelledby={id}\n aria-expanded={true}\n aria-controls={`${id}-body`}\n onClick={() => toggle(false)}\n >\n <i class=\"ti ti-eye-off\" aria-hidden=\"true\" />\n </Button>\n </Show>\n </header>\n <div id={`${id}-body`} class=\"k2b-panel-dialog__section-body\" hidden={!open()}>\n {props.children}\n </div>\n </section>\n );\n};\n\nconst PanelDialogTabs = <T extends string>(props: PanelDialogTabsProps<T>): JSX.Element => {\n const panelDialogMessages = usePanelDialogMessages();\n return (\n <Tabs\n class=\"k2b-panel-dialog__tabs\"\n value={props.value}\n onValueChange={props.onValueChange}\n ariaLabel={props.ariaLabel ?? props.label ?? panelDialogMessages().dialogTabs}\n options={props.options}\n />\n );\n};\n\nconst PanelDialog = ((props: PanelDialogProps): JSX.Element => {\n const surface = props.surface ?? \"contained\";\n return (\n <PanelDialogSurfaceContext.Provider value={surface}>\n <PanelDialogToneContext.Provider value={() => props.tone}>\n <div class=\"k2b-panel-dialog\" data-surface={surface} data-tone={props.tone}>\n {props.children}\n </div>\n </PanelDialogToneContext.Provider>\n </PanelDialogSurfaceContext.Provider>\n );\n}) as PanelDialogComponent;\n\nPanelDialog.Header = PanelDialogHeader;\nPanelDialog.Body = PanelDialogBody;\nPanelDialog.Footer = PanelDialogFooter;\nPanelDialog.Section = PanelDialogSection;\nPanelDialog.Tabs = PanelDialogTabs;\n\nexport default PanelDialog;\n"],"mappings":"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","ignoreList":[]}
|