@k2b/ui 0.44.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/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/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/surfaces/StatusBadge.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { setProperty as _$setProperty } from "solid-js/web";
|
|
4
|
+
import { className as _$className } from "solid-js/web";
|
|
5
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
6
|
+
import { effect as _$effect } from "solid-js/web";
|
|
7
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
8
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
9
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
10
|
+
import { insert as _$insert } from "solid-js/web";
|
|
11
|
+
import { addEventListener as _$addEventListener } from "solid-js/web";
|
|
12
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
13
|
+
import { memo as _$memo } from "solid-js/web";
|
|
14
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<header class=k2b-dialog__header><!$><!/><!$><!/><!$><!/><button type=button class=k2b-dialog__close><i class="ti ti-x"aria-hidden=true>`),
|
|
15
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
16
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-sr-only data-dialog-tone-label>`),
|
|
17
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-dialog__header-spacer>`),
|
|
18
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<h2>`),
|
|
19
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-dialog__panel><!$><!/><div class=k2b-dialog__body></div><footer class=k2b-dialog__actions><button type=button class=k2b-button data-variant=secondary></button><button type=button class=k2b-button>`),
|
|
20
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<form class=k2b-dialog__panel><!$><!/><div class="k2b-dialog__body k2b-prompt-form"><div class=k2b-prompt-copy></div><!$><!/></div><footer class=k2b-dialog__actions><button type=button class=k2b-button data-variant=secondary></button><button type=submit class=k2b-button>`),
|
|
21
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<code class=k2b-confirmation-phrase>`);
|
|
22
|
+
import { createSignal, Show } from "solid-js";
|
|
23
|
+
import { TextInput } from "../inputs/TextInput";
|
|
24
|
+
import { resolveUiMessages } from "../intl/messages";
|
|
25
|
+
import { dialogCore } from "./dialog-core";
|
|
26
|
+
import { dialogToneIcon, dialogToneLabel } from "./dialog-tone";
|
|
27
|
+
import { resolvePromptMessages } from "./prompt-messages";
|
|
28
|
+
|
|
29
|
+
// The dialog frame and `prompts.confirm`, apart from the form prompts: `PanelDialog` asks before discarding changes,
|
|
30
|
+
// and the form prompts render date pickers whose phone sheet is a `PanelDialog`, so one module would be an import cycle.
|
|
31
|
+
|
|
32
|
+
const PHRASE_SLOT = "\u0000";
|
|
33
|
+
|
|
34
|
+
/** A prompt's `variant` is its tone too: a success or danger prompt carries the dialog tone of that name. */
|
|
35
|
+
export const promptTone = variant => variant === "success" || variant === "danger" ? variant : undefined;
|
|
36
|
+
export const DialogHeader = props => (() => {
|
|
37
|
+
var _el$ = _$getNextElement(_tmpl$),
|
|
38
|
+
_el$3 = _el$.firstChild,
|
|
39
|
+
[_el$4, _co$] = _$getNextMarker(_el$3.nextSibling),
|
|
40
|
+
_el$5 = _el$4.nextSibling,
|
|
41
|
+
[_el$6, _co$2] = _$getNextMarker(_el$5.nextSibling),
|
|
42
|
+
_el$7 = _el$6.nextSibling,
|
|
43
|
+
[_el$8, _co$3] = _$getNextMarker(_el$7.nextSibling),
|
|
44
|
+
_el$2 = _el$8.nextSibling;
|
|
45
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
46
|
+
get when() {
|
|
47
|
+
return _$memo(() => !!props.tone)() ? dialogToneIcon(props.tone) : props.icon;
|
|
48
|
+
},
|
|
49
|
+
children: icon => (() => {
|
|
50
|
+
var _el$9 = _$getNextElement(_tmpl$2);
|
|
51
|
+
_$effect(_p$ => {
|
|
52
|
+
var _v$ = icon(),
|
|
53
|
+
_v$2 = props.tone;
|
|
54
|
+
_v$ !== _p$.e && _$className(_el$9, _p$.e = _v$);
|
|
55
|
+
_v$2 !== _p$.t && _$setAttribute(_el$9, "data-tone", _p$.t = _v$2);
|
|
56
|
+
return _p$;
|
|
57
|
+
}, {
|
|
58
|
+
e: undefined,
|
|
59
|
+
t: undefined
|
|
60
|
+
});
|
|
61
|
+
return _el$9;
|
|
62
|
+
})()
|
|
63
|
+
}), _el$4, _co$);
|
|
64
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
65
|
+
get when() {
|
|
66
|
+
return props.tone;
|
|
67
|
+
},
|
|
68
|
+
children: tone => (() => {
|
|
69
|
+
var _el$0 = _$getNextElement(_tmpl$3);
|
|
70
|
+
_$insert(_el$0, () => dialogToneLabel(resolveUiMessages(), tone()));
|
|
71
|
+
return _el$0;
|
|
72
|
+
})()
|
|
73
|
+
}), _el$6, _co$2);
|
|
74
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
75
|
+
get when() {
|
|
76
|
+
return props.title;
|
|
77
|
+
},
|
|
78
|
+
get fallback() {
|
|
79
|
+
return _$getNextElement(_tmpl$4);
|
|
80
|
+
},
|
|
81
|
+
children: title => (() => {
|
|
82
|
+
var _el$10 = _$getNextElement(_tmpl$5);
|
|
83
|
+
_$insert(_el$10, title);
|
|
84
|
+
return _el$10;
|
|
85
|
+
})()
|
|
86
|
+
}), _el$8, _co$3);
|
|
87
|
+
_$addEventListener(_el$2, "click", props.close, true);
|
|
88
|
+
_$effect(() => _$setAttribute(_el$2, "aria-label", resolveUiMessages().closeDialog));
|
|
89
|
+
_$runHydrationEvents();
|
|
90
|
+
return _el$;
|
|
91
|
+
})();
|
|
92
|
+
export const panelClass = options => {
|
|
93
|
+
const size = options?.size ?? "medium";
|
|
94
|
+
const variant = options?.variant && options.variant !== "primary" ? ` k2b-dialog--${options.variant}` : "";
|
|
95
|
+
return `k2b-dialog k2b-dialog--${size}${variant}${options?.surface === "bare" ? " is-bare" : ""}`;
|
|
96
|
+
};
|
|
97
|
+
export const contentClass = surface => surface === "bare" ? "k2b-dialog__viewport is-bare" : "k2b-dialog__viewport";
|
|
98
|
+
export const confirmPrompt = (content, options) => {
|
|
99
|
+
const confirmationPhrase = options?.confirmationPhrase;
|
|
100
|
+
if (confirmationPhrase !== undefined && (confirmationPhrase.trim().length === 0 || /[\r\n\t]/.test(confirmationPhrase))) {
|
|
101
|
+
throw new Error("confirmationPhrase must be non-empty, visible, and single-line");
|
|
102
|
+
}
|
|
103
|
+
let confirmationInput;
|
|
104
|
+
return dialogCore.open(close => {
|
|
105
|
+
if (!confirmationPhrase) {
|
|
106
|
+
return (() => {
|
|
107
|
+
var _el$11 = _$getNextElement(_tmpl$6),
|
|
108
|
+
_el$16 = _el$11.firstChild,
|
|
109
|
+
[_el$17, _co$4] = _$getNextMarker(_el$16.nextSibling),
|
|
110
|
+
_el$12 = _el$17.nextSibling,
|
|
111
|
+
_el$13 = _el$12.nextSibling,
|
|
112
|
+
_el$14 = _el$13.firstChild,
|
|
113
|
+
_el$15 = _el$14.nextSibling;
|
|
114
|
+
_$insert(_el$11, _$createComponent(DialogHeader, {
|
|
115
|
+
get title() {
|
|
116
|
+
return options?.title;
|
|
117
|
+
},
|
|
118
|
+
get icon() {
|
|
119
|
+
return options?.icon;
|
|
120
|
+
},
|
|
121
|
+
get tone() {
|
|
122
|
+
return promptTone(options?.variant);
|
|
123
|
+
},
|
|
124
|
+
close: () => close(false)
|
|
125
|
+
}), _el$17, _co$4);
|
|
126
|
+
_$insert(_el$12, content);
|
|
127
|
+
_el$14.$$click = () => close(false);
|
|
128
|
+
_$insert(_el$14, () => options?.cancelText || resolveUiMessages().cancel);
|
|
129
|
+
_el$15.$$click = () => close(true);
|
|
130
|
+
_$insert(_el$15, () => options?.confirmText || resolvePromptMessages().confirm);
|
|
131
|
+
_$effect(() => _$setAttribute(_el$15, "data-variant", options?.variant ?? "primary"));
|
|
132
|
+
_$runHydrationEvents();
|
|
133
|
+
return _el$11;
|
|
134
|
+
})();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// The catalog owns word order; the slot marks where the verbatim phrase is rendered as code.
|
|
138
|
+
const [labelBefore, labelAfter] = resolvePromptMessages().typeToConfirm({
|
|
139
|
+
phrase: PHRASE_SLOT
|
|
140
|
+
}).split(PHRASE_SLOT);
|
|
141
|
+
const [confirmationValue, setConfirmationValue] = createSignal("");
|
|
142
|
+
const canConfirm = () => confirmationValue() === confirmationPhrase;
|
|
143
|
+
const submit = event => {
|
|
144
|
+
event.preventDefault();
|
|
145
|
+
if (canConfirm()) close(true);
|
|
146
|
+
};
|
|
147
|
+
return (() => {
|
|
148
|
+
var _el$18 = _$getNextElement(_tmpl$7),
|
|
149
|
+
_el$26 = _el$18.firstChild,
|
|
150
|
+
[_el$27, _co$6] = _$getNextMarker(_el$26.nextSibling),
|
|
151
|
+
_el$19 = _el$27.nextSibling,
|
|
152
|
+
_el$20 = _el$19.firstChild,
|
|
153
|
+
_el$21 = _el$20.nextSibling,
|
|
154
|
+
[_el$22, _co$5] = _$getNextMarker(_el$21.nextSibling),
|
|
155
|
+
_el$23 = _el$19.nextSibling,
|
|
156
|
+
_el$24 = _el$23.firstChild,
|
|
157
|
+
_el$25 = _el$24.nextSibling;
|
|
158
|
+
_el$18.addEventListener("submit", submit);
|
|
159
|
+
_$insert(_el$18, _$createComponent(DialogHeader, {
|
|
160
|
+
get title() {
|
|
161
|
+
return options?.title;
|
|
162
|
+
},
|
|
163
|
+
get icon() {
|
|
164
|
+
return options?.icon;
|
|
165
|
+
},
|
|
166
|
+
get tone() {
|
|
167
|
+
return promptTone(options?.variant);
|
|
168
|
+
},
|
|
169
|
+
close: () => close(false)
|
|
170
|
+
}), _el$27, _co$6);
|
|
171
|
+
_$insert(_el$20, content);
|
|
172
|
+
_$insert(_el$19, _$createComponent(TextInput, {
|
|
173
|
+
ref: element => {
|
|
174
|
+
confirmationInput = element;
|
|
175
|
+
},
|
|
176
|
+
get label() {
|
|
177
|
+
return [labelBefore, (() => {
|
|
178
|
+
var _el$28 = _$getNextElement(_tmpl$8);
|
|
179
|
+
_$insert(_el$28, confirmationPhrase);
|
|
180
|
+
return _el$28;
|
|
181
|
+
})(), labelAfter];
|
|
182
|
+
},
|
|
183
|
+
value: confirmationValue,
|
|
184
|
+
onValueChange: setConfirmationValue,
|
|
185
|
+
autocomplete: "off",
|
|
186
|
+
autocapitalize: "off",
|
|
187
|
+
spellcheck: false,
|
|
188
|
+
monospace: true,
|
|
189
|
+
required: true
|
|
190
|
+
}), _el$22, _co$5);
|
|
191
|
+
_el$24.$$click = () => close(false);
|
|
192
|
+
_$insert(_el$24, () => options?.cancelText || resolveUiMessages().cancel);
|
|
193
|
+
_$insert(_el$25, () => options?.confirmText || resolvePromptMessages().confirm);
|
|
194
|
+
_$effect(_p$ => {
|
|
195
|
+
var _v$3 = options?.variant ?? "primary",
|
|
196
|
+
_v$4 = !canConfirm();
|
|
197
|
+
_v$3 !== _p$.e && _$setAttribute(_el$25, "data-variant", _p$.e = _v$3);
|
|
198
|
+
_v$4 !== _p$.t && _$setProperty(_el$25, "disabled", _p$.t = _v$4);
|
|
199
|
+
return _p$;
|
|
200
|
+
}, {
|
|
201
|
+
e: undefined,
|
|
202
|
+
t: undefined
|
|
203
|
+
});
|
|
204
|
+
_$runHydrationEvents();
|
|
205
|
+
return _el$18;
|
|
206
|
+
})();
|
|
207
|
+
}, {
|
|
208
|
+
panelClassName: panelClass(options),
|
|
209
|
+
contentClassName: contentClass(options?.surface),
|
|
210
|
+
initialFocus: confirmationPhrase ? () => confirmationInput ?? null : undefined,
|
|
211
|
+
signal: options?.signal,
|
|
212
|
+
cancelBehavior: options?.cancelBehavior,
|
|
213
|
+
history: options?.history,
|
|
214
|
+
ariaLabel: options?.ariaLabel ?? options?.title ?? resolvePromptMessages().confirmation
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
/** `prompts` starts as this object; `PanelDialog` asks through it, so it reaches a replaced `prompts.confirm` too. */
|
|
219
|
+
export const sharedPrompts = {
|
|
220
|
+
confirm: confirmPrompt
|
|
221
|
+
};
|
|
222
|
+
_$delegateEvents(["click"]);
|
|
223
|
+
//# sourceMappingURL=prompt-confirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["feedback/prompt-confirm.tsx"],"sourcesContent":["import { createSignal, type JSX, Show } from \"solid-js\";\nimport { TextInput } from \"../inputs/TextInput\";\nimport { resolveUiMessages } from \"../intl/messages\";\nimport { dialogCore } from \"./dialog-core\";\nimport { type DialogTone, dialogToneIcon, dialogToneLabel } from \"./dialog-tone\";\nimport { resolvePromptMessages } from \"./prompt-messages\";\nimport type { ConfirmOptions, DialogOptions } from \"./prompts\";\n\n// The dialog frame and `prompts.confirm`, apart from the form prompts: `PanelDialog` asks before discarding changes,\n// and the form prompts render date pickers whose phone sheet is a `PanelDialog`, so one module would be an import cycle.\n\nexport type PromptContent = string | HTMLElement | JSX.Element;\n\nconst PHRASE_SLOT = \"\\u0000\";\n\n/** A prompt's `variant` is its tone too: a success or danger prompt carries the dialog tone of that name. */\nexport const promptTone = (variant: DialogOptions[\"variant\"]): DialogTone | undefined =>\n variant === \"success\" || variant === \"danger\" ? variant : undefined;\n\nexport const DialogHeader = (props: { close: () => void; title?: string; icon?: string; tone?: DialogTone }): JSX.Element => (\n <header class=\"k2b-dialog__header\">\n <Show when={props.tone ? dialogToneIcon(props.tone) : props.icon}>\n {(icon) => <i class={icon()} data-tone={props.tone} aria-hidden=\"true\" />}\n </Show>\n <Show when={props.tone}>\n {(tone) => (\n <span class=\"k2b-sr-only\" data-dialog-tone-label>\n {dialogToneLabel(resolveUiMessages(), tone())}\n </span>\n )}\n </Show>\n <Show when={props.title} fallback={<span class=\"k2b-dialog__header-spacer\" />}>\n {(title) => <h2>{title()}</h2>}\n </Show>\n <button type=\"button\" class=\"k2b-dialog__close\" aria-label={resolveUiMessages().closeDialog} onClick={props.close}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </header>\n);\n\nexport const panelClass = (options?: Pick<DialogOptions, \"size\" | \"surface\" | \"variant\">): string => {\n const size = options?.size ?? \"medium\";\n const variant = options?.variant && options.variant !== \"primary\" ? ` k2b-dialog--${options.variant}` : \"\";\n return `k2b-dialog k2b-dialog--${size}${variant}${options?.surface === \"bare\" ? \" is-bare\" : \"\"}`;\n};\n\nexport const contentClass = (surface?: DialogOptions[\"surface\"]): string =>\n surface === \"bare\" ? \"k2b-dialog__viewport is-bare\" : \"k2b-dialog__viewport\";\n\nexport const confirmPrompt = (content: PromptContent, options?: ConfirmOptions): Promise<boolean | undefined> => {\n const confirmationPhrase = options?.confirmationPhrase;\n if (confirmationPhrase !== undefined && (confirmationPhrase.trim().length === 0 || /[\\r\\n\\t]/.test(confirmationPhrase))) {\n throw new Error(\"confirmationPhrase must be non-empty, visible, and single-line\");\n }\n let confirmationInput: HTMLInputElement | undefined;\n\n return dialogCore.open<boolean>(\n (close) => {\n if (!confirmationPhrase) {\n return (\n <div class=\"k2b-dialog__panel\">\n <DialogHeader title={options?.title} icon={options?.icon} tone={promptTone(options?.variant)} close={() => close(false)} />\n <div class=\"k2b-dialog__body\">{content}</div>\n <footer class=\"k2b-dialog__actions\">\n <button type=\"button\" class=\"k2b-button\" data-variant=\"secondary\" onClick={() => close(false)}>\n {options?.cancelText || resolveUiMessages().cancel}\n </button>\n <button type=\"button\" class=\"k2b-button\" data-variant={options?.variant ?? \"primary\"} onClick={() => close(true)}>\n {options?.confirmText || resolvePromptMessages().confirm}\n </button>\n </footer>\n </div>\n );\n }\n\n // The catalog owns word order; the slot marks where the verbatim phrase is rendered as code.\n const [labelBefore, labelAfter] = resolvePromptMessages().typeToConfirm({ phrase: PHRASE_SLOT }).split(PHRASE_SLOT);\n const [confirmationValue, setConfirmationValue] = createSignal(\"\");\n const canConfirm = () => confirmationValue() === confirmationPhrase;\n const submit = (event: SubmitEvent) => {\n event.preventDefault();\n if (canConfirm()) close(true);\n };\n\n return (\n <form class=\"k2b-dialog__panel\" onSubmit={submit}>\n <DialogHeader title={options?.title} icon={options?.icon} tone={promptTone(options?.variant)} close={() => close(false)} />\n <div class=\"k2b-dialog__body k2b-prompt-form\">\n <div class=\"k2b-prompt-copy\">{content}</div>\n <TextInput\n ref={(element) => {\n confirmationInput = element;\n }}\n label={\n <>\n {labelBefore}\n <code class=\"k2b-confirmation-phrase\">{confirmationPhrase}</code>\n {labelAfter}\n </>\n }\n value={confirmationValue}\n onValueChange={setConfirmationValue}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck={false}\n monospace\n required\n />\n </div>\n <footer class=\"k2b-dialog__actions\">\n <button type=\"button\" class=\"k2b-button\" data-variant=\"secondary\" onClick={() => close(false)}>\n {options?.cancelText || resolveUiMessages().cancel}\n </button>\n <button type=\"submit\" class=\"k2b-button\" data-variant={options?.variant ?? \"primary\"} disabled={!canConfirm()}>\n {options?.confirmText || resolvePromptMessages().confirm}\n </button>\n </footer>\n </form>\n );\n },\n {\n panelClassName: panelClass(options),\n contentClassName: contentClass(options?.surface),\n initialFocus: confirmationPhrase ? () => confirmationInput ?? null : undefined,\n signal: options?.signal,\n cancelBehavior: options?.cancelBehavior,\n history: options?.history,\n ariaLabel: options?.ariaLabel ?? options?.title ?? resolvePromptMessages().confirmation,\n },\n );\n};\n\n/** `prompts` starts as this object; `PanelDialog` asks through it, so it reaches a replaced `prompts.confirm` too. */\nexport const sharedPrompts = { confirm: confirmPrompt };\n"],"mappings":"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","ignoreList":[]}
|