kanto-ds 1.7.0 → 1.8.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 (100) hide show
  1. package/README.md +15 -10
  2. package/dist/cdn/kanto.min.js +887 -234
  3. package/dist/chunks/{index-TWJzttLX.js → index-BEWmAE0T.js} +21 -7
  4. package/dist/chunks/index-BEWmAE0T.js.map +1 -0
  5. package/dist/chunks/{kt-calendar-CtwOby1R.js → kt-calendar-D72xa8qr.js} +3 -3
  6. package/dist/chunks/{kt-calendar-CtwOby1R.js.map → kt-calendar-D72xa8qr.js.map} +1 -1
  7. package/dist/chunks/{kt-element-T0VbIBNp.js → kt-element-COgh6Yr1.js} +2 -2
  8. package/dist/chunks/{kt-element-T0VbIBNp.js.map → kt-element-COgh6Yr1.js.map} +1 -1
  9. package/dist/chunks/numbers-QyecMiSJ.js +9 -0
  10. package/dist/chunks/numbers-QyecMiSJ.js.map +1 -0
  11. package/dist/chunks/{segmented-field-BBXR4XFL.js → segmented-field-BCjCGF4I.js} +2 -2
  12. package/dist/chunks/{segmented-field-BBXR4XFL.js.map → segmented-field-BCjCGF4I.js.map} +1 -1
  13. package/dist/chunks/{typed-date-CPAUNHzr.js → typed-date-Z3vcUJbb.js} +2 -2
  14. package/dist/chunks/{typed-date-CPAUNHzr.js.map → typed-date-Z3vcUJbb.js.map} +1 -1
  15. package/dist/components/core/kt-avatar/kt-avatar.js +2 -2
  16. package/dist/components/core/kt-badge/kt-badge.js +2 -2
  17. package/dist/components/core/kt-button/kt-button.js +1 -1
  18. package/dist/components/core/kt-card/kt-card.js +1 -1
  19. package/dist/components/core/kt-code/kt-code.js +2 -2
  20. package/dist/components/core/kt-icon/kt-icon.js +1 -1
  21. package/dist/components/core/kt-kbd/kt-kbd.js +1 -1
  22. package/dist/components/core/kt-split-button/kt-split-button.js +2 -2
  23. package/dist/components/data/kt-chart/kt-chart.js +2 -2
  24. package/dist/components/data/kt-meter/kt-meter.js +1 -1
  25. package/dist/components/data/kt-pagination/kt-pagination.js +2 -2
  26. package/dist/components/data/kt-stat/kt-stat.js +1 -1
  27. package/dist/components/data/kt-table/kt-table.js +2 -2
  28. package/dist/components/data/kt-timeline/kt-timeline.js +1 -1
  29. package/dist/components/feedback/kt-alert/kt-alert.js +2 -2
  30. package/dist/components/feedback/kt-empty-state/kt-empty-state.js +1 -1
  31. package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +1 -1
  32. package/dist/components/feedback/kt-skeleton/kt-skeleton.js +1 -1
  33. package/dist/components/feedback/kt-toast/kt-toast.js +2 -2
  34. package/dist/components/feedback/kt-toast-container/kt-toast-container.js +1 -1
  35. package/dist/components/feedback/kt-tooltip/kt-tooltip.js +1 -1
  36. package/dist/components/forms/kt-calendar/kt-calendar.js +3 -3
  37. package/dist/components/forms/kt-checkbox/kt-checkbox.js +2 -2
  38. package/dist/components/forms/kt-date-input/kt-date-input.js +5 -5
  39. package/dist/components/forms/kt-date-picker/kt-date-picker.js +4 -4
  40. package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +2 -2
  41. package/dist/components/forms/kt-form/kt-form.js +2 -2
  42. package/dist/components/forms/kt-input/kt-input.js +2 -2
  43. package/dist/components/forms/kt-input-menu/kt-input-menu.js +2 -2
  44. package/dist/components/forms/kt-label-input/kt-label-input.js +1 -1
  45. package/dist/components/forms/kt-multi-select/kt-multi-select.js +2 -2
  46. package/dist/components/forms/kt-number-input/kt-number-input.d.ts +89 -0
  47. package/dist/components/forms/kt-number-input/kt-number-input.js +350 -0
  48. package/dist/components/forms/kt-number-input/kt-number-input.js.map +1 -0
  49. package/dist/components/forms/kt-radio-group/kt-radio-group.js +2 -2
  50. package/dist/components/forms/kt-select/kt-select.js +2 -2
  51. package/dist/components/forms/kt-slider/kt-slider.d.ts +69 -0
  52. package/dist/components/forms/kt-slider/kt-slider.js +252 -0
  53. package/dist/components/forms/kt-slider/kt-slider.js.map +1 -0
  54. package/dist/components/forms/kt-textarea/kt-textarea.js +2 -2
  55. package/dist/components/forms/kt-time-input/kt-time-input.js +3 -3
  56. package/dist/components/forms/kt-toggle/kt-toggle.js +1 -1
  57. package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +2 -2
  58. package/dist/components/navigation/kt-header/kt-header.js +2 -2
  59. package/dist/components/navigation/kt-page-header/kt-page-header.js +1 -1
  60. package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +2 -2
  61. package/dist/components/navigation/kt-steps/kt-steps.d.ts +65 -0
  62. package/dist/components/navigation/kt-steps/kt-steps.js +244 -0
  63. package/dist/components/navigation/kt-steps/kt-steps.js.map +1 -0
  64. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +2 -2
  65. package/dist/components/navigation/kt-tabs/kt-tabs.js +1 -1
  66. package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +1 -1
  67. package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +2 -2
  68. package/dist/components/overlays/kt-collapsible/kt-collapsible.js +1 -1
  69. package/dist/components/overlays/kt-command-palette/kt-command-palette.d.ts +87 -0
  70. package/dist/components/overlays/kt-command-palette/kt-command-palette.js +370 -0
  71. package/dist/components/overlays/kt-command-palette/kt-command-palette.js.map +1 -0
  72. package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +2 -2
  73. package/dist/components/overlays/kt-dropdown/kt-dropdown.js +2 -2
  74. package/dist/components/overlays/kt-modal/kt-modal.js +2 -2
  75. package/dist/components/overlays/kt-side-panel/kt-side-panel.js +2 -2
  76. package/dist/custom-elements.json +3279 -1754
  77. package/dist/docs/kt-command-palette.md +99 -0
  78. package/dist/docs/kt-number-input.md +77 -0
  79. package/dist/docs/kt-slider.md +76 -0
  80. package/dist/docs/kt-steps.md +79 -0
  81. package/dist/index.d.ts +6 -0
  82. package/dist/index.js +105 -97
  83. package/dist/index.js.map +1 -1
  84. package/dist/internal/command-search.d.ts +27 -0
  85. package/dist/internal/numbers.d.ts +2 -0
  86. package/dist/internal/strings.d.ts +14 -0
  87. package/dist/react/index.d.ts +31 -0
  88. package/dist/react/index.js +199 -164
  89. package/dist/react/index.js.map +1 -1
  90. package/dist/react/jsx.d.ts +27 -1
  91. package/dist/strings/index.js +1 -1
  92. package/dist/tokens/base.css +4 -0
  93. package/dist/vscode.css-custom-data.json +26 -2
  94. package/dist/vscode.html-custom-data.json +120 -12
  95. package/dist/vue/index.d.ts +8 -0
  96. package/dist/vue/index.js +12 -8
  97. package/dist/vue/index.js.map +1 -1
  98. package/dist/web-types.json +347 -39
  99. package/package.json +20 -3
  100. package/dist/chunks/index-TWJzttLX.js.map +0 -1
@@ -0,0 +1,370 @@
1
+ import { css as g, nothing as c, html as p } from "lit";
2
+ import { property as u, state as v, query as x } from "lit/decorators.js";
3
+ import { classMap as k } from "lit/directives/class-map.js";
4
+ import { K as m, d as y } from "../../../chunks/kt-element-COgh6Yr1.js";
5
+ import { u as w, e as h } from "../../../chunks/events-r51msXNf.js";
6
+ import { o as $, c as I, i as D } from "../../../chunks/dialog-CPIfFIlF.js";
7
+ import { s as C } from "../../../chunks/index-BEWmAE0T.js";
8
+ import "../../core/kt-icon/kt-icon.js";
9
+ import "../../core/kt-kbd/kt-kbd.js";
10
+ function f(a) {
11
+ return a.normalize("NFD").replace(/\p{Diacritic}/gu, "").toLowerCase();
12
+ }
13
+ function E(a, t, e) {
14
+ const i = f(a.label), o = f([...a.keywords ?? [], a.group ?? ""].join(" ")), r = `${i} ${o}`;
15
+ if (!e.every((s) => r.includes(s))) return 1 / 0;
16
+ if (i.startsWith(t)) return 0;
17
+ const n = i.split(/[^\p{L}\p{N}]+/u);
18
+ return e.every((s) => n.some((b) => b.startsWith(s))) ? 1 : e.every((s) => i.includes(s)) ? 2 : 3;
19
+ }
20
+ function K(a, t) {
21
+ const e = f(t.trim());
22
+ if (!e) return [...a];
23
+ const i = e.split(/\s+/);
24
+ return a.map((o, r) => ({ command: o, index: r, rank: E(o, e, i) })).filter((o) => o.rank !== 1 / 0).sort((o, r) => o.rank - r.rank || o.index - r.index).map((o) => o.command);
25
+ }
26
+ var q = Object.defineProperty, d = (a, t, e, i) => {
27
+ for (var o = void 0, r = a.length - 1, n; r >= 0; r--)
28
+ (n = a[r]) && (o = n(t, e, o) || o);
29
+ return o && q(t, e, o), o;
30
+ };
31
+ function P(a) {
32
+ const t = /* @__PURE__ */ new Map();
33
+ for (const e of a) {
34
+ const i = e.group ?? "";
35
+ t.has(i) || t.set(i, []), t.get(i).push(e);
36
+ }
37
+ return [...t].map(([e, i]) => ({ name: e, commands: i }));
38
+ }
39
+ class l extends m {
40
+ constructor() {
41
+ super(...arguments), this.commands = [], this.open = !1, this.placeholder = "", this.hotkey = "k", this.query = "", this.activeIndex = 0, this.listId = w("kt-command-list"), this.returnFocus = null, this.onDocumentKeyDown = (t) => {
42
+ if (!this.hotkey || t.defaultPrevented || t.repeat || !(t.metaKey || t.ctrlKey) || t.altKey || t.shiftKey) return;
43
+ const e = this.hotkey.toLowerCase();
44
+ (t.key?.toLowerCase() === e || t.code === `Key${e.toUpperCase()}`) && (t.preventDefault(), this.open = !this.open);
45
+ };
46
+ }
47
+ static {
48
+ this.styles = [
49
+ m.styles,
50
+ g`
51
+ :host {
52
+ display: contents;
53
+ }
54
+
55
+ /* Never-opened, a dialog must not keep its box: see kt-modal. */
56
+ dialog {
57
+ display: none;
58
+ flex-direction: column;
59
+ box-sizing: border-box;
60
+ width: 600px;
61
+ max-width: calc(100vw - 32px);
62
+ max-height: min(560px, calc(100vh - 128px));
63
+ margin: 12vh auto auto;
64
+ padding: 0;
65
+ overflow: hidden;
66
+ color: var(--text-body);
67
+ background: var(--surface-popover);
68
+ border: var(--border-width) solid var(--border-popover);
69
+ border-radius: var(--radius-modal);
70
+ box-shadow: var(--shadow-popover);
71
+ opacity: 0;
72
+ transform: scale(0.98);
73
+ transition:
74
+ transform var(--duration-fast) var(--easing-standard),
75
+ opacity var(--duration-fast) var(--easing-standard),
76
+ overlay var(--duration-fast) allow-discrete,
77
+ display var(--duration-fast) allow-discrete;
78
+ }
79
+ dialog[open] {
80
+ display: flex;
81
+ opacity: 1;
82
+ transform: scale(1);
83
+ }
84
+ @starting-style {
85
+ dialog[open] {
86
+ opacity: 0;
87
+ transform: scale(0.98);
88
+ }
89
+ }
90
+ dialog::backdrop {
91
+ background: var(--color-backdrop, rgba(0, 0, 0, 0.45));
92
+ }
93
+
94
+ .search {
95
+ display: flex;
96
+ flex: none;
97
+ align-items: center;
98
+ gap: 10px;
99
+ padding: 0 16px;
100
+ color: var(--text-muted);
101
+ border-bottom: var(--border-width) solid var(--divider-popover);
102
+ }
103
+ input {
104
+ flex: 1;
105
+ min-width: 0;
106
+ height: calc(var(--button-height) + 12px);
107
+ padding: 0;
108
+ color: var(--text-body);
109
+ font: var(--font-normal-regular);
110
+ font-size: calc(16px * var(--text-scale, 1));
111
+ background: none;
112
+ border: none;
113
+ outline: none;
114
+ }
115
+ input::placeholder {
116
+ color: var(--text-muted);
117
+ }
118
+
119
+ .list {
120
+ flex: 1 1 auto;
121
+ min-height: 0;
122
+ margin: 0;
123
+ padding: 6px;
124
+ overflow: auto;
125
+ scrollbar-width: thin;
126
+ }
127
+ .group + .group {
128
+ margin-top: 6px;
129
+ }
130
+ .heading {
131
+ padding: 8px 10px 4px;
132
+ color: var(--text-muted);
133
+ font: var(--font-normal-small);
134
+ }
135
+ .option {
136
+ display: flex;
137
+ align-items: center;
138
+ gap: 10px;
139
+ padding: 8px 10px;
140
+ color: var(--text-body);
141
+ font: var(--font-normal-regular);
142
+ border-radius: var(--radius-input);
143
+ cursor: pointer;
144
+ }
145
+ .option kt-icon {
146
+ flex: none;
147
+ color: var(--text-muted);
148
+ }
149
+ .option .label {
150
+ flex: 1;
151
+ min-width: 0;
152
+ overflow: hidden;
153
+ white-space: nowrap;
154
+ text-overflow: ellipsis;
155
+ }
156
+ .option.active {
157
+ background: var(--color-primary-soft);
158
+ }
159
+ .option.active kt-icon {
160
+ color: var(--color-primary-text);
161
+ }
162
+ .option.disabled {
163
+ color: var(--text-disabled);
164
+ cursor: not-allowed;
165
+ }
166
+ .empty {
167
+ padding: 28px 10px;
168
+ color: var(--text-muted);
169
+ font: var(--font-normal-regular);
170
+ text-align: center;
171
+ }
172
+
173
+ .footer {
174
+ display: flex;
175
+ flex: none;
176
+ flex-wrap: wrap;
177
+ gap: 16px;
178
+ padding: 10px 16px;
179
+ color: var(--text-muted);
180
+ font: var(--font-normal-small);
181
+ border-top: var(--border-width) solid var(--divider-popover);
182
+ }
183
+ .footer span {
184
+ display: inline-flex;
185
+ align-items: center;
186
+ gap: 6px;
187
+ }
188
+
189
+ @media (prefers-reduced-motion: reduce) {
190
+ dialog {
191
+ transition: none;
192
+ }
193
+ }
194
+ `
195
+ ];
196
+ }
197
+ connectedCallback() {
198
+ super.connectedCallback(), document.addEventListener("keydown", this.onDocumentKeyDown);
199
+ }
200
+ disconnectedCallback() {
201
+ super.disconnectedCallback(), document.removeEventListener("keydown", this.onDocumentKeyDown);
202
+ }
203
+ /** The commands the query keeps, best first. */
204
+ get results() {
205
+ return K(this.commands, this.query);
206
+ }
207
+ willUpdate(t) {
208
+ t.has("open") && this.open && (this.query = "", this.activeIndex = this.firstEnabled(this.results)), t.has("commands") && (this.activeIndex = this.firstEnabled(this.results));
209
+ }
210
+ updated(t) {
211
+ const e = t;
212
+ (e.has("activeIndex") || e.has("query")) && this.renderRoot.querySelector(`#${this.optionId(this.activeIndex)}`)?.scrollIntoView({ block: "nearest" }), t.has("open") && (this.open ? (this.returnFocus = L(), $(this.dialog), this.input.value = "", this.input.focus(), h(this, "kt-open")) : t.get("open") === !0 && (I(this.dialog), this.returnFocus?.isConnected && this.returnFocus.focus(), this.returnFocus = null, h(this, "kt-close")));
213
+ }
214
+ firstEnabled(t) {
215
+ return t.findIndex((e) => !e.disabled);
216
+ }
217
+ /** The next enabled command from `from`, one way, wrapping; -1 when none is. */
218
+ step(t, e, i) {
219
+ for (let o = 1; o <= t.length; o += 1) {
220
+ const r = (e + i * o + t.length * o) % t.length;
221
+ if (!t[r].disabled) return r;
222
+ }
223
+ return -1;
224
+ }
225
+ onInput() {
226
+ this.query = this.input.value, this.activeIndex = this.firstEnabled(this.results);
227
+ }
228
+ onKeyDown(t) {
229
+ const e = this.results;
230
+ switch (t.key) {
231
+ case "ArrowDown":
232
+ case "ArrowUp":
233
+ t.preventDefault(), e.length && (this.activeIndex = this.step(e, this.activeIndex, t.key === "ArrowDown" ? 1 : -1));
234
+ break;
235
+ case "Home":
236
+ case "End":
237
+ if (!e.length) return;
238
+ t.preventDefault(), this.activeIndex = t.key === "Home" ? this.firstEnabled(e) : this.step(e, 0, -1);
239
+ break;
240
+ case "Enter": {
241
+ t.preventDefault();
242
+ const i = e[this.activeIndex];
243
+ i && this.run(i);
244
+ break;
245
+ }
246
+ case "Escape":
247
+ t.preventDefault(), this.open = !1;
248
+ break;
249
+ }
250
+ }
251
+ run(t) {
252
+ t.disabled || (this.open = !1, h(this, "kt-select", { id: t.id, command: t }));
253
+ }
254
+ onDialogCancel(t) {
255
+ t.preventDefault(), this.open = !1;
256
+ }
257
+ /** The browser can close the dialog itself; the property follows. */
258
+ onDialogClose() {
259
+ this.open && (this.open = !1);
260
+ }
261
+ onDialogClick(t) {
262
+ D(this.dialog, t) && (this.open = !1);
263
+ }
264
+ optionId(t) {
265
+ return `${this.listId}-${t}`;
266
+ }
267
+ render() {
268
+ const t = C(), e = this.results, i = e[this.activeIndex];
269
+ let o = -1;
270
+ return p`<dialog
271
+ part="dialog"
272
+ aria-label=${t.commandPalette}
273
+ @cancel=${this.onDialogCancel}
274
+ @close=${this.onDialogClose}
275
+ @click=${this.onDialogClick}
276
+ >
277
+ <div class="search">
278
+ <kt-icon name="search" size="18"></kt-icon>
279
+ <input
280
+ part="input"
281
+ type="text"
282
+ role="combobox"
283
+ aria-expanded="true"
284
+ aria-controls=${this.listId}
285
+ aria-autocomplete="list"
286
+ aria-activedescendant=${i ? this.optionId(this.activeIndex) : c}
287
+ aria-label=${t.commandPalette}
288
+ placeholder=${this.placeholder || t.commandPlaceholder}
289
+ autocomplete="off"
290
+ spellcheck="false"
291
+ @input=${this.onInput}
292
+ @keydown=${this.onKeyDown}
293
+ />
294
+ </div>
295
+
296
+ <div part="list" class="list" id=${this.listId} role="listbox" aria-label=${t.commandPalette}>
297
+ ${e.length === 0 ? p`<div class="empty" aria-hidden="true">${t.noResults}</div>` : P(e).map(
298
+ (r) => p`<div class="group" role="group" aria-label=${r.name || t.commandPalette}>
299
+ ${r.name ? p`<div class="heading" aria-hidden="true">${r.name}</div>` : c}
300
+ ${r.commands.map((n) => {
301
+ o += 1;
302
+ const s = o;
303
+ return p`<div
304
+ id=${this.optionId(s)}
305
+ class=${k({
306
+ option: !0,
307
+ active: s === this.activeIndex,
308
+ disabled: !!n.disabled
309
+ })}
310
+ role="option"
311
+ aria-selected=${s === this.activeIndex ? "true" : "false"}
312
+ aria-disabled=${n.disabled ? "true" : c}
313
+ @pointermove=${() => {
314
+ !n.disabled && this.activeIndex !== s && (this.activeIndex = s);
315
+ }}
316
+ @click=${() => this.run(n)}
317
+ >
318
+ ${n.icon ? p`<kt-icon name=${n.icon} size="16"></kt-icon>` : c}
319
+ <span class="label">${n.label}</span>
320
+ ${n.shortcut ? p`<kt-kbd keys=${n.shortcut}></kt-kbd>` : c}
321
+ </div>`;
322
+ })}
323
+ </div>`
324
+ )}
325
+ </div>
326
+
327
+ <div class="visually-hidden" role="status">${e.length === 0 ? t.noResults : c}</div>
328
+
329
+ <div part="footer" class="footer" aria-hidden="true">
330
+ <span><kt-kbd>↑</kt-kbd><kt-kbd>↓</kt-kbd>${t.commandHintMove}</span>
331
+ <span><kt-kbd>↵</kt-kbd>${t.commandHintRun}</span>
332
+ <span><kt-kbd>esc</kt-kbd>${t.commandHintClose}</span>
333
+ </div>
334
+ </dialog>`;
335
+ }
336
+ }
337
+ d([
338
+ u({ attribute: !1 })
339
+ ], l.prototype, "commands");
340
+ d([
341
+ u({ type: Boolean, reflect: !0 })
342
+ ], l.prototype, "open");
343
+ d([
344
+ u({ type: String })
345
+ ], l.prototype, "placeholder");
346
+ d([
347
+ u({ type: String })
348
+ ], l.prototype, "hotkey");
349
+ d([
350
+ v()
351
+ ], l.prototype, "query");
352
+ d([
353
+ v()
354
+ ], l.prototype, "activeIndex");
355
+ d([
356
+ x("dialog")
357
+ ], l.prototype, "dialog");
358
+ d([
359
+ x("input")
360
+ ], l.prototype, "input");
361
+ function L() {
362
+ let a = document.activeElement;
363
+ for (; a?.shadowRoot?.activeElement; ) a = a.shadowRoot.activeElement;
364
+ return a instanceof HTMLElement ? a : null;
365
+ }
366
+ y("kt-command-palette", l);
367
+ export {
368
+ l as KtCommandPalette
369
+ };
370
+ //# sourceMappingURL=kt-command-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kt-command-palette.js","sources":["../../../../src/internal/command-search.ts","../../../../src/components/overlays/kt-command-palette/kt-command-palette.ts"],"sourcesContent":["/**\n * The search behind `<kt-command-palette>`: which commands a query keeps, and\n * in what order.\n *\n * Every word typed must appear — in the label, a keyword or the group — in\n * any order, ignoring case and accents. What matches ranks by how it matches:\n * a label that starts with the query, then a label word that does, then a\n * match inside the label, then a keyword or the group. Ties keep the order\n * given, which is the order the application chose.\n */\n\nexport interface KtCommand {\n readonly id: string;\n readonly label: string;\n /** Heading the command is listed under. */\n readonly group?: string;\n /** A Lucide icon name. */\n readonly icon?: string;\n /** Other words it answers to: \"client\" for New customer. */\n readonly keywords?: readonly string[];\n /** Keys shown beside it, as `<kt-kbd keys>` takes them: \"mod n\". */\n readonly shortcut?: string;\n readonly disabled?: boolean;\n}\n\n/** Lowercase, without accents: \"Préférences\" reads \"preferences\". */\nexport function fold(text: string): string {\n return text\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n}\n\n/** How well `command` matches `words`; Infinity when it does not. */\nfunction score(command: KtCommand, query: string, words: readonly string[]): number {\n const label = fold(command.label);\n const extra = fold([...(command.keywords ?? []), command.group ?? ''].join(' '));\n const all = `${label} ${extra}`;\n if (!words.every((word) => all.includes(word))) return Infinity;\n\n if (label.startsWith(query)) return 0;\n const labelWords = label.split(/[^\\p{L}\\p{N}]+/u);\n if (words.every((word) => labelWords.some((part) => part.startsWith(word)))) return 1;\n if (words.every((word) => label.includes(word))) return 2;\n return 3;\n}\n\n/** The commands `query` keeps, best first. An empty query keeps them all, in order. */\nexport function rankCommands(commands: readonly KtCommand[], query: string): KtCommand[] {\n const folded = fold(query.trim());\n if (!folded) return [...commands];\n const words = folded.split(/\\s+/);\n return commands\n .map((command, index) => ({ command, index, rank: score(command, folded, words) }))\n .filter((entry) => entry.rank !== Infinity)\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((entry) => entry.command);\n}\n","import { css, html, nothing, type PropertyValues, type TemplateResult } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { KtElement, defineElement } from '#internal/kt-element';\nimport { emit, uniqueId } from '#internal/events';\nimport { closeDialog, isBackdropClick, openModal } from '#internal/dialog';\nimport { rankCommands, type KtCommand } from '#internal/command-search';\nimport { strings } from '#internal/strings';\nimport '../../core/kt-icon/kt-icon.js';\nimport '../../core/kt-kbd/kt-kbd.js';\n\nexport type { KtCommand } from '#internal/command-search';\n\n/** The groups of `commands`, in the order each first appears; ungrouped ones first. */\nfunction grouped(commands: readonly KtCommand[]): { name: string; commands: KtCommand[] }[] {\n const groups = new Map<string, KtCommand[]>();\n for (const command of commands) {\n const name = command.group ?? '';\n if (!groups.has(name)) groups.set(name, []);\n groups.get(name)!.push(command);\n }\n return [...groups].map(([name, list]) => ({ name, commands: list }));\n}\n\n/**\n * The palette a product opens on Cmd+K: every action and page, a few\n * keystrokes away.\n *\n * Give it `commands`; it lists them under their groups, narrows them as you\n * type — every word, in any order, in the label, a keyword or the group,\n * ignoring case and accents — and runs the one you pick with `kt-select`.\n * Cmd+K or Ctrl+K opens and closes it from anywhere on the page; `hotkey`\n * changes the key or, empty, turns it off.\n *\n * Built on the native `<dialog>`: the top layer, focus containment and the\n * inert page come from the platform. The field is a combobox over a listbox,\n * so a screen reader follows the active command as the arrows move.\n *\n * @element kt-command-palette\n *\n * @csspart dialog - The `<dialog>`.\n * @csspart input - The search field.\n * @csspart list - The scrolling list.\n * @csspart footer - The keyboard hints.\n *\n * @fires kt-select - A command was run. `detail: { id, command }`.\n * @fires kt-open - It opened.\n * @fires kt-close - It closed.\n *\n * @example\n * ```html\n * <kt-command-palette></kt-command-palette>\n * <script>\n * palette.commands = [\n * { id: 'new', label: 'New invoice', group: 'Create', shortcut: 'mod i' },\n * { id: 'settings', label: 'Open settings', group: 'Navigate', icon: 'settings' },\n * ];\n * palette.addEventListener('kt-select', (e) => run(e.detail.id));\n * </script>\n * ```\n */\nexport class KtCommandPalette extends KtElement {\n static override styles = [\n KtElement.styles,\n css`\n :host {\n display: contents;\n }\n\n /* Never-opened, a dialog must not keep its box: see kt-modal. */\n dialog {\n display: none;\n flex-direction: column;\n box-sizing: border-box;\n width: 600px;\n max-width: calc(100vw - 32px);\n max-height: min(560px, calc(100vh - 128px));\n margin: 12vh auto auto;\n padding: 0;\n overflow: hidden;\n color: var(--text-body);\n background: var(--surface-popover);\n border: var(--border-width) solid var(--border-popover);\n border-radius: var(--radius-modal);\n box-shadow: var(--shadow-popover);\n opacity: 0;\n transform: scale(0.98);\n transition:\n transform var(--duration-fast) var(--easing-standard),\n opacity var(--duration-fast) var(--easing-standard),\n overlay var(--duration-fast) allow-discrete,\n display var(--duration-fast) allow-discrete;\n }\n dialog[open] {\n display: flex;\n opacity: 1;\n transform: scale(1);\n }\n @starting-style {\n dialog[open] {\n opacity: 0;\n transform: scale(0.98);\n }\n }\n dialog::backdrop {\n background: var(--color-backdrop, rgba(0, 0, 0, 0.45));\n }\n\n .search {\n display: flex;\n flex: none;\n align-items: center;\n gap: 10px;\n padding: 0 16px;\n color: var(--text-muted);\n border-bottom: var(--border-width) solid var(--divider-popover);\n }\n input {\n flex: 1;\n min-width: 0;\n height: calc(var(--button-height) + 12px);\n padding: 0;\n color: var(--text-body);\n font: var(--font-normal-regular);\n font-size: calc(16px * var(--text-scale, 1));\n background: none;\n border: none;\n outline: none;\n }\n input::placeholder {\n color: var(--text-muted);\n }\n\n .list {\n flex: 1 1 auto;\n min-height: 0;\n margin: 0;\n padding: 6px;\n overflow: auto;\n scrollbar-width: thin;\n }\n .group + .group {\n margin-top: 6px;\n }\n .heading {\n padding: 8px 10px 4px;\n color: var(--text-muted);\n font: var(--font-normal-small);\n }\n .option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n color: var(--text-body);\n font: var(--font-normal-regular);\n border-radius: var(--radius-input);\n cursor: pointer;\n }\n .option kt-icon {\n flex: none;\n color: var(--text-muted);\n }\n .option .label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n .option.active {\n background: var(--color-primary-soft);\n }\n .option.active kt-icon {\n color: var(--color-primary-text);\n }\n .option.disabled {\n color: var(--text-disabled);\n cursor: not-allowed;\n }\n .empty {\n padding: 28px 10px;\n color: var(--text-muted);\n font: var(--font-normal-regular);\n text-align: center;\n }\n\n .footer {\n display: flex;\n flex: none;\n flex-wrap: wrap;\n gap: 16px;\n padding: 10px 16px;\n color: var(--text-muted);\n font: var(--font-normal-small);\n border-top: var(--border-width) solid var(--divider-popover);\n }\n .footer span {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n @media (prefers-reduced-motion: reduce) {\n dialog {\n transition: none;\n }\n }\n `,\n ];\n\n /** What it can run. Set as a property: `palette.commands = [...]`. */\n @property({ attribute: false })\n commands: readonly KtCommand[] = [];\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placeholder of the search field. Defaults to the translated string. */\n @property({ type: String })\n placeholder = '';\n\n /**\n * The key that opens it with Cmd or Ctrl, from anywhere on the page. Empty\n * turns the shortcut off — for a page with two palettes, or its own key.\n */\n @property({ type: String })\n hotkey = 'k';\n\n @state() private query = '';\n @state() private activeIndex = 0;\n\n @query('dialog') private dialog!: HTMLDialogElement;\n @query('input') private input!: HTMLInputElement;\n\n private readonly listId = uniqueId('kt-command-list');\n /** Where the focus was before opening, to give it back on close. */\n private returnFocus: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('keydown', this.onDocumentKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this.onDocumentKeyDown);\n }\n\n /** The commands the query keeps, best first. */\n private get results(): KtCommand[] {\n return rankCommands(this.commands, this.query);\n }\n\n override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('open') && this.open) {\n this.query = '';\n this.activeIndex = this.firstEnabled(this.results);\n }\n if (changed.has('commands')) this.activeIndex = this.firstEnabled(this.results);\n }\n\n override updated(changed: PropertyValues<this>): void {\n // Private states, so the map is read untyped.\n const moved = changed as PropertyValues;\n if (moved.has('activeIndex') || moved.has('query')) {\n this.renderRoot\n .querySelector(`#${this.optionId(this.activeIndex)}`)\n ?.scrollIntoView({ block: 'nearest' });\n }\n if (!changed.has('open')) return;\n if (this.open) {\n this.returnFocus = deepActiveElement();\n openModal(this.dialog);\n this.input.value = '';\n this.input.focus();\n emit(this, 'kt-open');\n } else if (changed.get('open') === true) {\n closeDialog(this.dialog);\n if (this.returnFocus?.isConnected) this.returnFocus.focus();\n this.returnFocus = null;\n emit(this, 'kt-close');\n }\n }\n\n private firstEnabled(list: readonly KtCommand[]): number {\n return list.findIndex((command) => !command.disabled);\n }\n\n /** The next enabled command from `from`, one way, wrapping; -1 when none is. */\n private step(list: readonly KtCommand[], from: number, by: 1 | -1): number {\n for (let i = 1; i <= list.length; i += 1) {\n const index = (from + by * i + list.length * i) % list.length;\n if (!list[index]!.disabled) return index;\n }\n return -1;\n }\n\n private onDocumentKeyDown = (event: KeyboardEvent): void => {\n if (!this.hotkey || event.defaultPrevented || event.repeat) return;\n if (!(event.metaKey || event.ctrlKey) || event.altKey || event.shiftKey) return;\n const key = this.hotkey.toLowerCase();\n // The code catches the key on a layout whose letters are not Latin.\n const hit = event.key?.toLowerCase() === key || event.code === `Key${key.toUpperCase()}`;\n if (!hit) return;\n event.preventDefault();\n this.open = !this.open;\n };\n\n private onInput(): void {\n this.query = this.input.value;\n this.activeIndex = this.firstEnabled(this.results);\n }\n\n private onKeyDown(event: KeyboardEvent): void {\n const list = this.results;\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n if (list.length)\n this.activeIndex = this.step(list, this.activeIndex, event.key === 'ArrowDown' ? 1 : -1);\n break;\n case 'Home':\n case 'End':\n if (!list.length) return;\n event.preventDefault();\n this.activeIndex = event.key === 'Home' ? this.firstEnabled(list) : this.step(list, 0, -1);\n break;\n case 'Enter': {\n event.preventDefault();\n const command = list[this.activeIndex];\n if (command) this.run(command);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.open = false;\n break;\n }\n }\n\n private run(command: KtCommand): void {\n if (command.disabled) return;\n this.open = false;\n emit(this, 'kt-select', { id: command.id, command });\n }\n\n private onDialogCancel(event: Event): void {\n // Escape is handled on the field; this catches it anywhere else.\n event.preventDefault();\n this.open = false;\n }\n\n /** The browser can close the dialog itself; the property follows. */\n private onDialogClose(): void {\n if (this.open) this.open = false;\n }\n\n private onDialogClick(event: MouseEvent): void {\n if (isBackdropClick(this.dialog, event)) this.open = false;\n }\n\n private optionId(index: number): string {\n return `${this.listId}-${index}`;\n }\n\n override render(): TemplateResult {\n const s = strings();\n const list = this.results;\n const active = list[this.activeIndex];\n let index = -1;\n\n return html`<dialog\n part=\"dialog\"\n aria-label=${s.commandPalette}\n @cancel=${this.onDialogCancel}\n @close=${this.onDialogClose}\n @click=${this.onDialogClick}\n >\n <div class=\"search\">\n <kt-icon name=\"search\" size=\"18\"></kt-icon>\n <input\n part=\"input\"\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls=${this.listId}\n aria-autocomplete=\"list\"\n aria-activedescendant=${active ? this.optionId(this.activeIndex) : nothing}\n aria-label=${s.commandPalette}\n placeholder=${this.placeholder || s.commandPlaceholder}\n autocomplete=\"off\"\n spellcheck=\"false\"\n @input=${this.onInput}\n @keydown=${this.onKeyDown}\n />\n </div>\n\n <div part=\"list\" class=\"list\" id=${this.listId} role=\"listbox\" aria-label=${s.commandPalette}>\n ${\n list.length === 0\n ? html`<div class=\"empty\" aria-hidden=\"true\">${s.noResults}</div>`\n : grouped(list).map(\n (group) =>\n html`<div class=\"group\" role=\"group\" aria-label=${group.name || s.commandPalette}>\n ${group.name ? html`<div class=\"heading\" aria-hidden=\"true\">${group.name}</div>` : nothing}\n ${group.commands.map((command) => {\n index += 1;\n const at = index;\n return html`<div\n id=${this.optionId(at)}\n class=${classMap({\n option: true,\n active: at === this.activeIndex,\n disabled: Boolean(command.disabled),\n })}\n role=\"option\"\n aria-selected=${at === this.activeIndex ? 'true' : 'false'}\n aria-disabled=${command.disabled ? 'true' : nothing}\n @pointermove=${() => {\n if (!command.disabled && this.activeIndex !== at) this.activeIndex = at;\n }}\n @click=${() => this.run(command)}\n >\n ${command.icon ? html`<kt-icon name=${command.icon} size=\"16\"></kt-icon>` : nothing}\n <span class=\"label\">${command.label}</span>\n ${command.shortcut ? html`<kt-kbd keys=${command.shortcut}></kt-kbd>` : nothing}\n </div>`;\n })}\n </div>`,\n )\n }\n </div>\n\n <div class=\"visually-hidden\" role=\"status\">${list.length === 0 ? s.noResults : nothing}</div>\n\n <div part=\"footer\" class=\"footer\" aria-hidden=\"true\">\n <span><kt-kbd>↑</kt-kbd><kt-kbd>↓</kt-kbd>${s.commandHintMove}</span>\n <span><kt-kbd>↵</kt-kbd>${s.commandHintRun}</span>\n <span><kt-kbd>esc</kt-kbd>${s.commandHintClose}</span>\n </div>\n </dialog>`;\n }\n}\n\n/** The focused element, through open shadow roots. */\nfunction deepActiveElement(): HTMLElement | null {\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n return active instanceof HTMLElement ? active : null;\n}\n\ndefineElement('kt-command-palette', KtCommandPalette);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-command-palette': KtCommandPalette;\n }\n}\n"],"names":["fold","text","score","command","query","words","label","extra","all","word","labelWords","part","rankCommands","commands","folded","index","entry","a","b","grouped","groups","name","list","KtCommandPalette","KtElement","uniqueId","event","key","css","changed","moved","deepActiveElement","openModal","emit","closeDialog","from","by","i","isBackdropClick","s","strings","active","html","nothing","group","at","classMap","__decorateClass","property","state","defineElement"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { css as h, nothing as c, html as p } from "lit";
2
2
  import { query as m, property as o } from "lit/decorators.js";
3
- import { K as g, d as y } from "../../../chunks/kt-element-T0VbIBNp.js";
3
+ import { K as g, d as y } from "../../../chunks/kt-element-COgh6Yr1.js";
4
4
  import { e as f } from "../../../chunks/events-r51msXNf.js";
5
5
  import { o as u, c as b, i as v } from "../../../chunks/dialog-CPIfFIlF.js";
6
- import { s as r } from "../../../chunks/index-TWJzttLX.js";
6
+ import { s as r } from "../../../chunks/index-BEWmAE0T.js";
7
7
  import "../../core/kt-button/kt-button.js";
8
8
  var k = Object.defineProperty, a = (n, e, l, x) => {
9
9
  for (var i = void 0, s = n.length - 1, d; s >= 0; s--)
@@ -1,11 +1,11 @@
1
1
  import { css as v, nothing as y, html as p } from "lit";
2
2
  import { query as h, state as f, property as n } from "lit/decorators.js";
3
3
  import { classMap as u } from "lit/directives/class-map.js";
4
- import { K as c, d as b } from "../../../chunks/kt-element-T0VbIBNp.js";
4
+ import { K as c, d as b } from "../../../chunks/kt-element-COgh6Yr1.js";
5
5
  import { t as m, e as d } from "../../../chunks/events-r51msXNf.js";
6
6
  import { o as x } from "../../../chunks/listbox-LsUEyGhQ.js";
7
7
  import { F as w, f as k } from "../../../chunks/floating-C9RLa6cZ.js";
8
- import { s as $ } from "../../../chunks/index-TWJzttLX.js";
8
+ import { s as $ } from "../../../chunks/index-BEWmAE0T.js";
9
9
  var P = Object.defineProperty, r = (i, t, s, a) => {
10
10
  for (var o = void 0, l = i.length - 1, g; l >= 0; l--)
11
11
  (g = i[l]) && (o = g(t, s, o) || o);
@@ -1,10 +1,10 @@
1
1
  import { css as g, nothing as r, html as s } from "lit";
2
2
  import { query as f, property as i } from "lit/decorators.js";
3
- import { K as c, d as m } from "../../../chunks/kt-element-T0VbIBNp.js";
3
+ import { K as c, d as m } from "../../../chunks/kt-element-COgh6Yr1.js";
4
4
  import { e as u } from "../../../chunks/events-r51msXNf.js";
5
5
  import { h as y } from "../../../chunks/slots-BPbIdxAJ.js";
6
6
  import { o as h, c as v, i as b } from "../../../chunks/dialog-CPIfFIlF.js";
7
- import { s as x } from "../../../chunks/index-TWJzttLX.js";
7
+ import { s as x } from "../../../chunks/index-BEWmAE0T.js";
8
8
  import "../../core/kt-button/kt-button.js";
9
9
  var k = Object.defineProperty, e = (l, t, d, w) => {
10
10
  for (var a = void 0, n = l.length - 1, p; n >= 0; n--)
@@ -1,9 +1,9 @@
1
1
  import { css as f, nothing as p, html as c } from "lit";
2
2
  import { query as m, property as a } from "lit/decorators.js";
3
- import { K as h, d as u } from "../../../chunks/kt-element-T0VbIBNp.js";
3
+ import { K as h, d as u } from "../../../chunks/kt-element-COgh6Yr1.js";
4
4
  import { e as v } from "../../../chunks/events-r51msXNf.js";
5
5
  import { o as g, c as b, i as y } from "../../../chunks/dialog-CPIfFIlF.js";
6
- import { s as l } from "../../../chunks/index-TWJzttLX.js";
6
+ import { s as l } from "../../../chunks/index-BEWmAE0T.js";
7
7
  import "../../core/kt-button/kt-button.js";
8
8
  var x = Object.defineProperty, r = (i, e, n, k) => {
9
9
  for (var o = void 0, s = i.length - 1, d; s >= 0; s--)