@quen-ui/components 0.0.14 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/Accordion/Accordion.cjs.js +88 -0
- package/dist/Accordion/Accordion.d.ts +3 -0
- package/dist/Accordion/Accordion.es.js +89 -0
- package/dist/Accordion/AccordionGroup.cjs.js +82 -0
- package/dist/Accordion/AccordionGroup.d.ts +12 -0
- package/dist/Accordion/AccordionGroup.es.js +82 -0
- package/dist/Accordion/AccordionItem.cjs.js +71 -0
- package/dist/Accordion/AccordionItem.d.ts +3 -0
- package/dist/Accordion/AccordionItem.es.js +72 -0
- package/dist/Accordion/helpers.cjs.js +24 -0
- package/dist/Accordion/helpers.d.ts +25 -0
- package/dist/Accordion/helpers.es.js +24 -0
- package/dist/Accordion/index.cjs.js +7 -0
- package/dist/Accordion/index.d.ts +8 -0
- package/dist/Accordion/index.es.js +7 -0
- package/dist/Accordion/styles.cjs.js +97 -0
- package/dist/Accordion/styles.d.ts +23 -0
- package/dist/Accordion/styles.es.js +97 -0
- package/dist/Accordion/types.d.ts +142 -0
- package/dist/Accordion/useAccordionState.cjs.js +34 -0
- package/dist/Accordion/useAccordionState.d.ts +12 -0
- package/dist/Accordion/useAccordionState.es.js +34 -0
- package/dist/Alert/Alert.cjs.js +1 -1
- package/dist/Alert/Alert.es.js +1 -1
- package/dist/Alert/styles.cjs.js +14 -10
- package/dist/Alert/styles.es.js +14 -10
- package/dist/Avatar/styles.cjs.js +16 -11
- package/dist/Avatar/styles.es.js +16 -11
- package/dist/Badge/styles.cjs.js +7 -7
- package/dist/Badge/styles.es.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.cjs.js +6 -6
- package/dist/Breadcrumbs/BreadcrumbItem.es.js +6 -6
- package/dist/Breadcrumbs/Breadcrumbs.cjs.js +2 -3
- package/dist/Breadcrumbs/Breadcrumbs.es.js +2 -3
- package/dist/Breadcrumbs/styles.cjs.js +15 -15
- package/dist/Breadcrumbs/styles.es.js +15 -15
- package/dist/Button/Button.cjs.js +3 -3
- package/dist/Button/Button.es.js +6 -6
- package/dist/Button/index.d.ts +1 -1
- package/dist/Button/styles.cjs.js +49 -54
- package/dist/Button/styles.es.js +50 -55
- package/dist/Button/types.d.ts +2 -3
- package/dist/Calendar/Calendar.cjs.js +200 -0
- package/dist/Calendar/Calendar.d.ts +4 -0
- package/dist/Calendar/Calendar.es.js +201 -0
- package/dist/Calendar/DaysLevel.cjs.js +93 -0
- package/dist/Calendar/DaysLevel.d.ts +3 -0
- package/dist/Calendar/DaysLevel.es.js +94 -0
- package/dist/Calendar/MonthLevel.cjs.js +23 -0
- package/dist/Calendar/MonthLevel.d.ts +3 -0
- package/dist/Calendar/MonthLevel.es.js +24 -0
- package/dist/Calendar/YearsLevel.cjs.js +24 -0
- package/dist/Calendar/YearsLevel.d.ts +3 -0
- package/dist/Calendar/YearsLevel.es.js +25 -0
- package/dist/Calendar/helpers.cjs.js +60 -0
- package/dist/Calendar/helpers.d.ts +9 -0
- package/dist/Calendar/helpers.es.js +60 -0
- package/dist/Calendar/index.d.ts +2 -0
- package/dist/Calendar/styles.cjs.js +116 -0
- package/dist/Calendar/styles.d.ts +16 -0
- package/dist/Calendar/styles.es.js +116 -0
- package/dist/Calendar/types.d.ts +115 -0
- package/dist/Card/Card.cjs.js +4 -2
- package/dist/Card/Card.d.ts +1 -1
- package/dist/Card/Card.es.js +4 -2
- package/dist/Card/styles.cjs.js +2 -2
- package/dist/Card/styles.es.js +2 -2
- package/dist/Card/types.d.ts +2 -0
- package/dist/Checkbox/Checkbox.cjs.js +1 -1
- package/dist/Checkbox/Checkbox.es.js +1 -1
- package/dist/Checkbox/CheckboxGroup.cjs.js +22 -25
- package/dist/Checkbox/CheckboxGroup.es.js +22 -25
- package/dist/Checkbox/styles.cjs.js +24 -23
- package/dist/Checkbox/styles.es.js +24 -23
- package/dist/ColorPicker/ColorPicker.cjs.js +404 -0
- package/dist/ColorPicker/ColorPicker.d.ts +3 -0
- package/dist/ColorPicker/ColorPicker.es.js +405 -0
- package/dist/ColorPicker/InputColor.cjs.js +94 -0
- package/dist/ColorPicker/InputColor.d.ts +3 -0
- package/dist/ColorPicker/InputColor.es.js +95 -0
- package/dist/ColorPicker/InputsColor.cjs.js +177 -0
- package/dist/ColorPicker/InputsColor.d.ts +3 -0
- package/dist/ColorPicker/InputsColor.es.js +178 -0
- package/dist/ColorPicker/helpers.cjs.js +32 -0
- package/dist/ColorPicker/helpers.d.ts +4 -0
- package/dist/ColorPicker/helpers.es.js +32 -0
- package/dist/ColorPicker/index.cjs.js +7 -0
- package/dist/ColorPicker/index.d.ts +8 -0
- package/dist/ColorPicker/index.es.js +7 -0
- package/dist/ColorPicker/styles.cjs.js +234 -0
- package/dist/ColorPicker/styles.d.ts +43 -0
- package/dist/ColorPicker/styles.es.js +234 -0
- package/dist/ColorPicker/types.d.ts +56 -0
- package/dist/Divider/styles.cjs.js +12 -10
- package/dist/Divider/styles.es.js +12 -10
- package/dist/Drawer/Drawer.cjs.js +5 -1
- package/dist/Drawer/Drawer.es.js +5 -1
- package/dist/Drawer/styles.cjs.js +4 -5
- package/dist/Drawer/styles.es.js +4 -5
- package/dist/Dropdown/Dropdown.cjs.js +31 -2
- package/dist/Dropdown/Dropdown.d.ts +2 -2
- package/dist/Dropdown/Dropdown.es.js +32 -3
- package/dist/Dropdown/DropdownItem.cjs.js +4 -5
- package/dist/Dropdown/DropdownItem.es.js +4 -5
- package/dist/Dropdown/DropdownList.cjs.js +3 -2
- package/dist/Dropdown/DropdownList.es.js +6 -5
- package/dist/Dropdown/DropdownPortal.cjs.js +8 -5
- package/dist/Dropdown/DropdownPortal.d.ts +5 -3
- package/dist/Dropdown/DropdownPortal.es.js +9 -6
- package/dist/Dropdown/helpers.cjs.js +1 -1
- package/dist/Dropdown/helpers.es.js +1 -1
- package/dist/Dropdown/styles.cjs.js +28 -27
- package/dist/Dropdown/styles.d.ts +2 -0
- package/dist/Dropdown/styles.es.js +28 -27
- package/dist/EmptyState/EmptyState.cjs.js +51 -0
- package/dist/EmptyState/EmptyState.d.ts +3 -0
- package/dist/EmptyState/EmptyState.es.js +52 -0
- package/dist/EmptyState/index.d.ts +2 -0
- package/dist/EmptyState/types.d.ts +10 -0
- package/dist/Flex/Flex.d.ts +1 -1
- package/dist/Flex/types.d.ts +1 -0
- package/dist/Form/Field.cjs.js +175 -0
- package/dist/Form/Field.d.ts +3 -0
- package/dist/Form/Field.es.js +176 -0
- package/dist/Form/FieldArray.cjs.js +24 -0
- package/dist/Form/FieldArray.d.ts +3 -0
- package/dist/Form/FieldArray.es.js +25 -0
- package/dist/Form/Form.cjs.js +69 -0
- package/dist/Form/Form.d.ts +3 -0
- package/dist/Form/Form.es.js +69 -0
- package/dist/Form/defaultValidateMessages.cjs.js +51 -0
- package/dist/Form/defaultValidateMessages.d.ts +47 -0
- package/dist/Form/defaultValidateMessages.es.js +51 -0
- package/dist/Form/helpers.cjs.js +8 -0
- package/dist/Form/helpers.d.ts +1 -0
- package/dist/Form/helpers.es.js +8 -0
- package/dist/Form/index.cjs.js +13 -0
- package/dist/Form/index.d.ts +14 -0
- package/dist/Form/index.es.js +13 -0
- package/dist/Form/types.d.ts +147 -0
- package/dist/Form/useForm.cjs.js +230 -0
- package/dist/Form/useForm.d.ts +2 -0
- package/dist/Form/useForm.es.js +230 -0
- package/dist/Form/useWatch.cjs.js +14 -0
- package/dist/Form/useWatch.d.ts +3 -0
- package/dist/Form/useWatch.es.js +14 -0
- package/dist/Highlight/Highlight.cjs.js +113 -0
- package/dist/Highlight/Highlight.d.ts +3 -0
- package/dist/Highlight/Highlight.es.js +114 -0
- package/dist/Highlight/helpers.cjs.js +147 -0
- package/dist/Highlight/helpers.d.ts +27 -0
- package/dist/Highlight/helpers.es.js +147 -0
- package/dist/Highlight/index.d.ts +2 -0
- package/dist/Highlight/styles.cjs.js +11 -0
- package/dist/Highlight/styles.d.ts +4 -0
- package/dist/Highlight/styles.es.js +11 -0
- package/dist/Highlight/types.d.ts +53 -0
- package/dist/Image/styles.cjs.js +4 -5
- package/dist/Image/styles.es.js +4 -5
- package/dist/InputBase/InputBase.cjs.js +32 -0
- package/dist/InputBase/InputBase.d.ts +4 -0
- package/dist/InputBase/InputBase.es.js +33 -0
- package/dist/InputBase/index.d.ts +2 -0
- package/dist/InputBase/styles.cjs.js +61 -0
- package/dist/InputBase/styles.d.ts +7 -0
- package/dist/InputBase/styles.es.js +61 -0
- package/dist/InputBase/types.d.ts +25 -0
- package/dist/InputDate/InputDate.cjs.js +344 -0
- package/dist/InputDate/InputDate.d.ts +4 -0
- package/dist/InputDate/InputDate.es.js +345 -0
- package/dist/InputDate/helpers.cjs.js +78 -0
- package/dist/InputDate/helpers.d.ts +5 -0
- package/dist/InputDate/helpers.es.js +78 -0
- package/dist/InputDate/index.d.ts +2 -0
- package/dist/InputDate/styles.cjs.js +35 -0
- package/dist/InputDate/styles.d.ts +5 -0
- package/dist/InputDate/styles.es.js +35 -0
- package/dist/InputDate/types.d.ts +23 -0
- package/dist/InputNumber/InputNumber.cjs.js +70 -73
- package/dist/InputNumber/InputNumber.d.ts +1 -1
- package/dist/InputNumber/InputNumber.es.js +72 -75
- package/dist/InputNumber/styles.cjs.js +20 -60
- package/dist/InputNumber/styles.d.ts +4 -8
- package/dist/InputNumber/styles.es.js +21 -61
- package/dist/InputNumber/types.d.ts +2 -18
- package/dist/Layout/Header.cjs.js +27 -23
- package/dist/Layout/Header.d.ts +1 -1
- package/dist/Layout/Header.es.js +28 -24
- package/dist/Layout/Sidebar.cjs.js +24 -25
- package/dist/Layout/Sidebar.d.ts +1 -1
- package/dist/Layout/Sidebar.es.js +25 -26
- package/dist/Layout/index.d.ts +2 -2
- package/dist/Layout/styles.cjs.js +16 -52
- package/dist/Layout/styles.d.ts +2 -15
- package/dist/Layout/styles.es.js +16 -52
- package/dist/Layout/types.d.ts +7 -22
- package/dist/Loader/styles.cjs.js +5 -4
- package/dist/Loader/styles.es.js +5 -4
- package/dist/LoadingOverlay/LoadingOverlay.cjs.js +22 -0
- package/dist/LoadingOverlay/LoadingOverlay.d.ts +3 -0
- package/dist/LoadingOverlay/LoadingOverlay.es.js +23 -0
- package/dist/LoadingOverlay/index.d.ts +2 -0
- package/dist/LoadingOverlay/styles.cjs.js +28 -0
- package/dist/LoadingOverlay/styles.d.ts +5 -0
- package/dist/LoadingOverlay/styles.es.js +28 -0
- package/dist/LoadingOverlay/types.d.ts +16 -0
- package/dist/Menu/Menu.cjs.js +42 -0
- package/dist/Menu/Menu.d.ts +3 -0
- package/dist/Menu/Menu.es.js +43 -0
- package/dist/Menu/MenuItem.cjs.js +112 -0
- package/dist/Menu/MenuItem.d.ts +3 -0
- package/dist/Menu/MenuItem.es.js +113 -0
- package/dist/Menu/helpers.cjs.js +20 -0
- package/dist/Menu/helpers.d.ts +17 -0
- package/dist/Menu/helpers.es.js +20 -0
- package/dist/Menu/index.d.ts +2 -0
- package/dist/Menu/styles.cjs.js +98 -0
- package/dist/Menu/styles.d.ts +16 -0
- package/dist/Menu/styles.es.js +98 -0
- package/dist/Menu/types.d.ts +85 -0
- package/dist/Modal/Modal.cjs.js +15 -5
- package/dist/Modal/Modal.d.ts +1 -1
- package/dist/Modal/Modal.es.js +16 -6
- package/dist/Modal/styles.cjs.js +39 -9
- package/dist/Modal/styles.d.ts +4 -0
- package/dist/Modal/styles.es.js +40 -10
- package/dist/Modal/types.d.ts +2 -0
- package/dist/Notification/Notification.cjs.js +3 -3
- package/dist/Notification/Notification.es.js +3 -3
- package/dist/Notification/NotificationInstance.cjs.js +8 -15
- package/dist/Notification/NotificationInstance.es.js +8 -15
- package/dist/Notification/NotificationsStore.cjs.js +2 -7
- package/dist/Notification/NotificationsStore.es.js +2 -7
- package/dist/Notification/styles.cjs.js +6 -6
- package/dist/Notification/styles.es.js +6 -6
- package/dist/Pagination/Pagination.cjs.js +114 -0
- package/dist/Pagination/Pagination.d.ts +3 -0
- package/dist/Pagination/Pagination.es.js +115 -0
- package/dist/Pagination/index.d.ts +2 -0
- package/dist/Pagination/styles.cjs.js +54 -0
- package/dist/Pagination/styles.d.ts +2 -0
- package/dist/Pagination/styles.es.js +54 -0
- package/dist/Pagination/types.d.ts +49 -0
- package/dist/Progress/Progress.cjs.js +1 -1
- package/dist/Progress/Progress.es.js +1 -1
- package/dist/Progress/styles.cjs.js +5 -50
- package/dist/Progress/styles.es.js +5 -50
- package/dist/Progress/types.d.ts +1 -0
- package/dist/RadioButton/RadioButton.cjs.js +1 -1
- package/dist/RadioButton/RadioButton.es.js +1 -1
- package/dist/RadioButton/RadioButtonGroup.cjs.js +19 -22
- package/dist/RadioButton/RadioButtonGroup.es.js +19 -22
- package/dist/RadioButton/styles.cjs.js +11 -13
- package/dist/RadioButton/styles.es.js +11 -13
- package/dist/RichTextEditor/RichTextEditor.cjs.js +289 -0
- package/dist/RichTextEditor/RichTextEditor.d.ts +4 -0
- package/dist/RichTextEditor/RichTextEditor.es.js +290 -0
- package/dist/RichTextEditor/RichTextEditorColorControl.cjs.js +38 -0
- package/dist/RichTextEditor/RichTextEditorColorControl.d.ts +3 -0
- package/dist/RichTextEditor/RichTextEditorColorControl.es.js +39 -0
- package/dist/RichTextEditor/RichTextEditorTableControl.cjs.js +62 -0
- package/dist/RichTextEditor/RichTextEditorTableControl.d.ts +3 -0
- package/dist/RichTextEditor/RichTextEditorTableControl.es.js +63 -0
- package/dist/RichTextEditor/helpers.cjs.js +151 -0
- package/dist/RichTextEditor/helpers.d.ts +10 -0
- package/dist/RichTextEditor/helpers.es.js +151 -0
- package/dist/RichTextEditor/index.d.ts +2 -0
- package/dist/RichTextEditor/plugins.cjs.js +548 -0
- package/dist/RichTextEditor/plugins.d.ts +2 -0
- package/dist/RichTextEditor/plugins.es.js +548 -0
- package/dist/RichTextEditor/styles.cjs.js +60 -0
- package/dist/RichTextEditor/styles.d.ts +7 -0
- package/dist/RichTextEditor/styles.es.js +60 -0
- package/dist/RichTextEditor/types.d.ts +79 -0
- package/dist/Select/Select.cjs.js +30 -18
- package/dist/Select/Select.es.js +30 -18
- package/dist/Select/helpers.cjs.js +1 -1
- package/dist/Select/helpers.d.ts +24 -24
- package/dist/Select/helpers.es.js +1 -1
- package/dist/Select/styles.cjs.js +91 -118
- package/dist/Select/styles.d.ts +4 -5
- package/dist/Select/styles.es.js +91 -118
- package/dist/Select/types.d.ts +3 -23
- package/dist/Select/useSelect.cjs.js +8 -14
- package/dist/Select/useSelect.d.ts +20 -20
- package/dist/Select/useSelect.es.js +8 -14
- package/dist/Skeleton/Skeleton.cjs.js +35 -0
- package/dist/Skeleton/Skeleton.d.ts +3 -0
- package/dist/Skeleton/Skeleton.es.js +36 -0
- package/dist/Skeleton/SkeletonAvatar.cjs.js +17 -0
- package/dist/Skeleton/SkeletonAvatar.d.ts +3 -0
- package/dist/Skeleton/SkeletonAvatar.es.js +18 -0
- package/dist/Skeleton/SkeletonButton.cjs.js +21 -0
- package/dist/Skeleton/SkeletonButton.d.ts +3 -0
- package/dist/Skeleton/SkeletonButton.es.js +22 -0
- package/dist/Skeleton/SkeletonCard.cjs.js +15 -0
- package/dist/Skeleton/SkeletonCard.d.ts +3 -0
- package/dist/Skeleton/SkeletonCard.es.js +16 -0
- package/dist/Skeleton/SkeletonLayout.cjs.js +60 -0
- package/dist/Skeleton/SkeletonLayout.d.ts +3 -0
- package/dist/Skeleton/SkeletonLayout.es.js +61 -0
- package/dist/Skeleton/SkeletonList.cjs.js +39 -0
- package/dist/Skeleton/SkeletonList.d.ts +3 -0
- package/dist/Skeleton/SkeletonList.es.js +40 -0
- package/dist/Skeleton/SkeletonTextBlock.cjs.js +7 -0
- package/dist/Skeleton/SkeletonTextBlock.d.ts +5 -0
- package/dist/Skeleton/SkeletonTextBlock.es.js +8 -0
- package/dist/Skeleton/index.cjs.js +17 -0
- package/dist/Skeleton/index.d.ts +18 -0
- package/dist/Skeleton/index.es.js +17 -0
- package/dist/Skeleton/styles.cjs.js +59 -0
- package/dist/Skeleton/styles.d.ts +3 -0
- package/dist/Skeleton/styles.es.js +59 -0
- package/dist/Skeleton/types.d.ts +74 -0
- package/dist/Slider/Slider.cjs.js +282 -0
- package/dist/Slider/Slider.d.ts +3 -0
- package/dist/Slider/Slider.es.js +283 -0
- package/dist/Slider/index.d.ts +2 -0
- package/dist/Slider/styles.cjs.js +156 -0
- package/dist/Slider/styles.d.ts +35 -0
- package/dist/Slider/styles.es.js +156 -0
- package/dist/Slider/types.d.ts +53 -0
- package/dist/Spoiler/Spoiler.cjs.js +62 -0
- package/dist/Spoiler/Spoiler.d.ts +3 -0
- package/dist/Spoiler/Spoiler.es.js +63 -0
- package/dist/Spoiler/index.d.ts +2 -0
- package/dist/Spoiler/styles.cjs.js +15 -0
- package/dist/Spoiler/styles.d.ts +4 -0
- package/dist/Spoiler/styles.es.js +15 -0
- package/dist/Spoiler/types.d.ts +23 -0
- package/dist/Switch/Switch.cjs.js +32 -6
- package/dist/Switch/Switch.d.ts +2 -2
- package/dist/Switch/Switch.es.js +33 -7
- package/dist/Switch/styles.cjs.js +24 -7
- package/dist/Switch/styles.d.ts +4 -0
- package/dist/Switch/styles.es.js +24 -7
- package/dist/Switch/types.d.ts +3 -0
- package/dist/Tabs/Tab.cjs.js +8 -8
- package/dist/Tabs/Tab.es.js +8 -8
- package/dist/Tabs/TabPanel.cjs.js +3 -3
- package/dist/Tabs/TabPanel.es.js +3 -3
- package/dist/Tabs/Tabs.cjs.js +5 -4
- package/dist/Tabs/Tabs.d.ts +1 -1
- package/dist/Tabs/Tabs.es.js +5 -4
- package/dist/Tabs/TabsList.cjs.js +25 -1
- package/dist/Tabs/TabsList.d.ts +2 -2
- package/dist/Tabs/TabsList.es.js +25 -1
- package/dist/Tabs/styles.cjs.js +104 -34
- package/dist/Tabs/styles.d.ts +2 -0
- package/dist/Tabs/styles.es.js +104 -34
- package/dist/Tabs/types.d.ts +7 -3
- package/dist/Tag/Tag.cjs.js +4 -1
- package/dist/Tag/Tag.d.ts +1 -1
- package/dist/Tag/Tag.es.js +4 -1
- package/dist/Tag/styles.cjs.js +14 -9
- package/dist/Tag/styles.d.ts +2 -0
- package/dist/Tag/styles.es.js +14 -9
- package/dist/Tag/types.d.ts +6 -0
- package/dist/TextField/TextField.cjs.js +57 -56
- package/dist/TextField/TextField.d.ts +1 -1
- package/dist/TextField/TextField.es.js +58 -57
- package/dist/TextField/styles.cjs.js +9 -50
- package/dist/TextField/styles.d.ts +3 -8
- package/dist/TextField/styles.es.js +10 -51
- package/dist/TextField/types.d.ts +2 -20
- package/dist/Textarea/Textarea.cjs.js +57 -56
- package/dist/Textarea/Textarea.d.ts +1 -1
- package/dist/Textarea/Textarea.es.js +58 -57
- package/dist/Textarea/styles.cjs.js +10 -62
- package/dist/Textarea/styles.d.ts +3 -8
- package/dist/Textarea/styles.es.js +12 -64
- package/dist/Textarea/types.d.ts +2 -21
- package/dist/Tooltip/Tooltip.cjs.js +3 -1
- package/dist/Tooltip/Tooltip.d.ts +1 -1
- package/dist/Tooltip/Tooltip.es.js +3 -1
- package/dist/Tooltip/types.d.ts +3 -0
- package/dist/assets/box.svg.cjs.js +21 -0
- package/dist/assets/box.svg.es.js +5 -0
- package/dist/index.cjs.js +30 -0
- package/dist/index.d.ts +17 -2
- package/dist/index.es.js +30 -0
- package/dist/message/Message.cjs.js +42 -0
- package/dist/message/Message.d.ts +3 -0
- package/dist/message/Message.es.js +43 -0
- package/dist/message/MessageContext.cjs.js +101 -0
- package/dist/message/MessageContext.d.ts +4 -0
- package/dist/message/MessageContext.es.js +101 -0
- package/dist/message/index.cjs.js +8 -0
- package/dist/message/index.d.ts +6 -0
- package/dist/message/index.es.js +8 -0
- package/dist/message/styles.cjs.js +79 -0
- package/dist/message/styles.d.ts +11 -0
- package/dist/message/styles.es.js +79 -0
- package/dist/message/types.d.ts +42 -0
- package/dist/typography/Text/Text.es.js +3 -3
- package/dist/typography/Title/Title.cjs.js +2 -0
- package/dist/typography/Title/Title.d.ts +1 -1
- package/dist/typography/Title/Title.es.js +2 -0
- package/dist/typography/Title/styles.cjs.js +3 -0
- package/dist/typography/Title/styles.es.js +3 -0
- package/dist/typography/Title/types.d.ts +1 -0
- package/package.json +17 -13
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { useState, useCallback } from "react";
|
|
2
|
+
import { getValueObject, setValueObject, deleteValueObject } from "@quen-ui/helpers";
|
|
3
|
+
const useForm = (options) => {
|
|
4
|
+
const [values, setValues] = useState(options?.initialValues ?? {});
|
|
5
|
+
const [fields, setFields] = useState({});
|
|
6
|
+
const [errors, setErrors] = useState([]);
|
|
7
|
+
const [subscribes, setSubscribes] = useState([]);
|
|
8
|
+
const [submitCallback, setSubmitCallback] = useState();
|
|
9
|
+
const registerField = useCallback(
|
|
10
|
+
(name, { defaultValue, rules, validate, dependencies }) => {
|
|
11
|
+
const value = defaultValue ?? getValueObject(options?.initialValues ?? {}, name);
|
|
12
|
+
setValues((prev) => setValueObject(prev, name, value));
|
|
13
|
+
setFields((prev) => ({
|
|
14
|
+
...prev,
|
|
15
|
+
[name]: { validate, rules, defaultValue, dependencies }
|
|
16
|
+
}));
|
|
17
|
+
},
|
|
18
|
+
[]
|
|
19
|
+
);
|
|
20
|
+
const unregisterField = useCallback((name) => {
|
|
21
|
+
setValues((prevState) => {
|
|
22
|
+
return deleteValueObject(prevState, name);
|
|
23
|
+
});
|
|
24
|
+
setErrors((prevState) => {
|
|
25
|
+
return prevState.filter((error) => error.name !== name);
|
|
26
|
+
});
|
|
27
|
+
setFields((prevState) => {
|
|
28
|
+
const copy = { ...prevState };
|
|
29
|
+
delete copy[name];
|
|
30
|
+
return copy;
|
|
31
|
+
});
|
|
32
|
+
}, []);
|
|
33
|
+
const registerSubscribe = useCallback(
|
|
34
|
+
(name, callback) => {
|
|
35
|
+
setSubscribes((prev) => [...prev, { name, func: callback }]);
|
|
36
|
+
},
|
|
37
|
+
[]
|
|
38
|
+
);
|
|
39
|
+
const unregisterSubscribe = useCallback((name) => {
|
|
40
|
+
setSubscribes((prev) => prev.filter((s) => s.name !== name));
|
|
41
|
+
}, []);
|
|
42
|
+
const triggerValidation = useCallback(
|
|
43
|
+
(name, value, _values) => {
|
|
44
|
+
const field = fields[name];
|
|
45
|
+
if (field?.validate) {
|
|
46
|
+
field.validate(value, _values);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
[fields]
|
|
50
|
+
);
|
|
51
|
+
const notifyWatchValueField = useCallback(
|
|
52
|
+
(updates) => {
|
|
53
|
+
subscribes.forEach((subscribe) => {
|
|
54
|
+
if (Object.keys(updates).includes(subscribe.name)) {
|
|
55
|
+
subscribe.func(updates[subscribe.name]);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
[subscribes, values]
|
|
60
|
+
);
|
|
61
|
+
const updateValues = useCallback(
|
|
62
|
+
(updates) => {
|
|
63
|
+
let changedValues = {};
|
|
64
|
+
let nextValues = {};
|
|
65
|
+
setValues((prev) => {
|
|
66
|
+
nextValues = { ...prev };
|
|
67
|
+
for (const [name, value] of Object.entries(updates)) {
|
|
68
|
+
nextValues = setValueObject(
|
|
69
|
+
nextValues,
|
|
70
|
+
name,
|
|
71
|
+
value
|
|
72
|
+
);
|
|
73
|
+
changedValues = setValueObject(
|
|
74
|
+
changedValues,
|
|
75
|
+
name,
|
|
76
|
+
value
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return nextValues;
|
|
80
|
+
});
|
|
81
|
+
setErrors((prev) => {
|
|
82
|
+
return prev.filter(
|
|
83
|
+
(error) => !Object.keys(updates).includes(error.name)
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
Object.entries(fields).forEach(([fieldName, field]) => {
|
|
87
|
+
const deps = field.dependencies ?? [];
|
|
88
|
+
if (deps.some((dep) => dep in updates)) {
|
|
89
|
+
const depValue = getValueObject(
|
|
90
|
+
nextValues,
|
|
91
|
+
fieldName,
|
|
92
|
+
""
|
|
93
|
+
);
|
|
94
|
+
triggerValidation(
|
|
95
|
+
fieldName,
|
|
96
|
+
depValue,
|
|
97
|
+
nextValues
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
notifyWatchValueField(updates);
|
|
102
|
+
options?.onValueChange?.(changedValues, nextValues);
|
|
103
|
+
},
|
|
104
|
+
[fields, triggerValidation, options, notifyWatchValueField]
|
|
105
|
+
);
|
|
106
|
+
const setFieldValue = useCallback(
|
|
107
|
+
(name, value) => {
|
|
108
|
+
updateValues({ [name]: value });
|
|
109
|
+
},
|
|
110
|
+
[updateValues]
|
|
111
|
+
);
|
|
112
|
+
const arrayHelpers = (name) => ({
|
|
113
|
+
add: (value) => {
|
|
114
|
+
setValues((prev) => {
|
|
115
|
+
const currentValue = getValueObject(prev, name, []);
|
|
116
|
+
return setValueObject(
|
|
117
|
+
prev,
|
|
118
|
+
`${name}[${currentValue.length}]`,
|
|
119
|
+
value
|
|
120
|
+
);
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
remove: (index) => {
|
|
124
|
+
setValues((prev) => {
|
|
125
|
+
const current = getValueObject(prev, name, []);
|
|
126
|
+
const newArr = current.filter((_, i) => i !== index);
|
|
127
|
+
return setValueObject(prev, name, newArr);
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
insert: (index, value) => {
|
|
131
|
+
setValues((prev) => {
|
|
132
|
+
const current = getValueObject(prev, name, []);
|
|
133
|
+
const newArr = [
|
|
134
|
+
...current.slice(0, index),
|
|
135
|
+
value,
|
|
136
|
+
...current.slice(index)
|
|
137
|
+
];
|
|
138
|
+
return setValueObject(prev, name, newArr);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
const onValidateFields = useCallback(async () => {
|
|
143
|
+
const results = await Promise.all(
|
|
144
|
+
Object.entries(fields).map(async ([fieldName, config]) => {
|
|
145
|
+
const { validate } = config;
|
|
146
|
+
if (!validate) return null;
|
|
147
|
+
return validate(getFieldValue(fieldName), values);
|
|
148
|
+
})
|
|
149
|
+
);
|
|
150
|
+
return results.flat().filter(Boolean).length === 0;
|
|
151
|
+
}, [fields, values]);
|
|
152
|
+
const resetFields = useCallback(() => {
|
|
153
|
+
setValues(options?.initialValues ?? {});
|
|
154
|
+
setErrors([]);
|
|
155
|
+
}, [options?.initialValues]);
|
|
156
|
+
const setFieldsValue = useCallback(
|
|
157
|
+
(_values) => {
|
|
158
|
+
updateValues(_values);
|
|
159
|
+
},
|
|
160
|
+
[updateValues]
|
|
161
|
+
);
|
|
162
|
+
const getFieldError = useCallback(
|
|
163
|
+
(name) => {
|
|
164
|
+
return errors.filter((error) => error.name === name)?.[0]?.errors ?? [];
|
|
165
|
+
},
|
|
166
|
+
[errors]
|
|
167
|
+
);
|
|
168
|
+
const getFieldsError = useCallback(
|
|
169
|
+
(names) => {
|
|
170
|
+
if (!names) {
|
|
171
|
+
return errors;
|
|
172
|
+
}
|
|
173
|
+
return errors.filter((error) => names.includes(error.name));
|
|
174
|
+
},
|
|
175
|
+
[errors]
|
|
176
|
+
);
|
|
177
|
+
const getFieldValue = useCallback(
|
|
178
|
+
(name) => {
|
|
179
|
+
return getValueObject(values, name);
|
|
180
|
+
},
|
|
181
|
+
[values]
|
|
182
|
+
);
|
|
183
|
+
const getFieldsValue = useCallback(
|
|
184
|
+
(names) => {
|
|
185
|
+
if (names) {
|
|
186
|
+
let fieldsValue = {};
|
|
187
|
+
names.forEach((name) => {
|
|
188
|
+
const value = getValueObject(values, name);
|
|
189
|
+
fieldsValue = {
|
|
190
|
+
fieldsValue,
|
|
191
|
+
...setValueObject(
|
|
192
|
+
fieldsValue,
|
|
193
|
+
name,
|
|
194
|
+
value
|
|
195
|
+
)
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
return fieldsValue;
|
|
199
|
+
}
|
|
200
|
+
return values;
|
|
201
|
+
},
|
|
202
|
+
[values]
|
|
203
|
+
);
|
|
204
|
+
const submit = () => {
|
|
205
|
+
submitCallback?.();
|
|
206
|
+
};
|
|
207
|
+
return {
|
|
208
|
+
getFieldValue,
|
|
209
|
+
getFieldsValue,
|
|
210
|
+
registerField,
|
|
211
|
+
resetFields,
|
|
212
|
+
setFieldValue,
|
|
213
|
+
setErrors,
|
|
214
|
+
fields,
|
|
215
|
+
unregisterField,
|
|
216
|
+
arrayHelpers,
|
|
217
|
+
registerSubscribe,
|
|
218
|
+
unregisterSubscribe,
|
|
219
|
+
triggerValidation,
|
|
220
|
+
setFieldsValue,
|
|
221
|
+
onValidateFields,
|
|
222
|
+
getFieldError,
|
|
223
|
+
getFieldsError,
|
|
224
|
+
submit,
|
|
225
|
+
setSubmitCallback
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
export {
|
|
229
|
+
useForm
|
|
230
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const useWatch = (name, form) => {
|
|
5
|
+
const [value, setValue] = React.useState(form.getFieldValue(name));
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
form.registerSubscribe(name, setValue);
|
|
8
|
+
return () => {
|
|
9
|
+
form.unregisterSubscribe(name);
|
|
10
|
+
};
|
|
11
|
+
}, []);
|
|
12
|
+
return value;
|
|
13
|
+
};
|
|
14
|
+
exports.useWatch = useWatch;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
const useWatch = (name, form) => {
|
|
3
|
+
const [value, setValue] = useState(form.getFieldValue(name));
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
form.registerSubscribe(name, setValue);
|
|
6
|
+
return () => {
|
|
7
|
+
form.unregisterSubscribe(name);
|
|
8
|
+
};
|
|
9
|
+
}, []);
|
|
10
|
+
return value;
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
useWatch
|
|
14
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const helpers = require("./helpers.cjs.js");
|
|
5
|
+
const styles = require("./styles.cjs.js");
|
|
6
|
+
const Text = require("../typography/Text/Text.cjs.js");
|
|
7
|
+
const Highlight = ({
|
|
8
|
+
children,
|
|
9
|
+
highlightComponent,
|
|
10
|
+
highlightStyle,
|
|
11
|
+
highlightTag = "mark",
|
|
12
|
+
highlightClassName,
|
|
13
|
+
escapeQuery = true,
|
|
14
|
+
query,
|
|
15
|
+
maxChunks = Infinity,
|
|
16
|
+
rootProps,
|
|
17
|
+
color = "yellow",
|
|
18
|
+
splitByWords = false,
|
|
19
|
+
caseSensitive = false,
|
|
20
|
+
ranges
|
|
21
|
+
}) => {
|
|
22
|
+
if (children === null) {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { ...rootProps, children });
|
|
24
|
+
}
|
|
25
|
+
const text = typeof children === "string" ? children : children?.props?.children;
|
|
26
|
+
const chunksFromRanges = React.useMemo(() => {
|
|
27
|
+
if (ranges && ranges.length && text) {
|
|
28
|
+
const normalized = helpers.normalizeRanges(ranges, text.length);
|
|
29
|
+
if (normalized.length === 0) return null;
|
|
30
|
+
return helpers.buildChunksFromRanges(text, normalized, maxChunks);
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}, [ranges, text, maxChunks]);
|
|
34
|
+
if (chunksFromRanges) {
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "m", ...rootProps, children: renderChunks(
|
|
36
|
+
chunksFromRanges,
|
|
37
|
+
highlightTag,
|
|
38
|
+
highlightComponent,
|
|
39
|
+
highlightClassName,
|
|
40
|
+
highlightStyle,
|
|
41
|
+
color
|
|
42
|
+
) });
|
|
43
|
+
}
|
|
44
|
+
const regex = React.useMemo(
|
|
45
|
+
() => helpers.buildRegexFromQuery(query ?? null, {
|
|
46
|
+
caseSensitive,
|
|
47
|
+
escapeQuery,
|
|
48
|
+
splitByWords
|
|
49
|
+
}),
|
|
50
|
+
[query, caseSensitive, escapeQuery, splitByWords]
|
|
51
|
+
);
|
|
52
|
+
const chunks = React.useMemo(() => {
|
|
53
|
+
if (!text) return null;
|
|
54
|
+
if (!regex) return [{ type: "text", text }];
|
|
55
|
+
const matches = helpers.collectMatches(text, regex);
|
|
56
|
+
if (!matches || matches.length === 0)
|
|
57
|
+
return [{ type: "text", text }];
|
|
58
|
+
return helpers.buildChunks(text, matches, maxChunks);
|
|
59
|
+
}, [text, regex, maxChunks]);
|
|
60
|
+
if (!chunks || chunks.length === 0 || !regex) {
|
|
61
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { ...rootProps, children: text });
|
|
62
|
+
}
|
|
63
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "m", ...rootProps, children: renderChunks(
|
|
64
|
+
chunks,
|
|
65
|
+
highlightTag,
|
|
66
|
+
highlightComponent,
|
|
67
|
+
highlightClassName,
|
|
68
|
+
highlightStyle,
|
|
69
|
+
color
|
|
70
|
+
) });
|
|
71
|
+
};
|
|
72
|
+
function renderChunks(matchChunks, highlightTag, highlightComponent, highlightClassName, highlightStyle, color) {
|
|
73
|
+
return matchChunks.map((c, i) => {
|
|
74
|
+
if (c.type === "text") {
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: c.text }, `t-${i}`);
|
|
76
|
+
}
|
|
77
|
+
if (highlightComponent) {
|
|
78
|
+
const Comp = highlightComponent;
|
|
79
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
80
|
+
Comp,
|
|
81
|
+
{
|
|
82
|
+
className: highlightClassName,
|
|
83
|
+
style: highlightStyle,
|
|
84
|
+
children: c.text
|
|
85
|
+
},
|
|
86
|
+
`m-${i}`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (highlightTag === "mark") {
|
|
90
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
91
|
+
styles.HighlightStyled,
|
|
92
|
+
{
|
|
93
|
+
"data-testid": "highlight-mark",
|
|
94
|
+
color,
|
|
95
|
+
className: highlightClassName,
|
|
96
|
+
style: highlightStyle,
|
|
97
|
+
children: c.text
|
|
98
|
+
},
|
|
99
|
+
`m-${i}`
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
return React.createElement(
|
|
103
|
+
highlightTag,
|
|
104
|
+
{
|
|
105
|
+
key: `m-${i}`,
|
|
106
|
+
className: highlightClassName,
|
|
107
|
+
style: highlightStyle
|
|
108
|
+
},
|
|
109
|
+
c.text
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
module.exports = Highlight;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { IHighlightProps } from './types';
|
|
2
|
+
declare const Highlight: ({ children, highlightComponent, highlightStyle, highlightTag, highlightClassName, escapeQuery, query, maxChunks, rootProps, color, splitByWords, caseSensitive, ranges }: IHighlightProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export default Highlight;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, Fragment, createElement } from "react";
|
|
3
|
+
import { normalizeRanges, buildChunksFromRanges, buildRegexFromQuery, collectMatches, buildChunks } from "./helpers.es.js";
|
|
4
|
+
import { HighlightStyled } from "./styles.es.js";
|
|
5
|
+
import Text from "../typography/Text/Text.es.js";
|
|
6
|
+
const Highlight = ({
|
|
7
|
+
children,
|
|
8
|
+
highlightComponent,
|
|
9
|
+
highlightStyle,
|
|
10
|
+
highlightTag = "mark",
|
|
11
|
+
highlightClassName,
|
|
12
|
+
escapeQuery = true,
|
|
13
|
+
query,
|
|
14
|
+
maxChunks = Infinity,
|
|
15
|
+
rootProps,
|
|
16
|
+
color = "yellow",
|
|
17
|
+
splitByWords = false,
|
|
18
|
+
caseSensitive = false,
|
|
19
|
+
ranges
|
|
20
|
+
}) => {
|
|
21
|
+
if (children === null) {
|
|
22
|
+
return /* @__PURE__ */ jsx("span", { ...rootProps, children });
|
|
23
|
+
}
|
|
24
|
+
const text = typeof children === "string" ? children : children?.props?.children;
|
|
25
|
+
const chunksFromRanges = useMemo(() => {
|
|
26
|
+
if (ranges && ranges.length && text) {
|
|
27
|
+
const normalized = normalizeRanges(ranges, text.length);
|
|
28
|
+
if (normalized.length === 0) return null;
|
|
29
|
+
return buildChunksFromRanges(text, normalized, maxChunks);
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}, [ranges, text, maxChunks]);
|
|
33
|
+
if (chunksFromRanges) {
|
|
34
|
+
return /* @__PURE__ */ jsx(Text, { size: "m", ...rootProps, children: renderChunks(
|
|
35
|
+
chunksFromRanges,
|
|
36
|
+
highlightTag,
|
|
37
|
+
highlightComponent,
|
|
38
|
+
highlightClassName,
|
|
39
|
+
highlightStyle,
|
|
40
|
+
color
|
|
41
|
+
) });
|
|
42
|
+
}
|
|
43
|
+
const regex = useMemo(
|
|
44
|
+
() => buildRegexFromQuery(query ?? null, {
|
|
45
|
+
caseSensitive,
|
|
46
|
+
escapeQuery,
|
|
47
|
+
splitByWords
|
|
48
|
+
}),
|
|
49
|
+
[query, caseSensitive, escapeQuery, splitByWords]
|
|
50
|
+
);
|
|
51
|
+
const chunks = useMemo(() => {
|
|
52
|
+
if (!text) return null;
|
|
53
|
+
if (!regex) return [{ type: "text", text }];
|
|
54
|
+
const matches = collectMatches(text, regex);
|
|
55
|
+
if (!matches || matches.length === 0)
|
|
56
|
+
return [{ type: "text", text }];
|
|
57
|
+
return buildChunks(text, matches, maxChunks);
|
|
58
|
+
}, [text, regex, maxChunks]);
|
|
59
|
+
if (!chunks || chunks.length === 0 || !regex) {
|
|
60
|
+
return /* @__PURE__ */ jsx("span", { ...rootProps, children: text });
|
|
61
|
+
}
|
|
62
|
+
return /* @__PURE__ */ jsx(Text, { size: "m", ...rootProps, children: renderChunks(
|
|
63
|
+
chunks,
|
|
64
|
+
highlightTag,
|
|
65
|
+
highlightComponent,
|
|
66
|
+
highlightClassName,
|
|
67
|
+
highlightStyle,
|
|
68
|
+
color
|
|
69
|
+
) });
|
|
70
|
+
};
|
|
71
|
+
function renderChunks(matchChunks, highlightTag, highlightComponent, highlightClassName, highlightStyle, color) {
|
|
72
|
+
return matchChunks.map((c, i) => {
|
|
73
|
+
if (c.type === "text") {
|
|
74
|
+
return /* @__PURE__ */ jsx(Fragment, { children: c.text }, `t-${i}`);
|
|
75
|
+
}
|
|
76
|
+
if (highlightComponent) {
|
|
77
|
+
const Comp = highlightComponent;
|
|
78
|
+
return /* @__PURE__ */ jsx(
|
|
79
|
+
Comp,
|
|
80
|
+
{
|
|
81
|
+
className: highlightClassName,
|
|
82
|
+
style: highlightStyle,
|
|
83
|
+
children: c.text
|
|
84
|
+
},
|
|
85
|
+
`m-${i}`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
if (highlightTag === "mark") {
|
|
89
|
+
return /* @__PURE__ */ jsx(
|
|
90
|
+
HighlightStyled,
|
|
91
|
+
{
|
|
92
|
+
"data-testid": "highlight-mark",
|
|
93
|
+
color,
|
|
94
|
+
className: highlightClassName,
|
|
95
|
+
style: highlightStyle,
|
|
96
|
+
children: c.text
|
|
97
|
+
},
|
|
98
|
+
`m-${i}`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return createElement(
|
|
102
|
+
highlightTag,
|
|
103
|
+
{
|
|
104
|
+
key: `m-${i}`,
|
|
105
|
+
className: highlightClassName,
|
|
106
|
+
style: highlightStyle
|
|
107
|
+
},
|
|
108
|
+
c.text
|
|
109
|
+
);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
export {
|
|
113
|
+
Highlight as default
|
|
114
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function escapeRegExp(s) {
|
|
4
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5
|
+
}
|
|
6
|
+
function normalizeRanges(ranges, textLength) {
|
|
7
|
+
const cleaned = ranges.map((r) => ({
|
|
8
|
+
start: Math.max(0, Math.min(textLength, r.start)),
|
|
9
|
+
end: Math.max(0, Math.min(textLength, r.end))
|
|
10
|
+
})).filter((r) => r.end > r.start).sort((a, b) => a.start - b.start);
|
|
11
|
+
if (cleaned.length === 0) return [];
|
|
12
|
+
const merged = [];
|
|
13
|
+
let prev = cleaned[0];
|
|
14
|
+
for (let i = 1; i < cleaned.length; i++) {
|
|
15
|
+
const cur = cleaned[i];
|
|
16
|
+
if (cur.start <= prev.end) {
|
|
17
|
+
prev.end = Math.max(prev.end, cur.end);
|
|
18
|
+
} else {
|
|
19
|
+
merged.push({ ...prev, text: "" });
|
|
20
|
+
prev = cur;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
merged.push({ ...prev, text: "" });
|
|
24
|
+
return merged;
|
|
25
|
+
}
|
|
26
|
+
function buildChunksFromRanges(text, ranges, maxChunks) {
|
|
27
|
+
const chunks = [];
|
|
28
|
+
let cursor = 0;
|
|
29
|
+
let matchesUsed = 0;
|
|
30
|
+
for (const r of ranges) {
|
|
31
|
+
if (cursor < r.start) {
|
|
32
|
+
chunks.push({ type: "text", text: text.slice(cursor, r.start) });
|
|
33
|
+
}
|
|
34
|
+
if (matchesUsed < maxChunks) {
|
|
35
|
+
chunks.push({
|
|
36
|
+
type: "match",
|
|
37
|
+
text: text.slice(r.start, r.end),
|
|
38
|
+
start: r.start,
|
|
39
|
+
end: r.end
|
|
40
|
+
});
|
|
41
|
+
matchesUsed++;
|
|
42
|
+
} else {
|
|
43
|
+
chunks.push({ type: "text", text: text.slice(r.start, text.length) });
|
|
44
|
+
cursor = text.length;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
cursor = r.end;
|
|
48
|
+
}
|
|
49
|
+
if (cursor < text.length) {
|
|
50
|
+
chunks.push({ type: "text", text: text.slice(cursor) });
|
|
51
|
+
}
|
|
52
|
+
return chunks;
|
|
53
|
+
}
|
|
54
|
+
function buildRegexFromQuery(query, {
|
|
55
|
+
caseSensitive = false,
|
|
56
|
+
escapeQuery = true,
|
|
57
|
+
splitByWords = false
|
|
58
|
+
}) {
|
|
59
|
+
if (!query) return null;
|
|
60
|
+
if (query instanceof RegExp) {
|
|
61
|
+
const flags = query.flags || "";
|
|
62
|
+
const finalFlags = caseSensitive ? flags.replace("i", "") : flags.includes("i") ? flags : flags + "i";
|
|
63
|
+
try {
|
|
64
|
+
return new RegExp(query.source, finalFlags);
|
|
65
|
+
} catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const arr = Array.isArray(query) ? query.filter(Boolean) : [query];
|
|
70
|
+
const tokens = arr.map((t) => escapeQuery ? escapeRegExp(t) : t).filter((t) => t.length > 0).map((t) => splitByWords ? `\\b${t}\\b` : t);
|
|
71
|
+
if (tokens.length === 0) return null;
|
|
72
|
+
const pattern = tokens.join("|");
|
|
73
|
+
try {
|
|
74
|
+
return new RegExp(pattern, caseSensitive ? "g" : "gi");
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function resolveOverlaps(matches) {
|
|
80
|
+
const sorted = matches.slice().sort((a, b) => a.start - b.start || b.end - b.end);
|
|
81
|
+
sorted.sort((a, b) => a.start - b.start || b.end - b.start - (a.end - a.start));
|
|
82
|
+
const kept = [];
|
|
83
|
+
for (const m of sorted) {
|
|
84
|
+
if (kept.length === 0) {
|
|
85
|
+
kept.push(m);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const last = kept[kept.length - 1];
|
|
89
|
+
if (m.start >= last.end) {
|
|
90
|
+
kept.push(m);
|
|
91
|
+
} else {
|
|
92
|
+
if (m.end > last.end) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
kept.sort((a, b) => a.start - b.start);
|
|
98
|
+
return kept;
|
|
99
|
+
}
|
|
100
|
+
function collectMatches(subject, regex) {
|
|
101
|
+
if (!regex.global) {
|
|
102
|
+
const flags = regex.flags.includes("g") ? regex.flags : regex.flags + "g";
|
|
103
|
+
regex = new RegExp(regex.source, flags);
|
|
104
|
+
}
|
|
105
|
+
const matches = [];
|
|
106
|
+
let m;
|
|
107
|
+
regex.lastIndex = 0;
|
|
108
|
+
while ((m = regex.exec(subject)) !== null) {
|
|
109
|
+
const text = m[0];
|
|
110
|
+
if (!text) {
|
|
111
|
+
regex.lastIndex++;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const start = m.index;
|
|
115
|
+
const end = start + text.length;
|
|
116
|
+
matches.push({ start, end, text });
|
|
117
|
+
}
|
|
118
|
+
return resolveOverlaps(matches);
|
|
119
|
+
}
|
|
120
|
+
function buildChunks(subject, matches, maxChunks = Infinity) {
|
|
121
|
+
const chunks = [];
|
|
122
|
+
let cursor = 0;
|
|
123
|
+
let countMatches = 0;
|
|
124
|
+
for (const m of matches) {
|
|
125
|
+
if (m.start > cursor) {
|
|
126
|
+
chunks.push({ type: "text", text: subject.slice(cursor, m.start) });
|
|
127
|
+
}
|
|
128
|
+
if (countMatches < maxChunks) {
|
|
129
|
+
chunks.push({ type: "match", text: subject.slice(m.start, m.end), start: m.start, end: m.end });
|
|
130
|
+
countMatches++;
|
|
131
|
+
} else {
|
|
132
|
+
chunks.push({ type: "text", text: subject.slice(m.start, subject.length) });
|
|
133
|
+
cursor = subject.length;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
cursor = m.end;
|
|
137
|
+
}
|
|
138
|
+
if (cursor < subject.length) {
|
|
139
|
+
chunks.push({ type: "text", text: subject.slice(cursor) });
|
|
140
|
+
}
|
|
141
|
+
return chunks;
|
|
142
|
+
}
|
|
143
|
+
exports.buildChunks = buildChunks;
|
|
144
|
+
exports.buildChunksFromRanges = buildChunksFromRanges;
|
|
145
|
+
exports.buildRegexFromQuery = buildRegexFromQuery;
|
|
146
|
+
exports.collectMatches = collectMatches;
|
|
147
|
+
exports.normalizeRanges = normalizeRanges;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IHighlightProps, TMatchChunk, TMatch } from './types';
|
|
2
|
+
export declare function normalizeRanges(ranges: Array<{
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
}>, textLength: number): TMatch[];
|
|
6
|
+
export declare function buildChunksFromRanges(text: string, ranges: TMatch[], maxChunks: number): TMatchChunk[];
|
|
7
|
+
/**
|
|
8
|
+
* Build regex from query prop.
|
|
9
|
+
* Returns a RegExp or null (if no queries).
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildRegexFromQuery(query: string | string[] | RegExp | null | undefined, { caseSensitive, escapeQuery, splitByWords }: Pick<IHighlightProps, "caseSensitive" | "escapeQuery" | "splitByWords">): RegExp | null;
|
|
12
|
+
/**
|
|
13
|
+
* Given a subject string and a regex with 'g', produce non-overlapping matches sorted by index.
|
|
14
|
+
*/
|
|
15
|
+
export declare function collectMatches(subject: string, regex: RegExp): Array<{
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Turn subject + matches into chunks (text and match chunks)
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildChunks(subject: string, matches: Array<{
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
26
|
+
text: string;
|
|
27
|
+
}>, maxChunks?: number): TMatchChunk[];
|