@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
@@ -0,0 +1,141 @@
1
+ "use client";
2
+ import { Button as e } from "./buttons/Button.js";
3
+ import { twMerge as t } from "./helpers/twMerge.js";
4
+ import { Scrollbar as n } from "./Scrollbar.js";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
+ //#region lib/ui/ChatWindowQuote.tsx
7
+ function a({ quote: t, onCtaClick: n }) {
8
+ return /* @__PURE__ */ i("article", {
9
+ "aria-label": t.resortName,
10
+ className: "flex flex-col bg-white border border-lightGrey rounded-32 shadow-[0px_2px_14px_0px_rgba(0,0,0,0.25)] overflow-hidden p-24 gap-16",
11
+ children: [/* @__PURE__ */ i("div", {
12
+ className: "relative h-210 w-full overflow-hidden rounded-16",
13
+ children: [
14
+ /* @__PURE__ */ r("img", {
15
+ src: t.imageUrl,
16
+ alt: "",
17
+ className: "absolute inset-0 size-full object-cover"
18
+ }),
19
+ /* @__PURE__ */ r("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent from-50% to-[rgba(36,36,36,0.4)]" }),
20
+ /* @__PURE__ */ i("div", {
21
+ className: "absolute bottom-20 inset-x-0 flex flex-col items-center text-white text-center px-20",
22
+ children: [/* @__PURE__ */ r("p", {
23
+ className: "text-b2 font-semibold",
24
+ children: t.resortName
25
+ }), /* @__PURE__ */ r("p", {
26
+ className: "text-b3",
27
+ children: t.country
28
+ })]
29
+ })
30
+ ]
31
+ }), /* @__PURE__ */ i("div", {
32
+ className: "flex flex-col gap-16 items-center",
33
+ children: [
34
+ /* @__PURE__ */ i("p", {
35
+ className: "text-b4 font-semibold text-black text-center",
36
+ children: [
37
+ t.resortName,
38
+ ", ",
39
+ t.dateRange,
40
+ ", ",
41
+ t.pax
42
+ ]
43
+ }),
44
+ /* @__PURE__ */ r(e, {
45
+ color: "saffron",
46
+ onClick: () => n?.(t),
47
+ children: t.ctaLabel ?? "See prices"
48
+ }),
49
+ t.packageIncludes && t.packageIncludes.length > 0 && /* @__PURE__ */ i("div", {
50
+ className: "flex flex-col gap-4 w-full",
51
+ children: [/* @__PURE__ */ r("p", {
52
+ className: "text-b3 font-semibold text-black",
53
+ children: "Your All-Inclusive package includes:"
54
+ }), /* @__PURE__ */ r("ul", {
55
+ className: "flex flex-col gap-2",
56
+ children: t.packageIncludes.map((e) => /* @__PURE__ */ i("li", {
57
+ className: "text-b3 text-black",
58
+ children: ["• ", e]
59
+ }, e))
60
+ })]
61
+ }),
62
+ t.additionalInfo && /* @__PURE__ */ r("p", {
63
+ className: "text-b3 text-black",
64
+ children: t.additionalInfo
65
+ })
66
+ ]
67
+ })]
68
+ });
69
+ }
70
+ function o({ quote: t, onCtaClick: n }) {
71
+ return /* @__PURE__ */ i("article", {
72
+ "aria-label": t.resortName,
73
+ className: "flex flex-col gap-12 items-center shrink-0 w-200",
74
+ children: [/* @__PURE__ */ i("div", {
75
+ className: "relative size-200 rounded-16 overflow-hidden",
76
+ children: [
77
+ /* @__PURE__ */ r("img", {
78
+ src: t.imageUrl,
79
+ alt: "",
80
+ className: "absolute inset-0 size-full object-cover"
81
+ }),
82
+ /* @__PURE__ */ r("div", { className: "absolute inset-0 rounded-16 bg-gradient-to-b from-transparent from-50% to-[rgba(36,36,36,0.4)]" }),
83
+ /* @__PURE__ */ i("div", {
84
+ className: "absolute bottom-20 inset-x-0 flex flex-col items-center text-white text-center px-8",
85
+ children: [/* @__PURE__ */ r("p", {
86
+ className: "text-b4 font-semibold",
87
+ children: t.resortName
88
+ }), /* @__PURE__ */ r("p", {
89
+ className: "text-b5",
90
+ children: t.country
91
+ })]
92
+ })
93
+ ]
94
+ }), /* @__PURE__ */ i("div", {
95
+ className: "flex flex-col gap-8 items-center",
96
+ children: [/* @__PURE__ */ i("p", {
97
+ className: "text-b5 font-semibold text-black text-center",
98
+ children: [
99
+ t.resortName,
100
+ /* @__PURE__ */ r("br", {}),
101
+ t.dateRange,
102
+ ",",
103
+ /* @__PURE__ */ r("br", {}),
104
+ t.pax
105
+ ]
106
+ }), /* @__PURE__ */ r(e, {
107
+ color: "black",
108
+ onClick: () => n?.(t),
109
+ children: t.ctaLabel ?? "See prices"
110
+ })]
111
+ })]
112
+ });
113
+ }
114
+ function s({ quotes: e, onCtaClick: i, className: s }) {
115
+ return e.length === 0 ? null : e.length === 1 ? /* @__PURE__ */ r("div", {
116
+ className: t(s),
117
+ children: /* @__PURE__ */ r(a, {
118
+ quote: e[0],
119
+ onCtaClick: i
120
+ })
121
+ }) : /* @__PURE__ */ r("div", {
122
+ className: t("flex flex-col gap-8", s),
123
+ children: /* @__PURE__ */ r(n, {
124
+ timelineName: "--chat-quote-scroller",
125
+ scrollerClassName: "pb-24",
126
+ scrollbarWidth: "60%",
127
+ "aria-label": "Quote options",
128
+ children: /* @__PURE__ */ r("div", {
129
+ className: "flex gap-12",
130
+ children: e.map((e) => /* @__PURE__ */ r(o, {
131
+ quote: e,
132
+ onCtaClick: i
133
+ }, e.id))
134
+ })
135
+ })
136
+ });
137
+ }
138
+ //#endregion
139
+ export { s as ChatWindowQuote };
140
+
141
+ //# sourceMappingURL=ChatWindowQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatWindowQuote.js","names":[],"sources":["../../lib/ui/ChatWindowQuote.tsx"],"sourcesContent":["'use client';\n\nimport { twMerge } from './helpers/twMerge';\nimport { Button } from './buttons/Button';\nimport { Scrollbar } from './Scrollbar';\n\nexport interface ChatWindowQuoteItem {\n id: string;\n resortName: string;\n country: string;\n imageUrl: string;\n /** Date range, e.g. \"15 June 2026 to 24 June 2026\" */\n dateRange: string;\n /** Pax info, e.g. \"for 2 adults 2 children\" */\n pax: string;\n /** CTA button label. Defaults to \"See prices\" */\n ctaLabel?: string;\n /** Bullet-point package items. Shown in single-quote inline mode only */\n packageIncludes?: string[];\n /** Free-text paragraph shown in single-quote inline mode only */\n additionalInfo?: string;\n}\n\nexport interface ChatWindowQuoteProps {\n quotes: ChatWindowQuoteItem[];\n onCtaClick?: (quote: ChatWindowQuoteItem) => void;\n className?: string;\n}\n\ninterface QuoteCardProps {\n quote: ChatWindowQuoteItem;\n onCtaClick?: (quote: ChatWindowQuoteItem) => void;\n}\n\nfunction SingleQuoteCard({ quote, onCtaClick }: QuoteCardProps) {\n return (\n <article\n aria-label={quote.resortName}\n className=\"flex flex-col bg-white border border-lightGrey rounded-32 shadow-[0px_2px_14px_0px_rgba(0,0,0,0.25)] overflow-hidden p-24 gap-16\"\n >\n <div className=\"relative h-210 w-full overflow-hidden rounded-16\">\n <img src={quote.imageUrl} alt=\"\" className=\"absolute inset-0 size-full object-cover\" />\n <div className=\"absolute inset-0 bg-gradient-to-b from-transparent from-50% to-[rgba(36,36,36,0.4)]\" />\n <div className=\"absolute bottom-20 inset-x-0 flex flex-col items-center text-white text-center px-20\">\n <p className=\"text-b2 font-semibold\">{quote.resortName}</p>\n <p className=\"text-b3\">{quote.country}</p>\n </div>\n </div>\n <div className=\"flex flex-col gap-16 items-center\">\n <p className=\"text-b4 font-semibold text-black text-center\">\n {quote.resortName}, {quote.dateRange}, {quote.pax}\n </p>\n <Button color=\"saffron\" onClick={() => onCtaClick?.(quote)}>\n {quote.ctaLabel ?? 'See prices'}\n </Button>\n {quote.packageIncludes && quote.packageIncludes.length > 0 && (\n <div className=\"flex flex-col gap-4 w-full\">\n <p className=\"text-b3 font-semibold text-black\">Your All-Inclusive package includes:</p>\n <ul className=\"flex flex-col gap-2\">\n {quote.packageIncludes.map((item) => (\n <li key={item} className=\"text-b3 text-black\">\n • {item}\n </li>\n ))}\n </ul>\n </div>\n )}\n {quote.additionalInfo && <p className=\"text-b3 text-black\">{quote.additionalInfo}</p>}\n </div>\n </article>\n );\n}\n\nfunction CompactQuoteCard({ quote, onCtaClick }: QuoteCardProps) {\n return (\n <article\n aria-label={quote.resortName}\n className=\"flex flex-col gap-12 items-center shrink-0 w-200\"\n >\n <div className=\"relative size-200 rounded-16 overflow-hidden\">\n <img src={quote.imageUrl} alt=\"\" className=\"absolute inset-0 size-full object-cover\" />\n <div className=\"absolute inset-0 rounded-16 bg-gradient-to-b from-transparent from-50% to-[rgba(36,36,36,0.4)]\" />\n <div className=\"absolute bottom-20 inset-x-0 flex flex-col items-center text-white text-center px-8\">\n <p className=\"text-b4 font-semibold\">{quote.resortName}</p>\n <p className=\"text-b5\">{quote.country}</p>\n </div>\n </div>\n <div className=\"flex flex-col gap-8 items-center\">\n <p className=\"text-b5 font-semibold text-black text-center\">\n {quote.resortName}\n <br />\n {quote.dateRange},\n <br />\n {quote.pax}\n </p>\n <Button color=\"black\" onClick={() => onCtaClick?.(quote)}>\n {quote.ctaLabel ?? 'See prices'}\n </Button>\n </div>\n </article>\n );\n}\n\nexport function ChatWindowQuote({ quotes, onCtaClick, className }: ChatWindowQuoteProps) {\n if (quotes.length === 0) return null;\n\n if (quotes.length === 1) {\n return (\n <div className={twMerge(className)}>\n <SingleQuoteCard quote={quotes[0]} onCtaClick={onCtaClick} />\n </div>\n );\n }\n\n return (\n <div className={twMerge('flex flex-col gap-8', className)}>\n <Scrollbar\n timelineName=\"--chat-quote-scroller\"\n scrollerClassName=\"pb-24\"\n scrollbarWidth=\"60%\"\n aria-label=\"Quote options\"\n >\n <div className=\"flex gap-12\">\n {quotes.map((quote) => (\n <CompactQuoteCard key={quote.id} quote={quote} onCtaClick={onCtaClick} />\n ))}\n </div>\n </Scrollbar>\n </div>\n );\n}\n"],"mappings":";;;;;;AAkCA,SAAS,EAAgB,EAAE,UAAO,iBAA8B;AAC9D,QACE,kBAAC,WAAD;EACE,cAAY,EAAM;EAClB,WAAU;YAFZ,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,KAAK,EAAM;KAAU,KAAI;KAAG,WAAU;KAA4C,CAAA;IACvF,kBAAC,OAAD,EAAK,WAAU,uFAAwF,CAAA;IACvG,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAyB,EAAM;MAAe,CAAA,EAC3D,kBAAC,KAAD;MAAG,WAAU;gBAAW,EAAM;MAAY,CAAA,CAAA;;;MAG9C,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAM;MAAW;MAAG,EAAM;MAAU;MAAG,EAAM;;;IAEhD,kBAAC,GAAD;KAAQ,OAAM;KAAU,eAAe,IAAa,EAAM;eACvD,EAAM,YAAY;KACZ,CAAA;IACR,EAAM,mBAAmB,EAAM,gBAAgB,SAAS,KACvD,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAmC;MAAwC,CAAA,EACxF,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAM,gBAAgB,KAAK,MAC1B,kBAAC,MAAD;OAAe,WAAU;iBAAzB,CAA8C,MACzC,EAAA;SADI,EAEJ,CAAA;MAEJ,CAAA,CAAA;;IAGR,EAAM,kBAAkB,kBAAC,KAAD;KAAG,WAAU;eAAsB,EAAM;KAAmB,CAAA;;;;;AAM7F,SAAS,EAAiB,EAAE,UAAO,iBAA8B;AAC/D,QACE,kBAAC,WAAD;EACE,cAAY,EAAM;EAClB,WAAU;YAFZ,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,KAAK,EAAM;KAAU,KAAI;KAAG,WAAU;KAA4C,CAAA;IACvF,kBAAC,OAAD,EAAK,WAAU,kGAAmG,CAAA;IAClH,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAyB,EAAM;MAAe,CAAA,EAC3D,kBAAC,KAAD;MAAG,WAAU;gBAAW,EAAM;MAAY,CAAA,CAAA;;;MAG9C,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAb;KACG,EAAM;KACP,kBAAC,MAAD,EAAM,CAAA;KACL,EAAM;KAAU;KACjB,kBAAC,MAAD,EAAM,CAAA;KACL,EAAM;;OAET,kBAAC,GAAD;IAAQ,OAAM;IAAQ,eAAe,IAAa,EAAM;cACrD,EAAM,YAAY;IACZ,CAAA,CAAA;;;;AAMjB,SAAgB,EAAgB,EAAE,WAAQ,eAAY,gBAAmC;AAWvF,QAVI,EAAO,WAAW,IAAU,OAE5B,EAAO,WAAW,IAElB,kBAAC,OAAD;EAAK,WAAW,EAAQ,EAAU;YAChC,kBAAC,GAAD;GAAiB,OAAO,EAAO;GAAgB;GAAc,CAAA;EACzD,CAAA,GAKR,kBAAC,OAAD;EAAK,WAAW,EAAQ,uBAAuB,EAAU;YACvD,kBAAC,GAAD;GACE,cAAa;GACb,mBAAkB;GAClB,gBAAe;GACf,cAAW;aAEX,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAO,KAAK,MACX,kBAAC,GAAD;KAAwC;KAAmB;KAAc,EAAlD,EAAM,GAA4C,CAAA;IAEvE,CAAA;GACI,CAAA;EACR,CAAA"}
package/ui/Chip.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { t as e } from "../chunks/clsx.js";
2
2
  import { getTheme as t } from "./Chip.themes.js";
3
- import { Icon as n } from "@clubmed/trident-icons";
4
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ import { Icon as i } from "@clubmed/trident-icons";
5
5
  //#region lib/ui/Chip.tsx
6
6
  var a = ({ className: a, color: o = "sienna", icon: s, iconWidth: c = "24px", rotation: l, size: u = "size-32", theme: d = "solid", children: f, ...p }) => {
7
7
  let { thRoot: m } = t(d, { color: o });
8
- return /* @__PURE__ */ i("span", {
8
+ return /* @__PURE__ */ r("span", {
9
9
  ...p,
10
10
  className: e("inline-flex aspect-square shrink-0 items-center justify-center overflow-hidden rounded-full border", u, m, a),
11
11
  "data-name": "Chip",
12
- children: [f && f, s && /* @__PURE__ */ r(n, {
12
+ children: [f && f, s && /* @__PURE__ */ n(i, {
13
13
  name: s,
14
14
  rotation: l,
15
15
  width: c
@@ -2,8 +2,8 @@
2
2
  import { t as e } from "../chunks/clsx.js";
3
3
  import { getBgColor as t, getTextColor as n } from "./helpers/colors/colors.js";
4
4
  import { useCallback as r, useEffect as i, useId as a, useRef as o, useState as s } from "react";
5
- import { Icon as c } from "@clubmed/trident-icons";
6
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { Icon as u } from "@clubmed/trident-icons";
7
7
  //#region lib/ui/ChoiceExpander.tsx
8
8
  var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExpanded: h = !1, onExpandedChange: g, disabled: _ = !1, ariaLabel: v, buttonBgColor: y = "black", buttonTextColor: b = "white", collapseLabel: x, expandLabel: S, className: C, ...w }) => {
9
9
  let [T, E] = s(h), D = a(), O = o(null), k = o(null), A = o(null), j = o(!1), M = m === void 0 ? T : m, N = r(() => {
@@ -31,7 +31,7 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
31
31
  O.current && !O.current.contains(e.target) && N();
32
32
  };
33
33
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
34
- }, [M, N]), /* @__PURE__ */ l("div", {
34
+ }, [M, N]), /* @__PURE__ */ c("div", {
35
35
  className: e("relative flex items-center justify-center", C),
36
36
  "data-name": "ChoiceExpander",
37
37
  "data-testid": "choice-expander",
@@ -40,10 +40,10 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
40
40
  height: 48
41
41
  },
42
42
  ...w,
43
- children: /* @__PURE__ */ u("div", {
43
+ children: /* @__PURE__ */ l("div", {
44
44
  ref: O,
45
45
  className: e("absolute top-0 grid transition-all duration-500", !M && [
46
- "w-240 rounded-pill border-transparent",
46
+ "w-240 rounded-pill-transitionable border-transparent",
47
47
  t(y),
48
48
  n(b)
49
49
  ], M && [
@@ -51,7 +51,7 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
51
51
  "z-10",
52
52
  _ && "opacity-50"
53
53
  ]),
54
- children: [/* @__PURE__ */ u("button", {
54
+ children: [/* @__PURE__ */ l("button", {
55
55
  ref: A,
56
56
  type: "button",
57
57
  "data-testid": "choice-expander-button",
@@ -60,25 +60,25 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
60
60
  "aria-label": v || d,
61
61
  disabled: _,
62
62
  onClick: N,
63
- className: e("flex items-center justify-center w-240 mx-auto relative gap-20 transition-opacity duration-200", "rounded-pill focus-visible:ring focus-visible:ring-8 focus-visible:ring-lavender/20 outline-none px-20 py-12 ", _ ? "opacity-50 cursor-not-allowed" : "cursor-pointer", "[@supports(anchor-name:_--label-anchor)]:[--anchorSupport:1]"),
63
+ className: e("flex items-center justify-center w-240 mx-auto relative gap-20 transition-opacity duration-200", "rounded-pill focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 outline-none px-20 py-12 ", _ ? "opacity-50 cursor-not-allowed" : "cursor-pointer", "[@supports(anchor-name:_--label-anchor)]:[--anchorSupport:1]"),
64
64
  children: [
65
- /* @__PURE__ */ l("div", {
65
+ /* @__PURE__ */ c("div", {
66
66
  "aria-hidden": "true",
67
67
  className: "absolute h-24 w-24 mx-auto pointer-events-none",
68
68
  style: { anchorName: "--middle-anchor" }
69
69
  }),
70
- /* @__PURE__ */ u("span", {
70
+ /* @__PURE__ */ l("span", {
71
71
  className: "text-b3 flex items-center font-semibold",
72
72
  children: [
73
- /* @__PURE__ */ l("span", {
73
+ /* @__PURE__ */ c("span", {
74
74
  className: e("transition-opacity duration-200 pe-8", M && "opacity-0"),
75
75
  children: d
76
76
  }),
77
- /* @__PURE__ */ l("div", {
77
+ /* @__PURE__ */ c("div", {
78
78
  className: "h-24 w-24",
79
79
  style: { anchorName: "--label-anchor" },
80
80
  "aria-hidden": "true",
81
- children: /* @__PURE__ */ l(c, {
81
+ children: /* @__PURE__ */ c(u, {
82
82
  name: "ArrowDefaultDown",
83
83
  width: "24px",
84
84
  "aria-hidden": "true",
@@ -89,13 +89,13 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
89
89
  }
90
90
  })
91
91
  }),
92
- /* @__PURE__ */ l("span", {
92
+ /* @__PURE__ */ c("span", {
93
93
  className: "sr-only",
94
94
  children: M ? x : S
95
95
  })
96
96
  ]
97
97
  }),
98
- /* @__PURE__ */ l(c, {
98
+ /* @__PURE__ */ c(u, {
99
99
  name: "ArrowDefaultDown",
100
100
  width: "24px",
101
101
  "aria-hidden": "true",
@@ -107,18 +107,18 @@ var d = ({ label: d, showCheckIcon: f = !1, children: p, expanded: m, defaultExp
107
107
  transition: "left 0.3s, rotate 0.3s"
108
108
  }
109
109
  }),
110
- f && /* @__PURE__ */ l(c, {
110
+ f && /* @__PURE__ */ c(u, {
111
111
  name: "CheckDefault",
112
112
  width: "24px",
113
113
  "aria-hidden": "true",
114
114
  className: e("transition-opacity duration-200", M && "opacity-0")
115
115
  })
116
116
  ]
117
- }), /* @__PURE__ */ l("div", {
117
+ }), /* @__PURE__ */ c("div", {
118
118
  className: e("grid overflow-hidden transition-[grid-template-rows,opacity] duration-500", M ? "grid-rows-[1fr]" : "grid-rows-[0fr] opacity-0"),
119
- children: /* @__PURE__ */ l("div", {
119
+ children: /* @__PURE__ */ c("div", {
120
120
  className: "overflow-hidden",
121
- children: /* @__PURE__ */ l("div", {
121
+ children: /* @__PURE__ */ c("div", {
122
122
  className: "px-8 pb-8",
123
123
  id: D,
124
124
  children: p
@@ -1 +1 @@
1
- {"version":3,"file":"ChoiceExpander.js","names":[],"sources":["../../lib/ui/ChoiceExpander.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Icon } from '@clubmed/trident-icons';\nimport { getBgColor, getTextColor } from './helpers/colors/colors';\nimport type { Colors } from './types/Colors';\n\nexport interface ChoiceExpanderProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Text shown when collapsed (e.g., \"From $255\")\n */\n label: string;\n\n /**\n * Show check icon in collapsed state (selected variant)\n */\n showCheckIcon?: boolean;\n\n /**\n * Content shown when expanded\n */\n children: ReactNode;\n\n /**\n * Controlled state - if provided, component is controlled\n */\n expanded?: boolean;\n\n /**\n * Initial state for uncontrolled mode\n */\n defaultExpanded?: boolean;\n\n /**\n * Callback when expanded state changes\n */\n onExpandedChange?: (isExpanded: boolean) => void;\n\n /**\n * Disable interaction\n */\n disabled?: boolean;\n\n /**\n * Custom aria-label for button\n */\n ariaLabel?: string;\n\n /**\n * Background color for unexpanded button state\n */\n buttonBgColor?: Colors;\n\n /**\n * Text color for unexpanded button state\n */\n buttonTextColor?: Colors;\n\n /**\n * collapse label for screen readers\n */\n collapseLabel: string;\n\n /**\n * expand label for screen readers\n */\n expandLabel: string;\n}\n\nexport const ChoiceExpander: FunctionComponent<ChoiceExpanderProps> = ({\n label,\n showCheckIcon = false,\n children,\n expanded,\n defaultExpanded = false,\n onExpandedChange,\n disabled = false,\n ariaLabel,\n buttonBgColor = 'black',\n buttonTextColor = 'white',\n collapseLabel,\n expandLabel,\n className,\n ...props\n}) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const contentId = useId();\n const morphContainerRef = useRef<HTMLDivElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const triggerButtonRef = useRef<HTMLButtonElement>(null);\n const hasInteractedRef = useRef(false);\n\n const isExpanded = expanded !== undefined ? expanded : internalExpanded;\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n\n hasInteractedRef.current = true;\n const newState = !isExpanded;\n\n if (expanded === undefined) {\n setInternalExpanded(newState);\n }\n\n onExpandedChange?.(newState);\n }, [disabled, isExpanded, expanded, onExpandedChange]);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handleToggle();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isExpanded, handleToggle]);\n\n useEffect(() => {\n if (isExpanded && closeButtonRef.current) {\n closeButtonRef.current.focus();\n } else if (!isExpanded && hasInteractedRef.current && triggerButtonRef.current) {\n triggerButtonRef.current.focus();\n }\n }, [isExpanded]);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (morphContainerRef.current && !morphContainerRef.current.contains(event.target as Node)) {\n handleToggle();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isExpanded, handleToggle]);\n\n return (\n <div\n className={clsx('relative flex items-center justify-center', className)}\n data-name=\"ChoiceExpander\"\n data-testid=\"choice-expander\"\n style={{ width: '240px', height: 48 }}\n {...props}\n >\n <div\n ref={morphContainerRef}\n className={clsx(\n 'absolute top-0 grid transition-all duration-500',\n !isExpanded && [\n 'w-240 rounded-pill border-transparent',\n getBgColor(buttonBgColor),\n getTextColor(buttonTextColor),\n ],\n isExpanded && [\n 'w-324 rounded-16 bg-white text-black border border-gray-900',\n 'z-10',\n disabled && 'opacity-50',\n ],\n )}\n >\n <button\n ref={triggerButtonRef}\n type=\"button\"\n data-testid=\"choice-expander-button\"\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-label={ariaLabel || label}\n disabled={disabled}\n onClick={handleToggle}\n className={clsx(\n 'flex items-center justify-center w-240 mx-auto relative gap-20 transition-opacity duration-200',\n 'rounded-pill focus-visible:ring focus-visible:ring-8 focus-visible:ring-lavender/20 outline-none px-20 py-12 ',\n disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer',\n '[@supports(anchor-name:_--label-anchor)]:[--anchorSupport:1]',\n )}\n >\n {/* invisible top middle anchor position */}\n <div\n aria-hidden=\"true\"\n className=\"absolute h-24 w-24 mx-auto pointer-events-none\"\n style={{ anchorName: '--middle-anchor' } as React.CSSProperties}\n ></div>\n <span className=\"text-b3 flex items-center font-semibold\">\n {/* label anchor */}\n <span\n className={clsx('transition-opacity duration-200 pe-8', isExpanded && 'opacity-0')}\n >\n {label}\n </span>\n <div\n className=\"h-24 w-24\"\n style={{ anchorName: '--label-anchor' } as React.CSSProperties}\n aria-hidden=\"true\"\n >\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx(\n isExpanded ? 'absolute left-[calc(50%-12px)] rotate-180' : 'rotate-[0deg]',\n )}\n style={\n {\n transition: 'rotate 0.3s, left 0.3s',\n opacity: 'calc((1 - var(--anchorSupport)) * 1)',\n } as React.CSSProperties\n }\n />\n </div>\n <span className=\"sr-only\">{isExpanded ? collapseLabel : expandLabel}</span>\n </span>\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx('absolute', isExpanded ? 'rotate-180' : 'rotate-[0deg]')}\n style={\n {\n positionAnchor: isExpanded ? '--middle-anchor' : '--label-anchor',\n left: 'anchor(left)',\n top: 'anchor(top)',\n transition: 'left 0.3s, rotate 0.3s',\n } as React.CSSProperties\n }\n />\n {showCheckIcon && (\n <Icon\n name=\"CheckDefault\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx('transition-opacity duration-200', isExpanded && 'opacity-0')}\n />\n )}\n </button>\n\n <div\n className={clsx(\n 'grid overflow-hidden transition-[grid-template-rows,opacity] duration-500',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr] opacity-0',\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-8 pb-8\" id={contentId}>\n {children}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChoiceExpander.js","names":[],"sources":["../../lib/ui/ChoiceExpander.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Icon } from '@clubmed/trident-icons';\nimport { getBgColor, getTextColor } from './helpers/colors/colors';\nimport type { Colors } from './types/Colors';\n\nexport interface ChoiceExpanderProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Text shown when collapsed (e.g., \"From $255\")\n */\n label: string;\n\n /**\n * Show check icon in collapsed state (selected variant)\n */\n showCheckIcon?: boolean;\n\n /**\n * Content shown when expanded\n */\n children: ReactNode;\n\n /**\n * Controlled state - if provided, component is controlled\n */\n expanded?: boolean;\n\n /**\n * Initial state for uncontrolled mode\n */\n defaultExpanded?: boolean;\n\n /**\n * Callback when expanded state changes\n */\n onExpandedChange?: (isExpanded: boolean) => void;\n\n /**\n * Disable interaction\n */\n disabled?: boolean;\n\n /**\n * Custom aria-label for button\n */\n ariaLabel?: string;\n\n /**\n * Background color for unexpanded button state\n */\n buttonBgColor?: Colors;\n\n /**\n * Text color for unexpanded button state\n */\n buttonTextColor?: Colors;\n\n /**\n * collapse label for screen readers\n */\n collapseLabel: string;\n\n /**\n * expand label for screen readers\n */\n expandLabel: string;\n}\n\nexport const ChoiceExpander: FunctionComponent<ChoiceExpanderProps> = ({\n label,\n showCheckIcon = false,\n children,\n expanded,\n defaultExpanded = false,\n onExpandedChange,\n disabled = false,\n ariaLabel,\n buttonBgColor = 'black',\n buttonTextColor = 'white',\n collapseLabel,\n expandLabel,\n className,\n ...props\n}) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const contentId = useId();\n const morphContainerRef = useRef<HTMLDivElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const triggerButtonRef = useRef<HTMLButtonElement>(null);\n const hasInteractedRef = useRef(false);\n\n const isExpanded = expanded !== undefined ? expanded : internalExpanded;\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n\n hasInteractedRef.current = true;\n const newState = !isExpanded;\n\n if (expanded === undefined) {\n setInternalExpanded(newState);\n }\n\n onExpandedChange?.(newState);\n }, [disabled, isExpanded, expanded, onExpandedChange]);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n handleToggle();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isExpanded, handleToggle]);\n\n useEffect(() => {\n if (isExpanded && closeButtonRef.current) {\n closeButtonRef.current.focus();\n } else if (!isExpanded && hasInteractedRef.current && triggerButtonRef.current) {\n triggerButtonRef.current.focus();\n }\n }, [isExpanded]);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (morphContainerRef.current && !morphContainerRef.current.contains(event.target as Node)) {\n handleToggle();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isExpanded, handleToggle]);\n\n return (\n <div\n className={clsx('relative flex items-center justify-center', className)}\n data-name=\"ChoiceExpander\"\n data-testid=\"choice-expander\"\n style={{ width: '240px', height: 48 }}\n {...props}\n >\n <div\n ref={morphContainerRef}\n className={clsx(\n 'absolute top-0 grid transition-all duration-500',\n !isExpanded && [\n 'w-240 rounded-pill-transitionable border-transparent',\n getBgColor(buttonBgColor),\n getTextColor(buttonTextColor),\n ],\n isExpanded && [\n 'w-324 rounded-16 bg-white text-black border border-gray-900',\n 'z-10',\n disabled && 'opacity-50',\n ],\n )}\n >\n <button\n ref={triggerButtonRef}\n type=\"button\"\n data-testid=\"choice-expander-button\"\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-label={ariaLabel || label}\n disabled={disabled}\n onClick={handleToggle}\n className={clsx(\n 'flex items-center justify-center w-240 mx-auto relative gap-20 transition-opacity duration-200',\n 'rounded-pill focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 outline-none px-20 py-12 ',\n disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer',\n '[@supports(anchor-name:_--label-anchor)]:[--anchorSupport:1]',\n )}\n >\n {/* invisible top middle anchor position */}\n <div\n aria-hidden=\"true\"\n className=\"absolute h-24 w-24 mx-auto pointer-events-none\"\n style={{ anchorName: '--middle-anchor' } as React.CSSProperties}\n ></div>\n <span className=\"text-b3 flex items-center font-semibold\">\n {/* label anchor */}\n <span\n className={clsx('transition-opacity duration-200 pe-8', isExpanded && 'opacity-0')}\n >\n {label}\n </span>\n <div\n className=\"h-24 w-24\"\n style={{ anchorName: '--label-anchor' } as React.CSSProperties}\n aria-hidden=\"true\"\n >\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx(\n isExpanded ? 'absolute left-[calc(50%-12px)] rotate-180' : 'rotate-[0deg]',\n )}\n style={\n {\n transition: 'rotate 0.3s, left 0.3s',\n opacity: 'calc((1 - var(--anchorSupport)) * 1)',\n } as React.CSSProperties\n }\n />\n </div>\n <span className=\"sr-only\">{isExpanded ? collapseLabel : expandLabel}</span>\n </span>\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx('absolute', isExpanded ? 'rotate-180' : 'rotate-[0deg]')}\n style={\n {\n positionAnchor: isExpanded ? '--middle-anchor' : '--label-anchor',\n left: 'anchor(left)',\n top: 'anchor(top)',\n transition: 'left 0.3s, rotate 0.3s',\n } as React.CSSProperties\n }\n />\n {showCheckIcon && (\n <Icon\n name=\"CheckDefault\"\n width=\"24px\"\n aria-hidden=\"true\"\n className={clsx('transition-opacity duration-200', isExpanded && 'opacity-0')}\n />\n )}\n </button>\n\n <div\n className={clsx(\n 'grid overflow-hidden transition-[grid-template-rows,opacity] duration-500',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr] opacity-0',\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-8 pb-8\" id={contentId}>\n {children}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ComponentProps } from 'react';
2
+ import { Theme } from './types/Theme';
3
+ export interface CountdownLabels {
4
+ days: string;
5
+ hours: string;
6
+ minutes: string;
7
+ seconds: string;
8
+ }
9
+ export interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {
10
+ countdown: {
11
+ labels: CountdownLabels;
12
+ to: string;
13
+ };
14
+ theme?: Theme;
15
+ }
16
+ export declare function Countdown({ className, countdown, theme, ...props }: CountdownProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { t as e } from "../chunks/clsx.js";
3
+ import { FlipCard as t } from "./FlipCard.js";
4
+ import { useEffect as n, useState as r } from "react";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
+ //#region lib/ui/Countdown.tsx
7
+ var o = 1e3, s = o * 60, c = s * 60, l = c * 24, u = (e) => Math.max(Math.floor(e / l), 0), d = (e) => Math.max(Math.floor(e % l / c), 0), f = (e) => Math.max(Math.floor(e % c / s), 0), p = (e) => Math.max(Math.floor(e % s / o), 0);
8
+ function m({ className: n, countdown: r, theme: o = "white", ...s }) {
9
+ let { to: c, labels: l } = r, [u, d, f, p] = h(c), m = [
10
+ [u, l.days],
11
+ [d, l.hours],
12
+ [f, l.minutes],
13
+ [p, l.seconds]
14
+ ];
15
+ return /* @__PURE__ */ i("div", {
16
+ "data-name": "Countdown",
17
+ role: "timer",
18
+ ...s,
19
+ dir: "ltr",
20
+ className: e("flex gap-x-4", n),
21
+ children: m.map(([e, n], r) => {
22
+ let s = m.slice(0, r).every(([e]) => e === 0), c = e === 0 && s ? "black" : o;
23
+ return /* @__PURE__ */ a("div", {
24
+ className: "space-y-4",
25
+ children: [/* @__PURE__ */ i("div", {
26
+ className: "flex flex-row items-center gap-x-2 px-2",
27
+ children: e.toString().padStart(2, "0").split("").map((e, n) => /* @__PURE__ */ i(t, {
28
+ theme: c,
29
+ value: parseInt(e)
30
+ }, n))
31
+ }), /* @__PURE__ */ i("span", {
32
+ className: "text-b5 block max-w-58 truncate text-center",
33
+ children: n
34
+ })]
35
+ }, n);
36
+ })
37
+ });
38
+ }
39
+ function h(e) {
40
+ let t = new Date(e).getTime(), i = t - Date.now(), [a, o] = r(() => u(i)), [s, c] = r(() => d(i)), [l, m] = r(() => f(i)), [h, g] = r(() => p(i));
41
+ return n(() => {
42
+ let e = setInterval(() => {
43
+ let n = t - Date.now();
44
+ if (n < 0) {
45
+ clearInterval(e);
46
+ return;
47
+ }
48
+ o(u(n)), c(d(n)), m(f(n)), g(p(n));
49
+ }, 1e3);
50
+ return () => clearInterval(e);
51
+ }, [t]), [
52
+ a,
53
+ s,
54
+ l,
55
+ h
56
+ ];
57
+ }
58
+ //#endregion
59
+ export { m as Countdown };
60
+
61
+ //# sourceMappingURL=Countdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Countdown.js","names":[],"sources":["../../lib/ui/Countdown.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { FlipCard } from './FlipCard';\nimport type { Theme } from './types/Theme';\n\nexport interface CountdownLabels {\n days: string;\n hours: string;\n minutes: string;\n seconds: string;\n}\n\nexport interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {\n countdown: {\n labels: CountdownLabels;\n to: string;\n };\n theme?: Theme;\n}\n\nconst ONE_SEC = 1000;\nconst ONE_MIN = ONE_SEC * 60;\nconst ONE_HOUR = ONE_MIN * 60;\nconst ONE_DAY = ONE_HOUR * 24;\n\nconst getDay = (distance: number) => Math.max(Math.floor(distance / ONE_DAY), 0);\nconst getHour = (distance: number) => Math.max(Math.floor((distance % ONE_DAY) / ONE_HOUR), 0);\nconst getMinute = (distance: number) => Math.max(Math.floor((distance % ONE_HOUR) / ONE_MIN), 0);\nconst getSecond = (distance: number) => Math.max(Math.floor((distance % ONE_MIN) / ONE_SEC), 0);\n\nexport function Countdown({ className, countdown, theme = 'white', ...props }: CountdownProps) {\n const { to, labels } = countdown;\n const [days, hours, minutes, seconds] = useCountdown(to);\n\n const structure: [number, string][] = [\n [days, labels.days],\n [hours, labels.hours],\n [minutes, labels.minutes],\n [seconds, labels.seconds],\n ];\n\n return (\n <div\n data-name=\"Countdown\"\n role=\"timer\"\n {...props}\n dir=\"ltr\"\n className={clsx('flex gap-x-4', className)}\n >\n {structure.map(([division, label], index) => {\n const areAllPreviousZero = structure.slice(0, index).every(([d]) => d === 0);\n const divisionTheme = division === 0 && areAllPreviousZero ? 'black' : theme;\n\n return (\n <div className=\"space-y-4\" key={label}>\n <div className=\"flex flex-row items-center gap-x-2 px-2\">\n {division\n .toString()\n .padStart(2, '0')\n .split('')\n .map((digit, i) => (\n <FlipCard key={i} theme={divisionTheme} value={parseInt(digit)} />\n ))}\n </div>\n <span className=\"text-b5 block max-w-58 truncate text-center\">{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction useCountdown(to: string): [number, number, number, number] {\n const toMs = new Date(to).getTime();\n const distance = toMs - Date.now();\n const [days, setDays] = useState(() => getDay(distance));\n const [hours, setHours] = useState(() => getHour(distance));\n const [minutes, setMinutes] = useState(() => getMinute(distance));\n const [seconds, setSeconds] = useState(() => getSecond(distance));\n\n useEffect(() => {\n const interval = setInterval(() => {\n const dist = toMs - Date.now();\n if (dist < 0) {\n clearInterval(interval);\n return;\n }\n setDays(getDay(dist));\n setHours(getHour(dist));\n setMinutes(getMinute(dist));\n setSeconds(getSecond(dist));\n }, 1000);\n\n return () => clearInterval(interval);\n }, [toMs]);\n\n return [days, hours, minutes, seconds];\n}\n"],"mappings":";;;;;;AAuBA,IAAM,IAAU,KACV,IAAU,IAAU,IACpB,IAAW,IAAU,IACrB,IAAU,IAAW,IAErB,KAAU,MAAqB,KAAK,IAAI,KAAK,MAAM,IAAW,EAAQ,EAAE,EAAE,EAC1E,KAAW,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAS,EAAE,EAAE,EACxF,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAY,EAAQ,EAAE,EAAE,EAC1F,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAQ,EAAE,EAAE;AAE/F,SAAgB,EAAU,EAAE,cAAW,cAAW,WAAQ,SAAS,GAAG,KAAyB;CAC7F,IAAM,EAAE,OAAI,cAAW,GACjB,CAAC,GAAM,GAAO,GAAS,KAAW,EAAa,EAAG,EAElD,IAAgC;EACpC,CAAC,GAAM,EAAO,KAAK;EACnB,CAAC,GAAO,EAAO,MAAM;EACrB,CAAC,GAAS,EAAO,QAAQ;EACzB,CAAC,GAAS,EAAO,QAAA;EAClB;AAED,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,GAAI;EACJ,KAAI;EACJ,WAAW,EAAK,gBAAgB,EAAU;YAEzC,EAAU,KAAK,CAAC,GAAU,IAAQ,MAAU;GAC3C,IAAM,IAAqB,EAAU,MAAM,GAAG,EAAM,CAAC,OAAO,CAAC,OAAO,MAAM,EAAE,EACtE,IAAgB,MAAa,KAAK,IAAqB,UAAU;AAEvE,UACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EACE,UAAU,CACV,SAAS,GAAG,IAAI,CAChB,MAAM,GAAG,CACT,KAAK,GAAO,MACX,kBAAC,GAAD;MAAkB,OAAO;MAAe,OAAO,SAAS,EAAA;MAAU,EAAnD,EAAmD,CAAA;KAElE,CAAA,EACN,kBAAC,QAAD;KAAM,WAAU;eAA+C;KAAa,CAAA,CAAA;MAV9C,EAW1B;;EAGN,CAAA;;AAIV,SAAS,EAAa,GAA8C;CAClE,IAAM,IAAO,IAAI,KAAK,EAAG,CAAC,SAAS,EAC7B,IAAW,IAAO,KAAK,KAAK,EAC5B,CAAC,GAAM,KAAW,QAAe,EAAO,EAAS,CAAC,EAClD,CAAC,GAAO,KAAY,QAAe,EAAQ,EAAS,CAAC,EACrD,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC,EAC3D,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC;AAkBjE,QAhBA,QAAgB;EACd,IAAM,IAAW,kBAAkB;GACjC,IAAM,IAAO,IAAO,KAAK,KAAK;AAC9B,OAAI,IAAO,GAAG;AACZ,kBAAc,EAAS;AACvB;;AAKF,GAHA,EAAQ,EAAO,EAAK,CAAC,EACrB,EAAS,EAAQ,EAAK,CAAC,EACvB,EAAW,EAAU,EAAK,CAAC,EAC3B,EAAW,EAAU,EAAK,CAAC;KAC1B,IAAK;AAER,eAAa,cAAc,EAAS;IACnC,CAAC,EAAK,CAAC,EAEH;EAAC;EAAM;EAAO;EAAS;EAAQ"}
@@ -0,0 +1,26 @@
1
+ import { Locale } from 'date-fns';
2
+ import { FunctionComponent } from 'react';
3
+ import { DateRange, Matcher, Modifiers } from 'react-day-picker';
4
+ import { DayDataProps } from './Day';
5
+ export declare const getMonthHeadingId: (date: Date) => string;
6
+ interface Labels {
7
+ seeNextMonth: string;
8
+ seePreviousMonth: string;
9
+ }
10
+ type StatusLabelMap = Partial<Record<'green' | 'orange' | 'outline', string>>;
11
+ type SelectRangeHandler = (selected: DateRange | undefined, triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => void;
12
+ export interface DatepickerProps {
13
+ dates?: DayDataProps[];
14
+ defaultMonth?: Date;
15
+ disabledDays?: Matcher | Matcher[];
16
+ formatDurationsLabel?: (count: number) => string;
17
+ fromMonth?: Date;
18
+ labels: Labels;
19
+ locale?: Locale;
20
+ maxNumberOfMonths?: number;
21
+ onSelect?: SelectRangeHandler;
22
+ selected?: DateRange;
23
+ statusLabels?: StatusLabelMap;
24
+ }
25
+ export declare const Datepicker: FunctionComponent<DatepickerProps>;
26
+ export {};
@@ -0,0 +1,2 @@
1
+ import { n as e, t } from "../chunks/Datepicker.js";
2
+ export { t as Datepicker, e as getMonthHeadingId };
package/ui/Day.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import { FunctionComponent, PropsWithChildren } from 'react';
2
+ import { DayButtonProps } from 'react-day-picker';
3
+ export interface DayDataProps {
4
+ /** Date in 'yyyy-MM-dd' format */
5
+ id: string;
6
+ price: string | null;
7
+ status: 'default' | 'green' | 'orange' | 'outline';
8
+ }
9
+ export interface DayProps {
10
+ formatDurationsLabel?: (count: number) => string;
11
+ label?: string;
12
+ price?: string | null;
13
+ status?: DayDataProps['status'];
14
+ }
15
+ interface InternalDayProps {
16
+ dateTime: string;
17
+ disabled?: boolean;
18
+ label?: string;
19
+ price?: string | null;
20
+ selected?: boolean;
21
+ status?: DayDataProps['status'];
22
+ }
23
+ export declare const _Day: FunctionComponent<PropsWithChildren<InternalDayProps>>;
24
+ export declare const Day: FunctionComponent<DayProps & DayButtonProps>;
25
+ export {};
package/ui/Day.js ADDED
@@ -0,0 +1,2 @@
1
+ import { n as e, t } from "../chunks/Day.js";
2
+ export { t as Day, e as _Day };
package/ui/Dropdown.d.ts CHANGED
@@ -1,6 +1,23 @@
1
- import { ComponentPropsWithoutRef, PropsWithChildren } from 'react';
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
2
  import { IconicNames } from '@clubmed/trident-icons';
3
- export interface DropdownProps extends ComponentPropsWithoutRef<'button'> {
3
+ interface DropdownRenderContext {
4
+ close: () => void;
5
+ open: boolean;
6
+ toggle: () => void;
7
+ }
8
+ type DropdownChildren = ReactNode | ((context: DropdownRenderContext) => ReactNode);
9
+ export interface DropdownProps extends Omit<ComponentPropsWithoutRef<'button'>, 'children'> {
10
+ children?: DropdownChildren;
4
11
  icon?: IconicNames;
5
12
  }
6
- export declare function Dropdown({ icon, className, children: initialChildren, ...attrs }: PropsWithChildren<DropdownProps>): import("react/jsx-runtime").JSX.Element;
13
+ export declare function useDropdown(initialChildren?: DropdownChildren): {
14
+ children: ReactNode[];
15
+ close: () => void;
16
+ containerRef: import('react').RefObject<HTMLDivElement | null>;
17
+ isLeaving: boolean;
18
+ label: ReactNode[];
19
+ open: boolean;
20
+ toggle: () => void;
21
+ };
22
+ export declare function Dropdown({ icon, className, children: initialChildren, ...attrs }: DropdownProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
package/ui/Dropdown.js CHANGED
@@ -2,46 +2,80 @@ import { t as e } from "../chunks/clsx.js";
2
2
  import { twMerge as t } from "./helpers/twMerge.js";
3
3
  import { useSlots as n } from "./hooks/useSlots.js";
4
4
  import { useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
5
- import { Icon as s } from "@clubmed/trident-icons";
6
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { Icon as l } from "@clubmed/trident-icons";
7
7
  //#region lib/ui/Dropdown.tsx
8
- function u({ icon: u = "ArrowOutlinedDown", className: d, children: f, ...p }) {
9
- let { label: m, children: h } = n(f, ["label"]), [g, _] = o(!1), v = a(null), y = a(g), b = y.current, x = !g && b;
10
- y.current = g;
11
- let S = r(() => {
12
- _((e) => !e);
13
- }, []);
8
+ function u(e) {
9
+ let [t, s] = o(!1), c = a(null), l = a(t), u = l.current, d = !t && u;
10
+ l.current = t;
11
+ let f = r(() => {
12
+ s((e) => !e);
13
+ }, []), p = r(() => {
14
+ s(!1);
15
+ }, []), m = typeof e == "function" ? e({
16
+ close: p,
17
+ open: t,
18
+ toggle: f
19
+ }) : e, { label: h, children: g } = n(m, ["label"]);
14
20
  return i(() => {
15
- if (!g) return;
21
+ if (!c.current) return;
22
+ let e = c.current.querySelectorAll(".dropdown-panel a[href], .dropdown-panel [data-dropdown-item]"), t = Array.from(e, (e) => {
23
+ let t = () => {
24
+ p();
25
+ };
26
+ return e.addEventListener("click", t), {
27
+ handleItemClick: t,
28
+ item: e
29
+ };
30
+ });
31
+ return () => {
32
+ t.forEach(({ handleItemClick: e, item: t }) => {
33
+ t.removeEventListener("click", e);
34
+ });
35
+ };
36
+ }, [p, m]), i(() => {
37
+ if (!t) return;
16
38
  let e = (e) => {
17
- !v.current || e.composedPath().includes(v.current) || _(!1);
39
+ !c.current || e.composedPath().includes(c.current) || p();
18
40
  };
19
- return document.addEventListener("pointerdown", e), () => {
20
- document.removeEventListener("pointerdown", e);
41
+ return document.addEventListener("click", e), () => {
42
+ document.removeEventListener("click", e);
21
43
  };
22
- }, [g]), /* @__PURE__ */ l("div", {
23
- ref: v,
24
- className: t("flex items-center gap-8 relative", d),
25
- children: [/* @__PURE__ */ l("button", {
44
+ }, [p, t]), {
45
+ children: g,
46
+ close: p,
47
+ containerRef: c,
48
+ isLeaving: d,
49
+ label: h,
50
+ open: t,
51
+ toggle: f
52
+ };
53
+ }
54
+ function d({ icon: n = "ArrowOutlinedDown", className: r, children: i, ...a }) {
55
+ let { children: o, containerRef: d, isLeaving: f, label: p, open: m, toggle: h } = u(i);
56
+ return /* @__PURE__ */ c("div", {
57
+ ref: d,
58
+ className: t("flex items-center gap-8 relative", r),
59
+ children: [/* @__PURE__ */ c("button", {
26
60
  tabIndex: -1,
27
- ...p,
61
+ ...a,
28
62
  className: "flex gap-8 items-center relative",
29
- onClick: S,
30
- children: [m, /* @__PURE__ */ c(s, {
31
- name: u,
63
+ onClick: h,
64
+ children: [p, /* @__PURE__ */ s(l, {
65
+ name: n,
32
66
  className: "w-30"
33
67
  })]
34
- }), /* @__PURE__ */ c("div", {
35
- className: t(e("z-5 flex items-center gap-12 bg-white rounded-16 border-1 border-lightGrey absolute top-[calc(100%+8px)] right-0 text-black p-20 min-w-[120px] origin-center will-change[transform,opacity]", {
36
- "animate-zoomIn": g,
37
- "animate-zoomOut": !g && x,
38
- "opacity-0 scale-90 pointer-events-none": !g && !x
68
+ }), /* @__PURE__ */ s("div", {
69
+ className: t(e("dropdown-panel z-5 flex items-center gap-12 bg-white rounded-16 border-1 border-lightGrey absolute top-[calc(100%+8px)] right-0 text-black p-20 min-w-[120px] origin-center will-change[transform,opacity]", {
70
+ "animate-zoom-in": m,
71
+ "animate-zoom-out": !m && f,
72
+ "opacity-0 scale-90 pointer-events-none": !m && !f
39
73
  })),
40
- children: h
74
+ children: o
41
75
  })]
42
76
  });
43
77
  }
44
78
  //#endregion
45
- export { u as Dropdown };
79
+ export { d as Dropdown, u as useDropdown };
46
80
 
47
81
  //# sourceMappingURL=Dropdown.js.map