@clubmed/trident-ui 2.0.0-beta.7 → 2.0.0-beta.70
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.
- package/README.md +8 -0
- package/assets/trident-ui.css +3 -0
- package/chunks/Backdrop.js +1 -1
- package/chunks/Backdrop.js.map +1 -1
- package/chunks/Birthdate.js +27 -0
- package/chunks/Birthdate.js.map +1 -0
- package/chunks/Carousel.context.js +1548 -0
- package/chunks/Carousel.context.js.map +1 -0
- package/chunks/ChatMessage.js +14395 -0
- package/chunks/ChatMessage.js.map +1 -0
- package/chunks/CriteriaParticipants.js +415 -0
- package/chunks/CriteriaParticipants.js.map +1 -0
- package/chunks/DateField.js +189 -128
- package/chunks/DateField.js.map +1 -1
- package/chunks/Datepicker.js +2039 -0
- package/chunks/Datepicker.js.map +1 -0
- package/chunks/Day.js +88 -0
- package/chunks/Day.js.map +1 -0
- package/chunks/Range.js +2 -2
- package/chunks/Range.js.map +1 -1
- package/chunks/Tooltip.js +4461 -0
- package/chunks/Tooltip.js.map +1 -0
- package/chunks/addLeadingZeros.js +33 -0
- package/chunks/addLeadingZeros.js.map +1 -0
- package/chunks/addYears.js +18 -0
- package/chunks/addYears.js.map +1 -0
- package/chunks/chunk.js +11 -4
- package/chunks/client.js +18953 -0
- package/chunks/client.js.map +1 -0
- package/chunks/endOfMonth.js +17 -0
- package/chunks/endOfMonth.js.map +1 -0
- package/chunks/format.js +1113 -0
- package/chunks/format.js.map +1 -0
- package/chunks/formatISO.js +29 -0
- package/chunks/formatISO.js.map +1 -0
- package/chunks/isAfter.js +9 -0
- package/chunks/isAfter.js.map +1 -0
- package/chunks/isBefore.js +15 -0
- package/chunks/isBefore.js.map +1 -0
- package/chunks/normalizeDates.js +10 -0
- package/chunks/normalizeDates.js.map +1 -0
- package/chunks/subYears.js +9 -0
- package/chunks/subYears.js.map +1 -0
- package/examples/advanced-toast-demo.js +2 -2
- package/examples/advanced-toast-demo.js.map +1 -1
- package/examples/advanced-toast-green-demo.js +1 -1
- package/examples/advanced-toast-green-demo.js.map +1 -1
- package/examples/advanced-toast-no-dismiss-demo.js +1 -1
- package/examples/advanced-toast-no-dismiss-demo.js.map +1 -1
- package/examples/advanced-toast-red-demo.js +1 -1
- package/examples/advanced-toast-red-demo.js.map +1 -1
- package/examples/advanced-toast-with-details-demo.js +2 -2
- package/examples/advanced-toast-with-details-demo.js.map +1 -1
- package/examples/arrow-button-demo.js +2 -1
- package/examples/arrow-button-demo.js.map +1 -1
- package/examples/arrow-button-disabled-demo.js +2 -1
- package/examples/arrow-button-disabled-demo.js.map +1 -1
- package/examples/arrow-button-left-demo.js +2 -1
- package/examples/arrow-button-left-demo.js.map +1 -1
- package/examples/arrow-button-outline-demo.js +2 -1
- package/examples/arrow-button-outline-demo.js.map +1 -1
- package/examples/arrow-button-tail-demo.js +2 -1
- package/examples/arrow-button-tail-demo.js.map +1 -1
- package/examples/button-demo.js +2 -2
- package/examples/button-demo.js.map +1 -1
- package/examples/chat-button-demo.js +1 -1
- package/examples/chat-button-demo.js.map +1 -1
- package/examples/chat-button-offset-demo.js +4 -1
- package/examples/chat-button-offset-demo.js.map +1 -1
- package/examples/chat-input-demo.d.ts +1 -0
- package/examples/chat-input-demo.js +22 -0
- package/examples/chat-input-demo.js.map +1 -0
- package/examples/chat-message-demo.d.ts +1 -0
- package/examples/chat-message-demo.js +20 -0
- package/examples/chat-message-demo.js.map +1 -0
- package/examples/chat-typing-indicator-demo.d.ts +1 -0
- package/examples/chat-typing-indicator-demo.js +14 -0
- package/examples/chat-typing-indicator-demo.js.map +1 -0
- package/examples/chat-window-csat-demo.d.ts +1 -0
- package/examples/chat-window-csat-demo.js +69 -0
- package/examples/chat-window-csat-demo.js.map +1 -0
- package/examples/chat-window-csat-prompt-demo.d.ts +1 -0
- package/examples/chat-window-csat-prompt-demo.js +40 -0
- package/examples/chat-window-csat-prompt-demo.js.map +1 -0
- package/examples/chat-window-demo.d.ts +1 -0
- package/examples/chat-window-demo.js +70 -0
- package/examples/chat-window-demo.js.map +1 -0
- package/examples/chat-window-quote-demo.d.ts +1 -0
- package/examples/chat-window-quote-demo.js +47 -0
- package/examples/chat-window-quote-demo.js.map +1 -0
- package/examples/chat-window-quotes-demo.d.ts +1 -0
- package/examples/chat-window-quotes-demo.js +68 -0
- package/examples/chat-window-quotes-demo.js.map +1 -0
- package/examples/checkbox-demo.js +17 -15
- package/examples/checkbox-demo.js.map +1 -1
- package/examples/checkbox-disabled-demo.js +12 -15
- package/examples/checkbox-disabled-demo.js.map +1 -1
- package/examples/checkbox-select-demo.d.ts +1 -0
- package/examples/checkbox-select-demo.js +101 -0
- package/examples/checkbox-select-demo.js.map +1 -0
- package/examples/checkboxes-demo.js +2 -1
- package/examples/checkboxes-demo.js.map +1 -1
- package/examples/checkboxes-with-form-control-demo.js +8 -8
- package/examples/checkboxes-with-form-control-demo.js.map +1 -1
- package/examples/choice-expander-demo.js +5 -67
- package/examples/choice-expander-demo.js.map +1 -1
- package/examples/countdown-demo.d.ts +1 -0
- package/examples/countdown-demo.js +39 -0
- package/examples/countdown-demo.js.map +1 -0
- package/examples/criteria-dates-demo.d.ts +1 -0
- package/examples/criteria-dates-demo.js +41 -0
- package/examples/criteria-dates-demo.js.map +1 -0
- package/examples/criteria-participants-demo.d.ts +1 -0
- package/examples/criteria-participants-demo.js +77 -0
- package/examples/criteria-participants-demo.js.map +1 -0
- package/examples/criteria-participants-flow1-demo.d.ts +1 -0
- package/examples/criteria-participants-flow1-demo.js +53 -0
- package/examples/criteria-participants-flow1-demo.js.map +1 -0
- package/examples/criteria-participants-flow2-demo.d.ts +1 -0
- package/examples/criteria-participants-flow2-demo.js +61 -0
- package/examples/criteria-participants-flow2-demo.js.map +1 -0
- package/examples/criteria-participants-flow3-demo.d.ts +1 -0
- package/examples/criteria-participants-flow3-demo.js +72 -0
- package/examples/criteria-participants-flow3-demo.js.map +1 -0
- package/examples/criteria-transport-demo.d.ts +1 -0
- package/examples/criteria-transport-demo.js +66 -0
- package/examples/criteria-transport-demo.js.map +1 -0
- package/examples/datepicker-demo.d.ts +1 -0
- package/examples/datepicker-demo.js +51 -0
- package/examples/datepicker-demo.js.map +1 -0
- package/examples/datepicker-disabled-days-demo.d.ts +1 -0
- package/examples/datepicker-disabled-days-demo.js +42 -0
- package/examples/datepicker-disabled-days-demo.js.map +1 -0
- package/examples/datepicker-duration-tooltip-demo.d.ts +1 -0
- package/examples/datepicker-duration-tooltip-demo.js +68 -0
- package/examples/datepicker-duration-tooltip-demo.js.map +1 -0
- package/examples/datepicker-no-prices-demo.d.ts +1 -0
- package/examples/datepicker-no-prices-demo.js +42 -0
- package/examples/datepicker-no-prices-demo.js.map +1 -0
- package/examples/datepicker-preselected-demo.d.ts +1 -0
- package/examples/datepicker-preselected-demo.js +77 -0
- package/examples/datepicker-preselected-demo.js.map +1 -0
- package/examples/dropdown-demo.js +9 -1
- package/examples/dropdown-demo.js.map +1 -1
- package/examples/elastic-height-demo.js +2 -1
- package/examples/elastic-height-demo.js.map +1 -1
- package/examples/expandable-text-demo.d.ts +1 -0
- package/examples/expandable-text-demo.js +22 -0
- package/examples/expandable-text-demo.js.map +1 -0
- package/examples/floating-label-text-field-demo.d.ts +1 -0
- package/examples/floating-label-text-field-demo.js +32 -0
- package/examples/floating-label-text-field-demo.js.map +1 -0
- package/examples/frame-demo.d.ts +1 -0
- package/examples/frame-demo.js +36 -0
- package/examples/frame-demo.js.map +1 -0
- package/examples/frame-horizontal-demo.d.ts +1 -0
- package/examples/frame-horizontal-demo.js +44 -0
- package/examples/frame-horizontal-demo.js.map +1 -0
- package/examples/frame-no-image-demo.d.ts +1 -0
- package/examples/frame-no-image-demo.js +47 -0
- package/examples/frame-no-image-demo.js.map +1 -0
- package/examples/frame-vertical-demo.d.ts +1 -0
- package/examples/frame-vertical-demo.js +44 -0
- package/examples/frame-vertical-demo.js.map +1 -0
- package/examples/frame-with-tag-demo.d.ts +1 -0
- package/examples/frame-with-tag-demo.js +48 -0
- package/examples/frame-with-tag-demo.js.map +1 -0
- package/examples/journey-card-compact-demo.d.ts +1 -0
- package/examples/journey-card-compact-demo.js +71 -0
- package/examples/journey-card-compact-demo.js.map +1 -0
- package/examples/journey-card-demo.d.ts +1 -0
- package/examples/journey-card-demo.js +123 -0
- package/examples/journey-card-demo.js.map +1 -0
- package/examples/page-navigation-demo.d.ts +1 -0
- package/examples/page-navigation-demo.js +53 -0
- package/examples/page-navigation-demo.js.map +1 -0
- package/examples/password-demo.js +1 -0
- package/examples/password-demo.js.map +1 -1
- package/examples/phone-field-demo.js +6 -2
- package/examples/phone-field-demo.js.map +1 -1
- package/examples/radio-demo.js +3 -3
- package/examples/radio-demo.js.map +1 -1
- package/examples/scrollbar-demo.d.ts +1 -0
- package/examples/scrollbar-demo.js +42 -0
- package/examples/scrollbar-demo.js.map +1 -0
- package/examples/select-demo.js +1 -0
- package/examples/select-demo.js.map +1 -1
- package/examples/slider-frame-demo.d.ts +1 -0
- package/examples/slider-frame-demo.js +39 -0
- package/examples/slider-frame-demo.js.map +1 -0
- package/examples/slider-frame-with-button-demo.d.ts +1 -0
- package/examples/slider-frame-with-button-demo.js +47 -0
- package/examples/slider-frame-with-button-demo.js.map +1 -0
- package/examples/slider-frame-with-tag-demo.d.ts +1 -0
- package/examples/slider-frame-with-tag-demo.js +51 -0
- package/examples/slider-frame-with-tag-demo.js.map +1 -0
- package/examples/switch-demo.js +3 -2
- package/examples/switch-demo.js.map +1 -1
- package/examples/tabs-demo.js +2 -5
- package/examples/tabs-demo.js.map +1 -1
- package/examples/tabs-notification-demo.d.ts +1 -0
- package/examples/tabs-notification-demo.js +64 -0
- package/examples/tabs-notification-demo.js.map +1 -0
- package/examples/tabs-with-select-demo.js +1 -0
- package/examples/tabs-with-select-demo.js.map +1 -1
- package/examples/text-field-demo.js +6 -0
- package/examples/text-field-demo.js.map +1 -1
- package/examples/toggle-demo.d.ts +1 -0
- package/examples/toggle-demo.js +44 -0
- package/examples/toggle-demo.js.map +1 -0
- package/examples/toggle-small-demo.d.ts +1 -0
- package/examples/toggle-small-demo.js +33 -0
- package/examples/toggle-small-demo.js.map +1 -0
- package/examples/tooltip-demo.d.ts +1 -0
- package/examples/tooltip-demo.js +103 -0
- package/examples/tooltip-demo.js.map +1 -0
- package/package.json +10 -3
- package/styles/components.css +99 -0
- package/styles/index.css +0 -1
- package/styles/theme.css +5 -2
- package/styles/ui/button.css +1 -1
- package/styles/ui/chat-button.css +68 -1
- package/styles/ui/controls.css +11 -58
- package/styles/ui/range.css +6 -1
- package/styles/ui/tabs.css +0 -19
- package/ui/AdvancedToast.js +19 -16
- package/ui/AdvancedToast.js.map +1 -1
- package/ui/Avatar.js +1 -1
- package/ui/Avatar.js.map +1 -1
- package/ui/BasicToast.js +3 -3
- package/ui/BasicToast.js.map +1 -1
- package/ui/Breadcrumb.js +1 -0
- package/ui/Breadcrumb.js.map +1 -1
- package/ui/ChatButton.js +2 -2
- package/ui/ChatButton.js.map +1 -1
- package/ui/ChatInput.d.ts +10 -0
- package/ui/ChatInput.js +149 -0
- package/ui/ChatInput.js.map +1 -0
- package/ui/ChatMessage.d.ts +6 -0
- package/ui/ChatMessage.js +2 -0
- package/ui/ChatTypingIndicator.d.ts +2 -0
- package/ui/ChatTypingIndicator.js +30 -0
- package/ui/ChatTypingIndicator.js.map +1 -0
- package/ui/ChatWindow.d.ts +34 -0
- package/ui/ChatWindow.js +142 -0
- package/ui/ChatWindow.js.map +1 -0
- package/ui/ChatWindowCsatPrompt.d.ts +15 -0
- package/ui/ChatWindowCsatPrompt.js +71 -0
- package/ui/ChatWindowCsatPrompt.js.map +1 -0
- package/ui/ChatWindowCsatThankYou.d.ts +9 -0
- package/ui/ChatWindowCsatThankYou.js +29 -0
- package/ui/ChatWindowCsatThankYou.js.map +1 -0
- package/ui/ChatWindowQuote.d.ts +22 -0
- package/ui/ChatWindowQuote.js +141 -0
- package/ui/ChatWindowQuote.js.map +1 -0
- package/ui/ChoiceExpander.js +2 -2
- package/ui/ChoiceExpander.js.map +1 -1
- package/ui/Countdown.d.ts +16 -0
- package/ui/Countdown.js +61 -0
- package/ui/Countdown.js.map +1 -0
- package/ui/Datepicker.d.ts +26 -0
- package/ui/Datepicker.js +2 -0
- package/ui/Day.d.ts +25 -0
- package/ui/Day.js +2 -0
- package/ui/Dropdown.d.ts +20 -3
- package/ui/Dropdown.js +57 -23
- package/ui/Dropdown.js.map +1 -1
- package/ui/ElasticHeight.d.ts +0 -1
- package/ui/ElasticHeight.js +14 -23
- package/ui/ElasticHeight.js.map +1 -1
- package/ui/ExpandableText.d.ts +14 -0
- package/ui/ExpandableText.js +40 -0
- package/ui/ExpandableText.js.map +1 -0
- package/ui/FlipCard.d.ts +7 -0
- package/ui/FlipCard.js +59 -0
- package/ui/FlipCard.js.map +1 -0
- package/ui/HamburgerIcon.js +1 -1
- package/ui/HamburgerIcon.js.map +1 -1
- package/ui/Link.js +1 -1
- package/ui/Link.js.map +1 -1
- package/ui/PageNavigation.d.ts +13 -0
- package/ui/PageNavigation.js +71 -0
- package/ui/PageNavigation.js.map +1 -0
- package/ui/Pagination.js +2 -2
- package/ui/Pagination.js.map +1 -1
- package/ui/Scrollbar.d.ts +14 -0
- package/ui/Scrollbar.js +68 -0
- package/ui/Scrollbar.js.map +1 -0
- package/ui/SidebarLayout.d.ts +3 -1
- package/ui/SidebarLayout.js +35 -27
- package/ui/SidebarLayout.js.map +1 -1
- package/ui/Toggle.d.ts +15 -0
- package/ui/Toggle.js +42 -0
- package/ui/Toggle.js.map +1 -0
- package/ui/Tooltip.d.ts +8 -0
- package/ui/Tooltip.js +2 -0
- package/ui/buttons/Button.type.d.ts +1 -1
- package/ui/buttons/Button.type.js +1 -1
- package/ui/buttons/Button.type.js.map +1 -1
- package/ui/carousel/Carousel.context.d.ts +27 -0
- package/ui/carousel/Carousel.context.js +2 -0
- package/ui/carousel/Carousel.d.ts +3 -0
- package/ui/carousel/Carousel.js +12 -0
- package/ui/carousel/Carousel.js.map +1 -0
- package/ui/carousel/CarouselBody.d.ts +6 -0
- package/ui/carousel/CarouselBody.js +21 -0
- package/ui/carousel/CarouselBody.js.map +1 -0
- package/ui/carousel/CarouselItem.d.ts +6 -0
- package/ui/carousel/CarouselItem.js +21 -0
- package/ui/carousel/CarouselItem.js.map +1 -0
- package/ui/carousel/CarouselNext.d.ts +8 -0
- package/ui/carousel/CarouselNext.js +23 -0
- package/ui/carousel/CarouselNext.js.map +1 -0
- package/ui/carousel/CarouselPrevious.d.ts +8 -0
- package/ui/carousel/CarouselPrevious.js +23 -0
- package/ui/carousel/CarouselPrevious.js.map +1 -0
- package/ui/contexts/TridentUIConfig.js +1 -1
- package/ui/criteria/Birthdate.d.ts +13 -0
- package/ui/criteria/Birthdate.js +2 -0
- package/ui/criteria/CriteriaDates.d.ts +32 -0
- package/ui/criteria/CriteriaDates.js +76 -0
- package/ui/criteria/CriteriaDates.js.map +1 -0
- package/ui/criteria/CriteriaParticipants.d.ts +106 -0
- package/ui/criteria/CriteriaParticipants.js +2 -0
- package/ui/criteria/CriteriaSection.d.ts +6 -0
- package/ui/criteria/CriteriaSection.js +15 -0
- package/ui/criteria/CriteriaSection.js.map +1 -0
- package/ui/criteria/CriteriaTransport.d.ts +37 -0
- package/ui/criteria/CriteriaTransport.js +116 -0
- package/ui/criteria/CriteriaTransport.js.map +1 -0
- package/ui/forms/CheckboxSelect.d.ts +31 -0
- package/ui/forms/CheckboxSelect.js +119 -0
- package/ui/forms/CheckboxSelect.js.map +1 -0
- package/ui/forms/Filter.d.ts +10 -4
- package/ui/forms/Filter.js +27 -45
- package/ui/forms/Filter.js.map +1 -1
- package/ui/forms/FloatingLabelTextField.d.ts +12 -0
- package/ui/forms/FloatingLabelTextField.js +132 -0
- package/ui/forms/FloatingLabelTextField.js.map +1 -0
- package/ui/forms/FormControl.d.ts +1 -1
- package/ui/forms/FormControl.js +4 -4
- package/ui/forms/FormControl.js.map +1 -1
- package/ui/forms/NumberField.d.ts +35 -34
- package/ui/forms/NumberField.js +24 -25
- package/ui/forms/NumberField.js.map +1 -1
- package/ui/forms/PhoneField.d.ts +5 -10
- package/ui/forms/PhoneField.js +31 -211
- package/ui/forms/PhoneField.js.map +1 -1
- package/ui/forms/PhoneFieldFullInput.d.ts +16 -0
- package/ui/forms/PhoneFieldFullInput.js +110 -0
- package/ui/forms/PhoneFieldFullInput.js.map +1 -0
- package/ui/forms/PhoneFieldSplitInput.d.ts +19 -0
- package/ui/forms/PhoneFieldSplitInput.js +158 -0
- package/ui/forms/PhoneFieldSplitInput.js.map +1 -0
- package/ui/forms/Range.d.ts +1 -1
- package/ui/forms/Select.js +9 -10
- package/ui/forms/Select.js.map +1 -1
- package/ui/forms/Switch.d.ts +5 -3
- package/ui/forms/Switch.js +54 -34
- package/ui/forms/Switch.js.map +1 -1
- package/ui/forms/TextField.js +24 -15
- package/ui/forms/TextField.js.map +1 -1
- package/ui/forms/checkboxes/Checkbox.d.ts +9 -4
- package/ui/forms/checkboxes/Checkbox.js +36 -16
- package/ui/forms/checkboxes/Checkbox.js.map +1 -1
- package/ui/forms/checkboxes/Checkboxes.d.ts +5 -0
- package/ui/forms/checkboxes/Checkboxes.js +8 -8
- package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
- package/ui/forms/checkboxes/index.d.ts +0 -1
- package/ui/forms/checkboxes/index.js +1 -2
- package/ui/forms/password/Password.js +9 -10
- package/ui/forms/password/Password.js.map +1 -1
- package/ui/forms/radios/Radio.d.ts +2 -1
- package/ui/forms/radios/Radio.js +6 -3
- package/ui/forms/radios/Radio.js.map +1 -1
- package/ui/forms/radios/RadioGroup.js +13 -14
- package/ui/forms/radios/RadioGroup.js.map +1 -1
- package/ui/frame/Frame.d.ts +8 -0
- package/ui/frame/Frame.js +16 -0
- package/ui/frame/Frame.js.map +1 -0
- package/ui/frame/FrameLabelsWrapper.d.ts +5 -0
- package/ui/frame/FrameLabelsWrapper.js +12 -0
- package/ui/frame/FrameLabelsWrapper.js.map +1 -0
- package/ui/frame/FrameTitle.d.ts +7 -0
- package/ui/frame/FrameTitle.js +25 -0
- package/ui/frame/FrameTitle.js.map +1 -0
- package/ui/frame/FrameWrapper.d.ts +6 -0
- package/ui/frame/FrameWrapper.js +14 -0
- package/ui/frame/FrameWrapper.js.map +1 -0
- package/ui/frame/SliderFrame.d.ts +14 -0
- package/ui/frame/SliderFrame.js +50 -0
- package/ui/frame/SliderFrame.js.map +1 -0
- package/ui/helpers/cn.d.ts +2 -0
- package/ui/helpers/cn.js +10 -0
- package/ui/helpers/cn.js.map +1 -0
- package/ui/helpers/phone/defaultPrefixes.d.ts +1 -0
- package/ui/helpers/phone/defaultPrefixes.js +52 -28
- package/ui/helpers/phone/defaultPrefixes.js.map +1 -1
- package/ui/helpers/phone/formatters.d.ts +11 -0
- package/ui/helpers/phone/formatters.js +32 -1
- package/ui/helpers/phone/formatters.js.map +1 -1
- package/ui/helpers/phone/index.d.ts +1 -1
- package/ui/helpers/phone/index.js +3 -3
- package/ui/hooks/useIsClient.d.ts +1 -0
- package/ui/hooks/useIsClient.js +12 -0
- package/ui/hooks/useIsClient.js.map +1 -0
- package/ui/hooks/useValue.d.ts +3 -4
- package/ui/hooks/useValue.js +11 -11
- package/ui/hooks/useValue.js.map +1 -1
- package/ui/journey-card/FlightSegmentCard.d.ts +15 -0
- package/ui/journey-card/FlightSegmentCard.js +73 -0
- package/ui/journey-card/FlightSegmentCard.js.map +1 -0
- package/ui/journey-card/FlightTimeline.d.ts +5 -0
- package/ui/journey-card/FlightTimeline.js +27 -0
- package/ui/journey-card/FlightTimeline.js.map +1 -0
- package/ui/journey-card/ItineraryDetails.d.ts +9 -0
- package/ui/journey-card/ItineraryDetails.js +40 -0
- package/ui/journey-card/ItineraryDetails.js.map +1 -0
- package/ui/journey-card/JourneyCard.d.ts +17 -0
- package/ui/journey-card/JourneyCard.js +34 -0
- package/ui/journey-card/JourneyCard.js.map +1 -0
- package/ui/journey-card/JourneyDetails.d.ts +47 -0
- package/ui/journey-card/JourneyDetails.js +183 -0
- package/ui/journey-card/JourneyDetails.js.map +1 -0
- package/ui/tabs/Tabs.d.ts +5 -1
- package/ui/tabs/Tabs.js +208 -124
- package/ui/tabs/Tabs.js.map +1 -1
- package/examples/form-checkbox-demo.d.ts +0 -1
- package/examples/form-checkbox-demo.js +0 -30
- package/examples/form-checkbox-demo.js.map +0 -1
- package/examples/form-checkbox-disabled-demo.d.ts +0 -1
- package/examples/form-checkbox-disabled-demo.js +0 -25
- package/examples/form-checkbox-disabled-demo.js.map +0 -1
- package/ui/forms/checkboxes/FormCheckbox.d.ts +0 -12
- package/ui/forms/checkboxes/FormCheckbox.js +0 -38
- package/ui/forms/checkboxes/FormCheckbox.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Theme } from './types/Theme';
|
|
3
|
+
export interface CountdownLabels {
|
|
4
|
+
days: string;
|
|
5
|
+
hours: string;
|
|
6
|
+
minutes: string;
|
|
7
|
+
seconds: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
10
|
+
countdown: {
|
|
11
|
+
labels: CountdownLabels;
|
|
12
|
+
to: string;
|
|
13
|
+
};
|
|
14
|
+
theme?: Theme;
|
|
15
|
+
}
|
|
16
|
+
export declare function Countdown({ className, countdown, theme, ...props }: CountdownProps): import("react/jsx-runtime").JSX.Element;
|
package/ui/Countdown.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../chunks/clsx.js";
|
|
3
|
+
import { FlipCard as t } from "./FlipCard.js";
|
|
4
|
+
import { useEffect as n, useState as r } from "react";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
+
//#region lib/ui/Countdown.tsx
|
|
7
|
+
var o = 1e3, s = o * 60, c = s * 60, l = c * 24, u = (e) => Math.max(Math.floor(e / l), 0), d = (e) => Math.max(Math.floor(e % l / c), 0), f = (e) => Math.max(Math.floor(e % c / s), 0), p = (e) => Math.max(Math.floor(e % s / o), 0);
|
|
8
|
+
function m({ className: n, countdown: r, theme: o = "white", ...s }) {
|
|
9
|
+
let { to: c, labels: l } = r, [u, d, f, p] = h(c), m = [
|
|
10
|
+
[u, l.days],
|
|
11
|
+
[d, l.hours],
|
|
12
|
+
[f, l.minutes],
|
|
13
|
+
[p, l.seconds]
|
|
14
|
+
];
|
|
15
|
+
return /* @__PURE__ */ i("div", {
|
|
16
|
+
"data-name": "Countdown",
|
|
17
|
+
role: "timer",
|
|
18
|
+
...s,
|
|
19
|
+
dir: "ltr",
|
|
20
|
+
className: e("flex gap-x-4", n),
|
|
21
|
+
children: m.map(([e, n], r) => {
|
|
22
|
+
let s = m.slice(0, r).every(([e]) => e === 0), c = e === 0 && s ? "black" : o;
|
|
23
|
+
return /* @__PURE__ */ a("div", {
|
|
24
|
+
className: "space-y-4",
|
|
25
|
+
children: [/* @__PURE__ */ i("div", {
|
|
26
|
+
className: "flex flex-row items-center gap-x-2 px-2",
|
|
27
|
+
children: e.toString().padStart(2, "0").split("").map((e, n) => /* @__PURE__ */ i(t, {
|
|
28
|
+
theme: c,
|
|
29
|
+
value: parseInt(e)
|
|
30
|
+
}, n))
|
|
31
|
+
}), /* @__PURE__ */ i("span", {
|
|
32
|
+
className: "text-b5 block max-w-58 truncate text-center",
|
|
33
|
+
children: n
|
|
34
|
+
})]
|
|
35
|
+
}, n);
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function h(e) {
|
|
40
|
+
let t = new Date(e).getTime(), i = t - Date.now(), [a, o] = r(() => u(i)), [s, c] = r(() => d(i)), [l, m] = r(() => f(i)), [h, g] = r(() => p(i));
|
|
41
|
+
return n(() => {
|
|
42
|
+
let e = setInterval(() => {
|
|
43
|
+
let n = t - Date.now();
|
|
44
|
+
if (n < 0) {
|
|
45
|
+
clearInterval(e);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
o(u(n)), c(d(n)), m(f(n)), g(p(n));
|
|
49
|
+
}, 1e3);
|
|
50
|
+
return () => clearInterval(e);
|
|
51
|
+
}, [t]), [
|
|
52
|
+
a,
|
|
53
|
+
s,
|
|
54
|
+
l,
|
|
55
|
+
h
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { m as Countdown };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=Countdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Countdown.js","names":[],"sources":["../../lib/ui/Countdown.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { FlipCard } from './FlipCard';\nimport type { Theme } from './types/Theme';\n\nexport interface CountdownLabels {\n days: string;\n hours: string;\n minutes: string;\n seconds: string;\n}\n\nexport interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {\n countdown: {\n labels: CountdownLabels;\n to: string;\n };\n theme?: Theme;\n}\n\nconst ONE_SEC = 1000;\nconst ONE_MIN = ONE_SEC * 60;\nconst ONE_HOUR = ONE_MIN * 60;\nconst ONE_DAY = ONE_HOUR * 24;\n\nconst getDay = (distance: number) => Math.max(Math.floor(distance / ONE_DAY), 0);\nconst getHour = (distance: number) => Math.max(Math.floor((distance % ONE_DAY) / ONE_HOUR), 0);\nconst getMinute = (distance: number) => Math.max(Math.floor((distance % ONE_HOUR) / ONE_MIN), 0);\nconst getSecond = (distance: number) => Math.max(Math.floor((distance % ONE_MIN) / ONE_SEC), 0);\n\nexport function Countdown({ className, countdown, theme = 'white', ...props }: CountdownProps) {\n const { to, labels } = countdown;\n const [days, hours, minutes, seconds] = useCountdown(to);\n\n const structure: [number, string][] = [\n [days, labels.days],\n [hours, labels.hours],\n [minutes, labels.minutes],\n [seconds, labels.seconds],\n ];\n\n return (\n <div\n data-name=\"Countdown\"\n role=\"timer\"\n {...props}\n dir=\"ltr\"\n className={clsx('flex gap-x-4', className)}\n >\n {structure.map(([division, label], index) => {\n const areAllPreviousZero = structure.slice(0, index).every(([d]) => d === 0);\n const divisionTheme = division === 0 && areAllPreviousZero ? 'black' : theme;\n\n return (\n <div className=\"space-y-4\" key={label}>\n <div className=\"flex flex-row items-center gap-x-2 px-2\">\n {division\n .toString()\n .padStart(2, '0')\n .split('')\n .map((digit, i) => (\n <FlipCard key={i} theme={divisionTheme} value={parseInt(digit)} />\n ))}\n </div>\n <span className=\"text-b5 block max-w-58 truncate text-center\">{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction useCountdown(to: string): [number, number, number, number] {\n const toMs = new Date(to).getTime();\n const distance = toMs - Date.now();\n const [days, setDays] = useState(() => getDay(distance));\n const [hours, setHours] = useState(() => getHour(distance));\n const [minutes, setMinutes] = useState(() => getMinute(distance));\n const [seconds, setSeconds] = useState(() => getSecond(distance));\n\n useEffect(() => {\n const interval = setInterval(() => {\n const dist = toMs - Date.now();\n if (dist < 0) {\n clearInterval(interval);\n return;\n }\n setDays(getDay(dist));\n setHours(getHour(dist));\n setMinutes(getMinute(dist));\n setSeconds(getSecond(dist));\n }, 1000);\n\n return () => clearInterval(interval);\n }, [toMs]);\n\n return [days, hours, minutes, seconds];\n}\n"],"mappings":";;;;;;AAuBA,IAAM,IAAU,KACV,IAAU,IAAU,IACpB,IAAW,IAAU,IACrB,IAAU,IAAW,IAErB,KAAU,MAAqB,KAAK,IAAI,KAAK,MAAM,IAAW,EAAQ,EAAE,EAAE,EAC1E,KAAW,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAS,EAAE,EAAE,EACxF,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAY,EAAQ,EAAE,EAAE,EAC1F,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAQ,EAAE,EAAE;AAE/F,SAAgB,EAAU,EAAE,cAAW,cAAW,WAAQ,SAAS,GAAG,KAAyB;CAC7F,IAAM,EAAE,OAAI,cAAW,GACjB,CAAC,GAAM,GAAO,GAAS,KAAW,EAAa,EAAG,EAElD,IAAgC;EACpC,CAAC,GAAM,EAAO,KAAK;EACnB,CAAC,GAAO,EAAO,MAAM;EACrB,CAAC,GAAS,EAAO,QAAQ;EACzB,CAAC,GAAS,EAAO,QAAA;EAClB;AAED,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,GAAI;EACJ,KAAI;EACJ,WAAW,EAAK,gBAAgB,EAAU;YAEzC,EAAU,KAAK,CAAC,GAAU,IAAQ,MAAU;GAC3C,IAAM,IAAqB,EAAU,MAAM,GAAG,EAAM,CAAC,OAAO,CAAC,OAAO,MAAM,EAAE,EACtE,IAAgB,MAAa,KAAK,IAAqB,UAAU;AAEvE,UACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EACE,UAAU,CACV,SAAS,GAAG,IAAI,CAChB,MAAM,GAAG,CACT,KAAK,GAAO,MACX,kBAAC,GAAD;MAAkB,OAAO;MAAe,OAAO,SAAS,EAAA;MAAU,EAAnD,EAAmD,CAAA;KAElE,CAAA,EACN,kBAAC,QAAD;KAAM,WAAU;eAA+C;KAAa,CAAA,CAAA;MAV9C,EAW1B;;EAGN,CAAA;;AAIV,SAAS,EAAa,GAA8C;CAClE,IAAM,IAAO,IAAI,KAAK,EAAG,CAAC,SAAS,EAC7B,IAAW,IAAO,KAAK,KAAK,EAC5B,CAAC,GAAM,KAAW,QAAe,EAAO,EAAS,CAAC,EAClD,CAAC,GAAO,KAAY,QAAe,EAAQ,EAAS,CAAC,EACrD,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC,EAC3D,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC;AAkBjE,QAhBA,QAAgB;EACd,IAAM,IAAW,kBAAkB;GACjC,IAAM,IAAO,IAAO,KAAK,KAAK;AAC9B,OAAI,IAAO,GAAG;AACZ,kBAAc,EAAS;AACvB;;AAKF,GAHA,EAAQ,EAAO,EAAK,CAAC,EACrB,EAAS,EAAQ,EAAK,CAAC,EACvB,EAAW,EAAU,EAAK,CAAC,EAC3B,EAAW,EAAU,EAAK,CAAC;KAC1B,IAAK;AAER,eAAa,cAAc,EAAS;IACnC,CAAC,EAAK,CAAC,EAEH;EAAC;EAAM;EAAO;EAAS;EAAQ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { FunctionComponent } from 'react';
|
|
3
|
+
import { DateRange, Matcher, Modifiers } from 'react-day-picker';
|
|
4
|
+
import { DayDataProps } from './Day';
|
|
5
|
+
export declare const getMonthHeadingId: (date: Date) => string;
|
|
6
|
+
interface Labels {
|
|
7
|
+
seeNextMonth: string;
|
|
8
|
+
seePreviousMonth: string;
|
|
9
|
+
}
|
|
10
|
+
type StatusLabelMap = Partial<Record<'green' | 'orange' | 'outline', string>>;
|
|
11
|
+
type SelectRangeHandler = (selected: DateRange | undefined, triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => void;
|
|
12
|
+
export interface DatepickerProps {
|
|
13
|
+
dates?: DayDataProps[];
|
|
14
|
+
defaultMonth?: Date;
|
|
15
|
+
disabledDays?: Matcher | Matcher[];
|
|
16
|
+
formatDurationsLabel?: (count: number) => string;
|
|
17
|
+
fromMonth?: Date;
|
|
18
|
+
labels: Labels;
|
|
19
|
+
locale?: Locale;
|
|
20
|
+
maxNumberOfMonths?: number;
|
|
21
|
+
onSelect?: SelectRangeHandler;
|
|
22
|
+
selected?: DateRange;
|
|
23
|
+
statusLabels?: StatusLabelMap;
|
|
24
|
+
}
|
|
25
|
+
export declare const Datepicker: FunctionComponent<DatepickerProps>;
|
|
26
|
+
export {};
|
package/ui/Datepicker.js
ADDED
package/ui/Day.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FunctionComponent, PropsWithChildren } from 'react';
|
|
2
|
+
import { DayButtonProps } from 'react-day-picker';
|
|
3
|
+
export interface DayDataProps {
|
|
4
|
+
/** Date in 'yyyy-MM-dd' format */
|
|
5
|
+
id: string;
|
|
6
|
+
price: string | null;
|
|
7
|
+
status: 'default' | 'green' | 'orange' | 'outline';
|
|
8
|
+
}
|
|
9
|
+
export interface DayProps {
|
|
10
|
+
formatDurationsLabel?: (count: number) => string;
|
|
11
|
+
label?: string;
|
|
12
|
+
price?: string | null;
|
|
13
|
+
status?: DayDataProps['status'];
|
|
14
|
+
}
|
|
15
|
+
interface InternalDayProps {
|
|
16
|
+
dateTime: string;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
label?: string;
|
|
19
|
+
price?: string | null;
|
|
20
|
+
selected?: boolean;
|
|
21
|
+
status?: DayDataProps['status'];
|
|
22
|
+
}
|
|
23
|
+
export declare const _Day: FunctionComponent<PropsWithChildren<InternalDayProps>>;
|
|
24
|
+
export declare const Day: FunctionComponent<DayProps & DayButtonProps>;
|
|
25
|
+
export {};
|
package/ui/Day.js
ADDED
package/ui/Dropdown.d.ts
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
|
-
import { ComponentPropsWithoutRef,
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
2
|
import { IconicNames } from '@clubmed/trident-icons';
|
|
3
|
-
|
|
3
|
+
interface DropdownRenderContext {
|
|
4
|
+
close: () => void;
|
|
5
|
+
open: boolean;
|
|
6
|
+
toggle: () => void;
|
|
7
|
+
}
|
|
8
|
+
type DropdownChildren = ReactNode | ((context: DropdownRenderContext) => ReactNode);
|
|
9
|
+
export interface DropdownProps extends Omit<ComponentPropsWithoutRef<'button'>, 'children'> {
|
|
10
|
+
children?: DropdownChildren;
|
|
4
11
|
icon?: IconicNames;
|
|
5
12
|
}
|
|
6
|
-
export declare function
|
|
13
|
+
export declare function useDropdown(initialChildren?: DropdownChildren): {
|
|
14
|
+
children: ReactNode[];
|
|
15
|
+
close: () => void;
|
|
16
|
+
containerRef: import('react').RefObject<HTMLDivElement | null>;
|
|
17
|
+
isLeaving: boolean;
|
|
18
|
+
label: ReactNode[];
|
|
19
|
+
open: boolean;
|
|
20
|
+
toggle: () => void;
|
|
21
|
+
};
|
|
22
|
+
export declare function Dropdown({ icon, className, children: initialChildren, ...attrs }: DropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
package/ui/Dropdown.js
CHANGED
|
@@ -5,43 +5,77 @@ import { useCallback as r, useEffect as i, useRef as a, useState as o } from "re
|
|
|
5
5
|
import { Icon as s } from "@clubmed/trident-icons";
|
|
6
6
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
7
|
//#region lib/ui/Dropdown.tsx
|
|
8
|
-
function u(
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
let
|
|
12
|
-
|
|
13
|
-
}, [])
|
|
8
|
+
function u(e) {
|
|
9
|
+
let [t, s] = o(!1), c = a(null), l = a(t), u = l.current, d = !t && u;
|
|
10
|
+
l.current = t;
|
|
11
|
+
let f = r(() => {
|
|
12
|
+
s((e) => !e);
|
|
13
|
+
}, []), p = r(() => {
|
|
14
|
+
s(!1);
|
|
15
|
+
}, []), m = typeof e == "function" ? e({
|
|
16
|
+
close: p,
|
|
17
|
+
open: t,
|
|
18
|
+
toggle: f
|
|
19
|
+
}) : e, { label: h, children: g } = n(m, ["label"]);
|
|
14
20
|
return i(() => {
|
|
15
|
-
if (!
|
|
21
|
+
if (!c.current) return;
|
|
22
|
+
let e = c.current.querySelectorAll(".dropdown-panel a[href], .dropdown-panel [data-dropdown-item]"), t = Array.from(e, (e) => {
|
|
23
|
+
let t = () => {
|
|
24
|
+
p();
|
|
25
|
+
};
|
|
26
|
+
return e.addEventListener("click", t), {
|
|
27
|
+
handleItemClick: t,
|
|
28
|
+
item: e
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
return () => {
|
|
32
|
+
t.forEach(({ handleItemClick: e, item: t }) => {
|
|
33
|
+
t.removeEventListener("click", e);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
}, [p, m]), i(() => {
|
|
37
|
+
if (!t) return;
|
|
16
38
|
let e = (e) => {
|
|
17
|
-
!
|
|
39
|
+
!c.current || e.composedPath().includes(c.current) || p();
|
|
18
40
|
};
|
|
19
|
-
return document.addEventListener("
|
|
20
|
-
document.removeEventListener("
|
|
41
|
+
return document.addEventListener("click", e), () => {
|
|
42
|
+
document.removeEventListener("click", e);
|
|
21
43
|
};
|
|
22
|
-
}, [
|
|
23
|
-
|
|
24
|
-
|
|
44
|
+
}, [p, t]), {
|
|
45
|
+
children: g,
|
|
46
|
+
close: p,
|
|
47
|
+
containerRef: c,
|
|
48
|
+
isLeaving: d,
|
|
49
|
+
label: h,
|
|
50
|
+
open: t,
|
|
51
|
+
toggle: f
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function d({ icon: n = "ArrowOutlinedDown", className: r, children: i, ...a }) {
|
|
55
|
+
let { children: o, containerRef: d, isLeaving: f, label: p, open: m, toggle: h } = u(i);
|
|
56
|
+
return /* @__PURE__ */ l("div", {
|
|
57
|
+
ref: d,
|
|
58
|
+
className: t("flex items-center gap-8 relative", r),
|
|
25
59
|
children: [/* @__PURE__ */ l("button", {
|
|
26
60
|
tabIndex: -1,
|
|
27
|
-
...
|
|
61
|
+
...a,
|
|
28
62
|
className: "flex gap-8 items-center relative",
|
|
29
|
-
onClick:
|
|
30
|
-
children: [
|
|
31
|
-
name:
|
|
63
|
+
onClick: h,
|
|
64
|
+
children: [p, /* @__PURE__ */ c(s, {
|
|
65
|
+
name: n,
|
|
32
66
|
className: "w-30"
|
|
33
67
|
})]
|
|
34
68
|
}), /* @__PURE__ */ c("div", {
|
|
35
|
-
className: t(e("z-5 flex items-center gap-12 bg-white rounded-16 border-1 border-lightGrey absolute top-[calc(100%+8px)] right-0 text-black p-20 min-w-[120px] origin-center will-change[transform,opacity]", {
|
|
36
|
-
"animate-
|
|
37
|
-
"animate-
|
|
38
|
-
"opacity-0 scale-90 pointer-events-none": !
|
|
69
|
+
className: t(e("dropdown-panel z-5 flex items-center gap-12 bg-white rounded-16 border-1 border-lightGrey absolute top-[calc(100%+8px)] right-0 text-black p-20 min-w-[120px] origin-center will-change[transform,opacity]", {
|
|
70
|
+
"animate-zoom-in": m,
|
|
71
|
+
"animate-zoom-out": !m && f,
|
|
72
|
+
"opacity-0 scale-90 pointer-events-none": !m && !f
|
|
39
73
|
})),
|
|
40
|
-
children:
|
|
74
|
+
children: o
|
|
41
75
|
})]
|
|
42
76
|
});
|
|
43
77
|
}
|
|
44
78
|
//#endregion
|
|
45
|
-
export {
|
|
79
|
+
export { d as Dropdown, u as useDropdown };
|
|
46
80
|
|
|
47
81
|
//# sourceMappingURL=Dropdown.js.map
|
package/ui/Dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","names":[],"sources":["../../lib/ui/Dropdown.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":[],"sources":["../../lib/ui/Dropdown.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport clsx from 'clsx';\nimport { twMerge } from '@/ui/helpers/twMerge';\nimport { useSlots } from '@/ui/hooks/useSlots';\n\ninterface DropdownRenderContext {\n close: () => void;\n open: boolean;\n toggle: () => void;\n}\n\ntype DropdownChildren = ReactNode | ((context: DropdownRenderContext) => ReactNode);\n\nexport interface DropdownProps extends Omit<ComponentPropsWithoutRef<'button'>, 'children'> {\n children?: DropdownChildren;\n icon?: IconicNames;\n}\n\nexport function useDropdown(initialChildren?: DropdownChildren) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const wasVisibleRef = useRef(open);\n const wasVisible = wasVisibleRef.current;\n const isLeaving = !open && wasVisible;\n\n // update ref for next render\n wasVisibleRef.current = open;\n\n const toggle = useCallback(() => {\n setOpen((prev) => !prev);\n }, []);\n\n const close = useCallback(() => {\n setOpen(false);\n }, []);\n\n const renderedChildren =\n typeof initialChildren === 'function'\n ? initialChildren({ close, open, toggle })\n : initialChildren;\n\n const { label, children } = useSlots(renderedChildren, ['label']);\n\n useEffect(() => {\n if (!containerRef.current) {\n return;\n }\n\n const items = containerRef.current.querySelectorAll(\n '.dropdown-panel a[href], .dropdown-panel [data-dropdown-item]',\n );\n const listeners = Array.from(items, (item) => {\n const handleItemClick = () => {\n close();\n };\n item.addEventListener('click', handleItemClick);\n return { handleItemClick, item };\n });\n\n return () => {\n listeners.forEach(({ handleItemClick, item }) => {\n item.removeEventListener('click', handleItemClick);\n });\n };\n }, [close, renderedChildren]);\n\n // Close overlay when clicking outside using composedPath\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const handleOutsideClick = (event: PointerEvent) => {\n if (!containerRef.current || event.composedPath().includes(containerRef.current)) {\n return;\n }\n\n close();\n };\n\n document.addEventListener('click', handleOutsideClick);\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n };\n }, [close, open]);\n\n return {\n children,\n close,\n containerRef,\n isLeaving,\n label,\n open,\n toggle,\n };\n}\n\nexport function Dropdown({\n icon = 'ArrowOutlinedDown',\n className,\n children: initialChildren,\n ...attrs\n}: DropdownProps) {\n const { children, containerRef, isLeaving, label, open, toggle } = useDropdown(initialChildren);\n\n return (\n <div ref={containerRef} className={twMerge('flex items-center gap-8 relative', className)}>\n <button\n tabIndex={-1}\n {...attrs}\n className=\"flex gap-8 items-center relative\"\n onClick={toggle}\n >\n {label}\n\n <Icon name={icon} className=\"w-30\" />\n </button>\n\n <div\n className={twMerge(\n clsx(\n 'dropdown-panel z-5 flex items-center gap-12 bg-white rounded-16 border-1 border-lightGrey absolute top-[calc(100%+8px)] right-0 text-black p-20 min-w-[120px] origin-center will-change[transform,opacity]',\n {\n 'animate-zoom-in': open,\n 'animate-zoom-out': !open && isLeaving,\n 'opacity-0 scale-90 pointer-events-none': !open && !isLeaving,\n },\n ),\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AA0BA,SAAgB,EAAY,GAAoC;CAC9D,IAAM,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,IAAe,EAAuB,KAAK,EAC3C,IAAgB,EAAO,EAAK,EAC5B,IAAa,EAAc,SAC3B,IAAY,CAAC,KAAQ;AAG3B,GAAc,UAAU;CAExB,IAAM,IAAS,QAAkB;AAC/B,KAAS,MAAS,CAAC,EAAK;IACvB,EAAE,CAAC,EAEA,IAAQ,QAAkB;AAC9B,IAAQ,GAAM;IACb,EAAE,CAAC,EAEA,IACJ,OAAO,KAAoB,aACvB,EAAgB;EAAE;EAAO;EAAM;EAAQ,CAAC,GACxC,GAEA,EAAE,UAAO,gBAAa,EAAS,GAAkB,CAAC,QAAQ,CAAC;AA6CjE,QA3CA,QAAgB;AACd,MAAI,CAAC,EAAa,QAChB;EAGF,IAAM,IAAQ,EAAa,QAAQ,iBACjC,gEACD,EACK,IAAY,MAAM,KAAK,IAAQ,MAAS;GAC5C,IAAM,UAAwB;AAC5B,OAAO;;AAGT,UADA,EAAK,iBAAiB,SAAS,EAAgB,EACxC;IAAE;IAAiB;IAAM;IAChC;AAEF,eAAa;AACX,KAAU,SAAS,EAAE,oBAAiB,cAAW;AAC/C,MAAK,oBAAoB,SAAS,EAAgB;KAClD;;IAEH,CAAC,GAAO,EAAiB,CAAC,EAG7B,QAAgB;AACd,MAAI,CAAC,EACH;EAGF,IAAM,KAAsB,MAAwB;AAC9C,IAAC,EAAa,WAAW,EAAM,cAAc,CAAC,SAAS,EAAa,QAAQ,IAIhF,GAAO;;AAIT,SADA,SAAS,iBAAiB,SAAS,EAAmB,QACzC;AACX,YAAS,oBAAoB,SAAS,EAAmB;;IAE1D,CAAC,GAAO,EAAK,CAAC,EAEV;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAgB,EAAS,EACvB,UAAO,qBACP,cACA,UAAU,GACV,GAAG,KACa;CAChB,IAAM,EAAE,aAAU,iBAAc,cAAW,UAAO,SAAM,cAAW,EAAY,EAAgB;AAE/F,QACE,kBAAC,OAAD;EAAK,KAAK;EAAc,WAAW,EAAQ,oCAAoC,EAAU;YAAzF,CACE,kBAAC,UAAD;GACE,UAAU;GACV,GAAI;GACJ,WAAU;GACV,SAAS;aAJX,CAMG,GAED,kBAAC,GAAD;IAAM,MAAM;IAAM,WAAU;IAAS,CAAA,CAC9B;MAET,kBAAC,OAAD;GACE,WAAW,EACT,EACE,8MACA;IACE,mBAAmB;IACnB,oBAAoB,CAAC,KAAQ;IAC7B,0CAA0C,CAAC,KAAQ,CAAC;IACrD,CACF,CACF;GAEA;GACG,CAAA,CACF"}
|
package/ui/ElasticHeight.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ interface ElasticHeightProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
3
3
|
innerClassName?: string;
|
|
4
4
|
isExpanded?: boolean;
|
|
5
5
|
min?: number;
|
|
6
|
-
onHeightChange?: (height: number) => void;
|
|
7
6
|
}
|
|
8
7
|
export declare const ElasticHeight: FunctionComponent<ElasticHeightProps>;
|
|
9
8
|
export {};
|
package/ui/ElasticHeight.js
CHANGED
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { t as e } from "../chunks/clsx.js";
|
|
3
|
-
import t from "
|
|
4
|
-
import {
|
|
5
|
-
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as t } from "react";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
6
4
|
//#region lib/ui/ElasticHeight.tsx
|
|
7
|
-
var
|
|
8
|
-
let
|
|
9
|
-
return
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
className: e("overflow-hidden transition-all duration-500", o),
|
|
19
|
-
"data-expanded": l,
|
|
20
|
-
style: { height: l ? p : u },
|
|
21
|
-
children: /* @__PURE__ */ a("div", {
|
|
22
|
-
className: c,
|
|
23
|
-
ref: f,
|
|
24
|
-
children: s
|
|
5
|
+
var r = ({ className: r, children: i, innerClassName: a, isExpanded: o = !1, min: s = 0, ...c }) => {
|
|
6
|
+
let l = t(null);
|
|
7
|
+
return /* @__PURE__ */ n("div", {
|
|
8
|
+
...c,
|
|
9
|
+
className: e("overflow-hidden transition-all duration-500 grid", "data-[expanded=true]:grid-rows-[1fr]", "data-[expanded=false]:grid-rows-[0fr]", r),
|
|
10
|
+
"data-expanded": o,
|
|
11
|
+
children: /* @__PURE__ */ n("div", {
|
|
12
|
+
style: { minHeight: s },
|
|
13
|
+
className: e("overflow-hidden", a),
|
|
14
|
+
ref: l,
|
|
15
|
+
children: i
|
|
25
16
|
})
|
|
26
17
|
});
|
|
27
18
|
};
|
|
28
19
|
//#endregion
|
|
29
|
-
export {
|
|
20
|
+
export { r as ElasticHeight };
|
|
30
21
|
|
|
31
22
|
//# sourceMappingURL=ElasticHeight.js.map
|
package/ui/ElasticHeight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElasticHeight.js","names":[],"sources":["../../lib/ui/ElasticHeight.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"ElasticHeight.js","names":[],"sources":["../../lib/ui/ElasticHeight.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { type ComponentPropsWithoutRef, type FunctionComponent, useRef } from 'react';\n\ninterface ElasticHeightProps extends ComponentPropsWithoutRef<'div'> {\n innerClassName?: string;\n isExpanded?: boolean;\n min?: number;\n}\n\nexport const ElasticHeight: FunctionComponent<ElasticHeightProps> = ({\n className,\n children,\n innerClassName,\n isExpanded = false,\n min = 0,\n ...attrs\n}) => {\n const ref = useRef<HTMLDivElement>(null as any);\n\n return (\n <div\n {...attrs}\n className={clsx(\n 'overflow-hidden transition-all duration-500 grid',\n 'data-[expanded=true]:grid-rows-[1fr]',\n 'data-[expanded=false]:grid-rows-[0fr]',\n className,\n )}\n data-expanded={isExpanded}\n >\n <div style={{ minHeight: min }} className={clsx('overflow-hidden', innerClassName)} ref={ref}>\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AASA,IAAa,KAAwD,EACnE,cACA,aACA,mBACA,gBAAa,IACb,SAAM,GACN,GAAG,QACC;CACJ,IAAM,IAAM,EAAuB,KAAY;AAE/C,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EACT,oDACA,wCACA,yCACA,EACD;EACD,iBAAe;YAEf,kBAAC,OAAD;GAAK,OAAO,EAAE,WAAW,GAAK;GAAE,WAAW,EAAK,mBAAmB,EAAe;GAAO;GACtF;GACG,CAAA;EACF,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
export interface ExpandableTextLabels {
|
|
3
|
+
expand: string;
|
|
4
|
+
reduce: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ExpandableTextProps {
|
|
7
|
+
buttonClassName?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
id: string;
|
|
10
|
+
labels: ExpandableTextLabels;
|
|
11
|
+
/** Tailwind line-clamp class to use when collapsed, e.g. "line-clamp-3" */
|
|
12
|
+
lineClamps?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const ExpandableText: ({ buttonClassName, children, className, id, labels, lineClamps, }: PropsWithChildren<ExpandableTextProps>) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../chunks/clsx.js";
|
|
3
|
+
import t from "./hooks/useResizeObserver.js";
|
|
4
|
+
import { useIsClient as n } from "./hooks/useIsClient.js";
|
|
5
|
+
import { useCallback as r, useLayoutEffect as i, useRef as a, useState as o } from "react";
|
|
6
|
+
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
+
//#region lib/ui/ExpandableText.tsx
|
|
8
|
+
var u = ({ buttonClassName: u, children: d, className: f, id: p, labels: m, lineClamps: h = "line-clamp-3" }) => {
|
|
9
|
+
let g = a(null), [_, v] = o(0), [y, b] = o(0), [x, S] = o(!1), C = n();
|
|
10
|
+
if (t({
|
|
11
|
+
ref: g,
|
|
12
|
+
onResize: r(() => {
|
|
13
|
+
b(g.current.scrollHeight), v((e) => e === 0 ? g.current.offsetHeight : e);
|
|
14
|
+
}, [])
|
|
15
|
+
}), i(() => {
|
|
16
|
+
g.current && (v(g.current.offsetHeight), b(g.current.scrollHeight));
|
|
17
|
+
}, []), !d) return null;
|
|
18
|
+
let w = y > _ || x, T = { "--height": `${x ? y : _}px` };
|
|
19
|
+
return /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
|
|
20
|
+
className: e(f, "overflow-clip transition-all duration-500", { "h-(--height)": C }),
|
|
21
|
+
style: T,
|
|
22
|
+
children: /* @__PURE__ */ c("div", {
|
|
23
|
+
className: e({ [h]: !x }),
|
|
24
|
+
id: p,
|
|
25
|
+
ref: g,
|
|
26
|
+
children: d
|
|
27
|
+
})
|
|
28
|
+
}), w && /* @__PURE__ */ c("button", {
|
|
29
|
+
"aria-controls": p,
|
|
30
|
+
"aria-expanded": x,
|
|
31
|
+
className: e("self-start border-b border-current font-semibold text-inherit transition-colors outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", u),
|
|
32
|
+
onClick: () => S(!x),
|
|
33
|
+
type: "button",
|
|
34
|
+
children: x ? m.reduce : m.expand
|
|
35
|
+
})] });
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { u as ExpandableText };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=ExpandableText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpandableText.js","names":[],"sources":["../../lib/ui/ExpandableText.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { CSSProperties, PropsWithChildren } from 'react';\nimport { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useIsClient } from './hooks/useIsClient';\nimport { useResizeObserver } from './hooks/useResizeObserver';\n\nexport interface ExpandableTextLabels {\n expand: string;\n reduce: string;\n}\n\nexport interface ExpandableTextProps {\n buttonClassName?: string;\n className?: string;\n id: string;\n labels: ExpandableTextLabels;\n /** Tailwind line-clamp class to use when collapsed, e.g. \"line-clamp-3\" */\n lineClamps?: string;\n}\n\nexport const ExpandableText = ({\n buttonClassName,\n children,\n className,\n id,\n labels,\n lineClamps = 'line-clamp-3',\n}: PropsWithChildren<ExpandableTextProps>) => {\n const ref = useRef<HTMLDivElement>(null!);\n const [min, setMin] = useState(0);\n const [max, setMax] = useState(0);\n const [isExpanded, setIsExpanded] = useState(false);\n\n const isClient = useIsClient();\n\n const onResize = useCallback(() => {\n setMax(ref.current.scrollHeight);\n setMin((currentMin) => {\n if (currentMin === 0) {\n return ref.current.offsetHeight;\n }\n return currentMin;\n });\n }, []);\n\n useResizeObserver<HTMLDivElement>({\n ref,\n onResize,\n });\n\n useLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n setMin(ref.current.offsetHeight);\n setMax(ref.current.scrollHeight);\n }, []);\n\n if (!children) {\n return null;\n }\n\n const withToggleButton = max > min || isExpanded;\n const style = { '--height': `${isExpanded ? max : min}px` } as CSSProperties;\n\n return (\n <>\n <div\n className={clsx(className, 'overflow-clip transition-all duration-500', {\n 'h-(--height)': isClient,\n })}\n style={style}\n >\n <div className={clsx({ [lineClamps]: !isExpanded })} id={id} ref={ref}>\n {children}\n </div>\n </div>\n {withToggleButton && (\n <button\n aria-controls={id}\n aria-expanded={isExpanded}\n className={clsx(\n 'self-start border-b border-current font-semibold text-inherit transition-colors outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n buttonClassName,\n )}\n onClick={() => setIsExpanded(!isExpanded)}\n type=\"button\"\n >\n {isExpanded ? labels.reduce : labels.expand}\n </button>\n )}\n </>\n );\n};\n"],"mappings":";;;;;;;AAsBA,IAAa,KAAkB,EAC7B,oBACA,aACA,cACA,OACA,WACA,gBAAa,qBAC+B;CAC5C,IAAM,IAAM,EAAuB,KAAM,EACnC,CAAC,GAAK,KAAU,EAAS,EAAE,EAC3B,CAAC,GAAK,KAAU,EAAS,EAAE,EAC3B,CAAC,GAAY,KAAiB,EAAS,GAAM,EAE7C,IAAW,GAAa;AAyB9B,KAbA,EAAkC;EAChC;EACA,UAZe,QAAkB;AAEjC,GADA,EAAO,EAAI,QAAQ,aAAa,EAChC,GAAQ,MACF,MAAe,IACV,EAAI,QAAQ,eAEd,EACP;KACD,EAAE,CAAA;EAKJ,CAAC,EAEF,QAAsB;AACf,IAAI,YAGT,EAAO,EAAI,QAAQ,aAAa,EAChC,EAAO,EAAI,QAAQ,aAAa;IAC/B,EAAE,CAAC,EAEF,CAAC,EACH,QAAO;CAGT,IAAM,IAAmB,IAAM,KAAO,GAChC,IAAQ,EAAE,YAAY,GAAG,IAAa,IAAM,EAAI,KAAK;AAE3D,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EACE,WAAW,EAAK,GAAW,6CAA6C,EACtE,gBAAgB,GACjB,CAAC;EACK;YAEP,kBAAC,OAAD;GAAK,WAAW,EAAK,GAAG,IAAa,CAAC,GAAY,CAAC;GAAM;GAAS;GAC/D;GACG,CAAA;EACF,CAAA,EACL,KACC,kBAAC,UAAD;EACE,iBAAe;EACf,iBAAe;EACf,WAAW,EACT,0KACA,EACD;EACD,eAAe,EAAc,CAAC,EAAW;EACzC,MAAK;YAEJ,IAAa,EAAO,SAAS,EAAO;EAC9B,CAAA,CAEV,EAAA,CAAA"}
|
package/ui/FlipCard.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Theme } from './types/Theme';
|
|
3
|
+
export interface FlipCardProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
4
|
+
theme?: Theme;
|
|
5
|
+
value: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function FlipCard({ className, theme, value, ...props }: FlipCardProps): import("react/jsx-runtime").JSX.Element;
|
package/ui/FlipCard.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../chunks/clsx.js";
|
|
3
|
+
import { getBgColor as t, getComplementaryTextColor as n, getThemeColor as r } from "./helpers/colors/colors.js";
|
|
4
|
+
import { useEffect as i, useRef as a, useState as o } from "react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
|
+
//#region lib/ui/FlipCard.tsx
|
|
7
|
+
var l = "flex w-full justify-center overflow-hidden", u = e(l, "relative h-full"), d = e(u, "rounded-16 rounded-b-4"), f = e(u, "rounded-16 rounded-t-4"), p = e(l, "absolute inset-x-0 h-16 w-full"), m = e(p, "rounded-16 rounded-b-4 top-0 origin-bottom [transform:rotateX(0deg)] [backface-visibility:hidden] [transform-style:preserve-3d]"), h = e(p, "rounded-16 rounded-t-4 top-16 origin-top [transform:rotateX(180deg)] [backface-visibility:hidden] [transform-style:preserve-3d]");
|
|
8
|
+
function g({ className: a, theme: l = "white", value: u, ...p }) {
|
|
9
|
+
let [g, v] = o(0), [y, b] = o(!1), x = _(g);
|
|
10
|
+
i(() => {
|
|
11
|
+
u !== x && (v(u), b((e) => !e));
|
|
12
|
+
}, [u, x]);
|
|
13
|
+
let S = r(l), C = t(S), w = n(S);
|
|
14
|
+
return /* @__PURE__ */ c("div", {
|
|
15
|
+
...p,
|
|
16
|
+
role: "figure",
|
|
17
|
+
className: e("relative isolate grid h-32 w-22 grid-rows-2 [perspective:40px] [perspective-origin:50%_50%]", a),
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ s("div", {
|
|
20
|
+
className: e(d, C),
|
|
21
|
+
children: /* @__PURE__ */ s("span", {
|
|
22
|
+
className: e("text-b4 translate-y-1/3", w),
|
|
23
|
+
children: g
|
|
24
|
+
})
|
|
25
|
+
}),
|
|
26
|
+
/* @__PURE__ */ s("div", {
|
|
27
|
+
className: e(f, C),
|
|
28
|
+
children: /* @__PURE__ */ s("span", {
|
|
29
|
+
className: e("text-b4 -translate-y-2/3", w),
|
|
30
|
+
children: x
|
|
31
|
+
})
|
|
32
|
+
}),
|
|
33
|
+
/* @__PURE__ */ s("div", {
|
|
34
|
+
className: e(y ? m : h, C, y ? "animate-tick" : "animate-tock"),
|
|
35
|
+
children: /* @__PURE__ */ s("span", {
|
|
36
|
+
className: e("text-b4", y ? "translate-y-1/3" : "-translate-y-2/3", w),
|
|
37
|
+
children: y ? x : g
|
|
38
|
+
})
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ s("div", {
|
|
41
|
+
className: e(y ? h : m, C, y ? "animate-tock" : "animate-tick"),
|
|
42
|
+
children: /* @__PURE__ */ s("span", {
|
|
43
|
+
className: e("text-b4", y ? "-translate-y-2/3" : "translate-y-1/3", w),
|
|
44
|
+
children: y ? g : x
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function _(e) {
|
|
51
|
+
let t = a(0);
|
|
52
|
+
return i(() => {
|
|
53
|
+
t.current = e;
|
|
54
|
+
}, [e]), t.current;
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { g as FlipCard };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=FlipCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlipCard.js","names":[],"sources":["../../lib/ui/FlipCard.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { getBgColor, getComplementaryTextColor, getThemeColor } from './helpers/colors/colors';\nimport type { Theme } from './types/Theme';\n\nexport interface FlipCardProps extends Omit<ComponentProps<'div'>, 'children'> {\n theme?: Theme;\n value: number;\n}\n\nconst commonSection = 'flex w-full justify-center overflow-hidden';\nconst staticCard = clsx(commonSection, 'relative h-full');\nconst staticTop = clsx(staticCard, 'rounded-16 rounded-b-4');\nconst staticBottom = clsx(staticCard, 'rounded-16 rounded-t-4');\n\nconst animatedCard = clsx(commonSection, 'absolute inset-x-0 h-16 w-full');\nconst animatedTop = clsx(\n animatedCard,\n 'rounded-16 rounded-b-4 top-0 origin-bottom [transform:rotateX(0deg)] [backface-visibility:hidden] [transform-style:preserve-3d]',\n);\nconst animatedBottom = clsx(\n animatedCard,\n 'rounded-16 rounded-t-4 top-16 origin-top [transform:rotateX(180deg)] [backface-visibility:hidden] [transform-style:preserve-3d]',\n);\n\nexport function FlipCard({ className, theme = 'white', value, ...props }: FlipCardProps) {\n const [currentNumber, setCurrentNumber] = useState(0);\n const [tick, setTick] = useState(false);\n const previousNumber = usePrevious(currentNumber);\n\n useEffect(() => {\n if (value === previousNumber) return;\n setCurrentNumber(value);\n setTick((t) => !t);\n }, [value, previousNumber]);\n\n const themeColor = getThemeColor(theme);\n const thBackground = getBgColor(themeColor);\n const thText = getComplementaryTextColor(themeColor);\n\n return (\n <div\n {...props}\n role=\"figure\"\n className={clsx(\n 'relative isolate grid h-32 w-22 grid-rows-2 [perspective:40px] [perspective-origin:50%_50%]',\n className,\n )}\n >\n <div className={clsx(staticTop, thBackground)}>\n <span className={clsx('text-b4 translate-y-1/3', thText)}>{currentNumber}</span>\n </div>\n <div className={clsx(staticBottom, thBackground)}>\n <span className={clsx('text-b4 -translate-y-2/3', thText)}>{previousNumber}</span>\n </div>\n <div\n className={clsx(\n tick ? animatedTop : animatedBottom,\n thBackground,\n tick ? 'animate-tick' : 'animate-tock',\n )}\n >\n <span className={clsx('text-b4', tick ? 'translate-y-1/3' : '-translate-y-2/3', thText)}>\n {tick ? previousNumber : currentNumber}\n </span>\n </div>\n <div\n className={clsx(\n tick ? animatedBottom : animatedTop,\n thBackground,\n tick ? 'animate-tock' : 'animate-tick',\n )}\n >\n <span className={clsx('text-b4', tick ? '-translate-y-2/3' : 'translate-y-1/3', thText)}>\n {tick ? currentNumber : previousNumber}\n </span>\n </div>\n </div>\n );\n}\n\nfunction usePrevious(currentValue: number) {\n const ref = useRef(0);\n useEffect(() => {\n ref.current = currentValue;\n }, [currentValue]);\n return ref.current;\n}\n"],"mappings":";;;;;;AAaA,IAAM,IAAgB,8CAChB,IAAa,EAAK,GAAe,kBAAkB,EACnD,IAAY,EAAK,GAAY,yBAAyB,EACtD,IAAe,EAAK,GAAY,yBAAyB,EAEzD,IAAe,EAAK,GAAe,iCAAiC,EACpE,IAAc,EAClB,GACA,kIACD,EACK,IAAiB,EACrB,GACA,kIACD;AAED,SAAgB,EAAS,EAAE,cAAW,WAAQ,SAAS,UAAO,GAAG,KAAwB;CACvF,IAAM,CAAC,GAAe,KAAoB,EAAS,EAAE,EAC/C,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,IAAiB,EAAY,EAAc;AAEjD,SAAgB;AACV,QAAU,MACd,EAAiB,EAAM,EACvB,GAAS,MAAM,CAAC,EAAE;IACjB,CAAC,GAAO,EAAe,CAAC;CAE3B,IAAM,IAAa,EAAc,EAAM,EACjC,IAAe,EAAW,EAAW,EACrC,IAAS,EAA0B,EAAW;AAEpD,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,MAAK;EACL,WAAW,EACT,+FACA,EACD;YANH;GAQE,kBAAC,OAAD;IAAK,WAAW,EAAK,GAAW,EAAa;cAC3C,kBAAC,QAAD;KAAM,WAAW,EAAK,2BAA2B,EAAO;eAAG;KAAqB,CAAA;IAC5E,CAAA;GACN,kBAAC,OAAD;IAAK,WAAW,EAAK,GAAc,EAAa;cAC9C,kBAAC,QAAD;KAAM,WAAW,EAAK,4BAA4B,EAAO;eAAG;KAAsB,CAAA;IAC9E,CAAA;GACN,kBAAC,OAAD;IACE,WAAW,EACT,IAAO,IAAc,GACrB,GACA,IAAO,iBAAiB,eACzB;cAED,kBAAC,QAAD;KAAM,WAAW,EAAK,WAAW,IAAO,oBAAoB,oBAAoB,EAAO;eACpF,IAAO,IAAiB;KACpB,CAAA;IACH,CAAA;GACN,kBAAC,OAAD;IACE,WAAW,EACT,IAAO,IAAiB,GACxB,GACA,IAAO,iBAAiB,eACzB;cAED,kBAAC,QAAD;KAAM,WAAW,EAAK,WAAW,IAAO,qBAAqB,mBAAmB,EAAO;eACpF,IAAO,IAAgB;KACnB,CAAA;IACH,CAAA;;;;AAKZ,SAAS,EAAY,GAAsB;CACzC,IAAM,IAAM,EAAO,EAAE;AAIrB,QAHA,QAAgB;AACd,IAAI,UAAU;IACb,CAAC,EAAa,CAAC,EACX,EAAI"}
|
package/ui/HamburgerIcon.js
CHANGED
|
@@ -12,7 +12,7 @@ var n = ({ className: n, isActive: r = !1, ...i }) => {
|
|
|
12
12
|
return /* @__PURE__ */ t("span", {
|
|
13
13
|
"data-name": "HamburgerIcon",
|
|
14
14
|
...i,
|
|
15
|
-
className: e("menu-icon cursor-pointer", "color-current relative isolate shrink-0 h-24 w-24 block", n),
|
|
15
|
+
className: e("menu-icon cursor-pointer", "color-current relative isolate shrink-0 h-24 w-24 block outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", n),
|
|
16
16
|
"data-testid": r ? "HamburgerIcon-active" : "HamburgerIcon",
|
|
17
17
|
children: /* @__PURE__ */ t("span", { className: e("absolute left-1/2 top-1/2 block h-2 w-24 -translate-x-1/2 -translate-y-1/2 transition-[background] duration-500 cursor-pointer", {
|
|
18
18
|
"bg-current": !r,
|
package/ui/HamburgerIcon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HamburgerIcon.js","names":[],"sources":["../../lib/ui/HamburgerIcon.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\ninterface Props extends ComponentPropsWithoutRef<'span'> {\n isActive?: boolean;\n}\n\nexport const HamburgerIcon: FunctionComponent<Props> = ({\n className,\n isActive = false,\n ...attrs\n}) => {\n const before = clsx(\n 'before:absolute before:left-0 before:top-0 before:block before:h-2 before:w-24 before:bg-current before:opacity-100 before:transition-transform before:duration-500 before:content-[\"\"] before:cursor-pointer',\n { 'before:translate-y-[-6px]': !isActive, 'before:translate-y-0 before:rotate-45': isActive },\n );\n\n const after = clsx(\n 'after:absolute after:left-0 after:top-0 after:block after:h-2 after:w-24 after:bg-current after:opacity-100 after:transition-transform after:duration-500 after:content-[\"\"] after:cursor-pointer',\n { 'after:translate-y-[6px]': !isActive, 'after:translate-y-0 after:-rotate-45': isActive },\n );\n\n return (\n <span\n data-name=\"HamburgerIcon\"\n {...attrs}\n className={clsx(\n 'menu-icon cursor-pointer',\n 'color-current relative isolate shrink-0 h-24 w-24 block',\n className,\n )}\n data-testid={isActive ? 'HamburgerIcon-active' : 'HamburgerIcon'}\n >\n <span\n className={clsx(\n 'absolute left-1/2 top-1/2 block h-2 w-24 -translate-x-1/2 -translate-y-1/2 transition-[background] duration-500 cursor-pointer',\n { 'bg-current': !isActive, 'bg-transparent': isActive },\n before,\n after,\n )}\n />\n </span>\n );\n};\n"],"mappings":";;;AAOA,IAAa,KAA2C,EACtD,cACA,cAAW,IACX,GAAG,QACC;CACJ,IAAM,IAAS,EACb,mNACA;EAAE,6BAA6B,CAAC;EAAU,yCAAyC;EAAU,CAC9F,EAEK,IAAQ,EACZ,uMACA;EAAE,2BAA2B,CAAC;EAAU,wCAAwC;EAAU,CAC3F;AAED,QACE,kBAAC,QAAD;EACE,aAAU;EACV,GAAI;EACJ,WAAW,EACT,4BACA,
|
|
1
|
+
{"version":3,"file":"HamburgerIcon.js","names":[],"sources":["../../lib/ui/HamburgerIcon.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\ninterface Props extends ComponentPropsWithoutRef<'span'> {\n isActive?: boolean;\n}\n\nexport const HamburgerIcon: FunctionComponent<Props> = ({\n className,\n isActive = false,\n ...attrs\n}) => {\n const before = clsx(\n 'before:absolute before:left-0 before:top-0 before:block before:h-2 before:w-24 before:bg-current before:opacity-100 before:transition-transform before:duration-500 before:content-[\"\"] before:cursor-pointer',\n { 'before:translate-y-[-6px]': !isActive, 'before:translate-y-0 before:rotate-45': isActive },\n );\n\n const after = clsx(\n 'after:absolute after:left-0 after:top-0 after:block after:h-2 after:w-24 after:bg-current after:opacity-100 after:transition-transform after:duration-500 after:content-[\"\"] after:cursor-pointer',\n { 'after:translate-y-[6px]': !isActive, 'after:translate-y-0 after:-rotate-45': isActive },\n );\n\n return (\n <span\n data-name=\"HamburgerIcon\"\n {...attrs}\n className={clsx(\n 'menu-icon cursor-pointer',\n 'color-current relative isolate shrink-0 h-24 w-24 block outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n className,\n )}\n data-testid={isActive ? 'HamburgerIcon-active' : 'HamburgerIcon'}\n >\n <span\n className={clsx(\n 'absolute left-1/2 top-1/2 block h-2 w-24 -translate-x-1/2 -translate-y-1/2 transition-[background] duration-500 cursor-pointer',\n { 'bg-current': !isActive, 'bg-transparent': isActive },\n before,\n after,\n )}\n />\n </span>\n );\n};\n"],"mappings":";;;AAOA,IAAa,KAA2C,EACtD,cACA,cAAW,IACX,GAAG,QACC;CACJ,IAAM,IAAS,EACb,mNACA;EAAE,6BAA6B,CAAC;EAAU,yCAAyC;EAAU,CAC9F,EAEK,IAAQ,EACZ,uMACA;EAAE,2BAA2B,CAAC;EAAU,wCAAwC;EAAU,CAC3F;AAED,QACE,kBAAC,QAAD;EACE,aAAU;EACV,GAAI;EACJ,WAAW,EACT,4BACA,kJACA,EACD;EACD,eAAa,IAAW,yBAAyB;YAEjD,kBAAC,QAAD,EACE,WAAW,EACT,kIACA;GAAE,cAAc,CAAC;GAAU,kBAAkB;GAAU,EACvD,GACA,EACD,EACD,CAAA;EACG,CAAA"}
|
package/ui/Link.js
CHANGED
|
@@ -7,7 +7,7 @@ var a = ({ label: a, icon: o, component: s = "a", iconType: c, underlined: l = !
|
|
|
7
7
|
if (!a) return null;
|
|
8
8
|
let m = a.lastIndexOf(" "), h = m === -1 ? a.length : m, g = a.substring(0, 1), _ = a.substring(1, h + 1), v = a.substring(h);
|
|
9
9
|
return /* @__PURE__ */ i(d ? "span" : s, {
|
|
10
|
-
className: t("decoration-none link-container cursor-pointer text-b3 font-semibold", u),
|
|
10
|
+
className: t("decoration-none link-container cursor-pointer text-b3 font-semibold outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", u),
|
|
11
11
|
"data-name": "Link",
|
|
12
12
|
...p,
|
|
13
13
|
children: [/* @__PURE__ */ r("span", {
|
package/ui/Link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","names":[],"sources":["../../lib/ui/Link.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { AnchorHTMLAttributes, FunctionComponent, PropsWithChildren } from 'react';\n\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\nimport { twMerge } from './helpers/twMerge';\n\ninterface LinkProps<T extends HTMLAnchorElement = HTMLAnchorElement>\n extends AnchorHTMLAttributes<T> {\n /**\n * Label text\n */\n label: string;\n /**\n * Icon name\n */\n icon?: IconicNames;\n iconType?: IconicTypes;\n /**\n * Icon width\n */\n width?: string;\n /**\n * Underlined\n */\n underlined?: boolean;\n /**\n * Additional class names\n */\n className?: string;\n /**\n * Is the link inert (not itself clickable but part of a clickable element)\n */\n inert?: boolean;\n /**\n * Allow giving a custom component\n */\n component?: FunctionComponent<PropsWithChildren<any>> | string;\n}\n\nexport const Link: FunctionComponent<LinkProps> = ({\n label,\n icon,\n component = 'a',\n iconType,\n underlined = true,\n className,\n inert,\n width = '24px',\n ...anchorAttrs\n}) => {\n if (!label) {\n return null;\n }\n const lastSpace = label.lastIndexOf(' ');\n const lastIndex = lastSpace === -1 ? label.length : lastSpace;\n\n const first = label.substring(0, 1);\n const middle = label.substring(1, lastIndex + 1);\n const last = label.substring(lastIndex);\n const Cmp = component as FunctionComponent<PropsWithChildren>;\n\n const TagName = inert ? 'span' : Cmp;\n\n return (\n <TagName\n className={twMerge(\n 'decoration-none link-container cursor-pointer text-b3 font-semibold',\n className,\n )}\n data-name=\"Link\"\n {...anchorAttrs}\n >\n <span className={clsx({ 'link-underline': underlined })}>{first}</span>\n <span\n className={clsx('hoverable', {\n 'has-icon': icon,\n 'link-underline': underlined,\n })}\n >\n {middle}\n <span className=\"inline-block\">\n {last}\n {icon && (\n <Icon\n name={icon}\n iconType={iconType}\n width={width}\n style={{ marginInlineStart: '8px' }}\n />\n )}\n </span>\n </span>\n </TagName>\n );\n};\n"],"mappings":";;;;;AAuCA,IAAa,KAAsC,EACjD,UACA,SACA,eAAY,KACZ,aACA,gBAAa,IACb,cACA,UACA,WAAQ,QACR,GAAG,QACC;AACJ,KAAI,CAAC,EACH,QAAO;CAET,IAAM,IAAY,EAAM,YAAY,IAAI,EAClC,IAAY,MAAc,KAAK,EAAM,SAAS,GAE9C,IAAQ,EAAM,UAAU,GAAG,EAAE,EAC7B,IAAS,EAAM,UAAU,GAAG,IAAY,EAAE,EAC1C,IAAO,EAAM,UAAU,EAAU;AAKvC,QACE,kBAHc,IAAQ,SAFZ,GAKV;EACE,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"Link.js","names":[],"sources":["../../lib/ui/Link.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type { AnchorHTMLAttributes, FunctionComponent, PropsWithChildren } from 'react';\n\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\nimport { twMerge } from './helpers/twMerge';\n\ninterface LinkProps<T extends HTMLAnchorElement = HTMLAnchorElement>\n extends AnchorHTMLAttributes<T> {\n /**\n * Label text\n */\n label: string;\n /**\n * Icon name\n */\n icon?: IconicNames;\n iconType?: IconicTypes;\n /**\n * Icon width\n */\n width?: string;\n /**\n * Underlined\n */\n underlined?: boolean;\n /**\n * Additional class names\n */\n className?: string;\n /**\n * Is the link inert (not itself clickable but part of a clickable element)\n */\n inert?: boolean;\n /**\n * Allow giving a custom component\n */\n component?: FunctionComponent<PropsWithChildren<any>> | string;\n}\n\nexport const Link: FunctionComponent<LinkProps> = ({\n label,\n icon,\n component = 'a',\n iconType,\n underlined = true,\n className,\n inert,\n width = '24px',\n ...anchorAttrs\n}) => {\n if (!label) {\n return null;\n }\n const lastSpace = label.lastIndexOf(' ');\n const lastIndex = lastSpace === -1 ? label.length : lastSpace;\n\n const first = label.substring(0, 1);\n const middle = label.substring(1, lastIndex + 1);\n const last = label.substring(lastIndex);\n const Cmp = component as FunctionComponent<PropsWithChildren>;\n\n const TagName = inert ? 'span' : Cmp;\n\n return (\n <TagName\n className={twMerge(\n 'decoration-none link-container cursor-pointer text-b3 font-semibold outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n className,\n )}\n data-name=\"Link\"\n {...anchorAttrs}\n >\n <span className={clsx({ 'link-underline': underlined })}>{first}</span>\n <span\n className={clsx('hoverable', {\n 'has-icon': icon,\n 'link-underline': underlined,\n })}\n >\n {middle}\n <span className=\"inline-block\">\n {last}\n {icon && (\n <Icon\n name={icon}\n iconType={iconType}\n width={width}\n style={{ marginInlineStart: '8px' }}\n />\n )}\n </span>\n </span>\n </TagName>\n );\n};\n"],"mappings":";;;;;AAuCA,IAAa,KAAsC,EACjD,UACA,SACA,eAAY,KACZ,aACA,gBAAa,IACb,cACA,UACA,WAAQ,QACR,GAAG,QACC;AACJ,KAAI,CAAC,EACH,QAAO;CAET,IAAM,IAAY,EAAM,YAAY,IAAI,EAClC,IAAY,MAAc,KAAK,EAAM,SAAS,GAE9C,IAAQ,EAAM,UAAU,GAAG,EAAE,EAC7B,IAAS,EAAM,UAAU,GAAG,IAAY,EAAE,EAC1C,IAAO,EAAM,UAAU,EAAU;AAKvC,QACE,kBAHc,IAAQ,SAFZ,GAKV;EACE,WAAW,EACT,8JACA,EACD;EACD,aAAU;EACV,GAAI;YANN,CAQE,kBAAC,QAAD;GAAM,WAAW,EAAK,EAAE,kBAAkB,GAAY,CAAC;aAAG;GAAa,CAAA,EACvE,kBAAC,QAAD;GACE,WAAW,EAAK,aAAa;IAC3B,YAAY;IACZ,kBAAkB;IACnB,CAAC;aAJJ,CAMG,GACD,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACG,GACA,KACC,kBAAC,GAAD;KACE,MAAM;KACI;KACH;KACP,OAAO,EAAE,mBAAmB,OAAO;KACnC,CAAA,CAEC;MACF;KACC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
|
|
2
|
+
import { IconicNames } from '@clubmed/trident-icons';
|
|
3
|
+
export interface PageNavigationItem {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
href: string;
|
|
7
|
+
icon?: IconicNames;
|
|
8
|
+
}
|
|
9
|
+
export interface PageNavigationProps extends ComponentPropsWithoutRef<'nav'> {
|
|
10
|
+
items: PageNavigationItem[];
|
|
11
|
+
activeItem: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const PageNavigation: FunctionComponent<PageNavigationProps>;
|