@clubmed/trident-ui 2.0.0-beta.7 → 2.0.0-beta.74

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 (476) hide show
  1. package/README.md +8 -0
  2. package/assets/trident-ui.css +3 -0
  3. package/chunks/Backdrop.js +1 -1
  4. package/chunks/Backdrop.js.map +1 -1
  5. package/chunks/Birthdate.js +27 -0
  6. package/chunks/Birthdate.js.map +1 -0
  7. package/chunks/Carousel.context.js +1548 -0
  8. package/chunks/Carousel.context.js.map +1 -0
  9. package/chunks/ChatMessage.js +14395 -0
  10. package/chunks/ChatMessage.js.map +1 -0
  11. package/chunks/CriteriaParticipants.js +415 -0
  12. package/chunks/CriteriaParticipants.js.map +1 -0
  13. package/chunks/DateField.js +189 -128
  14. package/chunks/DateField.js.map +1 -1
  15. package/chunks/Datepicker.js +2039 -0
  16. package/chunks/Datepicker.js.map +1 -0
  17. package/chunks/Day.js +88 -0
  18. package/chunks/Day.js.map +1 -0
  19. package/chunks/Range.js +2 -2
  20. package/chunks/Range.js.map +1 -1
  21. package/chunks/Tooltip.js +4461 -0
  22. package/chunks/Tooltip.js.map +1 -0
  23. package/chunks/addLeadingZeros.js +33 -0
  24. package/chunks/addLeadingZeros.js.map +1 -0
  25. package/chunks/addYears.js +18 -0
  26. package/chunks/addYears.js.map +1 -0
  27. package/chunks/chunk.js +11 -4
  28. package/chunks/client.js +18953 -0
  29. package/chunks/client.js.map +1 -0
  30. package/chunks/endOfMonth.js +17 -0
  31. package/chunks/endOfMonth.js.map +1 -0
  32. package/chunks/format.js +1113 -0
  33. package/chunks/format.js.map +1 -0
  34. package/chunks/formatISO.js +29 -0
  35. package/chunks/formatISO.js.map +1 -0
  36. package/chunks/isAfter.js +9 -0
  37. package/chunks/isAfter.js.map +1 -0
  38. package/chunks/isBefore.js +15 -0
  39. package/chunks/isBefore.js.map +1 -0
  40. package/chunks/normalizeDates.js +10 -0
  41. package/chunks/normalizeDates.js.map +1 -0
  42. package/chunks/subYears.js +9 -0
  43. package/chunks/subYears.js.map +1 -0
  44. package/examples/accordion-demo.d.ts +1 -0
  45. package/examples/accordion-demo.js +79 -0
  46. package/examples/accordion-demo.js.map +1 -0
  47. package/examples/accordion-multiple-demo.d.ts +1 -0
  48. package/examples/accordion-multiple-demo.js +79 -0
  49. package/examples/accordion-multiple-demo.js.map +1 -0
  50. package/examples/accordion-trigger-wrapper-demo.d.ts +1 -0
  51. package/examples/accordion-trigger-wrapper-demo.js +80 -0
  52. package/examples/accordion-trigger-wrapper-demo.js.map +1 -0
  53. package/examples/advanced-toast-demo.js +2 -2
  54. package/examples/advanced-toast-demo.js.map +1 -1
  55. package/examples/advanced-toast-green-demo.js +1 -1
  56. package/examples/advanced-toast-green-demo.js.map +1 -1
  57. package/examples/advanced-toast-no-dismiss-demo.js +1 -1
  58. package/examples/advanced-toast-no-dismiss-demo.js.map +1 -1
  59. package/examples/advanced-toast-red-demo.js +1 -1
  60. package/examples/advanced-toast-red-demo.js.map +1 -1
  61. package/examples/advanced-toast-with-details-demo.js +2 -2
  62. package/examples/advanced-toast-with-details-demo.js.map +1 -1
  63. package/examples/arrow-button-demo.js +2 -1
  64. package/examples/arrow-button-demo.js.map +1 -1
  65. package/examples/arrow-button-disabled-demo.js +2 -1
  66. package/examples/arrow-button-disabled-demo.js.map +1 -1
  67. package/examples/arrow-button-left-demo.js +2 -1
  68. package/examples/arrow-button-left-demo.js.map +1 -1
  69. package/examples/arrow-button-outline-demo.js +2 -1
  70. package/examples/arrow-button-outline-demo.js.map +1 -1
  71. package/examples/arrow-button-tail-demo.js +2 -1
  72. package/examples/arrow-button-tail-demo.js.map +1 -1
  73. package/examples/avatar-demo.js +7 -7
  74. package/examples/button-demo.js +2 -2
  75. package/examples/button-demo.js.map +1 -1
  76. package/examples/card-list-demo.js +10 -10
  77. package/examples/card-no-border-demo.js +7 -7
  78. package/examples/chat-button-demo.js +1 -1
  79. package/examples/chat-button-demo.js.map +1 -1
  80. package/examples/chat-button-offset-demo.js +4 -1
  81. package/examples/chat-button-offset-demo.js.map +1 -1
  82. package/examples/chat-input-demo.d.ts +1 -0
  83. package/examples/chat-input-demo.js +22 -0
  84. package/examples/chat-input-demo.js.map +1 -0
  85. package/examples/chat-message-demo.d.ts +1 -0
  86. package/examples/chat-message-demo.js +20 -0
  87. package/examples/chat-message-demo.js.map +1 -0
  88. package/examples/chat-typing-indicator-demo.d.ts +1 -0
  89. package/examples/chat-typing-indicator-demo.js +14 -0
  90. package/examples/chat-typing-indicator-demo.js.map +1 -0
  91. package/examples/chat-window-csat-demo.d.ts +1 -0
  92. package/examples/chat-window-csat-demo.js +69 -0
  93. package/examples/chat-window-csat-demo.js.map +1 -0
  94. package/examples/chat-window-csat-prompt-demo.d.ts +1 -0
  95. package/examples/chat-window-csat-prompt-demo.js +40 -0
  96. package/examples/chat-window-csat-prompt-demo.js.map +1 -0
  97. package/examples/chat-window-demo.d.ts +1 -0
  98. package/examples/chat-window-demo.js +70 -0
  99. package/examples/chat-window-demo.js.map +1 -0
  100. package/examples/chat-window-quote-demo.d.ts +1 -0
  101. package/examples/chat-window-quote-demo.js +47 -0
  102. package/examples/chat-window-quote-demo.js.map +1 -0
  103. package/examples/chat-window-quotes-demo.d.ts +1 -0
  104. package/examples/chat-window-quotes-demo.js +68 -0
  105. package/examples/chat-window-quotes-demo.js.map +1 -0
  106. package/examples/checkbox-demo.js +17 -15
  107. package/examples/checkbox-demo.js.map +1 -1
  108. package/examples/checkbox-disabled-demo.js +12 -15
  109. package/examples/checkbox-disabled-demo.js.map +1 -1
  110. package/examples/checkbox-select-demo.d.ts +1 -0
  111. package/examples/checkbox-select-demo.js +101 -0
  112. package/examples/checkbox-select-demo.js.map +1 -0
  113. package/examples/checkboxes-demo.js +2 -1
  114. package/examples/checkboxes-demo.js.map +1 -1
  115. package/examples/checkboxes-with-form-control-demo.js +8 -8
  116. package/examples/checkboxes-with-form-control-demo.js.map +1 -1
  117. package/examples/chip-demo.js +4 -4
  118. package/examples/choice-expander-demo.js +5 -67
  119. package/examples/choice-expander-demo.js.map +1 -1
  120. package/examples/countdown-demo.d.ts +1 -0
  121. package/examples/countdown-demo.js +39 -0
  122. package/examples/countdown-demo.js.map +1 -0
  123. package/examples/criteria-dates-demo.d.ts +1 -0
  124. package/examples/criteria-dates-demo.js +41 -0
  125. package/examples/criteria-dates-demo.js.map +1 -0
  126. package/examples/criteria-participants-demo.d.ts +1 -0
  127. package/examples/criteria-participants-demo.js +77 -0
  128. package/examples/criteria-participants-demo.js.map +1 -0
  129. package/examples/criteria-participants-flow1-demo.d.ts +1 -0
  130. package/examples/criteria-participants-flow1-demo.js +53 -0
  131. package/examples/criteria-participants-flow1-demo.js.map +1 -0
  132. package/examples/criteria-participants-flow2-demo.d.ts +1 -0
  133. package/examples/criteria-participants-flow2-demo.js +61 -0
  134. package/examples/criteria-participants-flow2-demo.js.map +1 -0
  135. package/examples/criteria-participants-flow3-demo.d.ts +1 -0
  136. package/examples/criteria-participants-flow3-demo.js +72 -0
  137. package/examples/criteria-participants-flow3-demo.js.map +1 -0
  138. package/examples/criteria-transports-b2b-demo.d.ts +1 -0
  139. package/examples/criteria-transports-b2b-demo.js +51 -0
  140. package/examples/criteria-transports-b2b-demo.js.map +1 -0
  141. package/examples/criteria-transports-b2c-demo.d.ts +1 -0
  142. package/examples/criteria-transports-b2c-demo.js +37 -0
  143. package/examples/criteria-transports-b2c-demo.js.map +1 -0
  144. package/examples/criteria-transports-data.d.ts +7 -0
  145. package/examples/criteria-transports-data.js +151 -0
  146. package/examples/criteria-transports-data.js.map +1 -0
  147. package/examples/criteria-transports-demo.d.ts +1 -0
  148. package/examples/criteria-transports-demo.js +34 -0
  149. package/examples/criteria-transports-demo.js.map +1 -0
  150. package/examples/criteria-transports-error-demo.d.ts +1 -0
  151. package/examples/criteria-transports-error-demo.js +29 -0
  152. package/examples/criteria-transports-error-demo.js.map +1 -0
  153. package/examples/datepicker-demo.d.ts +1 -0
  154. package/examples/datepicker-demo.js +51 -0
  155. package/examples/datepicker-demo.js.map +1 -0
  156. package/examples/datepicker-disabled-days-demo.d.ts +1 -0
  157. package/examples/datepicker-disabled-days-demo.js +42 -0
  158. package/examples/datepicker-disabled-days-demo.js.map +1 -0
  159. package/examples/datepicker-duration-tooltip-demo.d.ts +1 -0
  160. package/examples/datepicker-duration-tooltip-demo.js +68 -0
  161. package/examples/datepicker-duration-tooltip-demo.js.map +1 -0
  162. package/examples/datepicker-no-prices-demo.d.ts +1 -0
  163. package/examples/datepicker-no-prices-demo.js +42 -0
  164. package/examples/datepicker-no-prices-demo.js.map +1 -0
  165. package/examples/datepicker-preselected-demo.d.ts +1 -0
  166. package/examples/datepicker-preselected-demo.js +77 -0
  167. package/examples/datepicker-preselected-demo.js.map +1 -0
  168. package/examples/dropdown-demo.js +9 -1
  169. package/examples/dropdown-demo.js.map +1 -1
  170. package/examples/elastic-height-demo.js +2 -1
  171. package/examples/elastic-height-demo.js.map +1 -1
  172. package/examples/expandable-text-demo.d.ts +1 -0
  173. package/examples/expandable-text-demo.js +22 -0
  174. package/examples/expandable-text-demo.js.map +1 -0
  175. package/examples/filter-demo.js +5 -5
  176. package/examples/floating-label-text-field-demo.d.ts +1 -0
  177. package/examples/floating-label-text-field-demo.js +32 -0
  178. package/examples/floating-label-text-field-demo.js.map +1 -0
  179. package/examples/frame-demo.d.ts +1 -0
  180. package/examples/frame-demo.js +36 -0
  181. package/examples/frame-demo.js.map +1 -0
  182. package/examples/frame-horizontal-demo.d.ts +1 -0
  183. package/examples/frame-horizontal-demo.js +44 -0
  184. package/examples/frame-horizontal-demo.js.map +1 -0
  185. package/examples/frame-no-image-demo.d.ts +1 -0
  186. package/examples/frame-no-image-demo.js +47 -0
  187. package/examples/frame-no-image-demo.js.map +1 -0
  188. package/examples/frame-vertical-demo.d.ts +1 -0
  189. package/examples/frame-vertical-demo.js +44 -0
  190. package/examples/frame-vertical-demo.js.map +1 -0
  191. package/examples/frame-with-tag-demo.d.ts +1 -0
  192. package/examples/frame-with-tag-demo.js +48 -0
  193. package/examples/frame-with-tag-demo.js.map +1 -0
  194. package/examples/journey-card-compact-demo.d.ts +1 -0
  195. package/examples/journey-card-compact-demo.js +71 -0
  196. package/examples/journey-card-compact-demo.js.map +1 -0
  197. package/examples/journey-card-demo.d.ts +1 -0
  198. package/examples/journey-card-demo.js +123 -0
  199. package/examples/journey-card-demo.js.map +1 -0
  200. package/examples/page-navigation-demo.d.ts +1 -0
  201. package/examples/page-navigation-demo.js +53 -0
  202. package/examples/page-navigation-demo.js.map +1 -0
  203. package/examples/password-demo.js +1 -0
  204. package/examples/password-demo.js.map +1 -1
  205. package/examples/phone-field-demo.js +6 -2
  206. package/examples/phone-field-demo.js.map +1 -1
  207. package/examples/radio-demo.js +3 -3
  208. package/examples/radio-demo.js.map +1 -1
  209. package/examples/radio-select-demo.d.ts +1 -0
  210. package/examples/radio-select-demo.js +100 -0
  211. package/examples/radio-select-demo.js.map +1 -0
  212. package/examples/scrollbar-demo.d.ts +1 -0
  213. package/examples/scrollbar-demo.js +42 -0
  214. package/examples/scrollbar-demo.js.map +1 -0
  215. package/examples/select-demo.js +1 -0
  216. package/examples/select-demo.js.map +1 -1
  217. package/examples/slider-frame-demo.d.ts +1 -0
  218. package/examples/slider-frame-demo.js +39 -0
  219. package/examples/slider-frame-demo.js.map +1 -0
  220. package/examples/slider-frame-with-button-demo.d.ts +1 -0
  221. package/examples/slider-frame-with-button-demo.js +47 -0
  222. package/examples/slider-frame-with-button-demo.js.map +1 -0
  223. package/examples/slider-frame-with-tag-demo.d.ts +1 -0
  224. package/examples/slider-frame-with-tag-demo.js +51 -0
  225. package/examples/slider-frame-with-tag-demo.js.map +1 -0
  226. package/examples/switch-demo.js +3 -2
  227. package/examples/switch-demo.js.map +1 -1
  228. package/examples/tabs-demo.js +2 -5
  229. package/examples/tabs-demo.js.map +1 -1
  230. package/examples/tabs-notification-demo.d.ts +1 -0
  231. package/examples/tabs-notification-demo.js +64 -0
  232. package/examples/tabs-notification-demo.js.map +1 -0
  233. package/examples/tabs-with-select-demo.js +1 -0
  234. package/examples/tabs-with-select-demo.js.map +1 -1
  235. package/examples/text-field-demo.js +6 -0
  236. package/examples/text-field-demo.js.map +1 -1
  237. package/examples/toggle-demo.d.ts +1 -0
  238. package/examples/toggle-demo.js +44 -0
  239. package/examples/toggle-demo.js.map +1 -0
  240. package/examples/toggle-small-demo.d.ts +1 -0
  241. package/examples/toggle-small-demo.js +33 -0
  242. package/examples/toggle-small-demo.js.map +1 -0
  243. package/examples/tooltip-demo.d.ts +1 -0
  244. package/examples/tooltip-demo.js +103 -0
  245. package/examples/tooltip-demo.js.map +1 -0
  246. package/package.json +10 -3
  247. package/styles/components.css +99 -0
  248. package/styles/index.css +0 -1
  249. package/styles/theme.css +5 -2
  250. package/styles/ui/button.css +1 -1
  251. package/styles/ui/chat-button.css +68 -1
  252. package/styles/ui/controls.css +11 -58
  253. package/styles/ui/range.css +6 -1
  254. package/styles/ui/tabs.css +0 -19
  255. package/ui/Accordion.d.ts +30 -0
  256. package/ui/Accordion.js +71 -0
  257. package/ui/Accordion.js.map +1 -0
  258. package/ui/AdvancedToast.js +31 -28
  259. package/ui/AdvancedToast.js.map +1 -1
  260. package/ui/Avatar.js +1 -1
  261. package/ui/Avatar.js.map +1 -1
  262. package/ui/BasicToast.js +13 -13
  263. package/ui/BasicToast.js.map +1 -1
  264. package/ui/Breadcrumb.js +7 -6
  265. package/ui/Breadcrumb.js.map +1 -1
  266. package/ui/ChatButton.js +9 -9
  267. package/ui/ChatButton.js.map +1 -1
  268. package/ui/ChatInput.d.ts +10 -0
  269. package/ui/ChatInput.js +149 -0
  270. package/ui/ChatInput.js.map +1 -0
  271. package/ui/ChatMessage.d.ts +6 -0
  272. package/ui/ChatMessage.js +2 -0
  273. package/ui/ChatTypingIndicator.d.ts +2 -0
  274. package/ui/ChatTypingIndicator.js +30 -0
  275. package/ui/ChatTypingIndicator.js.map +1 -0
  276. package/ui/ChatWindow.d.ts +34 -0
  277. package/ui/ChatWindow.js +142 -0
  278. package/ui/ChatWindow.js.map +1 -0
  279. package/ui/ChatWindowCsatPrompt.d.ts +15 -0
  280. package/ui/ChatWindowCsatPrompt.js +71 -0
  281. package/ui/ChatWindowCsatPrompt.js.map +1 -0
  282. package/ui/ChatWindowCsatThankYou.d.ts +9 -0
  283. package/ui/ChatWindowCsatThankYou.js +29 -0
  284. package/ui/ChatWindowCsatThankYou.js.map +1 -0
  285. package/ui/ChatWindowQuote.d.ts +22 -0
  286. package/ui/ChatWindowQuote.js +141 -0
  287. package/ui/ChatWindowQuote.js.map +1 -0
  288. package/ui/Chip.js +4 -4
  289. package/ui/ChoiceExpander.js +18 -18
  290. package/ui/ChoiceExpander.js.map +1 -1
  291. package/ui/Countdown.d.ts +16 -0
  292. package/ui/Countdown.js +61 -0
  293. package/ui/Countdown.js.map +1 -0
  294. package/ui/Datepicker.d.ts +26 -0
  295. package/ui/Datepicker.js +2 -0
  296. package/ui/Day.d.ts +25 -0
  297. package/ui/Day.js +2 -0
  298. package/ui/Dropdown.d.ts +20 -3
  299. package/ui/Dropdown.js +61 -27
  300. package/ui/Dropdown.js.map +1 -1
  301. package/ui/ElasticHeight.d.ts +0 -1
  302. package/ui/ElasticHeight.js +14 -23
  303. package/ui/ElasticHeight.js.map +1 -1
  304. package/ui/ExpandableText.d.ts +14 -0
  305. package/ui/ExpandableText.js +40 -0
  306. package/ui/ExpandableText.js.map +1 -0
  307. package/ui/FlipCard.d.ts +7 -0
  308. package/ui/FlipCard.js +59 -0
  309. package/ui/FlipCard.js.map +1 -0
  310. package/ui/HamburgerIcon.js +1 -1
  311. package/ui/HamburgerIcon.js.map +1 -1
  312. package/ui/Link.js +8 -8
  313. package/ui/Link.js.map +1 -1
  314. package/ui/PageNavigation.d.ts +13 -0
  315. package/ui/PageNavigation.js +71 -0
  316. package/ui/PageNavigation.js.map +1 -0
  317. package/ui/Pagination.js +23 -23
  318. package/ui/Pagination.js.map +1 -1
  319. package/ui/Scrollbar.d.ts +14 -0
  320. package/ui/Scrollbar.js +68 -0
  321. package/ui/Scrollbar.js.map +1 -0
  322. package/ui/SidebarLayout.d.ts +3 -1
  323. package/ui/SidebarLayout.js +67 -59
  324. package/ui/SidebarLayout.js.map +1 -1
  325. package/ui/Tag.js +6 -6
  326. package/ui/Toggle.d.ts +15 -0
  327. package/ui/Toggle.js +42 -0
  328. package/ui/Toggle.js.map +1 -0
  329. package/ui/Tooltip.d.ts +8 -0
  330. package/ui/Tooltip.js +2 -0
  331. package/ui/buttons/Button.type.d.ts +1 -1
  332. package/ui/buttons/Button.type.js +1 -1
  333. package/ui/buttons/Button.type.js.map +1 -1
  334. package/ui/buttons/ButtonContent.js +3 -3
  335. package/ui/carousel/Carousel.context.d.ts +27 -0
  336. package/ui/carousel/Carousel.context.js +2 -0
  337. package/ui/carousel/Carousel.d.ts +3 -0
  338. package/ui/carousel/Carousel.js +12 -0
  339. package/ui/carousel/Carousel.js.map +1 -0
  340. package/ui/carousel/CarouselBody.d.ts +6 -0
  341. package/ui/carousel/CarouselBody.js +21 -0
  342. package/ui/carousel/CarouselBody.js.map +1 -0
  343. package/ui/carousel/CarouselItem.d.ts +6 -0
  344. package/ui/carousel/CarouselItem.js +21 -0
  345. package/ui/carousel/CarouselItem.js.map +1 -0
  346. package/ui/carousel/CarouselNext.d.ts +8 -0
  347. package/ui/carousel/CarouselNext.js +23 -0
  348. package/ui/carousel/CarouselNext.js.map +1 -0
  349. package/ui/carousel/CarouselPrevious.d.ts +8 -0
  350. package/ui/carousel/CarouselPrevious.js +23 -0
  351. package/ui/carousel/CarouselPrevious.js.map +1 -0
  352. package/ui/contexts/TridentUIConfig.js +1 -1
  353. package/ui/criteria/Birthdate.d.ts +13 -0
  354. package/ui/criteria/Birthdate.js +2 -0
  355. package/ui/criteria/CriteriaDates.d.ts +32 -0
  356. package/ui/criteria/CriteriaDates.js +76 -0
  357. package/ui/criteria/CriteriaDates.js.map +1 -0
  358. package/ui/criteria/CriteriaParticipants.d.ts +106 -0
  359. package/ui/criteria/CriteriaParticipants.js +2 -0
  360. package/ui/criteria/CriteriaSection.d.ts +6 -0
  361. package/ui/criteria/CriteriaSection.js +15 -0
  362. package/ui/criteria/CriteriaSection.js.map +1 -0
  363. package/ui/criteria/CriteriaTransports.d.ts +72 -0
  364. package/ui/criteria/CriteriaTransports.js +224 -0
  365. package/ui/criteria/CriteriaTransports.js.map +1 -0
  366. package/ui/forms/CheckboxSelect.d.ts +31 -0
  367. package/ui/forms/CheckboxSelect.js +119 -0
  368. package/ui/forms/CheckboxSelect.js.map +1 -0
  369. package/ui/forms/Filter.d.ts +10 -4
  370. package/ui/forms/Filter.js +26 -44
  371. package/ui/forms/Filter.js.map +1 -1
  372. package/ui/forms/FloatingLabelTextField.d.ts +12 -0
  373. package/ui/forms/FloatingLabelTextField.js +132 -0
  374. package/ui/forms/FloatingLabelTextField.js.map +1 -0
  375. package/ui/forms/FormControl.d.ts +1 -1
  376. package/ui/forms/FormControl.js +4 -4
  377. package/ui/forms/FormControl.js.map +1 -1
  378. package/ui/forms/FormControlError.js +4 -4
  379. package/ui/forms/NumberField.d.ts +27 -26
  380. package/ui/forms/NumberField.js +24 -25
  381. package/ui/forms/NumberField.js.map +1 -1
  382. package/ui/forms/PhoneField.d.ts +5 -10
  383. package/ui/forms/PhoneField.js +31 -211
  384. package/ui/forms/PhoneField.js.map +1 -1
  385. package/ui/forms/PhoneFieldFullInput.d.ts +16 -0
  386. package/ui/forms/PhoneFieldFullInput.js +110 -0
  387. package/ui/forms/PhoneFieldFullInput.js.map +1 -0
  388. package/ui/forms/PhoneFieldSplitInput.d.ts +19 -0
  389. package/ui/forms/PhoneFieldSplitInput.js +158 -0
  390. package/ui/forms/PhoneFieldSplitInput.js.map +1 -0
  391. package/ui/forms/RadioSelect.d.ts +31 -0
  392. package/ui/forms/RadioSelect.js +117 -0
  393. package/ui/forms/RadioSelect.js.map +1 -0
  394. package/ui/forms/Range.d.ts +1 -1
  395. package/ui/forms/Select.js +18 -19
  396. package/ui/forms/Select.js.map +1 -1
  397. package/ui/forms/Switch.d.ts +5 -3
  398. package/ui/forms/Switch.js +54 -34
  399. package/ui/forms/Switch.js.map +1 -1
  400. package/ui/forms/TextField.js +35 -26
  401. package/ui/forms/TextField.js.map +1 -1
  402. package/ui/forms/checkboxes/Checkbox.d.ts +9 -4
  403. package/ui/forms/checkboxes/Checkbox.js +36 -16
  404. package/ui/forms/checkboxes/Checkbox.js.map +1 -1
  405. package/ui/forms/checkboxes/Checkboxes.d.ts +5 -0
  406. package/ui/forms/checkboxes/Checkboxes.js +8 -8
  407. package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
  408. package/ui/forms/checkboxes/index.d.ts +0 -1
  409. package/ui/forms/checkboxes/index.js +1 -2
  410. package/ui/forms/password/Password.js +21 -22
  411. package/ui/forms/password/Password.js.map +1 -1
  412. package/ui/forms/password/ValidationMessage.js +5 -5
  413. package/ui/forms/radios/Radio.d.ts +2 -1
  414. package/ui/forms/radios/Radio.js +6 -3
  415. package/ui/forms/radios/Radio.js.map +1 -1
  416. package/ui/forms/radios/RadioGroup.js +13 -14
  417. package/ui/forms/radios/RadioGroup.js.map +1 -1
  418. package/ui/frame/Frame.d.ts +8 -0
  419. package/ui/frame/Frame.js +16 -0
  420. package/ui/frame/Frame.js.map +1 -0
  421. package/ui/frame/FrameLabelsWrapper.d.ts +5 -0
  422. package/ui/frame/FrameLabelsWrapper.js +12 -0
  423. package/ui/frame/FrameLabelsWrapper.js.map +1 -0
  424. package/ui/frame/FrameTitle.d.ts +7 -0
  425. package/ui/frame/FrameTitle.js +25 -0
  426. package/ui/frame/FrameTitle.js.map +1 -0
  427. package/ui/frame/FrameWrapper.d.ts +6 -0
  428. package/ui/frame/FrameWrapper.js +14 -0
  429. package/ui/frame/FrameWrapper.js.map +1 -0
  430. package/ui/frame/SliderFrame.d.ts +14 -0
  431. package/ui/frame/SliderFrame.js +50 -0
  432. package/ui/frame/SliderFrame.js.map +1 -0
  433. package/ui/helpers/cn.d.ts +2 -0
  434. package/ui/helpers/cn.js +10 -0
  435. package/ui/helpers/cn.js.map +1 -0
  436. package/ui/helpers/phone/defaultPrefixes.d.ts +1 -0
  437. package/ui/helpers/phone/defaultPrefixes.js +52 -28
  438. package/ui/helpers/phone/defaultPrefixes.js.map +1 -1
  439. package/ui/helpers/phone/formatters.d.ts +11 -0
  440. package/ui/helpers/phone/formatters.js +32 -1
  441. package/ui/helpers/phone/formatters.js.map +1 -1
  442. package/ui/helpers/phone/index.d.ts +1 -1
  443. package/ui/helpers/phone/index.js +3 -3
  444. package/ui/hooks/useIsClient.d.ts +1 -0
  445. package/ui/hooks/useIsClient.js +12 -0
  446. package/ui/hooks/useIsClient.js.map +1 -0
  447. package/ui/hooks/useValue.d.ts +3 -4
  448. package/ui/hooks/useValue.js +11 -11
  449. package/ui/hooks/useValue.js.map +1 -1
  450. package/ui/journey-card/FlightSegmentCard.d.ts +15 -0
  451. package/ui/journey-card/FlightSegmentCard.js +73 -0
  452. package/ui/journey-card/FlightSegmentCard.js.map +1 -0
  453. package/ui/journey-card/FlightTimeline.d.ts +5 -0
  454. package/ui/journey-card/FlightTimeline.js +27 -0
  455. package/ui/journey-card/FlightTimeline.js.map +1 -0
  456. package/ui/journey-card/ItineraryDetails.d.ts +9 -0
  457. package/ui/journey-card/ItineraryDetails.js +40 -0
  458. package/ui/journey-card/ItineraryDetails.js.map +1 -0
  459. package/ui/journey-card/JourneyCard.d.ts +17 -0
  460. package/ui/journey-card/JourneyCard.js +34 -0
  461. package/ui/journey-card/JourneyCard.js.map +1 -0
  462. package/ui/journey-card/JourneyDetails.d.ts +47 -0
  463. package/ui/journey-card/JourneyDetails.js +183 -0
  464. package/ui/journey-card/JourneyDetails.js.map +1 -0
  465. package/ui/tabs/Tabs.d.ts +5 -1
  466. package/ui/tabs/Tabs.js +208 -124
  467. package/ui/tabs/Tabs.js.map +1 -1
  468. package/examples/form-checkbox-demo.d.ts +0 -1
  469. package/examples/form-checkbox-demo.js +0 -30
  470. package/examples/form-checkbox-demo.js.map +0 -1
  471. package/examples/form-checkbox-disabled-demo.d.ts +0 -1
  472. package/examples/form-checkbox-disabled-demo.js +0 -25
  473. package/examples/form-checkbox-disabled-demo.js.map +0 -1
  474. package/ui/forms/checkboxes/FormCheckbox.d.ts +0 -12
  475. package/ui/forms/checkboxes/FormCheckbox.js +0 -38
  476. package/ui/forms/checkboxes/FormCheckbox.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.js","names":[],"sources":["../../../lib/ui/forms/TextField.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { useValue, type UseValueProps } from '../hooks/useValue';\nimport { useInternalStatus } from '../hooks/useInternalStatus';\nimport { FormControl, type FormControlProps } from './FormControl';\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\nimport { useId } from 'react';\n\nexport interface TextFieldProps<Value> extends FormControlProps<Value> {\n description?: string;\n icon?: IconicNames;\n iconType?: IconicTypes;\n errorMessage?: string;\n dataTestId?: string;\n formatter?: UseValueProps<Value>['formatter'];\n hasDropdown?: boolean;\n clear?: string;\n iconFirst?: boolean;\n}\n\nexport const TextField = <Value = string,>(props: TextFieldProps<Value>) => {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n value: initialValue,\n description,\n validationStatus = 'default',\n icon,\n iconType,\n errorMessage,\n disabled = false,\n required = false,\n hideRequiredStar,\n className,\n dataTestId = 'TextField',\n hasDropdown = true,\n clear = '',\n iconFirst = true,\n onChange,\n formatter,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({ name, initialValue, onChange, formatter });\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const shouldDisplayClearButton =\n !disabled && value !== '' && value !== null && value !== undefined && !!clear;\n\n return (\n <FormControl\n id={id}\n label={label}\n className={className}\n description={description}\n dataName=\"TextField\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={validationStatus}\n errorMessage={errorMessage}\n >\n <div className=\"relative\">\n <input\n {...rest}\n id={id}\n name={name}\n disabled={disabled}\n required={required}\n value={value as any}\n onChange={(e) => setValue(e.target.value as Value)}\n style={\n {\n '--nbIconsStart': Number(!!icon && iconFirst),\n '--nbIconsEnd':\n Number(!!icon && !iconFirst) +\n Number(shouldDisplayClearButton || hasDropdown) +\n Number(internalStatus === 'error' || internalStatus === 'success'),\n } as React.CSSProperties\n }\n className={clsx(\n 'text-b3 rounded-pill w-full border overflow-hidden px-20 py-12 font-normal outline-none ps-[calc(20px+var(--nbIconsStart)*32px)] pe-[calc(20px+var(--nbIconsEnd)*32px)]',\n {\n 'border-middleGrey focus:border-black active:border-black':\n internalStatus === 'default',\n 'bg-white text-black': internalStatus !== 'disabled',\n 'bg-pearl border-middleGrey': internalStatus === 'disabled',\n 'border-red': internalStatus === 'error',\n 'border-green': internalStatus === 'success',\n },\n )}\n aria-label={name}\n />\n\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n {\n 'text-grey': internalStatus === 'disabled',\n 'text-red': internalStatus === 'error',\n 'text-green': internalStatus === 'success',\n },\n )}\n >\n {icon && iconFirst && <Icon name={icon} width=\"24px\" />}\n\n <span className=\"ms-auto flex gap-x-8\">\n {internalStatus === 'error' && (\n <Icon name=\"CrossDefault\" width=\"24px\" type={iconType} />\n )}\n\n {internalStatus === 'success' && (\n <Icon name=\"CheckDefault\" width=\"24px\" type={iconType} />\n )}\n {(hasDropdown || shouldDisplayClearButton) &&\n (shouldDisplayClearButton ? (\n <button\n className=\"pointer-events-auto\"\n onClick={() => setValue('' as Value)}\n aria-label={clear}\n type=\"reset\"\n >\n <Icon name=\"CrossDefault\" className=\"text-black\" width=\"24px\" />\n </button>\n ) : (\n <Icon name=\"ArrowDefaultDown\" className=\"text-black\" width=\"24px\" />\n ))}\n {!iconFirst && icon && <Icon name={icon} width=\"24px\" />}\n </span>\n </div>\n </div>\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;AAmBA,IAAa,KAA8B,MAAiC;CAC1E,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,UACA,OAAO,GACP,gBACA,sBAAmB,WACnB,SACA,aACA,iBACA,cAAW,IACX,cAAW,IACX,qBACA,cACA,gBAAa,aACb,iBAAc,IACd,WAAQ,IACR,eAAY,IACZ,aACA,cACA,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAgB;EAAE;EAAM;EAAc;EAAU;EAAW,CAAC,EAClF,IAAiB,EAAkB;EACvC,YAAY;EACZ;EACD,CAAC,EAEI,IACJ,CAAC,KAAY,MAAU,MAAM,KAAU,QAA+B,CAAC,CAAC;AAE1E,QACE,kBAAC,GAAD;EACM;EACG;EACI;EACE;EACb,UAAS;EACG;EACF;EACA;EACQ;EACA;EACJ;YAEd,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACI;IACA;IACH;IACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAe;IAClD,OACE;KACE,kBAAkB,OAAO,CAAC,CAAC,KAAQ,EAAU;KAC7C,gBACE,OAAO,CAAC,CAAC,KAAQ,CAAC,EAAU,GAC5B,OAAO,KAA4B,EAAY,GAC/C,OAAO,MAAmB,WAAW,MAAmB,UAAU;KACrE;IAEH,WAAW,EACT,2KACA;KACE,4DACE,MAAmB;KACrB,uBAAuB,MAAmB;KAC1C,8BAA8B,MAAmB;KACjD,cAAc,MAAmB;KACjC,gBAAgB,MAAmB;KACpC,CACF;IACD,cAAY;IACZ,CAAA,EAEF,kBAAC,OAAD;IACE,WAAW,EACT,sFACA;KACE,aAAa,MAAmB;KAChC,YAAY,MAAmB;KAC/B,cAAc,MAAmB;KAClC,CACF;cARH,CAUG,KAAQ,KAAa,kBAAC,GAAD;KAAM,MAAM;KAAM,OAAM;KAAS,CAAA,EAEvD,kBAAC,QAAD;KAAM,WAAU;eAAhB;MACG,MAAmB,WAClB,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAO,MAAM;OAAY,CAAA;MAG1D,MAAmB,aAClB,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAO,MAAM;OAAY,CAAA;OAEzD,KAAe,OACd,IACC,kBAAC,UAAD;OACE,WAAU;OACV,eAAe,EAAS,GAAY;OACpC,cAAY;OACZ,MAAK;iBAEL,kBAAC,GAAD;QAAM,MAAK;QAAe,WAAU;QAAa,OAAM;QAAS,CAAA;OACzD,CAAA,GAET,kBAAC,GAAD;OAAM,MAAK;OAAmB,WAAU;OAAa,OAAM;OAAS,CAAA;MAEvE,CAAC,KAAa,KAAQ,kBAAC,GAAD;OAAM,MAAM;OAAM,OAAM;OAAS,CAAA;MACnD;OACH;MACF;;EACM,CAAA"}
1
+ {"version":3,"file":"TextField.js","names":[],"sources":["../../../lib/ui/forms/TextField.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { useValue, type UseValueProps } from '../hooks/useValue';\nimport { useInternalStatus } from '../hooks/useInternalStatus';\nimport { FormControl, type FormControlProps } from './FormControl';\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\nimport { useId } from 'react';\n\nexport interface TextFieldProps<Value> extends FormControlProps<Value> {\n description?: string;\n icon?: IconicNames;\n iconType?: IconicTypes;\n errorMessage?: string;\n dataTestId?: string;\n formatter?: UseValueProps<Value>['formatter'];\n hasDropdown?: boolean;\n clear?: string;\n iconFirst?: boolean;\n}\n\nexport const TextField = <Value = string,>(props: TextFieldProps<Value>) => {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n value: initialValue,\n description,\n validationStatus = 'default',\n icon,\n iconType,\n errorMessage,\n disabled = false,\n required = false,\n hideRequiredStar,\n className,\n dataTestId = 'TextField',\n hasDropdown = false,\n clear = '',\n iconFirst = true,\n onChange,\n formatter,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({ initialValue, onChange, formatter });\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const shouldDisplayClearButton =\n !disabled && value !== '' && value !== null && value !== undefined && !!clear;\n\n return (\n <FormControl\n id={id}\n label={label}\n className={className}\n description={description}\n dataName=\"TextField\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={validationStatus}\n errorMessage={errorMessage}\n >\n <div className=\"relative\">\n <input\n {...rest}\n id={id}\n name={name}\n disabled={disabled}\n required={required}\n value={value as any}\n onChange={(e) => setValue(e.target.value as Value, e.nativeEvent)}\n style={\n {\n '--nbIconsStart': Number(!!icon && iconFirst),\n '--nbIconsEnd':\n Number(!!icon && !iconFirst) +\n Number(\n (hasDropdown && !shouldDisplayClearButton) ||\n (shouldDisplayClearButton && internalStatus !== 'error'),\n ) +\n Number(internalStatus === 'error' || internalStatus === 'success'),\n } as React.CSSProperties\n }\n className={clsx(\n 'text-b3 rounded-pill w-full border overflow-hidden px-20 py-12 font-normal outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 ps-[calc(20px+var(--nbIconsStart)*32px)] pe-[calc(20px+var(--nbIconsEnd)*32px)]',\n {\n 'border-middleGrey focus:border-black active:border-black':\n internalStatus === 'default',\n 'bg-white text-black': internalStatus !== 'disabled',\n 'bg-pearl border-middleGrey': internalStatus === 'disabled',\n 'border-red': internalStatus === 'error',\n 'border-green': internalStatus === 'success',\n },\n )}\n aria-label={name}\n />\n\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n {\n 'text-grey': internalStatus === 'disabled',\n 'text-red': internalStatus === 'error',\n 'text-green': internalStatus === 'success',\n },\n )}\n >\n {icon && iconFirst && <Icon name={icon} width=\"24px\" />}\n\n <span className=\"ms-auto flex gap-x-8\">\n {internalStatus === 'error' &&\n (shouldDisplayClearButton ? (\n <button\n className=\"pointer-events-auto cursor-pointer flex outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n onClick={(e) => setValue('' as Value, e.nativeEvent)}\n aria-label={clear}\n type=\"reset\"\n >\n <Icon name=\"CrossDefault\" width=\"24px\" type={iconType} />\n </button>\n ) : (\n <Icon name=\"CrossDefault\" width=\"24px\" type={iconType} />\n ))}\n\n {internalStatus === 'success' && (\n <Icon name=\"CheckDefault\" width=\"24px\" type={iconType} />\n )}\n {(hasDropdown || (shouldDisplayClearButton && internalStatus !== 'error')) &&\n (shouldDisplayClearButton ? (\n <button\n className=\"pointer-events-auto cursor-pointer flex outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n onClick={(e) => setValue('' as Value, e.nativeEvent)}\n aria-label={clear}\n type=\"reset\"\n >\n <Icon name=\"CrossDefault\" className=\"text-black\" width=\"24px\" />\n </button>\n ) : (\n <Icon name=\"ArrowDefaultDown\" className=\"text-black\" width=\"24px\" />\n ))}\n {!iconFirst && icon && <Icon name={icon} width=\"24px\" />}\n </span>\n </div>\n </div>\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;AAmBA,IAAa,KAA8B,MAAiC;CAC1E,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,UACA,OAAO,GACP,gBACA,sBAAmB,WACnB,SACA,aACA,iBACA,cAAW,IACX,cAAW,IACX,qBACA,cACA,gBAAa,aACb,iBAAc,IACd,WAAQ,IACR,eAAY,IACZ,aACA,cACA,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAgB;EAAE;EAAc;EAAU;EAAW,CAAC,EAC5E,IAAiB,EAAkB;EACvC,YAAY;EACZ;EACD,CAAC,EAEI,IACJ,CAAC,KAAY,MAAU,MAAM,KAAU,QAA+B,CAAC,CAAC;AAE1E,QACE,kBAAC,GAAD;EACM;EACG;EACI;EACE;EACb,UAAS;EACG;EACF;EACA;EACQ;EACA;EACJ;YAEd,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACI;IACA;IACH;IACP,WAAW,MAAM,EAAS,EAAE,OAAO,OAAgB,EAAE,YAAY;IACjE,OACE;KACE,kBAAkB,OAAO,CAAC,CAAC,KAAQ,EAAU;KAC7C,gBACE,OAAO,CAAC,CAAC,KAAQ,CAAC,EAAU,GAC5B,OACG,KAAe,CAAC,KACd,KAA4B,MAAmB,QACnD,GACD,OAAO,MAAmB,WAAW,MAAmB,UAAU;KACrE;IAEH,WAAW,EACT,qPACA;KACE,4DACE,MAAmB;KACrB,uBAAuB,MAAmB;KAC1C,8BAA8B,MAAmB;KACjD,cAAc,MAAmB;KACjC,gBAAgB,MAAmB;KACpC,CACF;IACD,cAAY;IACZ,CAAA,EAEF,kBAAC,OAAD;IACE,WAAW,EACT,sFACA;KACE,aAAa,MAAmB;KAChC,YAAY,MAAmB;KAC/B,cAAc,MAAmB;KAClC,CACF;cARH,CAUG,KAAQ,KAAa,kBAAC,GAAD;KAAM,MAAM;KAAM,OAAM;KAAS,CAAA,EAEvD,kBAAC,QAAD;KAAM,WAAU;eAAhB;MACG,MAAmB,YACjB,IACC,kBAAC,UAAD;OACE,WAAU;OACV,UAAU,MAAM,EAAS,IAAa,EAAE,YAAY;OACpD,cAAY;OACZ,MAAK;iBAEL,kBAAC,GAAD;QAAM,MAAK;QAAe,OAAM;QAAO,MAAM;QAAY,CAAA;OAClD,CAAA,GAET,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAO,MAAM;OAAY,CAAA;MAG5D,MAAmB,aAClB,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAO,MAAM;OAAY,CAAA;OAEzD,KAAgB,KAA4B,MAAmB,aAC9D,IACC,kBAAC,UAAD;OACE,WAAU;OACV,UAAU,MAAM,EAAS,IAAa,EAAE,YAAY;OACpD,cAAY;OACZ,MAAK;iBAEL,kBAAC,GAAD;QAAM,MAAK;QAAe,WAAU;QAAa,OAAM;QAAS,CAAA;OACzD,CAAA,GAET,kBAAC,GAAD;OAAM,MAAK;OAAmB,WAAU;OAAa,OAAM;OAAS,CAAA;MAEvE,CAAC,KAAa,KAAQ,kBAAC,GAAD;OAAM,MAAM;OAAM,OAAM;OAAS,CAAA;MACnD;OACH;MACF;;EACM,CAAA"}
@@ -1,9 +1,14 @@
1
1
  import { ComponentPropsWithoutRef, Ref } from 'react';
2
2
  import { Colors } from '../../types/Colors';
3
- export interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {
3
+ import { ValidationStatus } from '../../hooks/useInternalStatus';
4
+ export interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'onChange' | 'value'> {
4
5
  color?: Colors;
5
6
  size?: string;
6
- }
7
- export declare function Checkbox(props: CheckboxProps & {
7
+ value?: string | number | boolean;
8
+ validationStatus?: ValidationStatus;
9
+ errorMessage?: string;
10
+ ['data-testid']?: string;
8
11
  ref?: Ref<HTMLInputElement>;
9
- }): import("react/jsx-runtime").JSX.Element;
12
+ onChange?: (event: Event, value: boolean) => void;
13
+ }
14
+ export declare function Checkbox(props: CheckboxProps): import("react/jsx-runtime").JSX.Element;
@@ -1,30 +1,50 @@
1
1
  import { t as e } from "../../../chunks/clsx.js";
2
2
  import { getBorderColor as t, getTextColor as n } from "../../helpers/colors/colors.js";
3
- import { useId as r } from "react";
4
- import { Icon as i } from "@clubmed/trident-icons";
5
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
3
+ import { FormControlError as r } from "../FormControlError.js";
4
+ import { useInternalStatus as i } from "../../hooks/useInternalStatus.js";
5
+ import { useId as a } from "react";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ import { Icon as c } from "@clubmed/trident-icons";
6
8
  //#region lib/ui/forms/checkboxes/Checkbox.tsx
7
- function s(s) {
8
- let c = r(), { id: l = c, name: u = l, className: d, color: f = "black", size: p = "size-24", tabIndex: m = 0, ref: h, ...g } = s;
9
- return /* @__PURE__ */ o("span", {
10
- className: e("rounded-8 inline-flex shrink-0 items-center justify-center self-start border", t(f), n(f), p, d),
9
+ function l(l) {
10
+ let u = a(), { id: d = u, name: f = d, className: p, color: m = "black", size: h = "size-24", disabled: g = !1, tabIndex: _ = 0, validationStatus: v = "default", errorMessage: y, children: b, ref: x, onChange: S, value: C, "data-testid": w, ...T } = l, E = i({
11
+ isDisabled: g,
12
+ validationStatus: v
13
+ }), D = E === "disabled", O = E === "error" && y, k = e({
14
+ "!border-red !text-red": E === "error",
15
+ "bg-pearl": D
16
+ }), A = /* @__PURE__ */ s("span", {
17
+ className: e("rounded-8 inline-flex shrink-0 items-center justify-center self-start border transition-colors hover:!border-current/60 has-[:focus-visible]:ring-4 has-[:focus-visible]:ring-black has-[:focus-visible]:ring-offset-2", t(m), n(m), h, k, p),
11
18
  "data-name": "Checkbox",
12
- children: [/* @__PURE__ */ a("input", {
13
- ...g,
14
- id: l,
15
- name: u,
19
+ children: [/* @__PURE__ */ o("input", {
20
+ ...T,
21
+ disabled: g,
22
+ id: d,
23
+ name: f,
16
24
  className: "peer sr-only",
17
- ref: h,
18
- tabIndex: m,
19
- type: "checkbox"
20
- }), /* @__PURE__ */ a(i, {
25
+ ref: x,
26
+ tabIndex: _,
27
+ type: "checkbox",
28
+ value: typeof C == "boolean" ? String(C) : C,
29
+ onChange: (e) => {
30
+ S?.(e.nativeEvent, e.target.checked);
31
+ }
32
+ }), /* @__PURE__ */ o(c, {
21
33
  className: "scale-1/2 transition-[transform,opacity] peer-checked:scale-auto opacity-0 peer-checked:opacity-100",
22
34
  name: "CheckDefault",
23
35
  width: "100%"
24
36
  })]
25
37
  });
38
+ return !b && !y ? A : /* @__PURE__ */ s("div", {
39
+ className: e("flex flex-col space-y-2", p),
40
+ "data-testid": w || `checkbox-container-${d}`,
41
+ children: [/* @__PURE__ */ s("label", {
42
+ className: e("relative flex items-center gap-8", { "text-grey": g }),
43
+ children: [A, b]
44
+ }), O && /* @__PURE__ */ o(r, { children: y })]
45
+ });
26
46
  }
27
47
  //#endregion
28
- export { s as Checkbox };
48
+ export { l as Checkbox };
29
49
 
30
50
  //# sourceMappingURL=Checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","names":[],"sources":["../../../../lib/ui/forms/checkboxes/Checkbox.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { useId, type ComponentPropsWithoutRef, type Ref } from 'react';\nimport { Icon } from '@clubmed/trident-icons';\nimport type { Colors } from '../../types/Colors';\nimport { getBorderColor, getTextColor } from '../../helpers/colors/colors';\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\n color?: Colors;\n size?: string;\n}\n\nexport function Checkbox(props: CheckboxProps & { ref?: Ref<HTMLInputElement> }) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n color = 'black',\n size = 'size-24',\n tabIndex = 0,\n ref,\n ...rest\n } = props;\n\n return (\n <span\n className={clsx(\n 'rounded-8 inline-flex shrink-0 items-center justify-center self-start border',\n getBorderColor(color),\n getTextColor(color),\n size,\n className,\n )}\n data-name=\"Checkbox\"\n >\n <input\n {...rest}\n id={id}\n name={name}\n className=\"peer sr-only\"\n ref={ref}\n tabIndex={tabIndex}\n type=\"checkbox\"\n />\n <Icon\n className=\"scale-1/2 transition-[transform,opacity] peer-checked:scale-auto opacity-0 peer-checked:opacity-100\"\n name=\"CheckDefault\"\n width=\"100%\"\n />\n </span>\n );\n}\n"],"mappings":";;;;;;AAWA,SAAgB,EAAS,GAAwD;CAC/E,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,cACA,WAAQ,SACR,UAAO,WACP,cAAW,GACX,QACA,GAAG,MACD;AAEJ,QACE,kBAAC,QAAD;EACE,WAAW,EACT,gFACA,EAAe,EAAM,EACrB,EAAa,EAAM,EACnB,GACA,EACD;EACD,aAAU;YARZ,CAUE,kBAAC,SAAD;GACE,GAAI;GACA;GACE;GACN,WAAU;GACL;GACK;GACV,MAAK;GACL,CAAA,EACF,kBAAC,GAAD;GACE,WAAU;GACV,MAAK;GACL,OAAM;GACN,CAAA,CACG"}
1
+ {"version":3,"file":"Checkbox.js","names":[],"sources":["../../../../lib/ui/forms/checkboxes/Checkbox.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { useId, type ComponentPropsWithoutRef, type Ref } from 'react';\nimport { Icon } from '@clubmed/trident-icons';\nimport type { Colors } from '../../types/Colors';\nimport { getBorderColor, getTextColor } from '../../helpers/colors/colors';\nimport { FormControlError } from '@/ui/forms/FormControlError';\nimport { useInternalStatus, type ValidationStatus } from '@/ui/hooks/useInternalStatus';\n\nexport interface CheckboxProps\n extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'onChange' | 'value'> {\n color?: Colors;\n size?: string;\n value?: string | number | boolean;\n validationStatus?: ValidationStatus;\n errorMessage?: string;\n ['data-testid']?: string;\n ref?: Ref<HTMLInputElement>;\n onChange?: (event: Event, value: boolean) => void;\n}\n\nexport function Checkbox(props: CheckboxProps) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n color = 'black',\n size = 'size-24',\n disabled = false,\n tabIndex = 0,\n validationStatus = 'default',\n errorMessage,\n children,\n ref,\n onChange,\n value,\n 'data-testid': dataTestId,\n ...rest\n } = props;\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n const isDisabled = internalStatus === 'disabled';\n\n const shouldDisplayErrorMessage = internalStatus === 'error' && errorMessage;\n\n // Apply validation styling to checkbox via className\n const checkboxClassName = clsx({\n '!border-red !text-red': internalStatus === 'error',\n 'bg-pearl': isDisabled,\n });\n\n const checkbox = (\n <span\n className={clsx(\n 'rounded-8 inline-flex shrink-0 items-center justify-center self-start border transition-colors hover:!border-current/60 has-[:focus-visible]:ring-4 has-[:focus-visible]:ring-black has-[:focus-visible]:ring-offset-2',\n getBorderColor(color),\n getTextColor(color),\n size,\n checkboxClassName,\n className,\n )}\n data-name=\"Checkbox\"\n >\n <input\n {...rest}\n disabled={disabled}\n id={id}\n name={name}\n className=\"peer sr-only\"\n ref={ref}\n tabIndex={tabIndex}\n type=\"checkbox\"\n value={typeof value === 'boolean' ? String(value) : value}\n onChange={(e) => {\n onChange?.(e.nativeEvent, e.target.checked);\n }}\n />\n <Icon\n className=\"scale-1/2 transition-[transform,opacity] peer-checked:scale-auto opacity-0 peer-checked:opacity-100\"\n name=\"CheckDefault\"\n width=\"100%\"\n />\n </span>\n );\n\n if (!children && !errorMessage) {\n return checkbox;\n }\n\n return (\n <div\n className={clsx('flex flex-col space-y-2', className)}\n data-testid={dataTestId || `checkbox-container-${id}`}\n >\n <label\n className={clsx('relative flex items-center gap-8', {\n 'text-grey': disabled,\n })}\n >\n {checkbox}\n {children}\n </label>\n {shouldDisplayErrorMessage && <FormControlError>{errorMessage}</FormControlError>}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAoBA,SAAgB,EAAS,GAAsB;CAC7C,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,cACA,WAAQ,SACR,UAAO,WACP,cAAW,IACX,cAAW,GACX,sBAAmB,WACnB,iBACA,aACA,QACA,aACA,UACA,eAAe,GACf,GAAG,MACD,GAEE,IAAiB,EAAkB;EACvC,YAAY;EACZ;EACD,CAAC,EACI,IAAa,MAAmB,YAEhC,IAA4B,MAAmB,WAAW,GAG1D,IAAoB,EAAK;EAC7B,yBAAyB,MAAmB;EAC5C,YAAY;EACb,CAAC,EAEI,IACJ,kBAAC,QAAD;EACE,WAAW,EACT,0NACA,EAAe,EAAM,EACrB,EAAa,EAAM,EACnB,GACA,GACA,EACD;EACD,aAAU;YATZ,CAWE,kBAAC,SAAD;GACE,GAAI;GACM;GACN;GACE;GACN,WAAU;GACL;GACK;GACV,MAAK;GACL,OAAO,OAAO,KAAU,YAAY,OAAO,EAAM,GAAG;GACpD,WAAW,MAAM;AACf,QAAW,EAAE,aAAa,EAAE,OAAO,QAAQ;;GAE7C,CAAA,EACF,kBAAC,GAAD;GACE,WAAU;GACV,MAAK;GACL,OAAM;GACN,CAAA,CACG;;AAOT,QAJI,CAAC,KAAY,CAAC,IACT,IAIP,kBAAC,OAAD;EACE,WAAW,EAAK,2BAA2B,EAAU;EACrD,eAAa,KAAc,sBAAsB;YAFnD,CAIE,kBAAC,SAAD;GACE,WAAW,EAAK,oCAAoC,EAClD,aAAa,GACd,CAAC;aAHJ,CAKG,GACA,EACK;MACP,KAA6B,kBAAC,GAAD,EAAA,UAAmB,GAAgC,CAAA,CAC7E"}
@@ -1,5 +1,10 @@
1
1
  import { HTMLAttributes } from 'react';
2
2
  import { FormControlProps } from '../FormControl';
3
3
  export interface CheckboxesProps<Value = string> extends Pick<FormControlProps<Value[]>, 'id' | 'name' | 'value' | 'onChange' | 'disabled' | 'readOnly' | 'tabIndex' | 'description' | 'validationStatus' | 'errorMessage'>, Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
4
+ /**
5
+ * Should the tabIndex be overridden for each checkbox?
6
+ * @default true
7
+ */
8
+ overrideTabIndex?: boolean;
4
9
  }
5
10
  export declare function Checkboxes<Value = string>(props: CheckboxesProps<Value>): import("react/jsx-runtime").JSX.Element;
@@ -4,8 +4,7 @@ import { Children as n, cloneElement as r, isValidElement as i, useId as a } fro
4
4
  import { jsx as o } from "react/jsx-runtime";
5
5
  //#region lib/ui/forms/checkboxes/Checkboxes.tsx
6
6
  function s(s) {
7
- let c = a(), { id: l = c, name: u = l, children: d, value: f, defaultValue: p, onChange: m, disabled: h, readOnly: g, tabIndex: _ = 0, ...v } = s, { value: y, setValue: b } = t({
8
- name: u,
7
+ let c = a(), { id: l = c, name: u = l, children: d, value: f, defaultValue: p, onChange: m, disabled: h, readOnly: g, tabIndex: _ = 0, overrideTabIndex: v = !0, ...y } = s, { value: b, setValue: x } = t({
9
8
  initialValue: f,
10
9
  formatter(e) {
11
10
  return e === void 0 ? e : [].concat(e);
@@ -14,8 +13,8 @@ function s(s) {
14
13
  onChange: m
15
14
  });
16
15
  return /* @__PURE__ */ o("div", {
17
- ...v,
18
- className: v.className,
16
+ ...y,
17
+ className: y.className,
19
18
  role: "listbox",
20
19
  children: n.map(d, (t, n) => {
21
20
  if (i(t)) {
@@ -26,11 +25,12 @@ function s(s) {
26
25
  id: `${l}-${n}`,
27
26
  disabled: h,
28
27
  readOnly: g,
29
- tabIndex: _ + n + 1,
28
+ tabIndex: v ? _ + n + 1 : _,
30
29
  className: e(t.props.className || "mt-8 first:mt-0"),
31
- checked: y.includes(i),
32
- onChange(e) {
33
- e.target.checked ? b(y.concat(i)) : b(y.filter((e) => e !== i));
30
+ checked: b.includes(i),
31
+ onChange(...e) {
32
+ let t = e[0] instanceof Event ? e[0] : e[0]?.nativeEvent ?? new Event("change");
33
+ (typeof e[2] == "boolean" ? e[2] : typeof e[1] == "boolean" ? e[1] : e[0]?.target?.checked) ? x(b.concat(i), t) : x(b.filter((e) => e !== i), t);
34
34
  }
35
35
  });
36
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Checkboxes.js","names":[],"sources":["../../../../lib/ui/forms/checkboxes/Checkboxes.tsx"],"sourcesContent":["import { Children, cloneElement, type HTMLAttributes, isValidElement, useId } from 'react';\nimport type { FormControlProps } from '../FormControl';\nimport { useValue } from '../../hooks/useValue';\nimport type { CheckboxProps } from './Checkbox';\nimport clsx from 'clsx';\n\nexport interface CheckboxesProps<Value = string>\n extends Pick<\n FormControlProps<Value[]>,\n | 'id'\n | 'name'\n | 'value'\n | 'onChange'\n | 'disabled'\n | 'readOnly'\n | 'tabIndex'\n | 'description'\n | 'validationStatus'\n | 'errorMessage'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {}\n\nexport function Checkboxes<Value = string>(props: CheckboxesProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value[]>({\n name,\n initialValue,\n formatter(value) {\n return value !== undefined ? ([].concat(value as never) as Value[]) : value;\n },\n defaultValue: (defaultValue as Value[]) || ([] as Value[]),\n onChange,\n });\n\n return (\n <div {...rest} className={rest.className} role=\"listbox\">\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n const propValue: Value = (child.props as CheckboxProps).value as Value;\n\n return cloneElement(child, {\n ...(child.props as any),\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: tabIndex + index + 1,\n className: clsx((child.props as any).className || 'mt-8 first:mt-0'),\n checked: value.includes(propValue),\n onChange(e: React.ChangeEvent<HTMLInputElement>) {\n if (e.target.checked) {\n setValue(value.concat(propValue));\n } else {\n setValue(value.filter((v) => v !== propValue));\n }\n },\n } as CheckboxProps);\n }\n\n return child;\n })}\n </div>\n );\n}\n"],"mappings":";;;;;AAsBA,SAAgB,EAA2B,GAA+B;CACxE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,aACA,OAAO,GACP,iBACA,aACA,aACA,aACA,cAAW,GACX,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAkB;EAC5C;EACA;EACA,UAAU,GAAO;AACf,UAAO,MAAU,KAAA,IAAqD,IAAxC,EAAE,CAAC,OAAO,EAAe;;EAEzD,cAAe,KAA6B,EAAE;EAC9C;EACD,CAAC;AAEF,QACE,kBAAC,OAAD;EAAK,GAAI;EAAM,WAAW,EAAK;EAAW,MAAK;YAC5C,EAAS,IAAI,IAAW,GAAO,MAAU;AACxC,OAAI,EAAe,EAAM,EAAE;IACzB,IAAM,IAAoB,EAAM,MAAwB;AAExD,WAAO,EAAa,GAAO;KACzB,GAAI,EAAM;KACV;KACA,IAAI,GAAG,EAAG,GAAG;KACb;KACA;KACA,UAAU,IAAW,IAAQ;KAC7B,WAAW,EAAM,EAAM,MAAc,aAAa,kBAAkB;KACpE,SAAS,EAAM,SAAS,EAAU;KAClC,SAAS,GAAwC;AAC/C,MAAI,EAAE,OAAO,UACX,EAAS,EAAM,OAAO,EAAU,CAAC,GAEjC,EAAS,EAAM,QAAQ,MAAM,MAAM,EAAU,CAAC;;KAGnD,CAAkB;;AAGrB,UAAO;IACP;EACE,CAAA"}
1
+ {"version":3,"file":"Checkboxes.js","names":[],"sources":["../../../../lib/ui/forms/checkboxes/Checkboxes.tsx"],"sourcesContent":["import { Children, cloneElement, type HTMLAttributes, isValidElement, useId } from 'react';\nimport type { FormControlProps } from '../FormControl';\nimport { useValue } from '../../hooks/useValue';\nimport type { CheckboxProps } from './Checkbox';\nimport clsx from 'clsx';\n\nexport interface CheckboxesProps<Value = string>\n extends Pick<\n FormControlProps<Value[]>,\n | 'id'\n | 'name'\n | 'value'\n | 'onChange'\n | 'disabled'\n | 'readOnly'\n | 'tabIndex'\n | 'description'\n | 'validationStatus'\n | 'errorMessage'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /**\n * Should the tabIndex be overridden for each checkbox?\n * @default true\n */\n overrideTabIndex?: boolean;\n}\n\nexport function Checkboxes<Value = string>(props: CheckboxesProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n overrideTabIndex = true,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value[]>({\n initialValue,\n formatter(value) {\n return value !== undefined ? ([].concat(value as never) as Value[]) : value;\n },\n defaultValue: (defaultValue as Value[]) || ([] as Value[]),\n onChange,\n });\n\n return (\n <div {...rest} className={rest.className} role=\"listbox\">\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n const propValue: Value = (child.props as CheckboxProps).value as Value;\n\n return cloneElement(child, {\n ...(child.props as any),\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: overrideTabIndex ? tabIndex + index + 1 : tabIndex,\n className: clsx((child.props as any).className || 'mt-8 first:mt-0'),\n checked: value.includes(propValue),\n onChange(...args: unknown[]) {\n const event =\n args[0] instanceof Event\n ? args[0]\n : (args[0] as React.ChangeEvent<HTMLInputElement>)?.nativeEvent ??\n new Event('change');\n const checked =\n typeof args[2] === 'boolean'\n ? args[2]\n : typeof args[1] === 'boolean'\n ? args[1]\n : (args[0] as React.ChangeEvent<HTMLInputElement>)?.target?.checked;\n\n if (checked) {\n setValue(value.concat(propValue), event);\n } else {\n setValue(\n value.filter((v) => v !== propValue),\n event,\n );\n }\n },\n } as CheckboxProps);\n }\n\n return child;\n })}\n </div>\n );\n}\n"],"mappings":";;;;;AA4BA,SAAgB,EAA2B,GAA+B;CACxE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,aACA,OAAO,GACP,iBACA,aACA,aACA,aACA,cAAW,GACX,sBAAmB,IACnB,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAkB;EAC5C;EACA,UAAU,GAAO;AACf,UAAO,MAAU,KAAA,IAAqD,IAAxC,EAAE,CAAC,OAAO,EAAe;;EAEzD,cAAe,KAA6B,EAAE;EAC9C;EACD,CAAC;AAEF,QACE,kBAAC,OAAD;EAAK,GAAI;EAAM,WAAW,EAAK;EAAW,MAAK;YAC5C,EAAS,IAAI,IAAW,GAAO,MAAU;AACxC,OAAI,EAAe,EAAM,EAAE;IACzB,IAAM,IAAoB,EAAM,MAAwB;AAExD,WAAO,EAAa,GAAO;KACzB,GAAI,EAAM;KACV;KACA,IAAI,GAAG,EAAG,GAAG;KACb;KACA;KACA,UAAU,IAAmB,IAAW,IAAQ,IAAI;KACpD,WAAW,EAAM,EAAM,MAAc,aAAa,kBAAkB;KACpE,SAAS,EAAM,SAAS,EAAU;KAClC,SAAS,GAAG,GAAiB;MAC3B,IAAM,IACJ,EAAK,cAAc,QACf,EAAK,KACJ,EAAK,IAA4C,eAClD,IAAI,MAAM,SAAS;AAQzB,OANE,OAAO,EAAK,MAAO,YACf,EAAK,KACL,OAAO,EAAK,MAAO,YACjB,EAAK,KACJ,EAAK,IAA4C,QAAQ,WAGhE,EAAS,EAAM,OAAO,EAAU,EAAE,EAAM,GAExC,EACE,EAAM,QAAQ,MAAM,MAAM,EAAU,EACpC,EACD;;KAGN,CAAkB;;AAGrB,UAAO;IACP;EACE,CAAA"}
@@ -1,3 +1,2 @@
1
1
  export * from './Checkbox.js';
2
2
  export * from './Checkboxes.js';
3
- export * from './FormCheckbox.js';
@@ -1,4 +1,3 @@
1
1
  import { Checkbox as e } from "./Checkbox.js";
2
2
  import { Checkboxes as t } from "./Checkboxes.js";
3
- import { FormCheckbox as n } from "./FormCheckbox.js";
4
- export { e as Checkbox, t as Checkboxes, n as FormCheckbox };
3
+ export { e as Checkbox, t as Checkboxes };
@@ -1,18 +1,17 @@
1
1
  import { t as e } from "../../../chunks/clsx.js";
2
- import { useValue as t } from "../../hooks/useValue.js";
3
- import { useInternalStatus as n } from "../../hooks/useInternalStatus.js";
4
- import { FormControl as r } from "../FormControl.js";
2
+ import { useInternalStatus as t } from "../../hooks/useInternalStatus.js";
3
+ import { FormControl as n } from "../FormControl.js";
4
+ import { useValue as r } from "../../hooks/useValue.js";
5
5
  import { ValidationMessage as i } from "./ValidationMessage.js";
6
6
  import { useEffect as a, useId as o, useState as s } from "react";
7
- import { Icon as c } from "@clubmed/trident-icons";
8
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
+ import { Icon as u } from "@clubmed/trident-icons";
9
9
  //#region lib/ui/forms/password/Password.tsx
10
10
  function d(d) {
11
- let f = o(), { id: p = f, name: m = p, label: h, value: g, disabled: _ = !1, required: v = !1, hideRequiredStar: y, validationStatus: b = "default", errorMessage: x, validationMessages: S = [], withoutFieldValidation: C = !1, className: w, onChange: T, dataTestId: E = "Password", ...D } = d, O = n({
11
+ let f = o(), { id: p = f, name: m = p, label: h, value: g, disabled: _ = !1, required: v = !1, hideRequiredStar: y, validationStatus: b = "default", errorMessage: x, validationMessages: S = [], withoutFieldValidation: C = !1, className: w, onChange: T, dataTestId: E = "Password", ...D } = d, O = t({
12
12
  isDisabled: _,
13
13
  validationStatus: b
14
- }), { value: k, setValue: A } = t({
15
- name: m,
14
+ }), { value: k, setValue: A } = r({
16
15
  initialValue: g,
17
16
  onChange: T
18
17
  }), [j, M] = s("password");
@@ -20,7 +19,7 @@ function d(d) {
20
19
  M(_ ? "password" : j);
21
20
  }, [j, _]);
22
21
  let N = () => M(j === "password" ? "text" : "password");
23
- return /* @__PURE__ */ u(r, {
22
+ return /* @__PURE__ */ l(n, {
24
23
  className: w,
25
24
  id: p,
26
25
  label: h,
@@ -31,9 +30,9 @@ function d(d) {
31
30
  hideRequiredStar: y,
32
31
  validationStatus: C ? "default" : b,
33
32
  errorMessage: x,
34
- children: [/* @__PURE__ */ u("div", {
33
+ children: [/* @__PURE__ */ l("div", {
35
34
  className: "relative",
36
- children: [/* @__PURE__ */ l("input", {
35
+ children: [/* @__PURE__ */ c("input", {
37
36
  ...D,
38
37
  id: p,
39
38
  name: m,
@@ -41,8 +40,8 @@ function d(d) {
41
40
  value: k,
42
41
  disabled: _,
43
42
  required: v,
44
- onChange: (e) => A(e.target.value),
45
- className: e("text-b3 rounded-pill w-full border overflow-hidden ps-20 py-[11px] font-normal outline-none", {
43
+ onChange: (e) => A(e.target.value, e.nativeEvent),
44
+ className: e("text-b3 rounded-pill w-full border overflow-hidden ps-20 py-[11px] font-normal outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", {
46
45
  "border-middleGrey focus:border-black active:border-black pe-[52px]": (C || b === "default") && O !== "disabled",
47
46
  "bg-white text-black": O !== "disabled",
48
47
  "bg-pearl border-middleGrey": O === "disabled",
@@ -51,26 +50,26 @@ function d(d) {
51
50
  "border-green": !C && b === "success"
52
51
  }),
53
52
  "aria-label": m
54
- }), /* @__PURE__ */ l("div", {
53
+ }), /* @__PURE__ */ c("div", {
55
54
  className: e("pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12"),
56
- children: /* @__PURE__ */ u("span", {
55
+ children: /* @__PURE__ */ l("span", {
57
56
  className: "ms-auto flex gap-x-8",
58
57
  children: [
59
- !C && b === "error" && /* @__PURE__ */ l(c, {
58
+ !C && b === "error" && /* @__PURE__ */ c(u, {
60
59
  name: "CrossDefault",
61
60
  color: "red",
62
61
  width: "24px"
63
62
  }),
64
- !C && b === "success" && /* @__PURE__ */ l(c, {
63
+ !C && b === "success" && /* @__PURE__ */ c(u, {
65
64
  name: "CheckDefault",
66
65
  color: "green",
67
66
  width: "24px"
68
67
  }),
69
- !_ && /* @__PURE__ */ l("button", {
68
+ !_ && /* @__PURE__ */ c("button", {
70
69
  type: "button",
71
- className: "pointer-events-auto size-24 inline-flex",
70
+ className: "pointer-events-auto size-24 inline-flex outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2",
72
71
  onClick: N,
73
- children: /* @__PURE__ */ l(c, {
72
+ children: /* @__PURE__ */ c(u, {
74
73
  name: j === "password" ? "Invisible" : "Visible",
75
74
  width: "24px",
76
75
  type: "svg"
@@ -79,9 +78,9 @@ function d(d) {
79
78
  ]
80
79
  })
81
80
  })]
82
- }), S.length > 0 && /* @__PURE__ */ l("div", {
81
+ }), S.length > 0 && /* @__PURE__ */ c("div", {
83
82
  className: "flex flex-col gap-[10px] mt-8",
84
- children: S.map(({ label: e, status: t }, n) => /* @__PURE__ */ l(i, {
83
+ children: S.map(({ label: e, status: t }, n) => /* @__PURE__ */ c(i, {
85
84
  label: e,
86
85
  status: t
87
86
  }, n))
@@ -1 +1 @@
1
- {"version":3,"file":"Password.js","names":[],"sources":["../../../../lib/ui/forms/password/Password.tsx"],"sourcesContent":["import { useInternalStatus } from '../../hooks/useInternalStatus';\nimport clsx from 'clsx';\n\nimport { type HTMLInputTypeAttribute, useEffect, useId, useState } from 'react';\n\nimport { useValue } from '../../hooks/useValue';\nimport { FormControl, type FormControlProps } from '../FormControl';\nimport { Icon } from '@clubmed/trident-icons';\nimport { ValidationMessage } from './ValidationMessage';\n\nexport interface PasswordProps<Value> extends FormControlProps<Value> {\n validationMessages?: ValidationMessage[];\n withoutFieldValidation?: boolean;\n}\n\nexport function Password<Value = string>(props: PasswordProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n value: initialValue,\n disabled = false,\n required = false,\n hideRequiredStar,\n validationStatus = 'default',\n errorMessage,\n validationMessages = [],\n withoutFieldValidation = false,\n className,\n onChange,\n dataTestId = 'Password',\n ...rest\n } = props;\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const { value, setValue } = useValue<Value>({\n name,\n initialValue,\n onChange,\n });\n const [type, setType] = useState<HTMLInputTypeAttribute>('password');\n\n useEffect(() => {\n if (disabled) {\n setType('password');\n } else {\n setType(type);\n }\n }, [type, disabled]);\n\n const toggleType = () => setType(type === 'password' ? 'text' : 'password');\n\n return (\n <FormControl\n className={className}\n id={id}\n label={label}\n dataName=\"Password\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={withoutFieldValidation ? 'default' : validationStatus}\n errorMessage={errorMessage}\n >\n <div className=\"relative\">\n <input\n {...rest}\n id={id}\n name={name}\n type={type}\n value={value as any}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue(e.target.value as Value)}\n className={clsx(\n 'text-b3 rounded-pill w-full border overflow-hidden ps-20 py-[11px] font-normal outline-none',\n {\n 'border-middleGrey focus:border-black active:border-black pe-[52px]':\n (withoutFieldValidation || validationStatus === 'default') &&\n internalStatus !== 'disabled',\n 'bg-white text-black': internalStatus !== 'disabled',\n 'bg-pearl border-middleGrey': internalStatus === 'disabled',\n 'pe-[84px]':\n !withoutFieldValidation &&\n (validationStatus === 'error' || validationStatus === 'success'),\n 'border-red': !withoutFieldValidation && validationStatus === 'error',\n 'border-green': !withoutFieldValidation && validationStatus === 'success',\n },\n )}\n aria-label={name}\n />\n\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n )}\n >\n <span className=\"ms-auto flex gap-x-8\">\n {!withoutFieldValidation && validationStatus === 'error' && (\n <Icon name=\"CrossDefault\" color=\"red\" width=\"24px\" />\n )}\n\n {!withoutFieldValidation && validationStatus === 'success' && (\n <Icon name=\"CheckDefault\" color=\"green\" width=\"24px\" />\n )}\n\n {!disabled && (\n <button\n type=\"button\"\n className=\"pointer-events-auto size-24 inline-flex\"\n onClick={toggleType}\n >\n <Icon\n name={type === 'password' ? 'Invisible' : 'Visible'}\n width=\"24px\"\n type=\"svg\"\n />\n </button>\n )}\n </span>\n </div>\n </div>\n\n {validationMessages.length > 0 && (\n <div className=\"flex flex-col gap-[10px] mt-8\">\n {validationMessages.map(({ label, status }, index) => (\n <ValidationMessage label={label} status={status} key={index} />\n ))}\n </div>\n )}\n </FormControl>\n );\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,EAAyB,GAA6B;CACpE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,UACA,OAAO,GACP,cAAW,IACX,cAAW,IACX,qBACA,sBAAmB,WACnB,iBACA,wBAAqB,EAAE,EACvB,4BAAyB,IACzB,cACA,aACA,gBAAa,YACb,GAAG,MACD,GAEE,IAAiB,EAAkB;EACvC,YAAY;EACZ;EACD,CAAC,EAEI,EAAE,UAAO,gBAAa,EAAgB;EAC1C;EACA;EACA;EACD,CAAC,EACI,CAAC,GAAM,KAAW,EAAiC,WAAW;AAEpE,SAAgB;AACd,EACE,EADE,IACM,aAEA,EAAK;IAEd,CAAC,GAAM,EAAS,CAAC;CAEpB,IAAM,UAAmB,EAAQ,MAAS,aAAa,SAAS,WAAW;AAE3E,QACE,kBAAC,GAAD;EACa;EACP;EACG;EACP,UAAS;EACG;EACF;EACA;EACQ;EAClB,kBAAkB,IAAyB,YAAY;EACzC;YAVhB,CAYE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACA;IACC;IACG;IACA;IACV,WAAW,MAAM,EAAS,EAAE,OAAO,MAAe;IAClD,WAAW,EACT,+FACA;KACE,uEACG,KAA0B,MAAqB,cAChD,MAAmB;KACrB,uBAAuB,MAAmB;KAC1C,8BAA8B,MAAmB;KACjD,aACE,CAAC,MACA,MAAqB,WAAW,MAAqB;KACxD,cAAc,CAAC,KAA0B,MAAqB;KAC9D,gBAAgB,CAAC,KAA0B,MAAqB;KACjE,CACF;IACD,cAAY;IACZ,CAAA,EAEF,kBAAC,OAAD;IACE,WAAW,EACT,qFACD;cAED,kBAAC,QAAD;KAAM,WAAU;eAAhB;MACG,CAAC,KAA0B,MAAqB,WAC/C,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAM,OAAM;OAAS,CAAA;MAGtD,CAAC,KAA0B,MAAqB,aAC/C,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAQ,OAAM;OAAS,CAAA;MAGxD,CAAC,KACA,kBAAC,UAAD;OACE,MAAK;OACL,WAAU;OACV,SAAS;iBAET,kBAAC,GAAD;QACE,MAAM,MAAS,aAAa,cAAc;QAC1C,OAAM;QACN,MAAK;QACL,CAAA;OACK,CAAA;MAEN;;IACH,CAAA,CACF;MAEL,EAAmB,SAAS,KAC3B,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAmB,KAAK,EAAE,UAAO,aAAU,MAC1C,kBAAC,GAAD;IAA0B;IAAe;IAAsB,EAAT,EAAS,CAC/D;GACE,CAAA,CAEI"}
1
+ {"version":3,"file":"Password.js","names":[],"sources":["../../../../lib/ui/forms/password/Password.tsx"],"sourcesContent":["import { useInternalStatus } from '../../hooks/useInternalStatus';\nimport clsx from 'clsx';\n\nimport { type HTMLInputTypeAttribute, useEffect, useId, useState } from 'react';\n\nimport { useValue } from '../../hooks/useValue';\nimport { FormControl, type FormControlProps } from '../FormControl';\nimport { Icon } from '@clubmed/trident-icons';\nimport { ValidationMessage } from './ValidationMessage';\n\nexport interface PasswordProps<Value> extends FormControlProps<Value> {\n validationMessages?: ValidationMessage[];\n withoutFieldValidation?: boolean;\n}\n\nexport function Password<Value = string>(props: PasswordProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n value: initialValue,\n disabled = false,\n required = false,\n hideRequiredStar,\n validationStatus = 'default',\n errorMessage,\n validationMessages = [],\n withoutFieldValidation = false,\n className,\n onChange,\n dataTestId = 'Password',\n ...rest\n } = props;\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const { value, setValue } = useValue<Value>({\n initialValue,\n onChange,\n });\n const [type, setType] = useState<HTMLInputTypeAttribute>('password');\n\n useEffect(() => {\n if (disabled) {\n setType('password');\n } else {\n setType(type);\n }\n }, [type, disabled]);\n\n const toggleType = () => setType(type === 'password' ? 'text' : 'password');\n\n return (\n <FormControl\n className={className}\n id={id}\n label={label}\n dataName=\"Password\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={withoutFieldValidation ? 'default' : validationStatus}\n errorMessage={errorMessage}\n >\n <div className=\"relative\">\n <input\n {...rest}\n id={id}\n name={name}\n type={type}\n value={value as any}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue(e.target.value as Value, e.nativeEvent)}\n className={clsx(\n 'text-b3 rounded-pill w-full border overflow-hidden ps-20 py-[11px] font-normal outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n {\n 'border-middleGrey focus:border-black active:border-black pe-[52px]':\n (withoutFieldValidation || validationStatus === 'default') &&\n internalStatus !== 'disabled',\n 'bg-white text-black': internalStatus !== 'disabled',\n 'bg-pearl border-middleGrey': internalStatus === 'disabled',\n 'pe-[84px]':\n !withoutFieldValidation &&\n (validationStatus === 'error' || validationStatus === 'success'),\n 'border-red': !withoutFieldValidation && validationStatus === 'error',\n 'border-green': !withoutFieldValidation && validationStatus === 'success',\n },\n )}\n aria-label={name}\n />\n\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n )}\n >\n <span className=\"ms-auto flex gap-x-8\">\n {!withoutFieldValidation && validationStatus === 'error' && (\n <Icon name=\"CrossDefault\" color=\"red\" width=\"24px\" />\n )}\n\n {!withoutFieldValidation && validationStatus === 'success' && (\n <Icon name=\"CheckDefault\" color=\"green\" width=\"24px\" />\n )}\n\n {!disabled && (\n <button\n type=\"button\"\n className=\"pointer-events-auto size-24 inline-flex outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n onClick={toggleType}\n >\n <Icon\n name={type === 'password' ? 'Invisible' : 'Visible'}\n width=\"24px\"\n type=\"svg\"\n />\n </button>\n )}\n </span>\n </div>\n </div>\n\n {validationMessages.length > 0 && (\n <div className=\"flex flex-col gap-[10px] mt-8\">\n {validationMessages.map(({ label, status }, index) => (\n <ValidationMessage label={label} status={status} key={index} />\n ))}\n </div>\n )}\n </FormControl>\n );\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,EAAyB,GAA6B;CACpE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,UACA,OAAO,GACP,cAAW,IACX,cAAW,IACX,qBACA,sBAAmB,WACnB,iBACA,wBAAqB,EAAE,EACvB,4BAAyB,IACzB,cACA,aACA,gBAAa,YACb,GAAG,MACD,GAEE,IAAiB,EAAkB;EACvC,YAAY;EACZ;EACD,CAAC,EAEI,EAAE,UAAO,gBAAa,EAAgB;EAC1C;EACA;EACD,CAAC,EACI,CAAC,GAAM,KAAW,EAAiC,WAAW;AAEpE,SAAgB;AACd,EACE,EADE,IACM,aAEA,EAAK;IAEd,CAAC,GAAM,EAAS,CAAC;CAEpB,IAAM,UAAmB,EAAQ,MAAS,aAAa,SAAS,WAAW;AAE3E,QACE,kBAAC,GAAD;EACa;EACP;EACG;EACP,UAAS;EACG;EACF;EACA;EACQ;EAClB,kBAAkB,IAAyB,YAAY;EACzC;YAVhB,CAYE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACA;IACC;IACG;IACA;IACV,WAAW,MAAM,EAAS,EAAE,OAAO,OAAgB,EAAE,YAAY;IACjE,WAAW,EACT,yKACA;KACE,uEACG,KAA0B,MAAqB,cAChD,MAAmB;KACrB,uBAAuB,MAAmB;KAC1C,8BAA8B,MAAmB;KACjD,aACE,CAAC,MACA,MAAqB,WAAW,MAAqB;KACxD,cAAc,CAAC,KAA0B,MAAqB;KAC9D,gBAAgB,CAAC,KAA0B,MAAqB;KACjE,CACF;IACD,cAAY;IACZ,CAAA,EAEF,kBAAC,OAAD;IACE,WAAW,EACT,qFACD;cAED,kBAAC,QAAD;KAAM,WAAU;eAAhB;MACG,CAAC,KAA0B,MAAqB,WAC/C,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAM,OAAM;OAAS,CAAA;MAGtD,CAAC,KAA0B,MAAqB,aAC/C,kBAAC,GAAD;OAAM,MAAK;OAAe,OAAM;OAAQ,OAAM;OAAS,CAAA;MAGxD,CAAC,KACA,kBAAC,UAAD;OACE,MAAK;OACL,WAAU;OACV,SAAS;iBAET,kBAAC,GAAD;QACE,MAAM,MAAS,aAAa,cAAc;QAC1C,OAAM;QACN,MAAK;QACL,CAAA;OACK,CAAA;MAEN;;IACH,CAAA,CACF;MAEL,EAAmB,SAAS,KAC3B,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAmB,KAAK,EAAE,UAAO,aAAU,MAC1C,kBAAC,GAAD;IAA0B;IAAe;IAAsB,EAAT,EAAS,CAC/D;GACE,CAAA,CAEI"}
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "../../../chunks/clsx.js";
2
- import { Icon as t } from "@clubmed/trident-icons";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { Icon as r } from "@clubmed/trident-icons";
4
4
  //#region lib/ui/forms/password/ValidationMessage.tsx
5
5
  var i = {
6
6
  default: {
@@ -18,13 +18,13 @@ var i = {
18
18
  };
19
19
  function a({ label: a, status: o }) {
20
20
  let { iconName: s, iconColor: c } = i[o];
21
- return /* @__PURE__ */ r("div", {
21
+ return /* @__PURE__ */ n("div", {
22
22
  className: "flex gap-[6px] px-20 items-center",
23
- children: [/* @__PURE__ */ n(t, {
23
+ children: [/* @__PURE__ */ t(r, {
24
24
  name: s,
25
25
  width: "30px",
26
26
  color: c
27
- }), /* @__PURE__ */ n("span", {
27
+ }), /* @__PURE__ */ t("span", {
28
28
  className: e("text-b3", `text-${c}`),
29
29
  children: a
30
30
  })]
@@ -1,5 +1,5 @@
1
1
  import { InputHTMLAttributes } from 'react';
2
- export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
2
+ export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {
3
3
  /**
4
4
  * The data-testid to apply to the button.
5
5
  * This is used for testing purposes.
@@ -10,6 +10,7 @@ export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
10
10
  * The diameter of the radio button.
11
11
  * */
12
12
  size?: number;
13
+ onChange?: (event: Event, value: string) => void;
13
14
  }
14
15
  export declare function Radio(props: RadioProps): import("react/jsx-runtime").JSX.Element;
15
16
  export declare namespace Radio {
@@ -3,20 +3,23 @@ import { useId as t } from "react";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  //#region lib/ui/forms/radios/Radio.tsx
5
5
  function i(i) {
6
- let a = t(), { id: o = a, name: s = o, className: c, dataTestId: l, disabled: u, size: d = 24, tabIndex: f = 0, children: p, ...m } = i;
6
+ let a = t(), { id: o = a, name: s = o, className: c, dataTestId: l, disabled: u, size: d = 24, tabIndex: f = 0, children: p, onChange: m, ...h } = i;
7
7
  return /* @__PURE__ */ r("label", {
8
8
  className: e(c, "relative flex items-center gap-8", { "text-grey": u }),
9
9
  children: [/* @__PURE__ */ r("span", {
10
10
  className: "relative",
11
11
  children: [/* @__PURE__ */ n("input", {
12
12
  "data-testid": l,
13
- ...m,
13
+ ...h,
14
14
  id: o,
15
15
  name: s,
16
16
  type: "radio",
17
17
  tabIndex: f,
18
18
  "data-name": "Radio",
19
- disabled: u
19
+ disabled: u,
20
+ onChange: (e) => {
21
+ m?.(e.nativeEvent, e.target.value);
22
+ }
20
23
  }), /* @__PURE__ */ n("span", {
21
24
  style: {
22
25
  height: d,
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","names":[],"sources":["../../../../lib/ui/forms/radios/Radio.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { type InputHTMLAttributes, useId } from 'react';\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * The data-testid to apply to the button.\n * This is used for testing purposes.\n * @deprecated use [\"data-testid\"] instead.\n */\n dataTestId?: string;\n /**\n * The diameter of the radio button.\n * */\n size?: number;\n}\n\nexport function Radio(props: RadioProps) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n dataTestId,\n disabled,\n size = 24,\n tabIndex = 0,\n children,\n ...rest\n } = props;\n\n return (\n <label\n className={clsx(className, 'relative flex items-center gap-8', {\n 'text-grey': disabled,\n })}\n >\n <span className=\"relative\">\n <input\n data-testid={dataTestId}\n {...rest}\n id={id}\n name={name}\n type=\"radio\"\n tabIndex={tabIndex}\n data-name=\"Radio\"\n disabled={disabled}\n />\n\n <span style={{ height: size, width: size }} className={clsx({ 'bg-pearl': disabled })}>\n <svg viewBox=\"0 0 16 16\" width={(size * 2) / 3} className=\"overflow-visible\">\n <circle cx=\"8\" cy=\"8\" r=\"8px\" style={{ fill: 'var(--color-saffron)' }} />\n <circle cx=\"8\" cy=\"8\" r=\"4px\" style={{ fill: 'var(--color-black)' }} />\n </svg>\n </span>\n </span>\n\n {children}\n </label>\n );\n}\n\nRadio.displayName = 'Radio';\n"],"mappings":";;;;AAgBA,SAAgB,EAAM,GAAmB;CACvC,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,cACA,eACA,aACA,UAAO,IACP,cAAW,GACX,aACA,GAAG,MACD;AAEJ,QACE,kBAAC,SAAD;EACE,WAAW,EAAK,GAAW,oCAAoC,EAC7D,aAAa,GACd,CAAC;YAHJ,CAKE,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACE,kBAAC,SAAD;IACE,eAAa;IACb,GAAI;IACA;IACE;IACN,MAAK;IACK;IACV,aAAU;IACA;IACV,CAAA,EAEF,kBAAC,QAAD;IAAM,OAAO;KAAE,QAAQ;KAAM,OAAO;KAAM;IAAE,WAAW,EAAK,EAAE,YAAY,GAAU,CAAC;cACnF,kBAAC,OAAD;KAAK,SAAQ;KAAY,OAAQ,IAAO,IAAK;KAAG,WAAU;eAA1D,CACE,kBAAC,UAAD;MAAQ,IAAG;MAAI,IAAG;MAAI,GAAE;MAAM,OAAO,EAAE,MAAM,wBAAwB;MAAI,CAAA,EACzE,kBAAC,UAAD;MAAQ,IAAG;MAAI,IAAG;MAAI,GAAE;MAAM,OAAO,EAAE,MAAM,sBAAsB;MAAI,CAAA,CACnE;;IACD,CAAA,CACF;MAEN,EACK;;;AAIZ,EAAM,cAAc"}
1
+ {"version":3,"file":"Radio.js","names":[],"sources":["../../../../lib/ui/forms/radios/Radio.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { type InputHTMLAttributes, useId } from 'react';\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {\n /**\n * The data-testid to apply to the button.\n * This is used for testing purposes.\n * @deprecated use [\"data-testid\"] instead.\n */\n dataTestId?: string;\n /**\n * The diameter of the radio button.\n * */\n size?: number;\n onChange?: (event: Event, value: string) => void;\n}\n\nexport function Radio(props: RadioProps) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n dataTestId,\n disabled,\n size = 24,\n tabIndex = 0,\n children,\n onChange,\n ...rest\n } = props;\n\n return (\n <label\n className={clsx(className, 'relative flex items-center gap-8', {\n 'text-grey': disabled,\n })}\n >\n <span className=\"relative\">\n <input\n data-testid={dataTestId}\n {...rest}\n id={id}\n name={name}\n type=\"radio\"\n tabIndex={tabIndex}\n data-name=\"Radio\"\n disabled={disabled}\n onChange={(e) => {\n onChange?.(e.nativeEvent, e.target.value);\n }}\n />\n\n <span style={{ height: size, width: size }} className={clsx({ 'bg-pearl': disabled })}>\n <svg viewBox=\"0 0 16 16\" width={(size * 2) / 3} className=\"overflow-visible\">\n <circle cx=\"8\" cy=\"8\" r=\"8px\" style={{ fill: 'var(--color-saffron)' }} />\n <circle cx=\"8\" cy=\"8\" r=\"4px\" style={{ fill: 'var(--color-black)' }} />\n </svg>\n </span>\n </span>\n\n {children}\n </label>\n );\n}\n\nRadio.displayName = 'Radio';\n"],"mappings":";;;;AAkBA,SAAgB,EAAM,GAAmB;CACvC,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,cACA,eACA,aACA,UAAO,IACP,cAAW,GACX,aACA,aACA,GAAG,MACD;AAEJ,QACE,kBAAC,SAAD;EACE,WAAW,EAAK,GAAW,oCAAoC,EAC7D,aAAa,GACd,CAAC;YAHJ,CAKE,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACE,kBAAC,SAAD;IACE,eAAa;IACb,GAAI;IACA;IACE;IACN,MAAK;IACK;IACV,aAAU;IACA;IACV,WAAW,MAAM;AACf,SAAW,EAAE,aAAa,EAAE,OAAO,MAAM;;IAE3C,CAAA,EAEF,kBAAC,QAAD;IAAM,OAAO;KAAE,QAAQ;KAAM,OAAO;KAAM;IAAE,WAAW,EAAK,EAAE,YAAY,GAAU,CAAC;cACnF,kBAAC,OAAD;KAAK,SAAQ;KAAY,OAAQ,IAAO,IAAK;KAAG,WAAU;eAA1D,CACE,kBAAC,UAAD;MAAQ,IAAG;MAAI,IAAG;MAAI,GAAE;MAAM,OAAO,EAAE,MAAM,wBAAwB;MAAI,CAAA,EACzE,kBAAC,UAAD;MAAQ,IAAG;MAAI,IAAG;MAAI,GAAE;MAAM,OAAO,EAAE,MAAM,sBAAsB;MAAI,CAAA,CACnE;;IACD,CAAA,CACF;MAEN,EACK;;;AAIZ,EAAM,cAAc"}
@@ -1,21 +1,20 @@
1
1
  import { t as e } from "../../../chunks/clsx.js";
2
- import { KEY as t } from "../../hooks/keyboard.constants.js";
3
- import { useValue as n } from "../../hooks/useValue.js";
2
+ import { useValue as t } from "../../hooks/useValue.js";
3
+ import { KEY as n } from "../../hooks/keyboard.constants.js";
4
4
  import { Children as r, cloneElement as i, isValidElement as a, useId as o } from "react";
5
5
  import { jsx as s } from "react/jsx-runtime";
6
6
  //#region lib/ui/forms/radios/RadioGroup.tsx
7
7
  function c(c) {
8
- let l = o(), { id: u = l, name: d = u, children: f, value: p, defaultValue: m, onChange: h, disabled: g, readOnly: _, tabIndex: v = 0, ...y } = c, { value: b, setValue: x } = n({
9
- name: d,
8
+ let l = o(), { id: u = l, name: d = u, children: f, value: p, defaultValue: m, onChange: h, disabled: g, readOnly: _, tabIndex: v = 0, ...y } = c, { value: b, setValue: x } = t({
10
9
  initialValue: p,
11
10
  defaultValue: m,
12
11
  onChange: h
13
- }), S = (e, n) => {
14
- let r = n, i = e.target.parentNode.querySelectorAll("[role=\"radio\"]");
15
- if (e.key === t.ARROW_RIGHT || e.key === t.ARROW_DOWN) r = (n + 1) % i.length, i[r]?.focus();
16
- else if (e.key === t.ARROW_LEFT || e.key === t.ARROW_UP) r = (n - 1 + i.length) % i.length, i[r]?.focus();
17
- else if (e.key === t.SPACE || e.key === t.ENTER) {
18
- x(i[n].dataset.value);
12
+ }), S = (e, t) => {
13
+ let r = t, i = e.target.parentNode.querySelectorAll("[role=\"radio\"]");
14
+ if (e.key === n.ARROW_RIGHT || e.key === n.ARROW_DOWN) r = (t + 1) % i.length, i[r]?.focus();
15
+ else if (e.key === n.ARROW_LEFT || e.key === n.ARROW_UP) r = (t - 1 + i.length) % i.length, i[r]?.focus();
16
+ else if (e.key === n.SPACE || e.key === n.ENTER) {
17
+ x(i[t].dataset.value, e.nativeEvent);
19
18
  return;
20
19
  }
21
20
  };
@@ -43,8 +42,8 @@ function c(c) {
43
42
  "data-value": r,
44
43
  "aria-checked": b === r,
45
44
  onKeyDown: (e) => S(e, t),
46
- onClick() {
47
- !g && !_ && (x(r), e.props?.onClick?.(r));
45
+ onClick(t) {
46
+ !g && !_ && (x(r, t.nativeEvent), e.props?.onClick?.(r));
48
47
  }
49
48
  }) : i(e, {
50
49
  ...e.props,
@@ -55,8 +54,8 @@ function c(c) {
55
54
  tabIndex: C(o, t),
56
55
  checked: o,
57
56
  value: r,
58
- onChange() {
59
- !g && !_ && x(r);
57
+ onChange(e) {
58
+ !g && !_ && x(r, e);
60
59
  }
61
60
  });
62
61
  })
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","names":[],"sources":["../../../../lib/ui/forms/radios/RadioGroup.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n type HTMLAttributes,\n isValidElement,\n useId,\n type ReactElement,\n} from 'react';\nimport type { FormControlProps } from '../FormControl';\nimport type { RadioProps } from './Radio';\nimport { useValue } from '../../hooks/useValue';\nimport clsx from 'clsx';\nimport type { ButtonProps } from '../../buttons/Button';\nimport { KEY } from '../../hooks/keyboard.constants';\n\nexport interface RadioGroupProps<Value = string>\n extends Pick<\n FormControlProps<Value>,\n 'id' | 'name' | 'value' | 'onChange' | 'disabled' | 'readOnly' | 'tabIndex'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {}\n\nexport function RadioGroup<Value = string>(props: RadioGroupProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({\n name,\n initialValue,\n defaultValue: defaultValue as Value,\n onChange,\n });\n\n const handleKeyDown = (e: React.KeyboardEvent, index: number) => {\n let newIndex = index;\n const options = (e.target as any)!.parentNode!.querySelectorAll('[role=\"radio\"]');\n\n if (e.key === KEY.ARROW_RIGHT || e.key === KEY.ARROW_DOWN) {\n newIndex = (index + 1) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.ARROW_LEFT || e.key === KEY.ARROW_UP) {\n newIndex = (index - 1 + options.length) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.SPACE || e.key === KEY.ENTER) {\n setValue(options[index].dataset.value as Value);\n return;\n }\n };\n\n function getTabIndex(checked: boolean, index: number) {\n if (value === undefined || value === null || value === '') {\n return tabIndex === index ? 0 : -1;\n }\n\n return checked ? 0 : -1;\n }\n\n return (\n <div {...rest} className={clsx('flex gap-12', rest.className)} role=\"radiogroup\">\n {Children.map(children, (child, index) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const type = (child.type as unknown as ReactElement & { displayName?: string }).displayName;\n const itemValue = (child.props as ButtonProps | RadioProps).value;\n const checked = value === itemValue;\n\n if (type?.includes('Button')) {\n return cloneElement(child, {\n color: checked ? 'black' : 'white',\n ...(child.props as any),\n value: undefined,\n role: 'radio',\n name,\n component: 'span',\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n 'data-value': itemValue,\n 'aria-checked': value === itemValue,\n onKeyDown: (e: React.KeyboardEvent) => handleKeyDown(e, index),\n onClick() {\n if (!disabled && !readOnly) {\n setValue(itemValue as Value);\n (child.props as any)?.onClick?.(itemValue as Value);\n }\n },\n } as ButtonProps);\n }\n\n return cloneElement(child, {\n ...(child.props as any),\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n checked: checked,\n value: itemValue,\n onChange() {\n if (!disabled && !readOnly) {\n setValue(itemValue as Value);\n }\n },\n } as RadioProps);\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,EAA2B,GAA+B;CACxE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,aACA,OAAO,GACP,iBACA,aACA,aACA,aACA,cAAW,GACX,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAgB;EAC1C;EACA;EACc;EACd;EACD,CAAC,EAEI,KAAiB,GAAwB,MAAkB;EAC/D,IAAI,IAAW,GACT,IAAW,EAAE,OAAgB,WAAY,iBAAiB,mBAAiB;AAEjF,MAAI,EAAE,QAAQ,EAAI,eAAe,EAAE,QAAQ,EAAI,WAE7C,CADA,KAAY,IAAQ,KAAK,EAAQ,QACjC,EAAQ,IAAW,OAAO;WACjB,EAAE,QAAQ,EAAI,cAAc,EAAE,QAAQ,EAAI,SAEnD,CADA,KAAY,IAAQ,IAAI,EAAQ,UAAU,EAAQ,QAClD,EAAQ,IAAW,OAAO;WACjB,EAAE,QAAQ,EAAI,SAAS,EAAE,QAAQ,EAAI,OAAO;AACrD,KAAS,EAAQ,GAAO,QAAQ,MAAe;AAC/C;;;CAIJ,SAAS,EAAY,GAAkB,GAAe;AAKpD,SAJI,KAAiC,QAAQ,MAAU,KAC9C,MAAa,IAAQ,IAAI,KAG3B,IAAU,IAAI;;AAGvB,QACE,kBAAC,OAAD;EAAK,GAAI;EAAM,WAAW,EAAK,eAAe,EAAK,UAAU;EAAE,MAAK;YACjE,EAAS,IAAI,IAAW,GAAO,MAAU;AACxC,OAAI,CAAC,EAAe,EAAM,CACxB,QAAO;GAGT,IAAM,IAAQ,EAAM,KAA4D,aAC1E,IAAa,EAAM,MAAmC,OACtD,IAAU,MAAU;AA0B1B,UAxBI,GAAM,SAAS,SAAS,GACnB,EAAa,GAAO;IACzB,OAAO,IAAU,UAAU;IAC3B,GAAI,EAAM;IACV,OAAO,KAAA;IACP,MAAM;IACN;IACA,WAAW;IACX,IAAI,GAAG,EAAG,GAAG;IACb;IACA;IACA,UAAU,EAAY,GAAS,EAAM;IACrC,cAAc;IACd,gBAAgB,MAAU;IAC1B,YAAY,MAA2B,EAAc,GAAG,EAAM;IAC9D,UAAU;AACR,KAAI,CAAC,KAAY,CAAC,MAChB,EAAS,EAAmB,EAC3B,EAAM,OAAe,UAAU,EAAmB;;IAGxD,CAAgB,GAGZ,EAAa,GAAO;IACzB,GAAI,EAAM;IACV;IACA,IAAI,GAAG,EAAG,GAAG;IACb;IACA;IACA,UAAU,EAAY,GAAS,EAAM;IAC5B;IACT,OAAO;IACP,WAAW;AACT,KAAI,CAAC,KAAY,CAAC,KAChB,EAAS,EAAmB;;IAGjC,CAAe;IAChB;EACE,CAAA"}
1
+ {"version":3,"file":"RadioGroup.js","names":[],"sources":["../../../../lib/ui/forms/radios/RadioGroup.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n type HTMLAttributes,\n isValidElement,\n useId,\n type ReactElement,\n} from 'react';\nimport type { FormControlProps } from '../FormControl';\nimport type { RadioProps } from './Radio';\nimport { useValue } from '../../hooks/useValue';\nimport clsx from 'clsx';\nimport type { ButtonProps } from '../../buttons/Button';\nimport { KEY } from '../../hooks/keyboard.constants';\n\nexport interface RadioGroupProps<Value = string>\n extends Pick<\n FormControlProps<Value>,\n 'id' | 'name' | 'value' | 'onChange' | 'disabled' | 'readOnly' | 'tabIndex'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {}\n\nexport function RadioGroup<Value = string>(props: RadioGroupProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({\n initialValue,\n defaultValue: defaultValue as Value,\n onChange,\n });\n\n const handleKeyDown = (e: React.KeyboardEvent, index: number) => {\n let newIndex = index;\n const options = (e.target as any)!.parentNode!.querySelectorAll('[role=\"radio\"]');\n\n if (e.key === KEY.ARROW_RIGHT || e.key === KEY.ARROW_DOWN) {\n newIndex = (index + 1) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.ARROW_LEFT || e.key === KEY.ARROW_UP) {\n newIndex = (index - 1 + options.length) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.SPACE || e.key === KEY.ENTER) {\n setValue(options[index].dataset.value as Value, e.nativeEvent);\n return;\n }\n };\n\n function getTabIndex(checked: boolean, index: number) {\n if (value === undefined || value === null || value === '') {\n return tabIndex === index ? 0 : -1;\n }\n\n return checked ? 0 : -1;\n }\n\n return (\n <div {...rest} className={clsx('flex gap-12', rest.className)} role=\"radiogroup\">\n {Children.map(children, (child, index) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const type = (child.type as unknown as ReactElement & { displayName?: string }).displayName;\n const itemValue = (child.props as ButtonProps | RadioProps).value;\n const checked = value === itemValue;\n\n if (type?.includes('Button')) {\n return cloneElement(child, {\n color: checked ? 'black' : 'white',\n ...(child.props as any),\n value: undefined,\n role: 'radio',\n name,\n component: 'span',\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n 'data-value': itemValue,\n 'aria-checked': value === itemValue,\n onKeyDown: (e: React.KeyboardEvent) => handleKeyDown(e, index),\n onClick(event: React.MouseEvent) {\n if (!disabled && !readOnly) {\n setValue(itemValue as Value, event.nativeEvent);\n (child.props as any)?.onClick?.(itemValue as Value);\n }\n },\n } as ButtonProps);\n }\n\n return cloneElement(child, {\n ...(child.props as any),\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n checked: checked,\n value: itemValue,\n onChange(event: Event) {\n if (!disabled && !readOnly) {\n setValue(itemValue as Value, event);\n }\n },\n } as RadioProps);\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,EAA2B,GAA+B;CACxE,IAAM,IAAa,GAAO,EAEpB,EACJ,QAAK,GACL,UAAO,GACP,aACA,OAAO,GACP,iBACA,aACA,aACA,aACA,cAAW,GACX,GAAG,MACD,GAEE,EAAE,UAAO,gBAAa,EAAgB;EAC1C;EACc;EACd;EACD,CAAC,EAEI,KAAiB,GAAwB,MAAkB;EAC/D,IAAI,IAAW,GACT,IAAW,EAAE,OAAgB,WAAY,iBAAiB,mBAAiB;AAEjF,MAAI,EAAE,QAAQ,EAAI,eAAe,EAAE,QAAQ,EAAI,WAE7C,CADA,KAAY,IAAQ,KAAK,EAAQ,QACjC,EAAQ,IAAW,OAAO;WACjB,EAAE,QAAQ,EAAI,cAAc,EAAE,QAAQ,EAAI,SAEnD,CADA,KAAY,IAAQ,IAAI,EAAQ,UAAU,EAAQ,QAClD,EAAQ,IAAW,OAAO;WACjB,EAAE,QAAQ,EAAI,SAAS,EAAE,QAAQ,EAAI,OAAO;AACrD,KAAS,EAAQ,GAAO,QAAQ,OAAgB,EAAE,YAAY;AAC9D;;;CAIJ,SAAS,EAAY,GAAkB,GAAe;AAKpD,SAJI,KAAiC,QAAQ,MAAU,KAC9C,MAAa,IAAQ,IAAI,KAG3B,IAAU,IAAI;;AAGvB,QACE,kBAAC,OAAD;EAAK,GAAI;EAAM,WAAW,EAAK,eAAe,EAAK,UAAU;EAAE,MAAK;YACjE,EAAS,IAAI,IAAW,GAAO,MAAU;AACxC,OAAI,CAAC,EAAe,EAAM,CACxB,QAAO;GAGT,IAAM,IAAQ,EAAM,KAA4D,aAC1E,IAAa,EAAM,MAAmC,OACtD,IAAU,MAAU;AA0B1B,UAxBI,GAAM,SAAS,SAAS,GACnB,EAAa,GAAO;IACzB,OAAO,IAAU,UAAU;IAC3B,GAAI,EAAM;IACV,OAAO,KAAA;IACP,MAAM;IACN;IACA,WAAW;IACX,IAAI,GAAG,EAAG,GAAG;IACb;IACA;IACA,UAAU,EAAY,GAAS,EAAM;IACrC,cAAc;IACd,gBAAgB,MAAU;IAC1B,YAAY,MAA2B,EAAc,GAAG,EAAM;IAC9D,QAAQ,GAAyB;AAC/B,KAAI,CAAC,KAAY,CAAC,MAChB,EAAS,GAAoB,EAAM,YAAY,EAC9C,EAAM,OAAe,UAAU,EAAmB;;IAGxD,CAAgB,GAGZ,EAAa,GAAO;IACzB,GAAI,EAAM;IACV;IACA,IAAI,GAAG,EAAG,GAAG;IACb;IACA;IACA,UAAU,EAAY,GAAS,EAAM;IAC5B;IACT,OAAO;IACP,SAAS,GAAc;AACrB,KAAI,CAAC,KAAY,CAAC,KAChB,EAAS,GAAoB,EAAM;;IAGxC,CAAe;IAChB;EACE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { ImageProps } from '../Image';
3
+ import { FrameWrapperProps } from './FrameWrapper';
4
+ export interface FrameProps extends FrameWrapperProps {
5
+ image: ImageProps | null;
6
+ sizes?: ImageProps['sizes'];
7
+ }
8
+ export declare const Frame: FunctionComponent<FrameProps>;
@@ -0,0 +1,16 @@
1
+ import { Image as e } from "../Image.js";
2
+ import { FrameWrapper as t } from "./FrameWrapper.js";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region lib/ui/frame/Frame.tsx
5
+ var i = ({ children: i, image: a, sizes: o, ...s }) => /* @__PURE__ */ r(t, {
6
+ ...s,
7
+ children: [a && /* @__PURE__ */ n(e, {
8
+ ...a,
9
+ className: "h-full w-full object-cover",
10
+ sizes: o ?? a.sizes
11
+ }), i]
12
+ });
13
+ //#endregion
14
+ export { i as Frame };
15
+
16
+ //# sourceMappingURL=Frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Frame.js","names":[],"sources":["../../../lib/ui/frame/Frame.tsx"],"sourcesContent":["import type { FunctionComponent } from 'react';\n\nimport { Image, type ImageProps } from '../Image';\n\nimport { FrameWrapper, type FrameWrapperProps } from './FrameWrapper';\n\nexport interface FrameProps extends FrameWrapperProps {\n image: ImageProps | null;\n sizes?: ImageProps['sizes'];\n}\n\nexport const Frame: FunctionComponent<FrameProps> = ({ children, image, sizes, ...props }) => {\n return (\n <FrameWrapper {...props}>\n {image && (\n <Image {...image} className=\"h-full w-full object-cover\" sizes={sizes ?? image.sizes} />\n )}\n {children}\n </FrameWrapper>\n );\n};\n"],"mappings":";;;;AAWA,IAAa,KAAwC,EAAE,aAAU,UAAO,UAAO,GAAG,QAE9E,kBAAC,GAAD;CAAc,GAAI;WAAlB,CACG,KACC,kBAAC,GAAD;EAAO,GAAI;EAAO,WAAU;EAA6B,OAAO,KAAS,EAAM;EAAS,CAAA,EAEzF,EACY"}
@@ -0,0 +1,5 @@
1
+ import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
2
+ export interface FrameLabelsWrapperProps extends ComponentPropsWithoutRef<'div'> {
3
+ hasImage: boolean;
4
+ }
5
+ export declare const FrameLabelsWrapper: FunctionComponent<FrameLabelsWrapperProps>;
@@ -0,0 +1,12 @@
1
+ import { t as e } from "../../chunks/clsx.js";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ //#region lib/ui/frame/FrameLabelsWrapper.tsx
4
+ var n = ({ children: n, className: r, hasImage: i = !1, ...a }) => /* @__PURE__ */ t("div", {
5
+ ...a,
6
+ className: e("rounded-16 pointer-events-none absolute inset-0 flex flex-col overflow-auto", { "bg-linear-to-b from-transparent via-transparent via-40% to-black/70": i }, r),
7
+ children: n
8
+ });
9
+ //#endregion
10
+ export { n as FrameLabelsWrapper };
11
+
12
+ //# sourceMappingURL=FrameLabelsWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameLabelsWrapper.js","names":[],"sources":["../../../lib/ui/frame/FrameLabelsWrapper.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\nexport interface FrameLabelsWrapperProps extends ComponentPropsWithoutRef<'div'> {\n hasImage: boolean;\n}\n\nexport const FrameLabelsWrapper: FunctionComponent<FrameLabelsWrapperProps> = ({\n children,\n className,\n hasImage = false,\n ...attrs\n}) => {\n return (\n <div\n {...attrs}\n className={clsx(\n 'rounded-16 pointer-events-none absolute inset-0 flex flex-col overflow-auto',\n {\n 'bg-linear-to-b from-transparent via-transparent via-40% to-black/70': hasImage,\n },\n className,\n )}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;AAOA,IAAa,KAAkE,EAC7E,aACA,cACA,cAAW,IACX,GAAG,QAGD,kBAAC,OAAD;CACE,GAAI;CACJ,WAAW,EACT,+EACA,EACE,uEAAuE,GACxE,EACD,EACD;CAEA;CACG,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent, HTMLAttributes } from 'react';
2
+ export interface FrameTitleProps extends HTMLAttributes<HTMLDivElement | HTMLAnchorElement> {
3
+ coverLink?: boolean;
4
+ hasImage?: boolean;
5
+ href?: string;
6
+ }
7
+ export declare const FrameTitle: FunctionComponent<FrameTitleProps>;