@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.
- 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 +196 -136
- 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/accordion-demo.d.ts +1 -0
- package/examples/accordion-demo.js +79 -0
- package/examples/accordion-demo.js.map +1 -0
- package/examples/accordion-multiple-demo.d.ts +1 -0
- package/examples/accordion-multiple-demo.js +79 -0
- package/examples/accordion-multiple-demo.js.map +1 -0
- package/examples/accordion-trigger-wrapper-demo.d.ts +1 -0
- package/examples/accordion-trigger-wrapper-demo.js +80 -0
- package/examples/accordion-trigger-wrapper-demo.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/avatar-demo.js +7 -7
- package/examples/button-demo.js +2 -2
- package/examples/button-demo.js.map +1 -1
- package/examples/card-list-demo.js +10 -10
- package/examples/card-no-border-demo.js +7 -7
- package/examples/chapters-demo.d.ts +1 -0
- package/examples/chapters-demo.js +46 -0
- package/examples/chapters-demo.js.map +1 -0
- 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 +2 -2
- package/examples/checkbox-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 +1 -0
- package/examples/checkboxes-demo.js.map +1 -1
- package/examples/checkboxes-with-form-control-demo.js +4 -4
- package/examples/chip-demo.js +4 -4
- 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-transports-b2b-demo.d.ts +1 -0
- package/examples/criteria-transports-b2b-demo.js +118 -0
- package/examples/criteria-transports-b2b-demo.js.map +1 -0
- package/examples/criteria-transports-demo.d.ts +1 -0
- package/examples/criteria-transports-demo.js +223 -0
- package/examples/criteria-transports-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/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/filter-demo.js +5 -5
- 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/promises-demo.d.ts +1 -0
- package/examples/promises-demo.js +50 -0
- package/examples/promises-demo.js.map +1 -0
- package/examples/radio-demo.js +3 -3
- package/examples/radio-demo.js.map +1 -1
- package/examples/radio-select-demo.d.ts +1 -0
- package/examples/radio-select-demo.js +100 -0
- package/examples/radio-select-demo.js.map +1 -0
- 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/sparkle-wrapper-demo.d.ts +1 -0
- package/examples/sparkle-wrapper-demo.js +34 -0
- package/examples/sparkle-wrapper-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 +9 -3
- package/styles/animate.css +19 -0
- package/styles/components.css +97 -4
- package/styles/index.css +0 -1
- package/styles/theme.css +1 -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/Accordion.d.ts +30 -0
- package/ui/Accordion.js +71 -0
- package/ui/Accordion.js.map +1 -0
- package/ui/AdvancedToast.js +22 -19
- package/ui/AdvancedToast.js.map +1 -1
- package/ui/Avatar.js +1 -1
- package/ui/Avatar.js.map +1 -1
- package/ui/BasicToast.js +12 -12
- package/ui/BasicToast.js.map +1 -1
- package/ui/Breadcrumb.js +7 -6
- package/ui/Breadcrumb.js.map +1 -1
- package/ui/Chapters/Chapter.d.ts +7 -0
- package/ui/Chapters/Chapter.js +36 -0
- package/ui/Chapters/Chapter.js.map +1 -0
- package/ui/Chapters/ChapterTitle.d.ts +14 -0
- package/ui/Chapters/ChapterTitle.js +35 -0
- package/ui/Chapters/ChapterTitle.js.map +1 -0
- package/ui/Chapters/Chapters.d.ts +15 -0
- package/ui/Chapters/Chapters.js +42 -0
- package/ui/Chapters/Chapters.js.map +1 -0
- package/ui/Chapters/Chapters.themes.d.ts +9 -0
- package/ui/Chapters/Chapters.themes.js +65 -0
- package/ui/Chapters/Chapters.themes.js.map +1 -0
- package/ui/Chapters/ChaptersSummary.d.ts +17 -0
- package/ui/Chapters/ChaptersSummary.js +29 -0
- package/ui/Chapters/ChaptersSummary.js.map +1 -0
- package/ui/ChatButton.js +9 -9
- 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/Chip.js +4 -4
- package/ui/ChoiceExpander.js +17 -17
- 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 +61 -27
- package/ui/Dropdown.js.map +1 -1
- package/ui/ElasticHeight.js +1 -0
- 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 +8 -8
- 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 +23 -23
- package/ui/Pagination.js.map +1 -1
- package/ui/Promises/Promises.d.ts +26 -0
- package/ui/Promises/Promises.js +42 -0
- package/ui/Promises/Promises.js.map +1 -0
- package/ui/Promises/PromisesMedia.d.ts +12 -0
- package/ui/Promises/PromisesMedia.js +64 -0
- package/ui/Promises/PromisesMedia.js.map +1 -0
- package/ui/Promises/PromisesMenu.d.ts +11 -0
- package/ui/Promises/PromisesMenu.js +154 -0
- package/ui/Promises/PromisesMenu.js.map +1 -0
- 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 +67 -59
- package/ui/SidebarLayout.js.map +1 -1
- package/ui/SparkleWrapper.d.ts +5 -0
- package/ui/SparkleWrapper.js +56 -0
- package/ui/SparkleWrapper.js.map +1 -0
- package/ui/Tag.js +6 -6
- 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/buttons/ButtonContent.js +3 -3
- 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/CriteriaTransports.d.ts +53 -0
- package/ui/criteria/CriteriaTransports.js +274 -0
- package/ui/criteria/CriteriaTransports.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 +3 -1
- package/ui/forms/Filter.js +17 -13
- 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.map +1 -1
- package/ui/forms/FormControlError.js +4 -4
- package/ui/forms/NumberField.d.ts +3 -2
- 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/RadioSelect.d.ts +31 -0
- package/ui/forms/RadioSelect.js +117 -0
- package/ui/forms/RadioSelect.js.map +1 -0
- package/ui/forms/Range.d.ts +1 -1
- package/ui/forms/Select.js +16 -17
- 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 +33 -24
- package/ui/forms/TextField.js.map +1 -1
- package/ui/forms/checkboxes/Checkbox.d.ts +3 -1
- package/ui/forms/checkboxes/Checkbox.js +21 -17
- 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/password/Password.js +19 -20
- package/ui/forms/password/Password.js.map +1 -1
- package/ui/forms/password/ValidationMessage.js +5 -5
- 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 +5 -6
- 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
|
@@ -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>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../chunks/clsx.js";
|
|
3
|
+
import { useCallback as t, useRef as n } from "react";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
import { Icon as a } from "@clubmed/trident-icons";
|
|
6
|
+
//#region lib/ui/PageNavigation.tsx
|
|
7
|
+
var o = {
|
|
8
|
+
positionAnchor: "--page-nav-active",
|
|
9
|
+
top: "anchor(top)",
|
|
10
|
+
bottom: "anchor(bottom)",
|
|
11
|
+
left: "anchor(left)",
|
|
12
|
+
right: "anchor(right)",
|
|
13
|
+
position: "absolute"
|
|
14
|
+
}, s = { anchorName: "--page-nav-active" }, c = /* @__PURE__ */ r("span", {
|
|
15
|
+
"aria-hidden": "true",
|
|
16
|
+
className: "pointer-events-none absolute rounded-pill bg-black transition-all duration-300 [position-anchor:--page-nav-active]",
|
|
17
|
+
style: o
|
|
18
|
+
}), l = ({ items: o, activeItem: l, className: u, ...d }) => {
|
|
19
|
+
let f = n(null), p = t((e) => {
|
|
20
|
+
let t = Array.from(f.current?.querySelectorAll("a") ?? []), n = t.indexOf(document.activeElement);
|
|
21
|
+
if (n === -1) return;
|
|
22
|
+
let r = n;
|
|
23
|
+
if (e.key === "ArrowRight") r = (n + 1) % t.length;
|
|
24
|
+
else if (e.key === "ArrowLeft") r = (n - 1 + t.length) % t.length;
|
|
25
|
+
else if (e.key === "Home") r = 0;
|
|
26
|
+
else if (e.key === "End") r = t.length - 1;
|
|
27
|
+
else return;
|
|
28
|
+
e.preventDefault(), t[r].focus();
|
|
29
|
+
}, []);
|
|
30
|
+
return /* @__PURE__ */ r("nav", {
|
|
31
|
+
"aria-label": "Page navigation",
|
|
32
|
+
...d,
|
|
33
|
+
className: e("flex items-center", u),
|
|
34
|
+
children: /* @__PURE__ */ i("ul", {
|
|
35
|
+
ref: f,
|
|
36
|
+
onKeyDown: p,
|
|
37
|
+
className: "relative flex items-center gap-4 md:gap-16",
|
|
38
|
+
role: "list",
|
|
39
|
+
children: [c, o.map((t) => {
|
|
40
|
+
let n = t.id === l;
|
|
41
|
+
return /* @__PURE__ */ r("li", {
|
|
42
|
+
className: "relative",
|
|
43
|
+
children: /* @__PURE__ */ i("a", {
|
|
44
|
+
href: t.href,
|
|
45
|
+
"aria-current": n ? "page" : void 0,
|
|
46
|
+
style: n ? s : void 0,
|
|
47
|
+
className: e("relative z-10 grid items-center justify-center gap-2 rounded-pill", "font-sans text-b3 font-semibold focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 outline-none", n ? "[@supports(not(anchor-name:--x))]:bg-black" : "focus:bg-pearl", n ? "px-20 py-12" : "md:px-20 md:py-12", n ? "text-white" : "text-black"),
|
|
48
|
+
children: [t.icon && /* @__PURE__ */ r("div", {
|
|
49
|
+
className: e("row-start-1 row-end-1 col-start-1 col-end-1 flex items-center justify-center transition-opacity duration-300 md:hidden", "md:opacity-0 transition-opacity mx-auto", n && "opacity-0"),
|
|
50
|
+
"aria-hidden": "true",
|
|
51
|
+
children: /* @__PURE__ */ r(a, {
|
|
52
|
+
name: t.icon,
|
|
53
|
+
width: "30px"
|
|
54
|
+
})
|
|
55
|
+
}), /* @__PURE__ */ r("span", {
|
|
56
|
+
className: e("row-start-1 row-end-1 col-start-1 col-end-1 grid grid-cols-[0fr] md:grid-cols-[1fr] overflow-hidden transition-all opacity-0 duration-300 md:opacity-100 text-center", n && "grid-cols-[1fr] opacity-100"),
|
|
57
|
+
children: /* @__PURE__ */ r("span", {
|
|
58
|
+
className: "overflow-hidden mx-auto",
|
|
59
|
+
children: t.label
|
|
60
|
+
})
|
|
61
|
+
})]
|
|
62
|
+
})
|
|
63
|
+
}, t.id);
|
|
64
|
+
})]
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
export { l as PageNavigation };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=PageNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageNavigation.js","names":[],"sources":["../../lib/ui/PageNavigation.tsx"],"sourcesContent":["'use client';\n\nimport type {\n ComponentPropsWithoutRef,\n CSSProperties,\n FunctionComponent,\n KeyboardEvent,\n} from 'react';\nimport { useCallback, useRef } from 'react';\nimport clsx from 'clsx';\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\n\nexport interface PageNavigationItem {\n id: string;\n label: string;\n href: string;\n icon?: IconicNames;\n}\n\nexport interface PageNavigationProps extends ComponentPropsWithoutRef<'nav'> {\n items: PageNavigationItem[];\n activeItem: string;\n}\n\n// Static — hoisted outside component so it's not recreated on every render\nconst PILL_STYLE: CSSProperties = {\n positionAnchor: '--page-nav-active',\n top: 'anchor(top)',\n bottom: 'anchor(bottom)',\n left: 'anchor(left)',\n right: 'anchor(right)',\n position: 'absolute',\n};\n\nconst ACTIVE_ANCHOR_STYLE: CSSProperties = { anchorName: '--page-nav-active' };\n\nconst PILL = (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute rounded-pill bg-black transition-all duration-300 [position-anchor:--page-nav-active]\"\n style={PILL_STYLE}\n />\n);\n\nexport const PageNavigation: FunctionComponent<PageNavigationProps> = ({\n items,\n activeItem,\n className,\n ...attrs\n}) => {\n const listRef = useRef<HTMLUListElement>(null);\n\n const handleKeyDown = useCallback((e: KeyboardEvent<HTMLUListElement>) => {\n const links = Array.from(listRef.current?.querySelectorAll<HTMLAnchorElement>('a') ?? []);\n const focused = links.indexOf(document.activeElement as HTMLAnchorElement);\n if (focused === -1) return;\n\n let next = focused;\n if (e.key === 'ArrowRight') next = (focused + 1) % links.length;\n else if (e.key === 'ArrowLeft') next = (focused - 1 + links.length) % links.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = links.length - 1;\n else return;\n\n e.preventDefault();\n links[next].focus();\n }, []);\n\n return (\n <nav aria-label=\"Page navigation\" {...attrs} className={clsx('flex items-center', className)}>\n <ul\n ref={listRef}\n onKeyDown={handleKeyDown}\n className=\"relative flex items-center gap-4 md:gap-16\"\n role=\"list\"\n >\n {PILL}\n\n {items.map((item) => {\n const isActive = item.id === activeItem;\n\n return (\n <li key={item.id} className=\"relative\">\n <a\n href={item.href}\n aria-current={isActive ? 'page' : undefined}\n style={isActive ? ACTIVE_ANCHOR_STYLE : undefined}\n className={clsx(\n 'relative z-10 grid items-center justify-center gap-2 rounded-pill',\n 'font-sans text-b3 font-semibold focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2 outline-none',\n isActive ? '[@supports(not(anchor-name:--x))]:bg-black' : 'focus:bg-pearl',\n isActive ? 'px-20 py-12' : 'md:px-20 md:py-12',\n isActive ? 'text-white' : 'text-black',\n )}\n >\n {item.icon && (\n <div\n className={clsx(\n 'row-start-1 row-end-1 col-start-1 col-end-1 flex items-center justify-center transition-opacity duration-300 md:hidden',\n 'md:opacity-0 transition-opacity mx-auto',\n isActive && 'opacity-0',\n )}\n aria-hidden=\"true\"\n >\n <Icon name={item.icon} width=\"30px\" />\n </div>\n )}\n\n <span\n className={clsx(\n 'row-start-1 row-end-1 col-start-1 col-end-1 grid grid-cols-[0fr] md:grid-cols-[1fr] overflow-hidden transition-all opacity-0 duration-300 md:opacity-100 text-center',\n isActive && 'grid-cols-[1fr] opacity-100',\n )}\n >\n <span className=\"overflow-hidden mx-auto\">{item.label}</span>\n </span>\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n"],"mappings":";;;;;;AAyBA,IAAM,IAA4B;CAChC,gBAAgB;CAChB,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;CACP,UAAU;CACX,EAEK,IAAqC,EAAE,YAAY,qBAAqB,EAExE,IACJ,kBAAC,QAAD;CACE,eAAY;CACZ,WAAU;CACV,OAAO;CACP,CAAA,EAGS,KAA0D,EACrE,UACA,eACA,cACA,GAAG,QACC;CACJ,IAAM,IAAU,EAAyB,KAAK,EAExC,IAAgB,GAAa,MAAuC;EACxE,IAAM,IAAQ,MAAM,KAAK,EAAQ,SAAS,iBAAoC,IAAI,IAAI,EAAE,CAAC,EACnF,IAAU,EAAM,QAAQ,SAAS,cAAmC;AAC1E,MAAI,MAAY,GAAI;EAEpB,IAAI,IAAO;AACX,MAAI,EAAE,QAAQ,aAAc,MAAQ,IAAU,KAAK,EAAM;WAChD,EAAE,QAAQ,YAAa,MAAQ,IAAU,IAAI,EAAM,UAAU,EAAM;WACnE,EAAE,QAAQ,OAAQ,KAAO;WACzB,EAAE,QAAQ,MAAO,KAAO,EAAM,SAAS;MAC3C;AAGL,EADA,EAAE,gBAAgB,EAClB,EAAM,GAAM,OAAO;IAClB,EAAE,CAAC;AAEN,QACE,kBAAC,OAAD;EAAK,cAAW;EAAkB,GAAI;EAAO,WAAW,EAAK,qBAAqB,EAAU;YAC1F,kBAAC,MAAD;GACE,KAAK;GACL,WAAW;GACX,WAAU;GACV,MAAK;aAJP,CAMG,GAEA,EAAM,KAAK,MAAS;IACnB,IAAM,IAAW,EAAK,OAAO;AAE7B,WACE,kBAAC,MAAD;KAAkB,WAAU;eAC1B,kBAAC,KAAD;MACE,MAAM,EAAK;MACX,gBAAc,IAAW,SAAS,KAAA;MAClC,OAAO,IAAW,IAAsB,KAAA;MACxC,WAAW,EACT,qEACA,0HACA,IAAW,+CAA+C,kBAC1D,IAAW,gBAAgB,qBAC3B,IAAW,eAAe,aAC3B;gBAVH,CAYG,EAAK,QACJ,kBAAC,OAAD;OACE,WAAW,EACT,0HACA,2CACA,KAAY,YACb;OACD,eAAY;iBAEZ,kBAAC,GAAD;QAAM,MAAM,EAAK;QAAM,OAAM;QAAS,CAAA;OAClC,CAAA,EAGR,kBAAC,QAAD;OACE,WAAW,EACT,wKACA,KAAY,8BACb;iBAED,kBAAC,QAAD;QAAM,WAAU;kBAA2B,EAAK;QAAa,CAAA;OACxD,CAAA,CAAA;;KAEN,EAnCI,EAAK,GAmCT;KAEP,CAAA;;EAEA,CAAA"}
|
package/ui/Pagination.js
CHANGED
|
@@ -3,40 +3,40 @@ import { t as e } from "../chunks/clsx.js";
|
|
|
3
3
|
import { Button as t } from "./buttons/Button.js";
|
|
4
4
|
import { generatePagination as n, hidePageButtonForMobile as r, showMobileEllipsis as i } from "./Pagination.helper.js";
|
|
5
5
|
import { Fragment as a } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
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/Pagination.tsx
|
|
9
|
-
var l = () => /* @__PURE__ */
|
|
9
|
+
var l = () => /* @__PURE__ */ o("li", { children: /* @__PURE__ */ o("div", {
|
|
10
10
|
"aria-controls": "page-content",
|
|
11
11
|
className: "text-base mx-8 ml-4 hidden size-48 items-center justify-center text-b3 font-semibold text-black md:flex",
|
|
12
12
|
children: "…"
|
|
13
|
-
}) }, "desktop-ellipsis"), u = () => /* @__PURE__ */
|
|
13
|
+
}) }, "desktop-ellipsis"), u = () => /* @__PURE__ */ o("li", { children: /* @__PURE__ */ o("div", {
|
|
14
14
|
"aria-controls": "page-content",
|
|
15
15
|
className: "text-base mx-8 ml-4 flex size-48 items-center justify-center text-b3 font-semibold text-black md:hidden",
|
|
16
16
|
children: "…"
|
|
17
17
|
}) }, "mobile-ellipsis"), d = ({ defaultPage: d, buttonClassName: f = "md:mr-32", buttonLabelClassName: p = "md:flex", className: m, labels: h = {}, onChange: g, paginationFactory: _ = n, count: v, ...y }) => {
|
|
18
18
|
let b = _(d, v);
|
|
19
|
-
return /* @__PURE__ */
|
|
19
|
+
return /* @__PURE__ */ o("nav", {
|
|
20
20
|
...y,
|
|
21
21
|
"data-name": "Pagination",
|
|
22
22
|
role: "navigation",
|
|
23
23
|
"aria-label": "pagination navigation",
|
|
24
24
|
className: e("flex justify-center border-t-sand", m),
|
|
25
|
-
children: /* @__PURE__ */
|
|
25
|
+
children: /* @__PURE__ */ o("ul", {
|
|
26
26
|
className: "mt-12 flex",
|
|
27
27
|
children: b.map((n, m) => {
|
|
28
28
|
switch (n.type) {
|
|
29
|
-
case "pageNumber": return /* @__PURE__ */
|
|
30
|
-
n.value === v && i(n.value, d, v) && /* @__PURE__ */
|
|
31
|
-
/* @__PURE__ */
|
|
29
|
+
case "pageNumber": return /* @__PURE__ */ s(a, { children: [
|
|
30
|
+
n.value === v && i(n.value, d, v) && /* @__PURE__ */ o(u, {}),
|
|
31
|
+
/* @__PURE__ */ o("li", {
|
|
32
32
|
className: e("mr-2", { "hidden md:flex": r(n.value, d, v) }),
|
|
33
|
-
children: n.value === d ? /* @__PURE__ */
|
|
33
|
+
children: n.value === d ? /* @__PURE__ */ o(t, {
|
|
34
34
|
"aria-current": "page",
|
|
35
35
|
className: "text-white",
|
|
36
36
|
color: "black",
|
|
37
37
|
variant: "circle",
|
|
38
38
|
children: n.value.toString()
|
|
39
|
-
}) : /* @__PURE__ */
|
|
39
|
+
}) : /* @__PURE__ */ o(t, {
|
|
40
40
|
className: e("size-48 items-center", { "mx-8 flex shrink-0 cursor-pointer justify-center self-start": m === b.length - 1 }),
|
|
41
41
|
onClick: () => g(n.value),
|
|
42
42
|
color: "white",
|
|
@@ -44,42 +44,42 @@ var l = () => /* @__PURE__ */ s("li", { children: /* @__PURE__ */ s("div", {
|
|
|
44
44
|
children: n.value.toString()
|
|
45
45
|
})
|
|
46
46
|
}),
|
|
47
|
-
n.value === 1 && i(n.value, d, v) && /* @__PURE__ */
|
|
47
|
+
n.value === 1 && i(n.value, d, v) && /* @__PURE__ */ o(u, {})
|
|
48
48
|
] }, `pagination-pageNumber-${m}`);
|
|
49
|
-
case "ellipsis": return /* @__PURE__ */
|
|
50
|
-
case "previousButton": return /* @__PURE__ */
|
|
49
|
+
case "ellipsis": return /* @__PURE__ */ o(l, {}, `pagination-ellipsis-${m}`);
|
|
50
|
+
case "previousButton": return /* @__PURE__ */ o("li", {
|
|
51
51
|
className: e(f),
|
|
52
|
-
children: /* @__PURE__ */
|
|
52
|
+
children: /* @__PURE__ */ s("button", {
|
|
53
53
|
"data-action": "previous",
|
|
54
54
|
"aria-controls": "page-content",
|
|
55
55
|
"aria-label": `page ${d - 1}`,
|
|
56
|
-
className: e("text:black text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active", { "pointer-events-none disabled:text-grey": n.disabled }),
|
|
56
|
+
className: e("text:black text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", { "pointer-events-none disabled:text-grey": n.disabled }),
|
|
57
57
|
disabled: n.disabled,
|
|
58
58
|
onClick: () => g(d - 1),
|
|
59
59
|
type: "button",
|
|
60
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ o(c, {
|
|
61
61
|
name: "ArrowDefaultLeft",
|
|
62
62
|
width: "30px"
|
|
63
|
-
}), /* @__PURE__ */
|
|
63
|
+
}), /* @__PURE__ */ o("span", {
|
|
64
64
|
className: e("ml-4 hidden border-b", { "border-black": !n.disabled }, p),
|
|
65
65
|
children: h.previous
|
|
66
66
|
})]
|
|
67
67
|
})
|
|
68
68
|
}, "pagination-labels.previous");
|
|
69
|
-
case "nextButton": return /* @__PURE__ */
|
|
69
|
+
case "nextButton": return /* @__PURE__ */ o("li", {
|
|
70
70
|
className: e(f),
|
|
71
|
-
children: /* @__PURE__ */
|
|
71
|
+
children: /* @__PURE__ */ s("button", {
|
|
72
72
|
"aria-controls": "page-content",
|
|
73
73
|
"aria-label": `page ${d + 1}`,
|
|
74
|
-
className: e("text:black mb-5 text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active", { "pointer-events-none disabled:text-grey": n.disabled }),
|
|
74
|
+
className: e("text:black mb-5 text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2", { "pointer-events-none disabled:text-grey": n.disabled }),
|
|
75
75
|
"data-action": "next",
|
|
76
76
|
disabled: n.disabled,
|
|
77
77
|
onClick: () => g(d + 1),
|
|
78
78
|
type: "button",
|
|
79
|
-
children: [/* @__PURE__ */
|
|
79
|
+
children: [/* @__PURE__ */ o("span", {
|
|
80
80
|
className: e("ml-4 hidden border-b", { "border-black": !n.disabled }, p),
|
|
81
81
|
children: h.next
|
|
82
|
-
}), /* @__PURE__ */
|
|
82
|
+
}), /* @__PURE__ */ o(c, {
|
|
83
83
|
name: "ArrowDefaultRight",
|
|
84
84
|
width: "30px"
|
|
85
85
|
})]
|
package/ui/Pagination.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","names":[],"sources":["../../lib/ui/Pagination.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { Fragment, type FunctionComponent, type HTMLAttributes } from 'react';\n\nimport {\n showMobileEllipsis,\n generatePagination,\n hidePageButtonForMobile,\n} from './Pagination.helper';\nimport { Button } from './buttons/Button';\nimport { Icon } from '@clubmed/trident-icons';\nimport type { ScrollerLabels } from './types/ScrollerLabels';\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /**\n * The current page number (must be >= 1)\n */\n defaultPage: number;\n /**\n * The total pages number\n */\n count: number;\n /**\n * A callback function to handle page changes.\n */\n onChange: (page: number) => void;\n /**\n * Additional class names for the previous & next buttons\n */\n buttonClassName?: string;\n /**\n * Additional class names for the label of the previous & next buttons\n */\n buttonLabelClassName?: string;\n /**\n * Additional class names\n */\n className?: string;\n /**\n * UI Labels\n */\n labels: ScrollerLabels;\n /**\n * A pagination factory to generate an array of Pagination elements (pageNumber, ellipsis, next button, previous button).\n */\n paginationFactory?: typeof generatePagination;\n}\n\nconst EllipsisDesktop = () => {\n return (\n <li key=\"desktop-ellipsis\">\n <div\n aria-controls=\"page-content\"\n className=\"text-base mx-8 ml-4 hidden size-48 items-center justify-center text-b3 font-semibold text-black md:flex\"\n >\n …\n </div>\n </li>\n );\n};\n\nconst EllipsisMobile = () => {\n return (\n <li key=\"mobile-ellipsis\">\n <div\n aria-controls=\"page-content\"\n className=\"text-base mx-8 ml-4 flex size-48 items-center justify-center text-b3 font-semibold text-black md:hidden\"\n >\n …\n </div>\n </li>\n );\n};\n\nexport const Pagination: FunctionComponent<PaginationProps> = ({\n defaultPage,\n buttonClassName = 'md:mr-32',\n buttonLabelClassName = 'md:flex',\n className,\n labels = {},\n onChange,\n paginationFactory = generatePagination,\n count,\n ...props\n}) => {\n const pagination = paginationFactory(defaultPage, count);\n\n return (\n <nav\n {...props}\n data-name=\"Pagination\"\n role=\"navigation\"\n aria-label=\"pagination navigation\"\n className={clsx('flex justify-center border-t-sand', className)}\n >\n <ul className=\"mt-12 flex\">\n {pagination.map((page, index) => {\n switch (page.type) {\n case 'pageNumber':\n return (\n <Fragment key={`pagination-pageNumber-${index}`}>\n {page.value === count && showMobileEllipsis(page.value, defaultPage, count) && (\n <EllipsisMobile />\n )}\n <li\n className={clsx('mr-2', {\n 'hidden md:flex': hidePageButtonForMobile(page.value, defaultPage, count),\n })}\n >\n {page.value === defaultPage ? (\n <Button\n aria-current=\"page\"\n className=\"text-white\"\n color=\"black\"\n variant=\"circle\"\n >\n {page.value.toString()}\n </Button>\n ) : (\n <Button\n className={clsx('size-48 items-center', {\n 'mx-8 flex shrink-0 cursor-pointer justify-center self-start':\n index === pagination.length - 1,\n })}\n onClick={() => onChange(page.value)}\n color=\"white\"\n variant=\"circle\"\n >\n {page.value.toString()}\n </Button>\n )}\n </li>\n {page.value === 1 && showMobileEllipsis(page.value, defaultPage, count) && (\n <EllipsisMobile />\n )}\n </Fragment>\n );\n\n case 'ellipsis':\n return <EllipsisDesktop key={`pagination-ellipsis-${index}`} />;\n\n case 'previousButton':\n return (\n <li key=\"pagination-labels.previous\" className={clsx(buttonClassName)}>\n <button\n data-action=\"previous\"\n aria-controls=\"page-content\"\n aria-label={`page ${defaultPage - 1}`}\n className={clsx(\n 'text:black text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active',\n {\n 'pointer-events-none disabled:text-grey': page.disabled,\n },\n )}\n disabled={page.disabled}\n onClick={() => onChange(defaultPage - 1)}\n type=\"button\"\n >\n <Icon name=\"ArrowDefaultLeft\" width=\"30px\" />\n <span\n className={clsx(\n 'ml-4 hidden border-b',\n { 'border-black': !page.disabled },\n buttonLabelClassName,\n )}\n >\n {labels.previous}\n </span>\n </button>\n </li>\n );\n\n case 'nextButton':\n return (\n <li className={clsx(buttonClassName)} key=\"pagination-labels.next\">\n <button\n aria-controls=\"page-content\"\n aria-label={`page ${defaultPage + 1}`}\n className={clsx(\n 'text:black mb-5 text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active',\n {\n 'pointer-events-none disabled:text-grey': page.disabled,\n },\n )}\n data-action=\"next\"\n disabled={page.disabled}\n onClick={() => onChange(defaultPage + 1)}\n type=\"button\"\n >\n <span\n className={clsx(\n 'ml-4 hidden border-b',\n { 'border-black': !page.disabled },\n buttonLabelClassName,\n )}\n >\n {labels.next}\n </span>\n <Icon name=\"ArrowDefaultRight\" width=\"30px\" />\n </button>\n </li>\n );\n\n default:\n return null;\n }\n })}\n </ul>\n </nav>\n );\n};\n"],"mappings":";;;;;;;;AAiDA,IAAM,UAEF,kBAAC,MAAD,EAAA,UACE,kBAAC,OAAD;CACE,iBAAc;CACd,WAAU;WACX;CAEK,CAAA,EACH,EAPG,mBAOH,EAIH,UAEF,kBAAC,MAAD,EAAA,UACE,kBAAC,OAAD;CACE,iBAAc;CACd,WAAU;WACX;CAEK,CAAA,EACH,EAPG,kBAOH,EAII,KAAkD,EAC7D,gBACA,qBAAkB,YAClB,0BAAuB,WACvB,cACA,YAAS,EAAE,EACX,aACA,uBAAoB,GACpB,UACA,GAAG,QACC;CACJ,IAAM,IAAa,EAAkB,GAAa,EAAM;AAExD,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,MAAK;EACL,cAAW;EACX,WAAW,EAAK,qCAAqC,EAAU;YAE/D,kBAAC,MAAD;GAAI,WAAU;aACX,EAAW,KAAK,GAAM,MAAU;AAC/B,YAAQ,EAAK,MAAb;KACE,KAAK,aACH,QACE,kBAAC,GAAD,EAAA,UAAA;MACG,EAAK,UAAU,KAAS,EAAmB,EAAK,OAAO,GAAa,EAAM,IACzE,kBAAC,GAAD,EAAkB,CAAA;MAEpB,kBAAC,MAAD;OACE,WAAW,EAAK,QAAQ,EACtB,kBAAkB,EAAwB,EAAK,OAAO,GAAa,EAAM,EAC1E,CAAC;iBAED,EAAK,UAAU,IACd,kBAAC,GAAD;QACE,gBAAa;QACb,WAAU;QACV,OAAM;QACN,SAAQ;kBAEP,EAAK,MAAM,UAAA;QACL,CAAA,GAET,kBAAC,GAAD;QACE,WAAW,EAAK,wBAAwB,EACtC,+DACE,MAAU,EAAW,SAAS,GACjC,CAAC;QACF,eAAe,EAAS,EAAK,MAAM;QACnC,OAAM;QACN,SAAQ;kBAEP,EAAK,MAAM,UAAA;QACL,CAAA;OAER,CAAA;MACJ,EAAK,UAAU,KAAK,EAAmB,EAAK,OAAO,GAAa,EAAM,IACrE,kBAAC,GAAD,EAAkB,CAAA;MAEX,EAAA,EAnCI,yBAAyB,IAmC7B;KAGf,KAAK,WACH,QAAO,kBAAC,GAAD,EAAwD,EAAlC,uBAAuB,IAAW;KAEjE,KAAK,iBACH,QACE,kBAAC,MAAD;MAAqC,WAAW,EAAK,EAAgB;gBACnE,kBAAC,UAAD;OACE,eAAY;OACZ,iBAAc;OACd,cAAY,QAAQ,IAAc;OAClC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"Pagination.js","names":[],"sources":["../../lib/ui/Pagination.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { Fragment, type FunctionComponent, type HTMLAttributes } from 'react';\n\nimport {\n showMobileEllipsis,\n generatePagination,\n hidePageButtonForMobile,\n} from './Pagination.helper';\nimport { Button } from './buttons/Button';\nimport { Icon } from '@clubmed/trident-icons';\nimport type { ScrollerLabels } from './types/ScrollerLabels';\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /**\n * The current page number (must be >= 1)\n */\n defaultPage: number;\n /**\n * The total pages number\n */\n count: number;\n /**\n * A callback function to handle page changes.\n */\n onChange: (page: number) => void;\n /**\n * Additional class names for the previous & next buttons\n */\n buttonClassName?: string;\n /**\n * Additional class names for the label of the previous & next buttons\n */\n buttonLabelClassName?: string;\n /**\n * Additional class names\n */\n className?: string;\n /**\n * UI Labels\n */\n labels: ScrollerLabels;\n /**\n * A pagination factory to generate an array of Pagination elements (pageNumber, ellipsis, next button, previous button).\n */\n paginationFactory?: typeof generatePagination;\n}\n\nconst EllipsisDesktop = () => {\n return (\n <li key=\"desktop-ellipsis\">\n <div\n aria-controls=\"page-content\"\n className=\"text-base mx-8 ml-4 hidden size-48 items-center justify-center text-b3 font-semibold text-black md:flex\"\n >\n …\n </div>\n </li>\n );\n};\n\nconst EllipsisMobile = () => {\n return (\n <li key=\"mobile-ellipsis\">\n <div\n aria-controls=\"page-content\"\n className=\"text-base mx-8 ml-4 flex size-48 items-center justify-center text-b3 font-semibold text-black md:hidden\"\n >\n …\n </div>\n </li>\n );\n};\n\nexport const Pagination: FunctionComponent<PaginationProps> = ({\n defaultPage,\n buttonClassName = 'md:mr-32',\n buttonLabelClassName = 'md:flex',\n className,\n labels = {},\n onChange,\n paginationFactory = generatePagination,\n count,\n ...props\n}) => {\n const pagination = paginationFactory(defaultPage, count);\n\n return (\n <nav\n {...props}\n data-name=\"Pagination\"\n role=\"navigation\"\n aria-label=\"pagination navigation\"\n className={clsx('flex justify-center border-t-sand', className)}\n >\n <ul className=\"mt-12 flex\">\n {pagination.map((page, index) => {\n switch (page.type) {\n case 'pageNumber':\n return (\n <Fragment key={`pagination-pageNumber-${index}`}>\n {page.value === count && showMobileEllipsis(page.value, defaultPage, count) && (\n <EllipsisMobile />\n )}\n <li\n className={clsx('mr-2', {\n 'hidden md:flex': hidePageButtonForMobile(page.value, defaultPage, count),\n })}\n >\n {page.value === defaultPage ? (\n <Button\n aria-current=\"page\"\n className=\"text-white\"\n color=\"black\"\n variant=\"circle\"\n >\n {page.value.toString()}\n </Button>\n ) : (\n <Button\n className={clsx('size-48 items-center', {\n 'mx-8 flex shrink-0 cursor-pointer justify-center self-start':\n index === pagination.length - 1,\n })}\n onClick={() => onChange(page.value)}\n color=\"white\"\n variant=\"circle\"\n >\n {page.value.toString()}\n </Button>\n )}\n </li>\n {page.value === 1 && showMobileEllipsis(page.value, defaultPage, count) && (\n <EllipsisMobile />\n )}\n </Fragment>\n );\n\n case 'ellipsis':\n return <EllipsisDesktop key={`pagination-ellipsis-${index}`} />;\n\n case 'previousButton':\n return (\n <li key=\"pagination-labels.previous\" className={clsx(buttonClassName)}>\n <button\n data-action=\"previous\"\n aria-controls=\"page-content\"\n aria-label={`page ${defaultPage - 1}`}\n className={clsx(\n 'text:black text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n {\n 'pointer-events-none disabled:text-grey': page.disabled,\n },\n )}\n disabled={page.disabled}\n onClick={() => onChange(defaultPage - 1)}\n type=\"button\"\n >\n <Icon name=\"ArrowDefaultLeft\" width=\"30px\" />\n <span\n className={clsx(\n 'ml-4 hidden border-b',\n { 'border-black': !page.disabled },\n buttonLabelClassName,\n )}\n >\n {labels.previous}\n </span>\n </button>\n </li>\n );\n\n case 'nextButton':\n return (\n <li className={clsx(buttonClassName)} key=\"pagination-labels.next\">\n <button\n aria-controls=\"page-content\"\n aria-label={`page ${defaultPage + 1}`}\n className={clsx(\n 'text:black mb-5 text-base mx-8 flex h-48 shrink-0 items-center justify-center self-start text-b3 font-semibold active:text-black-active disabled:text-grey hocus:text-black-active outline-none focus-visible:ring-4 focus-visible:ring-black focus-visible:ring-offset-2',\n {\n 'pointer-events-none disabled:text-grey': page.disabled,\n },\n )}\n data-action=\"next\"\n disabled={page.disabled}\n onClick={() => onChange(defaultPage + 1)}\n type=\"button\"\n >\n <span\n className={clsx(\n 'ml-4 hidden border-b',\n { 'border-black': !page.disabled },\n buttonLabelClassName,\n )}\n >\n {labels.next}\n </span>\n <Icon name=\"ArrowDefaultRight\" width=\"30px\" />\n </button>\n </li>\n );\n\n default:\n return null;\n }\n })}\n </ul>\n </nav>\n );\n};\n"],"mappings":";;;;;;;;AAiDA,IAAM,UAEF,kBAAC,MAAD,EAAA,UACE,kBAAC,OAAD;CACE,iBAAc;CACd,WAAU;WACX;CAEK,CAAA,EACH,EAPG,mBAOH,EAIH,UAEF,kBAAC,MAAD,EAAA,UACE,kBAAC,OAAD;CACE,iBAAc;CACd,WAAU;WACX;CAEK,CAAA,EACH,EAPG,kBAOH,EAII,KAAkD,EAC7D,gBACA,qBAAkB,YAClB,0BAAuB,WACvB,cACA,YAAS,EAAE,EACX,aACA,uBAAoB,GACpB,UACA,GAAG,QACC;CACJ,IAAM,IAAa,EAAkB,GAAa,EAAM;AAExD,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,MAAK;EACL,cAAW;EACX,WAAW,EAAK,qCAAqC,EAAU;YAE/D,kBAAC,MAAD;GAAI,WAAU;aACX,EAAW,KAAK,GAAM,MAAU;AAC/B,YAAQ,EAAK,MAAb;KACE,KAAK,aACH,QACE,kBAAC,GAAD,EAAA,UAAA;MACG,EAAK,UAAU,KAAS,EAAmB,EAAK,OAAO,GAAa,EAAM,IACzE,kBAAC,GAAD,EAAkB,CAAA;MAEpB,kBAAC,MAAD;OACE,WAAW,EAAK,QAAQ,EACtB,kBAAkB,EAAwB,EAAK,OAAO,GAAa,EAAM,EAC1E,CAAC;iBAED,EAAK,UAAU,IACd,kBAAC,GAAD;QACE,gBAAa;QACb,WAAU;QACV,OAAM;QACN,SAAQ;kBAEP,EAAK,MAAM,UAAA;QACL,CAAA,GAET,kBAAC,GAAD;QACE,WAAW,EAAK,wBAAwB,EACtC,+DACE,MAAU,EAAW,SAAS,GACjC,CAAC;QACF,eAAe,EAAS,EAAK,MAAM;QACnC,OAAM;QACN,SAAQ;kBAEP,EAAK,MAAM,UAAA;QACL,CAAA;OAER,CAAA;MACJ,EAAK,UAAU,KAAK,EAAmB,EAAK,OAAO,GAAa,EAAM,IACrE,kBAAC,GAAD,EAAkB,CAAA;MAEX,EAAA,EAnCI,yBAAyB,IAmC7B;KAGf,KAAK,WACH,QAAO,kBAAC,GAAD,EAAwD,EAAlC,uBAAuB,IAAW;KAEjE,KAAK,iBACH,QACE,kBAAC,MAAD;MAAqC,WAAW,EAAK,EAAgB;gBACnE,kBAAC,UAAD;OACE,eAAY;OACZ,iBAAc;OACd,cAAY,QAAQ,IAAc;OAClC,WAAW,EACT,wQACA,EACE,0CAA0C,EAAK,UAChD,CACF;OACD,UAAU,EAAK;OACf,eAAe,EAAS,IAAc,EAAE;OACxC,MAAK;iBAZP,CAcE,kBAAC,GAAD;QAAM,MAAK;QAAmB,OAAM;QAAS,CAAA,EAC7C,kBAAC,QAAD;QACE,WAAW,EACT,wBACA,EAAE,gBAAgB,CAAC,EAAK,UAAU,EAClC,EACD;kBAEA,EAAO;QACH,CAAA,CAAA;;MAEN,EA1BG,6BA0BH;KAGT,KAAK,aACH,QACE,kBAAC,MAAD;MAAI,WAAW,EAAK,EAAgB;gBAClC,kBAAC,UAAD;OACE,iBAAc;OACd,cAAY,QAAQ,IAAc;OAClC,WAAW,EACT,6QACA,EACE,0CAA0C,EAAK,UAChD,CACF;OACD,eAAY;OACZ,UAAU,EAAK;OACf,eAAe,EAAS,IAAc,EAAE;OACxC,MAAK;iBAZP,CAcE,kBAAC,QAAD;QACE,WAAW,EACT,wBACA,EAAE,gBAAgB,CAAC,EAAK,UAAU,EAClC,EACD;kBAEA,EAAO;QACH,CAAA,EACP,kBAAC,GAAD;QAAM,MAAK;QAAoB,OAAM;QAAS,CAAA,CAAA;;MAE7C,EA1BqC,yBA0BrC;KAGT,QACE,QAAO;;;GAGV,CAAA;EACD,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
|
|
2
|
+
import { ImageProps } from '../Image';
|
|
3
|
+
export interface PromisesItem {
|
|
4
|
+
href: string;
|
|
5
|
+
id?: string;
|
|
6
|
+
image: ImageProps;
|
|
7
|
+
title: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PromisesLabels {
|
|
10
|
+
anchor: {
|
|
11
|
+
continue: string;
|
|
12
|
+
};
|
|
13
|
+
layer: {
|
|
14
|
+
close: string;
|
|
15
|
+
open: string;
|
|
16
|
+
};
|
|
17
|
+
scroller: {
|
|
18
|
+
previous: string;
|
|
19
|
+
next: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface PromisesProps extends ComponentPropsWithoutRef<'div'> {
|
|
23
|
+
items: PromisesItem[];
|
|
24
|
+
labels: PromisesLabels;
|
|
25
|
+
}
|
|
26
|
+
export declare const Promises: FunctionComponent<PromisesProps>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../../chunks/clsx.js";
|
|
3
|
+
import { PromisesMedia as t } from "./PromisesMedia.js";
|
|
4
|
+
import { PromisesMenu as n } from "./PromisesMenu.js";
|
|
5
|
+
import { useCallback as r, useEffect as i, useState as a } from "react";
|
|
6
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
+
//#region lib/ui/Promises/Promises.tsx
|
|
8
|
+
var c = 1e4, l = ({ className: l, items: u, labels: d, ...f }) => {
|
|
9
|
+
let [p, m] = a(0), [h, g] = a(0), _ = r(() => {
|
|
10
|
+
m((e) => (e - 1 + u.length) % u.length);
|
|
11
|
+
}, [u.length]), v = r(() => {
|
|
12
|
+
m((e) => (e + 1) % u.length);
|
|
13
|
+
}, [u.length]), y = r((e) => {
|
|
14
|
+
m(e), g((e) => e + 1);
|
|
15
|
+
}, []);
|
|
16
|
+
return i(() => {
|
|
17
|
+
let e = setInterval(() => {
|
|
18
|
+
v();
|
|
19
|
+
}, c);
|
|
20
|
+
return () => clearInterval(e);
|
|
21
|
+
}, [v, h]), /* @__PURE__ */ s("div", {
|
|
22
|
+
...f,
|
|
23
|
+
className: e("relative isolate flex gap-x-20 @container/promises", l),
|
|
24
|
+
children: [/* @__PURE__ */ o(t, {
|
|
25
|
+
activeIndex: p,
|
|
26
|
+
items: u,
|
|
27
|
+
labels: d,
|
|
28
|
+
onClickMenu: (e) => m(e),
|
|
29
|
+
onNext: v,
|
|
30
|
+
onPrevious: _
|
|
31
|
+
}), /* @__PURE__ */ o(n, {
|
|
32
|
+
activeIndex: p,
|
|
33
|
+
items: u,
|
|
34
|
+
labels: d,
|
|
35
|
+
onClickMenu: (e) => y(e)
|
|
36
|
+
})]
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { l as Promises };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=Promises.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Promises.js","names":[],"sources":["../../../lib/ui/Promises/Promises.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { ImageProps } from '../Image';\n\nimport { PromisesMedia } from './PromisesMedia';\nimport { PromisesMenu } from './PromisesMenu';\n\nconst INTERVAL_IN_MS = 10000;\n\nexport interface PromisesItem {\n href: string;\n id?: string;\n image: ImageProps;\n title: string;\n}\n\nexport interface PromisesLabels {\n anchor: { continue: string };\n layer: { close: string; open: string };\n scroller: { previous: string; next: string };\n}\n\nexport interface PromisesProps extends ComponentPropsWithoutRef<'div'> {\n items: PromisesItem[];\n labels: PromisesLabels;\n}\n\nexport const Promises: FunctionComponent<PromisesProps> = ({\n className,\n items,\n labels,\n ...attrs\n}) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [intervalKey, setIntervalKey] = useState(0);\n\n const previousActiveIndex = useCallback(() => {\n setActiveIndex((state) => (state - 1 + items.length) % items.length);\n }, [items.length]);\n\n const nextActiveIndex = useCallback(() => {\n setActiveIndex((state) => (state + 1) % items.length);\n }, [items.length]);\n\n const goToIndex = useCallback((index: number) => {\n setActiveIndex(index);\n setIntervalKey((k) => k + 1);\n }, []);\n\n useEffect(() => {\n const interval = setInterval(() => {\n nextActiveIndex();\n }, INTERVAL_IN_MS);\n\n return () => clearInterval(interval);\n }, [nextActiveIndex, intervalKey]);\n\n return (\n <div\n {...attrs}\n className={clsx('relative isolate flex gap-x-20 @container/promises', className)}\n >\n <PromisesMedia\n activeIndex={activeIndex}\n items={items}\n labels={labels}\n onClickMenu={(i) => setActiveIndex(i)}\n onNext={nextActiveIndex}\n onPrevious={previousActiveIndex}\n />\n <PromisesMenu\n activeIndex={activeIndex}\n items={items}\n labels={labels}\n onClickMenu={(i) => goToIndex(i)}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;AAUA,IAAM,IAAiB,KAoBV,KAA8C,EACzD,cACA,UACA,WACA,GAAG,QACC;CACJ,IAAM,CAAC,GAAa,KAAkB,EAAS,EAAE,EAC3C,CAAC,GAAa,KAAkB,EAAS,EAAE,EAE3C,IAAsB,QAAkB;AAC5C,KAAgB,OAAW,IAAQ,IAAI,EAAM,UAAU,EAAM,OAAO;IACnE,CAAC,EAAM,OAAO,CAAC,EAEZ,IAAkB,QAAkB;AACxC,KAAgB,OAAW,IAAQ,KAAK,EAAM,OAAO;IACpD,CAAC,EAAM,OAAO,CAAC,EAEZ,IAAY,GAAa,MAAkB;AAE/C,EADA,EAAe,EAAM,EACrB,GAAgB,MAAM,IAAI,EAAE;IAC3B,EAAE,CAAC;AAUN,QARA,QAAgB;EACd,IAAM,IAAW,kBAAkB;AACjC,MAAiB;KAChB,EAAe;AAElB,eAAa,cAAc,EAAS;IACnC,CAAC,GAAiB,EAAY,CAAC,EAGhC,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EAAK,sDAAsD,EAAU;YAFlF,CAIE,kBAAC,GAAD;GACe;GACN;GACC;GACR,cAAc,MAAM,EAAe,EAAE;GACrC,QAAQ;GACR,YAAY;GACZ,CAAA,EACF,kBAAC,GAAD;GACe;GACN;GACC;GACR,cAAc,MAAM,EAAU,EAAA;GAC9B,CAAA,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
|
|
2
|
+
import { PromisesItem, PromisesLabels } from './Promises';
|
|
3
|
+
interface Props extends ComponentPropsWithoutRef<'div'> {
|
|
4
|
+
activeIndex: number;
|
|
5
|
+
items: PromisesItem[];
|
|
6
|
+
labels: PromisesLabels;
|
|
7
|
+
onClickMenu: (index: number) => void;
|
|
8
|
+
onNext: () => void;
|
|
9
|
+
onPrevious: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const PromisesMedia: FunctionComponent<Props>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../../chunks/clsx.js";
|
|
3
|
+
import { Arrows as t } from "../arrows/Arrows.js";
|
|
4
|
+
import { Image as n } from "../Image.js";
|
|
5
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
6
|
+
//#region lib/ui/Promises/PromisesMedia.tsx
|
|
7
|
+
var a = ({ activeIndex: a, items: o, labels: s, onClickMenu: c, onNext: l, onPrevious: u, ...d }) => /* @__PURE__ */ i("div", {
|
|
8
|
+
...d,
|
|
9
|
+
className: "rounded-16 relative isolate w-full shrink-0 overflow-hidden @3xl/promises:max-w-380",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ r("div", {
|
|
12
|
+
className: "relative isolate grid",
|
|
13
|
+
children: o.map(({ id: t, image: i, title: o }, s) => {
|
|
14
|
+
let c = s === a;
|
|
15
|
+
return /* @__PURE__ */ r("article", {
|
|
16
|
+
"aria-hidden": !c,
|
|
17
|
+
className: e("aspect-vertical-video rounded-16 relative isolate col-start-1 row-start-1 w-full origin-top overflow-hidden opacity-0 transition-opacity duration-500", { "opacity-100": c }),
|
|
18
|
+
inert: !c,
|
|
19
|
+
children: /* @__PURE__ */ r(n, {
|
|
20
|
+
...i,
|
|
21
|
+
className: "size-full object-cover",
|
|
22
|
+
lazyLoad: !0,
|
|
23
|
+
sizes: "(min-width: 768px) 380px, 100vw"
|
|
24
|
+
})
|
|
25
|
+
}, t ?? `${o}-${s}`);
|
|
26
|
+
})
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ r(t, {
|
|
29
|
+
iconType: "ArrowDefault",
|
|
30
|
+
isDisabledHidden: !0,
|
|
31
|
+
isNextDisabled: a === o.length - 1,
|
|
32
|
+
isPrevDisabled: a === 0,
|
|
33
|
+
labels: {
|
|
34
|
+
next: s.scroller.next,
|
|
35
|
+
previous: s.scroller.previous
|
|
36
|
+
},
|
|
37
|
+
size: "small",
|
|
38
|
+
className: "absolute inset-0 -mx-12 !w-[calc(100%_+_24px)] @3xl/promises:hidden",
|
|
39
|
+
onNext: l,
|
|
40
|
+
onPrev: u
|
|
41
|
+
}),
|
|
42
|
+
/* @__PURE__ */ r("ul", {
|
|
43
|
+
className: "absolute inset-x-0 top-0 flex list-none gap-2 p-20",
|
|
44
|
+
children: o.map(({ id: t, title: n }, i) => /* @__PURE__ */ r("li", {
|
|
45
|
+
className: "w-full flex items-start",
|
|
46
|
+
children: /* @__PURE__ */ r("button", {
|
|
47
|
+
"aria-current": i === a,
|
|
48
|
+
"aria-label": n,
|
|
49
|
+
className: e("rounded-pill h-4 w-full overflow-hidden", {
|
|
50
|
+
"bg-white": i < a,
|
|
51
|
+
"bg-white/40": i >= a
|
|
52
|
+
}),
|
|
53
|
+
onClick: () => c(i),
|
|
54
|
+
type: "button",
|
|
55
|
+
children: i === a && /* @__PURE__ */ r("span", { className: "animate-filling block h-full w-full origin-left bg-white rtl:origin-right" })
|
|
56
|
+
})
|
|
57
|
+
}, t ?? i))
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
});
|
|
61
|
+
//#endregion
|
|
62
|
+
export { a as PromisesMedia };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=PromisesMedia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromisesMedia.js","names":[],"sources":["../../../lib/ui/Promises/PromisesMedia.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\nimport { Image } from '../Image';\nimport { Arrows } from '../arrows/Arrows';\nimport type { PromisesItem, PromisesLabels } from './Promises';\n\ninterface Props extends ComponentPropsWithoutRef<'div'> {\n activeIndex: number;\n items: PromisesItem[];\n labels: PromisesLabels;\n onClickMenu: (index: number) => void;\n onNext: () => void;\n onPrevious: () => void;\n}\n\nexport const PromisesMedia: FunctionComponent<Props> = ({\n activeIndex,\n items,\n labels,\n onClickMenu,\n onNext,\n onPrevious,\n ...attrs\n}) => {\n return (\n <div\n {...attrs}\n className=\"rounded-16 relative isolate w-full shrink-0 overflow-hidden @3xl/promises:max-w-380\"\n >\n <div className=\"relative isolate grid\">\n {items.map(({ id, image, title }, index) => {\n const isActive = index === activeIndex;\n\n return (\n <article\n aria-hidden={!isActive}\n key={id ?? `${title}-${index}`}\n className={clsx(\n 'aspect-vertical-video rounded-16 relative isolate col-start-1 row-start-1 w-full origin-top overflow-hidden opacity-0 transition-opacity duration-500',\n { 'opacity-100': isActive },\n )}\n inert={!isActive}\n >\n <Image\n {...image}\n className=\"size-full object-cover\"\n lazyLoad\n sizes=\"(min-width: 768px) 380px, 100vw\"\n />\n </article>\n );\n })}\n </div>\n\n <Arrows\n iconType=\"ArrowDefault\"\n isDisabledHidden={true}\n isNextDisabled={activeIndex === items.length - 1}\n isPrevDisabled={activeIndex === 0}\n labels={{\n next: labels.scroller.next,\n previous: labels.scroller.previous,\n }}\n size=\"small\"\n className=\"absolute inset-0 -mx-12 !w-[calc(100%_+_24px)] @3xl/promises:hidden\"\n onNext={onNext}\n onPrev={onPrevious}\n />\n\n <ul className=\"absolute inset-x-0 top-0 flex list-none gap-2 p-20\">\n {items.map(({ id, title }, index) => (\n <li key={id ?? index} className=\"w-full flex items-start\">\n <button\n aria-current={index === activeIndex}\n aria-label={title}\n className={clsx('rounded-pill h-4 w-full overflow-hidden', {\n 'bg-white': index < activeIndex,\n 'bg-white/40': index >= activeIndex,\n })}\n onClick={() => onClickMenu(index)}\n type=\"button\"\n >\n {index === activeIndex && (\n <span className=\"animate-filling block h-full w-full origin-left bg-white rtl:origin-right\" />\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n"],"mappings":";;;;;;AAiBA,IAAa,KAA2C,EACtD,gBACA,UACA,WACA,gBACA,WACA,eACA,GAAG,QAGD,kBAAC,OAAD;CACE,GAAI;CACJ,WAAU;WAFZ;EAIE,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAM,KAAK,EAAE,OAAI,UAAO,YAAS,MAAU;IAC1C,IAAM,IAAW,MAAU;AAE3B,WACE,kBAAC,WAAD;KACE,eAAa,CAAC;KAEd,WAAW,EACT,yJACA,EAAE,eAAe,GAAU,CAC5B;KACD,OAAO,CAAC;eAER,kBAAC,GAAD;MACE,GAAI;MACJ,WAAU;MACV,UAAA;MACA,OAAM;MACN,CAAA;KACM,EAbH,KAAM,GAAG,EAAM,GAAG,IAaf;;GAGV,CAAA;EAEN,kBAAC,GAAD;GACE,UAAS;GACT,kBAAkB;GAClB,gBAAgB,MAAgB,EAAM,SAAS;GAC/C,gBAAgB,MAAgB;GAChC,QAAQ;IACN,MAAM,EAAO,SAAS;IACtB,UAAU,EAAO,SAAS;IAC3B;GACD,MAAK;GACL,WAAU;GACF;GACR,QAAQ;GACR,CAAA;EAEF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAM,KAAK,EAAE,OAAI,YAAS,MACzB,kBAAC,MAAD;IAAsB,WAAU;cAC9B,kBAAC,UAAD;KACE,gBAAc,MAAU;KACxB,cAAY;KACZ,WAAW,EAAK,2CAA2C;MACzD,YAAY,IAAQ;MACpB,eAAe,KAAS;MACzB,CAAC;KACF,eAAe,EAAY,EAAM;KACjC,MAAK;eAEJ,MAAU,KACT,kBAAC,QAAD,EAAM,WAAU,6EAA8E,CAAA;KAEzF,CAAA;IACN,EAfI,KAAM,EAeV,CAAA;GAEJ,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
import { PromisesItem, PromisesLabels } from './Promises';
|
|
3
|
+
interface Props {
|
|
4
|
+
activeIndex: number;
|
|
5
|
+
className?: string;
|
|
6
|
+
items: PromisesItem[];
|
|
7
|
+
labels: PromisesLabels;
|
|
8
|
+
onClickMenu: (index: number) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const PromisesMenu: FunctionComponent<Props>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../../chunks/clsx.js";
|
|
3
|
+
import { Button as t } from "../buttons/Button.js";
|
|
4
|
+
import { n } from "../../chunks/Carousel.context.js";
|
|
5
|
+
import { Carousel as r } from "../carousel/Carousel.js";
|
|
6
|
+
import { CarouselBody as i } from "../carousel/CarouselBody.js";
|
|
7
|
+
import { CarouselItem as a } from "../carousel/CarouselItem.js";
|
|
8
|
+
import { useEffect as o, useId as s, useLayoutEffect as c, useMemo as l, useRef as u } from "react";
|
|
9
|
+
import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
10
|
+
//#region lib/ui/Promises/PromisesMenu.tsx
|
|
11
|
+
var m = ({ anchorLabel: n, anchorName: r, isActive: i, labelNode: a }) => {
|
|
12
|
+
let o = u(null), s = u(null);
|
|
13
|
+
return c(() => {
|
|
14
|
+
if (!o.current || !s.current) return;
|
|
15
|
+
let e = new ResizeObserver(() => {
|
|
16
|
+
s.current && o.current && (s.current.style.height = `${o.current.offsetHeight}px`);
|
|
17
|
+
});
|
|
18
|
+
return e.observe(o.current), () => e.disconnect();
|
|
19
|
+
}, []), /* @__PURE__ */ f("li", {
|
|
20
|
+
className: e("relative isolate transition-[opacity,height,margin-inline-start] ms-0 duration-300 overflow-hidden rounded-32 bg-white p-20", { "@3xl/promises:ms-52": !i }),
|
|
21
|
+
children: /* @__PURE__ */ p("div", {
|
|
22
|
+
ref: s,
|
|
23
|
+
className: "flex justify-between items-start overflow-hidden",
|
|
24
|
+
style: { anchorName: r },
|
|
25
|
+
children: [/* @__PURE__ */ f("div", {
|
|
26
|
+
ref: o,
|
|
27
|
+
className: "pe-40",
|
|
28
|
+
children: a
|
|
29
|
+
}), i && /* @__PURE__ */ f(t, {
|
|
30
|
+
"aria-hidden": !0,
|
|
31
|
+
className: "opacity-0 pointer-events-none",
|
|
32
|
+
icon: "ArrowDefaultRight",
|
|
33
|
+
inert: !0,
|
|
34
|
+
tabIndex: -1,
|
|
35
|
+
variant: "pill",
|
|
36
|
+
children: n
|
|
37
|
+
})]
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
}, h = ({ activeIndex: e, onSelect: t }) => {
|
|
41
|
+
let { api: r, snapped: i } = n(), a = u(t);
|
|
42
|
+
a.current = t;
|
|
43
|
+
let s = i[0];
|
|
44
|
+
return o(() => {
|
|
45
|
+
s !== void 0 && a.current(s);
|
|
46
|
+
}, [s]), o(() => {
|
|
47
|
+
r?.scrollTo(e);
|
|
48
|
+
}, [r, e]), null;
|
|
49
|
+
}, g = ({ activeIndex: t, className: n, onSelect: o, sliderItems: s }) => {
|
|
50
|
+
let c = u(t), m = l(() => ({
|
|
51
|
+
active: s.length > 1,
|
|
52
|
+
align: "center",
|
|
53
|
+
startIndex: c.current
|
|
54
|
+
}), [s.length]);
|
|
55
|
+
return /* @__PURE__ */ f(d, { children: /* @__PURE__ */ p(r, {
|
|
56
|
+
className: e("relative isolate flex h-full items-center", n),
|
|
57
|
+
options: m,
|
|
58
|
+
children: [/* @__PURE__ */ f(h, {
|
|
59
|
+
activeIndex: t,
|
|
60
|
+
onSelect: o
|
|
61
|
+
}), /* @__PURE__ */ f(i, {
|
|
62
|
+
className: "w-full px-20",
|
|
63
|
+
scrollClassName: "gap-12 md:gap-40 auto-cols-full",
|
|
64
|
+
children: s.map((t, n) => /* @__PURE__ */ f(a, {
|
|
65
|
+
index: n,
|
|
66
|
+
children: /* @__PURE__ */ f("div", {
|
|
67
|
+
"aria-label": `${n + 1}/${s.length}`,
|
|
68
|
+
className: e("rounded-16 overflow-hidden bg-white"),
|
|
69
|
+
children: t
|
|
70
|
+
})
|
|
71
|
+
}, n))
|
|
72
|
+
})]
|
|
73
|
+
}) });
|
|
74
|
+
}, _ = ({ activeIndex: n, className: r, items: i, labels: a, onClickMenu: o }) => {
|
|
75
|
+
let c = s(), u = c.replace(/[^a-zA-Z0-9_-]/g, ""), { menuItems: h, sliderItems: _ } = l(() => {
|
|
76
|
+
let r = i.map(({ href: t, id: r, title: i }, a) => {
|
|
77
|
+
let s = a === n, l = r ?? `${c}_${a}`;
|
|
78
|
+
return {
|
|
79
|
+
anchorName: `--promises-${u}-${a}`,
|
|
80
|
+
href: t,
|
|
81
|
+
id: r,
|
|
82
|
+
isActive: s,
|
|
83
|
+
itemId: l,
|
|
84
|
+
labelNode: /* @__PURE__ */ f("button", {
|
|
85
|
+
id: l,
|
|
86
|
+
"aria-label": i,
|
|
87
|
+
className: e("text-start hover:underline text-h4 text-center font-serif @3xl/promises:text-h4 @5xl/promises:text-h2 @6xl/promises:text-h1 @3xl/promises:text-start"),
|
|
88
|
+
onClick: () => o(a),
|
|
89
|
+
type: "button",
|
|
90
|
+
children: i
|
|
91
|
+
}),
|
|
92
|
+
title: i
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
menuItems: r,
|
|
97
|
+
sliderItems: r.map(({ labelNode: e, href: n, itemId: r }) => /* @__PURE__ */ p("div", {
|
|
98
|
+
className: "rounded-32 p-16 flex flex-col items-start gap-8",
|
|
99
|
+
children: [e, /* @__PURE__ */ f(t, {
|
|
100
|
+
"aria-describedby": r,
|
|
101
|
+
"aria-label": a.anchor.continue,
|
|
102
|
+
href: n,
|
|
103
|
+
icon: "ArrowDefaultRight",
|
|
104
|
+
variant: "pill",
|
|
105
|
+
children: a.anchor.continue
|
|
106
|
+
})]
|
|
107
|
+
}))
|
|
108
|
+
};
|
|
109
|
+
}, [
|
|
110
|
+
n,
|
|
111
|
+
i,
|
|
112
|
+
a,
|
|
113
|
+
c,
|
|
114
|
+
o,
|
|
115
|
+
u
|
|
116
|
+
]), v = h[n];
|
|
117
|
+
return /* @__PURE__ */ p(d, { children: [
|
|
118
|
+
/* @__PURE__ */ f("ul", {
|
|
119
|
+
className: e("hidden @3xl/promises:block", "absolute bottom-0 inset-x-0 overflow-hidden @3xl/promises:-ms-52 text-black w-full", "@3xl/promises:pointer-events-auto @3xl/promises:static @3xl/promises:p-0 @3xl/promises:pt-40", r),
|
|
120
|
+
children: h.map(({ anchorName: e, id: t, isActive: n, labelNode: r, title: i }, o) => /* @__PURE__ */ f(m, {
|
|
121
|
+
anchorLabel: a.anchor.continue,
|
|
122
|
+
anchorName: e,
|
|
123
|
+
isActive: n,
|
|
124
|
+
labelNode: r
|
|
125
|
+
}, t ?? `${i}-${o}`))
|
|
126
|
+
}),
|
|
127
|
+
v && /* @__PURE__ */ f(t, {
|
|
128
|
+
"aria-describedby": v.itemId,
|
|
129
|
+
"aria-label": a.anchor.continue,
|
|
130
|
+
className: "hidden @3xl/promises:inline-flex transition-[top] duration-200 ease-out-quad absolute z-1",
|
|
131
|
+
href: v.href,
|
|
132
|
+
icon: "ArrowDefaultRight",
|
|
133
|
+
style: {
|
|
134
|
+
positionAnchor: v.anchorName,
|
|
135
|
+
top: "anchor(top)",
|
|
136
|
+
right: "anchor(right)"
|
|
137
|
+
},
|
|
138
|
+
variant: "pill",
|
|
139
|
+
children: a.anchor.continue
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ f("div", {
|
|
142
|
+
className: "@3xl/promises:hidden absolute inset-x-0 bottom-20",
|
|
143
|
+
children: /* @__PURE__ */ f(g, {
|
|
144
|
+
activeIndex: n,
|
|
145
|
+
onSelect: o,
|
|
146
|
+
sliderItems: _
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
] });
|
|
150
|
+
};
|
|
151
|
+
//#endregion
|
|
152
|
+
export { _ as PromisesMenu };
|
|
153
|
+
|
|
154
|
+
//# sourceMappingURL=PromisesMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromisesMenu.js","names":[],"sources":["../../../lib/ui/Promises/PromisesMenu.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { FunctionComponent, ReactNode } from 'react';\nimport { useEffect, useId, useMemo, useRef, useLayoutEffect } from 'react';\nimport { useCarousel } from '../carousel/Carousel.context';\n\nimport { Carousel } from '../carousel/Carousel';\nimport { CarouselBody } from '../carousel/CarouselBody';\nimport { CarouselItem } from '../carousel/CarouselItem';\nimport { Button } from '../buttons/Button';\nimport type { PromisesItem, PromisesLabels } from './Promises';\n\ninterface MenuItemProps {\n anchorLabel: string;\n anchorName: string;\n isActive: boolean;\n labelNode: ReactNode;\n}\n\nconst PromisesMenuItem: FunctionComponent<MenuItemProps> = ({\n anchorLabel,\n anchorName,\n isActive,\n labelNode,\n}) => {\n const labelRef = useRef<HTMLDivElement>(null);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n if (!labelRef.current || !containerRef.current) return;\n const resizeObserver = new ResizeObserver(() => {\n if (containerRef.current && labelRef.current) {\n containerRef.current.style.height = `${labelRef.current.offsetHeight}px`;\n }\n });\n resizeObserver.observe(labelRef.current);\n return () => resizeObserver.disconnect();\n }, []);\n\n return (\n <li\n className={clsx(\n 'relative isolate transition-[opacity,height,margin-inline-start] ms-0 duration-300 overflow-hidden rounded-32 bg-white p-20',\n { '@3xl/promises:ms-52': !isActive },\n )}\n >\n <div\n ref={containerRef}\n className=\"flex justify-between items-start overflow-hidden\"\n style={{ anchorName } as unknown as React.CSSProperties}\n >\n <div ref={labelRef} className=\"pe-40\">\n {labelNode}\n </div>\n {isActive && (\n <Button\n aria-hidden\n className=\"opacity-0 pointer-events-none\"\n icon=\"ArrowDefaultRight\"\n inert\n tabIndex={-1}\n variant=\"pill\"\n >\n {anchorLabel}\n </Button>\n )}\n </div>\n </li>\n );\n};\n\ninterface Props {\n activeIndex: number;\n className?: string;\n items: PromisesItem[];\n labels: PromisesLabels;\n onClickMenu: (index: number) => void;\n}\n\ninterface PromisesItemSliderProps {\n activeIndex: number;\n className?: string;\n onSelect: (index: number) => void;\n sliderItems: ReactNode[];\n}\n\nconst CarouselSync: FunctionComponent<{\n activeIndex: number;\n onSelect: (index: number) => void;\n}> = ({ activeIndex, onSelect }) => {\n const { api, snapped } = useCarousel();\n const onSelectRef = useRef(onSelect);\n onSelectRef.current = onSelect;\n\n const snappedIndex = snapped[0];\n useEffect(() => {\n if (snappedIndex !== undefined) onSelectRef.current(snappedIndex);\n }, [snappedIndex]);\n\n useEffect(() => {\n api?.scrollTo(activeIndex);\n }, [api, activeIndex]);\n\n return null;\n};\n\nconst PromisesItemSlider: FunctionComponent<PromisesItemSliderProps> = ({\n activeIndex,\n className,\n onSelect,\n sliderItems,\n}) => {\n const initialIndex = useRef(activeIndex);\n const carouselOptions = useMemo(\n () => ({\n active: sliderItems.length > 1,\n align: 'center' as const,\n startIndex: initialIndex.current,\n }),\n [sliderItems.length],\n );\n\n return (\n <>\n <Carousel\n className={clsx('relative isolate flex h-full items-center', className)}\n options={carouselOptions}\n >\n <CarouselSync activeIndex={activeIndex} onSelect={onSelect} />\n <CarouselBody className=\"w-full px-20\" scrollClassName=\"gap-12 md:gap-40 auto-cols-full\">\n {sliderItems.map((item, i) => (\n <CarouselItem index={i} key={i}>\n <div\n aria-label={`${i + 1}/${sliderItems.length}`}\n className={clsx('rounded-16 overflow-hidden bg-white')}\n >\n {item}\n </div>\n </CarouselItem>\n ))}\n </CarouselBody>\n </Carousel>\n </>\n );\n};\n\nexport const PromisesMenu: FunctionComponent<Props> = ({\n activeIndex,\n className,\n items,\n labels,\n onClickMenu,\n}) => {\n const menuId = useId();\n const safeMenuId = menuId.replace(/[^a-zA-Z0-9_-]/g, '');\n\n const { menuItems, sliderItems } = useMemo(() => {\n const mItems = items.map(({ href, id, title }, index) => {\n const isActive = index === activeIndex;\n const itemId = id ?? `${menuId}_${index}`;\n const anchorName = `--promises-${safeMenuId}-${index}`;\n\n const labelNode = (\n <button\n id={itemId}\n aria-label={title}\n className={clsx(\n 'text-start hover:underline text-h4 text-center font-serif @3xl/promises:text-h4 @5xl/promises:text-h2 @6xl/promises:text-h1 @3xl/promises:text-start',\n )}\n onClick={() => onClickMenu(index)}\n type=\"button\"\n >\n {title}\n </button>\n );\n\n return { anchorName, href, id, isActive, itemId, labelNode, title };\n });\n\n const sItems = mItems.map(({ labelNode, href, itemId }) => (\n <div className=\"rounded-32 p-16 flex flex-col items-start gap-8\">\n {labelNode}\n <Button\n aria-describedby={itemId}\n aria-label={labels.anchor.continue}\n href={href}\n icon=\"ArrowDefaultRight\"\n variant=\"pill\"\n >\n {labels.anchor.continue}\n </Button>\n </div>\n ));\n\n return { menuItems: mItems, sliderItems: sItems };\n }, [activeIndex, items, labels, menuId, onClickMenu, safeMenuId]);\n\n const activeItem = menuItems[activeIndex];\n\n return (\n <>\n <ul\n className={clsx(\n 'hidden @3xl/promises:block',\n 'absolute bottom-0 inset-x-0 overflow-hidden @3xl/promises:-ms-52 text-black w-full',\n '@3xl/promises:pointer-events-auto @3xl/promises:static @3xl/promises:p-0 @3xl/promises:pt-40',\n className,\n )}\n >\n {menuItems.map(({ anchorName, id, isActive, labelNode, title }, index) => (\n <PromisesMenuItem\n anchorLabel={labels.anchor.continue}\n anchorName={anchorName}\n isActive={isActive}\n key={id ?? `${title}-${index}`}\n labelNode={labelNode}\n />\n ))}\n </ul>\n {activeItem && (\n <Button\n aria-describedby={activeItem.itemId}\n aria-label={labels.anchor.continue}\n className=\"hidden @3xl/promises:inline-flex transition-[top] duration-200 ease-out-quad absolute z-1\"\n href={activeItem.href}\n icon=\"ArrowDefaultRight\"\n style={\n {\n positionAnchor: activeItem.anchorName,\n top: 'anchor(top)',\n right: 'anchor(right)',\n } as React.CSSProperties\n }\n variant=\"pill\"\n >\n {labels.anchor.continue}\n </Button>\n )}\n <div className=\"@3xl/promises:hidden absolute inset-x-0 bottom-20\">\n <PromisesItemSlider\n activeIndex={activeIndex}\n onSelect={onClickMenu}\n sliderItems={sliderItems}\n />\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;AAmBA,IAAM,KAAsD,EAC1D,gBACA,eACA,aACA,mBACI;CACJ,IAAM,IAAW,EAAuB,KAAK,EAEvC,IAAe,EAAuB,KAAK;AAajD,QAXA,QAAsB;AACpB,MAAI,CAAC,EAAS,WAAW,CAAC,EAAa,QAAS;EAChD,IAAM,IAAiB,IAAI,qBAAqB;AAC9C,GAAI,EAAa,WAAW,EAAS,YACnC,EAAa,QAAQ,MAAM,SAAS,GAAG,EAAS,QAAQ,aAAa;IAEvE;AAEF,SADA,EAAe,QAAQ,EAAS,QAAQ,QAC3B,EAAe,YAAY;IACvC,EAAE,CAAC,EAGJ,kBAAC,MAAD;EACE,WAAW,EACT,+HACA,EAAE,uBAAuB,CAAC,GAAU,CACrC;YAED,kBAAC,OAAD;GACE,KAAK;GACL,WAAU;GACV,OAAO,EAAE,eAAY;aAHvB,CAKE,kBAAC,OAAD;IAAK,KAAK;IAAU,WAAU;cAC3B;IACG,CAAA,EACL,KACC,kBAAC,GAAD;IACE,eAAA;IACA,WAAU;IACV,MAAK;IACL,OAAA;IACA,UAAU;IACV,SAAQ;cAEP;IACM,CAAA,CAAA;;EAGV,CAAA;GAmBH,KAGA,EAAE,gBAAa,kBAAe;CAClC,IAAM,EAAE,QAAK,eAAY,GAAa,EAChC,IAAc,EAAO,EAAS;AACpC,GAAY,UAAU;CAEtB,IAAM,IAAe,EAAQ;AAS7B,QARA,QAAgB;AACd,EAAI,MAAiB,KAAA,KAAW,EAAY,QAAQ,EAAa;IAChE,CAAC,EAAa,CAAC,EAElB,QAAgB;AACd,KAAK,SAAS,EAAY;IACzB,CAAC,GAAK,EAAY,CAAC,EAEf;GAGH,KAAkE,EACtE,gBACA,cACA,aACA,qBACI;CACJ,IAAM,IAAe,EAAO,EAAY,EAClC,IAAkB,SACf;EACL,QAAQ,EAAY,SAAS;EAC7B,OAAO;EACP,YAAY,EAAa;EAC1B,GACD,CAAC,EAAY,OAAO,CACrB;AAED,QACE,kBAAA,GAAA,EAAA,UACE,kBAAC,GAAD;EACE,WAAW,EAAK,6CAA6C,EAAU;EACvE,SAAS;YAFX,CAIE,kBAAC,GAAD;GAA2B;GAAuB;GAAY,CAAA,EAC9D,kBAAC,GAAD;GAAc,WAAU;GAAe,iBAAgB;aACpD,EAAY,KAAK,GAAM,MACtB,kBAAC,GAAD;IAAc,OAAO;cACnB,kBAAC,OAAD;KACE,cAAY,GAAG,IAAI,EAAE,GAAG,EAAY;KACpC,WAAW,EAAK,sCAAsC;eAErD;KACG,CAAA;IACO,EAPc,EAOd,CAAA;GAEJ,CAAA,CAAA;KAEhB,CAAA;GAIM,KAA0C,EACrD,gBACA,cACA,UACA,WACA,qBACI;CACJ,IAAM,IAAS,GAAO,EAChB,IAAa,EAAO,QAAQ,mBAAmB,GAAG,EAElD,EAAE,cAAW,mBAAgB,QAAc;EAC/C,IAAM,IAAS,EAAM,KAAK,EAAE,SAAM,OAAI,YAAS,MAAU;GACvD,IAAM,IAAW,MAAU,GACrB,IAAS,KAAM,GAAG,EAAO,GAAG;AAiBlC,UAAO;IAAE,YAhBU,cAAc,EAAW,GAAG;IAgB1B;IAAM;IAAI;IAAU;IAAQ,WAb/C,kBAAC,UAAD;KACE,IAAI;KACJ,cAAY;KACZ,WAAW,EACT,uJACD;KACD,eAAe,EAAY,EAAM;KACjC,MAAK;eAEJ;KACM,CAAA;IAGiD;IAAO;IACnE;AAiBF,SAAO;GAAE,WAAW;GAAQ,aAfb,EAAO,KAAK,EAAE,cAAW,SAAM,gBAC5C,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,GACD,kBAAC,GAAD;KACE,oBAAkB;KAClB,cAAY,EAAO,OAAO;KACpB;KACN,MAAK;KACL,SAAQ;eAEP,EAAO,OAAO;KACR,CAAA,CAAA;;GAIoC;IAChD;EAAC;EAAa;EAAO;EAAQ;EAAQ;EAAa;EAAW,CAAC,EAE3D,IAAa,EAAU;AAE7B,QACE,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,MAAD;GACE,WAAW,EACT,8BACA,sFACA,gGACA,EACD;aAEA,EAAU,KAAK,EAAE,eAAY,OAAI,aAAU,cAAW,YAAS,MAC9D,kBAAC,GAAD;IACE,aAAa,EAAO,OAAO;IACf;IACF;IAEC;IACX,EAFK,KAAM,GAAG,EAAM,GAAG,IAEvB,CAAA;GAED,CAAA;EACJ,KACC,kBAAC,GAAD;GACE,oBAAkB,EAAW;GAC7B,cAAY,EAAO,OAAO;GAC1B,WAAU;GACV,MAAM,EAAW;GACjB,MAAK;GACL,OACE;IACE,gBAAgB,EAAW;IAC3B,KAAK;IACL,OAAO;IACR;GAEH,SAAQ;aAEP,EAAO,OAAO;GACR,CAAA;EAEX,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACe;IACb,UAAU;IACG;IACb,CAAA;GACE,CAAA;EACL,EAAA,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface ScrollbarProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
timelineName?: string;
|
|
5
|
+
scrollbarWidth?: string;
|
|
6
|
+
variant?: 'light' | 'dark';
|
|
7
|
+
className?: string;
|
|
8
|
+
scrollerClassName?: string;
|
|
9
|
+
scrollbarClassName?: string;
|
|
10
|
+
'aria-label'?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function Scrollbar({ children, timelineName, scrollbarWidth, variant, className, scrollerClassName, scrollbarClassName, 'aria-label': ariaLabel, }: ScrollbarProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export { Scrollbar };
|
|
14
|
+
export type { ScrollbarProps };
|