@kerfjs/ui 5.0.0-beta.23 → 5.0.0-beta.24

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 (193) hide show
  1. package/README.md +1 -0
  2. package/ai/compile-time-contracts-v1.json +2 -1
  3. package/ai/component-catalog-v2-overrides.json +5 -12
  4. package/ai/component-catalog-v2.json +43 -32
  5. package/ai/component-catalog.json +56 -37
  6. package/ai/public-api-signatures-v1.md +29 -16
  7. package/ai/skill.md +4 -4
  8. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  9. package/dist/app-tab.js +1 -1
  10. package/dist/browser/list.js +3 -0
  11. package/dist/catalog.d.ts +8 -4
  12. package/dist/catalog.js +19 -10
  13. package/dist/catalog.js.map +1 -1
  14. package/dist/{chunk-RYRIFZCT.js → chunk-7XRDUG4Y.js} +5 -5
  15. package/dist/{chunk-RYRIFZCT.js.map → chunk-7XRDUG4Y.js.map} +1 -1
  16. package/dist/{chunk-OHU6CI22.js → chunk-B3A3IVO5.js} +2 -2
  17. package/dist/{chunk-OHU6CI22.js.map → chunk-B3A3IVO5.js.map} +1 -1
  18. package/dist/{chunk-ELSJX4W7.js → chunk-FEAMR7S4.js} +2 -2
  19. package/dist/{chunk-ELSJX4W7.js.map → chunk-FEAMR7S4.js.map} +1 -1
  20. package/dist/{chunk-OZWU5ZPZ.js → chunk-IJBSZ4NX.js} +2 -2
  21. package/dist/{chunk-OZWU5ZPZ.js.map → chunk-IJBSZ4NX.js.map} +1 -1
  22. package/dist/chunk-J5BFYY7Q.js +35 -0
  23. package/dist/chunk-J5BFYY7Q.js.map +1 -0
  24. package/dist/{chunk-QQFJMRIB.js → chunk-KWWR5VMS.js} +2 -2
  25. package/dist/{chunk-QQFJMRIB.js.map → chunk-KWWR5VMS.js.map} +1 -1
  26. package/dist/{chunk-K57KRAOV.js → chunk-NWSEP5RT.js} +2 -2
  27. package/dist/{chunk-K57KRAOV.js.map → chunk-NWSEP5RT.js.map} +1 -1
  28. package/dist/{chunk-GP5DP5DL.js → chunk-OJWWHFH3.js} +39 -4
  29. package/dist/chunk-OJWWHFH3.js.map +1 -0
  30. package/dist/{chunk-DSNIYOZ3.js → chunk-PSKN344N.js} +2 -2
  31. package/dist/{chunk-DSNIYOZ3.js.map → chunk-PSKN344N.js.map} +1 -1
  32. package/dist/{chunk-W7YD6E4N.js → chunk-R7ZWUN64.js} +2 -2
  33. package/dist/{chunk-W7YD6E4N.js.map → chunk-R7ZWUN64.js.map} +1 -1
  34. package/dist/{chunk-PZQVSDLH.js → chunk-RKVQEH4J.js} +1 -1
  35. package/dist/chunk-RKVQEH4J.js.map +1 -0
  36. package/dist/{chunk-7L6EHUMV.js → chunk-SYDMYBPG.js} +3 -3
  37. package/dist/chunk-SYDMYBPG.js.map +1 -0
  38. package/dist/{chunk-W4CXQYSG.js → chunk-TB6DY7H5.js} +3 -1
  39. package/dist/chunk-TB6DY7H5.js.map +1 -0
  40. package/dist/{chunk-BBRXX6PF.js → chunk-UFZKLBCF.js} +2 -2
  41. package/dist/{chunk-BBRXX6PF.js.map → chunk-UFZKLBCF.js.map} +1 -1
  42. package/dist/{chunk-AASLYRGE.js → chunk-UKKSMZYT.js} +18 -7
  43. package/dist/chunk-UKKSMZYT.js.map +1 -0
  44. package/dist/{chunk-VLYV65LK.js → chunk-W5L2JSBY.js} +5 -3
  45. package/dist/chunk-W5L2JSBY.js.map +1 -0
  46. package/dist/{chunk-PIDTEQ3U.js → chunk-Y45PPBDV.js} +2 -2
  47. package/dist/{chunk-PIDTEQ3U.js.map → chunk-Y45PPBDV.js.map} +1 -1
  48. package/dist/divider-sides-267FA7sY.d.ts +4 -0
  49. package/dist/index.d.ts +3 -1
  50. package/dist/index.js +16 -15
  51. package/dist/list-action-row.js +1 -1
  52. package/dist/list-header.js +1 -1
  53. package/dist/list-item.js +1 -1
  54. package/dist/list.d.ts +19 -0
  55. package/dist/list.js +3 -0
  56. package/dist/list.js.map +1 -0
  57. package/dist/nav-stack.js +1 -1
  58. package/dist/panel-header.js +1 -1
  59. package/dist/segmented-control.js +1 -1
  60. package/dist/select.js +1 -1
  61. package/dist/skeleton.d.ts +1 -1
  62. package/dist/skeleton.js +1 -1
  63. package/dist/split-view.js +1 -1
  64. package/dist/state-banner.d.ts +4 -2
  65. package/dist/state-banner.js +1 -1
  66. package/dist/styles/catalog.css +8 -2
  67. package/dist/styles/list-item.css +6 -6
  68. package/dist/styles/list.css +43 -0
  69. package/dist/styles/state-banner.css +32 -1
  70. package/dist/styles/styles.css +1 -0
  71. package/dist/styles/sunken-panel.css +4 -0
  72. package/dist/styles/toolbar.css +38 -2
  73. package/dist/sunken-panel.d.ts +5 -2
  74. package/dist/sunken-panel.js +1 -1
  75. package/dist/toolbar-text.js +1 -1
  76. package/dist/toolbar.d.ts +5 -3
  77. package/dist/toolbar.js +1 -1
  78. package/dist/value-table.js +1 -1
  79. package/dist/wire-catalog.d.ts +4 -2
  80. package/dist/wire-catalog.js +95 -36
  81. package/dist/wire-catalog.js.map +1 -1
  82. package/dist/wire-tab-bars.js +1 -1
  83. package/dist/wire-token-search-fields.d.ts +1 -1
  84. package/dist/wire-token-search-fields.js +1 -1
  85. package/docs/accessibility.md +12 -3
  86. package/docs/catalog.md +17 -12
  87. package/docs/component-contract.md +14 -1
  88. package/docs/component-selection.md +6 -2
  89. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  90. package/docs/design/templates/empty-state/filtered.svg +1 -1
  91. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  92. package/docs/design/templates/empty-state/with-action.svg +1 -1
  93. package/docs/design/templates/empty-state-dark.svg +1 -7
  94. package/docs/design/templates/empty-state.svg +1 -7
  95. package/docs/design/templates/list/compact-dark.svg +1 -0
  96. package/docs/design/templates/list/compact.svg +1 -0
  97. package/docs/design/templates/list/stack-dark.svg +1 -0
  98. package/docs/design/templates/list/stack.svg +1 -0
  99. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  100. package/docs/design/templates/list-action-row/default.svg +1 -1
  101. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  102. package/docs/design/templates/list-action-row/selected.svg +1 -1
  103. package/docs/design/templates/list-action-row-dark.svg +1 -7
  104. package/docs/design/templates/list-action-row.svg +1 -7
  105. package/docs/design/templates/list-dark.svg +1 -0
  106. package/docs/design/templates/list-header/action-dark.svg +1 -1
  107. package/docs/design/templates/list-header/action.svg +1 -1
  108. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  109. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  110. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  111. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  112. package/docs/design/templates/list-header-dark.svg +1 -11
  113. package/docs/design/templates/list-header.svg +1 -11
  114. package/docs/design/templates/list-item/default-dark.svg +1 -1
  115. package/docs/design/templates/list-item/default.svg +1 -1
  116. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  117. package/docs/design/templates/list-item/multiline.svg +1 -1
  118. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  119. package/docs/design/templates/list-item/selected.svg +1 -1
  120. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  121. package/docs/design/templates/list-item/trailing.svg +1 -1
  122. package/docs/design/templates/list-item-dark.svg +1 -11
  123. package/docs/design/templates/list-item.svg +1 -11
  124. package/docs/design/templates/list.svg +1 -0
  125. package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -1
  126. package/docs/design/templates/panel-header/icon-actions.svg +1 -1
  127. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -1
  128. package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -1
  129. package/docs/design/templates/panel-header-dark.svg +1 -13
  130. package/docs/design/templates/panel-header.svg +1 -13
  131. package/docs/design/templates/segmented-control-dark.svg +1 -7
  132. package/docs/design/templates/segmented-control.svg +1 -7
  133. package/docs/design/templates/skeleton-dark.svg +1 -9
  134. package/docs/design/templates/skeleton.svg +1 -9
  135. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  136. package/docs/design/templates/state-banner/danger.svg +1 -1
  137. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  138. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  139. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  140. package/docs/design/templates/state-banner/info.svg +1 -1
  141. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  142. package/docs/design/templates/state-banner/success.svg +1 -1
  143. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  144. package/docs/design/templates/state-banner/warning.svg +1 -1
  145. package/docs/design/templates/state-banner-dark.svg +1 -11
  146. package/docs/design/templates/state-banner.svg +1 -11
  147. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  148. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  149. package/docs/design/templates/tab-bar-dark.svg +1 -5
  150. package/docs/design/templates/tab-bar.svg +1 -5
  151. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  152. package/docs/design/templates/token-search-field/empty.svg +1 -1
  153. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  154. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  155. package/docs/design/templates/token-search-field-dark.svg +1 -7
  156. package/docs/design/templates/token-search-field.svg +1 -7
  157. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  158. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  159. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  160. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  161. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  162. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  163. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  164. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  165. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  166. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  167. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  168. package/docs/design/templates/toolbar-control-group.svg +1 -11
  169. package/docs/design/templates/toolbar-dark.svg +1 -5
  170. package/docs/design/templates/toolbar-text-dark.svg +1 -9
  171. package/docs/design/templates/toolbar-text.svg +1 -9
  172. package/docs/design/templates/toolbar.svg +1 -5
  173. package/docs/design/templates/value-table/details-dark.svg +1 -1
  174. package/docs/design/templates/value-table/details.svg +1 -1
  175. package/docs/design/templates/value-table-dark.svg +1 -5
  176. package/docs/design/templates/value-table.svg +1 -5
  177. package/docs/design/templates.md +25 -14
  178. package/docs/sunken-panel.md +11 -1
  179. package/docs/type-contracts.md +6 -3
  180. package/docs/ui-doctor.md +6 -4
  181. package/docs/ux-demo.md +1 -1
  182. package/doctor/index.mjs +5 -2
  183. package/llms.txt +15 -3
  184. package/package.json +8 -2
  185. package/traversal-exclusions.mjs +7 -1
  186. package/ux-demo/recipes/collapsible-sidebar.tsx +1 -1
  187. package/ux-demo/recipes/navigation-sidebar.tsx +1 -1
  188. package/dist/chunk-7L6EHUMV.js.map +0 -1
  189. package/dist/chunk-AASLYRGE.js.map +0 -1
  190. package/dist/chunk-GP5DP5DL.js.map +0 -1
  191. package/dist/chunk-PZQVSDLH.js.map +0 -1
  192. package/dist/chunk-VLYV65LK.js.map +0 -1
  193. package/dist/chunk-W4CXQYSG.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { filterDataAttributes } from './chunk-SRSJO5QE.js';
2
- import { Skeleton } from './chunk-PZQVSDLH.js';
2
+ import { Skeleton } from './chunk-RKVQEH4J.js';
3
3
  import { jsxs, jsx } from 'kerfjs/jsx-runtime';
4
4
 
5
5
  var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
@@ -102,4 +102,4 @@ function AppTab({
102
102
 
103
103
  export { AppTab };
104
104
 
105
- //# sourceMappingURL=chunk-PIDTEQ3U.js.map
105
+ //# sourceMappingURL=chunk-Y45PPBDV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/app-tab.tsx"],"names":[],"mappings":"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","file":"chunk-PIDTEQ3U.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from './extension-attributes.js';\nimport { Skeleton } from './skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n }\n>;\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: SafeHtml;\n trailing?: SafeHtml;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n /** Render as an unanimated loading skeleton, disabling select/close and dragging. */\n placeholder?: boolean;\n rootAttributes?: AppTabRootAttributes;\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.25\"\n stroke-linecap=\"round\"\n >\n <path d=\"m7 7 10 10\"></path>\n <path d=\"M17 7 7 17\"></path>\n </svg>\n );\n}\n\nexport function AppTab({\n id,\n name,\n selected = false,\n closable = true,\n draggable = false,\n leading,\n trailing,\n closeIcon,\n selectAction = 'select-tab',\n closeAction = 'close-tab',\n className = '',\n placeholder = false,\n rootAttributes = {},\n}: AppTabProps) {\n const keyshortcuts = [\n closable ? 'Delete Backspace' : '',\n draggable ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const extensionAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n return (\n <div\n {...extensionAttributes}\n class={`kui-app-tab ${className}`.trim()}\n data-component=\"app-tab\"\n data-tab-id={id}\n data-selected={String(selected)}\n data-placeholder={placeholder ? 'true' : undefined}\n draggable={placeholder ? 'false' : draggable ? 'true' : 'false'}\n aria-busy={placeholder ? 'true' : undefined}\n >\n {closable && (\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"kui-app-tab__close\"\n data-action={placeholder ? undefined : closeAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n aria-label={`Close ${name}`}\n title={`Close ${name}`}\n >\n <span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n )}\n <button\n type=\"button\"\n class=\"kui-app-tab__select\"\n role=\"tab\"\n aria-selected={String(selected)}\n aria-keyshortcuts={placeholder ? undefined : keyshortcuts || undefined}\n data-action={placeholder ? undefined : selectAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n tabindex={placeholder ? '-1' : selected ? '0' : '-1'}\n >\n {leading}\n <span class=\"kui-app-tab__name\">\n {placeholder ? <Skeleton width=\"7em\" /> : name}\n </span>\n {closable || trailing ? (\n <span class=\"kui-app-tab__trailing\">{trailing}</span>\n ) : undefined}\n </button>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/app-tab.tsx"],"names":[],"mappings":"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","file":"chunk-Y45PPBDV.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from './extension-attributes.js';\nimport { Skeleton } from './skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n }\n>;\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: SafeHtml;\n trailing?: SafeHtml;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n /** Render as an unanimated loading skeleton, disabling select/close and dragging. */\n placeholder?: boolean;\n rootAttributes?: AppTabRootAttributes;\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.25\"\n stroke-linecap=\"round\"\n >\n <path d=\"m7 7 10 10\"></path>\n <path d=\"M17 7 7 17\"></path>\n </svg>\n );\n}\n\nexport function AppTab({\n id,\n name,\n selected = false,\n closable = true,\n draggable = false,\n leading,\n trailing,\n closeIcon,\n selectAction = 'select-tab',\n closeAction = 'close-tab',\n className = '',\n placeholder = false,\n rootAttributes = {},\n}: AppTabProps) {\n const keyshortcuts = [\n closable ? 'Delete Backspace' : '',\n draggable ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const extensionAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n return (\n <div\n {...extensionAttributes}\n class={`kui-app-tab ${className}`.trim()}\n data-component=\"app-tab\"\n data-tab-id={id}\n data-selected={String(selected)}\n data-placeholder={placeholder ? 'true' : undefined}\n draggable={placeholder ? 'false' : draggable ? 'true' : 'false'}\n aria-busy={placeholder ? 'true' : undefined}\n >\n {closable && (\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"kui-app-tab__close\"\n data-action={placeholder ? undefined : closeAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n aria-label={`Close ${name}`}\n title={`Close ${name}`}\n >\n <span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n )}\n <button\n type=\"button\"\n class=\"kui-app-tab__select\"\n role=\"tab\"\n aria-selected={String(selected)}\n aria-keyshortcuts={placeholder ? undefined : keyshortcuts || undefined}\n data-action={placeholder ? undefined : selectAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n tabindex={placeholder ? '-1' : selected ? '0' : '-1'}\n >\n {leading}\n <span class=\"kui-app-tab__name\">\n {placeholder ? <Skeleton width=\"7em\" /> : name}\n </span>\n {closable || trailing ? (\n <span class=\"kui-app-tab__trailing\">{trailing}</span>\n ) : undefined}\n </button>\n </div>\n );\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /** Canonical physical edge combinations for components that draw dividers. */
2
+ type DividerSides = '' | 't' | 'r' | 'b' | 'l' | 'tr' | 'tb' | 'tl' | 'rb' | 'rl' | 'bl' | 'trb' | 'trl' | 'tbl' | 'rbl' | 'trbl';
3
+
4
+ export type { DividerSides as D };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { AppTab, AppTabProps } from './app-tab.js';
2
2
  export { DisclosureArrow, DisclosureArrowProps, DisclosureDirection } from './disclosure-arrow.js';
3
3
  export { EmptyState, EmptyStateProps } from './empty-state.js';
4
4
  export { FloatingToolbar, FloatingToolbarPosition, FloatingToolbarProps } from './floating-toolbar.js';
5
+ export { List, ListProps } from './list.js';
5
6
  export { ListActionRow, ListActionRowProps } from './list-action-row.js';
6
7
  export { ListHeader, ListHeaderProps } from './list-header.js';
7
8
  export { ListInsetControl, ListInsetControlProps } from './list-inset-control.js';
@@ -16,7 +17,7 @@ export { SegmentedControl, SegmentedControlAppearance, SegmentedControlChoice, S
16
17
  export { Select, SelectChoice, SelectProps } from './select.js';
17
18
  export { Skeleton, SkeletonProps } from './skeleton.js';
18
19
  export { StateBanner, StateBannerProps, StateBannerTone, StateBannerUrgency } from './state-banner.js';
19
- export { SunkenPanel, SunkenPanelProps } from './sunken-panel.js';
20
+ export { SunkenPanel, SunkenPanelProps, SunkenPanelShape } from './sunken-panel.js';
20
21
  export { TabActivation, TabBar, TabBarProps } from './tab-bar.js';
21
22
  export { TokenSearchEditorAttributes, TokenSearchField, TokenSearchFieldProps, TokenSearchFieldValue, TokenSearchToken, placeTokenSearchCaret, readTokenSearchField } from './token-search-field.js';
22
23
  export { Toolbar, ToolbarProps } from './toolbar.js';
@@ -26,5 +27,6 @@ export { ValueTable, ValueTableProps, ValueTableRow, ValueTableRowProps } from '
26
27
  export { ResizeCommit, WireResizableRegionsOptions, wireResizableRegions } from './wire-resizable-regions.js';
27
28
  export { TabDropPosition, TabReorder, TabReorderSource, WireTabBarsOptions, reorderTabs, wireTabBars } from './wire-tab-bars.js';
28
29
  export { TokenSearchCollapsibleOptions, TokenSearchEdit, TokenSearchFieldsHandle, TokenSearchSubmit, WireTokenSearchFieldsOptions, wireTokenSearchFields } from './wire-token-search-fields.js';
30
+ export { D as DividerSides } from './divider-sides-267FA7sY.js';
29
31
  import 'kerfjs';
30
32
  import 'lucide';
package/dist/index.js CHANGED
@@ -1,27 +1,28 @@
1
- export { wireTokenSearchFields } from './chunk-GP5DP5DL.js';
2
- export { ValueTable, ValueTableRow } from './chunk-QQFJMRIB.js';
1
+ export { reorderTabs, wireTabBars } from './chunk-UKKSMZYT.js';
2
+ export { wireTokenSearchFields } from './chunk-OJWWHFH3.js';
3
+ export { ValueTable, ValueTableRow } from './chunk-KWWR5VMS.js';
3
4
  export { wireResizableRegions } from './chunk-DPDBVKNA.js';
4
- export { reorderTabs, wireTabBars } from './chunk-AASLYRGE.js';
5
- export { StateBanner } from './chunk-VLYV65LK.js';
6
- export { SunkenPanel } from './chunk-W4CXQYSG.js';
5
+ export { StateBanner } from './chunk-W5L2JSBY.js';
6
+ export { SunkenPanel } from './chunk-TB6DY7H5.js';
7
7
  export { TabBar } from './chunk-M7JBER5U.js';
8
8
  export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-7KEUJIIC.js';
9
- export { PanelHeader } from './chunk-RYRIFZCT.js';
10
- export { ToolbarText } from './chunk-W7YD6E4N.js';
9
+ export { PanelHeader } from './chunk-7XRDUG4Y.js';
10
+ export { ToolbarText } from './chunk-R7ZWUN64.js';
11
11
  export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-NENBUYX5.js';
12
- export { SegmentedControl } from './chunk-OZWU5ZPZ.js';
13
- export { Select } from './chunk-K57KRAOV.js';
14
- export { ListActionRow } from './chunk-BBRXX6PF.js';
12
+ export { SegmentedControl } from './chunk-IJBSZ4NX.js';
13
+ export { Select } from './chunk-NWSEP5RT.js';
14
+ export { ListActionRow } from './chunk-UFZKLBCF.js';
15
15
  export { ListInsetControl } from './chunk-QO55FN2Y.js';
16
16
  export { ListInsetText } from './chunk-FEY65TBV.js';
17
- export { AppTab } from './chunk-PIDTEQ3U.js';
17
+ export { AppTab } from './chunk-Y45PPBDV.js';
18
18
  export { Pane } from './chunk-JRKSK2HX.js';
19
- export { Toolbar } from './chunk-7L6EHUMV.js';
19
+ export { Toolbar } from './chunk-SYDMYBPG.js';
20
20
  export { ToolbarControlGroup } from './chunk-5VTB2BKP.js';
21
- export { ListHeader } from './chunk-DSNIYOZ3.js';
22
- export { ListItem } from './chunk-ELSJX4W7.js';
21
+ export { ListHeader } from './chunk-PSKN344N.js';
22
+ export { ListItem } from './chunk-FEAMR7S4.js';
23
+ export { List } from './chunk-J5BFYY7Q.js';
23
24
 
24
- export { Skeleton } from './chunk-PZQVSDLH.js';
25
+ export { Skeleton } from './chunk-RKVQEH4J.js';
25
26
  export { DisclosureArrow } from './chunk-Y6LYKFXY.js';
26
27
  export { LucideIcon } from './chunk-W2FK7ZNY.js';
27
28
  export { EmptyState } from './chunk-PX3YSS5C.js';
@@ -1,4 +1,4 @@
1
- export { ListActionRow } from './chunk-BBRXX6PF.js';
1
+ export { ListActionRow } from './chunk-UFZKLBCF.js';
2
2
 
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- export { ListHeader } from './chunk-DSNIYOZ3.js';
1
+ export { ListHeader } from './chunk-PSKN344N.js';
2
2
 
3
3
 
4
4
 
package/dist/list-item.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ListItem } from './chunk-ELSJX4W7.js';
1
+ export { ListItem } from './chunk-FEAMR7S4.js';
2
2
 
3
3
 
4
4
 
package/dist/list.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+ import { D as DividerSides } from './divider-sides-267FA7sY.js';
3
+
4
+ interface ListProps {
5
+ children?: SafeHtml | readonly SafeHtml[];
6
+ /** Use the standard item gap, or supply browser CSS such as `var(--kui-space-2xs)` or `0.25rem`. Defaults to no gap. */
7
+ gap?: boolean | string;
8
+ /** Allow this list to grow/shrink, or supply a CSS flex shorthand. */
9
+ flex?: boolean | string;
10
+ /** Own vertical scrolling and overscroll containment. */
11
+ scrollable?: boolean;
12
+ /** Physical divider edges in canonical top/right/bottom/left order. */
13
+ dividerSides?: DividerSides;
14
+ className?: string;
15
+ }
16
+ /** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
17
+ declare function List({ children, gap, flex, scrollable, dividerSides, className, }: ListProps): SafeHtml;
18
+
19
+ export { DividerSides, List, type ListProps };
package/dist/list.js ADDED
@@ -0,0 +1,3 @@
1
+ export { List } from './chunk-J5BFYY7Q.js';
2
+
3
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list.js"}
package/dist/nav-stack.js CHANGED
@@ -1,4 +1,4 @@
1
- export { NavStack } from './chunk-OHU6CI22.js';
1
+ export { NavStack } from './chunk-B3A3IVO5.js';
2
2
 
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- export { PanelHeader } from './chunk-RYRIFZCT.js';
1
+ export { PanelHeader } from './chunk-7XRDUG4Y.js';
2
2
 
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- export { SegmentedControl } from './chunk-OZWU5ZPZ.js';
1
+ export { SegmentedControl } from './chunk-IJBSZ4NX.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=segmented-control.js.map
package/dist/select.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Select } from './chunk-K57KRAOV.js';
1
+ export { Select } from './chunk-NWSEP5RT.js';
2
2
 
3
3
 
4
4
 
@@ -1,7 +1,7 @@
1
1
  import * as kerfjs from 'kerfjs';
2
2
 
3
3
  interface SkeletonProps {
4
- /** Width as any CSS length (e.g. `remify(120px)`, `60%`). Defaults to filling its slot. */
4
+ /** Width as any browser CSS length (e.g. `7.5rem`, `60%`). Defaults to filling its slot. */
5
5
  width?: string;
6
6
  /** Height as any CSS length. Defaults to a single text line. */
7
7
  height?: string;
package/dist/skeleton.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Skeleton } from './chunk-PZQVSDLH.js';
1
+ export { Skeleton } from './chunk-RKVQEH4J.js';
2
2
 
3
3
  //# sourceMappingURL=skeleton.js.map
@@ -1,4 +1,4 @@
1
- import { NavStack } from './chunk-OHU6CI22.js';
1
+ import { NavStack } from './chunk-B3A3IVO5.js';
2
2
 
3
3
  import { ResizableRegion } from './chunk-NENBUYX5.js';
4
4
 
@@ -5,14 +5,16 @@ type StateBannerUrgency = 'status' | 'alert';
5
5
  interface StateBannerProps {
6
6
  title: string;
7
7
  detail?: string;
8
+ /** Optional compact status or count shown beside the title. */
9
+ badge?: string;
8
10
  icon?: SafeHtml;
9
11
  action?: SafeHtml;
10
12
  tone?: StateBannerTone;
11
13
  urgency?: StateBannerUrgency;
12
14
  className?: string;
13
- /** Render the title and detail as unanimated loading skeletons, keeping the icon and tone. */
15
+ /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. */
14
16
  placeholder?: boolean;
15
17
  }
16
- declare function StateBanner({ title, detail, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
18
+ declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
17
19
 
18
20
  export { StateBanner, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
@@ -1,4 +1,4 @@
1
- export { StateBanner } from './chunk-VLYV65LK.js';
1
+ export { StateBanner } from './chunk-W5L2JSBY.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=state-banner.js.map
@@ -325,8 +325,8 @@
325
325
  }
326
326
 
327
327
  /* Optional devtools-style geometry overlay. `wireCatalogGeometryOverlay` draws
328
- a quiet dashed outer bound for transparent specimens and orange bands for
329
- non-zero margins. */
328
+ computed border edges, a quiet dashed bound for transparent borderless
329
+ specimens, and orange bands for non-zero margins. */
330
330
  .kui-catalog__geometry-overlay {
331
331
  position: absolute;
332
332
  z-index: 3;
@@ -335,6 +335,7 @@
335
335
  }
336
336
 
337
337
  .kui-catalog__geometry-bound,
338
+ .kui-catalog__geometry-border,
338
339
  .kui-catalog__geometry-margin {
339
340
  position: absolute;
340
341
  top: 0;
@@ -346,6 +347,11 @@
346
347
  border: 1px dashed color-mix(in srgb, var(--kui-color-text) 40%, transparent);
347
348
  }
348
349
 
350
+ .kui-catalog__geometry-border {
351
+ border: 0 solid
352
+ color-mix(in srgb, var(--kui-color-accent-text) 72%, transparent);
353
+ }
354
+
349
355
  .kui-catalog__geometry-margin {
350
356
  background: color-mix(in srgb, #f6a94c 55%, transparent);
351
357
  }
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  .kui-list-item[data-has-icon="true"] {
29
- grid-template-columns: 1.5rem minmax(0, 1fr) auto;
29
+ grid-template-columns: 1.125rem minmax(0, 1fr) auto;
30
30
  }
31
31
 
32
32
  .kui-list-item[data-has-icon="true"] .kui-list-item__icon {
@@ -75,16 +75,16 @@
75
75
 
76
76
  .kui-list-item__icon {
77
77
  display: grid;
78
- width: 1.5rem;
79
- height: 1.5rem;
78
+ width: 1.125rem;
79
+ height: 1.125rem;
80
80
  color: currentColor;
81
81
  place-items: center;
82
82
  }
83
83
 
84
84
  .kui-list-item__icon svg {
85
85
  display: block;
86
- width: 1.5rem;
87
- height: 1.5rem;
86
+ width: 1.125rem;
87
+ height: 1.125rem;
88
88
  }
89
89
 
90
90
  .kui-list-item__label {
@@ -106,7 +106,7 @@
106
106
 
107
107
  .kui-list-item[data-multiline="true"] .kui-list-item__icon {
108
108
  align-self: start;
109
- margin-block-start: calc((1lh - 1.5rem) / 2);
109
+ margin-block-start: calc((1lh - 1.125rem) / 2);
110
110
  }
111
111
 
112
112
  .kui-list-item__trailing {
@@ -0,0 +1,43 @@
1
+ .kui-list {
2
+ --kui-list-divider-color: var(--kui-color-border);
3
+ --kui-list-gap: var(--kui-layout-item-gap, 0.5rem);
4
+ --_kui-list-divider-top: transparent;
5
+ --_kui-list-divider-right: transparent;
6
+ --_kui-list-divider-bottom: transparent;
7
+ --_kui-list-divider-left: transparent;
8
+
9
+ display: flex;
10
+ min-width: 0;
11
+ min-height: 0;
12
+ box-sizing: border-box;
13
+ flex: var(--_kui-list-flex, initial);
14
+ flex-direction: column;
15
+ align-items: stretch;
16
+ gap: var(--_kui-list-gap, 0);
17
+ box-shadow:
18
+ inset 0 1px var(--_kui-list-divider-top),
19
+ inset -1px 0 var(--_kui-list-divider-right),
20
+ inset 0 -1px var(--_kui-list-divider-bottom),
21
+ inset 1px 0 var(--_kui-list-divider-left);
22
+ }
23
+
24
+ .kui-list[data-scrollable="true"] {
25
+ overflow-y: auto;
26
+ overscroll-behavior-y: contain;
27
+ }
28
+
29
+ .kui-list[divider-sides*="t"] {
30
+ --_kui-list-divider-top: var(--kui-list-divider-color);
31
+ }
32
+
33
+ .kui-list[divider-sides*="r"] {
34
+ --_kui-list-divider-right: var(--kui-list-divider-color);
35
+ }
36
+
37
+ .kui-list[divider-sides*="b"] {
38
+ --_kui-list-divider-bottom: var(--kui-list-divider-color);
39
+ }
40
+
41
+ .kui-list[divider-sides*="l"] {
42
+ --_kui-list-divider-left: var(--kui-list-divider-color);
43
+ }
@@ -21,6 +21,14 @@
21
21
  )
22
22
  );
23
23
  --_kui-state-banner-detail: var(--kui-state-banner-detail, currentColor);
24
+ --_kui-state-banner-badge-background: var(
25
+ --kui-state-banner-badge-background,
26
+ var(--_kui-state-banner-foreground)
27
+ );
28
+ --_kui-state-banner-badge-foreground: var(
29
+ --kui-state-banner-badge-foreground,
30
+ var(--kui-color-surface)
31
+ );
24
32
  --_kui-state-banner-action-background: var(
25
33
  --kui-state-banner-action-background,
26
34
  color-mix(in srgb, var(--kui-color-surface) 52%, transparent)
@@ -129,7 +137,23 @@
129
137
  .kui-state-banner__copy strong {
130
138
  font-size: var(--kui-font-xs);
131
139
  }
132
- .kui-state-banner__copy span {
140
+ .kui-state-banner__badge {
141
+ display: inline-grid;
142
+ min-width: 1.25rem;
143
+ min-height: 1.25rem;
144
+ padding-inline: 0.35rem;
145
+ box-sizing: border-box;
146
+ border-radius: var(--kui-radius-pill);
147
+ color: var(--_kui-state-banner-badge-foreground);
148
+ background: var(--_kui-state-banner-badge-background);
149
+ place-items: center;
150
+ flex: none;
151
+ font-size: var(--kui-font-2xs);
152
+ font-weight: 700;
153
+ letter-spacing: 0;
154
+ line-height: 1;
155
+ }
156
+ .kui-state-banner__detail {
133
157
  overflow: hidden;
134
158
  color: var(--_kui-state-banner-detail);
135
159
  font-size: var(--kui-font-2xs);
@@ -162,6 +186,13 @@
162
186
  @media (max-width: 36rem) {
163
187
  .kui-state-banner__copy {
164
188
  display: grid;
189
+ grid-template-columns: auto 1fr;
165
190
  gap: 0.05rem;
166
191
  }
192
+ .kui-state-banner__badge {
193
+ justify-self: start;
194
+ }
195
+ .kui-state-banner__detail {
196
+ grid-column: 1 / -1;
197
+ }
167
198
  }
@@ -5,6 +5,7 @@
5
5
  @import "./toolbar.css";
6
6
  @import "./toolbar-control-group.css";
7
7
  @import "./toolbar-text.css";
8
+ @import "./list.css";
8
9
  @import "./list-action-row.css";
9
10
  @import "./list-item.css";
10
11
  @import "./list-header.css";
@@ -16,3 +16,7 @@
16
16
  flex-direction: column;
17
17
  gap: var(--kui-sunken-panel-gap, 0.5rem);
18
18
  }
19
+
20
+ .kui-sunken-panel[data-shape="square"] {
21
+ border-radius: 0;
22
+ }
@@ -20,8 +20,44 @@
20
20
  grid-template-columns: minmax(0, 1fr) auto;
21
21
  }
22
22
 
23
- .kui-toolbar[data-divider="true"] {
24
- box-shadow: inset 0 -1px var(--kui-color-border);
23
+ .kui-toolbar {
24
+ --_kui-toolbar-divider-top: transparent;
25
+ --_kui-toolbar-divider-right: transparent;
26
+ --_kui-toolbar-divider-bottom: transparent;
27
+ --_kui-toolbar-divider-left: transparent;
28
+ box-shadow:
29
+ inset 0 1px var(--_kui-toolbar-divider-top),
30
+ inset -1px 0 var(--_kui-toolbar-divider-right),
31
+ inset 0 -1px var(--_kui-toolbar-divider-bottom),
32
+ inset 1px 0 var(--_kui-toolbar-divider-left);
33
+ }
34
+
35
+ .kui-toolbar[divider-sides*="t"] {
36
+ --_kui-toolbar-divider-top: var(
37
+ --kui-toolbar-divider-color,
38
+ var(--kui-color-border)
39
+ );
40
+ }
41
+
42
+ .kui-toolbar[divider-sides*="r"] {
43
+ --_kui-toolbar-divider-right: var(
44
+ --kui-toolbar-divider-color,
45
+ var(--kui-color-border)
46
+ );
47
+ }
48
+
49
+ .kui-toolbar[divider-sides*="b"] {
50
+ --_kui-toolbar-divider-bottom: var(
51
+ --kui-toolbar-divider-color,
52
+ var(--kui-color-border)
53
+ );
54
+ }
55
+
56
+ .kui-toolbar[divider-sides*="l"] {
57
+ --_kui-toolbar-divider-left: var(
58
+ --kui-toolbar-divider-color,
59
+ var(--kui-color-border)
60
+ );
25
61
  }
26
62
 
27
63
  .kui-toolbar__leading,
@@ -1,9 +1,12 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
2
 
3
+ type SunkenPanelShape = 'rounded' | 'square';
3
4
  interface SunkenPanelProps {
4
5
  children?: SafeHtml | readonly SafeHtml[];
5
6
  /** Optional accessible landmark name for a distinct application region. */
6
7
  ariaLabel?: string;
8
+ /** Corner shape: a rounded rectangle (default) or square corners. */
9
+ shape?: SunkenPanelShape;
7
10
  className?: string;
8
11
  }
9
12
  /**
@@ -11,6 +14,6 @@ interface SunkenPanelProps {
11
14
  * stack. The panel owns its background and padding; children own their own
12
15
  * borders and internal geometry.
13
16
  */
14
- declare function SunkenPanel({ children, ariaLabel, className, }: SunkenPanelProps): SafeHtml;
17
+ declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): SafeHtml;
15
18
 
16
- export { SunkenPanel, type SunkenPanelProps };
19
+ export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
@@ -1,3 +1,3 @@
1
- export { SunkenPanel } from './chunk-W4CXQYSG.js';
1
+ export { SunkenPanel } from './chunk-TB6DY7H5.js';
2
2
 
3
3
  //# sourceMappingURL=sunken-panel.js.map
@@ -1,4 +1,4 @@
1
- export { ToolbarText } from './chunk-W7YD6E4N.js';
1
+ export { ToolbarText } from './chunk-R7ZWUN64.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=toolbar-text.js.map
package/dist/toolbar.d.ts CHANGED
@@ -1,13 +1,15 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { D as DividerSides } from './divider-sides-267FA7sY.js';
2
3
 
3
4
  interface ToolbarProps {
4
5
  leading?: SafeHtml;
5
6
  center?: SafeHtml;
6
7
  trailing?: SafeHtml;
7
8
  label?: string;
8
- divider?: boolean;
9
+ /** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
10
+ dividerSides?: DividerSides;
9
11
  className?: string;
10
12
  }
11
- declare function Toolbar({ leading, center, trailing, label, divider, className, }: ToolbarProps): SafeHtml;
13
+ declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): SafeHtml;
12
14
 
13
- export { Toolbar, type ToolbarProps };
15
+ export { DividerSides, Toolbar, type ToolbarProps };
package/dist/toolbar.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Toolbar } from './chunk-7L6EHUMV.js';
1
+ export { Toolbar } from './chunk-SYDMYBPG.js';
2
2
 
3
3
  //# sourceMappingURL=toolbar.js.map
@@ -1,4 +1,4 @@
1
- export { ValueTable, ValueTableRow } from './chunk-QQFJMRIB.js';
1
+ export { ValueTable, ValueTableRow } from './chunk-KWWR5VMS.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=value-table.js.map
@@ -39,8 +39,10 @@ interface CatalogRevealOptions {
39
39
  declare function revealCatalogEntry(root: HTMLElement, id: string, { block, inline, behavior, media, }?: CatalogRevealOptions): () => void;
40
40
  /**
41
41
  * Keep a Catalog's opt-in geometry overlay synchronized with its preview.
42
- * Transparent specimens receive a dashed outer bound and positive margins use
43
- * devtools-style orange bands. Returns a disposer.
42
+ * Specimens receive computed border highlights (or a dashed bound when they
43
+ * have no border and are transparent), while positive computed margins use
44
+ * devtools-style orange bands. CSS/stylesheet-only changes are observed too.
45
+ * Returns a disposer.
44
46
  */
45
47
  declare function wireCatalogGeometryOverlay(root: HTMLElement): () => void;
46
48
  /**