@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":"TextField.js","names":[],"sources":["../../../src/components/text-field/TextField.tsx"],"sourcesContent":["import { forwardRef, useId } from 'react';\n\nimport type { TextFieldProps } from './TextField.types.js';\n\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\n { className, counter, error, helpText, id, placeholder, ...inputProps },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const hasError = error !== undefined;\n const helpId = helpText !== undefined ? `${inputId}-help` : undefined;\n const errorId = hasError ? `${inputId}-error` : undefined;\n const describedBy = [helpId, errorId].filter(Boolean).join(' ') || undefined;\n const inputClassName = ['chayns-text-field__input', className].filter(Boolean).join(' ');\n\n return (\n <div className={`chayns-text-field${hasError ? ' chayns-text-field--error' : ''}`}>\n <input\n {...inputProps}\n aria-describedby={describedBy}\n aria-invalid={hasError || undefined}\n className={inputClassName}\n id={inputId}\n placeholder={placeholder === undefined ? undefined : ' '}\n ref={ref}\n />\n {placeholder !== undefined ? (\n <label className=\"chayns-text-field__label\" htmlFor={inputId}>\n {placeholder}\n </label>\n ) : null}\n {helpText !== undefined || hasError || counter !== undefined ? (\n <div className=\"chayns-text-field__help\">\n <div>\n {helpText !== undefined ? <div id={helpId}>{helpText}</div> : null}\n {hasError ? (\n <div className=\"chayns-text-field__error\" id={errorId}>\n {error}\n </div>\n ) : null}\n </div>\n {counter !== undefined ? <div>{counter}</div> : null}\n </div>\n ) : null}\n </div>\n );\n});\n\nexport default TextField;\n"],"mappings":";;;AAIA,IAAM,YAAY,WAA6C,SAAS,UACtE,EAAE,WAAW,SAAS,OAAO,UAAU,IAAI,aAAa,GAAG,cAC3D,KACA;CACA,MAAM,cAAc,MAAM;CAC1B,MAAM,UAAU,MAAM;CACtB,MAAM,WAAW,UAAU,KAAA;CAC3B,MAAM,SAAS,aAAa,KAAA,IAAY,GAAG,QAAQ,SAAS,KAAA;CAC5D,MAAM,UAAU,WAAW,GAAG,QAAQ,UAAU,KAAA;CAChD,MAAM,cAAc,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CACnE,MAAM,iBAAiB,CAAC,4BAA4B,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEvF,OACE,qBAAC,OAAD;EAAK,WAAW,oBAAoB,WAAW,8BAA8B;EAA7E,UAAA;GACE,oBAAC,SAAD;IACE,GAAI;IACJ,oBAAkB;IAClB,gBAAc,YAAY,KAAA;IAC1B,WAAW;IACX,IAAI;IACJ,aAAa,gBAAgB,KAAA,IAAY,KAAA,IAAY;IAChD;GACN,CAAA;GACA,gBAAgB,KAAA,IACf,oBAAC,SAAD;IAAO,WAAU;IAA2B,SAAS;IAClD,UAAA;GACI,CAAA,IACL;GACH,aAAa,KAAA,KAAa,YAAY,YAAY,KAAA,IACjD,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,OAAD,EAAA,UAAA,CACG,aAAa,KAAA,IAAY,oBAAC,OAAD;KAAK,IAAI;KAAS,UAAA;IAAc,CAAA,IAAI,MAC7D,WACC,oBAAC,OAAD;KAAK,WAAU;KAA2B,IAAI;KAC3C,UAAA;IACE,CAAA,IACH,IACD,EAAA,CAAA,GACJ,YAAY,KAAA,IAAY,oBAAC,OAAD,EAAA,UAAM,QAAa,CAAA,IAAI,IAC7C;GACH,CAAA,IAAA;EACD;;AAET,CAAC"}
|
|
1
|
+
{"version":3,"file":"TextField.js","names":[],"sources":["../../../src/components/text-field/TextField.tsx"],"sourcesContent":["import { forwardRef, useId } from 'react';\n\nimport type { TextFieldProps } from './TextField.types.js';\n\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(function TextField(\n { className, counter, error, helpText, id, placeholder, ...inputProps },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const hasError = error !== undefined;\n const helpId = helpText !== undefined ? `${inputId}-help` : undefined;\n const errorId = hasError ? `${inputId}-error` : undefined;\n const describedBy = [helpId, errorId].filter(Boolean).join(' ') || undefined;\n const inputClassName = ['chayns-text-field__input', className].filter(Boolean).join(' ');\n\n return (\n <div className={`chayns-text-field${hasError ? ' chayns-text-field--error' : ''}`}>\n <input\n {...inputProps}\n aria-describedby={describedBy}\n aria-invalid={hasError || undefined}\n className={inputClassName}\n id={inputId}\n placeholder={placeholder === undefined ? undefined : ' '}\n ref={ref}\n />\n {placeholder !== undefined ? (\n <label className=\"chayns-text-field__label\" htmlFor={inputId}>\n {placeholder}\n </label>\n ) : null}\n {helpText !== undefined || hasError || counter !== undefined ? (\n <div className=\"chayns-text-field__help\">\n <div>\n {helpText !== undefined ? <div id={helpId}>{helpText}</div> : null}\n {hasError ? (\n <div className=\"chayns-text-field__error\" id={errorId}>\n {error}\n </div>\n ) : null}\n </div>\n {counter !== undefined ? <div>{counter}</div> : null}\n </div>\n ) : null}\n </div>\n );\n});\n\nTextField.displayName = 'TextField';\n\nexport default TextField;\n"],"mappings":";;;AAIA,IAAM,YAAY,WAA6C,SAAS,UACtE,EAAE,WAAW,SAAS,OAAO,UAAU,IAAI,aAAa,GAAG,cAC3D,KACA;CACA,MAAM,cAAc,MAAM;CAC1B,MAAM,UAAU,MAAM;CACtB,MAAM,WAAW,UAAU,KAAA;CAC3B,MAAM,SAAS,aAAa,KAAA,IAAY,GAAG,QAAQ,SAAS,KAAA;CAC5D,MAAM,UAAU,WAAW,GAAG,QAAQ,UAAU,KAAA;CAChD,MAAM,cAAc,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CACnE,MAAM,iBAAiB,CAAC,4BAA4B,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEvF,OACE,qBAAC,OAAD;EAAK,WAAW,oBAAoB,WAAW,8BAA8B;EAA7E,UAAA;GACE,oBAAC,SAAD;IACE,GAAI;IACJ,oBAAkB;IAClB,gBAAc,YAAY,KAAA;IAC1B,WAAW;IACX,IAAI;IACJ,aAAa,gBAAgB,KAAA,IAAY,KAAA,IAAY;IAChD;GACN,CAAA;GACA,gBAAgB,KAAA,IACf,oBAAC,SAAD;IAAO,WAAU;IAA2B,SAAS;IAClD,UAAA;GACI,CAAA,IACL;GACH,aAAa,KAAA,KAAa,YAAY,YAAY,KAAA,IACjD,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,OAAD,EAAA,UAAA,CACG,aAAa,KAAA,IAAY,oBAAC,OAAD;KAAK,IAAI;KAAS,UAAA;IAAc,CAAA,IAAI,MAC7D,WACC,oBAAC,OAAD;KAAK,WAAU;KAA2B,IAAI;KAC3C,UAAA;IACE,CAAA,IACH,IACD,EAAA,CAAA,GACJ,YAAY,KAAA,IAAY,oBAAC,OAAD,EAAA,UAAM,QAAa,CAAA,IAAI,IAC7C;GACH,CAAA,IAAA;EACD;;AAET,CAAC;AAED,UAAU,cAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/Tooltip.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAK5E,QAAA,MAAM,OAAO,sGAiFX,CAAC;AAEH,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { composeNativeRefs } from "../../utils/native-ref.js";
|
|
2
|
+
import { useOverlayPosition } from "../../hooks/useOverlayPosition.js";
|
|
3
|
+
import { useTooltipInteraction } from "./hooks/useTooltipInteraction.js";
|
|
4
|
+
import { tooltipTriggerProps } from "./tooltip-trigger-props.js";
|
|
5
|
+
import { Fragment, cloneElement, forwardRef, isValidElement, useId, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { createPortal } from "react-dom";
|
|
8
|
+
//#region src/components/tooltip/Tooltip.tsx
|
|
9
|
+
var ANCHOR_GAP = 9;
|
|
10
|
+
var Tooltip = forwardRef(function Tooltip({ children, content, ...nativeProps }, ref) {
|
|
11
|
+
const id = useId();
|
|
12
|
+
const [trigger, setTrigger] = useState(null);
|
|
13
|
+
const surface = useRef(null);
|
|
14
|
+
const interaction = useTooltipInteraction(trigger, surface);
|
|
15
|
+
useOverlayPosition(surface, trigger, interaction.open, "top", ANCHOR_GAP);
|
|
16
|
+
const child = isValidElement(children) ? children : void 0;
|
|
17
|
+
const descriptorRef = child ? Object.getOwnPropertyDescriptor(child, "ref")?.value : void 0;
|
|
18
|
+
const childRef = child?.props.ref ?? descriptorRef;
|
|
19
|
+
const mergedRef = useMemo(() => composeNativeRefs(childRef, setTrigger, ref), [childRef, ref]);
|
|
20
|
+
if (!child || child.type === Fragment || child.props.disabled) throw new Error("Tooltip requires one enabled ref-/native-prop-capable trigger element.");
|
|
21
|
+
const props = tooltipTriggerProps(child.props, nativeProps);
|
|
22
|
+
const description = [...new Set([
|
|
23
|
+
child.props["aria-describedby"],
|
|
24
|
+
nativeProps["aria-describedby"],
|
|
25
|
+
id
|
|
26
|
+
].filter(Boolean).flatMap((value) => value?.split(/\s+/) ?? []))].join(" ");
|
|
27
|
+
const triggerProps = {
|
|
28
|
+
...props,
|
|
29
|
+
ref: mergedRef,
|
|
30
|
+
"aria-describedby": description,
|
|
31
|
+
onPointerEnter: (event) => {
|
|
32
|
+
props.onPointerEnter?.(event);
|
|
33
|
+
if (!event.defaultPrevented) interaction.enter();
|
|
34
|
+
},
|
|
35
|
+
onPointerLeave: (event) => {
|
|
36
|
+
props.onPointerLeave?.(event);
|
|
37
|
+
if (!event.defaultPrevented) interaction.leave(event.relatedTarget);
|
|
38
|
+
},
|
|
39
|
+
onFocus: (event) => {
|
|
40
|
+
props.onFocus?.(event);
|
|
41
|
+
if (!event.defaultPrevented) interaction.focus();
|
|
42
|
+
},
|
|
43
|
+
onBlur: (event) => {
|
|
44
|
+
props.onBlur?.(event);
|
|
45
|
+
if (!event.defaultPrevented) interaction.blur();
|
|
46
|
+
},
|
|
47
|
+
onClick: (event) => {
|
|
48
|
+
props.onClick?.(event);
|
|
49
|
+
if (!event.defaultPrevented) interaction.enter();
|
|
50
|
+
},
|
|
51
|
+
onKeyDown: (event) => {
|
|
52
|
+
props.onKeyDown?.(event);
|
|
53
|
+
if (!event.defaultPrevented && interaction.open && event.key === "Escape") {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
event.stopPropagation();
|
|
56
|
+
interaction.dismiss();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const triggerElement = cloneElement(child, triggerProps);
|
|
61
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [triggerElement, trigger && typeof document !== "undefined" ? createPortal(/* @__PURE__ */ jsx("span", {
|
|
62
|
+
"aria-hidden": !interaction.open,
|
|
63
|
+
className: `chayns-tooltip${interaction.open ? " chayns-tooltip--open" : ""}`,
|
|
64
|
+
id,
|
|
65
|
+
onPointerLeave: (event) => interaction.leave(event.relatedTarget),
|
|
66
|
+
ref: surface,
|
|
67
|
+
role: "tooltip",
|
|
68
|
+
children: content
|
|
69
|
+
}), document.body) : null] });
|
|
70
|
+
});
|
|
71
|
+
Tooltip.displayName = "Tooltip";
|
|
72
|
+
//#endregion
|
|
73
|
+
export { Tooltip as default };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","names":[],"sources":["../../../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import {\n cloneElement,\n forwardRef,\n Fragment,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { Ref } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useOverlayPosition } from '../../hooks/useOverlayPosition.js';\nimport { composeNativeRefs } from '../../utils/native-ref.js';\nimport { useTooltipInteraction } from './hooks/useTooltipInteraction.js';\nimport { tooltipTriggerProps } from './tooltip-trigger-props.js';\nimport type { TooltipProps, TooltipTriggerProps } from './Tooltip.types.js';\n\n// Fixed anchor gap in the verified Bodywork .tipbox reference.\nconst ANCHOR_GAP = 9;\n\nconst Tooltip = forwardRef<HTMLElement, TooltipProps>(function Tooltip(\n { children, content, ...nativeProps },\n ref,\n) {\n const id = useId();\n const [trigger, setTrigger] = useState<HTMLElement | null>(null);\n const surface = useRef<HTMLSpanElement>(null);\n const interaction = useTooltipInteraction(trigger, surface);\n useOverlayPosition(surface, trigger, interaction.open, 'top', ANCHOR_GAP);\n\n const child = isValidElement<TooltipTriggerProps>(children) ? children : undefined;\n const descriptorRef = child\n ? (Object.getOwnPropertyDescriptor(child, 'ref')?.value as Ref<HTMLElement> | undefined)\n : undefined;\n const childRef = child?.props.ref ?? descriptorRef;\n const mergedRef = useMemo(() => composeNativeRefs(childRef, setTrigger, ref), [childRef, ref]);\n if (!child || child.type === Fragment || child.props.disabled)\n throw new Error('Tooltip requires one enabled ref-/native-prop-capable trigger element.');\n\n const props = tooltipTriggerProps(child.props, nativeProps);\n const description = [\n ...new Set(\n [child.props['aria-describedby'], nativeProps['aria-describedby'], id]\n .filter(Boolean)\n .flatMap((value) => value?.split(/\\s+/) ?? []),\n ),\n ].join(' ');\n const triggerProps: TooltipTriggerProps = {\n ...props,\n ref: mergedRef,\n 'aria-describedby': description,\n onPointerEnter: (event) => {\n props.onPointerEnter?.(event);\n if (!event.defaultPrevented) interaction.enter();\n },\n onPointerLeave: (event) => {\n props.onPointerLeave?.(event);\n if (!event.defaultPrevented) interaction.leave(event.relatedTarget);\n },\n onFocus: (event) => {\n props.onFocus?.(event);\n if (!event.defaultPrevented) interaction.focus();\n },\n onBlur: (event) => {\n props.onBlur?.(event);\n if (!event.defaultPrevented) interaction.blur();\n },\n onClick: (event) => {\n props.onClick?.(event);\n if (!event.defaultPrevented) interaction.enter();\n },\n onKeyDown: (event) => {\n props.onKeyDown?.(event);\n if (!event.defaultPrevented && interaction.open && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n interaction.dismiss();\n }\n },\n };\n const triggerElement = cloneElement(child, triggerProps);\n return (\n <>\n {triggerElement}\n {trigger && typeof document !== 'undefined'\n ? createPortal(\n <span\n aria-hidden={!interaction.open}\n className={`chayns-tooltip${interaction.open ? ' chayns-tooltip--open' : ''}`}\n id={id}\n onPointerLeave={(event) => interaction.leave(event.relatedTarget)}\n ref={surface}\n role=\"tooltip\"\n >\n {content}\n </span>,\n document.body,\n )\n : null}\n </>\n );\n});\nTooltip.displayName = 'Tooltip';\nexport default Tooltip;\n"],"mappings":";;;;;;;;AAmBA,IAAM,aAAa;AAEnB,IAAM,UAAU,WAAsC,SAAS,QAC7D,EAAE,UAAU,SAAS,GAAG,eACxB,KACA;CACA,MAAM,KAAK,MAAM;CACjB,MAAM,CAAC,SAAS,cAAc,SAA6B,IAAI;CAC/D,MAAM,UAAU,OAAwB,IAAI;CAC5C,MAAM,cAAc,sBAAsB,SAAS,OAAO;CAC1D,mBAAmB,SAAS,SAAS,YAAY,MAAM,OAAO,UAAU;CAExE,MAAM,QAAQ,eAAoC,QAAQ,IAAI,WAAW,KAAA;CACzE,MAAM,gBAAgB,QACjB,OAAO,yBAAyB,OAAO,KAAK,CAAC,EAAE,QAChD,KAAA;CACJ,MAAM,WAAW,OAAO,MAAM,OAAO;CACrC,MAAM,YAAY,cAAc,kBAAkB,UAAU,YAAY,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC;CAC7F,IAAI,CAAC,SAAS,MAAM,SAAS,YAAY,MAAM,MAAM,UACnD,MAAM,IAAI,MAAM,wEAAwE;CAE1F,MAAM,QAAQ,oBAAoB,MAAM,OAAO,WAAW;CAC1D,MAAM,cAAc,CAClB,GAAG,IAAI,IACL;EAAC,MAAM,MAAM;EAAqB,YAAY;EAAqB;CAAE,CAAC,CACnE,OAAO,OAAO,CAAC,CACf,SAAS,UAAU,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CACjD,CACF,CAAC,CAAC,KAAK,GAAG;CACV,MAAM,eAAoC;EACxC,GAAG;EACH,KAAK;EACL,oBAAoB;EACpB,iBAAiB,UAAU;GACzB,MAAM,iBAAiB,KAAK;GAC5B,IAAI,CAAC,MAAM,kBAAkB,YAAY,MAAM;EACjD;EACA,iBAAiB,UAAU;GACzB,MAAM,iBAAiB,KAAK;GAC5B,IAAI,CAAC,MAAM,kBAAkB,YAAY,MAAM,MAAM,aAAa;EACpE;EACA,UAAU,UAAU;GAClB,MAAM,UAAU,KAAK;GACrB,IAAI,CAAC,MAAM,kBAAkB,YAAY,MAAM;EACjD;EACA,SAAS,UAAU;GACjB,MAAM,SAAS,KAAK;GACpB,IAAI,CAAC,MAAM,kBAAkB,YAAY,KAAK;EAChD;EACA,UAAU,UAAU;GAClB,MAAM,UAAU,KAAK;GACrB,IAAI,CAAC,MAAM,kBAAkB,YAAY,MAAM;EACjD;EACA,YAAY,UAAU;GACpB,MAAM,YAAY,KAAK;GACvB,IAAI,CAAC,MAAM,oBAAoB,YAAY,QAAQ,MAAM,QAAQ,UAAU;IACzE,MAAM,eAAe;IACrB,MAAM,gBAAgB;IACtB,YAAY,QAAQ;GACtB;EACF;CACF;CACA,MAAM,iBAAiB,aAAa,OAAO,YAAY;CACvD,OACE,qBAAA,YAAA,EAAA,UAAA,CACG,gBACA,WAAW,OAAO,aAAa,cAC5B,aACE,oBAAC,QAAD;EACE,eAAa,CAAC,YAAY;EAC1B,WAAW,iBAAiB,YAAY,OAAO,0BAA0B;EACrE;EACJ,iBAAiB,UAAU,YAAY,MAAM,MAAM,aAAa;EAChE,KAAK;EACL,MAAK;EAEJ,UAAA;CACG,CAAA,GACN,SAAS,IACX,IACA,IACJ,EAAA,CAAA;AAEN,CAAC;AACD,QAAQ,cAAc"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactElement, ReactNode, Ref } from 'react';
|
|
2
|
+
export interface TooltipTriggerProps extends HTMLAttributes<HTMLElement> {
|
|
3
|
+
ref?: Ref<HTMLElement>;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/** Explains one existing enabled trigger without changing its native action. */
|
|
7
|
+
export interface TooltipProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'content'> {
|
|
8
|
+
children: ReactElement<TooltipTriggerProps>;
|
|
9
|
+
/** Already localized non-interactive explanation; never essential instructions or actions. */
|
|
10
|
+
content: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Tooltip.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.types.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/Tooltip.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE1E,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7F,QAAQ,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAC;IAC5C,8FAA8F;IAC9F,OAAO,EAAE,SAAS,CAAC;CACpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
/** Tracks focus/hover independently, including Escape suppression and outside dismissal. */
|
|
3
|
+
export declare function useTooltipInteraction(trigger: HTMLElement | null, surface: RefObject<HTMLSpanElement | null>): {
|
|
4
|
+
open: boolean;
|
|
5
|
+
enter: () => void;
|
|
6
|
+
leave: (relatedTarget: EventTarget | null) => void;
|
|
7
|
+
focus: () => void;
|
|
8
|
+
blur: () => void;
|
|
9
|
+
dismiss: () => void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useTooltipInteraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTooltipInteraction.d.ts","sourceRoot":"","sources":["../../../../src/components/tooltip/hooks/useTooltipInteraction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,4FAA4F;AAC5F,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,OAAO,EAAE,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;;;2BAQZ,WAAW,GAAG,IAAI;;;;EAuCjD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
//#region src/components/tooltip/hooks/useTooltipInteraction.ts
|
|
3
|
+
/** Tracks focus/hover independently, including Escape suppression and outside dismissal. */
|
|
4
|
+
function useTooltipInteraction(trigger, surface) {
|
|
5
|
+
const [open, setOpen] = useState(false);
|
|
6
|
+
const focused = useRef(false);
|
|
7
|
+
function enter() {
|
|
8
|
+
setOpen(true);
|
|
9
|
+
}
|
|
10
|
+
function leave(relatedTarget) {
|
|
11
|
+
if (relatedTarget instanceof Node && (surface.current?.contains(relatedTarget) || trigger?.contains(relatedTarget))) return;
|
|
12
|
+
if (!focused.current) setOpen(false);
|
|
13
|
+
}
|
|
14
|
+
function dismiss() {
|
|
15
|
+
setOpen(false);
|
|
16
|
+
}
|
|
17
|
+
function focus() {
|
|
18
|
+
focused.current = true;
|
|
19
|
+
enter();
|
|
20
|
+
}
|
|
21
|
+
function blur() {
|
|
22
|
+
focused.current = false;
|
|
23
|
+
setOpen(false);
|
|
24
|
+
}
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!open) return void 0;
|
|
27
|
+
function keyDown(event) {
|
|
28
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
29
|
+
setOpen(false);
|
|
30
|
+
}
|
|
31
|
+
function pointerDown(event) {
|
|
32
|
+
if (event.defaultPrevented || !(event.target instanceof Node)) return;
|
|
33
|
+
if (trigger?.contains(event.target) || surface.current?.contains(event.target)) return;
|
|
34
|
+
setOpen(false);
|
|
35
|
+
}
|
|
36
|
+
document.addEventListener("keydown", keyDown);
|
|
37
|
+
document.addEventListener("pointerdown", pointerDown);
|
|
38
|
+
return () => {
|
|
39
|
+
document.removeEventListener("keydown", keyDown);
|
|
40
|
+
document.removeEventListener("pointerdown", pointerDown);
|
|
41
|
+
};
|
|
42
|
+
}, [
|
|
43
|
+
open,
|
|
44
|
+
surface,
|
|
45
|
+
trigger
|
|
46
|
+
]);
|
|
47
|
+
return {
|
|
48
|
+
open,
|
|
49
|
+
enter,
|
|
50
|
+
leave,
|
|
51
|
+
focus,
|
|
52
|
+
blur,
|
|
53
|
+
dismiss
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { useTooltipInteraction };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=useTooltipInteraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTooltipInteraction.js","names":[],"sources":["../../../../src/components/tooltip/hooks/useTooltipInteraction.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { RefObject } from 'react';\n\n/** Tracks focus/hover independently, including Escape suppression and outside dismissal. */\nexport function useTooltipInteraction(\n trigger: HTMLElement | null,\n surface: RefObject<HTMLSpanElement | null>,\n) {\n const [open, setOpen] = useState(false);\n const focused = useRef(false);\n\n function enter() {\n setOpen(true);\n }\n function leave(relatedTarget: EventTarget | null) {\n if (\n relatedTarget instanceof Node &&\n (surface.current?.contains(relatedTarget) || trigger?.contains(relatedTarget))\n )\n return;\n if (!focused.current) setOpen(false);\n }\n function dismiss() {\n setOpen(false);\n }\n function focus() {\n focused.current = true;\n enter();\n }\n function blur() {\n focused.current = false;\n setOpen(false);\n }\n\n useEffect(() => {\n if (!open) return undefined;\n function keyDown(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n setOpen(false);\n }\n function pointerDown(event: PointerEvent) {\n if (event.defaultPrevented || !(event.target instanceof Node)) return;\n if (trigger?.contains(event.target) || surface.current?.contains(event.target)) return;\n setOpen(false);\n }\n document.addEventListener('keydown', keyDown);\n document.addEventListener('pointerdown', pointerDown);\n return () => {\n document.removeEventListener('keydown', keyDown);\n document.removeEventListener('pointerdown', pointerDown);\n };\n }, [open, surface, trigger]);\n return { open, enter, leave, focus, blur, dismiss };\n}\n"],"mappings":";;;AAIA,SAAgB,sBACd,SACA,SACA;CACA,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,UAAU,OAAO,KAAK;CAE5B,SAAS,QAAQ;EACf,QAAQ,IAAI;CACd;CACA,SAAS,MAAM,eAAmC;EAChD,IACE,yBAAyB,SACxB,QAAQ,SAAS,SAAS,aAAa,KAAK,SAAS,SAAS,aAAa,IAE5E;EACF,IAAI,CAAC,QAAQ,SAAS,QAAQ,KAAK;CACrC;CACA,SAAS,UAAU;EACjB,QAAQ,KAAK;CACf;CACA,SAAS,QAAQ;EACf,QAAQ,UAAU;EAClB,MAAM;CACR;CACA,SAAS,OAAO;EACd,QAAQ,UAAU;EAClB,QAAQ,KAAK;CACf;CAEA,gBAAgB;EACd,IAAI,CAAC,MAAM,OAAO,KAAA;EAClB,SAAS,QAAQ,OAAsB;GACrC,IAAI,MAAM,QAAQ,YAAY,MAAM,kBAAkB;GACtD,QAAQ,KAAK;EACf;EACA,SAAS,YAAY,OAAqB;GACxC,IAAI,MAAM,oBAAoB,EAAE,MAAM,kBAAkB,OAAO;GAC/D,IAAI,SAAS,SAAS,MAAM,MAAM,KAAK,QAAQ,SAAS,SAAS,MAAM,MAAM,GAAG;GAChF,QAAQ,KAAK;EACf;EACA,SAAS,iBAAiB,WAAW,OAAO;EAC5C,SAAS,iBAAiB,eAAe,WAAW;EACpD,aAAa;GACX,SAAS,oBAAoB,WAAW,OAAO;GAC/C,SAAS,oBAAoB,eAAe,WAAW;EACzD;CACF,GAAG;EAAC;EAAM;EAAS;CAAO,CAAC;CAC3B,OAAO;EAAE;EAAM;EAAO;EAAO;EAAO;EAAM;CAAQ;AACpD"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
/** Preserve child listeners before outer listeners for every shared native event. */
|
|
3
|
+
export declare function tooltipTriggerProps(child: HTMLAttributes<HTMLElement>, outer: HTMLAttributes<HTMLElement>): HTMLAttributes<HTMLElement>;
|
|
4
|
+
//# sourceMappingURL=tooltip-trigger-props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip-trigger-props.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip-trigger-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAC;AAI5D,qFAAqF;AACrF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,EAClC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,GAcjB,cAAc,CAAC,WAAW,CAAC,CAC7C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/components/tooltip/tooltip-trigger-props.ts
|
|
2
|
+
/** Preserve child listeners before outer listeners for every shared native event. */
|
|
3
|
+
function tooltipTriggerProps(child, outer) {
|
|
4
|
+
const merged = {
|
|
5
|
+
...child,
|
|
6
|
+
...outer
|
|
7
|
+
};
|
|
8
|
+
for (const [name, listener] of Object.entries(outer)) {
|
|
9
|
+
const previous = child[name];
|
|
10
|
+
if (/^on[A-Z]/.test(name) && typeof previous === "function" && typeof listener === "function") merged[name] = (event) => {
|
|
11
|
+
previous(event);
|
|
12
|
+
if (!event.defaultPrevented) listener(event);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
merged.className = [child.className, outer.className].filter(Boolean).join(" ") || void 0;
|
|
16
|
+
merged.style = {
|
|
17
|
+
...child.style,
|
|
18
|
+
...outer.style
|
|
19
|
+
};
|
|
20
|
+
return merged;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { tooltipTriggerProps };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=tooltip-trigger-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip-trigger-props.js","names":[],"sources":["../../../src/components/tooltip/tooltip-trigger-props.ts"],"sourcesContent":["import type { HTMLAttributes, SyntheticEvent } from 'react';\n\ntype Handler = (event: SyntheticEvent<HTMLElement>) => void;\n\n/** Preserve child listeners before outer listeners for every shared native event. */\nexport function tooltipTriggerProps(\n child: HTMLAttributes<HTMLElement>,\n outer: HTMLAttributes<HTMLElement>,\n) {\n const merged: Record<string, unknown> = { ...child, ...outer };\n for (const [name, listener] of Object.entries(outer)) {\n const previous = (child as Record<string, unknown>)[name];\n if (/^on[A-Z]/.test(name) && typeof previous === 'function' && typeof listener === 'function') {\n merged[name] = (event: SyntheticEvent<HTMLElement>) => {\n (previous as Handler)(event);\n if (!event.defaultPrevented) (listener as Handler)(event);\n };\n }\n }\n merged.className = [child.className, outer.className].filter(Boolean).join(' ') || undefined;\n merged.style = { ...child.style, ...outer.style };\n return merged as HTMLAttributes<HTMLElement>;\n}\n"],"mappings":";;AAKA,SAAgB,oBACd,OACA,OACA;CACA,MAAM,SAAkC;EAAE,GAAG;EAAO,GAAG;CAAM;CAC7D,KAAK,MAAM,CAAC,MAAM,aAAa,OAAO,QAAQ,KAAK,GAAG;EACpD,MAAM,WAAY,MAAkC;EACpD,IAAI,WAAW,KAAK,IAAI,KAAK,OAAO,aAAa,cAAc,OAAO,aAAa,YACjF,OAAO,SAAS,UAAuC;GACrD,SAAsB,KAAK;GAC3B,IAAI,CAAC,MAAM,kBAAkB,SAAsB,KAAK;EAC1D;CAEJ;CACA,OAAO,YAAY,CAAC,MAAM,WAAW,MAAM,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CACnF,OAAO,QAAQ;EAAE,GAAG,MAAM;EAAO,GAAG,MAAM;CAAM;CAChD,OAAO;AACT"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer chayns.components {
|
|
2
2
|
.chayns-date-time-picker {
|
|
3
|
-
display: inline-
|
|
3
|
+
display: inline-grid;
|
|
4
4
|
max-inline-size: 100%;
|
|
5
5
|
position: relative;
|
|
6
6
|
}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
|
|
12
12
|
.chayns-date-time-picker__trigger {
|
|
13
13
|
box-sizing: border-box;
|
|
14
|
+
grid-area: 1 / 1;
|
|
15
|
+
inline-size: 100%;
|
|
14
16
|
max-inline-size: 100%;
|
|
15
17
|
min-block-size: calc(1.2em + 2 * var(--input-py) + 3px);
|
|
16
18
|
padding: var(--input-py) var(--input-px);
|
|
@@ -25,6 +27,21 @@
|
|
|
25
27
|
text-align: start;
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
.chayns-date-time-picker__sizer {
|
|
31
|
+
display: grid;
|
|
32
|
+
grid-area: 1 / 1;
|
|
33
|
+
visibility: hidden;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.chayns-date-time-picker__sizer > span {
|
|
38
|
+
grid-area: 1 / 1;
|
|
39
|
+
padding: var(--input-py) var(--input-px);
|
|
40
|
+
border: 1.5px solid transparent;
|
|
41
|
+
font: inherit;
|
|
42
|
+
line-height: 1.2;
|
|
43
|
+
}
|
|
44
|
+
|
|
28
45
|
.chayns-date-time-picker__trigger:focus-visible {
|
|
29
46
|
border-color: var(--accent);
|
|
30
47
|
box-shadow: 0 0 0 var(--focus-ring-size)
|
|
@@ -53,10 +70,13 @@
|
|
|
53
70
|
}
|
|
54
71
|
|
|
55
72
|
.chayns-date-time-picker__popup {
|
|
73
|
+
box-sizing: border-box;
|
|
56
74
|
position: absolute;
|
|
57
75
|
inset-block-start: calc(100% + var(--k4));
|
|
58
|
-
inset-inline: 0;
|
|
76
|
+
inset-inline-start: 0;
|
|
59
77
|
z-index: var(--z-popover);
|
|
78
|
+
inline-size: max-content;
|
|
79
|
+
min-inline-size: 100%;
|
|
60
80
|
overflow: hidden;
|
|
61
81
|
padding: var(--k8);
|
|
62
82
|
border: 1px solid var(--border);
|
|
@@ -118,4 +138,15 @@
|
|
|
118
138
|
transform-origin: center;
|
|
119
139
|
transform-style: preserve-3d;
|
|
120
140
|
}
|
|
141
|
+
|
|
142
|
+
.chayns-date-time-picker--date .chayns-date-time-picker__wheel {
|
|
143
|
+
flex: 0 0 auto;
|
|
144
|
+
min-inline-size: max-content;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.chayns-date-time-picker--date .chayns-date-time-picker__wheel-option {
|
|
148
|
+
inline-size: max-content;
|
|
149
|
+
min-inline-size: 100%;
|
|
150
|
+
padding-inline: var(--k8);
|
|
151
|
+
}
|
|
121
152
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
/** Positions a non-modal surface at its trigger and keeps it inside the viewport. */
|
|
3
|
+
export declare function useOverlayPosition(surfaceRef: RefObject<HTMLElement | null>, trigger: HTMLElement | null, open: boolean, placement?: 'bottom' | 'top', gap?: number): void;
|
|
4
|
+
//# sourceMappingURL=useOverlayPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOverlayPosition.d.ts","sourceRoot":"","sources":["../../src/hooks/useOverlayPosition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,qFAAqF;AACrF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACzC,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,IAAI,EAAE,OAAO,EACb,SAAS,GAAE,QAAQ,GAAG,KAAgB,EACtC,GAAG,SAAI,QAyDR"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
//#region src/hooks/useOverlayPosition.ts
|
|
3
|
+
/** Positions a non-modal surface at its trigger and keeps it inside the viewport. */
|
|
4
|
+
function useOverlayPosition(surfaceRef, trigger, open, placement = "bottom", gap = 0) {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const surface = surfaceRef.current;
|
|
7
|
+
if (!open || surface === null || trigger === null) return void 0;
|
|
8
|
+
let frame;
|
|
9
|
+
function update() {
|
|
10
|
+
if (surface === null || trigger === null) return;
|
|
11
|
+
const anchor = trigger.getBoundingClientRect();
|
|
12
|
+
surface.style.maxWidth = `${window.innerWidth}px`;
|
|
13
|
+
surface.style.maxHeight = `${window.innerHeight}px`;
|
|
14
|
+
const size = surface.getBoundingClientRect();
|
|
15
|
+
const above = anchor.top - gap - size.height;
|
|
16
|
+
const below = anchor.bottom + gap;
|
|
17
|
+
const fitsAbove = above >= 0;
|
|
18
|
+
const fitsBelow = below + size.height <= window.innerHeight;
|
|
19
|
+
let top = below;
|
|
20
|
+
if (placement === "top") {
|
|
21
|
+
if (fitsAbove || !fitsBelow) top = above;
|
|
22
|
+
} else if (!fitsBelow && fitsAbove) top = above;
|
|
23
|
+
const left = placement === "top" ? anchor.left + (anchor.width - size.width) / 2 : anchor.left;
|
|
24
|
+
surface.style.top = `${Math.max(0, Math.min(top, window.innerHeight - size.height))}px`;
|
|
25
|
+
const resolvedLeft = Math.max(0, Math.min(left, window.innerWidth - size.width));
|
|
26
|
+
surface.style.left = `${resolvedLeft}px`;
|
|
27
|
+
surface.style.setProperty("--chayns-overlay-anchor-x", `${anchor.left + anchor.width / 2 - resolvedLeft}px`);
|
|
28
|
+
surface.dataset.placement = top === above ? "top" : "bottom";
|
|
29
|
+
}
|
|
30
|
+
function scheduleUpdate() {
|
|
31
|
+
if (frame !== void 0) return;
|
|
32
|
+
frame = window.requestAnimationFrame(() => {
|
|
33
|
+
frame = void 0;
|
|
34
|
+
update();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
update();
|
|
38
|
+
const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(scheduleUpdate);
|
|
39
|
+
observer?.observe(surface);
|
|
40
|
+
observer?.observe(trigger);
|
|
41
|
+
window.addEventListener("resize", scheduleUpdate);
|
|
42
|
+
window.addEventListener("scroll", scheduleUpdate, true);
|
|
43
|
+
return () => {
|
|
44
|
+
if (frame !== void 0) window.cancelAnimationFrame(frame);
|
|
45
|
+
observer?.disconnect();
|
|
46
|
+
window.removeEventListener("resize", scheduleUpdate);
|
|
47
|
+
window.removeEventListener("scroll", scheduleUpdate, true);
|
|
48
|
+
};
|
|
49
|
+
}, [
|
|
50
|
+
gap,
|
|
51
|
+
open,
|
|
52
|
+
placement,
|
|
53
|
+
surfaceRef,
|
|
54
|
+
trigger
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { useOverlayPosition };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=useOverlayPosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOverlayPosition.js","names":[],"sources":["../../src/hooks/useOverlayPosition.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\n/** Positions a non-modal surface at its trigger and keeps it inside the viewport. */\nexport function useOverlayPosition(\n surfaceRef: RefObject<HTMLElement | null>,\n trigger: HTMLElement | null,\n open: boolean,\n placement: 'bottom' | 'top' = 'bottom',\n gap = 0,\n) {\n useEffect(() => {\n const surface = surfaceRef.current;\n if (!open || surface === null || trigger === null) return undefined;\n\n let frame: number | undefined;\n function update() {\n if (surface === null || trigger === null) return;\n const anchor = trigger.getBoundingClientRect();\n surface.style.maxWidth = `${window.innerWidth}px`;\n surface.style.maxHeight = `${window.innerHeight}px`;\n const size = surface.getBoundingClientRect();\n const above = anchor.top - gap - size.height;\n const below = anchor.bottom + gap;\n const fitsAbove = above >= 0;\n const fitsBelow = below + size.height <= window.innerHeight;\n let top = below;\n if (placement === 'top') {\n if (fitsAbove || !fitsBelow) top = above;\n } else if (!fitsBelow && fitsAbove) {\n top = above;\n }\n const left =\n placement === 'top' ? anchor.left + (anchor.width - size.width) / 2 : anchor.left;\n surface.style.top = `${Math.max(0, Math.min(top, window.innerHeight - size.height))}px`;\n const resolvedLeft = Math.max(0, Math.min(left, window.innerWidth - size.width));\n surface.style.left = `${resolvedLeft}px`;\n surface.style.setProperty(\n '--chayns-overlay-anchor-x',\n `${anchor.left + anchor.width / 2 - resolvedLeft}px`,\n );\n surface.dataset.placement = top === above ? 'top' : 'bottom';\n }\n\n function scheduleUpdate() {\n if (frame !== undefined) return;\n frame = window.requestAnimationFrame(() => {\n frame = undefined;\n update();\n });\n }\n\n update();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(scheduleUpdate);\n observer?.observe(surface);\n observer?.observe(trigger);\n window.addEventListener('resize', scheduleUpdate);\n window.addEventListener('scroll', scheduleUpdate, true);\n return () => {\n if (frame !== undefined) window.cancelAnimationFrame(frame);\n observer?.disconnect();\n window.removeEventListener('resize', scheduleUpdate);\n window.removeEventListener('scroll', scheduleUpdate, true);\n };\n }, [gap, open, placement, surfaceRef, trigger]);\n}\n"],"mappings":";;;AAIA,SAAgB,mBACd,YACA,SACA,MACA,YAA8B,UAC9B,MAAM,GACN;CACA,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,QAAQ,YAAY,QAAQ,YAAY,MAAM,OAAO,KAAA;EAE1D,IAAI;EACJ,SAAS,SAAS;GAChB,IAAI,YAAY,QAAQ,YAAY,MAAM;GAC1C,MAAM,SAAS,QAAQ,sBAAsB;GAC7C,QAAQ,MAAM,WAAW,GAAG,OAAO,WAAW;GAC9C,QAAQ,MAAM,YAAY,GAAG,OAAO,YAAY;GAChD,MAAM,OAAO,QAAQ,sBAAsB;GAC3C,MAAM,QAAQ,OAAO,MAAM,MAAM,KAAK;GACtC,MAAM,QAAQ,OAAO,SAAS;GAC9B,MAAM,YAAY,SAAS;GAC3B,MAAM,YAAY,QAAQ,KAAK,UAAU,OAAO;GAChD,IAAI,MAAM;GACV,IAAI,cAAc,OACZ;QAAA,aAAa,CAAC,WAAW,MAAM;GAAA,OAC9B,IAAI,CAAC,aAAa,WACvB,MAAM;GAER,MAAM,OACJ,cAAc,QAAQ,OAAO,QAAQ,OAAO,QAAQ,KAAK,SAAS,IAAI,OAAO;GAC/E,QAAQ,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,cAAc,KAAK,MAAM,CAAC,EAAE;GACpF,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,OAAO,aAAa,KAAK,KAAK,CAAC;GAC/E,QAAQ,MAAM,OAAO,GAAG,aAAa;GACrC,QAAQ,MAAM,YACZ,6BACA,GAAG,OAAO,OAAO,OAAO,QAAQ,IAAI,aAAa,GACnD;GACA,QAAQ,QAAQ,YAAY,QAAQ,QAAQ,QAAQ;EACtD;EAEA,SAAS,iBAAiB;GACxB,IAAI,UAAU,KAAA,GAAW;GACzB,QAAQ,OAAO,4BAA4B;IACzC,QAAQ,KAAA;IACR,OAAO;GACT,CAAC;EACH;EAEA,OAAO;EACP,MAAM,WACJ,OAAO,mBAAmB,cAAc,KAAA,IAAY,IAAI,eAAe,cAAc;EACvF,UAAU,QAAQ,OAAO;EACzB,UAAU,QAAQ,OAAO;EACzB,OAAO,iBAAiB,UAAU,cAAc;EAChD,OAAO,iBAAiB,UAAU,gBAAgB,IAAI;EACtD,aAAa;GACX,IAAI,UAAU,KAAA,GAAW,OAAO,qBAAqB,KAAK;GAC1D,UAAU,WAAW;GACrB,OAAO,oBAAoB,UAAU,cAAc;GACnD,OAAO,oBAAoB,UAAU,gBAAgB,IAAI;EAC3D;CACF,GAAG;EAAC;EAAK;EAAM;EAAW;EAAY;CAAO,CAAC;AAChD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
export { default as Button } from './components/button/Button.js';
|
|
2
2
|
export { default as IconButton } from './components/icon-button/IconButton.js';
|
|
3
3
|
export type { ButtonContent, ButtonIcon, ButtonProps, ButtonVariant, } from './components/button/Button.types.js';
|
|
4
|
-
export { BUTTON_VARIANTS } from './components/button/Button.types.js';
|
|
4
|
+
export { BUTTON_VARIANTS, ButtonVariants } from './components/button/Button.types.js';
|
|
5
5
|
export type { IconButtonBaseProps, IconButtonProps, } from './components/icon-button/IconButton.types.js';
|
|
6
6
|
export { default as Badge } from './components/badge/Badge.js';
|
|
7
|
-
export { BADGE_SIZES, BADGE_TONES } from './components/badge/Badge.types.js';
|
|
7
|
+
export { BADGE_SIZES, BADGE_TONES, BadgeSizes, BadgeTones, } from './components/badge/Badge.types.js';
|
|
8
8
|
export type { BadgeProps, BadgeSize, BadgeTone } from './components/badge/Badge.types.js';
|
|
9
9
|
export { default as Skeleton } from './components/skeleton/Skeleton.js';
|
|
10
|
-
export { SKELETON_SHAPES } from './components/skeleton/Skeleton.types.js';
|
|
10
|
+
export { SKELETON_SHAPES, SkeletonShapes } from './components/skeleton/Skeleton.types.js';
|
|
11
11
|
export type { SkeletonProps, SkeletonShape } from './components/skeleton/Skeleton.types.js';
|
|
12
12
|
export { default as Spinner } from './components/spinner/Spinner.js';
|
|
13
13
|
export type { SpinnerProps } from './components/spinner/Spinner.types.js';
|
|
14
14
|
export { default as Progress } from './components/progress/Progress.js';
|
|
15
15
|
export type { ProgressProps } from './components/progress/Progress.types.js';
|
|
16
16
|
export { default as Banner } from './components/banner/Banner.js';
|
|
17
|
-
export { BANNER_TONES } from './components/banner/Banner.types.js';
|
|
17
|
+
export { BANNER_TONES, BannerTones } from './components/banner/Banner.types.js';
|
|
18
18
|
export type { BannerProps, BannerTone, ClosableBannerProps, StaticBannerProps, } from './components/banner/Banner.types.js';
|
|
19
19
|
export { default as ComboBox } from './components/combo-box/ComboBox.js';
|
|
20
20
|
export type { ComboBoxMultipleProps, ComboBoxOptionProps, ComboBoxProps, ComboBoxSingleProps, } from './components/combo-box/ComboBox.types.js';
|
|
21
21
|
export { default as TextField } from './components/text-field/TextField.js';
|
|
22
22
|
export type { TextFieldProps } from './components/text-field/TextField.types.js';
|
|
23
23
|
export { default as DateTimePicker } from './components/date-time-picker/DateTimePicker.js';
|
|
24
|
-
export { DATE_TIME_PICKER_MODES, DATE_TIME_PICKER_MINUTE_STEPS, type DateTimePickerMinuteStep, type DateTimePickerMode, type DateTimePickerProps, type DateTimePickerWheelLabels, } from './components/date-time-picker/DateTimePicker.types.js';
|
|
24
|
+
export { DATE_TIME_PICKER_MODES, DATE_TIME_PICKER_MINUTE_STEPS, DateTimePickerModes, DateTimePickerMinuteSteps, type DateTimePickerMinuteStep, type DateTimePickerMode, type DateTimePickerProps, type DateTimePickerWheelLabels, } from './components/date-time-picker/DateTimePicker.types.js';
|
|
25
25
|
export { default as TextArea } from './components/text-area/TextArea.js';
|
|
26
26
|
export type { TextAreaProps } from './components/text-area/TextArea.types.js';
|
|
27
27
|
export { default as Checkbox } from './components/checkbox/Checkbox.js';
|
|
@@ -41,12 +41,26 @@ export { default as Card } from './components/card/Card.js';
|
|
|
41
41
|
export type { CardHeaderProps, CardProps } from './components/card/Card.types.js';
|
|
42
42
|
export { default as Avatar } from './components/avatar/Avatar.js';
|
|
43
43
|
export { default as AvatarGroup } from './components/avatar-group/AvatarGroup.js';
|
|
44
|
-
export
|
|
44
|
+
export { AVATAR_SIZES, AvatarSizes } from './components/avatar/Avatar.types.js';
|
|
45
|
+
export type { AvatarProps, AvatarSize } from './components/avatar/Avatar.types.js';
|
|
45
46
|
export type { AvatarGroupProps } from './components/avatar-group/AvatarGroup.types.js';
|
|
46
47
|
export { default as List } from './components/list/List.js';
|
|
47
48
|
export type { ListItemActionProps, ListItemPartProps, ListItemProps, ListItemStatusProps, ListProps, } from './components/list/List.types.js';
|
|
48
49
|
export { default as Accordion } from './components/accordion/Accordion.js';
|
|
49
50
|
export { default as AccordionGroup } from './components/accordion-group/AccordionGroup.js';
|
|
50
|
-
export { ACCORDION_APPEARANCES } from './components/accordion/Accordion.types.js';
|
|
51
|
+
export { ACCORDION_APPEARANCES, AccordionAppearances, } from './components/accordion/Accordion.types.js';
|
|
51
52
|
export type { AccordionAppearance, AccordionContentProps, AccordionHeadContentProps, AccordionHeadProps, AccordionProps, AccordionGroupProps, AccordionPartProps, } from './components/accordion/Accordion.types.js';
|
|
53
|
+
export { default as Breadcrumb } from './components/breadcrumb/Breadcrumb.js';
|
|
54
|
+
export type { BreadcrumbProps } from './components/breadcrumb/Breadcrumb.types.js';
|
|
55
|
+
export type { BreadcrumbItem } from './components/breadcrumb/Breadcrumb.types.js';
|
|
56
|
+
export { default as Pagination } from './components/pagination/Pagination.js';
|
|
57
|
+
export type { PaginationProps } from './components/pagination/Pagination.types.js';
|
|
58
|
+
export type { PaginationLabels } from './components/pagination/Pagination.types.js';
|
|
59
|
+
export { default as Slider } from './components/slider/Slider.js';
|
|
60
|
+
export type { SliderProps } from './components/slider/Slider.types.js';
|
|
61
|
+
export { default as Stepper } from './components/stepper/Stepper.js';
|
|
62
|
+
export { STEPPER_PRECISIONS, StepperPrecisions } from './components/stepper/Stepper.types.js';
|
|
63
|
+
export type { StepperPrecision, StepperProps } from './components/stepper/Stepper.types.js';
|
|
64
|
+
export { default as Tooltip } from './components/tooltip/Tooltip.js';
|
|
65
|
+
export type { TooltipProps, TooltipTriggerProps } from './components/tooltip/Tooltip.types.js';
|
|
52
66
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import Button from "./components/button/Button.js";
|
|
2
2
|
import IconButton from "./components/icon-button/IconButton.js";
|
|
3
|
-
import { BUTTON_VARIANTS } from "./components/button/Button.types.js";
|
|
3
|
+
import { BUTTON_VARIANTS, ButtonVariants } from "./components/button/Button.types.js";
|
|
4
4
|
import Badge from "./components/badge/Badge.js";
|
|
5
|
-
import { BADGE_SIZES, BADGE_TONES } from "./components/badge/Badge.types.js";
|
|
5
|
+
import { BADGE_SIZES, BADGE_TONES, BadgeSizes, BadgeTones } from "./components/badge/Badge.types.js";
|
|
6
6
|
import Skeleton from "./components/skeleton/Skeleton.js";
|
|
7
|
-
import { SKELETON_SHAPES } from "./components/skeleton/Skeleton.types.js";
|
|
7
|
+
import { SKELETON_SHAPES, SkeletonShapes } from "./components/skeleton/Skeleton.types.js";
|
|
8
8
|
import Spinner from "./components/spinner/Spinner.js";
|
|
9
9
|
import Progress from "./components/progress/Progress.js";
|
|
10
10
|
import Banner from "./components/banner/Banner.js";
|
|
11
|
-
import { BANNER_TONES } from "./components/banner/Banner.types.js";
|
|
11
|
+
import { BANNER_TONES, BannerTones } from "./components/banner/Banner.types.js";
|
|
12
12
|
import ComboBox from "./components/combo-box/ComboBox.js";
|
|
13
13
|
import TextField from "./components/text-field/TextField.js";
|
|
14
|
-
import { DATE_TIME_PICKER_MINUTE_STEPS, DATE_TIME_PICKER_MODES } from "./components/date-time-picker/DateTimePicker.types.js";
|
|
14
|
+
import { DATE_TIME_PICKER_MINUTE_STEPS, DATE_TIME_PICKER_MODES, DateTimePickerMinuteSteps, DateTimePickerModes } from "./components/date-time-picker/DateTimePicker.types.js";
|
|
15
15
|
import DateTimePicker from "./components/date-time-picker/DateTimePicker.js";
|
|
16
16
|
import TextArea from "./components/text-area/TextArea.js";
|
|
17
17
|
import Checkbox from "./components/checkbox/Checkbox.js";
|
|
@@ -24,8 +24,15 @@ import SplitButton from "./components/split-button/SplitButton.js";
|
|
|
24
24
|
import Card from "./components/card/Card.js";
|
|
25
25
|
import Avatar from "./components/avatar/Avatar.js";
|
|
26
26
|
import AvatarGroup from "./components/avatar-group/AvatarGroup.js";
|
|
27
|
+
import { AVATAR_SIZES, AvatarSizes } from "./components/avatar/Avatar.types.js";
|
|
27
28
|
import List from "./components/list/List.js";
|
|
28
29
|
import Accordion from "./components/accordion/Accordion.js";
|
|
29
30
|
import AccordionGroup from "./components/accordion-group/AccordionGroup.js";
|
|
30
|
-
import { ACCORDION_APPEARANCES } from "./components/accordion/Accordion.types.js";
|
|
31
|
-
|
|
31
|
+
import { ACCORDION_APPEARANCES, AccordionAppearances } from "./components/accordion/Accordion.types.js";
|
|
32
|
+
import Breadcrumb from "./components/breadcrumb/Breadcrumb.js";
|
|
33
|
+
import Pagination from "./components/pagination/Pagination.js";
|
|
34
|
+
import Slider from "./components/slider/Slider.js";
|
|
35
|
+
import Stepper from "./components/stepper/Stepper.js";
|
|
36
|
+
import { STEPPER_PRECISIONS, StepperPrecisions } from "./components/stepper/Stepper.types.js";
|
|
37
|
+
import Tooltip from "./components/tooltip/Tooltip.js";
|
|
38
|
+
export { ACCORDION_APPEARANCES, AVATAR_SIZES, Accordion, AccordionAppearances, AccordionGroup, Avatar, AvatarGroup, AvatarSizes, BADGE_SIZES, BADGE_TONES, BANNER_TONES, BUTTON_VARIANTS, Badge, BadgeSizes, BadgeTones, Banner, BannerTones, Breadcrumb, Button, ButtonVariants, Card, Checkbox, ComboBox, DATE_TIME_PICKER_MINUTE_STEPS, DATE_TIME_PICKER_MODES, DateTimePicker, DateTimePickerMinuteSteps, DateTimePickerModes, IconButton, List, Pagination, Popup_default as Popup, PopupList, Progress, RadioGroup, SKELETON_SHAPES, STEPPER_PRECISIONS, SegmentedControl, Skeleton, SkeletonShapes, Slider, Spinner, SplitButton, Stepper, StepperPrecisions, Switch, TextArea, TextField, Tooltip };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
@import url('./button.css');
|
|
2
|
+
|
|
3
|
+
@layer chayns.components {
|
|
4
|
+
.chayns-pagination {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
gap: var(--k6);
|
|
8
|
+
min-inline-size: 0;
|
|
9
|
+
overflow-x: auto;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.chayns-pagination__page,
|
|
13
|
+
.chayns-pagination__arrow {
|
|
14
|
+
flex: none;
|
|
15
|
+
min-inline-size: var(--k34);
|
|
16
|
+
block-size: var(--k34);
|
|
17
|
+
padding-inline: var(--k6);
|
|
18
|
+
border: 0;
|
|
19
|
+
border-radius: 10px;
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: var(--text);
|
|
22
|
+
font: inherit;
|
|
23
|
+
font-size: var(--fs-body);
|
|
24
|
+
font-weight: 500;
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.chayns-pagination__arrow {
|
|
29
|
+
border: 1px solid var(--border);
|
|
30
|
+
color: var(--text-2);
|
|
31
|
+
font-size: var(--fs-caption);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.chayns-pagination__page[aria-current='page'] {
|
|
35
|
+
background: var(--accent);
|
|
36
|
+
color: var(--on-accent);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.chayns-pagination__arrow:disabled {
|
|
40
|
+
color: var(--disabled-text);
|
|
41
|
+
cursor: not-allowed;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.chayns-pagination__page:focus-visible,
|
|
45
|
+
.chayns-pagination__arrow:focus-visible {
|
|
46
|
+
outline: none;
|
|
47
|
+
box-shadow: inset 0 0 0 var(--focus-ring-size)
|
|
48
|
+
rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.chayns-pagination__ellipsis {
|
|
52
|
+
color: var(--text-2);
|
|
53
|
+
}
|
|
54
|
+
}
|
package/dist/popup.css
CHANGED
package/dist/progress.css
CHANGED