kanto-ds 1.0.1 → 1.2.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/README.md +20 -2
- package/dist/chunks/form-control-CxjBTt1c.js.map +1 -1
- package/dist/chunks/kt-element-B_jjQDhg.js +38 -0
- package/dist/chunks/kt-element-B_jjQDhg.js.map +1 -0
- package/dist/components/core/kt-avatar/kt-avatar.js +9 -6
- package/dist/components/core/kt-avatar/kt-avatar.js.map +1 -1
- package/dist/components/core/kt-badge/kt-badge.js +17 -17
- package/dist/components/core/kt-badge/kt-badge.js.map +1 -1
- package/dist/components/core/kt-button/kt-button.d.ts +7 -0
- package/dist/components/core/kt-button/kt-button.js +68 -60
- package/dist/components/core/kt-button/kt-button.js.map +1 -1
- package/dist/components/core/kt-card/kt-card.js +1 -1
- package/dist/components/core/kt-code/kt-code.js +12 -12
- package/dist/components/core/kt-code/kt-code.js.map +1 -1
- package/dist/components/core/kt-icon/kt-icon.js +1 -1
- package/dist/components/core/kt-kbd/kt-kbd.js +14 -14
- package/dist/components/core/kt-kbd/kt-kbd.js.map +1 -1
- package/dist/components/core/kt-split-button/kt-split-button.js +3 -3
- package/dist/components/core/kt-split-button/kt-split-button.js.map +1 -1
- package/dist/components/data/kt-chart/kt-chart.js +1 -1
- package/dist/components/data/kt-meter/kt-meter.js +1 -1
- package/dist/components/data/kt-pagination/kt-pagination.js +1 -1
- package/dist/components/data/kt-stat/kt-stat.js +5 -5
- package/dist/components/data/kt-stat/kt-stat.js.map +1 -1
- package/dist/components/data/kt-table/kt-table.js +2 -2
- package/dist/components/data/kt-table/kt-table.js.map +1 -1
- package/dist/components/data/kt-timeline/kt-timeline.js +1 -1
- package/dist/components/feedback/kt-alert/kt-alert.js +26 -26
- package/dist/components/feedback/kt-alert/kt-alert.js.map +1 -1
- package/dist/components/feedback/kt-empty-state/kt-empty-state.js +1 -1
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +2 -2
- 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 +22 -22
- 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.js +1 -1
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.d.ts +11 -1
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +69 -36
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js.map +1 -1
- package/dist/components/forms/kt-form/kt-form.js +1 -1
- package/dist/components/forms/kt-input/kt-input.js +95 -91
- package/dist/components/forms/kt-input/kt-input.js.map +1 -1
- package/dist/components/forms/kt-input-menu/kt-input-menu.d.ts +10 -1
- package/dist/components/forms/kt-input-menu/kt-input-menu.js +83 -53
- 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 +2 -2
- package/dist/components/forms/kt-label-input/kt-label-input.js.map +1 -1
- package/dist/components/forms/kt-select/kt-select.js +2 -2
- package/dist/components/forms/kt-select/kt-select.js.map +1 -1
- package/dist/components/forms/kt-textarea/kt-textarea.js +15 -13
- package/dist/components/forms/kt-textarea/kt-textarea.js.map +1 -1
- package/dist/components/forms/kt-toggle/kt-toggle.js +8 -7
- package/dist/components/forms/kt-toggle/kt-toggle.js.map +1 -1
- package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +1 -1
- package/dist/components/navigation/kt-header/kt-header.js +1 -1
- package/dist/components/navigation/kt-page-header/kt-page-header.js +18 -18
- package/dist/components/navigation/kt-page-header/kt-page-header.js.map +1 -1
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.d.ts +10 -1
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +88 -62
- 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 +5 -5
- package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js.map +1 -1
- package/dist/components/navigation/kt-tabs/kt-tabs.js +1 -1
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +3 -3
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js.map +1 -1
- package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +1 -1
- package/dist/components/overlays/kt-collapsible/kt-collapsible.js +1 -1
- package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +1 -1
- package/dist/components/overlays/kt-dropdown/kt-dropdown.d.ts +13 -0
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js +74 -59
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js.map +1 -1
- package/dist/components/overlays/kt-modal/kt-modal.js +1 -1
- package/dist/components/overlays/kt-side-panel/kt-side-panel.js +1 -1
- package/dist/custom-elements.json +11791 -0
- package/dist/index.js +1 -1
- package/dist/internal/form-control.d.ts +7 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/jsx.d.ts +213 -0
- package/dist/react/jsx.js +2 -0
- package/dist/react/jsx.js.map +1 -0
- package/dist/tokens/README.md +7 -3
- package/dist/tokens/colors.css +24 -5
- package/dist/tokens/theme-light.css +18 -0
- package/dist/vscode.css-custom-data.json +154 -0
- package/dist/vscode.html-custom-data.json +1136 -0
- package/dist/web-types.json +3186 -0
- package/package.json +28 -9
- package/dist/chunks/kt-element-CcMLO5e8.js +0 -28
- package/dist/chunks/kt-element-CcMLO5e8.js.map +0 -1
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
import { css as g, nothing as d, html as p } from "lit";
|
|
2
|
-
import { query as v, state as u, property as
|
|
2
|
+
import { query as v, state as u, property as o } from "lit/decorators.js";
|
|
3
3
|
import { classMap as y } from "lit/directives/class-map.js";
|
|
4
|
-
import { K as f, d as b } from "../../../chunks/kt-element-
|
|
4
|
+
import { K as f, d as b } from "../../../chunks/kt-element-B_jjQDhg.js";
|
|
5
5
|
import { e as c } from "../../../chunks/events-Bjl5Zmmq.js";
|
|
6
|
+
import { a as x, s as k, b as $ } from "../../../chunks/form-control-CxjBTt1c.js";
|
|
6
7
|
import "../../core/kt-icon/kt-icon.js";
|
|
7
8
|
import "../../core/kt-button/kt-button.js";
|
|
8
9
|
const m = ["B", "KB", "MB", "GB", "TB"];
|
|
9
|
-
function
|
|
10
|
-
if (!Number.isFinite(
|
|
11
|
-
let e =
|
|
10
|
+
function w(l) {
|
|
11
|
+
if (!Number.isFinite(l) || l < 0) return "";
|
|
12
|
+
let e = l, t = 0;
|
|
12
13
|
for (; e >= 1024 && t < m.length - 1; )
|
|
13
14
|
e /= 1024, t += 1;
|
|
14
15
|
return `${t === 0 ? String(Math.round(e)) : e.toFixed(1)} ${m[t]}`;
|
|
15
16
|
}
|
|
16
|
-
var
|
|
17
|
-
for (var
|
|
18
|
-
(h =
|
|
19
|
-
return
|
|
17
|
+
var z = Object.defineProperty, r = (l, e, t, a) => {
|
|
18
|
+
for (var s = void 0, n = l.length - 1, h; n >= 0; n--)
|
|
19
|
+
(h = l[n]) && (s = h(e, t, s) || s);
|
|
20
|
+
return s && z(e, t, s), s;
|
|
20
21
|
};
|
|
21
22
|
class i extends f {
|
|
22
23
|
constructor() {
|
|
23
|
-
super(...arguments), this.dragging = !1, this.files = [], this.heading = "Drag and drop or", this.linkText = "browse your files", this.recommendedSize = "", this.multiple = !0, this.accept = "", this.maxSize = 0, this.disabled = !1;
|
|
24
|
+
super(...arguments), this.internals = null, this.dragging = !1, this.files = [], this.heading = "Drag and drop or", this.linkText = "browse your files", this.recommendedSize = "", this.multiple = !0, this.accept = "", this.maxSize = 0, this.disabled = !1, this.name = "", this.required = !1;
|
|
25
|
+
}
|
|
26
|
+
static {
|
|
27
|
+
this.formAssociated = !0;
|
|
24
28
|
}
|
|
25
29
|
static {
|
|
26
30
|
this.styles = [
|
|
@@ -74,7 +78,7 @@ class i extends f {
|
|
|
74
78
|
|
|
75
79
|
.title {
|
|
76
80
|
margin: 0;
|
|
77
|
-
color: var(--color-primary-
|
|
81
|
+
color: var(--color-primary-text);
|
|
78
82
|
font: var(--font-normal-medium);
|
|
79
83
|
}
|
|
80
84
|
|
|
@@ -120,7 +124,7 @@ class i extends f {
|
|
|
120
124
|
width: 48px;
|
|
121
125
|
height: 48px;
|
|
122
126
|
overflow: hidden;
|
|
123
|
-
color: var(--color-info-
|
|
127
|
+
color: var(--color-info-text);
|
|
124
128
|
background: var(--color-dark-14);
|
|
125
129
|
border-radius: 6px;
|
|
126
130
|
}
|
|
@@ -151,6 +155,29 @@ class i extends f {
|
|
|
151
155
|
`
|
|
152
156
|
];
|
|
153
157
|
}
|
|
158
|
+
connectedCallback() {
|
|
159
|
+
super.connectedCallback(), this.internals ??= x(this);
|
|
160
|
+
}
|
|
161
|
+
// Untyped: `files` is private state, which PropertyValues<this> cannot name.
|
|
162
|
+
willUpdate(e) {
|
|
163
|
+
(e.has("files") || e.has("name") || e.has("required")) && this.syncFormValue();
|
|
164
|
+
}
|
|
165
|
+
syncFormValue() {
|
|
166
|
+
let e = null;
|
|
167
|
+
if (this.name && this.files.length > 0) {
|
|
168
|
+
e = new FormData();
|
|
169
|
+
for (const a of this.files) e.append(this.name, a);
|
|
170
|
+
}
|
|
171
|
+
k(this.internals, e);
|
|
172
|
+
const t = this.required && this.files.length === 0;
|
|
173
|
+
$(this.internals, { valueMissing: t }, t ? "Select a file." : "");
|
|
174
|
+
}
|
|
175
|
+
formResetCallback() {
|
|
176
|
+
this.files = [], this.dragging = !1;
|
|
177
|
+
}
|
|
178
|
+
formStateRestoreCallback(e) {
|
|
179
|
+
!(e instanceof FormData) || !this.name || (this.files = e.getAll(this.name).filter((t) => t instanceof File));
|
|
180
|
+
}
|
|
154
181
|
/** The files currently held, newest last. */
|
|
155
182
|
get selectedFiles() {
|
|
156
183
|
return this.files;
|
|
@@ -168,14 +195,14 @@ class i extends f {
|
|
|
168
195
|
}
|
|
169
196
|
addFiles(e) {
|
|
170
197
|
if (!e || e.length === 0) return;
|
|
171
|
-
const t = this.multiple ? [...e] : [...e].slice(0, 1),
|
|
172
|
-
|
|
173
|
-
files:
|
|
174
|
-
reason: this.maxSize > 0 &&
|
|
175
|
-
}),
|
|
198
|
+
const t = this.multiple ? [...e] : [...e].slice(0, 1), a = t.filter((n) => this.accepts(n)), s = t.filter((n) => !this.accepts(n));
|
|
199
|
+
s.length > 0 && c(this, "kt-files-rejected", {
|
|
200
|
+
files: s,
|
|
201
|
+
reason: this.maxSize > 0 && s.some((n) => n.size > this.maxSize) ? "size" : "type"
|
|
202
|
+
}), a.length !== 0 && (this.files = this.multiple ? [...this.files, ...a] : a, c(this, "kt-files-change", { files: this.files }));
|
|
176
203
|
}
|
|
177
204
|
removeAt(e) {
|
|
178
|
-
this.files = this.files.filter((t,
|
|
205
|
+
this.files = this.files.filter((t, a) => a !== e), c(this, "kt-files-change", { files: this.files });
|
|
179
206
|
}
|
|
180
207
|
browse() {
|
|
181
208
|
this.disabled || this.fileInput?.click();
|
|
@@ -233,7 +260,7 @@ class i extends f {
|
|
|
233
260
|
<span class="info">
|
|
234
261
|
<span class="name" title=${e.name}>${e.name}</span>
|
|
235
262
|
<span class="details">
|
|
236
|
-
<span>${
|
|
263
|
+
<span>${w(e.size)}</span>
|
|
237
264
|
${e.type ? p`<span>•</span><span>${e.type}</span>` : d}
|
|
238
265
|
</span>
|
|
239
266
|
</span>
|
|
@@ -250,36 +277,42 @@ class i extends f {
|
|
|
250
277
|
</div>`;
|
|
251
278
|
}
|
|
252
279
|
}
|
|
253
|
-
|
|
280
|
+
r([
|
|
254
281
|
v('input[type="file"]')
|
|
255
282
|
], i.prototype, "fileInput");
|
|
256
|
-
|
|
283
|
+
r([
|
|
257
284
|
u()
|
|
258
285
|
], i.prototype, "dragging");
|
|
259
|
-
|
|
286
|
+
r([
|
|
260
287
|
u()
|
|
261
288
|
], i.prototype, "files");
|
|
262
|
-
|
|
263
|
-
|
|
289
|
+
r([
|
|
290
|
+
o({ type: String })
|
|
264
291
|
], i.prototype, "heading");
|
|
265
|
-
|
|
266
|
-
|
|
292
|
+
r([
|
|
293
|
+
o({ type: String, attribute: "link-text" })
|
|
267
294
|
], i.prototype, "linkText");
|
|
268
|
-
|
|
269
|
-
|
|
295
|
+
r([
|
|
296
|
+
o({ type: String, attribute: "recommended-size" })
|
|
270
297
|
], i.prototype, "recommendedSize");
|
|
271
|
-
|
|
272
|
-
|
|
298
|
+
r([
|
|
299
|
+
o({ type: Boolean })
|
|
273
300
|
], i.prototype, "multiple");
|
|
274
|
-
|
|
275
|
-
|
|
301
|
+
r([
|
|
302
|
+
o({ type: String })
|
|
276
303
|
], i.prototype, "accept");
|
|
277
|
-
|
|
278
|
-
|
|
304
|
+
r([
|
|
305
|
+
o({ type: Number, attribute: "max-size" })
|
|
279
306
|
], i.prototype, "maxSize");
|
|
280
|
-
|
|
281
|
-
|
|
307
|
+
r([
|
|
308
|
+
o({ type: Boolean, reflect: !0 })
|
|
282
309
|
], i.prototype, "disabled");
|
|
310
|
+
r([
|
|
311
|
+
o({ type: String })
|
|
312
|
+
], i.prototype, "name");
|
|
313
|
+
r([
|
|
314
|
+
o({ type: Boolean, reflect: !0 })
|
|
315
|
+
], i.prototype, "required");
|
|
283
316
|
b("kt-drag-drop", i);
|
|
284
317
|
export {
|
|
285
318
|
i as KtDragDrop
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kt-drag-drop.js","sources":["../../../../src/internal/format.ts","../../../../src/components/forms/kt-drag-drop/kt-drag-drop.ts"],"sourcesContent":["/** Formatting helpers shared by elements that display data. */\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * A human-readable file size.\n *\n * Uses 1024 steps, matching what every desktop file manager shows, and one\n * decimal above a kilobyte — \"1.4 MB\" reads; \"1468006 B\" does not.\n */\nexport function formatFileSize(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '';\n\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < UNITS.length - 1) {\n value /= 1024;\n unit += 1;\n }\n\n const rounded = unit === 0 ? String(Math.round(value)) : value.toFixed(1);\n return `${rounded} ${UNITS[unit]}`;\n}\n","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 { formatFileSize } from '#internal/format';\nimport '../../core/kt-icon/kt-icon.js';\nimport '../../core/kt-button/kt-button.js';\n\n/**\n * A file drop zone.\n *\n * Accepts a drop or a click, lists what was picked with sizes and types, and\n * lets each entry be removed. It holds the files in memory and reports them —\n * uploading is the application's business.\n *\n * @element kt-drag-drop\n *\n * @csspart base - The dashed drop zone.\n * @csspart list - The list of chosen files.\n *\n * @fires kt-files-change - The selection changed. `detail: { files }`.\n * @fires kt-files-rejected - Files were refused. `detail: { files, reason }`.\n *\n * @example\n * ```html\n * <kt-drag-drop accept=\"image/*\" recommended-size=\"800×400px\"></kt-drag-drop>\n * ```\n */\nexport class KtDragDrop extends KtElement {\n static override styles = [\n KtElement.styles,\n css`\n :host {\n display: block;\n user-select: none;\n }\n\n .zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--gap-drag-drop);\n padding: var(--padding-drag-drop);\n border: var(--border-width) dashed var(--color-dark-24);\n border-radius: var(--border-radius);\n cursor: pointer;\n transition:\n border-color var(--duration-instant),\n box-shadow var(--duration-instant);\n }\n\n .zone:hover {\n border-color: var(--text-muted);\n }\n\n .zone:focus-visible {\n outline: var(--outline-width) solid var(--color-primary-base);\n outline-offset: 2px;\n }\n\n .dragover {\n border-color: var(--color-primary-base);\n box-shadow: 0 0 0 6px var(--color-primary-soft);\n }\n\n .prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--gap-button);\n text-align: center;\n }\n\n .prompt-icon {\n color: var(--text-muted);\n }\n\n .title {\n margin: 0;\n color: var(--color-primary-base);\n font: var(--font-normal-medium);\n }\n\n .hint {\n color: var(--text-muted);\n font: var(--font-normal-small);\n }\n\n input[type='file'] {\n display: none;\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n .item {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px;\n background: var(--surface-raised);\n border-radius: var(--border-radius);\n cursor: default;\n transition: background var(--duration-normal) var(--easing-standard);\n }\n .item:hover {\n background: var(--surface-hover);\n }\n\n .preview {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n overflow: hidden;\n color: var(--color-info-base);\n background: var(--color-dark-14);\n border-radius: 6px;\n }\n\n .info {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .name {\n overflow: hidden;\n color: var(--text-body);\n font: var(--font-normal-medium);\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .details {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-muted);\n font: var(--font-normal-small);\n }\n `,\n ];\n\n @query('input[type=\"file\"]')\n private fileInput!: HTMLInputElement;\n\n @state()\n private dragging = false;\n\n @state()\n private files: File[] = [];\n\n /**\n * The prompt above the browse link.\n *\n * Named `heading`, not `title`: an element already has a `title`, and\n * reusing it would put the prompt in a native tooltip on the whole zone.\n */\n @property({ type: String })\n heading = 'Drag and drop or';\n\n /** The clickable-looking part of the prompt. */\n @property({ type: String, attribute: 'link-text' })\n linkText = 'browse your files';\n\n /** Optional hint, e.g. `800×400px`. */\n @property({ type: String, attribute: 'recommended-size' })\n recommendedSize = '';\n\n @property({ type: Boolean })\n multiple = true;\n\n /** Same syntax as the native `accept`: `image/*`, `.pdf,.docx`. */\n @property({ type: String })\n accept = '';\n\n /** Largest accepted file, in bytes. Zero means no limit. */\n @property({ type: Number, attribute: 'max-size' })\n maxSize = 0;\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** The files currently held, newest last. */\n get selectedFiles(): readonly File[] {\n return this.files;\n }\n\n /** Empties the selection without firing a rejection. */\n clear(): void {\n this.files = [];\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n /**\n * `accept` is advisory on a native input — the OS dialog filters, but a\n * dropped file bypasses it entirely — so the same rules are enforced here.\n */\n private accepts(file: File): boolean {\n if (this.maxSize > 0 && file.size > this.maxSize) return false;\n if (!this.accept) return true;\n\n return this.accept\n .split(',')\n .map((pattern) => pattern.trim().toLowerCase())\n .filter(Boolean)\n .some((pattern) => {\n if (pattern.startsWith('.')) return file.name.toLowerCase().endsWith(pattern);\n if (pattern.endsWith('/*')) return file.type.startsWith(pattern.slice(0, -1));\n return file.type.toLowerCase() === pattern;\n });\n }\n\n private addFiles(incoming: FileList | null): void {\n if (!incoming || incoming.length === 0) return;\n\n const candidates = this.multiple ? [...incoming] : [...incoming].slice(0, 1);\n const accepted = candidates.filter((file) => this.accepts(file));\n const rejected = candidates.filter((file) => !this.accepts(file));\n\n if (rejected.length > 0) {\n emit(this, 'kt-files-rejected', {\n files: rejected,\n reason: this.maxSize > 0 && rejected.some((f) => f.size > this.maxSize) ? 'size' : 'type',\n });\n }\n if (accepted.length === 0) return;\n\n this.files = this.multiple ? [...this.files, ...accepted] : accepted;\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n private removeAt(index: number): void {\n this.files = this.files.filter((_, position) => position !== index);\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n private browse(): void {\n if (this.disabled) return;\n this.fileInput?.click();\n }\n\n private onZoneKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n this.browse();\n }\n\n private onDragOver(event: DragEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = true;\n }\n\n private onDrop(event: DragEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = false;\n this.addFiles(event.dataTransfer?.files ?? null);\n }\n\n override render(): TemplateResult {\n return html`<div\n part=\"base\"\n class=${classMap({ zone: true, dragover: this.dragging })}\n role=\"button\"\n tabindex=${this.disabled ? -1 : 0}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-label=${`${this.heading} ${this.linkText}`}\n @click=${this.browse}\n @keydown=${this.onZoneKeyDown}\n @dragover=${this.onDragOver}\n @dragleave=${() => {\n this.dragging = false;\n }}\n @drop=${this.onDrop}\n >\n <input\n type=\"file\"\n ?multiple=${this.multiple}\n accept=${this.accept || nothing}\n @click=${(event: Event) => event.stopPropagation()}\n @change=${(event: Event) => this.addFiles((event.target as HTMLInputElement).files)}\n />\n\n <div class=\"prompt\">\n <span class=\"prompt-icon\"><kt-icon name=\"file-up\" size=\"24\"></kt-icon></span>\n <div>\n <p class=\"title\">${this.heading} ${this.linkText}</p>\n ${\n this.recommendedSize\n ? html`<div class=\"hint\">Recommended image size: ${this.recommendedSize}</div>`\n : nothing\n }\n </div>\n </div>\n\n ${\n this.files.length > 0\n ? html`<ul\n part=\"list\"\n class=\"list\"\n aria-label=\"Selected files\"\n @click=${(event: Event) => event.stopPropagation()}\n >\n ${this.files.map(\n (file, index) =>\n html`<li class=\"item\">\n <span class=\"preview\"><kt-icon name=\"file\" size=\"24\"></kt-icon></span>\n <span class=\"info\">\n <span class=\"name\" title=${file.name}>${file.name}</span>\n <span class=\"details\">\n <span>${formatFileSize(file.size)}</span>\n ${file.type ? html`<span>•</span><span>${file.type}</span>` : nothing}\n </span>\n </span>\n <kt-button\n variant=\"danger\"\n size=\"small\"\n icon=\"trash-2\"\n label=${`Remove ${file.name}`}\n @click=${() => this.removeAt(index)}\n ></kt-button>\n </li>`,\n )}\n </ul>`\n : nothing\n }\n </div>`;\n }\n}\n\ndefineElement('kt-drag-drop', KtDragDrop);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-drag-drop': KtDragDrop;\n }\n}\n"],"names":["UNITS","formatFileSize","bytes","value","unit","KtDragDrop","KtElement","css","emit","file","pattern","incoming","candidates","accepted","rejected","f","index","_","position","event","html","classMap","nothing","__decorateClass","query","state","property","defineElement"],"mappings":";;;;;;;AAEA,MAAMA,IAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,IAAI;AAQnC,SAASC,EAAeC,GAAuB;AACpD,MAAI,CAAC,OAAO,SAASA,CAAK,KAAKA,IAAQ,EAAG,QAAO;AAEjD,MAAIC,IAAQD,GACRE,IAAO;AACX,SAAOD,KAAS,QAAQC,IAAOJ,EAAM,SAAS;AAC5C,IAAAG,KAAS,MACTC,KAAQ;AAIV,SAAO,GADSA,MAAS,IAAI,OAAO,KAAK,MAAMD,CAAK,CAAC,IAAIA,EAAM,QAAQ,CAAC,CACvD,IAAIH,EAAMI,CAAI,CAAC;AAClC;;;;;;ACOO,MAAMC,UAAmBC,EAAU;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA,GAqIL,KAAQ,WAAW,IAGnB,KAAQ,QAAgB,CAAA,GASxB,KAAA,UAAU,oBAIV,KAAA,WAAW,qBAIX,KAAA,kBAAkB,IAGlB,KAAA,WAAW,IAIX,KAAA,SAAS,IAIT,KAAA,UAAU,GAGV,KAAA,WAAW;AAAA,EAAA;AAAA,EAtKX,OAAA;AAAA,SAAgB,SAAS;AAAA,MACvBA,EAAU;AAAA,MACVC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,EA4HF;AAAA;AAAA,EA2CA,IAAI,gBAAiC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,QAAQ,CAAA,GACbC,EAAK,MAAM,mBAAmB,EAAE,OAAO,KAAK,OAAO;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,QAAQC,GAAqB;AACnC,WAAI,KAAK,UAAU,KAAKA,EAAK,OAAO,KAAK,UAAgB,KACpD,KAAK,SAEH,KAAK,OACT,MAAM,GAAG,EACT,IAAI,CAACC,MAAYA,EAAQ,OAAO,YAAA,CAAa,EAC7C,OAAO,OAAO,EACd,KAAK,CAACA,MACDA,EAAQ,WAAW,GAAG,IAAUD,EAAK,KAAK,YAAA,EAAc,SAASC,CAAO,IACxEA,EAAQ,SAAS,IAAI,IAAUD,EAAK,KAAK,WAAWC,EAAQ,MAAM,GAAG,EAAE,CAAC,IACrED,EAAK,KAAK,YAAA,MAAkBC,CACpC,IAVsB;AAAA,EAW3B;AAAA,EAEQ,SAASC,GAAiC;AAChD,QAAI,CAACA,KAAYA,EAAS,WAAW,EAAG;AAExC,UAAMC,IAAa,KAAK,WAAW,CAAC,GAAGD,CAAQ,IAAI,CAAC,GAAGA,CAAQ,EAAE,MAAM,GAAG,CAAC,GACrEE,IAAWD,EAAW,OAAO,CAACH,MAAS,KAAK,QAAQA,CAAI,CAAC,GACzDK,IAAWF,EAAW,OAAO,CAACH,MAAS,CAAC,KAAK,QAAQA,CAAI,CAAC;AAQhE,IANIK,EAAS,SAAS,KACpBN,EAAK,MAAM,qBAAqB;AAAA,MAC9B,OAAOM;AAAA,MACP,QAAQ,KAAK,UAAU,KAAKA,EAAS,KAAK,CAACC,MAAMA,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS;AAAA,IAAA,CACpF,GAECF,EAAS,WAAW,MAExB,KAAK,QAAQ,KAAK,WAAW,CAAC,GAAG,KAAK,OAAO,GAAGA,CAAQ,IAAIA,GAC5DL,EAAK,MAAM,mBAAmB,EAAE,OAAO,KAAK,OAAO;AAAA,EACrD;AAAA,EAEQ,SAASQ,GAAqB;AACpC,SAAK,QAAQ,KAAK,MAAM,OAAO,CAACC,GAAGC,MAAaA,MAAaF,CAAK,GAClER,EAAK,MAAM,mBAAmB,EAAE,OAAO,KAAK,OAAO;AAAA,EACrD;AAAA,EAEQ,SAAe;AACrB,IAAI,KAAK,YACT,KAAK,WAAW,MAAA;AAAA,EAClB;AAAA,EAEQ,cAAcW,GAA4B;AAChD,IAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QAC3CA,EAAM,eAAA,GACN,KAAK,OAAA;AAAA,EACP;AAAA,EAEQ,WAAWA,GAAwB;AACzC,IAAI,KAAK,aACTA,EAAM,eAAA,GACN,KAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,OAAOA,GAAwB;AACrC,IAAI,KAAK,aACTA,EAAM,eAAA,GACN,KAAK,WAAW,IAChB,KAAK,SAASA,EAAM,cAAc,SAAS,IAAI;AAAA,EACjD;AAAA,EAES,SAAyB;AAChC,WAAOC;AAAA;AAAA,cAEGC,EAAS,EAAE,MAAM,IAAM,UAAU,KAAK,UAAU,CAAC;AAAA;AAAA,iBAE9C,KAAK,WAAW,KAAK,CAAC;AAAA,sBACjB,KAAK,WAAW,SAASC,CAAO;AAAA,mBACnC,GAAG,KAAK,OAAO,IAAI,KAAK,QAAQ,EAAE;AAAA,eACtC,KAAK,MAAM;AAAA,iBACT,KAAK,aAAa;AAAA,kBACjB,KAAK,UAAU;AAAA,mBACd,MAAM;AACjB,WAAK,WAAW;AAAA,IAClB,CAAC;AAAA,cACO,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,oBAIL,KAAK,QAAQ;AAAA,iBAChB,KAAK,UAAUA,CAAO;AAAA,iBACtB,CAACH,MAAiBA,EAAM,gBAAA,CAAiB;AAAA,kBACxC,CAACA,MAAiB,KAAK,SAAUA,EAAM,OAA4B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAM9D,KAAK,OAAO,IAAI,KAAK,QAAQ;AAAA,YAE9C,KAAK,kBACDC,8CAAiD,KAAK,eAAe,WACrEE,CACN;AAAA;AAAA;AAAA;AAAA,QAKF,KAAK,MAAM,SAAS,IAChBF;AAAA;AAAA;AAAA;AAAA,uBAIW,CAACD,MAAiBA,EAAM,gBAAA,CAAiB;AAAA;AAAA,gBAEhD,KAAK,MAAM;AAAA,MACX,CAACV,GAAMO,MACLI;AAAA;AAAA;AAAA,iDAG+BX,EAAK,IAAI,IAAIA,EAAK,IAAI;AAAA;AAAA,gCAEvCR,EAAeQ,EAAK,IAAI,CAAC;AAAA,0BAC/BA,EAAK,OAAOW,wBAA2BX,EAAK,IAAI,YAAYa,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAO/D,UAAUb,EAAK,IAAI,EAAE;AAAA,+BACpB,MAAM,KAAK,SAASO,CAAK,CAAC;AAAA;AAAA;AAAA,IAAA,CAG1C;AAAA,qBAEHM,CACN;AAAA;AAAA,EAEJ;AACF;AA1LUC,EAAA;AAAA,EADPC,EAAM,oBAAoB;AAAA,GAjIhBnB,EAkIH,WAAA,WAAA;AAGAkB,EAAA;AAAA,EADPE,EAAA;AAAM,GApIIpB,EAqIH,WAAA,UAAA;AAGAkB,EAAA;AAAA,EADPE,EAAA;AAAM,GAvIIpB,EAwIH,WAAA,OAAA;AASRkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAhJfrB,EAiJX,WAAA,SAAA;AAIAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAQ,WAAW,aAAa;AAAA,GApJvCrB,EAqJX,WAAA,UAAA;AAIAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAQ,WAAW,oBAAoB;AAAA,GAxJ9CrB,EAyJX,WAAA,iBAAA;AAGAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GA3JhBrB,EA4JX,WAAA,UAAA;AAIAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA/JfrB,EAgKX,WAAA,QAAA;AAIAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAQ,WAAW,YAAY;AAAA,GAnKtCrB,EAoKX,WAAA,SAAA;AAGAkB,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAtK/BrB,EAuKX,WAAA,UAAA;AAuJFsB,EAAc,gBAAgBtB,CAAU;"}
|
|
1
|
+
{"version":3,"file":"kt-drag-drop.js","sources":["../../../../src/internal/format.ts","../../../../src/components/forms/kt-drag-drop/kt-drag-drop.ts"],"sourcesContent":["/** Formatting helpers shared by elements that display data. */\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * A human-readable file size.\n *\n * Uses 1024 steps, matching what every desktop file manager shows, and one\n * decimal above a kilobyte — \"1.4 MB\" reads; \"1468006 B\" does not.\n */\nexport function formatFileSize(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '';\n\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < UNITS.length - 1) {\n value /= 1024;\n unit += 1;\n }\n\n const rounded = unit === 0 ? String(Math.round(value)) : value.toFixed(1);\n return `${rounded} ${UNITS[unit]}`;\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 } from '#internal/events';\nimport {\n attachFormInternals,\n setFormValue,\n setValidity,\n type UsableInternals,\n} from '#internal/form-control';\nimport { formatFileSize } from '#internal/format';\nimport '../../core/kt-icon/kt-icon.js';\nimport '../../core/kt-button/kt-button.js';\n\n/**\n * A file drop zone.\n *\n * Accepts a drop or a click, lists what was picked with sizes and types, and\n * lets each entry be removed. It holds the files in memory and reports them —\n * uploading is the application's business.\n *\n * @element kt-drag-drop\n *\n * @csspart base - The dashed drop zone.\n * @csspart list - The list of chosen files.\n *\n * @fires kt-files-change - The selection changed. `detail: { files }`.\n * @fires kt-files-rejected - Files were refused. `detail: { files, reason }`.\n *\n * @example\n * ```html\n * <kt-drag-drop accept=\"image/*\" recommended-size=\"800×400px\"></kt-drag-drop>\n * ```\n */\nexport class KtDragDrop extends KtElement {\n static readonly formAssociated = true;\n static override styles = [\n KtElement.styles,\n css`\n :host {\n display: block;\n user-select: none;\n }\n\n .zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--gap-drag-drop);\n padding: var(--padding-drag-drop);\n border: var(--border-width) dashed var(--color-dark-24);\n border-radius: var(--border-radius);\n cursor: pointer;\n transition:\n border-color var(--duration-instant),\n box-shadow var(--duration-instant);\n }\n\n .zone:hover {\n border-color: var(--text-muted);\n }\n\n .zone:focus-visible {\n outline: var(--outline-width) solid var(--color-primary-base);\n outline-offset: 2px;\n }\n\n .dragover {\n border-color: var(--color-primary-base);\n box-shadow: 0 0 0 6px var(--color-primary-soft);\n }\n\n .prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--gap-button);\n text-align: center;\n }\n\n .prompt-icon {\n color: var(--text-muted);\n }\n\n .title {\n margin: 0;\n color: var(--color-primary-text);\n font: var(--font-normal-medium);\n }\n\n .hint {\n color: var(--text-muted);\n font: var(--font-normal-small);\n }\n\n input[type='file'] {\n display: none;\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n .item {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px;\n background: var(--surface-raised);\n border-radius: var(--border-radius);\n cursor: default;\n transition: background var(--duration-normal) var(--easing-standard);\n }\n .item:hover {\n background: var(--surface-hover);\n }\n\n .preview {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n overflow: hidden;\n color: var(--color-info-text);\n background: var(--color-dark-14);\n border-radius: 6px;\n }\n\n .info {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .name {\n overflow: hidden;\n color: var(--text-body);\n font: var(--font-normal-medium);\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .details {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-muted);\n font: var(--font-normal-small);\n }\n `,\n ];\n\n @query('input[type=\"file\"]')\n private fileInput!: HTMLInputElement;\n\n private internals: UsableInternals | null = null;\n\n @state()\n private dragging = false;\n\n @state()\n private files: File[] = [];\n\n /**\n * The prompt above the browse link.\n *\n * Named `heading`, not `title`: an element already has a `title`, and\n * reusing it would put the prompt in a native tooltip on the whole zone.\n */\n @property({ type: String })\n heading = 'Drag and drop or';\n\n /** The clickable-looking part of the prompt. */\n @property({ type: String, attribute: 'link-text' })\n linkText = 'browse your files';\n\n /** Optional hint, e.g. `800×400px`. */\n @property({ type: String, attribute: 'recommended-size' })\n recommendedSize = '';\n\n @property({ type: Boolean })\n multiple = true;\n\n /** Same syntax as the native `accept`: `image/*`, `.pdf,.docx`. */\n @property({ type: String })\n accept = '';\n\n /** Largest accepted file, in bytes. Zero means no limit. */\n @property({ type: Number, attribute: 'max-size' })\n maxSize = 0;\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** The files are submitted under this name, as by `<input type=\"file\">`. */\n @property({ type: String })\n name = '';\n\n @property({ type: Boolean, reflect: true })\n required = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.internals ??= attachFormInternals(this);\n }\n\n // Untyped: `files` is private state, which PropertyValues<this> cannot name.\n override willUpdate(changed: PropertyValues): void {\n if (changed.has('files') || changed.has('name') || changed.has('required')) {\n this.syncFormValue();\n }\n }\n\n private syncFormValue(): void {\n // Like a native file input: nothing is submitted without a name or without\n // a file, and each file is its own entry under the one name.\n let value: FormData | null = null;\n if (this.name && this.files.length > 0) {\n value = new FormData();\n for (const file of this.files) value.append(this.name, file);\n }\n setFormValue(this.internals, value);\n\n const missing = this.required && this.files.length === 0;\n setValidity(this.internals, { valueMissing: missing }, missing ? 'Select a file.' : '');\n }\n\n formResetCallback(): void {\n this.files = [];\n this.dragging = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null): void {\n if (!(state instanceof FormData) || !this.name) return;\n this.files = state.getAll(this.name).filter((entry): entry is File => entry instanceof File);\n }\n\n /** The files currently held, newest last. */\n get selectedFiles(): readonly File[] {\n return this.files;\n }\n\n /** Empties the selection without firing a rejection. */\n clear(): void {\n this.files = [];\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n /**\n * `accept` is advisory on a native input — the OS dialog filters, but a\n * dropped file bypasses it entirely — so the same rules are enforced here.\n */\n private accepts(file: File): boolean {\n if (this.maxSize > 0 && file.size > this.maxSize) return false;\n if (!this.accept) return true;\n\n return this.accept\n .split(',')\n .map((pattern) => pattern.trim().toLowerCase())\n .filter(Boolean)\n .some((pattern) => {\n if (pattern.startsWith('.')) return file.name.toLowerCase().endsWith(pattern);\n if (pattern.endsWith('/*')) return file.type.startsWith(pattern.slice(0, -1));\n return file.type.toLowerCase() === pattern;\n });\n }\n\n private addFiles(incoming: FileList | null): void {\n if (!incoming || incoming.length === 0) return;\n\n const candidates = this.multiple ? [...incoming] : [...incoming].slice(0, 1);\n const accepted = candidates.filter((file) => this.accepts(file));\n const rejected = candidates.filter((file) => !this.accepts(file));\n\n if (rejected.length > 0) {\n emit(this, 'kt-files-rejected', {\n files: rejected,\n reason: this.maxSize > 0 && rejected.some((f) => f.size > this.maxSize) ? 'size' : 'type',\n });\n }\n if (accepted.length === 0) return;\n\n this.files = this.multiple ? [...this.files, ...accepted] : accepted;\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n private removeAt(index: number): void {\n this.files = this.files.filter((_, position) => position !== index);\n emit(this, 'kt-files-change', { files: this.files });\n }\n\n private browse(): void {\n if (this.disabled) return;\n this.fileInput?.click();\n }\n\n private onZoneKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n this.browse();\n }\n\n private onDragOver(event: DragEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = true;\n }\n\n private onDrop(event: DragEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = false;\n this.addFiles(event.dataTransfer?.files ?? null);\n }\n\n override render(): TemplateResult {\n return html`<div\n part=\"base\"\n class=${classMap({ zone: true, dragover: this.dragging })}\n role=\"button\"\n tabindex=${this.disabled ? -1 : 0}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-label=${`${this.heading} ${this.linkText}`}\n @click=${this.browse}\n @keydown=${this.onZoneKeyDown}\n @dragover=${this.onDragOver}\n @dragleave=${() => {\n this.dragging = false;\n }}\n @drop=${this.onDrop}\n >\n <input\n type=\"file\"\n ?multiple=${this.multiple}\n accept=${this.accept || nothing}\n @click=${(event: Event) => event.stopPropagation()}\n @change=${(event: Event) => this.addFiles((event.target as HTMLInputElement).files)}\n />\n\n <div class=\"prompt\">\n <span class=\"prompt-icon\"><kt-icon name=\"file-up\" size=\"24\"></kt-icon></span>\n <div>\n <p class=\"title\">${this.heading} ${this.linkText}</p>\n ${\n this.recommendedSize\n ? html`<div class=\"hint\">Recommended image size: ${this.recommendedSize}</div>`\n : nothing\n }\n </div>\n </div>\n\n ${\n this.files.length > 0\n ? html`<ul\n part=\"list\"\n class=\"list\"\n aria-label=\"Selected files\"\n @click=${(event: Event) => event.stopPropagation()}\n >\n ${this.files.map(\n (file, index) =>\n html`<li class=\"item\">\n <span class=\"preview\"><kt-icon name=\"file\" size=\"24\"></kt-icon></span>\n <span class=\"info\">\n <span class=\"name\" title=${file.name}>${file.name}</span>\n <span class=\"details\">\n <span>${formatFileSize(file.size)}</span>\n ${file.type ? html`<span>•</span><span>${file.type}</span>` : nothing}\n </span>\n </span>\n <kt-button\n variant=\"danger\"\n size=\"small\"\n icon=\"trash-2\"\n label=${`Remove ${file.name}`}\n @click=${() => this.removeAt(index)}\n ></kt-button>\n </li>`,\n )}\n </ul>`\n : nothing\n }\n </div>`;\n }\n}\n\ndefineElement('kt-drag-drop', KtDragDrop);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-drag-drop': KtDragDrop;\n }\n}\n"],"names":["UNITS","formatFileSize","bytes","value","unit","KtDragDrop","KtElement","css","attachFormInternals","changed","file","setFormValue","missing","setValidity","state","entry","emit","pattern","incoming","candidates","accepted","rejected","f","index","_","position","event","html","classMap","nothing","__decorateClass","query","property","defineElement"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as f, nothing as h, html as r } from "lit";
|
|
2
2
|
import { queryAssignedElements as c, state as g, property as a } from "lit/decorators.js";
|
|
3
|
-
import { K as p, d as m } from "../../../chunks/kt-element-
|
|
3
|
+
import { K as p, d as m } from "../../../chunks/kt-element-B_jjQDhg.js";
|
|
4
4
|
import { h as y } from "../../../chunks/slots-BPbIdxAJ.js";
|
|
5
5
|
import "../../feedback/kt-skeleton/kt-skeleton.js";
|
|
6
6
|
var b = Object.defineProperty, s = (l, e, o, u) => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { css as v, nothing as
|
|
2
|
-
import { query as w, state as p, property as
|
|
1
|
+
import { css as v, nothing as n, html as l } from "lit";
|
|
2
|
+
import { query as w, state as p, property as a } from "lit/decorators.js";
|
|
3
3
|
import { classMap as f } from "lit/directives/class-map.js";
|
|
4
4
|
import { live as x } from "lit/directives/live.js";
|
|
5
|
-
import { K as m, d as $ } from "../../../chunks/kt-element-
|
|
6
|
-
import { e as
|
|
5
|
+
import { K as m, d as $ } from "../../../chunks/kt-element-B_jjQDhg.js";
|
|
6
|
+
import { e as u } from "../../../chunks/events-Bjl5Zmmq.js";
|
|
7
7
|
import { a as C, s as b, b as k } from "../../../chunks/form-control-CxjBTt1c.js";
|
|
8
8
|
import "../../core/kt-icon/kt-icon.js";
|
|
9
9
|
const P = [
|
|
@@ -32,9 +32,9 @@ function z(s, e) {
|
|
|
32
32
|
for (r.push(t.slice(0, 1)), t = t.slice(1); t; )
|
|
33
33
|
r.push(t.slice(0, 2)), t = t.slice(2);
|
|
34
34
|
else if (e?.id === "us" || e?.id === "ca") {
|
|
35
|
-
for (const
|
|
35
|
+
for (const d of [3, 3, 4]) {
|
|
36
36
|
if (!t) break;
|
|
37
|
-
r.push(t.slice(0,
|
|
37
|
+
r.push(t.slice(0, d)), t = t.slice(d);
|
|
38
38
|
}
|
|
39
39
|
t && r.push(t);
|
|
40
40
|
} else
|
|
@@ -48,13 +48,13 @@ function E(s, e) {
|
|
|
48
48
|
(t) => t.name.toLowerCase().includes(r) || t.dialCode.includes(r.replace(/^\+/, "")) || t.id === r
|
|
49
49
|
) : s;
|
|
50
50
|
}
|
|
51
|
-
var A = Object.defineProperty,
|
|
52
|
-
for (var
|
|
53
|
-
(y = s[h]) && (
|
|
54
|
-
return
|
|
51
|
+
var A = Object.defineProperty, o = (s, e, r, t) => {
|
|
52
|
+
for (var d = void 0, h = s.length - 1, y; h >= 0; h--)
|
|
53
|
+
(y = s[h]) && (d = y(e, r, d) || d);
|
|
54
|
+
return d && A(e, r, d), d;
|
|
55
55
|
};
|
|
56
56
|
const c = 18;
|
|
57
|
-
class
|
|
57
|
+
class i extends m {
|
|
58
58
|
constructor() {
|
|
59
59
|
super(...arguments), this.internals = null, this.passwordVisible = !1, this.countryOpen = !1, this.countryQuery = "", this.value = "", this.name = "", this.type = "text", this.placeholder = "", this.size = "medium", this.disabled = !1, this.readonly = !1, this.required = !1, this.icon = "", this.error = "", this.clearable = !0, this.label = "", this.autocomplete = "", this.countries = P, this.country = "us", this.defaultValue = "", this.closeCountryPanel = (e) => {
|
|
60
60
|
e.composedPath().includes(this) || (this.countryOpen = !1);
|
|
@@ -122,7 +122,7 @@ class o extends m {
|
|
|
122
122
|
outline: var(--outline-width) solid var(--color-danger-base);
|
|
123
123
|
}
|
|
124
124
|
.error input {
|
|
125
|
-
color: var(--color-danger-
|
|
125
|
+
color: var(--color-danger-text);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
.disabled {
|
|
@@ -145,7 +145,7 @@ class o extends m {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
input::placeholder {
|
|
148
|
-
color: var(--
|
|
148
|
+
color: var(--text-muted);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
/* The clear button is ours; the browser's is redundant. */
|
|
@@ -190,7 +190,7 @@ class o extends m {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
.error-icon {
|
|
193
|
-
color: var(--color-danger-
|
|
193
|
+
color: var(--color-danger-text);
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
/* === PHONE MODE === */
|
|
@@ -356,13 +356,13 @@ class o extends m {
|
|
|
356
356
|
}
|
|
357
357
|
onInput(e) {
|
|
358
358
|
const r = e.target.value;
|
|
359
|
-
this.value = this.isPhone ? V(r) : r,
|
|
359
|
+
this.value = this.isPhone ? V(r) : r, u(this, "kt-input", { value: this.value });
|
|
360
360
|
}
|
|
361
361
|
toggleCountryPanel() {
|
|
362
362
|
this.countryOpen = !this.countryOpen, this.countryQuery = "";
|
|
363
363
|
}
|
|
364
364
|
selectCountry(e) {
|
|
365
|
-
this.country = e.id, this.countryOpen = !1, this.countryQuery = "",
|
|
365
|
+
this.country = e.id, this.countryOpen = !1, this.countryQuery = "", u(this, "kt-country-change", { country: e.id, dialCode: e.dialCode }), this.focus();
|
|
366
366
|
}
|
|
367
367
|
onCountryKeyDown(e) {
|
|
368
368
|
e.key === "Escape" && this.countryOpen && (e.stopPropagation(), this.countryOpen = !1, this.shadowRoot?.querySelector(".country")?.focus());
|
|
@@ -408,13 +408,13 @@ class o extends m {
|
|
|
408
408
|
</li>`
|
|
409
409
|
)}
|
|
410
410
|
</ul>
|
|
411
|
-
</div>` :
|
|
411
|
+
</div>` : n}`;
|
|
412
412
|
}
|
|
413
413
|
onChange(e) {
|
|
414
|
-
e.stopPropagation(),
|
|
414
|
+
e.stopPropagation(), u(this, "kt-change", { value: this.value });
|
|
415
415
|
}
|
|
416
416
|
clear() {
|
|
417
|
-
this.value = "",
|
|
417
|
+
this.value = "", u(this, "kt-clear"), u(this, "kt-input", { value: "" }), u(this, "kt-change", { value: "" }), this.focus();
|
|
418
418
|
}
|
|
419
419
|
togglePassword() {
|
|
420
420
|
this.passwordVisible = !this.passwordVisible;
|
|
@@ -436,20 +436,24 @@ class o extends m {
|
|
|
436
436
|
@pointerdown=${this.onFieldPointerDown}
|
|
437
437
|
@keydown=${this.onCountryKeyDown}
|
|
438
438
|
>
|
|
439
|
-
${
|
|
439
|
+
${// The icon only shows that something is wrong; this is what gets read
|
|
440
|
+
// out. aria-describedby rather than aria-errormessage, which most
|
|
441
|
+
// screen readers still ignore.
|
|
442
|
+
this.error ? l`<span id="error-message" class="visually-hidden">${this.error}</span>` : n}
|
|
443
|
+
${this.isPhone ? this.renderCountryPicker() : n}
|
|
440
444
|
|
|
441
445
|
<input
|
|
442
446
|
part="control"
|
|
443
447
|
type=${this.resolvedType}
|
|
444
|
-
name=${this.name ||
|
|
448
|
+
name=${this.name || n}
|
|
445
449
|
.value=${x(this.displayValue)}
|
|
446
|
-
placeholder=${this.placeholder || this.selectedCountry?.format ||
|
|
447
|
-
autocomplete=${this.autocomplete ||
|
|
448
|
-
inputmode=${this.isPhone ? "tel" :
|
|
449
|
-
maxlength=${this.maxlength ??
|
|
450
|
-
aria-label=${this.label ||
|
|
451
|
-
aria-invalid=${this.error ? "true" :
|
|
452
|
-
aria-
|
|
450
|
+
placeholder=${this.placeholder || this.selectedCountry?.format || n}
|
|
451
|
+
autocomplete=${this.autocomplete || n}
|
|
452
|
+
inputmode=${this.isPhone ? "tel" : n}
|
|
453
|
+
maxlength=${this.maxlength ?? n}
|
|
454
|
+
aria-label=${this.label || n}
|
|
455
|
+
aria-invalid=${this.error ? "true" : n}
|
|
456
|
+
aria-describedby=${this.error ? "error-message" : n}
|
|
453
457
|
?disabled=${this.disabled}
|
|
454
458
|
?readonly=${this.readonly}
|
|
455
459
|
?required=${this.required}
|
|
@@ -469,13 +473,13 @@ class o extends m {
|
|
|
469
473
|
name=${this.passwordVisible ? "eye-off" : "eye"}
|
|
470
474
|
size=${c}
|
|
471
475
|
></kt-icon>
|
|
472
|
-
</button>` :
|
|
476
|
+
</button>` : n}
|
|
473
477
|
${this.icon ? l`<span class="adornment">
|
|
474
478
|
<kt-icon name=${this.icon} size=${c}></kt-icon>
|
|
475
|
-
</span>` :
|
|
479
|
+
</span>` : n}
|
|
476
480
|
${this.error ? l`<span class="adornment error-icon" title=${this.error}>
|
|
477
481
|
<kt-icon name="circle-alert" size=${c} label=${this.error}></kt-icon>
|
|
478
|
-
</span>` :
|
|
482
|
+
</span>` : n}
|
|
479
483
|
${this.showClear ? l`<button
|
|
480
484
|
type="button"
|
|
481
485
|
class="icon-button clear"
|
|
@@ -484,73 +488,73 @@ class o extends m {
|
|
|
484
488
|
@click=${this.clear}
|
|
485
489
|
>
|
|
486
490
|
<kt-icon name="x" size=${c}></kt-icon>
|
|
487
|
-
</button>` :
|
|
488
|
-
</div>` :
|
|
491
|
+
</button>` : n}
|
|
492
|
+
</div>` : n}
|
|
489
493
|
</div>`;
|
|
490
494
|
}
|
|
491
495
|
}
|
|
492
|
-
|
|
496
|
+
o([
|
|
493
497
|
w("input")
|
|
494
|
-
],
|
|
495
|
-
|
|
498
|
+
], i.prototype, "input");
|
|
499
|
+
o([
|
|
496
500
|
p()
|
|
497
|
-
],
|
|
498
|
-
|
|
501
|
+
], i.prototype, "passwordVisible");
|
|
502
|
+
o([
|
|
499
503
|
p()
|
|
500
|
-
],
|
|
501
|
-
|
|
504
|
+
], i.prototype, "countryOpen");
|
|
505
|
+
o([
|
|
502
506
|
p()
|
|
503
|
-
],
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
],
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
],
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
],
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
],
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
],
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
],
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
],
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
],
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
],
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
],
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
],
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
],
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
],
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
],
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
],
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
],
|
|
552
|
-
$("kt-input",
|
|
507
|
+
], i.prototype, "countryQuery");
|
|
508
|
+
o([
|
|
509
|
+
a({ type: String })
|
|
510
|
+
], i.prototype, "value");
|
|
511
|
+
o([
|
|
512
|
+
a({ type: String })
|
|
513
|
+
], i.prototype, "name");
|
|
514
|
+
o([
|
|
515
|
+
a({ type: String })
|
|
516
|
+
], i.prototype, "type");
|
|
517
|
+
o([
|
|
518
|
+
a({ type: String })
|
|
519
|
+
], i.prototype, "placeholder");
|
|
520
|
+
o([
|
|
521
|
+
a({ type: String, reflect: !0 })
|
|
522
|
+
], i.prototype, "size");
|
|
523
|
+
o([
|
|
524
|
+
a({ type: Boolean, reflect: !0 })
|
|
525
|
+
], i.prototype, "disabled");
|
|
526
|
+
o([
|
|
527
|
+
a({ type: Boolean, reflect: !0 })
|
|
528
|
+
], i.prototype, "readonly");
|
|
529
|
+
o([
|
|
530
|
+
a({ type: Boolean, reflect: !0 })
|
|
531
|
+
], i.prototype, "required");
|
|
532
|
+
o([
|
|
533
|
+
a({ type: String })
|
|
534
|
+
], i.prototype, "icon");
|
|
535
|
+
o([
|
|
536
|
+
a({ type: String, reflect: !0 })
|
|
537
|
+
], i.prototype, "error");
|
|
538
|
+
o([
|
|
539
|
+
a({ type: Boolean })
|
|
540
|
+
], i.prototype, "clearable");
|
|
541
|
+
o([
|
|
542
|
+
a({ type: String })
|
|
543
|
+
], i.prototype, "label");
|
|
544
|
+
o([
|
|
545
|
+
a({ type: String })
|
|
546
|
+
], i.prototype, "autocomplete");
|
|
547
|
+
o([
|
|
548
|
+
a({ type: Number })
|
|
549
|
+
], i.prototype, "maxlength");
|
|
550
|
+
o([
|
|
551
|
+
a({ attribute: !1 })
|
|
552
|
+
], i.prototype, "countries");
|
|
553
|
+
o([
|
|
554
|
+
a({ type: String })
|
|
555
|
+
], i.prototype, "country");
|
|
556
|
+
$("kt-input", i);
|
|
553
557
|
export {
|
|
554
|
-
|
|
558
|
+
i as KtInput
|
|
555
559
|
};
|
|
556
560
|
//# sourceMappingURL=kt-input.js.map
|