@kerfjs/ui 4.4.1 → 5.0.0-beta.10

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 (292) hide show
  1. package/README.md +240 -10
  2. package/ai/component-catalog.json +4766 -0
  3. package/ai/component-catalog.schema.json +79 -0
  4. package/ai/public-api-signatures-v1.md +1327 -0
  5. package/ai/skill.md +73 -11
  6. package/ai/webawesome-jsx-signatures-v1.md +106 -0
  7. package/dist/app-tab.d.ts +14 -2
  8. package/dist/app-tab.js +3 -1
  9. package/dist/browser/app-tab.js +3 -2
  10. package/dist/browser/disclosure-arrow.js +4 -0
  11. package/dist/browser/empty-state.js +3 -3
  12. package/dist/browser/list-action-row.js +4 -0
  13. package/dist/browser/list-header.js +6 -0
  14. package/dist/browser/list-item.js +4 -0
  15. package/dist/browser/loading-spinner.js +2 -2
  16. package/dist/browser/lucide-icon.js +2 -2
  17. package/dist/browser/panel-header.js +7 -0
  18. package/dist/browser/resizable-region.js +2 -2
  19. package/dist/browser/segmented-control.js +3 -2
  20. package/dist/browser/select.js +4 -3
  21. package/dist/browser/skeleton.js +3 -0
  22. package/dist/browser/state-banner.js +3 -2
  23. package/dist/browser/tab-bar.js +2 -2
  24. package/dist/browser/token-search-field.js +4 -0
  25. package/dist/browser/toolbar-control-group.js +2 -2
  26. package/dist/browser/toolbar-text.js +3 -2
  27. package/dist/browser/toolbar.js +2 -2
  28. package/dist/browser/value-table.js +3 -2
  29. package/dist/catalog.d.ts +119 -0
  30. package/dist/catalog.js +143 -0
  31. package/dist/catalog.js.map +1 -0
  32. package/dist/chunk-2Z5TWHKQ.js +34 -0
  33. package/dist/chunk-2Z5TWHKQ.js.map +1 -0
  34. package/dist/chunk-37T3VNIZ.js +19 -0
  35. package/dist/chunk-37T3VNIZ.js.map +1 -0
  36. package/dist/chunk-56RJXPHG.js +43 -0
  37. package/dist/chunk-56RJXPHG.js.map +1 -0
  38. package/dist/chunk-7BR3DO2A.js +31 -0
  39. package/dist/chunk-7BR3DO2A.js.map +1 -0
  40. package/dist/chunk-7JB7VPRI.js +34 -0
  41. package/dist/chunk-7JB7VPRI.js.map +1 -0
  42. package/dist/chunk-7LDCTU7D.js +134 -0
  43. package/dist/chunk-7LDCTU7D.js.map +1 -0
  44. package/dist/{chunk-4HHCYSGT.js → chunk-AQNKJRFH.js} +2 -2
  45. package/dist/{chunk-4HHCYSGT.js.map → chunk-AQNKJRFH.js.map} +1 -1
  46. package/dist/{chunk-MBR3TYNL.js → chunk-AVZHJN6C.js} +3 -3
  47. package/dist/chunk-AVZHJN6C.js.map +1 -0
  48. package/dist/chunk-B24C4A6T.js +22 -0
  49. package/dist/chunk-B24C4A6T.js.map +1 -0
  50. package/dist/chunk-BLK3UEEI.js +23 -0
  51. package/dist/chunk-BLK3UEEI.js.map +1 -0
  52. package/dist/chunk-CVZYNJJ5.js +265 -0
  53. package/dist/chunk-CVZYNJJ5.js.map +1 -0
  54. package/dist/chunk-I7INRJO4.js +17 -0
  55. package/dist/chunk-I7INRJO4.js.map +1 -0
  56. package/dist/chunk-L4OKFDJY.js +24 -0
  57. package/dist/chunk-L4OKFDJY.js.map +1 -0
  58. package/dist/chunk-LC3YSAZC.js +39 -0
  59. package/dist/chunk-LC3YSAZC.js.map +1 -0
  60. package/dist/{chunk-3O7ZEUW2.js → chunk-M5JRI6MN.js} +3 -3
  61. package/dist/chunk-M5JRI6MN.js.map +1 -0
  62. package/dist/chunk-RUNWEPR4.js +10 -0
  63. package/dist/chunk-RUNWEPR4.js.map +1 -0
  64. package/dist/chunk-W5EQ3HYQ.js +42 -0
  65. package/dist/chunk-W5EQ3HYQ.js.map +1 -0
  66. package/dist/{chunk-MQIZAD4A.js → chunk-XXMOARTH.js} +5 -3
  67. package/dist/chunk-XXMOARTH.js.map +1 -0
  68. package/dist/chunk-Y5MRDTLC.js +20 -0
  69. package/dist/chunk-Y5MRDTLC.js.map +1 -0
  70. package/dist/{chunk-TRNBHPNW.js → chunk-YGN7OMLT.js} +11 -8
  71. package/dist/chunk-YGN7OMLT.js.map +1 -0
  72. package/dist/collapsible-panel.d.ts +66 -0
  73. package/dist/collapsible-panel.js +22 -0
  74. package/dist/collapsible-panel.js.map +1 -0
  75. package/dist/device-class.d.ts +62 -0
  76. package/dist/device-class.js +75 -0
  77. package/dist/device-class.js.map +1 -0
  78. package/dist/disclosure-arrow.d.ts +14 -0
  79. package/dist/disclosure-arrow.js +4 -0
  80. package/dist/disclosure-arrow.js.map +1 -0
  81. package/dist/index.d.ts +10 -6
  82. package/dist/index.js +21 -16
  83. package/dist/list-action-row.d.ts +52 -0
  84. package/dist/list-action-row.js +5 -0
  85. package/dist/list-action-row.js.map +1 -0
  86. package/dist/list-header.d.ts +43 -0
  87. package/dist/list-header.js +7 -0
  88. package/dist/list-header.js.map +1 -0
  89. package/dist/list-item.d.ts +33 -0
  90. package/dist/list-item.js +5 -0
  91. package/dist/list-item.js.map +1 -0
  92. package/dist/nav-stack.d.ts +38 -0
  93. package/dist/nav-stack.js +5 -0
  94. package/dist/nav-stack.js.map +1 -0
  95. package/dist/panel-header.d.ts +36 -0
  96. package/dist/panel-header.js +7 -0
  97. package/dist/panel-header.js.map +1 -0
  98. package/dist/resizable-region.d.ts +3 -1
  99. package/dist/resizable-region.js +1 -1
  100. package/dist/segmented-control.d.ts +3 -1
  101. package/dist/segmented-control.js +2 -1
  102. package/dist/select-register.d.ts +5 -1
  103. package/dist/select-register.js +3 -0
  104. package/dist/select-register.js.map +1 -1
  105. package/dist/select.d.ts +5 -2
  106. package/dist/select.js +2 -1
  107. package/dist/skeleton.d.ts +24 -0
  108. package/dist/skeleton.js +3 -0
  109. package/dist/skeleton.js.map +1 -0
  110. package/dist/split-view.d.ts +42 -0
  111. package/dist/split-view.js +21 -0
  112. package/dist/split-view.js.map +1 -0
  113. package/dist/state-banner.d.ts +3 -1
  114. package/dist/state-banner.js +2 -1
  115. package/dist/styles/app-tab.css +152 -0
  116. package/dist/styles/catalog.css +498 -0
  117. package/dist/styles/collapsible-panel.css +146 -0
  118. package/dist/styles/disclosure-arrow.css +23 -0
  119. package/dist/styles/empty-state.css +47 -0
  120. package/dist/styles/foundation.css +347 -0
  121. package/dist/styles/layout.css +73 -0
  122. package/dist/styles/list-action-row.css +160 -0
  123. package/dist/styles/list-header.css +160 -0
  124. package/dist/styles/list-item.css +123 -0
  125. package/dist/styles/loading-spinner.css +21 -0
  126. package/dist/styles/lucide-icon.css +6 -0
  127. package/dist/styles/nav-stack.css +111 -0
  128. package/dist/styles/panel-header.css +64 -0
  129. package/dist/styles/resizable-region.css +111 -0
  130. package/{src → dist/styles}/segmented-control.css +62 -31
  131. package/dist/styles/select.css +138 -0
  132. package/dist/styles/skeleton.css +31 -0
  133. package/dist/styles/split-view.css +35 -0
  134. package/dist/styles/state-banner.css +173 -0
  135. package/dist/styles/styles.css +23 -0
  136. package/dist/styles/tab-bar.css +45 -0
  137. package/dist/styles/tab-scaffold.css +84 -0
  138. package/dist/styles/token-search-field.css +289 -0
  139. package/dist/styles/toolbar-control-group.css +211 -0
  140. package/dist/styles/toolbar-text.css +40 -0
  141. package/dist/styles/toolbar.css +61 -0
  142. package/dist/styles/value-table.css +75 -0
  143. package/{src → dist/styles}/webawesome.css +119 -29
  144. package/dist/styles/workbench.css +94 -0
  145. package/dist/tab-bar.d.ts +8 -1
  146. package/dist/tab-bar.js +1 -1
  147. package/dist/tab-scaffold.d.ts +30 -0
  148. package/dist/tab-scaffold.js +16 -0
  149. package/dist/tab-scaffold.js.map +1 -0
  150. package/dist/token-search-field.d.ts +43 -0
  151. package/dist/token-search-field.js +4 -0
  152. package/dist/token-search-field.js.map +1 -0
  153. package/dist/toolbar-text.d.ts +15 -3
  154. package/dist/toolbar-text.js +2 -1
  155. package/dist/value-table.d.ts +12 -2
  156. package/dist/value-table.js +2 -1
  157. package/dist/webawesome.d.ts +100 -0
  158. package/dist/webawesome.js +3 -0
  159. package/dist/webawesome.js.map +1 -0
  160. package/dist/wire-catalog.d.ts +26 -0
  161. package/dist/wire-catalog.js +48 -0
  162. package/dist/wire-catalog.js.map +1 -0
  163. package/dist/wire-nav-stack.d.ts +15 -0
  164. package/dist/wire-nav-stack.js +88 -0
  165. package/dist/wire-nav-stack.js.map +1 -0
  166. package/dist/wire-resizable-regions.js +1 -1
  167. package/dist/wire-sidebar.d.ts +43 -0
  168. package/dist/wire-sidebar.js +117 -0
  169. package/dist/wire-sidebar.js.map +1 -0
  170. package/dist/wire-tab-bars.d.ts +15 -2
  171. package/dist/wire-tab-bars.js +1 -1
  172. package/dist/wire-tab-scaffold.d.ts +11 -0
  173. package/dist/wire-tab-scaffold.js +16 -0
  174. package/dist/wire-tab-scaffold.js.map +1 -0
  175. package/dist/wire-token-search-fields.d.ts +97 -0
  176. package/dist/wire-token-search-fields.js +5 -0
  177. package/dist/wire-token-search-fields.js.map +1 -0
  178. package/dist/workbench.d.ts +33 -0
  179. package/dist/workbench.js +17 -0
  180. package/dist/workbench.js.map +1 -0
  181. package/docs/accessibility.md +101 -3
  182. package/docs/app-layouts.md +61 -0
  183. package/docs/catalog.md +155 -0
  184. package/docs/collapsible-panel.md +102 -0
  185. package/docs/component-contract.md +169 -4
  186. package/docs/component-selection.md +185 -0
  187. package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -0
  188. package/docs/design/templates/panel-header/icon-actions.svg +1 -0
  189. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -0
  190. package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -0
  191. package/docs/design/templates/panel-header/no-icon-dark.svg +1 -0
  192. package/docs/design/templates/panel-header/no-icon.svg +1 -0
  193. package/docs/design/templates/panel-header/page-heading-dark.svg +1 -0
  194. package/docs/design/templates/panel-header/page-heading.svg +1 -0
  195. package/docs/design/templates/panel-header/title-only-dark.svg +1 -0
  196. package/docs/design/templates/panel-header/title-only.svg +1 -0
  197. package/docs/design/templates/panel-header-dark.svg +13 -0
  198. package/docs/design/templates/panel-header.svg +13 -0
  199. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
  200. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
  201. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
  202. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
  203. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
  204. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
  205. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
  206. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
  207. package/docs/design/templates/toolbar-control-group-dark.svg +11 -0
  208. package/docs/design/templates/toolbar-control-group.svg +11 -0
  209. package/docs/design/templates.md +83 -0
  210. package/docs/design-philosophy.md +61 -1
  211. package/docs/device-class.md +54 -0
  212. package/docs/examples/command-palette-adapter.tsx +70 -0
  213. package/docs/layout.md +131 -0
  214. package/docs/nav-stack.md +47 -0
  215. package/docs/recipes.md +167 -0
  216. package/docs/split-view.md +49 -0
  217. package/docs/tab-scaffold.md +41 -0
  218. package/docs/ux-demo.md +23 -9
  219. package/docs/webawesome-theme.md +15 -0
  220. package/docs/workbench.md +47 -0
  221. package/llms.txt +123 -14
  222. package/package.json +139 -44
  223. package/ux-demo/recipes/app-shell.tsx +32 -0
  224. package/ux-demo/recipes/collapsible-sidebar.tsx +100 -0
  225. package/ux-demo/recipes/compact-toolbar.tsx +43 -0
  226. package/ux-demo/recipes/composer-form.tsx +63 -0
  227. package/ux-demo/recipes/list-detail-dialog.tsx +45 -0
  228. package/ux-demo/recipes/list-workspace-states.tsx +26 -0
  229. package/ux-demo/recipes/loaders.ts +33 -0
  230. package/ux-demo/recipes/loading-inspector.tsx +81 -0
  231. package/ux-demo/recipes/mount-recipe.ts +43 -0
  232. package/ux-demo/recipes/navigation-sidebar.tsx +26 -0
  233. package/ux-demo/recipes/navigation-stack.tsx +76 -0
  234. package/ux-demo/recipes/recipes.css +448 -0
  235. package/ux-demo/recipes/types.ts +17 -0
  236. package/ux-demo/recipes/workspace-header.tsx +12 -0
  237. package/dist/browser/dialog-header.js +0 -3
  238. package/dist/browser/menu-header.js +0 -3
  239. package/dist/browser/menu-item.js +0 -3
  240. package/dist/browser/page-header.js +0 -3
  241. package/dist/chunk-2PES33HS.js +0 -13
  242. package/dist/chunk-2PES33HS.js.map +0 -1
  243. package/dist/chunk-3O7ZEUW2.js.map +0 -1
  244. package/dist/chunk-723YNJBH.js +0 -17
  245. package/dist/chunk-723YNJBH.js.map +0 -1
  246. package/dist/chunk-GY5WH7TO.js +0 -10
  247. package/dist/chunk-GY5WH7TO.js.map +0 -1
  248. package/dist/chunk-MBR3TYNL.js.map +0 -1
  249. package/dist/chunk-MQIZAD4A.js.map +0 -1
  250. package/dist/chunk-NHXX4JI5.js +0 -28
  251. package/dist/chunk-NHXX4JI5.js.map +0 -1
  252. package/dist/chunk-OPCJRCYO.js +0 -19
  253. package/dist/chunk-OPCJRCYO.js.map +0 -1
  254. package/dist/chunk-T5XNMVOI.js +0 -24
  255. package/dist/chunk-T5XNMVOI.js.map +0 -1
  256. package/dist/chunk-TRNBHPNW.js.map +0 -1
  257. package/dist/chunk-VHW5YNIB.js +0 -17
  258. package/dist/chunk-VHW5YNIB.js.map +0 -1
  259. package/dist/chunk-VKH2JLDZ.js +0 -10
  260. package/dist/chunk-VKH2JLDZ.js.map +0 -1
  261. package/dist/chunk-WY4CAEPG.js +0 -14
  262. package/dist/chunk-WY4CAEPG.js.map +0 -1
  263. package/dist/dialog-header.d.ts +0 -14
  264. package/dist/dialog-header.js +0 -3
  265. package/dist/dialog-header.js.map +0 -1
  266. package/dist/menu-header.d.ts +0 -15
  267. package/dist/menu-header.js +0 -3
  268. package/dist/menu-header.js.map +0 -1
  269. package/dist/menu-item.d.ts +0 -22
  270. package/dist/menu-item.js +0 -3
  271. package/dist/menu-item.js.map +0 -1
  272. package/dist/page-header.d.ts +0 -9
  273. package/dist/page-header.js +0 -3
  274. package/dist/page-header.js.map +0 -1
  275. package/src/app-tab.css +0 -20
  276. package/src/dialog-header.css +0 -9
  277. package/src/empty-state.css +0 -6
  278. package/src/foundation.css +0 -106
  279. package/src/loading-spinner.css +0 -4
  280. package/src/lucide-icon.css +0 -1
  281. package/src/menu-header.css +0 -13
  282. package/src/menu-item.css +0 -12
  283. package/src/page-header.css +0 -3
  284. package/src/resizable-region.css +0 -19
  285. package/src/select.css +0 -18
  286. package/src/state-banner.css +0 -31
  287. package/src/styles.css +0 -18
  288. package/src/tab-bar.css +0 -4
  289. package/src/toolbar-control-group.css +0 -25
  290. package/src/toolbar-text.css +0 -4
  291. package/src/toolbar.css +0 -9
  292. package/src/value-table.css +0 -5
package/dist/index.d.ts CHANGED
@@ -1,21 +1,25 @@
1
1
  export { AppTab, AppTabProps } from './app-tab.js';
2
- export { DialogHeader, DialogHeaderProps } from './dialog-header.js';
2
+ export { DisclosureArrow, DisclosureArrowProps, DisclosureDirection } from './disclosure-arrow.js';
3
3
  export { EmptyState, EmptyStateProps } from './empty-state.js';
4
+ export { ListActionRow, ListActionRowProps } from './list-action-row.js';
5
+ export { ListHeader, ListHeaderProps } from './list-header.js';
6
+ export { ListItem, ListItemProps } from './list-item.js';
4
7
  export { LoadingSpinner, LoadingSpinnerProps } from './loading-spinner.js';
5
8
  export { LucideIcon, LucideIconProps, LucideNode } from './lucide-icon.js';
6
- export { MenuHeader, MenuHeaderProps } from './menu-header.js';
7
- export { MenuItem, MenuItemProps } from './menu-item.js';
8
- export { PageHeader, PageHeaderProps } from './page-header.js';
9
+ export { PanelHeader, PanelHeaderProps } from './panel-header.js';
9
10
  export { ResizableRegion, ResizableRegionAxis, ResizableRegionEdge, ResizableRegionProps, clampRegionSize, resizeRegionFromPointer } from './resizable-region.js';
10
11
  export { SegmentedControl, SegmentedControlAppearance, SegmentedControlChoice, SegmentedControlLayout, SegmentedControlProps, SegmentedControlShape, SegmentedControlSize } from './segmented-control.js';
11
12
  export { Select, SelectChoice, SelectProps } from './select.js';
13
+ export { Skeleton, SkeletonProps } from './skeleton.js';
12
14
  export { StateBanner, StateBannerProps, StateBannerTone } from './state-banner.js';
13
15
  export { TabBar, TabBarProps } from './tab-bar.js';
16
+ export { TokenSearchField, TokenSearchFieldProps, TokenSearchFieldValue, TokenSearchToken, placeTokenSearchCaret, readTokenSearchField } from './token-search-field.js';
14
17
  export { Toolbar, ToolbarProps } from './toolbar.js';
15
18
  export { ToolbarControlGroup, ToolbarControlGroupProps } from './toolbar-control-group.js';
16
- export { ToolbarText, ToolbarTextProps, ToolbarTextSize } from './toolbar-text.js';
17
- export { ValueTable, ValueTableProps } from './value-table.js';
19
+ export { HeadingLevel, ToolbarText, ToolbarTextProps, ToolbarTextSize } from './toolbar-text.js';
20
+ export { ValueTable, ValueTableProps, ValueTableRow, ValueTableRowProps } from './value-table.js';
18
21
  export { ResizeCommit, WireResizableRegionsOptions, wireResizableRegions } from './wire-resizable-regions.js';
19
22
  export { TabDropPosition, TabReorder, TabReorderSource, WireTabBarsOptions, reorderTabs, wireTabBars } from './wire-tab-bars.js';
23
+ export { TokenSearchCollapsibleOptions, TokenSearchFieldsHandle, TokenSearchSubmit, WireTokenSearchFieldsOptions, wireTokenSearchFields } from './wire-token-search-fields.js';
20
24
  import 'kerfjs';
21
25
  import 'lucide';
package/dist/index.js CHANGED
@@ -1,21 +1,26 @@
1
- export { ToolbarText } from './chunk-GY5WH7TO.js';
2
- export { Toolbar } from './chunk-DAFFDO33.js';
3
- export { ValueTable } from './chunk-VKH2JLDZ.js';
4
- export { wireResizableRegions } from './chunk-4HHCYSGT.js';
5
- export { reorderTabs, wireTabBars } from './chunk-MQIZAD4A.js';
6
- export { PageHeader } from './chunk-2PES33HS.js';
7
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-3O7ZEUW2.js';
8
- export { SegmentedControl } from './chunk-TRNBHPNW.js';
9
- export { Select } from './chunk-NHXX4JI5.js';
10
- export { StateBanner } from './chunk-VHW5YNIB.js';
11
- export { TabBar } from './chunk-MBR3TYNL.js';
1
+ export { reorderTabs, wireTabBars } from './chunk-XXMOARTH.js';
2
+ export { wireTokenSearchFields } from './chunk-CVZYNJJ5.js';
3
+ export { ValueTable, ValueTableRow } from './chunk-37T3VNIZ.js';
4
+ export { wireResizableRegions } from './chunk-AQNKJRFH.js';
5
+ export { Select } from './chunk-LC3YSAZC.js';
6
+ export { StateBanner } from './chunk-I7INRJO4.js';
7
+ export { TabBar } from './chunk-AVZHJN6C.js';
8
+ export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-7LDCTU7D.js';
9
+ export { PanelHeader } from './chunk-Y5MRDTLC.js';
10
+ export { ToolbarText } from './chunk-RUNWEPR4.js';
11
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-M5JRI6MN.js';
12
+ export { SegmentedControl } from './chunk-YGN7OMLT.js';
13
+ export { AppTab } from './chunk-2Z5TWHKQ.js';
14
+ export { ListHeader } from './chunk-W5EQ3HYQ.js';
15
+ export { ListItem } from './chunk-L4OKFDJY.js';
12
16
  export { ToolbarControlGroup } from './chunk-MFKMHK5W.js';
13
- export { AppTab } from './chunk-T5XNMVOI.js';
14
- export { DialogHeader } from './chunk-723YNJBH.js';
17
+ export { Toolbar } from './chunk-DAFFDO33.js';
18
+ export { DisclosureArrow } from './chunk-56RJXPHG.js';
19
+ export { LucideIcon } from './chunk-W2FK7ZNY.js';
15
20
  export { EmptyState } from './chunk-WVPYVDXY.js';
16
21
  export { LoadingSpinner } from './chunk-55DATV3A.js';
17
- export { LucideIcon } from './chunk-W2FK7ZNY.js';
18
- export { MenuHeader } from './chunk-OPCJRCYO.js';
19
- export { MenuItem } from './chunk-WY4CAEPG.js';
22
+ export { ListActionRow } from './chunk-7JB7VPRI.js';
23
+
24
+ export { Skeleton } from './chunk-B24C4A6T.js';
20
25
 
21
26
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,52 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ type ListActionRowRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
4
+ 'data-component'?: never;
5
+ 'data-action'?: never;
6
+ 'data-item-id'?: never;
7
+ 'data-has-icon'?: never;
8
+ 'data-multiline'?: never;
9
+ 'data-state'?: never;
10
+ 'data-selected'?: never;
11
+ 'data-pressed'?: never;
12
+ }>;
13
+ type ListActionRowTrailingAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
14
+ 'data-component'?: never;
15
+ 'data-action'?: never;
16
+ 'data-item-id'?: never;
17
+ popoverTarget?: string;
18
+ popoverTargetAction?: 'toggle' | 'show' | 'hide';
19
+ 'aria-controls'?: string;
20
+ 'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';
21
+ }>;
22
+ interface ListActionRowProps {
23
+ /** Visible dormant content for the primary button. Must not contain interactive descendants. */
24
+ label: string | SafeHtml;
25
+ /** Decorative dormant content for the primary button. Must not contain interactive descendants. */
26
+ icon?: SafeHtml;
27
+ action: string;
28
+ itemId?: string;
29
+ selected?: boolean;
30
+ pressed?: boolean;
31
+ accessibleLabel?: string;
32
+ title?: string;
33
+ multiline?: boolean;
34
+ state?: string;
35
+ disabled?: boolean;
36
+ tabIndex?: number;
37
+ /** Render as an unanimated loading skeleton, disabling both actions. */
38
+ placeholder?: boolean;
39
+ trailingAction: string;
40
+ trailingActionLabel: string;
41
+ /** Decorative dormant content for the trailing button. Must not contain interactive descendants. */
42
+ trailingActionIcon: SafeHtml;
43
+ trailingActionDisabled?: boolean;
44
+ trailingActionTitle?: string;
45
+ className?: string;
46
+ style?: string;
47
+ rootAttributes?: ListActionRowRootAttributes;
48
+ trailingActionAttributes?: ListActionRowTrailingAttributes;
49
+ }
50
+ declare function ListActionRow({ label, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, className, style, rootAttributes, trailingActionAttributes }: ListActionRowProps): SafeHtml;
51
+
52
+ export { ListActionRow, type ListActionRowProps };
@@ -0,0 +1,5 @@
1
+ export { ListActionRow } from './chunk-7JB7VPRI.js';
2
+
3
+
4
+
5
+ //# sourceMappingURL=list-action-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list-action-row.js"}
@@ -0,0 +1,43 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ type ListHeaderRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
4
+ 'data-component'?: never;
5
+ 'data-action'?: never;
6
+ 'data-has-badge'?: never;
7
+ 'data-has-count'?: never;
8
+ 'data-toggle'?: never;
9
+ }>;
10
+ type ListHeaderTriggerAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
11
+ 'data-action'?: never;
12
+ popoverTarget?: string;
13
+ popoverTargetAction?: 'toggle' | 'show' | 'hide';
14
+ 'aria-controls'?: string;
15
+ 'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';
16
+ }>;
17
+ interface ListHeaderBaseProps {
18
+ label: string;
19
+ action?: string;
20
+ actionLabel?: string;
21
+ actionIcon?: SafeHtml;
22
+ actionDisabled?: boolean;
23
+ disabledReason?: string;
24
+ expanded?: boolean;
25
+ toggle?: boolean;
26
+ /** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */
27
+ placeholder?: boolean;
28
+ rootAttributes?: ListHeaderRootAttributes;
29
+ triggerAttributes?: ListHeaderTriggerAttributes;
30
+ }
31
+ type ListHeaderIndicatorProps = {
32
+ count: number;
33
+ countLabel: string;
34
+ badge?: never;
35
+ } | {
36
+ count?: never;
37
+ countLabel?: never;
38
+ badge?: SafeHtml;
39
+ };
40
+ type ListHeaderProps = ListHeaderBaseProps & ListHeaderIndicatorProps;
41
+ declare function ListHeader({ label, count, countLabel, badge, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes }: ListHeaderProps): SafeHtml;
42
+
43
+ export { ListHeader, type ListHeaderProps };
@@ -0,0 +1,7 @@
1
+ export { ListHeader } from './chunk-W5EQ3HYQ.js';
2
+
3
+
4
+
5
+
6
+
7
+ //# sourceMappingURL=list-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list-header.js"}
@@ -0,0 +1,33 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
4
+ 'data-component'?: never;
5
+ 'data-action'?: never;
6
+ 'data-item-id'?: never;
7
+ 'data-has-icon'?: never;
8
+ 'data-multiline'?: never;
9
+ 'data-state'?: never;
10
+ }>;
11
+ interface ListItemProps {
12
+ label: string | SafeHtml;
13
+ icon?: SafeHtml;
14
+ trailing?: SafeHtml;
15
+ selected?: boolean;
16
+ action: string;
17
+ itemId?: string;
18
+ className?: string;
19
+ style?: string;
20
+ pressed?: boolean;
21
+ accessibleLabel?: string;
22
+ title?: string;
23
+ multiline?: boolean;
24
+ state?: string;
25
+ disabled?: boolean;
26
+ tabIndex?: number;
27
+ /** Render the row as an unanimated loading skeleton, disabling its action. */
28
+ placeholder?: boolean;
29
+ rootAttributes?: ListItemRootAttributes;
30
+ }
31
+ declare function ListItem({ label, icon, trailing, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes }: ListItemProps): SafeHtml;
32
+
33
+ export { ListItem, type ListItemProps };
@@ -0,0 +1,5 @@
1
+ export { ListItem } from './chunk-L4OKFDJY.js';
2
+
3
+
4
+
5
+ //# sourceMappingURL=list-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list-item.js"}
@@ -0,0 +1,38 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ /**
4
+ * One entry in a {@link NavStack}. The app owns the stack as an array (usually a
5
+ * signal); `NavStack` renders it and `wireNavStack` animates the transitions.
6
+ */
7
+ interface NavStackView {
8
+ /** Stable identity for keyed reconcile and transition direction. */
9
+ key: string;
10
+ content: SafeHtml;
11
+ /** Title shown in the top toolbar for this view. */
12
+ title?: string;
13
+ /** Trailing actions for this view's top toolbar. */
14
+ toolbar?: SafeHtml;
15
+ }
16
+ interface NavStackProps {
17
+ id: string;
18
+ /** Accessible name for the stack region. */
19
+ label: string;
20
+ /** The stack, root first; the last entry is the active top view. */
21
+ views: NavStackView[];
22
+ /** Accessible label for the back control (default "Back"). */
23
+ backLabel?: string;
24
+ /** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
25
+ hideToolbar?: boolean;
26
+ /** Optional persistent bottom toolbar. */
27
+ bottomToolbar?: SafeHtml;
28
+ className?: string;
29
+ }
30
+ /**
31
+ * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
32
+ * one active; `@kerfjs/ui/wire-nav-stack`'s `wireNavStack` slides the content and
33
+ * cross-fades the chrome across a change. A single-pane layout is a `NavStack`
34
+ * with one entry. See `docs/23-app-layouts.md` §3.1.
35
+ */
36
+ declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className }: NavStackProps): SafeHtml;
37
+
38
+ export { NavStack, type NavStackProps, type NavStackView };
@@ -0,0 +1,5 @@
1
+ export { NavStack } from './chunk-BLK3UEEI.js';
2
+
3
+
4
+
5
+ //# sourceMappingURL=nav-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"nav-stack.js"}
@@ -0,0 +1,36 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+ import { HeadingLevel } from './toolbar-text.js';
3
+
4
+ interface PanelHeaderProps {
5
+ title: string;
6
+ titleId: string;
7
+ summary?: string;
8
+ summaryId?: string;
9
+ icon?: SafeHtml;
10
+ iconClassName?: string;
11
+ actions?: SafeHtml;
12
+ /**
13
+ * Expose the title as a heading landmark (`role="heading"` + `aria-level`). Set it
14
+ * for a PAGE or view heading so screen-reader heading navigation works and the view
15
+ * has a primary heading; omit it (the default) for a dialog title, which is instead
16
+ * referenced via `aria-labelledby={titleId}` and needs no heading landmark.
17
+ */
18
+ headingLevel?: HeadingLevel;
19
+ /** Render the title and summary as unanimated loading skeletons, keeping the icon and actions. */
20
+ placeholder?: boolean;
21
+ }
22
+ /**
23
+ * The heading of a panel, dialog, or page: a plain `Toolbar` whose leading zone
24
+ * holds an optional icon control group and the title as extra-large `ToolbarText`,
25
+ * whose trailing zone holds the app's action controls, and with an optional
26
+ * subtitle on its own row, left-aligned with the title.
27
+ *
28
+ * PanelHeader overrides no Toolbar styles — it is just a Toolbar with an xl title.
29
+ * The only styling it adds is the icon group's fill/border color and the subtitle.
30
+ * When no icon is provided, the icon group is omitted entirely. The `actions` slot
31
+ * is passed straight into the toolbar's trailing zone; the app supplies whatever
32
+ * trailing controls it needs (typically a `ToolbarControlGroup`).
33
+ */
34
+ declare function PanelHeader({ title, titleId, summary, summaryId, icon, iconClassName, actions, headingLevel, placeholder }: PanelHeaderProps): SafeHtml;
35
+
36
+ export { PanelHeader, type PanelHeaderProps };
@@ -0,0 +1,7 @@
1
+ export { PanelHeader } from './chunk-Y5MRDTLC.js';
2
+
3
+
4
+
5
+
6
+
7
+ //# sourceMappingURL=panel-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"panel-header.js"}
@@ -12,10 +12,12 @@ interface ResizableRegionProps {
12
12
  edge?: ResizableRegionEdge;
13
13
  collapsed?: boolean;
14
14
  transitioning?: boolean;
15
+ /** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
16
+ handleIcon?: SafeHtml;
15
17
  children: SafeHtml | SafeHtml[];
16
18
  }
17
19
  declare const clampRegionSize: (size: number, min: number, max: number) => number;
18
20
  declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
19
- declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, children }: ResizableRegionProps): SafeHtml;
21
+ declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, handleIcon, children }: ResizableRegionProps): SafeHtml;
20
22
 
21
23
  export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionEdge, type ResizableRegionProps, clampRegionSize, resizeRegionFromPointer };
@@ -1,3 +1,3 @@
1
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-3O7ZEUW2.js';
1
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-M5JRI6MN.js';
2
2
 
3
3
  //# sourceMappingURL=resizable-region.js.map
@@ -22,7 +22,9 @@ interface SegmentedControlProps {
22
22
  size?: SegmentedControlSize;
23
23
  layout?: SegmentedControlLayout;
24
24
  className?: string;
25
+ /** Render as an unanimated loading skeleton, disabling every segment. */
26
+ placeholder?: boolean;
25
27
  }
26
- declare function SegmentedControl({ id, label, value, choices, action, appearance, shape, size, layout, className, }: SegmentedControlProps): SafeHtml;
28
+ declare function SegmentedControl({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps): SafeHtml;
27
29
 
28
30
  export { SegmentedControl, type SegmentedControlAppearance, type SegmentedControlChoice, type SegmentedControlLayout, type SegmentedControlProps, type SegmentedControlShape, type SegmentedControlSize };
@@ -1,3 +1,4 @@
1
- export { SegmentedControl } from './chunk-TRNBHPNW.js';
1
+ export { SegmentedControl } from './chunk-YGN7OMLT.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=segmented-control.js.map
@@ -1,4 +1,8 @@
1
- /** Marker export for tests and tooling; importing this module performs registration. */
1
+ /**
2
+ * Marker export for tests and tooling; importing this module performs registration.
3
+ * Registers both the `Select` elements and the `Catalog` related-entries popup-menu
4
+ * elements (`wa-dropdown` / `wa-dropdown-item` / `wa-button`).
5
+ */
2
6
  declare const selectElementsRegistered = true;
3
7
 
4
8
  export { selectElementsRegistered };
@@ -1,4 +1,7 @@
1
+ import '@awesome.me/webawesome/dist/components/button/button.js';
1
2
  import '@awesome.me/webawesome/dist/components/divider/divider.js';
3
+ import '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';
4
+ import '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';
2
5
  import '@awesome.me/webawesome/dist/components/option/option.js';
3
6
  import '@awesome.me/webawesome/dist/components/select/select.js';
4
7
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/select-register.ts"],"names":[],"mappings":";;;;;AAKO,IAAM,wBAAA,GAA2B","file":"select-register.js","sourcesContent":["import '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/option/option.js';\nimport '@awesome.me/webawesome/dist/components/select/select.js';\n\n/** Marker export for tests and tooling; importing this module performs registration. */\nexport const selectElementsRegistered = true;\n"]}
1
+ {"version":3,"sources":["../src/select-register.ts"],"names":[],"mappings":";;;;;;;;AAYO,IAAM,wBAAA,GAA2B","file":"select-register.js","sourcesContent":["import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/option/option.js';\nimport '@awesome.me/webawesome/dist/components/select/select.js';\n\n/**\n * Marker export for tests and tooling; importing this module performs registration.\n * Registers both the `Select` elements and the `Catalog` related-entries popup-menu\n * elements (`wa-dropdown` / `wa-dropdown-item` / `wa-button`).\n */\nexport const selectElementsRegistered = true;\n"]}
package/dist/select.d.ts CHANGED
@@ -18,11 +18,14 @@ interface SelectProps<Value extends string = string> {
18
18
  ariaLabel?: string;
19
19
  choices: readonly SelectChoice<Value>[];
20
20
  className?: string;
21
- placeholder?: string;
21
+ /** Empty-value hint text shown in the closed control (the native select placeholder). */
22
+ placeholderText?: string;
22
23
  disabled?: boolean;
23
24
  fitMenu?: boolean;
24
25
  renderSelected?: (choice: SelectChoice<Value>) => SafeHtml;
26
+ /** Render as an unanimated loading skeleton: the label above a static, empty control box. */
27
+ placeholder?: boolean;
25
28
  }
26
- declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholder, disabled, fitMenu, renderSelected }: SelectProps<Value>): SafeHtml;
29
+ declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholderText, disabled, fitMenu, renderSelected, placeholder }: SelectProps<Value>): SafeHtml;
27
30
 
28
31
  export { Select, type SelectChoice, type SelectProps };
package/dist/select.js CHANGED
@@ -1,4 +1,5 @@
1
- export { Select } from './chunk-NHXX4JI5.js';
1
+ export { Select } from './chunk-LC3YSAZC.js';
2
+
2
3
 
3
4
 
4
5
  //# sourceMappingURL=select.js.map
@@ -0,0 +1,24 @@
1
+ import * as kerfjs from 'kerfjs';
2
+
3
+ interface SkeletonProps {
4
+ /** Width as any CSS length (e.g. `remify(120px)`, `60%`). Defaults to filling its slot. */
5
+ width?: string;
6
+ /** Height as any CSS length. Defaults to a single text line. */
7
+ height?: string;
8
+ /** Corner radius override (a CSS length). Defaults to the small radius token. */
9
+ radius?: string;
10
+ /** Render this many stacked lines (the last one shorter), for multi-line text. */
11
+ lines?: number;
12
+ /** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
13
+ label?: string;
14
+ className?: string;
15
+ }
16
+ /**
17
+ * A subtle, deliberately **unanimated** loading placeholder block. Use it for a
18
+ * value slot whose content is not yet known, on its own or via a component's
19
+ * `placeholder` prop. Decorative by default (`aria-hidden`); pass `label` to
20
+ * announce it. Sizes to its slot unless `width`/`height` are given.
21
+ */
22
+ declare function Skeleton({ width, height, radius, lines, label, className }: SkeletonProps): kerfjs.SafeHtml;
23
+
24
+ export { Skeleton, type SkeletonProps };
@@ -0,0 +1,3 @@
1
+ export { Skeleton } from './chunk-B24C4A6T.js';
2
+
3
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"skeleton.js"}
@@ -0,0 +1,42 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ interface SplitViewResizable {
4
+ size: number;
5
+ min: number;
6
+ max: number;
7
+ }
8
+ interface SplitViewProps {
9
+ id: string;
10
+ label: string;
11
+ /** The list (primary) pane. */
12
+ list: SafeHtml;
13
+ /** The detail (secondary) pane. */
14
+ detail: SafeHtml;
15
+ /**
16
+ * Compact ("one pane at a time") classes — a handset or portrait tablet.
17
+ * Derive from `deviceClass().value.compact`. When true the split collapses to
18
+ * a `NavStack`: the list is the root and the detail is pushed over it.
19
+ */
20
+ compact?: boolean;
21
+ /** In compact mode, whether the detail is currently pushed over the list. */
22
+ detailActive?: boolean;
23
+ /** Title/label for the list (compact NavStack root + region label). */
24
+ listTitle?: string;
25
+ /** Title/label for the detail (compact NavStack pushed view + region label). */
26
+ detailTitle?: string;
27
+ /** Back label for the compact NavStack (default "Back"). */
28
+ backLabel?: string;
29
+ /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */
30
+ resizable?: SplitViewResizable;
31
+ className?: string;
32
+ }
33
+ /**
34
+ * A list-detail split. On roomy classes it shows both panes side
35
+ * by side with an optional resizable separator; on compact classes it collapses
36
+ * to a `NavStack` (list → detail). See `docs/23-app-layouts.md` §3.2. Compose the
37
+ * resizable wiring with `wireResizableRegions` and the compact back with
38
+ * `wireNavStack`.
39
+ */
40
+ declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className }: SplitViewProps): SafeHtml;
41
+
42
+ export { SplitView, type SplitViewProps, type SplitViewResizable };
@@ -0,0 +1,21 @@
1
+ import { NavStack } from './chunk-BLK3UEEI.js';
2
+
3
+ import { ResizableRegion } from './chunk-M5JRI6MN.js';
4
+
5
+ import { jsx, jsxs } from 'kerfjs/jsx-runtime';
6
+
7
+ function SplitView({ id, label, list, detail, compact = false, detailActive = false, listTitle = "", detailTitle = "", backLabel = "Back", resizable, className = "" }) {
8
+ if (compact) {
9
+ const views = detailActive ? [{ key: "list", title: listTitle, content: list }, { key: "detail", title: detailTitle, content: detail }] : [{ key: "list", title: listTitle, content: list }];
10
+ return /* @__PURE__ */ jsx("div", { class: `kui-split-view kui-split-view--compact ${className}`.trim(), id, "data-component": "split-view", "data-split-mode": "compact", children: /* @__PURE__ */ jsx(NavStack, { id: `${id}-stack`, label, views, backLabel }) });
11
+ }
12
+ const listPane = resizable ? /* @__PURE__ */ jsx(ResizableRegion, { id: `${id}-list`, label: listTitle || "List", size: resizable.size, min: resizable.min, max: resizable.max, children: /* @__PURE__ */ jsx("div", { class: "kui-split-view__list kui-pane", "data-split-list": true, children: list }) }) : /* @__PURE__ */ jsx("div", { class: "kui-split-view__list kui-pane", "data-split-list": true, children: list });
13
+ return /* @__PURE__ */ jsxs("div", { class: `kui-split-view ${className}`.trim(), id, "data-component": "split-view", "data-split-mode": "split", "aria-label": label, children: [
14
+ listPane,
15
+ /* @__PURE__ */ jsx("div", { class: "kui-split-view__detail kui-pane", "data-split-detail": true, "aria-label": detailTitle || void 0, children: detail })
16
+ ] });
17
+ }
18
+
19
+ export { SplitView };
20
+
21
+ //# sourceMappingURL=split-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/split-view.tsx"],"names":[],"mappings":";;;;;;AA4CO,SAAS,UAAU,EAAE,EAAA,EAAI,OAAO,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAO,YAAA,GAAe,OAAO,SAAA,GAAY,EAAA,EAAI,cAAc,EAAA,EAAI,SAAA,GAAY,QAAQ,SAAA,EAAW,SAAA,GAAY,IAAG,EAAmB;AAC7L,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,KAAA,GAAQ,YAAA,GACV,CAAC,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,IAAA,EAAK,EAAG,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,CAAA,GACzG,CAAC,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,CAAA;AACrD,IAAA,uBAAO,GAAA,CAAC,SAAI,KAAA,EAAO,CAAA,uCAAA,EAA0C,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,EAAA,EAAQ,gBAAA,EAAe,YAAA,EAAa,mBAAgB,SAAA,EACnI,QAAA,kBAAA,GAAA,CAAC,YAAS,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,MAAA,CAAA,EAAU,KAAA,EAAc,KAAA,EAAc,SAAA,EAAsB,CAAA,EACjF,CAAA;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAW,SAAA,mBACb,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAI,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,EAAS,KAAA,EAAO,aAAa,MAAA,EAAQ,IAAA,EAAM,SAAA,CAAU,IAAA,EAAM,KAAK,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,SAAA,CAAU,KACtH,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,+BAAA,EAAgC,mBAAe,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK,CAAA,EACnE,CAAA,uBACC,KAAA,EAAA,EAAI,KAAA,EAAM,+BAAA,EAAgC,iBAAA,EAAe,MAAE,QAAA,EAAA,IAAA,EAAK,CAAA;AACrE,EAAA,uBAAO,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,EAAA,EAAQ,gBAAA,EAAe,YAAA,EAAa,iBAAA,EAAgB,OAAA,EAAQ,cAAY,KAAA,EAC9H,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACD,GAAA,CAAC,SAAI,KAAA,EAAM,iCAAA,EAAkC,qBAAiB,IAAA,EAAC,YAAA,EAAY,WAAA,IAAe,MAAA,EAAY,QAAA,EAAA,MAAA,EAAO;AAAA,GAAA,EAC/G,CAAA;AACF","file":"split-view.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { NavStack } from './nav-stack.js';\nimport { ResizableRegion } from './resizable-region.js';\n\nexport interface SplitViewResizable {\n size: number;\n min: number;\n max: number;\n}\n\nexport interface SplitViewProps {\n id: string;\n label: string;\n /** The list (primary) pane. */\n list: SafeHtml;\n /** The detail (secondary) pane. */\n detail: SafeHtml;\n /**\n * Compact (\"one pane at a time\") classes — a handset or portrait tablet.\n * Derive from `deviceClass().value.compact`. When true the split collapses to\n * a `NavStack`: the list is the root and the detail is pushed over it.\n */\n compact?: boolean;\n /** In compact mode, whether the detail is currently pushed over the list. */\n detailActive?: boolean;\n /** Title/label for the list (compact NavStack root + region label). */\n listTitle?: string;\n /** Title/label for the detail (compact NavStack pushed view + region label). */\n detailTitle?: string;\n /** Back label for the compact NavStack (default \"Back\"). */\n backLabel?: string;\n /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */\n resizable?: SplitViewResizable;\n className?: string;\n}\n\n/**\n * A list-detail split. On roomy classes it shows both panes side\n * by side with an optional resizable separator; on compact classes it collapses\n * to a `NavStack` (list → detail). See `docs/23-app-layouts.md` §3.2. Compose the\n * resizable wiring with `wireResizableRegions` and the compact back with\n * `wireNavStack`.\n */\nexport function SplitView({ id, label, list, detail, compact = false, detailActive = false, listTitle = '', detailTitle = '', backLabel = 'Back', resizable, className = '' }: SplitViewProps) {\n if (compact) {\n const views = detailActive\n ? [{ key: 'list', title: listTitle, content: list }, { key: 'detail', title: detailTitle, content: detail }]\n : [{ key: 'list', title: listTitle, content: list }];\n return <div class={`kui-split-view kui-split-view--compact ${className}`.trim()} id={id} data-component=\"split-view\" data-split-mode=\"compact\">\n <NavStack id={`${id}-stack`} label={label} views={views} backLabel={backLabel} />\n </div>;\n }\n const listPane = resizable\n ? <ResizableRegion id={`${id}-list`} label={listTitle || 'List'} size={resizable.size} min={resizable.min} max={resizable.max}>\n <div class=\"kui-split-view__list kui-pane\" data-split-list>{list}</div>\n </ResizableRegion>\n : <div class=\"kui-split-view__list kui-pane\" data-split-list>{list}</div>;\n return <div class={`kui-split-view ${className}`.trim()} id={id} data-component=\"split-view\" data-split-mode=\"split\" aria-label={label}>\n {listPane}\n <div class=\"kui-split-view__detail kui-pane\" data-split-detail aria-label={detailTitle || undefined}>{detail}</div>\n </div>;\n}\n"]}
@@ -9,7 +9,9 @@ interface StateBannerProps {
9
9
  tone?: StateBannerTone;
10
10
  urgency?: 'status' | 'alert';
11
11
  className?: string;
12
+ /** Render the title and detail as unanimated loading skeletons, keeping the icon and tone. */
13
+ placeholder?: boolean;
12
14
  }
13
- declare function StateBanner({ title, detail, icon, action, tone, urgency, className }: StateBannerProps): SafeHtml;
15
+ declare function StateBanner({ title, detail, icon, action, tone, urgency, className, placeholder }: StateBannerProps): SafeHtml;
14
16
 
15
17
  export { StateBanner, type StateBannerProps, type StateBannerTone };
@@ -1,3 +1,4 @@
1
- export { StateBanner } from './chunk-VHW5YNIB.js';
1
+ export { StateBanner } from './chunk-I7INRJO4.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=state-banner.js.map