@taiv/ui 1.15.0 → 2.0.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 (393) hide show
  1. package/dist/assets/assets.d.ts +12 -1
  2. package/dist/assets/assets.d.ts.map +1 -1
  3. package/dist/assets/assets.js +22 -16
  4. package/dist/assets/brand/taiv-favicon-dark.png +0 -0
  5. package/dist/assets/brand/taiv-favicon-light.png +0 -0
  6. package/dist/assets/brand/taiv-icon-black.svg +10 -0
  7. package/dist/assets/brand/taiv-icon-dark.svg +17 -0
  8. package/dist/assets/brand/taiv-icon-white.svg +17 -0
  9. package/dist/assets/brand/taiv-logo-black.svg +16 -0
  10. package/dist/assets/brand/taiv-logo-dark.svg +23 -0
  11. package/dist/assets/brand/taiv-logo-old.svg +1 -0
  12. package/dist/assets/brand/taiv-logo-purple.svg +16 -0
  13. package/dist/assets/brand/taiv-logo-white.svg +23 -0
  14. package/dist/assets/icons.d.ts +1 -1
  15. package/dist/assets/icons.d.ts.map +1 -1
  16. package/dist/assets/icons.js +57 -53
  17. package/dist/assets/index.d.ts +3 -0
  18. package/dist/assets/index.d.ts.map +1 -0
  19. package/dist/assets/index.js +2 -0
  20. package/dist/components/Data/BigCalendar/BigCalendar.d.ts +26 -0
  21. package/dist/components/Data/BigCalendar/BigCalendar.d.ts.map +1 -0
  22. package/dist/components/Data/BigCalendar/BigCalendar.js +54 -0
  23. package/dist/components/Data/BigCalendar/BigCalendar.stories.d.ts +8 -0
  24. package/dist/components/Data/BigCalendar/BigCalendar.stories.d.ts.map +1 -0
  25. package/dist/components/Data/BigCalendar/BigCalendar.stories.js +77 -0
  26. package/dist/components/Data/Calendar/Calendar.d.ts +102 -0
  27. package/dist/components/Data/Calendar/Calendar.d.ts.map +1 -0
  28. package/dist/components/Data/Calendar/Calendar.js +671 -0
  29. package/dist/components/Data/Calendar/Calendar.stories.d.ts +10 -0
  30. package/dist/components/Data/Calendar/Calendar.stories.d.ts.map +1 -0
  31. package/dist/components/Data/Calendar/Calendar.stories.js +87 -0
  32. package/dist/components/Data/MediaPill/MediaPill.d.ts +27 -0
  33. package/dist/components/Data/MediaPill/MediaPill.d.ts.map +1 -0
  34. package/dist/components/Data/MediaPill/MediaPill.js +53 -0
  35. package/dist/components/Data/MediaPill/MediaPill.stories.d.ts +10 -0
  36. package/dist/components/Data/MediaPill/MediaPill.stories.d.ts.map +1 -0
  37. package/dist/components/Data/MediaPill/MediaPill.stories.js +51 -0
  38. package/dist/components/Info/Avatar/Avatar.d.ts +9 -0
  39. package/dist/components/Info/Avatar/Avatar.d.ts.map +1 -0
  40. package/dist/components/Info/Avatar/Avatar.js +36 -0
  41. package/dist/components/Info/Avatar/Avatar.stories.d.ts +9 -0
  42. package/dist/components/Info/Avatar/Avatar.stories.d.ts.map +1 -0
  43. package/dist/components/Info/Avatar/Avatar.stories.js +78 -0
  44. package/dist/components/Info/Badge/Badge.stories.d.ts.map +1 -1
  45. package/dist/components/Info/Badge/Badge.stories.js +21 -6
  46. package/dist/components/Info/Badge/sizes.d.ts +10 -10
  47. package/dist/components/Info/Badge/sizes.js +16 -16
  48. package/dist/components/Info/Badge/variants.d.ts +4 -4
  49. package/dist/components/Info/Badge/variants.d.ts.map +1 -1
  50. package/dist/components/Info/Badge/variants.js +26 -13
  51. package/dist/components/Info/Drawer/Drawer.d.ts +24 -0
  52. package/dist/components/Info/Drawer/Drawer.d.ts.map +1 -0
  53. package/dist/components/Info/Drawer/Drawer.js +44 -0
  54. package/dist/components/Info/Drawer/Drawer.stories.d.ts +10 -0
  55. package/dist/components/Info/Drawer/Drawer.stories.d.ts.map +1 -0
  56. package/dist/components/Info/Drawer/Drawer.stories.js +47 -0
  57. package/dist/components/Info/HoverCard/HoverCard.d.ts +16 -0
  58. package/dist/components/Info/HoverCard/HoverCard.d.ts.map +1 -0
  59. package/dist/components/Info/HoverCard/HoverCard.js +26 -0
  60. package/dist/components/Info/HoverCard/HoverCard.stories.d.ts +11 -0
  61. package/dist/components/Info/HoverCard/HoverCard.stories.d.ts.map +1 -0
  62. package/dist/components/Info/HoverCard/HoverCard.stories.js +86 -0
  63. package/dist/components/Info/HoverCard/HoverCardMenuItem.d.ts +12 -0
  64. package/dist/components/Info/HoverCard/HoverCardMenuItem.d.ts.map +1 -0
  65. package/dist/components/Info/HoverCard/HoverCardMenuItem.js +22 -0
  66. package/dist/components/Info/Indicator/Indicator.d.ts +3 -0
  67. package/dist/components/Info/Indicator/Indicator.d.ts.map +1 -0
  68. package/dist/components/Info/Indicator/Indicator.js +1 -0
  69. package/dist/components/Info/Indicator/Indicator.stories.d.ts +11 -0
  70. package/dist/components/Info/Indicator/Indicator.stories.d.ts.map +1 -0
  71. package/dist/components/Info/Indicator/Indicator.stories.js +123 -0
  72. package/dist/components/Info/InfoCard/InfoCard.d.ts +2 -2
  73. package/dist/components/Info/InfoCard/InfoCard.d.ts.map +1 -1
  74. package/dist/components/Info/InfoCard/InfoCard.js +5 -5
  75. package/dist/components/Info/MobileDrawer/MobileDrawer.d.ts +30 -0
  76. package/dist/components/Info/MobileDrawer/MobileDrawer.d.ts.map +1 -0
  77. package/dist/components/Info/MobileDrawer/MobileDrawer.js +52 -0
  78. package/dist/components/Info/MobileDrawer/MobileDrawer.stories.d.ts +9 -0
  79. package/dist/components/Info/MobileDrawer/MobileDrawer.stories.d.ts.map +1 -0
  80. package/dist/components/Info/MobileDrawer/MobileDrawer.stories.js +38 -0
  81. package/dist/components/Info/Modals/FormModal/FormModal.d.ts +17 -1
  82. package/dist/components/Info/Modals/FormModal/FormModal.d.ts.map +1 -1
  83. package/dist/components/Info/Modals/FormModal/FormModal.js +30 -12
  84. package/dist/components/Info/Modals/FormModalV2/FormModalV2.d.ts +60 -0
  85. package/dist/components/Info/Modals/FormModalV2/FormModalV2.d.ts.map +1 -0
  86. package/dist/components/Info/Modals/FormModalV2/FormModalV2.js +96 -0
  87. package/dist/components/Info/Modals/Modal/Modal.d.ts.map +1 -1
  88. package/dist/components/Info/Modals/Modal/Modal.js +9 -1
  89. package/dist/components/Info/Modals/variants.d.ts +61 -41
  90. package/dist/components/Info/Modals/variants.d.ts.map +1 -1
  91. package/dist/components/Info/Modals/variants.js +58 -38
  92. package/dist/components/Info/Notifications/Notifications.stories.d.ts +1 -0
  93. package/dist/components/Info/Notifications/Notifications.stories.d.ts.map +1 -1
  94. package/dist/components/Info/Notifications/Notifications.stories.js +31 -0
  95. package/dist/components/Info/Notifications/variants.d.ts +25 -19
  96. package/dist/components/Info/Notifications/variants.d.ts.map +1 -1
  97. package/dist/components/Info/Notifications/variants.js +30 -24
  98. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.d.ts +37 -0
  99. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.d.ts.map +1 -0
  100. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.js +17 -0
  101. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.d.ts +7 -0
  102. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.d.ts.map +1 -0
  103. package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.js +26 -0
  104. package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.d.ts +1 -1
  105. package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.d.ts.map +1 -1
  106. package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.js +9 -3
  107. package/dist/components/Info/Tooltips/Popover/Popover.d.ts +16 -0
  108. package/dist/components/Info/Tooltips/Popover/Popover.d.ts.map +1 -0
  109. package/dist/components/Info/Tooltips/Popover/Popover.js +32 -0
  110. package/dist/components/Info/Tooltips/Tooltip/Tooltip.d.ts +5 -1
  111. package/dist/components/Info/Tooltips/Tooltip/Tooltip.d.ts.map +1 -1
  112. package/dist/components/Info/Tooltips/Tooltip/Tooltip.js +10 -8
  113. package/dist/components/Inputs/Buttons/Button/Button.d.ts +3 -1
  114. package/dist/components/Inputs/Buttons/Button/Button.d.ts.map +1 -1
  115. package/dist/components/Inputs/Buttons/Button/Button.js +38 -5
  116. package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts +1 -0
  117. package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts.map +1 -1
  118. package/dist/components/Inputs/Buttons/Button/Button.stories.js +105 -79
  119. package/dist/components/Inputs/Buttons/IconButton/IconButton.d.ts +7 -2
  120. package/dist/components/Inputs/Buttons/IconButton/IconButton.d.ts.map +1 -1
  121. package/dist/components/Inputs/Buttons/IconButton/IconButton.js +35 -11
  122. package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.d.ts +1 -0
  123. package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.d.ts.map +1 -1
  124. package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.js +100 -74
  125. package/dist/components/Inputs/Buttons/IconButton/sizes.d.ts +15 -0
  126. package/dist/components/Inputs/Buttons/IconButton/sizes.d.ts.map +1 -1
  127. package/dist/components/Inputs/Buttons/IconButton/sizes.js +3 -0
  128. package/dist/components/Inputs/Buttons/shared/variants.d.ts +399 -164
  129. package/dist/components/Inputs/Buttons/shared/variants.d.ts.map +1 -1
  130. package/dist/components/Inputs/Buttons/shared/variants.js +353 -143
  131. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.d.ts +40 -0
  132. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.d.ts.map +1 -0
  133. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.js +139 -0
  134. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.d.ts +13 -0
  135. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.d.ts.map +1 -0
  136. package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.js +75 -0
  137. package/dist/components/Inputs/ColorSwatch/ColorSwatch.d.ts +27 -0
  138. package/dist/components/Inputs/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  139. package/dist/components/Inputs/ColorSwatch/ColorSwatch.js +46 -0
  140. package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.d.ts +32 -0
  141. package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.d.ts.map +1 -0
  142. package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.js +92 -0
  143. package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.d.ts +11 -8
  144. package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  145. package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.js +20 -12
  146. package/dist/components/Inputs/Controls/Toggle/Toggle.d.ts +25 -11
  147. package/dist/components/Inputs/Controls/Toggle/Toggle.d.ts.map +1 -1
  148. package/dist/components/Inputs/Controls/Toggle/Toggle.js +67 -20
  149. package/dist/components/Inputs/Controls/Toggle/Toggle.stories.d.ts +1 -0
  150. package/dist/components/Inputs/Controls/Toggle/Toggle.stories.d.ts.map +1 -1
  151. package/dist/components/Inputs/Controls/Toggle/Toggle.stories.js +86 -69
  152. package/dist/components/Inputs/Dates/DatePicker/DatePicker.d.ts.map +1 -1
  153. package/dist/components/Inputs/Dates/DatePicker/DatePicker.js +23 -7
  154. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.d.ts +12 -0
  155. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  156. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.js +87 -0
  157. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.d.ts +13 -0
  158. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.d.ts.map +1 -0
  159. package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.js +239 -0
  160. package/dist/components/Inputs/Dates/TimeInput/TimeInput.d.ts +19 -0
  161. package/dist/components/Inputs/Dates/TimeInput/TimeInput.d.ts.map +1 -0
  162. package/dist/components/Inputs/Dates/TimeInput/TimeInput.js +51 -0
  163. package/dist/components/Inputs/Dropdowns/FontSelect/FontSelect.d.ts.map +1 -1
  164. package/dist/components/Inputs/Dropdowns/FontSelect/FontSelect.js +8 -1
  165. package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.d.ts +2 -2
  166. package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.d.ts.map +1 -1
  167. package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.js +76 -57
  168. package/dist/components/Inputs/Dropdowns/Select/Select.d.ts.map +1 -1
  169. package/dist/components/Inputs/Dropdowns/Select/Select.js +5 -3
  170. package/dist/components/Inputs/Dropzone/Dropzone.d.ts +23 -0
  171. package/dist/components/Inputs/Dropzone/Dropzone.d.ts.map +1 -0
  172. package/dist/components/Inputs/Dropzone/Dropzone.js +44 -0
  173. package/dist/components/Inputs/Dropzone/Dropzone.stories.d.ts +12 -0
  174. package/dist/components/Inputs/Dropzone/Dropzone.stories.d.ts.map +1 -0
  175. package/dist/components/Inputs/Dropzone/Dropzone.stories.js +114 -0
  176. package/dist/components/Inputs/TextInputs/NumberInput/NumberInput.d.ts.map +1 -1
  177. package/dist/components/Inputs/TextInputs/NumberInput/NumberInput.js +4 -1
  178. package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.d.ts +46 -0
  179. package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.d.ts.map +1 -0
  180. package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.js +60 -0
  181. package/dist/components/Layout/Accordion/Accordion.d.ts +16 -0
  182. package/dist/components/Layout/Accordion/Accordion.d.ts.map +1 -0
  183. package/dist/components/Layout/Accordion/Accordion.js +63 -0
  184. package/dist/components/Layout/Accordion/Accordion.stories.d.ts +11 -0
  185. package/dist/components/Layout/Accordion/Accordion.stories.d.ts.map +1 -0
  186. package/dist/components/Layout/Accordion/Accordion.stories.js +148 -0
  187. package/dist/components/Layout/AutoGrid/AutoGrid.d.ts +20 -5
  188. package/dist/components/Layout/AutoGrid/AutoGrid.d.ts.map +1 -1
  189. package/dist/components/Layout/AutoGrid/AutoGrid.js +51 -3
  190. package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts +1 -0
  191. package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts.map +1 -1
  192. package/dist/components/Layout/AutoGrid/AutoGrid.stories.js +39 -29
  193. package/dist/components/Layout/BottomActionBar/BottomActionBar.d.ts +40 -0
  194. package/dist/components/Layout/BottomActionBar/BottomActionBar.d.ts.map +1 -0
  195. package/dist/components/Layout/BottomActionBar/BottomActionBar.js +79 -0
  196. package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.d.ts +10 -0
  197. package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.d.ts.map +1 -0
  198. package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.js +102 -0
  199. package/dist/components/Layout/Card/Card.d.ts +1 -1
  200. package/dist/components/Layout/Card/Card.d.ts.map +1 -1
  201. package/dist/components/Layout/Container/Container.d.ts +3 -0
  202. package/dist/components/Layout/Container/Container.d.ts.map +1 -0
  203. package/dist/components/Layout/Container/Container.js +1 -0
  204. package/dist/components/Layout/Container/Container.stories.d.ts +8 -0
  205. package/dist/components/Layout/Container/Container.stories.d.ts.map +1 -0
  206. package/dist/components/Layout/Container/Container.stories.js +52 -0
  207. package/dist/components/Layout/DataState/DataState.d.ts +34 -0
  208. package/dist/components/Layout/DataState/DataState.d.ts.map +1 -0
  209. package/dist/components/Layout/DataState/DataState.js +22 -0
  210. package/dist/components/Layout/DataState/DataState.stories.d.ts +11 -0
  211. package/dist/components/Layout/DataState/DataState.stories.d.ts.map +1 -0
  212. package/dist/components/Layout/DataState/DataState.stories.js +38 -0
  213. package/dist/components/Layout/Divider/Divider.d.ts.map +1 -1
  214. package/dist/components/Layout/Divider/Divider.js +4 -2
  215. package/dist/components/Layout/Group/Group.d.ts +1 -1
  216. package/dist/components/Layout/Group/Group.d.ts.map +1 -1
  217. package/dist/components/Layout/Loader/Loader.d.ts +1 -1
  218. package/dist/components/Layout/Loader/Loader.d.ts.map +1 -1
  219. package/dist/components/Layout/Loader/Loader.js +3 -2
  220. package/dist/components/Layout/Navbar/Navbar.d.ts +15 -0
  221. package/dist/components/Layout/Navbar/Navbar.d.ts.map +1 -0
  222. package/dist/components/Layout/Navbar/Navbar.js +20 -0
  223. package/dist/components/Layout/Navbar/Navbar.stories.d.ts +9 -0
  224. package/dist/components/Layout/Navbar/Navbar.stories.d.ts.map +1 -0
  225. package/dist/components/Layout/Navbar/Navbar.stories.js +98 -0
  226. package/dist/components/Layout/Page/Page.d.ts +13 -0
  227. package/dist/components/Layout/Page/Page.d.ts.map +1 -0
  228. package/dist/components/Layout/Page/Page.js +13 -0
  229. package/dist/components/Layout/Pagination/Pagination.d.ts +23 -0
  230. package/dist/components/Layout/Pagination/Pagination.d.ts.map +1 -0
  231. package/dist/components/Layout/Pagination/Pagination.js +53 -0
  232. package/dist/components/Layout/Pagination/Pagination.stories.d.ts +10 -0
  233. package/dist/components/Layout/Pagination/Pagination.stories.d.ts.map +1 -0
  234. package/dist/components/Layout/Pagination/Pagination.stories.js +76 -0
  235. package/dist/components/Layout/ScrollArea/ScrollArea.d.ts +3 -0
  236. package/dist/components/Layout/ScrollArea/ScrollArea.d.ts.map +1 -0
  237. package/dist/components/Layout/ScrollArea/ScrollArea.js +1 -0
  238. package/dist/components/Layout/ScrollArea/ScrollArea.stories.d.ts +8 -0
  239. package/dist/components/Layout/ScrollArea/ScrollArea.stories.d.ts.map +1 -0
  240. package/dist/components/Layout/ScrollArea/ScrollArea.stories.js +62 -0
  241. package/dist/components/Layout/Tabs/Tabs.d.ts +16 -5
  242. package/dist/components/Layout/Tabs/Tabs.d.ts.map +1 -1
  243. package/dist/components/Layout/Tabs/Tabs.js +53 -18
  244. package/dist/components/Layout/Tabs/Tabs.stories.d.ts.map +1 -1
  245. package/dist/components/Layout/Tabs/Tabs.stories.js +39 -39
  246. package/dist/components/Layout/VirtualGrid/VirtualGrid.d.ts +63 -0
  247. package/dist/components/Layout/VirtualGrid/VirtualGrid.d.ts.map +1 -0
  248. package/dist/components/Layout/VirtualGrid/VirtualGrid.js +159 -0
  249. package/dist/components/Misc/Burger/Burger.d.ts +6 -0
  250. package/dist/components/Misc/Burger/Burger.d.ts.map +1 -0
  251. package/dist/components/Misc/Burger/Burger.js +7 -0
  252. package/dist/components/Misc/Burger/Burger.stories.d.ts +10 -0
  253. package/dist/components/Misc/Burger/Burger.stories.d.ts.map +1 -0
  254. package/dist/components/Misc/Burger/Burger.stories.js +86 -0
  255. package/dist/components/Misc/Carousel/Carousel.d.ts +32 -0
  256. package/dist/components/Misc/Carousel/Carousel.d.ts.map +1 -0
  257. package/dist/components/Misc/Carousel/Carousel.js +16 -0
  258. package/dist/components/Misc/DragHandle/DragHandle.d.ts +19 -0
  259. package/dist/components/Misc/DragHandle/DragHandle.d.ts.map +1 -0
  260. package/dist/components/Misc/DragHandle/DragHandle.js +39 -0
  261. package/dist/components/Misc/DragHandle/DragHandle.stories.d.ts +9 -0
  262. package/dist/components/Misc/DragHandle/DragHandle.stories.d.ts.map +1 -0
  263. package/dist/components/Misc/DragHandle/DragHandle.stories.js +54 -0
  264. package/dist/components/Misc/FAB/FAB.d.ts +54 -0
  265. package/dist/components/Misc/FAB/FAB.d.ts.map +1 -0
  266. package/dist/components/Misc/FAB/FAB.js +53 -0
  267. package/dist/components/Misc/FAB/FAB.stories.d.ts +10 -0
  268. package/dist/components/Misc/FAB/FAB.stories.d.ts.map +1 -0
  269. package/dist/components/Misc/FAB/FAB.stories.js +100 -0
  270. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.d.ts +50 -0
  271. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.d.ts.map +1 -0
  272. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.js +40 -0
  273. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.d.ts +9 -0
  274. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.d.ts.map +1 -0
  275. package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.js +53 -0
  276. package/dist/components/Misc/HoverAction/HoverAction.d.ts +50 -0
  277. package/dist/components/Misc/HoverAction/HoverAction.d.ts.map +1 -0
  278. package/dist/components/Misc/HoverAction/HoverAction.js +61 -0
  279. package/dist/components/Misc/HoverAction/HoverAction.stories.d.ts +12 -0
  280. package/dist/components/Misc/HoverAction/HoverAction.stories.d.ts.map +1 -0
  281. package/dist/components/Misc/HoverAction/HoverAction.stories.js +96 -0
  282. package/dist/components/Misc/IconBadge/IconBadge.d.ts.map +1 -1
  283. package/dist/components/Misc/IconBadge/IconBadge.js +8 -6
  284. package/dist/components/Misc/Image/Image.d.ts +3 -0
  285. package/dist/components/Misc/Image/Image.d.ts.map +1 -0
  286. package/dist/components/Misc/Image/Image.js +1 -0
  287. package/dist/components/Misc/Image/Image.stories.d.ts +11 -0
  288. package/dist/components/Misc/Image/Image.stories.d.ts.map +1 -0
  289. package/dist/components/Misc/Image/Image.stories.js +63 -0
  290. package/dist/components/Misc/Kbd/Kbd.d.ts +6 -0
  291. package/dist/components/Misc/Kbd/Kbd.d.ts.map +1 -0
  292. package/dist/components/Misc/Kbd/Kbd.js +16 -0
  293. package/dist/components/Misc/Kbd/Kbd.stories.d.ts +9 -0
  294. package/dist/components/Misc/Kbd/Kbd.stories.d.ts.map +1 -0
  295. package/dist/components/Misc/Kbd/Kbd.stories.js +52 -0
  296. package/dist/components/Misc/Menu/Menu.d.ts +17 -0
  297. package/dist/components/Misc/Menu/Menu.d.ts.map +1 -0
  298. package/dist/components/Misc/Menu/Menu.js +52 -0
  299. package/dist/components/Misc/OverflowFade/OverflowFade.d.ts +42 -0
  300. package/dist/components/Misc/OverflowFade/OverflowFade.d.ts.map +1 -0
  301. package/dist/components/Misc/OverflowFade/OverflowFade.js +110 -0
  302. package/dist/components/Misc/OverflowFade/OverflowFade.stories.d.ts +11 -0
  303. package/dist/components/Misc/OverflowFade/OverflowFade.stories.d.ts.map +1 -0
  304. package/dist/components/Misc/OverflowFade/OverflowFade.stories.js +112 -0
  305. package/dist/components/Misc/Picker/Picker.d.ts +62 -0
  306. package/dist/components/Misc/Picker/Picker.d.ts.map +1 -0
  307. package/dist/components/Misc/Picker/Picker.js +111 -0
  308. package/dist/components/Misc/Picker/Picker.stories.d.ts +14 -0
  309. package/dist/components/Misc/Picker/Picker.stories.d.ts.map +1 -0
  310. package/dist/components/Misc/Picker/Picker.stories.js +154 -0
  311. package/dist/components/Misc/SelectableObject/SelectableObject.d.ts +38 -0
  312. package/dist/components/Misc/SelectableObject/SelectableObject.d.ts.map +1 -0
  313. package/dist/components/Misc/SelectableObject/SelectableObject.js +70 -0
  314. package/dist/components/Misc/SelectableObject/SelectableObject.stories.d.ts +11 -0
  315. package/dist/components/Misc/SelectableObject/SelectableObject.stories.d.ts.map +1 -0
  316. package/dist/components/Misc/SelectableObject/SelectableObject.stories.js +84 -0
  317. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.d.ts +26 -0
  318. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.d.ts.map +1 -0
  319. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.js +41 -0
  320. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.d.ts +10 -0
  321. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.d.ts.map +1 -0
  322. package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.js +48 -0
  323. package/dist/components/Misc/Stepper/Step.stories.d.ts +118 -118
  324. package/dist/components/Misc/Stepper/variants.d.ts +1 -1
  325. package/dist/components/Misc/Timeline/Timeline.d.ts +18 -0
  326. package/dist/components/Misc/Timeline/Timeline.d.ts.map +1 -0
  327. package/dist/components/Misc/Timeline/Timeline.js +38 -0
  328. package/dist/components/Misc/Timeline/Timeline.stories.d.ts +8 -0
  329. package/dist/components/Misc/Timeline/Timeline.stories.d.ts.map +1 -0
  330. package/dist/components/Misc/Timeline/Timeline.stories.js +54 -0
  331. package/dist/components/Typography/InlineEditableText/InlineEditableText.d.ts +35 -0
  332. package/dist/components/Typography/InlineEditableText/InlineEditableText.d.ts.map +1 -0
  333. package/dist/components/Typography/InlineEditableText/InlineEditableText.js +112 -0
  334. package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.d.ts +11 -0
  335. package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.d.ts.map +1 -0
  336. package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.js +48 -0
  337. package/dist/components/index.d.ts +148 -66
  338. package/dist/components/index.d.ts.map +1 -1
  339. package/dist/components/index.js +110 -68
  340. package/dist/constants/colors.d.ts +117 -91
  341. package/dist/constants/colors.d.ts.map +1 -1
  342. package/dist/constants/colors.js +56 -43
  343. package/dist/constants/font.d.ts +4 -4
  344. package/dist/constants/font.js +2 -2
  345. package/dist/hooks/index.d.ts +9 -1
  346. package/dist/hooks/index.d.ts.map +1 -1
  347. package/dist/hooks/index.js +7 -1
  348. package/dist/hooks/useConfirmationModal.d.ts.map +1 -1
  349. package/dist/hooks/useConfirmationModal.js +20 -1
  350. package/dist/hooks/useDisclosure.d.ts +11 -0
  351. package/dist/hooks/useDisclosure.d.ts.map +1 -0
  352. package/dist/hooks/useDisclosure.js +10 -0
  353. package/dist/hooks/useHeadroom.d.ts +18 -0
  354. package/dist/hooks/useHeadroom.d.ts.map +1 -0
  355. package/dist/hooks/useHeadroom.js +17 -0
  356. package/dist/hooks/useInfoModal.d.ts.map +1 -1
  357. package/dist/hooks/useInfoModal.js +13 -1
  358. package/dist/hooks/useMediaQuery.d.ts +1 -0
  359. package/dist/hooks/useMediaQuery.d.ts.map +1 -1
  360. package/dist/hooks/useMediaQuery.js +1 -0
  361. package/dist/hooks/useNotifications.d.ts +39 -7
  362. package/dist/hooks/useNotifications.d.ts.map +1 -1
  363. package/dist/hooks/useNotifications.js +108 -5
  364. package/dist/hooks/usePagination.d.ts +11 -0
  365. package/dist/hooks/usePagination.d.ts.map +1 -0
  366. package/dist/hooks/usePagination.js +2 -0
  367. package/dist/hooks/useScrollLock.d.ts +21 -0
  368. package/dist/hooks/useScrollLock.d.ts.map +1 -0
  369. package/dist/hooks/useScrollLock.js +20 -0
  370. package/dist/index.d.ts +5 -5
  371. package/dist/index.js +5 -5
  372. package/dist/styles/iosInputZoomFix.d.ts +31 -0
  373. package/dist/styles/iosInputZoomFix.d.ts.map +1 -0
  374. package/dist/styles/iosInputZoomFix.js +135 -0
  375. package/dist/utils/bytes.d.ts +10 -0
  376. package/dist/utils/bytes.d.ts.map +1 -0
  377. package/dist/utils/bytes.js +17 -0
  378. package/dist/utils/datetime.d.ts +18 -0
  379. package/dist/utils/datetime.d.ts.map +1 -0
  380. package/dist/utils/datetime.js +42 -0
  381. package/dist/utils/duration.d.ts +17 -0
  382. package/dist/utils/duration.d.ts.map +1 -0
  383. package/dist/utils/duration.js +30 -0
  384. package/dist/utils/index.d.ts +8 -2
  385. package/dist/utils/index.d.ts.map +1 -1
  386. package/dist/utils/index.js +7 -2
  387. package/dist/utils/sort.d.ts +44 -0
  388. package/dist/utils/sort.d.ts.map +1 -0
  389. package/dist/utils/sort.js +53 -0
  390. package/dist/utils/string.d.ts +22 -0
  391. package/dist/utils/string.d.ts.map +1 -0
  392. package/dist/utils/string.js +25 -0
  393. package/package.json +26 -2
@@ -0,0 +1,112 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { neutral, primary } from '../../../constants/colors';
3
+ import { spacing } from '../../../constants/spacing';
4
+ import { Badge } from '../../Info/Badge/Badge';
5
+ import { Group } from '../../Layout/Group/Group';
6
+ import { Stack } from '../../Layout/Stack/Stack';
7
+ import { Text } from '../../Typography/Text/Text';
8
+ import { OverflowFade } from './OverflowFade';
9
+ const meta = {
10
+ argTypes: {
11
+ background: {
12
+ control: { type: 'color' },
13
+ description: 'Color the gradient fades into. Match the surrounding surface.',
14
+ table: { defaultValue: { summary: "'white'" } },
15
+ },
16
+ fadeWidth: {
17
+ control: { type: 'number' },
18
+ table: { defaultValue: { summary: '40' } },
19
+ },
20
+ },
21
+ component: OverflowFade,
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: 'Bidirectional gradient fades for horizontal or vertical overflow. Horizontal (default): left/right fades ' +
26
+ 'on `overflow-x` scroll. Vertical (`orientation="vertical"`): top/bottom fades — pass `maxHeight` so ' +
27
+ 'the viewport clips. Fades auto-hide when content fits.\n\n' +
28
+ 'The scrollbar is hidden by design — the gradient is the affordance.',
29
+ },
30
+ },
31
+ layout: 'padded',
32
+ },
33
+ title: 'Components/Misc/OverflowFade',
34
+ };
35
+ export default meta;
36
+ const chips = [
37
+ 'All',
38
+ 'Trending',
39
+ 'Recently Added',
40
+ 'Most Played',
41
+ 'Editor Picks',
42
+ 'Sports',
43
+ 'News',
44
+ 'Holiday',
45
+ 'Promotions',
46
+ 'Announcements',
47
+ 'Weather',
48
+ ];
49
+ const Chip = ({ label, active }) => (_jsx("div", { style: {
50
+ background: active ? primary[200] : 'white',
51
+ border: `1px solid ${active ? primary[200] : neutral[100]}`,
52
+ borderRadius: 999,
53
+ color: active ? 'white' : neutral[300],
54
+ flexShrink: 0,
55
+ fontSize: 14,
56
+ padding: `${spacing.xs} ${spacing.md}`,
57
+ whiteSpace: 'nowrap',
58
+ }, children: label }));
59
+ export const Default = {
60
+ args: {
61
+ background: 'white',
62
+ fadeWidth: 40,
63
+ },
64
+ render: (args) => (_jsx("div", { style: { background: 'white', maxWidth: 480, padding: spacing.md }, children: _jsxs(Stack, { gap: spacing.sm, children: [_jsx(Text, { variant: 'label', children: "Resize the panel narrower to see the right-edge fade appear." }), _jsx(OverflowFade, { ...args, children: _jsx(Group, { gap: spacing.xs, noWrap: true, children: chips.map((label) => (_jsx(Chip, { label: label }, label))) }) })] }) })),
65
+ };
66
+ export const NoOverflow = {
67
+ parameters: {
68
+ docs: {
69
+ description: {
70
+ story: 'When content fits the container, neither fade renders — auto-detection via scrollWidth/clientWidth.',
71
+ },
72
+ },
73
+ },
74
+ render: () => (_jsx("div", { style: { background: 'white', maxWidth: 480, padding: spacing.md }, children: _jsx(OverflowFade, { children: _jsxs(Group, { gap: spacing.xs, noWrap: true, children: [_jsx(Chip, { active: true, label: 'All' }), _jsx(Chip, { label: 'Sports' }), _jsx(Chip, { label: 'News' })] }) }) })),
75
+ };
76
+ export const OnNonWhiteSurface = {
77
+ parameters: {
78
+ docs: {
79
+ description: {
80
+ story: 'Pass `background` to match a non-white surface so the gradient ends in the parent color, not white.',
81
+ },
82
+ },
83
+ },
84
+ render: () => (_jsx("div", { style: { background: neutral[25], maxWidth: 480, padding: spacing.md }, children: _jsxs(Stack, { gap: spacing.sm, children: [_jsx(Text, { variant: 'label', children: "On neutral[25] \u2014 fade matches surface." }), _jsx(OverflowFade, { background: neutral[25], children: _jsx(Group, { gap: spacing.xs, noWrap: true, children: chips.map((label, i) => (_jsx(Chip, { active: i === 0, label: label }, label))) }) })] }) })),
85
+ };
86
+ export const Vertical = {
87
+ parameters: {
88
+ docs: {
89
+ description: {
90
+ story: 'Vertical scroll with top/bottom fades. Requires `maxHeight` on the viewport so content can overflow.',
91
+ },
92
+ },
93
+ },
94
+ render: () => (_jsx("div", { style: { background: 'white', maxWidth: 360, padding: spacing.md }, children: _jsx(OverflowFade, { fadeWidth: 48, maxHeight: 220, orientation: 'vertical', children: _jsx(Stack, { gap: spacing.sm, children: Array.from({ length: 14 }, (_, i) => (_jsxs(Text, { variant: 'body', children: ["Row ", i + 1, " \u2014 scroll to see top and bottom edge fades."] }, i))) }) }) })),
95
+ };
96
+ export const WithBadges = {
97
+ parameters: {
98
+ docs: {
99
+ description: {
100
+ story: 'Demonstrates use with richer children — a tab-strip-like row with counts.',
101
+ },
102
+ },
103
+ },
104
+ render: () => (_jsx("div", { style: { background: 'white', maxWidth: 520, padding: spacing.md }, children: _jsx(OverflowFade, { children: _jsx(Group, { gap: spacing.lg, noWrap: true, children: [
105
+ 'Your Slides',
106
+ 'Smart Content',
107
+ 'Premades',
108
+ 'Playlists',
109
+ 'Drafts',
110
+ 'Archived',
111
+ ].map((label, i) => (_jsxs(Group, { gap: spacing.xs, noWrap: true, style: { flexShrink: 0 }, children: [_jsx(Text, { style: { color: i === 0 ? primary[200] : neutral[300] }, variant: 'body', children: label }), _jsx(Badge, { color: 'neutral', size: 'sm', variant: 'filled', children: [12, 4, 8, 31, 2, 17][i] })] }, label))) }) }) })),
112
+ };
@@ -0,0 +1,62 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface PickerItem {
3
+ id: string;
4
+ label: string;
5
+ /** Right-aligned secondary info (e.g. "5 slides"). */
6
+ meta?: ReactNode;
7
+ /**
8
+ * Optional sortable timestamp for automatic recency. Larger = more recent.
9
+ * Items without `recencyKey` sort to the end of the recent view.
10
+ */
11
+ recencyKey?: number;
12
+ /** When true, item renders disabled (greyed-out) and is not clickable. */
13
+ disabled?: boolean;
14
+ /** Tooltip text shown on hover when disabled. */
15
+ disabledReason?: string;
16
+ }
17
+ export type PickerPosition = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
18
+ export interface PickerProps {
19
+ items: PickerItem[];
20
+ /**
21
+ * How many recent items to show in the compact (idle) view. If `items`
22
+ * has ≤ this many entries, all are shown and the "Show all" toggle is
23
+ * hidden. Default: 3.
24
+ */
25
+ recentCount?: number;
26
+ onSelect: (item: PickerItem) => void;
27
+ searchPlaceholder?: string;
28
+ /** Shown when items is empty or search has no matches. */
29
+ emptyMessage?: string;
30
+ /** Slot rendered below the list — typically a "+ Create new" button. */
31
+ footer?: ReactNode;
32
+ /**
33
+ * Controlled-open mode. When provided, parent owns open state — useful for
34
+ * triggering programmatically from outside the Target (e.g. from a kebab
35
+ * Menu.Item that closes its own Menu before opening the Picker).
36
+ */
37
+ opened?: boolean;
38
+ onOpenChange?: (opened: boolean) => void;
39
+ position?: PickerPosition;
40
+ width?: number;
41
+ /** Wrap dropdown in a portal to escape stacking contexts. Default true. */
42
+ withinPortal?: boolean;
43
+ /**
44
+ * When true, the SearchBar is hidden on mobile viewports (≤640px). Useful
45
+ * for kebab-anchored Pickers where search adds noise on small screens but
46
+ * stays valuable on desktop. Default: false.
47
+ */
48
+ searchOnDesktopOnly?: boolean;
49
+ /**
50
+ * When true, never render the "Recent" header or "Show all N" toggle —
51
+ * always show exactly `recentCount` items in the idle view. Search across
52
+ * the full list still works when the user types. Default: false.
53
+ */
54
+ disableShowAll?: boolean;
55
+ children: ReactNode;
56
+ }
57
+ export declare const Picker: (({ items, recentCount, onSelect, searchPlaceholder, emptyMessage, footer, opened, onOpenChange, position, width, withinPortal, searchOnDesktopOnly, disableShowAll, children, }: PickerProps) => import("react/jsx-runtime").JSX.Element) & {
58
+ Target: import("react").ForwardRefExoticComponent<{
59
+ children: ReactNode;
60
+ } & import("react").RefAttributes<HTMLDivElement>>;
61
+ };
62
+ //# sourceMappingURL=Picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/Picker/Picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAwBf,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAmQD,eAAO,MAAM,MAAM,oLAxLhB,WAAW;;kBAtB8C,SAAS;;CA8MS,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Popover, Portal, UnstyledButton } from '@mantine/core';
3
+ import { forwardRef, useEffect, useMemo, useState, } from 'react';
4
+ import { neutral, primary, white } from '../../../constants/colors';
5
+ import { fontBase } from '../../../constants/font';
6
+ import { spacing } from '../../../constants/spacing';
7
+ import { useMobile } from '../../../hooks/useMediaQuery';
8
+ import { Tooltip } from '../../Info/Tooltips/Tooltip/Tooltip';
9
+ import { SearchBar } from '../../Inputs/TextInputs/SearchBar/SearchBar';
10
+ import { Stack } from '../../Layout/Stack/Stack';
11
+ import { Text } from '../../Typography/Text/Text';
12
+ const PickerItemRow = ({ item, onSelect }) => {
13
+ // Use Text for the label so it inherits Poppins via fontBase rather than
14
+ // relying on the host button to push fontFamily down. fontBase is still
15
+ // applied to the button itself for browsers that style buttons with the
16
+ // default UI font (Mantine UnstyledButton sets fontFamily: inherit, but
17
+ // belt-and-suspenders).
18
+ const button = (_jsxs(UnstyledButton, { disabled: item.disabled, onClick: item.disabled ? undefined : onSelect, sx: {
19
+ ...fontBase,
20
+ '&:hover': item.disabled ? {} : { backgroundColor: neutral[25] },
21
+ alignItems: 'center',
22
+ color: item.disabled ? neutral[100] : neutral[300],
23
+ cursor: item.disabled ? 'not-allowed' : 'pointer',
24
+ display: 'flex',
25
+ gap: spacing.sm,
26
+ justifyContent: 'space-between',
27
+ padding: `${spacing.sm} ${spacing.md}`,
28
+ transition: 'background-color 120ms ease',
29
+ width: '100%',
30
+ }, children: [_jsx(Text, { style: {
31
+ color: item.disabled ? neutral[100] : neutral[300],
32
+ minWidth: 0,
33
+ }, truncate: true, variant: 'body', children: item.label }), item.meta && (_jsx("span", { style: { color: neutral[200], flexShrink: 0 }, children: item.meta }))] }));
34
+ if (item.disabled && item.disabledReason) {
35
+ return _jsx(Tooltip, { text: item.disabledReason, children: button });
36
+ }
37
+ return button;
38
+ };
39
+ const PickerTarget = forwardRef(({ children }, ref) => (_jsx(Popover.Target, { ref: ref, children: children })));
40
+ PickerTarget.displayName = 'Picker.Target';
41
+ const PickerComponent = ({ items, recentCount = 3, onSelect, searchPlaceholder = 'Search…', emptyMessage = 'No items', footer, opened, onOpenChange, position = 'bottom-end', width = 280, withinPortal = true, searchOnDesktopOnly = false, disableShowAll = false, children, }) => {
42
+ const [internalOpen, setInternalOpen] = useState(false);
43
+ const isControlled = opened !== undefined;
44
+ const isOpen = isControlled ? opened : internalOpen;
45
+ const setOpen = (next) => {
46
+ if (!isControlled)
47
+ setInternalOpen(next);
48
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(next);
49
+ };
50
+ const isMobile = useMobile();
51
+ const showSearch = !searchOnDesktopOnly || !isMobile;
52
+ const [query, setQuery] = useState('');
53
+ const [showAll, setShowAll] = useState(false);
54
+ // Reset transient view state every time the popover closes so it opens
55
+ // fresh next time (no stale search query / "show all" stuck on).
56
+ useEffect(() => {
57
+ if (!isOpen) {
58
+ setQuery('');
59
+ setShowAll(false);
60
+ }
61
+ }, [isOpen]);
62
+ const sortedByRecency = useMemo(() => [...items].sort((a, b) => { var _a, _b; return ((_a = b.recencyKey) !== null && _a !== void 0 ? _a : 0) - ((_b = a.recencyKey) !== null && _b !== void 0 ? _b : 0); }), [items]);
63
+ const filtered = useMemo(() => {
64
+ const q = query.trim().toLowerCase();
65
+ if (!q)
66
+ return sortedByRecency;
67
+ return sortedByRecency.filter((i) => i.label.toLowerCase().includes(q));
68
+ }, [sortedByRecency, query]);
69
+ const isSearching = query.trim().length > 0;
70
+ // Compact dropdowns (e.g. card kebabs) opt out of the "Recent" header and
71
+ // "Show all N" toggle — they always show only `recentCount` in idle view.
72
+ const showShowAllToggle = !disableShowAll && !isSearching && !showAll && items.length > recentCount;
73
+ const showRecentHeader = showShowAllToggle;
74
+ const visibleItems = useMemo(() => {
75
+ if (isSearching)
76
+ return filtered;
77
+ if (disableShowAll)
78
+ return sortedByRecency.slice(0, recentCount);
79
+ if (showAll || items.length <= recentCount)
80
+ return sortedByRecency;
81
+ return sortedByRecency.slice(0, recentCount);
82
+ }, [
83
+ isSearching,
84
+ filtered,
85
+ showAll,
86
+ items.length,
87
+ recentCount,
88
+ sortedByRecency,
89
+ disableShowAll,
90
+ ]);
91
+ return (_jsxs(_Fragment, { children: [isOpen && (_jsx(Portal, { children: _jsx("div", { onClick: () => setOpen(false), style: { inset: 0, position: 'fixed', zIndex: 299 } }) })), _jsxs(Popover, { offset: 8, onChange: setOpen, opened: isOpen, position: position, radius: 8, shadow: 'md', styles: {
92
+ dropdown: {
93
+ backgroundColor: white,
94
+ border: `1px solid ${neutral[50]}`,
95
+ padding: 0,
96
+ },
97
+ }, width: width, withinPortal: withinPortal, children: [children, _jsx(Popover.Dropdown, { children: _jsxs(Stack, { spacing: 0, children: [showSearch && (_jsx(Box, { p: spacing.xs, style: { borderBottom: `1px solid ${neutral[50]}` }, children: _jsx(SearchBar, { fullWidth: true, onChange: (e) => setQuery(e.target.value), placeholder: searchPlaceholder, size: 'sm', value: query }) })), showRecentHeader && (_jsx(Box, { pb: spacing.xs, pt: spacing.sm, px: spacing.md, style: { ...fontBase }, children: _jsx(Text, { style: { color: neutral[200] }, variant: 'label', children: "Recent" }) })), _jsx(Box, { style: { maxHeight: 280, overflowY: 'auto' }, children: visibleItems.length === 0 ? (_jsx(Box, { p: spacing.md, style: { textAlign: 'center' }, children: _jsx(Text, { variant: 'subtle', children: emptyMessage }) })) : (visibleItems.map((item) => (_jsx(PickerItemRow, { item: item, onSelect: () => {
98
+ onSelect(item);
99
+ setOpen(false);
100
+ } }, item.id)))) }), showShowAllToggle && (_jsx(Box, { p: spacing.xs, style: { borderTop: `1px solid ${neutral[50]}` }, children: _jsx(UnstyledButton, { onClick: () => setShowAll(true), sx: {
101
+ ...fontBase,
102
+ '&:hover': { color: primary[200] },
103
+ color: primary[200],
104
+ cursor: 'pointer',
105
+ display: 'block',
106
+ padding: `${spacing.xs} ${spacing.sm}`,
107
+ textAlign: 'center',
108
+ width: '100%',
109
+ }, children: _jsxs(Text, { style: { color: 'inherit', textAlign: 'center' }, variant: 'label', children: ["Show all ", items.length] }) }) })), footer && (_jsx(Box, { p: spacing.xs, style: { borderTop: `1px solid ${neutral[50]}` }, children: footer }))] }) })] })] }));
110
+ };
111
+ export const Picker = Object.assign(PickerComponent, { Target: PickerTarget });
@@ -0,0 +1,14 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Picker } from './Picker';
3
+ declare const meta: Meta<typeof Picker>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Picker>;
6
+ export declare const Default: Story;
7
+ export declare const WithRecentAndShowAll: Story;
8
+ export declare const WithFooter: Story;
9
+ export declare const Empty: Story;
10
+ export declare const WithDisabledItems: Story;
11
+ export declare const Controlled: Story;
12
+ export declare const AnchoredToIconButton: Story;
13
+ export declare const OnDarkSurface: Story;
14
+ //# sourceMappingURL=Picker.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Picker.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/Picker/Picker.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AASlC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CA4B7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,MAAM,CAAC,CAAC;AAmBrC,eAAO,MAAM,OAAO,EAAE,KAqBrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KA6BlC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA+BxB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KA6BnB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KA+B/B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA4BxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAqBlC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KA0C3B,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { IconPlus } from '@tabler/icons-react';
4
+ import { Picker } from './Picker';
5
+ import { Button } from '../../Inputs/Buttons/Button/Button';
6
+ import { IconButton } from '../../Inputs/Buttons/IconButton/IconButton';
7
+ import { Group } from '../../Layout/Group/Group';
8
+ import { Stack } from '../../Layout/Stack/Stack';
9
+ import { Text } from '../../Typography/Text/Text';
10
+ import { spacing } from '../../../constants/spacing';
11
+ const meta = {
12
+ title: 'Components/Misc/Picker',
13
+ component: Picker,
14
+ parameters: {
15
+ layout: 'centered',
16
+ docs: {
17
+ description: {
18
+ component: 'A searchable list popover for picking a single item. Idle state ' +
19
+ 'surfaces the most recent N items + a "Show all" toggle; typing in ' +
20
+ 'the search filters across the full list. Use for "add to playlist", ' +
21
+ '"move to folder", or any compact pick-one flow.\n\n' +
22
+ 'Compose via `Picker.Target` for the trigger; the dropdown is owned ' +
23
+ 'by the component. For nested triggers (e.g. inside another Menu), ' +
24
+ 'use the controlled `opened` prop.',
25
+ },
26
+ },
27
+ },
28
+ argTypes: {
29
+ recentCount: {
30
+ control: { type: 'number' },
31
+ table: { defaultValue: { summary: '3' } },
32
+ },
33
+ width: {
34
+ control: { type: 'number' },
35
+ table: { defaultValue: { summary: '280' } },
36
+ },
37
+ },
38
+ };
39
+ export default meta;
40
+ const fewPlaylists = [
41
+ { id: 'p1', label: 'Morning Mix', meta: '12 slides', recencyKey: Date.now() },
42
+ { id: 'p2', label: 'Lunch Specials', meta: '4 slides', recencyKey: Date.now() - 1000 },
43
+ { id: 'p3', label: 'Evening Wind-down', meta: '7 slides', recencyKey: Date.now() - 2000 },
44
+ ];
45
+ const manyPlaylists = [
46
+ { id: 'p1', label: 'Morning Mix', meta: '12 slides', recencyKey: 9 },
47
+ { id: 'p2', label: 'Lunch Specials', meta: '4 slides', recencyKey: 8 },
48
+ { id: 'p3', label: 'Evening Wind-down', meta: '7 slides', recencyKey: 7 },
49
+ { id: 'p4', label: 'Trivia Night', meta: '20 slides', recencyKey: 6 },
50
+ { id: 'p5', label: 'Weekend Brunch', meta: '8 slides', recencyKey: 5 },
51
+ { id: 'p6', label: 'Holidays — December', meta: '15 slides', recencyKey: 4 },
52
+ { id: 'p7', label: 'Local Sports', meta: '10 slides', recencyKey: 3 },
53
+ { id: 'p8', label: 'Promotions', meta: '6 slides', recencyKey: 2 },
54
+ ];
55
+ export const Default = {
56
+ render: () => {
57
+ const [picked, setPicked] = useState(null);
58
+ return (_jsxs(Stack, { gap: spacing.sm, align: 'center', children: [_jsx(Picker, { items: fewPlaylists, onSelect: (item) => setPicked(item.label), searchPlaceholder: 'Search playlists\u2026', emptyMessage: 'No playlists yet', children: _jsx(Picker.Target, { children: _jsx(Button, { children: "Add to playlist" }) }) }), picked && (_jsxs(Text, { variant: 'subtle', children: ["You picked: ", picked] }))] }));
59
+ },
60
+ };
61
+ export const WithRecentAndShowAll = {
62
+ parameters: {
63
+ docs: {
64
+ description: {
65
+ story: 'When `items.length > recentCount`, the idle view shows only the top N (sorted by `recencyKey` desc) with a "Show all N" toggle. Typing in search jumps to filtered full list.',
66
+ },
67
+ },
68
+ },
69
+ render: () => {
70
+ const [picked, setPicked] = useState(null);
71
+ return (_jsxs(Stack, { gap: spacing.sm, align: 'center', children: [_jsx(Picker, { items: manyPlaylists, recentCount: 3, onSelect: (item) => setPicked(item.label), searchPlaceholder: 'Search 8 playlists\u2026', children: _jsx(Picker.Target, { children: _jsx(Button, { children: "Pick one of 8" }) }) }), picked && (_jsxs(Text, { variant: 'subtle', children: ["You picked: ", picked] }))] }));
72
+ },
73
+ };
74
+ export const WithFooter = {
75
+ parameters: {
76
+ docs: {
77
+ description: {
78
+ story: 'A common pattern: a "+ Create new …" button below the list. The footer slot is always visible regardless of search state.',
79
+ },
80
+ },
81
+ },
82
+ render: () => (_jsx(Picker, { items: manyPlaylists, recentCount: 3, onSelect: () => undefined, searchPlaceholder: 'Search playlists\u2026', footer: _jsx(Button, { variant: 'text', size: 'sm', leftIcon: _jsx(IconPlus, { size: 14 }), fullWidth: true, children: "Create new playlist" }), children: _jsx(Picker.Target, { children: _jsx(Button, { children: "Add to playlist" }) }) })),
83
+ };
84
+ export const Empty = {
85
+ parameters: {
86
+ docs: {
87
+ description: {
88
+ story: 'Empty state shows the configured message when no items exist.',
89
+ },
90
+ },
91
+ },
92
+ render: () => (_jsx(Picker, { items: [], onSelect: () => undefined, emptyMessage: 'No playlists yet', footer: _jsx(Button, { variant: 'text', size: 'sm', leftIcon: _jsx(IconPlus, { size: 14 }), fullWidth: true, children: "Create your first playlist" }), children: _jsx(Picker.Target, { children: _jsx(Button, { children: "Add to playlist" }) }) })),
93
+ };
94
+ export const WithDisabledItems = {
95
+ parameters: {
96
+ docs: {
97
+ description: {
98
+ story: 'Items can be disabled with an explanatory tooltip — useful for ' +
99
+ '"already in playlist" or permission-gated entries.',
100
+ },
101
+ },
102
+ },
103
+ render: () => (_jsx(Picker, { items: [
104
+ { id: 'p1', label: 'Morning Mix', meta: '12 slides', recencyKey: 3 },
105
+ {
106
+ id: 'p2',
107
+ label: 'Lunch Specials',
108
+ meta: 'Already in this playlist',
109
+ recencyKey: 2,
110
+ disabled: true,
111
+ disabledReason: 'This slide is already in "Lunch Specials".',
112
+ },
113
+ { id: 'p3', label: 'Evening Wind-down', meta: '7 slides', recencyKey: 1 },
114
+ ], onSelect: () => undefined, children: _jsx(Picker.Target, { children: _jsx(Button, { children: "Add to playlist" }) }) })),
115
+ };
116
+ export const Controlled = {
117
+ parameters: {
118
+ docs: {
119
+ description: {
120
+ story: 'Controlled-open mode for triggering programmatically — e.g. when ' +
121
+ 'the trigger lives in another popover that needs to close first.',
122
+ },
123
+ },
124
+ },
125
+ render: () => {
126
+ const [open, setOpen] = useState(false);
127
+ return (_jsxs(Group, { gap: spacing.sm, align: 'center', children: [_jsx(Button, { onClick: () => setOpen(true), children: "Open Picker" }), _jsx(Picker, { items: fewPlaylists, onSelect: () => setOpen(false), opened: open, onOpenChange: setOpen, children: _jsx(Picker.Target, { children: _jsx("span", { style: { display: 'inline-block', width: 1, height: 1 } }) }) })] }));
128
+ },
129
+ };
130
+ export const AnchoredToIconButton = {
131
+ parameters: {
132
+ docs: {
133
+ description: {
134
+ story: 'Mounting on an IconButton trigger — common in card kebabs.',
135
+ },
136
+ },
137
+ },
138
+ render: () => (_jsx(Picker, { items: fewPlaylists, onSelect: () => undefined, position: 'bottom-end', children: _jsx(Picker.Target, { children: _jsx(IconButton, { "aria-label": 'Add to playlist', variant: 'secondary', subtle: true, children: _jsx(IconPlus, { size: 16 }) }) }) })),
139
+ };
140
+ export const OnDarkSurface = {
141
+ parameters: {
142
+ docs: {
143
+ description: {
144
+ story: 'Picker dropdown stays light/neutral against a dark anchor surface ' +
145
+ '(e.g. when triggered from a dark selection toolbar).',
146
+ },
147
+ },
148
+ },
149
+ render: () => (_jsx("div", { style: {
150
+ background: '#1a1a22',
151
+ borderRadius: 12,
152
+ padding: spacing.md,
153
+ }, children: _jsx(Picker, { items: manyPlaylists, recentCount: 3, onSelect: () => undefined, position: 'top-end', footer: _jsx(Button, { variant: 'text', size: 'sm', leftIcon: _jsx(IconPlus, { size: 14 }), fullWidth: true, children: "Create new playlist" }), children: _jsx(Picker.Target, { children: _jsx(Button, { variant: 'ghost', size: 'sm', children: "Add to playlist" }) }) }) })),
154
+ };
@@ -0,0 +1,38 @@
1
+ import type React from 'react';
2
+ export type SelectableObjectHandle = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
3
+ export interface SelectableObjectProps {
4
+ children: React.ReactNode;
5
+ /** Render the selection chrome (border + handles). Default `true`. */
6
+ selected?: boolean;
7
+ /** Render the 4 corner handles when selected. Default `true`. */
8
+ showHandles?: boolean;
9
+ /** Animated marching-ants border when selected. Default `true`. */
10
+ animated?: boolean;
11
+ /** Border color. Default `primary[200]`. */
12
+ color?: string;
13
+ /**
14
+ * Cursor used on the wrapper. Default `'move'` when selected, otherwise
15
+ * `'pointer'`.
16
+ */
17
+ cursor?: React.CSSProperties['cursor'];
18
+ /**
19
+ * Fires for a click anywhere inside the object. Consumers use this to
20
+ * promote the object to the selected state.
21
+ */
22
+ onSelect?: (event: React.MouseEvent) => void;
23
+ /**
24
+ * Fires when a corner handle is pressed. Consumers implement the actual
25
+ * resize math on top of this.
26
+ */
27
+ onHandlePointerDown?: (handle: SelectableObjectHandle, event: React.PointerEvent) => void;
28
+ style?: React.CSSProperties;
29
+ className?: string;
30
+ }
31
+ /**
32
+ * Chrome wrapper that renders an animated dashed selection border and four
33
+ * corner resize handles around arbitrary content. Purely presentational —
34
+ * drag + resize math lives in the consumer. SVG rather than CSS `dashed`
35
+ * borders because dash offsets are not animatable on standard borders.
36
+ */
37
+ export declare const SelectableObject: ({ children, selected, showHandles, animated, color, cursor, onSelect, onHandlePointerDown, style, className, }: SelectableObjectProps) => import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=SelectableObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectableObject.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/SelectableObject/SelectableObject.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,sBAAsB,GAC9B,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,KAAK,CAAC,YAAY,KACtB,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,gHAW9B,qBAAqB,4CAiGvB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { primary, white } from '../../../constants/colors';
3
+ const HANDLE_SIZE = 10;
4
+ const HANDLE_HALF = HANDLE_SIZE / 2;
5
+ const HANDLE_POSITIONS = {
6
+ 'bottom-left': { cursor: 'nesw-resize', left: '0%', top: '100%' },
7
+ 'bottom-right': { cursor: 'nwse-resize', left: '100%', top: '100%' },
8
+ 'top-left': { cursor: 'nwse-resize', left: '0%', top: '0%' },
9
+ 'top-right': { cursor: 'nesw-resize', left: '100%', top: '0%' },
10
+ };
11
+ const ANIMATION_NAME = 'taiv-ui-marching-ants';
12
+ /**
13
+ * Chrome wrapper that renders an animated dashed selection border and four
14
+ * corner resize handles around arbitrary content. Purely presentational —
15
+ * drag + resize math lives in the consumer. SVG rather than CSS `dashed`
16
+ * borders because dash offsets are not animatable on standard borders.
17
+ */
18
+ export const SelectableObject = ({ children, selected = true, showHandles = true, animated = true, color = primary[200], cursor, onSelect, onHandlePointerDown, style, className, }) => {
19
+ const resolvedCursor = cursor !== null && cursor !== void 0 ? cursor : (selected ? 'move' : 'pointer');
20
+ const interactive = Boolean(onSelect);
21
+ return (_jsxs("div", { className: className, ...(interactive
22
+ ? {
23
+ onClick: onSelect,
24
+ onKeyDown: (e) => {
25
+ if (e.key === 'Enter' || e.key === ' ') {
26
+ e.preventDefault();
27
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(e);
28
+ }
29
+ },
30
+ role: 'button',
31
+ tabIndex: 0,
32
+ }
33
+ : {}), style: {
34
+ cursor: resolvedCursor,
35
+ display: 'inline-block',
36
+ position: 'relative',
37
+ ...style,
38
+ }, children: [children, selected ? (_jsxs(_Fragment, { children: [_jsx("style", { children: `@keyframes ${ANIMATION_NAME} { to { stroke-dashoffset: -16; } }` }), _jsxs("svg", { role: 'presentation', style: {
39
+ height: '100%',
40
+ left: 0,
41
+ overflow: 'visible',
42
+ pointerEvents: 'none',
43
+ position: 'absolute',
44
+ top: 0,
45
+ width: '100%',
46
+ }, children: [_jsx("title", { children: "Selection border" }), _jsx("rect", { fill: 'none', height: '100%', stroke: color, strokeDasharray: '6 4', strokeWidth: 2, style: animated
47
+ ? { animation: `${ANIMATION_NAME} 1s linear infinite` }
48
+ : undefined, width: '100%', x: 0, y: 0 })] }), showHandles
49
+ ? Object.keys(HANDLE_POSITIONS).map((handle) => {
50
+ const pos = HANDLE_POSITIONS[handle];
51
+ return (_jsx("button", { "aria-label": `Resize ${handle}`, onPointerDown: (e) => {
52
+ e.stopPropagation();
53
+ onHandlePointerDown === null || onHandlePointerDown === void 0 ? void 0 : onHandlePointerDown(handle, e);
54
+ }, style: {
55
+ backgroundColor: white,
56
+ border: `2px solid ${color}`,
57
+ borderRadius: 2,
58
+ cursor: pos.cursor,
59
+ height: HANDLE_SIZE,
60
+ left: pos.left,
61
+ marginLeft: -HANDLE_HALF,
62
+ marginTop: -HANDLE_HALF,
63
+ padding: 0,
64
+ position: 'absolute',
65
+ top: pos.top,
66
+ width: HANDLE_SIZE,
67
+ }, type: 'button' }, handle));
68
+ })
69
+ : null] })) : null] }));
70
+ };
@@ -0,0 +1,11 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { SelectableObject } from './SelectableObject';
3
+ declare const meta: Meta<typeof SelectableObject>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const TextObject: Story;
7
+ export declare const ImageObject: Story;
8
+ export declare const ToggleSelection: Story;
9
+ export declare const NoHandles: Story;
10
+ export declare const StaticBorder: Story;
11
+ //# sourceMappingURL=SelectableObject.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectableObject.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/SelectableObject/SelectableObject.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAO5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAYvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAYnC,eAAO,MAAM,UAAU,EAAE,KAoBxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAyBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA+B7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAiB1B,CAAC"}