@bettercms-ai/kit 0.1.1 → 2.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1100) hide show
  1. package/README.md +22 -16
  2. package/dist/_virtual/_rolldown/runtime.js +13 -0
  3. package/dist/adapters/dock-values.d.ts +28 -0
  4. package/dist/adapters/dock-values.js +41 -0
  5. package/dist/adapters/dock-values.js.map +1 -0
  6. package/dist/adapters/icons.d.ts +15 -0
  7. package/dist/adapters/icons.js +27 -0
  8. package/dist/adapters/icons.js.map +1 -0
  9. package/dist/adapters/lossy.d.ts +326 -0
  10. package/dist/adapters/lossy.js +414 -0
  11. package/dist/adapters/lossy.js.map +1 -0
  12. package/dist/adapters/prod-types.d.ts +546 -0
  13. package/dist/adapters/prod-types.js +714 -0
  14. package/dist/adapters/prod-types.js.map +1 -0
  15. package/dist/adapters/schema.d.ts +154 -0
  16. package/dist/adapters/schema.js +3020 -0
  17. package/dist/adapters/schema.js.map +1 -0
  18. package/dist/adapters/values.d.ts +221 -0
  19. package/dist/adapters/values.js +623 -0
  20. package/dist/adapters/values.js.map +1 -0
  21. package/dist/brand/logo.d.ts +17 -0
  22. package/dist/brand/logo.js +96 -0
  23. package/dist/brand/logo.js.map +1 -0
  24. package/dist/context.d.ts +359 -0
  25. package/dist/context.js +217 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/controls/button.d.ts +72 -0
  28. package/dist/controls/button.js +578 -0
  29. package/dist/controls/button.js.map +1 -0
  30. package/dist/controls/c1.d.ts +11 -0
  31. package/dist/controls/c1.js +24 -0
  32. package/dist/controls/c1.js.map +1 -0
  33. package/dist/controls/c2.d.ts +10 -0
  34. package/dist/controls/c2.js +19 -0
  35. package/dist/controls/c2.js.map +1 -0
  36. package/dist/controls/choice.d.ts +44 -0
  37. package/dist/controls/choice.js +463 -0
  38. package/dist/controls/choice.js.map +1 -0
  39. package/dist/controls/code-register.d.ts +1 -0
  40. package/dist/controls/code-register.js +8 -0
  41. package/dist/controls/code-register.js.map +1 -0
  42. package/dist/controls/code.d.ts +42 -0
  43. package/dist/controls/code.js +397 -0
  44. package/dist/controls/code.js.map +1 -0
  45. package/dist/controls/color.d.ts +5 -0
  46. package/dist/controls/color.js +130 -0
  47. package/dist/controls/color.js.map +1 -0
  48. package/dist/controls/component-services.d.ts +156 -0
  49. package/dist/controls/component-services.js +7 -0
  50. package/dist/controls/component-services.js.map +1 -0
  51. package/dist/controls/date-register.d.ts +1 -0
  52. package/dist/controls/date-register.js +9 -0
  53. package/dist/controls/date-register.js.map +1 -0
  54. package/dist/controls/date-zone.d.ts +104 -0
  55. package/dist/controls/date-zone.js +278 -0
  56. package/dist/controls/date-zone.js.map +1 -0
  57. package/dist/controls/date.d.ts +7 -0
  58. package/dist/controls/date.js +466 -0
  59. package/dist/controls/date.js.map +1 -0
  60. package/dist/controls/form-picker-register.d.ts +7 -0
  61. package/dist/controls/form-picker-register.js +15 -0
  62. package/dist/controls/form-picker-register.js.map +1 -0
  63. package/dist/controls/form-picker.d.ts +43 -0
  64. package/dist/controls/form-picker.js +85 -0
  65. package/dist/controls/form-picker.js.map +1 -0
  66. package/dist/controls/icon-register.d.ts +1 -0
  67. package/dist/controls/icon-register.js +8 -0
  68. package/dist/controls/icon-register.js.map +1 -0
  69. package/dist/controls/icon.d.ts +40 -0
  70. package/dist/controls/icon.js +360 -0
  71. package/dist/controls/icon.js.map +1 -0
  72. package/dist/controls/index.d.ts +5 -0
  73. package/dist/controls/index.js +38 -0
  74. package/dist/controls/index.js.map +1 -0
  75. package/dist/controls/json-register.d.ts +1 -0
  76. package/dist/controls/json-register.js +8 -0
  77. package/dist/controls/json-register.js.map +1 -0
  78. package/dist/controls/json.d.ts +2 -0
  79. package/dist/controls/json.js +82 -0
  80. package/dist/controls/json.js.map +1 -0
  81. package/dist/controls/link.d.ts +260 -0
  82. package/dist/controls/link.js +1186 -0
  83. package/dist/controls/link.js.map +1 -0
  84. package/dist/controls/location-register.d.ts +1 -0
  85. package/dist/controls/location-register.js +8 -0
  86. package/dist/controls/location-register.js.map +1 -0
  87. package/dist/controls/location.d.ts +16 -0
  88. package/dist/controls/location.js +221 -0
  89. package/dist/controls/location.js.map +1 -0
  90. package/dist/controls/media-register.d.ts +1 -0
  91. package/dist/controls/media-register.js +12 -0
  92. package/dist/controls/media-register.js.map +1 -0
  93. package/dist/controls/media-services.d.ts +46 -0
  94. package/dist/controls/media-services.js +0 -0
  95. package/dist/controls/media.d.ts +104 -0
  96. package/dist/controls/media.js +1396 -0
  97. package/dist/controls/media.js.map +1 -0
  98. package/dist/controls/number.d.ts +22 -0
  99. package/dist/controls/number.js +196 -0
  100. package/dist/controls/number.js.map +1 -0
  101. package/dist/controls/reference-register.d.ts +1 -0
  102. package/dist/controls/reference-register.js +10 -0
  103. package/dist/controls/reference-register.js.map +1 -0
  104. package/dist/controls/reference-services.d.ts +58 -0
  105. package/dist/controls/reference-services.js +0 -0
  106. package/dist/controls/reference.d.ts +23 -0
  107. package/dist/controls/reference.js +777 -0
  108. package/dist/controls/reference.js.map +1 -0
  109. package/dist/controls/rich-text/blocks.d.ts +49 -0
  110. package/dist/controls/rich-text/blocks.js +1859 -0
  111. package/dist/controls/rich-text/blocks.js.map +1 -0
  112. package/dist/controls/rich-text/catalog.d.ts +101 -0
  113. package/dist/controls/rich-text/catalog.js +623 -0
  114. package/dist/controls/rich-text/catalog.js.map +1 -0
  115. package/dist/controls/rich-text/codec.d.ts +64 -0
  116. package/dist/controls/rich-text/codec.js +34 -0
  117. package/dist/controls/rich-text/codec.js.map +1 -0
  118. package/dist/controls/rich-text/component-card.d.ts +14 -0
  119. package/dist/controls/rich-text/component-card.js +1024 -0
  120. package/dist/controls/rich-text/component-card.js.map +1 -0
  121. package/dist/controls/rich-text/component-panel.d.ts +47 -0
  122. package/dist/controls/rich-text/component-panel.js +141 -0
  123. package/dist/controls/rich-text/component-panel.js.map +1 -0
  124. package/dist/controls/rich-text/control.d.ts +20 -0
  125. package/dist/controls/rich-text/control.js +296 -0
  126. package/dist/controls/rich-text/control.js.map +1 -0
  127. package/dist/controls/rich-text/dom.d.ts +233 -0
  128. package/dist/controls/rich-text/dom.js +1019 -0
  129. package/dist/controls/rich-text/dom.js.map +1 -0
  130. package/dist/controls/rich-text/editor.d.ts +57 -0
  131. package/dist/controls/rich-text/editor.js +1630 -0
  132. package/dist/controls/rich-text/editor.js.map +1 -0
  133. package/dist/controls/rich-text/floating.d.ts +28 -0
  134. package/dist/controls/rich-text/floating.js +154 -0
  135. package/dist/controls/rich-text/floating.js.map +1 -0
  136. package/dist/controls/rich-text/index.d.ts +1 -0
  137. package/dist/controls/rich-text/index.js +12 -0
  138. package/dist/controls/rich-text/index.js.map +1 -0
  139. package/dist/controls/rich-text/link-form.d.ts +13 -0
  140. package/dist/controls/rich-text/link-form.js +147 -0
  141. package/dist/controls/rich-text/link-form.js.map +1 -0
  142. package/dist/controls/rich-text/markdown.d.ts +6 -0
  143. package/dist/controls/rich-text/markdown.js +181 -0
  144. package/dist/controls/rich-text/markdown.js.map +1 -0
  145. package/dist/controls/rich-text/ops.d.ts +35 -0
  146. package/dist/controls/rich-text/ops.js +316 -0
  147. package/dist/controls/rich-text/ops.js.map +1 -0
  148. package/dist/controls/rich-text/plain.d.ts +17 -0
  149. package/dist/controls/rich-text/plain.js +44 -0
  150. package/dist/controls/rich-text/plain.js.map +1 -0
  151. package/dist/controls/rich-text/toolbar.d.ts +89 -0
  152. package/dist/controls/rich-text/toolbar.js +343 -0
  153. package/dist/controls/rich-text/toolbar.js.map +1 -0
  154. package/dist/controls/scale.d.ts +56 -0
  155. package/dist/controls/scale.js +563 -0
  156. package/dist/controls/scale.js.map +1 -0
  157. package/dist/controls/slot-register.d.ts +6 -0
  158. package/dist/controls/slot-register.js +13 -0
  159. package/dist/controls/slot-register.js.map +1 -0
  160. package/dist/controls/slot-services.d.ts +122 -0
  161. package/dist/controls/slot-services.js +155 -0
  162. package/dist/controls/slot-services.js.map +1 -0
  163. package/dist/controls/slot.d.ts +33 -0
  164. package/dist/controls/slot.js +366 -0
  165. package/dist/controls/slot.js.map +1 -0
  166. package/dist/controls/table/index.d.ts +1 -0
  167. package/dist/controls/table/index.js +12 -0
  168. package/dist/controls/table/index.js.map +1 -0
  169. package/dist/controls/table/prod.d.ts +21 -0
  170. package/dist/controls/table/prod.js +79 -0
  171. package/dist/controls/table/prod.js.map +1 -0
  172. package/dist/controls/table/refs.d.ts +50 -0
  173. package/dist/controls/table/refs.js +79 -0
  174. package/dist/controls/table/refs.js.map +1 -0
  175. package/dist/controls/table/stored.d.ts +15 -0
  176. package/dist/controls/table/stored.js +44 -0
  177. package/dist/controls/table/stored.js.map +1 -0
  178. package/dist/controls/table/table-editor.d.ts +103 -0
  179. package/dist/controls/table/table-editor.js +2725 -0
  180. package/dist/controls/table/table-editor.js.map +1 -0
  181. package/dist/controls/table/table-link.d.ts +24 -0
  182. package/dist/controls/table/table-link.js +180 -0
  183. package/dist/controls/table/table-link.js.map +1 -0
  184. package/dist/controls/table/table.d.ts +9 -0
  185. package/dist/controls/table/table.js +103 -0
  186. package/dist/controls/table/table.js.map +1 -0
  187. package/dist/controls/text.d.ts +17 -0
  188. package/dist/controls/text.js +322 -0
  189. package/dist/controls/text.js.map +1 -0
  190. package/dist/controls/unknown-value.d.ts +17 -0
  191. package/dist/controls/unknown-value.js +66 -0
  192. package/dist/controls/unknown-value.js.map +1 -0
  193. package/dist/core/core.d.ts +63 -0
  194. package/dist/core/core.js +171 -0
  195. package/dist/core/core.js.map +1 -0
  196. package/dist/core/facets.d.ts +347 -0
  197. package/dist/core/facets.js +334 -0
  198. package/dist/core/facets.js.map +1 -0
  199. package/dist/core/index.d.ts +3 -0
  200. package/dist/core/index.js +3 -0
  201. package/dist/engine/array.d.ts +101 -0
  202. package/dist/engine/array.js +906 -0
  203. package/dist/engine/array.js.map +1 -0
  204. package/dist/engine/bits.d.ts +24 -0
  205. package/dist/engine/bits.js +60 -0
  206. package/dist/engine/bits.js.map +1 -0
  207. package/dist/engine/breadcrumb.d.ts +45 -0
  208. package/dist/engine/breadcrumb.js +63 -0
  209. package/dist/engine/breadcrumb.js.map +1 -0
  210. package/dist/engine/expand.d.ts +66 -0
  211. package/dist/engine/expand.js +153 -0
  212. package/dist/engine/expand.js.map +1 -0
  213. package/dist/engine/field-list.d.ts +20 -0
  214. package/dist/engine/field-list.js +19 -0
  215. package/dist/engine/field-list.js.map +1 -0
  216. package/dist/engine/field-shell.d.ts +49 -0
  217. package/dist/engine/field-shell.js +988 -0
  218. package/dist/engine/field-shell.js.map +1 -0
  219. package/dist/engine/frame.d.ts +122 -0
  220. package/dist/engine/frame.js +601 -0
  221. package/dist/engine/frame.js.map +1 -0
  222. package/dist/engine/group-summary.d.ts +5 -0
  223. package/dist/engine/group-summary.js +70 -0
  224. package/dist/engine/group-summary.js.map +1 -0
  225. package/dist/engine/grouping.d.ts +238 -0
  226. package/dist/engine/grouping.js +996 -0
  227. package/dist/engine/grouping.js.map +1 -0
  228. package/dist/engine/item-list.d.ts +99 -0
  229. package/dist/engine/item-list.js +725 -0
  230. package/dist/engine/item-list.js.map +1 -0
  231. package/dist/engine/kit-field.d.ts +72 -0
  232. package/dist/engine/kit-field.js +558 -0
  233. package/dist/engine/kit-field.js.map +1 -0
  234. package/dist/engine/schema-form.d.ts +116 -0
  235. package/dist/engine/schema-form.js +462 -0
  236. package/dist/engine/schema-form.js.map +1 -0
  237. package/dist/engine/slot.d.ts +13 -0
  238. package/dist/engine/slot.js +216 -0
  239. package/dist/engine/slot.js.map +1 -0
  240. package/dist/index.d.ts +45 -3139
  241. package/dist/index.js +58 -2036
  242. package/dist/index.js.map +1 -0
  243. package/dist/kit.css +75 -0
  244. package/dist/lib/cn.d.ts +4 -0
  245. package/dist/lib/cn.js +56 -0
  246. package/dist/lib/cn.js.map +1 -0
  247. package/dist/lib/columns.d.ts +14 -0
  248. package/dist/lib/columns.js +30 -0
  249. package/dist/lib/columns.js.map +1 -0
  250. package/dist/lib/frames.d.ts +36 -0
  251. package/dist/lib/frames.js +214 -0
  252. package/dist/lib/frames.js.map +1 -0
  253. package/dist/lib/icon-image.d.ts +10 -0
  254. package/dist/lib/icon-image.js +8 -0
  255. package/dist/lib/icon-image.js.map +1 -0
  256. package/dist/lib/icons.d.ts +16 -0
  257. package/dist/lib/icons.js +173 -0
  258. package/dist/lib/icons.js.map +1 -0
  259. package/dist/lib/input-modality.d.ts +11 -0
  260. package/dist/lib/input-modality.js +47 -0
  261. package/dist/lib/input-modality.js.map +1 -0
  262. package/dist/lib/key-event.d.ts +11 -0
  263. package/dist/lib/key-event.js +16 -0
  264. package/dist/lib/key-event.js.map +1 -0
  265. package/dist/lib/path.d.ts +29 -0
  266. package/dist/lib/path.js +66 -0
  267. package/dist/lib/path.js.map +1 -0
  268. package/dist/lib/schema.d.ts +80 -0
  269. package/dist/lib/schema.js +384 -0
  270. package/dist/lib/schema.js.map +1 -0
  271. package/dist/lib/utils.d.ts +7 -0
  272. package/dist/lib/utils.js +37 -0
  273. package/dist/lib/utils.js.map +1 -0
  274. package/dist/lib/validate.d.ts +30 -0
  275. package/dist/lib/validate.js +224 -0
  276. package/dist/lib/validate.js.map +1 -0
  277. package/dist/library/analysis.d.ts +23 -0
  278. package/dist/library/analysis.js +160 -0
  279. package/dist/library/analysis.js.map +1 -0
  280. package/dist/library/catalog.d.ts +57 -0
  281. package/dist/library/catalog.js +307 -0
  282. package/dist/library/catalog.js.map +1 -0
  283. package/dist/library/coreNotes.d.ts +8 -0
  284. package/dist/library/coreNotes.js +111 -0
  285. package/dist/library/coreNotes.js.map +1 -0
  286. package/dist/library/coverage.d.ts +40 -0
  287. package/dist/library/coverage.js +59 -0
  288. package/dist/library/coverage.js.map +1 -0
  289. package/dist/library/entries/advanced.entries.d.ts +2 -0
  290. package/dist/library/entries/advanced.entries.js +6579 -0
  291. package/dist/library/entries/advanced.entries.js.map +1 -0
  292. package/dist/library/entries/commerce.entries.d.ts +2 -0
  293. package/dist/library/entries/commerce.entries.js +4140 -0
  294. package/dist/library/entries/commerce.entries.js.map +1 -0
  295. package/dist/library/entries/company.entries.d.ts +2 -0
  296. package/dist/library/entries/company.entries.js +2731 -0
  297. package/dist/library/entries/company.entries.js.map +1 -0
  298. package/dist/library/entries/conversion.entries.d.ts +2 -0
  299. package/dist/library/entries/conversion.entries.js +3707 -0
  300. package/dist/library/entries/conversion.entries.js.map +1 -0
  301. package/dist/library/entries/data.entries.d.ts +7 -0
  302. package/dist/library/entries/data.entries.js +4613 -0
  303. package/dist/library/entries/data.entries.js.map +1 -0
  304. package/dist/library/entries/events.entries.d.ts +2 -0
  305. package/dist/library/entries/events.entries.js +3428 -0
  306. package/dist/library/entries/events.entries.js.map +1 -0
  307. package/dist/library/entries/features.entries.d.ts +2 -0
  308. package/dist/library/entries/features.entries.js +3157 -0
  309. package/dist/library/entries/features.entries.js.map +1 -0
  310. package/dist/library/entries/heroes.entries.d.ts +2 -0
  311. package/dist/library/entries/heroes.entries.js +3401 -0
  312. package/dist/library/entries/heroes.entries.js.map +1 -0
  313. package/dist/library/entries/index.d.ts +3 -0
  314. package/dist/library/entries/index.js +35 -0
  315. package/dist/library/entries/index.js.map +1 -0
  316. package/dist/library/entries/listings.entries.d.ts +2 -0
  317. package/dist/library/entries/listings.entries.js +2976 -0
  318. package/dist/library/entries/listings.entries.js.map +1 -0
  319. package/dist/library/entries/longform.entries.d.ts +2 -0
  320. package/dist/library/entries/longform.entries.js +4227 -0
  321. package/dist/library/entries/longform.entries.js.map +1 -0
  322. package/dist/library/entries/media.entries.d.ts +2 -0
  323. package/dist/library/entries/media.entries.js +2781 -0
  324. package/dist/library/entries/media.entries.js.map +1 -0
  325. package/dist/library/entries/navigation.entries.d.ts +2 -0
  326. package/dist/library/entries/navigation.entries.js +4011 -0
  327. package/dist/library/entries/navigation.entries.js.map +1 -0
  328. package/dist/library/entries/pricing.entries.d.ts +2 -0
  329. package/dist/library/entries/pricing.entries.js +2383 -0
  330. package/dist/library/entries/pricing.entries.js.map +1 -0
  331. package/dist/library/entries/social-proof.entries.d.ts +2 -0
  332. package/dist/library/entries/social-proof.entries.js +2297 -0
  333. package/dist/library/entries/social-proof.entries.js.map +1 -0
  334. package/dist/library/examples/bento.d.ts +92 -0
  335. package/dist/library/examples/bento.js +201 -0
  336. package/dist/library/examples/bento.js.map +1 -0
  337. package/dist/library/examples/blocks.d.ts +14 -0
  338. package/dist/library/examples/blocks.js +313 -0
  339. package/dist/library/examples/blocks.js.map +1 -0
  340. package/dist/library/examples/faq.d.ts +28 -0
  341. package/dist/library/examples/faq.js +230 -0
  342. package/dist/library/examples/faq.js.map +1 -0
  343. package/dist/library/examples/hero.d.ts +43 -0
  344. package/dist/library/examples/hero.js +222 -0
  345. package/dist/library/examples/hero.js.map +1 -0
  346. package/dist/library/examples/index.d.ts +36 -0
  347. package/dist/library/examples/index.js +109 -0
  348. package/dist/library/examples/index.js.map +1 -0
  349. package/dist/library/examples/journalStory.d.ts +93 -0
  350. package/dist/library/examples/journalStory.js +338 -0
  351. package/dist/library/examples/journalStory.js.map +1 -0
  352. package/dist/library/examples/megaMenu.d.ts +134 -0
  353. package/dist/library/examples/megaMenu.js +442 -0
  354. package/dist/library/examples/megaMenu.js.map +1 -0
  355. package/dist/library/examples/pricing.d.ts +103 -0
  356. package/dist/library/examples/pricing.js +479 -0
  357. package/dist/library/examples/pricing.js.map +1 -0
  358. package/dist/library/examples/tabs.d.ts +87 -0
  359. package/dist/library/examples/tabs.js +180 -0
  360. package/dist/library/examples/tabs.js.map +1 -0
  361. package/dist/library/export.d.ts +42 -0
  362. package/dist/library/export.js +80 -0
  363. package/dist/library/export.js.map +1 -0
  364. package/dist/library/index.d.ts +13 -0
  365. package/dist/library/index.js +6 -0
  366. package/dist/library/kit-catalog.json +1510 -0
  367. package/dist/library/types.d.ts +42 -0
  368. package/dist/library/types.js +0 -0
  369. package/dist/schema/adapters.d.ts +28 -0
  370. package/dist/schema/adapters.js +492 -0
  371. package/dist/schema/adapters.js.map +1 -0
  372. package/dist/schema/help.d.ts +27 -0
  373. package/dist/schema/help.js +56 -0
  374. package/dist/schema/help.js.map +1 -0
  375. package/dist/schema/scale.d.ts +69 -0
  376. package/dist/schema/scale.js +250 -0
  377. package/dist/schema/scale.js.map +1 -0
  378. package/dist/schema/sources.d.ts +103 -0
  379. package/dist/schema/sources.js +65 -0
  380. package/dist/schema/sources.js.map +1 -0
  381. package/dist/schema/table.d.ts +319 -0
  382. package/dist/schema/table.js +1199 -0
  383. package/dist/schema/table.js.map +1 -0
  384. package/dist/schema/types.d.ts +297 -0
  385. package/dist/schema/types.js +14 -0
  386. package/dist/schema/types.js.map +1 -0
  387. package/dist/styles.css +2 -0
  388. package/dist/table/table-view.d.ts +14 -0
  389. package/dist/table/table-view.js +140 -0
  390. package/dist/table/table-view.js.map +1 -0
  391. package/dist/table/table.css +73 -0
  392. package/dist/testing/corpus.d.ts +63 -0
  393. package/dist/testing/corpus.js +129 -0
  394. package/dist/testing/corpus.js.map +1 -0
  395. package/dist/testing/test-form.d.ts +11 -0
  396. package/dist/testing/test-form.js +38 -0
  397. package/dist/testing/test-form.js.map +1 -0
  398. package/dist/theme.css +345 -0
  399. package/dist/theme.d.ts +20 -1504
  400. package/dist/theme.js +43 -4126
  401. package/dist/theme.js.map +1 -0
  402. package/dist/tokens.css +542 -0
  403. package/dist/types.d.ts +17 -0
  404. package/dist/types.js +0 -0
  405. package/dist/ui/action-tray.d.ts +54 -0
  406. package/dist/ui/action-tray.js +154 -0
  407. package/dist/ui/action-tray.js.map +1 -0
  408. package/dist/ui/autocomplete.d.ts +30 -0
  409. package/dist/ui/autocomplete.js +139 -0
  410. package/dist/ui/autocomplete.js.map +1 -0
  411. package/dist/ui/button.d.ts +57 -0
  412. package/dist/ui/button.js +201 -0
  413. package/dist/ui/button.js.map +1 -0
  414. package/dist/ui/choice-switch.d.ts +36 -0
  415. package/dist/ui/choice-switch.js +57 -0
  416. package/dist/ui/choice-switch.js.map +1 -0
  417. package/dist/ui/controls.d.ts +83 -0
  418. package/dist/ui/controls.js +331 -0
  419. package/dist/ui/controls.js.map +1 -0
  420. package/dist/ui/display.d.ts +163 -0
  421. package/dist/ui/display.js +455 -0
  422. package/dist/ui/display.js.map +1 -0
  423. package/dist/ui/expanded-editor-modal.d.ts +26 -0
  424. package/dist/ui/expanded-editor-modal.js +140 -0
  425. package/dist/ui/expanded-editor-modal.js.map +1 -0
  426. package/dist/ui/field-context.d.ts +12 -0
  427. package/dist/ui/field-context.js +23 -0
  428. package/dist/ui/field-context.js.map +1 -0
  429. package/dist/ui/floating-panel.d.ts +152 -0
  430. package/dist/ui/floating-panel.js +928 -0
  431. package/dist/ui/floating-panel.js.map +1 -0
  432. package/dist/ui/index.d.ts +16 -0
  433. package/dist/ui/index.js +18 -0
  434. package/dist/ui/input.d.ts +78 -0
  435. package/dist/ui/input.js +250 -0
  436. package/dist/ui/input.js.map +1 -0
  437. package/dist/ui/mode-bar.d.ts +31 -0
  438. package/dist/ui/mode-bar.js +65 -0
  439. package/dist/ui/mode-bar.js.map +1 -0
  440. package/dist/ui/overlay.d.ts +195 -0
  441. package/dist/ui/overlay.js +697 -0
  442. package/dist/ui/overlay.js.map +1 -0
  443. package/dist/ui/path-crumbs.d.ts +90 -0
  444. package/dist/ui/path-crumbs.js +566 -0
  445. package/dist/ui/path-crumbs.js.map +1 -0
  446. package/dist/ui/presence.d.ts +16 -0
  447. package/dist/ui/presence.js +65 -0
  448. package/dist/ui/presence.js.map +1 -0
  449. package/dist/ui/select.d.ts +66 -0
  450. package/dist/ui/select.js +407 -0
  451. package/dist/ui/select.js.map +1 -0
  452. package/dist/ui/shortcut-hint.d.ts +14 -0
  453. package/dist/ui/shortcut-hint.js +35 -0
  454. package/dist/ui/shortcut-hint.js.map +1 -0
  455. package/dist/ui/spinner.d.ts +24 -0
  456. package/dist/ui/spinner.js +42 -0
  457. package/dist/ui/spinner.js.map +1 -0
  458. package/dist/ui/split-button.d.ts +32 -0
  459. package/dist/ui/split-button.js +60 -0
  460. package/dist/ui/split-button.js.map +1 -0
  461. package/dist/ui/surfaces.d.ts +23 -0
  462. package/dist/ui/surfaces.js +26 -0
  463. package/dist/ui/surfaces.js.map +1 -0
  464. package/dist/ui/tab.d.ts +38 -0
  465. package/dist/ui/tab.js +87 -0
  466. package/dist/ui/tab.js.map +1 -0
  467. package/dist/ui/toast.d.ts +20 -0
  468. package/dist/ui/toast.js +115 -0
  469. package/dist/ui/toast.js.map +1 -0
  470. package/dist/ui/tooltip-root.d.ts +13 -0
  471. package/dist/ui/tooltip-root.js +77 -0
  472. package/dist/ui/tooltip-root.js.map +1 -0
  473. package/dist/ui/variants.d.ts +15 -0
  474. package/dist/ui/variants.js +14 -0
  475. package/dist/ui/variants.js.map +1 -0
  476. package/package.json +80 -50
  477. package/LICENSE +0 -21
  478. package/dist/_chunks-cjs/_visual-editing.js +0 -5898
  479. package/dist/_chunks-cjs/refractor.js +0 -22
  480. package/dist/_chunks-es/_visual-editing.mjs +0 -5904
  481. package/dist/_chunks-es/refractor.mjs +0 -25
  482. package/dist/_color.d.mts +0 -119
  483. package/dist/_color.d.ts +0 -119
  484. package/dist/_color.js +0 -1412
  485. package/dist/_color.mjs +0 -1411
  486. package/dist/_visual-editing.d.mts +0 -1126
  487. package/dist/_visual-editing.d.ts +0 -1126
  488. package/dist/_visual-editing.js +0 -30
  489. package/dist/_visual-editing.mjs +0 -30
  490. package/dist/index.d.mts +0 -3140
  491. package/dist/index.mjs +0 -2044
  492. package/dist/theme.d.mts +0 -1506
  493. package/dist/theme.mjs +0 -4126
  494. package/exports/_visual-editing.ts +0 -31
  495. package/exports/index.ts +0 -1
  496. package/exports/theme.ts +0 -1
  497. package/src/color/index.d.mts +0 -119
  498. package/src/color/index.mjs +0 -1411
  499. package/src/core/__workshop__/constants.ts +0 -293
  500. package/src/core/_compat.ts +0 -264
  501. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  502. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  503. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  504. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  505. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  506. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  507. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  508. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  509. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  510. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  511. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  512. package/src/core/components/autocomplete/autocomplete.tsx +0 -767
  513. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  514. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  515. package/src/core/components/autocomplete/constants.ts +0 -28
  516. package/src/core/components/autocomplete/index.ts +0 -2
  517. package/src/core/components/autocomplete/types.ts +0 -108
  518. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  519. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  520. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  521. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
  522. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
  523. package/src/core/components/breadcrumbs/index.ts +0 -1
  524. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  525. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  526. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  527. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  528. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  529. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  530. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  531. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  532. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  533. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  534. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  535. package/src/core/components/dialog/dialog.tsx +0 -430
  536. package/src/core/components/dialog/dialogContext.ts +0 -20
  537. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  538. package/src/core/components/dialog/index.ts +0 -4
  539. package/src/core/components/dialog/styles.ts +0 -77
  540. package/src/core/components/dialog/useDialog.ts +0 -11
  541. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  542. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  543. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
  544. package/src/core/components/hotkeys/hotkeys.tsx +0 -66
  545. package/src/core/components/hotkeys/index.ts +0 -1
  546. package/src/core/components/index.ts +0 -9
  547. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  548. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  549. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  550. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  551. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  552. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  553. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  554. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  555. package/src/core/components/menu/__workshop__/index.ts +0 -89
  556. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  557. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
  558. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  559. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  560. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  561. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  562. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  563. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  564. package/src/core/components/menu/helpers.ts +0 -82
  565. package/src/core/components/menu/index.ts +0 -5
  566. package/src/core/components/menu/menu.spacing.test.tsx +0 -63
  567. package/src/core/components/menu/menu.test.tsx +0 -125
  568. package/src/core/components/menu/menu.tsx +0 -178
  569. package/src/core/components/menu/menuButton.tsx +0 -268
  570. package/src/core/components/menu/menuContext.ts +0 -18
  571. package/src/core/components/menu/menuDivider.ts +0 -23
  572. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
  573. package/src/core/components/menu/menuGroup.tsx +0 -233
  574. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
  575. package/src/core/components/menu/menuItem.tsx +0 -197
  576. package/src/core/components/menu/useMenu.ts +0 -21
  577. package/src/core/components/menu/useMenuController.ts +0 -231
  578. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  579. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  580. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  581. package/src/core/components/skeleton/index.ts +0 -2
  582. package/src/core/components/skeleton/skeleton.tsx +0 -57
  583. package/src/core/components/skeleton/styles.ts +0 -50
  584. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  585. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  586. package/src/core/components/tab/__workshop__/index.ts +0 -14
  587. package/src/core/components/tab/index.ts +0 -3
  588. package/src/core/components/tab/tab.tsx +0 -101
  589. package/src/core/components/tab/tabList.test.tsx +0 -48
  590. package/src/core/components/tab/tabList.tsx +0 -70
  591. package/src/core/components/tab/tabPanel.tsx +0 -39
  592. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  593. package/src/core/components/toast/__workshop__/index.ts +0 -19
  594. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  595. package/src/core/components/toast/index.ts +0 -4
  596. package/src/core/components/toast/styles.ts +0 -77
  597. package/src/core/components/toast/toast.test.tsx +0 -101
  598. package/src/core/components/toast/toast.tsx +0 -198
  599. package/src/core/components/toast/toastContext.ts +0 -7
  600. package/src/core/components/toast/toastLayer.tsx +0 -51
  601. package/src/core/components/toast/toastProvider.tsx +0 -113
  602. package/src/core/components/toast/toastState.ts +0 -6
  603. package/src/core/components/toast/types.ts +0 -26
  604. package/src/core/components/toast/useToast.ts +0 -25
  605. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  606. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  607. package/src/core/components/tree/__workshop__/index.ts +0 -21
  608. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  609. package/src/core/components/tree/helpers.ts +0 -105
  610. package/src/core/components/tree/index.ts +0 -4
  611. package/src/core/components/tree/style.ts +0 -105
  612. package/src/core/components/tree/tree.test.tsx +0 -55
  613. package/src/core/components/tree/tree.tsx +0 -240
  614. package/src/core/components/tree/treeContext.ts +0 -10
  615. package/src/core/components/tree/treeGroup.tsx +0 -28
  616. package/src/core/components/tree/treeItem.test.tsx +0 -65
  617. package/src/core/components/tree/treeItem.tsx +0 -224
  618. package/src/core/components/tree/types.ts +0 -25
  619. package/src/core/components/tree/useTree.ts +0 -17
  620. package/src/core/constants.ts +0 -79
  621. package/src/core/helpers/animation.ts +0 -27
  622. package/src/core/helpers/element.ts +0 -55
  623. package/src/core/helpers/focus.ts +0 -100
  624. package/src/core/helpers/index.ts +0 -4
  625. package/src/core/helpers/scroll.ts +0 -15
  626. package/src/core/hooks/index.ts +0 -12
  627. package/src/core/hooks/useArrayProp.ts +0 -17
  628. package/src/core/hooks/useClickOutside.test.tsx +0 -482
  629. package/src/core/hooks/useClickOutside.ts +0 -118
  630. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
  631. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  632. package/src/core/hooks/useCustomValidity.ts +0 -13
  633. package/src/core/hooks/useDelayed.test.ts +0 -88
  634. package/src/core/hooks/useDelayedState.ts +0 -36
  635. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  636. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  637. package/src/core/hooks/useElementRect/index.ts +0 -1
  638. package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
  639. package/src/core/hooks/useElementSize.ts +0 -19
  640. package/src/core/hooks/useForwardedRef.ts +0 -19
  641. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  642. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  643. package/src/core/hooks/useMatchMedia.ts +0 -28
  644. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  645. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  646. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  647. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
  648. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  649. package/src/core/hooks/useMounted.ts +0 -15
  650. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  651. package/src/core/hooks/usePrefersDark.test.tsx +0 -19
  652. package/src/core/hooks/usePrefersDark.ts +0 -16
  653. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  654. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
  655. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  656. package/src/core/index.ts +0 -10
  657. package/src/core/lib/createGlobalScopedContext.ts +0 -36
  658. package/src/core/lib/globalScope.ts +0 -19
  659. package/src/core/lib/isRecord.ts +0 -3
  660. package/src/core/middleware/origin.ts +0 -47
  661. package/src/core/observers/elementSizeObserver.ts +0 -116
  662. package/src/core/observers/index.ts +0 -2
  663. package/src/core/observers/resizeObserver.ts +0 -9
  664. package/src/core/primitives/_selectable/index.ts +0 -1
  665. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  666. package/src/core/primitives/_selectable/style.ts +0 -115
  667. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  668. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  669. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  670. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  671. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  672. package/src/core/primitives/avatar/avatar.tsx +0 -200
  673. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  674. package/src/core/primitives/avatar/avatarStack.tsx +0 -100
  675. package/src/core/primitives/avatar/index.ts +0 -4
  676. package/src/core/primitives/avatar/styles.ts +0 -167
  677. package/src/core/primitives/avatar/types.ts +0 -17
  678. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  679. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  680. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  681. package/src/core/primitives/badge/badge.test.tsx +0 -16
  682. package/src/core/primitives/badge/badge.tsx +0 -70
  683. package/src/core/primitives/badge/index.ts +0 -1
  684. package/src/core/primitives/badge/styles.ts +0 -20
  685. package/src/core/primitives/badge/types.ts +0 -8
  686. package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
  687. package/src/core/primitives/box/__workshop__/index.ts +0 -24
  688. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  689. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  690. package/src/core/primitives/box/box.test.tsx +0 -142
  691. package/src/core/primitives/box/box.tsx +0 -154
  692. package/src/core/primitives/box/index.ts +0 -1
  693. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  694. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  695. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  696. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  697. package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
  698. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  699. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  700. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  701. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  702. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  703. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  704. package/src/core/primitives/button/button.test.tsx +0 -82
  705. package/src/core/primitives/button/button.tsx +0 -210
  706. package/src/core/primitives/button/index.ts +0 -1
  707. package/src/core/primitives/button/styles.ts +0 -117
  708. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  709. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  710. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  711. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  712. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  713. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  714. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  715. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  716. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  717. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  718. package/src/core/primitives/card/card.tsx +0 -128
  719. package/src/core/primitives/card/index.ts +0 -2
  720. package/src/core/primitives/card/styles.ts +0 -147
  721. package/src/core/primitives/card/types.ts +0 -11
  722. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  723. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  724. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  725. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  726. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  727. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  728. package/src/core/primitives/checkbox/index.ts +0 -1
  729. package/src/core/primitives/checkbox/styles.ts +0 -128
  730. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  731. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  732. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  733. package/src/core/primitives/code/code.tsx +0 -55
  734. package/src/core/primitives/code/index.ts +0 -1
  735. package/src/core/primitives/code/refractor.tsx +0 -20
  736. package/src/core/primitives/code/styles.ts +0 -77
  737. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  738. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  739. package/src/core/primitives/container/container.tsx +0 -54
  740. package/src/core/primitives/container/index.ts +0 -2
  741. package/src/core/primitives/container/styles.ts +0 -23
  742. package/src/core/primitives/container/types.ts +0 -6
  743. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  744. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  745. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  746. package/src/core/primitives/flex/flex.tsx +0 -64
  747. package/src/core/primitives/flex/index.ts +0 -1
  748. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  749. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  750. package/src/core/primitives/grid/grid.test.tsx +0 -80
  751. package/src/core/primitives/grid/grid.tsx +0 -74
  752. package/src/core/primitives/grid/index.ts +0 -1
  753. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  754. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  755. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  756. package/src/core/primitives/heading/heading.tsx +0 -88
  757. package/src/core/primitives/heading/index.ts +0 -1
  758. package/src/core/primitives/heading/styles.ts +0 -64
  759. package/src/core/primitives/heading/types.ts +0 -7
  760. package/src/core/primitives/index.ts +0 -27
  761. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  762. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  763. package/src/core/primitives/inline/index.ts +0 -1
  764. package/src/core/primitives/inline/inline.test.tsx +0 -51
  765. package/src/core/primitives/inline/inline.tsx +0 -63
  766. package/src/core/primitives/inline/styles.ts +0 -32
  767. package/src/core/primitives/inline/types.ts +0 -6
  768. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  769. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  770. package/src/core/primitives/kbd/index.ts +0 -1
  771. package/src/core/primitives/kbd/kbd.tsx +0 -69
  772. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  773. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  774. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  775. package/src/core/primitives/label/index.ts +0 -1
  776. package/src/core/primitives/label/label.tsx +0 -87
  777. package/src/core/primitives/label/styles.ts +0 -45
  778. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  779. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  780. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  781. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  782. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  783. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  784. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  785. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  786. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  787. package/src/core/primitives/popover/constants.ts +0 -22
  788. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  789. package/src/core/primitives/popover/helpers.ts +0 -31
  790. package/src/core/primitives/popover/index.ts +0 -2
  791. package/src/core/primitives/popover/popover.tsx +0 -511
  792. package/src/core/primitives/popover/popoverCard.tsx +0 -166
  793. package/src/core/primitives/popover/types.ts +0 -7
  794. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  795. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  796. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  797. package/src/core/primitives/radio/index.ts +0 -1
  798. package/src/core/primitives/radio/radio.tsx +0 -51
  799. package/src/core/primitives/radio/styles.ts +0 -117
  800. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  801. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  802. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  803. package/src/core/primitives/select/index.ts +0 -1
  804. package/src/core/primitives/select/select.test.tsx +0 -52
  805. package/src/core/primitives/select/select.tsx +0 -94
  806. package/src/core/primitives/select/styles.ts +0 -166
  807. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  808. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  809. package/src/core/primitives/spinner/index.ts +0 -1
  810. package/src/core/primitives/spinner/spinner.tsx +0 -46
  811. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  812. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  813. package/src/core/primitives/stack/index.ts +0 -1
  814. package/src/core/primitives/stack/stack.test.tsx +0 -57
  815. package/src/core/primitives/stack/stack.tsx +0 -57
  816. package/src/core/primitives/stack/styles.ts +0 -32
  817. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  818. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  819. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  820. package/src/core/primitives/switch/index.ts +0 -1
  821. package/src/core/primitives/switch/styles.ts +0 -173
  822. package/src/core/primitives/switch/switch.tsx +0 -68
  823. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  824. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  825. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  826. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  827. package/src/core/primitives/text/index.ts +0 -1
  828. package/src/core/primitives/text/styles.ts +0 -74
  829. package/src/core/primitives/text/text.tsx +0 -89
  830. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  831. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  832. package/src/core/primitives/textArea/index.ts +0 -1
  833. package/src/core/primitives/textArea/textArea.tsx +0 -120
  834. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  835. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  836. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  837. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  838. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  839. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  840. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  841. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  842. package/src/core/primitives/textInput/index.ts +0 -1
  843. package/src/core/primitives/textInput/textInput.test.tsx +0 -48
  844. package/src/core/primitives/textInput/textInput.tsx +0 -395
  845. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  846. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  847. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  848. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  849. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  850. package/src/core/primitives/tooltip/constants.ts +0 -23
  851. package/src/core/primitives/tooltip/index.ts +0 -2
  852. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  853. package/src/core/primitives/tooltip/tooltip.tsx +0 -495
  854. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
  855. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  856. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  857. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  858. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  859. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  860. package/src/core/primitives/types.ts +0 -179
  861. package/src/core/styles/border/borderStyle.ts +0 -56
  862. package/src/core/styles/border/index.ts +0 -2
  863. package/src/core/styles/border/types.ts +0 -10
  864. package/src/core/styles/box/boxStyle.ts +0 -69
  865. package/src/core/styles/box/index.ts +0 -2
  866. package/src/core/styles/box/types.ts +0 -11
  867. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  868. package/src/core/styles/card/index.ts +0 -1
  869. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  870. package/src/core/styles/flex/flexStyle.ts +0 -70
  871. package/src/core/styles/flex/index.ts +0 -3
  872. package/src/core/styles/flex/types.ts +0 -25
  873. package/src/core/styles/focusRing/index.ts +0 -25
  874. package/src/core/styles/font/codeFontStyle.ts +0 -13
  875. package/src/core/styles/font/headingFontStyle.ts +0 -13
  876. package/src/core/styles/font/index.ts +0 -6
  877. package/src/core/styles/font/labelFontStyle.ts +0 -13
  878. package/src/core/styles/font/responsiveFont.ts +0 -103
  879. package/src/core/styles/font/textAlignStyle.ts +0 -19
  880. package/src/core/styles/font/textFontStyle.ts +0 -13
  881. package/src/core/styles/font/types.ts +0 -35
  882. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  883. package/src/core/styles/grid/gridStyle.ts +0 -108
  884. package/src/core/styles/grid/index.ts +0 -3
  885. package/src/core/styles/grid/types.ts +0 -37
  886. package/src/core/styles/helpers.ts +0 -72
  887. package/src/core/styles/index.ts +0 -5
  888. package/src/core/styles/input/index.ts +0 -2
  889. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  890. package/src/core/styles/input/textInputStyle.ts +0 -263
  891. package/src/core/styles/internal.ts +0 -12
  892. package/src/core/styles/margin/index.ts +0 -2
  893. package/src/core/styles/margin/marginStyle.ts +0 -21
  894. package/src/core/styles/margin/marginsStyle.test.ts +0 -33
  895. package/src/core/styles/margin/types.ts +0 -9
  896. package/src/core/styles/padding/index.ts +0 -2
  897. package/src/core/styles/padding/paddingStyle.test.ts +0 -33
  898. package/src/core/styles/padding/paddingStyle.ts +0 -21
  899. package/src/core/styles/padding/types.ts +0 -12
  900. package/src/core/styles/radius/index.ts +0 -2
  901. package/src/core/styles/radius/radiusStyle.ts +0 -23
  902. package/src/core/styles/radius/types.ts +0 -8
  903. package/src/core/styles/shadow/index.ts +0 -2
  904. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  905. package/src/core/styles/shadow/types.ts +0 -6
  906. package/src/core/styles/types.ts +0 -8
  907. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  908. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  909. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  910. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  911. package/src/core/theme/__workshop__/color.tsx +0 -62
  912. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  913. package/src/core/theme/__workshop__/index.ts +0 -39
  914. package/src/core/theme/__workshop__/layer.tsx +0 -78
  915. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  916. package/src/core/theme/index.ts +0 -5
  917. package/src/core/theme/theme.test.tsx +0 -73
  918. package/src/core/theme/themeColorProvider.tsx +0 -29
  919. package/src/core/theme/themeContext.ts +0 -10
  920. package/src/core/theme/themeProvider.tsx +0 -62
  921. package/src/core/theme/types.ts +0 -12
  922. package/src/core/theme/useRootTheme.ts +0 -17
  923. package/src/core/theme/useTheme.ts +0 -16
  924. package/src/core/types/avatar.ts +0 -14
  925. package/src/core/types/badge.ts +0 -12
  926. package/src/core/types/box.ts +0 -19
  927. package/src/core/types/button.ts +0 -21
  928. package/src/core/types/card.ts +0 -6
  929. package/src/core/types/component.ts +0 -32
  930. package/src/core/types/dialog.ts +0 -4
  931. package/src/core/types/flex.ts +0 -30
  932. package/src/core/types/grid.ts +0 -14
  933. package/src/core/types/gridItem.ts +0 -29
  934. package/src/core/types/index.ts +0 -15
  935. package/src/core/types/placement.ts +0 -18
  936. package/src/core/types/popover.ts +0 -4
  937. package/src/core/types/radius.ts +0 -4
  938. package/src/core/types/selectable.ts +0 -6
  939. package/src/core/types/text.ts +0 -4
  940. package/src/core/utils/arrow/arrow.tsx +0 -123
  941. package/src/core/utils/arrow/cmds.ts +0 -91
  942. package/src/core/utils/arrow/index.ts +0 -1
  943. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  944. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  945. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
  946. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  947. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  948. package/src/core/utils/boundaryElement/index.ts +0 -3
  949. package/src/core/utils/boundaryElement/types.ts +0 -7
  950. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  951. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
  952. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  953. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  954. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  955. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  956. package/src/core/utils/elementQuery/helpers.ts +0 -27
  957. package/src/core/utils/elementQuery/index.ts +0 -1
  958. package/src/core/utils/errorBoundary.tsx +0 -48
  959. package/src/core/utils/getElementRef.ts +0 -26
  960. package/src/core/utils/index.ts +0 -9
  961. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  962. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  963. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  964. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  965. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  966. package/src/core/utils/layer/getLayerContext.test.ts +0 -30
  967. package/src/core/utils/layer/getLayerContext.ts +0 -21
  968. package/src/core/utils/layer/index.ts +0 -4
  969. package/src/core/utils/layer/layer.test.tsx +0 -108
  970. package/src/core/utils/layer/layer.tsx +0 -98
  971. package/src/core/utils/layer/layerContext.ts +0 -7
  972. package/src/core/utils/layer/layerProvider.tsx +0 -111
  973. package/src/core/utils/layer/types.ts +0 -9
  974. package/src/core/utils/layer/useLayer.ts +0 -26
  975. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  976. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  977. package/src/core/utils/portal/index.ts +0 -4
  978. package/src/core/utils/portal/portal.test.tsx +0 -103
  979. package/src/core/utils/portal/portal.ts +0 -32
  980. package/src/core/utils/portal/portalContext.ts +0 -31
  981. package/src/core/utils/portal/portalProvider.tsx +0 -47
  982. package/src/core/utils/portal/types.ts +0 -9
  983. package/src/core/utils/portal/usePortal.ts +0 -25
  984. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  985. package/src/core/utils/srOnly/index.ts +0 -1
  986. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  987. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  988. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  989. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  990. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  991. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
  992. package/src/core/utils/virtualList/index.ts +0 -1
  993. package/src/core/utils/virtualList/virtualList.tsx +0 -200
  994. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
  995. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
  996. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
  997. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
  998. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
  999. package/src/theme/build/_deprecated/color/color.test.ts +0 -63
  1000. package/src/theme/build/_deprecated/color/defaults.ts +0 -390
  1001. package/src/theme/build/_deprecated/color/factory.ts +0 -142
  1002. package/src/theme/build/_deprecated/color/index.ts +0 -1
  1003. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
  1004. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
  1005. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
  1006. package/src/theme/build/buildColorTheme.test.ts +0 -183
  1007. package/src/theme/build/buildColorTheme.ts +0 -499
  1008. package/src/theme/build/buildTheme.test.ts +0 -87
  1009. package/src/theme/build/buildTheme.ts +0 -36
  1010. package/src/theme/build/colorToken/colorToken.ts +0 -19
  1011. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  1012. package/src/theme/build/colorToken/index.ts +0 -2
  1013. package/src/theme/build/colorToken/types.ts +0 -6
  1014. package/src/theme/build/index.ts +0 -3
  1015. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  1016. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  1017. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  1018. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  1019. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
  1020. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  1021. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  1022. package/src/theme/build/lib/color-fns/index.ts +0 -6
  1023. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  1024. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  1025. package/src/theme/build/lib/color-fns/types.ts +0 -28
  1026. package/src/theme/build/lib/isRecord.ts +0 -3
  1027. package/src/theme/build/lib/lazy.ts +0 -30
  1028. package/src/theme/build/lib/utils.ts +0 -19
  1029. package/src/theme/build/merge.ts +0 -26
  1030. package/src/theme/build/mixThemeColor.test.ts +0 -21
  1031. package/src/theme/build/mixThemeColor.ts +0 -53
  1032. package/src/theme/build/renderColorTheme.ts +0 -532
  1033. package/src/theme/build/renderColorValue.ts +0 -85
  1034. package/src/theme/build/resolveColorTokens.ts +0 -268
  1035. package/src/theme/build/theme.test.ts +0 -27
  1036. package/src/theme/config/helpers.ts +0 -55
  1037. package/src/theme/config/index.ts +0 -4
  1038. package/src/theme/config/system.ts +0 -115
  1039. package/src/theme/config/tokens/color/index.ts +0 -1
  1040. package/src/theme/config/tokens/color/types.ts +0 -133
  1041. package/src/theme/config/tokens/index.ts +0 -4
  1042. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
  1043. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  1044. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
  1045. package/src/theme/config/tokens/parseTokenValue.ts +0 -133
  1046. package/src/theme/config/tokens/types.ts +0 -53
  1047. package/src/theme/config/types.ts +0 -46
  1048. package/src/theme/defaults/colorPalette.ts +0 -5
  1049. package/src/theme/defaults/colorTokens.ts +0 -648
  1050. package/src/theme/defaults/config.ts +0 -84
  1051. package/src/theme/defaults/fonts.ts +0 -227
  1052. package/src/theme/getScopedTheme.ts +0 -98
  1053. package/src/theme/index.ts +0 -5
  1054. package/src/theme/system/avatar.ts +0 -14
  1055. package/src/theme/system/color/_constants.ts +0 -45
  1056. package/src/theme/system/color/_helpers.ts +0 -24
  1057. package/src/theme/system/color/_system.ts +0 -40
  1058. package/src/theme/system/color/avatar.ts +0 -15
  1059. package/src/theme/system/color/badge.ts +0 -16
  1060. package/src/theme/system/color/button.ts +0 -17
  1061. package/src/theme/system/color/color.ts +0 -34
  1062. package/src/theme/system/color/index.ts +0 -13
  1063. package/src/theme/system/color/input.ts +0 -25
  1064. package/src/theme/system/color/kbd.ts +0 -8
  1065. package/src/theme/system/color/selectable.ts +0 -12
  1066. package/src/theme/system/color/shadow.ts +0 -7
  1067. package/src/theme/system/color/state.ts +0 -43
  1068. package/src/theme/system/color/syntax.ts +0 -41
  1069. package/src/theme/system/css.ts +0 -14
  1070. package/src/theme/system/focusRing.ts +0 -7
  1071. package/src/theme/system/font.ts +0 -52
  1072. package/src/theme/system/index.ts +0 -11
  1073. package/src/theme/system/input.ts +0 -33
  1074. package/src/theme/system/layer.ts +0 -8
  1075. package/src/theme/system/shadow.ts +0 -19
  1076. package/src/theme/system/styles.ts +0 -13
  1077. package/src/theme/system/theme.ts +0 -138
  1078. package/src/theme/system/v0/avatar.ts +0 -10
  1079. package/src/theme/system/v0/color/_generic.ts +0 -35
  1080. package/src/theme/system/v0/color/_system.ts +0 -17
  1081. package/src/theme/system/v0/color/base.ts +0 -21
  1082. package/src/theme/system/v0/color/button.ts +0 -42
  1083. package/src/theme/system/v0/color/card.ts +0 -19
  1084. package/src/theme/system/v0/color/color.ts +0 -40
  1085. package/src/theme/system/v0/color/index.ts +0 -11
  1086. package/src/theme/system/v0/color/input.ts +0 -34
  1087. package/src/theme/system/v0/color/muted.ts +0 -26
  1088. package/src/theme/system/v0/color/selectable.ts +0 -31
  1089. package/src/theme/system/v0/color/solid.ts +0 -26
  1090. package/src/theme/system/v0/color/spot.ts +0 -13
  1091. package/src/theme/system/v0/index.ts +0 -3
  1092. package/src/theme/system/v0/input.ts +0 -23
  1093. package/src/theme/versioning/getTheme_v2.ts +0 -57
  1094. package/src/theme/versioning/index.ts +0 -5
  1095. package/src/theme/versioning/is_v0.ts +0 -6
  1096. package/src/theme/versioning/is_v2.ts +0 -6
  1097. package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
  1098. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
  1099. package/src/theme/versioning/v0_v2.ts +0 -94
  1100. package/src/theme/versioning/v2_v0.ts +0 -135
@@ -0,0 +1,566 @@
1
+ import { cn } from "../lib/cn.js";
2
+ import { IconButton } from "./button.js";
3
+ import { Menu as Menu$1, MenuContent, MenuTrigger, Tooltip } from "./overlay.js";
4
+ import * as React from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { IconArrowLeft, IconChevronDown, IconChevronRight } from "@tabler/icons-react";
7
+ import { Menu } from "@base-ui/react/menu";
8
+ //#region src/ui/path-crumbs.tsx
9
+ /**
10
+ * PATH CRUMBS (CPO D38): the one breadcrumb for every drill-in path: Visuals inspector, Block Kit drill-in,
11
+ * nested documents, media details, the workspace top bar.
12
+ *
13
+ * <PathCrumbs items={[{ id, label, icon, onSelect }, …, current]} />
14
+ *
15
+ * Look (D38 v3): ancestors fg-3 with an invisible 4px-radius pill that appears on hover (bg-hover) and darkens while
16
+ * pressed (bg-selected); the current item is fg/semibold with its icon, NO box; thin fg-4 chevrons flush between pills (6px from text);
17
+ * the fold chip is a ghost crumb ("Columns… +2 ⌄") whose open state is bg-selected; keyboard-only neutral focus ring.
18
+ *
19
+ * Back (←) and current never collapse, and every visible crumb keeps READABLE TEXT (no icon-only crumbs). The trail
20
+ * adapts to the width it ACTUALLY has (ResizeObserver on the nav + document.fonts.ready, not viewport breakpoints),
21
+ * using space greedily; the first plan that fits wins:
22
+ *
23
+ * stage 0 everything at full length
24
+ * stage 1 long labels shorten to their first words (~16ch, word boundary: "Seasoning & care…", "Columns…"):
25
+ * middle items root side first, then the parent, then the root
26
+ * stage 2 the middle folds, root side first, into ONE readable chip "[▦] Columns… +2" (its first folded level +
27
+ * the count) that opens the Pathway popover; the immediate parent stays out of the fold
28
+ * stage 3 the root joins the fold, then (last) the parent
29
+ * last the current item middle-truncates ("Seasoning…ail kit"), full name in a tooltip
30
+ *
31
+ * Every variant is measured once in a hidden mirror and the stage is picked in a layout effect, so the first paint
32
+ * is already right (no flicker, no layout jump). The Pathway popover lists the whole path as an indented tree
33
+ * (↑↓ · Enter · Esc, focus returns to the chip). Siblings menus on crumbs were considered and left out (D6 calm).
34
+ *
35
+ * Links: a crumb with `to` renders through `linkAs` (default: a plain <a href>), so a host can pass its router's Link.
36
+ */
37
+ var METRICS = {
38
+ sm: {
39
+ row: "h-7",
40
+ text: "text-[13px] leading-5",
41
+ pill: "h-6 px-1.5",
42
+ cur: "pr-0.5",
43
+ gap: "gap-1.5",
44
+ icon: "[&_svg]:size-3.5",
45
+ sep: "size-3",
46
+ back: "sm"
47
+ },
48
+ md: {
49
+ row: "h-8",
50
+ text: "text-[14px] leading-5",
51
+ pill: "h-7 px-2",
52
+ cur: "pr-0.5",
53
+ gap: "gap-1.5",
54
+ icon: "[&_svg]:size-4",
55
+ sep: "size-3.5",
56
+ back: "md"
57
+ }
58
+ };
59
+ /** Ancestor / group pill: fg-3 at rest, a quiet pill on hover, darker while pressed, fg-4 + inert when it can't navigate. */
60
+ var PILL = "inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-kit-sm text-kit-fg-3 transition-colors duration-100 hover:bg-kit-hover hover:text-kit-fg active:bg-kit-selected disabled:pointer-events-none disabled:text-kit-fg-4";
61
+ function DefaultLink({ to, ...props }) {
62
+ return /* @__PURE__ */ jsx("a", {
63
+ href: to,
64
+ ...props
65
+ });
66
+ }
67
+ /** Word-boundary shortening: the first 2–3 words that fit ~16ch ("Seasoning & care kit" → "Seasoning & care…",
68
+ * "Columns / Bento" → "Columns…"). Never mid-word unless a single word is itself too long. */
69
+ var isJoiner = (w) => /^[/&·\-–—|:,+]+$/.test(w);
70
+ function clipWords(s, max = 16) {
71
+ const words = s.trim().split(/\s+/);
72
+ if (s.length <= 12 && words.length <= 2) return s;
73
+ const out = [];
74
+ for (let i = 0; i < words.length - 1; i++) {
75
+ if ([...out, words[i]].join(" ").length > max) break;
76
+ out.push(words[i]);
77
+ }
78
+ while (out.length && isJoiner(out[out.length - 1])) out.pop();
79
+ if (!out.length) return words[0].length > max ? `${words[0].slice(0, max - 2)}…` : `${words[0]}…`;
80
+ return `${out.join(" ")}…`;
81
+ }
82
+ var long = (s) => clipWords(s) !== s;
83
+ var clip = (s) => clipWords(s);
84
+ /** Degradation order: the first plan that fits wins. Every visible crumb keeps readable text (no icon-only crumbs). */
85
+ function plansFor(items) {
86
+ const n = items.length;
87
+ const plans = [];
88
+ const forms = items.map(() => "full");
89
+ const push = (group = null) => plans.push({
90
+ forms: [...forms],
91
+ group: group ? { ...group } : null
92
+ });
93
+ push();
94
+ if (n < 2) return plans;
95
+ const parent = n - 2;
96
+ const middle = Array.from({ length: Math.max(0, n - 2) }, (_, k) => k + 1);
97
+ for (const i of middle) if (i !== parent && long(items[i].label)) {
98
+ forms[i] = "trunc";
99
+ push();
100
+ }
101
+ if (parent >= 1 && long(items[parent].label)) {
102
+ forms[parent] = "trunc";
103
+ push();
104
+ }
105
+ if (long(items[0].label)) {
106
+ forms[0] = "trunc";
107
+ push();
108
+ }
109
+ for (let end = 1; end <= parent - 1; end++) push({
110
+ start: 1,
111
+ end
112
+ });
113
+ if (parent >= 1) push({
114
+ start: 0,
115
+ end: parent - 1
116
+ });
117
+ push({
118
+ start: 0,
119
+ end: parent
120
+ });
121
+ return plans;
122
+ }
123
+ /** Keep the head and the tail: "Seasoning wax & chainmail kit" → "Seasoning…mail kit". */
124
+ function middleEllipsis(text, maxPx, measure) {
125
+ if (measure(text) <= maxPx) return text;
126
+ let lo = 2;
127
+ let hi = text.length - 1;
128
+ let best = "";
129
+ while (lo <= hi) {
130
+ const keep = lo + hi >> 1;
131
+ const head = Math.ceil(keep * .6);
132
+ const s = `${text.slice(0, head).trimEnd()}…${text.slice(text.length - (keep - head)).trimStart()}`;
133
+ if (measure(s) <= maxPx) {
134
+ best = s;
135
+ lo = keep + 1;
136
+ } else hi = keep - 1;
137
+ }
138
+ return best || null;
139
+ }
140
+ var canvas = null;
141
+ function textMeasurer(el) {
142
+ if (!el) return null;
143
+ canvas ??= document.createElement("canvas");
144
+ let ctx = null;
145
+ try {
146
+ ctx = canvas.getContext("2d");
147
+ } catch {
148
+ return null;
149
+ }
150
+ if (!ctx) return null;
151
+ const cs = getComputedStyle(el);
152
+ ctx.font = `${cs.fontStyle} ${cs.fontWeight} ${cs.fontSize} ${cs.fontFamily}`;
153
+ return (s) => ctx.measureText(s).width;
154
+ }
155
+ function PathCrumbs({ items, onBack, backLabel, backShortcut, label = "Breadcrumb", size = "sm", linkAs: Link = DefaultLink, className }) {
156
+ const n = items.length;
157
+ const parent = n > 1 ? items[n - 2] : void 0;
158
+ const back = onBack === false ? void 0 : onBack ?? (parent ? () => go(parent) : void 0);
159
+ const sig = items.map((i) => `${i.id}\u0001${i.label}\u0001${i.icon ? 1 : 0}\u0001${i.errors ? 1 : 0}\u0001${i.container ? 1 : 0}`).join("");
160
+ const plans = React.useMemo(() => plansFor(items), [sig]);
161
+ const navRef = React.useRef(null);
162
+ const mirrorRef = React.useRef(null);
163
+ const backRef = React.useRef(null);
164
+ const [fit, setFit] = React.useState({
165
+ plan: 0,
166
+ currentText: null
167
+ });
168
+ const measure = React.useCallback(() => {
169
+ const nav = navRef.current;
170
+ const mirror = mirrorRef.current;
171
+ if (!nav || !mirror) return;
172
+ const rect = nav.getBoundingClientRect().width;
173
+ const scale = nav.offsetWidth && rect ? rect / nav.offsetWidth : 1;
174
+ const w = (key) => (mirror.querySelector(`[data-m="${key}"]`)?.getBoundingClientRect().width ?? 0) / scale;
175
+ const avail = nav.clientWidth - (backRef.current ? backRef.current.getBoundingClientRect().width / scale : 0) - .5;
176
+ const sep = w("sep");
177
+ const cur = w("cur");
178
+ const widthOf = (p) => {
179
+ const parts = [];
180
+ if (n > 1) {
181
+ const gk = (g) => `g:${g.start}:${g.end}`;
182
+ if (p.group?.start === 0) parts.push(w(gk(p.group)));
183
+ else {
184
+ parts.push(w(`0:${p.forms[0]}`));
185
+ if (p.group) parts.push(w(gk(p.group)));
186
+ }
187
+ for (let i = 1; i < n - 1; i++) if (!p.group || i > p.group.end) parts.push(w(`${i}:${p.forms[i]}`));
188
+ }
189
+ parts.push(cur);
190
+ return parts.reduce((a, b) => a + b, 0) + sep * (parts.length - 1);
191
+ };
192
+ let pick = plans.length - 1;
193
+ let total = 0;
194
+ for (let k = 0; k < plans.length; k++) {
195
+ total = widthOf(plans[k]);
196
+ if (total <= avail) {
197
+ pick = k;
198
+ break;
199
+ }
200
+ }
201
+ let currentText = null;
202
+ if (pick === plans.length - 1 && (total = widthOf(plans[pick])) > avail) {
203
+ const textEl = mirror.querySelector("[data-m=\"curtext\"]");
204
+ const textW = textEl?.getBoundingClientRect().width ?? 0;
205
+ const room = cur - (total - avail) - (cur - textW);
206
+ const m = textMeasurer(textEl);
207
+ if (m && room > 24) currentText = middleEllipsis(items[n - 1].label, room, m);
208
+ }
209
+ setFit((f) => f.plan === pick && f.currentText === currentText ? f : {
210
+ plan: pick,
211
+ currentText
212
+ });
213
+ }, [plans, n]);
214
+ React.useLayoutEffect(() => {
215
+ measure();
216
+ }, [measure, sig]);
217
+ React.useLayoutEffect(() => {
218
+ const nav = navRef.current;
219
+ if (!nav || typeof ResizeObserver === "undefined") return;
220
+ const ro = new ResizeObserver(() => measure());
221
+ ro.observe(nav);
222
+ let alive = true;
223
+ document.fonts?.ready.then(() => alive && measure());
224
+ return () => {
225
+ alive = false;
226
+ ro.disconnect();
227
+ };
228
+ }, [measure]);
229
+ if (!n) return null;
230
+ const plan = plans[Math.min(fit.plan, plans.length - 1)];
231
+ const m = METRICS[size];
232
+ const curItem = items[n - 1];
233
+ const icon = (c) => c.icon ? /* @__PURE__ */ jsx("span", {
234
+ className: cn("flex shrink-0 items-center", m.icon),
235
+ "aria-hidden": true,
236
+ children: c.icon
237
+ }) : null;
238
+ const dot = (c) => c.errors ? /* @__PURE__ */ jsx("span", {
239
+ role: "img",
240
+ "aria-label": "Has errors",
241
+ className: "size-1.5 shrink-0 rounded-full bg-kit-danger"
242
+ }) : null;
243
+ const crumbCls = cn(PILL, m.pill);
244
+ const body = (c, form) => /* @__PURE__ */ jsxs(Fragment, { children: [
245
+ icon(c),
246
+ /* @__PURE__ */ jsx("span", { children: form === "trunc" ? clip(c.label) : c.label }),
247
+ dot(c)
248
+ ] });
249
+ /** The fold chip names its first folded level (the root only when nothing else is folded): "[▦] Columns… +2". */
250
+ const groupBody = (g) => {
251
+ const count = g.end - g.start + 1;
252
+ const lead = items[g.start === 0 && g.end > 0 ? 1 : g.start];
253
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
254
+ icon(lead),
255
+ /* @__PURE__ */ jsx("span", { children: clipWords(lead.label, 12) }),
256
+ count > 1 ? /* @__PURE__ */ jsxs("span", {
257
+ className: "tabular-nums",
258
+ children: ["+", count - 1]
259
+ }) : null,
260
+ /* @__PURE__ */ jsx(IconChevronDown, {
261
+ className: cn("-mx-0.5 shrink-0 text-kit-fg-4", m.sep),
262
+ stroke: 1.75,
263
+ "aria-hidden": true
264
+ })
265
+ ] });
266
+ };
267
+ const currentCls = cn("inline-flex min-w-0 max-w-full items-center whitespace-nowrap rounded-kit-sm font-semibold text-kit-fg", m.pill, m.cur, m.gap, "[&_[data-crumb-icon]]:text-kit-fg-2");
268
+ const sepEl = /* @__PURE__ */ jsx(IconChevronRight, {
269
+ className: cn("shrink-0 text-kit-fg-4", m.sep),
270
+ stroke: 1.75,
271
+ "aria-hidden": true
272
+ });
273
+ function go(c) {
274
+ c.onSelect?.();
275
+ }
276
+ const crumb = (c, i, form) => {
277
+ const tip = form !== "full" || void 0;
278
+ const inner = body(c, form);
279
+ const aria = form === "trunc" ? c.errors ? `${c.label}, has errors` : c.label : void 0;
280
+ const el = c.to ? /* @__PURE__ */ jsx(Link, {
281
+ to: c.to,
282
+ className: crumbCls,
283
+ "aria-label": aria,
284
+ onClick: c.onSelect,
285
+ children: inner
286
+ }) : /* @__PURE__ */ jsx("button", {
287
+ type: "button",
288
+ className: crumbCls,
289
+ "aria-label": aria,
290
+ onClick: () => go(c),
291
+ disabled: !c.onSelect,
292
+ children: inner
293
+ });
294
+ return /* @__PURE__ */ jsxs("li", {
295
+ className: "flex shrink-0 items-center",
296
+ children: [i > 0 ? sepEl : null, tip ? /* @__PURE__ */ jsx(Tooltip, {
297
+ content: c.label,
298
+ side: "bottom",
299
+ children: el
300
+ }) : el]
301
+ }, c.id);
302
+ };
303
+ const shown = [];
304
+ if (n > 1) {
305
+ const g = plan.group;
306
+ const group = (first) => /* @__PURE__ */ jsx(GroupLi, {
307
+ items,
308
+ group: g,
309
+ first,
310
+ trigger: groupBody(g),
311
+ sep: sepEl,
312
+ navRef,
313
+ label,
314
+ cls: crumbCls,
315
+ link: Link
316
+ }, "grp");
317
+ if (g?.start === 0) shown.push(group(true));
318
+ else {
319
+ shown.push(crumb(items[0], 0, plan.forms[0]));
320
+ if (g) shown.push(group());
321
+ }
322
+ for (let i = 1; i < n - 1; i++) if (!g || i > g.end) shown.push(crumb(items[i], i, plan.forms[i]));
323
+ }
324
+ const curLabel = fit.currentText ?? curItem.label;
325
+ const curNode = /* @__PURE__ */ jsxs("span", {
326
+ "aria-current": "page",
327
+ className: currentCls,
328
+ children: [
329
+ curItem.icon ? /* @__PURE__ */ jsx("span", {
330
+ "data-crumb-icon": true,
331
+ className: cn("flex shrink-0 items-center", m.icon),
332
+ "aria-hidden": true,
333
+ children: curItem.icon
334
+ }) : null,
335
+ /* @__PURE__ */ jsx("span", {
336
+ className: "min-w-0 truncate",
337
+ "aria-label": curLabel !== curItem.label ? curItem.label : void 0,
338
+ children: curLabel
339
+ }),
340
+ dot(curItem)
341
+ ]
342
+ });
343
+ const backText = backLabel ?? (parent ? `Back to ${parent.label}` : "Back");
344
+ return /* @__PURE__ */ jsxs("nav", {
345
+ ref: navRef,
346
+ "aria-label": label,
347
+ "data-size": size,
348
+ className: cn("relative flex min-w-0 flex-1 items-center", m.row, m.text, className),
349
+ children: [
350
+ back ? /* @__PURE__ */ jsx("div", {
351
+ ref: backRef,
352
+ className: "flex shrink-0 items-center",
353
+ children: /* @__PURE__ */ jsx(Tooltip, {
354
+ content: backText,
355
+ shortcut: backShortcut,
356
+ children: /* @__PURE__ */ jsx(IconButton, {
357
+ label: backText,
358
+ size: m.back,
359
+ onClick: back,
360
+ className: "shrink-0 rounded-kit-sm",
361
+ children: /* @__PURE__ */ jsx(IconArrowLeft, { stroke: 1.75 })
362
+ })
363
+ })
364
+ }) : null,
365
+ /* @__PURE__ */ jsxs("ol", {
366
+ className: "flex min-w-0 flex-1 items-center overflow-hidden",
367
+ children: [shown, /* @__PURE__ */ jsxs("li", {
368
+ className: "flex min-w-0 shrink items-center",
369
+ children: [n > 1 ? sepEl : null, fit.currentText || fit.plan === plans.length - 1 && long(curItem.label) ? /* @__PURE__ */ jsx(Tooltip, {
370
+ content: curItem.label,
371
+ side: "bottom",
372
+ children: /* @__PURE__ */ jsx("span", {
373
+ tabIndex: 0,
374
+ className: "flex min-w-0 rounded-kit-sm",
375
+ children: curNode
376
+ })
377
+ }) : curNode]
378
+ })]
379
+ }),
380
+ /* @__PURE__ */ jsx("div", {
381
+ ref: mirrorRef,
382
+ "aria-hidden": true,
383
+ className: "pointer-events-none invisible absolute left-0 top-0 h-0 w-0 overflow-hidden",
384
+ children: /* @__PURE__ */ jsxs("div", {
385
+ className: "flex w-max flex-col items-start",
386
+ children: [
387
+ /* @__PURE__ */ jsx("span", {
388
+ "data-m": "sep",
389
+ className: "flex",
390
+ children: sepEl
391
+ }),
392
+ items.slice(0, -1).map((c, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx("span", {
393
+ "data-m": `${i}:full`,
394
+ className: crumbCls,
395
+ children: body(c, "full")
396
+ }), /* @__PURE__ */ jsx("span", {
397
+ "data-m": `${i}:trunc`,
398
+ className: crumbCls,
399
+ children: body(c, "trunc")
400
+ })] }, c.id)),
401
+ [0, 1].flatMap((start) => items.slice(0, -1).map((_, end) => end < start ? null : /* @__PURE__ */ jsx("span", {
402
+ "data-m": `g:${start}:${end}`,
403
+ className: crumbCls,
404
+ children: groupBody({
405
+ start,
406
+ end
407
+ })
408
+ }, `g${start}:${end}`))),
409
+ /* @__PURE__ */ jsxs("span", {
410
+ "data-m": "cur",
411
+ className: currentCls,
412
+ children: [
413
+ curItem.icon ? /* @__PURE__ */ jsx("span", {
414
+ "data-crumb-icon": true,
415
+ className: cn("flex shrink-0 items-center", m.icon),
416
+ children: curItem.icon
417
+ }) : null,
418
+ /* @__PURE__ */ jsx("span", {
419
+ "data-m": "curtext",
420
+ children: curItem.label
421
+ }),
422
+ dot(curItem)
423
+ ]
424
+ })
425
+ ]
426
+ })
427
+ })
428
+ ]
429
+ });
430
+ }
431
+ function GroupLi({ items, group, trigger, sep, first, navRef, label, cls, link: Link }) {
432
+ const count = group.end - group.start + 1;
433
+ const last = items.length - 1;
434
+ return /* @__PURE__ */ jsxs("li", {
435
+ className: "flex shrink-0 items-center",
436
+ children: [first ? null : sep, /* @__PURE__ */ jsxs(Menu$1, { children: [/* @__PURE__ */ jsx(Tooltip, {
437
+ content: "Show the full path",
438
+ side: "bottom",
439
+ children: /* @__PURE__ */ jsx(MenuTrigger, {
440
+ "data-crumb-group": "",
441
+ className: cn(cls, "aria-expanded:bg-kit-selected aria-expanded:text-kit-fg"),
442
+ "aria-label": `Show ${count} more ${count === 1 ? "level" : "levels"}`,
443
+ children: trigger
444
+ })
445
+ }), /* @__PURE__ */ jsxs(MenuContent, {
446
+ align: "start",
447
+ finalFocus: () => {
448
+ requestAnimationFrame(() => {
449
+ const nav = navRef.current?.isConnected ? navRef.current : document.querySelector(`nav[aria-label="${CSS.escape(label)}"]`);
450
+ if (!nav) return;
451
+ (nav.querySelector("[data-crumb-group]") ?? nav.querySelector("button, [aria-current], [tabindex='0']"))?.focus({ preventScroll: true });
452
+ });
453
+ return false;
454
+ },
455
+ className: "w-64 max-w-[calc(100vw-24px)] text-[13px] leading-5",
456
+ children: [/* @__PURE__ */ jsx("div", {
457
+ className: "px-2 pb-1 pt-1 text-kit-xs font-medium text-kit-fg-3",
458
+ children: "Pathway"
459
+ }), /* @__PURE__ */ jsx("ol", {
460
+ role: "none",
461
+ className: "flex flex-col",
462
+ children: items.map((c, i) => {
463
+ const isCurrent = i === last;
464
+ const hidden = i >= group.start && i <= group.end;
465
+ const rowCls = cn("relative flex h-7 select-none items-center gap-1.5 rounded-kit-sm pr-2 outline-none transition-colors", isCurrent ? "cursor-default font-semibold text-kit-fg data-[highlighted]:bg-kit-hover" : cn("cursor-pointer data-[highlighted]:bg-kit-hover data-[highlighted]:text-kit-fg active:bg-kit-selected", hidden ? "text-kit-fg" : "text-kit-fg-3"));
466
+ const style = { paddingLeft: 8 + Math.min(i, 8) * 12 };
467
+ return /* @__PURE__ */ jsx("li", {
468
+ role: "none",
469
+ children: c.to && !isCurrent ? /* @__PURE__ */ jsx(Menu.LinkItem, {
470
+ closeOnClick: true,
471
+ render: /* @__PURE__ */ jsx(Link, { to: c.to }),
472
+ onClick: () => c.onSelect?.(),
473
+ className: rowCls,
474
+ style,
475
+ children: /* @__PURE__ */ jsx(PathRow, {
476
+ c,
477
+ depth: i
478
+ })
479
+ }) : /* @__PURE__ */ jsx(Menu.Item, {
480
+ onClick: () => isCurrent ? void 0 : c.onSelect?.(),
481
+ "aria-current": isCurrent ? "page" : void 0,
482
+ className: rowCls,
483
+ style,
484
+ children: /* @__PURE__ */ jsx(PathRow, {
485
+ c,
486
+ depth: i,
487
+ current: isCurrent
488
+ })
489
+ })
490
+ }, c.id);
491
+ })
492
+ })]
493
+ })] })]
494
+ });
495
+ }
496
+ function PathRow({ c, depth, current }) {
497
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
498
+ depth > 0 ? /* @__PURE__ */ jsx("span", {
499
+ "aria-hidden": true,
500
+ className: "-mt-2 h-3 w-2 shrink-0 rounded-bl-[3px] border-b border-l border-kit-line-strong"
501
+ }) : null,
502
+ c.icon ? /* @__PURE__ */ jsx("span", {
503
+ "aria-hidden": true,
504
+ className: "flex shrink-0 items-center text-kit-fg-3 [&_svg]:size-3.5",
505
+ children: c.icon
506
+ }) : null,
507
+ c.label.length > 28 ? /* @__PURE__ */ jsx(Tooltip, {
508
+ content: c.label,
509
+ side: "right",
510
+ children: /* @__PURE__ */ jsx("span", {
511
+ className: "min-w-0 flex-1 truncate",
512
+ children: c.label
513
+ })
514
+ }) : /* @__PURE__ */ jsx("span", {
515
+ className: "min-w-0 flex-1 truncate",
516
+ children: c.label
517
+ }),
518
+ c.errors ? /* @__PURE__ */ jsx("span", {
519
+ role: "img",
520
+ "aria-label": "Has errors",
521
+ className: "size-1.5 shrink-0 rounded-full bg-kit-danger"
522
+ }) : null,
523
+ current ? /* @__PURE__ */ jsx("span", {
524
+ "aria-hidden": true,
525
+ className: "size-1.5 shrink-0 rounded-full bg-kit-accent"
526
+ }) : null
527
+ ] });
528
+ }
529
+ function PathCrumbSpecimen({ state, label, icon, group, size = "sm" }) {
530
+ const m = METRICS[size];
531
+ return /* @__PURE__ */ jsx("span", {
532
+ className: cn("inline-flex items-center", m.text),
533
+ children: /* @__PURE__ */ jsxs("span", {
534
+ className: cn(PILL, m.pill, "pointer-events-none", {
535
+ rest: "",
536
+ hover: "bg-kit-hover text-kit-fg",
537
+ pressed: "bg-kit-selected text-kit-fg",
538
+ focus: "shadow-[0_0_0_2px_var(--kit-surface),0_0_0_4px_var(--kit-focus-ring)]",
539
+ open: "bg-kit-selected text-kit-fg",
540
+ current: "font-semibold text-kit-fg hover:bg-transparent [&_[data-crumb-icon]]:text-kit-fg-2",
541
+ disabled: "text-kit-fg-4 hover:bg-transparent hover:text-kit-fg-4"
542
+ }[state]),
543
+ children: [
544
+ icon ? /* @__PURE__ */ jsx("span", {
545
+ "data-crumb-icon": true,
546
+ className: cn("flex shrink-0 items-center", m.icon),
547
+ "aria-hidden": true,
548
+ children: icon
549
+ }) : null,
550
+ /* @__PURE__ */ jsx("span", { children: label }),
551
+ group ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("span", {
552
+ className: "tabular-nums",
553
+ children: ["+", group]
554
+ }), /* @__PURE__ */ jsx(IconChevronDown, {
555
+ className: cn("-mx-0.5 shrink-0 text-kit-fg-4", m.sep),
556
+ stroke: 1.75,
557
+ "aria-hidden": true
558
+ })] }) : null
559
+ ]
560
+ })
561
+ });
562
+ }
563
+ //#endregion
564
+ export { PathCrumbSpecimen, PathCrumbs, clipWords, middleEllipsis, plansFor };
565
+
566
+ //# sourceMappingURL=path-crumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-crumbs.js","names":[],"sources":["../../src/ui/path-crumbs.tsx"],"sourcesContent":["/**\n * PATH CRUMBS (CPO D38): the one breadcrumb for every drill-in path: Visuals inspector, Block Kit drill-in,\n * nested documents, media details, the workspace top bar.\n *\n * <PathCrumbs items={[{ id, label, icon, onSelect }, …, current]} />\n *\n * Look (D38 v3): ancestors fg-3 with an invisible 4px-radius pill that appears on hover (bg-hover) and darkens while\n * pressed (bg-selected); the current item is fg/semibold with its icon, NO box; thin fg-4 chevrons flush between pills (6px from text);\n * the fold chip is a ghost crumb (\"Columns… +2 ⌄\") whose open state is bg-selected; keyboard-only neutral focus ring.\n *\n * Back (←) and current never collapse, and every visible crumb keeps READABLE TEXT (no icon-only crumbs). The trail\n * adapts to the width it ACTUALLY has (ResizeObserver on the nav + document.fonts.ready, not viewport breakpoints),\n * using space greedily; the first plan that fits wins:\n *\n * stage 0 everything at full length\n * stage 1 long labels shorten to their first words (~16ch, word boundary: \"Seasoning & care…\", \"Columns…\"):\n * middle items root side first, then the parent, then the root\n * stage 2 the middle folds, root side first, into ONE readable chip \"[▦] Columns… +2\" (its first folded level +\n * the count) that opens the Pathway popover; the immediate parent stays out of the fold\n * stage 3 the root joins the fold, then (last) the parent\n * last the current item middle-truncates (\"Seasoning…ail kit\"), full name in a tooltip\n *\n * Every variant is measured once in a hidden mirror and the stage is picked in a layout effect, so the first paint\n * is already right (no flicker, no layout jump). The Pathway popover lists the whole path as an indented tree\n * (↑↓ · Enter · Esc, focus returns to the chip). Siblings menus on crumbs were considered and left out (D6 calm).\n *\n * Links: a crumb with `to` renders through `linkAs` (default: a plain <a href>), so a host can pass its router's Link.\n */\nimport * as React from \"react\";\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport { IconArrowLeft, IconChevronDown, IconChevronRight } from \"@tabler/icons-react\";\nimport { cn } from \"../lib/cn\";\nimport { IconButton } from \"./button\";\nimport { Menu, MenuContent, MenuTrigger, Tooltip } from \"./overlay\";\n\n/* ── Metrics: one 2/4/6/8 scale, two densities ─────────────────────────────────────────────\n * row text pill (h · px) icon gap separator back\n * sm 28 13/20 24 · 6 14 6 12 chevron (6 to text) 28\n * md 32 14/20 28 · 8 16 6 14 chevron (8 to text) 32\n * The chevron sits flush between pills, so the text-to-chevron distance IS the pill padding (one number to tune).\n * The pill is invisible at rest; hover = bg-hover, pressed = bg-selected, radius 4. Hit areas ≥ 24px. */\nconst METRICS = {\n sm: { row: \"h-7\", text: \"text-[13px] leading-5\", pill: \"h-6 px-1.5\", cur: \"pr-0.5\", gap: \"gap-1.5\", icon: \"[&_svg]:size-3.5\", sep: \"size-3\", back: \"sm\" as const },\n md: { row: \"h-8\", text: \"text-[14px] leading-5\", pill: \"h-7 px-2\", cur: \"pr-0.5\", gap: \"gap-1.5\", icon: \"[&_svg]:size-4\", sep: \"size-3.5\", back: \"md\" as const },\n};\n/** Ancestor / group pill: fg-3 at rest, a quiet pill on hover, darker while pressed, fg-4 + inert when it can't navigate. */\nconst PILL =\n \"inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-kit-sm text-kit-fg-3 transition-colors duration-100 hover:bg-kit-hover hover:text-kit-fg active:bg-kit-selected disabled:pointer-events-none disabled:text-kit-fg-4\";\n\nexport interface PathCrumb {\n /** stable key */\n id: string;\n label: string;\n /** type icon (16px glyph; sized by the crumb) */\n icon?: React.ReactNode;\n /** navigate here (ignored on the current item) */\n onSelect?: () => void;\n /** …or a link (rendered through PathCrumbs `linkAs`) */\n to?: string;\n /** a meaningful container (a block, a folder): may name the collapsed group (\"Columns +2\") */\n container?: boolean;\n /** red dot: something under this level has errors */\n errors?: number;\n}\n\nexport type PathCrumbLinkProps = React.AnchorHTMLAttributes<HTMLAnchorElement> & { to: string; ref?: React.Ref<HTMLAnchorElement> };\n\nfunction DefaultLink({ to, ...props }: PathCrumbLinkProps) {\n return <a href={to} {...props} />;\n}\n\nexport interface PathCrumbsProps {\n /** root → current; the last item is the current one */\n items: PathCrumb[];\n /** ← goes up one level. Default: the parent's onSelect/to. `false` hides it (top-bar style). */\n onBack?: (() => void) | false;\n /** tooltip/aria for ←, default \"Back to {parent}\" */\n backLabel?: string;\n /** a key hint in the ← tooltip, shown only while keyboard hints are on (D44) */\n backShortcut?: string;\n /** @deprecated (D38 v3): the current item is always text: weight + colour, never a box. Kept for call-site compat. */\n current?: \"chip\" | \"text\";\n /** nav aria-label */\n label?: string;\n size?: \"sm\" | \"md\";\n /** renders crumbs that have `to` (a router Link); must forward its ref and spread props. Default: <a href> */\n linkAs?: React.ComponentType<PathCrumbLinkProps>;\n className?: string;\n}\n\n/** Word-boundary shortening: the first 2–3 words that fit ~16ch (\"Seasoning & care kit\" → \"Seasoning & care…\",\n * \"Columns / Bento\" → \"Columns…\"). Never mid-word unless a single word is itself too long. */\nconst isJoiner = (w: string) => /^[/&·\\-–—|:,+]+$/.test(w);\nexport function clipWords(s: string, max = 16): string {\n const words = s.trim().split(/\\s+/);\n if (s.length <= 12 && words.length <= 2) return s;\n const out: string[] = [];\n for (let i = 0; i < words.length - 1; i++) {\n const next = [...out, words[i]].join(\" \");\n if (next.length > max) break;\n out.push(words[i]);\n }\n while (out.length && isJoiner(out[out.length - 1])) out.pop();\n if (!out.length) return words[0].length > max ? `${words[0].slice(0, max - 2)}…` : `${words[0]}…`;\n return `${out.join(\" \")}…`;\n}\nconst long = (s: string) => clipWords(s) !== s;\nconst clip = (s: string) => clipWords(s);\n\ntype Form = \"full\" | \"trunc\";\ntype Group = { start: number; end: number };\ntype Plan = { forms: Form[]; group: Group | null };\n\n/** Degradation order: the first plan that fits wins. Every visible crumb keeps readable text (no icon-only crumbs). */\nexport function plansFor(items: PathCrumb[]): Plan[] {\n const n = items.length;\n const plans: Plan[] = [];\n const forms: Form[] = items.map(() => \"full\");\n const push = (group: Group | null = null) => plans.push({ forms: [...forms], group: group ? { ...group } : null });\n push();\n if (n < 2) return plans;\n const parent = n - 2;\n const middle = Array.from({ length: Math.max(0, n - 2) }, (_, k) => k + 1); // 1 … n-2, root side first\n // 1 · long labels shorten to their first words: middle items root side first, then the parent, then the root\n for (const i of middle) if (i !== parent && long(items[i].label)) { forms[i] = \"trunc\"; push(); }\n if (parent >= 1 && long(items[parent].label)) { forms[parent] = \"trunc\"; push(); }\n if (long(items[0].label)) { forms[0] = \"trunc\"; push(); }\n // 2 · the middle folds, root side first, into ONE readable chip (\"Columns… +2\"); the parent stays out of it\n for (let end = 1; end <= parent - 1; end++) push({ start: 1, end });\n // 3 · the root joins the fold, then (last) the parent\n if (parent >= 1) push({ start: 0, end: parent - 1 });\n push({ start: 0, end: parent });\n return plans;\n}\n\n/** Keep the head and the tail: \"Seasoning wax & chainmail kit\" → \"Seasoning…mail kit\". */\nexport function middleEllipsis(text: string, maxPx: number, measure: (s: string) => number) {\n if (measure(text) <= maxPx) return text;\n let lo = 2;\n let hi = text.length - 1;\n let best = \"\";\n while (lo <= hi) {\n const keep = (lo + hi) >> 1;\n const head = Math.ceil(keep * 0.6);\n const s = `${text.slice(0, head).trimEnd()}…${text.slice(text.length - (keep - head)).trimStart()}`;\n if (measure(s) <= maxPx) { best = s; lo = keep + 1; } else hi = keep - 1;\n }\n return best || null;\n}\n\nlet canvas: HTMLCanvasElement | null = null;\nfunction textMeasurer(el: Element | null) {\n if (!el) return null;\n canvas ??= document.createElement(\"canvas\");\n let ctx: CanvasRenderingContext2D | null = null;\n try {\n ctx = canvas.getContext(\"2d\");\n } catch {\n return null; // no canvas (test DOM): skip the last-resort truncation\n }\n if (!ctx) return null;\n const cs = getComputedStyle(el);\n ctx.font = `${cs.fontStyle} ${cs.fontWeight} ${cs.fontSize} ${cs.fontFamily}`;\n return (s: string) => ctx.measureText(s).width;\n}\n\nexport function PathCrumbs({ items, onBack, backLabel, backShortcut, label = \"Breadcrumb\", size = \"sm\", linkAs: Link = DefaultLink, className }: PathCrumbsProps) {\n const n = items.length;\n const parent = n > 1 ? items[n - 2] : undefined;\n const back = onBack === false ? undefined : onBack ?? (parent ? () => go(parent) : undefined);\n const sig = items.map((i) => `${i.id}\\u0001${i.label}\\u0001${i.icon ? 1 : 0}\\u0001${i.errors ? 1 : 0}\\u0001${i.container ? 1 : 0}`).join(\"\\u0002\");\n const plans = React.useMemo(() => plansFor(items), [sig]); // eslint-disable-line react-hooks/exhaustive-deps\n const navRef = React.useRef<HTMLElement>(null);\n const mirrorRef = React.useRef<HTMLDivElement>(null);\n const backRef = React.useRef<HTMLDivElement>(null);\n const [fit, setFit] = React.useState<{ plan: number; currentText: string | null }>({ plan: 0, currentText: null });\n\n const measure = React.useCallback(() => {\n const nav = navRef.current;\n const mirror = mirrorRef.current;\n if (!nav || !mirror) return;\n // layout widths, not painted ones: an ancestor mid-animation (scale / pop-in) must not skew the fit\n const rect = nav.getBoundingClientRect().width;\n const scale = nav.offsetWidth && rect ? rect / nav.offsetWidth : 1;\n const w = (key: string) => (mirror.querySelector<HTMLElement>(`[data-m=\"${key}\"]`)?.getBoundingClientRect().width ?? 0) / scale;\n const avail = nav.clientWidth - (backRef.current ? backRef.current.getBoundingClientRect().width / scale : 0) - 0.5;\n const sep = w(\"sep\");\n const cur = w(\"cur\");\n const widthOf = (p: Plan) => {\n const parts: number[] = [];\n if (n > 1) {\n const gk = (g: Group) => `g:${g.start}:${g.end}`;\n if (p.group?.start === 0) parts.push(w(gk(p.group)));\n else {\n parts.push(w(`0:${p.forms[0]}`));\n if (p.group) parts.push(w(gk(p.group)));\n }\n for (let i = 1; i < n - 1; i++) if (!p.group || i > p.group.end) parts.push(w(`${i}:${p.forms[i]}`));\n }\n parts.push(cur);\n return parts.reduce((a, b) => a + b, 0) + sep * (parts.length - 1);\n };\n let pick = plans.length - 1;\n let total = 0;\n for (let k = 0; k < plans.length; k++) {\n total = widthOf(plans[k]);\n if (total <= avail) { pick = k; break; }\n }\n let currentText: string | null = null;\n if (pick === plans.length - 1 && (total = widthOf(plans[pick])) > avail) {\n // last resort: middle-truncate the current item to the room that's left\n const textEl = mirror.querySelector('[data-m=\"curtext\"]');\n const textW = textEl?.getBoundingClientRect().width ?? 0;\n const room = cur - (total - avail) - (cur - textW);\n const m = textMeasurer(textEl);\n if (m && room > 24) currentText = middleEllipsis(items[n - 1].label, room, m);\n }\n setFit((f) => (f.plan === pick && f.currentText === currentText ? f : { plan: pick, currentText }));\n }, [plans, n]); // eslint-disable-line react-hooks/exhaustive-deps\n\n React.useLayoutEffect(() => {\n measure();\n }, [measure, sig]);\n React.useLayoutEffect(() => {\n const nav = navRef.current;\n if (!nav || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => measure());\n ro.observe(nav);\n let alive = true;\n document.fonts?.ready.then(() => alive && measure());\n return () => {\n alive = false;\n ro.disconnect();\n };\n }, [measure]);\n\n if (!n) return null;\n const plan = plans[Math.min(fit.plan, plans.length - 1)];\n const m = METRICS[size];\n const curItem = items[n - 1];\n\n /* ── pieces (shared by the mirror and the real trail so the widths match) ── */\n const icon = (c: PathCrumb) => (c.icon ? <span className={cn(\"flex shrink-0 items-center\", m.icon)} aria-hidden>{c.icon}</span> : null);\n /* V2: the dot itself carries the name (role=\"img\" so assistive tech reads it; no hidden text in the crumb) */\n const dot = (c: PathCrumb) => (c.errors ? <span role=\"img\" aria-label=\"Has errors\" className=\"size-1.5 shrink-0 rounded-full bg-kit-danger\" /> : null);\n const crumbCls = cn(PILL, m.pill);\n const body = (c: PathCrumb, form: Form) => (\n <>\n {icon(c)}\n <span>{form === \"trunc\" ? clip(c.label) : c.label}</span>\n {dot(c)}\n </>\n );\n /** The fold chip names its first folded level (the root only when nothing else is folded): \"[▦] Columns… +2\". */\n const groupBody = (g: Group) => {\n const count = g.end - g.start + 1;\n const lead = items[g.start === 0 && g.end > 0 ? 1 : g.start];\n return (\n <>\n {icon(lead)}\n <span>{clipWords(lead.label, 12)}</span>\n {count > 1 ? <span className=\"tabular-nums\">+{count - 1}</span> : null}\n <IconChevronDown className={cn(\"-mx-0.5 shrink-0 text-kit-fg-4\", m.sep)} stroke={1.75} aria-hidden />\n </>\n );\n };\n // current = emphasis by weight + colour, never a box (D38 v3); same box metrics as a crumb so nothing shifts\n // it has no pill, so no trailing padding: only the leading inset that lines it up with the chevron rhythm\n const currentCls = cn(\"inline-flex min-w-0 max-w-full items-center whitespace-nowrap rounded-kit-sm font-semibold text-kit-fg\", m.pill, m.cur, m.gap, \"[&_[data-crumb-icon]]:text-kit-fg-2\");\n const sepEl = <IconChevronRight className={cn(\"shrink-0 text-kit-fg-4\", m.sep)} stroke={1.75} aria-hidden />;\n\n function go(c: PathCrumb) {\n c.onSelect?.();\n }\n\n const crumb = (c: PathCrumb, i: number, form: Form) => {\n const tip = form !== \"full\" || undefined;\n const inner = body(c, form);\n const aria = form === \"trunc\" ? (c.errors ? `${c.label}, has errors` : c.label) : undefined;\n const el = c.to ? (\n <Link to={c.to} className={crumbCls} aria-label={aria} onClick={c.onSelect}>{inner}</Link>\n ) : (\n <button type=\"button\" className={crumbCls} aria-label={aria} onClick={() => go(c)} disabled={!c.onSelect}>{inner}</button>\n );\n return (\n <li key={c.id} className=\"flex shrink-0 items-center\">\n {i > 0 ? sepEl : null}\n {tip ? <Tooltip content={c.label} side=\"bottom\">{el}</Tooltip> : el}\n </li>\n );\n };\n\n const shown: React.ReactNode[] = [];\n if (n > 1) {\n const g = plan.group;\n const group = (first?: boolean) => (\n <GroupLi key=\"grp\" items={items} group={g!} first={first} trigger={groupBody(g!)} sep={sepEl} navRef={navRef} label={label} cls={crumbCls} link={Link} />\n );\n if (g?.start === 0) shown.push(group(true));\n else {\n shown.push(crumb(items[0], 0, plan.forms[0]));\n if (g) shown.push(group());\n }\n for (let i = 1; i < n - 1; i++) if (!g || i > g.end) shown.push(crumb(items[i], i, plan.forms[i]));\n }\n const curLabel = fit.currentText ?? curItem.label;\n const curNode = (\n <span aria-current=\"page\" className={currentCls}>\n {curItem.icon ? <span data-crumb-icon className={cn(\"flex shrink-0 items-center\", m.icon)} aria-hidden>{curItem.icon}</span> : null}\n <span className=\"min-w-0 truncate\" aria-label={curLabel !== curItem.label ? curItem.label : undefined}>{curLabel}</span>\n {dot(curItem)}\n </span>\n );\n const backText = backLabel ?? (parent ? `Back to ${parent.label}` : \"Back\");\n\n return (\n <nav ref={navRef} aria-label={label} data-size={size} className={cn(\"relative flex min-w-0 flex-1 items-center\", m.row, m.text, className)}>\n {back ? (\n <div ref={backRef} className=\"flex shrink-0 items-center\">\n <Tooltip content={backText} shortcut={backShortcut}>\n <IconButton label={backText} size={m.back} onClick={back} className=\"shrink-0 rounded-kit-sm\">\n <IconArrowLeft stroke={1.75} />\n </IconButton>\n </Tooltip>\n </div>\n ) : null}\n <ol className=\"flex min-w-0 flex-1 items-center overflow-hidden\">\n {shown}\n <li className=\"flex min-w-0 shrink items-center\">\n {n > 1 ? sepEl : null}\n {fit.currentText || (fit.plan === plans.length - 1 && long(curItem.label)) ? (\n <Tooltip content={curItem.label} side=\"bottom\">\n <span tabIndex={0} className=\"flex min-w-0 rounded-kit-sm\">{curNode}</span>\n </Tooltip>\n ) : (\n curNode\n )}\n </li>\n </ol>\n\n {/* hidden mirror: every variant measured once (never painted, never announced) */}\n <div ref={mirrorRef} aria-hidden className=\"pointer-events-none invisible absolute left-0 top-0 h-0 w-0 overflow-hidden\">\n <div className=\"flex w-max flex-col items-start\">\n <span data-m=\"sep\" className=\"flex\">{sepEl}</span>\n {items.slice(0, -1).map((c, i) => (\n <React.Fragment key={c.id}>\n <span data-m={`${i}:full`} className={crumbCls}>{body(c, \"full\")}</span>\n <span data-m={`${i}:trunc`} className={crumbCls}>{body(c, \"trunc\")}</span>\n </React.Fragment>\n ))}\n {[0, 1].flatMap((start) =>\n items.slice(0, -1).map((_, end) =>\n end < start ? null : <span key={`g${start}:${end}`} data-m={`g:${start}:${end}`} className={crumbCls}>{groupBody({ start, end })}</span>,\n ),\n )}\n <span data-m=\"cur\" className={currentCls}>\n {curItem.icon ? <span data-crumb-icon className={cn(\"flex shrink-0 items-center\", m.icon)}>{curItem.icon}</span> : null}\n <span data-m=\"curtext\">{curItem.label}</span>\n {dot(curItem)}\n </span>\n </div>\n </div>\n </nav>\n );\n}\n\n/* ── The folded middle + its Pathway popover ───────────────────────────────────── */\nfunction GroupLi({\n items,\n group,\n trigger,\n sep,\n first,\n navRef,\n label,\n cls,\n link: Link,\n}: {\n items: PathCrumb[];\n group: Group;\n trigger: React.ReactNode;\n sep: React.ReactNode;\n first?: boolean;\n navRef: React.RefObject<HTMLElement | null>;\n label: string;\n cls: string;\n link: React.ComponentType<PathCrumbLinkProps>;\n}) {\n const count = group.end - group.start + 1;\n const last = items.length - 1;\n return (\n <li className=\"flex shrink-0 items-center\">\n {first ? null : sep}\n <Menu>\n <Tooltip content=\"Show the full path\" side=\"bottom\">\n <MenuTrigger\n data-crumb-group=\"\"\n className={cn(cls, \"aria-expanded:bg-kit-selected aria-expanded:text-kit-fg\")} /* = crumbCls: the mirror measures it */\n aria-label={`Show ${count} more ${count === 1 ? \"level\" : \"levels\"}`}\n >\n {trigger}\n </MenuTrigger>\n </Tooltip>\n {/* the kit MenuContent: §12 dismiss guards and the modal-layer marker (an open tooltip closes) */}\n <MenuContent\n align=\"start\"\n finalFocus={() => {\n // a jump re-lays the trail (or remounts the host) and the chip may be gone: land on the trail's chip,\n // ← or current item instead of <body>\n requestAnimationFrame(() => {\n const nav = navRef.current?.isConnected ? navRef.current : document.querySelector<HTMLElement>(`nav[aria-label=\"${CSS.escape(label)}\"]`);\n if (!nav) return;\n const chip = nav.querySelector<HTMLElement>(\"[data-crumb-group]\");\n (chip ?? nav.querySelector<HTMLElement>(\"button, [aria-current], [tabindex='0']\"))?.focus({ preventScroll: true });\n });\n return false;\n }}\n className=\"w-64 max-w-[calc(100vw-24px)] text-[13px] leading-5\"\n >\n <div className=\"px-2 pb-1 pt-1 text-kit-xs font-medium text-kit-fg-3\">Pathway</div>\n {/* role=none: the menu owns its menuitems directly (no list or listitem in between) */}\n <ol role=\"none\" className=\"flex flex-col\">\n {items.map((c, i) => {\n const isCurrent = i === last;\n const hidden = i >= group.start && i <= group.end;\n const rowCls = cn(\n \"relative flex h-7 select-none items-center gap-1.5 rounded-kit-sm pr-2 outline-none transition-colors\",\n isCurrent\n ? \"cursor-default font-semibold text-kit-fg data-[highlighted]:bg-kit-hover\"\n : cn(\"cursor-pointer data-[highlighted]:bg-kit-hover data-[highlighted]:text-kit-fg active:bg-kit-selected\", hidden ? \"text-kit-fg\" : \"text-kit-fg-3\"),\n );\n const style = { paddingLeft: 8 + Math.min(i, 8) * 12 };\n return (\n <li key={c.id} role=\"none\">\n {c.to && !isCurrent ? (\n <MenuPrimitive.LinkItem\n closeOnClick\n render={<Link to={c.to} />}\n onClick={() => c.onSelect?.()}\n className={rowCls}\n style={style}\n >\n <PathRow c={c} depth={i} />\n </MenuPrimitive.LinkItem>\n ) : (\n <MenuPrimitive.Item\n onClick={() => (isCurrent ? undefined : c.onSelect?.())}\n aria-current={isCurrent ? \"page\" : undefined}\n className={rowCls}\n style={style}\n >\n <PathRow c={c} depth={i} current={isCurrent} />\n </MenuPrimitive.Item>\n )}\n </li>\n );\n })}\n </ol>\n </MenuContent>\n </Menu>\n </li>\n );\n}\n\nfunction PathRow({ c, depth, current }: { c: PathCrumb; depth: number; current?: boolean }) {\n return (\n <>\n {depth > 0 ? <span aria-hidden className=\"-mt-2 h-3 w-2 shrink-0 rounded-bl-[3px] border-b border-l border-kit-line-strong\" /> : null}\n {c.icon ? <span aria-hidden className=\"flex shrink-0 items-center text-kit-fg-3 [&_svg]:size-3.5\">{c.icon}</span> : null}\n {c.label.length > 28 ? (\n <Tooltip content={c.label} side=\"right\">\n <span className=\"min-w-0 flex-1 truncate\">{c.label}</span>\n </Tooltip>\n ) : (\n <span className=\"min-w-0 flex-1 truncate\">{c.label}</span>\n )}\n {c.errors ? <span role=\"img\" aria-label=\"Has errors\" className=\"size-1.5 shrink-0 rounded-full bg-kit-danger\" /> : null}\n {current ? <span aria-hidden className=\"size-1.5 shrink-0 rounded-full bg-kit-accent\" /> : null}\n </>\n );\n}\n\n/* ── Specimen (design system): one crumb frozen in a state, built from the SAME constants ─── */\nexport type PathCrumbState = \"rest\" | \"hover\" | \"pressed\" | \"focus\" | \"open\" | \"current\" | \"disabled\";\nexport function PathCrumbSpecimen({ state, label, icon, group, size = \"sm\" }: { state: PathCrumbState; label: string; icon?: React.ReactNode; group?: number; size?: \"sm\" | \"md\" }) {\n const m = METRICS[size];\n const forced: Record<PathCrumbState, string> = {\n rest: \"\",\n hover: \"bg-kit-hover text-kit-fg\",\n pressed: \"bg-kit-selected text-kit-fg\",\n focus: \"shadow-[0_0_0_2px_var(--kit-surface),0_0_0_4px_var(--kit-focus-ring)]\",\n open: \"bg-kit-selected text-kit-fg\",\n current: \"font-semibold text-kit-fg hover:bg-transparent [&_[data-crumb-icon]]:text-kit-fg-2\",\n disabled: \"text-kit-fg-4 hover:bg-transparent hover:text-kit-fg-4\",\n };\n return (\n <span className={cn(\"inline-flex items-center\", m.text)}>\n <span className={cn(PILL, m.pill, \"pointer-events-none\", forced[state])}>\n {icon ? <span data-crumb-icon className={cn(\"flex shrink-0 items-center\", m.icon)} aria-hidden>{icon}</span> : null}\n <span>{label}</span>\n {group ? (\n <>\n <span className=\"tabular-nums\">+{group}</span>\n <IconChevronDown className={cn(\"-mx-0.5 shrink-0 text-kit-fg-4\", m.sep)} stroke={1.75} aria-hidden />\n </>\n ) : null}\n </span>\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAM,UAAU;CACd,IAAI;EAAE,KAAK;EAAO,MAAM;EAAyB,MAAM;EAAc,KAAK;EAAU,KAAK;EAAW,MAAM;EAAoB,KAAK;EAAU,MAAM;CAAc;CACjK,IAAI;EAAE,KAAK;EAAO,MAAM;EAAyB,MAAM;EAAY,KAAK;EAAU,KAAK;EAAW,MAAM;EAAkB,KAAK;EAAY,MAAM;CAAc;AACjK;;AAEA,IAAM,OACJ;AAoBF,SAAS,YAAY,EAAE,IAAI,GAAG,SAA6B;CACzD,OAAO,oBAAC,KAAD;EAAG,MAAM;EAAI,GAAI;CAAQ,CAAA;AAClC;;;AAuBA,IAAM,YAAY,MAAc,mBAAmB,KAAK,CAAC;AACzD,SAAgB,UAAU,GAAW,MAAM,IAAY;CACrD,MAAM,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK;CAClC,IAAI,EAAE,UAAU,MAAM,MAAM,UAAU,GAAG,OAAO;CAChD,MAAM,MAAgB,CAAC;CACvB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;EAEzC,IADa,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,KAAK,GACjC,CAAA,CAAK,SAAS,KAAK;EACvB,IAAI,KAAK,MAAM,EAAE;CACnB;CACA,OAAO,IAAI,UAAU,SAAS,IAAI,IAAI,SAAS,EAAE,GAAG,IAAI,IAAI;CAC5D,IAAI,CAAC,IAAI,QAAQ,OAAO,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;CAC/F,OAAO,GAAG,IAAI,KAAK,GAAG,EAAE;AAC1B;AACA,IAAM,QAAQ,MAAc,UAAU,CAAC,MAAM;AAC7C,IAAM,QAAQ,MAAc,UAAU,CAAC;;AAOvC,SAAgB,SAAS,OAA4B;CACnD,MAAM,IAAI,MAAM;CAChB,MAAM,QAAgB,CAAC;CACvB,MAAM,QAAgB,MAAM,UAAU,MAAM;CAC5C,MAAM,QAAQ,QAAsB,SAAS,MAAM,KAAK;EAAE,OAAO,CAAC,GAAG,KAAK;EAAG,OAAO,QAAQ,EAAE,GAAG,MAAM,IAAI;CAAK,CAAC;CACjH,KAAK;CACL,IAAI,IAAI,GAAG,OAAO;CAClB,MAAM,SAAS,IAAI;CACnB,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,IAAI,CAAC;CAEzE,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,CAAC,KAAK,GAAG;EAAE,MAAM,KAAK;EAAS,KAAK;CAAG;CAChG,IAAI,UAAU,KAAK,KAAK,MAAM,OAAO,CAAC,KAAK,GAAG;EAAE,MAAM,UAAU;EAAS,KAAK;CAAG;CACjF,IAAI,KAAK,MAAM,EAAE,CAAC,KAAK,GAAG;EAAE,MAAM,KAAK;EAAS,KAAK;CAAG;CAExD,KAAK,IAAI,MAAM,GAAG,OAAO,SAAS,GAAG,OAAO,KAAK;EAAE,OAAO;EAAG;CAAI,CAAC;CAElE,IAAI,UAAU,GAAG,KAAK;EAAE,OAAO;EAAG,KAAK,SAAS;CAAE,CAAC;CACnD,KAAK;EAAE,OAAO;EAAG,KAAK;CAAO,CAAC;CAC9B,OAAO;AACT;;AAGA,SAAgB,eAAe,MAAc,OAAe,SAAgC;CAC1F,IAAI,QAAQ,IAAI,KAAK,OAAO,OAAO;CACnC,IAAI,KAAK;CACT,IAAI,KAAK,KAAK,SAAS;CACvB,IAAI,OAAO;CACX,OAAO,MAAM,IAAI;EACf,MAAM,OAAQ,KAAK,MAAO;EAC1B,MAAM,OAAO,KAAK,KAAK,OAAO,EAAG;EACjC,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,KAAK,UAAU,OAAO,KAAK,CAAC,CAAC,UAAU;EAChG,IAAI,QAAQ,CAAC,KAAK,OAAO;GAAE,OAAO;GAAG,KAAK,OAAO;EAAG,OAAO,KAAK,OAAO;CACzE;CACA,OAAO,QAAQ;AACjB;AAEA,IAAI,SAAmC;AACvC,SAAS,aAAa,IAAoB;CACxC,IAAI,CAAC,IAAI,OAAO;CAChB,WAAW,SAAS,cAAc,QAAQ;CAC1C,IAAI,MAAuC;CAC3C,IAAI;EACF,MAAM,OAAO,WAAW,IAAI;CAC9B,QAAQ;EACN,OAAO;CACT;CACA,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,KAAK,iBAAiB,EAAE;CAC9B,IAAI,OAAO,GAAG,GAAG,UAAU,GAAG,GAAG,WAAW,GAAG,GAAG,SAAS,GAAG,GAAG;CACjE,QAAQ,MAAc,IAAI,YAAY,CAAC,CAAC,CAAC;AAC3C;AAEA,SAAgB,WAAW,EAAE,OAAO,QAAQ,WAAW,cAAc,QAAQ,cAAc,OAAO,MAAM,QAAQ,OAAO,aAAa,aAA8B;CAChK,MAAM,IAAI,MAAM;CAChB,MAAM,SAAS,IAAI,IAAI,MAAM,IAAI,KAAK,KAAA;CACtC,MAAM,OAAO,WAAW,QAAQ,KAAA,IAAY,WAAW,eAAe,GAAG,MAAM,IAAI,KAAA;CACnF,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,QAAQ,EAAE,OAAO,IAAI,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE,YAAY,IAAI,GAAG,CAAC,CAAC,KAAK,GAAQ;CACjJ,MAAM,QAAQ,MAAM,cAAc,SAAS,KAAK,GAAG,CAAC,GAAG,CAAC;CACxD,MAAM,SAAS,MAAM,OAAoB,IAAI;CAC7C,MAAM,YAAY,MAAM,OAAuB,IAAI;CACnD,MAAM,UAAU,MAAM,OAAuB,IAAI;CACjD,MAAM,CAAC,KAAK,UAAU,MAAM,SAAuD;EAAE,MAAM;EAAG,aAAa;CAAK,CAAC;CAEjH,MAAM,UAAU,MAAM,kBAAkB;EACtC,MAAM,MAAM,OAAO;EACnB,MAAM,SAAS,UAAU;EACzB,IAAI,CAAC,OAAO,CAAC,QAAQ;EAErB,MAAM,OAAO,IAAI,sBAAsB,CAAC,CAAC;EACzC,MAAM,QAAQ,IAAI,eAAe,OAAO,OAAO,IAAI,cAAc;EACjE,MAAM,KAAK,SAAiB,OAAO,cAA2B,YAAY,IAAI,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC,SAAS,KAAK;EAC1H,MAAM,QAAQ,IAAI,eAAe,QAAQ,UAAU,QAAQ,QAAQ,sBAAsB,CAAC,CAAC,QAAQ,QAAQ,KAAK;EAChH,MAAM,MAAM,EAAE,KAAK;EACnB,MAAM,MAAM,EAAE,KAAK;EACnB,MAAM,WAAW,MAAY;GAC3B,MAAM,QAAkB,CAAC;GACzB,IAAI,IAAI,GAAG;IACT,MAAM,MAAM,MAAa,KAAK,EAAE,MAAM,GAAG,EAAE;IAC3C,IAAI,EAAE,OAAO,UAAU,GAAG,MAAM,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9C;KACH,MAAM,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;KAC/B,IAAI,EAAE,OAAO,MAAM,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC;IACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,MAAM,KAAK,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;GACrG;GACA,MAAM,KAAK,GAAG;GACd,OAAO,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,OAAO,MAAM,SAAS;EAClE;EACA,IAAI,OAAO,MAAM,SAAS;EAC1B,IAAI,QAAQ;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,QAAQ,QAAQ,MAAM,EAAE;GACxB,IAAI,SAAS,OAAO;IAAE,OAAO;IAAG;GAAO;EACzC;EACA,IAAI,cAA6B;EACjC,IAAI,SAAS,MAAM,SAAS,MAAM,QAAQ,QAAQ,MAAM,KAAK,KAAK,OAAO;GAEvE,MAAM,SAAS,OAAO,cAAc,sBAAoB;GACxD,MAAM,QAAQ,QAAQ,sBAAsB,CAAC,CAAC,SAAS;GACvD,MAAM,OAAO,OAAO,QAAQ,UAAU,MAAM;GAC5C,MAAM,IAAI,aAAa,MAAM;GAC7B,IAAI,KAAK,OAAO,IAAI,cAAc,eAAe,MAAM,IAAI,EAAE,CAAC,OAAO,MAAM,CAAC;EAC9E;EACA,QAAQ,MAAO,EAAE,SAAS,QAAQ,EAAE,gBAAgB,cAAc,IAAI;GAAE,MAAM;GAAM;EAAY,CAAE;CACpG,GAAG,CAAC,OAAO,CAAC,CAAC;CAEb,MAAM,sBAAsB;EAC1B,QAAQ;CACV,GAAG,CAAC,SAAS,GAAG,CAAC;CACjB,MAAM,sBAAsB;EAC1B,MAAM,MAAM,OAAO;EACnB,IAAI,CAAC,OAAO,OAAO,mBAAmB,aAAa;EACnD,MAAM,KAAK,IAAI,qBAAqB,QAAQ,CAAC;EAC7C,GAAG,QAAQ,GAAG;EACd,IAAI,QAAQ;EACZ,SAAS,OAAO,MAAM,WAAW,SAAS,QAAQ,CAAC;EACnD,aAAa;GACX,QAAQ;GACR,GAAG,WAAW;EAChB;CACF,GAAG,CAAC,OAAO,CAAC;CAEZ,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,MAAM,SAAS,CAAC;CACtD,MAAM,IAAI,QAAQ;CAClB,MAAM,UAAU,MAAM,IAAI;CAG1B,MAAM,QAAQ,MAAkB,EAAE,OAAO,oBAAC,QAAD;EAAM,WAAW,GAAG,8BAA8B,EAAE,IAAI;EAAG,eAAA;EAAa,UAAA,EAAE;CAAW,CAAA,IAAI;CAElI,MAAM,OAAO,MAAkB,EAAE,SAAS,oBAAC,QAAD;EAAM,MAAK;EAAM,cAAW;EAAa,WAAU;CAAgD,CAAA,IAAI;CACjJ,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI;CAChC,MAAM,QAAQ,GAAc,SAC1B,qBAAA,UAAA,EAAA,UAAA;EACG,KAAK,CAAC;EACP,oBAAC,QAAD,EAAA,UAAO,SAAS,UAAU,KAAK,EAAE,KAAK,IAAI,EAAE,MAAY,CAAA;EACvD,IAAI,CAAC;CACN,EAAA,CAAA;;CAGJ,MAAM,aAAa,MAAa;EAC9B,MAAM,QAAQ,EAAE,MAAM,EAAE,QAAQ;EAChC,MAAM,OAAO,MAAM,EAAE,UAAU,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE;EACtD,OACE,qBAAA,UAAA,EAAA,UAAA;GACG,KAAK,IAAI;GACV,oBAAC,QAAD,EAAA,UAAO,UAAU,KAAK,OAAO,EAAE,EAAQ,CAAA;GACtC,QAAQ,IAAI,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CAA+B,KAAE,QAAQ,CAAQ;GAAI,CAAA,IAAA;GAClE,oBAAC,iBAAD;IAAiB,WAAW,GAAG,kCAAkC,EAAE,GAAG;IAAG,QAAQ;IAAM,eAAA;GAAa,CAAA;EACpG,EAAA,CAAA;CAEN;CAGA,MAAM,aAAa,GAAG,0GAA0G,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,qCAAqC;CAC3L,MAAM,QAAQ,oBAAC,kBAAD;EAAkB,WAAW,GAAG,0BAA0B,EAAE,GAAG;EAAG,QAAQ;EAAM,eAAA;CAAa,CAAA;CAE3G,SAAS,GAAG,GAAc;EACxB,EAAE,WAAW;CACf;CAEA,MAAM,SAAS,GAAc,GAAW,SAAe;EACrD,MAAM,MAAM,SAAS,UAAU,KAAA;EAC/B,MAAM,QAAQ,KAAK,GAAG,IAAI;EAC1B,MAAM,OAAO,SAAS,UAAW,EAAE,SAAS,GAAG,EAAE,MAAM,gBAAgB,EAAE,QAAS,KAAA;EAClF,MAAM,KAAK,EAAE,KACX,oBAAC,MAAD;GAAM,IAAI,EAAE;GAAI,WAAW;GAAU,cAAY;GAAM,SAAS,EAAE;GAAW,UAAA;EAAY,CAAA,IAEzF,oBAAC,UAAD;GAAQ,MAAK;GAAS,WAAW;GAAU,cAAY;GAAM,eAAe,GAAG,CAAC;GAAG,UAAU,CAAC,EAAE;GAAW,UAAA;EAAc,CAAA;EAE3H,OACE,qBAAC,MAAD;GAAe,WAAU;GAAzB,UAAA,CACG,IAAI,IAAI,QAAQ,MAChB,MAAM,oBAAC,SAAD;IAAS,SAAS,EAAE;IAAO,MAAK;IAAU,UAAA;GAAY,CAAA,IAAI,EAC/D;EAHK,GAAA,EAAE,EAGP;CAER;CAEA,MAAM,QAA2B,CAAC;CAClC,IAAI,IAAI,GAAG;EACT,MAAM,IAAI,KAAK;EACf,MAAM,SAAS,UACb,oBAAC,SAAD;GAA0B;GAAO,OAAO;GAAW;GAAO,SAAS,UAAU,CAAE;GAAG,KAAK;GAAe;GAAe;GAAO,KAAK;GAAU,MAAM;EAAO,GAA3I,KAA2I;EAE1J,IAAI,GAAG,UAAU,GAAG,MAAM,KAAK,MAAM,IAAI,CAAC;OACrC;GACH,MAAM,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;GAC5C,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC;EAC3B;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;CACnG;CACA,MAAM,WAAW,IAAI,eAAe,QAAQ;CAC5C,MAAM,UACJ,qBAAC,QAAD;EAAM,gBAAa;EAAO,WAAW;EAArC,UAAA;GACG,QAAQ,OAAO,oBAAC,QAAD;IAAM,mBAAA;IAAgB,WAAW,GAAG,8BAA8B,EAAE,IAAI;IAAG,eAAA;IAAa,UAAA,QAAQ;GAAW,CAAA,IAAI;GAC/H,oBAAC,QAAD;IAAM,WAAU;IAAmB,cAAY,aAAa,QAAQ,QAAQ,QAAQ,QAAQ,KAAA;IAAY,UAAA;GAAe,CAAA;GACtH,IAAI,OAAO;EACR;;CAER,MAAM,WAAW,cAAc,SAAS,WAAW,OAAO,UAAU;CAEpE,OACE,qBAAC,OAAD;EAAK,KAAK;EAAQ,cAAY;EAAO,aAAW;EAAM,WAAW,GAAG,6CAA6C,EAAE,KAAK,EAAE,MAAM,SAAS;EAAzI,UAAA;GACG,OACC,oBAAC,OAAD;IAAK,KAAK;IAAS,WAAU;IAC3B,UAAA,oBAAC,SAAD;KAAS,SAAS;KAAU,UAAU;KACpC,UAAA,oBAAC,YAAD;MAAY,OAAO;MAAU,MAAM,EAAE;MAAM,SAAS;MAAM,WAAU;MAClE,UAAA,oBAAC,eAAD,EAAe,QAAQ,KAAO,CAAA;KACpB,CAAA;IACL,CAAA;GACN,CAAA,IACH;GACJ,qBAAC,MAAD;IAAI,WAAU;IAAd,UAAA,CACG,OACD,qBAAC,MAAD;KAAI,WAAU;KAAd,UAAA,CACG,IAAI,IAAI,QAAQ,MAChB,IAAI,eAAgB,IAAI,SAAS,MAAM,SAAS,KAAK,KAAK,QAAQ,KAAK,IACtE,oBAAC,SAAD;MAAS,SAAS,QAAQ;MAAO,MAAK;MACpC,UAAA,oBAAC,QAAD;OAAM,UAAU;OAAG,WAAU;OAA+B,UAAA;MAAc,CAAA;KACnE,CAAA,IAET,OAEA;IACF,CAAA,CAAA;;GAGJ,oBAAC,OAAD;IAAK,KAAK;IAAW,eAAA;IAAY,WAAU;IACzC,UAAA,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,oBAAC,QAAD;OAAM,UAAO;OAAM,WAAU;OAAQ,UAAA;MAAY,CAAA;MAChD,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,MAC1B,qBAAC,MAAM,UAAP,EAAA,UAAA,CACE,oBAAC,QAAD;OAAM,UAAQ,GAAG,EAAE;OAAQ,WAAW;OAAW,UAAA,KAAK,GAAG,MAAM;MAAQ,CAAA,GACvE,oBAAC,QAAD;OAAM,UAAQ,GAAG,EAAE;OAAS,WAAW;OAAW,UAAA,KAAK,GAAG,OAAO;MAAQ,CAAA,CAC3D,EAAA,GAHK,EAAE,EAGP,CACjB;MACA,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,UACf,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,QACzB,MAAM,QAAQ,OAAO,oBAAC,QAAD;OAA+B,UAAQ,KAAK,MAAM,GAAG;OAAO,WAAW;OAAW,UAAA,UAAU;QAAE;QAAO;OAAI,CAAC;MAAQ,GAAvG,IAAI,MAAM,GAAG,KAA0F,CACzI,CACF;MACA,qBAAC,QAAD;OAAM,UAAO;OAAM,WAAW;OAA9B,UAAA;QACG,QAAQ,OAAO,oBAAC,QAAD;SAAM,mBAAA;SAAgB,WAAW,GAAG,8BAA8B,EAAE,IAAI;SAAI,UAAA,QAAQ;QAAW,CAAA,IAAI;QACnH,oBAAC,QAAD;SAAM,UAAO;SAAW,UAAA,QAAQ;QAAY,CAAA;QAC3C,IAAI,OAAO;OACR;;KACH;;GACF,CAAA;EACF;;AAET;AAGA,SAAS,QAAQ,EACf,OACA,OACA,SACA,KACA,OACA,QACA,OACA,KACA,MAAM,QAWL;CACD,MAAM,QAAQ,MAAM,MAAM,MAAM,QAAQ;CACxC,MAAM,OAAO,MAAM,SAAS;CAC5B,OACE,qBAAC,MAAD;EAAI,WAAU;EAAd,UAAA,CACG,QAAQ,OAAO,KAChB,qBAAC,QAAD,EAAA,UAAA,CACE,oBAAC,SAAD;GAAS,SAAQ;GAAqB,MAAK;GACzC,UAAA,oBAAC,aAAD;IACE,oBAAiB;IACjB,WAAW,GAAG,KAAK,yDAAyD;IAC5E,cAAY,QAAQ,MAAM,QAAQ,UAAU,IAAI,UAAU;IAEzD,UAAA;GACU,CAAA;EACN,CAAA,GAET,qBAAC,aAAD;GACE,OAAM;GACN,kBAAkB;IAGhB,4BAA4B;KAC1B,MAAM,MAAM,OAAO,SAAS,cAAc,OAAO,UAAU,SAAS,cAA2B,mBAAmB,IAAI,OAAO,KAAK,EAAE,GAAG;KACvI,IAAI,CAAC,KAAK;KAEV,CADa,IAAI,cAA2B,oBAC3C,KAAQ,IAAI,cAA2B,wCAAwC,EAAA,EAAI,MAAM,EAAE,eAAe,KAAK,CAAC;IACnH,CAAC;IACD,OAAO;GACT;GACA,WAAU;GAbZ,UAAA,CAeE,oBAAC,OAAD;IAAK,WAAU;IAAuD,UAAA;GAAY,CAAA,GAElF,oBAAC,MAAD;IAAI,MAAK;IAAO,WAAU;IACvB,UAAA,MAAM,KAAK,GAAG,MAAM;KACnB,MAAM,YAAY,MAAM;KACxB,MAAM,SAAS,KAAK,MAAM,SAAS,KAAK,MAAM;KAC9C,MAAM,SAAS,GACb,yGACA,YACI,6EACA,GAAG,wGAAwG,SAAS,gBAAgB,eAAe,CACzJ;KACA,MAAM,QAAQ,EAAE,aAAa,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG;KACrD,OACE,oBAAC,MAAD;MAAe,MAAK;MACjB,UAAA,EAAE,MAAM,CAAC,YACR,oBAAC,KAAc,UAAf;OACE,cAAA;OACA,QAAQ,oBAAC,MAAD,EAAM,IAAI,EAAE,GAAK,CAAA;OACzB,eAAe,EAAE,WAAW;OAC5B,WAAW;OACJ;OAEP,UAAA,oBAAC,SAAD;QAAY;QAAG,OAAO;OAAI,CAAA;MACJ,CAAA,IAExB,oBAAC,KAAc,MAAf;OACE,eAAgB,YAAY,KAAA,IAAY,EAAE,WAAW;OACrD,gBAAc,YAAY,SAAS,KAAA;OACnC,WAAW;OACJ;OAEP,UAAA,oBAAC,SAAD;QAAY;QAAG,OAAO;QAAG,SAAS;OAAY,CAAA;MAC5B,CAAA;KAEpB,GArBK,EAAE,EAqBP;IAER,CAAC;GACC,CAAA,CACO;EACT,CAAA,CAAA,EAAA,CAAA,CACJ;;AAER;AAEA,SAAS,QAAQ,EAAE,GAAG,OAAO,WAA+D;CAC1F,OACE,qBAAA,UAAA,EAAA,UAAA;EACG,QAAQ,IAAI,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;EAAoF,CAAA,IAAI;EAChI,EAAE,OAAO,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;GAA6D,UAAA,EAAE;EAAW,CAAA,IAAI;EACnH,EAAE,MAAM,SAAS,KAChB,oBAAC,SAAD;GAAS,SAAS,EAAE;GAAO,MAAK;GAC9B,UAAA,oBAAC,QAAD;IAAM,WAAU;IAA2B,UAAA,EAAE;GAAY,CAAA;EAClD,CAAA,IAET,oBAAC,QAAD;GAAM,WAAU;GAA2B,UAAA,EAAE;EAAY,CAAA;EAE1D,EAAE,SAAS,oBAAC,QAAD;GAAM,MAAK;GAAM,cAAW;GAAa,WAAU;EAAgD,CAAA,IAAI;EAClH,UAAU,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;EAAgD,CAAA,IAAI;CAC3F,EAAA,CAAA;AAEN;AAIA,SAAgB,kBAAkB,EAAE,OAAO,OAAO,MAAM,OAAO,OAAO,QAA8G;CAClL,MAAM,IAAI,QAAQ;CAUlB,OACE,oBAAC,QAAD;EAAM,WAAW,GAAG,4BAA4B,EAAE,IAAI;EACpD,UAAA,qBAAC,QAAD;GAAM,WAAW,GAAG,MAAM,EAAE,MAAM,uBAAuB;IAV3D,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,MAAM;IACN,SAAS;IACT,UAAU;GAIiD,EAAO,MAAM;GAAtE,UAAA;IACG,OAAO,oBAAC,QAAD;KAAM,mBAAA;KAAgB,WAAW,GAAG,8BAA8B,EAAE,IAAI;KAAG,eAAA;KAAa,UAAA;IAAW,CAAA,IAAI;IAC/G,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA;IAClB,QACC,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CAA+B,KAAE,KAAY;IAC7C,CAAA,GAAA,oBAAC,iBAAD;KAAiB,WAAW,GAAG,kCAAkC,EAAE,GAAG;KAAG,QAAQ;KAAM,eAAA;IAAa,CAAA,CACpG,EAAA,CAAA,IACA;GACA;;CACF,CAAA;AAEV"}
@@ -0,0 +1,16 @@
1
+ /** D63: AI agents in History (change bars, outlines, tags): neutral violet-grey, never a person's slot. */
2
+ export declare const AGENT_PRESENCE = "var(--kit-presence-agent)";
3
+ /**
4
+ * Assign slots to a workspace's members in join order (stable: the same roster always gives the same colours).
5
+ * Each member is then found by id, full name or email.
6
+ */
7
+ export declare function registerPresenceRoster(members: {
8
+ id: string;
9
+ name: string;
10
+ email?: string;
11
+ joinedAt?: string;
12
+ }[]): void;
13
+ /** Accepts a person id ("u_priya", "priya"), a full name ("Priya Nair") or an email; returns the slot 1…8. */
14
+ export declare function presenceSlot(person: string): number;
15
+ /** `var(--kit-presence-n)` for that person: use as a CSS colour (border, ring, background with presence-on text). */
16
+ export declare function presenceColor(person: string): string;