kanto-ds 1.0.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/LICENSE +26 -0
- package/README.md +155 -0
- package/dist/assets/fonts/README.md +19 -0
- package/dist/assets/fonts/manrope/OFL.txt +93 -0
- package/dist/assets/fonts/manrope/manrope-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/manrope/manrope-cyrillic-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/manrope/manrope-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/manrope/manrope-latin-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/mulish/OFL.txt +93 -0
- package/dist/assets/fonts/mulish/mulish-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-cyrillic-wght-italic.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-cyrillic-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-latin-ext-wght-italic.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-latin-wght-italic.woff2 +0 -0
- package/dist/assets/fonts/mulish/mulish-latin-wght-normal.woff2 +0 -0
- package/dist/assets/fonts/source_code_pro/OFL.txt +93 -0
- package/dist/assets/fonts/source_code_pro/SourceCodePro-Regular.woff2 +0 -0
- package/dist/chunks/dialog-CPIfFIlF.js +29 -0
- package/dist/chunks/dialog-CPIfFIlF.js.map +1 -0
- package/dist/chunks/events-Bjl5Zmmq.js +18 -0
- package/dist/chunks/events-Bjl5Zmmq.js.map +1 -0
- package/dist/chunks/form-control-CxjBTt1c.js +17 -0
- package/dist/chunks/form-control-CxjBTt1c.js.map +1 -0
- package/dist/chunks/kt-element-CcMLO5e8.js +28 -0
- package/dist/chunks/kt-element-CcMLO5e8.js.map +1 -0
- package/dist/chunks/listbox-CUXYn_3S.js +101 -0
- package/dist/chunks/listbox-CUXYn_3S.js.map +1 -0
- package/dist/chunks/registry-X4LS9J5K.js +30 -0
- package/dist/chunks/registry-X4LS9J5K.js.map +1 -0
- package/dist/chunks/slots-BPbIdxAJ.js +7 -0
- package/dist/chunks/slots-BPbIdxAJ.js.map +1 -0
- package/dist/chunks/toaster-PmdKSV5x.js +40 -0
- package/dist/chunks/toaster-PmdKSV5x.js.map +1 -0
- package/dist/components/core/kt-avatar/kt-avatar.d.ts +49 -0
- package/dist/components/core/kt-avatar/kt-avatar.js +156 -0
- package/dist/components/core/kt-avatar/kt-avatar.js.map +1 -0
- package/dist/components/core/kt-badge/kt-badge.d.ts +77 -0
- package/dist/components/core/kt-badge/kt-badge.js +254 -0
- package/dist/components/core/kt-badge/kt-badge.js.map +1 -0
- package/dist/components/core/kt-button/kt-button.d.ts +71 -0
- package/dist/components/core/kt-button/kt-button.js +271 -0
- package/dist/components/core/kt-button/kt-button.js.map +1 -0
- package/dist/components/core/kt-card/kt-card.d.ts +62 -0
- package/dist/components/core/kt-card/kt-card.js +230 -0
- package/dist/components/core/kt-card/kt-card.js.map +1 -0
- package/dist/components/core/kt-code/kt-code.d.ts +55 -0
- package/dist/components/core/kt-code/kt-code.js +155 -0
- package/dist/components/core/kt-code/kt-code.js.map +1 -0
- package/dist/components/core/kt-icon/kt-icon.d.ts +44 -0
- package/dist/components/core/kt-icon/kt-icon.js +85 -0
- package/dist/components/core/kt-icon/kt-icon.js.map +1 -0
- package/dist/components/core/kt-kbd/kt-kbd.d.ts +38 -0
- package/dist/components/core/kt-kbd/kt-kbd.js +89 -0
- package/dist/components/core/kt-kbd/kt-kbd.js.map +1 -0
- package/dist/components/data/kt-chart/kt-chart.d.ts +99 -0
- package/dist/components/data/kt-chart/kt-chart.js +406 -0
- package/dist/components/data/kt-chart/kt-chart.js.map +1 -0
- package/dist/components/data/kt-meter/kt-meter.d.ts +63 -0
- package/dist/components/data/kt-meter/kt-meter.js +177 -0
- package/dist/components/data/kt-meter/kt-meter.js.map +1 -0
- package/dist/components/data/kt-pagination/kt-pagination.d.ts +35 -0
- package/dist/components/data/kt-pagination/kt-pagination.js +88 -0
- package/dist/components/data/kt-pagination/kt-pagination.js.map +1 -0
- package/dist/components/data/kt-stat/kt-stat.d.ts +60 -0
- package/dist/components/data/kt-stat/kt-stat.js +137 -0
- package/dist/components/data/kt-stat/kt-stat.js.map +1 -0
- package/dist/components/data/kt-table/kt-table.d.ts +99 -0
- package/dist/components/data/kt-table/kt-table.js +340 -0
- package/dist/components/data/kt-table/kt-table.js.map +1 -0
- package/dist/components/data/kt-timeline/kt-timeline.d.ts +78 -0
- package/dist/components/data/kt-timeline/kt-timeline.js +252 -0
- package/dist/components/data/kt-timeline/kt-timeline.js.map +1 -0
- package/dist/components/feedback/kt-alert/kt-alert.d.ts +46 -0
- package/dist/components/feedback/kt-alert/kt-alert.js +180 -0
- package/dist/components/feedback/kt-alert/kt-alert.js.map +1 -0
- package/dist/components/feedback/kt-empty-state/kt-empty-state.d.ts +40 -0
- package/dist/components/feedback/kt-empty-state/kt-empty-state.js +100 -0
- package/dist/components/feedback/kt-empty-state/kt-empty-state.js.map +1 -0
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.d.ts +53 -0
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +212 -0
- package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js.map +1 -0
- package/dist/components/feedback/kt-skeleton/kt-skeleton.d.ts +43 -0
- package/dist/components/feedback/kt-skeleton/kt-skeleton.js +117 -0
- package/dist/components/feedback/kt-skeleton/kt-skeleton.js.map +1 -0
- package/dist/components/feedback/kt-toast/kt-toast.d.ts +57 -0
- package/dist/components/feedback/kt-toast/kt-toast.js +231 -0
- package/dist/components/feedback/kt-toast/kt-toast.js.map +1 -0
- package/dist/components/feedback/kt-toast-container/kt-toast-container.d.ts +60 -0
- package/dist/components/feedback/kt-toast-container/kt-toast-container.js +100 -0
- package/dist/components/feedback/kt-toast-container/kt-toast-container.js.map +1 -0
- package/dist/components/feedback/kt-toast-container/toaster.d.ts +37 -0
- package/dist/components/feedback/kt-tooltip/kt-tooltip.d.ts +57 -0
- package/dist/components/feedback/kt-tooltip/kt-tooltip.js +138 -0
- package/dist/components/feedback/kt-tooltip/kt-tooltip.js.map +1 -0
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.d.ts +68 -0
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +287 -0
- package/dist/components/forms/kt-drag-drop/kt-drag-drop.js.map +1 -0
- package/dist/components/forms/kt-form/kt-form.d.ts +75 -0
- package/dist/components/forms/kt-form/kt-form.js +187 -0
- package/dist/components/forms/kt-form/kt-form.js.map +1 -0
- package/dist/components/forms/kt-input/kt-input.d.ts +112 -0
- package/dist/components/forms/kt-input/kt-input.js +556 -0
- package/dist/components/forms/kt-input/kt-input.js.map +1 -0
- package/dist/components/forms/kt-input-menu/kt-input-menu.d.ts +60 -0
- package/dist/components/forms/kt-input-menu/kt-input-menu.js +313 -0
- package/dist/components/forms/kt-input-menu/kt-input-menu.js.map +1 -0
- package/dist/components/forms/kt-label-input/kt-label-input.d.ts +42 -0
- package/dist/components/forms/kt-label-input/kt-label-input.js +69 -0
- package/dist/components/forms/kt-label-input/kt-label-input.js.map +1 -0
- package/dist/components/forms/kt-select/kt-select.d.ts +80 -0
- package/dist/components/forms/kt-select/kt-select.js +334 -0
- package/dist/components/forms/kt-select/kt-select.js.map +1 -0
- package/dist/components/forms/kt-textarea/kt-textarea.d.ts +62 -0
- package/dist/components/forms/kt-textarea/kt-textarea.js +239 -0
- package/dist/components/forms/kt-textarea/kt-textarea.js.map +1 -0
- package/dist/components/forms/kt-toggle/kt-toggle.d.ts +53 -0
- package/dist/components/forms/kt-toggle/kt-toggle.js +170 -0
- package/dist/components/forms/kt-toggle/kt-toggle.js.map +1 -0
- package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.d.ts +45 -0
- package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +93 -0
- package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js.map +1 -0
- package/dist/components/navigation/kt-header/kt-header.d.ts +67 -0
- package/dist/components/navigation/kt-header/kt-header.js +195 -0
- package/dist/components/navigation/kt-header/kt-header.js.map +1 -0
- package/dist/components/navigation/kt-page-header/kt-page-header.d.ts +48 -0
- package/dist/components/navigation/kt-page-header/kt-page-header.js +111 -0
- package/dist/components/navigation/kt-page-header/kt-page-header.js.map +1 -0
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.d.ts +63 -0
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +228 -0
- package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js.map +1 -0
- package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.d.ts +94 -0
- package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +265 -0
- package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js.map +1 -0
- package/dist/components/navigation/kt-tabs/kt-tabs.d.ts +64 -0
- package/dist/components/navigation/kt-tabs/kt-tabs.js +175 -0
- package/dist/components/navigation/kt-tabs/kt-tabs.js.map +1 -0
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.d.ts +50 -0
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +191 -0
- package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js.map +1 -0
- package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.d.ts +55 -0
- package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +128 -0
- package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js.map +1 -0
- package/dist/components/overlays/kt-collapsible/kt-collapsible.d.ts +42 -0
- package/dist/components/overlays/kt-collapsible/kt-collapsible.js +107 -0
- package/dist/components/overlays/kt-collapsible/kt-collapsible.js.map +1 -0
- package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.d.ts +56 -0
- package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +155 -0
- package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js.map +1 -0
- package/dist/components/overlays/kt-dropdown/kt-dropdown.d.ts +64 -0
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js +212 -0
- package/dist/components/overlays/kt-dropdown/kt-dropdown.js.map +1 -0
- package/dist/components/overlays/kt-modal/kt-modal.d.ts +61 -0
- package/dist/components/overlays/kt-modal/kt-modal.js +207 -0
- package/dist/components/overlays/kt-modal/kt-modal.js.map +1 -0
- package/dist/components/overlays/kt-side-panel/kt-side-panel.d.ts +52 -0
- package/dist/components/overlays/kt-side-panel/kt-side-panel.js +178 -0
- package/dist/components/overlays/kt-side-panel/kt-side-panel.js.map +1 -0
- package/dist/icons/defaults.d.ts +25 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.js +37 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/registry.d.ts +38 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.js +96 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/countries.d.ts +37 -0
- package/dist/internal/dialog.d.ts +22 -0
- package/dist/internal/events.d.ts +14 -0
- package/dist/internal/form-control.d.ts +27 -0
- package/dist/internal/format.d.ts +8 -0
- package/dist/internal/kt-element.d.ts +22 -0
- package/dist/internal/listbox.d.ts +36 -0
- package/dist/internal/slots.d.ts +10 -0
- package/dist/react/index.d.ts +208 -0
- package/dist/react/index.js +314 -0
- package/dist/react/index.js.map +1 -0
- package/dist/styles.css +13 -0
- package/dist/tokens/README.md +63 -0
- package/dist/tokens/base.css +79 -0
- package/dist/tokens/colors.css +125 -0
- package/dist/tokens/fonts.css +136 -0
- package/dist/tokens/index.css +12 -0
- package/dist/tokens/responsive.css +108 -0
- package/dist/tokens/spacing.css +66 -0
- package/dist/tokens/theme-light.css +144 -0
- package/dist/tokens/typography.css +41 -0
- package/dist/vue/index.d.ts +143 -0
- package/dist/vue/index.js +56 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +296 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { css as g, nothing as d, html as p } from "lit";
|
|
2
|
+
import { query as f, property as a } from "lit/decorators.js";
|
|
3
|
+
import { K as c, d as m } from "../../../chunks/kt-element-CcMLO5e8.js";
|
|
4
|
+
import { e as u } from "../../../chunks/events-Bjl5Zmmq.js";
|
|
5
|
+
import { o as h, c as v, i as b } from "../../../chunks/dialog-CPIfFIlF.js";
|
|
6
|
+
import "../../core/kt-button/kt-button.js";
|
|
7
|
+
var y = Object.defineProperty, r = (i, e, l, x) => {
|
|
8
|
+
for (var o = void 0, s = i.length - 1, n; s >= 0; s--)
|
|
9
|
+
(n = i[s]) && (o = n(e, l, o) || o);
|
|
10
|
+
return o && y(e, l, o), o;
|
|
11
|
+
};
|
|
12
|
+
class t extends c {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments), this.open = !1, this.eyebrow = "Details", this.heading = "", this.noBackdropClose = !1;
|
|
15
|
+
}
|
|
16
|
+
static {
|
|
17
|
+
this.styles = [
|
|
18
|
+
c.styles,
|
|
19
|
+
g`
|
|
20
|
+
:host {
|
|
21
|
+
display: contents;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
dialog {
|
|
25
|
+
position: fixed;
|
|
26
|
+
top: 0;
|
|
27
|
+
right: 0;
|
|
28
|
+
left: auto;
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
gap: var(--gap-drag-drop);
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
width: 308px;
|
|
34
|
+
max-width: 100%;
|
|
35
|
+
height: 100vh;
|
|
36
|
+
max-height: 100vh;
|
|
37
|
+
margin: 0;
|
|
38
|
+
padding: var(--padding-card);
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
color: var(--text-body);
|
|
41
|
+
background-color: var(--surface-card);
|
|
42
|
+
border: none;
|
|
43
|
+
transform: translateX(100%);
|
|
44
|
+
transition:
|
|
45
|
+
transform var(--duration-normal) var(--easing-standard),
|
|
46
|
+
overlay var(--duration-normal) allow-discrete,
|
|
47
|
+
display var(--duration-normal) allow-discrete;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
dialog[open] {
|
|
51
|
+
transform: translateX(0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* The panel starts off-screen on open, so the slide runs the first time
|
|
55
|
+
too rather than only on close. */
|
|
56
|
+
@starting-style {
|
|
57
|
+
dialog[open] {
|
|
58
|
+
transform: translateX(100%);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
dialog::backdrop {
|
|
63
|
+
background: var(--color-backdrop, rgba(0, 0, 0, 0.45));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.header {
|
|
67
|
+
display: flex;
|
|
68
|
+
flex: 0 0 auto;
|
|
69
|
+
align-items: center;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
gap: var(--gap-drag-drop);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.titles {
|
|
75
|
+
display: flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
gap: 6px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.eyebrow {
|
|
81
|
+
color: var(--text-muted);
|
|
82
|
+
font: var(--font-normal-small);
|
|
83
|
+
letter-spacing: 1px;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
h2 {
|
|
88
|
+
margin: 0;
|
|
89
|
+
color: var(--text-body);
|
|
90
|
+
font: var(--font-title-h6);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.divider {
|
|
94
|
+
width: 100%;
|
|
95
|
+
margin: 0;
|
|
96
|
+
border: 0;
|
|
97
|
+
border-bottom: var(--border-width) solid var(--border-subtle);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.body {
|
|
101
|
+
flex: 1 1 auto;
|
|
102
|
+
overflow: auto;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@media (prefers-reduced-motion: reduce) {
|
|
106
|
+
dialog {
|
|
107
|
+
transition: none;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
`
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
updated(e) {
|
|
114
|
+
e.has("open") && (this.open ? h(this.dialog) : v(this.dialog));
|
|
115
|
+
}
|
|
116
|
+
/** Asks to close. A cancelled `kt-close` keeps the panel open. */
|
|
117
|
+
requestClose() {
|
|
118
|
+
if (u(this, "kt-close").defaultPrevented) {
|
|
119
|
+
this.dialog.open || h(this.dialog);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.open = !1;
|
|
123
|
+
}
|
|
124
|
+
/** Escape and the native close both land here. */
|
|
125
|
+
onDialogClose() {
|
|
126
|
+
this.open && this.requestClose();
|
|
127
|
+
}
|
|
128
|
+
onDialogClick(e) {
|
|
129
|
+
this.noBackdropClose || b(this.dialog, e) && this.requestClose();
|
|
130
|
+
}
|
|
131
|
+
render() {
|
|
132
|
+
return p`<dialog
|
|
133
|
+
part="dialog"
|
|
134
|
+
aria-label=${this.heading || d}
|
|
135
|
+
@close=${this.onDialogClose}
|
|
136
|
+
@click=${this.onDialogClick}
|
|
137
|
+
>
|
|
138
|
+
<div part="header" class="header">
|
|
139
|
+
<div class="titles">
|
|
140
|
+
${this.eyebrow ? p`<div class="eyebrow">${this.eyebrow}</div>` : d}
|
|
141
|
+
<h2>${this.heading}</h2>
|
|
142
|
+
</div>
|
|
143
|
+
<kt-button
|
|
144
|
+
variant="secondary"
|
|
145
|
+
size="small"
|
|
146
|
+
icon="x"
|
|
147
|
+
label="Close"
|
|
148
|
+
@click=${this.requestClose}
|
|
149
|
+
></kt-button>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<hr class="divider" />
|
|
153
|
+
|
|
154
|
+
<div part="body" class="body"><slot></slot></div>
|
|
155
|
+
<slot name="footer"></slot>
|
|
156
|
+
</dialog>`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
r([
|
|
160
|
+
f("dialog")
|
|
161
|
+
], t.prototype, "dialog");
|
|
162
|
+
r([
|
|
163
|
+
a({ type: Boolean, reflect: !0 })
|
|
164
|
+
], t.prototype, "open");
|
|
165
|
+
r([
|
|
166
|
+
a({ type: String })
|
|
167
|
+
], t.prototype, "eyebrow");
|
|
168
|
+
r([
|
|
169
|
+
a({ type: String })
|
|
170
|
+
], t.prototype, "heading");
|
|
171
|
+
r([
|
|
172
|
+
a({ type: Boolean, attribute: "no-backdrop-close" })
|
|
173
|
+
], t.prototype, "noBackdropClose");
|
|
174
|
+
m("kt-side-panel", t);
|
|
175
|
+
export {
|
|
176
|
+
t as KtSidePanel
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=kt-side-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kt-side-panel.js","sources":["../../../../src/components/overlays/kt-side-panel/kt-side-panel.ts"],"sourcesContent":["import { css, html, nothing, type PropertyValues, type TemplateResult } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { KtElement, defineElement } from '#internal/kt-element';\nimport { emit } from '#internal/events';\nimport { closeDialog, isBackdropClick, openModal } from '#internal/dialog';\nimport '../../core/kt-button/kt-button.js';\n\n/**\n * A drawer that slides in from the right, for viewing or editing one record\n * without leaving the list behind it.\n *\n * Built on the native `<dialog>`: the panel lands in the top layer, focus is\n * trapped inside it, the page behind goes inert, and Escape closes it — none of\n * which the fixed-position div this replaces did.\n *\n * @element kt-side-panel\n *\n * @slot - The panel body.\n * @slot footer - Pinned below the body.\n *\n * @csspart dialog - The `<dialog>`.\n * @csspart header - The header row.\n * @csspart body - The scrolling body.\n *\n * @fires kt-close - The panel was dismissed. Cancelable: cancel it to keep the\n * panel open, for an unsaved-changes prompt.\n *\n * @example\n * ```html\n * <kt-side-panel open eyebrow=\"Details\" heading=\"Entity 4812\">\n * <p>…</p>\n * </kt-side-panel>\n * ```\n */\nexport class KtSidePanel extends KtElement {\n static override styles = [\n KtElement.styles,\n css`\n :host {\n display: contents;\n }\n\n dialog {\n position: fixed;\n top: 0;\n right: 0;\n left: auto;\n display: flex;\n flex-direction: column;\n gap: var(--gap-drag-drop);\n box-sizing: border-box;\n width: 308px;\n max-width: 100%;\n height: 100vh;\n max-height: 100vh;\n margin: 0;\n padding: var(--padding-card);\n overflow: hidden;\n color: var(--text-body);\n background-color: var(--surface-card);\n border: none;\n transform: translateX(100%);\n transition:\n transform var(--duration-normal) var(--easing-standard),\n overlay var(--duration-normal) allow-discrete,\n display var(--duration-normal) allow-discrete;\n }\n\n dialog[open] {\n transform: translateX(0);\n }\n\n /* The panel starts off-screen on open, so the slide runs the first time\n too rather than only on close. */\n @starting-style {\n dialog[open] {\n transform: translateX(100%);\n }\n }\n\n dialog::backdrop {\n background: var(--color-backdrop, rgba(0, 0, 0, 0.45));\n }\n\n .header {\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: space-between;\n gap: var(--gap-drag-drop);\n }\n\n .titles {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .eyebrow {\n color: var(--text-muted);\n font: var(--font-normal-small);\n letter-spacing: 1px;\n text-transform: uppercase;\n }\n\n h2 {\n margin: 0;\n color: var(--text-body);\n font: var(--font-title-h6);\n }\n\n .divider {\n width: 100%;\n margin: 0;\n border: 0;\n border-bottom: var(--border-width) solid var(--border-subtle);\n }\n\n .body {\n flex: 1 1 auto;\n overflow: auto;\n }\n\n @media (prefers-reduced-motion: reduce) {\n dialog {\n transition: none;\n }\n }\n `,\n ];\n\n @query('dialog')\n private dialog!: HTMLDialogElement;\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Small uppercase label above the heading — \"Details\", \"Editing\". */\n @property({ type: String })\n eyebrow = 'Details';\n\n @property({ type: String })\n heading = '';\n\n /** Suppresses dismissal by backdrop click. Escape still works, by design. */\n @property({ type: Boolean, attribute: 'no-backdrop-close' })\n noBackdropClose = false;\n\n override updated(changed: PropertyValues<this>): void {\n if (!changed.has('open')) return;\n if (this.open) openModal(this.dialog);\n else closeDialog(this.dialog);\n }\n\n /** Asks to close. A cancelled `kt-close` keeps the panel open. */\n requestClose(): void {\n const proceed = emit(this, 'kt-close');\n if (proceed.defaultPrevented) {\n // The dialog may already have closed itself — Escape does that natively.\n if (!this.dialog.open) openModal(this.dialog);\n return;\n }\n this.open = false;\n }\n\n /** Escape and the native close both land here. */\n private onDialogClose(): void {\n if (this.open) this.requestClose();\n }\n\n private onDialogClick(event: MouseEvent): void {\n if (this.noBackdropClose) return;\n if (isBackdropClick(this.dialog, event)) this.requestClose();\n }\n\n override render(): TemplateResult {\n return html`<dialog\n part=\"dialog\"\n aria-label=${this.heading || nothing}\n @close=${this.onDialogClose}\n @click=${this.onDialogClick}\n >\n <div part=\"header\" class=\"header\">\n <div class=\"titles\">\n ${this.eyebrow ? html`<div class=\"eyebrow\">${this.eyebrow}</div>` : nothing}\n <h2>${this.heading}</h2>\n </div>\n <kt-button\n variant=\"secondary\"\n size=\"small\"\n icon=\"x\"\n label=\"Close\"\n @click=${this.requestClose}\n ></kt-button>\n </div>\n\n <hr class=\"divider\" />\n\n <div part=\"body\" class=\"body\"><slot></slot></div>\n <slot name=\"footer\"></slot>\n </dialog>`;\n }\n}\n\ndefineElement('kt-side-panel', KtSidePanel);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kt-side-panel': KtSidePanel;\n }\n}\n"],"names":["KtSidePanel","KtElement","css","changed","openModal","closeDialog","emit","event","isBackdropClick","html","nothing","__decorateClass","query","property","defineElement"],"mappings":";;;;;;;;;;;AAkCO,MAAMA,UAAoBC,EAAU;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA,GAqGL,KAAA,OAAO,IAIP,KAAA,UAAU,WAGV,KAAA,UAAU,IAIV,KAAA,kBAAkB;AAAA,EAAA;AAAA,EA/GlB,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,IAAA;AAAA,EA4FF;AAAA,EAmBS,QAAQC,GAAqC;AACpD,IAAKA,EAAQ,IAAI,MAAM,MACnB,KAAK,OAAMC,EAAU,KAAK,MAAM,IAC/BC,EAAY,KAAK,MAAM;AAAA,EAC9B;AAAA;AAAA,EAGA,eAAqB;AAEnB,QADgBC,EAAK,MAAM,UAAU,EACzB,kBAAkB;AAE5B,MAAK,KAAK,OAAO,QAAMF,EAAU,KAAK,MAAM;AAC5C;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGQ,gBAAsB;AAC5B,IAAI,KAAK,QAAM,KAAK,aAAA;AAAA,EACtB;AAAA,EAEQ,cAAcG,GAAyB;AAC7C,IAAI,KAAK,mBACLC,EAAgB,KAAK,QAAQD,CAAK,UAAQ,aAAA;AAAA,EAChD;AAAA,EAES,SAAyB;AAChC,WAAOE;AAAA;AAAA,mBAEQ,KAAK,WAAWC,CAAO;AAAA,eAC3B,KAAK,aAAa;AAAA,eAClB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,YAIrB,KAAK,UAAUD,yBAA4B,KAAK,OAAO,WAAWC,CAAO;AAAA,gBACrE,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOT,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASlC;AACF;AAtEUC,EAAA;AAAA,EADPC,EAAM,QAAQ;AAAA,GAjGJZ,EAkGH,WAAA,QAAA;AAGRW,EAAA;AAAA,EADCE,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GApG/Bb,EAqGX,WAAA,MAAA;AAIAW,EAAA;AAAA,EADCE,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAxGfb,EAyGX,WAAA,SAAA;AAGAW,EAAA;AAAA,EADCE,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA3Gfb,EA4GX,WAAA,SAAA;AAIAW,EAAA;AAAA,EADCE,EAAS,EAAE,MAAM,SAAS,WAAW,qBAAqB;AAAA,GA/GhDb,EAgHX,WAAA,iBAAA;AA0DFc,EAAc,iBAAiBd,CAAW;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Icons referenced by Kanto elements, keyed by their Lucide name. */
|
|
2
|
+
export declare const defaultIcons: {
|
|
3
|
+
ArrowDown: import("lucide").IconNode;
|
|
4
|
+
ArrowUp: import("lucide").IconNode;
|
|
5
|
+
Check: import("lucide").IconNode;
|
|
6
|
+
ChevronDown: import("lucide").IconNode;
|
|
7
|
+
ChevronLeft: import("lucide").IconNode;
|
|
8
|
+
ChevronRight: import("lucide").IconNode;
|
|
9
|
+
ChevronUp: import("lucide").IconNode;
|
|
10
|
+
CircleAlert: import("lucide").IconNode;
|
|
11
|
+
CircleCheck: import("lucide").IconNode;
|
|
12
|
+
Copy: import("lucide").IconNode;
|
|
13
|
+
Eye: import("lucide").IconNode;
|
|
14
|
+
EyeOff: import("lucide").IconNode;
|
|
15
|
+
File: import("lucide").IconNode;
|
|
16
|
+
FileUp: import("lucide").IconNode;
|
|
17
|
+
Info: import("lucide").IconNode;
|
|
18
|
+
LoaderCircle: import("lucide").IconNode;
|
|
19
|
+
Menu: import("lucide").IconNode;
|
|
20
|
+
Search: import("lucide").IconNode;
|
|
21
|
+
Trash2: import("lucide").IconNode;
|
|
22
|
+
TriangleAlert: import("lucide").IconNode;
|
|
23
|
+
User: import("lucide").IconNode;
|
|
24
|
+
X: import("lucide").IconNode;
|
|
25
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { a as e } from "../chunks/registry-X4LS9J5K.js";
|
|
2
|
+
import { g as E, r as F, b as L, t as T } from "../chunks/registry-X4LS9J5K.js";
|
|
3
|
+
import { X as r, User as o, TriangleAlert as t, Trash2 as n, Search as s, Menu as a, LoaderCircle as c, Info as i, FileUp as C, File as h, EyeOff as l, Eye as f, Copy as p, CircleCheck as g, CircleAlert as I, ChevronUp as m, ChevronRight as v, ChevronLeft as w, ChevronDown as A, Check as U, ArrowUp as b, ArrowDown as d } from "lucide";
|
|
4
|
+
const y = {
|
|
5
|
+
ArrowDown: d,
|
|
6
|
+
ArrowUp: b,
|
|
7
|
+
Check: U,
|
|
8
|
+
ChevronDown: A,
|
|
9
|
+
ChevronLeft: w,
|
|
10
|
+
ChevronRight: v,
|
|
11
|
+
ChevronUp: m,
|
|
12
|
+
CircleAlert: I,
|
|
13
|
+
CircleCheck: g,
|
|
14
|
+
Copy: p,
|
|
15
|
+
Eye: f,
|
|
16
|
+
EyeOff: l,
|
|
17
|
+
File: h,
|
|
18
|
+
FileUp: C,
|
|
19
|
+
Info: i,
|
|
20
|
+
LoaderCircle: c,
|
|
21
|
+
Menu: a,
|
|
22
|
+
Search: s,
|
|
23
|
+
Trash2: n,
|
|
24
|
+
TriangleAlert: t,
|
|
25
|
+
User: o,
|
|
26
|
+
X: r
|
|
27
|
+
};
|
|
28
|
+
e(y);
|
|
29
|
+
export {
|
|
30
|
+
y as defaultIcons,
|
|
31
|
+
E as getIcon,
|
|
32
|
+
F as registerIcon,
|
|
33
|
+
e as registerIcons,
|
|
34
|
+
L as registeredIcons,
|
|
35
|
+
T as toKebabCase
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/icons/defaults.ts"],"sourcesContent":["/**\n * The icons the design system uses in its own elements.\n *\n * Importing any Kanto element pulls this set in — roughly 2 kB of path data,\n * the price of `<kt-select>` being able to draw its own chevron. Application\n * icons are registered separately through `registerIcons`.\n */\nimport {\n ArrowDown,\n ArrowUp,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Eye,\n EyeOff,\n File,\n FileUp,\n Info,\n LoaderCircle,\n Menu,\n Search,\n Trash2,\n TriangleAlert,\n User,\n X,\n} from 'lucide';\n// The sibling registry, not the `kanto-ds` barrel: the barrel pulls in every\n// element, and one of them pulls in this file — a cycle that leaves\n// `registerIcons` undefined by the time the call below runs.\nimport { registerIcons } from './registry.js';\n\n/** Icons referenced by Kanto elements, keyed by their Lucide name. */\nexport const defaultIcons = {\n ArrowDown,\n ArrowUp,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleAlert,\n CircleCheck,\n Copy,\n Eye,\n EyeOff,\n File,\n FileUp,\n Info,\n LoaderCircle,\n Menu,\n Search,\n Trash2,\n TriangleAlert,\n User,\n X,\n};\n\nregisterIcons(defaultIcons);\n"],"names":["defaultIcons","ArrowDown","ArrowUp","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","CircleAlert","CircleCheck","Copy","Eye","EyeOff","File","FileUp","Info","LoaderCircle","Menu","Search","Trash2","TriangleAlert","User","X","registerIcons"],"mappings":";;;AAqCO,MAAMA,IAAe;AAAA,EAC1B,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,MAAAC;AAAA,EACA,GAAAC;AACF;AAEAC,EAAcvB,CAAY;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The icon registry.
|
|
3
|
+
*
|
|
4
|
+
* `<kt-icon>` looks icons up by name at render time, which means the set of
|
|
5
|
+
* icons cannot be statically analysed and a bundler cannot tree-shake it. So
|
|
6
|
+
* Kanto does not bundle all two thousand Lucide icons: the elements register
|
|
7
|
+
* the handful they need themselves, and an application registers whatever else
|
|
8
|
+
* it uses.
|
|
9
|
+
*
|
|
10
|
+
* import { Rocket, Wallet } from 'lucide';
|
|
11
|
+
* import { registerIcons } from 'kanto-ds/icons';
|
|
12
|
+
*
|
|
13
|
+
* registerIcons({ Rocket, Wallet });
|
|
14
|
+
*
|
|
15
|
+
* Names are normalised to kebab-case, so `Rocket`, `rocket` and
|
|
16
|
+
* `ChevronDown` / `chevron-down` all resolve.
|
|
17
|
+
*/
|
|
18
|
+
/** A Lucide icon: a flat list of SVG children, each `[tag, attributes]`. */
|
|
19
|
+
export type IconNode = [tag: string, attrs: Record<string, string | number | undefined>][];
|
|
20
|
+
/**
|
|
21
|
+
* `ChevronDown` → `chevron-down`, `Trash2` → `trash-2`, `AArrowDown` →
|
|
22
|
+
* `a-arrow-down`.
|
|
23
|
+
*
|
|
24
|
+
* The digit boundary matters: Lucide names that icon `trash-2`, so a rule that
|
|
25
|
+
* only splits on case produces `trash2` and the lookup quietly misses.
|
|
26
|
+
*/
|
|
27
|
+
export declare function toKebabCase(name: string): string;
|
|
28
|
+
/** Registers a single icon under `name`. */
|
|
29
|
+
export declare function registerIcon(name: string, node: IconNode): void;
|
|
30
|
+
/**
|
|
31
|
+
* Registers a map of icons. Accepts a Lucide namespace import directly:
|
|
32
|
+
* every non-icon export (`createElement`, `createIcons`, …) is skipped.
|
|
33
|
+
*/
|
|
34
|
+
export declare function registerIcons(icons: Record<string, unknown>): void;
|
|
35
|
+
/** Returns the icon registered under `name`, or `undefined`. */
|
|
36
|
+
export declare function getIcon(name: string): IconNode | undefined;
|
|
37
|
+
/** Every registered name, kebab-cased and sorted. Useful for docs and tests. */
|
|
38
|
+
export declare function registeredIcons(): string[];
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kanto — the whole design system.
|
|
3
|
+
*
|
|
4
|
+
* Importing this module registers every element. Applications that only use a
|
|
5
|
+
* few should import those directly instead, so the bundler can drop the rest:
|
|
6
|
+
*
|
|
7
|
+
* import 'kanto-ds/components/core/kt-button';
|
|
8
|
+
*/
|
|
9
|
+
export { KtAvatar } from './components/core/kt-avatar/kt-avatar.js';
|
|
10
|
+
export type { KtAvatarSize, KtAvatarStatus } from './components/core/kt-avatar/kt-avatar.js';
|
|
11
|
+
export { KtBadge } from './components/core/kt-badge/kt-badge.js';
|
|
12
|
+
export type { KtBadgeSize, KtBadgeTone, KtBadgeVariant, } from './components/core/kt-badge/kt-badge.js';
|
|
13
|
+
export { KtButton } from './components/core/kt-button/kt-button.js';
|
|
14
|
+
export type { KtButtonSize, KtButtonType, KtButtonVariant, } from './components/core/kt-button/kt-button.js';
|
|
15
|
+
export { KtCard } from './components/core/kt-card/kt-card.js';
|
|
16
|
+
export type { KtCardImagePosition } from './components/core/kt-card/kt-card.js';
|
|
17
|
+
export { KtCode } from './components/core/kt-code/kt-code.js';
|
|
18
|
+
export { KtIcon } from './components/core/kt-icon/kt-icon.js';
|
|
19
|
+
export { KtKbd } from './components/core/kt-kbd/kt-kbd.js';
|
|
20
|
+
export { KtDragDrop } from './components/forms/kt-drag-drop/kt-drag-drop.js';
|
|
21
|
+
export { KtForm } from './components/forms/kt-form/kt-form.js';
|
|
22
|
+
export { KtInput } from './components/forms/kt-input/kt-input.js';
|
|
23
|
+
export type { KtInputSize } from './components/forms/kt-input/kt-input.js';
|
|
24
|
+
export { KtInputMenu } from './components/forms/kt-input-menu/kt-input-menu.js';
|
|
25
|
+
export { KtLabelInput } from './components/forms/kt-label-input/kt-label-input.js';
|
|
26
|
+
export { KtSelect } from './components/forms/kt-select/kt-select.js';
|
|
27
|
+
export type { KtSelectSize } from './components/forms/kt-select/kt-select.js';
|
|
28
|
+
export { KtTextarea } from './components/forms/kt-textarea/kt-textarea.js';
|
|
29
|
+
export { KtToggle } from './components/forms/kt-toggle/kt-toggle.js';
|
|
30
|
+
export type { KtToggleSize } from './components/forms/kt-toggle/kt-toggle.js';
|
|
31
|
+
export { KtBreadcrumb } from './components/navigation/kt-breadcrumb/kt-breadcrumb.js';
|
|
32
|
+
export type { KtBreadcrumbItem } from './components/navigation/kt-breadcrumb/kt-breadcrumb.js';
|
|
33
|
+
export { KtPageHeader } from './components/navigation/kt-page-header/kt-page-header.js';
|
|
34
|
+
export { KtSegmentedControl } from './components/navigation/kt-segmented-control/kt-segmented-control.js';
|
|
35
|
+
export type { KtSegmentedOption, KtSegmentedSize, } from './components/navigation/kt-segmented-control/kt-segmented-control.js';
|
|
36
|
+
export { KtSubMenuNavigation } from './components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js';
|
|
37
|
+
export { KtTabs } from './components/navigation/kt-tabs/kt-tabs.js';
|
|
38
|
+
export type { KtTab } from './components/navigation/kt-tabs/kt-tabs.js';
|
|
39
|
+
export { KtHeader } from './components/navigation/kt-header/kt-header.js';
|
|
40
|
+
export type { KtNavItem, KtNavSection, } from './components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js';
|
|
41
|
+
export { KtToggleButton } from './components/navigation/kt-toggle-button/kt-toggle-button.js';
|
|
42
|
+
export type { KtToggleButtonSize, KtToggleButtonVariant, } from './components/navigation/kt-toggle-button/kt-toggle-button.js';
|
|
43
|
+
export { KtToggleButtonGroup } from './components/navigation/kt-toggle-button-group/kt-toggle-button-group.js';
|
|
44
|
+
export { KtAlert } from './components/feedback/kt-alert/kt-alert.js';
|
|
45
|
+
export type { KtAlertVariant } from './components/feedback/kt-alert/kt-alert.js';
|
|
46
|
+
export { KtEmptyState } from './components/feedback/kt-empty-state/kt-empty-state.js';
|
|
47
|
+
export { KtProgressBar } from './components/feedback/kt-progress-bar/kt-progress-bar.js';
|
|
48
|
+
export type { KtProgressSize, KtProgressVariant, } from './components/feedback/kt-progress-bar/kt-progress-bar.js';
|
|
49
|
+
export { KtSkeleton } from './components/feedback/kt-skeleton/kt-skeleton.js';
|
|
50
|
+
export type { KtSkeletonVariant } from './components/feedback/kt-skeleton/kt-skeleton.js';
|
|
51
|
+
export { KtToast } from './components/feedback/kt-toast/kt-toast.js';
|
|
52
|
+
export type { KtToastVariant } from './components/feedback/kt-toast/kt-toast.js';
|
|
53
|
+
export { KtToastContainer } from './components/feedback/kt-toast-container/kt-toast-container.js';
|
|
54
|
+
export type { KtToastOptions, KtToastPosition, } from './components/feedback/kt-toast-container/kt-toast-container.js';
|
|
55
|
+
export { toaster } from './components/feedback/kt-toast-container/toaster.js';
|
|
56
|
+
export { KtTooltip } from './components/feedback/kt-tooltip/kt-tooltip.js';
|
|
57
|
+
export type { KtTooltipPlacement } from './components/feedback/kt-tooltip/kt-tooltip.js';
|
|
58
|
+
export { KtCollapsible } from './components/overlays/kt-collapsible/kt-collapsible.js';
|
|
59
|
+
export { KtConfirmDialog } from './components/overlays/kt-confirm-dialog/kt-confirm-dialog.js';
|
|
60
|
+
export type { KtConfirmVariant } from './components/overlays/kt-confirm-dialog/kt-confirm-dialog.js';
|
|
61
|
+
export { KtDropdown } from './components/overlays/kt-dropdown/kt-dropdown.js';
|
|
62
|
+
export type { KtDropdownPlacement } from './components/overlays/kt-dropdown/kt-dropdown.js';
|
|
63
|
+
export { KtModal } from './components/overlays/kt-modal/kt-modal.js';
|
|
64
|
+
export type { KtModalSize } from './components/overlays/kt-modal/kt-modal.js';
|
|
65
|
+
export { KtSidePanel } from './components/overlays/kt-side-panel/kt-side-panel.js';
|
|
66
|
+
export { KtChart } from './components/data/kt-chart/kt-chart.js';
|
|
67
|
+
export type { KtChartType, KtSeries } from './components/data/kt-chart/kt-chart.js';
|
|
68
|
+
export { KtMeter } from './components/data/kt-meter/kt-meter.js';
|
|
69
|
+
export type { KtMeterSegment } from './components/data/kt-meter/kt-meter.js';
|
|
70
|
+
export { KtPagination } from './components/data/kt-pagination/kt-pagination.js';
|
|
71
|
+
export { KtStat } from './components/data/kt-stat/kt-stat.js';
|
|
72
|
+
export type { KtStatTrend } from './components/data/kt-stat/kt-stat.js';
|
|
73
|
+
export { KtTable } from './components/data/kt-table/kt-table.js';
|
|
74
|
+
export type { KtCellRenderer, KtSortDirection, KtSortState, KtTableColumn, KtTableRow, } from './components/data/kt-table/kt-table.js';
|
|
75
|
+
export { KtTimeline, KtTimelineItem } from './components/data/kt-timeline/kt-timeline.js';
|
|
76
|
+
export type { KtTimelineVariant } from './components/data/kt-timeline/kt-timeline.js';
|
|
77
|
+
export type { KtOption } from './internal/listbox.js';
|
|
78
|
+
export type { KtCountry } from './internal/countries.js';
|
|
79
|
+
export { getIcon, registerIcon, registerIcons, registeredIcons } from './icons/registry.js';
|
|
80
|
+
export type { IconNode } from './icons/registry.js';
|
|
81
|
+
export { KtElement, defineElement } from './internal/kt-element.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { KtAvatar as r } from "./components/core/kt-avatar/kt-avatar.js";
|
|
2
|
+
import { KtBadge as m } from "./components/core/kt-badge/kt-badge.js";
|
|
3
|
+
import { KtButton as f } from "./components/core/kt-button/kt-button.js";
|
|
4
|
+
import { KtCard as K } from "./components/core/kt-card/kt-card.js";
|
|
5
|
+
import { KtCode as n } from "./components/core/kt-code/kt-code.js";
|
|
6
|
+
import { KtIcon as g } from "./components/core/kt-icon/kt-icon.js";
|
|
7
|
+
import { KtKbd as i } from "./components/core/kt-kbd/kt-kbd.js";
|
|
8
|
+
import { KtDragDrop as u } from "./components/forms/kt-drag-drop/kt-drag-drop.js";
|
|
9
|
+
import { KtForm as I } from "./components/forms/kt-form/kt-form.js";
|
|
10
|
+
import { KtInput as c } from "./components/forms/kt-input/kt-input.js";
|
|
11
|
+
import { KtInputMenu as S } from "./components/forms/kt-input-menu/kt-input-menu.js";
|
|
12
|
+
import { KtLabelInput as D } from "./components/forms/kt-label-input/kt-label-input.js";
|
|
13
|
+
import { KtSelect as P } from "./components/forms/kt-select/kt-select.js";
|
|
14
|
+
import { KtTextarea as v } from "./components/forms/kt-textarea/kt-textarea.js";
|
|
15
|
+
import { KtToggle as H } from "./components/forms/kt-toggle/kt-toggle.js";
|
|
16
|
+
import { KtBreadcrumb as k } from "./components/navigation/kt-breadcrumb/kt-breadcrumb.js";
|
|
17
|
+
import { KtPageHeader as y } from "./components/navigation/kt-page-header/kt-page-header.js";
|
|
18
|
+
import { KtSegmentedControl as G } from "./components/navigation/kt-segmented-control/kt-segmented-control.js";
|
|
19
|
+
import { KtSubMenuNavigation as N } from "./components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js";
|
|
20
|
+
import { KtTabs as q } from "./components/navigation/kt-tabs/kt-tabs.js";
|
|
21
|
+
import { KtHeader as J } from "./components/navigation/kt-header/kt-header.js";
|
|
22
|
+
import { KtToggleButton as Q } from "./components/navigation/kt-toggle-button/kt-toggle-button.js";
|
|
23
|
+
import { KtToggleButtonGroup as U } from "./components/navigation/kt-toggle-button-group/kt-toggle-button-group.js";
|
|
24
|
+
import { KtAlert as W } from "./components/feedback/kt-alert/kt-alert.js";
|
|
25
|
+
import { KtEmptyState as Y } from "./components/feedback/kt-empty-state/kt-empty-state.js";
|
|
26
|
+
import { KtProgressBar as _ } from "./components/feedback/kt-progress-bar/kt-progress-bar.js";
|
|
27
|
+
import { KtSkeleton as tt } from "./components/feedback/kt-skeleton/kt-skeleton.js";
|
|
28
|
+
import { KtToast as rt } from "./components/feedback/kt-toast/kt-toast.js";
|
|
29
|
+
import { KtToastContainer as mt } from "./components/feedback/kt-toast-container/kt-toast-container.js";
|
|
30
|
+
import { t as ft } from "./chunks/toaster-PmdKSV5x.js";
|
|
31
|
+
import { KtTooltip as Kt } from "./components/feedback/kt-tooltip/kt-tooltip.js";
|
|
32
|
+
import { KtCollapsible as nt } from "./components/overlays/kt-collapsible/kt-collapsible.js";
|
|
33
|
+
import { KtConfirmDialog as gt } from "./components/overlays/kt-confirm-dialog/kt-confirm-dialog.js";
|
|
34
|
+
import { KtDropdown as it } from "./components/overlays/kt-dropdown/kt-dropdown.js";
|
|
35
|
+
import { KtModal as ut } from "./components/overlays/kt-modal/kt-modal.js";
|
|
36
|
+
import { KtSidePanel as It } from "./components/overlays/kt-side-panel/kt-side-panel.js";
|
|
37
|
+
import { KtChart as ct } from "./components/data/kt-chart/kt-chart.js";
|
|
38
|
+
import { KtMeter as St } from "./components/data/kt-meter/kt-meter.js";
|
|
39
|
+
import { KtPagination as Dt } from "./components/data/kt-pagination/kt-pagination.js";
|
|
40
|
+
import { KtStat as Pt } from "./components/data/kt-stat/kt-stat.js";
|
|
41
|
+
import { KtTable as vt } from "./components/data/kt-table/kt-table.js";
|
|
42
|
+
import { KtTimeline as Ht, KtTimelineItem as ht } from "./components/data/kt-timeline/kt-timeline.js";
|
|
43
|
+
import { g as wt, r as yt, a as Ft, b as Gt } from "./chunks/registry-X4LS9J5K.js";
|
|
44
|
+
import { K as Nt, d as jt } from "./chunks/kt-element-CcMLO5e8.js";
|
|
45
|
+
export {
|
|
46
|
+
W as KtAlert,
|
|
47
|
+
r as KtAvatar,
|
|
48
|
+
m as KtBadge,
|
|
49
|
+
k as KtBreadcrumb,
|
|
50
|
+
f as KtButton,
|
|
51
|
+
K as KtCard,
|
|
52
|
+
ct as KtChart,
|
|
53
|
+
n as KtCode,
|
|
54
|
+
nt as KtCollapsible,
|
|
55
|
+
gt as KtConfirmDialog,
|
|
56
|
+
u as KtDragDrop,
|
|
57
|
+
it as KtDropdown,
|
|
58
|
+
Nt as KtElement,
|
|
59
|
+
Y as KtEmptyState,
|
|
60
|
+
I as KtForm,
|
|
61
|
+
J as KtHeader,
|
|
62
|
+
g as KtIcon,
|
|
63
|
+
c as KtInput,
|
|
64
|
+
S as KtInputMenu,
|
|
65
|
+
i as KtKbd,
|
|
66
|
+
D as KtLabelInput,
|
|
67
|
+
St as KtMeter,
|
|
68
|
+
ut as KtModal,
|
|
69
|
+
y as KtPageHeader,
|
|
70
|
+
Dt as KtPagination,
|
|
71
|
+
_ as KtProgressBar,
|
|
72
|
+
G as KtSegmentedControl,
|
|
73
|
+
P as KtSelect,
|
|
74
|
+
It as KtSidePanel,
|
|
75
|
+
tt as KtSkeleton,
|
|
76
|
+
Pt as KtStat,
|
|
77
|
+
N as KtSubMenuNavigation,
|
|
78
|
+
vt as KtTable,
|
|
79
|
+
q as KtTabs,
|
|
80
|
+
v as KtTextarea,
|
|
81
|
+
Ht as KtTimeline,
|
|
82
|
+
ht as KtTimelineItem,
|
|
83
|
+
rt as KtToast,
|
|
84
|
+
mt as KtToastContainer,
|
|
85
|
+
H as KtToggle,
|
|
86
|
+
Q as KtToggleButton,
|
|
87
|
+
U as KtToggleButtonGroup,
|
|
88
|
+
Kt as KtTooltip,
|
|
89
|
+
jt as defineElement,
|
|
90
|
+
wt as getIcon,
|
|
91
|
+
yt as registerIcon,
|
|
92
|
+
Ft as registerIcons,
|
|
93
|
+
Gt as registeredIcons,
|
|
94
|
+
ft as toaster
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Country data for the phone mode of `<kt-input>`.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately a short list rather than all 195: an exhaustive picker is a
|
|
5
|
+
* worse experience than a handful of entries and a search box. Applications
|
|
6
|
+
* that need more pass their own list to the element.
|
|
7
|
+
*/
|
|
8
|
+
export interface KtCountry {
|
|
9
|
+
/** ISO 3166-1 alpha-2, lowercase. */
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
/** International dialling code, without the leading `+`. */
|
|
13
|
+
readonly dialCode: string;
|
|
14
|
+
/** Placeholder showing the local format. */
|
|
15
|
+
readonly format: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_COUNTRIES: readonly KtCountry[];
|
|
18
|
+
/**
|
|
19
|
+
* The flag emoji for a country code, built from regional indicator symbols.
|
|
20
|
+
*
|
|
21
|
+
* This is the one place emoji appear in a Kanto interface. They are here
|
|
22
|
+
* because no flag icon set ships with the system, and a country picker without
|
|
23
|
+
* flags is markedly slower to scan.
|
|
24
|
+
*/
|
|
25
|
+
export declare function flagEmoji(id: string): string;
|
|
26
|
+
/** Keeps only the digits — what gets stored and submitted. */
|
|
27
|
+
export declare function digitsOnly(value: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Groups digits for display, per country.
|
|
30
|
+
*
|
|
31
|
+
* North American numbers read as `123 456 7890`, French ones as
|
|
32
|
+
* `6 12 34 56 78` — a single leading digit, then pairs. Everything else falls
|
|
33
|
+
* back to groups of three.
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatNationalNumber(digits: string, country: KtCountry | undefined): string;
|
|
36
|
+
/** Filters by name, dial code or country code — whatever the user types. */
|
|
37
|
+
export declare function searchCountries(countries: readonly KtCountry[], query: string): readonly KtCountry[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for elements built on the native `<dialog>`.
|
|
3
|
+
*
|
|
4
|
+
* `showModal()` is worth the trouble: it puts the dialog in the top layer
|
|
5
|
+
* (above every stacking context, which no z-index can guarantee), traps focus,
|
|
6
|
+
* makes the rest of the page inert, and handles Escape. Rebuilding that by
|
|
7
|
+
* hand — and every design system has tried — produces a focus trap that leaks.
|
|
8
|
+
*
|
|
9
|
+
* The calls are guarded because test DOMs implement `<dialog>` only partially.
|
|
10
|
+
*/
|
|
11
|
+
/** Opens `dialog` modally, falling back to a non-modal open where it is unsupported. */
|
|
12
|
+
export declare function openModal(dialog: HTMLDialogElement): void;
|
|
13
|
+
/** Closes `dialog`, whichever way it was opened. */
|
|
14
|
+
export declare function closeDialog(dialog: HTMLDialogElement): void;
|
|
15
|
+
/**
|
|
16
|
+
* True when a click at these coordinates landed on the backdrop rather than on
|
|
17
|
+
* the dialog itself.
|
|
18
|
+
*
|
|
19
|
+
* A click on `::backdrop` is reported as a click on the dialog element, so the
|
|
20
|
+
* only way to tell them apart is to compare against its box.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isBackdropClick(dialog: HTMLDialogElement, event: MouseEvent): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispatches a `CustomEvent` from a Kanto element.
|
|
3
|
+
*
|
|
4
|
+
* Kanto events cross shadow boundaries (`composed`) and bubble, so a consumer
|
|
5
|
+
* can listen on a container rather than on every element — the behaviour a
|
|
6
|
+
* React or Vue developer expects from an `onChange` prop. They are cancelable
|
|
7
|
+
* so a host can `preventDefault()` a change it wants to veto.
|
|
8
|
+
*/
|
|
9
|
+
export declare function emit<T>(host: HTMLElement, name: string, detail?: T): CustomEvent<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Generates a document-unique id, for wiring `aria-labelledby` and friends
|
|
12
|
+
* across a shadow root.
|
|
13
|
+
*/
|
|
14
|
+
export declare function uniqueId(prefix: string): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form participation for Kanto's input elements.
|
|
3
|
+
*
|
|
4
|
+
* A control inside a shadow root is invisible to the form around it. The
|
|
5
|
+
* platform's answer is `ElementInternals`: the element declares
|
|
6
|
+
* `static formAssociated = true`, calls `attachInternals()` and pushes its
|
|
7
|
+
* value in with `setFormValue`, which makes it a first-class form control —
|
|
8
|
+
* serialised into `FormData`, reset by `form.reset()`, validated by
|
|
9
|
+
* `form.checkValidity()`.
|
|
10
|
+
*
|
|
11
|
+
* Every browser Kanto targets supports this. Test environments do not: neither
|
|
12
|
+
* happy-dom nor jsdom implements it, and jsdom stubs `attachInternals` with an
|
|
13
|
+
* object that has no `setFormValue`. So each call is guarded, and an element
|
|
14
|
+
* still works — minus form serialisation — where the API is missing.
|
|
15
|
+
*/
|
|
16
|
+
/** An `ElementInternals` implementation complete enough to be worth calling. */
|
|
17
|
+
export type UsableInternals = ElementInternals;
|
|
18
|
+
export declare function attachFormInternals(host: HTMLElement): UsableInternals | null;
|
|
19
|
+
/** Pushes the control's current value into the enclosing form, if there is one. */
|
|
20
|
+
export declare function setFormValue(internals: UsableInternals | null, value: string | null): void;
|
|
21
|
+
/**
|
|
22
|
+
* Mirrors a control's validity onto the host element.
|
|
23
|
+
*
|
|
24
|
+
* `anchor` is the element a browser scrolls to and anchors the native bubble
|
|
25
|
+
* against when the form is submitted invalid.
|
|
26
|
+
*/
|
|
27
|
+
export declare function setValidity(internals: UsableInternals | null, flags: ValidityStateFlags, message: string, anchor?: HTMLElement): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Formatting helpers shared by elements that display data. */
|
|
2
|
+
/**
|
|
3
|
+
* A human-readable file size.
|
|
4
|
+
*
|
|
5
|
+
* Uses 1024 steps, matching what every desktop file manager shows, and one
|
|
6
|
+
* decimal above a kilobyte — "1.4 MB" reads; "1468006 B" does not.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatFileSize(bytes: number): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { LitElement, type CSSResultGroup } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for every Kanto element.
|
|
4
|
+
*
|
|
5
|
+
* It exists for two reasons. First, `box-sizing: border-box` does not cross a
|
|
6
|
+
* shadow boundary, so each root has to re-establish it. Second, `[hidden]`
|
|
7
|
+
* loses to a `:host { display: flex }` rule inside the shadow root, and every
|
|
8
|
+
* element in this system sets its own display — without the override here,
|
|
9
|
+
* hiding a Kanto element from the outside silently does nothing.
|
|
10
|
+
*/
|
|
11
|
+
export declare class KtElement extends LitElement {
|
|
12
|
+
static styles: CSSResultGroup;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Registers a custom element, tolerating a repeat call.
|
|
16
|
+
*
|
|
17
|
+
* A design system gets loaded twice more often than you would like — two
|
|
18
|
+
* versions in one dependency tree, a dev-server hot reload, a micro-frontend
|
|
19
|
+
* mounting a second copy. `customElements.define` throws on a duplicate tag
|
|
20
|
+
* and would take the whole page down with it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function defineElement(tag: string, ctor: CustomElementConstructor): void;
|