kanto-ds 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +20 -2
  2. package/dist/chunks/form-control-CxjBTt1c.js.map +1 -1
  3. package/dist/chunks/kt-element-B_jjQDhg.js +38 -0
  4. package/dist/chunks/kt-element-B_jjQDhg.js.map +1 -0
  5. package/dist/components/core/kt-avatar/kt-avatar.js +9 -6
  6. package/dist/components/core/kt-avatar/kt-avatar.js.map +1 -1
  7. package/dist/components/core/kt-badge/kt-badge.js +17 -17
  8. package/dist/components/core/kt-badge/kt-badge.js.map +1 -1
  9. package/dist/components/core/kt-button/kt-button.d.ts +7 -0
  10. package/dist/components/core/kt-button/kt-button.js +68 -60
  11. package/dist/components/core/kt-button/kt-button.js.map +1 -1
  12. package/dist/components/core/kt-card/kt-card.js +1 -1
  13. package/dist/components/core/kt-code/kt-code.js +12 -12
  14. package/dist/components/core/kt-code/kt-code.js.map +1 -1
  15. package/dist/components/core/kt-icon/kt-icon.js +1 -1
  16. package/dist/components/core/kt-kbd/kt-kbd.js +14 -14
  17. package/dist/components/core/kt-kbd/kt-kbd.js.map +1 -1
  18. package/dist/components/core/kt-split-button/kt-split-button.js +3 -3
  19. package/dist/components/core/kt-split-button/kt-split-button.js.map +1 -1
  20. package/dist/components/data/kt-chart/kt-chart.js +1 -1
  21. package/dist/components/data/kt-meter/kt-meter.js +1 -1
  22. package/dist/components/data/kt-pagination/kt-pagination.js +1 -1
  23. package/dist/components/data/kt-stat/kt-stat.js +5 -5
  24. package/dist/components/data/kt-stat/kt-stat.js.map +1 -1
  25. package/dist/components/data/kt-table/kt-table.js +2 -2
  26. package/dist/components/data/kt-table/kt-table.js.map +1 -1
  27. package/dist/components/data/kt-timeline/kt-timeline.js +1 -1
  28. package/dist/components/feedback/kt-alert/kt-alert.js +26 -26
  29. package/dist/components/feedback/kt-alert/kt-alert.js.map +1 -1
  30. package/dist/components/feedback/kt-empty-state/kt-empty-state.js +1 -1
  31. package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js +2 -2
  32. package/dist/components/feedback/kt-progress-bar/kt-progress-bar.js.map +1 -1
  33. package/dist/components/feedback/kt-skeleton/kt-skeleton.js +1 -1
  34. package/dist/components/feedback/kt-toast/kt-toast.js +22 -22
  35. package/dist/components/feedback/kt-toast/kt-toast.js.map +1 -1
  36. package/dist/components/feedback/kt-toast-container/kt-toast-container.js +1 -1
  37. package/dist/components/feedback/kt-tooltip/kt-tooltip.js +1 -1
  38. package/dist/components/forms/kt-drag-drop/kt-drag-drop.d.ts +11 -1
  39. package/dist/components/forms/kt-drag-drop/kt-drag-drop.js +69 -36
  40. package/dist/components/forms/kt-drag-drop/kt-drag-drop.js.map +1 -1
  41. package/dist/components/forms/kt-form/kt-form.js +1 -1
  42. package/dist/components/forms/kt-input/kt-input.js +95 -91
  43. package/dist/components/forms/kt-input/kt-input.js.map +1 -1
  44. package/dist/components/forms/kt-input-menu/kt-input-menu.d.ts +10 -1
  45. package/dist/components/forms/kt-input-menu/kt-input-menu.js +83 -53
  46. package/dist/components/forms/kt-input-menu/kt-input-menu.js.map +1 -1
  47. package/dist/components/forms/kt-label-input/kt-label-input.js +2 -2
  48. package/dist/components/forms/kt-label-input/kt-label-input.js.map +1 -1
  49. package/dist/components/forms/kt-select/kt-select.js +2 -2
  50. package/dist/components/forms/kt-select/kt-select.js.map +1 -1
  51. package/dist/components/forms/kt-textarea/kt-textarea.js +15 -13
  52. package/dist/components/forms/kt-textarea/kt-textarea.js.map +1 -1
  53. package/dist/components/forms/kt-toggle/kt-toggle.js +8 -7
  54. package/dist/components/forms/kt-toggle/kt-toggle.js.map +1 -1
  55. package/dist/components/navigation/kt-breadcrumb/kt-breadcrumb.js +1 -1
  56. package/dist/components/navigation/kt-header/kt-header.js +1 -1
  57. package/dist/components/navigation/kt-page-header/kt-page-header.js +18 -18
  58. package/dist/components/navigation/kt-page-header/kt-page-header.js.map +1 -1
  59. package/dist/components/navigation/kt-segmented-control/kt-segmented-control.d.ts +10 -1
  60. package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js +88 -62
  61. package/dist/components/navigation/kt-segmented-control/kt-segmented-control.js.map +1 -1
  62. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js +5 -5
  63. package/dist/components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js.map +1 -1
  64. package/dist/components/navigation/kt-tabs/kt-tabs.js +1 -1
  65. package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js +3 -3
  66. package/dist/components/navigation/kt-toggle-button/kt-toggle-button.js.map +1 -1
  67. package/dist/components/navigation/kt-toggle-button-group/kt-toggle-button-group.js +1 -1
  68. package/dist/components/overlays/kt-collapsible/kt-collapsible.js +1 -1
  69. package/dist/components/overlays/kt-confirm-dialog/kt-confirm-dialog.js +1 -1
  70. package/dist/components/overlays/kt-dropdown/kt-dropdown.d.ts +13 -0
  71. package/dist/components/overlays/kt-dropdown/kt-dropdown.js +74 -59
  72. package/dist/components/overlays/kt-dropdown/kt-dropdown.js.map +1 -1
  73. package/dist/components/overlays/kt-modal/kt-modal.js +1 -1
  74. package/dist/components/overlays/kt-side-panel/kt-side-panel.js +1 -1
  75. package/dist/custom-elements.json +11791 -0
  76. package/dist/index.js +1 -1
  77. package/dist/internal/form-control.d.ts +7 -2
  78. package/dist/react/index.js.map +1 -1
  79. package/dist/react/jsx.d.ts +213 -0
  80. package/dist/react/jsx.js +2 -0
  81. package/dist/react/jsx.js.map +1 -0
  82. package/dist/tokens/README.md +7 -3
  83. package/dist/tokens/colors.css +24 -5
  84. package/dist/tokens/theme-light.css +18 -0
  85. package/dist/vscode.css-custom-data.json +154 -0
  86. package/dist/vscode.html-custom-data.json +1136 -0
  87. package/dist/web-types.json +3186 -0
  88. package/package.json +28 -9
  89. package/dist/chunks/kt-element-CcMLO5e8.js +0 -28
  90. package/dist/chunks/kt-element-CcMLO5e8.js.map +0 -1
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import { KtStat as vt } from "./components/data/kt-stat/kt-stat.js";
42
42
  import { KtTable as Ht } from "./components/data/kt-table/kt-table.js";
43
43
  import { KtTimeline as kt, KtTimelineItem as wt } from "./components/data/kt-timeline/kt-timeline.js";
44
44
  import { g as Ft, r as Gt, a as Lt, b as Nt } from "./chunks/defaults-DKzFsNbv.js";
45
- import { K as qt, d as zt } from "./chunks/kt-element-CcMLO5e8.js";
45
+ import { K as qt, d as zt } from "./chunks/kt-element-B_jjQDhg.js";
46
46
  export {
47
47
  Y as KtAlert,
48
48
  r as KtAvatar,
@@ -16,8 +16,13 @@
16
16
  /** An `ElementInternals` implementation complete enough to be worth calling. */
17
17
  export type UsableInternals = ElementInternals;
18
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;
19
+ /**
20
+ * Pushes the control's current value into the enclosing form, if there is one.
21
+ *
22
+ * A `FormData` submits each of its entries as they are named in it — which is
23
+ * how one control contributes several files under one name.
24
+ */
25
+ export declare function setFormValue(internals: UsableInternals | null, value: string | FormData | null): void;
21
26
  /**
22
27
  * Mirrors a control's validity onto the host element.
23
28
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/react/index.ts"],"sourcesContent":["/**\n * React wrappers for the Kanto elements.\n *\n * React 19 can set custom-element properties and listen for custom events on\n * its own, so these wrappers are not strictly required. They are here for what\n * plain JSX still cannot give you: typed props with autocompletion, typed\n * event handlers as `onKtChange` rather than `useEffect` plus\n * `addEventListener`, and refs typed as the element rather than `HTMLElement`.\n *\n * import { KtButton, KtInput } from 'kanto-ds/react';\n * import 'kanto-ds/styles.css';\n *\n * <KtInput placeholder=\"Search\" onKtChange={(e) => setQuery(e.detail.value)} />\n *\n * React is a peer dependency: the package works without it.\n */\nimport * as React from 'react';\nimport { createComponent, type EventName } from '@lit/react';\n\nimport { KtAvatar as KtAvatarElement } from '../components/core/kt-avatar/kt-avatar.js';\nimport { KtBadge as KtBadgeElement } from '../components/core/kt-badge/kt-badge.js';\nimport { KtButton as KtButtonElement } from '../components/core/kt-button/kt-button.js';\nimport { KtSplitButton as KtSplitButtonElement } from '../components/core/kt-split-button/kt-split-button.js';\nimport { KtCard as KtCardElement } from '../components/core/kt-card/kt-card.js';\nimport { KtCode as KtCodeElement } from '../components/core/kt-code/kt-code.js';\nimport { KtIcon as KtIconElement } from '../components/core/kt-icon/kt-icon.js';\nimport { KtKbd as KtKbdElement } from '../components/core/kt-kbd/kt-kbd.js';\nimport { KtDragDrop as KtDragDropElement } from '../components/forms/kt-drag-drop/kt-drag-drop.js';\nimport { KtForm as KtFormElement } from '../components/forms/kt-form/kt-form.js';\nimport { KtInput as KtInputElement } from '../components/forms/kt-input/kt-input.js';\nimport { KtInputMenu as KtInputMenuElement } from '../components/forms/kt-input-menu/kt-input-menu.js';\nimport { KtLabelInput as KtLabelInputElement } from '../components/forms/kt-label-input/kt-label-input.js';\nimport { KtSelect as KtSelectElement } from '../components/forms/kt-select/kt-select.js';\nimport { KtTextarea as KtTextareaElement } from '../components/forms/kt-textarea/kt-textarea.js';\nimport { KtToggle as KtToggleElement } from '../components/forms/kt-toggle/kt-toggle.js';\nimport { KtBreadcrumb as KtBreadcrumbElement } from '../components/navigation/kt-breadcrumb/kt-breadcrumb.js';\nimport { KtPageHeader as KtPageHeaderElement } from '../components/navigation/kt-page-header/kt-page-header.js';\nimport { KtSegmentedControl as KtSegmentedControlElement } from '../components/navigation/kt-segmented-control/kt-segmented-control.js';\nimport { KtSubMenuNavigation as KtSubMenuNavigationElement } from '../components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js';\nimport { KtTabs as KtTabsElement } from '../components/navigation/kt-tabs/kt-tabs.js';\nimport { KtHeader as KtHeaderElement } from '../components/navigation/kt-header/kt-header.js';\nimport { KtToggleButton as KtToggleButtonElement } from '../components/navigation/kt-toggle-button/kt-toggle-button.js';\nimport { KtToggleButtonGroup as KtToggleButtonGroupElement } from '../components/navigation/kt-toggle-button-group/kt-toggle-button-group.js';\nimport { KtAlert as KtAlertElement } from '../components/feedback/kt-alert/kt-alert.js';\nimport { KtEmptyState as KtEmptyStateElement } from '../components/feedback/kt-empty-state/kt-empty-state.js';\nimport { KtProgressBar as KtProgressBarElement } from '../components/feedback/kt-progress-bar/kt-progress-bar.js';\nimport { KtSkeleton as KtSkeletonElement } from '../components/feedback/kt-skeleton/kt-skeleton.js';\nimport { KtToast as KtToastElement } from '../components/feedback/kt-toast/kt-toast.js';\nimport { KtToastContainer as KtToastContainerElement } from '../components/feedback/kt-toast-container/kt-toast-container.js';\nimport { KtTooltip as KtTooltipElement } from '../components/feedback/kt-tooltip/kt-tooltip.js';\nimport { KtCollapsible as KtCollapsibleElement } from '../components/overlays/kt-collapsible/kt-collapsible.js';\nimport { KtConfirmDialog as KtConfirmDialogElement } from '../components/overlays/kt-confirm-dialog/kt-confirm-dialog.js';\nimport { KtDropdown as KtDropdownElement } from '../components/overlays/kt-dropdown/kt-dropdown.js';\nimport { KtModal as KtModalElement } from '../components/overlays/kt-modal/kt-modal.js';\nimport { KtSidePanel as KtSidePanelElement } from '../components/overlays/kt-side-panel/kt-side-panel.js';\nimport { KtChart as KtChartElement } from '../components/data/kt-chart/kt-chart.js';\nimport { KtMeter as KtMeterElement } from '../components/data/kt-meter/kt-meter.js';\nimport { KtPagination as KtPaginationElement } from '../components/data/kt-pagination/kt-pagination.js';\nimport { KtStat as KtStatElement } from '../components/data/kt-stat/kt-stat.js';\nimport { KtTable as KtTableElement } from '../components/data/kt-table/kt-table.js';\nimport {\n KtTimeline as KtTimelineElement,\n KtTimelineItem as KtTimelineItemElement,\n} from '../components/data/kt-timeline/kt-timeline.js';\n\n/** Narrows an event name to the detail its element actually dispatches. */\ntype Kt<T> = EventName<CustomEvent<T>>;\n\n// === CORE ===\nexport const KtAvatar = createComponent({\n tagName: 'kt-avatar',\n elementClass: KtAvatarElement,\n react: React,\n});\n\nexport const KtBadge = createComponent({\n tagName: 'kt-badge',\n elementClass: KtBadgeElement,\n react: React,\n events: {\n onKtBadgeClick: 'kt-badge-click' as Kt<never>,\n onKtRemove: 'kt-remove' as Kt<never>,\n },\n});\n\nexport const KtButton = createComponent({\n tagName: 'kt-button',\n elementClass: KtButtonElement,\n react: React,\n});\n\nexport const KtSplitButton = createComponent({\n tagName: 'kt-split-button',\n elementClass: KtSplitButtonElement,\n react: React,\n events: {\n onKtSelect: 'kt-select' as Kt<{ value: string | number }>,\n onKtOpen: 'kt-open' as Kt<never>,\n onKtClose: 'kt-close' as Kt<never>,\n },\n});\n\nexport const KtCard = createComponent({\n tagName: 'kt-card',\n elementClass: KtCardElement,\n react: React,\n events: { onKtCardClick: 'kt-card-click' as Kt<never> },\n});\n\nexport const KtCode = createComponent({\n tagName: 'kt-code',\n elementClass: KtCodeElement,\n react: React,\n events: { onKtCopy: 'kt-copy' as Kt<{ code: string }> },\n});\n\nexport const KtIcon = createComponent({\n tagName: 'kt-icon',\n elementClass: KtIconElement,\n react: React,\n});\n\nexport const KtKbd = createComponent({\n tagName: 'kt-kbd',\n elementClass: KtKbdElement,\n react: React,\n});\n\n// === FORMS ===\nexport const KtForm = createComponent({\n tagName: 'kt-form',\n elementClass: KtFormElement,\n react: React,\n});\n\nexport const KtInput = createComponent({\n tagName: 'kt-input',\n elementClass: KtInputElement,\n react: React,\n events: {\n onKtInput: 'kt-input' as Kt<{ value: string }>,\n onKtChange: 'kt-change' as Kt<{ value: string }>,\n onKtClear: 'kt-clear' as Kt<never>,\n onKtCountryChange: 'kt-country-change' as Kt<{ country: string; dialCode: string }>,\n },\n});\n\nexport const KtTextarea = createComponent({\n tagName: 'kt-textarea',\n elementClass: KtTextareaElement,\n react: React,\n events: {\n onKtInput: 'kt-input' as Kt<{ value: string }>,\n onKtChange: 'kt-change' as Kt<{ value: string }>,\n },\n});\n\nexport const KtLabelInput = createComponent({\n tagName: 'kt-label-input',\n elementClass: KtLabelInputElement,\n react: React,\n});\n\nexport const KtToggle = createComponent({\n tagName: 'kt-toggle',\n elementClass: KtToggleElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ checked: boolean }> },\n});\n\nexport const KtSelect = createComponent({\n tagName: 'kt-select',\n elementClass: KtSelectElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number | null }> },\n});\n\nexport const KtInputMenu = createComponent({\n tagName: 'kt-input-menu',\n elementClass: KtInputMenuElement,\n react: React,\n events: {\n onKtChange: 'kt-change' as Kt<{ value: string | number | null }>,\n onKtFilter: 'kt-filter' as Kt<{ query: string }>,\n },\n});\n\nexport const KtDragDrop = createComponent({\n tagName: 'kt-drag-drop',\n elementClass: KtDragDropElement,\n react: React,\n events: {\n onKtFilesChange: 'kt-files-change' as Kt<{ files: File[] }>,\n onKtFilesRejected: 'kt-files-rejected' as Kt<{ files: File[]; reason: 'type' | 'size' }>,\n },\n});\n\n// === NAVIGATION ===\nexport const KtBreadcrumb = createComponent({\n tagName: 'kt-breadcrumb',\n elementClass: KtBreadcrumbElement,\n react: React,\n events: { onKtNavigate: 'kt-navigate' as Kt<{ index: number }> },\n});\n\nexport const KtSubMenuNavigation = createComponent({\n tagName: 'kt-sub-menu-navigation',\n elementClass: KtSubMenuNavigationElement,\n react: React,\n events: { onKtNavigate: 'kt-navigate' as Kt<unknown> },\n});\n\nexport const KtPageHeader = createComponent({\n tagName: 'kt-page-header',\n elementClass: KtPageHeaderElement,\n react: React,\n});\n\nexport const KtSegmentedControl = createComponent({\n tagName: 'kt-segmented-control',\n elementClass: KtSegmentedControlElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number }> },\n});\n\nexport const KtTabs = createComponent({\n tagName: 'kt-tabs',\n elementClass: KtTabsElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number }> },\n});\n\nexport const KtHeader = createComponent({\n tagName: 'kt-header',\n elementClass: KtHeaderElement,\n react: React,\n events: { onKtMenuToggle: 'kt-menu-toggle' as Kt<{ open: boolean }> },\n});\n\nexport const KtToggleButton = createComponent({\n tagName: 'kt-toggle-button',\n elementClass: KtToggleButtonElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ selected: boolean; value: string }> },\n});\n\nexport const KtToggleButtonGroup = createComponent({\n tagName: 'kt-toggle-button-group',\n elementClass: KtToggleButtonGroupElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | string[] | null }> },\n});\n\n// === FEEDBACK ===\nexport const KtAlert = createComponent({\n tagName: 'kt-alert',\n elementClass: KtAlertElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtEmptyState = createComponent({\n tagName: 'kt-empty-state',\n elementClass: KtEmptyStateElement,\n react: React,\n});\n\nexport const KtProgressBar = createComponent({\n tagName: 'kt-progress-bar',\n elementClass: KtProgressBarElement,\n react: React,\n});\n\nexport const KtSkeleton = createComponent({\n tagName: 'kt-skeleton',\n elementClass: KtSkeletonElement,\n react: React,\n});\n\nexport const KtTooltip = createComponent({\n tagName: 'kt-tooltip',\n elementClass: KtTooltipElement,\n react: React,\n});\n\nexport const KtToast = createComponent({\n tagName: 'kt-toast',\n elementClass: KtToastElement,\n react: React,\n events: { onKtToastClose: 'kt-toast-close' as Kt<never> },\n});\n\nexport const KtToastContainer = createComponent({\n tagName: 'kt-toast-container',\n elementClass: KtToastContainerElement,\n react: React,\n});\n\n// === OVERLAYS ===\nexport const KtCollapsible = createComponent({\n tagName: 'kt-collapsible',\n elementClass: KtCollapsibleElement,\n react: React,\n events: { onKtToggle: 'kt-toggle' as Kt<{ open: boolean }> },\n});\n\nexport const KtDropdown = createComponent({\n tagName: 'kt-dropdown',\n elementClass: KtDropdownElement,\n react: React,\n events: {\n onKtSelect: 'kt-select' as Kt<{ value: string | number }>,\n onKtOpen: 'kt-open' as Kt<never>,\n onKtClose: 'kt-close' as Kt<never>,\n },\n});\n\nexport const KtModal = createComponent({\n tagName: 'kt-modal',\n elementClass: KtModalElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtSidePanel = createComponent({\n tagName: 'kt-side-panel',\n elementClass: KtSidePanelElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtConfirmDialog = createComponent({\n tagName: 'kt-confirm-dialog',\n elementClass: KtConfirmDialogElement,\n react: React,\n events: {\n onKtConfirm: 'kt-confirm' as Kt<never>,\n onKtCancel: 'kt-cancel' as Kt<never>,\n },\n});\n\n// === DATA ===\nexport const KtChart = createComponent({\n tagName: 'kt-chart',\n elementClass: KtChartElement,\n react: React,\n events: {\n onKtPointHover: 'kt-point-hover' as Kt<{ index: number; series: number }>,\n onKtSeriesToggle: 'kt-series-toggle' as Kt<{ series: number; hidden: boolean }>,\n },\n});\n\nexport const KtTable = createComponent({\n tagName: 'kt-table',\n elementClass: KtTableElement,\n react: React,\n events: {\n onKtSortChange: 'kt-sort-change' as Kt<{\n key: string | null;\n direction: 'asc' | 'desc' | null;\n }>,\n onKtSelectionChange: 'kt-selection-change' as Kt<{ selected: unknown[] }>,\n onKtRowClick: 'kt-row-click' as Kt<{ index: number }>,\n onKtPageChange: 'kt-page-change' as Kt<{ page: number }>,\n },\n});\n\nexport const KtMeter = createComponent({\n tagName: 'kt-meter',\n elementClass: KtMeterElement,\n react: React,\n});\n\nexport const KtPagination = createComponent({\n tagName: 'kt-pagination',\n elementClass: KtPaginationElement,\n react: React,\n events: { onKtPageChange: 'kt-page-change' as Kt<{ page: number }> },\n});\n\n// The imperative toaster needs no wrapper.\nexport { toaster } from '../components/feedback/kt-toast-container/toaster.js';\n\nexport const KtStat = createComponent({\n tagName: 'kt-stat',\n elementClass: KtStatElement,\n react: React,\n});\n\nexport const KtTimeline = createComponent({\n tagName: 'kt-timeline',\n elementClass: KtTimelineElement,\n react: React,\n});\n\nexport const KtTimelineItem = createComponent({\n tagName: 'kt-timeline-item',\n elementClass: KtTimelineItemElement,\n react: React,\n});\n"],"names":["KtAvatar","createComponent","KtAvatarElement","React","KtBadge","KtBadgeElement","KtButton","KtButtonElement","KtSplitButton","KtSplitButtonElement","KtCard","KtCardElement","KtCode","KtCodeElement","KtIcon","KtIconElement","KtKbd","KtKbdElement","KtForm","KtFormElement","KtInput","KtInputElement","KtTextarea","KtTextareaElement","KtLabelInput","KtLabelInputElement","KtToggle","KtToggleElement","KtSelect","KtSelectElement","KtInputMenu","KtInputMenuElement","KtDragDrop","KtDragDropElement","KtBreadcrumb","KtBreadcrumbElement","KtSubMenuNavigation","KtSubMenuNavigationElement","KtPageHeader","KtPageHeaderElement","KtSegmentedControl","KtSegmentedControlElement","KtTabs","KtTabsElement","KtHeader","KtHeaderElement","KtToggleButton","KtToggleButtonElement","KtToggleButtonGroup","KtToggleButtonGroupElement","KtAlert","KtAlertElement","KtEmptyState","KtEmptyStateElement","KtProgressBar","KtProgressBarElement","KtSkeleton","KtSkeletonElement","KtTooltip","KtTooltipElement","KtToast","KtToastElement","KtToastContainer","KtToastContainerElement","KtCollapsible","KtCollapsibleElement","KtDropdown","KtDropdownElement","KtModal","KtModalElement","KtSidePanel","KtSidePanelElement","KtConfirmDialog","KtConfirmDialogElement","KtChart","KtChartElement","KtTable","KtTableElement","KtMeter","KtMeterElement","KtPagination","KtPaginationElement","KtStat","KtStatElement","KtTimeline","KtTimelineElement","KtTimelineItem","KtTimelineItemElement"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/react/index.ts"],"sourcesContent":["/**\n * React wrappers for the Kanto elements — for React 18.\n *\n * React 18 sets every prop as a string attribute and cannot listen for custom\n * events, so each element is wrapped with `@lit/react`: props become\n * properties, `onKtChange` listens for `kt-change`, refs are typed as the\n * element. `@lit/react` is an optional peer dependency — a React 18 project\n * installs it alongside kanto-ds:\n *\n * npm install kanto-ds @lit/react\n *\n * import { KtButton, KtInput } from 'kanto-ds/react';\n * import 'kanto-ds/styles.css';\n *\n * <KtInput placeholder=\"Search\" onKtChange={(e) => setQuery(e.detail.value)} />\n *\n * React 19 needs none of this: it renders the `kt-*` tags directly, and\n * `kanto-ds/react/jsx` types them.\n */\nimport * as React from 'react';\nimport { createComponent, type EventName } from '@lit/react';\n\nimport { KtAvatar as KtAvatarElement } from '../components/core/kt-avatar/kt-avatar.js';\nimport { KtBadge as KtBadgeElement } from '../components/core/kt-badge/kt-badge.js';\nimport { KtButton as KtButtonElement } from '../components/core/kt-button/kt-button.js';\nimport { KtSplitButton as KtSplitButtonElement } from '../components/core/kt-split-button/kt-split-button.js';\nimport { KtCard as KtCardElement } from '../components/core/kt-card/kt-card.js';\nimport { KtCode as KtCodeElement } from '../components/core/kt-code/kt-code.js';\nimport { KtIcon as KtIconElement } from '../components/core/kt-icon/kt-icon.js';\nimport { KtKbd as KtKbdElement } from '../components/core/kt-kbd/kt-kbd.js';\nimport { KtDragDrop as KtDragDropElement } from '../components/forms/kt-drag-drop/kt-drag-drop.js';\nimport { KtForm as KtFormElement } from '../components/forms/kt-form/kt-form.js';\nimport { KtInput as KtInputElement } from '../components/forms/kt-input/kt-input.js';\nimport { KtInputMenu as KtInputMenuElement } from '../components/forms/kt-input-menu/kt-input-menu.js';\nimport { KtLabelInput as KtLabelInputElement } from '../components/forms/kt-label-input/kt-label-input.js';\nimport { KtSelect as KtSelectElement } from '../components/forms/kt-select/kt-select.js';\nimport { KtTextarea as KtTextareaElement } from '../components/forms/kt-textarea/kt-textarea.js';\nimport { KtToggle as KtToggleElement } from '../components/forms/kt-toggle/kt-toggle.js';\nimport { KtBreadcrumb as KtBreadcrumbElement } from '../components/navigation/kt-breadcrumb/kt-breadcrumb.js';\nimport { KtPageHeader as KtPageHeaderElement } from '../components/navigation/kt-page-header/kt-page-header.js';\nimport { KtSegmentedControl as KtSegmentedControlElement } from '../components/navigation/kt-segmented-control/kt-segmented-control.js';\nimport { KtSubMenuNavigation as KtSubMenuNavigationElement } from '../components/navigation/kt-sub-menu-navigation/kt-sub-menu-navigation.js';\nimport { KtTabs as KtTabsElement } from '../components/navigation/kt-tabs/kt-tabs.js';\nimport { KtHeader as KtHeaderElement } from '../components/navigation/kt-header/kt-header.js';\nimport { KtToggleButton as KtToggleButtonElement } from '../components/navigation/kt-toggle-button/kt-toggle-button.js';\nimport { KtToggleButtonGroup as KtToggleButtonGroupElement } from '../components/navigation/kt-toggle-button-group/kt-toggle-button-group.js';\nimport { KtAlert as KtAlertElement } from '../components/feedback/kt-alert/kt-alert.js';\nimport { KtEmptyState as KtEmptyStateElement } from '../components/feedback/kt-empty-state/kt-empty-state.js';\nimport { KtProgressBar as KtProgressBarElement } from '../components/feedback/kt-progress-bar/kt-progress-bar.js';\nimport { KtSkeleton as KtSkeletonElement } from '../components/feedback/kt-skeleton/kt-skeleton.js';\nimport { KtToast as KtToastElement } from '../components/feedback/kt-toast/kt-toast.js';\nimport { KtToastContainer as KtToastContainerElement } from '../components/feedback/kt-toast-container/kt-toast-container.js';\nimport { KtTooltip as KtTooltipElement } from '../components/feedback/kt-tooltip/kt-tooltip.js';\nimport { KtCollapsible as KtCollapsibleElement } from '../components/overlays/kt-collapsible/kt-collapsible.js';\nimport { KtConfirmDialog as KtConfirmDialogElement } from '../components/overlays/kt-confirm-dialog/kt-confirm-dialog.js';\nimport { KtDropdown as KtDropdownElement } from '../components/overlays/kt-dropdown/kt-dropdown.js';\nimport { KtModal as KtModalElement } from '../components/overlays/kt-modal/kt-modal.js';\nimport { KtSidePanel as KtSidePanelElement } from '../components/overlays/kt-side-panel/kt-side-panel.js';\nimport { KtChart as KtChartElement } from '../components/data/kt-chart/kt-chart.js';\nimport { KtMeter as KtMeterElement } from '../components/data/kt-meter/kt-meter.js';\nimport { KtPagination as KtPaginationElement } from '../components/data/kt-pagination/kt-pagination.js';\nimport { KtStat as KtStatElement } from '../components/data/kt-stat/kt-stat.js';\nimport { KtTable as KtTableElement } from '../components/data/kt-table/kt-table.js';\nimport {\n KtTimeline as KtTimelineElement,\n KtTimelineItem as KtTimelineItemElement,\n} from '../components/data/kt-timeline/kt-timeline.js';\n\n/** Narrows an event name to the detail its element actually dispatches. */\ntype Kt<T> = EventName<CustomEvent<T>>;\n\n// === CORE ===\nexport const KtAvatar = createComponent({\n tagName: 'kt-avatar',\n elementClass: KtAvatarElement,\n react: React,\n});\n\nexport const KtBadge = createComponent({\n tagName: 'kt-badge',\n elementClass: KtBadgeElement,\n react: React,\n events: {\n onKtBadgeClick: 'kt-badge-click' as Kt<never>,\n onKtRemove: 'kt-remove' as Kt<never>,\n },\n});\n\nexport const KtButton = createComponent({\n tagName: 'kt-button',\n elementClass: KtButtonElement,\n react: React,\n});\n\nexport const KtSplitButton = createComponent({\n tagName: 'kt-split-button',\n elementClass: KtSplitButtonElement,\n react: React,\n events: {\n onKtSelect: 'kt-select' as Kt<{ value: string | number }>,\n onKtOpen: 'kt-open' as Kt<never>,\n onKtClose: 'kt-close' as Kt<never>,\n },\n});\n\nexport const KtCard = createComponent({\n tagName: 'kt-card',\n elementClass: KtCardElement,\n react: React,\n events: { onKtCardClick: 'kt-card-click' as Kt<never> },\n});\n\nexport const KtCode = createComponent({\n tagName: 'kt-code',\n elementClass: KtCodeElement,\n react: React,\n events: { onKtCopy: 'kt-copy' as Kt<{ code: string }> },\n});\n\nexport const KtIcon = createComponent({\n tagName: 'kt-icon',\n elementClass: KtIconElement,\n react: React,\n});\n\nexport const KtKbd = createComponent({\n tagName: 'kt-kbd',\n elementClass: KtKbdElement,\n react: React,\n});\n\n// === FORMS ===\nexport const KtForm = createComponent({\n tagName: 'kt-form',\n elementClass: KtFormElement,\n react: React,\n});\n\nexport const KtInput = createComponent({\n tagName: 'kt-input',\n elementClass: KtInputElement,\n react: React,\n events: {\n onKtInput: 'kt-input' as Kt<{ value: string }>,\n onKtChange: 'kt-change' as Kt<{ value: string }>,\n onKtClear: 'kt-clear' as Kt<never>,\n onKtCountryChange: 'kt-country-change' as Kt<{ country: string; dialCode: string }>,\n },\n});\n\nexport const KtTextarea = createComponent({\n tagName: 'kt-textarea',\n elementClass: KtTextareaElement,\n react: React,\n events: {\n onKtInput: 'kt-input' as Kt<{ value: string }>,\n onKtChange: 'kt-change' as Kt<{ value: string }>,\n },\n});\n\nexport const KtLabelInput = createComponent({\n tagName: 'kt-label-input',\n elementClass: KtLabelInputElement,\n react: React,\n});\n\nexport const KtToggle = createComponent({\n tagName: 'kt-toggle',\n elementClass: KtToggleElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ checked: boolean }> },\n});\n\nexport const KtSelect = createComponent({\n tagName: 'kt-select',\n elementClass: KtSelectElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number | null }> },\n});\n\nexport const KtInputMenu = createComponent({\n tagName: 'kt-input-menu',\n elementClass: KtInputMenuElement,\n react: React,\n events: {\n onKtChange: 'kt-change' as Kt<{ value: string | number | null }>,\n onKtFilter: 'kt-filter' as Kt<{ query: string }>,\n },\n});\n\nexport const KtDragDrop = createComponent({\n tagName: 'kt-drag-drop',\n elementClass: KtDragDropElement,\n react: React,\n events: {\n onKtFilesChange: 'kt-files-change' as Kt<{ files: File[] }>,\n onKtFilesRejected: 'kt-files-rejected' as Kt<{ files: File[]; reason: 'type' | 'size' }>,\n },\n});\n\n// === NAVIGATION ===\nexport const KtBreadcrumb = createComponent({\n tagName: 'kt-breadcrumb',\n elementClass: KtBreadcrumbElement,\n react: React,\n events: { onKtNavigate: 'kt-navigate' as Kt<{ index: number }> },\n});\n\nexport const KtSubMenuNavigation = createComponent({\n tagName: 'kt-sub-menu-navigation',\n elementClass: KtSubMenuNavigationElement,\n react: React,\n events: { onKtNavigate: 'kt-navigate' as Kt<unknown> },\n});\n\nexport const KtPageHeader = createComponent({\n tagName: 'kt-page-header',\n elementClass: KtPageHeaderElement,\n react: React,\n});\n\nexport const KtSegmentedControl = createComponent({\n tagName: 'kt-segmented-control',\n elementClass: KtSegmentedControlElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number }> },\n});\n\nexport const KtTabs = createComponent({\n tagName: 'kt-tabs',\n elementClass: KtTabsElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | number }> },\n});\n\nexport const KtHeader = createComponent({\n tagName: 'kt-header',\n elementClass: KtHeaderElement,\n react: React,\n events: { onKtMenuToggle: 'kt-menu-toggle' as Kt<{ open: boolean }> },\n});\n\nexport const KtToggleButton = createComponent({\n tagName: 'kt-toggle-button',\n elementClass: KtToggleButtonElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ selected: boolean; value: string }> },\n});\n\nexport const KtToggleButtonGroup = createComponent({\n tagName: 'kt-toggle-button-group',\n elementClass: KtToggleButtonGroupElement,\n react: React,\n events: { onKtChange: 'kt-change' as Kt<{ value: string | string[] | null }> },\n});\n\n// === FEEDBACK ===\nexport const KtAlert = createComponent({\n tagName: 'kt-alert',\n elementClass: KtAlertElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtEmptyState = createComponent({\n tagName: 'kt-empty-state',\n elementClass: KtEmptyStateElement,\n react: React,\n});\n\nexport const KtProgressBar = createComponent({\n tagName: 'kt-progress-bar',\n elementClass: KtProgressBarElement,\n react: React,\n});\n\nexport const KtSkeleton = createComponent({\n tagName: 'kt-skeleton',\n elementClass: KtSkeletonElement,\n react: React,\n});\n\nexport const KtTooltip = createComponent({\n tagName: 'kt-tooltip',\n elementClass: KtTooltipElement,\n react: React,\n});\n\nexport const KtToast = createComponent({\n tagName: 'kt-toast',\n elementClass: KtToastElement,\n react: React,\n events: { onKtToastClose: 'kt-toast-close' as Kt<never> },\n});\n\nexport const KtToastContainer = createComponent({\n tagName: 'kt-toast-container',\n elementClass: KtToastContainerElement,\n react: React,\n});\n\n// === OVERLAYS ===\nexport const KtCollapsible = createComponent({\n tagName: 'kt-collapsible',\n elementClass: KtCollapsibleElement,\n react: React,\n events: { onKtToggle: 'kt-toggle' as Kt<{ open: boolean }> },\n});\n\nexport const KtDropdown = createComponent({\n tagName: 'kt-dropdown',\n elementClass: KtDropdownElement,\n react: React,\n events: {\n onKtSelect: 'kt-select' as Kt<{ value: string | number }>,\n onKtOpen: 'kt-open' as Kt<never>,\n onKtClose: 'kt-close' as Kt<never>,\n },\n});\n\nexport const KtModal = createComponent({\n tagName: 'kt-modal',\n elementClass: KtModalElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtSidePanel = createComponent({\n tagName: 'kt-side-panel',\n elementClass: KtSidePanelElement,\n react: React,\n events: { onKtClose: 'kt-close' as Kt<never> },\n});\n\nexport const KtConfirmDialog = createComponent({\n tagName: 'kt-confirm-dialog',\n elementClass: KtConfirmDialogElement,\n react: React,\n events: {\n onKtConfirm: 'kt-confirm' as Kt<never>,\n onKtCancel: 'kt-cancel' as Kt<never>,\n },\n});\n\n// === DATA ===\nexport const KtChart = createComponent({\n tagName: 'kt-chart',\n elementClass: KtChartElement,\n react: React,\n events: {\n onKtPointHover: 'kt-point-hover' as Kt<{ index: number; series: number }>,\n onKtSeriesToggle: 'kt-series-toggle' as Kt<{ series: number; hidden: boolean }>,\n },\n});\n\nexport const KtTable = createComponent({\n tagName: 'kt-table',\n elementClass: KtTableElement,\n react: React,\n events: {\n onKtSortChange: 'kt-sort-change' as Kt<{\n key: string | null;\n direction: 'asc' | 'desc' | null;\n }>,\n onKtSelectionChange: 'kt-selection-change' as Kt<{ selected: unknown[] }>,\n onKtRowClick: 'kt-row-click' as Kt<{ index: number }>,\n onKtPageChange: 'kt-page-change' as Kt<{ page: number }>,\n },\n});\n\nexport const KtMeter = createComponent({\n tagName: 'kt-meter',\n elementClass: KtMeterElement,\n react: React,\n});\n\nexport const KtPagination = createComponent({\n tagName: 'kt-pagination',\n elementClass: KtPaginationElement,\n react: React,\n events: { onKtPageChange: 'kt-page-change' as Kt<{ page: number }> },\n});\n\n// The imperative toaster needs no wrapper.\nexport { toaster } from '../components/feedback/kt-toast-container/toaster.js';\n\nexport const KtStat = createComponent({\n tagName: 'kt-stat',\n elementClass: KtStatElement,\n react: React,\n});\n\nexport const KtTimeline = createComponent({\n tagName: 'kt-timeline',\n elementClass: KtTimelineElement,\n react: React,\n});\n\nexport const KtTimelineItem = createComponent({\n tagName: 'kt-timeline-item',\n elementClass: KtTimelineItemElement,\n react: React,\n});\n"],"names":["KtAvatar","createComponent","KtAvatarElement","React","KtBadge","KtBadgeElement","KtButton","KtButtonElement","KtSplitButton","KtSplitButtonElement","KtCard","KtCardElement","KtCode","KtCodeElement","KtIcon","KtIconElement","KtKbd","KtKbdElement","KtForm","KtFormElement","KtInput","KtInputElement","KtTextarea","KtTextareaElement","KtLabelInput","KtLabelInputElement","KtToggle","KtToggleElement","KtSelect","KtSelectElement","KtInputMenu","KtInputMenuElement","KtDragDrop","KtDragDropElement","KtBreadcrumb","KtBreadcrumbElement","KtSubMenuNavigation","KtSubMenuNavigationElement","KtPageHeader","KtPageHeaderElement","KtSegmentedControl","KtSegmentedControlElement","KtTabs","KtTabsElement","KtHeader","KtHeaderElement","KtToggleButton","KtToggleButtonElement","KtToggleButtonGroup","KtToggleButtonGroupElement","KtAlert","KtAlertElement","KtEmptyState","KtEmptyStateElement","KtProgressBar","KtProgressBarElement","KtSkeleton","KtSkeletonElement","KtTooltip","KtTooltipElement","KtToast","KtToastElement","KtToastContainer","KtToastContainerElement","KtCollapsible","KtCollapsibleElement","KtDropdown","KtDropdownElement","KtModal","KtModalElement","KtSidePanel","KtSidePanelElement","KtConfirmDialog","KtConfirmDialogElement","KtChart","KtChartElement","KtTable","KtTableElement","KtMeter","KtMeterElement","KtPagination","KtPaginationElement","KtStat","KtStatElement","KtTimeline","KtTimelineElement","KtTimelineItem","KtTimelineItemElement"],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * JSX typings for the Kanto elements, for React 19.
3
+ *
4
+ * React 19 renders custom elements natively: it sets a prop as a property when
5
+ * the element has one — so `options={regions}` reaches `<kt-select>` as an
6
+ * array — and a prop named `on` + an event name listens for that event, so
7
+ * `onkt-change` hears `kt-change`. What it cannot know is which tags exist
8
+ * and what they take; without this module TypeScript rejects every `kt-*`
9
+ * tag. It is types only: importing it loads nothing, and it needs no package
10
+ * beyond React itself.
11
+ *
12
+ * import 'kanto-ds';
13
+ * import 'kanto-ds/styles.css';
14
+ * import type {} from 'kanto-ds/react/jsx';
15
+ *
16
+ * <kt-select options={regions} onkt-change={(e) => setRegion(e.detail.value)} />
17
+ *
18
+ * React 18 cannot do either, which is what the wrappers in `kanto-ds/react`
19
+ * are for.
20
+ */
21
+ import type * as React from 'react';
22
+ import type { KtAvatar, KtBadge, KtButton, KtSplitButton, KtCard, KtCode, KtIcon, KtKbd, KtForm, KtInput, KtTextarea, KtLabelInput, KtToggle, KtSelect, KtInputMenu, KtDragDrop, KtBreadcrumb, KtSubMenuNavigation, KtPageHeader, KtSegmentedControl, KtTabs, KtHeader, KtToggleButton, KtToggleButtonGroup, KtAlert, KtEmptyState, KtProgressBar, KtSkeleton, KtTooltip, KtToast, KtToastContainer, KtCollapsible, KtDropdown, KtModal, KtSidePanel, KtConfirmDialog, KtChart, KtTable, KtMeter, KtPagination, KtStat, KtTimeline, KtTimelineItem } from 'kanto-ds';
23
+ /** The `on<event>` props React 19 turns into listeners, typed by their detail. */
24
+ type Handlers<E> = {
25
+ [K in keyof E & string as `on${K}`]?: (event: CustomEvent<E[K]>) => void;
26
+ };
27
+ /**
28
+ * What a `kt-*` tag accepts in JSX: its own public properties, the usual
29
+ * HTML attributes and a typed ref, plus a handler for each event it fires.
30
+ */
31
+ type KtProps<T extends HTMLElement, E = Record<never, never>> = Partial<Omit<T, keyof HTMLElement>> & React.HTMLAttributes<T> & React.RefAttributes<T> & Handlers<E>;
32
+ declare module 'react' {
33
+ namespace JSX {
34
+ interface IntrinsicElements {
35
+ 'kt-avatar': KtProps<KtAvatar>;
36
+ 'kt-badge': KtProps<KtBadge, {
37
+ 'kt-badge-click': never;
38
+ 'kt-remove': never;
39
+ }>;
40
+ 'kt-button': KtProps<KtButton>;
41
+ 'kt-split-button': KtProps<KtSplitButton, {
42
+ 'kt-select': {
43
+ value: string | number;
44
+ };
45
+ 'kt-open': never;
46
+ 'kt-close': never;
47
+ }>;
48
+ 'kt-card': KtProps<KtCard, {
49
+ 'kt-card-click': never;
50
+ }>;
51
+ 'kt-code': KtProps<KtCode, {
52
+ 'kt-copy': {
53
+ code: string;
54
+ };
55
+ }>;
56
+ 'kt-icon': KtProps<KtIcon>;
57
+ 'kt-kbd': KtProps<KtKbd>;
58
+ 'kt-form': KtProps<KtForm>;
59
+ 'kt-input': KtProps<KtInput, {
60
+ 'kt-input': {
61
+ value: string;
62
+ };
63
+ 'kt-change': {
64
+ value: string;
65
+ };
66
+ 'kt-clear': never;
67
+ 'kt-country-change': {
68
+ country: string;
69
+ dialCode: string;
70
+ };
71
+ }>;
72
+ 'kt-textarea': KtProps<KtTextarea, {
73
+ 'kt-input': {
74
+ value: string;
75
+ };
76
+ 'kt-change': {
77
+ value: string;
78
+ };
79
+ }>;
80
+ 'kt-label-input': KtProps<KtLabelInput>;
81
+ 'kt-toggle': KtProps<KtToggle, {
82
+ 'kt-change': {
83
+ checked: boolean;
84
+ };
85
+ }>;
86
+ 'kt-select': KtProps<KtSelect, {
87
+ 'kt-change': {
88
+ value: string | number | null;
89
+ };
90
+ }>;
91
+ 'kt-input-menu': KtProps<KtInputMenu, {
92
+ 'kt-change': {
93
+ value: string | number | null;
94
+ };
95
+ 'kt-filter': {
96
+ query: string;
97
+ };
98
+ }>;
99
+ 'kt-drag-drop': KtProps<KtDragDrop, {
100
+ 'kt-files-change': {
101
+ files: File[];
102
+ };
103
+ 'kt-files-rejected': {
104
+ files: File[];
105
+ reason: 'type' | 'size';
106
+ };
107
+ }>;
108
+ 'kt-breadcrumb': KtProps<KtBreadcrumb, {
109
+ 'kt-navigate': {
110
+ index: number;
111
+ };
112
+ }>;
113
+ 'kt-sub-menu-navigation': KtProps<KtSubMenuNavigation, {
114
+ 'kt-navigate': unknown;
115
+ }>;
116
+ 'kt-page-header': KtProps<KtPageHeader>;
117
+ 'kt-segmented-control': KtProps<KtSegmentedControl, {
118
+ 'kt-change': {
119
+ value: string | number;
120
+ };
121
+ }>;
122
+ 'kt-tabs': KtProps<KtTabs, {
123
+ 'kt-change': {
124
+ value: string | number;
125
+ };
126
+ }>;
127
+ 'kt-header': KtProps<KtHeader, {
128
+ 'kt-menu-toggle': {
129
+ open: boolean;
130
+ };
131
+ }>;
132
+ 'kt-toggle-button': KtProps<KtToggleButton, {
133
+ 'kt-change': {
134
+ selected: boolean;
135
+ value: string;
136
+ };
137
+ }>;
138
+ 'kt-toggle-button-group': KtProps<KtToggleButtonGroup, {
139
+ 'kt-change': {
140
+ value: string | string[] | null;
141
+ };
142
+ }>;
143
+ 'kt-alert': KtProps<KtAlert, {
144
+ 'kt-close': never;
145
+ }>;
146
+ 'kt-empty-state': KtProps<KtEmptyState>;
147
+ 'kt-progress-bar': KtProps<KtProgressBar>;
148
+ 'kt-skeleton': KtProps<KtSkeleton>;
149
+ 'kt-tooltip': KtProps<KtTooltip>;
150
+ 'kt-toast': KtProps<KtToast, {
151
+ 'kt-toast-close': never;
152
+ }>;
153
+ 'kt-toast-container': KtProps<KtToastContainer>;
154
+ 'kt-collapsible': KtProps<KtCollapsible, {
155
+ 'kt-toggle': {
156
+ open: boolean;
157
+ };
158
+ }>;
159
+ 'kt-dropdown': KtProps<KtDropdown, {
160
+ 'kt-select': {
161
+ value: string | number;
162
+ };
163
+ 'kt-open': never;
164
+ 'kt-close': never;
165
+ }>;
166
+ 'kt-modal': KtProps<KtModal, {
167
+ 'kt-close': never;
168
+ }>;
169
+ 'kt-side-panel': KtProps<KtSidePanel, {
170
+ 'kt-close': never;
171
+ }>;
172
+ 'kt-confirm-dialog': KtProps<KtConfirmDialog, {
173
+ 'kt-confirm': never;
174
+ 'kt-cancel': never;
175
+ }>;
176
+ 'kt-chart': KtProps<KtChart, {
177
+ 'kt-point-hover': {
178
+ index: number;
179
+ series: number;
180
+ };
181
+ 'kt-series-toggle': {
182
+ series: number;
183
+ hidden: boolean;
184
+ };
185
+ }>;
186
+ 'kt-table': KtProps<KtTable, {
187
+ 'kt-sort-change': {
188
+ key: string | null;
189
+ direction: 'asc' | 'desc' | null;
190
+ };
191
+ 'kt-selection-change': {
192
+ selected: unknown[];
193
+ };
194
+ 'kt-row-click': {
195
+ index: number;
196
+ };
197
+ 'kt-page-change': {
198
+ page: number;
199
+ };
200
+ }>;
201
+ 'kt-meter': KtProps<KtMeter>;
202
+ 'kt-pagination': KtProps<KtPagination, {
203
+ 'kt-page-change': {
204
+ page: number;
205
+ };
206
+ }>;
207
+ 'kt-stat': KtProps<KtStat>;
208
+ 'kt-timeline': KtProps<KtTimeline>;
209
+ 'kt-timeline-item': KtProps<KtTimelineItem>;
210
+ }
211
+ }
212
+ }
213
+ export {};
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=jsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -50,9 +50,13 @@ Dark is the canonical theme and is what `:root` carries.
50
50
  - **Surfaces are a ramp, not a shadow scale.** Elevation means a lighter
51
51
  surface: `--color-dark-12` (page) → `--color-dark-16` (card) →
52
52
  `--color-dark-20` (raised). The only shadow in the system is on toasts.
53
- - **Semantic colours come in three variants.** `-base` is opaque, for text and
54
- solid fills; `-soft` is the same hue at 12% alpha, for tinted backgrounds;
55
- `-hover` is 16%.
53
+ - **Semantic colours come in four variants.** `-base` is opaque, for solid
54
+ fills; `-soft` is the same hue at 12% alpha, for tinted backgrounds; `-hover`
55
+ is 16%; `-text` is for text and icons. Never colour text with `-base`: it is
56
+ tuned to carry white text, which makes it too dark on a dark surface and too
57
+ light on a light one. Every `-text` holds WCAG AA (4.5:1) on the page, card
58
+ and raised surfaces and on its own tint. `--color-danger-solid` is the red for a
59
+ filled destructive button.
56
60
  - **Prefer the aliases.** `--surface-card` over `--color-dark-16`,
57
61
  `--text-muted` over `--color-text-400`. The aliases survive a change to which
58
62
  ramp step a role uses.
@@ -8,7 +8,13 @@
8
8
  * rather than a shadow scale — in Kanto, elevation means "slightly lighter
9
9
  * surface". Semantic colours each ship three variants: `-base` (opaque, for
10
10
  * text and solid fills), `-soft` (12% alpha, for tinted backgrounds) and
11
- * `-hover` (16% alpha).
11
+ * `-hover` (16% alpha). Each also has a `-text` step for when it colours
12
+ * text or an icon rather than a fill: base colours are tuned to carry white
13
+ * text, which makes them too dark for text on a dark surface and too light on
14
+ * a light one. Every `-text` holds 4.5:1 on the surfaces text sits on — page,
15
+ * card and raised, up to --color-dark-20 — and on its own soft tint. They are
16
+ * fitted in OKLCH at the most chroma sRGB allows, so passing does not cost
17
+ * them their colour.
12
18
  */
13
19
 
14
20
  :root {
@@ -16,15 +22,20 @@
16
22
 
17
23
  /* === BRAND === */
18
24
  --color-white: rgba(244, 244, 245, 1);
19
- --color-primary-base: rgba(101, 98, 248, 1);
20
- --color-primary-hover: rgba(111, 109, 248, 1);
21
- --color-primary-soft: rgba(101, 98, 248, 0.12);
25
+ /* Dark enough to carry white text at 4.5:1 in both themes — hover steps
26
+ darker, not lighter, for the same reason. */
27
+ --color-primary-base: rgba(95, 93, 234, 1);
28
+ --color-primary-hover: rgba(88, 86, 224, 1);
29
+ --color-primary-soft: rgba(95, 93, 234, 0.12);
22
30
  --color-secondary-hover: rgba(111, 116, 246, 0.16);
23
31
 
24
32
  /* === SEMANTIC === */
25
33
  --color-danger-base: rgba(245, 61, 92, 1);
26
34
  --color-danger-hover: rgba(243, 73, 107, 0.16);
27
35
  --color-danger-soft: rgba(245, 61, 92, 0.12);
36
+ /* A solid red that carries white text at 4.5:1, for destructive buttons. */
37
+ --color-danger-solid: #d62934;
38
+ --color-danger-solid-hover: #c4242f;
28
39
 
29
40
  --color-info-base: rgba(53, 175, 243, 1);
30
41
  --color-info-hover: rgba(53, 175, 243, 0.16);
@@ -38,9 +49,17 @@
38
49
  --color-success-hover: rgba(53, 221, 131, 0.16);
39
50
  --color-success-soft: rgba(53, 221, 131, 0.12);
40
51
 
52
+ /* === TEXT STEPS OF THE BRAND AND SEMANTIC COLOURS === */
53
+ --color-primary-text: #8e97ff;
54
+ --color-danger-text: #ff727f;
55
+ --color-info-text: #06b0fc;
56
+ --color-warning-text: #fca80d;
57
+ --color-success-text: #01df7e;
58
+
41
59
  /* === TEXT (100 = highest contrast) === */
42
60
  --color-text-100: rgba(244, 244, 245, 1);
43
- --color-text-400: rgba(145, 145, 161, 1);
61
+ /* 4.5:1 on every surface up to --color-dark-24, and on the tinted alerts. */
62
+ --color-text-400: rgba(169, 169, 181, 1);
44
63
  --color-text-500: rgba(101, 101, 114, 1);
45
64
  --color-text-600: rgba(75, 75, 88, 1);
46
65
  --color-text-700: rgba(66, 66, 77, 1);
@@ -19,6 +19,15 @@
19
19
 
20
20
  --color-white: rgba(255, 255, 255, 1);
21
21
 
22
+ /* Darker than the base colours, which stay tuned for fills. Success,
23
+ info and warning turn a few degrees of hue for chroma: a dark enough
24
+ amber is brown, a dark enough orange is still orange. */
25
+ --color-primary-text: #4f30ef;
26
+ --color-danger-text: #b30436;
27
+ --color-info-text: #0260a2;
28
+ --color-warning-text: #9e4502;
29
+ --color-success-text: #026f2a;
30
+
22
31
  --color-text-100: rgba(28, 28, 30, 1);
23
32
  --color-text-400: rgba(80, 80, 90, 1);
24
33
  --color-text-500: rgba(110, 110, 120, 1);
@@ -88,6 +97,15 @@
88
97
 
89
98
  --color-white: rgba(255, 255, 255, 1);
90
99
 
100
+ /* Darker than the base colours, which stay tuned for fills. Success,
101
+ info and warning turn a few degrees of hue for chroma: a dark enough
102
+ amber is brown, a dark enough orange is still orange. */
103
+ --color-primary-text: #4f30ef;
104
+ --color-danger-text: #b30436;
105
+ --color-info-text: #0260a2;
106
+ --color-warning-text: #9e4502;
107
+ --color-success-text: #026f2a;
108
+
91
109
  --color-text-100: rgba(28, 28, 30, 1);
92
110
  --color-text-400: rgba(80, 80, 90, 1);
93
111
  --color-text-500: rgba(110, 110, 120, 1);
@@ -0,0 +1,154 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/microsoft/vscode-css-languageservice/main/docs/customData.schema.json",
3
+ "version": 1.1,
4
+ "properties": [
5
+ {
6
+ "name": "--kt-badge-color",
7
+ "description": "Category hue. The fill is this colour at 20%.",
8
+ "values": []
9
+ },
10
+ {
11
+ "name": "--kt-header-breakpoint",
12
+ "description": "Where the navigation collapses. 900px.",
13
+ "values": []
14
+ },
15
+ {
16
+ "name": "--kt-header-height",
17
+ "description": "Height of the main row. 64px.",
18
+ "values": []
19
+ }
20
+ ],
21
+ "pseudoElements": [
22
+ { "name": "::part(base)", "description": "The avatar circle." },
23
+ {
24
+ "name": "::part(image)",
25
+ "description": "The `<img>`, when `src` is set and loads."
26
+ },
27
+ { "name": "::part(base)", "description": "The container." },
28
+ {
29
+ "name": "::part(remove)",
30
+ "description": "The remove button, when `removable`."
31
+ },
32
+ { "name": "::part(button)", "description": "The native `<button>`." },
33
+ { "name": "::part(icon)", "description": "The icon, when `icon` is set." },
34
+ { "name": "::part(base)", "description": "The card container." },
35
+ { "name": "::part(media)", "description": "The image or media well." },
36
+ {
37
+ "name": "::part(body)",
38
+ "description": "The header/content/footer column."
39
+ },
40
+ { "name": "::part(base)", "description": "The container." },
41
+ { "name": "::part(header)", "description": "The language row." },
42
+ { "name": "::part(pre)", "description": "The scrolling `<pre>`." },
43
+ { "name": "::part(svg)", "description": "The `<svg>` root." },
44
+ { "name": "::part(base)", "description": "The wrapper." },
45
+ { "name": "::part(key)", "description": "One key." },
46
+ { "name": "::part(action)", "description": "The primary `<kt-button>`." },
47
+ {
48
+ "name": "::part(caret)",
49
+ "description": "The `<kt-button>` that opens the menu."
50
+ },
51
+ { "name": "::part(menu)", "description": "The list of rows." },
52
+ { "name": "::part(item)", "description": "A menu row." },
53
+ { "name": "::part(svg)", "description": "The plot." },
54
+ { "name": "::part(legend)", "description": "The legend." },
55
+ { "name": "::part(table)", "description": "The data table." },
56
+ { "name": "::part(base)", "description": "The container." },
57
+ { "name": "::part(track)", "description": "The bar." },
58
+ { "name": "::part(legend)", "description": "The legend list." },
59
+ { "name": "::part(previous)", "description": "The previous button." },
60
+ { "name": "::part(next)", "description": "The next button." },
61
+ { "name": "::part(info)", "description": "The \"Page 2 / 7\" text." },
62
+ { "name": "::part(base)", "description": "The tile." },
63
+ { "name": "::part(value)", "description": "The figure." },
64
+ { "name": "::part(table)", "description": "The `<table>`." },
65
+ { "name": "::part(header-cell)", "description": "A `<th>`." },
66
+ { "name": "::part(row)", "description": "A `<tr>`." },
67
+ { "name": "::part(cell)", "description": "A `<td>`." },
68
+ { "name": "::part(base)", "description": "The list." },
69
+ { "name": "::part(base)", "description": "The row." },
70
+ { "name": "::part(marker)", "description": "The dot or icon." },
71
+ { "name": "::part(base)", "description": "The alert." },
72
+ { "name": "::part(close)", "description": "The dismiss button." },
73
+ { "name": "::part(base)", "description": "The container." },
74
+ { "name": "::part(track)", "description": "The groove." },
75
+ { "name": "::part(fill)", "description": "The filled portion." },
76
+ { "name": "::part(base)", "description": "The container." },
77
+ { "name": "::part(caption)", "description": "The row above the bar." },
78
+ {
79
+ "name": "::part(value)",
80
+ "description": "The percentage, when `show-value` is set."
81
+ },
82
+ { "name": "::part(line)", "description": "One placeholder line." },
83
+ { "name": "::part(base)", "description": "The toast surface." },
84
+ { "name": "::part(close)", "description": "The dismiss button." },
85
+ { "name": "::part(bubble)", "description": "The tooltip bubble." },
86
+ { "name": "::part(base)", "description": "The dashed drop zone." },
87
+ { "name": "::part(list)", "description": "The list of chosen files." },
88
+ { "name": "::part(base)", "description": "The `<fieldset>`." },
89
+ { "name": "::part(header)", "description": "The heading and description." },
90
+ { "name": "::part(fields)", "description": "The field column." },
91
+ { "name": "::part(footer)", "description": "The action row." },
92
+ { "name": "::part(base)", "description": "The field container." },
93
+ { "name": "::part(control)", "description": "The native `<input>`." },
94
+ { "name": "::part(actions)", "description": "The trailing icon row." },
95
+ { "name": "::part(control)", "description": "The field." },
96
+ { "name": "::part(input)", "description": "The native `<input>`." },
97
+ { "name": "::part(popup)", "description": "The option list." },
98
+ { "name": "::part(option)", "description": "An option row." },
99
+ { "name": "::part(label)", "description": "The `<label>`." },
100
+ {
101
+ "name": "::part(trigger)",
102
+ "description": "The button that opens the list."
103
+ },
104
+ { "name": "::part(popup)", "description": "The option list." },
105
+ { "name": "::part(option)", "description": "An option row." },
106
+ { "name": "::part(base)", "description": "The field container." },
107
+ { "name": "::part(control)", "description": "The native `<textarea>`." },
108
+ { "name": "::part(counter)", "description": "The character counter." },
109
+ {
110
+ "name": "::part(base)",
111
+ "description": "The button carrying `role=\"switch\"`."
112
+ },
113
+ { "name": "::part(track)", "description": "The track." },
114
+ { "name": "::part(thumb)", "description": "The sliding thumb." },
115
+ { "name": "::part(nav)", "description": "The `<nav>`." },
116
+ { "name": "::part(item)", "description": "A trail entry." },
117
+ { "name": "::part(base)", "description": "The `<header>`." },
118
+ { "name": "::part(bar)", "description": "The main row." },
119
+ {
120
+ "name": "::part(bottom)",
121
+ "description": "The second row. The bar is a three-column grid whose outer columns are equal, so the navigation is centred in the bar rather than in whatever the brand and the actions left over. Set `nav-align=\"start\"` to butt it against the brand instead."
122
+ },
123
+ { "name": "::part(base)", "description": "The container." },
124
+ { "name": "::part(heading)", "description": "The heading element." },
125
+ { "name": "::part(base)", "description": "The track." },
126
+ { "name": "::part(option)", "description": "A segment." },
127
+ { "name": "::part(nav)", "description": "The `<nav>`." },
128
+ { "name": "::part(section)", "description": "A section." },
129
+ { "name": "::part(title)", "description": "A section title." },
130
+ {
131
+ "name": "::part(item)",
132
+ "description": "A navigation link or branch button, at any depth."
133
+ },
134
+ { "name": "::part(base)", "description": "The tablist." },
135
+ { "name": "::part(tab)", "description": "One tab." },
136
+ { "name": "::part(button)", "description": "The native `<button>`." },
137
+ { "name": "::part(base)", "description": "The group container." },
138
+ { "name": "::part(base)", "description": "The `<details>`." },
139
+ { "name": "::part(summary)", "description": "The clickable row." },
140
+ { "name": "::part(content)", "description": "The revealed panel." },
141
+ { "name": "::part(dialog)", "description": "The `<dialog>`." },
142
+ { "name": "::part(actions)", "description": "The button row." },
143
+ { "name": "::part(trigger)", "description": "The trigger wrapper." },
144
+ { "name": "::part(panel)", "description": "The floating panel." },
145
+ { "name": "::part(option)", "description": "A menu row." },
146
+ { "name": "::part(dialog)", "description": "The `<dialog>`." },
147
+ { "name": "::part(header)", "description": "The header row." },
148
+ { "name": "::part(body)", "description": "The scrolling body." },
149
+ { "name": "::part(footer)", "description": "The action row." },
150
+ { "name": "::part(dialog)", "description": "The `<dialog>`." },
151
+ { "name": "::part(header)", "description": "The header row." },
152
+ { "name": "::part(body)", "description": "The scrolling body." }
153
+ ]
154
+ }