@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.
Files changed (128) hide show
  1. package/dist/browser/actions/Tabs.js +3 -4
  2. package/dist/browser/actions/Tabs.js.map +1 -1
  3. package/dist/browser/actions/menu-sheet.js +2 -3
  4. package/dist/browser/actions/menu-sheet.js.map +1 -1
  5. package/dist/browser/actions/phone-sheet.js +4 -0
  6. package/dist/browser/actions/phone-sheet.js.map +1 -0
  7. package/dist/browser/content/DataTable.js +47 -51
  8. package/dist/browser/content/DataTable.js.map +1 -1
  9. package/dist/browser/feedback/dialog-core.js +5 -1
  10. package/dist/browser/feedback/dialog-core.js.map +1 -1
  11. package/dist/browser/feedback/dialog-tone.js +26 -0
  12. package/dist/browser/feedback/dialog-tone.js.map +1 -0
  13. package/dist/browser/feedback/index.js.map +1 -1
  14. package/dist/browser/feedback/prompt-confirm.js +223 -0
  15. package/dist/browser/feedback/prompt-confirm.js.map +1 -0
  16. package/dist/browser/feedback/prompts.js +195 -343
  17. package/dist/browser/feedback/prompts.js.map +1 -1
  18. package/dist/browser/inputs/ChoiceList.js +45 -17
  19. package/dist/browser/inputs/ChoiceList.js.map +1 -1
  20. package/dist/browser/inputs/DatePicker.js +1647 -334
  21. package/dist/browser/inputs/DatePicker.js.map +1 -1
  22. package/dist/browser/inputs/TextInput.js +5 -4
  23. package/dist/browser/inputs/TextInput.js.map +1 -1
  24. package/dist/browser/inputs/date-input-messages.js +128 -0
  25. package/dist/browser/inputs/date-input-messages.js.map +1 -0
  26. package/dist/browser/inputs/date-input-status.js +132 -0
  27. package/dist/browser/inputs/date-input-status.js.map +1 -0
  28. package/dist/browser/inputs/date-input.js +334 -0
  29. package/dist/browser/inputs/date-input.js.map +1 -0
  30. package/dist/browser/inputs/date-sheet.js +49 -0
  31. package/dist/browser/inputs/date-sheet.js.map +1 -0
  32. package/dist/browser/internal/reveal-in-scroller.js +28 -0
  33. package/dist/browser/internal/reveal-in-scroller.js.map +1 -0
  34. package/dist/browser/intl/messages.js +6 -0
  35. package/dist/browser/intl/messages.js.map +1 -1
  36. package/dist/browser/layout/AppWorkspace.js +536 -512
  37. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  38. package/dist/browser/layout/BottomSheet.js +3 -0
  39. package/dist/browser/layout/BottomSheet.js.map +1 -1
  40. package/dist/browser/layout/PanelDialog.js +167 -132
  41. package/dist/browser/layout/PanelDialog.js.map +1 -1
  42. package/dist/browser/layout/Settings.js +175 -139
  43. package/dist/browser/layout/Settings.js.map +1 -1
  44. package/dist/browser/layout/SettingsModal.js +2 -4
  45. package/dist/browser/layout/SettingsModal.js.map +1 -1
  46. package/dist/browser/layout/index.js.map +1 -1
  47. package/dist/browser/layout/navigation-model.js +12 -2
  48. package/dist/browser/layout/navigation-model.js.map +1 -1
  49. package/dist/browser/surfaces/StatusBadge.js +47 -14
  50. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  51. package/dist/browser/text-editor/TextEditor.js +7 -0
  52. package/dist/browser/text-editor/TextEditor.js.map +1 -1
  53. package/dist/ssr/actions/Tabs.js +3 -4
  54. package/dist/ssr/actions/Tabs.js.map +1 -1
  55. package/dist/ssr/actions/menu-sheet.js +2 -3
  56. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  57. package/dist/ssr/actions/phone-sheet.js +4 -0
  58. package/dist/ssr/actions/phone-sheet.js.map +1 -0
  59. package/dist/ssr/content/DataTable.js +1 -2
  60. package/dist/ssr/content/DataTable.js.map +1 -1
  61. package/dist/ssr/feedback/dialog-core.js +5 -1
  62. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  63. package/dist/ssr/feedback/dialog-tone.js +26 -0
  64. package/dist/ssr/feedback/dialog-tone.js.map +1 -0
  65. package/dist/ssr/feedback/index.js.map +1 -1
  66. package/dist/ssr/feedback/prompt-confirm.js +123 -0
  67. package/dist/ssr/feedback/prompt-confirm.js.map +1 -0
  68. package/dist/ssr/feedback/prompts.js +60 -132
  69. package/dist/ssr/feedback/prompts.js.map +1 -1
  70. package/dist/ssr/inputs/ChoiceList.js +29 -9
  71. package/dist/ssr/inputs/ChoiceList.js.map +1 -1
  72. package/dist/ssr/inputs/DatePicker.js +1183 -166
  73. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  74. package/dist/ssr/inputs/TextInput.js +5 -4
  75. package/dist/ssr/inputs/TextInput.js.map +1 -1
  76. package/dist/ssr/inputs/date-input-messages.js +128 -0
  77. package/dist/ssr/inputs/date-input-messages.js.map +1 -0
  78. package/dist/ssr/inputs/date-input-status.js +132 -0
  79. package/dist/ssr/inputs/date-input-status.js.map +1 -0
  80. package/dist/ssr/inputs/date-input.js +334 -0
  81. package/dist/ssr/inputs/date-input.js.map +1 -0
  82. package/dist/ssr/inputs/date-sheet.js +44 -0
  83. package/dist/ssr/inputs/date-sheet.js.map +1 -0
  84. package/dist/ssr/internal/reveal-in-scroller.js +28 -0
  85. package/dist/ssr/internal/reveal-in-scroller.js.map +1 -0
  86. package/dist/ssr/intl/messages.js +6 -0
  87. package/dist/ssr/intl/messages.js.map +1 -1
  88. package/dist/ssr/layout/AppWorkspace.js +44 -23
  89. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  90. package/dist/ssr/layout/BottomSheet.js +3 -0
  91. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  92. package/dist/ssr/layout/PanelDialog.js +48 -30
  93. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  94. package/dist/ssr/layout/Settings.js +34 -18
  95. package/dist/ssr/layout/Settings.js.map +1 -1
  96. package/dist/ssr/layout/SettingsModal.js +2 -4
  97. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  98. package/dist/ssr/layout/index.js.map +1 -1
  99. package/dist/ssr/layout/navigation-model.js +12 -2
  100. package/dist/ssr/layout/navigation-model.js.map +1 -1
  101. package/dist/ssr/surfaces/StatusBadge.js +26 -8
  102. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  103. package/dist/ssr/text-editor/TextEditor.js +7 -0
  104. package/dist/ssr/text-editor/TextEditor.js.map +1 -1
  105. package/dist/styles.css +1 -1
  106. package/dist/types/actions/menu-sheet.d.ts +1 -3
  107. package/dist/types/actions/phone-sheet.d.ts +3 -0
  108. package/dist/types/feedback/dialog-tone.d.ts +10 -0
  109. package/dist/types/feedback/index.d.ts +1 -0
  110. package/dist/types/feedback/prompt-confirm.d.ts +19 -0
  111. package/dist/types/feedback/prompts.d.ts +4 -8
  112. package/dist/types/inputs/ChoiceList.d.ts +7 -3
  113. package/dist/types/inputs/DatePicker.d.ts +13 -3
  114. package/dist/types/inputs/TextInput.d.ts +1 -1
  115. package/dist/types/inputs/date-input-messages.d.ts +64 -0
  116. package/dist/types/inputs/date-input-status.d.ts +35 -0
  117. package/dist/types/inputs/date-input.d.ts +90 -0
  118. package/dist/types/inputs/date-sheet.d.ts +14 -0
  119. package/dist/types/internal/reveal-in-scroller.d.ts +6 -0
  120. package/dist/types/intl/messages.d.ts +3 -0
  121. package/dist/types/layout/AppWorkspace.d.ts +14 -0
  122. package/dist/types/layout/BottomSheet.d.ts +3 -0
  123. package/dist/types/layout/PanelDialog.d.ts +3 -0
  124. package/dist/types/layout/Settings.d.ts +17 -1
  125. package/dist/types/layout/index.d.ts +1 -1
  126. package/dist/types/layout/navigation-model.d.ts +1 -1
  127. package/dist/types/surfaces/StatusBadge.d.ts +5 -0
  128. package/package.json +1 -1
@@ -44,6 +44,9 @@ function BottomSheetRoot(props) {
44
44
  if (!props.dismissDisabled) void props.onDismiss();
45
45
  };
46
46
  return _$createComponent(PanelDialog, {
47
+ get tone() {
48
+ return props.tone;
49
+ },
47
50
  get children() {
48
51
  return [_$createComponent(Show, {
49
52
  get when() {
@@ -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":"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","ignoreList":[]}
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":"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","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><h2></h2><!$><!/></div><!$><!/><!$><!/>`),
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(`<div class=k2b-panel-dialog__body>`),
21
- _tmpl$7 = /*#__PURE__*/_$template(`<footer class=k2b-panel-dialog__footer>`),
22
- _tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-subtitle>`),
23
- _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-copy><span class=k2b-panel-dialog__section-title></span><!$><!/>`),
24
- _tmpl$0 = /*#__PURE__*/_$template(`<i class="ti ti-eye"aria-hidden=true>`),
25
- _tmpl$1 = /*#__PURE__*/_$template(`<div>`),
26
- _tmpl$10 = /*#__PURE__*/_$template(`<p class=k2b-panel-dialog__section-subtitle>`),
27
- _tmpl$11 = /*#__PURE__*/_$template(`<i class="ti ti-eye-off"aria-hidden=true>`),
28
- _tmpl$12 = /*#__PURE__*/_$template(`<section class=k2b-panel-dialog__section><!$><!/><header><!$><!/><div><h3></h3><!$><!/></div><!$><!/><!$><!/></header><div class=k2b-panel-dialog__section-body>`),
29
- _tmpl$13 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
30
- _tmpl$14 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-icon><i aria-hidden=true>`),
31
- _tmpl$15 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog>`);
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 prompts.confirm(resolvePromptMessages().discardUnsavedChanges, {
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$9 = _el$.firstChild,
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$11 = _el$10.nextSibling,
85
- [_el$12, _co$4] = _$getNextMarker(_el$11.nextSibling);
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 props.icon;
98
+ return icon();
89
99
  },
90
100
  children: icon => (() => {
91
- var _el$13 = _$getNextElement(_tmpl$5),
92
- _el$14 = _el$13.firstChild;
93
- _$effect(() => _$className(_el$14, icon()));
94
- return _el$13;
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$0, _co$2);
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$6, _co$);
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$7 = _$getNextElement(_tmpl$2);
114
- _$insert(_el$7, () => props.actions);
115
- return _el$7;
142
+ var _el$9 = _$getNextElement(_tmpl$2);
143
+ _$insert(_el$9, () => props.actions);
144
+ return _el$9;
116
145
  }
117
- }), _el$10, _co$3);
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$8 = _$getNextElement(_tmpl$3);
124
- _$addEventListener(_el$8, "click", props.close, true);
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$8, "aria-label", _p$.e = _v$);
129
- _v$2 !== _p$.t && _$setProperty(_el$8, "disabled", _p$.t = _v$2);
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$8;
165
+ return _el$0;
137
166
  }
138
- }), _el$12, _co$4);
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$15 = _$getNextElement(_tmpl$6);
185
+ var _el$18 = _$getNextElement(_tmpl$7);
157
186
  var _ref$ = body;
158
- typeof _ref$ === "function" ? _$use(_ref$, _el$15) : body = _el$15;
159
- _$insert(_el$15, () => props.children);
187
+ typeof _ref$ === "function" ? _$use(_ref$, _el$18) : body = _el$18;
188
+ _$insert(_el$18, () => props.children);
160
189
  _$effect(_p$ => {
161
- var _v$5 = props.scrollPreserveKey,
162
- _v$6 = usePanelDialogSurface(),
163
- _v$7 = props.scrollFade !== false ? "both" : undefined;
164
- _v$5 !== _p$.e && _$setAttribute(_el$15, "data-scroll-preserve", _p$.e = _v$5);
165
- _v$6 !== _p$.t && _$setAttribute(_el$15, "data-surface", _p$.t = _v$6);
166
- _v$7 !== _p$.a && _$setAttribute(_el$15, "data-scroll-fade-mode", _p$.a = _v$7);
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$15;
202
+ return _el$18;
174
203
  })();
175
204
  };
176
205
  const PanelDialogFooter = props => (() => {
177
- var _el$16 = _$getNextElement(_tmpl$7);
178
- _$insert(_el$16, () => props.children);
179
- _$effect(() => _$setAttribute(_el$16, "data-surface", usePanelDialogSurface()));
180
- return _el$16;
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$17 = _$getNextElement(_tmpl$12),
206
- _el$40 = _el$17.firstChild,
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$25 = _el$41.nextSibling,
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$17) : section = _el$17;
222
- _$insert(_el$17, _$createComponent(Show, {
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$18 = _$getNextElement(_tmpl$1);
228
- _$insert(_el$18, _$createComponent(Button, {
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$42 = _$getNextElement(_tmpl$13);
248
- _$effect(() => _$className(_el$42, icon()));
249
- return _el$42;
276
+ var _el$45 = _$getNextElement(_tmpl$14);
277
+ _$effect(() => _$className(_el$45, icon()));
278
+ return _el$45;
250
279
  })()
251
280
  }), (() => {
252
- var _el$19 = _$getNextElement(_tmpl$9),
253
- _el$20 = _el$19.firstChild,
254
- _el$22 = _el$20.nextSibling,
255
- [_el$23, _co$5] = _$getNextMarker(_el$22.nextSibling);
256
- _$setAttribute(_el$20, "id", `${id}-closed`);
257
- _$insert(_el$20, () => props.title);
258
- _$insert(_el$19, _$createComponent(Show, {
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$21 = _$getNextElement(_tmpl$8);
264
- _$insert(_el$21, () => props.subtitle);
265
- return _el$21;
292
+ var _el$24 = _$getNextElement(_tmpl$9);
293
+ _$insert(_el$24, () => props.subtitle);
294
+ return _el$24;
266
295
  }
267
- }), _el$23, _co$5);
268
- return _el$19;
269
- })(), _$getNextElement(_tmpl$0)];
296
+ }), _el$26, _co$6);
297
+ return _el$22;
298
+ })(), _$getNextElement(_tmpl$1)];
270
299
  }
271
300
  }));
272
- _$effect(() => _$setProperty(_el$18, "hidden", open()));
273
- return _el$18;
301
+ _$effect(() => _$setProperty(_el$21, "hidden", open()));
302
+ return _el$21;
274
303
  }
275
- }), _el$41, _co$0);
276
- _$insert(_el$25, _$createComponent(Show, {
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$43 = _$getNextElement(_tmpl$14),
282
- _el$44 = _el$43.firstChild;
283
- _$effect(() => _$className(_el$44, icon()));
284
- return _el$43;
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$34, _co$7);
287
- _$setAttribute(_el$27, "id", id);
288
- _$insert(_el$27, () => props.title);
289
- _$insert(_el$26, _$createComponent(Show, {
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$28 = _$getNextElement(_tmpl$10);
295
- _$insert(_el$28, () => props.subtitle);
296
- return _el$28;
323
+ var _el$31 = _$getNextElement(_tmpl$11);
324
+ _$insert(_el$31, () => props.subtitle);
325
+ return _el$31;
297
326
  }
298
- }), _el$30, _co$6);
299
- _$insert(_el$25, _$createComponent(Show, {
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$31 = _$getNextElement(_tmpl$2);
305
- _$insert(_el$31, () => props.actions);
306
- return _el$31;
333
+ var _el$34 = _$getNextElement(_tmpl$2);
334
+ _$insert(_el$34, () => props.actions);
335
+ return _el$34;
307
336
  }
308
- }), _el$36, _co$8);
309
- _$insert(_el$25, _$createComponent(Show, {
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$11);
359
+ return _$getNextElement(_tmpl$12);
331
360
  }
332
361
  });
333
362
  }
334
- }), _el$38, _co$9);
335
- _$setAttribute(_el$39, "id", `${id}-body`);
336
- _$insert(_el$39, () => props.children);
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$8 = usePanelDialogSurface(),
339
- _v$9 = props.hideable || undefined,
340
- _v$0 = props.hideable ? open() : undefined,
341
- _v$1 = open() ? id : `${id}-closed`,
342
- _v$10 = !open(),
343
- _v$11 = !open();
344
- _v$8 !== _p$.e && _$setAttribute(_el$17, "data-surface", _p$.e = _v$8);
345
- _v$9 !== _p$.t && _$setAttribute(_el$17, "data-hideable", _p$.t = _v$9);
346
- _v$0 !== _p$.a && _$setAttribute(_el$17, "data-open", _p$.a = _v$0);
347
- _v$1 !== _p$.o && _$setAttribute(_el$17, "aria-labelledby", _p$.o = _v$1);
348
- _v$10 !== _p$.i && _$setProperty(_el$25, "hidden", _p$.i = _v$10);
349
- _v$11 !== _p$.n && _$setProperty(_el$39, "hidden", _p$.n = _v$11);
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$17;
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
- var _el$45 = _$getNextElement(_tmpl$15);
386
- _$setAttribute(_el$45, "data-surface", surface);
387
- _$insert(_el$45, () => props.children);
388
- return _el$45;
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":[]}