@starci/grammar 0.4.12 → 0.5.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 (361) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +269 -47
  3. package/dist/.build-stamp.json +9 -0
  4. package/dist/common/components-forms.css +435 -0
  5. package/dist/common/components-navigation.css +1163 -0
  6. package/dist/common/components-overlays.css +939 -0
  7. package/dist/common/registry.d.ts +60 -1
  8. package/dist/common/registry.d.ts.map +1 -1
  9. package/dist/common/registry.js +6 -0
  10. package/dist/common/registry.js.map +1 -1
  11. package/dist/common/renderers-forms.d.ts +44 -0
  12. package/dist/common/renderers-forms.d.ts.map +1 -0
  13. package/dist/common/renderers-forms.js +49 -0
  14. package/dist/common/renderers-forms.js.map +1 -0
  15. package/dist/common/renderers-navigation.d.ts +42 -0
  16. package/dist/common/renderers-navigation.d.ts.map +1 -0
  17. package/dist/common/renderers-navigation.js +46 -0
  18. package/dist/common/renderers-navigation.js.map +1 -0
  19. package/dist/common/renderers-overlays.d.ts +32 -0
  20. package/dist/common/renderers-overlays.d.ts.map +1 -0
  21. package/dist/common/renderers-overlays.js +36 -0
  22. package/dist/common/renderers-overlays.js.map +1 -0
  23. package/dist/common/renderers.d.ts +5 -2
  24. package/dist/common/renderers.d.ts.map +1 -1
  25. package/dist/common/renderers.js +3 -0
  26. package/dist/common/renderers.js.map +1 -1
  27. package/dist/common/styles.css +282 -1
  28. package/dist/core/LeadingNumber.d.ts.map +1 -1
  29. package/dist/core/LeadingNumber.js +1 -1
  30. package/dist/core/LeadingNumber.js.map +1 -1
  31. package/dist/core/OtpInput.d.ts +17 -1
  32. package/dist/core/OtpInput.d.ts.map +1 -1
  33. package/dist/core/OtpInput.js +17 -5
  34. package/dist/core/OtpInput.js.map +1 -1
  35. package/dist/core/StateMark.d.ts +6 -1
  36. package/dist/core/StateMark.d.ts.map +1 -1
  37. package/dist/core/StateMark.js +7 -2
  38. package/dist/core/StateMark.js.map +1 -1
  39. package/dist/core/branch/Accordion/index.d.ts +28 -0
  40. package/dist/core/branch/Accordion/index.d.ts.map +1 -0
  41. package/dist/core/branch/Accordion/index.js +30 -0
  42. package/dist/core/branch/Accordion/index.js.map +1 -0
  43. package/dist/core/branch/AlertDialog/index.d.ts +40 -0
  44. package/dist/core/branch/AlertDialog/index.d.ts.map +1 -0
  45. package/dist/core/branch/AlertDialog/index.js +59 -0
  46. package/dist/core/branch/AlertDialog/index.js.map +1 -0
  47. package/dist/core/branch/Calendar/index.d.ts +26 -0
  48. package/dist/core/branch/Calendar/index.d.ts.map +1 -0
  49. package/dist/core/branch/Calendar/index.js +17 -0
  50. package/dist/core/branch/Calendar/index.js.map +1 -0
  51. package/dist/core/branch/ComboBox/index.d.ts +32 -0
  52. package/dist/core/branch/ComboBox/index.d.ts.map +1 -0
  53. package/dist/core/branch/ComboBox/index.js +28 -0
  54. package/dist/core/branch/ComboBox/index.js.map +1 -0
  55. package/dist/core/branch/DataTable/index.d.ts +52 -0
  56. package/dist/core/branch/DataTable/index.d.ts.map +1 -0
  57. package/dist/core/branch/DataTable/index.js +46 -0
  58. package/dist/core/branch/DataTable/index.js.map +1 -0
  59. package/dist/core/branch/DatePicker/index.d.ts +23 -0
  60. package/dist/core/branch/DatePicker/index.d.ts.map +1 -0
  61. package/dist/core/branch/DatePicker/index.js +29 -0
  62. package/dist/core/branch/DatePicker/index.js.map +1 -0
  63. package/dist/core/branch/DateRangePicker/index.d.ts +21 -0
  64. package/dist/core/branch/DateRangePicker/index.d.ts.map +1 -0
  65. package/dist/core/branch/DateRangePicker/index.js +22 -0
  66. package/dist/core/branch/DateRangePicker/index.js.map +1 -0
  67. package/dist/core/branch/Dialog/index.d.ts +36 -0
  68. package/dist/core/branch/Dialog/index.d.ts.map +1 -0
  69. package/dist/core/branch/Dialog/index.js +20 -0
  70. package/dist/core/branch/Dialog/index.js.map +1 -0
  71. package/dist/core/branch/Disclosure/index.d.ts +22 -0
  72. package/dist/core/branch/Disclosure/index.d.ts.map +1 -0
  73. package/dist/core/branch/Disclosure/index.js +26 -0
  74. package/dist/core/branch/Disclosure/index.js.map +1 -0
  75. package/dist/core/branch/Drawer/index.d.ts +35 -0
  76. package/dist/core/branch/Drawer/index.d.ts.map +1 -0
  77. package/dist/core/branch/Drawer/index.js +20 -0
  78. package/dist/core/branch/Drawer/index.js.map +1 -0
  79. package/dist/core/branch/DropdownMenu/index.d.ts +61 -0
  80. package/dist/core/branch/DropdownMenu/index.d.ts.map +1 -0
  81. package/dist/core/branch/DropdownMenu/index.js +59 -0
  82. package/dist/core/branch/DropdownMenu/index.js.map +1 -0
  83. package/dist/core/branch/ListBox/index.d.ts +30 -0
  84. package/dist/core/branch/ListBox/index.d.ts.map +1 -0
  85. package/dist/core/branch/ListBox/index.js +14 -0
  86. package/dist/core/branch/ListBox/index.js.map +1 -0
  87. package/dist/core/branch/MarkdownArticle/index.d.ts +8 -0
  88. package/dist/core/branch/MarkdownArticle/index.d.ts.map +1 -1
  89. package/dist/core/branch/MarkdownArticle/index.js +7 -2
  90. package/dist/core/branch/MarkdownArticle/index.js.map +1 -1
  91. package/dist/core/branch/Popover/index.d.ts +33 -0
  92. package/dist/core/branch/Popover/index.d.ts.map +1 -0
  93. package/dist/core/branch/Popover/index.js +16 -0
  94. package/dist/core/branch/Popover/index.js.map +1 -0
  95. package/dist/core/branch/Rail/index.d.ts +2 -0
  96. package/dist/core/branch/Rail/index.d.ts.map +1 -1
  97. package/dist/core/branch/Rail/index.js +10 -3
  98. package/dist/core/branch/Rail/index.js.map +1 -1
  99. package/dist/core/branch/Select/index.d.ts +31 -0
  100. package/dist/core/branch/Select/index.d.ts.map +1 -0
  101. package/dist/core/branch/Select/index.js +41 -0
  102. package/dist/core/branch/Select/index.js.map +1 -0
  103. package/dist/core/branch/SurfaceAccordionCard/index.d.ts +6 -0
  104. package/dist/core/branch/SurfaceAccordionCard/index.d.ts.map +1 -1
  105. package/dist/core/branch/SurfaceAccordionCard/index.js +6 -6
  106. package/dist/core/branch/SurfaceAccordionCard/index.js.map +1 -1
  107. package/dist/core/branch/SurfaceCard/classNames.d.ts +7 -2
  108. package/dist/core/branch/SurfaceCard/classNames.d.ts.map +1 -1
  109. package/dist/core/branch/SurfaceCard/classNames.js +7 -2
  110. package/dist/core/branch/SurfaceCard/classNames.js.map +1 -1
  111. package/dist/core/branch/SurfaceCard/index.d.ts +6 -0
  112. package/dist/core/branch/SurfaceCard/index.d.ts.map +1 -1
  113. package/dist/core/branch/SurfaceCard/index.js +4 -4
  114. package/dist/core/branch/SurfaceCard/index.js.map +1 -1
  115. package/dist/core/branch/SurfaceListCard/index.d.ts +17 -1
  116. package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -1
  117. package/dist/core/branch/SurfaceListCard/index.js +10 -4
  118. package/dist/core/branch/SurfaceListCard/index.js.map +1 -1
  119. package/dist/core/branch/Tabs/index.js +1 -1
  120. package/dist/core/branch/Tabs/index.js.map +1 -1
  121. package/dist/core/branch/Toast/index.d.ts +75 -0
  122. package/dist/core/branch/Toast/index.d.ts.map +1 -0
  123. package/dist/core/branch/Toast/index.js +145 -0
  124. package/dist/core/branch/Toast/index.js.map +1 -0
  125. package/dist/core/composite/Alert/index.d.ts +40 -0
  126. package/dist/core/composite/Alert/index.d.ts.map +1 -0
  127. package/dist/core/composite/Alert/index.js +27 -0
  128. package/dist/core/composite/Alert/index.js.map +1 -0
  129. package/dist/core/composite/AvatarGroup/index.d.ts +23 -0
  130. package/dist/core/composite/AvatarGroup/index.d.ts.map +1 -0
  131. package/dist/core/composite/AvatarGroup/index.js +15 -0
  132. package/dist/core/composite/AvatarGroup/index.js.map +1 -0
  133. package/dist/core/composite/Breadcrumbs/index.d.ts +27 -0
  134. package/dist/core/composite/Breadcrumbs/index.d.ts.map +1 -0
  135. package/dist/core/composite/Breadcrumbs/index.js +16 -0
  136. package/dist/core/composite/Breadcrumbs/index.js.map +1 -0
  137. package/dist/core/composite/ButtonGroup/index.d.ts +14 -0
  138. package/dist/core/composite/ButtonGroup/index.d.ts.map +1 -0
  139. package/dist/core/composite/ButtonGroup/index.js +17 -0
  140. package/dist/core/composite/ButtonGroup/index.js.map +1 -0
  141. package/dist/core/composite/CheckboxGroup/index.d.ts +23 -0
  142. package/dist/core/composite/CheckboxGroup/index.d.ts.map +1 -0
  143. package/dist/core/composite/CheckboxGroup/index.js +21 -0
  144. package/dist/core/composite/CheckboxGroup/index.js.map +1 -0
  145. package/dist/core/composite/DescriptionList/index.d.ts +23 -0
  146. package/dist/core/composite/DescriptionList/index.d.ts.map +1 -0
  147. package/dist/core/composite/DescriptionList/index.js +8 -0
  148. package/dist/core/composite/DescriptionList/index.js.map +1 -0
  149. package/dist/core/composite/Fieldset/index.d.ts +17 -0
  150. package/dist/core/composite/Fieldset/index.d.ts.map +1 -0
  151. package/dist/core/composite/Fieldset/index.js +14 -0
  152. package/dist/core/composite/Fieldset/index.js.map +1 -0
  153. package/dist/core/composite/Form/index.d.ts +32 -0
  154. package/dist/core/composite/Form/index.d.ts.map +1 -0
  155. package/dist/core/composite/Form/index.js +25 -0
  156. package/dist/core/composite/Form/index.js.map +1 -0
  157. package/dist/core/composite/HorizontalScrollRegion/index.d.ts +5 -0
  158. package/dist/core/composite/HorizontalScrollRegion/index.d.ts.map +1 -1
  159. package/dist/core/composite/HorizontalScrollRegion/index.js +3 -2
  160. package/dist/core/composite/HorizontalScrollRegion/index.js.map +1 -1
  161. package/dist/core/composite/Pagination/index.d.ts +31 -0
  162. package/dist/core/composite/Pagination/index.d.ts.map +1 -0
  163. package/dist/core/composite/Pagination/index.js +42 -0
  164. package/dist/core/composite/Pagination/index.js.map +1 -0
  165. package/dist/core/composite/RadioGroup/index.d.ts +15 -0
  166. package/dist/core/composite/RadioGroup/index.d.ts.map +1 -0
  167. package/dist/core/composite/RadioGroup/index.js +20 -0
  168. package/dist/core/composite/RadioGroup/index.js.map +1 -0
  169. package/dist/core/composite/SegmentedControl/index.d.ts +24 -0
  170. package/dist/core/composite/SegmentedControl/index.d.ts.map +1 -0
  171. package/dist/core/composite/SegmentedControl/index.js +33 -0
  172. package/dist/core/composite/SegmentedControl/index.js.map +1 -0
  173. package/dist/core/composite/StaticStateRow/index.d.ts +6 -1
  174. package/dist/core/composite/StaticStateRow/index.d.ts.map +1 -1
  175. package/dist/core/composite/StaticStateRow/index.js +6 -1
  176. package/dist/core/composite/StaticStateRow/index.js.map +1 -1
  177. package/dist/core/composite/Stepper/index.d.ts +34 -0
  178. package/dist/core/composite/Stepper/index.d.ts.map +1 -0
  179. package/dist/core/composite/Stepper/index.js +27 -0
  180. package/dist/core/composite/Stepper/index.js.map +1 -0
  181. package/dist/core/composite/TagGroup/index.d.ts +41 -0
  182. package/dist/core/composite/TagGroup/index.d.ts.map +1 -0
  183. package/dist/core/composite/TagGroup/index.js +17 -0
  184. package/dist/core/composite/TagGroup/index.js.map +1 -0
  185. package/dist/core/composite/Timeline/index.d.ts +28 -0
  186. package/dist/core/composite/Timeline/index.d.ts.map +1 -0
  187. package/dist/core/composite/Timeline/index.js +14 -0
  188. package/dist/core/composite/Timeline/index.js.map +1 -0
  189. package/dist/core/composite/VerticalScrollRegion/index.d.ts +31 -1
  190. package/dist/core/composite/VerticalScrollRegion/index.d.ts.map +1 -1
  191. package/dist/core/composite/VerticalScrollRegion/index.js +16 -3
  192. package/dist/core/composite/VerticalScrollRegion/index.js.map +1 -1
  193. package/dist/core/composition/BottomNav/index.d.ts +33 -0
  194. package/dist/core/composition/BottomNav/index.d.ts.map +1 -0
  195. package/dist/core/composition/BottomNav/index.js +22 -0
  196. package/dist/core/composition/BottomNav/index.js.map +1 -0
  197. package/dist/core/composition/Footer/index.d.ts +35 -0
  198. package/dist/core/composition/Footer/index.d.ts.map +1 -0
  199. package/dist/core/composition/Footer/index.js +19 -0
  200. package/dist/core/composition/Footer/index.js.map +1 -0
  201. package/dist/core/composition/NavigationFeatureNav/index.d.ts +3 -0
  202. package/dist/core/composition/NavigationFeatureNav/index.d.ts.map +1 -1
  203. package/dist/core/composition/NavigationFeatureNav/index.js +3 -0
  204. package/dist/core/composition/NavigationFeatureNav/index.js.map +1 -1
  205. package/dist/core/composition/TopBar/index.d.ts +34 -0
  206. package/dist/core/composition/TopBar/index.d.ts.map +1 -0
  207. package/dist/core/composition/TopBar/index.js +15 -0
  208. package/dist/core/composition/TopBar/index.js.map +1 -0
  209. package/dist/core/composition/WorkspaceShell/index.d.ts +18 -1
  210. package/dist/core/composition/WorkspaceShell/index.d.ts.map +1 -1
  211. package/dist/core/composition/WorkspaceShell/index.js +10 -1
  212. package/dist/core/composition/WorkspaceShell/index.js.map +1 -1
  213. package/dist/core/dna.d.ts +26 -8
  214. package/dist/core/dna.d.ts.map +1 -1
  215. package/dist/core/dna.js +22 -4
  216. package/dist/core/dna.js.map +1 -1
  217. package/dist/core/index.d.ts +60 -1
  218. package/dist/core/index.d.ts.map +1 -1
  219. package/dist/core/navigationClassNames.d.ts +3 -0
  220. package/dist/core/navigationClassNames.d.ts.map +1 -0
  221. package/dist/core/navigationClassNames.js +4 -0
  222. package/dist/core/navigationClassNames.js.map +1 -0
  223. package/dist/core/navigationKeys.d.ts +11 -0
  224. package/dist/core/navigationKeys.d.ts.map +1 -0
  225. package/dist/core/navigationKeys.js +44 -0
  226. package/dist/core/navigationKeys.js.map +1 -0
  227. package/dist/core/overlayScope.d.ts +42 -0
  228. package/dist/core/overlayScope.d.ts.map +1 -0
  229. package/dist/core/overlayScope.js +54 -0
  230. package/dist/core/overlayScope.js.map +1 -0
  231. package/dist/core/primitive/Avatar/index.d.ts +34 -0
  232. package/dist/core/primitive/Avatar/index.d.ts.map +1 -0
  233. package/dist/core/primitive/Avatar/index.js +24 -0
  234. package/dist/core/primitive/Avatar/index.js.map +1 -0
  235. package/dist/core/primitive/Badge/index.d.ts +6 -1
  236. package/dist/core/primitive/Badge/index.d.ts.map +1 -1
  237. package/dist/core/primitive/Badge/index.js +7 -2
  238. package/dist/core/primitive/Badge/index.js.map +1 -1
  239. package/dist/core/primitive/Checkbox/index.d.ts +25 -0
  240. package/dist/core/primitive/Checkbox/index.d.ts.map +1 -0
  241. package/dist/core/primitive/Checkbox/index.js +17 -0
  242. package/dist/core/primitive/Checkbox/index.js.map +1 -0
  243. package/dist/core/primitive/CloseButton/index.d.ts +17 -0
  244. package/dist/core/primitive/CloseButton/index.d.ts.map +1 -0
  245. package/dist/core/primitive/CloseButton/index.js +11 -0
  246. package/dist/core/primitive/CloseButton/index.js.map +1 -0
  247. package/dist/core/primitive/DateField/index.d.ts +33 -0
  248. package/dist/core/primitive/DateField/index.d.ts.map +1 -0
  249. package/dist/core/primitive/DateField/index.js +33 -0
  250. package/dist/core/primitive/DateField/index.js.map +1 -0
  251. package/dist/core/primitive/Field/index.d.ts +127 -0
  252. package/dist/core/primitive/Field/index.d.ts.map +1 -0
  253. package/dist/core/primitive/Field/index.js +100 -0
  254. package/dist/core/primitive/Field/index.js.map +1 -0
  255. package/dist/core/primitive/FileDropzone/index.d.ts +25 -0
  256. package/dist/core/primitive/FileDropzone/index.d.ts.map +1 -0
  257. package/dist/core/primitive/FileDropzone/index.js +35 -0
  258. package/dist/core/primitive/FileDropzone/index.js.map +1 -0
  259. package/dist/core/primitive/GrammarRoot/index.d.ts +6 -1
  260. package/dist/core/primitive/GrammarRoot/index.d.ts.map +1 -1
  261. package/dist/core/primitive/GrammarRoot/index.js +7 -2
  262. package/dist/core/primitive/GrammarRoot/index.js.map +1 -1
  263. package/dist/core/primitive/Icon/index.d.ts +7 -1
  264. package/dist/core/primitive/Icon/index.d.ts.map +1 -1
  265. package/dist/core/primitive/Icon/index.js +7 -2
  266. package/dist/core/primitive/Icon/index.js.map +1 -1
  267. package/dist/core/primitive/IconButton/index.d.ts +1 -1
  268. package/dist/core/primitive/IconButton/index.d.ts.map +1 -1
  269. package/dist/core/primitive/IconButton/index.js +2 -2
  270. package/dist/core/primitive/IconButton/index.js.map +1 -1
  271. package/dist/core/primitive/Image/index.d.ts +30 -0
  272. package/dist/core/primitive/Image/index.d.ts.map +1 -0
  273. package/dist/core/primitive/Image/index.js +29 -0
  274. package/dist/core/primitive/Image/index.js.map +1 -0
  275. package/dist/core/primitive/IncludedMark/index.d.ts +2 -1
  276. package/dist/core/primitive/IncludedMark/index.d.ts.map +1 -1
  277. package/dist/core/primitive/IncludedMark/index.js +3 -2
  278. package/dist/core/primitive/IncludedMark/index.js.map +1 -1
  279. package/dist/core/primitive/Kbd/index.d.ts +13 -0
  280. package/dist/core/primitive/Kbd/index.d.ts.map +1 -0
  281. package/dist/core/primitive/Kbd/index.js +14 -0
  282. package/dist/core/primitive/Kbd/index.js.map +1 -0
  283. package/dist/core/primitive/Label/index.d.ts +18 -4
  284. package/dist/core/primitive/Label/index.d.ts.map +1 -1
  285. package/dist/core/primitive/Label/index.js +4 -2
  286. package/dist/core/primitive/Label/index.js.map +1 -1
  287. package/dist/core/primitive/Link/index.d.ts +30 -0
  288. package/dist/core/primitive/Link/index.d.ts.map +1 -0
  289. package/dist/core/primitive/Link/index.js +17 -0
  290. package/dist/core/primitive/Link/index.js.map +1 -0
  291. package/dist/core/primitive/Meter/index.d.ts +16 -0
  292. package/dist/core/primitive/Meter/index.d.ts.map +1 -0
  293. package/dist/core/primitive/Meter/index.js +20 -0
  294. package/dist/core/primitive/Meter/index.js.map +1 -0
  295. package/dist/core/primitive/NumberField/index.d.ts +21 -0
  296. package/dist/core/primitive/NumberField/index.d.ts.map +1 -0
  297. package/dist/core/primitive/NumberField/index.js +15 -0
  298. package/dist/core/primitive/NumberField/index.js.map +1 -0
  299. package/dist/core/primitive/ProgressCircle/index.d.ts +13 -0
  300. package/dist/core/primitive/ProgressCircle/index.d.ts.map +1 -0
  301. package/dist/core/primitive/ProgressCircle/index.js +5 -0
  302. package/dist/core/primitive/ProgressCircle/index.js.map +1 -0
  303. package/dist/core/primitive/RankArtwork/index.d.ts +2 -1
  304. package/dist/core/primitive/RankArtwork/index.d.ts.map +1 -1
  305. package/dist/core/primitive/RankArtwork/index.js +3 -2
  306. package/dist/core/primitive/RankArtwork/index.js.map +1 -1
  307. package/dist/core/primitive/Rating/index.d.ts +26 -0
  308. package/dist/core/primitive/Rating/index.d.ts.map +1 -0
  309. package/dist/core/primitive/Rating/index.js +37 -0
  310. package/dist/core/primitive/Rating/index.js.map +1 -0
  311. package/dist/core/primitive/SearchField/index.d.ts +22 -0
  312. package/dist/core/primitive/SearchField/index.d.ts.map +1 -0
  313. package/dist/core/primitive/SearchField/index.js +15 -0
  314. package/dist/core/primitive/SearchField/index.js.map +1 -0
  315. package/dist/core/primitive/SectionHeader/index.d.ts +9 -2
  316. package/dist/core/primitive/SectionHeader/index.d.ts.map +1 -1
  317. package/dist/core/primitive/SectionHeader/index.js +8 -2
  318. package/dist/core/primitive/SectionHeader/index.js.map +1 -1
  319. package/dist/core/primitive/Skeleton/index.d.ts +21 -0
  320. package/dist/core/primitive/Skeleton/index.d.ts.map +1 -0
  321. package/dist/core/primitive/Skeleton/index.js +18 -0
  322. package/dist/core/primitive/Skeleton/index.js.map +1 -0
  323. package/dist/core/primitive/Slider/index.d.ts +26 -0
  324. package/dist/core/primitive/Slider/index.d.ts.map +1 -0
  325. package/dist/core/primitive/Slider/index.js +37 -0
  326. package/dist/core/primitive/Slider/index.js.map +1 -0
  327. package/dist/core/primitive/Spinner/index.d.ts +18 -0
  328. package/dist/core/primitive/Spinner/index.d.ts.map +1 -0
  329. package/dist/core/primitive/Spinner/index.js +11 -0
  330. package/dist/core/primitive/Spinner/index.js.map +1 -0
  331. package/dist/core/primitive/Switch/index.d.ts +13 -0
  332. package/dist/core/primitive/Switch/index.d.ts.map +1 -0
  333. package/dist/core/primitive/Switch/index.js +15 -0
  334. package/dist/core/primitive/Switch/index.js.map +1 -0
  335. package/dist/core/primitive/Textarea/index.d.ts +16 -0
  336. package/dist/core/primitive/Textarea/index.d.ts.map +1 -0
  337. package/dist/core/primitive/Textarea/index.js +20 -0
  338. package/dist/core/primitive/Textarea/index.js.map +1 -0
  339. package/dist/core/primitive/TimeField/index.d.ts +15 -0
  340. package/dist/core/primitive/TimeField/index.d.ts.map +1 -0
  341. package/dist/core/primitive/TimeField/index.js +13 -0
  342. package/dist/core/primitive/TimeField/index.js.map +1 -0
  343. package/dist/core/styles.css +32 -6
  344. package/dist/heritage/styles.css +21 -6
  345. package/dist/offset-pop/components-forms.css +405 -0
  346. package/dist/offset-pop/components-navigation.css +394 -0
  347. package/dist/offset-pop/components-overlays.css +253 -0
  348. package/dist/offset-pop/conformance.d.ts +64 -0
  349. package/dist/offset-pop/conformance.d.ts.map +1 -0
  350. package/dist/offset-pop/conformance.js +63 -0
  351. package/dist/offset-pop/conformance.js.map +1 -0
  352. package/dist/offset-pop/dna.d.ts +282 -0
  353. package/dist/offset-pop/dna.d.ts.map +1 -0
  354. package/dist/offset-pop/dna.js +276 -0
  355. package/dist/offset-pop/dna.js.map +1 -0
  356. package/dist/offset-pop/index.d.ts +4 -8
  357. package/dist/offset-pop/index.d.ts.map +1 -1
  358. package/dist/offset-pop/index.js +7 -18
  359. package/dist/offset-pop/index.js.map +1 -1
  360. package/dist/offset-pop/styles.css +203 -62
  361. package/package.json +33 -9
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Disclosure as HeroDisclosure } from "@heroui/react";
4
+ import { useState } from "react";
5
+ import { navigationClassName } from "../../navigationClassNames.js";
6
+ /*
7
+ * Consumer hooks: `starci-core-disclosure-panel`, `starci-core-disclosure-body` name HeroUI parts
8
+ * whose vendor paint Common leaves as it is. No shipped sheet paints them; the Grammar name lets a
9
+ * consumer or family select those parts without reaching for vendor class names.
10
+ */
11
+ /**
12
+ * One show/hide section (the generic, unframed disclosure; `SurfaceAccordionCard` is the framed
13
+ * card form). The trigger is a real button inside a heading with `aria-expanded`/`aria-controls`;
14
+ * `data-grammar-disclosure-state` mirrors the open state for the stylesheet.
15
+ * Contract: root STATE-7 (controlled expansion), trigger FOCUS-1, indicator MOTION-2.
16
+ */
17
+ export const Disclosure = ({ title, children, isExpanded, defaultExpanded = false, onExpandedChange, isDisabled = false, headingLevel = 3, className, }) => {
18
+ const [uncontrolled, setUncontrolled] = useState(defaultExpanded);
19
+ const expanded = isExpanded ?? uncontrolled;
20
+ return (_jsxs(HeroDisclosure, { className: navigationClassName("starci-core-disclosure", className), "data-component": "Disclosure", "data-tier": "branch", "data-contract": "STATE-7", "data-grammar-disclosure-state": expanded ? "open" : "closed", isDisabled: isDisabled, isExpanded: expanded, onExpandedChange: (next) => {
21
+ if (isExpanded === undefined)
22
+ setUncontrolled(next);
23
+ onExpandedChange?.(next);
24
+ }, children: [_jsx(HeroDisclosure.Heading, { className: "starci-core-disclosure-heading", level: headingLevel, children: _jsxs(HeroDisclosure.Trigger, { className: "starci-core-disclosure-trigger", "data-contract": "FOCUS-1", "data-grammar-disclosure-trigger": "true", children: [_jsx("span", { className: "starci-core-disclosure-title", children: title }), _jsx(HeroDisclosure.Indicator, { className: "starci-core-disclosure-indicator", "data-contract": "MOTION-2" })] }) }), _jsx(HeroDisclosure.Content, { className: "starci-core-disclosure-panel", "data-grammar-disclosure-panel": "true", children: _jsx(HeroDisclosure.Body, { className: "starci-core-disclosure-body", children: children }) })] }));
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Disclosure/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAgBnE;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,gBAAgB,EAChB,UAAU,GAAG,KAAK,EAClB,YAAY,GAAG,CAAC,EAChB,SAAS,GACK,EAAE,EAAE;IAClB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,UAAU,IAAI,YAAY,CAAA;IAC3C,OAAO,CACH,MAAC,cAAc,IACX,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,EAAE,SAAS,CAAC,oBACpD,YAAY,eACjB,QAAQ,mBACJ,SAAS,mCACQ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAC3D,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,QAAQ,EACpB,gBAAgB,EAAE,CAAC,IAAa,EAAE,EAAE;YAChC,IAAI,UAAU,KAAK,SAAS;gBAAE,eAAe,CAAC,IAAI,CAAC,CAAA;YACnD,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC,aAED,KAAC,cAAc,CAAC,OAAO,IAAC,SAAS,EAAC,gCAAgC,EAAC,KAAK,EAAE,YAAY,YAClF,MAAC,cAAc,CAAC,OAAO,IAAC,SAAS,EAAC,gCAAgC,mBAAe,SAAS,qCAAiC,MAAM,aAC7H,eAAM,SAAS,EAAC,8BAA8B,YAAE,KAAK,GAAQ,EAC7D,KAAC,cAAc,CAAC,SAAS,IAAC,SAAS,EAAC,kCAAkC,mBAAe,UAAU,GAAG,IAC7E,GACJ,EACzB,KAAC,cAAc,CAAC,OAAO,IAAC,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,YACjG,KAAC,cAAc,CAAC,IAAI,IAAC,SAAS,EAAC,6BAA6B,YAAE,QAAQ,GAAuB,GACxE,IACZ,CACpB,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { type ReactNode } from "react";
2
+ import { type OverlayOpenState } from "../../overlayScope.js";
3
+ import type { OverlayFooter } from "../Dialog/index.js";
4
+ /** Edge the sheet slides from. `bottom` is the mobile bottom sheet. */
5
+ export type DrawerPlacement = "left" | "right" | "top" | "bottom";
6
+ export type DrawerProps = OverlayOpenState & {
7
+ /** Visible heading; the drawer dialog's accessible name. */
8
+ readonly title: string;
9
+ readonly description?: ReactNode;
10
+ readonly children?: ReactNode;
11
+ readonly footer?: OverlayFooter;
12
+ /** A Common `Button`/`IconButton` (any React Aria pressable) that opens the drawer. */
13
+ readonly trigger?: ReactNode;
14
+ readonly closeLabel?: string;
15
+ readonly placement?: DrawerPlacement;
16
+ /**
17
+ * Draw the grab handle. Default: shown for `bottom` sheets only. The handle is decorative
18
+ * (`aria-hidden`); dragging it past the threshold dismisses, the close button and Escape remain the
19
+ * accessible ways out.
20
+ */
21
+ readonly showHandle?: boolean;
22
+ /** Close on an outside press (and allow drag-to-dismiss). Default `true`. */
23
+ readonly isDismissable?: boolean;
24
+ readonly isKeyboardDismissDisabled?: boolean;
25
+ };
26
+ /**
27
+ * BRANCH - `Drawer`: a side sheet or mobile bottom sheet holding a secondary task.
28
+ *
29
+ * Same modal rules as `Dialog` (focus trap and return, Escape/outside dismiss, scroll lock, inert
30
+ * page, scoped portal). Placement is echoed on `data-placement` so anatomy and families can shape the
31
+ * sheet edge; the slide motion is removed under reduced motion.
32
+ * Contract: surface FOCUS-3 LAYOUT-4 CORE-BOUNDARY-4 (as `Dialog`); sliding content MOTION-2.
33
+ */
34
+ export declare const Drawer: ({ title, description, children, footer, trigger, closeLabel, placement, showHandle, isDismissable, isKeyboardDismissDisabled, ...openState }: DrawerProps) => import("react").JSX.Element;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Drawer/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEjE,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG;IACzC,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAA;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAC/C,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,8IAYpB,WAAW,gCAuDb,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Drawer as HeroDrawer } from "@heroui/react";
3
+ import { useId } from "react";
4
+ import { overlayOpenProps, useOverlayContainer } from "../../overlayScope.js";
5
+ import { CloseButton } from "../../primitive/CloseButton/index.js";
6
+ /**
7
+ * BRANCH - `Drawer`: a side sheet or mobile bottom sheet holding a secondary task.
8
+ *
9
+ * Same modal rules as `Dialog` (focus trap and return, Escape/outside dismiss, scroll lock, inert
10
+ * page, scoped portal). Placement is echoed on `data-placement` so anatomy and families can shape the
11
+ * sheet edge; the slide motion is removed under reduced motion.
12
+ * Contract: surface FOCUS-3 LAYOUT-4 CORE-BOUNDARY-4 (as `Dialog`); sliding content MOTION-2.
13
+ */
14
+ export const Drawer = ({ title, description, children, footer, trigger, closeLabel, placement = "right", showHandle, isDismissable = true, isKeyboardDismissDisabled = false, ...openState }) => {
15
+ const { anchor, container } = useOverlayContainer("Drawer");
16
+ const descriptionId = useId();
17
+ const hasHandle = showHandle ?? placement === "bottom";
18
+ return (_jsxs(HeroDrawer, { ...overlayOpenProps(openState), children: [trigger, anchor, container === null ? null : (_jsx(HeroDrawer.Backdrop, { UNSTABLE_portalContainer: container, isDismissable: isDismissable, isKeyboardDismissDisabled: isKeyboardDismissDisabled, "data-grammar-overlay-backdrop": "Drawer", className: "starci-core-overlay-backdrop starci-core-drawer-backdrop", children: _jsx(HeroDrawer.Content, { placement: placement, "data-contract": "MOTION-2", className: "starci-core-drawer-content", children: _jsx(HeroDrawer.Dialog, { "data-tier": "branch", "data-component": "Drawer", "data-placement": placement, "data-grammar-overlay-surface": "drawer", "data-contract": "FOCUS-3 LAYOUT-4 CORE-BOUNDARY-4", ...(description === undefined ? {} : { "aria-describedby": descriptionId }), className: "starci-core-drawer", children: ({ close }) => (_jsxs(_Fragment, { children: [hasHandle ? _jsx(HeroDrawer.Handle, { "data-grammar-drawer-handle": "true", className: "starci-core-drawer-handle" }) : null, _jsxs(HeroDrawer.Header, { className: "starci-core-overlay-header", children: [_jsxs("div", { className: "starci-core-overlay-heading-group", children: [_jsx(HeroDrawer.Heading, { className: "starci-core-overlay-title", children: title }), description === undefined ? null : (_jsx("p", { id: descriptionId, className: "starci-core-overlay-description", children: description }))] }), closeLabel === undefined ? null : _jsx(CloseButton, { label: closeLabel, onPress: close })] }), children === undefined ? null : (_jsx(HeroDrawer.Body, { className: "starci-core-overlay-body", children: children })), footer === undefined ? null : (_jsx(HeroDrawer.Footer, { className: "starci-core-overlay-footer", children: typeof footer === "function" ? footer(close) : footer }))] })) }) }) }))] }));
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Drawer/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { ReactNode } from "react";
2
+ import { type OverlayOpenState } from "../../overlayScope.js";
3
+ import { type IconSource } from "../../primitive/Icon/index.js";
4
+ export type DropdownMenuItemTone = "neutral" | "negative";
5
+ /** One command, destination or (inside a selectable section) checkable choice. */
6
+ export type DropdownMenuItem = {
7
+ readonly kind?: "item";
8
+ readonly id: string;
9
+ readonly label: string;
10
+ readonly description?: string;
11
+ /** Shortcut chord drawn with `Kbd`, e.g. `["command", "K"]`. Display only: the app binds the keys. */
12
+ readonly shortcut?: readonly string[];
13
+ readonly iconSource?: IconSource;
14
+ /** `negative` marks a destructive command. */
15
+ readonly tone?: DropdownMenuItemTone;
16
+ readonly isDisabled?: boolean;
17
+ /** A destination: the item renders a real link. */
18
+ readonly href?: string;
19
+ readonly onAction?: () => void;
20
+ /** Nested entries open as a submenu (ArrowRight / Enter / hover open it, ArrowLeft / Escape close it). */
21
+ readonly submenu?: readonly DropdownMenuEntry[];
22
+ };
23
+ /** Checkable items: `single` draws a dot (radio semantics), `multiple` a check (checkbox semantics). */
24
+ export type DropdownMenuSelection = {
25
+ readonly mode: "single" | "multiple";
26
+ readonly selectedIds: readonly string[];
27
+ readonly onChange: (selectedIds: readonly string[]) => void;
28
+ };
29
+ export type DropdownMenuSection = {
30
+ readonly kind: "section";
31
+ readonly id: string;
32
+ /** Visible group heading; also the group's accessible name. */
33
+ readonly label?: string;
34
+ readonly items: readonly DropdownMenuItem[];
35
+ readonly selection?: DropdownMenuSelection;
36
+ };
37
+ export type DropdownMenuEntry = DropdownMenuItem | DropdownMenuSection;
38
+ export type DropdownMenuPlacement = "bottom start" | "bottom end" | "top start" | "top end";
39
+ export type DropdownMenuProps = OverlayOpenState & {
40
+ /**
41
+ * A Common `Button`/`IconButton` (any React Aria pressable) that opens the menu. It also NAMES the
42
+ * menu (`aria-labelledby`, the WAI-ARIA menu-button pattern), so give an icon trigger its label.
43
+ */
44
+ readonly trigger: ReactNode;
45
+ readonly entries: readonly DropdownMenuEntry[];
46
+ /** Called with the id of any activated item (after the item's own `onAction`). */
47
+ readonly onAction?: (id: string) => void;
48
+ readonly placement?: DropdownMenuPlacement;
49
+ };
50
+ /**
51
+ * BRANCH - `DropdownMenu`: a trigger-owned `role="menu"` of commands, links, checkable choices and
52
+ * submenus.
53
+ *
54
+ * React Aria owns the keyboard model (arrow keys, Home/End, typeahead, Enter/Space, ArrowRight into
55
+ * a submenu, Escape and outside press dismiss, focus returns to the trigger). The menu and every
56
+ * submenu portal into the nearest Grammar root so the family scope still applies.
57
+ * Contract: menu FOCUS-2 FOCUS-5; popover LAYOUT-4 CORE-BOUNDARY-4 MOTION-2; item FOCUS-1 CTA-2 (ring,
58
+ * link vs command); a selectable section CONTROL-STATE-3 (app-owned selectedIds).
59
+ */
60
+ export declare const DropdownMenu: ({ trigger, entries, onAction, placement, ...openState }: DropdownMenuProps) => import("react").JSX.Element;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/DropdownMenu/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAGrE,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,CAAA;AAEzD,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,0GAA0G;IAC1G,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAClD,CAAA;AAED,wGAAwG;AACxG,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;CAC9D,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAEtE,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;AAE3F,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IAC/C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAA;CAC7C,CAAA;AAeD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,yDAM1B,iBAAiB,gCA8HnB,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Description as HeroDescription, Dropdown as HeroDropdown, Header as HeroHeader } from "@heroui/react";
3
+ import { overlayOpenProps, useOverlayContainer } from "../../overlayScope.js";
4
+ import { Icon } from "../../primitive/Icon/index.js";
5
+ import { Kbd } from "../../primitive/Kbd/index.js";
6
+ const isSection = (entry) => entry.kind === "section";
7
+ const collectItems = (entries, into = new Map()) => {
8
+ for (const entry of entries) {
9
+ if (isSection(entry))
10
+ collectItems(entry.items, into);
11
+ else {
12
+ into.set(entry.id, entry);
13
+ if (entry.submenu !== undefined)
14
+ collectItems(entry.submenu, into);
15
+ }
16
+ }
17
+ return into;
18
+ };
19
+ /**
20
+ * BRANCH - `DropdownMenu`: a trigger-owned `role="menu"` of commands, links, checkable choices and
21
+ * submenus.
22
+ *
23
+ * React Aria owns the keyboard model (arrow keys, Home/End, typeahead, Enter/Space, ArrowRight into
24
+ * a submenu, Escape and outside press dismiss, focus returns to the trigger). The menu and every
25
+ * submenu portal into the nearest Grammar root so the family scope still applies.
26
+ * Contract: menu FOCUS-2 FOCUS-5; popover LAYOUT-4 CORE-BOUNDARY-4 MOTION-2; item FOCUS-1 CTA-2 (ring,
27
+ * link vs command); a selectable section CONTROL-STATE-3 (app-owned selectedIds).
28
+ */
29
+ export const DropdownMenu = ({ trigger, entries, onAction, placement = "bottom start", ...openState }) => {
30
+ const { anchor, container } = useOverlayContainer("DropdownMenu");
31
+ const items = collectItems(entries);
32
+ const handleAction = (key) => {
33
+ const id = String(key);
34
+ items.get(id)?.onAction?.();
35
+ onAction?.(id);
36
+ };
37
+ const renderItem = (item, selectionMode) => {
38
+ const tone = item.tone ?? "neutral";
39
+ const content = (_jsxs(_Fragment, { children: [selectionMode === undefined ? null : (_jsx(HeroDropdown.ItemIndicator, { type: selectionMode === "single" ? "dot" : "checkmark", className: "starci-core-menu-indicator" })), item.iconSource === undefined ? null : _jsx(Icon, { source: item.iconSource, usage: "leading" }), _jsxs("span", { className: "starci-core-menu-item-copy", children: [_jsx("span", { className: "starci-core-menu-item-label", children: item.label }), item.description === undefined ? null : (_jsx(HeroDescription, { className: "starci-core-menu-item-description", children: item.description }))] }), item.shortcut === undefined ? null : (_jsx("span", { className: "starci-core-menu-item-shortcut", "data-grammar-menu-shortcut": "true", children: _jsx(Kbd, { keys: item.shortcut }) })), item.submenu === undefined ? null : _jsx(HeroDropdown.SubmenuIndicator, { className: "starci-core-menu-submenu-indicator" })] }));
40
+ const itemElement = (_jsx(HeroDropdown.Item, { id: item.id, textValue: item.label, "aria-label": item.label, variant: tone === "negative" ? "danger" : "default", isDisabled: item.isDisabled ?? false, ...(item.href === undefined ? {} : { href: item.href }), "data-grammar-menu-item": "true", "data-contract": "FOCUS-1 CTA-2", "data-grammar-tone": tone, className: "starci-core-menu-item", children: content }, item.id));
41
+ if (item.submenu === undefined)
42
+ return itemElement;
43
+ return (_jsxs(HeroDropdown.SubmenuTrigger, { children: [itemElement, _jsx(HeroDropdown.Popover, { "data-grammar-overlay-surface": "menu", "data-contract": "LAYOUT-4 CORE-BOUNDARY-4 MOTION-2", className: "starci-core-menu-popover", children: _jsx(HeroDropdown.Menu, { "aria-label": item.label, onAction: handleAction, "data-component": "DropdownMenu", "data-grammar-menu-depth": "submenu", "data-contract": "FOCUS-2 FOCUS-5", className: "starci-core-menu", children: renderEntries(item.submenu) }) })] }, item.id));
44
+ };
45
+ const renderEntries = (list) => list.map((entry) => {
46
+ if (!isSection(entry))
47
+ return renderItem(entry);
48
+ const selection = entry.selection;
49
+ return (_jsxs(HeroDropdown.Section, { id: entry.id, ...(entry.label === undefined ? {} : { "aria-label": entry.label }), ...(selection === undefined ? {} : {
50
+ selectionMode: selection.mode,
51
+ selectedKeys: new Set(selection.selectedIds),
52
+ onSelectionChange: (keys) => {
53
+ selection.onChange(keys === "all" ? entry.items.map((item) => item.id) : Array.from(keys, String));
54
+ },
55
+ }), "data-grammar-menu-section": "true", "data-contract": selection === undefined ? undefined : "CONTROL-STATE-3", className: "starci-core-menu-section", children: [entry.label === undefined ? null : _jsx(HeroHeader, { className: "starci-core-menu-section-label", children: entry.label }), entry.items.map((item) => renderItem(item, selection?.mode))] }, entry.id));
56
+ });
57
+ return (_jsxs(HeroDropdown, { ...overlayOpenProps(openState), children: [trigger, anchor, container === null ? null : (_jsx(HeroDropdown.Popover, { UNSTABLE_portalContainer: container, placement: placement, "data-grammar-overlay-surface": "menu", "data-contract": "LAYOUT-4 CORE-BOUNDARY-4 MOTION-2", className: "starci-core-menu-popover", children: _jsx(HeroDropdown.Menu, { onAction: handleAction, "data-tier": "branch", "data-component": "DropdownMenu", "data-grammar-menu-depth": "root", "data-contract": "FOCUS-2 FOCUS-5", className: "starci-core-menu", children: renderEntries(entries) }) }))] }));
58
+ };
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/DropdownMenu/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AAE9G,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAyB,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAE,IAAI,EAAmB,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAuDlD,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAgC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAA;AAEtG,MAAM,YAAY,GAAG,CAAC,OAAqC,EAAE,OAAO,IAAI,GAAG,EAA4B,EAAE,EAAE;IACvG,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;aAChD,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACzB,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACtE,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,cAAc,EAC1B,GAAG,SAAS,EACI,EAAE,EAAE;IACpB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,YAAY,GAAG,CAAC,GAAoB,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAA;QAC3B,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAE,aAA6C,EAAa,EAAE;QACpG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAA;QACnC,MAAM,OAAO,GAAG,CACZ,8BACK,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,KAAC,YAAY,CAAC,aAAa,IAAC,IAAI,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAC,4BAA4B,GAAG,CAChI,EACA,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAC,SAAS,GAAG,EACzF,gBAAM,SAAS,EAAC,4BAA4B,aACxC,eAAM,SAAS,EAAC,6BAA6B,YAAE,IAAI,CAAC,KAAK,GAAQ,EAChE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACrC,KAAC,eAAe,IAAC,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,WAAW,GAAmB,CACtG,IACE,EACN,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,eAAM,SAAS,EAAC,gCAAgC,gCAA4B,MAAM,YAAC,KAAC,GAAG,IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAI,GAAO,CACzH,EACA,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,YAAY,CAAC,gBAAgB,IAAC,SAAS,EAAC,oCAAoC,GAAG,IACtH,CACN,CAAA;QACD,MAAM,WAAW,GAAG,CAChB,KAAC,YAAY,CAAC,IAAI,IAEd,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,SAAS,EAAE,IAAI,CAAC,KAAK,gBACT,IAAI,CAAC,KAAK,EACtB,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACnD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,KAChC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,4BACjC,MAAM,mBACf,eAAe,uBACV,IAAI,EACvB,SAAS,EAAC,uBAAuB,YAEhC,OAAO,IAZH,IAAI,CAAC,EAAE,CAaI,CACvB,CAAA;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,WAAW,CAAA;QAClD,OAAO,CACH,MAAC,YAAY,CAAC,cAAc,eACvB,WAAW,EAMZ,KAAC,YAAY,CAAC,OAAO,oCACY,MAAM,mBACrB,mCAAmC,EACjD,SAAS,EAAC,0BAA0B,YAEpC,KAAC,YAAY,CAAC,IAAI,kBACF,IAAI,CAAC,KAAK,EACtB,QAAQ,EAAE,YAAY,oBACP,cAAc,6BACL,SAAS,mBACnB,iBAAiB,EAC/B,SAAS,EAAC,kBAAkB,YAE3B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GACZ,GACD,KAtBO,IAAI,CAAC,EAAE,CAuBX,CACjC,CAAA;IACL,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,IAAkC,EAAe,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1F,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QACjC,OAAO,CACH,MAAC,YAAY,CAAC,OAAO,IAEjB,EAAE,EAAE,KAAK,CAAC,EAAE,KACR,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,KAChE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,aAAa,EAAE,SAAS,CAAC,IAAI;gBAC7B,YAAY,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC5C,iBAAiB,EAAE,CAAC,IAAkC,EAAE,EAAE;oBACtD,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;gBACtG,CAAC;aACJ,CAAC,+BACwB,MAAM,mBACjB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,EACtE,SAAS,EAAC,0BAA0B,aAEnC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,KAAK,GAAc,EACpH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAfxD,KAAK,CAAC,EAAE,CAgBM,CAC1B,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,OAAO,CACH,MAAC,YAAY,OAAK,gBAAgB,CAAC,SAAS,CAAC,aACxC,OAAO,EACP,MAAM,EACN,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,KAAC,YAAY,CAAC,OAAO,IACjB,wBAAwB,EAAE,SAAS,EACnC,SAAS,EAAE,SAAS,kCACS,MAAM,mBACrB,mCAAmC,EACjD,SAAS,EAAC,0BAA0B,YAEpC,KAAC,YAAY,CAAC,IAAI,IACd,QAAQ,EAAE,YAAY,eACZ,QAAQ,oBACH,cAAc,6BACL,MAAM,mBAChB,iBAAiB,EAC/B,SAAS,EAAC,kBAAkB,YAE3B,aAAa,CAAC,OAAO,CAAC,GACP,GACD,CAC1B,IACU,CAClB,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,30 @@
1
+ import type { ReactNode } from "react";
2
+ export type ListBoxItem = {
3
+ readonly id: string;
4
+ readonly label: string;
5
+ readonly description?: ReactNode;
6
+ readonly leading?: ReactNode;
7
+ readonly trailing?: ReactNode;
8
+ readonly isDisabled?: boolean;
9
+ };
10
+ export type ListBoxProps = {
11
+ /** Names the list, e.g. "Members". */
12
+ readonly label: string;
13
+ readonly items: ReadonlyArray<ListBoxItem>;
14
+ /** `none` makes an actionable (not selectable) list; rows then only fire `onAction`. */
15
+ readonly selectionMode?: "none" | "single" | "multiple";
16
+ readonly selectedIds?: ReadonlyArray<string>;
17
+ readonly defaultSelectedIds?: ReadonlyArray<string>;
18
+ readonly onSelectionChange?: (ids: ReadonlyArray<string>) => void;
19
+ readonly onAction?: (id: string) => void;
20
+ readonly emptyContent?: ReactNode;
21
+ readonly className?: string;
22
+ };
23
+ /**
24
+ * A list of selectable or actionable rows (`role="listbox"`). Arrow keys, Home/End and typeahead
25
+ * move between rows; Space/Enter select. Each row exposes `data-grammar-selected` and the
26
+ * vendor `aria-selected`; long labels truncate and descriptions wrap at narrow widths.
27
+ * Contract: list FOCUS-2 CONTROL-STATE-3, empty STATE-3, leading glyph ICON-6.
28
+ */
29
+ export declare const ListBox: ({ label, items, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, className, }: ListBoxProps) => import("react").JSX.Element;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IAC1C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,yHAUrB,YAAY,gCAwCd,CAAA"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ListBox as HeroListBox } from "@heroui/react";
4
+ import { navigationClassName } from "../../navigationClassNames.js";
5
+ /**
6
+ * A list of selectable or actionable rows (`role="listbox"`). Arrow keys, Home/End and typeahead
7
+ * move between rows; Space/Enter select. Each row exposes `data-grammar-selected` and the
8
+ * vendor `aria-selected`; long labels truncate and descriptions wrap at narrow widths.
9
+ * Contract: list FOCUS-2 CONTROL-STATE-3, empty STATE-3, leading glyph ICON-6.
10
+ */
11
+ export const ListBox = ({ label, items, selectionMode = "single", selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, className, }) => (_jsx(HeroListBox, { "aria-label": label, className: navigationClassName("starci-core-list-box", className), "data-component": "ListBox", "data-contract": "FOCUS-2 CONTROL-STATE-3", "data-tier": "branch", "data-grammar-list-selection": selectionMode, selectionMode: selectionMode, ...(selectedIds === undefined ? {} : { selectedKeys: new Set(selectedIds) }), ...(defaultSelectedIds === undefined ? {} : { defaultSelectedKeys: new Set(defaultSelectedIds) }), ...(onSelectionChange === undefined ? {} : {
12
+ onSelectionChange: (selection) => onSelectionChange(selection === "all" ? items.map((item) => item.id) : [...selection].map(String)),
13
+ }), ...(onAction === undefined ? {} : { onAction: (key) => onAction(String(key)) }), ...(emptyContent === undefined ? {} : { renderEmptyState: () => _jsx("div", { className: "starci-core-list-box-empty", "data-contract": "STATE-3", "data-grammar-list-empty": "true", children: emptyContent }) }), children: items.map((item) => (_jsx(HeroListBox.Item, { id: item.id, className: "starci-core-list-box-item", "data-grammar-list-item": "true", textValue: item.label, ...(item.isDisabled === undefined ? {} : { isDisabled: item.isDisabled }), children: ({ isSelected }) => (_jsxs("span", { className: "starci-core-list-box-row", "data-grammar-selected": isSelected ? "true" : "false", children: [item.leading === undefined ? null : _jsx("span", { "aria-hidden": "true", className: "starci-core-list-box-leading", "data-contract": "ICON-6", children: item.leading }), _jsxs("span", { className: "starci-core-list-box-copy", children: [_jsx("span", { className: "starci-core-list-box-label", children: item.label }), item.description === undefined ? null : _jsx("span", { className: "starci-core-list-box-description", children: item.description })] }), item.trailing === undefined ? null : _jsx("span", { className: "starci-core-list-box-trailing", children: item.trailing }), selectionMode === "none" ? null : _jsx(HeroListBox.ItemIndicator, { className: "starci-core-list-box-indicator" })] })) }, item.id))) }));
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,12 @@ export type MarkdownArticleProps = {
7
7
  type FencedCodeBlockFrameProps = {
8
8
  readonly language?: string;
9
9
  readonly action?: ReactNode;
10
+ /**
11
+ * Accessible name of the scrolling code region (e.g. "Install command"). Defaults to
12
+ * `language`. Authored code scrolls inline and is plain text, so its `<pre>` is a Tab stop
13
+ * (WCAG 2.1.1); a name makes it a `role="region"` a screen reader can announce.
14
+ */
15
+ readonly label?: string;
10
16
  };
11
17
  type AuthoredCodeProps = {
12
18
  readonly code: string;
@@ -19,6 +25,8 @@ type RenderedCodeProps = {
19
25
  export type FencedCodeBlockProps = FencedCodeBlockFrameProps & (AuthoredCodeProps | RenderedCodeProps);
20
26
  export type MarkdownTableFrameProps = {
21
27
  readonly children: ReactNode;
28
+ /** Accessible name of the scrolling frame; with it the frame is a `role="region"`. */
29
+ readonly label?: string;
22
30
  };
23
31
  /** Own the business-neutral reading rhythm for one semantic Markdown document. */
24
32
  export declare const MarkdownArticle: (props: MarkdownArticleProps) => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/MarkdownArticle/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAC3C,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAC9B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAC5B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAA;AAEtG,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAC/B,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAQ1D,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAgB1D,CAAA;AAED,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,GAAI,OAAO,uBAAuB,gCAOhE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/MarkdownArticle/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAC3C,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAC5B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAA;AAEtG,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAQD,kFAAkF;AAClF,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAQ1D,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAgB1D,CAAA;AAED,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,GAAI,OAAO,uBAAuB,gCAQhE,CAAA"}
@@ -1,12 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { fencedCodeBlockClassName, fencedCodeHeaderClassName, markdownArticleClassName, markdownTableFrameClassName } from "./classNames.js";
3
+ /** Keyboard reachability for an inline-scrolling reading frame whose content is plain text. */
4
+ const scrollFrameProps = (label) => ({
5
+ tabIndex: 0,
6
+ ...(label === undefined ? {} : { role: "region", "aria-label": label }),
7
+ });
3
8
  /** Own the business-neutral reading rhythm for one semantic Markdown document. */
4
9
  export const MarkdownArticle = (props) => (_jsx("div", { "aria-label": props.ariaLabel, className: markdownArticleClassName, "data-grammar-markdown-measure": props.measure ?? "reading", children: props.children }));
5
10
  /** Own bounded code overflow while allowing a caller-supplied neutral action such as Copy. */
6
11
  export const FencedCodeBlock = (props) => {
7
- const body = "children" in props ? props.children : _jsx("pre", { children: _jsx("code", { children: props.code }) });
12
+ const body = "children" in props ? props.children : _jsx("pre", { ...scrollFrameProps(props.label ?? props.language), children: _jsx("code", { children: props.code }) });
8
13
  return (_jsxs("div", { className: fencedCodeBlockClassName, "data-contract": "OVERFLOW-4", children: [props.language === undefined && props.action === undefined ? null : (_jsxs("div", { className: fencedCodeHeaderClassName, children: [props.language === undefined ? _jsx("span", {}) : _jsx("span", { children: props.language }), props.action] })), body] }));
9
14
  };
10
15
  /** Keep a vendor-rendered table inside the same bounded reading frame as semantic tables. */
11
- export const MarkdownTableFrame = (props) => (_jsx("div", { className: markdownTableFrameClassName, "data-contract": "OVERFLOW-4", children: props.children }));
16
+ export const MarkdownTableFrame = (props) => (_jsx("div", { className: markdownTableFrameClassName, "data-contract": "OVERFLOW-4", ...scrollFrameProps(props.label), children: props.children }));
12
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/MarkdownArticle/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AA6B5I,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE,CAAC,CAC5D,4BACgB,KAAK,CAAC,SAAS,EAC3B,SAAS,EAAE,wBAAwB,mCACJ,KAAK,CAAC,OAAO,IAAI,SAAS,YAExD,KAAK,CAAC,QAAQ,GACb,CACT,CAAA;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAK,yBAAO,KAAK,CAAC,IAAI,GAAQ,GAAM,CAAA;IACxF,OAAO,CACH,eACI,SAAS,EAAE,wBAAwB,mBACrB,YAAY,aAEzB,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjE,eAAK,SAAS,EAAE,yBAAyB,aACpC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAQ,CAAC,CAAC,CAAC,yBAAO,KAAK,CAAC,QAAQ,GAAQ,EACvE,KAAK,CAAC,MAAM,IACX,CACT,EACA,IAAI,IACH,CACT,CAAA;AACL,CAAC,CAAA;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE,CAAC,CAClE,cACI,SAAS,EAAE,2BAA2B,mBACxB,YAAY,YAEzB,KAAK,CAAC,QAAQ,GACb,CACT,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/MarkdownArticle/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAqC5I,+FAA+F;AAC/F,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAE,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC;IACX,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;CAC1E,CAAC,CAAA;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE,CAAC,CAC5D,4BACgB,KAAK,CAAC,SAAS,EAC3B,SAAS,EAAE,wBAAwB,mCACJ,KAAK,CAAC,OAAO,IAAI,SAAS,YAExD,KAAK,CAAC,QAAQ,GACb,CACT,CAAA;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAS,gBAAgB,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAE,yBAAO,KAAK,CAAC,IAAI,GAAQ,GAAM,CAAA;IAC7I,OAAO,CACH,eACI,SAAS,EAAE,wBAAwB,mBACrB,YAAY,aAEzB,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjE,eAAK,SAAS,EAAE,yBAAyB,aACpC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAQ,CAAC,CAAC,CAAC,yBAAO,KAAK,CAAC,QAAQ,GAAQ,EACvE,KAAK,CAAC,MAAM,IACX,CACT,EACA,IAAI,IACH,CACT,CAAA;AACL,CAAC,CAAA;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE,CAAC,CAClE,cACI,SAAS,EAAE,2BAA2B,mBACxB,YAAY,KACtB,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,YAEhC,KAAK,CAAC,QAAQ,GACb,CACT,CAAA"}
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from "react";
2
+ import { type OverlayOpenState } from "../../overlayScope.js";
3
+ /** Side of the trigger the panel opens on; it flips when the viewport has no room. */
4
+ export type PopoverPlacement = "top" | "bottom" | "start" | "end";
5
+ type PopoverBase = OverlayOpenState & {
6
+ /** A Common `Button`/`IconButton` (any React Aria pressable) that toggles the panel. */
7
+ readonly trigger: ReactNode;
8
+ readonly children: ReactNode;
9
+ readonly placement?: PopoverPlacement;
10
+ /** Draw the pointer arrow toward the trigger. Default `false`. */
11
+ readonly showArrow?: boolean;
12
+ };
13
+ /** A popover is a non-modal dialog, so it needs a name: a visible title or an accessible label. */
14
+ type TitledPopover = {
15
+ readonly title: string;
16
+ readonly label?: never;
17
+ };
18
+ type LabelledPopover = {
19
+ readonly label: string;
20
+ readonly title?: never;
21
+ };
22
+ export type PopoverProps = PopoverBase & (TitledPopover | LabelledPopover);
23
+ /**
24
+ * BRANCH - `Popover`: rich, interactive content anchored to a trigger.
25
+ *
26
+ * Unlike `Tooltip` (a description), a popover holds focusable content. React Aria moves focus into
27
+ * the panel, contains Tab while open, dismisses on Escape or an outside press, and returns focus to
28
+ * the trigger. The panel portals into the nearest Grammar root so the family scope still applies.
29
+ * Contract: panel LAYOUT-4 CORE-BOUNDARY-4 MOTION-2 (portal, shadow, reduced motion); dialog FOCUS-3.
30
+ */
31
+ export declare const Popover: ({ trigger, children, placement, showArrow, title, label, ...openState }: PopoverProps) => import("react").JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Popover/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEpG,sFAAsF;AACtF,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAA;AAEjE,KAAK,WAAW,GAAG,gBAAgB,GAAG;IAClC,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;IACrC,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAED,mGAAmG;AACnG,KAAK,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AACvE,KAAK,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AAEzE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,CAAA;AAE1E;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,yEAQrB,YAAY,gCAmCd,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Popover as HeroPopover } from "@heroui/react";
3
+ import { overlayOpenProps, useOverlayContainer } from "../../overlayScope.js";
4
+ /**
5
+ * BRANCH - `Popover`: rich, interactive content anchored to a trigger.
6
+ *
7
+ * Unlike `Tooltip` (a description), a popover holds focusable content. React Aria moves focus into
8
+ * the panel, contains Tab while open, dismisses on Escape or an outside press, and returns focus to
9
+ * the trigger. The panel portals into the nearest Grammar root so the family scope still applies.
10
+ * Contract: panel LAYOUT-4 CORE-BOUNDARY-4 MOTION-2 (portal, shadow, reduced motion); dialog FOCUS-3.
11
+ */
12
+ export const Popover = ({ trigger, children, placement = "bottom", showArrow = false, title, label, ...openState }) => {
13
+ const { anchor, container } = useOverlayContainer("Popover");
14
+ return (_jsxs(HeroPopover, { ...overlayOpenProps(openState), children: [trigger, anchor, container === null ? null : (_jsxs(HeroPopover.Content, { UNSTABLE_portalContainer: container, placement: placement, offset: 8, "data-grammar-overlay-surface": "popover", "data-contract": "LAYOUT-4 CORE-BOUNDARY-4 MOTION-2", className: "starci-core-popover", children: [showArrow ? (_jsx(HeroPopover.Arrow, { className: "starci-core-popover-arrow", "data-grammar-popover-arrow": "true" })) : null, _jsxs(HeroPopover.Dialog, { "data-tier": "branch", "data-component": "Popover", "data-contract": "FOCUS-3", ...(label === undefined ? {} : { "aria-label": label }), className: "starci-core-popover-dialog", children: [title === undefined ? null : (_jsx(HeroPopover.Heading, { className: "starci-core-overlay-title", children: title })), _jsx("div", { className: "starci-core-popover-body", children: children })] })] }))] }));
15
+ };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Popover/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAyB,MAAM,uBAAuB,CAAA;AAoBpG;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACpB,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,QAAQ,EACpB,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,KAAK,EACL,GAAG,SAAS,EACD,EAAE,EAAE;IACf,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAE5D,OAAO,CACH,MAAC,WAAW,OAAK,gBAAgB,CAAC,SAAS,CAAC,aACvC,OAAO,EACP,MAAM,EACN,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,MAAC,WAAW,CAAC,OAAO,IAChB,wBAAwB,EAAE,SAAS,EACnC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,CAAC,kCACoB,SAAS,mBACxB,mCAAmC,EACjD,SAAS,EAAC,qBAAqB,aAE9B,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,WAAW,CAAC,KAAK,IAAC,SAAS,EAAC,2BAA2B,gCAA4B,MAAM,GAAG,CAChG,CAAC,CAAC,CAAC,IAAI,EACR,MAAC,WAAW,CAAC,MAAM,iBACL,QAAQ,oBACH,SAAS,mBACV,SAAS,KACnB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EACxD,SAAS,EAAC,4BAA4B,aAErC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1B,KAAC,WAAW,CAAC,OAAO,IAAC,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAuB,CAC3F,EACD,cAAK,SAAS,EAAC,0BAA0B,YAAE,QAAQ,GAAO,IACzC,IACH,CACzB,IACS,CACjB,CAAA;AACL,CAAC,CAAA"}
@@ -23,6 +23,8 @@ export type RailProps = (ComplementaryRailProps | ContentNavigationRailProps) &
23
23
  readonly isLabelHidden?: boolean;
24
24
  /** Grammar-owned content inset. `content` is exactly px-3 py-6. */
25
25
  readonly inset?: "none" | "content";
26
+ /** Outline rank of the rail's (possibly visually hidden) name. Default 2: a peer of the page's sections. */
27
+ readonly headingLevel?: 2 | 3 | 4 | 5 | 6;
26
28
  };
27
29
  export declare const Rail: (props: RailProps) => import("react").JSX.Element;
28
30
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Rail/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAG9F,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACtC,CAAA;AAED,KAAK,0BAA0B,GAAG;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;IACtB,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,sBAAsB,GAAG,0BAA0B,CAAC,GAAG;IAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAA;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAA;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;IACnD,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,SAAS,gCAiEpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Rail/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAG9F,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACtC,CAAA;AAED,KAAK,0BAA0B,GAAG;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;IACtB,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,sBAAsB,GAAG,0BAA0B,CAAC,GAAG;IAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAA;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAA;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;IACnD,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,4GAA4G;IAC5G,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAC5C,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,SAAS,gCA0EpC,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
2
+ import { createElement, useId } from "react";
3
3
  import { assertPresentationState, treatmentFor } from "../../state.js";
4
4
  import { railBodyClassName, railClassName, railFooterClassName, railFrameClassName } from "./classNames.js";
5
5
  export const Rail = (props) => {
6
- const { label, landmark = "complementary", children, footer, height = "content", mode = "flow", width = "standard", state = "neutral", collapse = "expanded", motion = "static", isLabelHidden = false, inset = "none", } = props;
6
+ const { label, landmark = "complementary", children, footer, height = "content", mode = "flow", width = "standard", state = "neutral", collapse = "expanded", motion = "static", isLabelHidden = false, inset = "none", headingLevel = 2, } = props;
7
7
  assertPresentationState(state);
8
8
  const headingId = useId();
9
9
  const treatment = treatmentFor(state);
@@ -16,7 +16,14 @@ export const Rail = (props) => {
16
16
  height === "fill" ? "MEASURE-6" : "OVERFLOW-3",
17
17
  inset === "content" ? "PADDING-3 PADDING-5" : null,
18
18
  ].filter(Boolean).join(" ");
19
- const frame = (_jsxs("div", { className: railFrameClassName, "data-contract": "GAP-4", "data-grammar-rail-frame": "true", children: [landmark === "content-navigation" ? null : _jsx("h2", { className: isLabelHidden ? "starci-core-visually-hidden" : undefined, "data-grammar-rail-heading": "true", id: headingId, children: label }), _jsx("div", { className: railBodyClassName, "data-grammar-rail-body": "true", "data-grammar-rail-inset": inset, ...(bodyContract === "" ? {} : { "data-contract": bodyContract }), children: children }), footer === undefined ? null : (_jsx("div", { className: railFooterClassName, "data-grammar-rail-footer": "true", children: footer }))] }));
19
+ /*
20
+ * At height="content" the body is the rail's scroll owner (`overflow-y: auto`), so it must be
21
+ * reachable without a pointer (WCAG 2.1.1, axe `scrollable-region-focusable`): a Tab stop named
22
+ * by the rail heading. A `fill` body clips instead of scrolling and a content-navigation body
23
+ * scrolls links that are themselves focusable, so neither adds a stop.
24
+ */
25
+ const isScrollOwner = height === "content" && landmark !== "content-navigation";
26
+ const frame = (_jsxs("div", { className: railFrameClassName, "data-contract": "GAP-4", "data-grammar-rail-frame": "true", children: [landmark === "content-navigation" ? null : createElement(`h${headingLevel}`, { className: isLabelHidden ? "starci-core-visually-hidden" : undefined, "data-grammar-rail-heading": "true", id: headingId }, label), _jsx("div", { className: railBodyClassName, "data-grammar-rail-body": "true", "data-grammar-rail-inset": inset, ...(isScrollOwner ? { "aria-labelledby": headingId, role: "region", tabIndex: 0 } : {}), ...(bodyContract === "" ? {} : { "data-contract": bodyContract }), children: children }), footer === undefined ? null : (_jsx("div", { className: railFooterClassName, "data-grammar-rail-footer": "true", children: footer }))] }));
20
27
  const shared = {
21
28
  className: railClassName,
22
29
  "data-grammar-collapse": collapse,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Rail/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAA0B,MAAM,gBAAgB,CAAA;AAC9F,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AA6B3G,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE;IACrC,MAAM,EACF,KAAK,EACL,QAAQ,GAAG,eAAe,EAC1B,QAAQ,EACR,MAAM,EACN,MAAM,GAAG,SAAS,EAClB,IAAI,GAAG,MAAM,EACb,KAAK,GAAG,UAAU,EAClB,KAAK,GAAG,SAAS,EACjB,QAAQ,GAAG,UAAU,EACrB,MAAM,GAAG,QAAQ,EACjB,aAAa,GAAG,KAAK,EACrB,KAAK,GAAG,MAAM,GACjB,GAAG,KAAK,CAAA;IACT,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,KAAK,EAAE,CAAA;IACzB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAErC,MAAM,YAAY,GAAG;QACjB,8EAA8E;QAC9E,mEAAmE;QACnE,oFAAoF;QACpF,oFAAoF;QACpF,sBAAsB;QACtB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;QAC9C,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI;KACrD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAE3B,MAAM,KAAK,GAAG,CACV,eAAK,SAAS,EAAE,kBAAkB,mBAAgB,OAAO,6BAAyB,MAAM,aACnF,QAAQ,KAAK,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAI,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS,+BAA4B,MAAM,EAAC,EAAE,EAAE,SAAS,YAAG,KAAK,GAAM,EAClL,cACI,SAAS,EAAE,iBAAiB,4BACL,MAAM,6BACJ,KAAK,KAC1B,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,YACpE,QAAQ,GAAO,EAChB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,cAAK,SAAS,EAAE,mBAAmB,8BAA2B,MAAM,YAAE,MAAM,GAAO,CACtF,IACC,CACT,CAAA;IACD,MAAM,MAAM,GAAG;QACX,SAAS,EAAE,aAAa;QACxB,uBAAuB,EAAE,QAAQ;QACjC,uBAAuB,EAAE,QAAQ;QACjC,0BAA0B,EAAE,MAAM;QAClC,qBAAqB,EAAE,MAAM;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,wBAAwB,EAAE,IAAI;QAC9B,yBAAyB,EAAE,KAAK;QAChC,oBAAoB,EAAE,KAAK;QAC3B,wBAAwB,EAAE,SAAS,CAAC,IAAI;KAClC,CAAA;IAEV,IAAI,QAAQ,KAAK,oBAAoB;QAAE,OAAO,iBAAS,MAAM,YAAG,KAAK,GAAO,CAAA;IAC5E,OAAO,CACH,mCACqB,SAAS,KACtB,MAAM,YAET,KAAK,GACF,CACX,CAAA;AACL,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Rail/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type ReactNode } from "react";
2
+ import { type FieldControlProps } from "../../primitive/Field/index.js";
3
+ /** One choice in a list-backed control. `label` is plain text because it is also the typeahead value. */
4
+ export type ListOption = {
5
+ readonly id: string;
6
+ readonly label: string;
7
+ readonly description?: ReactNode;
8
+ readonly isDisabled?: boolean;
9
+ };
10
+ export type SelectProps = FieldControlProps & {
11
+ readonly options: ReadonlyArray<ListOption>;
12
+ readonly placeholder?: string;
13
+ readonly value?: string | null;
14
+ readonly defaultValue?: string | null;
15
+ readonly onValueChange?: (value: string | null) => void;
16
+ /** Options are still arriving. The trigger stays named and focusable, announces pending, and does not open. */
17
+ readonly isPending?: boolean;
18
+ };
19
+ /** Renders the options as vendor list-box items with the selected-state indicator. */
20
+ export declare const ListOptions: ({ options }: {
21
+ readonly options: ReadonlyArray<ListOption>;
22
+ }) => import("react").JSX.Element;
23
+ /**
24
+ * A single choice from a closed list, opened from a field-shaped trigger.
25
+ *
26
+ * Keyboard, typeahead, listbox semantics and focus return are the vendor's. Read-only keeps the
27
+ * trigger focusable and announced but holds the value and never opens the list; the vendor select
28
+ * has no read-only mode of its own.
29
+ */
30
+ export declare const Select: ({ options, placeholder, value, defaultValue, onValueChange, isPending, ...field }: SelectProps) => import("react").JSX.Element;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAMH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAA;AAEvC,yGAAyG;AACzG,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACvD,+GAA+G;IAC/G,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAID,sFAAsF;AACtF,eAAO,MAAM,WAAW,GAAI,aAAa;IAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAAE,gCAqBvF,CAAA;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,mFAQpB,WAAW,gCA4Cb,CAAA"}
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ListBox as HeroListBox, Select as HeroSelect, Spinner as HeroSpinner, } from "@heroui/react";
4
+ import { useState } from "react";
5
+ import { FieldDescription, FieldErrorText, FieldLabel, useGrammarPortal, vendorFieldProps, } from "../../primitive/Field/index.js";
6
+ const toValue = (key) => (key === null ? null : String(key));
7
+ /** Renders the options as vendor list-box items with the selected-state indicator. */
8
+ export const ListOptions = ({ options }) => (_jsx(_Fragment, { children: options.map((option) => (_jsxs(HeroListBox.Item, { id: option.id, textValue: option.label, isDisabled: option.isDisabled === true, className: "starci-core-list-option", "data-grammar-option": "true", children: [_jsxs("span", { className: "starci-core-list-option-copy", children: [_jsx("span", { className: "starci-core-list-option-label", children: option.label }), option.description == null ? null : (_jsx("span", { className: "starci-core-list-option-description", children: option.description }))] }), _jsx(HeroListBox.ItemIndicator, {})] }, option.id))) }));
9
+ /*
10
+ * Consumer hook: `starci-core-select` names this control's root for a consumer or family
11
+ * stylesheet. No shipped sheet paints it: the root is drawn as a whole by `.starci-core-field`, so
12
+ * a rule on the hook adds to the shared anatomy and never has to replace it.
13
+ */
14
+ /*
15
+ * Consumer hooks: `starci-core-select-indicator`, `starci-core-list-popover`, `starci-core-list`
16
+ * name HeroUI parts whose vendor paint Common leaves as it is. No shipped sheet paints them; the
17
+ * Grammar name lets a consumer or family select those parts without reaching for vendor class
18
+ * names.
19
+ */
20
+ /**
21
+ * A single choice from a closed list, opened from a field-shaped trigger.
22
+ *
23
+ * Keyboard, typeahead, listbox semantics and focus return are the vendor's. Read-only keeps the
24
+ * trigger focusable and announced but holds the value and never opens the list; the vendor select
25
+ * has no read-only mode of its own.
26
+ */
27
+ export const Select = ({ options, placeholder, value, defaultValue, onValueChange, isPending = false, ...field }) => {
28
+ const [heldValue] = useState(value ?? defaultValue ?? null);
29
+ const { anchor, portalProps } = useGrammarPortal();
30
+ const readOnly = field.isReadOnly === true;
31
+ const selection = readOnly
32
+ ? { value: value === undefined ? heldValue : value }
33
+ : value === undefined ? defaultValue === undefined ? {} : { defaultValue } : { value };
34
+ return (_jsxs(HeroSelect, { "data-tier": "branch", "data-component": "Select", "data-contract": "A11Y-1 FIELD-3 STATE-6 CONTROL-STATE-2", className: "starci-core-field starci-core-select", fullWidth: true, ...vendorFieldProps({ ...field, isPending }), ...(placeholder === undefined ? {} : { placeholder }), ...selection, ...(readOnly ? { isOpen: false } : {}), onChange: (key) => {
35
+ if (!readOnly)
36
+ onValueChange?.(toValue(key));
37
+ }, children: [anchor, _jsx(FieldLabel, { isHidden: field.isLabelHidden, isRequired: field.isRequired, children: field.label }), _jsxs(HeroSelect.Trigger, { className: "starci-core-select-trigger", "data-grammar-field-control": "true", isPending: isPending, children: [_jsx(HeroSelect.Value, { className: "starci-core-select-value" }), isPending
38
+ ? _jsx(HeroSpinner, { size: "sm", color: "current", "aria-hidden": "true", className: "starci-core-field-spinner" })
39
+ : _jsx(HeroSelect.Indicator, { className: "starci-core-select-indicator" })] }), _jsx(FieldDescription, { children: field.description }), _jsx(FieldErrorText, { children: field.errorMessage }), _jsx(HeroSelect.Popover, { className: "starci-core-list-popover", "data-grammar-popover": "Select", "data-contract": "LAYOUT-4", ...portalProps, children: _jsx(HeroListBox, { className: "starci-core-list", children: _jsx(ListOptions, { options: options }) }) })] }));
40
+ };
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"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"}