kanto-ds 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +10 -10
  2. package/dist/chunks/floating-B33g-M_1.js +63 -0
  3. package/dist/chunks/floating-B33g-M_1.js.map +1 -0
  4. package/dist/chunks/{index-STEEvEP7.js → index-TWJzttLX.js} +38 -15
  5. package/dist/chunks/index-TWJzttLX.js.map +1 -0
  6. package/dist/chunks/kt-calendar-CtwOby1R.js +780 -0
  7. package/dist/chunks/kt-calendar-CtwOby1R.js.map +1 -0
  8. package/dist/chunks/{kt-element-Djx2JcGl.js → kt-element-T0VbIBNp.js} +2 -2
  9. package/dist/chunks/{kt-element-Djx2JcGl.js.map → kt-element-T0VbIBNp.js.map} +1 -1
  10. package/dist/chunks/{listbox-llcUu_V-.js → listbox-LsUEyGhQ.js} +2 -2
  11. package/dist/chunks/{listbox-llcUu_V-.js.map → listbox-LsUEyGhQ.js.map} +1 -1
  12. package/dist/chunks/segmented-field-BBXR4XFL.js +384 -0
  13. package/dist/chunks/segmented-field-BBXR4XFL.js.map +1 -0
  14. package/dist/chunks/typed-date-CPAUNHzr.js +103 -0
  15. package/dist/chunks/typed-date-CPAUNHzr.js.map +1 -0
  16. package/dist/components/core/kt-avatar/kt-avatar.js +2 -2
  17. package/dist/components/core/kt-badge/kt-badge.js +2 -2
  18. package/dist/components/core/kt-button/kt-button.js +1 -1
  19. package/dist/components/core/kt-card/kt-card.js +1 -1
  20. package/dist/components/core/kt-code/kt-code.js +13 -13
  21. package/dist/components/core/kt-code/kt-code.js.map +1 -1
  22. package/dist/components/core/kt-icon/kt-icon.js +1 -1
  23. package/dist/components/core/kt-kbd/kt-kbd.js +5 -5
  24. package/dist/components/core/kt-kbd/kt-kbd.js.map +1 -1
  25. package/dist/components/core/kt-split-button/kt-split-button.js +3 -3
  26. package/dist/components/data/kt-chart/kt-chart.js +3 -3
  27. package/dist/components/data/kt-chart/kt-chart.js.map +1 -1
  28. package/dist/components/data/kt-meter/kt-meter.js +1 -1
  29. package/dist/components/data/kt-pagination/kt-pagination.js +2 -2
  30. package/dist/components/data/kt-stat/kt-stat.js +1 -1
  31. package/dist/components/data/kt-table/kt-table.js +85 -85
  32. package/dist/components/data/kt-table/kt-table.js.map +1 -1
  33. package/dist/components/data/kt-timeline/kt-timeline.js +1 -1
  34. package/dist/components/feedback/kt-alert/kt-alert.js +15 -15
  35. package/dist/components/feedback/kt-alert/kt-alert.js.map +1 -1
  36. package/dist/components/feedback/kt-empty-state/kt-empty-state.js +1 -1
  37. package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +1 -1
  38. package/dist/components/feedback/kt-skeleton/kt-skeleton.js +13 -13
  39. package/dist/components/feedback/kt-skeleton/kt-skeleton.js.map +1 -1
  40. package/dist/components/feedback/kt-toast/kt-toast.js +3 -3
  41. package/dist/components/feedback/kt-toast/kt-toast.js.map +1 -1
  42. package/dist/components/feedback/kt-toast-container/kt-toast-container.js +1 -1
  43. package/dist/components/feedback/kt-tooltip/kt-tooltip.js +1 -1
  44. package/dist/components/forms/kt-calendar/kt-calendar.d.ts +35 -9
  45. package/dist/components/forms/kt-calendar/kt-calendar.js +3 -3
  46. package/dist/components/forms/kt-checkbox/kt-checkbox.js +2 -2
  47. package/dist/components/forms/kt-date-input/kt-date-input.d.ts +65 -0
  48. package/dist/components/forms/kt-date-input/kt-date-input.js +241 -0
  49. package/dist/components/forms/kt-date-input/kt-date-input.js.map +1 -0
  50. package/dist/components/forms/kt-date-picker/kt-date-picker.d.ts +47 -3
  51. package/dist/components/forms/kt-date-picker/kt-date-picker.js +430 -199
  52. package/dist/components/forms/kt-date-picker/kt-date-picker.js.map +1 -1
  53. package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +3 -3
  54. package/dist/components/forms/kt-drag-drop/kt-drag-drop.js.map +1 -1
  55. package/dist/components/forms/kt-form/kt-form.js +2 -2
  56. package/dist/components/forms/kt-input/kt-input.js +10 -10
  57. package/dist/components/forms/kt-input/kt-input.js.map +1 -1
  58. package/dist/components/forms/kt-input-menu/kt-input-menu.js +4 -4
  59. package/dist/components/forms/kt-label-input/kt-label-input.js +1 -1
  60. package/dist/components/forms/kt-multi-select/kt-multi-select.d.ts +113 -0
  61. package/dist/components/forms/kt-multi-select/kt-multi-select.js +532 -0
  62. package/dist/components/forms/kt-multi-select/kt-multi-select.js.map +1 -0
  63. package/dist/components/forms/kt-radio-group/kt-radio-group.js +56 -51
  64. package/dist/components/forms/kt-radio-group/kt-radio-group.js.map +1 -1
  65. package/dist/components/forms/kt-select/kt-select.js +4 -4
  66. package/dist/components/forms/kt-textarea/kt-textarea.js +2 -2
  67. package/dist/components/forms/kt-time-input/kt-time-input.d.ts +48 -0
  68. package/dist/components/forms/kt-time-input/kt-time-input.js +114 -0
  69. package/dist/components/forms/kt-time-input/kt-time-input.js.map +1 -0
  70. package/dist/components/forms/kt-toggle/kt-toggle.js +1 -1
  71. package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +6 -6
  72. package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js.map +1 -1
  73. package/dist/components/navigation/kt-header/kt-header.js +2 -2
  74. package/dist/components/navigation/kt-page-header/kt-page-header.js +1 -1
  75. package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +2 -2
  76. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +2 -2
  77. package/dist/components/navigation/kt-tabs/kt-tabs.js +2 -2
  78. package/dist/components/navigation/kt-tabs/kt-tabs.js.map +1 -1
  79. package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +1 -1
  80. package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +2 -2
  81. package/dist/components/overlays/kt-collapsible/kt-collapsible.js +3 -3
  82. package/dist/components/overlays/kt-collapsible/kt-collapsible.js.map +1 -1
  83. package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +2 -2
  84. package/dist/components/overlays/kt-dropdown/kt-dropdown.js +24 -24
  85. package/dist/components/overlays/kt-dropdown/kt-dropdown.js.map +1 -1
  86. package/dist/components/overlays/kt-modal/kt-modal.js +2 -2
  87. package/dist/components/overlays/kt-side-panel/kt-side-panel.js +2 -2
  88. package/dist/custom-elements.json +2230 -842
  89. package/dist/index.d.ts +9 -1
  90. package/dist/index.js +316 -109
  91. package/dist/index.js.map +1 -1
  92. package/dist/internal/floating.d.ts +3 -0
  93. package/dist/internal/segmented-field.d.ts +114 -0
  94. package/dist/internal/segments.d.ts +30 -0
  95. package/dist/internal/strings.d.ts +30 -0
  96. package/dist/internal/typed-date.d.ts +33 -0
  97. package/dist/react/index.d.ts +23 -0
  98. package/dist/react/index.js +193 -169
  99. package/dist/react/index.js.map +1 -1
  100. package/dist/react/jsx.d.ts +20 -1
  101. package/dist/strings/index.js +1 -1
  102. package/dist/theme/accent.d.ts +51 -0
  103. package/dist/theme/appearance.d.ts +37 -0
  104. package/dist/tokens/README.md +100 -1
  105. package/dist/tokens/accents.css +80 -0
  106. package/dist/tokens/appearance.css +65 -0
  107. package/dist/tokens/base.css +3 -0
  108. package/dist/tokens/colors.css +78 -25
  109. package/dist/tokens/index.css +2 -0
  110. package/dist/tokens/responsive.css +160 -75
  111. package/dist/tokens/spacing.css +47 -28
  112. package/dist/tokens/theme-light.css +124 -38
  113. package/dist/tokens/typography.css +20 -13
  114. package/dist/vscode.css-custom-data.json +36 -1
  115. package/dist/vscode.html-custom-data.json +67 -2
  116. package/dist/vue/index.d.ts +6 -0
  117. package/dist/vue/index.js +11 -8
  118. package/dist/vue/index.js.map +1 -1
  119. package/dist/web-types.json +190 -3
  120. package/package.json +13 -1
  121. package/dist/chunks/floating-B7_Dahpn.js +0 -54
  122. package/dist/chunks/floating-B7_Dahpn.js.map +0 -1
  123. package/dist/chunks/index-STEEvEP7.js.map +0 -1
  124. package/dist/chunks/kt-calendar-B_hFdD9V.js +0 -640
  125. package/dist/chunks/kt-calendar-B_hFdD9V.js.map +0 -1
@@ -14,7 +14,8 @@
14
14
  */
15
15
 
16
16
  :root[data-theme='light'],
17
- [data-theme='light'] {
17
+ [data-theme='light'],
18
+ [data-theme='light'] [data-accent] {
18
19
  color-scheme: light;
19
20
 
20
21
  --color-white: rgba(255, 255, 255, 1);
@@ -22,32 +23,66 @@
22
23
  /* Darker than the base colours, which stay tuned for fills. Success,
23
24
  info and warning turn a few degrees of hue for chroma: a dark enough
24
25
  amber is brown, a dark enough orange is still orange. */
25
- --color-primary-text: #4f30ef;
26
+ --color-primary-text: var(--accent-text-light, #4f30ef);
26
27
  --color-danger-text: #b30436;
27
28
  --color-info-text: #0260a2;
28
29
  --color-warning-text: #9e4502;
29
30
  --color-success-text: #026f2a;
30
31
 
31
- --color-text-100: rgba(28, 28, 30, 1);
32
- --color-text-400: rgba(80, 80, 90, 1);
33
- --color-text-500: rgba(110, 110, 120, 1);
34
- --color-text-600: rgba(130, 130, 140, 1);
35
- --color-text-700: rgba(155, 155, 165, 1);
36
- --color-text-800: rgba(180, 180, 190, 1);
37
- --color-text-900: rgba(220, 220, 225, 1);
32
+ --color-text-100: oklch(
33
+ 0.2273 calc(0.0038 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.1)
34
+ );
35
+ --color-text-400: oklch(
36
+ 0.4349 calc(0.0163 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.7)
37
+ );
38
+ --color-text-500: oklch(
39
+ 0.5416 calc(0.0154 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.9)
40
+ );
41
+ --color-text-600: oklch(
42
+ 0.6099 calc(0.015 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.9)
43
+ );
44
+ --color-text-700: oklch(
45
+ 0.6927 calc(0.0145 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8)
46
+ );
47
+ --color-text-800: oklch(
48
+ 0.773 calc(0.0141 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.1)
49
+ );
50
+ --color-text-900: oklch(
51
+ 0.8959 calc(0.0068 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
52
+ );
38
53
 
39
54
  /* The ramp inverts: "8" stays the extreme, "24" stays the most elevated. */
40
55
  --color-dark-8: rgba(255, 255, 255, 1);
41
- --color-dark-12: rgba(250, 250, 252, 1);
42
- --color-dark-14: rgba(245, 245, 247, 1);
43
- --color-dark-15: rgba(242, 242, 245, 1);
44
- --color-dark-16: rgba(238, 238, 241, 1);
45
- --color-dark-18: rgba(232, 232, 236, 1);
46
- --color-dark-19: rgba(228, 228, 233, 1);
47
- --color-dark-20: rgba(222, 222, 228, 1);
48
- --color-dark-22: rgba(215, 215, 222, 1);
49
- --color-dark-23: rgba(210, 210, 218, 1);
50
- --color-dark-24: rgba(205, 205, 212, 1);
56
+ --color-dark-12: oklch(
57
+ 0.9857 calc(0.0026 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.4)
58
+ );
59
+ --color-dark-14: oklch(
60
+ 0.9707 calc(0.0027 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.4)
61
+ );
62
+ --color-dark-15: oklch(
63
+ 0.962 calc(0.004 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
64
+ );
65
+ --color-dark-16: oklch(
66
+ 0.95 calc(0.004 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
67
+ );
68
+ --color-dark-18: oklch(
69
+ 0.9321 calc(0.0054 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
70
+ );
71
+ --color-dark-19: oklch(
72
+ 0.9203 calc(0.0067 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
73
+ );
74
+ --color-dark-20: oklch(
75
+ 0.9023 calc(0.0081 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
76
+ );
77
+ --color-dark-22: oklch(
78
+ 0.8812 calc(0.0095 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
79
+ );
80
+ --color-dark-23: oklch(
81
+ 0.8661 calc(0.0109 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
82
+ );
83
+ --color-dark-24: oklch(
84
+ 0.8504 calc(0.0096 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
85
+ );
51
86
 
52
87
  --color-navigation-top-icon: #1c1c1e;
53
88
  --color-navigation-icon: #505050;
@@ -86,13 +121,22 @@
86
121
 
87
122
  /* Inverted really is inverted: a dark bubble on a light page. */
88
123
  --surface-inverted: rgba(29, 28, 34, 1);
124
+
125
+ /* Light, a darker step reads as a grey smudge and fades whatever sits on it,
126
+ and a white one is lost on a near-white page: white, then, with an edge
127
+ and the system's one soft shadow besides the toasts'. */
128
+ --surface-popover: var(--color-dark-8);
129
+ --border-popover: var(--color-dark-20);
130
+ --shadow-popover: 0 8px 24px rgba(28, 28, 30, 0.12), 0 1px 3px rgba(28, 28, 30, 0.08);
131
+ --divider-popover: var(--color-dark-20);
89
132
  --text-inverted: rgba(244, 244, 245, 1);
90
133
  }
91
134
 
92
135
  /* data-theme="auto" defers to the OS setting. */
93
136
  @media (prefers-color-scheme: light) {
94
137
  :root[data-theme='auto'],
95
- [data-theme='auto'] {
138
+ [data-theme='auto'],
139
+ [data-theme='auto'] [data-accent] {
96
140
  color-scheme: light;
97
141
 
98
142
  --color-white: rgba(255, 255, 255, 1);
@@ -100,31 +144,65 @@
100
144
  /* Darker than the base colours, which stay tuned for fills. Success,
101
145
  info and warning turn a few degrees of hue for chroma: a dark enough
102
146
  amber is brown, a dark enough orange is still orange. */
103
- --color-primary-text: #4f30ef;
147
+ --color-primary-text: var(--accent-text-light, #4f30ef);
104
148
  --color-danger-text: #b30436;
105
149
  --color-info-text: #0260a2;
106
150
  --color-warning-text: #9e4502;
107
151
  --color-success-text: #026f2a;
108
152
 
109
- --color-text-100: rgba(28, 28, 30, 1);
110
- --color-text-400: rgba(80, 80, 90, 1);
111
- --color-text-500: rgba(110, 110, 120, 1);
112
- --color-text-600: rgba(130, 130, 140, 1);
113
- --color-text-700: rgba(155, 155, 165, 1);
114
- --color-text-800: rgba(180, 180, 190, 1);
115
- --color-text-900: rgba(220, 220, 225, 1);
153
+ --color-text-100: oklch(
154
+ 0.2273 calc(0.0038 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.1)
155
+ );
156
+ --color-text-400: oklch(
157
+ 0.4349 calc(0.0163 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.7)
158
+ );
159
+ --color-text-500: oklch(
160
+ 0.5416 calc(0.0154 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.9)
161
+ );
162
+ --color-text-600: oklch(
163
+ 0.6099 calc(0.015 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 7.9)
164
+ );
165
+ --color-text-700: oklch(
166
+ 0.6927 calc(0.0145 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8)
167
+ );
168
+ --color-text-800: oklch(
169
+ 0.773 calc(0.0141 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.1)
170
+ );
171
+ --color-text-900: oklch(
172
+ 0.8959 calc(0.0068 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
173
+ );
116
174
 
117
175
  --color-dark-8: rgba(255, 255, 255, 1);
118
- --color-dark-12: rgba(250, 250, 252, 1);
119
- --color-dark-14: rgba(245, 245, 247, 1);
120
- --color-dark-15: rgba(242, 242, 245, 1);
121
- --color-dark-16: rgba(238, 238, 241, 1);
122
- --color-dark-18: rgba(232, 232, 236, 1);
123
- --color-dark-19: rgba(228, 228, 233, 1);
124
- --color-dark-20: rgba(222, 222, 228, 1);
125
- --color-dark-22: rgba(215, 215, 222, 1);
126
- --color-dark-23: rgba(210, 210, 218, 1);
127
- --color-dark-24: rgba(205, 205, 212, 1);
176
+ --color-dark-12: oklch(
177
+ 0.9857 calc(0.0026 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.4)
178
+ );
179
+ --color-dark-14: oklch(
180
+ 0.9707 calc(0.0027 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.4)
181
+ );
182
+ --color-dark-15: oklch(
183
+ 0.962 calc(0.004 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
184
+ );
185
+ --color-dark-16: oklch(
186
+ 0.95 calc(0.004 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
187
+ );
188
+ --color-dark-18: oklch(
189
+ 0.9321 calc(0.0054 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
190
+ );
191
+ --color-dark-19: oklch(
192
+ 0.9203 calc(0.0067 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.3)
193
+ );
194
+ --color-dark-20: oklch(
195
+ 0.9023 calc(0.0081 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
196
+ );
197
+ --color-dark-22: oklch(
198
+ 0.8812 calc(0.0095 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
199
+ );
200
+ --color-dark-23: oklch(
201
+ 0.8661 calc(0.0109 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
202
+ );
203
+ --color-dark-24: oklch(
204
+ 0.8504 calc(0.0096 * var(--neutral-chroma, 1)) calc(var(--neutral-hue, 278) + 8.2)
205
+ );
128
206
 
129
207
  --color-navigation-top-icon: #1c1c1e;
130
208
  --color-navigation-icon: #505050;
@@ -157,6 +235,14 @@
157
235
  --border-code: var(--color-dark-20);
158
236
 
159
237
  --surface-inverted: rgba(29, 28, 34, 1);
238
+
239
+ /* Light, a darker step reads as a grey smudge and fades whatever sits on it,
240
+ and a white one is lost on a near-white page: white, then, with an edge
241
+ and the system's one soft shadow besides the toasts'. */
242
+ --surface-popover: var(--color-dark-8);
243
+ --border-popover: var(--color-dark-20);
244
+ --shadow-popover: 0 8px 24px rgba(28, 28, 30, 0.12), 0 1px 3px rgba(28, 28, 30, 0.08);
245
+ --divider-popover: var(--color-dark-20);
160
246
  --text-inverted: rgba(244, 244, 245, 1);
161
247
  }
162
248
  }
@@ -12,29 +12,36 @@
12
12
  * gets a sensible system face.
13
13
  */
14
14
 
15
- :root {
15
+ :root,
16
+ [data-radius],
17
+ [data-density],
18
+ [data-text-size],
19
+ [data-font] {
16
20
  /* === FAMILIES === */
17
- --font-family-display: 'Manrope', 'Segoe UI', system-ui, sans-serif;
18
- --font-family-body: 'Mulish', system-ui, -apple-system, 'Segoe UI', sans-serif;
21
+ --font-family-display: var(--font-display, 'Manrope', 'Segoe UI', system-ui, sans-serif);
22
+ --font-family-body: var(--font-body, 'Mulish', system-ui, -apple-system, 'Segoe UI', sans-serif);
19
23
  --font-family-code: 'Source Code Pro', ui-monospace, 'SFMono-Regular', 'Menlo', monospace;
20
24
 
21
25
  /* === TITLES (Manrope) === */
22
- --font-title-studio: 400 48px/58px var(--font-family-display);
23
- --font-title-h1: 600 36px/43px var(--font-family-display);
24
- --font-title-h4: 400 24px/29px var(--font-family-display);
25
- --font-title-h6: 600 18px var(--font-family-display);
26
+ --font-title-studio: 400 calc(48px * var(--text-scale, 1)) / calc(58px * var(--text-scale, 1))
27
+ var(--font-family-display);
28
+ --font-title-h1: 600 calc(36px * var(--text-scale, 1)) / calc(43px * var(--text-scale, 1))
29
+ var(--font-family-display);
30
+ --font-title-h4: 400 calc(24px * var(--text-scale, 1)) / calc(29px * var(--text-scale, 1))
31
+ var(--font-family-display);
32
+ --font-title-h6: 600 calc(18px * var(--text-scale, 1)) var(--font-family-display);
26
33
 
27
34
  /* Overline uses the body face despite living with the titles. */
28
- --font-title-overline: 600 10px var(--font-family-body);
35
+ --font-title-overline: 600 calc(10px * var(--text-scale, 1)) var(--font-family-body);
29
36
 
30
37
  /* === BODY & UI (Mulish) === */
31
- --font-normal-regular: 400 14px var(--font-family-body);
32
- --font-normal-medium: 500 14px var(--font-family-body);
33
- --font-normal-small: 400 12px var(--font-family-body);
34
- --font-input: 400 14px var(--font-family-body);
38
+ --font-normal-regular: 400 calc(14px * var(--text-scale, 1)) var(--font-family-body);
39
+ --font-normal-medium: 500 calc(14px * var(--text-scale, 1)) var(--font-family-body);
40
+ --font-normal-small: 400 calc(12px * var(--text-scale, 1)) var(--font-family-body);
41
+ --font-input: 400 calc(14px * var(--text-scale, 1)) var(--font-family-body);
35
42
 
36
43
  /* === CODE === */
37
- --font-code-regular: 400 14px var(--font-family-code);
44
+ --font-code-regular: 400 calc(14px * var(--text-scale, 1)) var(--font-family-code);
38
45
 
39
46
  /* === TRACKING === */
40
47
  --letter-spacing-overline: 2px;
@@ -91,8 +91,33 @@
91
91
  },
92
92
  { "name": "::part(input)", "description": "The native checkbox." },
93
93
  { "name": "::part(box)", "description": "The drawn box." },
94
- { "name": "::part(trigger)", "description": "The field." },
94
+ { "name": "::part(field)", "description": "The field." },
95
+ {
96
+ "name": "::part(segment)",
97
+ "description": "A day, month or year segment."
98
+ },
99
+ {
100
+ "name": "::part(trigger)",
101
+ "description": "The calendar button, with `calendar`."
102
+ },
103
+ {
104
+ "name": "::part(panel)",
105
+ "description": "The calendar popup, with `calendar`."
106
+ },
107
+ { "name": "::part(field)", "description": "The field." },
108
+ {
109
+ "name": "::part(input)",
110
+ "description": "The text the date is typed into."
111
+ },
112
+ {
113
+ "name": "::part(trigger)",
114
+ "description": "The button that opens the calendar."
115
+ },
95
116
  { "name": "::part(panel)", "description": "The calendar popup." },
117
+ {
118
+ "name": "::part(presets)",
119
+ "description": "The column of ready-made periods, with `range`."
120
+ },
96
121
  {
97
122
  "name": "::part(calendar)",
98
123
  "description": "The `<kt-calendar>` inside it."
@@ -111,6 +136,11 @@
111
136
  { "name": "::part(popup)", "description": "The option list." },
112
137
  { "name": "::part(option)", "description": "An option row." },
113
138
  { "name": "::part(label)", "description": "The `<label>`." },
139
+ { "name": "::part(control)", "description": "The field." },
140
+ { "name": "::part(chips)", "description": "The row of chips." },
141
+ { "name": "::part(input)", "description": "The native `<input>`." },
142
+ { "name": "::part(popup)", "description": "The option list." },
143
+ { "name": "::part(option)", "description": "An option row." },
114
144
  { "name": "::part(base)", "description": "The `role=\"radio\"` row." },
115
145
  { "name": "::part(circle)", "description": "The drawn circle." },
116
146
  {
@@ -126,6 +156,11 @@
126
156
  { "name": "::part(base)", "description": "The field container." },
127
157
  { "name": "::part(control)", "description": "The native `<textarea>`." },
128
158
  { "name": "::part(counter)", "description": "The character counter." },
159
+ { "name": "::part(field)", "description": "The field." },
160
+ {
161
+ "name": "::part(segment)",
162
+ "description": "An hour, minute, second or AM/PM segment."
163
+ },
129
164
  {
130
165
  "name": "::part(base)",
131
166
  "description": "The button carrying `role=\"switch\"`."
@@ -667,7 +667,7 @@
667
667
  },
668
668
  {
669
669
  "name": "kt-calendar",
670
- "description": "A month calendar to pick a day or a period from, shown in the page.\n\nThe same calendar `<kt-date-picker>` opens in its popup, for when the\ncalendar is the interface rather than a way to fill a field: a booking\npage, a dashboard's date filter, a planning view.\n\nThe header's month and year are buttons. The month opens a grid of the\ntwelve months, the year a grid of twelve years, so reaching a date years\naway takes three clicks rather than paging month by month.\n\nKeyboard, in the day grid (the WAI-ARIA date grid pattern): arrows by day\nand week, Home/End to the week's ends, Page Up/Down by month and with Shift\nby year, Enter to choose. In the month and year grids: arrows, Page Up/Down\nby year or by twelve years, Enter to choose, Escape back to the days.\n---\n\n\n### **Events:**\n - **kt-change** - A day, or a whole period, was chosen. `detail: { value }`.\n\n### **Methods:**\n - **focus(): _void_** - Focuses the grid's current cell — the chosen day, or today.\n\n### **CSS Parts:**\n - **base** - The calendar.\n- **day** - A day cell.",
670
+ "description": "A month calendar to pick a day or a period from, shown in the page.\n\nThe same calendar `<kt-date-picker>` opens in its popup, for when the\ncalendar is the interface rather than a way to fill a field: a booking\npage, a dashboard's date filter, a planning view.\n\nThe title — \"September 2026\" — opens one panel: a scrolling list of years\nbeside the twelve months of the one chosen. A year is a click or four typed\ndigits away, then its month a second click, whatever the distance.\n\nKeyboard, in the day grid (the WAI-ARIA date grid pattern): arrows by day\nand week, Home/End to the week's ends, Page Up/Down by month and with Shift\nby year, Enter to choose. In the year list: arrows, Page Up/Down by ten,\nHome/End, or type the year; Enter or Tab on to the months. In the months:\narrows, Enter to choose. Escape returns to the days.\n---\n\n\n### **Events:**\n - **kt-change** - A day, or a whole period, was chosen. `detail: { value }`.\n\n### **Methods:**\n - **focus(): _void_** - Focuses the grid's current cell — the chosen day, or today.\n\n### **CSS Parts:**\n - **base** - The calendar.\n- **day** - A day cell.",
671
671
  "attributes": [
672
672
  {
673
673
  "name": "value",
@@ -694,6 +694,11 @@
694
694
  "description": "BCP 47 language tag for names and the first day of the week. Empty: the\npage's `lang`, then the browser's language.",
695
695
  "values": []
696
696
  },
697
+ {
698
+ "name": "months",
699
+ "description": "How many months the day view shows side by side: 1, or 2 for a period.",
700
+ "values": [{ "name": "1" }, { "name": "2" }]
701
+ },
697
702
  {
698
703
  "name": "label",
699
704
  "description": "Accessible name of the calendar. Defaults to the strings registry.",
@@ -734,9 +739,21 @@
734
739
  ],
735
740
  "references": []
736
741
  },
742
+ {
743
+ "name": "kt-date-input",
744
+ "description": "A date typed into its parts: day, month and year, each its own segment.\n\nThe segments come in the order the reader's language writes a date —\n`25/09/2026` in London, `09/25/2026` in New York, `25.09.2026` in Berlin —\nand the focus moves on as each fills, so a date is eight keystrokes. The\narrows step a segment, a day never past its month's end. The value is ISO\n8601, `2026-09-25`, and `null` until the date is complete.\n\nWith `calendar`, a button at the end opens a `<kt-calendar>` to pick from.\n---\n\n\n### **Events:**\n - **kt-change** - The date became complete, changed, or stopped being one. `detail: { value }` — the ISO date or `null`.\n\n### **Methods:**\n \n\n### **CSS Parts:**\n - **field** - The field.\n- **segment** - A day, month or year segment.\n- **trigger** - The calendar button, with `calendar`.\n- **panel** - The calendar popup, with `calendar`.",
745
+ "attributes": [
746
+ {
747
+ "name": "calendar",
748
+ "description": "Adds a button that opens a calendar to pick the date from.",
749
+ "values": []
750
+ }
751
+ ],
752
+ "references": []
753
+ },
737
754
  {
738
755
  "name": "kt-date-picker",
739
- "description": "A date field with a calendar, for one day or a period.\n\nThe value is ISO 8601 text, the format a server and a `<input type=\"date\">`\nalready speak: `2026-09-25`, or `2026-09-01/2026-09-25` for a period. What\nthe field shows is the same date formatted for the reader's language, and\nthe calendar starts its weeks on the day their region does.\n\nThe popup is a `<kt-calendar>`, with its keyboard model and its month and\nyear views: the WAI-ARIA date picker dialog pattern, where Escape closes the\ndialog and hands focus back to the field, and tabbing out closes it too.\n---\n\n\n### **Events:**\n - **kt-change** - A date or a whole period was chosen, or the value cleared. `detail: { value }` — the ISO date or interval, or `null`.\n\n### **Methods:**\n - **formDisabledCallback(disabled: _boolean_): _void_** - Called by the platform when the control's disabled state changes — its\nown `disabled`, or an ancestor `<fieldset disabled>` it cannot see.\n\n### **CSS Parts:**\n - **trigger** - The field.\n- **panel** - The calendar popup.\n- **calendar** - The `<kt-calendar>` inside it.",
756
+ "description": "A date field with a calendar, for one day or a period.\n\nThe value is ISO 8601 text, the format a server and a `<input type=\"date\">`\nalready speak: `2026-09-25`, or `2026-09-01/2026-09-25` for a period. What\nthe field shows is the same date formatted for the reader's language, and\nthe calendar starts its weeks on the day their region does.\n\nThe field takes a date typed the way the reader writes it — `25/09/2026` in\nLondon, `9/25/2026` in New York, `25 sept.` in Paris, ISO anywhere — on Enter\nor when it is left. What does not read as a date is flagged, and the value\nit had is kept.\n\nThe popup is a `<kt-calendar>`, with its keyboard model and its month and\nyear views: the WAI-ARIA date picker dialog pattern, where Escape closes the\ndialog and hands focus back to the field, and tabbing out closes it too.\n---\n\n\n### **Events:**\n - **kt-change** - A date or a whole period was chosen, or the value cleared. `detail: { value }` — the ISO date or interval, or `null`.\n\n### **Methods:**\n - **formDisabledCallback(disabled: _boolean_): _void_** - Called by the platform when the control's disabled state changes — its\nown `disabled`, or an ancestor `<fieldset disabled>` it cannot see.\n\n### **CSS Parts:**\n - **field** - The field.\n- **input** - The text the date is typed into.\n- **trigger** - The button that opens the calendar.\n- **panel** - The calendar popup.\n- **presets** - The column of ready-made periods, with `range`.\n- **calendar** - The `<kt-calendar>` inside it.",
740
757
  "attributes": [
741
758
  {
742
759
  "name": "value",
@@ -940,6 +957,32 @@
940
957
  ],
941
958
  "references": []
942
959
  },
960
+ {
961
+ "name": "kt-multi-select",
962
+ "description": "Several choices from a list: type to narrow it, pick as many as you need.\n\nEach choice shows in the field as a removable chip. The field keeps to one\nline — the chips that do not fit collapse into a \"+3\" — so it sits in a row\nof filters without changing its height; the open list shows everything,\nchosen or not.\n---\n\n\n### **Events:**\n - **kt-change** - The choice changed. `detail: { value, options }`.\n- **kt-filter** - The query changed. `detail: { query }`.\n\n### **Methods:**\n - **formDisabledCallback(disabled: _boolean_): _void_** - Called by the platform when the control's disabled state changes — its\nown `disabled`, or an ancestor `<fieldset disabled>` it cannot see.\n- **formStateRestoreCallback(state: _string | FormData | null_): _void_** - Called by the platform when the browser restores a session.\n\n### **CSS Parts:**\n - **control** - The field.\n- **chips** - The row of chips.\n- **input** - The native `<input>`.\n- **popup** - The option list.\n- **option** - An option row.",
963
+ "attributes": [
964
+ { "name": "placeholder", "values": [] },
965
+ { "name": "name", "values": [] },
966
+ { "name": "disabled", "values": [] },
967
+ {
968
+ "name": "required",
969
+ "description": "At least one value must be chosen.",
970
+ "values": []
971
+ },
972
+ { "name": "error", "values": [] },
973
+ {
974
+ "name": "label",
975
+ "description": "Accessible name, when no `<kt-label-input>` wraps the field.",
976
+ "values": []
977
+ },
978
+ {
979
+ "name": "empty-text",
980
+ "description": "Shown in the list when no option matches.",
981
+ "values": []
982
+ }
983
+ ],
984
+ "references": []
985
+ },
943
986
  {
944
987
  "name": "kt-radio",
945
988
  "description": "One option of a `<kt-radio-group>`.\n\nIt draws itself and carries `role=\"radio\"`; the group owns the selection,\nthe tab stop and the keyboard. A `<kt-radio>` outside a group does nothing\nuseful.\n---\n\n\n### **Slots:**\n - _default_ - The label.\n\n### **CSS Parts:**\n - **base** - The `role=\"radio\"` row.\n- **circle** - The drawn circle.",
@@ -1060,6 +1103,28 @@
1060
1103
  ],
1061
1104
  "references": []
1062
1105
  },
1106
+ {
1107
+ "name": "kt-time-input",
1108
+ "description": "A time of day typed into its parts: hours, minutes and, if asked, seconds.\n\nThe clock is the reader's — `14:30` in London, `2:30 PM` in New York — or\nthe one `hour-cycle` names. Whatever the clock shows, the value is the\n24-hour time HTML uses, `14:30` or `14:30:00`, and `null` until complete.\nThe arrows step a segment, the minutes by `step`.\n---\n\n\n### **Events:**\n - **kt-change** - The time became complete, changed, or stopped being one. `detail: { value }` — `HH:MM`, `HH:MM:SS` or `null`.\n\n### **Methods:**\n \n\n### **CSS Parts:**\n - **field** - The field.\n- **segment** - An hour, minute, second or AM/PM segment.",
1109
+ "attributes": [
1110
+ {
1111
+ "name": "seconds",
1112
+ "description": "Shows a seconds segment, and puts seconds in the value.",
1113
+ "values": []
1114
+ },
1115
+ {
1116
+ "name": "hour-cycle",
1117
+ "description": "The clock to show: `h12` with AM/PM, `h23` without. Empty: the language's.",
1118
+ "values": [{ "name": "KtHourCycle" }, { "name": "''" }]
1119
+ },
1120
+ {
1121
+ "name": "step",
1122
+ "description": "How many minutes the arrows step by.",
1123
+ "values": []
1124
+ }
1125
+ ],
1126
+ "references": []
1127
+ },
1063
1128
  {
1064
1129
  "name": "kt-toggle",
1065
1130
  "description": "An on/off switch.\n\nSized off the button heights so a toggle lines up with the controls beside\nit: the track is 1.8× the field height, the thumb is inset by 12% of it.\nChange `--button-height` and the switch follows.\n---\n\n\n### **Events:**\n - **kt-change** - The state changed. `detail: { checked }`.\n\n### **Methods:**\n - **formDisabledCallback(disabled: _boolean_): _void_** - Called by the platform when the control's disabled state changes — its\nown `disabled`, or an ancestor `<fieldset disabled>` it cannot see.\n\n### **Slots:**\n - _default_ - Optional label, rendered beside the switch and clickable.\n\n### **CSS Parts:**\n - **base** - The button carrying `role=\"switch\"`.\n- **track** - The track.\n- **thumb** - The sliding thumb.",
@@ -42,11 +42,14 @@ import type { KtDragDrop } from 'kanto-ds';
42
42
  import type { KtForm } from 'kanto-ds';
43
43
  import type { KtInput } from 'kanto-ds';
44
44
  import type { KtInputMenu } from 'kanto-ds';
45
+ import type { KtMultiSelect } from 'kanto-ds';
45
46
  import type { KtLabelInput } from 'kanto-ds';
46
47
  import type { KtSelect } from 'kanto-ds';
47
48
  import type { KtCheckbox } from 'kanto-ds';
48
49
  import type { KtCalendar } from 'kanto-ds';
50
+ import type { KtDateInput } from 'kanto-ds';
49
51
  import type { KtDatePicker } from 'kanto-ds';
52
+ import type { KtTimeInput } from 'kanto-ds';
50
53
  import type { KtRadioGroup } from 'kanto-ds';
51
54
  import type { KtRadio } from 'kanto-ds';
52
55
  import type { KtTextarea } from 'kanto-ds';
@@ -108,11 +111,14 @@ declare module 'vue' {
108
111
  'kt-form': KtProps<KtForm>;
109
112
  'kt-input': KtProps<KtInput>;
110
113
  'kt-input-menu': KtProps<KtInputMenu>;
114
+ 'kt-multi-select': KtProps<KtMultiSelect>;
111
115
  'kt-label-input': KtProps<KtLabelInput>;
112
116
  'kt-select': KtProps<KtSelect>;
113
117
  'kt-checkbox': KtProps<KtCheckbox>;
114
118
  'kt-calendar': KtProps<KtCalendar>;
119
+ 'kt-date-input': KtProps<KtDateInput>;
115
120
  'kt-date-picker': KtProps<KtDatePicker>;
121
+ 'kt-time-input': KtProps<KtTimeInput>;
116
122
  'kt-radio-group': KtProps<KtRadioGroup>;
117
123
  'kt-radio': KtProps<KtRadio>;
118
124
  'kt-textarea': KtProps<KtTextarea>;
package/dist/vue/index.js CHANGED
@@ -7,16 +7,19 @@ import "../components/core/kt-code/kt-code.js";
7
7
  import "../components/core/kt-icon/kt-icon.js";
8
8
  import "../components/core/kt-kbd/kt-kbd.js";
9
9
  import "../components/forms/kt-checkbox/kt-checkbox.js";
10
- import "../chunks/kt-calendar-B_hFdD9V.js";
10
+ import "../chunks/kt-calendar-CtwOby1R.js";
11
+ import "../components/forms/kt-date-input/kt-date-input.js";
11
12
  import "../components/forms/kt-date-picker/kt-date-picker.js";
12
13
  import "../components/forms/kt-drag-drop/kt-drag-drop.js";
13
14
  import "../components/forms/kt-form/kt-form.js";
14
15
  import "../components/forms/kt-input/kt-input.js";
15
16
  import "../components/forms/kt-input-menu/kt-input-menu.js";
17
+ import "../components/forms/kt-multi-select/kt-multi-select.js";
16
18
  import "../components/forms/kt-label-input/kt-label-input.js";
17
19
  import "../components/forms/kt-radio-group/kt-radio-group.js";
18
20
  import "../components/forms/kt-select/kt-select.js";
19
21
  import "../components/forms/kt-textarea/kt-textarea.js";
22
+ import "../components/forms/kt-time-input/kt-time-input.js";
20
23
  import "../components/forms/kt-toggle/kt-toggle.js";
21
24
  import "../components/navigation/kt-breadcrumb/kt-breadcrumb.js";
22
25
  import "../components/navigation/kt-page-header/kt-page-header.js";
@@ -32,7 +35,7 @@ import "../components/feedback/kt-progress-bar/kt-progress-bar.js";
32
35
  import "../components/feedback/kt-skeleton/kt-skeleton.js";
33
36
  import "../components/feedback/kt-toast/kt-toast.js";
34
37
  import "../components/feedback/kt-toast-container/kt-toast-container.js";
35
- import { t as Z } from "../chunks/toaster-PmdKSV5x.js";
38
+ import { t as ot } from "../chunks/toaster-PmdKSV5x.js";
36
39
  import "../components/feedback/kt-tooltip/kt-tooltip.js";
37
40
  import "../components/overlays/kt-collapsible/kt-collapsible.js";
38
41
  import "../components/overlays/kt-confirm-dialog/kt-confirm-dialog.js";
@@ -45,17 +48,17 @@ import "../components/data/kt-pagination/kt-pagination.js";
45
48
  import "../components/data/kt-stat/kt-stat.js";
46
49
  import "../components/data/kt-table/kt-table.js";
47
50
  import "../components/data/kt-timeline/kt-timeline.js";
48
- function Q(t) {
51
+ function V(t) {
49
52
  return t.startsWith("kt-");
50
53
  }
51
- const S = "kt-", U = {
54
+ const Y = "kt-", Z = {
52
55
  install() {
53
56
  }
54
57
  };
55
58
  export {
56
- S as KANTO_TAG_PREFIX,
57
- Q as isKantoElement,
58
- U as kanto,
59
- Z as toaster
59
+ Y as KANTO_TAG_PREFIX,
60
+ V as isKantoElement,
61
+ Z as kanto,
62
+ ot as toaster
60
63
  };
61
64
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/vue/index.ts"],"sourcesContent":["/**\n * Vue integration for the Kanto elements.\n *\n * There are no per-component wrappers here, and that is the point. Vue 3\n * renders custom elements natively and sets non-primitive bindings as DOM\n * properties, so `<kt-select :options=\"regions\">` already works. A wrapper\n * layer would only be one more thing to keep in sync.\n *\n * What Vue cannot infer on its own is which tags are custom elements, and what\n * they accept. That is what this module supplies.\n *\n * ```ts\n * // vite.config.ts\n * import vue from '@vitejs/plugin-vue';\n * import { isKantoElement } from 'kanto-ds/vue';\n *\n * export default defineConfig({\n * plugins: [vue({ template: { compilerOptions: { isCustomElement: isKantoElement } } })],\n * });\n * ```\n *\n * ```ts\n * // main.ts\n * import 'kanto-ds/vue'; // registers every element\n * import 'kanto-ds/styles.css';\n * ```\n *\n * Vue is a peer dependency: importing this module in a project without Vue\n * still works, since nothing here is imported from `vue` at runtime.\n */\n// Type-only, so nothing from Vue is pulled in at runtime — but the import is\n// what lets TypeScript resolve the module we augment below.\nimport type { Plugin } from 'vue';\n\nimport '../index.js';\n\nimport type { KtAvatar } from 'kanto-ds';\nimport type { KtBadge } from 'kanto-ds';\nimport type { KtButton } from 'kanto-ds';\nimport type { KtSplitButton } from 'kanto-ds';\nimport type { KtCard } from 'kanto-ds';\nimport type { KtCode } from 'kanto-ds';\nimport type { KtIcon } from 'kanto-ds';\nimport type { KtKbd } from 'kanto-ds';\nimport type { KtDragDrop } from 'kanto-ds';\nimport type { KtForm } from 'kanto-ds';\nimport type { KtInput } from 'kanto-ds';\nimport type { KtInputMenu } from 'kanto-ds';\nimport type { KtLabelInput } from 'kanto-ds';\nimport type { KtSelect } from 'kanto-ds';\nimport type { KtCheckbox } from 'kanto-ds';\nimport type { KtCalendar } from 'kanto-ds';\nimport type { KtDatePicker } from 'kanto-ds';\nimport type { KtRadioGroup } from 'kanto-ds';\nimport type { KtRadio } from 'kanto-ds';\nimport type { KtTextarea } from 'kanto-ds';\nimport type { KtToggle } from 'kanto-ds';\nimport type { KtBreadcrumb } from 'kanto-ds';\nimport type { KtPageHeader } from 'kanto-ds';\nimport type { KtSegmentedControl } from 'kanto-ds';\nimport type { KtSubMenuNavigation } from 'kanto-ds';\nimport type { KtTabs } from 'kanto-ds';\nimport type { KtHeader } from 'kanto-ds';\nimport type { KtToggleButton } from 'kanto-ds';\nimport type { KtToggleButtonGroup } from 'kanto-ds';\nimport type { KtAlert } from 'kanto-ds';\nimport type { KtEmptyState } from 'kanto-ds';\nimport type { KtProgressBar } from 'kanto-ds';\nimport type { KtSkeleton } from 'kanto-ds';\nimport type { KtToast } from 'kanto-ds';\nimport type { KtToastContainer } from 'kanto-ds';\nimport type { KtTooltip } from 'kanto-ds';\nimport type { KtCollapsible } from 'kanto-ds';\nimport type { KtConfirmDialog } from 'kanto-ds';\nimport type { KtDropdown } from 'kanto-ds';\nimport type { KtModal } from 'kanto-ds';\nimport type { KtSidePanel } from 'kanto-ds';\nimport type { KtChart } from 'kanto-ds';\nimport type { KtMeter } from 'kanto-ds';\nimport type { KtPagination } from 'kanto-ds';\nimport type { KtStat } from 'kanto-ds';\nimport type { KtTable } from 'kanto-ds';\nimport type { KtTimeline, KtTimelineItem } from 'kanto-ds';\n\n/**\n * True for any Kanto custom element.\n *\n * Pass it as `compilerOptions.isCustomElement` so the Vue compiler stops\n * trying to resolve `kt-*` tags as components.\n */\nexport function isKantoElement(tag: string): boolean {\n return tag.startsWith('kt-');\n}\n\n/** Every element's tag name, for anyone building their own predicate. */\nexport const KANTO_TAG_PREFIX = 'kt-';\n\n/**\n * What a Kanto element accepts in a template: its own properties, plus the\n * attributes and listeners any element takes.\n */\ntype KtProps<T> = Partial<T> &\n Record<`on${string}`, unknown> & { class?: unknown; style?: unknown };\n\ndeclare module 'vue' {\n interface GlobalComponents {\n 'kt-avatar': KtProps<KtAvatar>;\n 'kt-badge': KtProps<KtBadge>;\n 'kt-button': KtProps<KtButton>;\n 'kt-split-button': KtProps<KtSplitButton>;\n 'kt-card': KtProps<KtCard>;\n 'kt-code': KtProps<KtCode>;\n 'kt-icon': KtProps<KtIcon>;\n 'kt-kbd': KtProps<KtKbd>;\n 'kt-drag-drop': KtProps<KtDragDrop>;\n 'kt-form': KtProps<KtForm>;\n 'kt-input': KtProps<KtInput>;\n 'kt-input-menu': KtProps<KtInputMenu>;\n 'kt-label-input': KtProps<KtLabelInput>;\n 'kt-select': KtProps<KtSelect>;\n 'kt-checkbox': KtProps<KtCheckbox>;\n 'kt-calendar': KtProps<KtCalendar>;\n 'kt-date-picker': KtProps<KtDatePicker>;\n 'kt-radio-group': KtProps<KtRadioGroup>;\n 'kt-radio': KtProps<KtRadio>;\n 'kt-textarea': KtProps<KtTextarea>;\n 'kt-toggle': KtProps<KtToggle>;\n 'kt-breadcrumb': KtProps<KtBreadcrumb>;\n 'kt-page-header': KtProps<KtPageHeader>;\n 'kt-segmented-control': KtProps<KtSegmentedControl>;\n 'kt-sub-menu-navigation': KtProps<KtSubMenuNavigation>;\n 'kt-tabs': KtProps<KtTabs>;\n 'kt-header': KtProps<KtHeader>;\n 'kt-toggle-button': KtProps<KtToggleButton>;\n 'kt-toggle-button-group': KtProps<KtToggleButtonGroup>;\n 'kt-alert': KtProps<KtAlert>;\n 'kt-empty-state': KtProps<KtEmptyState>;\n 'kt-progress-bar': KtProps<KtProgressBar>;\n 'kt-skeleton': KtProps<KtSkeleton>;\n 'kt-toast': KtProps<KtToast>;\n 'kt-toast-container': KtProps<KtToastContainer>;\n 'kt-tooltip': KtProps<KtTooltip>;\n 'kt-collapsible': KtProps<KtCollapsible>;\n 'kt-confirm-dialog': KtProps<KtConfirmDialog>;\n 'kt-dropdown': KtProps<KtDropdown>;\n 'kt-modal': KtProps<KtModal>;\n 'kt-side-panel': KtProps<KtSidePanel>;\n 'kt-chart': KtProps<KtChart>;\n 'kt-meter': KtProps<KtMeter>;\n 'kt-pagination': KtProps<KtPagination>;\n 'kt-stat': KtProps<KtStat>;\n 'kt-table': KtProps<KtTable>;\n 'kt-timeline': KtProps<KtTimeline>;\n 'kt-timeline-item': KtProps<KtTimelineItem>;\n }\n}\n\n/**\n * A no-op plugin, for apps that would rather write `app.use(kanto)` than a\n * bare side-effect import. Importing this module already registers every\n * element; this only makes that visible in `main.ts`.\n */\nexport const kanto: Plugin = {\n install() {\n /* the elements register themselves on import */\n },\n};\n\nexport { toaster } from '../components/feedback/kt-toast-container/toaster.js';\n"],"names":["isKantoElement","tag","KANTO_TAG_PREFIX","kanto"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FO,SAASA,EAAeC,GAAsB;AACnD,SAAOA,EAAI,WAAW,KAAK;AAC7B;AAGO,MAAMC,IAAmB,OAmEnBC,IAAgB;AAAA,EAC3B,UAAU;AAAA,EAEV;AACF;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/vue/index.ts"],"sourcesContent":["/**\n * Vue integration for the Kanto elements.\n *\n * There are no per-component wrappers here, and that is the point. Vue 3\n * renders custom elements natively and sets non-primitive bindings as DOM\n * properties, so `<kt-select :options=\"regions\">` already works. A wrapper\n * layer would only be one more thing to keep in sync.\n *\n * What Vue cannot infer on its own is which tags are custom elements, and what\n * they accept. That is what this module supplies.\n *\n * ```ts\n * // vite.config.ts\n * import vue from '@vitejs/plugin-vue';\n * import { isKantoElement } from 'kanto-ds/vue';\n *\n * export default defineConfig({\n * plugins: [vue({ template: { compilerOptions: { isCustomElement: isKantoElement } } })],\n * });\n * ```\n *\n * ```ts\n * // main.ts\n * import 'kanto-ds/vue'; // registers every element\n * import 'kanto-ds/styles.css';\n * ```\n *\n * Vue is a peer dependency: importing this module in a project without Vue\n * still works, since nothing here is imported from `vue` at runtime.\n */\n// Type-only, so nothing from Vue is pulled in at runtime — but the import is\n// what lets TypeScript resolve the module we augment below.\nimport type { Plugin } from 'vue';\n\nimport '../index.js';\n\nimport type { KtAvatar } from 'kanto-ds';\nimport type { KtBadge } from 'kanto-ds';\nimport type { KtButton } from 'kanto-ds';\nimport type { KtSplitButton } from 'kanto-ds';\nimport type { KtCard } from 'kanto-ds';\nimport type { KtCode } from 'kanto-ds';\nimport type { KtIcon } from 'kanto-ds';\nimport type { KtKbd } from 'kanto-ds';\nimport type { KtDragDrop } from 'kanto-ds';\nimport type { KtForm } from 'kanto-ds';\nimport type { KtInput } from 'kanto-ds';\nimport type { KtInputMenu } from 'kanto-ds';\nimport type { KtMultiSelect } from 'kanto-ds';\nimport type { KtLabelInput } from 'kanto-ds';\nimport type { KtSelect } from 'kanto-ds';\nimport type { KtCheckbox } from 'kanto-ds';\nimport type { KtCalendar } from 'kanto-ds';\nimport type { KtDateInput } from 'kanto-ds';\nimport type { KtDatePicker } from 'kanto-ds';\nimport type { KtTimeInput } from 'kanto-ds';\nimport type { KtRadioGroup } from 'kanto-ds';\nimport type { KtRadio } from 'kanto-ds';\nimport type { KtTextarea } from 'kanto-ds';\nimport type { KtToggle } from 'kanto-ds';\nimport type { KtBreadcrumb } from 'kanto-ds';\nimport type { KtPageHeader } from 'kanto-ds';\nimport type { KtSegmentedControl } from 'kanto-ds';\nimport type { KtSubMenuNavigation } from 'kanto-ds';\nimport type { KtTabs } from 'kanto-ds';\nimport type { KtHeader } from 'kanto-ds';\nimport type { KtToggleButton } from 'kanto-ds';\nimport type { KtToggleButtonGroup } from 'kanto-ds';\nimport type { KtAlert } from 'kanto-ds';\nimport type { KtEmptyState } from 'kanto-ds';\nimport type { KtProgressBar } from 'kanto-ds';\nimport type { KtSkeleton } from 'kanto-ds';\nimport type { KtToast } from 'kanto-ds';\nimport type { KtToastContainer } from 'kanto-ds';\nimport type { KtTooltip } from 'kanto-ds';\nimport type { KtCollapsible } from 'kanto-ds';\nimport type { KtConfirmDialog } from 'kanto-ds';\nimport type { KtDropdown } from 'kanto-ds';\nimport type { KtModal } from 'kanto-ds';\nimport type { KtSidePanel } from 'kanto-ds';\nimport type { KtChart } from 'kanto-ds';\nimport type { KtMeter } from 'kanto-ds';\nimport type { KtPagination } from 'kanto-ds';\nimport type { KtStat } from 'kanto-ds';\nimport type { KtTable } from 'kanto-ds';\nimport type { KtTimeline, KtTimelineItem } from 'kanto-ds';\n\n/**\n * True for any Kanto custom element.\n *\n * Pass it as `compilerOptions.isCustomElement` so the Vue compiler stops\n * trying to resolve `kt-*` tags as components.\n */\nexport function isKantoElement(tag: string): boolean {\n return tag.startsWith('kt-');\n}\n\n/** Every element's tag name, for anyone building their own predicate. */\nexport const KANTO_TAG_PREFIX = 'kt-';\n\n/**\n * What a Kanto element accepts in a template: its own properties, plus the\n * attributes and listeners any element takes.\n */\ntype KtProps<T> = Partial<T> &\n Record<`on${string}`, unknown> & { class?: unknown; style?: unknown };\n\ndeclare module 'vue' {\n interface GlobalComponents {\n 'kt-avatar': KtProps<KtAvatar>;\n 'kt-badge': KtProps<KtBadge>;\n 'kt-button': KtProps<KtButton>;\n 'kt-split-button': KtProps<KtSplitButton>;\n 'kt-card': KtProps<KtCard>;\n 'kt-code': KtProps<KtCode>;\n 'kt-icon': KtProps<KtIcon>;\n 'kt-kbd': KtProps<KtKbd>;\n 'kt-drag-drop': KtProps<KtDragDrop>;\n 'kt-form': KtProps<KtForm>;\n 'kt-input': KtProps<KtInput>;\n 'kt-input-menu': KtProps<KtInputMenu>;\n 'kt-multi-select': KtProps<KtMultiSelect>;\n 'kt-label-input': KtProps<KtLabelInput>;\n 'kt-select': KtProps<KtSelect>;\n 'kt-checkbox': KtProps<KtCheckbox>;\n 'kt-calendar': KtProps<KtCalendar>;\n 'kt-date-input': KtProps<KtDateInput>;\n 'kt-date-picker': KtProps<KtDatePicker>;\n 'kt-time-input': KtProps<KtTimeInput>;\n 'kt-radio-group': KtProps<KtRadioGroup>;\n 'kt-radio': KtProps<KtRadio>;\n 'kt-textarea': KtProps<KtTextarea>;\n 'kt-toggle': KtProps<KtToggle>;\n 'kt-breadcrumb': KtProps<KtBreadcrumb>;\n 'kt-page-header': KtProps<KtPageHeader>;\n 'kt-segmented-control': KtProps<KtSegmentedControl>;\n 'kt-sub-menu-navigation': KtProps<KtSubMenuNavigation>;\n 'kt-tabs': KtProps<KtTabs>;\n 'kt-header': KtProps<KtHeader>;\n 'kt-toggle-button': KtProps<KtToggleButton>;\n 'kt-toggle-button-group': KtProps<KtToggleButtonGroup>;\n 'kt-alert': KtProps<KtAlert>;\n 'kt-empty-state': KtProps<KtEmptyState>;\n 'kt-progress-bar': KtProps<KtProgressBar>;\n 'kt-skeleton': KtProps<KtSkeleton>;\n 'kt-toast': KtProps<KtToast>;\n 'kt-toast-container': KtProps<KtToastContainer>;\n 'kt-tooltip': KtProps<KtTooltip>;\n 'kt-collapsible': KtProps<KtCollapsible>;\n 'kt-confirm-dialog': KtProps<KtConfirmDialog>;\n 'kt-dropdown': KtProps<KtDropdown>;\n 'kt-modal': KtProps<KtModal>;\n 'kt-side-panel': KtProps<KtSidePanel>;\n 'kt-chart': KtProps<KtChart>;\n 'kt-meter': KtProps<KtMeter>;\n 'kt-pagination': KtProps<KtPagination>;\n 'kt-stat': KtProps<KtStat>;\n 'kt-table': KtProps<KtTable>;\n 'kt-timeline': KtProps<KtTimeline>;\n 'kt-timeline-item': KtProps<KtTimelineItem>;\n }\n}\n\n/**\n * A no-op plugin, for apps that would rather write `app.use(kanto)` than a\n * bare side-effect import. Importing this module already registers every\n * element; this only makes that visible in `main.ts`.\n */\nexport const kanto: Plugin = {\n install() {\n /* the elements register themselves on import */\n },\n};\n\nexport { toaster } from '../components/feedback/kt-toast-container/toaster.js';\n"],"names":["isKantoElement","tag","KANTO_TAG_PREFIX","kanto"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FO,SAASA,EAAeC,GAAsB;AACnD,SAAOA,EAAI,WAAW,KAAK;AAC7B;AAGO,MAAMC,IAAmB,OAsEnBC,IAAgB;AAAA,EAC3B,UAAU;AAAA,EAEV;AACF;"}