@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,305 @@
1
+ /** @codex { "id": "pithy.ui-kit.select-dropdown", "title": "Select Dropdown State", "category": "feature" } */
2
+ import { CHECK_ICON } from '../../../shared/icons';
3
+ // -- Option rendering --------------------------------------------------------
4
+ export function renderOptions(state, els, cbs) {
5
+ // Clear existing option elements (keep emptyEl)
6
+ const optionEls = els.listbox.querySelectorAll("[role='option']");
7
+ optionEls.forEach(el => el.remove());
8
+ const options = cbs.readOptions();
9
+ state.filteredOptions = getFilteredOptions(options, state.searchQuery, !!els.searchInput);
10
+ const currentVal = cbs.readValue();
11
+ els.emptyEl.hidden = state.filteredOptions.length > 0;
12
+ state.filteredOptions.forEach((opt, i) => {
13
+ const li = document.createElement('li');
14
+ li.id = optionIdFor(cbs.selectId, i);
15
+ li.setAttribute('role', 'option');
16
+ li.classList.add('ui-select-option');
17
+ if (opt.disabled) {
18
+ li.setAttribute('aria-disabled', 'true');
19
+ li.classList.add('ui-select-option-disabled');
20
+ }
21
+ const isSelected = opt.value === currentVal;
22
+ li.setAttribute('aria-selected', String(isSelected));
23
+ if (isSelected)
24
+ li.classList.add('ui-select-option-selected');
25
+ if (i === state.activeIndex)
26
+ li.classList.add('ui-select-option-active');
27
+ // Option label — highlight matched substring when searching
28
+ const labelSpan = document.createElement('span');
29
+ labelSpan.classList.add('ui-select-option-label');
30
+ if (state.searchQuery && els.searchInput) {
31
+ highlightMatch(labelSpan, opt.label, state.searchQuery);
32
+ }
33
+ else {
34
+ labelSpan.textContent = opt.label;
35
+ }
36
+ li.appendChild(labelSpan);
37
+ // Selected check
38
+ if (isSelected) {
39
+ const checkSpan = document.createElement('span');
40
+ checkSpan.classList.add('ui-select-option-check');
41
+ checkSpan.innerHTML = CHECK_ICON;
42
+ li.appendChild(checkSpan);
43
+ }
44
+ // Insert before emptyEl
45
+ els.listbox.insertBefore(li, els.emptyEl);
46
+ });
47
+ updateActiveDescendant(state, els, cbs.selectId);
48
+ // Announce filtered count to screen readers
49
+ if (els.liveRegion && els.searchInput) {
50
+ const total = options.length;
51
+ const count = state.filteredOptions.length;
52
+ els.liveRegion.textContent =
53
+ count === 0
54
+ ? 'No results'
55
+ : count === total
56
+ ? `${count} options`
57
+ : `${count} of ${total} options`;
58
+ }
59
+ }
60
+ // -- Value selection ---------------------------------------------------------
61
+ export function selectValue(val, opt, els, cbs) {
62
+ cbs.onChange?.(val, opt);
63
+ }
64
+ // -- Open / close ------------------------------------------------------------
65
+ export function openDropdown(state, els, cbs) {
66
+ if (cbs.readDisabled() || cbs.readReadonly() || cbs.readLoading())
67
+ return;
68
+ if (state.isOpen)
69
+ return;
70
+ // Clear any in-progress close animation and its fallback timer
71
+ els.dropdown.classList.remove('ui-select-dropdown-closing');
72
+ if (state.closeFallbackTimer != null) {
73
+ clearTimeout(state.closeFallbackTimer);
74
+ state.closeFallbackTimer = undefined;
75
+ }
76
+ state.isOpen = true;
77
+ // Portal to <body> so position:fixed escapes containing-block traps (transform/scale ancestors).
78
+ if (els.dropdown.parentElement !== document.body) {
79
+ document.body.appendChild(els.dropdown);
80
+ }
81
+ els.dropdown.hidden = false;
82
+ els.trigger.setAttribute('aria-expanded', 'true');
83
+ els.wrapper.setAttribute('data-open', '');
84
+ // Reset search
85
+ if (els.searchInput) {
86
+ els.searchInput.value = '';
87
+ state.searchQuery = '';
88
+ }
89
+ // Set active index to selected option
90
+ const currentVal = cbs.readValue();
91
+ const opts = getFilteredOptions(cbs.readOptions(), '', !!els.searchInput);
92
+ state.activeIndex = currentVal
93
+ ? opts.findIndex(o => o.value === currentVal)
94
+ : -1;
95
+ // Render options BEFORE measuring — dropdown needs content for correct height
96
+ renderOptions(state, els, cbs);
97
+ positionDropdown(els);
98
+ // Focus search input when searchable
99
+ if (els.searchInput) {
100
+ els.searchInput.focus();
101
+ }
102
+ scrollActiveIntoView(state, els, cbs.selectId);
103
+ }
104
+ // jsdom returns "ltr" from getComputedStyle regardless of inheritance.
105
+ function resolveDirection(el) {
106
+ let cur = el;
107
+ while (cur) {
108
+ const dir = cur.getAttribute?.('dir');
109
+ if (dir === 'rtl' || dir === 'ltr')
110
+ return dir;
111
+ cur = cur.parentElement;
112
+ }
113
+ return getComputedStyle(el).direction === 'rtl' ? 'rtl' : 'ltr';
114
+ }
115
+ export function positionDropdown(els) {
116
+ const triggerRect = els.trigger.getBoundingClientRect();
117
+ const viewportWidth = document.documentElement.clientWidth;
118
+ const viewportHeight = document.documentElement.clientHeight;
119
+ const dropdownHeight = els.dropdown.offsetHeight || 240;
120
+ const spaceBelow = viewportHeight - triggerRect.bottom;
121
+ const placeTop = spaceBelow < dropdownHeight && triggerRect.top > spaceBelow;
122
+ const isRtl = resolveDirection(els.trigger) === 'rtl';
123
+ const inlineStart = isRtl
124
+ ? viewportWidth - triggerRect.right
125
+ : triggerRect.left;
126
+ els.dropdown.dir = isRtl ? 'rtl' : 'ltr';
127
+ const s = els.dropdown.style;
128
+ s.setProperty('--_select-trigger-inline-start', `${inlineStart}px`);
129
+ s.setProperty('--_select-trigger-inline-size', `${triggerRect.width}px`);
130
+ s.setProperty('--_select-trigger-bottom', `${triggerRect.bottom}px`);
131
+ s.setProperty('--_select-trigger-from-bottom', `${viewportHeight - triggerRect.top}px`);
132
+ if (placeTop)
133
+ els.dropdown.setAttribute('data-placement', 'top');
134
+ else
135
+ els.dropdown.removeAttribute('data-placement');
136
+ }
137
+ export function closeDropdown(state, els) {
138
+ if (!state.isOpen)
139
+ return;
140
+ state.isOpen = false;
141
+ els.trigger.setAttribute('aria-expanded', 'false');
142
+ els.wrapper.removeAttribute('data-open');
143
+ state.activeIndex = -1;
144
+ els.trigger.removeAttribute('aria-activedescendant');
145
+ state.searchQuery = '';
146
+ if (els.searchInput) {
147
+ els.searchInput.value = '';
148
+ els.searchInput.removeAttribute('aria-activedescendant');
149
+ }
150
+ // If focus is inside the dropdown, move it back to the trigger before
151
+ // hiding — prevents focus from dropping to <body>. Skip when the search
152
+ // input is focused so Tab can continue the browser's normal focus order.
153
+ const activeElement = document.activeElement;
154
+ if (activeElement &&
155
+ els.dropdown.contains(activeElement) &&
156
+ activeElement !== els.searchInput) {
157
+ els.trigger.focus();
158
+ }
159
+ // Animated close — add closing class, wait for animation, then hide.
160
+ // Falls back to instant hide when motion is reduced, no CSS loaded (JSDOM), etc.
161
+ //
162
+ // The closing CSS uses a *distinct* keyframe name (_select-exit-down / _select-exit-up)
163
+ // instead of reversing the entrance animation. This is critical because browsers
164
+ // won't replay an animation with the same `animation-name` even when direction or
165
+ // fill-mode changes. Using a unique name guarantees the exit animation always fires.
166
+ const dropdown = els.dropdown;
167
+ const prefersReduced = typeof window.matchMedia === 'function' &&
168
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches;
169
+ if (prefersReduced) {
170
+ dropdown.hidden = true;
171
+ return;
172
+ }
173
+ dropdown.classList.add('ui-select-dropdown-closing');
174
+ // Check if the closing animation actually resolved (CSS must be loaded)
175
+ const style = getComputedStyle(dropdown);
176
+ const hasAnimation = style.animationName && style.animationName !== 'none';
177
+ if (!hasAnimation) {
178
+ dropdown.classList.remove('ui-select-dropdown-closing');
179
+ dropdown.hidden = true;
180
+ return;
181
+ }
182
+ const onEnd = () => {
183
+ // Guard against rapid reopen — if dropdown was reopened, skip hiding
184
+ if (state.isOpen)
185
+ return;
186
+ dropdown.classList.remove('ui-select-dropdown-closing');
187
+ dropdown.hidden = true;
188
+ dropdown.removeEventListener('animationend', onEnd);
189
+ };
190
+ dropdown.addEventListener('animationend', onEnd, { once: true });
191
+ // Safety fallback — if animationend never fires (e.g. display:none race,
192
+ // tab hidden). Stored on state so destroy() can clear it.
193
+ state.closeFallbackTimer = setTimeout(() => {
194
+ state.closeFallbackTimer = undefined;
195
+ if (state.isOpen)
196
+ return;
197
+ if (dropdown.classList.contains('ui-select-dropdown-closing')) {
198
+ onEnd();
199
+ }
200
+ }, 300);
201
+ }
202
+ export function toggleDropdown(state, els, cbs) {
203
+ if (state.isOpen) {
204
+ closeDropdown(state, els);
205
+ }
206
+ else {
207
+ openDropdown(state, els, cbs);
208
+ }
209
+ }
210
+ // -- Active descendant -------------------------------------------------------
211
+ function updateActiveDescendant(state, els, selectId) {
212
+ const target = els.searchInput ?? els.trigger;
213
+ if (state.activeIndex >= 0 &&
214
+ state.activeIndex < state.filteredOptions.length) {
215
+ target.setAttribute('aria-activedescendant', optionIdFor(selectId, state.activeIndex));
216
+ }
217
+ else {
218
+ target.removeAttribute('aria-activedescendant');
219
+ }
220
+ // Update visual active state
221
+ const optionEls = els.listbox.querySelectorAll("[role='option']");
222
+ optionEls.forEach((el, i) => {
223
+ el.classList.toggle('ui-select-option-active', i === state.activeIndex);
224
+ });
225
+ }
226
+ function scrollActiveIntoView(state, els, selectId) {
227
+ if (state.activeIndex < 0)
228
+ return;
229
+ const activeEl = els.listbox.querySelector(`#${optionIdFor(selectId, state.activeIndex)}`);
230
+ activeEl?.scrollIntoView({ block: 'nearest' });
231
+ }
232
+ export function moveActive(state, els, cbs, delta) {
233
+ const opts = state.filteredOptions;
234
+ if (opts.length === 0)
235
+ return;
236
+ let next = state.activeIndex + delta;
237
+ const maxSteps = opts.length;
238
+ let steps = 0;
239
+ while (steps < maxSteps) {
240
+ if (next < 0)
241
+ next = opts.length - 1;
242
+ if (next >= opts.length)
243
+ next = 0;
244
+ if (!opts[next].disabled)
245
+ break;
246
+ next += delta;
247
+ steps++;
248
+ }
249
+ if (steps >= maxSteps)
250
+ return; // All disabled
251
+ state.activeIndex = next;
252
+ updateActiveDescendant(state, els, cbs.selectId);
253
+ scrollActiveIntoView(state, els, cbs.selectId);
254
+ }
255
+ // -- Delegated click handler -------------------------------------------------
256
+ /**
257
+ * Single delegated click handler for the listbox. Attach once to `els.listbox`
258
+ * instead of per-option listeners — cleaner cleanup and O(1) listener count.
259
+ */
260
+ export function createListboxClickHandler(state, els, cbs) {
261
+ return (e) => {
262
+ const target = e.target.closest("[role='option']");
263
+ if (!target)
264
+ return;
265
+ const index = Array.from(els.listbox.querySelectorAll("[role='option']")).indexOf(target);
266
+ if (index < 0)
267
+ return;
268
+ const opt = state.filteredOptions[index];
269
+ if (!opt || opt.disabled)
270
+ return;
271
+ selectValue(opt.value, opt, els, cbs);
272
+ closeDropdown(state, els);
273
+ els.trigger.focus();
274
+ };
275
+ }
276
+ // -- Helpers -----------------------------------------------------------------
277
+ function getFilteredOptions(options, query, searchable) {
278
+ if (!searchable || !query)
279
+ return options;
280
+ const q = query.toLowerCase();
281
+ return options.filter(o => o.label.toLowerCase().includes(q));
282
+ }
283
+ function optionIdFor(selectId, index) {
284
+ return `${selectId}-option-${index}`;
285
+ }
286
+ function highlightMatch(container, label, query) {
287
+ const lowerLabel = label.toLowerCase();
288
+ const lowerQuery = query.toLowerCase();
289
+ const start = lowerLabel.indexOf(lowerQuery);
290
+ if (start < 0) {
291
+ container.textContent = label;
292
+ return;
293
+ }
294
+ const end = start + query.length;
295
+ if (start > 0) {
296
+ container.appendChild(document.createTextNode(label.slice(0, start)));
297
+ }
298
+ const mark = document.createElement('mark');
299
+ mark.textContent = label.slice(start, end);
300
+ container.appendChild(mark);
301
+ if (end < label.length) {
302
+ container.appendChild(document.createTextNode(label.slice(end)));
303
+ }
304
+ }
305
+ //# sourceMappingURL=select-dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-dropdown.js","sourceRoot":"","sources":["../../../../src/atoms/forms/select/select-dropdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** @codex { "id": "pithy.ui-kit.select-keyboard", "title": "Select Keyboard Handlers", "category": "feature" } */
2
+ /**
3
+ * Keyboard event handlers for <Select> — trigger and search input.
4
+ * Implements ARIA combobox keyboard interaction pattern.
5
+ *
6
+ * @internal — not part of public API. Exports are consumed only by Select.ts.
7
+ */
8
+ import { type DropdownState, type DropdownElements, type DropdownCallbacks } from './select-dropdown';
9
+ export declare function createTriggerKeydownHandler(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): {
10
+ handler: (e: KeyboardEvent) => void;
11
+ destroy: () => void;
12
+ };
13
+ export declare function createSearchKeydownHandler(state: DropdownState, els: DropdownElements, cbs: DropdownCallbacks): (e: KeyboardEvent) => void;
14
+ //# sourceMappingURL=select-keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-keyboard.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/select/select-keyboard.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAElH;;;;;GAKG;AAEH,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB;IAAE,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA6G9D;AAID,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAyD5B"}
@@ -0,0 +1,182 @@
1
+ /** @codex { "id": "pithy.ui-kit.select-keyboard", "title": "Select Keyboard Handlers", "category": "feature" } */
2
+ /**
3
+ * Keyboard event handlers for <Select> — trigger and search input.
4
+ * Implements ARIA combobox keyboard interaction pattern.
5
+ *
6
+ * @internal — not part of public API. Exports are consumed only by Select.ts.
7
+ */
8
+ import { openDropdown, closeDropdown, moveActive, renderOptions, selectValue, } from './select-dropdown';
9
+ // -- Type-ahead constants -----------------------------------------------------
10
+ const TYPEAHEAD_TIMEOUT = 500;
11
+ const PAGE_SIZE = 5;
12
+ // -- Trigger keyboard handler ------------------------------------------------
13
+ export function createTriggerKeydownHandler(state, els, cbs) {
14
+ let typeaheadBuffer = '';
15
+ let typeaheadTimer;
16
+ const handler = (e) => {
17
+ if (cbs.readDisabled() || cbs.readReadonly() || cbs.readLoading())
18
+ return;
19
+ // Type-ahead when dropdown is closed — single printable character
20
+ if (!state.isOpen &&
21
+ e.key.length === 1 &&
22
+ e.key !== ' ' &&
23
+ !e.ctrlKey &&
24
+ !e.metaKey &&
25
+ !e.altKey) {
26
+ e.preventDefault();
27
+ typeaheadBuffer += e.key.toLowerCase();
28
+ clearTimeout(typeaheadTimer);
29
+ typeaheadTimer = setTimeout(() => {
30
+ typeaheadBuffer = '';
31
+ }, TYPEAHEAD_TIMEOUT);
32
+ const options = cbs.readOptions();
33
+ const match = options.find(o => !o.disabled && o.label.toLowerCase().startsWith(typeaheadBuffer));
34
+ if (match) {
35
+ selectValue(match.value, match, els, cbs);
36
+ }
37
+ return;
38
+ }
39
+ switch (e.key) {
40
+ case 'Enter':
41
+ case ' ':
42
+ e.preventDefault();
43
+ if (state.isOpen && state.activeIndex >= 0) {
44
+ const opt = state.filteredOptions[state.activeIndex];
45
+ if (opt && !opt.disabled) {
46
+ selectValue(opt.value, opt, els, cbs);
47
+ closeDropdown(state, els);
48
+ }
49
+ }
50
+ else {
51
+ openDropdown(state, els, cbs);
52
+ }
53
+ break;
54
+ case 'ArrowDown':
55
+ e.preventDefault();
56
+ if (!state.isOpen) {
57
+ openDropdown(state, els, cbs);
58
+ }
59
+ else {
60
+ moveActive(state, els, cbs, 1);
61
+ }
62
+ break;
63
+ case 'ArrowUp':
64
+ e.preventDefault();
65
+ if (!state.isOpen) {
66
+ openDropdown(state, els, cbs);
67
+ }
68
+ else {
69
+ moveActive(state, els, cbs, -1);
70
+ }
71
+ break;
72
+ case 'Home':
73
+ if (state.isOpen) {
74
+ e.preventDefault();
75
+ state.activeIndex = -1;
76
+ moveActive(state, els, cbs, 1);
77
+ }
78
+ break;
79
+ case 'End':
80
+ if (state.isOpen) {
81
+ e.preventDefault();
82
+ state.activeIndex = state.filteredOptions.length;
83
+ moveActive(state, els, cbs, -1);
84
+ }
85
+ break;
86
+ case 'PageDown':
87
+ if (state.isOpen) {
88
+ e.preventDefault();
89
+ for (let i = 0; i < PAGE_SIZE; i++)
90
+ moveActive(state, els, cbs, 1);
91
+ }
92
+ break;
93
+ case 'PageUp':
94
+ if (state.isOpen) {
95
+ e.preventDefault();
96
+ for (let i = 0; i < PAGE_SIZE; i++)
97
+ moveActive(state, els, cbs, -1);
98
+ }
99
+ break;
100
+ case 'Escape':
101
+ if (state.isOpen) {
102
+ e.preventDefault();
103
+ e.stopPropagation();
104
+ closeDropdown(state, els);
105
+ els.trigger.focus();
106
+ }
107
+ break;
108
+ case 'Tab':
109
+ if (state.isOpen) {
110
+ closeDropdown(state, els);
111
+ }
112
+ break;
113
+ }
114
+ };
115
+ return {
116
+ handler,
117
+ destroy: () => clearTimeout(typeaheadTimer),
118
+ };
119
+ }
120
+ // -- Search input keyboard handler -------------------------------------------
121
+ export function createSearchKeydownHandler(state, els, cbs) {
122
+ return (e) => {
123
+ switch (e.key) {
124
+ case 'ArrowDown':
125
+ e.preventDefault();
126
+ moveActive(state, els, cbs, 1);
127
+ break;
128
+ case 'ArrowUp':
129
+ e.preventDefault();
130
+ moveActive(state, els, cbs, -1);
131
+ break;
132
+ case 'Enter':
133
+ e.preventDefault();
134
+ if (state.activeIndex >= 0) {
135
+ const opt = state.filteredOptions[state.activeIndex];
136
+ if (opt && !opt.disabled) {
137
+ selectValue(opt.value, opt, els, cbs);
138
+ closeDropdown(state, els);
139
+ els.trigger.focus();
140
+ }
141
+ }
142
+ break;
143
+ case 'Escape':
144
+ e.preventDefault();
145
+ e.stopPropagation();
146
+ if (els.searchInput && els.searchInput.value) {
147
+ els.searchInput.value = '';
148
+ state.searchQuery = '';
149
+ renderOptions(state, els, cbs);
150
+ }
151
+ else {
152
+ closeDropdown(state, els);
153
+ els.trigger.focus();
154
+ }
155
+ break;
156
+ case 'Home':
157
+ e.preventDefault();
158
+ state.activeIndex = -1;
159
+ moveActive(state, els, cbs, 1);
160
+ break;
161
+ case 'End':
162
+ e.preventDefault();
163
+ state.activeIndex = state.filteredOptions.length;
164
+ moveActive(state, els, cbs, -1);
165
+ break;
166
+ case 'PageDown':
167
+ e.preventDefault();
168
+ for (let i = 0; i < PAGE_SIZE; i++)
169
+ moveActive(state, els, cbs, 1);
170
+ break;
171
+ case 'PageUp':
172
+ e.preventDefault();
173
+ for (let i = 0; i < PAGE_SIZE; i++)
174
+ moveActive(state, els, cbs, -1);
175
+ break;
176
+ case 'Tab':
177
+ closeDropdown(state, els);
178
+ break;
179
+ }
180
+ };
181
+ }
182
+ //# sourceMappingURL=select-keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-keyboard.js","sourceRoot":"","sources":["../../../../src/atoms/forms/select/select-keyboard.ts"],"names":[],"mappings":"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"}