kanto-ds 1.4.0 → 1.5.2
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/README.md +10 -10
- package/dist/chunks/{defaults-BwgjMcww.js → defaults-CFrjqae2.js} +22 -21
- package/dist/chunks/{defaults-BwgjMcww.js.map → defaults-CFrjqae2.js.map} +1 -1
- package/dist/chunks/events-r51msXNf.js +22 -0
- package/dist/chunks/{events-Bjl5Zmmq.js.map → events-r51msXNf.js.map} +1 -1
- package/dist/chunks/floating-B7_Dahpn.js +54 -0
- package/dist/chunks/floating-B7_Dahpn.js.map +1 -0
- package/dist/chunks/{form-control-CxjBTt1c.js → form-control-B74_EHtG.js} +7 -7
- package/dist/chunks/form-control-B74_EHtG.js.map +1 -0
- package/dist/chunks/{index-DSSLJirw.js → index-STEEvEP7.js} +24 -12
- package/dist/chunks/index-STEEvEP7.js.map +1 -0
- package/dist/chunks/kt-calendar-B_hFdD9V.js +640 -0
- package/dist/chunks/kt-calendar-B_hFdD9V.js.map +1 -0
- package/dist/chunks/{kt-element-E-tfJpGQ.js → kt-element-Djx2JcGl.js} +2 -2
- package/dist/chunks/{kt-element-E-tfJpGQ.js.map → kt-element-Djx2JcGl.js.map} +1 -1
- package/dist/chunks/{listbox-Sm3nvsC6.js → listbox-llcUu_V-.js} +18 -14
- package/dist/chunks/{listbox-Sm3nvsC6.js.map → listbox-llcUu_V-.js.map} +1 -1
- package/dist/chunks/locale-C5xLkGx5.js +14 -0
- package/dist/chunks/locale-C5xLkGx5.js.map +1 -0
- package/dist/chunks/position-Cx_ZH5zh.js +39 -0
- package/dist/chunks/position-Cx_ZH5zh.js.map +1 -0
- package/dist/components/core/kt-avatar/kt-avatar.js +2 -2
- package/dist/components/core/kt-badge/kt-badge.js +3 -3
- package/dist/components/core/kt-button/kt-button.js +1 -1
- package/dist/components/core/kt-card/kt-card.js +2 -2
- package/dist/components/core/kt-code/kt-code.js +3 -3
- package/dist/components/core/kt-icon/kt-icon.js +2 -2
- package/dist/components/core/kt-kbd/kt-kbd.js +1 -1
- package/dist/components/core/kt-split-button/kt-split-button.js +4 -4
- package/dist/components/data/kt-chart/kt-chart.js +3 -3
- package/dist/components/data/kt-meter/kt-meter.js +1 -1
- package/dist/components/data/kt-pagination/kt-pagination.js +3 -3
- package/dist/components/data/kt-stat/kt-stat.js +1 -1
- package/dist/components/data/kt-table/kt-table.d.ts +53 -3
- package/dist/components/data/kt-table/kt-table.js +286 -131
- package/dist/components/data/kt-table/kt-table.js.map +1 -1
- package/dist/components/data/kt-table/window.d.ts +19 -0
- package/dist/components/data/kt-timeline/kt-timeline.js +1 -1
- package/dist/components/feedback/kt-alert/kt-alert.js +3 -3
- package/dist/components/feedback/kt-empty-state/kt-empty-state.js +1 -1
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +10 -10
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js.map +1 -1
- package/dist/components/feedback/kt-skeleton/kt-skeleton.js +1 -1
- package/dist/components/feedback/kt-toast/kt-toast.js +58 -42
- package/dist/components/feedback/kt-toast/kt-toast.js.map +1 -1
- package/dist/components/feedback/kt-toast-container/kt-toast-container.js +1 -1
- package/dist/components/feedback/kt-tooltip/kt-tooltip.d.ts +20 -0
- package/dist/components/feedback/kt-tooltip/kt-tooltip.js +95 -51
- package/dist/components/feedback/kt-tooltip/kt-tooltip.js.map +1 -1
- package/dist/components/forms/kt-calendar/kt-calendar.d.ts +96 -0
- package/dist/components/forms/kt-calendar/kt-calendar.js +13 -0
- package/dist/components/forms/kt-calendar/kt-calendar.js.map +1 -0
- package/dist/components/forms/kt-checkbox/kt-checkbox.d.ts +9 -0
- package/dist/components/forms/kt-checkbox/kt-checkbox.js +34 -20
- package/dist/components/forms/kt-checkbox/kt-checkbox.js.map +1 -1
- package/dist/components/forms/kt-date-picker/kt-date-picker.d.ts +105 -0
- package/dist/components/forms/kt-date-picker/kt-date-picker.js +382 -0
- package/dist/components/forms/kt-date-picker/kt-date-picker.js.map +1 -0
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.d.ts +9 -0
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +36 -22
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js.map +1 -1
- package/dist/components/forms/kt-form/kt-form.js +2 -2
- package/dist/components/forms/kt-input/kt-input.d.ts +37 -1
- package/dist/components/forms/kt-input/kt-input.js +380 -194
- package/dist/components/forms/kt-input/kt-input.js.map +1 -1
- package/dist/components/forms/kt-input-menu/kt-input-menu.d.ts +13 -0
- package/dist/components/forms/kt-input-menu/kt-input-menu.js +73 -42
- package/dist/components/forms/kt-input-menu/kt-input-menu.js.map +1 -1
- package/dist/components/forms/kt-label-input/kt-label-input.js +1 -1
- package/dist/components/forms/kt-radio-group/kt-radio-group.d.ts +9 -0
- package/dist/components/forms/kt-radio-group/kt-radio-group.js +67 -53
- package/dist/components/forms/kt-radio-group/kt-radio-group.js.map +1 -1
- package/dist/components/forms/kt-select/kt-select.d.ts +13 -0
- package/dist/components/forms/kt-select/kt-select.js +87 -56
- package/dist/components/forms/kt-select/kt-select.js.map +1 -1
- package/dist/components/forms/kt-textarea/kt-textarea.d.ts +9 -0
- package/dist/components/forms/kt-textarea/kt-textarea.js +28 -14
- package/dist/components/forms/kt-textarea/kt-textarea.js.map +1 -1
- package/dist/components/forms/kt-toggle/kt-toggle.d.ts +9 -0
- package/dist/components/forms/kt-toggle/kt-toggle.js +43 -29
- package/dist/components/forms/kt-toggle/kt-toggle.js.map +1 -1
- package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +3 -3
- package/dist/components/navigation/kt-header/kt-header.js +3 -3
- package/dist/components/navigation/kt-page-header/kt-page-header.js +1 -1
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.d.ts +9 -0
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +40 -22
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js.map +1 -1
- package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +3 -3
- package/dist/components/navigation/kt-tabs/kt-tabs.js +2 -2
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +2 -2
- package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +3 -3
- package/dist/components/overlays/kt-collapsible/kt-collapsible.js +2 -2
- package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +3 -3
- package/dist/components/overlays/kt-dropdown/kt-dropdown.d.ts +7 -5
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js +67 -57
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js.map +1 -1
- package/dist/components/overlays/kt-modal/kt-modal.js +3 -3
- package/dist/components/overlays/kt-side-panel/kt-side-panel.js +3 -3
- package/dist/custom-elements.json +2110 -124
- package/dist/icons/defaults.d.ts +1 -0
- package/dist/icons/index.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +91 -87
- package/dist/index.js.map +1 -1
- package/dist/internal/countries.d.ts +24 -9
- package/dist/internal/date.d.ts +53 -0
- package/dist/internal/events.d.ts +5 -0
- package/dist/internal/floating.d.ts +48 -0
- package/dist/internal/form-control.d.ts +5 -1
- package/dist/internal/locale.d.ts +15 -0
- package/dist/internal/position.d.ts +27 -0
- package/dist/internal/strings.d.ts +15 -0
- package/dist/react/index.d.ts +12 -0
- package/dist/react/index.js +180 -166
- package/dist/react/index.js.map +1 -1
- package/dist/react/jsx.d.ts +11 -1
- package/dist/strings/index.js +1 -1
- package/dist/tokens/base.css +2 -0
- package/dist/tokens/responsive.css +1 -0
- package/dist/tokens/spacing.css +1 -0
- package/dist/vscode.css-custom-data.json +8 -0
- package/dist/vscode.html-custom-data.json +138 -11
- package/dist/vue/index.d.ts +4 -0
- package/dist/vue/index.js +9 -7
- package/dist/vue/index.js.map +1 -1
- package/dist/web-types.json +292 -14
- package/package.json +10 -1
- package/dist/chunks/events-Bjl5Zmmq.js +0 -18
- package/dist/chunks/form-control-CxjBTt1c.js.map +0 -1
- package/dist/chunks/index-DSSLJirw.js.map +0 -1
|
@@ -1,40 +1,46 @@
|
|
|
1
|
-
import { css as
|
|
2
|
-
import { query as h, state as f, property as
|
|
1
|
+
import { css as y, nothing as v, html as p } from "lit";
|
|
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
|
|
5
|
-
import { e as d } from "../../../chunks/events-
|
|
6
|
-
import { o as x } from "../../../chunks/listbox-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import { K as c, d as b } from "../../../chunks/kt-element-Djx2JcGl.js";
|
|
5
|
+
import { t as m, e as d } from "../../../chunks/events-r51msXNf.js";
|
|
6
|
+
import { o as x } from "../../../chunks/listbox-llcUu_V-.js";
|
|
7
|
+
import { F as w, f as k } from "../../../chunks/floating-B7_Dahpn.js";
|
|
8
|
+
import { s as $ } from "../../../chunks/index-STEEvEP7.js";
|
|
9
|
+
var P = Object.defineProperty, i = (r, t, s, a) => {
|
|
10
|
+
for (var o = void 0, l = r.length - 1, g; l >= 0; l--)
|
|
11
|
+
(g = r[l]) && (o = g(t, s, o) || o);
|
|
12
|
+
return o && P(t, s, o), o;
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
-
class e extends g {
|
|
14
|
+
class e extends c {
|
|
15
15
|
constructor() {
|
|
16
|
-
super(...arguments), this.open = !1, this.placement = "bottom", this.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
super(...arguments), this.open = !1, this.placement = "bottom", this.floating = new w(this, {
|
|
17
|
+
panel: () => this.shadowRoot?.querySelector(".panel"),
|
|
18
|
+
anchor: () => this.triggerWrapper,
|
|
19
|
+
side: () => this.preferredPlacement,
|
|
20
|
+
align: () => this.align,
|
|
21
|
+
onPlace: (t) => {
|
|
22
|
+
this.placement = t === "top" ? "top" : "bottom";
|
|
23
|
+
}
|
|
24
|
+
}), this.options = [], this.value = null, this.preferredPlacement = "bottom", this.align = "start", this.disabled = !1, this.emptyText = void 0, this.onDocumentPointerDown = (t) => {
|
|
20
25
|
t.composedPath().includes(this) || this.hide();
|
|
21
26
|
}, this.onDocumentKeyDown = (t) => {
|
|
22
27
|
t.key === "Escape" && this.hide();
|
|
23
28
|
}, this.syncTrigger = () => {
|
|
24
29
|
const t = this.triggerSlot?.assignedElements()[0];
|
|
25
30
|
if (!t) return;
|
|
26
|
-
const
|
|
27
|
-
if (
|
|
28
|
-
t.popup =
|
|
31
|
+
const s = this.panelSlot?.assignedElements()[0]?.getAttribute("role") === "menu", a = this.options.length > 0 || s ? "menu" : void 0;
|
|
32
|
+
if (S(t)) {
|
|
33
|
+
t.popup = a, t.expanded = this.open;
|
|
29
34
|
return;
|
|
30
35
|
}
|
|
31
|
-
|
|
36
|
+
a ? t.setAttribute("aria-haspopup", a) : t.removeAttribute("aria-haspopup"), t.setAttribute("aria-expanded", String(this.open));
|
|
32
37
|
};
|
|
33
38
|
}
|
|
34
39
|
static {
|
|
35
40
|
this.styles = [
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
c.styles,
|
|
42
|
+
k,
|
|
43
|
+
y`
|
|
38
44
|
:host {
|
|
39
45
|
position: relative;
|
|
40
46
|
display: inline-block;
|
|
@@ -50,11 +56,8 @@ class e extends g {
|
|
|
50
56
|
opacity: 0.6;
|
|
51
57
|
}
|
|
52
58
|
|
|
59
|
+
/* Placed from the trigger by FloatingController. */
|
|
53
60
|
.panel {
|
|
54
|
-
position: absolute;
|
|
55
|
-
top: calc(100% + 6px);
|
|
56
|
-
left: 0;
|
|
57
|
-
z-index: var(--z-dropdown);
|
|
58
61
|
box-sizing: border-box;
|
|
59
62
|
width: 224px;
|
|
60
63
|
max-height: 224px;
|
|
@@ -72,8 +75,6 @@ class e extends g {
|
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
.panel.top {
|
|
75
|
-
top: auto;
|
|
76
|
-
bottom: calc(100% + 6px);
|
|
77
78
|
transform: translateY(6px);
|
|
78
79
|
transform-origin: bottom left;
|
|
79
80
|
}
|
|
@@ -81,8 +82,6 @@ class e extends g {
|
|
|
81
82
|
/* Hangs the panel off the trigger's right edge, for a trigger that sits
|
|
82
83
|
at the right of what it belongs to — the caret of a split button. */
|
|
83
84
|
.panel.end {
|
|
84
|
-
right: 0;
|
|
85
|
-
left: auto;
|
|
86
85
|
transform-origin: top right;
|
|
87
86
|
}
|
|
88
87
|
|
|
@@ -144,17 +143,26 @@ class e extends g {
|
|
|
144
143
|
return this.open;
|
|
145
144
|
}
|
|
146
145
|
connectedCallback() {
|
|
147
|
-
super.connectedCallback(),
|
|
146
|
+
super.connectedCallback(), this.listen(this.open);
|
|
148
147
|
}
|
|
149
148
|
disconnectedCallback() {
|
|
150
|
-
super.disconnectedCallback(),
|
|
149
|
+
super.disconnectedCallback(), this.listen(!1);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The outside click and Escape a panel reacts to — only while it is
|
|
153
|
+
* open. A page of closed menus should not run a handler per menu on every
|
|
154
|
+
* click and keystroke.
|
|
155
|
+
*/
|
|
156
|
+
listen(t) {
|
|
157
|
+
m(t, document, "pointerdown", this.onDocumentPointerDown), m(t, document, "keydown", this.onDocumentKeyDown);
|
|
151
158
|
}
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
// Untyped: `open` is private, so not among the keys PropertyValues<this> knows.
|
|
160
|
+
updated(t) {
|
|
161
|
+
this.syncTrigger(), t.has("open") && this.listen(this.open), this.floating.sync(this.open);
|
|
154
162
|
}
|
|
155
163
|
/** Opens the panel. */
|
|
156
164
|
show() {
|
|
157
|
-
this.disabled || this.open || (this.
|
|
165
|
+
this.disabled || this.open || (this.open = !0, d(this, "kt-open"));
|
|
158
166
|
}
|
|
159
167
|
/** Closes the panel. */
|
|
160
168
|
hide() {
|
|
@@ -174,8 +182,10 @@ class e extends g {
|
|
|
174
182
|
|
|
175
183
|
<div
|
|
176
184
|
part="panel"
|
|
185
|
+
popover="manual"
|
|
177
186
|
class=${u({
|
|
178
187
|
panel: !0,
|
|
188
|
+
floating: !0,
|
|
179
189
|
open: this.open,
|
|
180
190
|
top: this.placement === "top",
|
|
181
191
|
end: this.align === "end"
|
|
@@ -193,55 +203,55 @@ class e extends g {
|
|
|
193
203
|
disabled: !!t.disabled
|
|
194
204
|
})}
|
|
195
205
|
role="menuitem"
|
|
196
|
-
aria-disabled=${t.disabled ? "true" :
|
|
206
|
+
aria-disabled=${t.disabled ? "true" : v}
|
|
197
207
|
@click=${() => this.choose(t)}
|
|
198
208
|
>
|
|
199
209
|
${x(t)}
|
|
200
210
|
</li>`
|
|
201
211
|
)}
|
|
202
212
|
</ul>` : p`<slot name="panel">
|
|
203
|
-
<div class="empty">${this.emptyText ??
|
|
213
|
+
<div class="empty">${this.emptyText ?? $().noResults}</div>
|
|
204
214
|
</slot>`}
|
|
205
215
|
</div>`;
|
|
206
216
|
}
|
|
207
217
|
}
|
|
208
|
-
|
|
218
|
+
i([
|
|
209
219
|
h(".trigger")
|
|
210
220
|
], e.prototype, "triggerWrapper");
|
|
211
|
-
|
|
221
|
+
i([
|
|
212
222
|
h('slot[name="trigger"]')
|
|
213
223
|
], e.prototype, "triggerSlot");
|
|
214
|
-
|
|
224
|
+
i([
|
|
215
225
|
h('slot[name="panel"]')
|
|
216
226
|
], e.prototype, "panelSlot");
|
|
217
|
-
|
|
227
|
+
i([
|
|
218
228
|
f()
|
|
219
229
|
], e.prototype, "open");
|
|
220
|
-
|
|
230
|
+
i([
|
|
221
231
|
f()
|
|
222
232
|
], e.prototype, "placement");
|
|
223
|
-
|
|
224
|
-
|
|
233
|
+
i([
|
|
234
|
+
n({ attribute: !1 })
|
|
225
235
|
], e.prototype, "options");
|
|
226
|
-
|
|
227
|
-
|
|
236
|
+
i([
|
|
237
|
+
n({ type: String })
|
|
228
238
|
], e.prototype, "value");
|
|
229
|
-
|
|
230
|
-
|
|
239
|
+
i([
|
|
240
|
+
n({ type: String, attribute: "preferred-placement" })
|
|
231
241
|
], e.prototype, "preferredPlacement");
|
|
232
|
-
|
|
233
|
-
|
|
242
|
+
i([
|
|
243
|
+
n({ type: String, reflect: !0 })
|
|
234
244
|
], e.prototype, "align");
|
|
235
|
-
|
|
236
|
-
|
|
245
|
+
i([
|
|
246
|
+
n({ type: Boolean, reflect: !0 })
|
|
237
247
|
], e.prototype, "disabled");
|
|
238
|
-
|
|
239
|
-
|
|
248
|
+
i([
|
|
249
|
+
n({ type: String, attribute: "empty-text" })
|
|
240
250
|
], e.prototype, "emptyText");
|
|
241
|
-
function
|
|
242
|
-
return "popup" in
|
|
251
|
+
function S(r) {
|
|
252
|
+
return "popup" in r && "expanded" in r;
|
|
243
253
|
}
|
|
244
|
-
|
|
254
|
+
b("kt-dropdown", e);
|
|
245
255
|
export {
|
|
246
256
|
e as KtDropdown
|
|
247
257
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kt-dropdown.js","sources":["../../../../src/components/overlays/kt-dropdown/kt-dropdown.ts"],"sourcesContent":["import { css, html, nothing, 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 } from '#internal/events';\nimport { optionLabel, type KtOption } from '#internal/listbox';\nimport { strings } from '#internal/strings';\n\nexport type KtDropdownPlacement = 'bottom' | 'top';\nexport type KtDropdownAlign = 'start' | 'end';\n\n/** Panel height plus the 6px offset, used to decide whether it fits below. */\nconst PANEL_SPACE = 224 + 6;\n\n/**\n * A panel anchored to a trigger.\n *\n * The generic overlay: pass `options` for a menu, or slot anything into\n * `panel` for arbitrary content. For choosing a value in a form, reach for\n * `<kt-select>` or `<kt-input-menu>` instead — they carry the listbox\n * semantics this one deliberately does not assume.\n *\n * @element kt-dropdown\n *\n * @slot trigger - What opens the panel.\n * @slot panel - Panel contents, when `options` is not used.\n *\n * @csspart trigger - The trigger wrapper.\n * @csspart panel - The floating panel.\n * @csspart option - A menu row.\n *\n * @fires kt-select - A menu row was chosen. `detail: { value, option }`.\n * @fires kt-open - The panel opened.\n * @fires kt-close - The panel closed.\n */\nexport class KtDropdown extends KtElement {\n static override styles = [\n KtElement.styles,\n css`\n :host {\n position: relative;\n display: inline-block;\n }\n\n .trigger {\n border-radius: var(--radius-input);\n cursor: pointer;\n }\n\n :host([disabled]) .trigger {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .panel {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n z-index: var(--z-dropdown);\n box-sizing: border-box;\n width: 224px;\n max-height: 224px;\n margin: 0;\n padding: var(--padding-expand);\n background: var(--surface-raised);\n border-radius: var(--radius-input);\n transform: translateY(-6px);\n transform-origin: top left;\n visibility: hidden;\n opacity: 0;\n transition:\n opacity var(--duration-normal) var(--easing-standard),\n transform var(--duration-normal) var(--easing-standard);\n }\n\n .panel.top {\n top: auto;\n bottom: calc(100% + 6px);\n transform: translateY(6px);\n transform-origin: bottom left;\n }\n\n /* Hangs the panel off the trigger's right edge, for a trigger that sits\n at the right of what it belongs to — the caret of a split button. */\n .panel.end {\n right: 0;\n left: auto;\n transform-origin: top right;\n }\n\n .panel.end.top {\n transform-origin: bottom right;\n }\n\n .panel.open {\n visibility: visible;\n opacity: 1;\n transform: translateY(0);\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: var(--gap-element);\n max-height: 208px;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n scrollbar-width: thin;\n }\n\n .option {\n padding: var(--padding-expand-item);\n color: var(--text-muted);\n font: var(--font-normal-regular);\n border-radius: var(--radius-input);\n cursor: pointer;\n }\n .option:hover {\n background: var(--surface-hover);\n }\n\n .option.selected {\n color: var(--text-body);\n font-weight: 600;\n background: var(--color-dark-23);\n }\n\n .option.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .empty {\n padding: var(--padding-expand-item);\n color: var(--text-muted);\n font: var(--font-normal-small);\n cursor: default;\n }\n `,\n ];\n\n @query('.trigger')\n private triggerWrapper!: HTMLElement;\n\n @query('slot[name=\"trigger\"]')\n private triggerSlot?: HTMLSlotElement;\n\n @query('slot[name=\"panel\"]')\n private panelSlot?: HTMLSlotElement;\n\n @state()\n private open = false;\n\n /** Where the panel actually landed, after checking the room available. */\n @state()\n private placement: KtDropdownPlacement = 'bottom';\n\n /** Menu rows. Leave empty and slot into `panel` for custom content. */\n @property({ attribute: false })\n options: readonly KtOption[] = [];\n\n /** Marks one row as current. */\n @property({ type: String })\n value: string | number | null = null;\n\n /** Where to put the panel when there is room on both sides. */\n @property({ type: String, attribute: 'preferred-placement' })\n preferredPlacement: KtDropdownPlacement = 'bottom';\n\n /** Which edge of the trigger the panel lines up with. */\n @property({ type: String, reflect: true })\n align: KtDropdownAlign = 'start';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: String, attribute: 'empty-text' })\n emptyText: string | undefined = undefined;\n\n /** Whether the panel is showing. */\n get isOpen(): boolean {\n return this.open;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('pointerdown', this.onDocumentPointerDown);\n document.addEventListener('keydown', this.onDocumentKeyDown);\n window.addEventListener('resize', this.reposition);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onDocumentPointerDown);\n document.removeEventListener('keydown', this.onDocumentKeyDown);\n window.removeEventListener('resize', this.reposition);\n }\n\n /**\n * Flips the panel above the trigger when there is not enough room below,\n * preferring whichever side has more space if neither fits.\n */\n private reposition = (): void => {\n const anchor = this.triggerWrapper ?? this;\n const rect = anchor.getBoundingClientRect();\n const below = window.innerHeight - rect.bottom;\n const above = rect.top;\n\n this.placement =\n this.preferredPlacement === 'top'\n ? above >= PANEL_SPACE || above >= below\n ? 'top'\n : 'bottom'\n : below >= PANEL_SPACE || below >= above\n ? 'bottom'\n : 'top';\n };\n\n private onDocumentPointerDown = (event: Event): void => {\n if (event.composedPath().includes(this)) return;\n this.hide();\n };\n\n private onDocumentKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') this.hide();\n };\n\n override updated(): void {\n this.syncTrigger();\n }\n\n /**\n * Puts the popup state on the slotted trigger — the element that takes focus,\n * so the one a screen reader announces. A `<kt-button>` gets it through its\n * properties and passes it to its inner button; anything else as attributes.\n *\n * Only a menu is announced as one: the built-in list of options, or a\n * slotted panel that says `role=\"menu\"` itself. A panel of free content is a\n * disclosure — `aria-expanded` alone.\n */\n private syncTrigger = (): void => {\n const trigger = this.triggerSlot?.assignedElements()[0];\n if (!trigger) return;\n\n const customMenu = this.panelSlot?.assignedElements()[0]?.getAttribute('role') === 'menu';\n const popup = this.options.length > 0 || customMenu ? 'menu' : undefined;\n if (isPopupTrigger(trigger)) {\n trigger.popup = popup;\n trigger.expanded = this.open;\n return;\n }\n if (popup) trigger.setAttribute('aria-haspopup', popup);\n else trigger.removeAttribute('aria-haspopup');\n trigger.setAttribute('aria-expanded', String(this.open));\n };\n\n /** Opens the panel. */\n show(): void {\n if (this.disabled || this.open) return;\n this.reposition();\n this.open = true;\n emit(this, 'kt-open');\n }\n\n /** Closes the panel. */\n hide(): void {\n if (!this.open) return;\n this.open = false;\n emit(this, 'kt-close');\n }\n\n /** Opens or closes it. */\n toggle(): void {\n if (this.open) this.hide();\n else this.show();\n }\n\n private choose(option: KtOption): void {\n if (option.disabled) return;\n this.value = option.id;\n this.hide();\n emit(this, 'kt-select', { value: option.id, option });\n }\n\n override render(): TemplateResult {\n return html`<div part=\"trigger\" class=\"trigger\" @click=${this.toggle}>\n <slot name=\"trigger\" @slotchange=${this.syncTrigger}></slot>\n </div>\n\n <div\n part=\"panel\"\n class=${classMap({\n panel: true,\n open: this.open,\n top: this.placement === 'top',\n end: this.align === 'end',\n })}\n role=${this.options.length > 0 ? 'menu' : 'group'}\n aria-hidden=${this.open ? 'false' : 'true'}\n >\n ${\n this.options.length > 0\n ? html`<ul class=\"list\">\n ${this.options.map(\n (option) =>\n html`<li\n part=\"option\"\n class=${classMap({\n option: true,\n selected: option.id === this.value,\n disabled: Boolean(option.disabled),\n })}\n role=\"menuitem\"\n aria-disabled=${option.disabled ? 'true' : nothing}\n @click=${() => this.choose(option)}\n >\n ${optionLabel(option)}\n </li>`,\n )}\n </ul>`\n : html`<slot name=\"panel\">\n <div class=\"empty\">${this.emptyText ?? strings().noResults}</div>\n </slot>`\n }\n </div>`;\n }\n}\n\n/** A trigger that takes its popup state as properties, like `<kt-button>`. */\ninterface PopupTrigger extends Element {\n popup: 'menu' | undefined;\n expanded: boolean | undefined;\n}\n\nfunction isPopupTrigger(element: Element): element is PopupTrigger {\n return 'popup' in element && 'expanded' in element;\n}\n\ndefineElement('kt-dropdown', KtDropdown);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-dropdown': KtDropdown;\n }\n}\n"],"names":["PANEL_SPACE","KtDropdown","KtElement","rect","below","above","event","trigger","customMenu","popup","isPopupTrigger","css","emit","option","html","classMap","nothing","optionLabel","strings","__decorateClass","query","state","property","element","defineElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kt-dropdown.js","sources":["../../../../src/components/overlays/kt-dropdown/kt-dropdown.ts"],"sourcesContent":["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, toggleListener } from '#internal/events';\nimport { optionLabel, type KtOption } from '#internal/listbox';\nimport { FloatingController, floatingStyles } from '#internal/floating';\nimport { strings } from '#internal/strings';\n\nexport type KtDropdownPlacement = 'bottom' | 'top';\nexport type KtDropdownAlign = 'start' | 'end';\n\n/**\n * A panel anchored to a trigger.\n *\n * The generic overlay: pass `options` for a menu, or slot anything into\n * `panel` for arbitrary content. For choosing a value in a form, reach for\n * `<kt-select>` or `<kt-input-menu>` instead — they carry the listbox\n * semantics this one deliberately does not assume.\n *\n * @element kt-dropdown\n *\n * @slot trigger - What opens the panel.\n * @slot panel - Panel contents, when `options` is not used.\n *\n * @csspart trigger - The trigger wrapper.\n * @csspart panel - The floating panel.\n * @csspart option - A menu row.\n *\n * @fires kt-select - A menu row was chosen. `detail: { value, option }`.\n * @fires kt-open - The panel opened.\n * @fires kt-close - The panel closed.\n */\nexport class KtDropdown extends KtElement {\n static override styles = [\n KtElement.styles,\n floatingStyles,\n css`\n :host {\n position: relative;\n display: inline-block;\n }\n\n .trigger {\n border-radius: var(--radius-input);\n cursor: pointer;\n }\n\n :host([disabled]) .trigger {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n /* Placed from the trigger by FloatingController. */\n .panel {\n box-sizing: border-box;\n width: 224px;\n max-height: 224px;\n margin: 0;\n padding: var(--padding-expand);\n background: var(--surface-raised);\n border-radius: var(--radius-input);\n transform: translateY(-6px);\n transform-origin: top left;\n visibility: hidden;\n opacity: 0;\n transition:\n opacity var(--duration-normal) var(--easing-standard),\n transform var(--duration-normal) var(--easing-standard);\n }\n\n .panel.top {\n transform: translateY(6px);\n transform-origin: bottom left;\n }\n\n /* Hangs the panel off the trigger's right edge, for a trigger that sits\n at the right of what it belongs to — the caret of a split button. */\n .panel.end {\n transform-origin: top right;\n }\n\n .panel.end.top {\n transform-origin: bottom right;\n }\n\n .panel.open {\n visibility: visible;\n opacity: 1;\n transform: translateY(0);\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: var(--gap-element);\n max-height: 208px;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n scrollbar-width: thin;\n }\n\n .option {\n padding: var(--padding-expand-item);\n color: var(--text-muted);\n font: var(--font-normal-regular);\n border-radius: var(--radius-input);\n cursor: pointer;\n }\n .option:hover {\n background: var(--surface-hover);\n }\n\n .option.selected {\n color: var(--text-body);\n font-weight: 600;\n background: var(--color-dark-23);\n }\n\n .option.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .empty {\n padding: var(--padding-expand-item);\n color: var(--text-muted);\n font: var(--font-normal-small);\n cursor: default;\n }\n `,\n ];\n\n @query('.trigger')\n private triggerWrapper!: HTMLElement;\n\n @query('slot[name=\"trigger\"]')\n private triggerSlot?: HTMLSlotElement;\n\n @query('slot[name=\"panel\"]')\n private panelSlot?: HTMLSlotElement;\n\n @state()\n private open = false;\n\n /** Where the panel actually landed, after checking the room available. */\n @state()\n private placement: KtDropdownPlacement = 'bottom';\n\n private floating = new FloatingController(this, {\n panel: () => this.shadowRoot?.querySelector<HTMLElement>('.panel'),\n anchor: () => this.triggerWrapper,\n side: () => this.preferredPlacement,\n align: () => this.align,\n onPlace: (side) => {\n this.placement = side === 'top' ? 'top' : 'bottom';\n },\n });\n\n /** Menu rows. Leave empty and slot into `panel` for custom content. */\n @property({ attribute: false })\n options: readonly KtOption[] = [];\n\n /** Marks one row as current. */\n @property({ type: String })\n value: string | number | null = null;\n\n /** Where to put the panel when there is room on both sides. */\n @property({ type: String, attribute: 'preferred-placement' })\n preferredPlacement: KtDropdownPlacement = 'bottom';\n\n /** Which edge of the trigger the panel lines up with. */\n @property({ type: String, reflect: true })\n align: KtDropdownAlign = 'start';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: String, attribute: 'empty-text' })\n emptyText: string | undefined = undefined;\n\n /** Whether the panel is showing. */\n get isOpen(): boolean {\n return this.open;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Back on the document if it was reconnected while open.\n this.listen(this.open);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.listen(false);\n }\n\n /**\n * The outside click and Escape a panel reacts to — only while it is\n * open. A page of closed menus should not run a handler per menu on every\n * click and keystroke.\n */\n private listen(on: boolean): void {\n toggleListener(on, document, 'pointerdown', this.onDocumentPointerDown);\n toggleListener(on, document, 'keydown', this.onDocumentKeyDown as EventListener);\n }\n\n private onDocumentPointerDown = (event: Event): void => {\n if (event.composedPath().includes(this)) return;\n this.hide();\n };\n\n private onDocumentKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') this.hide();\n };\n\n // Untyped: `open` is private, so not among the keys PropertyValues<this> knows.\n override updated(changed: PropertyValues): void {\n this.syncTrigger();\n if (changed.has('open')) this.listen(this.open);\n this.floating.sync(this.open);\n }\n\n /**\n * Puts the popup state on the slotted trigger — the element that takes focus,\n * so the one a screen reader announces. A `<kt-button>` gets it through its\n * properties and passes it to its inner button; anything else as attributes.\n *\n * Only a menu is announced as one: the built-in list of options, or a\n * slotted panel that says `role=\"menu\"` itself. A panel of free content is a\n * disclosure — `aria-expanded` alone.\n */\n private syncTrigger = (): void => {\n const trigger = this.triggerSlot?.assignedElements()[0];\n if (!trigger) return;\n\n const customMenu = this.panelSlot?.assignedElements()[0]?.getAttribute('role') === 'menu';\n const popup = this.options.length > 0 || customMenu ? 'menu' : undefined;\n if (isPopupTrigger(trigger)) {\n trigger.popup = popup;\n trigger.expanded = this.open;\n return;\n }\n if (popup) trigger.setAttribute('aria-haspopup', popup);\n else trigger.removeAttribute('aria-haspopup');\n trigger.setAttribute('aria-expanded', String(this.open));\n };\n\n /** Opens the panel. */\n show(): void {\n if (this.disabled || this.open) return;\n this.open = true;\n emit(this, 'kt-open');\n }\n\n /** Closes the panel. */\n hide(): void {\n if (!this.open) return;\n this.open = false;\n emit(this, 'kt-close');\n }\n\n /** Opens or closes it. */\n toggle(): void {\n if (this.open) this.hide();\n else this.show();\n }\n\n private choose(option: KtOption): void {\n if (option.disabled) return;\n this.value = option.id;\n this.hide();\n emit(this, 'kt-select', { value: option.id, option });\n }\n\n override render(): TemplateResult {\n return html`<div part=\"trigger\" class=\"trigger\" @click=${this.toggle}>\n <slot name=\"trigger\" @slotchange=${this.syncTrigger}></slot>\n </div>\n\n <div\n part=\"panel\"\n popover=\"manual\"\n class=${classMap({\n panel: true,\n floating: true,\n open: this.open,\n top: this.placement === 'top',\n end: this.align === 'end',\n })}\n role=${this.options.length > 0 ? 'menu' : 'group'}\n aria-hidden=${this.open ? 'false' : 'true'}\n >\n ${\n this.options.length > 0\n ? html`<ul class=\"list\">\n ${this.options.map(\n (option) =>\n html`<li\n part=\"option\"\n class=${classMap({\n option: true,\n selected: option.id === this.value,\n disabled: Boolean(option.disabled),\n })}\n role=\"menuitem\"\n aria-disabled=${option.disabled ? 'true' : nothing}\n @click=${() => this.choose(option)}\n >\n ${optionLabel(option)}\n </li>`,\n )}\n </ul>`\n : html`<slot name=\"panel\">\n <div class=\"empty\">${this.emptyText ?? strings().noResults}</div>\n </slot>`\n }\n </div>`;\n }\n}\n\n/** A trigger that takes its popup state as properties, like `<kt-button>`. */\ninterface PopupTrigger extends Element {\n popup: 'menu' | undefined;\n expanded: boolean | undefined;\n}\n\nfunction isPopupTrigger(element: Element): element is PopupTrigger {\n return 'popup' in element && 'expanded' in element;\n}\n\ndefineElement('kt-dropdown', KtDropdown);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-dropdown': KtDropdown;\n }\n}\n"],"names":["KtDropdown","KtElement","FloatingController","side","event","trigger","customMenu","popup","isPopupTrigger","floatingStyles","css","on","toggleListener","changed","emit","option","html","classMap","nothing","optionLabel","strings","__decorateClass","query","state","property","element","defineElement"],"mappings":"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"}
|
|
@@ -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-
|
|
4
|
-
import { e as u } from "../../../chunks/events-
|
|
3
|
+
import { K as c, d as m } from "../../../chunks/kt-element-Djx2JcGl.js";
|
|
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-
|
|
7
|
+
import { s as x } from "../../../chunks/index-STEEvEP7.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-
|
|
4
|
-
import { e as v } from "../../../chunks/events-
|
|
3
|
+
import { K as h, d as u } from "../../../chunks/kt-element-Djx2JcGl.js";
|
|
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-
|
|
6
|
+
import { s as l } from "../../../chunks/index-STEEvEP7.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--)
|