@unoff/ui 1.21.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/LICENSE +21 -0
- package/README.md +880 -0
- package/dist/assets/Accordion.css +1 -0
- package/dist/assets/ActionsItem.css +1 -0
- package/dist/assets/ActionsList.css +1 -0
- package/dist/assets/Avatar.css +1 -0
- package/dist/assets/Bar.css +1 -0
- package/dist/assets/Button.css +1 -0
- package/dist/assets/Card.css +1 -0
- package/dist/assets/Chip.css +1 -0
- package/dist/assets/ColorChip.css +1 -0
- package/dist/assets/ColorItem.css +1 -0
- package/dist/assets/Consent.css +1 -0
- package/dist/assets/Dialog.css +1 -0
- package/dist/assets/DraggableItem.css +1 -0
- package/dist/assets/DraggableWindow.css +1 -0
- package/dist/assets/Drawer.css +1 -0
- package/dist/assets/Dropdown.css +1 -0
- package/dist/assets/Dropzone.css +1 -0
- package/dist/assets/FormItem.css +1 -0
- package/dist/assets/Icon.css +1 -0
- package/dist/assets/IconChip.css +1 -0
- package/dist/assets/Input.css +1 -0
- package/dist/assets/InputsBar.css +1 -0
- package/dist/assets/KeyboardShortcutItem.css +1 -0
- package/dist/assets/Knob.css +1 -0
- package/dist/assets/Layout.css +1 -0
- package/dist/assets/List.css +1 -0
- package/dist/assets/MembersList.css +1 -0
- package/dist/assets/Menu.css +1 -0
- package/dist/assets/Message.css +1 -0
- package/dist/assets/MultipleSlider.css +1 -0
- package/dist/assets/Notification.css +1 -0
- package/dist/assets/Popin.css +1 -0
- package/dist/assets/Section.css +1 -0
- package/dist/assets/SectionTitle.css +1 -0
- package/dist/assets/Select.css +1 -0
- package/dist/assets/SemanticMessage.css +1 -0
- package/dist/assets/SimpleItem.css +1 -0
- package/dist/assets/SimpleSlider.css +1 -0
- package/dist/assets/SortableList.css +1 -0
- package/dist/assets/Tabs.css +1 -0
- package/dist/assets/Text.css +1 -0
- package/dist/assets/Thumbnail.css +1 -0
- package/dist/assets/Tooltip.css +1 -0
- package/dist/assets/styles/icons/icons.css +1 -0
- package/dist/assets/styles/icons/styles/figma.css +1 -0
- package/dist/assets/styles/icons/styles/framer.css +1 -0
- package/dist/assets/styles/icons/styles/penpot.css +1 -0
- package/dist/assets/styles/icons/styles/sketch.css +1 -0
- package/dist/assets/styles/layouts.css +1 -0
- package/dist/assets/styles/texts/styles/figma.css +1 -0
- package/dist/assets/styles/texts/styles/framer.css +1 -0
- package/dist/assets/styles/texts/styles/penpot.css +1 -0
- package/dist/assets/styles/texts/styles/sketch.css +1 -0
- package/dist/assets/styles/texts/texts.css +1 -0
- package/dist/assets/styles/tokens/figma-types.css +1 -0
- package/dist/assets/styles/tokens/framer-types.css +1 -0
- package/dist/assets/styles/tokens/modules/figma-colors.css +1 -0
- package/dist/assets/styles/tokens/modules/figma-types.css +1 -0
- package/dist/assets/styles/tokens/modules/framer-colors.css +1 -0
- package/dist/assets/styles/tokens/modules/framer-types.css +1 -0
- package/dist/assets/styles/tokens/modules/globals.css +1 -0
- package/dist/assets/styles/tokens/modules/penpot-colors.css +1 -0
- package/dist/assets/styles/tokens/modules/penpot-types.css +1 -0
- package/dist/assets/styles/tokens/modules/sketch-colors.css +1 -0
- package/dist/assets/styles/tokens/modules/sketch-types.css +1 -0
- package/dist/assets/styles/tokens/penpot-types.css +1 -0
- package/dist/assets/styles/tokens/sketch-types.css +1 -0
- package/dist/components/actions/accordion/Accordion.d.ts +59 -0
- package/dist/components/actions/accordion/Accordion.d.ts.map +1 -0
- package/dist/components/actions/accordion/Accordion.js +104 -0
- package/dist/components/actions/accordion/Accordion.js.map +1 -0
- package/dist/components/actions/button/Button.d.ts +148 -0
- package/dist/components/actions/button/Button.d.ts.map +1 -0
- package/dist/components/actions/button/Button.figma.d.ts +2 -0
- package/dist/components/actions/button/Button.figma.d.ts.map +1 -0
- package/dist/components/actions/button/Button.figma.js +43 -0
- package/dist/components/actions/button/Button.figma.js.map +1 -0
- package/dist/components/actions/button/Button.js +306 -0
- package/dist/components/actions/button/Button.js.map +1 -0
- package/dist/components/actions/card/Card.d.ts +39 -0
- package/dist/components/actions/card/Card.d.ts.map +1 -0
- package/dist/components/actions/card/Card.js +99 -0
- package/dist/components/actions/card/Card.js.map +1 -0
- package/dist/components/actions/knob/Knob.d.ts +93 -0
- package/dist/components/actions/knob/Knob.d.ts.map +1 -0
- package/dist/components/actions/knob/Knob.js +179 -0
- package/dist/components/actions/knob/Knob.js.map +1 -0
- package/dist/components/actions/menu/Menu.d.ts +104 -0
- package/dist/components/actions/menu/Menu.d.ts.map +1 -0
- package/dist/components/actions/menu/Menu.js +200 -0
- package/dist/components/actions/menu/Menu.js.map +1 -0
- package/dist/components/assets/avatar/Avatar.d.ts +30 -0
- package/dist/components/assets/avatar/Avatar.d.ts.map +1 -0
- package/dist/components/assets/avatar/Avatar.js +54 -0
- package/dist/components/assets/avatar/Avatar.js.map +1 -0
- package/dist/components/assets/icon/Icon.d.ts +28 -0
- package/dist/components/assets/icon/Icon.d.ts.map +1 -0
- package/dist/components/assets/icon/Icon.figma.d.ts +2 -0
- package/dist/components/assets/icon/Icon.figma.d.ts.map +1 -0
- package/dist/components/assets/icon/Icon.figma.js +27 -0
- package/dist/components/assets/icon/Icon.figma.js.map +1 -0
- package/dist/components/assets/icon/Icon.js +35 -0
- package/dist/components/assets/icon/Icon.js.map +1 -0
- package/dist/components/assets/section-title/SectionTitle.d.ts +22 -0
- package/dist/components/assets/section-title/SectionTitle.d.ts.map +1 -0
- package/dist/components/assets/section-title/SectionTitle.js +42 -0
- package/dist/components/assets/section-title/SectionTitle.js.map +1 -0
- package/dist/components/assets/text/Text.d.ts +34 -0
- package/dist/components/assets/text/Text.d.ts.map +1 -0
- package/dist/components/assets/text/Text.js +35 -0
- package/dist/components/assets/text/Text.js.map +1 -0
- package/dist/components/assets/thumbnail/Thumbnail.d.ts +25 -0
- package/dist/components/assets/thumbnail/Thumbnail.d.ts.map +1 -0
- package/dist/components/assets/thumbnail/Thumbnail.js +67 -0
- package/dist/components/assets/thumbnail/Thumbnail.js.map +1 -0
- package/dist/components/dialogs/consent/Consent.d.ts +85 -0
- package/dist/components/dialogs/consent/Consent.d.ts.map +1 -0
- package/dist/components/dialogs/consent/Consent.js +402 -0
- package/dist/components/dialogs/consent/Consent.js.map +1 -0
- package/dist/components/dialogs/dialog/Dialog.d.ts +81 -0
- package/dist/components/dialogs/dialog/Dialog.d.ts.map +1 -0
- package/dist/components/dialogs/dialog/Dialog.js +58 -0
- package/dist/components/dialogs/dialog/Dialog.js.map +1 -0
- package/dist/components/dialogs/message/Message.d.ts +25 -0
- package/dist/components/dialogs/message/Message.d.ts.map +1 -0
- package/dist/components/dialogs/message/Message.js +141 -0
- package/dist/components/dialogs/message/Message.js.map +1 -0
- package/dist/components/dialogs/notification/Notification.d.ts +22 -0
- package/dist/components/dialogs/notification/Notification.d.ts.map +1 -0
- package/dist/components/dialogs/notification/Notification.js +38 -0
- package/dist/components/dialogs/notification/Notification.js.map +1 -0
- package/dist/components/dialogs/semantic-message/SemanticMessage.d.ts +40 -0
- package/dist/components/dialogs/semantic-message/SemanticMessage.d.ts.map +1 -0
- package/dist/components/dialogs/semantic-message/SemanticMessage.js +71 -0
- package/dist/components/dialogs/semantic-message/SemanticMessage.js.map +1 -0
- package/dist/components/inputs/dropdown/Dropdown.d.ts +123 -0
- package/dist/components/inputs/dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/inputs/dropdown/Dropdown.figma.d.ts +2 -0
- package/dist/components/inputs/dropdown/Dropdown.figma.d.ts.map +1 -0
- package/dist/components/inputs/dropdown/Dropdown.figma.js +28 -0
- package/dist/components/inputs/dropdown/Dropdown.figma.js.map +1 -0
- package/dist/components/inputs/dropdown/Dropdown.js +307 -0
- package/dist/components/inputs/dropdown/Dropdown.js.map +1 -0
- package/dist/components/inputs/dropzone/Dropzone.d.ts +78 -0
- package/dist/components/inputs/dropzone/Dropzone.d.ts.map +1 -0
- package/dist/components/inputs/dropzone/Dropzone.js +222 -0
- package/dist/components/inputs/dropzone/Dropzone.js.map +1 -0
- package/dist/components/inputs/input/Input.d.ts +203 -0
- package/dist/components/inputs/input/Input.d.ts.map +1 -0
- package/dist/components/inputs/input/Input.figma.d.ts +2 -0
- package/dist/components/inputs/input/Input.figma.d.ts.map +1 -0
- package/dist/components/inputs/input/Input.figma.js +35 -0
- package/dist/components/inputs/input/Input.figma.js.map +1 -0
- package/dist/components/inputs/input/Input.js +713 -0
- package/dist/components/inputs/input/Input.js.map +1 -0
- package/dist/components/inputs/inputs-bar/InputsBar.d.ts +18 -0
- package/dist/components/inputs/inputs-bar/InputsBar.d.ts.map +1 -0
- package/dist/components/inputs/inputs-bar/InputsBar.js +15 -0
- package/dist/components/inputs/inputs-bar/InputsBar.js.map +1 -0
- package/dist/components/inputs/multiple-slider/MultipleSlider.d.ts +125 -0
- package/dist/components/inputs/multiple-slider/MultipleSlider.d.ts.map +1 -0
- package/dist/components/inputs/multiple-slider/MultipleSlider.js +417 -0
- package/dist/components/inputs/multiple-slider/MultipleSlider.js.map +1 -0
- package/dist/components/inputs/multiple-slider/actions/addStop.d.ts +8 -0
- package/dist/components/inputs/multiple-slider/actions/addStop.d.ts.map +1 -0
- package/dist/components/inputs/multiple-slider/actions/deleteStop.d.ts +8 -0
- package/dist/components/inputs/multiple-slider/actions/deleteStop.d.ts.map +1 -0
- package/dist/components/inputs/multiple-slider/actions/shiftLeftStop.d.ts +5 -0
- package/dist/components/inputs/multiple-slider/actions/shiftLeftStop.d.ts.map +1 -0
- package/dist/components/inputs/multiple-slider/actions/shiftRightStop.d.ts +5 -0
- package/dist/components/inputs/multiple-slider/actions/shiftRightStop.d.ts.map +1 -0
- package/dist/components/inputs/select/Select.d.ts +112 -0
- package/dist/components/inputs/select/Select.d.ts.map +1 -0
- package/dist/components/inputs/select/Select.js +313 -0
- package/dist/components/inputs/select/Select.js.map +1 -0
- package/dist/components/inputs/simple-slider/SimpleSlider.d.ts +93 -0
- package/dist/components/inputs/simple-slider/SimpleSlider.d.ts.map +1 -0
- package/dist/components/inputs/simple-slider/SimpleSlider.js +166 -0
- package/dist/components/inputs/simple-slider/SimpleSlider.js.map +1 -0
- package/dist/components/lists/actions-item/ActionsItem.d.ts +64 -0
- package/dist/components/lists/actions-item/ActionsItem.d.ts.map +1 -0
- package/dist/components/lists/actions-item/ActionsItem.js +115 -0
- package/dist/components/lists/actions-item/ActionsItem.js.map +1 -0
- package/dist/components/lists/actions-list/ActionsList.d.ts +79 -0
- package/dist/components/lists/actions-list/ActionsList.d.ts.map +1 -0
- package/dist/components/lists/actions-list/ActionsList.js +384 -0
- package/dist/components/lists/actions-list/ActionsList.js.map +1 -0
- package/dist/components/lists/color-item/ColorItem.d.ts +27 -0
- package/dist/components/lists/color-item/ColorItem.d.ts.map +1 -0
- package/dist/components/lists/color-item/ColorItem.js +70 -0
- package/dist/components/lists/color-item/ColorItem.js.map +1 -0
- package/dist/components/lists/draggable-item/DraggableItem.d.ts +110 -0
- package/dist/components/lists/draggable-item/DraggableItem.d.ts.map +1 -0
- package/dist/components/lists/draggable-item/DraggableItem.js +176 -0
- package/dist/components/lists/draggable-item/DraggableItem.js.map +1 -0
- package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.d.ts +19 -0
- package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.d.ts.map +1 -0
- package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.js +75 -0
- package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.js.map +1 -0
- package/dist/components/lists/members-list/MembersList.d.ts +32 -0
- package/dist/components/lists/members-list/MembersList.d.ts.map +1 -0
- package/dist/components/lists/members-list/MembersList.js +117 -0
- package/dist/components/lists/members-list/MembersList.js.map +1 -0
- package/dist/components/lists/sortable-list/SortableList.d.ts +103 -0
- package/dist/components/lists/sortable-list/SortableList.d.ts.map +1 -0
- package/dist/components/lists/sortable-list/SortableList.js +148 -0
- package/dist/components/lists/sortable-list/SortableList.js.map +1 -0
- package/dist/components/lists/tabs/Tabs.d.ts +48 -0
- package/dist/components/lists/tabs/Tabs.d.ts.map +1 -0
- package/dist/components/lists/tabs/Tabs.figma.d.ts +2 -0
- package/dist/components/lists/tabs/Tabs.figma.d.ts.map +1 -0
- package/dist/components/lists/tabs/Tabs.figma.js +31 -0
- package/dist/components/lists/tabs/Tabs.figma.js.map +1 -0
- package/dist/components/lists/tabs/Tabs.js +165 -0
- package/dist/components/lists/tabs/Tabs.js.map +1 -0
- package/dist/components/slots/bar/Bar.d.ts +65 -0
- package/dist/components/slots/bar/Bar.d.ts.map +1 -0
- package/dist/components/slots/bar/Bar.js +100 -0
- package/dist/components/slots/bar/Bar.js.map +1 -0
- package/dist/components/slots/draggable-window/DraggableWindow.d.ts +25 -0
- package/dist/components/slots/draggable-window/DraggableWindow.d.ts.map +1 -0
- package/dist/components/slots/draggable-window/DraggableWindow.js +100 -0
- package/dist/components/slots/draggable-window/DraggableWindow.js.map +1 -0
- package/dist/components/slots/drawer/Drawer.d.ts +78 -0
- package/dist/components/slots/drawer/Drawer.d.ts.map +1 -0
- package/dist/components/slots/drawer/Drawer.js +148 -0
- package/dist/components/slots/drawer/Drawer.js.map +1 -0
- package/dist/components/slots/form-item/FormItem.d.ts +52 -0
- package/dist/components/slots/form-item/FormItem.d.ts.map +1 -0
- package/dist/components/slots/form-item/FormItem.js +89 -0
- package/dist/components/slots/form-item/FormItem.js.map +1 -0
- package/dist/components/slots/layout/Layout.d.ts +34 -0
- package/dist/components/slots/layout/Layout.d.ts.map +1 -0
- package/dist/components/slots/layout/Layout.js +45 -0
- package/dist/components/slots/layout/Layout.js.map +1 -0
- package/dist/components/slots/list/List.d.ts +49 -0
- package/dist/components/slots/list/List.d.ts.map +1 -0
- package/dist/components/slots/list/List.js +55 -0
- package/dist/components/slots/list/List.js.map +1 -0
- package/dist/components/slots/popin/Popin.d.ts +85 -0
- package/dist/components/slots/popin/Popin.d.ts.map +1 -0
- package/dist/components/slots/popin/Popin.js +182 -0
- package/dist/components/slots/popin/Popin.js.map +1 -0
- package/dist/components/slots/section/Section.d.ts +32 -0
- package/dist/components/slots/section/Section.d.ts.map +1 -0
- package/dist/components/slots/section/Section.js +49 -0
- package/dist/components/slots/section/Section.js.map +1 -0
- package/dist/components/slots/simple-item/SimpleItem.d.ts +45 -0
- package/dist/components/slots/simple-item/SimpleItem.d.ts.map +1 -0
- package/dist/components/slots/simple-item/SimpleItem.js +100 -0
- package/dist/components/slots/simple-item/SimpleItem.js.map +1 -0
- package/dist/components/tags/chip/Chip.d.ts +43 -0
- package/dist/components/tags/chip/Chip.d.ts.map +1 -0
- package/dist/components/tags/chip/Chip.figma.d.ts +2 -0
- package/dist/components/tags/chip/Chip.figma.d.ts.map +1 -0
- package/dist/components/tags/chip/Chip.figma.js +18 -0
- package/dist/components/tags/chip/Chip.figma.js.map +1 -0
- package/dist/components/tags/chip/Chip.js +88 -0
- package/dist/components/tags/chip/Chip.js.map +1 -0
- package/dist/components/tags/color-chip/ColorChip.d.ts +36 -0
- package/dist/components/tags/color-chip/ColorChip.d.ts.map +1 -0
- package/dist/components/tags/color-chip/ColorChip.js +39 -0
- package/dist/components/tags/color-chip/ColorChip.js.map +1 -0
- package/dist/components/tags/icon-chip/IconChip.d.ts +42 -0
- package/dist/components/tags/icon-chip/IconChip.d.ts.map +1 -0
- package/dist/components/tags/icon-chip/IconChip.js +54 -0
- package/dist/components/tags/icon-chip/IconChip.js.map +1 -0
- package/dist/components/tags/tooltip/Tooltip.d.ts +25 -0
- package/dist/components/tags/tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/tags/tooltip/Tooltip.js +72 -0
- package/dist/components/tags/tooltip/Tooltip.js.map +1 -0
- package/dist/do-classnames-DSDFCvzy.js +5 -0
- package/dist/do-classnames-DSDFCvzy.js.map +1 -0
- package/dist/do-map-2nhWP1KI.js +8 -0
- package/dist/do-map-2nhWP1KI.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/index_react-CmuCVQet.js +13799 -0
- package/dist/index_react-CmuCVQet.js.map +1 -0
- package/dist/styles/icons/icons.module.js +115 -0
- package/dist/styles/icons/icons.module.js.map +1 -0
- package/dist/styles/layouts.module.js +37 -0
- package/dist/styles/layouts.module.js.map +1 -0
- package/dist/styles/texts/texts.module.js +23 -0
- package/dist/styles/texts/texts.module.js.map +1 -0
- package/dist/styles/tokens/modules/figma-colors.module.js +9 -0
- package/dist/styles/tokens/modules/figma-colors.module.js.map +1 -0
- package/dist/styles/tokens/modules/figma-types.module.js +9 -0
- package/dist/styles/tokens/modules/figma-types.module.js.map +1 -0
- package/dist/styles/tokens/modules/framer-colors.module.js +9 -0
- package/dist/styles/tokens/modules/framer-colors.module.js.map +1 -0
- package/dist/styles/tokens/modules/framer-types.module.js +9 -0
- package/dist/styles/tokens/modules/framer-types.module.js.map +1 -0
- package/dist/styles/tokens/modules/globals.module.js +9 -0
- package/dist/styles/tokens/modules/globals.module.js.map +1 -0
- package/dist/styles/tokens/modules/penpot-colors.module.js +9 -0
- package/dist/styles/tokens/modules/penpot-colors.module.js.map +1 -0
- package/dist/styles/tokens/modules/penpot-types.module.js +9 -0
- package/dist/styles/tokens/modules/penpot-types.module.js.map +1 -0
- package/dist/styles/tokens/modules/sketch-colors.module.js +9 -0
- package/dist/styles/tokens/modules/sketch-colors.module.js.map +1 -0
- package/dist/styles/tokens/modules/sketch-types.module.js +9 -0
- package/dist/styles/tokens/modules/sketch-types.module.js.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/types/consent.types.d.ts +10 -0
- package/dist/types/consent.types.d.ts.map +1 -0
- package/dist/types/consent.types.js +2 -0
- package/dist/types/consent.types.js.map +1 -0
- package/dist/types/icon.types.d.ts +2 -0
- package/dist/types/icon.types.d.ts.map +1 -0
- package/dist/types/icon.types.js +2 -0
- package/dist/types/icon.types.js.map +1 -0
- package/dist/types/list.types.d.ts +14 -0
- package/dist/types/list.types.d.ts.map +1 -0
- package/dist/types/list.types.js +2 -0
- package/dist/types/list.types.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { DropdownOption } from '../../../types/list.types';
|
|
3
|
+
import { IconList } from '../../../types/icon.types';
|
|
4
|
+
|
|
5
|
+
export interface DropdownProps {
|
|
6
|
+
/**
|
|
7
|
+
* Unique identifier for the dropdown
|
|
8
|
+
*/
|
|
9
|
+
id: string;
|
|
10
|
+
/**
|
|
11
|
+
* List of options to display in the dropdown
|
|
12
|
+
*/
|
|
13
|
+
options: Array<DropdownOption>;
|
|
14
|
+
/**
|
|
15
|
+
* ID of the currently selected option
|
|
16
|
+
*/
|
|
17
|
+
selected: string;
|
|
18
|
+
/**
|
|
19
|
+
* ID of the container element for portal rendering
|
|
20
|
+
*/
|
|
21
|
+
containerId?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Horizontal alignment of the dropdown
|
|
24
|
+
* @default 'LEFT'
|
|
25
|
+
*/
|
|
26
|
+
alignment?: 'RIGHT' | 'LEFT' | 'FILL';
|
|
27
|
+
/**
|
|
28
|
+
* Vertical position of helper tooltips
|
|
29
|
+
* @default 'NONE'
|
|
30
|
+
*/
|
|
31
|
+
pin?: 'NONE' | 'TOP' | 'BOTTOM';
|
|
32
|
+
/**
|
|
33
|
+
* Helper tooltip configuration
|
|
34
|
+
*/
|
|
35
|
+
helper?: {
|
|
36
|
+
/** Tooltip content */
|
|
37
|
+
label: string | React.ReactNode;
|
|
38
|
+
/** Tooltip position */
|
|
39
|
+
pin?: 'TOP' | 'BOTTOM';
|
|
40
|
+
/** Tooltip display type */
|
|
41
|
+
type?: 'MULTI_LINE' | 'SINGLE_LINE';
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Preview tooltip configuration with image
|
|
45
|
+
*/
|
|
46
|
+
preview?: {
|
|
47
|
+
/** Preview image URL */
|
|
48
|
+
image: string;
|
|
49
|
+
/** Preview text */
|
|
50
|
+
text: string | React.ReactNode;
|
|
51
|
+
/** Preview position */
|
|
52
|
+
pin?: 'TOP' | 'BOTTOM';
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Warning tooltip configuration
|
|
56
|
+
*/
|
|
57
|
+
warning?: {
|
|
58
|
+
/** Warning message */
|
|
59
|
+
label: string | React.ReactNode;
|
|
60
|
+
/** Warning position */
|
|
61
|
+
pin?: 'TOP' | 'BOTTOM';
|
|
62
|
+
/** Warning display type */
|
|
63
|
+
type?: 'MULTI_LINE' | 'SINGLE_LINE';
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Reflow configuration for responsive behavior
|
|
67
|
+
* @default { isEnabled: false, icon: 'adjust' }
|
|
68
|
+
*/
|
|
69
|
+
shouldReflow?: {
|
|
70
|
+
/** Whether reflow is enabled */
|
|
71
|
+
isEnabled: boolean;
|
|
72
|
+
/** Icon to show when reflowed */
|
|
73
|
+
icon: IconList;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Whether the dropdown is disabled
|
|
77
|
+
* @default false
|
|
78
|
+
*/
|
|
79
|
+
isDisabled?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Whether the dropdown is blocked
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
isBlocked?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Whether to show a "New" badge
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
isNew?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Handler called when unblock is clicked
|
|
92
|
+
*/
|
|
93
|
+
onUnblock?: React.MouseEventHandler & React.KeyboardEventHandler;
|
|
94
|
+
}
|
|
95
|
+
export interface DropdownStates {
|
|
96
|
+
isMenuOpen: boolean;
|
|
97
|
+
isMenuVisible: boolean;
|
|
98
|
+
listShouldScroll: boolean;
|
|
99
|
+
isTooltipVisible: boolean;
|
|
100
|
+
documentWidth: number;
|
|
101
|
+
}
|
|
102
|
+
export default class Dropdown extends React.Component<DropdownProps, DropdownStates> {
|
|
103
|
+
private selectMenuRef;
|
|
104
|
+
private buttonRef;
|
|
105
|
+
private listRef;
|
|
106
|
+
private actionsListRef;
|
|
107
|
+
private menuRef;
|
|
108
|
+
private subMenuRef;
|
|
109
|
+
static defaultProps: Partial<DropdownProps>;
|
|
110
|
+
constructor(props: DropdownProps);
|
|
111
|
+
componentDidMount: () => void;
|
|
112
|
+
componentWillUnmount: () => void;
|
|
113
|
+
handleResize: () => void;
|
|
114
|
+
onOpenMenu: () => void;
|
|
115
|
+
setPosition: () => string;
|
|
116
|
+
handleClickOutside: (e: Event) => void;
|
|
117
|
+
findSelectedOption: (options: Array<DropdownOption>) => string;
|
|
118
|
+
Status: () => import("react/jsx-runtime").JSX.Element | undefined;
|
|
119
|
+
MenuButton: () => import("react/jsx-runtime").JSX.Element;
|
|
120
|
+
DropdownButton: () => import("react/jsx-runtime").JSX.Element;
|
|
121
|
+
render(): import("react/jsx-runtime").JSX.Element;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=Dropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.figma.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropdown/Dropdown.figma.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { i as e } from "../../../index_react-CmuCVQet.js";
|
|
3
|
+
import o from "./Dropdown.js";
|
|
4
|
+
e.figma.connect(
|
|
5
|
+
o,
|
|
6
|
+
"https://www.figma.com/design/QlBdsfEcaUsGBzqA20xbNi/Unoff?node-id=393:795",
|
|
7
|
+
{
|
|
8
|
+
props: {
|
|
9
|
+
alignment: e.figma.enum("Type", {
|
|
10
|
+
HUG: "LEFT",
|
|
11
|
+
STRETCH: "FILL"
|
|
12
|
+
})
|
|
13
|
+
},
|
|
14
|
+
example: (p) => /* @__PURE__ */ t(
|
|
15
|
+
o,
|
|
16
|
+
{
|
|
17
|
+
id: "dropdown-example",
|
|
18
|
+
options: [
|
|
19
|
+
{ label: "Option 1", value: "opt1", type: "OPTION" },
|
|
20
|
+
{ label: "Option 2", value: "opt2", type: "OPTION" }
|
|
21
|
+
],
|
|
22
|
+
selected: "opt1",
|
|
23
|
+
alignment: p.alignment
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
//# sourceMappingURL=Dropdown.figma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.figma.js","sources":["../../../../src/components/inputs/dropdown/Dropdown.figma.tsx"],"sourcesContent":["import { figma } from '@figma/code-connect'\nimport Dropdown from './Dropdown'\n\nfigma.connect(\n Dropdown,\n 'https://www.figma.com/design/QlBdsfEcaUsGBzqA20xbNi/Unoff?node-id=393:795',\n {\n props: {\n alignment: figma.enum('Type', {\n HUG: 'LEFT',\n STRETCH: 'FILL',\n }),\n },\n example: (props) => (\n <Dropdown\n id=\"dropdown-example\"\n options={[\n { label: 'Option 1', value: 'opt1', type: 'OPTION' as const },\n { label: 'Option 2', value: 'opt2', type: 'OPTION' as const },\n ]}\n selected=\"opt1\"\n alignment={props.alignment}\n />\n ),\n }\n)\n"],"names":["figma","Dropdown","props","jsx"],"mappings":";;;AAGAA,EAAAA,MAAM;AAAA,EACJC;AAAA,EACA;AAAA,EACA;AAAA,IACE,OAAO;AAAA,MACL,WAAWD,EAAAA,MAAM,KAAK,QAAQ;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAAA,IAEH,SAAS,CAACE,MACR,gBAAAC;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,SAAS;AAAA,UACP,EAAE,OAAO,YAAY,OAAO,QAAQ,MAAM,SAAA;AAAA,UAC1C,EAAE,OAAO,YAAY,OAAO,QAAQ,MAAM,SAAA;AAAA,QAAkB;AAAA,QAE9D,UAAS;AAAA,QACT,WAAWC,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB;AAGN;"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import '../../../assets/Dropdown.css';
|
|
2
|
+
import { jsxs as p, jsx as f } from "react/jsx-runtime";
|
|
3
|
+
import h from "react";
|
|
4
|
+
import R from "../../../styles/texts/texts.module.js";
|
|
5
|
+
import T from "../../tags/tooltip/Tooltip.js";
|
|
6
|
+
import v from "../../tags/icon-chip/IconChip.js";
|
|
7
|
+
import w from "../../tags/chip/Chip.js";
|
|
8
|
+
import M from "../../lists/actions-list/ActionsList.js";
|
|
9
|
+
import { Icon as O } from "../../assets/icon/Icon.js";
|
|
10
|
+
import y from "../../actions/menu/Menu.js";
|
|
11
|
+
import { t as m } from "../../../do-classnames-DSDFCvzy.js";
|
|
12
|
+
class _ extends h.Component {
|
|
13
|
+
selectMenuRef;
|
|
14
|
+
buttonRef;
|
|
15
|
+
listRef;
|
|
16
|
+
actionsListRef;
|
|
17
|
+
menuRef;
|
|
18
|
+
subMenuRef;
|
|
19
|
+
static defaultProps = {
|
|
20
|
+
alignment: "LEFT",
|
|
21
|
+
pin: "NONE",
|
|
22
|
+
shouldReflow: { isEnabled: !1, icon: "adjust" },
|
|
23
|
+
isNew: !1,
|
|
24
|
+
isBlocked: !1,
|
|
25
|
+
isDisabled: !1
|
|
26
|
+
};
|
|
27
|
+
constructor(i) {
|
|
28
|
+
super(i), this.state = {
|
|
29
|
+
isMenuOpen: !1,
|
|
30
|
+
isMenuVisible: !1,
|
|
31
|
+
listShouldScroll: !1,
|
|
32
|
+
isTooltipVisible: !1,
|
|
33
|
+
documentWidth: typeof window < "u" ? window.innerWidth : 1024
|
|
34
|
+
}, this.selectMenuRef = h.createRef(), this.buttonRef = h.createRef(), this.listRef = h.createRef(), this.actionsListRef = h.createRef(), this.menuRef = h.createRef(), this.subMenuRef = h.createRef(), this.handleClickOutside = this.handleClickOutside.bind(this);
|
|
35
|
+
}
|
|
36
|
+
componentDidMount = () => {
|
|
37
|
+
document.addEventListener("mousedown", this.handleClickOutside), window.addEventListener("resize", this.handleResize);
|
|
38
|
+
};
|
|
39
|
+
componentWillUnmount = () => {
|
|
40
|
+
document.removeEventListener("mousedown", this.handleClickOutside), window.removeEventListener("resize", this.handleResize);
|
|
41
|
+
};
|
|
42
|
+
// Handlers
|
|
43
|
+
handleResize = () => {
|
|
44
|
+
this.setState({ documentWidth: window.innerWidth });
|
|
45
|
+
};
|
|
46
|
+
// Direct Actions
|
|
47
|
+
onOpenMenu = () => {
|
|
48
|
+
const { containerId: i } = this.props, { isMenuOpen: e } = this.state;
|
|
49
|
+
this.setState({
|
|
50
|
+
isMenuOpen: !e
|
|
51
|
+
}), setTimeout(() => {
|
|
52
|
+
if (this.listRef.current != null) {
|
|
53
|
+
const t = this.listRef.current.getBoundingClientRect(), l = this.buttonRef.current?.getBoundingClientRect();
|
|
54
|
+
let s = 0, o = 0, u = !1, a = !1;
|
|
55
|
+
if (t.bottom > window.innerHeight && (s = window.innerHeight - t.height - 8, u = !0), t.top < 0 && (s = 8, u = !0), t.right > window.innerWidth && (o = window.innerWidth - t.width - 8, a = !0), t.left < 0 && (o = 8, a = !0), u && (l && (this.listRef.current.style.top = `${s - l.top}px`), this.listRef.current.style.transform = a ? `translate(${o - t.left}px, 0)` : "none"), a && !u && (this.listRef.current.style.transform = `translateX(${o - t.left}px)`), i !== void 0) {
|
|
56
|
+
const c = document.getElementById(i);
|
|
57
|
+
if (c) {
|
|
58
|
+
const n = c.getBoundingClientRect(), r = this.buttonRef.current?.getBoundingClientRect(), d = this.listRef.current.getBoundingClientRect().top - n.top, b = this.listRef.current.getBoundingClientRect().bottom - n.bottom;
|
|
59
|
+
d < -16 && r && (this.listRef.current.style.top = `${n.top - r.top + 16}px`, this.setState({
|
|
60
|
+
listShouldScroll: !0
|
|
61
|
+
}), this.listRef.current.getBoundingClientRect().bottom - n.bottom < -16 && (this.listRef.current.style.bottom = `${r.bottom - n.bottom + 16}px`)), b > -16 && r && (this.listRef.current.style.bottom = `${r.bottom - n.bottom + 16}px`, this.setState({
|
|
62
|
+
listShouldScroll: !0
|
|
63
|
+
}), this.listRef.current.getBoundingClientRect().top - n.top > -16 && (this.listRef.current.style.top = `${n.top - r.top + 16}px`)), this.listRef.current.style.visibility = "visible";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
this.setState({ isMenuVisible: !0 });
|
|
67
|
+
}
|
|
68
|
+
}, 1);
|
|
69
|
+
};
|
|
70
|
+
setPosition = () => {
|
|
71
|
+
const { options: i, selected: e } = this.props;
|
|
72
|
+
if (!this.selectMenuRef.current || !this.listRef.current) return "0px";
|
|
73
|
+
const t = getComputedStyle(this.listRef.current), l = parseInt(
|
|
74
|
+
t.getPropertyValue("--actions-list-item-height") || "32",
|
|
75
|
+
10
|
|
76
|
+
), s = parseInt(
|
|
77
|
+
t.getPropertyValue("--actions-list-divider-height") || "1",
|
|
78
|
+
10
|
|
79
|
+
), o = parseInt(
|
|
80
|
+
t.getPropertyValue("--actions-list-divider-margin-top") || "11",
|
|
81
|
+
10
|
|
82
|
+
), u = parseInt(
|
|
83
|
+
t.getPropertyValue(
|
|
84
|
+
"--actions-list-divider-margin-bottom"
|
|
85
|
+
) || "8",
|
|
86
|
+
10
|
|
87
|
+
);
|
|
88
|
+
let c = parseInt(
|
|
89
|
+
t.getPropertyValue("--actions-list-padding-top") || "4",
|
|
90
|
+
10
|
|
91
|
+
);
|
|
92
|
+
for (let n = 0; n < i.length; n++) {
|
|
93
|
+
const r = i[n];
|
|
94
|
+
if (r.value === e || r.children?.find((d) => d.value === e) !== void 0)
|
|
95
|
+
break;
|
|
96
|
+
r.type === "SEPARATOR" ? c += s + o + u : (r.type === "TITLE" || r.type === "OPTION" || r.type === "GROUP") && (c += l);
|
|
97
|
+
}
|
|
98
|
+
return `-${c}px`;
|
|
99
|
+
};
|
|
100
|
+
handleClickOutside = (i) => {
|
|
101
|
+
const e = i.target;
|
|
102
|
+
e === this.buttonRef.current || e === this.menuRef.current || e === this.subMenuRef.current || e.tagName === "HR" && this.menuRef.current?.contains(e) || e.dataset.role === "GROUP" && this.menuRef.current?.contains(e) ? this.setState({
|
|
103
|
+
isMenuOpen: !0
|
|
104
|
+
}) : this.setState({
|
|
105
|
+
isMenuOpen: !1,
|
|
106
|
+
isMenuVisible: !1,
|
|
107
|
+
listShouldScroll: !1
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
findSelectedOption = (i) => {
|
|
111
|
+
const { selected: e } = this.props, t = [];
|
|
112
|
+
return e.split(", ").forEach((l) => {
|
|
113
|
+
i.forEach((s) => {
|
|
114
|
+
s.value === l && t.push(s.label ?? ""), s.children?.find((o) => o.value === l) !== void 0 && t.push(
|
|
115
|
+
s.children?.find((o) => o.value === l)?.label ?? ""
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
}), t.join(", ");
|
|
119
|
+
};
|
|
120
|
+
// Template
|
|
121
|
+
Status = () => {
|
|
122
|
+
const { warning: i, preview: e, isBlocked: t, isNew: l, onUnblock: s } = this.props;
|
|
123
|
+
if (i || t || l)
|
|
124
|
+
return /* @__PURE__ */ p("div", { className: "select-menu__status", children: [
|
|
125
|
+
i !== void 0 && /* @__PURE__ */ f(
|
|
126
|
+
v,
|
|
127
|
+
{
|
|
128
|
+
iconType: "PICTO",
|
|
129
|
+
iconName: "warning",
|
|
130
|
+
text: i.label,
|
|
131
|
+
pin: i.pin,
|
|
132
|
+
type: i.type
|
|
133
|
+
}
|
|
134
|
+
),
|
|
135
|
+
(t || l) && /* @__PURE__ */ f(
|
|
136
|
+
w,
|
|
137
|
+
{
|
|
138
|
+
preview: e,
|
|
139
|
+
isSolo: !0,
|
|
140
|
+
action: t ? s : void 0,
|
|
141
|
+
children: l ? "New" : "Pro"
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
] });
|
|
145
|
+
};
|
|
146
|
+
// Templates
|
|
147
|
+
MenuButton = () => {
|
|
148
|
+
const {
|
|
149
|
+
id: i,
|
|
150
|
+
helper: e,
|
|
151
|
+
warning: t,
|
|
152
|
+
options: l,
|
|
153
|
+
selected: s,
|
|
154
|
+
pin: o,
|
|
155
|
+
alignment: u,
|
|
156
|
+
shouldReflow: a,
|
|
157
|
+
isBlocked: c
|
|
158
|
+
} = this.props, n = [];
|
|
159
|
+
return o === "TOP" || o === "NONE" ? n.push("BOTTOM") : n.push("TOP"), u === "LEFT" || u === "FILL" ? n.push("LEFT") : n.push("RIGHT"), /* @__PURE__ */ f(
|
|
160
|
+
y,
|
|
161
|
+
{
|
|
162
|
+
id: i,
|
|
163
|
+
options: l,
|
|
164
|
+
selected: s,
|
|
165
|
+
alignment: `${n.join("_")}`,
|
|
166
|
+
icon: a?.icon,
|
|
167
|
+
helper: e,
|
|
168
|
+
warning: t,
|
|
169
|
+
isBlocked: c
|
|
170
|
+
}
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
DropdownButton = () => {
|
|
174
|
+
const {
|
|
175
|
+
id: i,
|
|
176
|
+
alignment: e,
|
|
177
|
+
options: t,
|
|
178
|
+
selected: l,
|
|
179
|
+
helper: s,
|
|
180
|
+
containerId: o,
|
|
181
|
+
isDisabled: u,
|
|
182
|
+
isBlocked: a
|
|
183
|
+
} = this.props, { isMenuOpen: c, listShouldScroll: n, isTooltipVisible: r } = this.state;
|
|
184
|
+
return /* @__PURE__ */ p(
|
|
185
|
+
"div",
|
|
186
|
+
{
|
|
187
|
+
id: i,
|
|
188
|
+
className: m([
|
|
189
|
+
"select-menu",
|
|
190
|
+
e === "LEFT" ? "select-menu--left" : e === "RIGHT" ? "select-menu--right" : "select-menu--fill",
|
|
191
|
+
(u || a) && "select-menu--disabled"
|
|
192
|
+
]),
|
|
193
|
+
ref: this.selectMenuRef,
|
|
194
|
+
children: [
|
|
195
|
+
/* @__PURE__ */ p(
|
|
196
|
+
"button",
|
|
197
|
+
{
|
|
198
|
+
role: "combobox",
|
|
199
|
+
className: m([
|
|
200
|
+
"select-menu__button",
|
|
201
|
+
c && "select-menu__button--active"
|
|
202
|
+
]),
|
|
203
|
+
disabled: u || a,
|
|
204
|
+
"aria-expanded": c ? "true" : "false",
|
|
205
|
+
...c && (o === void 0 ? this.state.isMenuVisible : !0) && {
|
|
206
|
+
"aria-controls": `${i}-menu`
|
|
207
|
+
},
|
|
208
|
+
"aria-label": `Select option: ${this.findSelectedOption(t)}`,
|
|
209
|
+
"aria-haspopup": "menu",
|
|
210
|
+
onKeyDown: (d) => ((d.key === " " || d.key === "Enter" && !(u || a)) && (this.onOpenMenu(), setTimeout(
|
|
211
|
+
() => this.actionsListRef.current?.focusFirstMenuItem(),
|
|
212
|
+
0
|
|
213
|
+
)), d.key === "Escape" ? d.target.blur() : null),
|
|
214
|
+
onMouseDown: u || a ? void 0 : this.onOpenMenu,
|
|
215
|
+
onMouseEnter: () => {
|
|
216
|
+
s !== void 0 && this.setState({ isTooltipVisible: !0 });
|
|
217
|
+
},
|
|
218
|
+
onMouseLeave: () => {
|
|
219
|
+
s !== void 0 && this.setState({ isTooltipVisible: !1 });
|
|
220
|
+
},
|
|
221
|
+
onFocus: () => {
|
|
222
|
+
s !== void 0 && this.setState({ isTooltipVisible: !0 });
|
|
223
|
+
},
|
|
224
|
+
onBlur: () => {
|
|
225
|
+
s !== void 0 && this.setState({ isTooltipVisible: !1 });
|
|
226
|
+
},
|
|
227
|
+
tabIndex: 0,
|
|
228
|
+
ref: this.buttonRef,
|
|
229
|
+
children: [
|
|
230
|
+
/* @__PURE__ */ f(
|
|
231
|
+
"span",
|
|
232
|
+
{
|
|
233
|
+
className: m([
|
|
234
|
+
R["type--truncated"],
|
|
235
|
+
R.type,
|
|
236
|
+
"select-menu__label"
|
|
237
|
+
]),
|
|
238
|
+
children: this.findSelectedOption(t)
|
|
239
|
+
}
|
|
240
|
+
),
|
|
241
|
+
/* @__PURE__ */ f("span", { className: "select-menu__caret", children: /* @__PURE__ */ f(
|
|
242
|
+
O,
|
|
243
|
+
{
|
|
244
|
+
type: "PICTO",
|
|
245
|
+
iconName: "caret-down"
|
|
246
|
+
}
|
|
247
|
+
) }),
|
|
248
|
+
r && s !== void 0 && /* @__PURE__ */ f(
|
|
249
|
+
T,
|
|
250
|
+
{
|
|
251
|
+
pin: s?.pin || "BOTTOM",
|
|
252
|
+
type: s?.type || "SINGLE_LINE",
|
|
253
|
+
children: s?.label
|
|
254
|
+
}
|
|
255
|
+
)
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
),
|
|
259
|
+
this.Status(),
|
|
260
|
+
(() => {
|
|
261
|
+
const { pin: d } = this.props;
|
|
262
|
+
return c ? /* @__PURE__ */ f(
|
|
263
|
+
"div",
|
|
264
|
+
{
|
|
265
|
+
className: "floating-menu",
|
|
266
|
+
id: `${i}-menu`,
|
|
267
|
+
style: {
|
|
268
|
+
position: "absolute",
|
|
269
|
+
zIndex: 99,
|
|
270
|
+
top: d === "TOP" ? "-4px" : d === "BOTTOM" ? "auto" : this.setPosition(),
|
|
271
|
+
bottom: d === "BOTTOM" ? "-4px" : "auto",
|
|
272
|
+
right: e === "RIGHT" ? 0 : "auto",
|
|
273
|
+
left: e === "LEFT" ? 0 : "auto",
|
|
274
|
+
visibility: o === void 0 && this.state.isMenuVisible ? "visible" : "hidden"
|
|
275
|
+
},
|
|
276
|
+
ref: this.listRef,
|
|
277
|
+
children: /* @__PURE__ */ f(
|
|
278
|
+
M,
|
|
279
|
+
{
|
|
280
|
+
options: t,
|
|
281
|
+
selected: l,
|
|
282
|
+
direction: e?.includes("LEFT") ? "RIGHT" : "LEFT",
|
|
283
|
+
shouldScroll: n,
|
|
284
|
+
containerId: o,
|
|
285
|
+
onCancellation: () => this.setState({ isMenuOpen: !1 }),
|
|
286
|
+
ref: this.actionsListRef,
|
|
287
|
+
menuRef: this.menuRef,
|
|
288
|
+
subMenuRef: this.subMenuRef
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
}
|
|
292
|
+
) : null;
|
|
293
|
+
})()
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
);
|
|
297
|
+
};
|
|
298
|
+
// Render
|
|
299
|
+
render() {
|
|
300
|
+
const { shouldReflow: i } = this.props, { documentWidth: e } = this.state;
|
|
301
|
+
return i?.isEnabled && e <= 460 ? this.MenuButton() : this.DropdownButton();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
export {
|
|
305
|
+
_ as default
|
|
306
|
+
};
|
|
307
|
+
//# sourceMappingURL=Dropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sources":["../../../../src/components/inputs/dropdown/Dropdown.tsx"],"sourcesContent":["import React from 'react'\nimport texts from '@styles/texts/texts.module.scss'\nimport Tooltip from '@components/tags/tooltip/Tooltip'\nimport IconChip from '@components/tags/icon-chip/IconChip'\nimport Chip from '@components/tags/chip/Chip'\nimport ActionsList from '@components/lists/actions-list/ActionsList'\nimport Icon from '@components/assets/icon/Icon'\nimport Menu, { MenuProps } from '@components/actions/menu/Menu'\nimport { doClassnames } from '@a_ng_d/figmug-utils'\nimport type { DropdownOption } from '@tps/list.types'\nimport type { IconList } from '@tps/icon.types'\nimport './dropdown.scss'\n\nexport interface DropdownProps {\n /**\n * Unique identifier for the dropdown\n */\n id: string\n /**\n * List of options to display in the dropdown\n */\n options: Array<DropdownOption>\n /**\n * ID of the currently selected option\n */\n selected: string\n /**\n * ID of the container element for portal rendering\n */\n containerId?: string\n /**\n * Horizontal alignment of the dropdown\n * @default 'LEFT'\n */\n alignment?: 'RIGHT' | 'LEFT' | 'FILL'\n /**\n * Vertical position of helper tooltips\n * @default 'NONE'\n */\n pin?: 'NONE' | 'TOP' | 'BOTTOM'\n /**\n * Helper tooltip configuration\n */\n helper?: {\n /** Tooltip content */\n label: string | React.ReactNode\n /** Tooltip position */\n pin?: 'TOP' | 'BOTTOM'\n /** Tooltip display type */\n type?: 'MULTI_LINE' | 'SINGLE_LINE'\n }\n /**\n * Preview tooltip configuration with image\n */\n preview?: {\n /** Preview image URL */\n image: string\n /** Preview text */\n text: string | React.ReactNode\n /** Preview position */\n pin?: 'TOP' | 'BOTTOM'\n }\n /**\n * Warning tooltip configuration\n */\n warning?: {\n /** Warning message */\n label: string | React.ReactNode\n /** Warning position */\n pin?: 'TOP' | 'BOTTOM'\n /** Warning display type */\n type?: 'MULTI_LINE' | 'SINGLE_LINE'\n }\n /**\n * Reflow configuration for responsive behavior\n * @default { isEnabled: false, icon: 'adjust' }\n */\n shouldReflow?: {\n /** Whether reflow is enabled */\n isEnabled: boolean\n /** Icon to show when reflowed */\n icon: IconList\n }\n /**\n * Whether the dropdown is disabled\n * @default false\n */\n isDisabled?: boolean\n /**\n * Whether the dropdown is blocked\n * @default false\n */\n isBlocked?: boolean\n /**\n * Whether to show a \"New\" badge\n * @default false\n */\n isNew?: boolean\n /**\n * Handler called when unblock is clicked\n */\n onUnblock?: React.MouseEventHandler & React.KeyboardEventHandler\n}\n\nexport interface DropdownStates {\n isMenuOpen: boolean\n isMenuVisible: boolean\n listShouldScroll: boolean\n isTooltipVisible: boolean\n documentWidth: number\n}\n\nexport default class Dropdown extends React.Component<\n DropdownProps,\n DropdownStates\n> {\n private selectMenuRef: React.RefObject<HTMLDivElement>\n private buttonRef: React.RefObject<HTMLButtonElement>\n private listRef: React.RefObject<HTMLDivElement>\n private actionsListRef: React.RefObject<ActionsList>\n private menuRef: React.RefObject<HTMLUListElement>\n private subMenuRef: React.RefObject<HTMLUListElement>\n\n static defaultProps: Partial<DropdownProps> = {\n alignment: 'LEFT',\n pin: 'NONE',\n shouldReflow: { isEnabled: false, icon: 'adjust' },\n isNew: false,\n isBlocked: false,\n isDisabled: false,\n }\n\n constructor(props: DropdownProps) {\n super(props)\n this.state = {\n isMenuOpen: false,\n isMenuVisible: false,\n listShouldScroll: false,\n isTooltipVisible: false,\n documentWidth: typeof window !== 'undefined' ? window.innerWidth : 1024,\n }\n this.selectMenuRef = React.createRef()\n this.buttonRef = React.createRef()\n this.listRef = React.createRef()\n this.actionsListRef = React.createRef()\n this.menuRef = React.createRef()\n this.subMenuRef = React.createRef()\n this.handleClickOutside = this.handleClickOutside.bind(this)\n }\n\n componentDidMount = () => {\n document.addEventListener('mousedown', this.handleClickOutside)\n window.addEventListener('resize', this.handleResize)\n }\n\n componentWillUnmount = () => {\n document.removeEventListener('mousedown', this.handleClickOutside)\n window.removeEventListener('resize', this.handleResize)\n }\n\n // Handlers\n handleResize = () => {\n this.setState({ documentWidth: window.innerWidth })\n }\n\n // Direct Actions\n onOpenMenu = () => {\n const { containerId } = this.props\n const { isMenuOpen } = this.state\n\n this.setState({\n isMenuOpen: !isMenuOpen,\n })\n\n setTimeout(() => {\n if (this.listRef.current != null) {\n const menuRect = this.listRef.current.getBoundingClientRect()\n const buttonRect = this.buttonRef.current?.getBoundingClientRect()\n\n let adjustedTop = 0\n let adjustedLeft = 0\n let shouldTransformY = false\n let shouldTransformX = false\n\n if (menuRect.bottom > window.innerHeight) {\n adjustedTop = window.innerHeight - menuRect.height - 8\n shouldTransformY = true\n }\n if (menuRect.top < 0) {\n adjustedTop = 8\n shouldTransformY = true\n }\n\n if (menuRect.right > window.innerWidth) {\n adjustedLeft = window.innerWidth - menuRect.width - 8\n shouldTransformX = true\n }\n if (menuRect.left < 0) {\n adjustedLeft = 8\n shouldTransformX = true\n }\n\n if (shouldTransformY) {\n if (buttonRect)\n this.listRef.current.style.top = `${adjustedTop - buttonRect.top}px`\n this.listRef.current.style.transform = shouldTransformX\n ? `translate(${adjustedLeft - menuRect.left}px, 0)`\n : 'none'\n }\n\n if (shouldTransformX && !shouldTransformY)\n this.listRef.current.style.transform = `translateX(${adjustedLeft - menuRect.left}px)`\n\n if (containerId !== undefined) {\n const containerElement = document.getElementById(containerId)\n if (containerElement) {\n const container = containerElement.getBoundingClientRect()\n const button = this.buttonRef.current?.getBoundingClientRect()\n\n const diffTop =\n this.listRef.current.getBoundingClientRect().top - container.top\n const diffBottom =\n this.listRef.current.getBoundingClientRect().bottom -\n container.bottom\n\n if (diffTop < -16 && button) {\n this.listRef.current.style.top = `${container.top - button.top + 16}px`\n this.setState({\n listShouldScroll: true,\n })\n\n const diffBottomV2 =\n this.listRef.current.getBoundingClientRect().bottom -\n container.bottom\n\n if (diffBottomV2 < -16)\n this.listRef.current.style.bottom = `${\n button.bottom - container.bottom + 16\n }px`\n }\n\n if (diffBottom > -16 && button) {\n this.listRef.current.style.bottom = `${\n button.bottom - container.bottom + 16\n }px`\n this.setState({\n listShouldScroll: true,\n })\n\n const diffTopV2 =\n this.listRef.current.getBoundingClientRect().top - container.top\n\n if (diffTopV2 > -16)\n this.listRef.current.style.top = `${container.top - button.top + 16}px`\n }\n\n this.listRef.current.style.visibility = 'visible'\n }\n }\n\n // Rendre le menu visible après positionnement\n this.setState({ isMenuVisible: true })\n }\n }, 1)\n }\n\n setPosition = () => {\n const { options, selected } = this.props\n if (!this.selectMenuRef.current || !this.listRef.current) return '0px'\n\n const listComputedStyle = getComputedStyle(this.listRef.current)\n const itemHeight = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-item-height') || '32',\n 10\n )\n const dividerHeight = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-divider-height') ||\n '1',\n 10\n )\n const dividerMarginTop = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-divider-margin-top') ||\n '11',\n 10\n )\n const dividerMarginBottom = parseInt(\n listComputedStyle.getPropertyValue(\n '--actions-list-divider-margin-bottom'\n ) || '8',\n 10\n )\n\n const menuPaddingTop = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-padding-top') || '4',\n 10\n )\n\n let totalHeight = menuPaddingTop\n\n for (let i = 0; i < options.length; i++) {\n const option = options[i]\n\n if (\n option.value === selected ||\n option.children?.find((child) => child.value === selected) !== undefined\n )\n break\n\n if (option.type === 'SEPARATOR')\n totalHeight += dividerHeight + dividerMarginTop + dividerMarginBottom\n else if (\n option.type === 'TITLE' ||\n option.type === 'OPTION' ||\n option.type === 'GROUP'\n )\n totalHeight += itemHeight\n }\n\n return `-${totalHeight}px`\n }\n\n handleClickOutside = (e: Event) => {\n const target = e.target as HTMLElement\n if (\n target === this.buttonRef.current ||\n target === this.menuRef.current ||\n target === this.subMenuRef.current ||\n (target.tagName === 'HR' && this.menuRef.current?.contains(target)) ||\n (target.dataset.role === 'GROUP' &&\n this.menuRef.current?.contains(target))\n )\n this.setState({\n isMenuOpen: true,\n })\n else\n this.setState({\n isMenuOpen: false,\n isMenuVisible: false,\n listShouldScroll: false,\n })\n }\n\n findSelectedOption = (options: Array<DropdownOption>): string => {\n const { selected } = this.props\n const label: Array<string> = []\n\n selected.split(', ').forEach((value) => {\n options.forEach((option) => {\n if (option.value === value) label.push(option.label ?? '')\n if (\n option.children?.find((child) => child.value === value) !== undefined\n )\n label.push(\n option.children?.find((child) => child.value === value)?.label ?? ''\n )\n })\n })\n return label.join(', ')\n }\n\n // Template\n Status = () => {\n const { warning, preview, isBlocked, isNew, onUnblock } = this.props\n\n if (warning || isBlocked || isNew)\n return (\n <div className=\"select-menu__status\">\n {warning !== undefined && (\n <IconChip\n iconType=\"PICTO\"\n iconName=\"warning\"\n text={warning.label}\n pin={warning.pin}\n type={warning.type}\n />\n )}\n {(isBlocked || isNew) && (\n <Chip\n preview={preview}\n isSolo\n action={isBlocked ? onUnblock : undefined}\n >\n {isNew ? 'New' : 'Pro'}\n </Chip>\n )}\n </div>\n )\n }\n\n // Templates\n MenuButton = () => {\n const {\n id,\n helper,\n warning,\n options,\n selected,\n pin,\n alignment,\n shouldReflow,\n isBlocked,\n } = this.props\n\n const newAlignment = []\n\n if (pin === 'TOP' || pin === 'NONE') newAlignment.push('BOTTOM')\n else newAlignment.push('TOP')\n\n if (alignment === 'LEFT' || alignment === 'FILL') newAlignment.push('LEFT')\n else newAlignment.push('RIGHT')\n\n return (\n <Menu\n id={id}\n options={options}\n selected={selected}\n alignment={`${newAlignment.join('_')}` as MenuProps['alignment']}\n icon={shouldReflow?.icon}\n helper={helper}\n warning={warning}\n isBlocked={isBlocked}\n />\n )\n }\n\n DropdownButton = () => {\n const {\n id,\n alignment,\n options,\n selected,\n helper,\n containerId,\n isDisabled,\n isBlocked,\n } = this.props\n const { isMenuOpen, listShouldScroll, isTooltipVisible } = this.state\n\n return (\n <div\n id={id}\n className={doClassnames([\n 'select-menu',\n (() => {\n if (alignment === 'LEFT') return 'select-menu--left'\n if (alignment === 'RIGHT') return 'select-menu--right'\n return 'select-menu--fill'\n })(),\n (isDisabled || isBlocked) && 'select-menu--disabled',\n ])}\n ref={this.selectMenuRef}\n >\n <button\n role=\"combobox\"\n className={doClassnames([\n 'select-menu__button',\n isMenuOpen && 'select-menu__button--active',\n ])}\n disabled={isDisabled || isBlocked}\n aria-expanded={isMenuOpen ? 'true' : 'false'}\n {...(isMenuOpen &&\n (containerId === undefined ? this.state.isMenuVisible : true) && {\n 'aria-controls': `${id}-menu`,\n })}\n aria-label={`Select option: ${this.findSelectedOption(options)}`}\n aria-haspopup=\"menu\"\n onKeyDown={(e) => {\n if (\n e.key === ' ' ||\n (e.key === 'Enter' && !(isDisabled || isBlocked))\n ) {\n this.onOpenMenu()\n setTimeout(\n () => this.actionsListRef.current?.focusFirstMenuItem(),\n 0\n )\n }\n if (e.key === 'Escape') return (e.target as HTMLElement).blur()\n return null\n }}\n onMouseDown={!(isDisabled || isBlocked) ? this.onOpenMenu : undefined}\n onMouseEnter={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: true })\n }}\n onMouseLeave={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: false })\n }}\n onFocus={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: true })\n }}\n onBlur={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: false })\n }}\n tabIndex={0}\n ref={this.buttonRef}\n >\n <span\n className={doClassnames([\n texts['type--truncated'],\n texts.type,\n 'select-menu__label',\n ])}\n >\n {this.findSelectedOption(options)}\n </span>\n <span className=\"select-menu__caret\">\n <Icon\n type=\"PICTO\"\n iconName=\"caret-down\"\n />\n </span>\n {isTooltipVisible && helper !== undefined && (\n <Tooltip\n pin={helper?.pin || 'BOTTOM'}\n type={helper?.type || 'SINGLE_LINE'}\n >\n {helper?.label}\n </Tooltip>\n )}\n </button>\n {this.Status()}\n {(() => {\n const { pin } = this.props\n\n if (isMenuOpen)\n return (\n <div\n className=\"floating-menu\"\n id={`${id}-menu`}\n style={{\n position: 'absolute',\n zIndex: 99,\n top:\n pin === 'TOP'\n ? '-4px'\n : pin === 'BOTTOM'\n ? 'auto'\n : this.setPosition(),\n bottom: pin === 'BOTTOM' ? '-4px' : 'auto',\n right: alignment === 'RIGHT' ? 0 : 'auto',\n left: alignment === 'LEFT' ? 0 : 'auto',\n visibility:\n containerId === undefined && this.state.isMenuVisible\n ? 'visible'\n : 'hidden',\n }}\n ref={this.listRef}\n >\n <ActionsList\n options={options}\n selected={selected}\n direction={alignment?.includes('LEFT') ? 'RIGHT' : 'LEFT'}\n shouldScroll={listShouldScroll}\n containerId={containerId}\n onCancellation={() => this.setState({ isMenuOpen: false })}\n ref={this.actionsListRef}\n menuRef={this.menuRef}\n subMenuRef={this.subMenuRef}\n />\n </div>\n )\n return null\n })()}\n </div>\n )\n }\n\n // Render\n render() {\n const { shouldReflow } = this.props\n const { documentWidth } = this.state\n\n const isReflowActive = shouldReflow?.isEnabled && documentWidth <= 460\n\n if (isReflowActive) return this.MenuButton()\n return this.DropdownButton()\n }\n}\n"],"names":["Dropdown","React","props","containerId","isMenuOpen","menuRect","buttonRect","adjustedTop","adjustedLeft","shouldTransformY","shouldTransformX","containerElement","container","button","diffTop","diffBottom","options","selected","listComputedStyle","itemHeight","dividerHeight","dividerMarginTop","dividerMarginBottom","totalHeight","i","option","child","e","target","label","value","warning","preview","isBlocked","isNew","onUnblock","jsxs","jsx","IconChip","Chip","id","helper","pin","alignment","shouldReflow","newAlignment","Menu","isDisabled","listShouldScroll","isTooltipVisible","doClassnames","texts","Icon","Tooltip","ActionsList","documentWidth"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
interface FileContent {
|
|
4
|
+
name: string;
|
|
5
|
+
content: string | ArrayBuffer | null | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface DropzoneProps {
|
|
8
|
+
/**
|
|
9
|
+
* Message to display in the dropzone
|
|
10
|
+
*/
|
|
11
|
+
message: string;
|
|
12
|
+
/**
|
|
13
|
+
* Warning message to show on invalid file type
|
|
14
|
+
*/
|
|
15
|
+
warningMessage: string;
|
|
16
|
+
/**
|
|
17
|
+
* Error message to show on upload failure
|
|
18
|
+
*/
|
|
19
|
+
errorMessage: string;
|
|
20
|
+
/**
|
|
21
|
+
* Call-to-action text for the upload button
|
|
22
|
+
*/
|
|
23
|
+
cta: string;
|
|
24
|
+
/**
|
|
25
|
+
* Array of accepted MIME types
|
|
26
|
+
* @default ['image/jpeg', 'image/png', 'application/pdf']
|
|
27
|
+
*/
|
|
28
|
+
acceptedMimeTypes: Array<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Whether multiple files can be uploaded
|
|
31
|
+
*/
|
|
32
|
+
isMultiple: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the dropzone is in loading state
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
isLoading?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the dropzone is disabled
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
isDisabled?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Whether the dropzone is blocked
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
isBlocked?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Whether to show a "New" badge
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
isNew?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Callback when files are successfully imported
|
|
55
|
+
*/
|
|
56
|
+
onImportFiles: (files: Array<FileContent>) => void;
|
|
57
|
+
}
|
|
58
|
+
export interface DropzoneStates {
|
|
59
|
+
status: 'READY' | 'WAITING' | 'WARNING' | 'ERROR';
|
|
60
|
+
isLoading: boolean;
|
|
61
|
+
isDraggedOver: boolean;
|
|
62
|
+
blackList: Array<string>;
|
|
63
|
+
}
|
|
64
|
+
export default class Dropzone extends React.Component<DropzoneProps, DropzoneStates> {
|
|
65
|
+
stopLoading: NodeJS.Timeout | undefined;
|
|
66
|
+
static defaultProps: Partial<DropzoneProps>;
|
|
67
|
+
constructor(props: DropzoneProps);
|
|
68
|
+
componentDidUpdate: (prevProps: Readonly<DropzoneProps>) => void;
|
|
69
|
+
onImport: (validFiles: Array<File>, unValidFiles: Array<File>) => void;
|
|
70
|
+
onValidFilesViaButton: () => void;
|
|
71
|
+
onValidFilesViaDrop: (event: React.DragEvent) => void;
|
|
72
|
+
onDragOver: (event: React.DragEvent) => void;
|
|
73
|
+
onDragEnter: (event: React.DragEvent) => void;
|
|
74
|
+
onDragLeave: (event: React.DragEvent) => void;
|
|
75
|
+
render(): import("react/jsx-runtime").JSX.Element;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=Dropzone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropzone/Dropzone.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,iBAAiB,CAAA;AAExB,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAChC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACjD,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAS,CACnD,aAAa,EACb,cAAc,CACf;IACC,WAAW,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAA;IAEvC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAM1C;gBAEW,KAAK,EAAE,aAAa;IAYhC,kBAAkB,cAAe,SAAS,aAAa,CAAC,UAqBvD;IAGD,QAAQ,eAAgB,MAAM,IAAI,CAAC,gBAAgB,MAAM,IAAI,CAAC,UAmC7D;IAED,qBAAqB,aAsBpB;IAED,mBAAmB,UAAW,eAAe,UAiC5C;IAED,UAAU,UAAW,eAAe,UAKnC;IAED,WAAW,UAAW,eAAe,UAKpC;IAED,WAAW,UAAW,eAAe,UAKpC;IAED,MAAM;CAiHP"}
|