@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,19 +0,0 @@
1
- @layer components {
2
- .tab-focus-pill {
3
- transform: translateX(
4
- calc(
5
- var(--tab-index, 0) * -100% + var(--active-tab, 0) * 100% -
6
- (var(--spacing) * 4 * (var(--tab-index) - var(--active-tab, 0)))
7
- )
8
- );
9
- }
10
-
11
- [dir='rtl'] .tab-focus-pill {
12
- transform: translateX(
13
- calc(
14
- var(--tab-index) * 100% + var(--active-tab) * -100% +
15
- (var(--spacing) * 4 * (var(--tab-index) - var(--active-tab)))
16
- )
17
- );
18
- }
19
- }
@@ -0,0 +1,30 @@
1
+ import { ComponentPropsWithoutRef, FunctionComponent, ReactNode } from 'react';
2
+ export interface AccordionItem {
3
+ id?: string;
4
+ header: ReactNode;
5
+ content: ReactNode;
6
+ }
7
+ export interface AccordionProps extends ComponentPropsWithoutRef<'div'> {
8
+ items: AccordionItem[];
9
+ /**
10
+ * When true, multiple panels can be open simultaneously.
11
+ * @default false
12
+ */
13
+ allowMultiple?: boolean;
14
+ /**
15
+ * A render function that wraps each item's `header` inside the trigger `<button>`.
16
+ * Receives `item.header` as its argument and must return a ReactNode.
17
+ * Useful for providing a consistent layout (e.g. flex row with a chevron) across all items
18
+ * without repeating the markup in every `AccordionItem.header`.
19
+ *
20
+ * @example
21
+ * triggerWrapper={(children) => (
22
+ * <span className="flex w-full items-center justify-between py-16 font-semibold">
23
+ * {children}
24
+ * <ChevronIcon />
25
+ * </span>
26
+ * )}
27
+ */
28
+ triggerWrapper?: (children: ReactNode) => ReactNode;
29
+ }
30
+ export declare const Accordion: FunctionComponent<AccordionProps>;
@@ -0,0 +1,71 @@
1
+ import { ElasticHeight as e } from "./ElasticHeight.js";
2
+ import { useCallback as t, useEffect as n, useId as r, useRef as i, useState as a } from "react";
3
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ //#region lib/ui/Accordion.tsx
5
+ var c = ({ items: c, allowMultiple: l = !1, triggerWrapper: u, className: d, ...f }) => {
6
+ let p = r(), m = i([]), [h, g] = a(() => /* @__PURE__ */ new Set());
7
+ n(() => {
8
+ l || g((e) => {
9
+ if (e.size <= 1) return e;
10
+ let [t] = e;
11
+ return new Set([t]);
12
+ });
13
+ }, [l]);
14
+ let _ = t((e) => {
15
+ g((t) => {
16
+ let n = new Set(t);
17
+ return n.has(e) ? n.delete(e) : (l || n.clear(), n.add(e)), n;
18
+ });
19
+ }, [l]), v = t((e) => {
20
+ _(e.currentTarget.dataset.itemId);
21
+ }, [_]), y = t((e) => {
22
+ let t = c.length, n = Number(e.currentTarget.dataset.index), r = null;
23
+ switch (e.code) {
24
+ case "ArrowDown":
25
+ e.preventDefault(), r = (n + 1) % t;
26
+ break;
27
+ case "ArrowUp":
28
+ e.preventDefault(), r = (n - 1 + t) % t;
29
+ break;
30
+ case "Home":
31
+ e.preventDefault(), r = 0;
32
+ break;
33
+ case "End":
34
+ e.preventDefault(), r = t - 1;
35
+ break;
36
+ }
37
+ r !== null && m.current[r]?.focus();
38
+ }, [c.length]), b = i(/* @__PURE__ */ new Map()), x = t((e) => (b.current.has(e) || b.current.set(e, (t) => {
39
+ m.current[e] = t;
40
+ }), b.current.get(e)), []);
41
+ return /* @__PURE__ */ o("div", {
42
+ ...f,
43
+ className: d,
44
+ children: c.map((t, n) => {
45
+ let r = t.id ?? `${p}-${n}`, i = h.has(r), a = `accordion-header-${p}-${n}`, c = `accordion-panel-${p}-${n}`;
46
+ return /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("button", {
47
+ id: a,
48
+ ref: x(n),
49
+ type: "button",
50
+ "aria-expanded": i,
51
+ "aria-controls": c,
52
+ "data-item-id": r,
53
+ "data-index": n,
54
+ onClick: v,
55
+ onKeyDown: y,
56
+ className: "outline-none focus-visible:ring-4 focus-visible:ring-black w-full rounded-pill",
57
+ children: u ? u(t.header) : t.header
58
+ }), /* @__PURE__ */ o(e, {
59
+ id: c,
60
+ role: "region",
61
+ "aria-labelledby": a,
62
+ isExpanded: i,
63
+ children: t.content
64
+ })] }, r);
65
+ })
66
+ });
67
+ };
68
+ //#endregion
69
+ export { c as Accordion };
70
+
71
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","names":[],"sources":["../../lib/ui/Accordion.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { ElasticHeight } from './ElasticHeight';\n\nexport interface AccordionItem {\n id?: string;\n header: ReactNode;\n content: ReactNode;\n}\n\nexport interface AccordionProps extends ComponentPropsWithoutRef<'div'> {\n items: AccordionItem[];\n /**\n * When true, multiple panels can be open simultaneously.\n * @default false\n */\n allowMultiple?: boolean;\n /**\n * A render function that wraps each item's `header` inside the trigger `<button>`.\n * Receives `item.header` as its argument and must return a ReactNode.\n * Useful for providing a consistent layout (e.g. flex row with a chevron) across all items\n * without repeating the markup in every `AccordionItem.header`.\n *\n * @example\n * triggerWrapper={(children) => (\n * <span className=\"flex w-full items-center justify-between py-16 font-semibold\">\n * {children}\n * <ChevronIcon />\n * </span>\n * )}\n */\n triggerWrapper?: (children: ReactNode) => ReactNode;\n}\n\nexport const Accordion: FunctionComponent<AccordionProps> = ({\n items,\n allowMultiple = false,\n triggerWrapper,\n className,\n ...attrs\n}) => {\n const uid = useId();\n const buttonRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const [openPanels, setOpenPanels] = useState<Set<string>>(() => new Set());\n\n useEffect(() => {\n if (!allowMultiple) {\n setOpenPanels((prev) => {\n if (prev.size <= 1) return prev;\n const [first] = prev;\n return new Set([first]);\n });\n }\n }, [allowMultiple]);\n\n const toggle = useCallback(\n (id: string) => {\n setOpenPanels((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n if (!allowMultiple) {\n next.clear();\n }\n next.add(id);\n }\n return next;\n });\n },\n [allowMultiple],\n );\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n toggle(e.currentTarget.dataset.itemId!);\n },\n [toggle],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n const count = items.length;\n const index = Number(event.currentTarget.dataset.index);\n let targetIndex: number | null = null;\n\n switch (event.code) {\n case 'ArrowDown':\n event.preventDefault();\n targetIndex = (index + 1) % count;\n break;\n case 'ArrowUp':\n event.preventDefault();\n targetIndex = (index - 1 + count) % count;\n break;\n case 'Home':\n event.preventDefault();\n targetIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n targetIndex = count - 1;\n break;\n }\n\n if (targetIndex !== null) {\n buttonRefs.current[targetIndex]?.focus();\n }\n },\n [items.length],\n );\n\n const refCallbacks = useRef(new Map<number, (el: HTMLButtonElement | null) => void>());\n const getRefCallback = useCallback((index: number) => {\n if (!refCallbacks.current.has(index)) {\n refCallbacks.current.set(index, (el: HTMLButtonElement | null) => {\n buttonRefs.current[index] = el;\n });\n }\n return refCallbacks.current.get(index)!;\n }, []);\n\n return (\n <div {...attrs} className={className}>\n {items.map((item, index) => {\n const resolvedId = item.id ?? `${uid}-${index}`;\n const isOpen = openPanels.has(resolvedId);\n const headerId = `accordion-header-${uid}-${index}`;\n const panelId = `accordion-panel-${uid}-${index}`;\n\n return (\n <div key={resolvedId}>\n <button\n id={headerId}\n ref={getRefCallback(index)}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n data-item-id={resolvedId}\n data-index={index}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className=\"outline-none focus-visible:ring-4 focus-visible:ring-black w-full rounded-pill\"\n >\n {triggerWrapper ? triggerWrapper(item.header) : item.header}\n </button>\n <ElasticHeight\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n isExpanded={isOpen}\n >\n {item.content}\n </ElasticHeight>\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;AA4CA,IAAa,KAAgD,EAC3D,UACA,mBAAgB,IAChB,mBACA,cACA,GAAG,QACC;CACJ,IAAM,IAAM,GAAO,EACb,IAAa,EAAqC,EAAE,CAAC,EACrD,CAAC,GAAY,KAAiB,wBAA4B,IAAI,KAAK,CAAC;AAE1E,SAAgB;AACd,EAAK,KACH,GAAe,MAAS;AACtB,OAAI,EAAK,QAAQ,EAAG,QAAO;GAC3B,IAAM,CAAC,KAAS;AAChB,UAAO,IAAI,IAAI,CAAC,EAAM,CAAC;IACvB;IAEH,CAAC,EAAc,CAAC;CAEnB,IAAM,IAAS,GACZ,MAAe;AACd,KAAe,MAAS;GACtB,IAAM,IAAO,IAAI,IAAI,EAAK;AAS1B,UARI,EAAK,IAAI,EAAG,GACd,EAAK,OAAO,EAAG,IAEV,KACH,EAAK,OAAO,EAEd,EAAK,IAAI,EAAG,GAEP;IACP;IAEJ,CAAC,EAAc,CAChB,EAEK,IAAc,GACjB,MAAqC;AACpC,IAAO,EAAE,cAAc,QAAQ,OAAQ;IAEzC,CAAC,EAAO,CACT,EAEK,IAAgB,GACnB,MAA4C;EAC3C,IAAM,IAAQ,EAAM,QACd,IAAQ,OAAO,EAAM,cAAc,QAAQ,MAAM,EACnD,IAA6B;AAEjC,UAAQ,EAAM,MAAd;GACE,KAAK;AAEH,IADA,EAAM,gBAAgB,EACtB,KAAe,IAAQ,KAAK;AAC5B;GACF,KAAK;AAEH,IADA,EAAM,gBAAgB,EACtB,KAAe,IAAQ,IAAI,KAAS;AACpC;GACF,KAAK;AAEH,IADA,EAAM,gBAAgB,EACtB,IAAc;AACd;GACF,KAAK;AAEH,IADA,EAAM,gBAAgB,EACtB,IAAc,IAAQ;AACtB;;AAGJ,EAAI,MAAgB,QAClB,EAAW,QAAQ,IAAc,OAAO;IAG5C,CAAC,EAAM,OAAO,CACf,EAEK,IAAe,kBAAO,IAAI,KAAqD,CAAC,EAChF,IAAiB,GAAa,OAC7B,EAAa,QAAQ,IAAI,EAAM,IAClC,EAAa,QAAQ,IAAI,IAAQ,MAAiC;AAChE,IAAW,QAAQ,KAAS;GAC5B,EAEG,EAAa,QAAQ,IAAI,EAAM,GACrC,EAAE,CAAC;AAEN,QACE,kBAAC,OAAD;EAAK,GAAI;EAAkB;YACxB,EAAM,KAAK,GAAM,MAAU;GAC1B,IAAM,IAAa,EAAK,MAAM,GAAG,EAAI,GAAG,KAClC,IAAS,EAAW,IAAI,EAAW,EACnC,IAAW,oBAAoB,EAAI,GAAG,KACtC,IAAU,mBAAmB,EAAI,GAAG;AAE1C,UACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,UAAD;IACE,IAAI;IACJ,KAAK,EAAe,EAAM;IAC1B,MAAK;IACL,iBAAe;IACf,iBAAe;IACf,gBAAc;IACd,cAAY;IACZ,SAAS;IACT,WAAW;IACX,WAAU;cAET,IAAiB,EAAe,EAAK,OAAO,GAAG,EAAK;IAC9C,CAAA,EACT,kBAAC,GAAD;IACE,IAAI;IACJ,MAAK;IACL,mBAAiB;IACjB,YAAY;cAEX,EAAK;IACQ,CAAA,CACZ,EAAA,EAvBI,EAuBJ;IAER;EACE,CAAA"}
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { t as e } from "../chunks/clsx.js";
3
- import t from "./hooks/useResizeObserver.js";
4
- import { ElasticHeight as n } from "./ElasticHeight.js";
5
- import { Colors as r, getBgColor as i, getBorderColor as a, getTextColor as o } from "./helpers/colors/colors.js";
6
- import { useCountdown as s } from "./hooks/useCountdown.js";
3
+ import { ElasticHeight as t } from "./ElasticHeight.js";
4
+ import { Colors as n, getBgColor as r, getBorderColor as i, getTextColor as a } from "./helpers/colors/colors.js";
5
+ import { useCountdown as o } from "./hooks/useCountdown.js";
6
+ import s from "./hooks/useResizeObserver.js";
7
7
  import { useEffect as c, useId as l, useRef as u, useState as d } from "react";
8
- import { Icon as f } from "@clubmed/trident-icons";
9
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
8
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
9
+ import { Icon as m } from "@clubmed/trident-icons";
10
10
  //#region lib/ui/AdvancedToast.tsx
11
- var h = ({ className: h, title: g, body: _, icon: v, isVisible: y, labels: b, children: x, accentColor: S = r.orange, duration: C = 1e4, onClose: w, toastId: T, updateHeight: E, ...D }) => {
12
- let O = l(), [k, A] = d(!1), [j, M] = d(!1), N = u(null), { progress: P } = s({
11
+ var h = ({ className: h, title: g, body: _, icon: v, isVisible: y, labels: b, children: x, accentColor: S = n.orange, duration: C = 1e4, onClose: w, toastId: T, updateHeight: E, ...D }) => {
12
+ let O = l(), [k, A] = d(!1), [j, M] = d(!1), N = u(null), { progress: P } = o({
13
13
  duration: C,
14
14
  isPaused: j,
15
15
  isVisible: y
@@ -18,65 +18,68 @@ var h = ({ className: h, title: g, body: _, icon: v, isVisible: y, labels: b, ch
18
18
  P === 100 && w?.();
19
19
  }, [P, w]);
20
20
  let F = () => M(!0), I = () => M(!1), L = () => M(!1);
21
- return t({
21
+ return s({
22
22
  ref: N,
23
23
  onResize: () => {
24
24
  N.current && E(T, N.current.offsetHeight);
25
25
  }
26
- }), /* @__PURE__ */ m("div", {
26
+ }), /* @__PURE__ */ p("div", {
27
27
  ref: N,
28
28
  ...D,
29
- className: e(y ? "animate-slideRightEnter" : "animate-slideRightExit opacity-0", "relative isolate flex gap-x-20 rounded-16 bg-white p-20 text-black transition-opacity duration-300 border-1 overflow-hidden", a(S), h),
29
+ className: e(y ? "animate-slide-right-enter" : "animate-slide-right-exit opacity-0", "relative isolate flex gap-x-20 rounded-16 bg-white p-20 text-black transition-opacity duration-300 border-1 overflow-hidden", i(S), h),
30
30
  role: "note",
31
31
  onMouseDown: F,
32
32
  onMouseUp: I,
33
33
  onMouseLeave: L,
34
34
  children: [
35
- /* @__PURE__ */ p(f, {
36
- name: v,
37
- width: "30px",
38
- className: e("flex-shrink-0 pt-4", o(S))
35
+ /* @__PURE__ */ f("span", {
36
+ className: e("w-30 h-30 pt-4", a(S)),
37
+ children: /* @__PURE__ */ f(m, {
38
+ name: v,
39
+ width: "30px",
40
+ className: e("flex-shrink-0")
41
+ })
39
42
  }),
40
- /* @__PURE__ */ m("div", {
43
+ /* @__PURE__ */ p("div", {
41
44
  className: "flex flex-1 flex-col gap-12 pe-24 text-b4",
42
- children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
45
+ children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
43
46
  className: " font-bold",
44
47
  id: O,
45
48
  children: g
46
- }), /* @__PURE__ */ p("p", { children: _ })] }), x && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("button", {
49
+ }), /* @__PURE__ */ f("p", { children: _ })] }), x && /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("button", {
47
50
  onClick: () => A(!k),
48
51
  "aria-expanded": k,
49
- className: "flex w-fit items-center gap-8 text-b5 font-normal",
52
+ className: "flex w-fit items-center gap-8 text-b5 font-normal outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2",
50
53
  type: "button",
51
- children: [/* @__PURE__ */ p("span", { children: b.details }), /* @__PURE__ */ p(f, {
54
+ children: [/* @__PURE__ */ f("span", { children: b.details }), /* @__PURE__ */ f(m, {
52
55
  name: "ArrowDefaultDown",
53
56
  width: "24px",
54
57
  style: { rotate: k ? "180deg" : "0deg" },
55
58
  className: "transition-all duration-300"
56
59
  })]
57
- }), /* @__PURE__ */ p(n, {
60
+ }), /* @__PURE__ */ f(t, {
58
61
  isExpanded: k,
59
- children: /* @__PURE__ */ p("div", {
62
+ children: /* @__PURE__ */ f("div", {
60
63
  className: "pt-4",
61
64
  children: x
62
65
  })
63
66
  })] })]
64
67
  }),
65
- w && /* @__PURE__ */ p("button", {
68
+ w && /* @__PURE__ */ f("button", {
66
69
  "aria-describedby": O,
67
70
  "aria-label": b.close,
68
- className: "absolute end-0 top-0 mt-20 me-13 text-black",
71
+ className: "absolute end-0 top-0 mt-20 me-13 text-black outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2",
69
72
  onClick: w,
70
73
  type: "button",
71
- children: /* @__PURE__ */ p(f, {
74
+ children: /* @__PURE__ */ f(m, {
72
75
  name: "CrossDefault",
73
76
  width: "24px"
74
77
  })
75
78
  }),
76
- C !== !1 && /* @__PURE__ */ p("div", {
79
+ C !== !1 && /* @__PURE__ */ f("div", {
77
80
  className: "absolute bottom-0 left-0 right-0 h-4 overflow-hidden rounded-b-16",
78
- children: /* @__PURE__ */ p("div", {
79
- className: i(S),
81
+ children: /* @__PURE__ */ f("div", {
82
+ className: r(S),
80
83
  style: {
81
84
  width: "100%",
82
85
  height: "100%",
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedToast.js","names":[],"sources":["../../lib/ui/AdvancedToast.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n} from 'react';\n\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport { ElasticHeight } from './ElasticHeight';\nimport { Colors, getBgColor, getBorderColor, getTextColor } from './helpers/colors/colors';\nimport { useCountdown } from './hooks/useCountdown';\nimport useResizeObserver from './hooks/useResizeObserver';\n\ninterface Props extends ComponentPropsWithoutRef<'div'> {\n title: string;\n body: string;\n icon: IconicNames;\n isVisible: boolean;\n labels: {\n close: string;\n details: string;\n };\n onClose?: () => void;\n children?: React.ReactNode;\n accentColor?: Colors;\n moreInfoLabel?: string;\n moreInfoHref?: string;\n duration?: false | number;\n toastId: string;\n updateHeight: (id: string, height: number) => void;\n}\n\nexport const AdvancedToast: FunctionComponent<Props> = ({\n className,\n title,\n body,\n icon,\n isVisible,\n labels,\n children,\n accentColor = Colors.orange,\n duration = 10000,\n onClose,\n toastId,\n updateHeight,\n ...attrs\n}) => {\n const id = useId();\n const [isDetailsExpanded, setIsDetailsExpanded] = useState(false);\n const [isPaused, setIsPaused] = useState(false);\n const toastRef = useRef<HTMLDivElement>(null!);\n\n const { progress } = useCountdown({ duration, isPaused, isVisible });\n useEffect(() => {\n if (progress === 100) {\n onClose?.();\n }\n }, [progress, onClose]);\n\n const handleMouseDown = () => setIsPaused(true);\n const handleMouseUp = () => setIsPaused(false);\n const handleMouseLeave = () => setIsPaused(false);\n\n useResizeObserver<HTMLDivElement>({\n ref: toastRef,\n onResize: () => {\n if (toastRef.current) {\n updateHeight(toastId, toastRef.current.offsetHeight);\n }\n },\n });\n\n return (\n <div\n ref={toastRef}\n {...attrs}\n className={clsx(\n isVisible ? 'animate-slideRightEnter' : 'animate-slideRightExit opacity-0',\n 'relative isolate flex gap-x-20 rounded-16 bg-white p-20 text-black transition-opacity duration-300 border-1 overflow-hidden',\n getBorderColor(accentColor),\n className,\n )}\n role=\"note\"\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n >\n <Icon\n name={icon}\n width=\"30px\"\n className={clsx('flex-shrink-0 pt-4', getTextColor(accentColor))}\n />\n <div className=\"flex flex-1 flex-col gap-12 pe-24 text-b4\">\n <div>\n <p className=\" font-bold\" id={id}>\n {title}\n </p>\n <p>{body}</p>\n </div>\n\n {children && (\n <div>\n <button\n onClick={() => setIsDetailsExpanded(!isDetailsExpanded)}\n aria-expanded={isDetailsExpanded}\n className=\"flex w-fit items-center gap-8 text-b5 font-normal\"\n type=\"button\"\n >\n <span>{labels.details}</span>\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n style={{ rotate: isDetailsExpanded ? '180deg' : '0deg' }}\n className=\"transition-all duration-300\"\n />\n </button>\n <ElasticHeight isExpanded={isDetailsExpanded}>\n <div className=\"pt-4\">{children}</div>\n </ElasticHeight>\n </div>\n )}\n </div>\n\n {onClose && (\n <button\n aria-describedby={id}\n aria-label={labels.close}\n className=\"absolute end-0 top-0 mt-20 me-13 text-black\"\n onClick={onClose}\n type=\"button\"\n >\n <Icon name=\"CrossDefault\" width=\"24px\" />\n </button>\n )}\n\n {duration !== false && (\n <div className=\"absolute bottom-0 left-0 right-0 h-4 overflow-hidden rounded-b-16\">\n <div\n className={getBgColor(accentColor)}\n style={{\n width: '100%',\n height: '100%',\n transform: `scaleX(${(100 - progress) / 100})`,\n transformOrigin: 'left',\n transition: 'transform 16ms linear',\n }}\n />\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;AAqCA,IAAa,KAA2C,EACtD,cACA,UACA,SACA,SACA,cACA,WACA,aACA,iBAAc,EAAO,QACrB,cAAW,KACX,YACA,YACA,iBACA,GAAG,QACC;CACJ,IAAM,IAAK,GAAO,EACZ,CAAC,GAAmB,KAAwB,EAAS,GAAM,EAC3D,CAAC,GAAU,KAAe,EAAS,GAAM,EACzC,IAAW,EAAuB,KAAM,EAExC,EAAE,gBAAa,EAAa;EAAE;EAAU;EAAU;EAAW,CAAC;AACpE,SAAgB;AACd,EAAI,MAAa,OACf,KAAW;IAEZ,CAAC,GAAU,EAAQ,CAAC;CAEvB,IAAM,UAAwB,EAAY,GAAK,EACzC,UAAsB,EAAY,GAAM,EACxC,UAAyB,EAAY,GAAM;AAWjD,QATA,EAAkC;EAChC,KAAK;EACL,gBAAgB;AACd,GAAI,EAAS,WACX,EAAa,GAAS,EAAS,QAAQ,aAAa;;EAGzD,CAAC,EAGA,kBAAC,OAAD;EACE,KAAK;EACL,GAAI;EACJ,WAAW,EACT,IAAY,4BAA4B,oCACxC,+HACA,EAAe,EAAY,EAC3B,EACD;EACD,MAAK;EACL,aAAa;EACb,WAAW;EACX,cAAc;YAZhB;GAcE,kBAAC,GAAD;IACE,MAAM;IACN,OAAM;IACN,WAAW,EAAK,sBAAsB,EAAa,EAAY,CAAA;IAC/D,CAAA;GACF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;KAAG,WAAU;KAAiB;eAC3B;KACC,CAAA,EACJ,kBAAC,KAAD,EAAA,UAAI,GAAS,CAAA,CACT,EAAA,CAAA,EAEL,KACC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,UAAD;KACE,eAAe,EAAqB,CAAC,EAAkB;KACvD,iBAAe;KACf,WAAU;KACV,MAAK;eAJP,CAME,kBAAC,QAAD,EAAA,UAAO,EAAO,SAAe,CAAA,EAC7B,kBAAC,GAAD;MACE,MAAK;MACL,OAAM;MACN,OAAO,EAAE,QAAQ,IAAoB,WAAW,QAAQ;MACxD,WAAU;MACV,CAAA,CAAA;QAEJ,kBAAC,GAAD;KAAe,YAAY;eACzB,kBAAC,OAAD;MAAK,WAAU;MAAQ;MAAe,CAAA;KACxB,CAAA,CACZ,EAAA,CAAA,CAAA;;GAIT,KACC,kBAAC,UAAD;IACE,oBAAkB;IAClB,cAAY,EAAO;IACnB,WAAU;IACV,SAAS;IACT,MAAK;cAEL,kBAAC,GAAD;KAAM,MAAK;KAAe,OAAM;KAAS,CAAA;IAClC,CAAA;GAGV,MAAa,MACZ,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,OAAD;KACE,WAAW,EAAW,EAAY;KAClC,OAAO;MACL,OAAO;MACP,QAAQ;MACR,WAAW,WAAW,MAAM,KAAY,IAAI;MAC5C,iBAAiB;MACjB,YAAY;;KAEd,CAAA;IACE,CAAA"}
1
+ {"version":3,"file":"AdvancedToast.js","names":[],"sources":["../../lib/ui/AdvancedToast.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n} from 'react';\n\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport { ElasticHeight } from './ElasticHeight';\nimport { Colors, getBgColor, getBorderColor, getTextColor } from './helpers/colors/colors';\nimport { useCountdown } from './hooks/useCountdown';\nimport useResizeObserver from './hooks/useResizeObserver';\n\ninterface Props extends ComponentPropsWithoutRef<'div'> {\n title: string;\n body: string;\n icon: IconicNames;\n isVisible: boolean;\n labels: {\n close: string;\n details: string;\n };\n onClose?: () => void;\n children?: React.ReactNode;\n accentColor?: Colors;\n moreInfoLabel?: string;\n moreInfoHref?: string;\n duration?: false | number;\n toastId: string;\n updateHeight: (id: string, height: number) => void;\n}\n\nexport const AdvancedToast: FunctionComponent<Props> = ({\n className,\n title,\n body,\n icon,\n isVisible,\n labels,\n children,\n accentColor = Colors.orange,\n duration = 10000,\n onClose,\n toastId,\n updateHeight,\n ...attrs\n}) => {\n const id = useId();\n const [isDetailsExpanded, setIsDetailsExpanded] = useState(false);\n const [isPaused, setIsPaused] = useState(false);\n const toastRef = useRef<HTMLDivElement>(null!);\n\n const { progress } = useCountdown({ duration, isPaused, isVisible });\n useEffect(() => {\n if (progress === 100) {\n onClose?.();\n }\n }, [progress, onClose]);\n\n const handleMouseDown = () => setIsPaused(true);\n const handleMouseUp = () => setIsPaused(false);\n const handleMouseLeave = () => setIsPaused(false);\n\n useResizeObserver<HTMLDivElement>({\n ref: toastRef,\n onResize: () => {\n if (toastRef.current) {\n updateHeight(toastId, toastRef.current.offsetHeight);\n }\n },\n });\n\n return (\n <div\n ref={toastRef}\n {...attrs}\n className={clsx(\n isVisible ? 'animate-slide-right-enter' : 'animate-slide-right-exit opacity-0',\n 'relative isolate flex gap-x-20 rounded-16 bg-white p-20 text-black transition-opacity duration-300 border-1 overflow-hidden',\n getBorderColor(accentColor),\n className,\n )}\n role=\"note\"\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n >\n <span className={clsx('w-30 h-30 pt-4', getTextColor(accentColor))}>\n <Icon name={icon} width=\"30px\" className={clsx('flex-shrink-0')} />\n </span>\n <div className=\"flex flex-1 flex-col gap-12 pe-24 text-b4\">\n <div>\n <p className=\" font-bold\" id={id}>\n {title}\n </p>\n <p>{body}</p>\n </div>\n\n {children && (\n <div>\n <button\n onClick={() => setIsDetailsExpanded(!isDetailsExpanded)}\n aria-expanded={isDetailsExpanded}\n className=\"flex w-fit items-center gap-8 text-b5 font-normal outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n type=\"button\"\n >\n <span>{labels.details}</span>\n <Icon\n name=\"ArrowDefaultDown\"\n width=\"24px\"\n style={{ rotate: isDetailsExpanded ? '180deg' : '0deg' }}\n className=\"transition-all duration-300\"\n />\n </button>\n <ElasticHeight isExpanded={isDetailsExpanded}>\n <div className=\"pt-4\">{children}</div>\n </ElasticHeight>\n </div>\n )}\n </div>\n\n {onClose && (\n <button\n aria-describedby={id}\n aria-label={labels.close}\n className=\"absolute end-0 top-0 mt-20 me-13 text-black outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n onClick={onClose}\n type=\"button\"\n >\n <Icon name=\"CrossDefault\" width=\"24px\" />\n </button>\n )}\n\n {duration !== false && (\n <div className=\"absolute bottom-0 left-0 right-0 h-4 overflow-hidden rounded-b-16\">\n <div\n className={getBgColor(accentColor)}\n style={{\n width: '100%',\n height: '100%',\n transform: `scaleX(${(100 - progress) / 100})`,\n transformOrigin: 'left',\n transition: 'transform 16ms linear',\n }}\n />\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;AAqCA,IAAa,KAA2C,EACtD,cACA,UACA,SACA,SACA,cACA,WACA,aACA,iBAAc,EAAO,QACrB,cAAW,KACX,YACA,YACA,iBACA,GAAG,QACC;CACJ,IAAM,IAAK,GAAO,EACZ,CAAC,GAAmB,KAAwB,EAAS,GAAM,EAC3D,CAAC,GAAU,KAAe,EAAS,GAAM,EACzC,IAAW,EAAuB,KAAM,EAExC,EAAE,gBAAa,EAAa;EAAE;EAAU;EAAU;EAAW,CAAC;AACpE,SAAgB;AACd,EAAI,MAAa,OACf,KAAW;IAEZ,CAAC,GAAU,EAAQ,CAAC;CAEvB,IAAM,UAAwB,EAAY,GAAK,EACzC,UAAsB,EAAY,GAAM,EACxC,UAAyB,EAAY,GAAM;AAWjD,QATA,EAAkC;EAChC,KAAK;EACL,gBAAgB;AACd,GAAI,EAAS,WACX,EAAa,GAAS,EAAS,QAAQ,aAAa;;EAGzD,CAAC,EAGA,kBAAC,OAAD;EACE,KAAK;EACL,GAAI;EACJ,WAAW,EACT,IAAY,8BAA8B,sCAC1C,+HACA,EAAe,EAAY,EAC3B,EACD;EACD,MAAK;EACL,aAAa;EACb,WAAW;EACX,cAAc;YAZhB;GAcE,kBAAC,QAAD;IAAM,WAAW,EAAK,kBAAkB,EAAa,EAAY,CAAC;cAChE,kBAAC,GAAD;KAAM,MAAM;KAAM,OAAM;KAAO,WAAW,EAAK,gBAAA;KAAoB,CAAA;IAC9D,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;KAAG,WAAU;KAAiB;eAC3B;KACC,CAAA,EACJ,kBAAC,KAAD,EAAA,UAAI,GAAS,CAAA,CACT,EAAA,CAAA,EAEL,KACC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,UAAD;KACE,eAAe,EAAqB,CAAC,EAAkB;KACvD,iBAAe;KACf,WAAU;KACV,MAAK;eAJP,CAME,kBAAC,QAAD,EAAA,UAAO,EAAO,SAAe,CAAA,EAC7B,kBAAC,GAAD;MACE,MAAK;MACL,OAAM;MACN,OAAO,EAAE,QAAQ,IAAoB,WAAW,QAAQ;MACxD,WAAU;MACV,CAAA,CAAA;QAEJ,kBAAC,GAAD;KAAe,YAAY;eACzB,kBAAC,OAAD;MAAK,WAAU;MAAQ;MAAe,CAAA;KACxB,CAAA,CACZ,EAAA,CAAA,CAAA;;GAIT,KACC,kBAAC,UAAD;IACE,oBAAkB;IAClB,cAAY,EAAO;IACnB,WAAU;IACV,SAAS;IACT,MAAK;cAEL,kBAAC,GAAD;KAAM,MAAK;KAAe,OAAM;KAAS,CAAA;IAClC,CAAA;GAGV,MAAa,MACZ,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,OAAD;KACE,WAAW,EAAW,EAAY;KAClC,OAAO;MACL,OAAO;MACP,QAAQ;MACR,WAAW,WAAW,MAAM,KAAY,IAAI;MAC5C,iBAAiB;MACjB,YAAY;;KAEd,CAAA;IACE,CAAA"}
package/ui/Avatar.js CHANGED
@@ -9,7 +9,7 @@ function i({ alt: i, src: a, srcSet: o, style: s, children: c, className: l, ...
9
9
  role: "figure",
10
10
  "aria-label": i
11
11
  } : {},
12
- className: e("flex items-center justify-center relative overflow-hidden", {
12
+ className: e("flex items-center justify-center relative overflow-hidden outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", {
13
13
  "rounded-full": !l?.includes("rounded-"),
14
14
  "text-black": !l?.includes("text-"),
15
15
  "bg-saffron": !l?.includes("bg-")
package/ui/Avatar.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","names":[],"sources":["../../lib/ui/Avatar.tsx"],"sourcesContent":["import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nconst initial = (text = '') => {\n return text\n .split(' ')\n .map((text) => text.slice(0, 1))\n .join('');\n};\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n alt?: string;\n src?: string | undefined;\n srcSet?: string | undefined;\n}\n\nexport function Avatar({\n alt,\n src,\n srcSet,\n style,\n children,\n className,\n ...props\n}: PropsWithChildren<AvatarProps>) {\n return (\n <div\n {...props}\n {...(src || srcSet ? { role: 'figure', 'aria-label': alt } : {})}\n className={clsx(\n 'flex items-center justify-center relative overflow-hidden',\n {\n 'rounded-full': !className?.includes('rounded-'),\n 'text-black': !className?.includes('text-'),\n 'bg-saffron': !className?.includes('bg-'),\n },\n className,\n )}\n style={{\n width: '48px',\n height: '48px',\n ...style,\n }}\n >\n <span className=\"flex items-center justify-center font-bold uppercase text-h6 h-full\">\n {src || srcSet ? (\n <img\n srcSet={srcSet}\n src={src}\n alt={alt}\n className={'w-full h-full object-cover transparent indent-[1000px]'}\n />\n ) : (\n initial(alt)\n )}\n {children}\n </span>\n </div>\n );\n}\n"],"mappings":";;;AAGA,IAAM,KAAW,IAAO,OACf,EACJ,MAAM,IAAI,CACV,KAAK,MAAS,EAAK,MAAM,GAAG,EAAE,CAAC,CAC/B,KAAK,GAAG;AASb,SAAgB,EAAO,EACrB,QACA,QACA,WACA,UACA,aACA,cACA,GAAG,KAC8B;AACjC,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,GAAK,KAAO,IAAS;GAAE,MAAM;GAAU,cAAc;GAAK,GAAG,EAAE;EAC/D,WAAW,EACT,6DACA;GACE,gBAAgB,CAAC,GAAW,SAAS,WAAW;GAChD,cAAc,CAAC,GAAW,SAAS,QAAQ;GAC3C,cAAc,CAAC,GAAW,SAAS,MAAM;GAC1C,EACD,EACD;EACD,OAAO;GACL,OAAO;GACP,QAAQ;GACR,GAAG;GACJ;YAED,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,KAAO,IACN,kBAAC,OAAD;IACU;IACH;IACA;IACL,WAAW;IACX,CAAA,GAEF,EAAQ,EAAI,EAEb,EACI;;EACH,CAAA"}
1
+ {"version":3,"file":"Avatar.js","names":[],"sources":["../../lib/ui/Avatar.tsx"],"sourcesContent":["import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nconst initial = (text = '') => {\n return text\n .split(' ')\n .map((text) => text.slice(0, 1))\n .join('');\n};\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n alt?: string;\n src?: string | undefined;\n srcSet?: string | undefined;\n}\n\nexport function Avatar({\n alt,\n src,\n srcSet,\n style,\n children,\n className,\n ...props\n}: PropsWithChildren<AvatarProps>) {\n return (\n <div\n {...props}\n {...(src || srcSet ? { role: 'figure', 'aria-label': alt } : {})}\n className={clsx(\n 'flex items-center justify-center relative overflow-hidden outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n {\n 'rounded-full': !className?.includes('rounded-'),\n 'text-black': !className?.includes('text-'),\n 'bg-saffron': !className?.includes('bg-'),\n },\n className,\n )}\n style={{\n width: '48px',\n height: '48px',\n ...style,\n }}\n >\n <span className=\"flex items-center justify-center font-bold uppercase text-h6 h-full\">\n {src || srcSet ? (\n <img\n srcSet={srcSet}\n src={src}\n alt={alt}\n className={'w-full h-full object-cover transparent indent-[1000px]'}\n />\n ) : (\n initial(alt)\n )}\n {children}\n </span>\n </div>\n );\n}\n"],"mappings":";;;AAGA,IAAM,KAAW,IAAO,OACf,EACJ,MAAM,IAAI,CACV,KAAK,MAAS,EAAK,MAAM,GAAG,EAAE,CAAC,CAC/B,KAAK,GAAG;AASb,SAAgB,EAAO,EACrB,QACA,QACA,WACA,UACA,aACA,cACA,GAAG,KAC8B;AACjC,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,GAAK,KAAO,IAAS;GAAE,MAAM;GAAU,cAAc;GAAK,GAAG,EAAE;EAC/D,WAAW,EACT,oJACA;GACE,gBAAgB,CAAC,GAAW,SAAS,WAAW;GAChD,cAAc,CAAC,GAAW,SAAS,QAAQ;GAC3C,cAAc,CAAC,GAAW,SAAS,MAAM;GAC1C,EACD,EACD;EACD,OAAO;GACL,OAAO;GACP,QAAQ;GACR,GAAG;GACJ;YAED,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,KAAO,IACN,kBAAC,OAAD;IACU;IACH;IACA;IACL,WAAW;IACX,CAAA,GAEF,EAAQ,EAAI,EAEb,EACI;;EACH,CAAA"}
package/ui/BasicToast.js CHANGED
@@ -3,47 +3,47 @@ import { t as e } from "../chunks/clsx.js";
3
3
  import { getBgColor as t, getComplementaryTextColor as n, getThemeColor as r } from "./helpers/colors/colors.js";
4
4
  import { Link as i } from "./Link.js";
5
5
  import { useId as a } from "react";
6
- import { Icon as o } from "@clubmed/trident-icons";
7
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ import { Icon as c } from "@clubmed/trident-icons";
8
8
  //#region lib/ui/BasicToast.tsx
9
9
  function l({ className: l, description: u, href: d, icon: f, incentive: p, isVisible: m, labels: h, onClick: g, onClose: _, theme: v = "dark", title: y, children: b, ...x }) {
10
10
  let S = r(v), C = a(), w = b ?? u;
11
- return /* @__PURE__ */ c("div", {
11
+ return /* @__PURE__ */ s("div", {
12
12
  ...x,
13
- className: e(m ? "animate-slideRightEnter" : "animate-slideRightExit opacity-0", "relative isolate flex gap-x-20 rounded-16 p-20 transition-opacity duration-300", t(S), n(S), l),
13
+ className: e(m ? "animate-slide-right-enter" : "animate-slide-right-exit opacity-0", "relative isolate flex gap-x-20 rounded-16 p-20 transition-opacity duration-300", t(S), n(S), l),
14
14
  role: "note",
15
15
  children: [
16
- f && /* @__PURE__ */ s(o, {
16
+ f && /* @__PURE__ */ o(c, {
17
17
  name: f,
18
18
  width: "30px"
19
19
  }),
20
- /* @__PURE__ */ c("a", {
21
- className: "group pe-44",
20
+ /* @__PURE__ */ s("a", {
21
+ className: "group pe-44 outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 rounded-pill",
22
22
  href: d,
23
23
  onClick: g,
24
24
  children: [
25
- /* @__PURE__ */ s("p", {
25
+ /* @__PURE__ */ o("p", {
26
26
  className: "mb-4 text-b3 font-bold",
27
27
  id: C,
28
28
  children: y
29
29
  }),
30
- w && /* @__PURE__ */ s("div", {
30
+ w && /* @__PURE__ */ o("div", {
31
31
  className: "mb-12 text-b4",
32
32
  children: w
33
33
  }),
34
- /* @__PURE__ */ s(i, {
34
+ /* @__PURE__ */ o(i, {
35
35
  component: "span",
36
36
  className: "text-b3 font-bold",
37
37
  label: p
38
38
  })
39
39
  ]
40
40
  }),
41
- _ && /* @__PURE__ */ s("button", {
41
+ _ && /* @__PURE__ */ o("button", {
42
42
  "aria-describedby": C,
43
43
  "aria-label": h.close,
44
- className: e("absolute end-0 top-0 m-20", n(S)),
44
+ className: e("absolute end-0 top-0 m-20 outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 rounded-pill", n(S)),
45
45
  onClick: _,
46
- children: /* @__PURE__ */ s(o, {
46
+ children: /* @__PURE__ */ o(c, {
47
47
  name: "CrossDefault",
48
48
  width: "24px"
49
49
  })
@@ -1 +1 @@
1
- {"version":3,"file":"BasicToast.js","names":[],"sources":["../../lib/ui/BasicToast.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport { type ComponentPropsWithoutRef, type PropsWithChildren, useId } from 'react';\n\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport { getBgColor, getComplementaryTextColor, getThemeColor } from './helpers/colors/colors';\nimport { Link } from './Link';\nimport type { Theme } from './types/Theme';\n\nexport interface BasicToastProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * @deprecated use children slot instead\n */\n description?: string;\n href: string;\n icon?: IconicNames;\n incentive: string;\n isVisible: boolean;\n labels: { close: string };\n onClick?: () => void;\n onClose?: () => void;\n theme: Theme;\n title: string;\n}\n\nexport function BasicToast({\n className,\n description,\n href,\n icon,\n incentive,\n isVisible,\n labels,\n onClick,\n onClose,\n theme = 'dark',\n title,\n children,\n ...attrs\n}: PropsWithChildren<BasicToastProps>) {\n const color = getThemeColor(theme);\n const id = useId();\n const content = children ?? description;\n\n return (\n <div\n {...attrs}\n className={clsx(\n isVisible ? 'animate-slideRightEnter' : 'animate-slideRightExit opacity-0',\n 'relative isolate flex gap-x-20 rounded-16 p-20 transition-opacity duration-300',\n getBgColor(color),\n getComplementaryTextColor(color),\n className,\n )}\n role=\"note\"\n >\n {icon && <Icon name={icon} width=\"30px\" />}\n <a className=\"group pe-44\" href={href} onClick={onClick}>\n <p className=\"mb-4 text-b3 font-bold\" id={id}>\n {title}\n </p>\n {content && <div className=\"mb-12 text-b4\">{content}</div>}\n <Link component=\"span\" className=\"text-b3 font-bold\" label={incentive} />\n </a>\n {onClose && (\n <button\n aria-describedby={id}\n aria-label={labels.close}\n className={clsx('absolute end-0 top-0 m-20', getComplementaryTextColor(color))}\n onClick={onClose}\n >\n <Icon name=\"CrossDefault\" width=\"24px\" />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAyBA,SAAgB,EAAW,EACzB,cACA,gBACA,SACA,SACA,cACA,cACA,WACA,YACA,YACA,WAAQ,QACR,UACA,aACA,GAAG,KACkC;CACrC,IAAM,IAAQ,EAAc,EAAM,EAC5B,IAAK,GAAO,EACZ,IAAU,KAAY;AAE5B,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EACT,IAAY,4BAA4B,oCACxC,kFACA,EAAW,EAAM,EACjB,EAA0B,EAAM,EAChC,EACD;EACD,MAAK;YATP;GAWG,KAAQ,kBAAC,GAAD;IAAM,MAAM;IAAM,OAAM;IAAS,CAAA;GAC1C,kBAAC,KAAD;IAAG,WAAU;IAAoB;IAAe;cAAhD;KACE,kBAAC,KAAD;MAAG,WAAU;MAA6B;gBACvC;MACC,CAAA;KACH,KAAW,kBAAC,OAAD;MAAK,WAAU;gBAAiB;MAAc,CAAA;KAC1D,kBAAC,GAAD;MAAM,WAAU;MAAO,WAAU;MAAoB,OAAO;MAAa,CAAA;;;GAE1E,KACC,kBAAC,UAAD;IACE,oBAAkB;IAClB,cAAY,EAAO;IACnB,WAAW,EAAK,6BAA6B,EAA0B,EAAM,CAAC;IAC9E,SAAS;cAET,kBAAC,GAAD;KAAM,MAAK;KAAe,OAAM;KAAS,CAAA;IAClC,CAAA"}
1
+ {"version":3,"file":"BasicToast.js","names":[],"sources":["../../lib/ui/BasicToast.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport { type ComponentPropsWithoutRef, type PropsWithChildren, useId } from 'react';\n\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport { getBgColor, getComplementaryTextColor, getThemeColor } from './helpers/colors/colors';\nimport { Link } from './Link';\nimport type { Theme } from './types/Theme';\n\nexport interface BasicToastProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * @deprecated use children slot instead\n */\n description?: string;\n href: string;\n icon?: IconicNames;\n incentive: string;\n isVisible: boolean;\n labels: { close: string };\n onClick?: () => void;\n onClose?: () => void;\n theme: Theme;\n title: string;\n}\n\nexport function BasicToast({\n className,\n description,\n href,\n icon,\n incentive,\n isVisible,\n labels,\n onClick,\n onClose,\n theme = 'dark',\n title,\n children,\n ...attrs\n}: PropsWithChildren<BasicToastProps>) {\n const color = getThemeColor(theme);\n const id = useId();\n const content = children ?? description;\n\n return (\n <div\n {...attrs}\n className={clsx(\n isVisible ? 'animate-slide-right-enter' : 'animate-slide-right-exit opacity-0',\n 'relative isolate flex gap-x-20 rounded-16 p-20 transition-opacity duration-300',\n getBgColor(color),\n getComplementaryTextColor(color),\n className,\n )}\n role=\"note\"\n >\n {icon && <Icon name={icon} width=\"30px\" />}\n <a\n className=\"group pe-44 outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 rounded-pill\"\n href={href}\n onClick={onClick}\n >\n <p className=\"mb-4 text-b3 font-bold\" id={id}>\n {title}\n </p>\n {content && <div className=\"mb-12 text-b4\">{content}</div>}\n <Link component=\"span\" className=\"text-b3 font-bold\" label={incentive} />\n </a>\n {onClose && (\n <button\n aria-describedby={id}\n aria-label={labels.close}\n className={clsx(\n 'absolute end-0 top-0 m-20 outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 rounded-pill',\n getComplementaryTextColor(color),\n )}\n onClick={onClose}\n >\n <Icon name=\"CrossDefault\" width=\"24px\" />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAyBA,SAAgB,EAAW,EACzB,cACA,gBACA,SACA,SACA,cACA,cACA,WACA,YACA,YACA,WAAQ,QACR,UACA,aACA,GAAG,KACkC;CACrC,IAAM,IAAQ,EAAc,EAAM,EAC5B,IAAK,GAAO,EACZ,IAAU,KAAY;AAE5B,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EACT,IAAY,8BAA8B,sCAC1C,kFACA,EAAW,EAAM,EACjB,EAA0B,EAAM,EAChC,EACD;EACD,MAAK;YATP;GAWG,KAAQ,kBAAC,GAAD;IAAM,MAAM;IAAM,OAAM;IAAS,CAAA;GAC1C,kBAAC,KAAD;IACE,WAAU;IACJ;IACG;cAHX;KAKE,kBAAC,KAAD;MAAG,WAAU;MAA6B;gBACvC;MACC,CAAA;KACH,KAAW,kBAAC,OAAD;MAAK,WAAU;gBAAiB;MAAc,CAAA;KAC1D,kBAAC,GAAD;MAAM,WAAU;MAAO,WAAU;MAAoB,OAAO;MAAa,CAAA;;;GAE1E,KACC,kBAAC,UAAD;IACE,oBAAkB;IAClB,cAAY,EAAO;IACnB,WAAW,EACT,iIACA,EAA0B,EAAM,CACjC;IACD,SAAS;cAET,kBAAC,GAAD;KAAM,MAAK;KAAe,OAAM;KAAS,CAAA;IAClC,CAAA"}
package/ui/Breadcrumb.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "../chunks/clsx.js";
2
2
  import { getComplementaryTextColor as t, getThemeColor as n } from "./helpers/colors/colors.js";
3
3
  import { createElement as r } from "react";
4
- import { Icon as i } from "@clubmed/trident-icons";
5
- import { jsx as a } from "react/jsx-runtime";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { Icon as a } from "@clubmed/trident-icons";
6
6
  //#region lib/ui/Breadcrumb.tsx
7
7
  var o = ({ className: o, items: s, theme: c = "light", ...l }) => {
8
8
  if (s.length == 0) return null;
@@ -15,11 +15,11 @@ var o = ({ className: o, items: s, theme: c = "light", ...l }) => {
15
15
  },
16
16
  h
17
17
  ] : s;
18
- return /* @__PURE__ */ a("nav", {
18
+ return /* @__PURE__ */ i("nav", {
19
19
  "aria-label": "Breadcrumb",
20
20
  ...l,
21
21
  className: e(o, "overflow-hidden"),
22
- children: /* @__PURE__ */ a("ul", {
22
+ children: /* @__PURE__ */ i("ul", {
23
23
  className: "scrollbar-hidden text-b4 flex items-center overflow-x-auto font-sans",
24
24
  children: g.map(({ label: t, href: n }, o) => {
25
25
  let s = o === g.length - 1, c = n && !s;
@@ -30,10 +30,11 @@ var o = ({ className: o, items: s, theme: c = "light", ...l }) => {
30
30
  [u]: s
31
31
  }),
32
32
  key: t
33
- }, c ? /* @__PURE__ */ a("a", {
33
+ }, c ? /* @__PURE__ */ i("a", {
34
34
  href: n,
35
+ className: "rounded-pill outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2",
35
36
  children: t
36
- }) : t, !s && /* @__PURE__ */ a(i, {
37
+ }) : t, !s && /* @__PURE__ */ i(a, {
37
38
  className: "mx-4",
38
39
  name: "Diamond",
39
40
  width: "14px"
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../lib/ui/Breadcrumb.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\nimport type { Theme } from './types/Theme';\nimport { Icon } from '@clubmed/trident-icons';\nimport { getComplementaryTextColor, getThemeColor } from './helpers/colors/colors';\n\nexport interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> {\n items: Array<{\n href: string;\n label: string;\n }>;\n theme?: Theme;\n}\n\nexport const Breadcrumb: FunctionComponent<BreadcrumbProps> = ({\n className,\n items,\n theme = 'light',\n ...attrs\n}) => {\n if (items.length == 0) {\n return null;\n }\n\n const themeColor = getThemeColor(theme);\n const accentColor = getComplementaryTextColor(themeColor);\n const color = accentColor === 'text-white' ? accentColor : 'text-middleGrey';\n\n const [first, second, , ...rest] = items;\n const lastItem = rest.length ? rest[rest.length - 1] : items[items.length - 1];\n const spacer = { label: '…', href: '' };\n const itemsToRender = !rest.length ? items : [first, second, spacer, lastItem];\n\n return (\n <nav aria-label=\"Breadcrumb\" {...attrs} className={clsx(className, 'overflow-hidden')}>\n <ul className=\"scrollbar-hidden text-b4 flex items-center overflow-x-auto font-sans\">\n {itemsToRender.map(({ label, href }, index) => {\n const isLast = index === itemsToRender.length - 1;\n const isLink = href && !isLast;\n\n return (\n <li\n {...(isLast && { 'aria-current': 'page' })}\n className={clsx(\n 'flex shrink-0 items-center',\n { [color]: !isLast },\n {\n 'font-bold': isLast,\n [accentColor]: isLast,\n },\n )}\n key={label}\n >\n {isLink ? <a href={href}>{label}</a> : label}\n {!isLast && <Icon className=\"mx-4\" name=\"Diamond\" width=\"14px\" />}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n"],"mappings":";;;;;;AAeA,IAAa,KAAkD,EAC7D,cACA,UACA,WAAQ,SACR,GAAG,QACC;AACJ,KAAI,EAAM,UAAU,EAClB,QAAO;CAIT,IAAM,IAAc,EADD,EAAc,EAAM,CACkB,EACnD,IAAQ,MAAgB,eAAe,IAAc,mBAErD,CAAC,GAAO,KAAU,GAAG,KAAQ,GAC7B,IAAW,EAAK,SAAS,EAAK,EAAK,SAAS,KAAK,EAAM,EAAM,SAAS,IAEtE,IAAiB,EAAK,SAAiB;EAAC;EAAO;EADtC;GAAE,OAAO;GAAK,MAAM;GAAI;EAC8B;EAAS,GAAzC;AAErC,QACE,kBAAC,OAAD;EAAK,cAAW;EAAa,GAAI;EAAO,WAAW,EAAK,GAAW,kBAAkB;YACnF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAc,KAAK,EAAE,UAAO,WAAQ,MAAU;IAC7C,IAAM,IAAS,MAAU,EAAc,SAAS,GAC1C,IAAS,KAAQ,CAAC;AAExB,WACE,kBAAC,MAAD;KACE,GAAK,KAAU,EAAE,gBAAgB,QAAQ;KACzC,WAAW,EACT,8BACA,GAAG,IAAQ,CAAC,GAAQ,EACpB;MACE,aAAa;OACZ,IAAc;MAChB,CACF;KACD,KAAK;KAIF,EAFF,IAAS,kBAAC,KAAD;KAAS;eAAO;KAAU,CAAA,GAAG,GACtC,CAAC,KAAU,kBAAC,GAAD;KAAM,WAAU;KAAO,MAAK;KAAU,OAAM;KAAS,CAAA,CAC9D;KAEP;GACC,CAAA;EACD,CAAA"}
1
+ {"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../lib/ui/Breadcrumb.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\nimport type { Theme } from './types/Theme';\nimport { Icon } from '@clubmed/trident-icons';\nimport { getComplementaryTextColor, getThemeColor } from './helpers/colors/colors';\n\nexport interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> {\n items: Array<{\n href: string;\n label: string;\n }>;\n theme?: Theme;\n}\n\nexport const Breadcrumb: FunctionComponent<BreadcrumbProps> = ({\n className,\n items,\n theme = 'light',\n ...attrs\n}) => {\n if (items.length == 0) {\n return null;\n }\n\n const themeColor = getThemeColor(theme);\n const accentColor = getComplementaryTextColor(themeColor);\n const color = accentColor === 'text-white' ? accentColor : 'text-middleGrey';\n\n const [first, second, , ...rest] = items;\n const lastItem = rest.length ? rest[rest.length - 1] : items[items.length - 1];\n const spacer = { label: '…', href: '' };\n const itemsToRender = !rest.length ? items : [first, second, spacer, lastItem];\n\n return (\n <nav aria-label=\"Breadcrumb\" {...attrs} className={clsx(className, 'overflow-hidden')}>\n <ul className=\"scrollbar-hidden text-b4 flex items-center overflow-x-auto font-sans\">\n {itemsToRender.map(({ label, href }, index) => {\n const isLast = index === itemsToRender.length - 1;\n const isLink = href && !isLast;\n\n return (\n <li\n {...(isLast && { 'aria-current': 'page' })}\n className={clsx(\n 'flex shrink-0 items-center',\n { [color]: !isLast },\n {\n 'font-bold': isLast,\n [accentColor]: isLast,\n },\n )}\n key={label}\n >\n {isLink ? (\n <a\n href={href}\n className=\"rounded-pill outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2\"\n >\n {label}\n </a>\n ) : (\n label\n )}\n {!isLast && <Icon className=\"mx-4\" name=\"Diamond\" width=\"14px\" />}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n"],"mappings":";;;;;;AAeA,IAAa,KAAkD,EAC7D,cACA,UACA,WAAQ,SACR,GAAG,QACC;AACJ,KAAI,EAAM,UAAU,EAClB,QAAO;CAIT,IAAM,IAAc,EADD,EAAc,EAAM,CACkB,EACnD,IAAQ,MAAgB,eAAe,IAAc,mBAErD,CAAC,GAAO,KAAU,GAAG,KAAQ,GAC7B,IAAW,EAAK,SAAS,EAAK,EAAK,SAAS,KAAK,EAAM,EAAM,SAAS,IAEtE,IAAiB,EAAK,SAAiB;EAAC;EAAO;EADtC;GAAE,OAAO;GAAK,MAAM;GAAI;EAC8B;EAAS,GAAzC;AAErC,QACE,kBAAC,OAAD;EAAK,cAAW;EAAa,GAAI;EAAO,WAAW,EAAK,GAAW,kBAAkB;YACnF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAc,KAAK,EAAE,UAAO,WAAQ,MAAU;IAC7C,IAAM,IAAS,MAAU,EAAc,SAAS,GAC1C,IAAS,KAAQ,CAAC;AAExB,WACE,kBAAC,MAAD;KACE,GAAK,KAAU,EAAE,gBAAgB,QAAQ;KACzC,WAAW,EACT,8BACA,GAAG,IAAQ,CAAC,GAAQ,EACpB;MACE,aAAa;OACZ,IAAc;MAChB,CACF;KACD,KAAK;KAaF,EAXF,IACC,kBAAC,KAAD;KACQ;KACN,WAAU;eAET;KACC,CAAA,GAEJ,GAED,CAAC,KAAU,kBAAC,GAAD;KAAM,WAAU;KAAO,MAAK;KAAU,OAAM;KAAS,CAAA,CAC9D;KAEP;GACC,CAAA;EACD,CAAA"}
package/ui/ChatButton.js CHANGED
@@ -1,25 +1,25 @@
1
1
  import { twMerge as e } from "./helpers/twMerge.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/ChatButton.tsx
5
- var i = "Hello, Ask me a question", a = "Chat with your assistant";
5
+ var i = "AI Agent: Have you got a question?", a = "Chat with your assistant";
6
6
  function o({ children: o = i, className: s, type: c = "button", "aria-label": l, tabIndex: u, offset: d, unfoldOn: f = "hover", ...p }) {
7
7
  let m = l ?? (typeof o == "string" && o.trim().length > 0 ? o.trim() : a);
8
- return /* @__PURE__ */ r("button", {
8
+ return /* @__PURE__ */ n("button", {
9
9
  type: c,
10
10
  "aria-label": m,
11
11
  tabIndex: u ?? 0,
12
12
  ...p,
13
- className: e("chat-button grid grid-cols-[24px_0fr] transition-[grid-template-columns] justify-center items-center overflow-hidden cursor-pointer transition-all rounded-pill px-8 md:px-16 outline-none group/Chatbutton focus-visible:ring-8 focus-visible:ring-lavender/20 pointer-events-auto h-48 min-h-48 md:min-w-80 md:h-80 active:scale-[0.98]", d && "md:translate-x-[40px] focus-visible:translate-x-0", f === "hover" && "group/hoverChatbutton hover:grid-cols-[24px_1fr] hover:translate-x-0", f === "active" && "group/activeChatbutton active:grid-cols-[24px_1fr] active:translate-x-0", "focus-visible:grid-cols-[24px_1fr]", s),
14
- children: [/* @__PURE__ */ n(t, {
13
+ className: e("chat-border grid grid-cols-[24px_0fr] transition-[grid-template-columns] justify-center items-center overflow-hidden cursor-pointer transition-all rounded-pill px-8 md:px-16 outline-none group/Chatbutton focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 pointer-events-auto h-48 min-h-48 md:min-w-80 md:h-80 active:scale-[0.98]", d && "md:translate-x-[40px] focus-visible:translate-x-0", f === "hover" && "group/hoverChatbutton hover:grid-cols-[24px_1fr] hover:translate-x-0", f === "active" && "group/activeChatbutton active:grid-cols-[24px_1fr] active:translate-x-0", "focus-visible:grid-cols-[24px_1fr]", s),
14
+ children: [/* @__PURE__ */ t(r, {
15
15
  name: "Sparkles",
16
16
  className: e("chat-button-icon w-24 transition-all", d && "relative md:start-[calc(-16px)] group-focus-visible/Chatbutton:start-0 group-hover/hoverChatbutton:start-0 group-active/activeChatbutton:start-0")
17
- }), /* @__PURE__ */ n("div", {
17
+ }), /* @__PURE__ */ t("div", {
18
18
  className: "grid grid-cols-[0fr] overflow-hidden opacity-0 transition-opacity group-hover/hoverChatbutton:opacity-100 group-focus-visible/Chatbutton:opacity-100 group-active/activeChatbutton:opacity-100 duration-500",
19
- children: /* @__PURE__ */ r("span", {
19
+ children: /* @__PURE__ */ n("span", {
20
20
  "aria-hidden": "true",
21
21
  className: "chat-button-text items-center ps-20 flex gap-10 whitespace-nowrap font-semibold text-b3 text-black",
22
- children: [o, /* @__PURE__ */ n(t, {
22
+ children: [o, /* @__PURE__ */ t(r, {
23
23
  name: "ArrowTailRight",
24
24
  width: "24px"
25
25
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"ChatButton.js","names":[],"sources":["../../lib/ui/ChatButton.tsx"],"sourcesContent":["import { Icon } from '@clubmed/trident-icons';\nimport type { ButtonHTMLAttributes } from 'react';\nimport { twMerge } from './helpers/twMerge';\n\nconst DEFAULT_TEASER_COPY = 'Hello, Ask me a question';\nconst FALLBACK_ARIA_LABEL = 'Chat with your assistant';\n\nexport type ChatButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n offset?: boolean;\n unfoldOn?: 'hover' | 'active';\n};\n\nexport function ChatButton({\n children = DEFAULT_TEASER_COPY,\n className,\n type = 'button',\n 'aria-label': ariaLabel,\n tabIndex,\n offset,\n unfoldOn = 'hover',\n ...rest\n}: ChatButtonProps) {\n const label =\n ariaLabel ??\n (typeof children === 'string' && children.trim().length > 0\n ? children.trim()\n : FALLBACK_ARIA_LABEL);\n\n return (\n <button\n type={type}\n aria-label={label}\n tabIndex={tabIndex ?? 0}\n {...rest}\n className={twMerge(\n 'chat-button grid grid-cols-[24px_0fr] transition-[grid-template-columns] justify-center items-center overflow-hidden cursor-pointer transition-all rounded-pill px-8 md:px-16 outline-none group/Chatbutton focus-visible:ring-8 focus-visible:ring-lavender/20 pointer-events-auto h-48 min-h-48 md:min-w-80 md:h-80 active:scale-[0.98]',\n offset && 'md:translate-x-[40px] focus-visible:translate-x-0',\n unfoldOn === 'hover' &&\n 'group/hoverChatbutton hover:grid-cols-[24px_1fr] hover:translate-x-0',\n unfoldOn === 'active' &&\n 'group/activeChatbutton active:grid-cols-[24px_1fr] active:translate-x-0',\n 'focus-visible:grid-cols-[24px_1fr]',\n className,\n )}\n >\n <Icon\n name=\"Sparkles\"\n className={twMerge(\n 'chat-button-icon w-24 transition-all',\n offset &&\n 'relative md:start-[calc(-16px)] group-focus-visible/Chatbutton:start-0 group-hover/hoverChatbutton:start-0 group-active/activeChatbutton:start-0',\n )}\n />\n <div className=\"grid grid-cols-[0fr] overflow-hidden opacity-0 transition-opacity group-hover/hoverChatbutton:opacity-100 group-focus-visible/Chatbutton:opacity-100 group-active/activeChatbutton:opacity-100 duration-500\">\n <span\n aria-hidden=\"true\"\n className=\"chat-button-text items-center ps-20 flex gap-10 whitespace-nowrap font-semibold text-b3 text-black\"\n >\n {children}\n <Icon name=\"ArrowTailRight\" width=\"24px\" />\n </span>\n </div>\n </button>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAsB,4BACtB,IAAsB;AAO5B,SAAgB,EAAW,EACzB,cAAW,GACX,cACA,UAAO,UACP,cAAc,GACd,aACA,WACA,cAAW,SACX,GAAG,KACe;CAClB,IAAM,IACJ,MACC,OAAO,KAAa,YAAY,EAAS,MAAM,CAAC,SAAS,IACtD,EAAS,MAAM,GACf;AAEN,QACE,kBAAC,UAAD;EACQ;EACN,cAAY;EACZ,UAAU,KAAY;EACtB,GAAI;EACJ,WAAW,EACT,6UACA,KAAU,qDACV,MAAa,WACX,wEACF,MAAa,YACX,2EACF,sCACA,EACD;YAdH,CAgBE,kBAAC,GAAD;GACE,MAAK;GACL,WAAW,EACT,wCACA,KACE,mJACH;GACD,CAAA,EACF,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,QAAD;IACE,eAAY;IACZ,WAAU;cAFZ,CAIG,GACD,kBAAC,GAAD;KAAM,MAAK;KAAiB,OAAM;KAAS,CAAA,CACtC;;GACH,CAAA,CACC"}
1
+ {"version":3,"file":"ChatButton.js","names":[],"sources":["../../lib/ui/ChatButton.tsx"],"sourcesContent":["import { Icon } from '@clubmed/trident-icons';\nimport type { ButtonHTMLAttributes } from 'react';\nimport { twMerge } from './helpers/twMerge';\n\nconst DEFAULT_TEASER_COPY = 'AI Agent: Have you got a question?';\nconst FALLBACK_ARIA_LABEL = 'Chat with your assistant';\n\nexport type ChatButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n offset?: boolean;\n unfoldOn?: 'hover' | 'active';\n};\n\nexport function ChatButton({\n children = DEFAULT_TEASER_COPY,\n className,\n type = 'button',\n 'aria-label': ariaLabel,\n tabIndex,\n offset,\n unfoldOn = 'hover',\n ...rest\n}: ChatButtonProps) {\n const label =\n ariaLabel ??\n (typeof children === 'string' && children.trim().length > 0\n ? children.trim()\n : FALLBACK_ARIA_LABEL);\n\n return (\n <button\n type={type}\n aria-label={label}\n tabIndex={tabIndex ?? 0}\n {...rest}\n className={twMerge(\n 'chat-border grid grid-cols-[24px_0fr] transition-[grid-template-columns] justify-center items-center overflow-hidden cursor-pointer transition-all rounded-pill px-8 md:px-16 outline-none group/Chatbutton focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 pointer-events-auto h-48 min-h-48 md:min-w-80 md:h-80 active:scale-[0.98]',\n offset && 'md:translate-x-[40px] focus-visible:translate-x-0',\n unfoldOn === 'hover' &&\n 'group/hoverChatbutton hover:grid-cols-[24px_1fr] hover:translate-x-0',\n unfoldOn === 'active' &&\n 'group/activeChatbutton active:grid-cols-[24px_1fr] active:translate-x-0',\n 'focus-visible:grid-cols-[24px_1fr]',\n className,\n )}\n >\n <Icon\n name=\"Sparkles\"\n className={twMerge(\n 'chat-button-icon w-24 transition-all',\n offset &&\n 'relative md:start-[calc(-16px)] group-focus-visible/Chatbutton:start-0 group-hover/hoverChatbutton:start-0 group-active/activeChatbutton:start-0',\n )}\n />\n <div className=\"grid grid-cols-[0fr] overflow-hidden opacity-0 transition-opacity group-hover/hoverChatbutton:opacity-100 group-focus-visible/Chatbutton:opacity-100 group-active/activeChatbutton:opacity-100 duration-500\">\n <span\n aria-hidden=\"true\"\n className=\"chat-button-text items-center ps-20 flex gap-10 whitespace-nowrap font-semibold text-b3 text-black\"\n >\n {children}\n <Icon name=\"ArrowTailRight\" width=\"24px\" />\n </span>\n </div>\n </button>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAsB,sCACtB,IAAsB;AAO5B,SAAgB,EAAW,EACzB,cAAW,GACX,cACA,UAAO,UACP,cAAc,GACd,aACA,WACA,cAAW,SACX,GAAG,KACe;CAClB,IAAM,IACJ,MACC,OAAO,KAAa,YAAY,EAAS,MAAM,CAAC,SAAS,IACtD,EAAS,MAAM,GACf;AAEN,QACE,kBAAC,UAAD;EACQ;EACN,cAAY;EACZ,UAAU,KAAY;EACtB,GAAI;EACJ,WAAW,EACT,mWACA,KAAU,qDACV,MAAa,WACX,wEACF,MAAa,YACX,2EACF,sCACA,EACD;YAdH,CAgBE,kBAAC,GAAD;GACE,MAAK;GACL,WAAW,EACT,wCACA,KACE,mJACH;GACD,CAAA,EACF,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,QAAD;IACE,eAAY;IACZ,WAAU;cAFZ,CAIG,GACD,kBAAC,GAAD;KAAM,MAAK;KAAiB,OAAM;KAAS,CAAA,CACtC;;GACH,CAAA,CACC"}
@@ -0,0 +1,10 @@
1
+ import { FormHTMLAttributes } from 'react';
2
+ export interface ChatInputProps extends FormHTMLAttributes<HTMLFormElement> {
3
+ value: string;
4
+ placeholder?: string;
5
+ onValueChange: (value: string) => void;
6
+ onSubmit: () => void;
7
+ /** Fallback for when the browser does not support the Web Speech API */
8
+ onAudioClick?: () => void;
9
+ }
10
+ export declare function ChatInput({ value, placeholder, onValueChange, onSubmit, onAudioClick, className, ...props }: ChatInputProps): import("react/jsx-runtime").JSX.Element;