@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,53 @@
1
+ "use client";
2
+ import { Icon } from "../../../icons/icon.js";
3
+ import { SearchIcon, SpinnerIcon } from "../../../icons/glyphs.js";
4
+ import { dialog_exports } from "../../../primitives/dialog.js";
5
+ import { useSearchDialogContext } from "../search-dialog.context.js";
6
+ import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/search-dialog/parts/input.tsx
9
+ /**
10
+ * The header row: the search glyph, the query field, an in-flight spinner, and the `Esc` close chip.
11
+ * Reads the query, the in-flight state, and the key handler from context; the field auto-focuses when
12
+ * the dialog opens (`SearchDialog.Root` points Base UI's `initialFocus` at it). The `Esc` chip's label
13
+ * stays decorative — the dialog's own Escape handling closes it.
14
+ *
15
+ * Slot: `search-dialog-header` on the row, `search-dialog-input` on the field.
16
+ *
17
+ * @see {@link SearchDialog.Input.Props}
18
+ */
19
+ function SearchDialogInput({ placeholder, ...props }) {
20
+ const { state, actions, meta } = useSearchDialogContext("Input");
21
+ return /* @__PURE__ */ jsxs("div", {
22
+ "data-slot": SEARCH_DIALOG_SLOTS.header,
23
+ children: [
24
+ /* @__PURE__ */ jsx(Icon, {
25
+ icon: SearchIcon,
26
+ size: "sm"
27
+ }),
28
+ /* @__PURE__ */ jsx("input", {
29
+ ...props,
30
+ ref: meta.inputRef,
31
+ "data-slot": SEARCH_DIALOG_SLOTS.input,
32
+ type: "search",
33
+ value: state.query,
34
+ onChange: (event) => actions.setQuery(event.target.value),
35
+ onKeyDown: actions.onKeyDown,
36
+ placeholder,
37
+ "aria-label": meta.title,
38
+ autoComplete: "off",
39
+ spellCheck: false
40
+ }),
41
+ state.searching ? /* @__PURE__ */ jsx(Icon, {
42
+ icon: SpinnerIcon,
43
+ size: "sm"
44
+ }) : null,
45
+ /* @__PURE__ */ jsx(dialog_exports.Dialog.Close, {
46
+ "data-allow-literal": true,
47
+ children: "Esc"
48
+ })
49
+ ]
50
+ });
51
+ }
52
+ //#endregion
53
+ export { SearchDialogInput };
@@ -0,0 +1,80 @@
1
+ import { ReactElement, ReactNode } from "react";
2
+
3
+ //#region src/components/search-dialog/parts/messages.d.ts
4
+ /**
5
+ * The loading message, shown while the search index is still loading — before any query can run.
6
+ * Renders nothing once the index is ready.
7
+ *
8
+ * Slot: none — rendered inside the result pane; the loading state, not an element, marks it.
9
+ *
10
+ * @see {@link SearchDialog.Loading.Props}
11
+ */
12
+ declare function SearchDialogLoading({
13
+ children
14
+ }: SearchDialogLoading.Props): ReactElement | null;
15
+ declare namespace SearchDialogLoading {
16
+ type Props = {
17
+ /** The loading copy. */children?: ReactNode;
18
+ };
19
+ }
20
+ /**
21
+ * The non-result messages: the empty-query prompt, the in-flight `searching` line, and the
22
+ * `noResults` line (which receives the trimmed query so it can quote the term). The root gates which
23
+ * one shows; the part only supplies the copy, so it renders nothing while results are present.
24
+ *
25
+ * Slot: none — rendered inside the result pane; the gated state, not an element, marks it.
26
+ *
27
+ * @see {@link SearchDialog.Empty.Props}
28
+ */
29
+ declare function SearchDialogEmpty({
30
+ children,
31
+ searching,
32
+ noResults
33
+ }: SearchDialogEmpty.Props): ReactElement | null;
34
+ declare namespace SearchDialogEmpty {
35
+ type Props = {
36
+ /** The empty-query prompt, shown before anything is typed. */children?: ReactNode; /** The in-flight line, shown while a query is searching with nothing settled yet. */
37
+ searching?: ReactNode; /** The leading no-results copy; the quoted query is appended after it. */
38
+ noResults?: ReactNode;
39
+ };
40
+ }
41
+ /**
42
+ * The footer row holding the keyboard hints.
43
+ *
44
+ * Slot: `search-dialog-footer`.
45
+ *
46
+ * @see {@link SearchDialog.Footer.Props}
47
+ */
48
+ declare function SearchDialogFooter({
49
+ children,
50
+ className,
51
+ ...props
52
+ }: SearchDialogFooter.Props): ReactElement;
53
+ declare namespace SearchDialogFooter {
54
+ type Props = {
55
+ /** The `SearchDialog.Hint`s. */children?: ReactNode; /** Classes merged onto the footer. */
56
+ className?: string;
57
+ };
58
+ }
59
+ /**
60
+ * One footer hint: a keys cluster (compose `Kbd`s) beside its label.
61
+ *
62
+ * Slot: none — rendered inside the footer.
63
+ *
64
+ * @see {@link SearchDialog.Hint.Props}
65
+ */
66
+ declare function SearchDialogHint({
67
+ label,
68
+ children,
69
+ className,
70
+ ...props
71
+ }: SearchDialogHint.Props): ReactElement;
72
+ declare namespace SearchDialogHint {
73
+ type Props = {
74
+ /** What the keys do. */label?: ReactNode; /** The keys — typically one or more `Kbd`s. */
75
+ children?: ReactNode; /** Classes merged onto the hint. */
76
+ className?: string;
77
+ };
78
+ }
79
+ //#endregion
80
+ export { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading };
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import { searchDialogPhase, useSearchDialogContext } from "../search-dialog.context.js";
3
+ import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
4
+ import clsx$1 from "clsx";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/components/search-dialog/parts/messages.tsx
7
+ /** The centred message shell shared by the loading and empty states, filling the result pane. */
8
+ function Centered({ children }) {
9
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { children }) }) });
10
+ }
11
+ /**
12
+ * The loading message, shown while the search index is still loading — before any query can run.
13
+ * Renders nothing once the index is ready.
14
+ *
15
+ * Slot: none — rendered inside the result pane; the loading state, not an element, marks it.
16
+ *
17
+ * @see {@link SearchDialog.Loading.Props}
18
+ */
19
+ function SearchDialogLoading({ children }) {
20
+ const { state } = useSearchDialogContext("Loading");
21
+ if (searchDialogPhase(state) !== "loading") return null;
22
+ return /* @__PURE__ */ jsx(Centered, { children });
23
+ }
24
+ /**
25
+ * The non-result messages: the empty-query prompt, the in-flight `searching` line, and the
26
+ * `noResults` line (which receives the trimmed query so it can quote the term). The root gates which
27
+ * one shows; the part only supplies the copy, so it renders nothing while results are present.
28
+ *
29
+ * Slot: none — rendered inside the result pane; the gated state, not an element, marks it.
30
+ *
31
+ * @see {@link SearchDialog.Empty.Props}
32
+ */
33
+ function SearchDialogEmpty({ children, searching, noResults }) {
34
+ const { state } = useSearchDialogContext("Empty");
35
+ const phase = searchDialogPhase(state);
36
+ if (phase === "empty") return /* @__PURE__ */ jsx(Centered, { children });
37
+ if (phase === "searching") return /* @__PURE__ */ jsx(Centered, { children: searching });
38
+ if (phase === "no-results") return /* @__PURE__ */ jsxs(Centered, { children: [
39
+ noResults,
40
+ " ",
41
+ /* @__PURE__ */ jsx("span", { children: `“${state.query.trim()}”` })
42
+ ] });
43
+ return null;
44
+ }
45
+ /**
46
+ * The footer row holding the keyboard hints.
47
+ *
48
+ * Slot: `search-dialog-footer`.
49
+ *
50
+ * @see {@link SearchDialog.Footer.Props}
51
+ */
52
+ function SearchDialogFooter({ children, className, ...props }) {
53
+ return /* @__PURE__ */ jsx("div", {
54
+ "data-slot": SEARCH_DIALOG_SLOTS.footer,
55
+ className: clsx$1(className),
56
+ ...props,
57
+ children
58
+ });
59
+ }
60
+ /**
61
+ * One footer hint: a keys cluster (compose `Kbd`s) beside its label.
62
+ *
63
+ * Slot: none — rendered inside the footer.
64
+ *
65
+ * @see {@link SearchDialog.Hint.Props}
66
+ */
67
+ function SearchDialogHint({ label, children, className, ...props }) {
68
+ return /* @__PURE__ */ jsxs("span", {
69
+ className: clsx$1(className),
70
+ ...props,
71
+ children: [/* @__PURE__ */ jsx("span", { children }), /* @__PURE__ */ jsx("span", { children: label })]
72
+ });
73
+ }
74
+ //#endregion
75
+ export { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading };
@@ -0,0 +1,43 @@
1
+ import { SearchResult } from "../search-dialog.context.js";
2
+ import { ReactElement, ReactNode } from "react";
3
+
4
+ //#region src/components/search-dialog/parts/results.d.ts
5
+ /**
6
+ * The listbox container holding the result rows. Reads the listbox ref from context so the root can
7
+ * scroll the active row into view, and renders nothing unless there are results to show — the empty,
8
+ * loading, and searching states are owned by `SearchDialog.Empty` / `SearchDialog.Loading`.
9
+ *
10
+ * Slot: `search-dialog-results`.
11
+ *
12
+ * @see {@link SearchDialog.Results.Props}
13
+ */
14
+ declare function SearchDialogResults({
15
+ children
16
+ }: SearchDialogResults.Props): ReactElement | null;
17
+ declare namespace SearchDialogResults {
18
+ type Props = {
19
+ /** One `SearchDialog.Item` per result. */children?: ReactNode;
20
+ };
21
+ }
22
+ /**
23
+ * One result row — its title opposite a crumb or method+path, over an optional `<mark>`-highlighted
24
+ * excerpt. Reads its active state and the select action from context off its `index`; pointer hover
25
+ * makes it active, click chooses it. The excerpt is trusted HTML (Pagefind escapes it and wraps only
26
+ * matched terms in `<mark>`).
27
+ *
28
+ * Slot: `search-dialog-result`.
29
+ *
30
+ * @see {@link SearchDialog.Item.Props}
31
+ */
32
+ declare function SearchDialogItem({
33
+ result,
34
+ index
35
+ }: SearchDialogItem.Props): ReactElement;
36
+ declare namespace SearchDialogItem {
37
+ type Props = {
38
+ /** The hit this row renders. */result: SearchResult; /** This row's zero-based position, matched against the active row. */
39
+ index: number;
40
+ };
41
+ }
42
+ //#endregion
43
+ export { SearchDialogItem, SearchDialogResults };
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import { Icon } from "../../../icons/icon.js";
3
+ import { FileIcon } from "../../../icons/glyphs.js";
4
+ import { searchDialogPhase, useSearchDialogContext } from "../search-dialog.context.js";
5
+ import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/search-dialog/parts/results.tsx
8
+ /**
9
+ * The listbox container holding the result rows. Reads the listbox ref from context so the root can
10
+ * scroll the active row into view, and renders nothing unless there are results to show — the empty,
11
+ * loading, and searching states are owned by `SearchDialog.Empty` / `SearchDialog.Loading`.
12
+ *
13
+ * Slot: `search-dialog-results`.
14
+ *
15
+ * @see {@link SearchDialog.Results.Props}
16
+ */
17
+ function SearchDialogResults({ children }) {
18
+ const { state, meta } = useSearchDialogContext("Results");
19
+ if (searchDialogPhase(state) !== "results") return null;
20
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", {
21
+ ref: meta.listRef,
22
+ "data-slot": SEARCH_DIALOG_SLOTS.results,
23
+ role: "listbox",
24
+ "aria-label": meta.title,
25
+ "data-custom-scrollbar": true,
26
+ children
27
+ }) });
28
+ }
29
+ /**
30
+ * One result row — its title opposite a crumb or method+path, over an optional `<mark>`-highlighted
31
+ * excerpt. Reads its active state and the select action from context off its `index`; pointer hover
32
+ * makes it active, click chooses it. The excerpt is trusted HTML (Pagefind escapes it and wraps only
33
+ * matched terms in `<mark>`).
34
+ *
35
+ * Slot: `search-dialog-result`.
36
+ *
37
+ * @see {@link SearchDialog.Item.Props}
38
+ */
39
+ function SearchDialogItem({ result, index }) {
40
+ const { state, actions } = useSearchDialogContext("Item");
41
+ const active = index === state.active;
42
+ return /* @__PURE__ */ jsxs("button", {
43
+ "data-slot": SEARCH_DIALOG_SLOTS.result,
44
+ type: "button",
45
+ role: "option",
46
+ "aria-selected": active,
47
+ "data-index": index,
48
+ onMouseMove: () => actions.setActive(index),
49
+ onClick: () => actions.select(index),
50
+ children: [/* @__PURE__ */ jsx(Icon, {
51
+ icon: FileIcon,
52
+ size: "sm"
53
+ }), /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("span", { children: result.title }), result.method && result.path ? /* @__PURE__ */ jsxs("span", {
54
+ "data-allow-literal": true,
55
+ children: [/* @__PURE__ */ jsx("span", { children: result.method }), /* @__PURE__ */ jsx("span", { children: result.path })]
56
+ }) : result.crumb && /* @__PURE__ */ jsx("span", {
57
+ "data-allow-literal": true,
58
+ children: result.crumb
59
+ })] }), result.excerpt && /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: result.excerpt } })] })]
60
+ });
61
+ }
62
+ //#endregion
63
+ export { SearchDialogItem, SearchDialogResults };
@@ -0,0 +1,54 @@
1
+ import { SearchResult } from "../search-dialog.context.js";
2
+ import { ReactElement, ReactNode } from "react";
3
+
4
+ //#region src/components/search-dialog/parts/root.d.ts
5
+ /**
6
+ * Owns the dialog chassis and the keyboard contract, and shares the query, results, and active row
7
+ * with every part through context. Built on Base UI's `Dialog` (focus trap, dismissal) with a `Surface`
8
+ * popup for the elevated chrome; ↑/↓ move the active row, Enter opens it, Esc closes. The caller runs
9
+ * the search and feeds `results`, so the dialog is index-agnostic. Compose `SearchDialog.Input`, the
10
+ * `SearchDialog.Loading` / `SearchDialog.Empty` messages, a `SearchDialog.Results` of
11
+ * `SearchDialog.Item`s, and a `SearchDialog.Footer` of `SearchDialog.Hint`s as children.
12
+ *
13
+ * @see {@link SearchDialog.Root.Props}
14
+ */
15
+ declare function SearchDialogRoot({
16
+ open,
17
+ onOpenChange,
18
+ query,
19
+ onQueryChange,
20
+ results,
21
+ loading,
22
+ searching,
23
+ onSelect,
24
+ title,
25
+ children
26
+ }: SearchDialogRoot.Props): ReactElement;
27
+ declare namespace SearchDialogRoot {
28
+ type Props = {
29
+ /** Whether the dialog is open. */open: boolean; /** Called when the open state should change (backdrop, Esc, dismissal). */
30
+ onOpenChange: (open: boolean) => void; /** The current query (controlled). */
31
+ query: string; /** Called as the query field changes. */
32
+ onQueryChange: (query: string) => void; /** The results to render — the caller runs the search and feeds settled results. */
33
+ results: readonly SearchResult[];
34
+ /**
35
+ * The search index is still loading, before any query can run.
36
+ * @default false
37
+ */
38
+ loading?: boolean;
39
+ /**
40
+ * A query is in flight (debounced search not yet settled).
41
+ * @default false
42
+ */
43
+ searching?: boolean; /** Called when a result is chosen (click or Enter). */
44
+ onSelect: (result: SearchResult, index: number) => void;
45
+ /**
46
+ * Accessible dialog title and input label.
47
+ * @default "Search"
48
+ */
49
+ title?: string; /** The dialog parts — `Input`, the `Loading` / `Empty` messages, `Results`, and `Footer`. */
50
+ children?: ReactNode;
51
+ };
52
+ }
53
+ //#endregion
54
+ export { SearchDialogRoot };
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ import { VisuallyHidden } from "../../../core/visually-hidden/visually-hidden.js";
3
+ import { SearchDialogProvider } from "../search-dialog.context.js";
4
+ import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
5
+ import { Dialog } from "../../dialog/dialog.js";
6
+ import { useEffect, useMemo, useRef, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/search-dialog/parts/root.tsx
9
+ /**
10
+ * Owns the dialog chassis and the keyboard contract, and shares the query, results, and active row
11
+ * with every part through context. Built on Base UI's `Dialog` (focus trap, dismissal) with a `Surface`
12
+ * popup for the elevated chrome; ↑/↓ move the active row, Enter opens it, Esc closes. The caller runs
13
+ * the search and feeds `results`, so the dialog is index-agnostic. Compose `SearchDialog.Input`, the
14
+ * `SearchDialog.Loading` / `SearchDialog.Empty` messages, a `SearchDialog.Results` of
15
+ * `SearchDialog.Item`s, and a `SearchDialog.Footer` of `SearchDialog.Hint`s as children.
16
+ *
17
+ * @see {@link SearchDialog.Root.Props}
18
+ */
19
+ function SearchDialogRoot({ open, onOpenChange, query, onQueryChange, results, loading = false, searching = false, onSelect, title = "Search", children }) {
20
+ const inputRef = useRef(null);
21
+ const listRef = useRef(null);
22
+ const [active, setActive] = useState(0);
23
+ useEffect(() => setActive(0), [results]);
24
+ useEffect(() => {
25
+ const row = listRef.current?.querySelector(`[data-index="${active}"]`);
26
+ if (typeof row?.scrollIntoView !== "function") return;
27
+ try {
28
+ row.scrollIntoView({ block: "nearest" });
29
+ } catch {}
30
+ }, [active]);
31
+ const value = useMemo(() => {
32
+ const select = (index) => {
33
+ const result = results[index];
34
+ if (result) onSelect(result, index);
35
+ };
36
+ const onKeyDown = (event) => {
37
+ if (event.key === "ArrowDown") {
38
+ event.preventDefault();
39
+ setActive((i) => Math.min(i + 1, Math.max(results.length - 1, 0)));
40
+ } else if (event.key === "ArrowUp") {
41
+ event.preventDefault();
42
+ setActive((i) => Math.max(i - 1, 0));
43
+ } else if (event.key === "Enter") {
44
+ if (results[active]) {
45
+ event.preventDefault();
46
+ select(active);
47
+ }
48
+ }
49
+ };
50
+ return {
51
+ state: {
52
+ query,
53
+ active,
54
+ results,
55
+ loading,
56
+ searching
57
+ },
58
+ actions: {
59
+ setQuery: onQueryChange,
60
+ select,
61
+ setActive,
62
+ onKeyDown
63
+ },
64
+ meta: {
65
+ title,
66
+ inputRef,
67
+ listRef
68
+ }
69
+ };
70
+ }, [
71
+ query,
72
+ active,
73
+ results,
74
+ loading,
75
+ searching,
76
+ onQueryChange,
77
+ onSelect,
78
+ title
79
+ ]);
80
+ return /* @__PURE__ */ jsx(Dialog.Root, {
81
+ open,
82
+ onOpenChange,
83
+ children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [/* @__PURE__ */ jsx(Dialog.Backdrop, { "data-slot": SEARCH_DIALOG_SLOTS.backdrop }), /* @__PURE__ */ jsxs(Dialog.Popup, {
84
+ elevation: "menu",
85
+ "data-slot": SEARCH_DIALOG_SLOTS.root,
86
+ initialFocus: inputRef,
87
+ children: [/* @__PURE__ */ jsx(Dialog.Title, {
88
+ "data-slot": "noctis-visually-hidden",
89
+ render: /* @__PURE__ */ jsx(VisuallyHidden, {}),
90
+ children: title
91
+ }), /* @__PURE__ */ jsx(SearchDialogProvider, {
92
+ value,
93
+ children
94
+ })]
95
+ })] })
96
+ });
97
+ }
98
+ //#endregion
99
+ export { SearchDialogRoot };
@@ -0,0 +1,15 @@
1
+ //#region src/components/search-dialog/search-dialog.context.d.ts
2
+ /** A single search hit rendered as a row. `excerpt` is trusted HTML (Pagefind wraps matches in `<mark>`). */
3
+ interface SearchResult {
4
+ id: string;
5
+ title: string;
6
+ /** A breadcrumb / path shown opposite the title. */
7
+ crumb?: string;
8
+ /** Excerpt HTML with `<mark>` around matched terms. */
9
+ excerpt?: string;
10
+ /** For endpoint-style rows: an HTTP method + path shown instead of the crumb. */
11
+ method?: string;
12
+ path?: string;
13
+ }
14
+ //#endregion
15
+ export { SearchResult };
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { createContext, use } from "react";
3
+ //#region src/components/search-dialog/search-dialog.context.ts
4
+ /** Resolve the active pane from the dialog state, in the gate's priority order. */
5
+ function searchDialogPhase(state) {
6
+ if (state.loading) return "loading";
7
+ if (state.query.trim().length === 0) return "empty";
8
+ if (state.results.length === 0) return state.searching ? "searching" : "no-results";
9
+ return "results";
10
+ }
11
+ const SearchDialogContext = createContext(null);
12
+ const SearchDialogProvider = SearchDialogContext.Provider;
13
+ /** Read the dialog context, throwing a named error when a part renders outside `SearchDialog.Root`. */
14
+ function useSearchDialogContext(part) {
15
+ const context = use(SearchDialogContext);
16
+ if (context === null) throw new Error(`SearchDialog.${part} must be rendered inside <SearchDialog.Root>.`);
17
+ return context;
18
+ }
19
+ //#endregion
20
+ export { SearchDialogProvider, searchDialogPhase, useSearchDialogContext };
@@ -0,0 +1,84 @@
1
+ import { SearchDialogInput } from "./parts/input.js";
2
+ import { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading } from "./parts/messages.js";
3
+ import { SearchResult } from "./search-dialog.context.js";
4
+ import { SearchDialogItem, SearchDialogResults } from "./parts/results.js";
5
+ import { SearchDialogRoot } from "./parts/root.js";
6
+ import { SearchDialogItemPropsArgs, SearchDialogPartProps, footerProps, inputProps, itemProps, resultsProps, rootProps } from "./search-dialog.props.js";
7
+
8
+ //#region src/components/search-dialog/search-dialog.d.ts
9
+ /**
10
+ * The documentation search dialog — a centred, focus-trapped command palette built on Base UI's
11
+ * `Dialog`. The shell (backdrop blur, scale-fade enter/exit, a fixed height so the panel never jumps
12
+ * as results stream in), the keyboard contract (↑/↓ move the active row, Enter opens it, Esc closes),
13
+ * and the result rows (title, crumb or method+path, `<mark>`-highlighted excerpt) all live here; the
14
+ * caller owns the data — it runs the search and feeds `results`, so the dialog is index-agnostic.
15
+ *
16
+ * Compose from parts: `SearchDialog.Root` owns the open state, the query, and the keyboard-driven
17
+ * active row; `SearchDialog.Input` is the query field; `SearchDialog.Loading` and `SearchDialog.Empty`
18
+ * supply the loading, empty-query, searching, and no-results copy (the root gates which one shows);
19
+ * `SearchDialog.Results` lists one `SearchDialog.Item` per hit; and `SearchDialog.Footer` holds the
20
+ * `SearchDialog.Hint` keyboard hints. All copy arrives as part children, so a consuming app routes it
21
+ * through its own i18n.
22
+ *
23
+ * The runtime compound is a plain object (kept tree-shakeable); per-part prop types are exposed through
24
+ * the matching `SearchDialog` namespace — e.g. `SearchDialog.Item.Props`.
25
+ */
26
+ declare const SearchDialog: {
27
+ /** Owns the open state, query, and active row. `SearchDialog.Root.props()` → its spreadable popup prop bag. */Root: typeof SearchDialogRoot & {
28
+ props: typeof rootProps;
29
+ }; /** The query field. `SearchDialog.Input.props()` → its spreadable prop bag. */
30
+ Input: typeof SearchDialogInput & {
31
+ props: typeof inputProps;
32
+ }; /** The listbox of hits. `SearchDialog.Results.props()` → its spreadable prop bag. */
33
+ Results: typeof SearchDialogResults & {
34
+ props: typeof resultsProps;
35
+ }; /** One result row. `SearchDialog.Item.props({ active, index })` → its spreadable prop bag for a foreign element. */
36
+ Item: typeof SearchDialogItem & {
37
+ props: typeof itemProps;
38
+ }; /** The empty / searching / no-results copy. */
39
+ Empty: typeof SearchDialogEmpty; /** The index-loading copy. */
40
+ Loading: typeof SearchDialogLoading; /** The keyboard-hints row. `SearchDialog.Footer.props()` → its spreadable prop bag. */
41
+ Footer: typeof SearchDialogFooter & {
42
+ props: typeof footerProps;
43
+ }; /** One footer hint. */
44
+ Hint: typeof SearchDialogHint;
45
+ };
46
+ /**
47
+ * Per-part prop types, mirroring Base UI's `Component.Part.Props` convention. Types-only — it emits no
48
+ * runtime code and merges with the `SearchDialog` object above, so `SearchDialog.Item` is the component
49
+ * value while `SearchDialog.Item.Props` is its prop type.
50
+ */
51
+ declare namespace SearchDialog {
52
+ /** The spreadable data-attribute prop bag every `SearchDialog.*.props()` returns (D12). */
53
+ type PartProps = SearchDialogPartProps;
54
+ namespace Root {
55
+ type Props = SearchDialogRoot.Props;
56
+ }
57
+ namespace Input {
58
+ type Props = SearchDialogInput.Props;
59
+ }
60
+ namespace Results {
61
+ type Props = SearchDialogResults.Props;
62
+ }
63
+ namespace Item {
64
+ type Props = SearchDialogItem.Props;
65
+ /** A single search hit — the data shape a caller builds its `results` array from. */
66
+ type Result = SearchResult;
67
+ /** Argument to the `SearchDialog.Item.props(...)` escape-hatch helper. */
68
+ type PropsArgs = SearchDialogItemPropsArgs;
69
+ }
70
+ namespace Empty {
71
+ type Props = SearchDialogEmpty.Props;
72
+ }
73
+ namespace Loading {
74
+ type Props = SearchDialogLoading.Props;
75
+ }
76
+ namespace Footer {
77
+ type Props = SearchDialogFooter.Props;
78
+ }
79
+ namespace Hint {
80
+ type Props = SearchDialogHint.Props;
81
+ }
82
+ }
83
+ //#endregion
84
+ export { SearchDialog };
@@ -0,0 +1,43 @@
1
+ import { SearchDialogInput } from "./parts/input.js";
2
+ import { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading } from "./parts/messages.js";
3
+ import { SearchDialogItem, SearchDialogResults } from "./parts/results.js";
4
+ import { SearchDialogRoot } from "./parts/root.js";
5
+ import { footerProps, inputProps, itemProps, resultsProps, rootProps } from "./search-dialog.props.js";
6
+ //#region src/components/search-dialog/search-dialog.tsx
7
+ /**
8
+ * The documentation search dialog — a centred, focus-trapped command palette built on Base UI's
9
+ * `Dialog`. The shell (backdrop blur, scale-fade enter/exit, a fixed height so the panel never jumps
10
+ * as results stream in), the keyboard contract (↑/↓ move the active row, Enter opens it, Esc closes),
11
+ * and the result rows (title, crumb or method+path, `<mark>`-highlighted excerpt) all live here; the
12
+ * caller owns the data — it runs the search and feeds `results`, so the dialog is index-agnostic.
13
+ *
14
+ * Compose from parts: `SearchDialog.Root` owns the open state, the query, and the keyboard-driven
15
+ * active row; `SearchDialog.Input` is the query field; `SearchDialog.Loading` and `SearchDialog.Empty`
16
+ * supply the loading, empty-query, searching, and no-results copy (the root gates which one shows);
17
+ * `SearchDialog.Results` lists one `SearchDialog.Item` per hit; and `SearchDialog.Footer` holds the
18
+ * `SearchDialog.Hint` keyboard hints. All copy arrives as part children, so a consuming app routes it
19
+ * through its own i18n.
20
+ *
21
+ * The runtime compound is a plain object (kept tree-shakeable); per-part prop types are exposed through
22
+ * the matching `SearchDialog` namespace — e.g. `SearchDialog.Item.Props`.
23
+ */
24
+ const SearchDialog = {
25
+ /** Owns the open state, query, and active row. `SearchDialog.Root.props()` → its spreadable popup prop bag. */
26
+ Root: Object.assign(SearchDialogRoot, { props: rootProps }),
27
+ /** The query field. `SearchDialog.Input.props()` → its spreadable prop bag. */
28
+ Input: Object.assign(SearchDialogInput, { props: inputProps }),
29
+ /** The listbox of hits. `SearchDialog.Results.props()` → its spreadable prop bag. */
30
+ Results: Object.assign(SearchDialogResults, { props: resultsProps }),
31
+ /** One result row. `SearchDialog.Item.props({ active, index })` → its spreadable prop bag for a foreign element. */
32
+ Item: Object.assign(SearchDialogItem, { props: itemProps }),
33
+ /** The empty / searching / no-results copy. */
34
+ Empty: SearchDialogEmpty,
35
+ /** The index-loading copy. */
36
+ Loading: SearchDialogLoading,
37
+ /** The keyboard-hints row. `SearchDialog.Footer.props()` → its spreadable prop bag. */
38
+ Footer: Object.assign(SearchDialogFooter, { props: footerProps }),
39
+ /** One footer hint. */
40
+ Hint: SearchDialogHint
41
+ };
42
+ //#endregion
43
+ export { SearchDialog };