@kerfjs/ui 5.0.0-beta.7 → 5.0.0-beta.71

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 (723) hide show
  1. package/README.md +501 -139
  2. package/ai/application-ui-diagnostic-ids-v1.json +109 -0
  3. package/ai/application-ui-profile-sync.cjs +548 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +106 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +653 -0
  8. package/ai/application-ui-profile.schema.json +140 -0
  9. package/ai/catalog-authoring.json +36 -0
  10. package/ai/catalog-authoring.schema.json +109 -0
  11. package/ai/compile-time-contracts-v1.json +149 -0
  12. package/ai/compile-time-contracts-v1.schema.json +52 -0
  13. package/ai/component-catalog-extension.schema.json +104 -0
  14. package/ai/component-catalog.json +3905 -446
  15. package/ai/component-catalog.schema.json +94 -1
  16. package/ai/component-class-owners.cjs +83 -0
  17. package/ai/component-composition-extension.d.ts +7 -0
  18. package/ai/component-composition-extension.schema.json +7 -0
  19. package/ai/component-composition-rules.json +524 -0
  20. package/ai/component-composition.d.ts +129 -0
  21. package/ai/component-composition.json +7140 -0
  22. package/ai/component-composition.schema.json +408 -0
  23. package/ai/components/README.md +171 -0
  24. package/ai/components/application-tabs.md +65 -0
  25. package/ai/components/badge.md +72 -0
  26. package/ai/components/chip.md +72 -0
  27. package/ai/components/collapsible-panel.md +102 -0
  28. package/ai/components/content-item.md +93 -0
  29. package/ai/components/disclosure-arrow.md +77 -0
  30. package/ai/components/document-baseline.md +75 -0
  31. package/ai/components/empty-state.md +80 -0
  32. package/ai/components/feedback.md +71 -0
  33. package/ai/components/floating-toolbar.md +82 -0
  34. package/ai/components/foundation.md +65 -0
  35. package/ai/components/grid.md +98 -0
  36. package/ai/components/headers.md +63 -0
  37. package/ai/components/layout.md +75 -0
  38. package/ai/components/list-action-row.md +91 -0
  39. package/ai/components/list-header.md +89 -0
  40. package/ai/components/list-inset-control.md +74 -0
  41. package/ai/components/list-inset-text.md +72 -0
  42. package/ai/components/list-item.md +94 -0
  43. package/ai/components/list.md +105 -0
  44. package/ai/components/loading-spinner.md +73 -0
  45. package/ai/components/lucide-icon.md +78 -0
  46. package/ai/components/nav-stack.md +104 -0
  47. package/ai/components/pane.md +101 -0
  48. package/ai/components/popup-menu.md +171 -0
  49. package/ai/components/recipe-app-shell.md +57 -0
  50. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  51. package/ai/components/recipe-compact-toolbar.md +57 -0
  52. package/ai/components/recipe-composer-form.md +57 -0
  53. package/ai/components/recipe-list-detail-dialog.md +57 -0
  54. package/ai/components/recipe-list-workspace-states.md +57 -0
  55. package/ai/components/recipe-loading-inspector.md +57 -0
  56. package/ai/components/recipe-navigation-sidebar.md +57 -0
  57. package/ai/components/recipe-navigation-stack.md +57 -0
  58. package/ai/components/recipe-workspace-header.md +57 -0
  59. package/ai/components/resize.md +106 -0
  60. package/ai/components/row.md +96 -0
  61. package/ai/components/segmented-control.md +82 -0
  62. package/ai/components/select.md +113 -0
  63. package/ai/components/skeleton.md +84 -0
  64. package/ai/components/spacer.md +86 -0
  65. package/ai/components/split-view.md +102 -0
  66. package/ai/components/state-banner.md +94 -0
  67. package/ai/components/sunken-panel.md +79 -0
  68. package/ai/components/surface-scaffold.md +78 -0
  69. package/ai/components/tab-bar.md +113 -0
  70. package/ai/components/tab-scaffold.md +94 -0
  71. package/ai/components/tabs.md +95 -0
  72. package/ai/components/text.md +85 -0
  73. package/ai/components/token-search-field.md +106 -0
  74. package/ai/components/toolbar-control-group.md +102 -0
  75. package/ai/components/toolbar-text.md +79 -0
  76. package/ai/components/toolbar.md +97 -0
  77. package/ai/components/value-table.md +73 -0
  78. package/ai/components/wa-accordion-item.md +55 -0
  79. package/ai/components/wa-accordion.md +65 -0
  80. package/ai/components/wa-animated-image.md +55 -0
  81. package/ai/components/wa-animation.md +55 -0
  82. package/ai/components/wa-avatar.md +55 -0
  83. package/ai/components/wa-badge.md +55 -0
  84. package/ai/components/wa-breadcrumb-item.md +53 -0
  85. package/ai/components/wa-breadcrumb.md +55 -0
  86. package/ai/components/wa-button-group.md +59 -0
  87. package/ai/components/wa-button.md +55 -0
  88. package/ai/components/wa-callout.md +58 -0
  89. package/ai/components/wa-card.md +59 -0
  90. package/ai/components/wa-carousel-item.md +53 -0
  91. package/ai/components/wa-carousel.md +55 -0
  92. package/ai/components/wa-checkbox-group.md +55 -0
  93. package/ai/components/wa-checkbox.md +55 -0
  94. package/ai/components/wa-color-picker.md +55 -0
  95. package/ai/components/wa-comparison.md +55 -0
  96. package/ai/components/wa-copy-button.md +55 -0
  97. package/ai/components/wa-details.md +61 -0
  98. package/ai/components/wa-dialog.md +59 -0
  99. package/ai/components/wa-divider.md +53 -0
  100. package/ai/components/wa-drawer.md +55 -0
  101. package/ai/components/wa-dropdown-item.md +60 -0
  102. package/ai/components/wa-dropdown.md +60 -0
  103. package/ai/components/wa-format-bytes.md +53 -0
  104. package/ai/components/wa-format-date.md +53 -0
  105. package/ai/components/wa-format-number.md +53 -0
  106. package/ai/components/wa-icon.md +58 -0
  107. package/ai/components/wa-include.md +53 -0
  108. package/ai/components/wa-input.md +59 -0
  109. package/ai/components/wa-intersection-observer.md +53 -0
  110. package/ai/components/wa-known-date.md +53 -0
  111. package/ai/components/wa-markdown.md +53 -0
  112. package/ai/components/wa-mutation-observer.md +53 -0
  113. package/ai/components/wa-number-input.md +55 -0
  114. package/ai/components/wa-option.md +59 -0
  115. package/ai/components/wa-otp-input.md +53 -0
  116. package/ai/components/wa-page.md +53 -0
  117. package/ai/components/wa-pagination.md +55 -0
  118. package/ai/components/wa-popover.md +55 -0
  119. package/ai/components/wa-popup.md +53 -0
  120. package/ai/components/wa-progress-bar.md +53 -0
  121. package/ai/components/wa-progress-ring.md +53 -0
  122. package/ai/components/wa-qr-code.md +53 -0
  123. package/ai/components/wa-radio-group.md +59 -0
  124. package/ai/components/wa-radio.md +55 -0
  125. package/ai/components/wa-random-content.md +53 -0
  126. package/ai/components/wa-rating.md +55 -0
  127. package/ai/components/wa-relative-time.md +53 -0
  128. package/ai/components/wa-resize-observer.md +53 -0
  129. package/ai/components/wa-scroller.md +53 -0
  130. package/ai/components/wa-select.md +63 -0
  131. package/ai/components/wa-skeleton.md +53 -0
  132. package/ai/components/wa-slider.md +55 -0
  133. package/ai/components/wa-spinner.md +58 -0
  134. package/ai/components/wa-split-panel.md +58 -0
  135. package/ai/components/wa-switch.md +53 -0
  136. package/ai/components/wa-tab-group.md +69 -0
  137. package/ai/components/wa-tab-panel.md +60 -0
  138. package/ai/components/wa-tab.md +59 -0
  139. package/ai/components/wa-tag.md +59 -0
  140. package/ai/components/wa-textarea.md +53 -0
  141. package/ai/components/wa-time-input.md +55 -0
  142. package/ai/components/wa-toast-item.md +60 -0
  143. package/ai/components/wa-toast.md +60 -0
  144. package/ai/components/wa-tooltip.md +55 -0
  145. package/ai/components/wa-tree-item.md +55 -0
  146. package/ai/components/wa-tree.md +55 -0
  147. package/ai/components/wa-zoomable-frame.md +55 -0
  148. package/ai/components/workbench.md +118 -0
  149. package/ai/public-api-signatures-v1.md +2748 -210
  150. package/ai/skill.md +286 -66
  151. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  152. package/analyzer/cli.mjs +49 -0
  153. package/analyzer/component-ownership.d.mts +72 -0
  154. package/analyzer/component-ownership.mjs +401 -0
  155. package/analyzer/index.d.mts +53 -0
  156. package/analyzer/index.mjs +2307 -0
  157. package/analyzer/loud-pairs.d.mts +49 -0
  158. package/analyzer/loud-pairs.mjs +357 -0
  159. package/analyzer/report.schema.json +66 -0
  160. package/analyzer/selectors.d.mts +21 -0
  161. package/analyzer/selectors.mjs +212 -0
  162. package/catalog-projection-cli.mjs +96 -0
  163. package/catalog-projection.d.mts +55 -0
  164. package/catalog-projection.mjs +62 -0
  165. package/dist/app-tab.d.ts +39 -4
  166. package/dist/app-tab.js +2 -1
  167. package/dist/badge.d.ts +52 -0
  168. package/dist/badge.js +3 -0
  169. package/dist/badge.js.map +1 -0
  170. package/dist/browser/badge.js +3 -0
  171. package/dist/browser/catalog.js +26 -0
  172. package/dist/browser/chip.js +3 -0
  173. package/dist/browser/collapsible-panel.js +9 -0
  174. package/dist/browser/content-item.js +3 -0
  175. package/dist/browser/floating-toolbar.js +3 -0
  176. package/dist/browser/grid.js +3 -0
  177. package/dist/browser/list-action-row.js +5 -0
  178. package/dist/browser/{menu-header.js → list-header.js} +4 -2
  179. package/dist/browser/list-inset-control.js +3 -0
  180. package/dist/browser/list-inset-text.js +3 -0
  181. package/dist/browser/list-item.js +5 -0
  182. package/dist/browser/list.js +3 -0
  183. package/dist/browser/{panel-header.js → nav-stack.js} +5 -3
  184. package/dist/browser/pane.js +3 -0
  185. package/dist/browser/popup-menu.js +3 -0
  186. package/dist/browser/row.js +3 -0
  187. package/dist/browser/segmented-control.js +0 -1
  188. package/dist/browser/select.js +1 -0
  189. package/dist/browser/spacer.js +3 -0
  190. package/dist/browser/split-view.js +11 -0
  191. package/dist/browser/state-banner.js +1 -0
  192. package/dist/browser/sunken-panel.js +3 -0
  193. package/dist/browser/surface-scaffold.js +3 -0
  194. package/dist/browser/tab-scaffold.js +4 -0
  195. package/dist/browser/text.js +3 -0
  196. package/dist/browser/toolbar-control-group.js +1 -0
  197. package/dist/browser/workbench.js +14 -0
  198. package/dist/catalog-resources.d.ts +48 -0
  199. package/dist/catalog-resources.js +22 -0
  200. package/dist/catalog-resources.js.map +1 -0
  201. package/dist/catalog.d.ts +92 -0
  202. package/dist/catalog.js +503 -0
  203. package/dist/catalog.js.map +1 -0
  204. package/dist/chip.d.ts +35 -0
  205. package/dist/chip.js +3 -0
  206. package/dist/chip.js.map +1 -0
  207. package/dist/chunk-2G2ZJQYK.js +152 -0
  208. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  209. package/dist/chunk-3BYFWTP3.js +108 -0
  210. package/dist/chunk-3BYFWTP3.js.map +1 -0
  211. package/dist/chunk-47CKKLBE.js +34 -0
  212. package/dist/chunk-47CKKLBE.js.map +1 -0
  213. package/dist/chunk-4SQK27MR.js +202 -0
  214. package/dist/chunk-4SQK27MR.js.map +1 -0
  215. package/dist/chunk-5I7QGQVT.js +24 -0
  216. package/dist/chunk-5I7QGQVT.js.map +1 -0
  217. package/dist/chunk-6DFDTWGG.js +288 -0
  218. package/dist/chunk-6DFDTWGG.js.map +1 -0
  219. package/dist/chunk-7OKX3EF6.js +135 -0
  220. package/dist/chunk-7OKX3EF6.js.map +1 -0
  221. package/dist/chunk-AHEG27M7.js +66 -0
  222. package/dist/chunk-AHEG27M7.js.map +1 -0
  223. package/dist/chunk-AYUHMAI6.js +48 -0
  224. package/dist/chunk-AYUHMAI6.js.map +1 -0
  225. package/dist/chunk-B2ZMR7NY.js +85 -0
  226. package/dist/chunk-B2ZMR7NY.js.map +1 -0
  227. package/dist/chunk-BFPBS5Y4.js +250 -0
  228. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  229. package/dist/chunk-DB5ADJKF.js +775 -0
  230. package/dist/chunk-DB5ADJKF.js.map +1 -0
  231. package/dist/chunk-DC6CN2DS.js +123 -0
  232. package/dist/chunk-DC6CN2DS.js.map +1 -0
  233. package/dist/chunk-DG6G5EPF.js +35 -0
  234. package/dist/chunk-DG6G5EPF.js.map +1 -0
  235. package/dist/{chunk-56RJXPHG.js → chunk-G4S2QU6V.js} +7 -4
  236. package/dist/chunk-G4S2QU6V.js.map +1 -0
  237. package/dist/chunk-GLDWRCAM.js +49 -0
  238. package/dist/chunk-GLDWRCAM.js.map +1 -0
  239. package/dist/chunk-I3Q7KKYM.js +33 -0
  240. package/dist/chunk-I3Q7KKYM.js.map +1 -0
  241. package/dist/chunk-IA7TMD4Y.js +288 -0
  242. package/dist/chunk-IA7TMD4Y.js.map +1 -0
  243. package/dist/chunk-J3KGJ6P6.js +135 -0
  244. package/dist/chunk-J3KGJ6P6.js.map +1 -0
  245. package/dist/chunk-K47P7QZC.js +17 -0
  246. package/dist/chunk-K47P7QZC.js.map +1 -0
  247. package/dist/chunk-K67Y2JNF.js +222 -0
  248. package/dist/chunk-K67Y2JNF.js.map +1 -0
  249. package/dist/chunk-KCCEH7RF.js +492 -0
  250. package/dist/chunk-KCCEH7RF.js.map +1 -0
  251. package/dist/chunk-KLJKU6ZL.js +109 -0
  252. package/dist/chunk-KLJKU6ZL.js.map +1 -0
  253. package/dist/chunk-KVBRMEPM.js +44 -0
  254. package/dist/chunk-KVBRMEPM.js.map +1 -0
  255. package/dist/chunk-M6DEEBEF.js +156 -0
  256. package/dist/chunk-M6DEEBEF.js.map +1 -0
  257. package/dist/chunk-MEY33VWB.js +44 -0
  258. package/dist/chunk-MEY33VWB.js.map +1 -0
  259. package/dist/chunk-MP2GDBQZ.js +50 -0
  260. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  261. package/dist/chunk-NC4CFOID.js +188 -0
  262. package/dist/chunk-NC4CFOID.js.map +1 -0
  263. package/dist/chunk-NCSWXG7G.js +80 -0
  264. package/dist/chunk-NCSWXG7G.js.map +1 -0
  265. package/dist/chunk-NN6GYOA2.js +47 -0
  266. package/dist/chunk-NN6GYOA2.js.map +1 -0
  267. package/dist/chunk-OXO2QJWV.js +55 -0
  268. package/dist/chunk-OXO2QJWV.js.map +1 -0
  269. package/dist/chunk-P7D3EMXM.js +52 -0
  270. package/dist/chunk-P7D3EMXM.js.map +1 -0
  271. package/dist/chunk-PSHUSWQH.js +18 -0
  272. package/dist/chunk-PSHUSWQH.js.map +1 -0
  273. package/dist/chunk-Q6YU3BT7.js +138 -0
  274. package/dist/chunk-Q6YU3BT7.js.map +1 -0
  275. package/dist/chunk-QJ5VFCW3.js +131 -0
  276. package/dist/chunk-QJ5VFCW3.js.map +1 -0
  277. package/dist/chunk-RGS4WX2M.js +44 -0
  278. package/dist/chunk-RGS4WX2M.js.map +1 -0
  279. package/dist/chunk-RNQNEENY.js +146 -0
  280. package/dist/chunk-RNQNEENY.js.map +1 -0
  281. package/dist/chunk-RVERAFFY.js +291 -0
  282. package/dist/chunk-RVERAFFY.js.map +1 -0
  283. package/dist/chunk-SLWCCHNP.js +491 -0
  284. package/dist/chunk-SLWCCHNP.js.map +1 -0
  285. package/dist/chunk-SMZGAPCU.js +70 -0
  286. package/dist/chunk-SMZGAPCU.js.map +1 -0
  287. package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
  288. package/dist/chunk-SRSJO5QE.js.map +1 -0
  289. package/dist/chunk-TJK44RQC.js +452 -0
  290. package/dist/chunk-TJK44RQC.js.map +1 -0
  291. package/dist/chunk-UIDKY4UB.js +14 -0
  292. package/dist/chunk-UIDKY4UB.js.map +1 -0
  293. package/dist/chunk-V3DX3K65.js +43 -0
  294. package/dist/chunk-V3DX3K65.js.map +1 -0
  295. package/dist/chunk-VZOFZPSO.js +71 -0
  296. package/dist/chunk-VZOFZPSO.js.map +1 -0
  297. package/dist/chunk-W2AC6Q2A.js +83 -0
  298. package/dist/chunk-W2AC6Q2A.js.map +1 -0
  299. package/dist/chunk-WF75U3V4.js +33 -0
  300. package/dist/chunk-WF75U3V4.js.map +1 -0
  301. package/dist/chunk-WTSNV5RG.js +52 -0
  302. package/dist/chunk-WTSNV5RG.js.map +1 -0
  303. package/dist/{chunk-YGN7OMLT.js → chunk-X5QSICJ3.js} +8 -5
  304. package/dist/chunk-X5QSICJ3.js.map +1 -0
  305. package/dist/chunk-YDGNU2OD.js +61 -0
  306. package/dist/chunk-YDGNU2OD.js.map +1 -0
  307. package/dist/collapsible-panel.d.ts +133 -0
  308. package/dist/collapsible-panel.js +131 -0
  309. package/dist/collapsible-panel.js.map +1 -0
  310. package/dist/content-item.d.ts +81 -0
  311. package/dist/content-item.js +4 -0
  312. package/dist/content-item.js.map +1 -0
  313. package/dist/css-values.d.ts +107 -0
  314. package/dist/css-values.js +3 -0
  315. package/dist/css-values.js.map +1 -0
  316. package/dist/device-class.js +33 -5
  317. package/dist/device-class.js.map +1 -1
  318. package/dist/disclosure-arrow.d.ts +6 -1
  319. package/dist/disclosure-arrow.js +2 -1
  320. package/dist/empty-state.d.ts +5 -2
  321. package/dist/empty-state.js +2 -1
  322. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  323. package/dist/floating-toolbar.d.ts +51 -0
  324. package/dist/floating-toolbar.js +3 -0
  325. package/dist/floating-toolbar.js.map +1 -0
  326. package/dist/grid.d.ts +50 -0
  327. package/dist/grid.js +5 -0
  328. package/dist/grid.js.map +1 -0
  329. package/dist/help-tags-register.d.ts +13 -0
  330. package/dist/help-tags-register.js +9 -0
  331. package/dist/help-tags-register.js.map +1 -0
  332. package/dist/index.d.ts +34 -14
  333. package/dist/index.js +43 -23
  334. package/dist/{menu-action-row.d.ts → list-action-row.d.ts} +21 -9
  335. package/dist/list-action-row.js +8 -0
  336. package/dist/list-action-row.js.map +1 -0
  337. package/dist/list-header.d.ts +99 -0
  338. package/dist/list-header.js +10 -0
  339. package/dist/list-header.js.map +1 -0
  340. package/dist/list-inset-control.d.ts +22 -0
  341. package/dist/list-inset-control.js +3 -0
  342. package/dist/list-inset-control.js.map +1 -0
  343. package/dist/list-inset-text.d.ts +30 -0
  344. package/dist/list-inset-text.js +4 -0
  345. package/dist/list-inset-text.js.map +1 -0
  346. package/dist/list-item.d.ts +62 -0
  347. package/dist/list-item.js +8 -0
  348. package/dist/list-item.js.map +1 -0
  349. package/dist/list.d.ts +63 -0
  350. package/dist/list.js +6 -0
  351. package/dist/list.js.map +1 -0
  352. package/dist/loading-spinner.d.ts +9 -2
  353. package/dist/loading-spinner.js +2 -1
  354. package/dist/lucide-icon.d.ts +9 -2
  355. package/dist/lucide-icon.js +2 -1
  356. package/dist/nav-stack.d.ts +66 -10
  357. package/dist/nav-stack.js +6 -1
  358. package/dist/pane.d.ts +108 -0
  359. package/dist/pane.js +4 -0
  360. package/dist/pane.js.map +1 -0
  361. package/dist/panel-toolbar-DDKh4uKd.d.ts +72 -0
  362. package/dist/popup-menu-register.d.ts +9 -0
  363. package/dist/popup-menu-register.js +244 -0
  364. package/dist/popup-menu-register.js.map +1 -0
  365. package/dist/popup-menu.d.ts +100 -0
  366. package/dist/popup-menu.js +3 -0
  367. package/dist/popup-menu.js.map +1 -0
  368. package/dist/resizable-region.d.ts +32 -3
  369. package/dist/resizable-region.js +1 -1
  370. package/dist/row.d.ts +48 -0
  371. package/dist/row.js +6 -0
  372. package/dist/row.js.map +1 -0
  373. package/dist/segmented-control.d.ts +12 -9
  374. package/dist/segmented-control.js +1 -2
  375. package/dist/select-register.d.ts +5 -1
  376. package/dist/select-register.js +243 -2
  377. package/dist/select-register.js.map +1 -1
  378. package/dist/select.d.ts +102 -8
  379. package/dist/select.js +3 -1
  380. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  381. package/dist/sides-BPSWde0A.d.ts +4 -0
  382. package/dist/skeleton.d.ts +14 -7
  383. package/dist/skeleton.js +2 -1
  384. package/dist/spacer.d.ts +18 -0
  385. package/dist/spacer.js +4 -0
  386. package/dist/spacer.js.map +1 -0
  387. package/dist/split-view.d.ts +39 -7
  388. package/dist/split-view.js +120 -10
  389. package/dist/split-view.js.map +1 -1
  390. package/dist/state-banner.d.ts +18 -6
  391. package/dist/state-banner.js +3 -1
  392. package/dist/styles/app-tab.css +224 -0
  393. package/dist/styles/badge.css +118 -0
  394. package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
  395. package/dist/styles/catalog/components/catalog-example.css +168 -0
  396. package/dist/styles/catalog/components/catalog-stage.css +55 -0
  397. package/dist/styles/catalog/components/catalog.css +12 -0
  398. package/dist/styles/catalog.css +5 -0
  399. package/dist/styles/chip.css +132 -0
  400. package/dist/styles/collapsible-panel.css +575 -0
  401. package/dist/styles/content-item.css +75 -0
  402. package/dist/styles/document.css +23 -0
  403. package/dist/styles/floating-toolbar.css +119 -0
  404. package/dist/styles/foundation.css +178 -40
  405. package/dist/styles/grid.css +35 -0
  406. package/dist/styles/layout.css +3 -41
  407. package/dist/styles/list-action-row.css +258 -0
  408. package/dist/styles/list-header.css +229 -0
  409. package/dist/styles/list-inset-control.css +30 -0
  410. package/dist/styles/list-inset-text.css +29 -0
  411. package/dist/styles/list-item.css +255 -0
  412. package/dist/styles/list.css +133 -0
  413. package/dist/styles/loading-spinner.css +4 -0
  414. package/dist/styles/lucide-icon.css +5 -0
  415. package/dist/styles/nav-stack.css +172 -47
  416. package/dist/styles/pane.css +263 -0
  417. package/dist/styles/popup-menu.css +285 -0
  418. package/dist/styles/resizable-region.css +438 -4
  419. package/dist/styles/row.css +111 -0
  420. package/dist/styles/segmented-control.css +36 -9
  421. package/dist/styles/select.css +337 -21
  422. package/dist/styles/skeleton.css +64 -3
  423. package/dist/styles/spacer.css +11 -0
  424. package/dist/styles/split-view.css +114 -3
  425. package/dist/styles/state-banner.css +94 -19
  426. package/dist/styles/styles.css +13 -4
  427. package/dist/styles/sunken-panel.css +29 -0
  428. package/dist/styles/surface-scaffold.css +56 -0
  429. package/dist/styles/tab-bar.css +147 -9
  430. package/dist/styles/tab-scaffold.css +126 -3
  431. package/dist/styles/text.css +112 -0
  432. package/dist/styles/token-search-field.css +155 -55
  433. package/dist/styles/toolbar-control-group.css +608 -29
  434. package/dist/styles/toolbar-text.css +101 -8
  435. package/dist/styles/toolbar.css +343 -12
  436. package/dist/styles/value-table.css +34 -4
  437. package/dist/styles/webawesome.css +365 -10
  438. package/dist/styles/workbench.css +980 -7
  439. package/dist/sunken-panel.d.ts +27 -0
  440. package/dist/sunken-panel.js +3 -0
  441. package/dist/sunken-panel.js.map +1 -0
  442. package/dist/surface-scaffold.d.ts +30 -0
  443. package/dist/surface-scaffold.js +3 -0
  444. package/dist/surface-scaffold.js.map +1 -0
  445. package/dist/tab-bar.d.ts +39 -6
  446. package/dist/tab-bar.js +1 -1
  447. package/dist/tab-scaffold.d.ts +57 -7
  448. package/dist/tab-scaffold.js +83 -9
  449. package/dist/tab-scaffold.js.map +1 -1
  450. package/dist/text.d.ts +56 -0
  451. package/dist/text.js +3 -0
  452. package/dist/text.js.map +1 -0
  453. package/dist/token-search-field-CVGwDn2y.d.ts +154 -0
  454. package/dist/token-search-field.d.ts +3 -43
  455. package/dist/token-search-field.js +2 -1
  456. package/dist/token-search-model.d.ts +3 -0
  457. package/dist/token-search-model.js +3 -0
  458. package/dist/token-search-model.js.map +1 -0
  459. package/dist/toolbar-control-group.d.ts +77 -7
  460. package/dist/toolbar-control-group.js +3 -1
  461. package/dist/toolbar-text.d.ts +35 -4
  462. package/dist/toolbar-text.js +2 -1
  463. package/dist/toolbar.d.ts +59 -7
  464. package/dist/toolbar.js +1 -1
  465. package/dist/types-BuHELdXR.d.ts +117 -0
  466. package/dist/value-table.d.ts +11 -3
  467. package/dist/value-table.js +2 -1
  468. package/dist/webawesome.d.ts +8 -1
  469. package/dist/wire-catalog.d.ts +82 -0
  470. package/dist/wire-catalog.js +327 -0
  471. package/dist/wire-catalog.js.map +1 -0
  472. package/dist/wire-content-items.d.ts +11 -0
  473. package/dist/wire-content-items.js +114 -0
  474. package/dist/wire-content-items.js.map +1 -0
  475. package/dist/wire-nav-stack.d.ts +4 -1
  476. package/dist/wire-nav-stack.js +147 -7
  477. package/dist/wire-nav-stack.js.map +1 -1
  478. package/dist/wire-resizable-regions.d.ts +2 -1
  479. package/dist/wire-resizable-regions.js +2 -1
  480. package/dist/wire-scroll-dividers.d.ts +72 -0
  481. package/dist/wire-scroll-dividers.js +3 -0
  482. package/dist/wire-scroll-dividers.js.map +1 -0
  483. package/dist/wire-sidebar.d.ts +63 -0
  484. package/dist/wire-sidebar.js +231 -0
  485. package/dist/wire-sidebar.js.map +1 -0
  486. package/dist/wire-tab-bars.d.ts +19 -2
  487. package/dist/wire-tab-bars.js +1 -1
  488. package/dist/wire-tab-scaffold.js +9 -4
  489. package/dist/wire-tab-scaffold.js.map +1 -1
  490. package/dist/wire-token-search-fields.d.ts +65 -3
  491. package/dist/wire-token-search-fields.js +2 -1
  492. package/dist/wire-workbench.d.ts +116 -0
  493. package/dist/wire-workbench.js +6 -0
  494. package/dist/wire-workbench.js.map +1 -0
  495. package/dist/workbench.d.ts +244 -9
  496. package/dist/workbench.js +17 -15
  497. package/dist/workbench.js.map +1 -1
  498. package/docs/accessibility.md +476 -24
  499. package/docs/app-layouts.md +106 -8
  500. package/docs/apple-hig.md +1 -0
  501. package/docs/catalog.md +483 -0
  502. package/docs/collapsible-panel.md +371 -0
  503. package/docs/component-contract.md +667 -56
  504. package/docs/component-integration.md +75 -0
  505. package/docs/component-selection.md +540 -95
  506. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  507. package/docs/design/templates/empty-state/filtered.svg +1 -0
  508. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  509. package/docs/design/templates/empty-state/with-action.svg +1 -0
  510. package/docs/design/templates/empty-state-dark.svg +1 -0
  511. package/docs/design/templates/empty-state.svg +1 -0
  512. package/docs/design/templates/list/compact-dark.svg +1 -0
  513. package/docs/design/templates/list/compact.svg +1 -0
  514. package/docs/design/templates/list/stack-dark.svg +1 -0
  515. package/docs/design/templates/list/stack.svg +1 -0
  516. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  517. package/docs/design/templates/list-action-row/default.svg +1 -0
  518. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  519. package/docs/design/templates/list-action-row/selected.svg +1 -0
  520. package/docs/design/templates/list-action-row-dark.svg +1 -0
  521. package/docs/design/templates/list-action-row.svg +1 -0
  522. package/docs/design/templates/list-dark.svg +1 -0
  523. package/docs/design/templates/list-header/action-dark.svg +1 -0
  524. package/docs/design/templates/list-header/action.svg +1 -0
  525. package/docs/design/templates/list-header/count-dark.svg +1 -0
  526. package/docs/design/templates/list-header/count.svg +1 -0
  527. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  528. package/docs/design/templates/list-header/inline-action.svg +1 -0
  529. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  530. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  531. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  532. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  533. package/docs/design/templates/list-header-dark.svg +1 -0
  534. package/docs/design/templates/list-header.svg +1 -0
  535. package/docs/design/templates/list-item/default-dark.svg +1 -0
  536. package/docs/design/templates/list-item/default.svg +1 -0
  537. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  538. package/docs/design/templates/list-item/multiline.svg +1 -0
  539. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  540. package/docs/design/templates/list-item/selected.svg +1 -0
  541. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  542. package/docs/design/templates/list-item/trailing.svg +1 -0
  543. package/docs/design/templates/list-item-dark.svg +1 -0
  544. package/docs/design/templates/list-item.svg +1 -0
  545. package/docs/design/templates/list.svg +1 -0
  546. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  547. package/docs/design/templates/segmented-control/equal.svg +1 -0
  548. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  549. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  550. package/docs/design/templates/segmented-control-dark.svg +1 -0
  551. package/docs/design/templates/segmented-control.svg +1 -0
  552. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  553. package/docs/design/templates/skeleton/avatar.svg +1 -0
  554. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  555. package/docs/design/templates/skeleton/block.svg +1 -0
  556. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  557. package/docs/design/templates/skeleton/lines.svg +1 -0
  558. package/docs/design/templates/skeleton-dark.svg +1 -0
  559. package/docs/design/templates/skeleton.svg +1 -0
  560. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  561. package/docs/design/templates/state-banner/danger.svg +1 -0
  562. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  563. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  564. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  565. package/docs/design/templates/state-banner/info.svg +1 -0
  566. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  567. package/docs/design/templates/state-banner/success.svg +1 -0
  568. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  569. package/docs/design/templates/state-banner/warning.svg +1 -0
  570. package/docs/design/templates/state-banner-dark.svg +1 -0
  571. package/docs/design/templates/state-banner.svg +1 -0
  572. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  573. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  574. package/docs/design/templates/tab-bar-dark.svg +1 -0
  575. package/docs/design/templates/tab-bar.svg +1 -0
  576. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  577. package/docs/design/templates/token-search-field/empty.svg +1 -0
  578. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  579. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  580. package/docs/design/templates/token-search-field-dark.svg +1 -0
  581. package/docs/design/templates/token-search-field.svg +1 -0
  582. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  583. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  584. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
  585. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
  586. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
  587. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
  588. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
  589. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
  590. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
  591. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
  592. package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
  593. package/docs/design/templates/toolbar-control-group.svg +1 -0
  594. package/docs/design/templates/toolbar-dark.svg +1 -0
  595. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  596. package/docs/design/templates/toolbar-text/default.svg +1 -0
  597. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  598. package/docs/design/templates/toolbar-text/large.svg +1 -0
  599. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  600. package/docs/design/templates/toolbar-text/small.svg +1 -0
  601. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  602. package/docs/design/templates/toolbar-text.svg +1 -0
  603. package/docs/design/templates/toolbar.svg +1 -0
  604. package/docs/design/templates/value-table/details-dark.svg +1 -0
  605. package/docs/design/templates/value-table/details.svg +1 -0
  606. package/docs/design/templates/value-table-dark.svg +1 -0
  607. package/docs/design/templates/value-table.svg +1 -0
  608. package/docs/design/templates.md +138 -0
  609. package/docs/design-philosophy.md +48 -20
  610. package/docs/device-class.md +10 -9
  611. package/docs/document-baseline.md +38 -0
  612. package/docs/examples/application-ui-profile.json +60 -0
  613. package/docs/examples/command-palette-adapter.tsx +69 -17
  614. package/docs/examples/component-catalog-extension.json +52 -0
  615. package/docs/examples/component-composition-extension.json +80 -0
  616. package/docs/layout.md +534 -59
  617. package/docs/nav-stack.md +138 -14
  618. package/docs/recipes.md +137 -54
  619. package/docs/split-view.md +74 -6
  620. package/docs/sunken-panel.md +87 -0
  621. package/docs/surface-scaffold.md +28 -0
  622. package/docs/tab-scaffold.md +99 -10
  623. package/docs/type-contracts.md +134 -0
  624. package/docs/ui-analyzer.md +384 -0
  625. package/docs/ui-doctor.md +153 -0
  626. package/docs/ui-evaluator.md +139 -0
  627. package/docs/ux-demo.md +41 -16
  628. package/docs/webawesome-theme.md +218 -16
  629. package/docs/workbench.md +608 -12
  630. package/doctor/cli.mjs +120 -0
  631. package/doctor/config.schema.json +94 -0
  632. package/doctor/eslint-diagnostics.d.mts +24 -0
  633. package/doctor/eslint-diagnostics.mjs +24 -0
  634. package/doctor/index.d.mts +122 -0
  635. package/doctor/index.mjs +1364 -0
  636. package/doctor/report.schema.json +118 -0
  637. package/evaluator/cli.mjs +89 -0
  638. package/evaluator/index.d.mts +90 -0
  639. package/evaluator/index.mjs +1203 -0
  640. package/evaluator/report.schema.json +152 -0
  641. package/llms.txt +445 -48
  642. package/package.json +249 -37
  643. package/scripts/component-catalog-extension-validation.mjs +28 -0
  644. package/traversal-exclusions.mjs +27 -0
  645. package/ux-demo/recipes/app-shell.tsx +205 -17
  646. package/ux-demo/recipes/collapsible-sidebar.tsx +260 -0
  647. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  648. package/ux-demo/recipes/composer-form.tsx +133 -21
  649. package/ux-demo/recipes/list-detail-dialog.tsx +282 -0
  650. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  651. package/ux-demo/recipes/loaders.ts +15 -5
  652. package/ux-demo/recipes/loading-inspector.tsx +204 -0
  653. package/ux-demo/recipes/mount-recipe.ts +28 -10
  654. package/ux-demo/recipes/navigation-sidebar.tsx +139 -13
  655. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  656. package/ux-demo/recipes/types.ts +23 -2
  657. package/ux-demo/recipes/workspace-header.tsx +86 -5
  658. package/dist/browser/menu-action-row.js +0 -4
  659. package/dist/browser/menu-item.js +0 -4
  660. package/dist/chunk-2RJBFNB6.js +0 -172
  661. package/dist/chunk-2RJBFNB6.js.map +0 -1
  662. package/dist/chunk-2Z5TWHKQ.js +0 -34
  663. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  664. package/dist/chunk-3YD6ZNRA.js +0 -34
  665. package/dist/chunk-3YD6ZNRA.js.map +0 -1
  666. package/dist/chunk-55DATV3A.js +0 -10
  667. package/dist/chunk-55DATV3A.js.map +0 -1
  668. package/dist/chunk-56RJXPHG.js.map +0 -1
  669. package/dist/chunk-7BR3DO2A.js.map +0 -1
  670. package/dist/chunk-7LDCTU7D.js +0 -134
  671. package/dist/chunk-7LDCTU7D.js.map +0 -1
  672. package/dist/chunk-AQNKJRFH.js +0 -79
  673. package/dist/chunk-AQNKJRFH.js.map +0 -1
  674. package/dist/chunk-B24C4A6T.js +0 -22
  675. package/dist/chunk-B24C4A6T.js.map +0 -1
  676. package/dist/chunk-DAFFDO33.js +0 -14
  677. package/dist/chunk-DAFFDO33.js.map +0 -1
  678. package/dist/chunk-H6URQGJI.js +0 -42
  679. package/dist/chunk-H6URQGJI.js.map +0 -1
  680. package/dist/chunk-I7INRJO4.js +0 -17
  681. package/dist/chunk-I7INRJO4.js.map +0 -1
  682. package/dist/chunk-KJYXOTG3.js +0 -10
  683. package/dist/chunk-KJYXOTG3.js.map +0 -1
  684. package/dist/chunk-LC3YSAZC.js +0 -39
  685. package/dist/chunk-LC3YSAZC.js.map +0 -1
  686. package/dist/chunk-M5JRI6MN.js +0 -27
  687. package/dist/chunk-M5JRI6MN.js.map +0 -1
  688. package/dist/chunk-MBR3TYNL.js +0 -14
  689. package/dist/chunk-MBR3TYNL.js.map +0 -1
  690. package/dist/chunk-MFKMHK5W.js +0 -10
  691. package/dist/chunk-MFKMHK5W.js.map +0 -1
  692. package/dist/chunk-MQIZAD4A.js +0 -227
  693. package/dist/chunk-MQIZAD4A.js.map +0 -1
  694. package/dist/chunk-N3SUXLLS.js +0 -23
  695. package/dist/chunk-N3SUXLLS.js.map +0 -1
  696. package/dist/chunk-PONXLV5U.js +0 -19
  697. package/dist/chunk-PONXLV5U.js.map +0 -1
  698. package/dist/chunk-TZNCCM5H.js +0 -20
  699. package/dist/chunk-TZNCCM5H.js.map +0 -1
  700. package/dist/chunk-W2FK7ZNY.js +0 -26
  701. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  702. package/dist/chunk-WVPYVDXY.js +0 -15
  703. package/dist/chunk-WVPYVDXY.js.map +0 -1
  704. package/dist/chunk-YGN7OMLT.js.map +0 -1
  705. package/dist/chunk-YKUUZPED.js +0 -24
  706. package/dist/chunk-YKUUZPED.js.map +0 -1
  707. package/dist/menu-action-row.js +0 -5
  708. package/dist/menu-action-row.js.map +0 -1
  709. package/dist/menu-header.d.ts +0 -43
  710. package/dist/menu-header.js +0 -7
  711. package/dist/menu-header.js.map +0 -1
  712. package/dist/menu-item.d.ts +0 -33
  713. package/dist/menu-item.js +0 -5
  714. package/dist/menu-item.js.map +0 -1
  715. package/dist/panel-header.d.ts +0 -28
  716. package/dist/panel-header.js +0 -7
  717. package/dist/panel-header.js.map +0 -1
  718. package/dist/styles/menu-action-row.css +0 -160
  719. package/dist/styles/menu-header.css +0 -160
  720. package/dist/styles/menu-item.css +0 -123
  721. package/dist/styles/panel-header.css +0 -64
  722. package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
  723. package/ux-demo/recipes/recipes.css +0 -355
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list.js"}
@@ -1,10 +1,17 @@
1
1
  import * as kerfjs from 'kerfjs';
2
+ import { LucideIconSize } from './lucide-icon.js';
3
+ import 'lucide';
2
4
 
5
+ type LoadingSpinnerSize = LucideIconSize;
3
6
  interface LoadingSpinnerProps {
4
7
  className?: string;
5
8
  label?: string;
9
+ /** Named icon scale or positive pixel size, converted to rem. Omit for 1em. */
10
+ size?: LoadingSpinnerSize;
11
+ /** Native named-slot assignment when composed inside a web component. */
12
+ slot?: string;
6
13
  }
7
14
  /** Stable viewBox-centered progress ring based on svg-spinners' MIT-licensed 180-ring. */
8
- declare function LoadingSpinner({ className, label }: LoadingSpinnerProps): kerfjs.SafeHtml;
15
+ declare function LoadingSpinner({ className, label, size, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
9
16
 
10
- export { LoadingSpinner, type LoadingSpinnerProps };
17
+ export { LoadingSpinner, type LoadingSpinnerProps, type LoadingSpinnerSize };
@@ -1,3 +1,4 @@
1
- export { LoadingSpinner } from './chunk-55DATV3A.js';
1
+ export { LoadingSpinner } from './chunk-KVBRMEPM.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=loading-spinner.js.map
@@ -2,13 +2,20 @@ import * as kerfjs from 'kerfjs';
2
2
  import { IconNode } from 'lucide';
3
3
 
4
4
  type LucideNode = IconNode;
5
+ type LucideIconSize = 'xs' | 's' | 'm' | 'l' | 'xl' | number;
5
6
  interface LucideIconProps {
6
7
  icon: LucideNode;
7
8
  name: string;
9
+ /** Outline by default; solid fills compatible glyphs with the current text color. */
10
+ appearance?: 'outline' | 'solid';
8
11
  className?: string;
9
12
  label?: string;
13
+ /** Named icon scale or positive pixel size, converted to rem. Omit for 1em. */
14
+ size?: LucideIconSize;
15
+ /** Native named-slot assignment when composed inside a web component. */
16
+ slot?: string;
10
17
  }
11
18
  /** Render a Lucide-compatible icon node without copying icon SVG strings. */
12
- declare function LucideIcon({ icon, name, className, label }: LucideIconProps): kerfjs.SafeHtml;
19
+ declare function LucideIcon({ icon, name, appearance, className, label, size, slot, }: LucideIconProps): kerfjs.SafeHtml;
13
20
 
14
- export { LucideIcon, type LucideIconProps, type LucideNode };
21
+ export { LucideIcon, type LucideIconProps, type LucideIconSize, type LucideNode };
@@ -1,3 +1,4 @@
1
- export { LucideIcon } from './chunk-W2FK7ZNY.js';
1
+ export { LucideIcon } from './chunk-WTSNV5RG.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=lucide-icon.js.map
@@ -1,4 +1,9 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { PaneAppearance } from './pane.js';
3
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
4
+ import { ToolbarConfig } from './toolbar.js';
5
+ import { ToolbarTextSize, HeadingLevel } from './toolbar-text.js';
6
+ import './sides-BPSWde0A.js';
2
7
 
3
8
  /**
4
9
  * One entry in a {@link NavStack}. The app owns the stack as an array (usually a
@@ -7,11 +12,34 @@ import { SafeHtml } from 'kerfjs';
7
12
  interface NavStackView {
8
13
  /** Stable identity for keyed reconcile and transition direction. */
9
14
  key: string;
10
- content: SafeHtml;
15
+ content: KerfUiContent;
16
+ /** Background of this view's scrolling work surface. */
17
+ appearance?: PaneAppearance;
11
18
  /** Title shown in the top toolbar for this view. */
12
19
  title?: string;
20
+ /** Leading groups for this view's top toolbar, after the back control and before the title. */
21
+ leading?: KerfUiContent;
22
+ /** Center content for this view's top toolbar (placed per `toolbarConfig.centerAlign`). */
23
+ center?: KerfUiContent;
13
24
  /** Trailing actions for this view's top toolbar. */
14
- toolbar?: SafeHtml;
25
+ toolbar?: KerfUiContent;
26
+ /** Fixed chrome below this view's toolbar, above its scrolling content. */
27
+ header?: KerfUiContent;
28
+ /** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
29
+ bottomToolbar?: KerfUiContent;
30
+ }
31
+ /**
32
+ * The top toolbar's configuration. Its `ToolbarConfig` forwards to the real
33
+ * `Toolbar` the stack renders; by default that toolbar draws no divider and
34
+ * claims the top and side safe-area edges the stack still touches.
35
+ */
36
+ interface NavStackToolbarConfig extends ToolbarConfig {
37
+ /** Accessible name of the top toolbar (default: none). */
38
+ label?: string;
39
+ /** Size of the view title's `ToolbarText` (default `large`). */
40
+ titleSize?: ToolbarTextSize;
41
+ /** Expose the view title as a heading at this level (default: a plain span). */
42
+ headingLevel?: HeadingLevel;
15
43
  }
16
44
  interface NavStackProps {
17
45
  id: string;
@@ -19,20 +47,48 @@ interface NavStackProps {
19
47
  label: string;
20
48
  /** The stack, root first; the last entry is the active top view. */
21
49
  views: NavStackView[];
22
- /** Accessible label for the back control (default "Back"). */
50
+ /** Accessible label for the icon-only back control (default "Back"). */
23
51
  backLabel?: string;
52
+ /** The back control's icon (default a chevron-left `LucideIcon`). */
53
+ backIcon?: KerfUiContent;
54
+ /**
55
+ * Visible text beside the back icon, such as the previous view's title
56
+ * (default: icon only). When set, the text names the control and
57
+ * `backLabel` is not used.
58
+ */
59
+ backText?: string;
60
+ /** The top toolbar's configuration, forwarded to its `Toolbar`. */
61
+ toolbarConfig?: NavStackToolbarConfig;
62
+ /** Persistent last group in every view's top toolbar, supplied by a hosting panel. */
63
+ panelToggle?: KerfUiContent;
24
64
  /** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
25
65
  hideToolbar?: boolean;
26
- /** Optional persistent bottom toolbar. */
27
- bottomToolbar?: SafeHtml;
66
+ /** Optional persistent bottom toolbar used when the active view does not provide one. */
67
+ bottomToolbar?: KerfUiContent;
68
+ /**
69
+ * The line under the top chrome and over the bottom toolbar, where they
70
+ * meet the active view. `scroll` (default) shows the chrome's line only
71
+ * while the view's content is scrolled beneath it, and the bottom
72
+ * toolbar's only while more content lies below — never when the content
73
+ * fits — once `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is
74
+ * wired above the stack; unwired, neither shows. `always` shows both
75
+ * without the wiring; `none` neither, even when wired. The line is drawn
76
+ * inside the chrome, so no state moves the chrome or the content. A
77
+ * `toolbarConfig.dividerSides` edge is the Toolbar's own and is unaffected.
78
+ */
79
+ chromeDividers?: 'scroll' | 'always' | 'none';
28
80
  className?: string;
81
+ /** Native named-slot assignment when composed inside a web component. */
82
+ slot?: string;
29
83
  }
30
84
  /**
31
85
  * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
32
86
  * 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.
87
+ * cross-fades the chrome across a change. Its top chrome is a real `Toolbar`: the
88
+ * back control and title lead, the active view's `leading` / `center` / `toolbar`
89
+ * content fills the zones, and `toolbarConfig` configures it. A single-pane
90
+ * layout is a `NavStack` with one entry. See `docs/23-app-layouts.md` §3.1.
35
91
  */
36
- declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className }: NavStackProps): SafeHtml;
92
+ declare function NavStack({ id, label, views, backLabel, backIcon, backText, toolbarConfig, panelToggle, hideToolbar, bottomToolbar, chromeDividers, className, slot, }: NavStackProps): kerfjs.SafeHtml;
37
93
 
38
- export { NavStack, type NavStackProps, type NavStackView };
94
+ export { NavStack, type NavStackProps, type NavStackToolbarConfig, type NavStackView };
package/dist/nav-stack.js CHANGED
@@ -1,4 +1,9 @@
1
- export { NavStack } from './chunk-N3SUXLLS.js';
1
+ export { NavStack } from './chunk-DC6CN2DS.js';
2
+
3
+
4
+
5
+
6
+
2
7
 
3
8
 
4
9
 
package/dist/pane.d.ts ADDED
@@ -0,0 +1,108 @@
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
+
4
+ /**
5
+ * Logical pane sides: where a {@link Pane} can show a separator and where it can
6
+ * compensate for a device safe-area inset.
7
+ */
8
+ type PaneSeparatorSide = 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
9
+ /** Semantic root elements supported by {@link Pane}. */
10
+ type PaneElement = 'article' | 'aside' | 'div' | 'main' | 'section';
11
+ /** Semantic elements supported by the scrolling content slot. */
12
+ type PaneContentElement = 'div' | 'main' | 'nav' | 'section';
13
+ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
14
+ 'data-component'?: never;
15
+ 'data-separator-block-start'?: never;
16
+ 'data-separator-block-end'?: never;
17
+ 'data-separator-inline-start'?: never;
18
+ 'data-separator-inline-end'?: never;
19
+ 'data-safe-area-block-start'?: never;
20
+ 'data-safe-area-block-end'?: never;
21
+ 'data-safe-area-inline-start'?: never;
22
+ 'data-safe-area-inline-end'?: never;
23
+ 'data-chrome-placement'?: never;
24
+ 'data-chrome-dividers'?: never;
25
+ 'data-appearance'?: never;
26
+ }>;
27
+ /** How a Pane's header and footer relate to its scrolling content. */
28
+ type PaneChromePlacement = 'fixed' | 'auto';
29
+ /**
30
+ * When a Pane draws the divider between its pinned header or footer and its
31
+ * scrolling content: `scroll` while content is scrolled away beneath that
32
+ * chrome, as `wireScrollDividers` reports; `always`; or `none`.
33
+ */
34
+ type PaneChromeDividers = 'scroll' | 'always' | 'none';
35
+ /** Background treatment of the Pane's scrolling work surface. */
36
+ type PaneAppearance = 'default' | 'sunken';
37
+ interface PaneProps {
38
+ /** Optional fixed chrome above the scrolling content, arranged vertically. */
39
+ header?: KerfUiContent;
40
+ /** The pane's primary vertical, scrolling content stack. */
41
+ children?: KerfUiContent;
42
+ /** Optional fixed chrome below the scrolling content. */
43
+ footer?: KerfUiContent;
44
+ /**
45
+ * Whether the header and footer stay pinned around the scrolling content.
46
+ * `fixed` (default) always pins them. `auto` pins them while the pane is
47
+ * tall enough, and below 480px of height (30rem, so it scales with the text
48
+ * size) lets the whole pane scroll as one column, so tall chrome can never
49
+ * squeeze the content to nothing.
50
+ */
51
+ chromePlacement?: PaneChromePlacement;
52
+ /**
53
+ * The divider under the header and over the footer, where they meet the
54
+ * scrolling content. Omitted defaults to `scroll` for a plain pane and
55
+ * `always` for `appearance="sunken"`. `scroll` shows the header's divider only
56
+ * while the content is scrolled down, and the footer's only while more
57
+ * content lies below — never when the content fits — once
58
+ * `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is wired above
59
+ * the pane; unwired, neither shows. `always` shows both; `none` neither.
60
+ * The line is drawn inside the chrome, so no state moves the content.
61
+ */
62
+ chromeDividers?: PaneChromeDividers;
63
+ /** Paint the scrolling work surface with the shared lowered-surface color. */
64
+ appearance?: PaneAppearance;
65
+ /** Root semantics. Defaults to `div`. */
66
+ element?: PaneElement;
67
+ /** Scrolling content semantics. Defaults to `div`. */
68
+ contentElement?: PaneContentElement;
69
+ /** Independent logical-edge separator lines. Defaults to none. */
70
+ separators?: readonly PaneSeparatorSide[];
71
+ /**
72
+ * Sides on which the pane may compensate for a device safe-area inset.
73
+ * Defaults to every side: the pane pads its slots for each side that still
74
+ * reaches an unsafe screen edge, as its surrounding layout reports, while its
75
+ * background and separators paint through. List only the sides an app-owned
76
+ * layout places at a screen edge, or pass `[]` to opt out.
77
+ */
78
+ safeAreaEdges?: readonly PaneSeparatorSide[];
79
+ id?: string;
80
+ /** Accessible name for a landmark root such as `aside` or `main`. */
81
+ label?: string;
82
+ /** Accessible name for a landmark scrolling slot such as `nav`. */
83
+ contentLabel?: string;
84
+ className?: string;
85
+ headerClassName?: string;
86
+ contentClassName?: string;
87
+ footerClassName?: string;
88
+ /** Safe `data-*` metadata; Pane-owned structural attributes remain protected. */
89
+ rootAttributes?: PaneRootAttributes;
90
+ /** Native named-slot assignment when composed inside a web component. */
91
+ slot?: string;
92
+ }
93
+ /**
94
+ * A pane's configuration, apart from its content and styling hooks: the props a
95
+ * composite that renders a `Pane` for the app (a Workbench panel or work area,
96
+ * or a CollapsiblePanel) forwards, so the app configures that pane instead of
97
+ * styling it. An omitted or `undefined` field keeps the composite's default.
98
+ */
99
+ type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separators' | 'safeAreaEdges' | 'chromeDividers' | 'appearance'>;
100
+ /**
101
+ * An unpadded application column with optional fixed header/footer slots and one
102
+ * scrolling vertical content owner. Separator lines are independently opt-in on
103
+ * each logical edge, so the same component works as a sidebar, main area,
104
+ * inspector, or dialog column.
105
+ */
106
+ declare function Pane({ header, children, footer, chromePlacement, chromeDividers, appearance, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
107
+
108
+ export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlacement, type PaneConfig, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
package/dist/pane.js ADDED
@@ -0,0 +1,4 @@
1
+ export { Pane } from './chunk-3BYFWTP3.js';
2
+
3
+
4
+ //# sourceMappingURL=pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"pane.js"}
@@ -0,0 +1,72 @@
1
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
+ import { LucideIcon } from './lucide-icon.js';
3
+ import { ToolbarConfig } from './toolbar.js';
4
+
5
+ /** Which edge a collapsible panel docks to. */
6
+ type PanelSide = 'left' | 'right' | 'bottom';
7
+ /**
8
+ * The standard collapse/expand icon for a panel `side` and `collapsed` state,
9
+ * so every app's sidebars and drawers use one recognizable convention:
10
+ * `PanelLeft*` for a left rail, `PanelRight*` for a right rail, `PanelBottom*`
11
+ * for a bottom drawer — the `Close` glyph while open, the `Open` glyph while
12
+ * collapsed. Exposed so an app can render its own toggle affordance.
13
+ */
14
+ declare function collapsiblePanelToggleIcon(side: PanelSide, collapsed: boolean): {
15
+ icon: Parameters<typeof LucideIcon>[0]['icon'];
16
+ name: string;
17
+ };
18
+ /**
19
+ * The standard collapse toggle a panel toolbar renders. The app handles the
20
+ * button's `data-action` and flips its own `collapsed` flag.
21
+ */
22
+ interface PanelToggle {
23
+ /** The `data-action` the toggle button carries. */
24
+ action: string;
25
+ /** The panel's short name, for the accessible "Show …" / "Hide …" label. */
26
+ name: string;
27
+ /** Accessible label while the panel is collapsed. Defaults to `Show {name}`. */
28
+ showLabel?: string;
29
+ /** Accessible label while the panel is open. Defaults to `Hide {name}`. */
30
+ hideLabel?: string;
31
+ }
32
+ /**
33
+ * A collapsible panel's top toolbar, composed so its groups follow the
34
+ * panel's open state.
35
+ *
36
+ * - `title` precedes the `leading` zone. Groups may appear in any of the
37
+ * `leading`, `center`, and `trailing` zones while the panel is open.
38
+ * - Groups marked `relocateOnCollapse` move to the work area's toolbar while
39
+ * the panel is collapsed, preserving their order across the three zones.
40
+ * - `toggle` is always the last group: in the panel's toolbar while it is
41
+ * open, and right after the relocated groups in the work area's toolbar
42
+ * while it is collapsed.
43
+ *
44
+ * Relocated content renders in both places while the panel is collapsed (the
45
+ * panel's copy is inert), so give it no `id`s. Pass groups directly or in
46
+ * arrays so their render-time annotation remains available to the panel.
47
+ *
48
+ * The toolbar's configuration (`dividerSides`, `centerAlign`, `responsive`,
49
+ * `responsiveAt`, `safeAreaEdges`) forwards to its `Toolbar`. It draws no
50
+ * divider of its own: the panel's `Pane` draws the line under it while the
51
+ * content is scrolled (its `chromeDividers`, wired by `wireScrollDividers`).
52
+ */
53
+ interface PanelToolbar extends ToolbarConfig {
54
+ /** Accessible name of the panel's toolbar. */
55
+ label: string;
56
+ title?: KerfUiContent;
57
+ leading?: KerfUiContent;
58
+ center?: KerfUiContent;
59
+ trailing?: KerfUiContent;
60
+ toggle?: PanelToggle;
61
+ }
62
+ /** A panel's fixed bottom toolbar, below its optional footer content. */
63
+ interface PanelBottomToolbar extends ToolbarConfig {
64
+ label: string;
65
+ leading?: KerfUiContent;
66
+ center?: KerfUiContent;
67
+ trailing?: KerfUiContent;
68
+ }
69
+ /** Whether panel chrome stays fixed, scrolls, or follows Pane's auto rule. */
70
+ type PanelChromePlacement = 'fixed' | 'scroll' | 'auto';
71
+
72
+ export { type PanelSide as P, type PanelToolbar as a, type PanelChromePlacement as b, type PanelBottomToolbar as c, type PanelToggle as d, collapsiblePanelToggleIcon as e };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Marker export for tests and tooling; importing this module registers the
3
+ * Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,
4
+ * `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard
5
+ * choice through the item's click so delegated `data-action`s run.
6
+ */
7
+ declare const popupMenuElementsRegistered = true;
8
+
9
+ export { popupMenuElementsRegistered };
@@ -0,0 +1,244 @@
1
+ import { installHelpTags } from './chunk-BFPBS5Y4.js';
2
+ import '@awesome.me/webawesome/dist/components/button/button.js';
3
+ import '@awesome.me/webawesome/dist/components/divider/divider.js';
4
+ import WaDropdownItem from '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';
5
+ import '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';
6
+ import WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';
7
+
8
+ // src/install-dropdown-show-focus.ts
9
+ var installed = /* @__PURE__ */ new WeakSet();
10
+ var showEpoch = /* @__PURE__ */ new WeakMap();
11
+ function installDropdownShowFocus(prototype) {
12
+ if (installed.has(prototype)) return;
13
+ installed.add(prototype);
14
+ const target = prototype;
15
+ const showMenu = target.showMenu;
16
+ target.showMenu = async function() {
17
+ const scoped = this.classList.contains("kui-popup-menu") || this.closest(".kui-popup-surface") !== null;
18
+ if (!scoped) return showMenu.call(this);
19
+ const epoch = (showEpoch.get(this) ?? 0) + 1;
20
+ showEpoch.set(this, epoch);
21
+ let navigatedItem;
22
+ const rememberFocus = (event) => {
23
+ const item = event.target;
24
+ if (this.menu?.classList.contains("show") && item instanceof HTMLElement && item.localName === "wa-dropdown-item" && this.contains(item)) {
25
+ navigatedItem = item;
26
+ }
27
+ };
28
+ this.addEventListener("focusin", rememberFocus);
29
+ try {
30
+ await showMenu.call(this);
31
+ } finally {
32
+ this.removeEventListener("focusin", rememberFocus);
33
+ }
34
+ if (showEpoch.get(this) !== epoch || !this.open || !this.popup?.active || !navigatedItem?.isConnected || !this.contains(navigatedItem))
35
+ return;
36
+ const siblings = navigatedItem.slot === "submenu" ? Array.from(navigatedItem.parentElement?.children ?? []).filter(
37
+ (item) => item.localName === "wa-dropdown-item"
38
+ ) : this.getItems();
39
+ siblings.forEach((item) => {
40
+ item.active = item === navigatedItem;
41
+ });
42
+ navigatedItem.focus({ preventScroll: true });
43
+ };
44
+ }
45
+
46
+ // src/install-popup-menu-keyboard.ts
47
+ var installed2 = /* @__PURE__ */ new WeakSet();
48
+ function installPopupMenuKeyboard(prototype) {
49
+ if (installed2.has(prototype)) return;
50
+ installed2.add(prototype);
51
+ const target = prototype;
52
+ const makeSelection = target.makeSelection;
53
+ target.makeSelection = function(item, event) {
54
+ if (event instanceof KeyboardEvent && this.classList.contains("kui-popup-menu") && !item.disabled) {
55
+ item.click();
56
+ return;
57
+ }
58
+ makeSelection.call(this, item, event);
59
+ };
60
+ }
61
+
62
+ // src/install-popup-menu-lifecycle.ts
63
+ var installed3 = /* @__PURE__ */ new WeakSet();
64
+ function installPopupMenuLifecycle(prototype) {
65
+ if (installed3.has(prototype)) return;
66
+ installed3.add(prototype);
67
+ const target = prototype;
68
+ const showMenu = target.showMenu;
69
+ const hideMenu = target.hideMenu;
70
+ const hiding = /* @__PURE__ */ new WeakMap();
71
+ target.showMenu = function() {
72
+ const transition = hiding.get(this);
73
+ if (transition && this.open && this.popup?.active && this.classList.contains("kui-popup-menu")) {
74
+ this.popup.active = false;
75
+ transition.reopened = true;
76
+ }
77
+ return showMenu.call(this);
78
+ };
79
+ target.hideMenu = async function() {
80
+ const scoped = this.classList.contains("kui-popup-menu");
81
+ const transition = { reopened: false };
82
+ if (scoped) hiding.set(this, transition);
83
+ await hideMenu.call(this);
84
+ if (scoped && hiding.get(this) === transition && this.open && this.isConnected && this.popup?.active && !transition.reopened) {
85
+ this.popup.active = false;
86
+ void this.showMenu();
87
+ }
88
+ if (hiding.get(this) === transition) hiding.delete(this);
89
+ };
90
+ }
91
+
92
+ // src/install-popup-menu-submenu-focus.ts
93
+ var installed4 = /* @__PURE__ */ new WeakSet();
94
+ function installPopupMenuSubmenuFocus(prototype) {
95
+ if (installed4.has(prototype)) return;
96
+ installed4.add(prototype);
97
+ const target = prototype;
98
+ const openSubmenu = target.openSubmenu;
99
+ const closeSubmenu = target.closeSubmenu;
100
+ const submenuOpen = Object.getOwnPropertyDescriptor(prototype, "submenuOpen");
101
+ if (submenuOpen?.set) {
102
+ Object.defineProperty(prototype, "submenuOpen", {
103
+ ...submenuOpen,
104
+ set(value) {
105
+ const wasOpen = this.submenuOpen;
106
+ submenuOpen.set.call(this, value);
107
+ if (value && wasOpen && this.submenuElement?.hidden && this.closest("wa-dropdown.kui-popup-menu"))
108
+ void this.openSubmenu();
109
+ }
110
+ });
111
+ }
112
+ target.closeSubmenu = async function() {
113
+ const submenu = this.submenuElement;
114
+ await closeSubmenu.call(this);
115
+ if (this.submenuOpen && submenu?.hidden && this.isConnected && this.closest("wa-dropdown.kui-popup-menu"))
116
+ void this.openSubmenu();
117
+ };
118
+ target.openSubmenu = async function() {
119
+ const submenu = this.submenuElement;
120
+ if (!this.closest("wa-dropdown.kui-popup-menu") || !submenu)
121
+ return openSubmenu.call(this);
122
+ if (submenu.classList.contains("show")) {
123
+ if (!submenu.hidden) return;
124
+ submenu.classList.remove("show");
125
+ }
126
+ let desired;
127
+ const trackFocus = (event) => {
128
+ const item = event.composedPath().find(
129
+ (node) => node instanceof HTMLElement && node.localName === "wa-dropdown-item" && node.getAttribute("slot") === "submenu"
130
+ );
131
+ if (item && this.getSubmenuItems().includes(item)) desired = item;
132
+ };
133
+ submenu.addEventListener("focusin", trackFocus);
134
+ try {
135
+ await openSubmenu.call(this);
136
+ } finally {
137
+ submenu.removeEventListener("focusin", trackFocus);
138
+ }
139
+ const items = this.getSubmenuItems();
140
+ if (!desired || desired === items[0]) return;
141
+ const selected = desired;
142
+ window.setTimeout(() => {
143
+ if (!this.isConnected || !this.submenuOpen || submenu.hidden || document.activeElement !== items[0])
144
+ return;
145
+ items.forEach((item) => item.active = item === selected);
146
+ selected.focus({ preventScroll: true });
147
+ }, 0);
148
+ };
149
+ }
150
+
151
+ // src/install-popup-menu-submenu-placement.ts
152
+ var installed5 = /* @__PURE__ */ new WeakSet();
153
+ var phoneWidth = "(max-width: 480px)";
154
+ var viewportInset = 8;
155
+ var menuGap = 4;
156
+ function phoneSubmenuPosition(parent, submenu, viewport, rtl) {
157
+ const width = Math.min(submenu.width, viewport.width - 2 * viewportInset);
158
+ const height = submenu.height;
159
+ const below = Math.max(
160
+ 0,
161
+ viewport.height - parent.bottom - menuGap - viewportInset
162
+ );
163
+ const above = Math.max(0, parent.top - menuGap - viewportInset);
164
+ const useBelow = height <= below || height > above && below >= above;
165
+ const availableHeight = useBelow ? below : above;
166
+ const left = rtl ? parent.right - width : parent.left;
167
+ return {
168
+ left: Math.max(
169
+ viewportInset,
170
+ Math.min(left, viewport.width - viewportInset - width)
171
+ ),
172
+ top: useBelow ? parent.bottom + menuGap : parent.top - menuGap - Math.min(height, availableHeight),
173
+ maxHeight: availableHeight,
174
+ maxWidth: viewport.width - 2 * viewportInset
175
+ };
176
+ }
177
+ function clearPhoneStyles(submenu) {
178
+ for (const property of [
179
+ "position",
180
+ "left",
181
+ "top",
182
+ "max-width",
183
+ "max-height",
184
+ "box-sizing",
185
+ "overflow-y"
186
+ ])
187
+ submenu.style.removeProperty(property);
188
+ }
189
+ function installPopupMenuSubmenuPlacement(prototype) {
190
+ if (installed5.has(prototype)) return;
191
+ installed5.add(prototype);
192
+ const target = prototype;
193
+ const positionSubmenu = target.positionSubmenu;
194
+ target.positionSubmenu = function(item) {
195
+ if (!this.classList.contains("kui-popup-menu")) {
196
+ positionSubmenu.call(this, item);
197
+ return;
198
+ }
199
+ const submenu = item.submenuElement;
200
+ if (!window.matchMedia(phoneWidth).matches || !submenu || !this.menu) {
201
+ if (submenu) clearPhoneStyles(submenu);
202
+ positionSubmenu.call(this, item);
203
+ return;
204
+ }
205
+ window.queueMicrotask(() => {
206
+ if (!this.isConnected || !item.submenuOpen || !window.matchMedia(phoneWidth).matches || !this.menu || !submenu.isConnected)
207
+ return;
208
+ const parentItem = item.parentElement?.localName === "wa-dropdown-item" ? item.parentElement : void 0;
209
+ const parentMenu = parentItem?.submenuElement ?? this.menu;
210
+ submenu.style.position = "fixed";
211
+ submenu.style.maxWidth = `calc(100vw - ${2 * viewportInset}px)`;
212
+ submenu.style.maxHeight = "none";
213
+ submenu.style.boxSizing = "border-box";
214
+ submenu.style.overflowY = "auto";
215
+ const placement = phoneSubmenuPosition(
216
+ parentMenu.getBoundingClientRect(),
217
+ submenu.getBoundingClientRect(),
218
+ { width: window.innerWidth, height: window.innerHeight },
219
+ window.getComputedStyle(this).direction === "rtl"
220
+ );
221
+ submenu.style.left = `${placement.left}px`;
222
+ submenu.style.top = `${placement.top}px`;
223
+ submenu.style.maxHeight = `${placement.maxHeight}px`;
224
+ submenu.style.maxWidth = `${placement.maxWidth}px`;
225
+ submenu.setAttribute(
226
+ "data-placement",
227
+ placement.top >= parentMenu.getBoundingClientRect().bottom ? "bottom-start" : "top-start"
228
+ );
229
+ });
230
+ };
231
+ }
232
+
233
+ // src/popup-menu-register.ts
234
+ installPopupMenuKeyboard(WaDropdown.prototype);
235
+ installPopupMenuLifecycle(WaDropdown.prototype);
236
+ installDropdownShowFocus(WaDropdown.prototype);
237
+ installPopupMenuSubmenuFocus(WaDropdownItem.prototype);
238
+ installPopupMenuSubmenuPlacement(WaDropdown.prototype);
239
+ installHelpTags();
240
+ var popupMenuElementsRegistered = true;
241
+
242
+ export { popupMenuElementsRegistered };
243
+
244
+ //# sourceMappingURL=popup-menu-register.js.map