@stridge/noctis 1.0.0-beta.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 (565) hide show
  1. package/README.md +60 -0
  2. package/dist/_virtual/_rolldown/runtime.js +27 -0
  3. package/dist/components/accordion/accordion.context.js +15 -0
  4. package/dist/components/accordion/accordion.d.ts +136 -0
  5. package/dist/components/accordion/accordion.js +132 -0
  6. package/dist/components/accordion/accordion.props.d.ts +45 -0
  7. package/dist/components/accordion/accordion.props.js +53 -0
  8. package/dist/components/accordion/accordion.slots.d.ts +24 -0
  9. package/dist/components/accordion/accordion.slots.js +39 -0
  10. package/dist/components/accordion/accordion.types.d.ts +11 -0
  11. package/dist/components/accordion/index.d.ts +3 -0
  12. package/dist/components/alert-dialog/alert-dialog.context.js +16 -0
  13. package/dist/components/alert-dialog/alert-dialog.d.ts +324 -0
  14. package/dist/components/alert-dialog/alert-dialog.js +279 -0
  15. package/dist/components/alert-dialog/alert-dialog.props.d.ts +85 -0
  16. package/dist/components/alert-dialog/alert-dialog.props.js +84 -0
  17. package/dist/components/alert-dialog/alert-dialog.slots.d.ts +29 -0
  18. package/dist/components/alert-dialog/alert-dialog.slots.js +52 -0
  19. package/dist/components/alert-dialog/alert-dialog.types.d.ts +22 -0
  20. package/dist/components/alert-dialog/index.d.ts +3 -0
  21. package/dist/components/autocomplete/autocomplete.context.d.ts +5 -0
  22. package/dist/components/autocomplete/autocomplete.context.js +13 -0
  23. package/dist/components/autocomplete/autocomplete.d.ts +364 -0
  24. package/dist/components/autocomplete/autocomplete.js +373 -0
  25. package/dist/components/autocomplete/autocomplete.props.d.ts +83 -0
  26. package/dist/components/autocomplete/autocomplete.props.js +63 -0
  27. package/dist/components/autocomplete/autocomplete.slots.d.ts +32 -0
  28. package/dist/components/autocomplete/autocomplete.slots.js +61 -0
  29. package/dist/components/autocomplete/index.d.ts +3 -0
  30. package/dist/components/avatar/avatar.context.js +21 -0
  31. package/dist/components/avatar/avatar.d.ts +235 -0
  32. package/dist/components/avatar/avatar.js +208 -0
  33. package/dist/components/avatar/avatar.props.d.ts +86 -0
  34. package/dist/components/avatar/avatar.props.js +78 -0
  35. package/dist/components/avatar/avatar.slots.d.ts +35 -0
  36. package/dist/components/avatar/avatar.slots.js +49 -0
  37. package/dist/components/avatar/avatar.types.d.ts +28 -0
  38. package/dist/components/avatar/index.d.ts +2 -0
  39. package/dist/components/button/button.d.ts +91 -0
  40. package/dist/components/button/button.js +82 -0
  41. package/dist/components/button/button.props.d.ts +48 -0
  42. package/dist/components/button/button.props.js +25 -0
  43. package/dist/components/button/button.slots.d.ts +30 -0
  44. package/dist/components/button/button.slots.js +40 -0
  45. package/dist/components/button/button.types.d.ts +12 -0
  46. package/dist/components/button/index.d.ts +2 -0
  47. package/dist/components/button-group/button-group.context.js +15 -0
  48. package/dist/components/button-group/button-group.d.ts +60 -0
  49. package/dist/components/button-group/button-group.js +50 -0
  50. package/dist/components/button-group/button-group.props.d.ts +22 -0
  51. package/dist/components/button-group/button-group.props.js +33 -0
  52. package/dist/components/button-group/button-group.slots.d.ts +12 -0
  53. package/dist/components/button-group/button-group.slots.js +18 -0
  54. package/dist/components/button-group/index.d.ts +2 -0
  55. package/dist/components/checkbox/checkbox-group.d.ts +46 -0
  56. package/dist/components/checkbox/checkbox-group.js +31 -0
  57. package/dist/components/checkbox/checkbox.context.js +15 -0
  58. package/dist/components/checkbox/checkbox.d.ts +130 -0
  59. package/dist/components/checkbox/checkbox.js +117 -0
  60. package/dist/components/checkbox/checkbox.props.d.ts +84 -0
  61. package/dist/components/checkbox/checkbox.props.js +49 -0
  62. package/dist/components/checkbox/checkbox.slots.d.ts +27 -0
  63. package/dist/components/checkbox/checkbox.slots.js +40 -0
  64. package/dist/components/checkbox/index.d.ts +3 -0
  65. package/dist/components/code-block/brand-logo.d.ts +37 -0
  66. package/dist/components/code-block/brand-logo.js +212 -0
  67. package/dist/components/code-block/code-block.context.js +13 -0
  68. package/dist/components/code-block/code-block.d.ts +190 -0
  69. package/dist/components/code-block/code-block.js +267 -0
  70. package/dist/components/code-block/code-block.props.d.ts +42 -0
  71. package/dist/components/code-block/code-block.props.js +51 -0
  72. package/dist/components/code-block/code-block.slots.d.ts +16 -0
  73. package/dist/components/code-block/code-block.slots.js +31 -0
  74. package/dist/components/code-block/index.d.ts +3 -0
  75. package/dist/components/code-block/language-label.js +43 -0
  76. package/dist/components/collapsible/collapsible.context.js +18 -0
  77. package/dist/components/collapsible/collapsible.d.ts +167 -0
  78. package/dist/components/collapsible/collapsible.js +182 -0
  79. package/dist/components/collapsible/collapsible.props.d.ts +33 -0
  80. package/dist/components/collapsible/collapsible.props.js +44 -0
  81. package/dist/components/collapsible/collapsible.slots.d.ts +25 -0
  82. package/dist/components/collapsible/collapsible.slots.js +40 -0
  83. package/dist/components/collapsible/collapsible.types.d.ts +23 -0
  84. package/dist/components/collapsible/index.d.ts +2 -0
  85. package/dist/components/color-picker/area.d.ts +11 -0
  86. package/dist/components/color-picker/area.js +148 -0
  87. package/dist/components/color-picker/color-picker.d.ts +110 -0
  88. package/dist/components/color-picker/color-picker.js +149 -0
  89. package/dist/components/color-picker/color-picker.props.d.ts +69 -0
  90. package/dist/components/color-picker/color-picker.props.js +74 -0
  91. package/dist/components/color-picker/color-picker.slots.js +21 -0
  92. package/dist/components/color-picker/color.d.ts +18 -0
  93. package/dist/components/color-picker/color.js +224 -0
  94. package/dist/components/color-picker/context.d.ts +25 -0
  95. package/dist/components/color-picker/context.js +23 -0
  96. package/dist/components/color-picker/eyedropper.d.ts +14 -0
  97. package/dist/components/color-picker/eyedropper.js +50 -0
  98. package/dist/components/color-picker/format-tabs.d.ts +11 -0
  99. package/dist/components/color-picker/format-tabs.js +35 -0
  100. package/dist/components/color-picker/index.d.ts +3 -0
  101. package/dist/components/color-picker/inputs.d.ts +16 -0
  102. package/dist/components/color-picker/inputs.js +61 -0
  103. package/dist/components/color-picker/sliders.d.ts +17 -0
  104. package/dist/components/color-picker/sliders.js +94 -0
  105. package/dist/components/color-picker/store.js +48 -0
  106. package/dist/components/color-picker/swatch.d.ts +15 -0
  107. package/dist/components/color-picker/swatch.js +25 -0
  108. package/dist/components/color-swatch/color-swatch-picker.d.ts +87 -0
  109. package/dist/components/color-swatch/color-swatch-picker.js +73 -0
  110. package/dist/components/color-swatch/color-swatch.context.js +8 -0
  111. package/dist/components/color-swatch/color-swatch.d.ts +55 -0
  112. package/dist/components/color-swatch/color-swatch.js +48 -0
  113. package/dist/components/color-swatch/color-swatch.props.d.ts +54 -0
  114. package/dist/components/color-swatch/color-swatch.props.js +32 -0
  115. package/dist/components/color-swatch/color-swatch.slots.js +13 -0
  116. package/dist/components/color-swatch/index.d.ts +2 -0
  117. package/dist/components/combobox/combobox.context.js +13 -0
  118. package/dist/components/combobox/combobox.d.ts +328 -0
  119. package/dist/components/combobox/combobox.js +315 -0
  120. package/dist/components/combobox/combobox.props.d.ts +85 -0
  121. package/dist/components/combobox/combobox.props.js +79 -0
  122. package/dist/components/combobox/combobox.slots.d.ts +28 -0
  123. package/dist/components/combobox/combobox.slots.js +63 -0
  124. package/dist/components/combobox/index.d.ts +2 -0
  125. package/dist/components/context-menu/context-menu.d.ts +254 -0
  126. package/dist/components/context-menu/context-menu.js +150 -0
  127. package/dist/components/context-menu/context-menu.props.d.ts +22 -0
  128. package/dist/components/context-menu/context-menu.props.js +32 -0
  129. package/dist/components/context-menu/context-menu.slots.d.ts +24 -0
  130. package/dist/components/context-menu/context-menu.slots.js +42 -0
  131. package/dist/components/context-menu/index.d.ts +2 -0
  132. package/dist/components/copy-button/copy-button.d.ts +56 -0
  133. package/dist/components/copy-button/copy-button.js +88 -0
  134. package/dist/components/copy-button/copy-button.props.d.ts +27 -0
  135. package/dist/components/copy-button/copy-button.props.js +51 -0
  136. package/dist/components/copy-button/copy-button.slots.d.ts +20 -0
  137. package/dist/components/copy-button/copy-button.slots.js +36 -0
  138. package/dist/components/copy-button/index.d.ts +2 -0
  139. package/dist/components/dialog/dialog.context.js +15 -0
  140. package/dist/components/dialog/dialog.d.ts +299 -0
  141. package/dist/components/dialog/dialog.js +263 -0
  142. package/dist/components/dialog/dialog.props.d.ts +71 -0
  143. package/dist/components/dialog/dialog.props.js +75 -0
  144. package/dist/components/dialog/dialog.slots.d.ts +26 -0
  145. package/dist/components/dialog/dialog.slots.js +46 -0
  146. package/dist/components/dialog/dialog.types.d.ts +16 -0
  147. package/dist/components/dialog/index.d.ts +3 -0
  148. package/dist/components/field/field.d.ts +221 -0
  149. package/dist/components/field/field.js +192 -0
  150. package/dist/components/field/field.props.d.ts +66 -0
  151. package/dist/components/field/field.props.js +65 -0
  152. package/dist/components/field/field.slots.d.ts +35 -0
  153. package/dist/components/field/field.slots.js +54 -0
  154. package/dist/components/field/field.types.d.ts +5 -0
  155. package/dist/components/field/index.d.ts +4 -0
  156. package/dist/components/inline-code/index.d.ts +1 -0
  157. package/dist/components/inline-code/inline-code.d.ts +46 -0
  158. package/dist/components/inline-code/inline-code.js +36 -0
  159. package/dist/components/inline-code/inline-code.props.d.ts +17 -0
  160. package/dist/components/inline-code/inline-code.props.js +27 -0
  161. package/dist/components/inline-code/inline-code.slots.js +8 -0
  162. package/dist/components/input/index.d.ts +3 -0
  163. package/dist/components/input/input.context.js +13 -0
  164. package/dist/components/input/input.d.ts +161 -0
  165. package/dist/components/input/input.js +117 -0
  166. package/dist/components/input/input.props.d.ts +51 -0
  167. package/dist/components/input/input.props.js +50 -0
  168. package/dist/components/input/input.slots.d.ts +35 -0
  169. package/dist/components/input/input.slots.js +46 -0
  170. package/dist/components/input/input.types.d.ts +12 -0
  171. package/dist/components/kbd/glyphs.js +45 -0
  172. package/dist/components/kbd/index.d.ts +1 -0
  173. package/dist/components/kbd/kbd.d.ts +61 -0
  174. package/dist/components/kbd/kbd.js +233 -0
  175. package/dist/components/kbd/kbd.props.d.ts +30 -0
  176. package/dist/components/kbd/kbd.props.js +39 -0
  177. package/dist/components/kbd/kbd.slots.js +14 -0
  178. package/dist/components/kbd/use-apple-platform.js +25 -0
  179. package/dist/components/menu/index.d.ts +2 -0
  180. package/dist/components/menu/menu.d.ts +355 -0
  181. package/dist/components/menu/menu.js +263 -0
  182. package/dist/components/menu/menu.props.d.ts +92 -0
  183. package/dist/components/menu/menu.props.js +97 -0
  184. package/dist/components/menu/menu.slots.d.ts +32 -0
  185. package/dist/components/menu/menu.slots.js +60 -0
  186. package/dist/components/menubar/index.d.ts +2 -0
  187. package/dist/components/menubar/menubar.context.js +13 -0
  188. package/dist/components/menubar/menubar.d.ts +162 -0
  189. package/dist/components/menubar/menubar.js +122 -0
  190. package/dist/components/menubar/menubar.props.d.ts +41 -0
  191. package/dist/components/menubar/menubar.props.js +45 -0
  192. package/dist/components/menubar/menubar.slots.d.ts +26 -0
  193. package/dist/components/menubar/menubar.slots.js +40 -0
  194. package/dist/components/meter/index.d.ts +2 -0
  195. package/dist/components/meter/meter.context.d.ts +9 -0
  196. package/dist/components/meter/meter.context.js +13 -0
  197. package/dist/components/meter/meter.d.ts +163 -0
  198. package/dist/components/meter/meter.js +121 -0
  199. package/dist/components/meter/meter.props.d.ts +50 -0
  200. package/dist/components/meter/meter.props.js +33 -0
  201. package/dist/components/meter/meter.slots.d.ts +18 -0
  202. package/dist/components/meter/meter.slots.js +31 -0
  203. package/dist/components/navigation-menu/index.d.ts +2 -0
  204. package/dist/components/navigation-menu/navigation-menu.d.ts +328 -0
  205. package/dist/components/navigation-menu/navigation-menu.js +274 -0
  206. package/dist/components/navigation-menu/navigation-menu.props.d.ts +98 -0
  207. package/dist/components/navigation-menu/navigation-menu.props.js +90 -0
  208. package/dist/components/navigation-menu/navigation-menu.slots.d.ts +34 -0
  209. package/dist/components/navigation-menu/navigation-menu.slots.js +60 -0
  210. package/dist/components/number-field/index.d.ts +2 -0
  211. package/dist/components/number-field/number-field.context.d.ts +13 -0
  212. package/dist/components/number-field/number-field.context.js +13 -0
  213. package/dist/components/number-field/number-field.d.ts +197 -0
  214. package/dist/components/number-field/number-field.js +187 -0
  215. package/dist/components/number-field/number-field.props.d.ts +66 -0
  216. package/dist/components/number-field/number-field.props.js +50 -0
  217. package/dist/components/number-field/number-field.slots.d.ts +31 -0
  218. package/dist/components/number-field/number-field.slots.js +48 -0
  219. package/dist/components/otp-field/index.d.ts +3 -0
  220. package/dist/components/otp-field/otp-field.context.js +13 -0
  221. package/dist/components/otp-field/otp-field.d.ts +99 -0
  222. package/dist/components/otp-field/otp-field.js +76 -0
  223. package/dist/components/otp-field/otp-field.props.d.ts +48 -0
  224. package/dist/components/otp-field/otp-field.props.js +43 -0
  225. package/dist/components/otp-field/otp-field.slots.d.ts +28 -0
  226. package/dist/components/otp-field/otp-field.slots.js +39 -0
  227. package/dist/components/popover/index.d.ts +2 -0
  228. package/dist/components/popover/popover.d.ts +192 -0
  229. package/dist/components/popover/popover.js +152 -0
  230. package/dist/components/popover/popover.props.d.ts +34 -0
  231. package/dist/components/popover/popover.props.js +44 -0
  232. package/dist/components/popover/popover.slots.d.ts +22 -0
  233. package/dist/components/popover/popover.slots.js +42 -0
  234. package/dist/components/preview-card/index.d.ts +2 -0
  235. package/dist/components/preview-card/preview-card.d.ts +182 -0
  236. package/dist/components/preview-card/preview-card.js +146 -0
  237. package/dist/components/preview-card/preview-card.props.d.ts +37 -0
  238. package/dist/components/preview-card/preview-card.props.js +48 -0
  239. package/dist/components/preview-card/preview-card.slots.d.ts +22 -0
  240. package/dist/components/preview-card/preview-card.slots.js +39 -0
  241. package/dist/components/progress/index.d.ts +3 -0
  242. package/dist/components/progress/progress.context.d.ts +9 -0
  243. package/dist/components/progress/progress.context.js +13 -0
  244. package/dist/components/progress/progress.d.ts +139 -0
  245. package/dist/components/progress/progress.js +92 -0
  246. package/dist/components/progress/progress.props.d.ts +56 -0
  247. package/dist/components/progress/progress.props.js +38 -0
  248. package/dist/components/progress/progress.slots.d.ts +24 -0
  249. package/dist/components/progress/progress.slots.js +37 -0
  250. package/dist/components/radio/index.d.ts +2 -0
  251. package/dist/components/radio/radio.context.js +5 -0
  252. package/dist/components/radio/radio.d.ts +205 -0
  253. package/dist/components/radio/radio.js +168 -0
  254. package/dist/components/radio/radio.props.d.ts +106 -0
  255. package/dist/components/radio/radio.props.js +65 -0
  256. package/dist/components/radio/radio.slots.d.ts +29 -0
  257. package/dist/components/radio/radio.slots.js +44 -0
  258. package/dist/components/rail/index.d.ts +3 -0
  259. package/dist/components/rail/rail.context.d.ts +17 -0
  260. package/dist/components/rail/rail.context.js +23 -0
  261. package/dist/components/rail/rail.d.ts +232 -0
  262. package/dist/components/rail/rail.js +254 -0
  263. package/dist/components/rail/rail.props.d.ts +98 -0
  264. package/dist/components/rail/rail.props.js +64 -0
  265. package/dist/components/rail/rail.slots.d.ts +20 -0
  266. package/dist/components/rail/rail.slots.js +40 -0
  267. package/dist/components/scroll-area/index.d.ts +2 -0
  268. package/dist/components/scroll-area/scroll-area.context.js +15 -0
  269. package/dist/components/scroll-area/scroll-area.d.ts +217 -0
  270. package/dist/components/scroll-area/scroll-area.js +153 -0
  271. package/dist/components/scroll-area/scroll-area.props.d.ts +73 -0
  272. package/dist/components/scroll-area/scroll-area.props.js +64 -0
  273. package/dist/components/scroll-area/scroll-area.slots.d.ts +40 -0
  274. package/dist/components/scroll-area/scroll-area.slots.js +54 -0
  275. package/dist/components/scroll-area/scroll-area.types.d.ts +24 -0
  276. package/dist/components/search-dialog/index.d.ts +3 -0
  277. package/dist/components/search-dialog/parts/input.d.ts +24 -0
  278. package/dist/components/search-dialog/parts/input.js +53 -0
  279. package/dist/components/search-dialog/parts/messages.d.ts +80 -0
  280. package/dist/components/search-dialog/parts/messages.js +75 -0
  281. package/dist/components/search-dialog/parts/results.d.ts +43 -0
  282. package/dist/components/search-dialog/parts/results.js +63 -0
  283. package/dist/components/search-dialog/parts/root.d.ts +54 -0
  284. package/dist/components/search-dialog/parts/root.js +99 -0
  285. package/dist/components/search-dialog/search-dialog.context.d.ts +15 -0
  286. package/dist/components/search-dialog/search-dialog.context.js +20 -0
  287. package/dist/components/search-dialog/search-dialog.d.ts +84 -0
  288. package/dist/components/search-dialog/search-dialog.js +43 -0
  289. package/dist/components/search-dialog/search-dialog.props.d.ts +45 -0
  290. package/dist/components/search-dialog/search-dialog.props.js +49 -0
  291. package/dist/components/search-dialog/search-dialog.slots.d.ts +16 -0
  292. package/dist/components/search-dialog/search-dialog.slots.js +32 -0
  293. package/dist/components/select/index.d.ts +2 -0
  294. package/dist/components/select/select.context.js +17 -0
  295. package/dist/components/select/select.d.ts +356 -0
  296. package/dist/components/select/select.js +314 -0
  297. package/dist/components/select/select.props.d.ts +110 -0
  298. package/dist/components/select/select.props.js +103 -0
  299. package/dist/components/select/select.slots.d.ts +38 -0
  300. package/dist/components/select/select.slots.js +67 -0
  301. package/dist/components/separator/index.d.ts +2 -0
  302. package/dist/components/separator/separator.d.ts +69 -0
  303. package/dist/components/separator/separator.js +44 -0
  304. package/dist/components/separator/separator.props.d.ts +30 -0
  305. package/dist/components/separator/separator.props.js +30 -0
  306. package/dist/components/separator/separator.slots.d.ts +22 -0
  307. package/dist/components/separator/separator.slots.js +21 -0
  308. package/dist/components/separator/separator.types.d.ts +5 -0
  309. package/dist/components/sheet/index.d.ts +3 -0
  310. package/dist/components/sheet/sheet-stack.d.ts +106 -0
  311. package/dist/components/sheet/sheet-stack.js +146 -0
  312. package/dist/components/sheet/sheet.d.ts +279 -0
  313. package/dist/components/sheet/sheet.js +264 -0
  314. package/dist/components/sheet/sheet.props.d.ts +74 -0
  315. package/dist/components/sheet/sheet.props.js +77 -0
  316. package/dist/components/sheet/sheet.slots.js +22 -0
  317. package/dist/components/sheet/sheet.types.d.ts +12 -0
  318. package/dist/components/slider/index.d.ts +3 -0
  319. package/dist/components/slider/slider.context.d.ts +5 -0
  320. package/dist/components/slider/slider.context.js +29 -0
  321. package/dist/components/slider/slider.d.ts +230 -0
  322. package/dist/components/slider/slider.js +274 -0
  323. package/dist/components/slider/slider.props.d.ts +72 -0
  324. package/dist/components/slider/slider.props.js +59 -0
  325. package/dist/components/slider/slider.slots.d.ts +30 -0
  326. package/dist/components/slider/slider.slots.js +50 -0
  327. package/dist/components/surface/index.d.ts +1 -0
  328. package/dist/components/surface/surface.d.ts +84 -0
  329. package/dist/components/surface/surface.js +48 -0
  330. package/dist/components/surface/surface.props.d.ts +35 -0
  331. package/dist/components/surface/surface.props.js +26 -0
  332. package/dist/components/surface/surface.slots.js +9 -0
  333. package/dist/components/surface/surface.types.d.ts +14 -0
  334. package/dist/components/switch/index.d.ts +2 -0
  335. package/dist/components/switch/switch.context.js +14 -0
  336. package/dist/components/switch/switch.d.ts +110 -0
  337. package/dist/components/switch/switch.js +92 -0
  338. package/dist/components/switch/switch.props.d.ts +68 -0
  339. package/dist/components/switch/switch.props.js +41 -0
  340. package/dist/components/switch/switch.slots.d.ts +23 -0
  341. package/dist/components/switch/switch.slots.js +35 -0
  342. package/dist/components/table/index.d.ts +1 -0
  343. package/dist/components/table/table.d.ts +104 -0
  344. package/dist/components/table/table.js +92 -0
  345. package/dist/components/table/table.props.d.ts +38 -0
  346. package/dist/components/table/table.props.js +49 -0
  347. package/dist/components/table/table.slots.js +17 -0
  348. package/dist/components/tabs/index.d.ts +2 -0
  349. package/dist/components/tabs/tabs.context.d.ts +9 -0
  350. package/dist/components/tabs/tabs.context.js +13 -0
  351. package/dist/components/tabs/tabs.d.ts +139 -0
  352. package/dist/components/tabs/tabs.js +118 -0
  353. package/dist/components/tabs/tabs.props.d.ts +59 -0
  354. package/dist/components/tabs/tabs.props.js +39 -0
  355. package/dist/components/tabs/tabs.slots.d.ts +20 -0
  356. package/dist/components/tabs/tabs.slots.js +33 -0
  357. package/dist/components/textarea/index.d.ts +3 -0
  358. package/dist/components/textarea/textarea.context.js +13 -0
  359. package/dist/components/textarea/textarea.d.ts +142 -0
  360. package/dist/components/textarea/textarea.js +129 -0
  361. package/dist/components/textarea/textarea.props.d.ts +44 -0
  362. package/dist/components/textarea/textarea.props.js +32 -0
  363. package/dist/components/textarea/textarea.slots.d.ts +23 -0
  364. package/dist/components/textarea/textarea.slots.js +33 -0
  365. package/dist/components/textarea/textarea.types.d.ts +5 -0
  366. package/dist/components/toast/index.d.ts +4 -0
  367. package/dist/components/toast/toast.d.ts +241 -0
  368. package/dist/components/toast/toast.js +193 -0
  369. package/dist/components/toast/toast.manager.d.ts +76 -0
  370. package/dist/components/toast/toast.manager.js +71 -0
  371. package/dist/components/toast/toast.props.d.ts +66 -0
  372. package/dist/components/toast/toast.props.js +74 -0
  373. package/dist/components/toast/toast.slots.d.ts +30 -0
  374. package/dist/components/toast/toast.slots.js +49 -0
  375. package/dist/components/toast/toast.types.d.ts +19 -0
  376. package/dist/components/toggle/index.d.ts +2 -0
  377. package/dist/components/toggle/toggle.context.d.ts +11 -0
  378. package/dist/components/toggle/toggle.context.js +14 -0
  379. package/dist/components/toggle/toggle.d.ts +136 -0
  380. package/dist/components/toggle/toggle.js +101 -0
  381. package/dist/components/toggle/toggle.props.d.ts +51 -0
  382. package/dist/components/toggle/toggle.props.js +29 -0
  383. package/dist/components/toggle/toggle.slots.d.ts +26 -0
  384. package/dist/components/toggle/toggle.slots.js +36 -0
  385. package/dist/components/toolbar/index.d.ts +3 -0
  386. package/dist/components/toolbar/toolbar.context.js +23 -0
  387. package/dist/components/toolbar/toolbar.d.ts +218 -0
  388. package/dist/components/toolbar/toolbar.js +197 -0
  389. package/dist/components/toolbar/toolbar.props.d.ts +54 -0
  390. package/dist/components/toolbar/toolbar.props.js +55 -0
  391. package/dist/components/toolbar/toolbar.slots.d.ts +24 -0
  392. package/dist/components/toolbar/toolbar.slots.js +37 -0
  393. package/dist/components/toolbar/toolbar.types.d.ts +15 -0
  394. package/dist/components/tooltip/index.d.ts +2 -0
  395. package/dist/components/tooltip/tooltip.d.ts +170 -0
  396. package/dist/components/tooltip/tooltip.js +143 -0
  397. package/dist/components/tooltip/tooltip.props.d.ts +36 -0
  398. package/dist/components/tooltip/tooltip.props.js +42 -0
  399. package/dist/components/tooltip/tooltip.slots.d.ts +26 -0
  400. package/dist/components/tooltip/tooltip.slots.js +42 -0
  401. package/dist/core/derive-threshold-tone.js +35 -0
  402. package/dist/core/merge-class-name.d.ts +17 -0
  403. package/dist/core/merge-class-name.js +16 -0
  404. package/dist/core/noctis-provider.d.ts +38 -0
  405. package/dist/core/noctis-provider.js +44 -0
  406. package/dist/core/primitive/index.d.ts +1 -0
  407. package/dist/core/primitive/primitive.d.ts +44 -0
  408. package/dist/core/primitive/primitive.js +27 -0
  409. package/dist/core/radius-scope/index.d.ts +2 -0
  410. package/dist/core/radius-scope/radius-scope.d.ts +43 -0
  411. package/dist/core/radius-scope/radius-scope.js +36 -0
  412. package/dist/core/radius-scope/radius-scope.styles.d.ts +13 -0
  413. package/dist/core/radius-scope/radius-scope.styles.js +11 -0
  414. package/dist/core/render.d.ts +24 -0
  415. package/dist/core/render.js +12 -0
  416. package/dist/core/use-copy.d.ts +13 -0
  417. package/dist/core/use-copy.js +30 -0
  418. package/dist/core/use-injected-labels.js +55 -0
  419. package/dist/core/use-reduced-motion.d.ts +9 -0
  420. package/dist/core/use-reduced-motion.js +26 -0
  421. package/dist/core/visually-hidden/index.d.ts +1 -0
  422. package/dist/core/visually-hidden/visually-hidden.d.ts +24 -0
  423. package/dist/core/visually-hidden/visually-hidden.js +19 -0
  424. package/dist/i18n/default-messages.d.ts +12 -0
  425. package/dist/i18n/default-messages.js +10 -0
  426. package/dist/i18n/index.d.ts +2 -0
  427. package/dist/i18n/index.js +2 -0
  428. package/dist/i18n/messages/index.d.ts +2 -0
  429. package/dist/i18n/messages/index.js +2 -0
  430. package/dist/icons/glyphs.d.ts +2 -0
  431. package/dist/icons/glyphs.js +2 -0
  432. package/dist/icons/icon.d.ts +40 -0
  433. package/dist/icons/icon.js +26 -0
  434. package/dist/icons/icon.styles.d.ts +9 -0
  435. package/dist/icons/index.d.ts +3 -0
  436. package/dist/index.d.ts +126 -0
  437. package/dist/index.js +112 -0
  438. package/dist/primitives/accordion.d.ts +7 -0
  439. package/dist/primitives/accordion.js +8 -0
  440. package/dist/primitives/alert-dialog.d.ts +7 -0
  441. package/dist/primitives/alert-dialog.js +8 -0
  442. package/dist/primitives/autocomplete/autocomplete.d.ts +58 -0
  443. package/dist/primitives/autocomplete/autocomplete.js +58 -0
  444. package/dist/primitives/autocomplete/index.d.ts +1 -0
  445. package/dist/primitives/autocomplete.d.ts +2 -0
  446. package/dist/primitives/autocomplete.js +2 -0
  447. package/dist/primitives/avatar.d.ts +7 -0
  448. package/dist/primitives/avatar.js +8 -0
  449. package/dist/primitives/button.d.ts +7 -0
  450. package/dist/primitives/button.js +8 -0
  451. package/dist/primitives/checkbox-group.d.ts +7 -0
  452. package/dist/primitives/checkbox-group.js +8 -0
  453. package/dist/primitives/checkbox.d.ts +7 -0
  454. package/dist/primitives/checkbox.js +8 -0
  455. package/dist/primitives/collapsible.d.ts +7 -0
  456. package/dist/primitives/collapsible.js +8 -0
  457. package/dist/primitives/combobox/combobox.d.ts +71 -0
  458. package/dist/primitives/combobox/combobox.js +66 -0
  459. package/dist/primitives/combobox/index.d.ts +1 -0
  460. package/dist/primitives/combobox.d.ts +2 -0
  461. package/dist/primitives/combobox.js +2 -0
  462. package/dist/primitives/context-menu.d.ts +7 -0
  463. package/dist/primitives/context-menu.js +8 -0
  464. package/dist/primitives/csp-provider.d.ts +1 -0
  465. package/dist/primitives/csp-provider.js +2 -0
  466. package/dist/primitives/dialog.d.ts +7 -0
  467. package/dist/primitives/dialog.js +8 -0
  468. package/dist/primitives/direction-provider.d.ts +1 -0
  469. package/dist/primitives/direction-provider.js +8 -0
  470. package/dist/primitives/drawer.d.ts +1 -0
  471. package/dist/primitives/drawer.js +2 -0
  472. package/dist/primitives/field.d.ts +7 -0
  473. package/dist/primitives/field.js +8 -0
  474. package/dist/primitives/fieldset.d.ts +7 -0
  475. package/dist/primitives/fieldset.js +8 -0
  476. package/dist/primitives/form.d.ts +7 -0
  477. package/dist/primitives/form.js +8 -0
  478. package/dist/primitives/index.d.ts +79 -0
  479. package/dist/primitives/index.js +113 -0
  480. package/dist/primitives/input.d.ts +7 -0
  481. package/dist/primitives/input.js +8 -0
  482. package/dist/primitives/menu.d.ts +7 -0
  483. package/dist/primitives/menu.js +8 -0
  484. package/dist/primitives/menubar.d.ts +7 -0
  485. package/dist/primitives/menubar.js +8 -0
  486. package/dist/primitives/meter/index.d.ts +1 -0
  487. package/dist/primitives/meter/meter.d.ts +56 -0
  488. package/dist/primitives/meter/meter.js +59 -0
  489. package/dist/primitives/meter.d.ts +2 -0
  490. package/dist/primitives/meter.js +2 -0
  491. package/dist/primitives/navigation-menu.d.ts +7 -0
  492. package/dist/primitives/navigation-menu.js +8 -0
  493. package/dist/primitives/number-field/context.d.ts +13 -0
  494. package/dist/primitives/number-field/context.js +36 -0
  495. package/dist/primitives/number-field/index.d.ts +2 -0
  496. package/dist/primitives/number-field/number-field.d.ts +90 -0
  497. package/dist/primitives/number-field/number-field.js +107 -0
  498. package/dist/primitives/number-field.d.ts +3 -0
  499. package/dist/primitives/number-field.js +2 -0
  500. package/dist/primitives/otp-field.d.ts +7 -0
  501. package/dist/primitives/otp-field.js +8 -0
  502. package/dist/primitives/popover.d.ts +7 -0
  503. package/dist/primitives/popover.js +8 -0
  504. package/dist/primitives/preview-card.d.ts +7 -0
  505. package/dist/primitives/preview-card.js +8 -0
  506. package/dist/primitives/progress/index.d.ts +1 -0
  507. package/dist/primitives/progress/progress.d.ts +56 -0
  508. package/dist/primitives/progress/progress.js +59 -0
  509. package/dist/primitives/progress.d.ts +2 -0
  510. package/dist/primitives/progress.js +2 -0
  511. package/dist/primitives/radio-group.d.ts +7 -0
  512. package/dist/primitives/radio-group.js +8 -0
  513. package/dist/primitives/radio.d.ts +7 -0
  514. package/dist/primitives/radio.js +8 -0
  515. package/dist/primitives/scroll-area.d.ts +7 -0
  516. package/dist/primitives/scroll-area.js +8 -0
  517. package/dist/primitives/select.d.ts +7 -0
  518. package/dist/primitives/select.js +8 -0
  519. package/dist/primitives/separator.d.ts +7 -0
  520. package/dist/primitives/separator.js +8 -0
  521. package/dist/primitives/slider/context.d.ts +12 -0
  522. package/dist/primitives/slider/context.js +18 -0
  523. package/dist/primitives/slider/index.d.ts +2 -0
  524. package/dist/primitives/slider/slider.d.ts +83 -0
  525. package/dist/primitives/slider/slider.js +99 -0
  526. package/dist/primitives/slider.d.ts +3 -0
  527. package/dist/primitives/slider.js +2 -0
  528. package/dist/primitives/switch.d.ts +1 -0
  529. package/dist/primitives/switch.js +2 -0
  530. package/dist/primitives/tabs.d.ts +7 -0
  531. package/dist/primitives/tabs.js +8 -0
  532. package/dist/primitives/toast/context.d.ts +11 -0
  533. package/dist/primitives/toast/context.js +18 -0
  534. package/dist/primitives/toast/index.d.ts +2 -0
  535. package/dist/primitives/toast/toast.d.ts +122 -0
  536. package/dist/primitives/toast/toast.js +133 -0
  537. package/dist/primitives/toast.d.ts +3 -0
  538. package/dist/primitives/toast.js +2 -0
  539. package/dist/primitives/toggle-group.d.ts +7 -0
  540. package/dist/primitives/toggle-group.js +8 -0
  541. package/dist/primitives/toggle.d.ts +7 -0
  542. package/dist/primitives/toggle.js +8 -0
  543. package/dist/primitives/toolbar.d.ts +7 -0
  544. package/dist/primitives/toolbar.js +8 -0
  545. package/dist/primitives/tooltip.d.ts +7 -0
  546. package/dist/primitives/tooltip.js +8 -0
  547. package/dist/props.d.ts +46 -0
  548. package/dist/props.js +46 -0
  549. package/dist/styles.css +11513 -0
  550. package/dist/tailwind/cn.d.ts +33 -0
  551. package/dist/tailwind/cn.js +42 -0
  552. package/dist/tailwind/index.d.ts +3 -0
  553. package/dist/tailwind/index.js +3 -0
  554. package/dist/tailwind/tv.d.ts +20 -0
  555. package/dist/tailwind/tv.js +11 -0
  556. package/dist/tailwind.css +485 -0
  557. package/dist/theme/react.d.ts +1 -0
  558. package/dist/theme/react.js +1 -0
  559. package/dist/theme.d.ts +1 -0
  560. package/dist/theme.js +1 -0
  561. package/dist/tokens/react.d.ts +1 -0
  562. package/dist/tokens/react.js +1 -0
  563. package/dist/tokens.d.ts +1 -0
  564. package/dist/tokens.js +1 -0
  565. package/package.json +121 -0
@@ -0,0 +1,235 @@
1
+ import { AvatarIndicatorPlacement, AvatarIndicatorPreset, AvatarShape, AvatarSize, AvatarSpacing } from "./avatar.types.js";
2
+ import { AvatarFallbackPropsArgs, AvatarGroupPropsArgs, AvatarIndicatorPropsArgs, AvatarPartProps, AvatarRootPropsArgs, fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps } from "./avatar.props.js";
3
+ import { avatar_d_exports } from "../../primitives/avatar.js";
4
+ import * as _$react from "react";
5
+ import { ReactElement } from "react";
6
+
7
+ //#region src/components/avatar/avatar.d.ts
8
+ /**
9
+ * Owns the box footprint and shape, sharing them with the strip via the rendered `data-size`/`data-shape`
10
+ * the `avatar.css` keys its metrics off, and inheriting both from an enclosing `Avatar.Group`. Compose
11
+ * `Avatar.Image` (the photo) with `Avatar.Fallback` (initials or a glyph), which Base UI shows whenever
12
+ * the image is absent or fails to load; add an `Avatar.Indicator` for a presence/status dot.
13
+ *
14
+ * a11y is two-mode: by default the avatar is **decorative** (no role; pair it with a visible name and
15
+ * give `Avatar.Image` an empty `alt`). Pass `aria-label` to make it **informative** — a standalone
16
+ * avatar then announces itself once as an image (`role="img"`).
17
+ */
18
+ declare function AvatarRoot({
19
+ size,
20
+ shape,
21
+ disabled,
22
+ ring,
23
+ role,
24
+ "aria-label": ariaLabel,
25
+ className,
26
+ children,
27
+ ...props
28
+ }: Avatar.Root.Props): ReactElement;
29
+ /**
30
+ * The profile image. Crops to cover the box and follows its shape; Base UI swaps it out for the
31
+ * `Avatar.Fallback` when `src` is missing or the load errors, and cross-fades it in on load. Keep `alt`
32
+ * empty (`""`) in the decorative case — the surrounding name is the accessible label.
33
+ */
34
+ declare function AvatarImage({
35
+ onLoadingStatusChange,
36
+ className,
37
+ ...props
38
+ }: Avatar.Image.Props): ReactElement;
39
+ /**
40
+ * Shown when no image loads — initials or a glyph on a static, accent-independent swatch. Pass `seed`
41
+ * (a user id, name, or email) to hash a stable `bg-avatar-N` colour, so the same person always gets the
42
+ * same hue; omit it for the neutral muted fill. Base UI handles the `delay` before it appears.
43
+ */
44
+ declare function AvatarFallback({
45
+ seed,
46
+ className,
47
+ children,
48
+ ...props
49
+ }: Avatar.Fallback.Props): ReactElement;
50
+ /**
51
+ * A corner presence/status dot. The `preset` picks both the fill — a `--noctis-color-presence-*` role
52
+ * (online/busy/focus/away/offline) or a status role (approved/declined/locked) — and a default
53
+ * localized screen-reader label, so the dot is never a colour-only signal. Override the announced text
54
+ * with `aria-label`. Carries a canvas-coloured ring so it reads against the photo.
55
+ */
56
+ declare function AvatarIndicator({
57
+ preset,
58
+ placement,
59
+ "aria-label": ariaLabel,
60
+ className,
61
+ children,
62
+ ...props
63
+ }: Avatar.Indicator.Props): ReactElement;
64
+ /**
65
+ * An opt-in loading placeholder shown only while an `Avatar.Image` is actively loading — distinct from
66
+ * the permanent `Avatar.Fallback` (shown on error or when there's no image). A muted fill that pulses
67
+ * gently, falling back to a static fill under reduced motion. Renders nothing once the image has loaded.
68
+ */
69
+ declare function AvatarSkeleton({
70
+ className,
71
+ ...props
72
+ }: Avatar.Skeleton.Props): ReactElement | null;
73
+ /**
74
+ * A facepile — a row of avatars overlapped with a canvas-coloured separating ring so each reads against
75
+ * the next. Set `size`/`shape` on the group and every child inherits them (an explicit prop on a child
76
+ * still wins). Beyond `max` avatars, the rest collapse into a non-interactive `+N` overflow chip.
77
+ */
78
+ declare function AvatarGroup({
79
+ max,
80
+ size,
81
+ shape,
82
+ spacing,
83
+ role,
84
+ className,
85
+ children,
86
+ ...props
87
+ }: Avatar.Group.Props): ReactElement;
88
+ /**
89
+ * The `+N` overflow chip an `Avatar.Group` renders for the members past `max`. A non-interactive,
90
+ * avatar-shaped count (so it overlaps and rings like the rest of the stack) — Avatar represents avatars,
91
+ * not controls, so it is plain markup, not a button. The visible `+N` is decorative; a visually-hidden
92
+ * "N more members" carries the count to assistive tech. To make the overflow actionable (reveal the
93
+ * hidden members), a consumer wraps the group/chip in their own trigger.
94
+ */
95
+ declare function AvatarGroupOverflow({
96
+ count,
97
+ size,
98
+ shape,
99
+ "aria-label": label,
100
+ className,
101
+ children,
102
+ ...props
103
+ }: Avatar.GroupOverflow.Props): ReactElement;
104
+ /**
105
+ * A user's profile picture, with a graceful fallback. `Avatar.Root` sets the footprint (`size`) and
106
+ * `shape` (a round `circle` or a rounded-corner box); `Avatar.Image` loads the photo and crops it to
107
+ * the box; `Avatar.Fallback` shows initials or a glyph on a stable, accent-independent swatch when no
108
+ * image loads. Built on Base UI's Avatar, so the image→fallback swap happens automatically on a load
109
+ * error, with no layout shift, and the image cross-fades in.
110
+ *
111
+ * Compose from parts: `Avatar.Root` owns the box, `Avatar.Image` the photo, `Avatar.Fallback` the
112
+ * initials behind it, `Avatar.Indicator` a presence/status dot, and `Avatar.Skeleton` a loading
113
+ * placeholder. Stack many with `Avatar.Group` (which renders an `Avatar.GroupOverflow` `+N` chip past
114
+ * its `max`).
115
+ *
116
+ * The runtime compound is a plain object (kept tree-shakeable); per-part prop and state types are
117
+ * exposed through the matching `Avatar` namespace — e.g. `Avatar.Fallback.Props`.
118
+ */
119
+ declare const Avatar: {
120
+ /** Owns the footprint + shape. `Avatar.Root.props({ size, shape, ring, disabled })` → its spreadable prop bag. */Root: typeof AvatarRoot & {
121
+ props: typeof rootProps;
122
+ }; /** The profile image. `Avatar.Image.props()` → its spreadable prop bag. */
123
+ Image: typeof AvatarImage & {
124
+ props: typeof imageProps;
125
+ }; /** The fallback. `Avatar.Fallback.props({ seed })` → its spreadable prop bag for a foreign element. */
126
+ Fallback: typeof AvatarFallback & {
127
+ props: typeof fallbackProps;
128
+ }; /** The presence/status corner dot. `Avatar.Indicator.props({ preset, placement })` → its prop bag. */
129
+ Indicator: typeof AvatarIndicator & {
130
+ props: typeof indicatorProps;
131
+ }; /** The opt-in loading placeholder, shown only while an image loads. */
132
+ Skeleton: typeof AvatarSkeleton; /** A facepile of overlapped avatars. `Avatar.Group.props({ spacing })` → its prop bag. */
133
+ Group: typeof AvatarGroup & {
134
+ props: typeof groupProps;
135
+ }; /** The `+N` overflow chip. `Avatar.GroupOverflow.props({ size, shape })` → its prop bag. */
136
+ GroupOverflow: typeof AvatarGroupOverflow & {
137
+ props: typeof groupOverflowProps;
138
+ };
139
+ };
140
+ /**
141
+ * Per-part prop and state types, mirroring Base UI's `Component.Part.Props` convention. Types-only — it
142
+ * emits no runtime code and merges with the `Avatar` object above, so `Avatar.Fallback` is the component
143
+ * value while `Avatar.Fallback.Props` is its prop type.
144
+ */
145
+ declare namespace Avatar {
146
+ /** Footprint scale — `2xs` … `xl`. */
147
+ type Size = AvatarSize;
148
+ /** Shape — `circle` or `rounded`. */
149
+ type Shape = AvatarShape;
150
+ /** The spreadable data-attribute prop bag every `Avatar.*.props()` returns (D12). */
151
+ type PartProps = AvatarPartProps;
152
+ namespace Root {
153
+ type Props = avatar_d_exports.Avatar.Root.Props & {
154
+ /**
155
+ * Footprint scale — height and width. Inherited from an enclosing `Avatar.Group` when unset.
156
+ * @default "md"
157
+ */
158
+ size?: AvatarSize;
159
+ /**
160
+ * Shape — a round `circle` or a rounded-corner box. Inherited from an `Avatar.Group` when unset.
161
+ * @default "circle"
162
+ */
163
+ shape?: AvatarShape;
164
+ /**
165
+ * Dim the avatar and gate its interactive states — an inactive or deactivated user.
166
+ * @default false
167
+ */
168
+ disabled?: boolean;
169
+ /**
170
+ * Draw a hairline ring separating the avatar from a same-toned surface.
171
+ * @default false
172
+ */
173
+ ring?: boolean;
174
+ };
175
+ type State = avatar_d_exports.Avatar.Root.State;
176
+ /** Argument to the `Avatar.Root.props(...)` escape-hatch helper. */
177
+ type PropsArgs = AvatarRootPropsArgs;
178
+ }
179
+ namespace Image {
180
+ type Props = avatar_d_exports.Avatar.Image.Props;
181
+ type State = avatar_d_exports.Avatar.Image.State;
182
+ }
183
+ namespace Fallback {
184
+ type Props = avatar_d_exports.Avatar.Fallback.Props & {
185
+ /** A stable identifier hashed to one of ten `bg-avatar-N` swatches; omit for the neutral muted fill. */seed?: string;
186
+ };
187
+ type State = avatar_d_exports.Avatar.Fallback.State;
188
+ /** Argument to the `Avatar.Fallback.props(...)` escape-hatch helper. */
189
+ type PropsArgs = AvatarFallbackPropsArgs;
190
+ }
191
+ namespace Indicator {
192
+ type Props = Omit<_$react.ComponentPropsWithoutRef<"span">, "color"> & {
193
+ /** The presence (online/busy/focus/away/offline) or status (approved/declined/locked) preset. */preset: AvatarIndicatorPreset;
194
+ /**
195
+ * Which logical corner the dot sits in.
196
+ * @default "bottom"
197
+ */
198
+ placement?: AvatarIndicatorPlacement;
199
+ };
200
+ /** Argument to the `Avatar.Indicator.props(...)` escape-hatch helper. */
201
+ type PropsArgs = AvatarIndicatorPropsArgs;
202
+ }
203
+ namespace Skeleton {
204
+ type Props = _$react.ComponentPropsWithoutRef<"span">;
205
+ }
206
+ namespace Group {
207
+ type Props = Omit<_$react.ComponentPropsWithoutRef<"div">, "color"> & {
208
+ /**
209
+ * The maximum number of avatars shown before the rest collapse into a `+N` overflow chip.
210
+ * @default 5
211
+ */
212
+ max?: number; /** Footprint scale shared with every child avatar that doesn't set its own. */
213
+ size?: AvatarSize; /** Shape shared with every child avatar that doesn't set its own. */
214
+ shape?: AvatarShape;
215
+ /**
216
+ * How tightly the avatars overlap.
217
+ * @default "cozy"
218
+ */
219
+ spacing?: AvatarSpacing;
220
+ };
221
+ /** Argument to the `Avatar.Group.props(...)` escape-hatch helper. */
222
+ type PropsArgs = AvatarGroupPropsArgs;
223
+ }
224
+ namespace GroupOverflow {
225
+ type Props = _$react.ComponentPropsWithoutRef<"span"> & {
226
+ /** The number of hidden members — rendered as `+{count}`. Supplied by `Avatar.Group`. */count: number; /** Footprint scale; inherited from the group when unset. */
227
+ size?: AvatarSize; /** Shape; inherited from the group when unset. */
228
+ shape?: AvatarShape;
229
+ };
230
+ /** Argument to the `Avatar.GroupOverflow.props(...)` escape-hatch helper. */
231
+ type PropsArgs = AvatarRootPropsArgs;
232
+ }
233
+ }
234
+ //#endregion
235
+ export { Avatar };
@@ -0,0 +1,208 @@
1
+ "use client";
2
+ import { useNoctisStringFormatter } from "../../core/use-injected-labels.js";
3
+ import { VisuallyHidden } from "../../core/visually-hidden/visually-hidden.js";
4
+ import { avatar_exports } from "../../primitives/avatar.js";
5
+ import { AvatarGroupProvider, AvatarImageStatusProvider, useAvatarGroup, useAvatarImageStatus } from "./avatar.context.js";
6
+ import { AVATAR_SLOTS } from "./avatar.slots.js";
7
+ import { fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps } from "./avatar.props.js";
8
+ import { Children, isValidElement, useMemo, useState } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { avatarIndex } from "@stridge/noctis-design-tokens";
11
+ //#region src/components/avatar/avatar.tsx
12
+ /** The presence presets, separated from status so the indicator picks the right localized SR key + role. */
13
+ const PRESENCE_PRESETS = new Set([
14
+ "online",
15
+ "busy",
16
+ "focus",
17
+ "away",
18
+ "offline"
19
+ ]);
20
+ /**
21
+ * Owns the box footprint and shape, sharing them with the strip via the rendered `data-size`/`data-shape`
22
+ * the `avatar.css` keys its metrics off, and inheriting both from an enclosing `Avatar.Group`. Compose
23
+ * `Avatar.Image` (the photo) with `Avatar.Fallback` (initials or a glyph), which Base UI shows whenever
24
+ * the image is absent or fails to load; add an `Avatar.Indicator` for a presence/status dot.
25
+ *
26
+ * a11y is two-mode: by default the avatar is **decorative** (no role; pair it with a visible name and
27
+ * give `Avatar.Image` an empty `alt`). Pass `aria-label` to make it **informative** — a standalone
28
+ * avatar then announces itself once as an image (`role="img"`).
29
+ */
30
+ function AvatarRoot({ size, shape, disabled, ring, role, "aria-label": ariaLabel, className, children, ...props }) {
31
+ const group = useAvatarGroup();
32
+ const resolvedSize = size ?? group?.size ?? "md";
33
+ const resolvedShape = shape ?? group?.shape ?? "circle";
34
+ const [status, setStatus] = useState("idle");
35
+ const statusValue = useMemo(() => ({
36
+ status,
37
+ setStatus
38
+ }), [status]);
39
+ return /* @__PURE__ */ jsx(avatar_exports.Avatar.Root, {
40
+ "data-slot": AVATAR_SLOTS.root,
41
+ "data-size": resolvedSize,
42
+ "data-shape": resolvedShape,
43
+ "data-disabled": disabled ? "" : void 0,
44
+ "data-ring": ring ? "" : void 0,
45
+ role: role ?? (ariaLabel ? "img" : void 0),
46
+ "aria-label": ariaLabel,
47
+ className,
48
+ ...props,
49
+ children: /* @__PURE__ */ jsx(AvatarImageStatusProvider, {
50
+ value: statusValue,
51
+ children
52
+ })
53
+ });
54
+ }
55
+ /**
56
+ * The profile image. Crops to cover the box and follows its shape; Base UI swaps it out for the
57
+ * `Avatar.Fallback` when `src` is missing or the load errors, and cross-fades it in on load. Keep `alt`
58
+ * empty (`""`) in the decorative case — the surrounding name is the accessible label.
59
+ */
60
+ function AvatarImage({ onLoadingStatusChange, className, ...props }) {
61
+ const imageStatus = useAvatarImageStatus();
62
+ const handleLoadingStatusChange = (next) => {
63
+ imageStatus?.setStatus(next);
64
+ onLoadingStatusChange?.(next);
65
+ };
66
+ return /* @__PURE__ */ jsx(avatar_exports.Avatar.Image, {
67
+ "data-slot": AVATAR_SLOTS.image,
68
+ onLoadingStatusChange: handleLoadingStatusChange,
69
+ className,
70
+ ...props
71
+ });
72
+ }
73
+ /**
74
+ * Shown when no image loads — initials or a glyph on a static, accent-independent swatch. Pass `seed`
75
+ * (a user id, name, or email) to hash a stable `bg-avatar-N` colour, so the same person always gets the
76
+ * same hue; omit it for the neutral muted fill. Base UI handles the `delay` before it appears.
77
+ */
78
+ function AvatarFallback({ seed, className, children, ...props }) {
79
+ const dataIndex = seed === void 0 ? void 0 : String(avatarIndex(seed));
80
+ return /* @__PURE__ */ jsx(avatar_exports.Avatar.Fallback, {
81
+ "data-slot": AVATAR_SLOTS.fallback,
82
+ "data-avatar-index": dataIndex,
83
+ className,
84
+ ...props,
85
+ children
86
+ });
87
+ }
88
+ /**
89
+ * A corner presence/status dot. The `preset` picks both the fill — a `--noctis-color-presence-*` role
90
+ * (online/busy/focus/away/offline) or a status role (approved/declined/locked) — and a default
91
+ * localized screen-reader label, so the dot is never a colour-only signal. Override the announced text
92
+ * with `aria-label`. Carries a canvas-coloured ring so it reads against the photo.
93
+ */
94
+ function AvatarIndicator({ preset, placement = "bottom", "aria-label": ariaLabel, className, children, ...props }) {
95
+ const formatter = useNoctisStringFormatter();
96
+ const family = PRESENCE_PRESETS.has(preset) ? "presence" : "status";
97
+ const label = ariaLabel ?? formatter.format(`avatar.${family}.${preset}`);
98
+ return /* @__PURE__ */ jsxs("span", {
99
+ "data-slot": AVATAR_SLOTS.indicator,
100
+ "data-preset": preset,
101
+ "data-placement": placement,
102
+ className,
103
+ ...props,
104
+ children: [/* @__PURE__ */ jsx(VisuallyHidden, { children: label }), children]
105
+ });
106
+ }
107
+ /**
108
+ * An opt-in loading placeholder shown only while an `Avatar.Image` is actively loading — distinct from
109
+ * the permanent `Avatar.Fallback` (shown on error or when there's no image). A muted fill that pulses
110
+ * gently, falling back to a static fill under reduced motion. Renders nothing once the image has loaded.
111
+ */
112
+ function AvatarSkeleton({ className, ...props }) {
113
+ if (useAvatarImageStatus()?.status !== "loading") return null;
114
+ return /* @__PURE__ */ jsx("span", {
115
+ "data-slot": AVATAR_SLOTS.skeleton,
116
+ "aria-hidden": true,
117
+ className,
118
+ ...props
119
+ });
120
+ }
121
+ /**
122
+ * A facepile — a row of avatars overlapped with a canvas-coloured separating ring so each reads against
123
+ * the next. Set `size`/`shape` on the group and every child inherits them (an explicit prop on a child
124
+ * still wins). Beyond `max` avatars, the rest collapse into a non-interactive `+N` overflow chip.
125
+ */
126
+ function AvatarGroup({ max = 5, size, shape, spacing = "cozy", role = "group", className, children, ...props }) {
127
+ const items = Children.toArray(children).filter(isValidElement);
128
+ const visible = items.slice(0, max);
129
+ const overflow = items.length - visible.length;
130
+ return /* @__PURE__ */ jsx("div", {
131
+ "data-slot": AVATAR_SLOTS.group,
132
+ "data-spacing": spacing,
133
+ role,
134
+ className,
135
+ ...props,
136
+ children: /* @__PURE__ */ jsxs(AvatarGroupProvider, {
137
+ value: {
138
+ size,
139
+ shape
140
+ },
141
+ children: [visible, overflow > 0 ? /* @__PURE__ */ jsx(AvatarGroupOverflow, {
142
+ count: overflow,
143
+ size,
144
+ shape
145
+ }) : null]
146
+ })
147
+ });
148
+ }
149
+ /**
150
+ * The `+N` overflow chip an `Avatar.Group` renders for the members past `max`. A non-interactive,
151
+ * avatar-shaped count (so it overlaps and rings like the rest of the stack) — Avatar represents avatars,
152
+ * not controls, so it is plain markup, not a button. The visible `+N` is decorative; a visually-hidden
153
+ * "N more members" carries the count to assistive tech. To make the overflow actionable (reveal the
154
+ * hidden members), a consumer wraps the group/chip in their own trigger.
155
+ */
156
+ function AvatarGroupOverflow({ count, size, shape, "aria-label": label, className, children, ...props }) {
157
+ const group = useAvatarGroup();
158
+ const resolvedSize = size ?? group?.size ?? "md";
159
+ const resolvedShape = shape ?? group?.shape ?? "circle";
160
+ const formatter = useNoctisStringFormatter();
161
+ const announced = label ?? formatter.format("avatar.overflowLabel", { count });
162
+ return /* @__PURE__ */ jsxs("span", {
163
+ "data-slot": AVATAR_SLOTS.root,
164
+ "data-size": resolvedSize,
165
+ "data-shape": resolvedShape,
166
+ "data-avatar-overflow": "",
167
+ className,
168
+ ...props,
169
+ children: [/* @__PURE__ */ jsx("span", {
170
+ "data-slot": AVATAR_SLOTS.fallback,
171
+ "aria-hidden": true,
172
+ children: children ?? `+${count}`
173
+ }), /* @__PURE__ */ jsx(VisuallyHidden, { children: announced })]
174
+ });
175
+ }
176
+ /**
177
+ * A user's profile picture, with a graceful fallback. `Avatar.Root` sets the footprint (`size`) and
178
+ * `shape` (a round `circle` or a rounded-corner box); `Avatar.Image` loads the photo and crops it to
179
+ * the box; `Avatar.Fallback` shows initials or a glyph on a stable, accent-independent swatch when no
180
+ * image loads. Built on Base UI's Avatar, so the image→fallback swap happens automatically on a load
181
+ * error, with no layout shift, and the image cross-fades in.
182
+ *
183
+ * Compose from parts: `Avatar.Root` owns the box, `Avatar.Image` the photo, `Avatar.Fallback` the
184
+ * initials behind it, `Avatar.Indicator` a presence/status dot, and `Avatar.Skeleton` a loading
185
+ * placeholder. Stack many with `Avatar.Group` (which renders an `Avatar.GroupOverflow` `+N` chip past
186
+ * its `max`).
187
+ *
188
+ * The runtime compound is a plain object (kept tree-shakeable); per-part prop and state types are
189
+ * exposed through the matching `Avatar` namespace — e.g. `Avatar.Fallback.Props`.
190
+ */
191
+ const Avatar = {
192
+ /** Owns the footprint + shape. `Avatar.Root.props({ size, shape, ring, disabled })` → its spreadable prop bag. */
193
+ Root: Object.assign(AvatarRoot, { props: rootProps }),
194
+ /** The profile image. `Avatar.Image.props()` → its spreadable prop bag. */
195
+ Image: Object.assign(AvatarImage, { props: imageProps }),
196
+ /** The fallback. `Avatar.Fallback.props({ seed })` → its spreadable prop bag for a foreign element. */
197
+ Fallback: Object.assign(AvatarFallback, { props: fallbackProps }),
198
+ /** The presence/status corner dot. `Avatar.Indicator.props({ preset, placement })` → its prop bag. */
199
+ Indicator: Object.assign(AvatarIndicator, { props: indicatorProps }),
200
+ /** The opt-in loading placeholder, shown only while an image loads. */
201
+ Skeleton: AvatarSkeleton,
202
+ /** A facepile of overlapped avatars. `Avatar.Group.props({ spacing })` → its prop bag. */
203
+ Group: Object.assign(AvatarGroup, { props: groupProps }),
204
+ /** The `+N` overflow chip. `Avatar.GroupOverflow.props({ size, shape })` → its prop bag. */
205
+ GroupOverflow: Object.assign(AvatarGroupOverflow, { props: groupOverflowProps })
206
+ };
207
+ //#endregion
208
+ export { Avatar };
@@ -0,0 +1,86 @@
1
+ import { AvatarIndicatorPlacement, AvatarIndicatorPreset, AvatarShape, AvatarSize, AvatarSpacing } from "./avatar.types.js";
2
+
3
+ //#region src/components/avatar/avatar.props.d.ts
4
+ /** A spreadable data-attribute prop bag — the shape every `Avatar.*.props()` returns. */
5
+ type AvatarPartProps = {
6
+ /** The slot value the matching `avatar.css` rules anchor on. */"data-slot": string; /** Forwarded verbatim — styling is attribute-driven, so this is an optional consumer passthrough. */
7
+ className?: string; /** A data-attribute present (string) or absent (`undefined`); never `false`. */
8
+ [attr: `data-${string}`]: string | undefined;
9
+ };
10
+ /** Common shape: every part's `.props()` accepts an optional `className` passthrough. */
11
+ interface BasePropsArgs {
12
+ /** Forwarded verbatim onto the returned prop bag. */
13
+ className?: string;
14
+ }
15
+ /** Argument to `Avatar.Root.props(...)` — the box's size + shape and its ring/disabled flags. */
16
+ interface AvatarRootPropsArgs extends BasePropsArgs {
17
+ /** Footprint scale — `2xs` | `xs` | `sm` | `md` | `lg` | `xl`. @default "md" */
18
+ size?: AvatarSize;
19
+ /** Shape — `circle` (fully round) or `rounded` (rounded corners). @default "circle" */
20
+ shape?: AvatarShape;
21
+ /** Dim the avatar and gate its interactive states — an inactive/deactivated user. @default false */
22
+ disabled?: boolean;
23
+ /** Draw a hairline ring separating the avatar from a same-toned surface. @default false */
24
+ ring?: boolean;
25
+ }
26
+ /** Argument to a stateless part's `.props(...)` — no recipe of its own; metrics flow from the root. */
27
+ type AvatarStatelessPropsArgs = BasePropsArgs;
28
+ /** Argument to `Avatar.Fallback.props(...)` — the seed that selects the static swatch the fill reads. */
29
+ interface AvatarFallbackPropsArgs extends BasePropsArgs {
30
+ /**
31
+ * A stable identifier (a user id, name, or email) hashed to one of the ten `bg-avatar-N` swatches,
32
+ * so the same person always lands on the same colour. Omit to fall back to the neutral muted fill.
33
+ */
34
+ seed?: string;
35
+ }
36
+ /** Argument to `Avatar.Indicator.props(...)` — the corner presence/status dot's preset and placement. */
37
+ interface AvatarIndicatorPropsArgs extends BasePropsArgs {
38
+ /** The presence (online/busy/focus/away/offline) or status (approved/declined/locked) preset. */
39
+ preset: AvatarIndicatorPreset;
40
+ /** Which logical corner the dot sits in. @default "bottom" */
41
+ placement?: AvatarIndicatorPlacement;
42
+ }
43
+ /** Argument to `Avatar.Group.props(...)` — the overlapped row's spacing tightness. */
44
+ interface AvatarGroupPropsArgs extends BasePropsArgs {
45
+ /** How tightly the avatars overlap. @default "cozy" */
46
+ spacing?: AvatarSpacing;
47
+ }
48
+ /** Root prop bag: `data-slot` plus the `data-size`/`data-shape` the descendant rules read, and the flags. */
49
+ declare function rootProps({
50
+ size,
51
+ shape,
52
+ disabled,
53
+ ring,
54
+ className
55
+ }?: AvatarRootPropsArgs): AvatarPartProps;
56
+ /** Image prop bag: just the slot anchor (the box metrics flow from the root). */
57
+ declare function imageProps({
58
+ className
59
+ }?: AvatarStatelessPropsArgs): AvatarPartProps;
60
+ /** Fallback prop bag: the slot anchor plus the hashed `data-avatar-index` that selects the swatch fill. */
61
+ declare function fallbackProps({
62
+ seed,
63
+ className
64
+ }?: AvatarFallbackPropsArgs): AvatarPartProps;
65
+ /** Indicator prop bag: the slot anchor plus the `data-preset`/`data-placement` the dot reads its fill + corner off. */
66
+ declare function indicatorProps({
67
+ preset,
68
+ placement,
69
+ className
70
+ }: AvatarIndicatorPropsArgs): AvatarPartProps;
71
+ /** Group prop bag: the slot anchor plus the `data-spacing` the overlap rules key off. */
72
+ declare function groupProps({
73
+ spacing,
74
+ className
75
+ }?: AvatarGroupPropsArgs): AvatarPartProps;
76
+ /**
77
+ * Overflow-chip prop bag: the `+N` chip reuses the `noctis-avatar` slot (so it inherits the box,
78
+ * overlap, and separating ring) marked with `data-avatar-overflow`. Spread onto the non-interactive chip.
79
+ */
80
+ declare function groupOverflowProps({
81
+ size,
82
+ shape,
83
+ className
84
+ }?: AvatarRootPropsArgs): AvatarPartProps;
85
+ //#endregion
86
+ export { AvatarFallbackPropsArgs, AvatarGroupPropsArgs, AvatarIndicatorPropsArgs, AvatarPartProps, AvatarRootPropsArgs, fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps };
@@ -0,0 +1,78 @@
1
+ import { AVATAR_SLOTS } from "./avatar.slots.js";
2
+ import { avatarIndex } from "@stridge/noctis-design-tokens";
3
+ //#region src/components/avatar/avatar.props.ts
4
+ /**
5
+ * The D12 unified variant contract for Avatar — the data-attribute-native styling helpers.
6
+ *
7
+ * Each compound part exposes a `props(...)` builder returning a **spreadable props object** of the form
8
+ * `{ "data-slot": "noctis-avatar-<part>", ...dataAttrs }`, derived from the part's size/shape/seed
9
+ * inputs. Under the single-`data-slot` anchor model the `data-slot` is the only styling hook needed —
10
+ * `avatar.css` keys every rule off it plus the `data-*` recipe — so spreading a part's `props()` onto a
11
+ * *foreign* element styles it as that part:
12
+ *
13
+ * <span {...Avatar.Root.props({ size: "lg" })}>
14
+ * <img {...Avatar.Image.props()} src="…" alt="Ada" />
15
+ * </span>
16
+ * // → <span data-slot="noctis-avatar" data-size="lg" data-shape="circle">
17
+ *
18
+ * The escape hatch carries no className (styling is attribute-driven); an optional `className`
19
+ * passthrough is accepted and forwarded verbatim. The same variant→data-attribute→values mapping is
20
+ * emitted as data from the token graph (`generated/declarations.json` → `variantSchema`) so non-React /
21
+ * agent consumers can hand-write the markup from the docs.
22
+ */
23
+ const withClassName = (bag, className) => className === void 0 ? bag : {
24
+ ...bag,
25
+ className
26
+ };
27
+ /** A boolean flag → a present (empty-string) or absent data-attribute; never `false`. */
28
+ const flag = (on) => on ? "" : void 0;
29
+ /** Root prop bag: `data-slot` plus the `data-size`/`data-shape` the descendant rules read, and the flags. */
30
+ function rootProps({ size = "md", shape = "circle", disabled, ring, className } = {}) {
31
+ return withClassName({
32
+ "data-slot": AVATAR_SLOTS.root,
33
+ "data-size": size,
34
+ "data-shape": shape,
35
+ "data-disabled": flag(disabled),
36
+ "data-ring": flag(ring)
37
+ }, className);
38
+ }
39
+ /** Image prop bag: just the slot anchor (the box metrics flow from the root). */
40
+ function imageProps({ className } = {}) {
41
+ return withClassName({ "data-slot": AVATAR_SLOTS.image }, className);
42
+ }
43
+ /** Fallback prop bag: the slot anchor plus the hashed `data-avatar-index` that selects the swatch fill. */
44
+ function fallbackProps({ seed, className } = {}) {
45
+ return withClassName({
46
+ "data-slot": AVATAR_SLOTS.fallback,
47
+ "data-avatar-index": seed === void 0 ? void 0 : String(avatarIndex(seed))
48
+ }, className);
49
+ }
50
+ /** Indicator prop bag: the slot anchor plus the `data-preset`/`data-placement` the dot reads its fill + corner off. */
51
+ function indicatorProps({ preset, placement = "bottom", className }) {
52
+ return withClassName({
53
+ "data-slot": AVATAR_SLOTS.indicator,
54
+ "data-preset": preset,
55
+ "data-placement": placement
56
+ }, className);
57
+ }
58
+ /** Group prop bag: the slot anchor plus the `data-spacing` the overlap rules key off. */
59
+ function groupProps({ spacing = "cozy", className } = {}) {
60
+ return withClassName({
61
+ "data-slot": AVATAR_SLOTS.group,
62
+ "data-spacing": spacing
63
+ }, className);
64
+ }
65
+ /**
66
+ * Overflow-chip prop bag: the `+N` chip reuses the `noctis-avatar` slot (so it inherits the box,
67
+ * overlap, and separating ring) marked with `data-avatar-overflow`. Spread onto the non-interactive chip.
68
+ */
69
+ function groupOverflowProps({ size = "md", shape = "circle", className } = {}) {
70
+ return withClassName({
71
+ "data-slot": AVATAR_SLOTS.root,
72
+ "data-size": size,
73
+ "data-shape": shape,
74
+ "data-avatar-overflow": ""
75
+ }, className);
76
+ }
77
+ //#endregion
78
+ export { fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps };
@@ -0,0 +1,35 @@
1
+ //#region src/components/avatar/avatar.slots.d.ts
2
+ /**
3
+ * The `data-*` hooks `Avatar` stamps on its parts, for host-side styling and tests. Slot values mark
4
+ * each rendered element; the `data-size`/`data-shape` axes carry the recipe the precompiled
5
+ * `avatar.css` keys its box metrics off, and `data-avatar-index` selects which static fallback swatch
6
+ * paints. The group lays out an overlapped row (`data-spacing`); its `+N` overflow chip is a
7
+ * non-interactive avatar-shaped count marked with `data-avatar-overflow` (it reuses the `noctis-avatar`
8
+ * slot so it inherits the box/overlap/ring). Base UI's Avatar drives the
9
+ * image-loading status the fallback shows behind, plus the `data-starting-style` enter transition the
10
+ * image cross-fades on.
11
+ */
12
+ declare enum AvatarDataAttributes {
13
+ /** The root avatar element. */
14
+ slot = "data-slot",
15
+ /** The size scale — `2xs` | `xs` | `sm` | `md` | `lg` | `xl`; the generated layer keys the per-size internals off it. */
16
+ size = "data-size",
17
+ /** The shape — `circle` (default, fully round) | `rounded` (rounded corners). */
18
+ shape = "data-shape",
19
+ /** `1`–`10`, the stable hashed swatch index the fallback fill reads its `bg-avatar-N` role from. */
20
+ avatarIndex = "data-avatar-index",
21
+ /** Present when the avatar is dimmed/inactive — gates interactive states and applies the disabled opacity. */
22
+ disabled = "data-disabled",
23
+ /** Present when the avatar carries a hairline ring separating it from its surface. */
24
+ ring = "data-ring",
25
+ /** The indicator preset — a presence or status value; the dot reads its fill role from it. */
26
+ preset = "data-preset",
27
+ /** The indicator's logical corner — `top` | `bottom` (default). */
28
+ placement = "data-placement",
29
+ /** The group's overlap tightness — `tight` | `cozy` (default). */
30
+ spacing = "data-spacing",
31
+ /** Marks the group's `+N` overflow chip (a non-interactive avatar-shaped count). */
32
+ overflow = "data-avatar-overflow"
33
+ }
34
+ //#endregion
35
+ export { AvatarDataAttributes };