@chayns-ui/core 0.9.2 → 0.10.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/dist/accordion.css +3 -1
- package/dist/badge.css +28 -3
- package/dist/banner.css +2 -0
- package/dist/breadcrumb.css +63 -0
- package/dist/button.css +103 -35
- package/dist/card.css +39 -0
- package/dist/checkbox.css +3 -3
- package/dist/combo-box.css +17 -4
- package/dist/components/accordion/Accordion.d.ts +3 -4
- package/dist/components/accordion/Accordion.d.ts.map +1 -1
- package/dist/components/accordion/Accordion.js +37 -23
- package/dist/components/accordion/Accordion.js.map +1 -1
- package/dist/components/accordion/Accordion.types.d.ts +7 -2
- package/dist/components/accordion/Accordion.types.d.ts.map +1 -1
- package/dist/components/accordion/Accordion.types.js +7 -1
- package/dist/components/accordion/Accordion.types.js.map +1 -1
- package/dist/components/accordion-group/AccordionGroup.d.ts.map +1 -1
- package/dist/components/accordion-group/AccordionGroup.js +1 -0
- package/dist/components/accordion-group/AccordionGroup.js.map +1 -1
- package/dist/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.js +1 -0
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/Avatar.types.d.ts +9 -1
- package/dist/components/avatar/Avatar.types.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.types.js +17 -0
- package/dist/components/avatar/Avatar.types.js.map +1 -0
- package/dist/components/avatar-group/AvatarGroup.d.ts.map +1 -1
- package/dist/components/avatar-group/AvatarGroup.js +4 -3
- package/dist/components/avatar-group/AvatarGroup.js.map +1 -1
- package/dist/components/badge/Badge.d.ts.map +1 -1
- package/dist/components/badge/Badge.js +1 -0
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/badge/Badge.types.d.ts +13 -0
- package/dist/components/badge/Badge.types.d.ts.map +1 -1
- package/dist/components/badge/Badge.types.js +16 -1
- package/dist/components/badge/Badge.types.js.map +1 -1
- package/dist/components/banner/Banner.d.ts.map +1 -1
- package/dist/components/banner/Banner.js +1 -0
- package/dist/components/banner/Banner.js.map +1 -1
- package/dist/components/banner/Banner.types.d.ts +7 -0
- package/dist/components/banner/Banner.types.d.ts.map +1 -1
- package/dist/components/banner/Banner.types.js +9 -1
- package/dist/components/banner/Banner.types.js.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.d.ts +4 -0
- package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/Breadcrumb.js +35 -0
- package/dist/components/breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb/Breadcrumb.types.d.ts +13 -0
- package/dist/components/breadcrumb/Breadcrumb.types.d.ts.map +1 -0
- package/dist/components/button/Button.d.ts.map +1 -1
- package/dist/components/button/Button.js +1 -0
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/button/Button.types.d.ts +7 -0
- package/dist/components/button/Button.types.d.ts.map +1 -1
- package/dist/components/button/Button.types.js +9 -1
- package/dist/components/button/Button.types.js.map +1 -1
- package/dist/components/button/button-icon/ButtonIcon.d.ts.map +1 -1
- package/dist/components/button/button-icon/ButtonIcon.js +7 -3
- package/dist/components/button/button-icon/ButtonIcon.js.map +1 -1
- package/dist/components/card/Card.d.ts.map +1 -1
- package/dist/components/card/Card.js +2 -0
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.js +1 -0
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/combo-box/ComboBox.d.ts.map +1 -1
- package/dist/components/combo-box/ComboBox.js +83 -13
- package/dist/components/combo-box/ComboBox.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.d.ts.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.js +31 -239
- package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.types.d.ts +12 -0
- package/dist/components/date-time-picker/DateTimePicker.types.d.ts.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.types.js +15 -1
- package/dist/components/date-time-picker/DateTimePicker.types.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-utils.d.ts +4 -0
- package/dist/components/date-time-picker/date-time-picker-utils.d.ts.map +1 -0
- package/dist/components/date-time-picker/date-time-picker-utils.js +19 -0
- package/dist/components/date-time-picker/date-time-picker-utils.js.map +1 -0
- package/dist/components/date-time-picker/hooks/useDateTimePickerValue.d.ts +37 -0
- package/dist/components/date-time-picker/hooks/useDateTimePickerValue.d.ts.map +1 -0
- package/dist/components/date-time-picker/hooks/useDateTimePickerValue.js +156 -0
- package/dist/components/date-time-picker/hooks/useDateTimePickerValue.js.map +1 -0
- package/dist/components/date-time-picker/sizer/PickerSizer.d.ts +7 -0
- package/dist/components/date-time-picker/sizer/PickerSizer.d.ts.map +1 -0
- package/dist/components/date-time-picker/sizer/PickerSizer.js +15 -0
- package/dist/components/date-time-picker/sizer/PickerSizer.js.map +1 -0
- package/dist/components/date-time-picker/wheel/Wheel.d.ts +14 -0
- package/dist/components/date-time-picker/wheel/Wheel.d.ts.map +1 -0
- package/dist/components/date-time-picker/wheel/Wheel.js +136 -0
- package/dist/components/date-time-picker/wheel/Wheel.js.map +1 -0
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +1 -0
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/list/List.d.ts +15 -10
- package/dist/components/list/List.d.ts.map +1 -1
- package/dist/components/list/List.js +19 -7
- package/dist/components/list/List.js.map +1 -1
- package/dist/components/list/List.types.d.ts +2 -2
- package/dist/components/list/List.types.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.d.ts +4 -0
- package/dist/components/pagination/Pagination.d.ts.map +1 -0
- package/dist/components/pagination/Pagination.js +57 -0
- package/dist/components/pagination/Pagination.js.map +1 -0
- package/dist/components/pagination/Pagination.types.d.ts +15 -0
- package/dist/components/pagination/Pagination.types.d.ts.map +1 -0
- package/dist/components/pagination/pagination-pages.d.ts +2 -0
- package/dist/components/pagination/pagination-pages.d.ts.map +1 -0
- package/dist/components/pagination/pagination-pages.js +35 -0
- package/dist/components/pagination/pagination-pages.js.map +1 -0
- package/dist/components/popup/Popup.d.ts +4 -1
- package/dist/components/popup/Popup.d.ts.map +1 -1
- package/dist/components/popup/Popup.js +25 -18
- package/dist/components/popup/Popup.js.map +1 -1
- package/dist/components/popup/PopupList.d.ts +4 -1
- package/dist/components/popup/PopupList.d.ts.map +1 -1
- package/dist/components/popup/PopupList.js +7 -1
- package/dist/components/popup/PopupList.js.map +1 -1
- package/dist/components/progress/Progress.d.ts.map +1 -1
- package/dist/components/progress/Progress.js +1 -0
- package/dist/components/progress/Progress.js.map +1 -1
- package/dist/components/progress/Progress.types.d.ts +1 -1
- package/dist/components/progress/Progress.types.d.ts.map +1 -1
- package/dist/components/radio-group/RadioGroup.d.ts.map +1 -1
- package/dist/components/radio-group/RadioGroup.js +2 -0
- package/dist/components/radio-group/RadioGroup.js.map +1 -1
- package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
- package/dist/components/segmented-control/SegmentedControl.js +78 -25
- package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
- package/dist/components/segmented-control/SegmentedControl.types.d.ts +1 -1
- package/dist/components/segmented-control/SegmentedControl.types.d.ts.map +1 -1
- package/dist/components/segmented-control/SegmentedControlContext.d.ts +2 -0
- package/dist/components/segmented-control/SegmentedControlContext.d.ts.map +1 -1
- package/dist/components/segmented-control/SegmentedControlContext.js.map +1 -1
- package/dist/components/skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/skeleton/Skeleton.js +1 -0
- package/dist/components/skeleton/Skeleton.js.map +1 -1
- package/dist/components/skeleton/Skeleton.types.d.ts +6 -0
- package/dist/components/skeleton/Skeleton.types.d.ts.map +1 -1
- package/dist/components/skeleton/Skeleton.types.js +8 -1
- package/dist/components/skeleton/Skeleton.types.js.map +1 -1
- package/dist/components/slider/Slider.d.ts +4 -0
- package/dist/components/slider/Slider.d.ts.map +1 -0
- package/dist/components/slider/Slider.js +61 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/slider/Slider.types.d.ts +10 -0
- package/dist/components/slider/Slider.types.d.ts.map +1 -0
- package/dist/components/spinner/Spinner.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.js +1 -0
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/split-button/SplitButton.d.ts.map +1 -1
- package/dist/components/split-button/SplitButton.js +2 -1
- package/dist/components/split-button/SplitButton.js.map +1 -1
- package/dist/components/stepper/Stepper.d.ts +4 -0
- package/dist/components/stepper/Stepper.d.ts.map +1 -0
- package/dist/components/stepper/Stepper.js +60 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/stepper/Stepper.types.d.ts +27 -0
- package/dist/components/stepper/Stepper.types.d.ts.map +1 -0
- package/dist/components/stepper/Stepper.types.js +25 -0
- package/dist/components/stepper/Stepper.types.js.map +1 -0
- package/dist/components/stepper/stepper-values.d.ts +6 -0
- package/dist/components/stepper/stepper-values.d.ts.map +1 -0
- package/dist/components/stepper/stepper-values.js +26 -0
- package/dist/components/stepper/stepper-values.js.map +1 -0
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +1 -0
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/text-area/TextArea.d.ts.map +1 -1
- package/dist/components/text-area/TextArea.js +1 -0
- package/dist/components/text-area/TextArea.js.map +1 -1
- package/dist/components/text-field/TextField.d.ts.map +1 -1
- package/dist/components/text-field/TextField.js +1 -0
- package/dist/components/text-field/TextField.js.map +1 -1
- package/dist/components/tooltip/Tooltip.d.ts +4 -0
- package/dist/components/tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/Tooltip.js +75 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/tooltip/Tooltip.types.d.ts +12 -0
- package/dist/components/tooltip/Tooltip.types.d.ts.map +1 -0
- package/dist/components/tooltip/hooks/useTooltipInteraction.d.ts +11 -0
- package/dist/components/tooltip/hooks/useTooltipInteraction.d.ts.map +1 -0
- package/dist/components/tooltip/hooks/useTooltipInteraction.js +59 -0
- package/dist/components/tooltip/hooks/useTooltipInteraction.js.map +1 -0
- package/dist/components/tooltip/tooltip-trigger-props.d.ts +4 -0
- package/dist/components/tooltip/tooltip-trigger-props.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip-trigger-props.js +25 -0
- package/dist/components/tooltip/tooltip-trigger-props.js.map +1 -0
- package/dist/date-time-picker.css +33 -2
- package/dist/hooks/useOverlayPosition.d.ts +4 -0
- package/dist/hooks/useOverlayPosition.d.ts.map +1 -0
- package/dist/hooks/useOverlayPosition.js +60 -0
- package/dist/hooks/useOverlayPosition.js.map +1 -0
- package/dist/index.d.ts +21 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -7
- package/dist/pagination.css +54 -0
- package/dist/popup.css +4 -0
- package/dist/progress.css +1 -1
- package/dist/segmented-control.css +2 -0
- package/dist/slider.css +109 -0
- package/dist/split-button.css +2 -79
- package/dist/stepper.css +77 -0
- package/dist/styles.css +5 -0
- package/dist/tooltip.css +68 -0
- package/dist/utils/native-ref.d.ts +4 -0
- package/dist/utils/native-ref.d.ts.map +1 -0
- package/dist/utils/native-ref.js +24 -0
- package/dist/utils/native-ref.js.map +1 -0
- package/package.json +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.js","names":[],"sources":["../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["import {\n Children,\n createElement,\n forwardRef,\n isValidElement,\n useContext,\n useId,\n useState,\n} from 'react';\nimport type { MouseEvent, ReactElement } from 'react';\n\nimport {\n AccordionDepthContext,\n AccordionGroupContext,\n AccordionItemContext,\n useAccordionItemContext,\n} from './AccordionContext.js';\nimport type {\n AccordionContentProps,\n AccordionHeadContentProps,\n AccordionHeadProps,\n AccordionPartProps,\n AccordionProps,\n} from './Accordion.types.js';\n\nfunction Part({ children, className, name }: AccordionPartProps & { name: string }) {\n useAccordionItemContext(name);\n return (\n <span\n className={[`chayns-accordion__${name.toLowerCase()}`, className].filter(Boolean).join(' ')}\n >\n {children}\n </span>\n );\n}\n\nconst HeadLeading = (props: AccordionPartProps) => <Part {...props} name=\"leading\" />;\nconst HeadTrailing = (props: AccordionPartProps) => <Part {...props} name=\"trailing\" />;\n\nfunction HeadContent({ className, subtitle, title }: AccordionHeadContentProps) {\n useAccordionItemContext('Head.Content');\n\n return (\n <span className={['chayns-accordion__head-content', className].filter(Boolean).join(' ')}>\n <span className=\"chayns-accordion__title\">{title}</span>\n {subtitle ? <span className=\"chayns-accordion__subtitle\">{subtitle}</span> : null}\n </span>\n );\n}\n\nconst AccordionHead = forwardRef<HTMLButtonElement, AccordionHeadProps>(function AccordionHead(\n { children, className, onClick, ...buttonProps },\n ref,\n) {\n const { disabled, headerId, isOpen, onToggle, panelId } = useAccordionItemContext('Head');\n\n function handleClick(event: MouseEvent<HTMLButtonElement>) {\n onClick?.(event);\n if (!event.defaultPrevented) onToggle();\n }\n\n return (\n <button\n {...buttonProps}\n aria-controls={panelId}\n aria-expanded={isOpen}\n className={['chayns-accordion__header', className].filter(Boolean).join(' ')}\n disabled={disabled}\n id={headerId}\n onClick={handleClick}\n ref={ref}\n type=\"button\"\n >\n <i aria-hidden=\"true\" className=\"chayns-accordion__chevron far fa-chevron-right\" />\n {children}\n </button>\n );\n});\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ children, className, ...panelProps }, ref) {\n const depth = useContext(AccordionDepthContext);\n const { headerId, isOpen, panelId } = useAccordionItemContext('Content');\n\n return (\n <div\n {...panelProps}\n aria-hidden={!isOpen}\n aria-labelledby={headerId}\n className={['chayns-accordion__panel', className].filter(Boolean).join(' ')}\n id={panelId}\n inert={!isOpen}\n ref={ref}\n role=\"region\"\n style={{ ...panelProps.style, gridTemplateRows: isOpen ? '1fr' : '0fr' }}\n >\n <div className=\"chayns-accordion__inner\">\n <div className=\"chayns-accordion__content\">\n <AccordionDepthContext.Provider value={depth + 1}>\n {children}\n </AccordionDepthContext.Provider>\n </div>\n </div>\n </div>\n );\n },\n);\n\nconst AccordionRoot = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n appearance = 'default',\n children,\n className,\n defaultOpen = false,\n disabled = false,\n id,\n leading,\n onOpenChange,\n open,\n subtitle,\n title,\n ...rootProps\n },\n ref,\n) {\n const depth = useContext(AccordionDepthContext);\n const group = useContext(AccordionGroupContext);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const headerId = `${baseId}-header`;\n const panelId = `${baseId}-panel`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isGrouped = group !== null && depth === 0;\n const isOpen = isGrouped ? group.isOpen(baseId) : (open ?? uncontrolledOpen);\n const wrapped = depth > 0;\n const isList = appearance === 'list';\n\n function handleToggle() {\n if (isGrouped) {\n group.toggle(baseId);\n return;\n }\n\n const nextOpen = !isOpen;\n if (open === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange?.(nextOpen);\n }\n\n const variantClassName = isGrouped\n ? 'chayns-accordion--grouped'\n : wrapped\n ? 'chayns-accordion--wrapped'\n : 'chayns-accordion--standalone';\n const directChildren = Children.toArray(children);\n const compoundHead = directChildren.find(\n (child) => isValidElement(child) && child.type === AccordionHead,\n );\n const hasCompoundLeading =\n isValidElement(compoundHead) &&\n Children.toArray((compoundHead as ReactElement<AccordionHeadProps>).props.children).some(\n (child) => isValidElement(child) && child.type === HeadLeading,\n );\n const rootClassName = [\n 'chayns-accordion',\n variantClassName,\n isOpen ? 'chayns-accordion--open' : null,\n disabled ? 'chayns-accordion--disabled' : null,\n leading || hasCompoundLeading ? 'chayns-accordion--has-leading' : null,\n isList ? 'chayns-accordion--list' : null,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const hasCompoundHead = compoundHead !== undefined;\n const compoundContent = directChildren.find(\n (child) => isValidElement(child) && child.type === AccordionContent,\n );\n const hasCompoundContent = compoundContent !== undefined;\n const panelChildren = children;\n\n return (\n <div {...rootProps} className={rootClassName} id={id} ref={ref}>\n <AccordionItemContext.Provider\n value={{ disabled, headerId, isOpen, onToggle: handleToggle, panelId }}\n >\n {hasCompoundHead ? (\n compoundHead\n ) : (\n <AccordionHead>\n {leading ? <HeadLeading>{leading}</HeadLeading> : null}\n <HeadContent title={title} subtitle={subtitle} />\n </AccordionHead>\n )}\n {hasCompoundContent ? (\n createElement(AccordionContent, {\n ...(compoundContent as ReactElement<AccordionContentProps>).props,\n })\n ) : (\n <AccordionContent>{panelChildren}</AccordionContent>\n )}\n </AccordionItemContext.Provider>\n </div>\n );\n});\n\nconst Accordion = Object.assign(AccordionRoot, {\n Content: AccordionContent,\n Head: Object.assign(AccordionHead, {\n Content: HeadContent,\n Leading: HeadLeading,\n Trailing: HeadTrailing,\n }),\n});\n\nexport default Accordion;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Accordion.js","names":[],"sources":["../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["import ButtonIcon from '../button/button-icon/ButtonIcon.js';\nimport {\n Children,\n createElement,\n forwardRef,\n isValidElement,\n useContext,\n useId,\n useState,\n} from 'react';\nimport type { MouseEvent, ReactElement } from 'react';\n\nimport {\n AccordionDepthContext,\n AccordionGroupContext,\n AccordionItemContext,\n useAccordionItemContext,\n} from './AccordionContext.js';\nimport type {\n AccordionContentProps,\n AccordionHeadContentProps,\n AccordionHeadProps,\n AccordionPartProps,\n AccordionProps,\n} from './Accordion.types.js';\n\nfunction createHeadPart(name: 'Leading' | 'Trailing') {\n const HeadPart = forwardRef<HTMLSpanElement, AccordionPartProps>(function HeadPart(\n { children, className, ...spanProps },\n ref,\n ) {\n useAccordionItemContext(`Head.${name}`);\n return (\n <span\n {...spanProps}\n className={[`chayns-accordion__${name.toLowerCase()}`, className].filter(Boolean).join(' ')}\n ref={ref}\n >\n {children}\n </span>\n );\n });\n HeadPart.displayName = `Accordion.Head.${name}`;\n return HeadPart;\n}\n\nconst HeadLeading = createHeadPart('Leading');\nconst HeadTrailing = createHeadPart('Trailing');\n\nconst HeadContent = forwardRef<HTMLSpanElement, AccordionHeadContentProps>(function HeadContent(\n { className, subtitle, title, ...spanProps },\n ref,\n) {\n useAccordionItemContext('Head.Content');\n return (\n <span\n {...spanProps}\n className={['chayns-accordion__head-content', className].filter(Boolean).join(' ')}\n ref={ref}\n >\n <span className=\"chayns-accordion__title\">{title}</span>\n {subtitle ? <span className=\"chayns-accordion__subtitle\">{subtitle}</span> : null}\n </span>\n );\n});\n\nconst AccordionHead = forwardRef<HTMLButtonElement, AccordionHeadProps>(function AccordionHead(\n { children, className, onClick, ...buttonProps },\n ref,\n) {\n const { disabled, headerId, isOpen, onToggle, panelId } = useAccordionItemContext('Head');\n\n function handleClick(event: MouseEvent<HTMLButtonElement>) {\n onClick?.(event);\n if (!event.defaultPrevented) onToggle();\n }\n\n return (\n <button\n {...buttonProps}\n aria-controls={panelId}\n aria-expanded={isOpen}\n className={['chayns-accordion__header', className].filter(Boolean).join(' ')}\n disabled={disabled}\n id={headerId}\n onClick={handleClick}\n ref={ref}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"chayns-accordion__chevron\">\n <ButtonIcon icon=\"fa-chevron-right\" />\n </span>\n {children}\n </button>\n );\n});\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ children, className, ...panelProps }, ref) {\n const depth = useContext(AccordionDepthContext);\n const { headerId, isOpen, panelId } = useAccordionItemContext('Content');\n\n return (\n <div\n {...panelProps}\n aria-hidden={!isOpen}\n aria-labelledby={headerId}\n className={['chayns-accordion__panel', className].filter(Boolean).join(' ')}\n id={panelId}\n inert={!isOpen}\n ref={ref}\n role=\"region\"\n style={{ ...panelProps.style, gridTemplateRows: isOpen ? '1fr' : '0fr' }}\n >\n <div className=\"chayns-accordion__inner\">\n <div className=\"chayns-accordion__content\">\n <AccordionGroupContext.Provider value={null}>\n <AccordionDepthContext.Provider value={depth + 1}>\n {children}\n </AccordionDepthContext.Provider>\n </AccordionGroupContext.Provider>\n </div>\n </div>\n </div>\n );\n },\n);\n\nconst AccordionRoot = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n appearance = 'default',\n children,\n className,\n defaultOpen = false,\n disabled = false,\n id,\n leading,\n onOpenChange,\n open,\n subtitle,\n title,\n ...rootProps\n },\n ref,\n) {\n const depth = useContext(AccordionDepthContext);\n const group = useContext(AccordionGroupContext);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const headerId = `${baseId}-header`;\n const panelId = `${baseId}-panel`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isGrouped = group !== null;\n const isOpen = isGrouped ? group.isOpen(baseId) : (open ?? uncontrolledOpen);\n const wrapped = depth > 0;\n const isList = appearance === 'list';\n\n function handleToggle() {\n if (isGrouped) {\n group.toggle(baseId);\n return;\n }\n\n const nextOpen = !isOpen;\n if (open === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange?.(nextOpen);\n }\n\n const directChildren = Children.toArray(children);\n const compoundHead = directChildren.find(\n (child) => isValidElement(child) && child.type === AccordionHead,\n );\n const hasCompoundLeading =\n isValidElement(compoundHead) &&\n Children.toArray((compoundHead as ReactElement<AccordionHeadProps>).props.children).some(\n (child) => isValidElement(child) && child.type === HeadLeading,\n );\n const rootClassName = [\n 'chayns-accordion',\n isGrouped ? 'chayns-accordion--grouped' : null,\n wrapped ? 'chayns-accordion--wrapped' : null,\n !isGrouped && !wrapped ? 'chayns-accordion--standalone' : null,\n isOpen ? 'chayns-accordion--open' : null,\n disabled ? 'chayns-accordion--disabled' : null,\n leading || hasCompoundLeading ? 'chayns-accordion--has-leading' : null,\n isList ? 'chayns-accordion--list' : null,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const hasCompoundHead = compoundHead !== undefined;\n const compoundContent = directChildren.find(\n (child) => isValidElement(child) && child.type === AccordionContent,\n );\n const hasCompoundContent = compoundContent !== undefined;\n const panelChildren = children;\n\n return (\n <div {...rootProps} className={rootClassName} id={id} ref={ref}>\n <AccordionItemContext.Provider\n value={{ disabled, headerId, isOpen, onToggle: handleToggle, panelId }}\n >\n {hasCompoundHead ? (\n compoundHead\n ) : (\n <AccordionHead>\n {leading ? <HeadLeading>{leading}</HeadLeading> : null}\n <HeadContent title={title} subtitle={subtitle} />\n </AccordionHead>\n )}\n {hasCompoundContent ? (\n createElement(AccordionContent, {\n ...(compoundContent as ReactElement<AccordionContentProps>).props,\n })\n ) : (\n <AccordionContent>{panelChildren}</AccordionContent>\n )}\n </AccordionItemContext.Provider>\n </div>\n );\n});\n\nconst Accordion = Object.assign(AccordionRoot, {\n Content: AccordionContent,\n Head: Object.assign(AccordionHead, {\n Content: HeadContent,\n Leading: HeadLeading,\n Trailing: HeadTrailing,\n }),\n});\n\nObject.assign(HeadLeading, { displayName: 'Accordion.Head.Leading' });\nObject.assign(HeadTrailing, { displayName: 'Accordion.Head.Trailing' });\nObject.assign(HeadContent, { displayName: 'Accordion.Head.Content' });\nAccordionHead.displayName = 'Accordion.Head';\nAccordionContent.displayName = 'Accordion.Content';\nAccordionRoot.displayName = 'Accordion';\n\nexport default Accordion;\n"],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
export declare enum AccordionAppearances {
|
|
4
|
+
Default = "default",
|
|
5
|
+
List = "list"
|
|
6
|
+
}
|
|
2
7
|
export declare const ACCORDION_APPEARANCES: readonly ["default", "list"];
|
|
3
8
|
export type AccordionAppearance = (typeof ACCORDION_APPEARANCES)[number];
|
|
4
9
|
/**
|
|
@@ -90,12 +95,12 @@ export interface AccordionGroupProps extends Omit<ComponentPropsWithRef<'div'>,
|
|
|
90
95
|
export interface AccordionHeadProps extends Omit<ComponentPropsWithRef<'button'>, 'children'> {
|
|
91
96
|
children?: ReactNode;
|
|
92
97
|
}
|
|
93
|
-
export interface AccordionHeadContentProps {
|
|
98
|
+
export interface AccordionHeadContentProps extends Omit<ComponentPropsWithRef<'span'>, 'title' | 'children'> {
|
|
94
99
|
title: ReactNode;
|
|
95
100
|
subtitle?: ReactNode;
|
|
96
101
|
className?: string;
|
|
97
102
|
}
|
|
98
|
-
export interface AccordionPartProps {
|
|
103
|
+
export interface AccordionPartProps extends ComponentPropsWithRef<'span'> {
|
|
99
104
|
children?: ReactNode;
|
|
100
105
|
className?: string;
|
|
101
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.types.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,eAAO,MAAM,qBAAqB,8BAA+B,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,IAAI,GAAG,OAAO,CAC5B;IACC;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzF;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAE/C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC3F,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Accordion.types.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,2FAA2F;AAC3F,oBAAY,oBAAoB;IAC9B,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,eAAO,MAAM,qBAAqB,8BAA+B,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,IAAI,GAAG,OAAO,CAC5B;IACC;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzF;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAE/C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC3F,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CACrD,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,GAAG,UAAU,CACrB;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB,CAAC,MAAM,CAAC;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC3F,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
//#region src/components/accordion/Accordion.types.ts
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
var AccordionAppearances = /* @__PURE__ */ function(AccordionAppearances) {
|
|
4
|
+
AccordionAppearances["Default"] = "default";
|
|
5
|
+
AccordionAppearances["List"] = "list";
|
|
6
|
+
return AccordionAppearances;
|
|
7
|
+
}({});
|
|
2
8
|
var ACCORDION_APPEARANCES = ["default", "list"];
|
|
3
9
|
//#endregion
|
|
4
|
-
export { ACCORDION_APPEARANCES };
|
|
10
|
+
export { ACCORDION_APPEARANCES, AccordionAppearances };
|
|
5
11
|
|
|
6
12
|
//# sourceMappingURL=Accordion.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.types.js","names":[],"sources":["../../../src/components/accordion/Accordion.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport const ACCORDION_APPEARANCES = ['default', 'list'] as const;\nexport type AccordionAppearance = (typeof ACCORDION_APPEARANCES)[number];\n\n/**\n * @description Props for a single disclosure accordion: a header button that\n * expands and collapses an associated content region. Nesting an `Accordion`\n * inside another `Accordion`'s content is automatically detected via React\n * context and rendered as the \"Wrapped\" presentation — there is no separate\n * component or prop for that case.\n */\nexport interface AccordionProps extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'id' | 'title'\n> {\n /**\n * @description Visible, localized header label used as the accordion's\n * accessible name.\n */\n title?: ReactNode;\n\n /** Optional second line used by the list presentation. */\n subtitle?: ReactNode;\n\n /** Optional leading image or icon used by list-style accordion rows. */\n leading?: ReactNode;\n\n /** Selects the compact two-line list presentation from Bodywork. */\n appearance?: AccordionAppearance;\n\n /**\n * @description Panel content revealed when the accordion is open.\n */\n children?: ReactNode;\n\n /**\n * @description Controlled open state. Ignored when the accordion is\n * rendered inside an `AccordionGroup`, which owns exclusivity instead.\n */\n open?: boolean;\n\n /**\n * @description Uncontrolled initial open state. Ignored when inside an\n * `AccordionGroup`.\n * @default false\n */\n defaultOpen?: boolean;\n\n /**\n * @description Called with the next open state on user toggle, for both\n * the controlled and uncontrolled usage.\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * @description Disables the header trigger, preventing toggling.\n * @default false\n */\n disabled?: boolean;\n\n /**\n * @description Stable id used to wire the header and panel via ARIA and,\n * inside an `AccordionGroup`, to identify this item. Falls back to a\n * generated id when omitted.\n */\n id?: string;\n\n /**\n * @description Additional class names appended to the accordion root\n * element.\n */\n className?: string;\n}\n\n/**\n * @description Props for a group of mutually exclusive accordions: at most\n * one child `Accordion` is open at a time, and the group renders its\n * children as one joined surface.\n */\nexport interface AccordionGroupProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n /**\n * @description `Accordion` items belonging to the group.\n */\n children?: ReactNode;\n\n /**\n * @description Controlled id of the currently open item, or `null` when\n * all items are closed.\n */\n openId?: string | null;\n\n /**\n * @description Uncontrolled id of the initially open item.\n * @default null\n */\n defaultOpenId?: string | null;\n\n /**\n * @description Called with the next open item id, or `null` when the group\n * closes entirely, for both the controlled and uncontrolled usage.\n */\n onOpenChange?: (openId: string | null) => void;\n\n /**\n * @description Additional class names appended to the group root element.\n */\n className?: string;\n}\n\nexport interface AccordionHeadProps extends Omit<ComponentPropsWithRef<'button'>, 'children'> {\n children?: ReactNode;\n}\n\nexport interface AccordionHeadContentProps {\n title: ReactNode;\n subtitle?: ReactNode;\n className?: string;\n}\n\nexport interface AccordionPartProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport interface AccordionContentProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n children?: ReactNode;\n}\n"],"mappings":";AAEA,IAAa,wBAAwB,CAAC,WAAW,MAAM"}
|
|
1
|
+
{"version":3,"file":"Accordion.types.js","names":[],"sources":["../../../src/components/accordion/Accordion.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\n/** Named configuration values; existing literal props and value lists remain supported. */\nexport enum AccordionAppearances {\n Default = 'default',\n List = 'list',\n}\n\nexport const ACCORDION_APPEARANCES = ['default', 'list'] as const;\nexport type AccordionAppearance = (typeof ACCORDION_APPEARANCES)[number];\n\n/**\n * @description Props for a single disclosure accordion: a header button that\n * expands and collapses an associated content region. Nesting an `Accordion`\n * inside another `Accordion`'s content is automatically detected via React\n * context and rendered as the \"Wrapped\" presentation — there is no separate\n * component or prop for that case.\n */\nexport interface AccordionProps extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'id' | 'title'\n> {\n /**\n * @description Visible, localized header label used as the accordion's\n * accessible name.\n */\n title?: ReactNode;\n\n /** Optional second line used by the list presentation. */\n subtitle?: ReactNode;\n\n /** Optional leading image or icon used by list-style accordion rows. */\n leading?: ReactNode;\n\n /** Selects the compact two-line list presentation from Bodywork. */\n appearance?: AccordionAppearance;\n\n /**\n * @description Panel content revealed when the accordion is open.\n */\n children?: ReactNode;\n\n /**\n * @description Controlled open state. Ignored when the accordion is\n * rendered inside an `AccordionGroup`, which owns exclusivity instead.\n */\n open?: boolean;\n\n /**\n * @description Uncontrolled initial open state. Ignored when inside an\n * `AccordionGroup`.\n * @default false\n */\n defaultOpen?: boolean;\n\n /**\n * @description Called with the next open state on user toggle, for both\n * the controlled and uncontrolled usage.\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * @description Disables the header trigger, preventing toggling.\n * @default false\n */\n disabled?: boolean;\n\n /**\n * @description Stable id used to wire the header and panel via ARIA and,\n * inside an `AccordionGroup`, to identify this item. Falls back to a\n * generated id when omitted.\n */\n id?: string;\n\n /**\n * @description Additional class names appended to the accordion root\n * element.\n */\n className?: string;\n}\n\n/**\n * @description Props for a group of mutually exclusive accordions: at most\n * one child `Accordion` is open at a time, and the group renders its\n * children as one joined surface.\n */\nexport interface AccordionGroupProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n /**\n * @description `Accordion` items belonging to the group.\n */\n children?: ReactNode;\n\n /**\n * @description Controlled id of the currently open item, or `null` when\n * all items are closed.\n */\n openId?: string | null;\n\n /**\n * @description Uncontrolled id of the initially open item.\n * @default null\n */\n defaultOpenId?: string | null;\n\n /**\n * @description Called with the next open item id, or `null` when the group\n * closes entirely, for both the controlled and uncontrolled usage.\n */\n onOpenChange?: (openId: string | null) => void;\n\n /**\n * @description Additional class names appended to the group root element.\n */\n className?: string;\n}\n\nexport interface AccordionHeadProps extends Omit<ComponentPropsWithRef<'button'>, 'children'> {\n children?: ReactNode;\n}\n\nexport interface AccordionHeadContentProps extends Omit<\n ComponentPropsWithRef<'span'>,\n 'title' | 'children'\n> {\n title: ReactNode;\n subtitle?: ReactNode;\n className?: string;\n}\n\nexport interface AccordionPartProps extends ComponentPropsWithRef<'span'> {\n children?: ReactNode;\n className?: string;\n}\n\nexport interface AccordionContentProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n children?: ReactNode;\n}\n"],"mappings":";;AAGA,IAAY,uBAAL,yBAAA,sBAAA;CACL,qBAAA,aAAA;CACA,qBAAA,UAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAa,wBAAwB,CAAC,WAAW,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionGroup.d.ts","sourceRoot":"","sources":["../../../src/components/accordion-group/AccordionGroup.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,QAAA,MAAM,cAAc,6HAkClB,CAAC;
|
|
1
|
+
{"version":3,"file":"AccordionGroup.d.ts","sourceRoot":"","sources":["../../../src/components/accordion-group/AccordionGroup.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,QAAA,MAAM,cAAc,6HAkClB,CAAC;AAIH,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionGroup.js","names":[],"sources":["../../../src/components/accordion-group/AccordionGroup.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { AccordionGroupContext } from '../accordion/AccordionContext.js';\nimport type { AccordionGroupContextValue } from '../accordion/AccordionContext.js';\nimport type { AccordionGroupProps } from '../accordion/Accordion.types.js';\n\nconst AccordionGroup = forwardRef<HTMLDivElement, AccordionGroupProps>(function AccordionGroup(\n { children, className, defaultOpenId = null, onOpenChange, openId, ...rootProps },\n ref,\n) {\n const [uncontrolledOpenId, setUncontrolledOpenId] = useState<string | null>(defaultOpenId);\n\n const isControlled = openId !== undefined;\n const currentOpenId = isControlled ? openId : uncontrolledOpenId;\n\n const isOpen = useCallback((id: string) => currentOpenId === id, [currentOpenId]);\n\n const toggle = useCallback(\n (id: string) => {\n const nextOpenId = currentOpenId === id ? null : id;\n if (!isControlled) setUncontrolledOpenId(nextOpenId);\n onOpenChange?.(nextOpenId);\n },\n [currentOpenId, isControlled, onOpenChange],\n );\n\n const contextValue = useMemo<AccordionGroupContextValue>(\n () => ({ isOpen, toggle }),\n [isOpen, toggle],\n );\n\n const rootClassName = ['chayns-accordion-group', className].filter(Boolean).join(' ');\n\n return (\n <AccordionGroupContext.Provider value={contextValue}>\n <div {...rootProps} className={rootClassName} ref={ref}>\n {children}\n </div>\n </AccordionGroupContext.Provider>\n );\n});\n\nexport default AccordionGroup;\n"],"mappings":";;;;AAMA,IAAM,iBAAiB,WAAgD,SAAS,eAC9E,EAAE,UAAU,WAAW,gBAAgB,MAAM,cAAc,QAAQ,GAAG,aACtE,KACA;CACA,MAAM,CAAC,oBAAoB,yBAAyB,SAAwB,aAAa;CAEzF,MAAM,eAAe,WAAW,KAAA;CAChC,MAAM,gBAAgB,eAAe,SAAS;CAE9C,MAAM,SAAS,aAAa,OAAe,kBAAkB,IAAI,CAAC,aAAa,CAAC;CAEhF,MAAM,SAAS,aACZ,OAAe;EACd,MAAM,aAAa,kBAAkB,KAAK,OAAO;EACjD,IAAI,CAAC,cAAc,sBAAsB,UAAU;EACnD,eAAe,UAAU;CAC3B,GACA;EAAC;EAAe;EAAc;CAAY,CAC5C;CAEA,MAAM,eAAe,eACZ;EAAE;EAAQ;CAAO,IACxB,CAAC,QAAQ,MAAM,CACjB;CAEA,MAAM,gBAAgB,CAAC,0BAA0B,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpF,OACE,oBAAC,sBAAsB,UAAvB;EAAgC,OAAO;EACrC,UAAA,oBAAC,OAAD;GAAK,GAAI;GAAW,WAAW;GAAoB;GAChD;EACE,CAAA;CACyB,CAAA;AAEpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"AccordionGroup.js","names":[],"sources":["../../../src/components/accordion-group/AccordionGroup.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { AccordionGroupContext } from '../accordion/AccordionContext.js';\nimport type { AccordionGroupContextValue } from '../accordion/AccordionContext.js';\nimport type { AccordionGroupProps } from '../accordion/Accordion.types.js';\n\nconst AccordionGroup = forwardRef<HTMLDivElement, AccordionGroupProps>(function AccordionGroup(\n { children, className, defaultOpenId = null, onOpenChange, openId, ...rootProps },\n ref,\n) {\n const [uncontrolledOpenId, setUncontrolledOpenId] = useState<string | null>(defaultOpenId);\n\n const isControlled = openId !== undefined;\n const currentOpenId = isControlled ? openId : uncontrolledOpenId;\n\n const isOpen = useCallback((id: string) => currentOpenId === id, [currentOpenId]);\n\n const toggle = useCallback(\n (id: string) => {\n const nextOpenId = currentOpenId === id ? null : id;\n if (!isControlled) setUncontrolledOpenId(nextOpenId);\n onOpenChange?.(nextOpenId);\n },\n [currentOpenId, isControlled, onOpenChange],\n );\n\n const contextValue = useMemo<AccordionGroupContextValue>(\n () => ({ isOpen, toggle }),\n [isOpen, toggle],\n );\n\n const rootClassName = ['chayns-accordion-group', className].filter(Boolean).join(' ');\n\n return (\n <AccordionGroupContext.Provider value={contextValue}>\n <div {...rootProps} className={rootClassName} ref={ref}>\n {children}\n </div>\n </AccordionGroupContext.Provider>\n );\n});\n\nAccordionGroup.displayName = 'AccordionGroup';\n\nexport default AccordionGroup;\n"],"mappings":";;;;AAMA,IAAM,iBAAiB,WAAgD,SAAS,eAC9E,EAAE,UAAU,WAAW,gBAAgB,MAAM,cAAc,QAAQ,GAAG,aACtE,KACA;CACA,MAAM,CAAC,oBAAoB,yBAAyB,SAAwB,aAAa;CAEzF,MAAM,eAAe,WAAW,KAAA;CAChC,MAAM,gBAAgB,eAAe,SAAS;CAE9C,MAAM,SAAS,aAAa,OAAe,kBAAkB,IAAI,CAAC,aAAa,CAAC;CAEhF,MAAM,SAAS,aACZ,OAAe;EACd,MAAM,aAAa,kBAAkB,KAAK,OAAO;EACjD,IAAI,CAAC,cAAc,sBAAsB,UAAU;EACnD,eAAe,UAAU;CAC3B,GACA;EAAC;EAAe;EAAc;CAAY,CAC5C;CAEA,MAAM,eAAe,eACZ;EAAE;EAAQ;CAAO,IACxB,CAAC,QAAQ,MAAM,CACjB;CAEA,MAAM,gBAAgB,CAAC,0BAA0B,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpF,OACE,oBAAC,sBAAsB,UAAvB;EAAgC,OAAO;EACrC,UAAA,oBAAC,OAAD;GAAK,GAAI;GAAW,WAAW;GAAoB;GAChD;EACE,CAAA;CACyB,CAAA;AAEpC,CAAC;AAED,eAAe,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAarD,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MASpD,CAAC;AAEF,QAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAarD,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MASpD,CAAC;AAEF,QAAA,MAAM,MAAM,sHAwCV,CAAC;AAIH,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","names":[],"sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import { forwardRef, useState, type CSSProperties } from 'react';\n\nimport type { AvatarProps } from './Avatar.types.js';\n\nconst getInitials = (name: string) => {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) {\n return '';\n }\n\n const first = words[0]?.charAt(0) ?? '';\n const last = words.length > 1 ? (words.at(-1)?.charAt(0) ?? '') : '';\n return `${first}${last}`.toUpperCase();\n};\n\nexport const getColorFromInitials = (input: string): string => {\n let hash = 0;\n\n for (let index = 0; index < input.length; index += 1) {\n hash = input.charCodeAt(index) + ((hash << 5) - hash);\n }\n\n const hue = Math.abs(hash) % 360;\n return `hsl(${hue} 65% var(--chayns-avatar-initials-lightness))`;\n};\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { alt, badge, className, name, size = 'default', src, style, ...spanProps },\n ref,\n) {\n const [failedSource, setFailedSource] = useState<string>();\n const showImage = Boolean(src) && failedSource !== src;\n const initials = getInitials(name);\n const initialsColorStyle: CSSProperties & Record<'--chayns-avatar-initials-color', string> = {\n '--chayns-avatar-initials-color': getColorFromInitials(name),\n ...style,\n };\n\n return (\n <span\n {...spanProps}\n aria-label={alt ?? name}\n className={[
|
|
1
|
+
{"version":3,"file":"Avatar.js","names":[],"sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import { forwardRef, useState, type CSSProperties } from 'react';\n\nimport type { AvatarProps } from './Avatar.types.js';\n\nconst getInitials = (name: string) => {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) {\n return '';\n }\n\n const first = words[0]?.charAt(0) ?? '';\n const last = words.length > 1 ? (words.at(-1)?.charAt(0) ?? '') : '';\n return `${first}${last}`.toUpperCase();\n};\n\nexport const getColorFromInitials = (input: string): string => {\n let hash = 0;\n\n for (let index = 0; index < input.length; index += 1) {\n hash = input.charCodeAt(index) + ((hash << 5) - hash);\n }\n\n const hue = Math.abs(hash) % 360;\n return `hsl(${hue} 65% var(--chayns-avatar-initials-lightness))`;\n};\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { alt, badge, className, name, size = 'default', src, style, ...spanProps },\n ref,\n) {\n const [failedSource, setFailedSource] = useState<string>();\n const showImage = Boolean(src) && failedSource !== src;\n const initials = getInitials(name);\n const initialsColorStyle: CSSProperties & Record<'--chayns-avatar-initials-color', string> = {\n '--chayns-avatar-initials-color': getColorFromInitials(name),\n ...style,\n };\n\n return (\n <span\n {...spanProps}\n aria-label={alt ?? name}\n className={['chayns-avatar', `chayns-avatar--${size}`, className].filter(Boolean).join(' ')}\n role=\"img\"\n ref={ref}\n style={initialsColorStyle}\n >\n {showImage ? (\n <img\n alt=\"\"\n className=\"chayns-avatar__image\"\n onError={() => setFailedSource(src)}\n src={src}\n />\n ) : (\n <span aria-hidden=\"true\" className=\"chayns-avatar__initials\">\n {initials}\n </span>\n )}\n {badge ? (\n <span aria-hidden=\"true\" className=\"chayns-avatar__badge\">\n {badge}\n </span>\n ) : null}\n </span>\n );\n});\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n"],"mappings":";;;AAIA,IAAM,eAAe,SAAiB;CACpC,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CACrD,IAAI,MAAM,WAAW,GACnB,OAAO;CAKT,OAAO,GAFO,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,KACxB,MAAM,SAAS,IAAK,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,KAAM,KACzC,YAAY;AACvC;AAEA,IAAa,wBAAwB,UAA0B;CAC7D,IAAI,OAAO;CAEX,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GACjD,OAAO,MAAM,WAAW,KAAK,MAAM,QAAQ,KAAK;CAIlD,OAAO,OADK,KAAK,IAAI,IAAI,IAAI,IACX;AACpB;AAEA,IAAM,SAAS,WAAyC,SAAS,OAC/D,EAAE,KAAK,OAAO,WAAW,MAAM,OAAO,WAAW,KAAK,OAAO,GAAG,aAChE,KACA;CACA,MAAM,CAAC,cAAc,mBAAmB,SAAiB;CACzD,MAAM,YAAY,QAAQ,GAAG,KAAK,iBAAiB;CACnD,MAAM,WAAW,YAAY,IAAI;CACjC,MAAM,qBAAuF;EAC3F,kCAAkC,qBAAqB,IAAI;EAC3D,GAAG;CACL;CAEA,OACE,qBAAC,QAAD;EACE,GAAI;EACJ,cAAY,OAAO;EACnB,WAAW;GAAC;GAAiB,kBAAkB;GAAQ;EAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAC1F,MAAK;EACA;EACL,OAAO;EANT,UAAA,CAQG,YACC,oBAAC,OAAD;GACE,KAAI;GACJ,WAAU;GACV,eAAe,gBAAgB,GAAG;GAC7B;EACN,CAAA,IAED,oBAAC,QAAD;GAAM,eAAY;GAAO,WAAU;GAChC,UAAA;EACG,CAAA,GAEP,QACC,oBAAC,QAAD;GAAM,eAAY;GAAO,WAAU;GAChC,UAAA;EACG,CAAA,IACJ,IACA;;AAEV,CAAC;AAED,OAAO,cAAc"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
export declare enum AvatarSizes {
|
|
4
|
+
Default = "default",
|
|
5
|
+
Small = "small",
|
|
6
|
+
Large = "large"
|
|
7
|
+
}
|
|
8
|
+
export declare const AVATAR_SIZES: readonly ["default", "small", "large"];
|
|
9
|
+
export type AvatarSize = (typeof AVATAR_SIZES)[number];
|
|
2
10
|
/**
|
|
3
11
|
* @description Props for a single circular identity avatar: an image with a
|
|
4
12
|
* deterministic initials-and-tone fallback. `size` is a designer-approved
|
|
@@ -16,7 +24,7 @@ export interface AvatarProps extends Omit<ComponentPropsWithRef<'span'>, 'childr
|
|
|
16
24
|
* @description Avatar geometry variant.
|
|
17
25
|
* @default 'default'
|
|
18
26
|
*/
|
|
19
|
-
size?:
|
|
27
|
+
size?: AvatarSize;
|
|
20
28
|
/**
|
|
21
29
|
* @description Optional image source. Initials are shown instead when
|
|
22
30
|
* omitted or when the image fails to load.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.types.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,UAAU,GAAG,MAAM,GAAG,YAAY,CACnC;IACC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Avatar.types.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/Avatar.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,2FAA2F;AAC3F,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,YAAY,wCAAyC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,UAAU,GAAG,MAAM,GAAG,YAAY,CACnC;IACC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/components/avatar/Avatar.types.ts
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
var AvatarSizes = /* @__PURE__ */ function(AvatarSizes) {
|
|
4
|
+
AvatarSizes["Default"] = "default";
|
|
5
|
+
AvatarSizes["Small"] = "small";
|
|
6
|
+
AvatarSizes["Large"] = "large";
|
|
7
|
+
return AvatarSizes;
|
|
8
|
+
}({});
|
|
9
|
+
var AVATAR_SIZES = [
|
|
10
|
+
"default",
|
|
11
|
+
"small",
|
|
12
|
+
"large"
|
|
13
|
+
];
|
|
14
|
+
//#endregion
|
|
15
|
+
export { AVATAR_SIZES, AvatarSizes };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=Avatar.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.types.js","names":[],"sources":["../../../src/components/avatar/Avatar.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\n/** Named configuration values; existing literal props and value lists remain supported. */\nexport enum AvatarSizes {\n Default = 'default',\n Small = 'small',\n Large = 'large',\n}\n\nexport const AVATAR_SIZES = ['default', 'small', 'large'] as const;\nexport type AvatarSize = (typeof AVATAR_SIZES)[number];\n\n/**\n * @description Props for a single circular identity avatar: an image with a\n * deterministic initials-and-tone fallback. `size` is a designer-approved\n * local geometry variant for this component, not a global S/M/L density\n * variant.\n */\nexport interface AvatarProps extends Omit<\n ComponentPropsWithRef<'span'>,\n 'children' | 'role' | 'aria-label'\n> {\n /**\n * @description Full name used to derive both the accessible name (unless\n * `alt` is given) and the initials fallback shown when no image is\n * available.\n */\n name: string;\n\n /**\n * @description Avatar geometry variant.\n * @default 'default'\n */\n size?: AvatarSize;\n\n /**\n * @description Optional image source. Initials are shown instead when\n * omitted or when the image fails to load.\n */\n src?: string;\n\n /**\n * @description Optional accessible name override for the avatar, used\n * instead of `name` when the visible identity text differs from the\n * accessible name.\n */\n alt?: string;\n\n /**\n * @description Decorative content positioned at the lower edge of the\n * avatar, for example a presence or status marker. Always rendered\n * `aria-hidden` — any meaning it conveys must also be available elsewhere.\n */\n badge?: ReactNode;\n}\n"],"mappings":";;AAGA,IAAY,cAAL,yBAAA,aAAA;CACL,YAAA,aAAA;CACA,YAAA,WAAA;CACA,YAAA,WAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAa,eAAe;CAAC;CAAW;CAAS;AAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/avatar-group/AvatarGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,QAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/avatar-group/AvatarGroup.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,QAAA,MAAM,WAAW,2HA8Bf,CAAC;AAIH,eAAe,WAAW,CAAC"}
|
|
@@ -3,9 +3,9 @@ import { jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
//#region src/components/avatar-group/AvatarGroup.tsx
|
|
4
4
|
var AvatarGroup = forwardRef(function AvatarGroup({ children, className, max, size = "default", ...spanProps }, ref) {
|
|
5
5
|
const avatars = Children.toArray(children).filter((child) => isValidElement(child));
|
|
6
|
-
const
|
|
7
|
-
const visibleCount =
|
|
8
|
-
const overflowCount =
|
|
6
|
+
const hasOverflow = typeof max === "number" && Number.isFinite(max) && max >= 1 && avatars.length > max;
|
|
7
|
+
const visibleCount = hasOverflow ? Math.max(Math.floor(max) - 1, 0) : avatars.length;
|
|
8
|
+
const overflowCount = hasOverflow ? avatars.length - visibleCount : 0;
|
|
9
9
|
return /* @__PURE__ */ jsxs("span", {
|
|
10
10
|
className: [
|
|
11
11
|
"chayns-avatar-group",
|
|
@@ -21,6 +21,7 @@ var AvatarGroup = forwardRef(function AvatarGroup({ children, className, max, si
|
|
|
21
21
|
}) : null]
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
24
25
|
//#endregion
|
|
25
26
|
export { AvatarGroup as default };
|
|
26
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar-group/AvatarGroup.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react';\n\nimport type { AvatarProps } from '../avatar/Avatar.types.js';\nimport type { AvatarGroupProps } from './AvatarGroup.types.js';\n\nconst AvatarGroup = forwardRef<HTMLSpanElement, AvatarGroupProps>(function AvatarGroup(\n { children, className, max, size = 'default', ...spanProps },\n ref,\n) {\n const avatars = Children.toArray(children).filter((child) => isValidElement<AvatarProps>(child));\n const limited = typeof max === 'number' && max >
|
|
1
|
+
{"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar-group/AvatarGroup.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef, isValidElement } from 'react';\n\nimport type { AvatarProps } from '../avatar/Avatar.types.js';\nimport type { AvatarGroupProps } from './AvatarGroup.types.js';\n\nconst AvatarGroup = forwardRef<HTMLSpanElement, AvatarGroupProps>(function AvatarGroup(\n { children, className, max, size = 'default', ...spanProps },\n ref,\n) {\n const avatars = Children.toArray(children).filter((child) => isValidElement<AvatarProps>(child));\n const limited = typeof max === 'number' && Number.isFinite(max) && max >= 1;\n const hasOverflow = limited && avatars.length > max;\n const visibleCount = hasOverflow ? Math.max(Math.floor(max) - 1, 0) : avatars.length;\n const overflowCount = hasOverflow ? avatars.length - visibleCount : 0;\n\n return (\n <span\n className={['chayns-avatar-group', `chayns-avatar-group--${size}`, className]\n .filter(Boolean)\n .join(' ')}\n {...spanProps}\n ref={ref}\n >\n {avatars.slice(0, visibleCount).map((avatar) =>\n cloneElement(avatar, {\n size,\n }),\n )}\n {overflowCount > 0 ? (\n <span aria-hidden=\"true\" className=\"chayns-avatar-group__overflow\">\n +{overflowCount}\n </span>\n ) : null}\n </span>\n );\n});\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport default AvatarGroup;\n"],"mappings":";;;AAKA,IAAM,cAAc,WAA8C,SAAS,YACzE,EAAE,UAAU,WAAW,KAAK,OAAO,WAAW,GAAG,aACjD,KACA;CACA,MAAM,UAAU,SAAS,QAAQ,QAAQ,CAAC,CAAC,QAAQ,UAAU,eAA4B,KAAK,CAAC;CAE/F,MAAM,cADU,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,KAAK,OAAO,KAC3C,QAAQ,SAAS;CAChD,MAAM,eAAe,cAAc,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,QAAQ;CAC9E,MAAM,gBAAgB,cAAc,QAAQ,SAAS,eAAe;CAEpE,OACE,qBAAC,QAAD;EACE,WAAW;GAAC;GAAuB,wBAAwB;GAAQ;EAAS,CAAC,CAC1E,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;EACX,GAAI;EACC;EALP,UAAA,CAOG,QAAQ,MAAM,GAAG,YAAY,CAAC,CAAC,KAAK,WACnC,aAAa,QAAQ,EACnB,KACF,CAAC,CACH,GACC,gBAAgB,IACf,qBAAC,QAAD;GAAM,eAAY;GAAO,WAAU;GAAnC,UAAA,CAAmE,KAC/D,aACE;EACJ,CAAA,IAAA,IACA;;AAEV,CAAC;AAED,YAAY,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,QAAA,MAAM,KAAK,qHAwBT,CAAC;
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,QAAA,MAAM,KAAK,qHAwBT,CAAC;AAIH,eAAe,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","names":[],"sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import { forwardRef } from 'react';\n\nimport type { BadgeProps } from './Badge.types.js';\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { 'aria-label': ariaLabel, children, className, size = 'sm', tone = 'neutral', ...spanProps },\n ref,\n) {\n const resolvedClassName = [\n 'chayns-badge',\n `chayns-badge--${tone}`,\n `chayns-badge--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n {...spanProps}\n aria-label={ariaLabel}\n className={resolvedClassName}\n ref={ref}\n role={ariaLabel === undefined ? undefined : 'status'}\n >\n <span className=\"chayns-badge__content\">{children}</span>\n </span>\n );\n});\n\nexport default Badge;\n"],"mappings":";;;AAIA,IAAM,QAAQ,WAAwC,SAAS,MAC7D,EAAE,cAAc,WAAW,UAAU,WAAW,OAAO,MAAM,OAAO,WAAW,GAAG,aAClF,KACA;CACA,MAAM,oBAAoB;EACxB;EACA,iBAAiB;EACjB,iBAAiB;EACjB;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,oBAAC,QAAD;EACE,GAAI;EACJ,cAAY;EACZ,WAAW;EACN;EACL,MAAM,cAAc,KAAA,IAAY,KAAA,IAAY;EAE5C,UAAA,oBAAC,QAAD;GAAM,WAAU;GAAyB;EAAe,CAAA;CACpD,CAAA;AAEV,CAAC"}
|
|
1
|
+
{"version":3,"file":"Badge.js","names":[],"sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import { forwardRef } from 'react';\n\nimport type { BadgeProps } from './Badge.types.js';\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { 'aria-label': ariaLabel, children, className, size = 'sm', tone = 'neutral', ...spanProps },\n ref,\n) {\n const resolvedClassName = [\n 'chayns-badge',\n `chayns-badge--${tone}`,\n `chayns-badge--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n {...spanProps}\n aria-label={ariaLabel}\n className={resolvedClassName}\n ref={ref}\n role={ariaLabel === undefined ? undefined : 'status'}\n >\n <span className=\"chayns-badge__content\">{children}</span>\n </span>\n );\n});\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n"],"mappings":";;;AAIA,IAAM,QAAQ,WAAwC,SAAS,MAC7D,EAAE,cAAc,WAAW,UAAU,WAAW,OAAO,MAAM,OAAO,WAAW,GAAG,aAClF,KACA;CACA,MAAM,oBAAoB;EACxB;EACA,iBAAiB;EACjB,iBAAiB;EACjB;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,oBAAC,QAAD;EACE,GAAI;EACJ,cAAY;EACZ,WAAW;EACN;EACL,MAAM,cAAc,KAAA,IAAY,KAAA,IAAY;EAE5C,UAAA,oBAAC,QAAD;GAAM,WAAU;GAAyB;EAAe,CAAA;CACpD,CAAA;AAEV,CAAC;AAED,MAAM,cAAc"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
export declare enum BadgeSizes {
|
|
4
|
+
Small = "sm",
|
|
5
|
+
Medium = "md"
|
|
6
|
+
}
|
|
7
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
8
|
+
export declare enum BadgeTones {
|
|
9
|
+
Neutral = "neutral",
|
|
10
|
+
Accent = "accent",
|
|
11
|
+
Success = "success",
|
|
12
|
+
Warning = "warning",
|
|
13
|
+
Danger = "danger"
|
|
14
|
+
}
|
|
2
15
|
export declare const BADGE_TONES: readonly ["neutral", "accent", "success", "warning", "danger"];
|
|
3
16
|
export type BadgeTone = (typeof BADGE_TONES)[number];
|
|
4
17
|
export declare const BADGE_SIZES: readonly ["sm", "md"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.types.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,eAAO,MAAM,WAAW,gEAAiE,CAAC;AAC1F,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,WAAW,uBAAwB,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1F,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd"}
|
|
1
|
+
{"version":3,"file":"Badge.types.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,2FAA2F;AAC3F,oBAAY,UAAU;IACpB,KAAK,OAAO;IACZ,MAAM,OAAO;CACd;AAED,2FAA2F;AAC3F,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,WAAW,gEAAiE,CAAC;AAC1F,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,WAAW,uBAAwB,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1F,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd"}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
//#region src/components/badge/Badge.types.ts
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
var BadgeSizes = /* @__PURE__ */ function(BadgeSizes) {
|
|
4
|
+
BadgeSizes["Small"] = "sm";
|
|
5
|
+
BadgeSizes["Medium"] = "md";
|
|
6
|
+
return BadgeSizes;
|
|
7
|
+
}({});
|
|
8
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
9
|
+
var BadgeTones = /* @__PURE__ */ function(BadgeTones) {
|
|
10
|
+
BadgeTones["Neutral"] = "neutral";
|
|
11
|
+
BadgeTones["Accent"] = "accent";
|
|
12
|
+
BadgeTones["Success"] = "success";
|
|
13
|
+
BadgeTones["Warning"] = "warning";
|
|
14
|
+
BadgeTones["Danger"] = "danger";
|
|
15
|
+
return BadgeTones;
|
|
16
|
+
}({});
|
|
2
17
|
var BADGE_TONES = [
|
|
3
18
|
"neutral",
|
|
4
19
|
"accent",
|
|
@@ -8,6 +23,6 @@ var BADGE_TONES = [
|
|
|
8
23
|
];
|
|
9
24
|
var BADGE_SIZES = ["sm", "md"];
|
|
10
25
|
//#endregion
|
|
11
|
-
export { BADGE_SIZES, BADGE_TONES };
|
|
26
|
+
export { BADGE_SIZES, BADGE_TONES, BadgeSizes, BadgeTones };
|
|
12
27
|
|
|
13
28
|
//# sourceMappingURL=Badge.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.types.js","names":[],"sources":["../../../src/components/badge/Badge.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport const BADGE_TONES = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\nexport const BADGE_SIZES = ['sm', 'md'] as const;\nexport type BadgeSize = (typeof BADGE_SIZES)[number];\n\nexport interface BadgeProps extends Omit<ComponentPropsWithRef<'span'>, 'children' | 'role'> {\n children: Exclude<ReactNode, boolean | null | undefined>;\n tone?: BadgeTone;\n size?: BadgeSize;\n 'aria-label'?: string;\n role?: never;\n}\n"],"mappings":";AAEA,IAAa,cAAc;CAAC;CAAW;CAAU;CAAW;CAAW;AAAQ;AAG/E,IAAa,cAAc,CAAC,MAAM,IAAI"}
|
|
1
|
+
{"version":3,"file":"Badge.types.js","names":[],"sources":["../../../src/components/badge/Badge.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\n/** Named configuration values; existing literal props and value lists remain supported. */\nexport enum BadgeSizes {\n Small = 'sm',\n Medium = 'md',\n}\n\n/** Named configuration values; existing literal props and value lists remain supported. */\nexport enum BadgeTones {\n Neutral = 'neutral',\n Accent = 'accent',\n Success = 'success',\n Warning = 'warning',\n Danger = 'danger',\n}\n\nexport const BADGE_TONES = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\nexport const BADGE_SIZES = ['sm', 'md'] as const;\nexport type BadgeSize = (typeof BADGE_SIZES)[number];\n\nexport interface BadgeProps extends Omit<ComponentPropsWithRef<'span'>, 'children' | 'role'> {\n children: Exclude<ReactNode, boolean | null | undefined>;\n tone?: BadgeTone;\n size?: BadgeSize;\n 'aria-label'?: string;\n role?: never;\n}\n"],"mappings":";;AAGA,IAAY,aAAL,yBAAA,YAAA;CACL,WAAA,WAAA;CACA,WAAA,YAAA;;AACF,EAAA,CAAA,CAAA;;AAGA,IAAY,aAAL,yBAAA,YAAA;CACL,WAAA,aAAA;CACA,WAAA,YAAA;CACA,WAAA,aAAA;CACA,WAAA,aAAA;CACA,WAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAa,cAAc;CAAC;CAAW;CAAU;CAAW;CAAW;AAAQ;AAG/E,IAAa,cAAc,CAAC,MAAM,IAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../src/components/banner/Banner.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM,qNAuDV,CAAC;
|
|
1
|
+
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../src/components/banner/Banner.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,MAAM,qNAuDV,CAAC;AAIH,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.js","names":[],"sources":["../../../src/components/banner/Banner.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react';\n\nimport ButtonIcon from '../button/button-icon/ButtonIcon.js';\nimport type { BannerProps } from './Banner.types.js';\n\nconst Banner = forwardRef<HTMLElement, BannerProps>(function Banner(\n {\n children,\n className,\n closeLabel,\n defaultOpen = true,\n icon,\n onClose,\n onOpenChange,\n open,\n tone = 'neutral',\n ...asideProps\n },\n ref,\n) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isOpen = open ?? uncontrolledOpen;\n\n function handleClose() {\n if (open === undefined) {\n setUncontrolledOpen(false);\n }\n\n onOpenChange?.(false);\n onClose?.();\n }\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedClassName = ['chayns-banner', `chayns-banner--${tone}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <aside {...asideProps} className={resolvedClassName} ref={ref}>\n {icon ? (\n <span aria-hidden=\"true\" className=\"chayns-banner__icon\">\n <ButtonIcon icon={icon} />\n </span>\n ) : null}\n <div className=\"chayns-banner__content\">{children}</div>\n {onClose ? (\n <button\n aria-label={closeLabel}\n className=\"chayns-banner__close\"\n onClick={handleClose}\n type=\"button\"\n >\n <ButtonIcon icon=\"fa-xmark\" />\n </button>\n ) : null}\n </aside>\n );\n});\n\nexport default Banner;\n"],"mappings":";;;;AAKA,IAAM,SAAS,WAAqC,SAAS,OAC3D,EACE,UACA,WACA,YACA,cAAc,MACd,MACA,SACA,cACA,MACA,OAAO,WACP,GAAG,cAEL,KACA;CACA,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,WAAW;CACpE,MAAM,SAAS,QAAQ;CAEvB,SAAS,cAAc;EACrB,IAAI,SAAS,KAAA,GACX,oBAAoB,KAAK;EAG3B,eAAe,KAAK;EACpB,UAAU;CACZ;CAEA,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,oBAAoB;EAAC;EAAiB,kBAAkB;EAAQ;CAAS,CAAC,CAC7E,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,SAAD;EAAO,GAAI;EAAY,WAAW;EAAwB;EAA1D,UAAA;GACG,OACC,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;IACjC,UAAA,oBAAC,YAAD,EAAkB,KAAO,CAAA;GACrB,CAAA,IACJ;GACJ,oBAAC,OAAD;IAAK,WAAU;IAA0B;GAAc,CAAA;GACtD,UACC,oBAAC,UAAD;IACE,cAAY;IACZ,WAAU;IACV,SAAS;IACT,MAAK;IAEL,UAAA,oBAAC,YAAD,EAAY,MAAK,WAAY,CAAA;GACvB,CAAA,IACN;EACC;;AAEX,CAAC"}
|
|
1
|
+
{"version":3,"file":"Banner.js","names":[],"sources":["../../../src/components/banner/Banner.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react';\n\nimport ButtonIcon from '../button/button-icon/ButtonIcon.js';\nimport type { BannerProps } from './Banner.types.js';\n\nconst Banner = forwardRef<HTMLElement, BannerProps>(function Banner(\n {\n children,\n className,\n closeLabel,\n defaultOpen = true,\n icon,\n onClose,\n onOpenChange,\n open,\n tone = 'neutral',\n ...asideProps\n },\n ref,\n) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isOpen = open ?? uncontrolledOpen;\n\n function handleClose() {\n if (open === undefined) {\n setUncontrolledOpen(false);\n }\n\n onOpenChange?.(false);\n onClose?.();\n }\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedClassName = ['chayns-banner', `chayns-banner--${tone}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <aside {...asideProps} className={resolvedClassName} ref={ref}>\n {icon ? (\n <span aria-hidden=\"true\" className=\"chayns-banner__icon\">\n <ButtonIcon icon={icon} />\n </span>\n ) : null}\n <div className=\"chayns-banner__content\">{children}</div>\n {onClose ? (\n <button\n aria-label={closeLabel}\n className=\"chayns-banner__close\"\n onClick={handleClose}\n type=\"button\"\n >\n <ButtonIcon icon=\"fa-xmark\" />\n </button>\n ) : null}\n </aside>\n );\n});\n\nBanner.displayName = 'Banner';\n\nexport default Banner;\n"],"mappings":";;;;AAKA,IAAM,SAAS,WAAqC,SAAS,OAC3D,EACE,UACA,WACA,YACA,cAAc,MACd,MACA,SACA,cACA,MACA,OAAO,WACP,GAAG,cAEL,KACA;CACA,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,WAAW;CACpE,MAAM,SAAS,QAAQ;CAEvB,SAAS,cAAc;EACrB,IAAI,SAAS,KAAA,GACX,oBAAoB,KAAK;EAG3B,eAAe,KAAK;EACpB,UAAU;CACZ;CAEA,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,oBAAoB;EAAC;EAAiB,kBAAkB;EAAQ;CAAS,CAAC,CAC7E,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,SAAD;EAAO,GAAI;EAAY,WAAW;EAAwB;EAA1D,UAAA;GACG,OACC,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;IACjC,UAAA,oBAAC,YAAD,EAAkB,KAAO,CAAA;GACrB,CAAA,IACJ;GACJ,oBAAC,OAAD;IAAK,WAAU;IAA0B;GAAc,CAAA;GACtD,UACC,oBAAC,UAAD;IACE,cAAY;IACZ,WAAU;IACV,SAAS;IACT,MAAK;IAEL,UAAA,oBAAC,YAAD,EAAY,MAAK,WAAY,CAAA;GACvB,CAAA,IACN;EACC;;AAEX,CAAC;AAED,OAAO,cAAc"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
export declare enum BannerTones {
|
|
4
|
+
Neutral = "neutral",
|
|
5
|
+
Success = "success",
|
|
6
|
+
Warning = "warning",
|
|
7
|
+
Danger = "danger"
|
|
8
|
+
}
|
|
2
9
|
import type { ButtonIcon } from '../button/Button.types.js';
|
|
3
10
|
export declare const BANNER_TONES: readonly ["neutral", "success", "warning", "danger"];
|
|
4
11
|
export type BannerTone = (typeof BANNER_TONES)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.types.d.ts","sourceRoot":"","sources":["../../../src/components/banner/Banner.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,YAAY,sDAAuD,CAAC;AACjF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACzF,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"Banner.types.d.ts","sourceRoot":"","sources":["../../../src/components/banner/Banner.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,2FAA2F;AAC3F,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,YAAY,sDAAuD,CAAC;AACjF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACzF,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
//#region src/components/banner/Banner.types.ts
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
var BannerTones = /* @__PURE__ */ function(BannerTones) {
|
|
4
|
+
BannerTones["Neutral"] = "neutral";
|
|
5
|
+
BannerTones["Success"] = "success";
|
|
6
|
+
BannerTones["Warning"] = "warning";
|
|
7
|
+
BannerTones["Danger"] = "danger";
|
|
8
|
+
return BannerTones;
|
|
9
|
+
}({});
|
|
2
10
|
var BANNER_TONES = [
|
|
3
11
|
"neutral",
|
|
4
12
|
"success",
|
|
@@ -6,6 +14,6 @@ var BANNER_TONES = [
|
|
|
6
14
|
"danger"
|
|
7
15
|
];
|
|
8
16
|
//#endregion
|
|
9
|
-
export { BANNER_TONES };
|
|
17
|
+
export { BANNER_TONES, BannerTones };
|
|
10
18
|
|
|
11
19
|
//# sourceMappingURL=Banner.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.types.js","names":[],"sources":["../../../src/components/banner/Banner.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\nimport type { ButtonIcon } from '../button/Button.types.js';\n\nexport const BANNER_TONES = ['neutral', 'success', 'warning', 'danger'] as const;\nexport type BannerTone = (typeof BANNER_TONES)[number];\n\ninterface BannerBaseProps extends Omit<ComponentPropsWithRef<'aside'>, 'children' | 'role'> {\n children: Exclude<ReactNode, boolean | null | undefined>;\n tone?: BannerTone;\n icon?: ButtonIcon;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n role?: never;\n}\n\nexport interface StaticBannerProps extends BannerBaseProps {\n onClose?: never;\n closeLabel?: never;\n}\n\nexport interface ClosableBannerProps extends BannerBaseProps {\n onClose: () => void;\n closeLabel: string;\n}\n\nexport type BannerProps = StaticBannerProps | ClosableBannerProps;\n"],"mappings":";AAIA,IAAa,eAAe;CAAC;CAAW;CAAW;CAAW;AAAQ"}
|
|
1
|
+
{"version":3,"file":"Banner.types.js","names":[],"sources":["../../../src/components/banner/Banner.types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react';\n\n/** Named configuration values; existing literal props and value lists remain supported. */\nexport enum BannerTones {\n Neutral = 'neutral',\n Success = 'success',\n Warning = 'warning',\n Danger = 'danger',\n}\n\nimport type { ButtonIcon } from '../button/Button.types.js';\n\nexport const BANNER_TONES = ['neutral', 'success', 'warning', 'danger'] as const;\nexport type BannerTone = (typeof BANNER_TONES)[number];\n\ninterface BannerBaseProps extends Omit<ComponentPropsWithRef<'aside'>, 'children' | 'role'> {\n children: Exclude<ReactNode, boolean | null | undefined>;\n tone?: BannerTone;\n icon?: ButtonIcon;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n role?: never;\n}\n\nexport interface StaticBannerProps extends BannerBaseProps {\n onClose?: never;\n closeLabel?: never;\n}\n\nexport interface ClosableBannerProps extends BannerBaseProps {\n onClose: () => void;\n closeLabel: string;\n}\n\nexport type BannerProps = StaticBannerProps | ClosableBannerProps;\n"],"mappings":";;AAGA,IAAY,cAAL,yBAAA,aAAA;CACL,YAAA,aAAA;CACA,YAAA,aAAA;CACA,YAAA,aAAA;CACA,YAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAIA,IAAa,eAAe;CAAC;CAAW;CAAW;CAAW;AAAQ"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BreadcrumbProps } from './Breadcrumb.types.js';
|
|
2
|
+
declare const Breadcrumb: import("react").ForwardRefExoticComponent<Omit<BreadcrumbProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
3
|
+
export default Breadcrumb;
|
|
4
|
+
//# sourceMappingURL=Breadcrumb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,QAAA,MAAM,UAAU,sHAwCd,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import ButtonIcon from "../button/button-icon/ButtonIcon.js";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/breadcrumb/Breadcrumb.tsx
|
|
5
|
+
var Breadcrumb = forwardRef(function Breadcrumb({ className, items, ...navProps }, ref) {
|
|
6
|
+
if (items.some((item, index) => index === items.length - 1 ? item.href !== void 0 : item.href === void 0)) throw new Error("Breadcrumb ancestors require href; only the last item is the current page.");
|
|
7
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
8
|
+
...navProps,
|
|
9
|
+
className: ["chayns-breadcrumb", className].filter(Boolean).join(" "),
|
|
10
|
+
ref,
|
|
11
|
+
children: /* @__PURE__ */ jsx("ol", {
|
|
12
|
+
className: "chayns-breadcrumb__list",
|
|
13
|
+
children: items.map((item, index) => /* @__PURE__ */ jsxs("li", {
|
|
14
|
+
className: "chayns-breadcrumb__item",
|
|
15
|
+
children: [index > 0 ? /* @__PURE__ */ jsx("i", {
|
|
16
|
+
"aria-hidden": "true",
|
|
17
|
+
className: "chayns-breadcrumb__separator far fa-chevron-right"
|
|
18
|
+
}) : null, item.href !== void 0 ? /* @__PURE__ */ jsxs("a", {
|
|
19
|
+
className: "chayns-breadcrumb__link",
|
|
20
|
+
href: item.href,
|
|
21
|
+
children: [item.icon ? /* @__PURE__ */ jsx(ButtonIcon, { icon: item.icon }) : null, item.label]
|
|
22
|
+
}) : /* @__PURE__ */ jsxs("span", {
|
|
23
|
+
"aria-current": "page",
|
|
24
|
+
className: "chayns-breadcrumb__current",
|
|
25
|
+
children: [item.icon ? /* @__PURE__ */ jsx(ButtonIcon, { icon: item.icon }) : null, item.label]
|
|
26
|
+
})]
|
|
27
|
+
}, item.href ?? "current"))
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Breadcrumb as default };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport ButtonIcon from '../button/button-icon/ButtonIcon.js';\nimport type { BreadcrumbProps } from './Breadcrumb.types.js';\n\nconst Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n { className, items, ...navProps },\n ref,\n) {\n if (\n items.some((item, index) =>\n index === items.length - 1 ? item.href !== undefined : item.href === undefined,\n )\n ) {\n throw new Error('Breadcrumb ancestors require href; only the last item is the current page.');\n }\n\n return (\n <nav\n {...navProps}\n className={['chayns-breadcrumb', className].filter(Boolean).join(' ')}\n ref={ref}\n >\n <ol className=\"chayns-breadcrumb__list\">\n {items.map((item, index) => (\n <li className=\"chayns-breadcrumb__item\" key={item.href ?? 'current'}>\n {index > 0 ? (\n <i aria-hidden=\"true\" className=\"chayns-breadcrumb__separator far fa-chevron-right\" />\n ) : null}\n {item.href !== undefined ? (\n <a className=\"chayns-breadcrumb__link\" href={item.href}>\n {item.icon ? <ButtonIcon icon={item.icon} /> : null}\n {item.label}\n </a>\n ) : (\n <span aria-current=\"page\" className=\"chayns-breadcrumb__current\">\n {item.icon ? <ButtonIcon icon={item.icon} /> : null}\n {item.label}\n </span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n );\n});\nBreadcrumb.displayName = 'Breadcrumb';\nexport default Breadcrumb;\n"],"mappings":";;;;AAIA,IAAM,aAAa,WAAyC,SAAS,WACnE,EAAE,WAAW,OAAO,GAAG,YACvB,KACA;CACA,IACE,MAAM,MAAM,MAAM,UAChB,UAAU,MAAM,SAAS,IAAI,KAAK,SAAS,KAAA,IAAY,KAAK,SAAS,KAAA,CACvE,GAEA,MAAM,IAAI,MAAM,4EAA4E;CAG9F,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,WAAW,CAAC,qBAAqB,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAC/D;EAEL,UAAA,oBAAC,MAAD;GAAI,WAAU;GACX,UAAA,MAAM,KAAK,MAAM,UAChB,qBAAC,MAAD;IAAI,WAAU;IAAd,UAAA,CACG,QAAQ,IACP,oBAAC,KAAD;KAAG,eAAY;KAAO,WAAU;IAAqD,CAAA,IACnF,MACH,KAAK,SAAS,KAAA,IACb,qBAAC,KAAD;KAAG,WAAU;KAA0B,MAAM,KAAK;KAAlD,UAAA,CACG,KAAK,OAAO,oBAAC,YAAD,EAAY,MAAM,KAAK,KAAO,CAAA,IAAI,MAC9C,KAAK,KACL;IAEH,CAAA,IAAA,qBAAC,QAAD;KAAM,gBAAa;KAAO,WAAU;KAApC,UAAA,CACG,KAAK,OAAO,oBAAC,YAAD,EAAY,MAAM,KAAK,KAAO,CAAA,IAAI,MAC9C,KAAK,KACF;IAEN,CAAA,CAAA;GAfyC,GAAA,KAAK,QAAQ,SAetD,CACL;EACC,CAAA;CACD,CAAA;AAET,CAAC;AACD,WAAW,cAAc"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
import type { ButtonIcon } from '../button/Button.types.js';
|
|
3
|
+
export interface BreadcrumbItem {
|
|
4
|
+
label: Exclude<ReactNode, boolean | null | undefined>;
|
|
5
|
+
/** Ancestors navigate; the last item omits href and represents the current page. */
|
|
6
|
+
href?: string;
|
|
7
|
+
icon?: ButtonIcon;
|
|
8
|
+
}
|
|
9
|
+
/** Hierarchies of three or more levels; use Tabs for peer content views. */
|
|
10
|
+
export interface BreadcrumbProps extends Omit<ComponentPropsWithRef<'nav'>, 'children'> {
|
|
11
|
+
items: readonly BreadcrumbItem[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Breadcrumb.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumb.types.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/Breadcrumb.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACtD,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACrF,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,QAAA,MAAM,MAAM,wHAoCV,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,QAAA,MAAM,MAAM,wHAoCV,CAAC;AAIH,eAAe,MAAM,CAAC"}
|
|
@@ -19,6 +19,7 @@ var Button = forwardRef(function Button({ "aria-busy": ariaBusy, children, class
|
|
|
19
19
|
children: [loading ? /* @__PURE__ */ jsx(ButtonIcon, { icon: "fa-spinner" }) : icon ? /* @__PURE__ */ jsx(ButtonIcon, { icon }) : null, children]
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
|
+
Button.displayName = "Button";
|
|
22
23
|
//#endregion
|
|
23
24
|
export { Button as default };
|
|
24
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","names":[],"sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["import { forwardRef } from 'react';\n\nimport type { ButtonProps } from './Button.types.js';\nimport ButtonIcon from './button-icon/ButtonIcon.js';\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n 'aria-busy': ariaBusy,\n children,\n className,\n disabled,\n icon,\n loading = false,\n type = 'button',\n variant,\n ...buttonProps\n },\n ref,\n) {\n const resolvedClassName = [\n 'chayns-button',\n `chayns-button--${variant}`,\n loading ? 'chayns-button--loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n {...buttonProps}\n aria-busy={loading ? true : ariaBusy}\n className={resolvedClassName}\n disabled={loading || disabled}\n ref={ref}\n type={type}\n >\n {loading ? <ButtonIcon icon=\"fa-spinner\" /> : icon ? <ButtonIcon icon={icon} /> : null}\n {children}\n </button>\n );\n});\n\nexport default Button;\n"],"mappings":";;;;AAKA,IAAM,SAAS,WAA2C,SAAS,OACjE,EACE,aAAa,UACb,UACA,WACA,UACA,MACA,UAAU,OACV,OAAO,UACP,SACA,GAAG,eAEL,KACA;CACA,MAAM,oBAAoB;EACxB;EACA,kBAAkB;EAClB,UAAU,2BAA2B;EACrC;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,UAAD;EACE,GAAI;EACJ,aAAW,UAAU,OAAO;EAC5B,WAAW;EACX,UAAU,WAAW;EAChB;EACC;EANR,UAAA,CAQG,UAAU,oBAAC,YAAD,EAAY,MAAK,aAAc,CAAA,IAAI,OAAO,oBAAC,YAAD,EAAkB,KAAO,CAAA,IAAI,MACjF,QACK;;AAEZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"Button.js","names":[],"sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["import { forwardRef } from 'react';\n\nimport type { ButtonProps } from './Button.types.js';\nimport ButtonIcon from './button-icon/ButtonIcon.js';\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n 'aria-busy': ariaBusy,\n children,\n className,\n disabled,\n icon,\n loading = false,\n type = 'button',\n variant,\n ...buttonProps\n },\n ref,\n) {\n const resolvedClassName = [\n 'chayns-button',\n `chayns-button--${variant}`,\n loading ? 'chayns-button--loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n {...buttonProps}\n aria-busy={loading ? true : ariaBusy}\n className={resolvedClassName}\n disabled={loading || disabled}\n ref={ref}\n type={type}\n >\n {loading ? <ButtonIcon icon=\"fa-spinner\" /> : icon ? <ButtonIcon icon={icon} /> : null}\n {children}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nexport default Button;\n"],"mappings":";;;;AAKA,IAAM,SAAS,WAA2C,SAAS,OACjE,EACE,aAAa,UACb,UACA,WACA,UACA,MACA,UAAU,OACV,OAAO,UACP,SACA,GAAG,eAEL,KACA;CACA,MAAM,oBAAoB;EACxB;EACA,kBAAkB;EAClB,UAAU,2BAA2B;EACrC;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,UAAD;EACE,GAAI;EACJ,aAAW,UAAU,OAAO;EAC5B,WAAW;EACX,UAAU,WAAW;EAChB;EACC;EANR,UAAA,CAQG,UAAU,oBAAC,YAAD,EAAY,MAAK,aAAc,CAAA,IAAI,OAAO,oBAAC,YAAD,EAAkB,KAAO,CAAA,IAAI,MACjF,QACK;;AAEZ,CAAC;AAED,OAAO,cAAc"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
/** Named configuration values; existing literal props and value lists remain supported. */
|
|
3
|
+
export declare enum ButtonVariants {
|
|
4
|
+
Primary = "primary",
|
|
5
|
+
Outline = "outline",
|
|
6
|
+
Ghost = "ghost",
|
|
7
|
+
Danger = "danger"
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
10
|
* @description Supported visual emphasis levels for {@link ButtonProps} and
|
|
4
11
|
* `IconButtonProps`. Milestone 1 supports exactly these four values; there is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.types.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,eAAe,oDAKiB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;AAE9E;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACpF;;;;;OAKG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,EAAE,aAAa,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"Button.types.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,2FAA2F;AAC3F,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,eAAe,oDAKiB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;AAE9E;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACpF;;;;;OAKG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,EAAE,aAAa,CAAC;CACzB"}
|