@clubmed/trident-ui 2.0.0-beta.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) 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 +196 -136
  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/chapters-demo.d.ts +1 -0
  79. package/examples/chapters-demo.js +46 -0
  80. package/examples/chapters-demo.js.map +1 -0
  81. package/examples/chat-button-demo.js +1 -1
  82. package/examples/chat-button-demo.js.map +1 -1
  83. package/examples/chat-button-offset-demo.js +4 -1
  84. package/examples/chat-button-offset-demo.js.map +1 -1
  85. package/examples/chat-input-demo.d.ts +1 -0
  86. package/examples/chat-input-demo.js +22 -0
  87. package/examples/chat-input-demo.js.map +1 -0
  88. package/examples/chat-message-demo.d.ts +1 -0
  89. package/examples/chat-message-demo.js +20 -0
  90. package/examples/chat-message-demo.js.map +1 -0
  91. package/examples/chat-typing-indicator-demo.d.ts +1 -0
  92. package/examples/chat-typing-indicator-demo.js +14 -0
  93. package/examples/chat-typing-indicator-demo.js.map +1 -0
  94. package/examples/chat-window-csat-demo.d.ts +1 -0
  95. package/examples/chat-window-csat-demo.js +69 -0
  96. package/examples/chat-window-csat-demo.js.map +1 -0
  97. package/examples/chat-window-csat-prompt-demo.d.ts +1 -0
  98. package/examples/chat-window-csat-prompt-demo.js +40 -0
  99. package/examples/chat-window-csat-prompt-demo.js.map +1 -0
  100. package/examples/chat-window-demo.d.ts +1 -0
  101. package/examples/chat-window-demo.js +70 -0
  102. package/examples/chat-window-demo.js.map +1 -0
  103. package/examples/chat-window-quote-demo.d.ts +1 -0
  104. package/examples/chat-window-quote-demo.js +47 -0
  105. package/examples/chat-window-quote-demo.js.map +1 -0
  106. package/examples/chat-window-quotes-demo.d.ts +1 -0
  107. package/examples/chat-window-quotes-demo.js +68 -0
  108. package/examples/chat-window-quotes-demo.js.map +1 -0
  109. package/examples/checkbox-demo.js +2 -2
  110. package/examples/checkbox-demo.js.map +1 -1
  111. package/examples/checkbox-select-demo.d.ts +1 -0
  112. package/examples/checkbox-select-demo.js +101 -0
  113. package/examples/checkbox-select-demo.js.map +1 -0
  114. package/examples/checkboxes-demo.js +1 -0
  115. package/examples/checkboxes-demo.js.map +1 -1
  116. package/examples/checkboxes-with-form-control-demo.js +4 -4
  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 +118 -0
  140. package/examples/criteria-transports-b2b-demo.js.map +1 -0
  141. package/examples/criteria-transports-demo.d.ts +1 -0
  142. package/examples/criteria-transports-demo.js +223 -0
  143. package/examples/criteria-transports-demo.js.map +1 -0
  144. package/examples/datepicker-demo.d.ts +1 -0
  145. package/examples/datepicker-demo.js +51 -0
  146. package/examples/datepicker-demo.js.map +1 -0
  147. package/examples/datepicker-disabled-days-demo.d.ts +1 -0
  148. package/examples/datepicker-disabled-days-demo.js +42 -0
  149. package/examples/datepicker-disabled-days-demo.js.map +1 -0
  150. package/examples/datepicker-duration-tooltip-demo.d.ts +1 -0
  151. package/examples/datepicker-duration-tooltip-demo.js +68 -0
  152. package/examples/datepicker-duration-tooltip-demo.js.map +1 -0
  153. package/examples/datepicker-no-prices-demo.d.ts +1 -0
  154. package/examples/datepicker-no-prices-demo.js +42 -0
  155. package/examples/datepicker-no-prices-demo.js.map +1 -0
  156. package/examples/datepicker-preselected-demo.d.ts +1 -0
  157. package/examples/datepicker-preselected-demo.js +77 -0
  158. package/examples/datepicker-preselected-demo.js.map +1 -0
  159. package/examples/dropdown-demo.js +9 -1
  160. package/examples/dropdown-demo.js.map +1 -1
  161. package/examples/expandable-text-demo.d.ts +1 -0
  162. package/examples/expandable-text-demo.js +22 -0
  163. package/examples/expandable-text-demo.js.map +1 -0
  164. package/examples/filter-demo.js +5 -5
  165. package/examples/floating-label-text-field-demo.d.ts +1 -0
  166. package/examples/floating-label-text-field-demo.js +32 -0
  167. package/examples/floating-label-text-field-demo.js.map +1 -0
  168. package/examples/frame-demo.d.ts +1 -0
  169. package/examples/frame-demo.js +36 -0
  170. package/examples/frame-demo.js.map +1 -0
  171. package/examples/frame-horizontal-demo.d.ts +1 -0
  172. package/examples/frame-horizontal-demo.js +44 -0
  173. package/examples/frame-horizontal-demo.js.map +1 -0
  174. package/examples/frame-no-image-demo.d.ts +1 -0
  175. package/examples/frame-no-image-demo.js +47 -0
  176. package/examples/frame-no-image-demo.js.map +1 -0
  177. package/examples/frame-vertical-demo.d.ts +1 -0
  178. package/examples/frame-vertical-demo.js +44 -0
  179. package/examples/frame-vertical-demo.js.map +1 -0
  180. package/examples/frame-with-tag-demo.d.ts +1 -0
  181. package/examples/frame-with-tag-demo.js +48 -0
  182. package/examples/frame-with-tag-demo.js.map +1 -0
  183. package/examples/journey-card-compact-demo.d.ts +1 -0
  184. package/examples/journey-card-compact-demo.js +71 -0
  185. package/examples/journey-card-compact-demo.js.map +1 -0
  186. package/examples/journey-card-demo.d.ts +1 -0
  187. package/examples/journey-card-demo.js +123 -0
  188. package/examples/journey-card-demo.js.map +1 -0
  189. package/examples/page-navigation-demo.d.ts +1 -0
  190. package/examples/page-navigation-demo.js +53 -0
  191. package/examples/page-navigation-demo.js.map +1 -0
  192. package/examples/password-demo.js +1 -0
  193. package/examples/password-demo.js.map +1 -1
  194. package/examples/phone-field-demo.js +6 -2
  195. package/examples/phone-field-demo.js.map +1 -1
  196. package/examples/promises-demo.d.ts +1 -0
  197. package/examples/promises-demo.js +50 -0
  198. package/examples/promises-demo.js.map +1 -0
  199. package/examples/radio-demo.js +3 -3
  200. package/examples/radio-demo.js.map +1 -1
  201. package/examples/radio-select-demo.d.ts +1 -0
  202. package/examples/radio-select-demo.js +100 -0
  203. package/examples/radio-select-demo.js.map +1 -0
  204. package/examples/scrollbar-demo.d.ts +1 -0
  205. package/examples/scrollbar-demo.js +42 -0
  206. package/examples/scrollbar-demo.js.map +1 -0
  207. package/examples/select-demo.js +1 -0
  208. package/examples/select-demo.js.map +1 -1
  209. package/examples/slider-frame-demo.d.ts +1 -0
  210. package/examples/slider-frame-demo.js +39 -0
  211. package/examples/slider-frame-demo.js.map +1 -0
  212. package/examples/slider-frame-with-button-demo.d.ts +1 -0
  213. package/examples/slider-frame-with-button-demo.js +47 -0
  214. package/examples/slider-frame-with-button-demo.js.map +1 -0
  215. package/examples/slider-frame-with-tag-demo.d.ts +1 -0
  216. package/examples/slider-frame-with-tag-demo.js +51 -0
  217. package/examples/slider-frame-with-tag-demo.js.map +1 -0
  218. package/examples/sparkle-wrapper-demo.d.ts +1 -0
  219. package/examples/sparkle-wrapper-demo.js +34 -0
  220. package/examples/sparkle-wrapper-demo.js.map +1 -0
  221. package/examples/switch-demo.js +3 -2
  222. package/examples/switch-demo.js.map +1 -1
  223. package/examples/tabs-demo.js +2 -5
  224. package/examples/tabs-demo.js.map +1 -1
  225. package/examples/tabs-notification-demo.d.ts +1 -0
  226. package/examples/tabs-notification-demo.js +64 -0
  227. package/examples/tabs-notification-demo.js.map +1 -0
  228. package/examples/tabs-with-select-demo.js +1 -0
  229. package/examples/tabs-with-select-demo.js.map +1 -1
  230. package/examples/text-field-demo.js +6 -0
  231. package/examples/text-field-demo.js.map +1 -1
  232. package/examples/toggle-demo.d.ts +1 -0
  233. package/examples/toggle-demo.js +44 -0
  234. package/examples/toggle-demo.js.map +1 -0
  235. package/examples/toggle-small-demo.d.ts +1 -0
  236. package/examples/toggle-small-demo.js +33 -0
  237. package/examples/toggle-small-demo.js.map +1 -0
  238. package/examples/tooltip-demo.d.ts +1 -0
  239. package/examples/tooltip-demo.js +103 -0
  240. package/examples/tooltip-demo.js.map +1 -0
  241. package/package.json +9 -3
  242. package/styles/animate.css +19 -0
  243. package/styles/components.css +97 -4
  244. package/styles/index.css +0 -1
  245. package/styles/theme.css +1 -2
  246. package/styles/ui/button.css +1 -1
  247. package/styles/ui/chat-button.css +68 -1
  248. package/styles/ui/controls.css +11 -58
  249. package/styles/ui/range.css +6 -1
  250. package/styles/ui/tabs.css +0 -19
  251. package/ui/Accordion.d.ts +30 -0
  252. package/ui/Accordion.js +71 -0
  253. package/ui/Accordion.js.map +1 -0
  254. package/ui/AdvancedToast.js +22 -19
  255. package/ui/AdvancedToast.js.map +1 -1
  256. package/ui/Avatar.js +1 -1
  257. package/ui/Avatar.js.map +1 -1
  258. package/ui/BasicToast.js +12 -12
  259. package/ui/BasicToast.js.map +1 -1
  260. package/ui/Breadcrumb.js +7 -6
  261. package/ui/Breadcrumb.js.map +1 -1
  262. package/ui/Chapters/Chapter.d.ts +7 -0
  263. package/ui/Chapters/Chapter.js +36 -0
  264. package/ui/Chapters/Chapter.js.map +1 -0
  265. package/ui/Chapters/ChapterTitle.d.ts +14 -0
  266. package/ui/Chapters/ChapterTitle.js +35 -0
  267. package/ui/Chapters/ChapterTitle.js.map +1 -0
  268. package/ui/Chapters/Chapters.d.ts +15 -0
  269. package/ui/Chapters/Chapters.js +42 -0
  270. package/ui/Chapters/Chapters.js.map +1 -0
  271. package/ui/Chapters/Chapters.themes.d.ts +9 -0
  272. package/ui/Chapters/Chapters.themes.js +65 -0
  273. package/ui/Chapters/Chapters.themes.js.map +1 -0
  274. package/ui/Chapters/ChaptersSummary.d.ts +17 -0
  275. package/ui/Chapters/ChaptersSummary.js +29 -0
  276. package/ui/Chapters/ChaptersSummary.js.map +1 -0
  277. package/ui/ChatButton.js +9 -9
  278. package/ui/ChatButton.js.map +1 -1
  279. package/ui/ChatInput.d.ts +10 -0
  280. package/ui/ChatInput.js +149 -0
  281. package/ui/ChatInput.js.map +1 -0
  282. package/ui/ChatMessage.d.ts +6 -0
  283. package/ui/ChatMessage.js +2 -0
  284. package/ui/ChatTypingIndicator.d.ts +2 -0
  285. package/ui/ChatTypingIndicator.js +30 -0
  286. package/ui/ChatTypingIndicator.js.map +1 -0
  287. package/ui/ChatWindow.d.ts +34 -0
  288. package/ui/ChatWindow.js +142 -0
  289. package/ui/ChatWindow.js.map +1 -0
  290. package/ui/ChatWindowCsatPrompt.d.ts +15 -0
  291. package/ui/ChatWindowCsatPrompt.js +71 -0
  292. package/ui/ChatWindowCsatPrompt.js.map +1 -0
  293. package/ui/ChatWindowCsatThankYou.d.ts +9 -0
  294. package/ui/ChatWindowCsatThankYou.js +29 -0
  295. package/ui/ChatWindowCsatThankYou.js.map +1 -0
  296. package/ui/ChatWindowQuote.d.ts +22 -0
  297. package/ui/ChatWindowQuote.js +141 -0
  298. package/ui/ChatWindowQuote.js.map +1 -0
  299. package/ui/Chip.js +4 -4
  300. package/ui/ChoiceExpander.js +17 -17
  301. package/ui/ChoiceExpander.js.map +1 -1
  302. package/ui/Countdown.d.ts +16 -0
  303. package/ui/Countdown.js +61 -0
  304. package/ui/Countdown.js.map +1 -0
  305. package/ui/Datepicker.d.ts +26 -0
  306. package/ui/Datepicker.js +2 -0
  307. package/ui/Day.d.ts +25 -0
  308. package/ui/Day.js +2 -0
  309. package/ui/Dropdown.d.ts +20 -3
  310. package/ui/Dropdown.js +61 -27
  311. package/ui/Dropdown.js.map +1 -1
  312. package/ui/ElasticHeight.js +1 -0
  313. package/ui/ElasticHeight.js.map +1 -1
  314. package/ui/ExpandableText.d.ts +14 -0
  315. package/ui/ExpandableText.js +40 -0
  316. package/ui/ExpandableText.js.map +1 -0
  317. package/ui/FlipCard.d.ts +7 -0
  318. package/ui/FlipCard.js +59 -0
  319. package/ui/FlipCard.js.map +1 -0
  320. package/ui/HamburgerIcon.js +1 -1
  321. package/ui/HamburgerIcon.js.map +1 -1
  322. package/ui/Link.js +8 -8
  323. package/ui/Link.js.map +1 -1
  324. package/ui/PageNavigation.d.ts +13 -0
  325. package/ui/PageNavigation.js +71 -0
  326. package/ui/PageNavigation.js.map +1 -0
  327. package/ui/Pagination.js +23 -23
  328. package/ui/Pagination.js.map +1 -1
  329. package/ui/Promises/Promises.d.ts +26 -0
  330. package/ui/Promises/Promises.js +42 -0
  331. package/ui/Promises/Promises.js.map +1 -0
  332. package/ui/Promises/PromisesMedia.d.ts +12 -0
  333. package/ui/Promises/PromisesMedia.js +64 -0
  334. package/ui/Promises/PromisesMedia.js.map +1 -0
  335. package/ui/Promises/PromisesMenu.d.ts +11 -0
  336. package/ui/Promises/PromisesMenu.js +154 -0
  337. package/ui/Promises/PromisesMenu.js.map +1 -0
  338. package/ui/Scrollbar.d.ts +14 -0
  339. package/ui/Scrollbar.js +68 -0
  340. package/ui/Scrollbar.js.map +1 -0
  341. package/ui/SidebarLayout.d.ts +3 -1
  342. package/ui/SidebarLayout.js +67 -59
  343. package/ui/SidebarLayout.js.map +1 -1
  344. package/ui/SparkleWrapper.d.ts +5 -0
  345. package/ui/SparkleWrapper.js +56 -0
  346. package/ui/SparkleWrapper.js.map +1 -0
  347. package/ui/Tag.js +6 -6
  348. package/ui/Toggle.d.ts +15 -0
  349. package/ui/Toggle.js +42 -0
  350. package/ui/Toggle.js.map +1 -0
  351. package/ui/Tooltip.d.ts +8 -0
  352. package/ui/Tooltip.js +2 -0
  353. package/ui/buttons/Button.type.d.ts +1 -1
  354. package/ui/buttons/Button.type.js +1 -1
  355. package/ui/buttons/Button.type.js.map +1 -1
  356. package/ui/buttons/ButtonContent.js +3 -3
  357. package/ui/carousel/Carousel.context.d.ts +27 -0
  358. package/ui/carousel/Carousel.context.js +2 -0
  359. package/ui/carousel/Carousel.d.ts +3 -0
  360. package/ui/carousel/Carousel.js +12 -0
  361. package/ui/carousel/Carousel.js.map +1 -0
  362. package/ui/carousel/CarouselBody.d.ts +6 -0
  363. package/ui/carousel/CarouselBody.js +21 -0
  364. package/ui/carousel/CarouselBody.js.map +1 -0
  365. package/ui/carousel/CarouselItem.d.ts +6 -0
  366. package/ui/carousel/CarouselItem.js +21 -0
  367. package/ui/carousel/CarouselItem.js.map +1 -0
  368. package/ui/carousel/CarouselNext.d.ts +8 -0
  369. package/ui/carousel/CarouselNext.js +23 -0
  370. package/ui/carousel/CarouselNext.js.map +1 -0
  371. package/ui/carousel/CarouselPrevious.d.ts +8 -0
  372. package/ui/carousel/CarouselPrevious.js +23 -0
  373. package/ui/carousel/CarouselPrevious.js.map +1 -0
  374. package/ui/contexts/TridentUIConfig.js +1 -1
  375. package/ui/criteria/Birthdate.d.ts +13 -0
  376. package/ui/criteria/Birthdate.js +2 -0
  377. package/ui/criteria/CriteriaDates.d.ts +32 -0
  378. package/ui/criteria/CriteriaDates.js +76 -0
  379. package/ui/criteria/CriteriaDates.js.map +1 -0
  380. package/ui/criteria/CriteriaParticipants.d.ts +106 -0
  381. package/ui/criteria/CriteriaParticipants.js +2 -0
  382. package/ui/criteria/CriteriaSection.d.ts +6 -0
  383. package/ui/criteria/CriteriaSection.js +15 -0
  384. package/ui/criteria/CriteriaSection.js.map +1 -0
  385. package/ui/criteria/CriteriaTransports.d.ts +53 -0
  386. package/ui/criteria/CriteriaTransports.js +274 -0
  387. package/ui/criteria/CriteriaTransports.js.map +1 -0
  388. package/ui/forms/CheckboxSelect.d.ts +31 -0
  389. package/ui/forms/CheckboxSelect.js +119 -0
  390. package/ui/forms/CheckboxSelect.js.map +1 -0
  391. package/ui/forms/Filter.d.ts +3 -1
  392. package/ui/forms/Filter.js +17 -13
  393. package/ui/forms/Filter.js.map +1 -1
  394. package/ui/forms/FloatingLabelTextField.d.ts +12 -0
  395. package/ui/forms/FloatingLabelTextField.js +132 -0
  396. package/ui/forms/FloatingLabelTextField.js.map +1 -0
  397. package/ui/forms/FormControl.d.ts +1 -1
  398. package/ui/forms/FormControl.js.map +1 -1
  399. package/ui/forms/FormControlError.js +4 -4
  400. package/ui/forms/NumberField.d.ts +3 -2
  401. package/ui/forms/NumberField.js +24 -25
  402. package/ui/forms/NumberField.js.map +1 -1
  403. package/ui/forms/PhoneField.d.ts +5 -10
  404. package/ui/forms/PhoneField.js +31 -211
  405. package/ui/forms/PhoneField.js.map +1 -1
  406. package/ui/forms/PhoneFieldFullInput.d.ts +16 -0
  407. package/ui/forms/PhoneFieldFullInput.js +110 -0
  408. package/ui/forms/PhoneFieldFullInput.js.map +1 -0
  409. package/ui/forms/PhoneFieldSplitInput.d.ts +19 -0
  410. package/ui/forms/PhoneFieldSplitInput.js +158 -0
  411. package/ui/forms/PhoneFieldSplitInput.js.map +1 -0
  412. package/ui/forms/RadioSelect.d.ts +31 -0
  413. package/ui/forms/RadioSelect.js +117 -0
  414. package/ui/forms/RadioSelect.js.map +1 -0
  415. package/ui/forms/Range.d.ts +1 -1
  416. package/ui/forms/Select.js +16 -17
  417. package/ui/forms/Select.js.map +1 -1
  418. package/ui/forms/Switch.d.ts +5 -3
  419. package/ui/forms/Switch.js +54 -34
  420. package/ui/forms/Switch.js.map +1 -1
  421. package/ui/forms/TextField.js +33 -24
  422. package/ui/forms/TextField.js.map +1 -1
  423. package/ui/forms/checkboxes/Checkbox.d.ts +3 -1
  424. package/ui/forms/checkboxes/Checkbox.js +21 -17
  425. package/ui/forms/checkboxes/Checkbox.js.map +1 -1
  426. package/ui/forms/checkboxes/Checkboxes.d.ts +5 -0
  427. package/ui/forms/checkboxes/Checkboxes.js +8 -8
  428. package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
  429. package/ui/forms/password/Password.js +19 -20
  430. package/ui/forms/password/Password.js.map +1 -1
  431. package/ui/forms/password/ValidationMessage.js +5 -5
  432. package/ui/forms/radios/Radio.d.ts +2 -1
  433. package/ui/forms/radios/Radio.js +6 -3
  434. package/ui/forms/radios/Radio.js.map +1 -1
  435. package/ui/forms/radios/RadioGroup.js +5 -6
  436. package/ui/forms/radios/RadioGroup.js.map +1 -1
  437. package/ui/frame/Frame.d.ts +8 -0
  438. package/ui/frame/Frame.js +16 -0
  439. package/ui/frame/Frame.js.map +1 -0
  440. package/ui/frame/FrameLabelsWrapper.d.ts +5 -0
  441. package/ui/frame/FrameLabelsWrapper.js +12 -0
  442. package/ui/frame/FrameLabelsWrapper.js.map +1 -0
  443. package/ui/frame/FrameTitle.d.ts +7 -0
  444. package/ui/frame/FrameTitle.js +25 -0
  445. package/ui/frame/FrameTitle.js.map +1 -0
  446. package/ui/frame/FrameWrapper.d.ts +6 -0
  447. package/ui/frame/FrameWrapper.js +14 -0
  448. package/ui/frame/FrameWrapper.js.map +1 -0
  449. package/ui/frame/SliderFrame.d.ts +14 -0
  450. package/ui/frame/SliderFrame.js +50 -0
  451. package/ui/frame/SliderFrame.js.map +1 -0
  452. package/ui/helpers/cn.d.ts +2 -0
  453. package/ui/helpers/cn.js +10 -0
  454. package/ui/helpers/cn.js.map +1 -0
  455. package/ui/helpers/phone/defaultPrefixes.d.ts +1 -0
  456. package/ui/helpers/phone/defaultPrefixes.js +52 -28
  457. package/ui/helpers/phone/defaultPrefixes.js.map +1 -1
  458. package/ui/helpers/phone/formatters.d.ts +11 -0
  459. package/ui/helpers/phone/formatters.js +32 -1
  460. package/ui/helpers/phone/formatters.js.map +1 -1
  461. package/ui/helpers/phone/index.d.ts +1 -1
  462. package/ui/helpers/phone/index.js +3 -3
  463. package/ui/hooks/useIsClient.d.ts +1 -0
  464. package/ui/hooks/useIsClient.js +12 -0
  465. package/ui/hooks/useIsClient.js.map +1 -0
  466. package/ui/hooks/useValue.d.ts +3 -4
  467. package/ui/hooks/useValue.js +11 -11
  468. package/ui/hooks/useValue.js.map +1 -1
  469. package/ui/journey-card/FlightSegmentCard.d.ts +15 -0
  470. package/ui/journey-card/FlightSegmentCard.js +73 -0
  471. package/ui/journey-card/FlightSegmentCard.js.map +1 -0
  472. package/ui/journey-card/FlightTimeline.d.ts +5 -0
  473. package/ui/journey-card/FlightTimeline.js +27 -0
  474. package/ui/journey-card/FlightTimeline.js.map +1 -0
  475. package/ui/journey-card/ItineraryDetails.d.ts +9 -0
  476. package/ui/journey-card/ItineraryDetails.js +40 -0
  477. package/ui/journey-card/ItineraryDetails.js.map +1 -0
  478. package/ui/journey-card/JourneyCard.d.ts +17 -0
  479. package/ui/journey-card/JourneyCard.js +34 -0
  480. package/ui/journey-card/JourneyCard.js.map +1 -0
  481. package/ui/journey-card/JourneyDetails.d.ts +47 -0
  482. package/ui/journey-card/JourneyDetails.js +183 -0
  483. package/ui/journey-card/JourneyDetails.js.map +1 -0
  484. package/ui/tabs/Tabs.d.ts +5 -1
  485. package/ui/tabs/Tabs.js +208 -124
  486. package/ui/tabs/Tabs.js.map +1 -1
@@ -33,8 +33,7 @@
33
33
  @apply border-black;
34
34
  }
35
35
  label > span > input[type='radio']:focus-visible + span {
36
- @apply ring-8;
37
- --tw-ring-color: color-mix(in oklab, var(--color-lavender) 20%, transparent);
36
+ @apply ring-4 ring-black ring-offset-2;
38
37
  }
39
38
  label > span > input[type='radio'] + span {
40
39
  @apply rounded-full;
@@ -86,66 +85,24 @@
86
85
  transform: scale(1);
87
86
  }
88
87
  label > input[type='checkbox'][data-name='Filter']:focus-visible + span {
89
- @apply ring-8;
90
- --tw-ring-color: color-mix(in oklab, var(--color-lavender) 20%, transparent);
88
+ @apply ring-4 ring-black ring-offset-2;
91
89
  }
92
90
  /* Switch */
93
- label > span > input[type='checkbox'][role='switch'] + span {
94
- @apply transition-all;
91
+ input[role='switch'][data-name='Switch'] + span {
95
92
  @apply relative flex items-center transition-colors duration-200;
96
93
  @apply ring-0;
97
94
  --tw-ring-color: color-mix(in oklab, var(--color-lavender) 0%, transparent);
98
- background-color: var(--color-middleGrey);
99
- border-radius: var(--radius-pill);
100
- }
101
- label > span > input[type='checkbox'][role='switch'] + span > svg {
102
- transition: all var(--transition-duration-boop) var(--transition-fn-boop);
103
- transform: translate(calc(0% + 4px));
104
- }
105
- label > span > input[type='checkbox'][role='switch'] + span > svg circle + circle {
106
- opacity: 1;
107
- transition: opacity var(--transition-duration-boop) var(--transition-fn-boop);
108
- }
109
- label > span > input[type='checkbox'][role='switch'] + span > svg path {
110
- opacity: 0;
111
- scale: 0;
112
- transform-origin: center;
113
- transition:
114
- opacity var(--transition-duration-boop) var(--transition-fn-boop),
115
- scale var(--transition-duration-boop) var(--transition-fn-boop);
116
- }
117
- label > span > input[type='checkbox'][role='switch']:checked + span {
118
- background-color: var(--color-saffron);
119
- }
120
- label > span > input[type='checkbox'][role='switch']:checked + span > svg {
121
- transform: translate(calc(100% + 4px));
122
- }
123
- label > span > input[type='checkbox'][role='switch']:checked + span > svg circle + circle {
124
- opacity: 0;
125
- }
126
- label > span > input[type='checkbox'][role='switch']:checked + span > svg path {
127
- scale: 1;
128
- opacity: 1;
129
- }
130
- label > span > input[type='checkbox'][role='switch']:focus-visible + span {
131
- @apply ring-8;
132
- --tw-ring-color: color-mix(in oklab, var(--color-lavender) 20%, transparent);
133
95
  }
134
96
 
135
- button[role='switch'][data-name='Switch'] {
136
- @apply relative flex items-center transition-colors duration-200;
137
- @apply ring-0;
138
- --tw-ring-color: color-mix(in oklab, var(--color-lavender) 0%, transparent);
139
- }
140
- button[role='switch'][data-name='Switch'] svg {
97
+ input[role='switch'][data-name='Switch'] + span svg {
141
98
  transition: all var(--transition-duration-boop) var(--transition-fn-boop);
142
99
  transform: translate(calc(0%));
143
100
  }
144
- button[role='switch'][data-name='Switch'] svg circle + circle {
101
+ input[role='switch'][data-name='Switch'] + span svg circle + circle {
145
102
  opacity: 1;
146
103
  transition: opacity var(--transition-duration-boop) var(--transition-fn-boop);
147
104
  }
148
- button[role='switch'][data-name='Switch'] svg path {
105
+ input[role='switch'][data-name='Switch'] + span svg path {
149
106
  opacity: 0;
150
107
  scale: 0;
151
108
  transform-origin: center;
@@ -153,21 +110,17 @@
153
110
  opacity var(--transition-duration-boop) var(--transition-fn-boop),
154
111
  scale var(--transition-duration-boop) var(--transition-fn-boop);
155
112
  }
156
- button[role='switch'][data-name='Switch'][aria-checked='true'] {
157
- background-color: var(--color-saffron);
158
- }
159
- button[role='switch'][data-name='Switch'][aria-checked='true'] svg {
113
+ input[role='switch'][data-name='Switch']:checked + span svg {
160
114
  transform: translate(calc(100%));
161
115
  }
162
- button[role='switch'][data-name='Switch'][aria-checked='true'] svg circle + circle {
116
+ input[role='switch'][data-name='Switch']:checked + span svg circle + circle {
163
117
  opacity: 0;
164
118
  }
165
- button[role='switch'][data-name='Switch'][aria-checked='true'] svg path {
119
+ input[role='switch'][data-name='Switch']:checked + span svg path {
166
120
  scale: 1;
167
121
  opacity: 1;
168
122
  }
169
- button[role='switch'][data-name='Switch']:focus-visible {
170
- @apply ring-8;
171
- --tw-ring-color: color-mix(in oklab, var(--color-lavender) 20%, transparent);
123
+ input[role='switch'][data-name='Switch']:focus-visible + span {
124
+ @apply ring-4 ring-black ring-offset-2;
172
125
  }
173
126
  }
@@ -54,6 +54,7 @@
54
54
  @apply m-0;
55
55
  @apply pointer-events-none;
56
56
  @apply appearance-none;
57
+ @apply outline-none;
57
58
 
58
59
  grid-column: 1 / span 2;
59
60
  grid-row: 3;
@@ -61,6 +62,10 @@
61
62
  --col: #000;
62
63
  }
63
64
 
65
+ .input-range:focus-visible {
66
+ @apply ring-4 ring-black ring-offset-2;
67
+ }
68
+
64
69
  .input-range-sliderThumb {
65
70
  @apply transform;
66
71
  @apply appearance-none;
@@ -159,7 +164,7 @@
159
164
  color: hsl(0deg 0% 0%);
160
165
  font-size: 0.75rem;
161
166
  line-height: 0.875rem;
162
- @apply font-semibold;
167
+ font-weight: 600;
163
168
 
164
169
  left: calc(0.5 * var(--thumbWidth));
165
170
  }
@@ -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"}
@@ -5,8 +5,8 @@ import { Colors as n, getBgColor as r, getBorderColor as i, getTextColor as a }
5
5
  import { useCountdown as o } from "./hooks/useCountdown.js";
6
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
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
12
  let O = l(), [k, A] = d(!1), [j, M] = d(!1), N = u(null), { progress: P } = o({
@@ -23,7 +23,7 @@ var h = ({ className: h, title: g, body: _, icon: v, isVisible: y, labels: b, ch
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
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),
@@ -32,50 +32,53 @@ var h = ({ className: h, title: g, body: _, icon: v, isVisible: y, labels: b, ch
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", a(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(t, {
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", {
81
+ children: /* @__PURE__ */ f("div", {
79
82
  className: r(S),
80
83
  style: {
81
84
  width: "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-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 <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,8BAA8B,sCAC1C,+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
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-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 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,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;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"}
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent, PropsWithChildren } from 'react';
2
+ interface Props {
3
+ index: number;
4
+ setActiveChapter: (index: number) => void;
5
+ }
6
+ export declare const Chapter: FunctionComponent<PropsWithChildren<Props>>;
7
+ export {};
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { useEffect as e, useRef as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ var r = (() => {
5
+ let e = [];
6
+ for (let t = 0; t <= 1; t += .03) e.push(parseFloat(t.toFixed(2)));
7
+ return e;
8
+ })(), i = (e) => {
9
+ let t = e.boundingClientRect.height <= window.innerHeight / 2 && e.intersectionRect.height > window.innerHeight / 3, n = e.boundingClientRect.height <= window.innerHeight / 2 && e.boundingClientRect.height === e.intersectionRect.height, r = e.boundingClientRect.height > window.innerHeight / 2 && e.intersectionRect.height > window.innerHeight / 2;
10
+ return t || n || r;
11
+ }, a = ({ children: a, index: o, setActiveChapter: s }) => {
12
+ let c = t(null);
13
+ return e(() => {
14
+ let e = c.current;
15
+ if (e) {
16
+ let t = new IntersectionObserver(([e]) => {
17
+ i(e) && s(o);
18
+ }, {
19
+ threshold: r,
20
+ rootMargin: "0px 0px 0px 0px"
21
+ });
22
+ return t.observe(e), () => t.unobserve(e);
23
+ }
24
+ }, [
25
+ c,
26
+ o,
27
+ s
28
+ ]), /* @__PURE__ */ n("section", {
29
+ ref: c,
30
+ children: a
31
+ });
32
+ };
33
+ //#endregion
34
+ export { a as Chapter };
35
+
36
+ //# sourceMappingURL=Chapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chapter.js","names":[],"sources":["../../../lib/ui/Chapters/Chapter.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useRef, type FunctionComponent, type PropsWithChildren } from 'react';\n\ninterface Props {\n index: number;\n setActiveChapter: (index: number) => void;\n}\n\nconst generateThreshold = () => {\n const threshold: number[] = [];\n\n for (let i = 0; i <= 1; i += 0.03) {\n threshold.push(parseFloat(i.toFixed(2)));\n }\n\n return threshold;\n};\n\nconst THRESHOLD = generateThreshold();\n\nconst isChapterActive = (entry: IntersectionObserverEntry) => {\n const isHalfHeightAndOneThirdVisible =\n entry.boundingClientRect.height <= window.innerHeight / 2 &&\n entry.intersectionRect.height > window.innerHeight / 3;\n\n const isHalfHeightAndFullyVisible =\n entry.boundingClientRect.height <= window.innerHeight / 2 &&\n entry.boundingClientRect.height === entry.intersectionRect.height;\n\n const isMoreThanHalfHeightAndHalfVisible =\n entry.boundingClientRect.height > window.innerHeight / 2 &&\n entry.intersectionRect.height > window.innerHeight / 2;\n\n return (\n isHalfHeightAndOneThirdVisible ||\n isHalfHeightAndFullyVisible ||\n isMoreThanHalfHeightAndHalfVisible\n );\n};\n\nexport const Chapter: FunctionComponent<PropsWithChildren<Props>> = ({\n children,\n index,\n setActiveChapter,\n}) => {\n const element = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const current = element.current;\n\n if (current) {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (isChapterActive(entry)) {\n setActiveChapter(index);\n }\n },\n {\n threshold: THRESHOLD,\n rootMargin: '0px 0px 0px 0px',\n },\n );\n\n observer.observe(current);\n\n return () => observer.unobserve(current);\n }\n }, [element, index, setActiveChapter]);\n\n return <section ref={element}>{children}</section>;\n};\n"],"mappings":";;;AAkBA,IAAM,WAV0B;CAC9B,IAAM,IAAsB,EAAE;AAE9B,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,IAC3B,GAAU,KAAK,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;AAG1C,QAAO;IAG4B,EAE/B,KAAmB,MAAqC;CAC5D,IAAM,IACJ,EAAM,mBAAmB,UAAU,OAAO,cAAc,KACxD,EAAM,iBAAiB,SAAS,OAAO,cAAc,GAEjD,IACJ,EAAM,mBAAmB,UAAU,OAAO,cAAc,KACxD,EAAM,mBAAmB,WAAW,EAAM,iBAAiB,QAEvD,IACJ,EAAM,mBAAmB,SAAS,OAAO,cAAc,KACvD,EAAM,iBAAiB,SAAS,OAAO,cAAc;AAEvD,QACE,KACA,KACA;GAIS,KAAwD,EACnE,aACA,UACA,0BACI;CACJ,IAAM,IAAU,EAAuB,KAAK;AAwB5C,QAtBA,QAAgB;EACd,IAAM,IAAU,EAAQ;AAExB,MAAI,GAAS;GACX,IAAM,IAAW,IAAI,sBAClB,CAAC,OAAW;AACX,IAAI,EAAgB,EAAM,IACxB,EAAiB,EAAM;MAG3B;IACE,WAAW;IACX,YAAY;IACb,CACF;AAID,UAFA,EAAS,QAAQ,EAAQ,QAEZ,EAAS,UAAU,EAAQ;;IAEzC;EAAC;EAAS;EAAO;EAAiB,CAAC,EAE/B,kBAAC,WAAD;EAAS,KAAK;EAAU;EAAmB,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { ComponentProps, FunctionComponent, PropsWithChildren } from 'react';
2
+ import { Heading } from '../heading/Heading';
3
+ import { Theme } from '../types/Theme';
4
+ interface Props {
5
+ className?: string;
6
+ hasNext?: boolean;
7
+ hLevel?: ComponentProps<typeof Heading>['level'];
8
+ index: number;
9
+ isActive?: boolean;
10
+ onClick?: () => void;
11
+ theme?: Theme;
12
+ }
13
+ export declare const ChapterTitle: FunctionComponent<PropsWithChildren<Props>>;
14
+ export {};