@pithyjs/ui-kit 0.1.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 (417) hide show
  1. package/LICENSE +21 -0
  2. package/dist/animation/animate-in.d.ts +35 -0
  3. package/dist/animation/animate-in.d.ts.map +1 -0
  4. package/dist/animation/animate-in.js +71 -0
  5. package/dist/animation/animate-in.js.map +1 -0
  6. package/dist/atoms/actions/_icon-control.scss +53 -0
  7. package/dist/atoms/actions/button/Button.d.ts +93 -0
  8. package/dist/atoms/actions/button/Button.d.ts.map +1 -0
  9. package/dist/atoms/actions/button/Button.js +332 -0
  10. package/dist/atoms/actions/button/Button.js.map +1 -0
  11. package/dist/atoms/actions/button/button.scss +342 -0
  12. package/dist/atoms/actions/icon-button/IconButton.d.ts +47 -0
  13. package/dist/atoms/actions/icon-button/IconButton.d.ts.map +1 -0
  14. package/dist/atoms/actions/icon-button/IconButton.js +81 -0
  15. package/dist/atoms/actions/icon-button/IconButton.js.map +1 -0
  16. package/dist/atoms/actions/icon-button/icon-button.scss +20 -0
  17. package/dist/atoms/actions/icon-group/IconGroup.d.ts +60 -0
  18. package/dist/atoms/actions/icon-group/IconGroup.d.ts.map +1 -0
  19. package/dist/atoms/actions/icon-group/IconGroup.js +191 -0
  20. package/dist/atoms/actions/icon-group/IconGroup.js.map +1 -0
  21. package/dist/atoms/actions/icon-group/icon-group.scss +36 -0
  22. package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts +49 -0
  23. package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts.map +1 -0
  24. package/dist/atoms/actions/segmented-control/SegmentedControl.js +107 -0
  25. package/dist/atoms/actions/segmented-control/SegmentedControl.js.map +1 -0
  26. package/dist/atoms/actions/segmented-control/segmented-control.scss +90 -0
  27. package/dist/atoms/content/_mixins.scss +79 -0
  28. package/dist/atoms/content/action-tile/ActionTile.d.ts +27 -0
  29. package/dist/atoms/content/action-tile/ActionTile.d.ts.map +1 -0
  30. package/dist/atoms/content/action-tile/ActionTile.js +98 -0
  31. package/dist/atoms/content/action-tile/ActionTile.js.map +1 -0
  32. package/dist/atoms/content/action-tile/action-tile.scss +150 -0
  33. package/dist/atoms/content/badge/Badge.d.ts +57 -0
  34. package/dist/atoms/content/badge/Badge.d.ts.map +1 -0
  35. package/dist/atoms/content/badge/Badge.js +177 -0
  36. package/dist/atoms/content/badge/Badge.js.map +1 -0
  37. package/dist/atoms/content/badge/badge.scss +198 -0
  38. package/dist/atoms/content/heading/Heading.d.ts +53 -0
  39. package/dist/atoms/content/heading/Heading.d.ts.map +1 -0
  40. package/dist/atoms/content/heading/Heading.js +142 -0
  41. package/dist/atoms/content/heading/Heading.js.map +1 -0
  42. package/dist/atoms/content/heading/heading.scss +43 -0
  43. package/dist/atoms/content/icon/Icon.d.ts +68 -0
  44. package/dist/atoms/content/icon/Icon.d.ts.map +1 -0
  45. package/dist/atoms/content/icon/Icon.js +137 -0
  46. package/dist/atoms/content/icon/Icon.js.map +1 -0
  47. package/dist/atoms/content/icon/icon.scss +66 -0
  48. package/dist/atoms/content/icon/resolveIconSvg.d.ts +21 -0
  49. package/dist/atoms/content/icon/resolveIconSvg.d.ts.map +1 -0
  50. package/dist/atoms/content/icon/resolveIconSvg.js +73 -0
  51. package/dist/atoms/content/icon/resolveIconSvg.js.map +1 -0
  52. package/dist/atoms/content/image/Image.d.ts +81 -0
  53. package/dist/atoms/content/image/Image.d.ts.map +1 -0
  54. package/dist/atoms/content/image/Image.js +293 -0
  55. package/dist/atoms/content/image/Image.js.map +1 -0
  56. package/dist/atoms/content/image/image.scss +77 -0
  57. package/dist/atoms/content/text/Text.d.ts +58 -0
  58. package/dist/atoms/content/text/Text.d.ts.map +1 -0
  59. package/dist/atoms/content/text/Text.js +158 -0
  60. package/dist/atoms/content/text/Text.js.map +1 -0
  61. package/dist/atoms/content/text/text.scss +98 -0
  62. package/dist/atoms/content/tile/Tile.d.ts +66 -0
  63. package/dist/atoms/content/tile/Tile.d.ts.map +1 -0
  64. package/dist/atoms/content/tile/Tile.js +125 -0
  65. package/dist/atoms/content/tile/Tile.js.map +1 -0
  66. package/dist/atoms/content/tile/tile.scss +122 -0
  67. package/dist/atoms/feedback/tooltip/Tooltip.d.ts +44 -0
  68. package/dist/atoms/feedback/tooltip/Tooltip.d.ts.map +1 -0
  69. package/dist/atoms/feedback/tooltip/Tooltip.js +121 -0
  70. package/dist/atoms/feedback/tooltip/Tooltip.js.map +1 -0
  71. package/dist/atoms/feedback/tooltip/tooltip.scss +96 -0
  72. package/dist/atoms/forms/checkbox/Checkbox.d.ts +49 -0
  73. package/dist/atoms/forms/checkbox/Checkbox.d.ts.map +1 -0
  74. package/dist/atoms/forms/checkbox/Checkbox.js +269 -0
  75. package/dist/atoms/forms/checkbox/Checkbox.js.map +1 -0
  76. package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts +50 -0
  77. package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts.map +1 -0
  78. package/dist/atoms/forms/checkbox/CheckboxGroup.js +132 -0
  79. package/dist/atoms/forms/checkbox/CheckboxGroup.js.map +1 -0
  80. package/dist/atoms/forms/checkbox/checkbox.scss +506 -0
  81. package/dist/atoms/forms/file-picker/FilePicker.d.ts +23 -0
  82. package/dist/atoms/forms/file-picker/FilePicker.d.ts.map +1 -0
  83. package/dist/atoms/forms/file-picker/FilePicker.js +103 -0
  84. package/dist/atoms/forms/file-picker/FilePicker.js.map +1 -0
  85. package/dist/atoms/forms/file-picker/file-picker.scss +84 -0
  86. package/dist/atoms/forms/form-field/FormField.d.ts +39 -0
  87. package/dist/atoms/forms/form-field/FormField.d.ts.map +1 -0
  88. package/dist/atoms/forms/form-field/FormField.js +139 -0
  89. package/dist/atoms/forms/form-field/FormField.js.map +1 -0
  90. package/dist/atoms/forms/form-field/form-field.scss +46 -0
  91. package/dist/atoms/forms/input/Input.d.ts +81 -0
  92. package/dist/atoms/forms/input/Input.d.ts.map +1 -0
  93. package/dist/atoms/forms/input/Input.js +417 -0
  94. package/dist/atoms/forms/input/Input.js.map +1 -0
  95. package/dist/atoms/forms/input/input.scss +547 -0
  96. package/dist/atoms/forms/radio/Radio.d.ts +54 -0
  97. package/dist/atoms/forms/radio/Radio.d.ts.map +1 -0
  98. package/dist/atoms/forms/radio/Radio.js +278 -0
  99. package/dist/atoms/forms/radio/Radio.js.map +1 -0
  100. package/dist/atoms/forms/radio/RadioGroup.d.ts +54 -0
  101. package/dist/atoms/forms/radio/RadioGroup.d.ts.map +1 -0
  102. package/dist/atoms/forms/radio/RadioGroup.js +137 -0
  103. package/dist/atoms/forms/radio/RadioGroup.js.map +1 -0
  104. package/dist/atoms/forms/radio/radio.scss +459 -0
  105. package/dist/atoms/forms/select/Select.d.ts +57 -0
  106. package/dist/atoms/forms/select/Select.d.ts.map +1 -0
  107. package/dist/atoms/forms/select/Select.js +457 -0
  108. package/dist/atoms/forms/select/Select.js.map +1 -0
  109. package/dist/atoms/forms/select/select-dropdown.d.ts +49 -0
  110. package/dist/atoms/forms/select/select-dropdown.d.ts.map +1 -0
  111. package/dist/atoms/forms/select/select-dropdown.js +305 -0
  112. package/dist/atoms/forms/select/select-dropdown.js.map +1 -0
  113. package/dist/atoms/forms/select/select-keyboard.d.ts +14 -0
  114. package/dist/atoms/forms/select/select-keyboard.d.ts.map +1 -0
  115. package/dist/atoms/forms/select/select-keyboard.js +182 -0
  116. package/dist/atoms/forms/select/select-keyboard.js.map +1 -0
  117. package/dist/atoms/forms/select/select.scss +630 -0
  118. package/dist/atoms/forms/textarea/Textarea.d.ts +69 -0
  119. package/dist/atoms/forms/textarea/Textarea.d.ts.map +1 -0
  120. package/dist/atoms/forms/textarea/Textarea.js +394 -0
  121. package/dist/atoms/forms/textarea/Textarea.js.map +1 -0
  122. package/dist/atoms/forms/textarea/textarea.scss +486 -0
  123. package/dist/atoms/forms/toggle/Toggle.d.ts +47 -0
  124. package/dist/atoms/forms/toggle/Toggle.d.ts.map +1 -0
  125. package/dist/atoms/forms/toggle/Toggle.js +243 -0
  126. package/dist/atoms/forms/toggle/Toggle.js.map +1 -0
  127. package/dist/atoms/forms/toggle/toggle.scss +561 -0
  128. package/dist/compiler.d.ts +7 -0
  129. package/dist/compiler.d.ts.map +1 -0
  130. package/dist/compiler.js +18 -0
  131. package/dist/compiler.js.map +1 -0
  132. package/dist/icons/index.d.ts +14 -0
  133. package/dist/icons/index.d.ts.map +1 -0
  134. package/dist/icons/index.js +14 -0
  135. package/dist/icons/index.js.map +1 -0
  136. package/dist/icons/registry.d.ts +65 -0
  137. package/dist/icons/registry.d.ts.map +1 -0
  138. package/dist/icons/registry.js +126 -0
  139. package/dist/icons/registry.js.map +1 -0
  140. package/dist/index.d.ts +55 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +64 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/layout/Grid.d.ts +78 -0
  145. package/dist/layout/Grid.d.ts.map +1 -0
  146. package/dist/layout/Grid.js +272 -0
  147. package/dist/layout/Grid.js.map +1 -0
  148. package/dist/layout/GridItem.d.ts +52 -0
  149. package/dist/layout/GridItem.d.ts.map +1 -0
  150. package/dist/layout/GridItem.js +99 -0
  151. package/dist/layout/GridItem.js.map +1 -0
  152. package/dist/layout/PageSection.d.ts +43 -0
  153. package/dist/layout/PageSection.d.ts.map +1 -0
  154. package/dist/layout/PageSection.js +75 -0
  155. package/dist/layout/PageSection.js.map +1 -0
  156. package/dist/layout/SmartContainer.d.ts +66 -0
  157. package/dist/layout/SmartContainer.d.ts.map +1 -0
  158. package/dist/layout/SmartContainer.js +194 -0
  159. package/dist/layout/SmartContainer.js.map +1 -0
  160. package/dist/layout/Stack.d.ts +65 -0
  161. package/dist/layout/Stack.d.ts.map +1 -0
  162. package/dist/layout/Stack.js +114 -0
  163. package/dist/layout/Stack.js.map +1 -0
  164. package/dist/organisms/content/Card.d.ts +93 -0
  165. package/dist/organisms/content/Card.d.ts.map +1 -0
  166. package/dist/organisms/content/Card.js +353 -0
  167. package/dist/organisms/content/Card.js.map +1 -0
  168. package/dist/organisms/content/_card-horizontal.scss +88 -0
  169. package/dist/organisms/content/_card-link.scss +49 -0
  170. package/dist/organisms/content/_card-overlay.scss +91 -0
  171. package/dist/organisms/content/_card-root.scss +99 -0
  172. package/dist/organisms/content/_card-slots.scss +143 -0
  173. package/dist/organisms/content/_card-states.scss +166 -0
  174. package/dist/organisms/content/_card-tokens.scss +22 -0
  175. package/dist/organisms/content/_card-variants.scss +31 -0
  176. package/dist/organisms/content/card.scss +15 -0
  177. package/dist/organisms/feedback/Modal.d.ts +39 -0
  178. package/dist/organisms/feedback/Modal.d.ts.map +1 -0
  179. package/dist/organisms/feedback/Modal.js +120 -0
  180. package/dist/organisms/feedback/Modal.js.map +1 -0
  181. package/dist/organisms/feedback/Popover.d.ts +30 -0
  182. package/dist/organisms/feedback/Popover.d.ts.map +1 -0
  183. package/dist/organisms/feedback/Popover.js +151 -0
  184. package/dist/organisms/feedback/Popover.js.map +1 -0
  185. package/dist/organisms/feedback/modal.scss +66 -0
  186. package/dist/organisms/feedback/popover.scss +27 -0
  187. package/dist/organisms/forms/DynamicForm.d.ts +118 -0
  188. package/dist/organisms/forms/DynamicForm.d.ts.map +1 -0
  189. package/dist/organisms/forms/DynamicForm.js +546 -0
  190. package/dist/organisms/forms/DynamicForm.js.map +1 -0
  191. package/dist/organisms/forms/Form.d.ts +62 -0
  192. package/dist/organisms/forms/Form.d.ts.map +1 -0
  193. package/dist/organisms/forms/Form.js +131 -0
  194. package/dist/organisms/forms/Form.js.map +1 -0
  195. package/dist/organisms/forms/dynamic-form.scss +91 -0
  196. package/dist/organisms/forms/form-helpers.d.ts +21 -0
  197. package/dist/organisms/forms/form-helpers.d.ts.map +1 -0
  198. package/dist/organisms/forms/form-helpers.js +57 -0
  199. package/dist/organisms/forms/form-helpers.js.map +1 -0
  200. package/dist/organisms/forms/form-state.d.ts +66 -0
  201. package/dist/organisms/forms/form-state.d.ts.map +1 -0
  202. package/dist/organisms/forms/form-state.js +156 -0
  203. package/dist/organisms/forms/form-state.js.map +1 -0
  204. package/dist/organisms/forms/form.scss +23 -0
  205. package/dist/organisms/forms/validation.d.ts +32 -0
  206. package/dist/organisms/forms/validation.d.ts.map +1 -0
  207. package/dist/organisms/forms/validation.js +118 -0
  208. package/dist/organisms/forms/validation.js.map +1 -0
  209. package/dist/organisms/navigation/Navbar.d.ts +66 -0
  210. package/dist/organisms/navigation/Navbar.d.ts.map +1 -0
  211. package/dist/organisms/navigation/Navbar.js +881 -0
  212. package/dist/organisms/navigation/Navbar.js.map +1 -0
  213. package/dist/organisms/navigation/_navbar-announcement.scss +62 -0
  214. package/dist/organisms/navigation/_navbar-brand.scss +69 -0
  215. package/dist/organisms/navigation/_navbar-container.scss +37 -0
  216. package/dist/organisms/navigation/_navbar-desktop.scss +116 -0
  217. package/dist/organisms/navigation/_navbar-drawer.scss +97 -0
  218. package/dist/organisms/navigation/_navbar-links.scss +143 -0
  219. package/dist/organisms/navigation/_navbar-menu.scss +193 -0
  220. package/dist/organisms/navigation/_navbar-root.scss +107 -0
  221. package/dist/organisms/navigation/_navbar-search.scss +83 -0
  222. package/dist/organisms/navigation/_navbar-toggle.scss +91 -0
  223. package/dist/organisms/navigation/_navbar-tokens.scss +15 -0
  224. package/dist/organisms/navigation/navbar.scss +17 -0
  225. package/dist/registry/categories.d.ts +6 -0
  226. package/dist/registry/categories.d.ts.map +1 -0
  227. package/dist/registry/categories.js +13 -0
  228. package/dist/registry/categories.js.map +1 -0
  229. package/dist/registry/components.d.ts +5 -0
  230. package/dist/registry/components.d.ts.map +1 -0
  231. package/dist/registry/components.js +95 -0
  232. package/dist/registry/components.js.map +1 -0
  233. package/dist/registry/index.d.ts +59 -0
  234. package/dist/registry/index.d.ts.map +1 -0
  235. package/dist/registry/index.js +79 -0
  236. package/dist/registry/index.js.map +1 -0
  237. package/dist/registry/levels.d.ts +6 -0
  238. package/dist/registry/levels.d.ts.map +1 -0
  239. package/dist/registry/levels.js +9 -0
  240. package/dist/registry/levels.js.map +1 -0
  241. package/dist/registry/registry-meta-types.d.ts +67 -0
  242. package/dist/registry/registry-meta-types.d.ts.map +1 -0
  243. package/dist/registry/registry-meta-types.js +6 -0
  244. package/dist/registry/registry-meta-types.js.map +1 -0
  245. package/dist/registry/registry-meta.d.ts +5 -0
  246. package/dist/registry/registry-meta.d.ts.map +1 -0
  247. package/dist/registry/registry-meta.js +731 -0
  248. package/dist/registry/registry-meta.js.map +1 -0
  249. package/dist/registry/renderer.d.ts +69 -0
  250. package/dist/registry/renderer.d.ts.map +1 -0
  251. package/dist/registry/renderer.js +311 -0
  252. package/dist/registry/renderer.js.map +1 -0
  253. package/dist/sections/_section-base.scss +204 -0
  254. package/dist/sections/contact/ContactSection.d.ts +55 -0
  255. package/dist/sections/contact/ContactSection.d.ts.map +1 -0
  256. package/dist/sections/contact/ContactSection.js +142 -0
  257. package/dist/sections/contact/ContactSection.js.map +1 -0
  258. package/dist/sections/contact/contact-section.scss +142 -0
  259. package/dist/sections/cta/CTASection.d.ts +52 -0
  260. package/dist/sections/cta/CTASection.d.ts.map +1 -0
  261. package/dist/sections/cta/CTASection.js +130 -0
  262. package/dist/sections/cta/CTASection.js.map +1 -0
  263. package/dist/sections/cta/cta-section.scss +131 -0
  264. package/dist/sections/entrance.d.ts +29 -0
  265. package/dist/sections/entrance.d.ts.map +1 -0
  266. package/dist/sections/entrance.js +69 -0
  267. package/dist/sections/entrance.js.map +1 -0
  268. package/dist/sections/features/FeaturesSection.d.ts +54 -0
  269. package/dist/sections/features/FeaturesSection.d.ts.map +1 -0
  270. package/dist/sections/features/FeaturesSection.js +139 -0
  271. package/dist/sections/features/FeaturesSection.js.map +1 -0
  272. package/dist/sections/features/features-section.scss +140 -0
  273. package/dist/sections/footer/FooterSection.d.ts +53 -0
  274. package/dist/sections/footer/FooterSection.d.ts.map +1 -0
  275. package/dist/sections/footer/FooterSection.js +147 -0
  276. package/dist/sections/footer/FooterSection.js.map +1 -0
  277. package/dist/sections/footer/footer-section.scss +131 -0
  278. package/dist/sections/hero/HeroSection.d.ts +66 -0
  279. package/dist/sections/hero/HeroSection.d.ts.map +1 -0
  280. package/dist/sections/hero/HeroSection.js +156 -0
  281. package/dist/sections/hero/HeroSection.js.map +1 -0
  282. package/dist/sections/hero/hero-section.scss +211 -0
  283. package/dist/shared/_form-animations.scss +283 -0
  284. package/dist/shared/_media-fit.scss +63 -0
  285. package/dist/shared/_mixins.scss +69 -0
  286. package/dist/shared/_tokens.scss +116 -0
  287. package/dist/shared/badge.d.ts +15 -0
  288. package/dist/shared/badge.d.ts.map +1 -0
  289. package/dist/shared/badge.js +15 -0
  290. package/dist/shared/badge.js.map +1 -0
  291. package/dist/shared/button.d.ts +22 -0
  292. package/dist/shared/button.d.ts.map +1 -0
  293. package/dist/shared/button.js +22 -0
  294. package/dist/shared/button.js.map +1 -0
  295. package/dist/shared/card.d.ts +21 -0
  296. package/dist/shared/card.d.ts.map +1 -0
  297. package/dist/shared/card.js +38 -0
  298. package/dist/shared/card.js.map +1 -0
  299. package/dist/shared/checkbox.d.ts +10 -0
  300. package/dist/shared/checkbox.d.ts.map +1 -0
  301. package/dist/shared/checkbox.js +28 -0
  302. package/dist/shared/checkbox.js.map +1 -0
  303. package/dist/shared/clickable.d.ts +34 -0
  304. package/dist/shared/clickable.d.ts.map +1 -0
  305. package/dist/shared/clickable.js +54 -0
  306. package/dist/shared/clickable.js.map +1 -0
  307. package/dist/shared/common.d.ts +31 -0
  308. package/dist/shared/common.d.ts.map +1 -0
  309. package/dist/shared/common.js +92 -0
  310. package/dist/shared/common.js.map +1 -0
  311. package/dist/shared/entrance-config.d.ts +46 -0
  312. package/dist/shared/entrance-config.d.ts.map +1 -0
  313. package/dist/shared/entrance-config.js +54 -0
  314. package/dist/shared/entrance-config.js.map +1 -0
  315. package/dist/shared/focusable.d.ts +8 -0
  316. package/dist/shared/focusable.d.ts.map +1 -0
  317. package/dist/shared/focusable.js +17 -0
  318. package/dist/shared/focusable.js.map +1 -0
  319. package/dist/shared/form-elements.d.ts +57 -0
  320. package/dist/shared/form-elements.d.ts.map +1 -0
  321. package/dist/shared/form-elements.js +95 -0
  322. package/dist/shared/form-elements.js.map +1 -0
  323. package/dist/shared/form-state.d.ts +52 -0
  324. package/dist/shared/form-state.d.ts.map +1 -0
  325. package/dist/shared/form-state.js +151 -0
  326. package/dist/shared/form-state.js.map +1 -0
  327. package/dist/shared/grid.d.ts +21 -0
  328. package/dist/shared/grid.d.ts.map +1 -0
  329. package/dist/shared/grid.js +187 -0
  330. package/dist/shared/grid.js.map +1 -0
  331. package/dist/shared/icon-slot.d.ts +22 -0
  332. package/dist/shared/icon-slot.d.ts.map +1 -0
  333. package/dist/shared/icon-slot.js +38 -0
  334. package/dist/shared/icon-slot.js.map +1 -0
  335. package/dist/shared/icon.d.ts +17 -0
  336. package/dist/shared/icon.d.ts.map +1 -0
  337. package/dist/shared/icon.js +18 -0
  338. package/dist/shared/icon.js.map +1 -0
  339. package/dist/shared/icons.d.ts +19 -0
  340. package/dist/shared/icons.d.ts.map +1 -0
  341. package/dist/shared/icons.js +22 -0
  342. package/dist/shared/icons.js.map +1 -0
  343. package/dist/shared/image.d.ts +35 -0
  344. package/dist/shared/image.d.ts.map +1 -0
  345. package/dist/shared/image.js +46 -0
  346. package/dist/shared/image.js.map +1 -0
  347. package/dist/shared/input.d.ts +12 -0
  348. package/dist/shared/input.d.ts.map +1 -0
  349. package/dist/shared/input.js +29 -0
  350. package/dist/shared/input.js.map +1 -0
  351. package/dist/shared/radio.d.ts +10 -0
  352. package/dist/shared/radio.d.ts.map +1 -0
  353. package/dist/shared/radio.js +29 -0
  354. package/dist/shared/radio.js.map +1 -0
  355. package/dist/shared/reconcile-list.d.ts +37 -0
  356. package/dist/shared/reconcile-list.d.ts.map +1 -0
  357. package/dist/shared/reconcile-list.js +95 -0
  358. package/dist/shared/reconcile-list.js.map +1 -0
  359. package/dist/shared/section.d.ts +23 -0
  360. package/dist/shared/section.d.ts.map +1 -0
  361. package/dist/shared/section.js +65 -0
  362. package/dist/shared/section.js.map +1 -0
  363. package/dist/shared/segmented.d.ts +17 -0
  364. package/dist/shared/segmented.d.ts.map +1 -0
  365. package/dist/shared/segmented.js +53 -0
  366. package/dist/shared/segmented.js.map +1 -0
  367. package/dist/shared/select.d.ts +18 -0
  368. package/dist/shared/select.d.ts.map +1 -0
  369. package/dist/shared/select.js +14 -0
  370. package/dist/shared/select.js.map +1 -0
  371. package/dist/shared/slots.d.ts +11 -0
  372. package/dist/shared/slots.d.ts.map +1 -0
  373. package/dist/shared/slots.js +33 -0
  374. package/dist/shared/slots.js.map +1 -0
  375. package/dist/shared/smart-container.d.ts +19 -0
  376. package/dist/shared/smart-container.d.ts.map +1 -0
  377. package/dist/shared/smart-container.js +29 -0
  378. package/dist/shared/smart-container.js.map +1 -0
  379. package/dist/shared/text.d.ts +29 -0
  380. package/dist/shared/text.d.ts.map +1 -0
  381. package/dist/shared/text.js +72 -0
  382. package/dist/shared/text.js.map +1 -0
  383. package/dist/shared/textarea.d.ts +6 -0
  384. package/dist/shared/textarea.d.ts.map +1 -0
  385. package/dist/shared/textarea.js +18 -0
  386. package/dist/shared/textarea.js.map +1 -0
  387. package/dist/shared/toggle.d.ts +6 -0
  388. package/dist/shared/toggle.d.ts.map +1 -0
  389. package/dist/shared/toggle.js +19 -0
  390. package/dist/shared/toggle.js.map +1 -0
  391. package/dist/shared/types.d.ts +41 -0
  392. package/dist/shared/types.d.ts.map +1 -0
  393. package/dist/shared/types.js +20 -0
  394. package/dist/shared/types.js.map +1 -0
  395. package/dist/structural/ErrorBoundary.d.ts +18 -0
  396. package/dist/structural/ErrorBoundary.d.ts.map +1 -0
  397. package/dist/structural/ErrorBoundary.js +119 -0
  398. package/dist/structural/ErrorBoundary.js.map +1 -0
  399. package/dist/structural/For.d.ts +37 -0
  400. package/dist/structural/For.d.ts.map +1 -0
  401. package/dist/structural/For.js +129 -0
  402. package/dist/structural/For.js.map +1 -0
  403. package/dist/structural/Lazy.d.ts +43 -0
  404. package/dist/structural/Lazy.d.ts.map +1 -0
  405. package/dist/structural/Lazy.js +47 -0
  406. package/dist/structural/Lazy.js.map +1 -0
  407. package/dist/structural/NavLink.d.ts +45 -0
  408. package/dist/structural/NavLink.d.ts.map +1 -0
  409. package/dist/structural/NavLink.js +37 -0
  410. package/dist/structural/NavLink.js.map +1 -0
  411. package/dist/structural/Show.d.ts +35 -0
  412. package/dist/structural/Show.d.ts.map +1 -0
  413. package/dist/structural/Show.js +34 -0
  414. package/dist/structural/Show.js.map +1 -0
  415. package/dist/structural/nav-link.scss +54 -0
  416. package/dist/styles/index.scss +58 -0
  417. package/package.json +64 -0
@@ -0,0 +1,457 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.select",
4
+ "title": "<Select> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { effect } from '@pithyjs/signals';
9
+ import { CONTROL_SIZES, } from '../../../shared/types';
10
+ import { generateSelectId } from '../../../shared/select';
11
+ import { CHEVRON_DOWN_ICON } from '../../../shared/icons';
12
+ import { createHelperElement, createErrorElement, createStateIcon, wrapFormControl, } from '../../../shared/form-elements';
13
+ import { createFormStateTracker, applyFormState, cleanupFormState, } from '../../../shared/form-state';
14
+ import { renderOptions, selectValue, closeDropdown, toggleDropdown, createListboxClickHandler, positionDropdown, } from './select-dropdown';
15
+ import { createTriggerKeydownHandler, createSearchKeydownHandler, } from './select-keyboard';
16
+ /**
17
+ * Accessible custom select atom with searchable dropdown, keyboard navigation,
18
+ * and polished micro-interactions.
19
+ *
20
+ * Renders a trigger button with a dropdown listbox. Supports search filtering,
21
+ * success/error states with shake animation and state icons, helper text, error
22
+ * message, clear button, and loading spinner.
23
+ *
24
+ * This is a pure visual atom — no validation logic. Error/success states are
25
+ * driven externally via props.
26
+ *
27
+ * @param props - Select configuration
28
+ * @returns `{ el, destroy }` — mounted element and cleanup function
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <Select label="'Country'" options="countries" placeholder="'Select a country'" />
33
+ * <Select label="'Status'" options="statuses" searchable="true" />
34
+ * <Select label="'Priority'" options="priorities" clearable="true" />
35
+ * ```
36
+ */
37
+ /** @codexApi {"parent":"pithy.ui-kit.select","name":"Select","stability":"stable","signature":"(props: SelectProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
38
+ export function Select({ id: externalId, name, options: optionsProp, value, placeholder, disabled = false, readonly: readonlyProp = false, required = false, error = false, errorMessage, helperText, success = false, size: rawSize = 'md', label, searchable = false, clearable = false, loading = false, onChange, onBlur, onFocus, }) {
39
+ // -- Prop validation -------------------------------------------------------
40
+ const validSize = CONTROL_SIZES.includes(rawSize);
41
+ if (import.meta.env?.DEV) {
42
+ if (!validSize) {
43
+ const valid = CONTROL_SIZES.join(', ');
44
+ console.warn(`[<Select>] Invalid size: "${rawSize}". Expected one of: ${valid}. Falling back to "md".`);
45
+ }
46
+ if (!label) {
47
+ console.warn(`[<Select>] Empty label — all selects require an accessible name. Pass a non-empty label string.`);
48
+ }
49
+ const opts = typeof optionsProp === 'function' ? optionsProp() : optionsProp;
50
+ if (opts.some(o => o.value === '')) {
51
+ console.warn(`[<Select>] Option with empty string value detected. Empty string is reserved as the "no selection" sentinel and will be treated as "cleared".`);
52
+ }
53
+ }
54
+ const size = validSize ? rawSize : 'md';
55
+ const selectId = externalId ?? generateSelectId();
56
+ const listboxId = `${selectId}-listbox`;
57
+ // -- Shared state & callbacks ----------------------------------------------
58
+ // Internal value for uncontrolled mode. A non-function `value` is treated
59
+ // as the initial uncontrolled value; only function-valued `value` props are
60
+ // controlled/reactive.
61
+ let internalValue = typeof value === 'function' ? undefined : value;
62
+ const isControlled = typeof value === 'function';
63
+ const readOptions = () => typeof optionsProp === 'function' ? optionsProp() : optionsProp;
64
+ const readValue = () => {
65
+ if (typeof value === 'function')
66
+ return value();
67
+ return internalValue;
68
+ };
69
+ const readDisabled = () => typeof disabled === 'function' ? disabled() : disabled;
70
+ const readReadonly = () => typeof readonlyProp === 'function' ? readonlyProp() : readonlyProp;
71
+ const readError = () => (typeof error === 'function' ? error() : error);
72
+ const readErrorMessage = () => typeof errorMessage === 'function' ? errorMessage() : errorMessage;
73
+ const readSuccess = () => typeof success === 'function' ? success() : success;
74
+ const readLoading = () => typeof loading === 'function' ? loading() : loading;
75
+ const state = {
76
+ isOpen: false,
77
+ activeIndex: -1,
78
+ searchQuery: '',
79
+ filteredOptions: [],
80
+ };
81
+ // -- Element creation ------------------------------------------------------
82
+ const wrapper = document.createElement('div');
83
+ wrapper.classList.add('ui-select', 'u-radius-md');
84
+ wrapper.setAttribute('data-size', size);
85
+ // Hidden native select for form submission only (not constraint validation).
86
+ // aria-required + custom error states handle validation; native validation is
87
+ // skipped to avoid browser popover on a non-interactive element.
88
+ const hiddenSelect = document.createElement('select');
89
+ hiddenSelect.hidden = true;
90
+ hiddenSelect.tabIndex = -1;
91
+ hiddenSelect.setAttribute('aria-hidden', 'true');
92
+ if (name != null)
93
+ hiddenSelect.name = name;
94
+ wrapper.appendChild(hiddenSelect);
95
+ // Trigger — uses <div> instead of <button> so nested clear <button> is valid HTML.
96
+ // role="combobox" + tabindex="0" provides the same keyboard/screen-reader contract.
97
+ const trigger = document.createElement('div');
98
+ trigger.id = selectId;
99
+ trigger.classList.add('ui-select-trigger');
100
+ trigger.setAttribute('role', 'combobox');
101
+ trigger.tabIndex = 0;
102
+ trigger.setAttribute('aria-haspopup', 'listbox');
103
+ trigger.setAttribute('aria-expanded', 'false');
104
+ trigger.setAttribute('aria-controls', listboxId);
105
+ trigger.setAttribute('aria-label', label);
106
+ // Value display
107
+ const valueDisplay = document.createElement('span');
108
+ valueDisplay.classList.add('ui-select-value');
109
+ trigger.appendChild(valueDisplay);
110
+ // Clear button
111
+ let clearBtnEl;
112
+ let clearClickHandler;
113
+ let clearKeydownHandler;
114
+ if (clearable) {
115
+ clearBtnEl = document.createElement('button');
116
+ clearBtnEl.type = 'button';
117
+ clearBtnEl.classList.add('ui-select-clear');
118
+ clearBtnEl.setAttribute('aria-label', 'Clear selection');
119
+ clearBtnEl.textContent = '\u00D7'; // ×
120
+ clearBtnEl.toggleAttribute('data-hidden', true);
121
+ clearBtnEl.tabIndex = -1;
122
+ clearBtnEl.setAttribute('aria-hidden', 'true');
123
+ clearClickHandler = (e) => {
124
+ e.stopPropagation();
125
+ selectValue('', undefined, els, cbs);
126
+ trigger.focus();
127
+ };
128
+ clearKeydownHandler = (e) => {
129
+ // Stop all keydown propagation — prevents trigger's combobox keyboard
130
+ // handler from intercepting Arrow/Escape/Home/End while clear is focused.
131
+ e.stopPropagation();
132
+ };
133
+ clearBtnEl.addEventListener('click', clearClickHandler);
134
+ clearBtnEl.addEventListener('keydown', clearKeydownHandler);
135
+ trigger.appendChild(clearBtnEl);
136
+ }
137
+ // State icon (success checkmark / error alert)
138
+ const stateIconEl = createStateIcon('ui-select-state-icon');
139
+ trigger.appendChild(stateIconEl);
140
+ // Chevron
141
+ const chevronEl = document.createElement('span');
142
+ chevronEl.classList.add('ui-select-chevron');
143
+ chevronEl.innerHTML = CHEVRON_DOWN_ICON;
144
+ trigger.appendChild(chevronEl);
145
+ if (required) {
146
+ wrapper.setAttribute('data-required', '');
147
+ trigger.setAttribute('aria-required', 'true');
148
+ }
149
+ wrapper.appendChild(trigger);
150
+ // -- Dropdown --------------------------------------------------------------
151
+ const dropdown = document.createElement('div');
152
+ dropdown.classList.add('ui-select-dropdown');
153
+ dropdown.setAttribute('data-size', size);
154
+ dropdown.hidden = true;
155
+ // Search input (when searchable)
156
+ let searchInput;
157
+ let searchInputHandler;
158
+ if (searchable) {
159
+ const searchWrapper = document.createElement('div');
160
+ searchWrapper.classList.add('ui-select-search');
161
+ searchInput = document.createElement('input');
162
+ searchInput.type = 'text';
163
+ searchInput.classList.add('ui-select-search-input');
164
+ searchInput.setAttribute('role', 'searchbox');
165
+ searchInput.setAttribute('aria-label', `Search ${label}`);
166
+ searchInput.setAttribute('aria-autocomplete', 'list');
167
+ searchInput.setAttribute('aria-controls', listboxId);
168
+ searchInput.setAttribute('autocomplete', 'off');
169
+ searchInput.placeholder = 'Search\u2026';
170
+ searchInputHandler = () => {
171
+ state.searchQuery = searchInput.value;
172
+ renderOptions(state, els, cbs);
173
+ };
174
+ searchInput.addEventListener('input', searchInputHandler);
175
+ searchWrapper.appendChild(searchInput);
176
+ dropdown.appendChild(searchWrapper);
177
+ }
178
+ // Listbox
179
+ const listbox = document.createElement('ul');
180
+ listbox.id = listboxId;
181
+ listbox.setAttribute('role', 'listbox');
182
+ listbox.setAttribute('aria-label', label);
183
+ listbox.classList.add('ui-select-listbox');
184
+ listbox.tabIndex = -1;
185
+ dropdown.appendChild(listbox);
186
+ // Empty state
187
+ const emptyEl = document.createElement('li');
188
+ emptyEl.classList.add('ui-select-empty');
189
+ emptyEl.textContent = 'No options found';
190
+ emptyEl.setAttribute('role', 'presentation');
191
+ emptyEl.hidden = true;
192
+ listbox.appendChild(emptyEl);
193
+ // Live region — announces filtered option count to screen readers
194
+ const liveRegion = document.createElement('span');
195
+ liveRegion.setAttribute('role', 'status');
196
+ liveRegion.setAttribute('aria-live', 'polite');
197
+ liveRegion.setAttribute('aria-atomic', 'true');
198
+ liveRegion.classList.add('u-sr-only');
199
+ wrapper.appendChild(liveRegion);
200
+ wrapper.appendChild(dropdown);
201
+ // -- Wire up shared structs ------------------------------------------------
202
+ const els = {
203
+ wrapper,
204
+ trigger,
205
+ dropdown,
206
+ listbox,
207
+ emptyEl,
208
+ searchInput,
209
+ chevronEl,
210
+ clearBtnEl,
211
+ liveRegion,
212
+ };
213
+ const cbs = {
214
+ readOptions,
215
+ readValue,
216
+ readDisabled,
217
+ readReadonly,
218
+ readLoading,
219
+ selectId,
220
+ onChange: (val, opt) => {
221
+ if (!isControlled) {
222
+ internalValue = val;
223
+ updateValueDisplay();
224
+ }
225
+ onChange?.(val, opt);
226
+ },
227
+ };
228
+ // -- Keyboard handlers -----------------------------------------------------
229
+ const triggerKeydown = createTriggerKeydownHandler(state, els, cbs);
230
+ const triggerKeydownHandler = triggerKeydown.handler;
231
+ const searchKeydownHandler = searchInput
232
+ ? createSearchKeydownHandler(state, els, cbs)
233
+ : undefined;
234
+ // -- Delegated listbox click ------------------------------------------------
235
+ const listboxClickHandler = createListboxClickHandler(state, els, cbs);
236
+ listbox.addEventListener('click', listboxClickHandler);
237
+ // -- Event listeners -------------------------------------------------------
238
+ const toggleHandler = () => toggleDropdown(state, els, cbs);
239
+ trigger.addEventListener('click', toggleHandler);
240
+ trigger.addEventListener('keydown', triggerKeydownHandler);
241
+ if (searchInput && searchKeydownHandler) {
242
+ searchInput.addEventListener('keydown', searchKeydownHandler);
243
+ }
244
+ const blurHandler = (e) => {
245
+ const related = e.relatedTarget;
246
+ // Wrapper + portaled dropdown are one focus unit.
247
+ if (related && (wrapper.contains(related) || dropdown.contains(related)))
248
+ return;
249
+ if (state.isOpen)
250
+ closeDropdown(state, els);
251
+ onBlur?.(e);
252
+ };
253
+ const focusHandler = (e) => {
254
+ onFocus?.(e);
255
+ };
256
+ wrapper.addEventListener('focusout', blurHandler);
257
+ trigger.addEventListener('focus', focusHandler);
258
+ // Close on outside click
259
+ const outsideClickHandler = (e) => {
260
+ if (!state.isOpen)
261
+ return;
262
+ const t = e.target;
263
+ // Clicks inside wrapper OR the portaled dropdown are "inside" the Select.
264
+ if (wrapper.contains(t) || dropdown.contains(t))
265
+ return;
266
+ closeDropdown(state, els);
267
+ };
268
+ document.addEventListener('click', outsideClickHandler);
269
+ // Reposition (don't close) on ancestor scroll — closing breaks UX when the Select
270
+ // sits inside a scrollable panel (e.g. studio properties list). rAF-coalesced
271
+ // because capture-phase scroll fires for every scrollable ancestor.
272
+ let scrollRaf = 0;
273
+ const scrollRepositionHandler = (e) => {
274
+ if (!state.isOpen || e.target === listbox || scrollRaf)
275
+ return;
276
+ scrollRaf = requestAnimationFrame(() => {
277
+ scrollRaf = 0;
278
+ if (state.isOpen)
279
+ positionDropdown(els);
280
+ });
281
+ };
282
+ document.addEventListener('scroll', scrollRepositionHandler, true);
283
+ // Reposition on viewport changes — the dropdown is position:fixed, so window
284
+ // resize / rotation / soft-keyboard show detaches it from the trigger.
285
+ const resizeRepositionHandler = () => {
286
+ if (!state.isOpen)
287
+ return;
288
+ positionDropdown(els);
289
+ };
290
+ window.addEventListener('resize', resizeRepositionHandler);
291
+ window.visualViewport?.addEventListener('resize', resizeRepositionHandler);
292
+ // Close on cross-component dismiss — the dropdown is portaled to <body>, so
293
+ // [inert]/[hidden] on the trigger's ancestors doesn't reach it via normal events.
294
+ const dismissPopoversHandler = () => {
295
+ if (state.isOpen)
296
+ closeDropdown(state, els);
297
+ };
298
+ document.addEventListener('pithy:dismiss-popovers', dismissPopoversHandler);
299
+ // -- Helper text ------------------------------------------------------------
300
+ const helperId = `${selectId}-helper`;
301
+ const helperEl = createHelperElement(helperId, helperText);
302
+ // -- Error message ----------------------------------------------------------
303
+ const errorMsgId = `${selectId}-error`;
304
+ const errorMsgEl = createErrorElement(errorMsgId, errorMessage);
305
+ // -- Reactive state --------------------------------------------------------
306
+ const isReactive = typeof value === 'function' ||
307
+ typeof optionsProp === 'function' ||
308
+ typeof disabled === 'function' ||
309
+ typeof readonlyProp === 'function' ||
310
+ typeof error === 'function' ||
311
+ typeof errorMessage === 'function' ||
312
+ typeof success === 'function' ||
313
+ typeof loading === 'function';
314
+ const formTracker = createFormStateTracker();
315
+ function updateValueDisplay() {
316
+ const currentVal = readValue();
317
+ const selected = currentVal
318
+ ? readOptions().find(o => o.value === currentVal)
319
+ : undefined;
320
+ if (selected) {
321
+ valueDisplay.textContent = selected.label;
322
+ valueDisplay.classList.remove('ui-select-placeholder');
323
+ wrapper.setAttribute('data-filled', '');
324
+ }
325
+ else {
326
+ valueDisplay.textContent = placeholder ?? '';
327
+ if (placeholder) {
328
+ valueDisplay.classList.add('ui-select-placeholder');
329
+ }
330
+ wrapper.removeAttribute('data-filled');
331
+ }
332
+ // Update hidden select for form submission — only when a matching option exists
333
+ hiddenSelect.innerHTML = '';
334
+ if (selected) {
335
+ const nativeOpt = document.createElement('option');
336
+ nativeOpt.value = selected.value;
337
+ nativeOpt.selected = true;
338
+ hiddenSelect.appendChild(nativeOpt);
339
+ }
340
+ // Clear button visibility — also remove from tab order when hidden
341
+ if (clearBtnEl) {
342
+ const show = !!selected && !readDisabled() && !readReadonly();
343
+ clearBtnEl.toggleAttribute('data-hidden', !show);
344
+ clearBtnEl.tabIndex = show ? 0 : -1;
345
+ clearBtnEl.setAttribute('aria-hidden', show ? 'false' : 'true');
346
+ }
347
+ }
348
+ const applyState = () => {
349
+ // Always read options so signal dependency is tracked even when dropdown is closed
350
+ readOptions();
351
+ // Value display
352
+ updateValueDisplay();
353
+ // Disabled — div has no native disabled; use tabIndex + aria-disabled
354
+ const isDisabled = readDisabled();
355
+ trigger.tabIndex = isDisabled ? -1 : 0;
356
+ hiddenSelect.disabled = !!isDisabled;
357
+ if (isDisabled) {
358
+ trigger.setAttribute('aria-disabled', 'true');
359
+ wrapper.setAttribute('data-disabled', '');
360
+ }
361
+ else {
362
+ trigger.removeAttribute('aria-disabled');
363
+ wrapper.removeAttribute('data-disabled');
364
+ }
365
+ // Readonly
366
+ const isReadonly = readReadonly();
367
+ if (isReadonly) {
368
+ trigger.setAttribute('aria-readonly', 'true');
369
+ wrapper.setAttribute('data-readonly', '');
370
+ }
371
+ else {
372
+ trigger.removeAttribute('aria-readonly');
373
+ wrapper.removeAttribute('data-readonly');
374
+ }
375
+ // Error / success state, icons, shake, pop, helper/error text swap
376
+ applyFormState({ wrapper, control: trigger, stateIconEl, helperEl, errorMsgEl }, { readError, readErrorMessage, readSuccess }, { helperId, errorMsgId }, { shakeClass: 'ui-select-shake', iconPrefix: 'ui-select-state-icon' }, formTracker);
377
+ // Loading — announce state change to screen readers via live region
378
+ const isLoading = readLoading();
379
+ wrapper.classList.toggle('ui-select-loading', !!isLoading);
380
+ if (isLoading) {
381
+ trigger.setAttribute('aria-busy', 'true');
382
+ chevronEl.hidden = true;
383
+ if (liveRegion)
384
+ liveRegion.textContent = 'Loading';
385
+ }
386
+ else {
387
+ trigger.removeAttribute('aria-busy');
388
+ chevronEl.hidden = false;
389
+ if (liveRegion && liveRegion.textContent === 'Loading') {
390
+ liveRegion.textContent = '';
391
+ }
392
+ }
393
+ if (clearBtnEl && isLoading) {
394
+ clearBtnEl.toggleAttribute('data-hidden', true);
395
+ clearBtnEl.tabIndex = -1;
396
+ clearBtnEl.setAttribute('aria-hidden', 'true');
397
+ }
398
+ // Close dropdown if disabled/readonly/loading became true while open
399
+ if (state.isOpen && (isDisabled || isReadonly || isLoading)) {
400
+ closeDropdown(state, els);
401
+ }
402
+ // Re-render options if dropdown is open (reactive options)
403
+ if (state.isOpen) {
404
+ renderOptions(state, els, cbs);
405
+ }
406
+ formTracker.firstRun = false;
407
+ };
408
+ const cleanupEffect = isReactive
409
+ ? effect(applyState)
410
+ : (applyState(), undefined);
411
+ // -- Return ----------------------------------------------------------------
412
+ const { root, needsContainer: needsWrapper } = wrapFormControl(wrapper, {
413
+ helperEl,
414
+ errorMsgEl,
415
+ containerClass: 'ui-select-wrapper',
416
+ });
417
+ return {
418
+ el: root,
419
+ destroy: () => {
420
+ cleanupEffect?.();
421
+ triggerKeydown.destroy();
422
+ clearTimeout(state.closeFallbackTimer);
423
+ document.removeEventListener('click', outsideClickHandler);
424
+ document.removeEventListener('scroll', scrollRepositionHandler, true);
425
+ if (scrollRaf)
426
+ cancelAnimationFrame(scrollRaf);
427
+ window.removeEventListener('resize', resizeRepositionHandler);
428
+ window.visualViewport?.removeEventListener('resize', resizeRepositionHandler);
429
+ document.removeEventListener('pithy:dismiss-popovers', dismissPopoversHandler);
430
+ trigger.removeEventListener('click', toggleHandler);
431
+ trigger.removeEventListener('keydown', triggerKeydownHandler);
432
+ trigger.removeEventListener('focus', focusHandler);
433
+ wrapper.removeEventListener('focusout', blurHandler);
434
+ if (searchInput && searchInputHandler) {
435
+ searchInput.removeEventListener('input', searchInputHandler);
436
+ }
437
+ if (searchInput && searchKeydownHandler) {
438
+ searchInput.removeEventListener('keydown', searchKeydownHandler);
439
+ }
440
+ listbox.removeEventListener('click', listboxClickHandler);
441
+ if (clearBtnEl && clearClickHandler) {
442
+ clearBtnEl.removeEventListener('click', clearClickHandler);
443
+ }
444
+ if (clearBtnEl && clearKeydownHandler) {
445
+ clearBtnEl.removeEventListener('keydown', clearKeydownHandler);
446
+ }
447
+ cleanupFormState(wrapper, stateIconEl, formTracker);
448
+ // Dropdown was portaled to <body> in openDropdown — release explicitly.
449
+ dropdown.remove();
450
+ wrapper.replaceChildren();
451
+ if (needsWrapper) {
452
+ root.replaceChildren();
453
+ }
454
+ },
455
+ };
456
+ }
457
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../../src/atoms/forms/select/Select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /** @codex { "id": "pithy.ui-kit.select-dropdown", "title": "Select Dropdown State", "category": "feature" } */
2
+ /**
3
+ * Dropdown state management for <Select> — open/close, option rendering,
4
+ * active-descendant tracking, and scroll-into-view.
5
+ *
6
+ * @internal — not part of public API. Exports are consumed only by Select.ts.
7
+ */
8
+ import type { SelectOption } from '../../../shared/select';
9
+ export interface DropdownState {
10
+ isOpen: boolean;
11
+ activeIndex: number;
12
+ searchQuery: string;
13
+ filteredOptions: SelectOption[];
14
+ /** Close-animation fallback timer — cleared on destroy to prevent stale callbacks */
15
+ closeFallbackTimer?: ReturnType<typeof setTimeout>;
16
+ }
17
+ export interface DropdownElements {
18
+ wrapper: HTMLElement;
19
+ trigger: HTMLElement;
20
+ dropdown: HTMLElement;
21
+ listbox: HTMLUListElement;
22
+ emptyEl: HTMLLIElement;
23
+ searchInput?: HTMLInputElement;
24
+ chevronEl: HTMLSpanElement;
25
+ clearBtnEl?: HTMLButtonElement;
26
+ liveRegion?: HTMLElement;
27
+ }
28
+ export interface DropdownCallbacks {
29
+ readOptions: () => SelectOption[];
30
+ readValue: () => string | undefined;
31
+ readDisabled: () => boolean | undefined;
32
+ readReadonly: () => boolean | undefined;
33
+ readLoading: () => boolean | undefined;
34
+ selectId: string;
35
+ onChange?: (value: string, option: SelectOption | undefined) => void;
36
+ }
37
+ export declare function renderOptions(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): void;
38
+ export declare function selectValue(val: string, opt: SelectOption | undefined, els: DropdownElements, cbs: DropdownCallbacks): void;
39
+ export declare function openDropdown(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): void;
40
+ export declare function positionDropdown(els: DropdownElements): void;
41
+ export declare function closeDropdown(state: DropdownState, els: DropdownElements): void;
42
+ export declare function toggleDropdown(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): void;
43
+ export declare function moveActive(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks, delta: number): void;
44
+ /**
45
+ * Single delegated click handler for the listbox. Attach once to `els.listbox`
46
+ * instead of per-option listeners — cleaner cleanup and O(1) listener count.
47
+ */
48
+ export declare function createListboxClickHandler(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): (e: MouseEvent) => void;
49
+ //# sourceMappingURL=select-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-dropdown.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/select/select-dropdown.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACxC,YAAY,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACxC,WAAW,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,CAAC;CACtE;AAID,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,IAAI,CAmEN;AAID,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,GAAG,SAAS,EAC7B,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,IAAI,CAEN;AAID,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,IAAI,CA4CN;AAaD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAuB5D;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,GACpB,IAAI,CA0EN;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,IAAI,CAMN;AAyCD,wBAAgB,UAAU,CACxB,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,MAAM,GACZ,IAAI,CAqBN;AAID;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAmBzB"}