@rotki/ui-library 2.20.1 → 2.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/dist/__test__/options.d.ts +7 -0
- package/dist/components/calendar/RuiCalendarMenu.js.map +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +12 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +137 -51
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/file-upload/RuiFileUpload.js +7 -0
- package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -0
- package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +61 -0
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +269 -0
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/index.d.ts +3 -2
- package/dist/components/index.js +2 -1
- package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +6 -0
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/dropdown-menu.d.ts +12 -1
- package/dist/composables/dropdown-menu.js +46 -7
- package/dist/composables/dropdown-menu.js.map +1 -1
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +26 -24
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/library-icons.json +2 -0
- package/dist/style.css +48 -0
- package/dist/utils/helpers.d.ts +4 -0
- package/dist/utils/helpers.js +21 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/web-types.json +262 -1
- package/package.json +1 -1
|
@@ -59,7 +59,8 @@ var RuiMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
|
|
|
59
59
|
disableAutoFocus: {
|
|
60
60
|
type: Boolean,
|
|
61
61
|
default: false
|
|
62
|
-
}
|
|
62
|
+
},
|
|
63
|
+
anchorEl: {}
|
|
63
64
|
}, {
|
|
64
65
|
"modelValue": {
|
|
65
66
|
type: Boolean,
|
|
@@ -72,7 +73,7 @@ var RuiMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
|
|
|
72
73
|
const modelValue = useModel(__props, "modelValue");
|
|
73
74
|
const click = ref(false);
|
|
74
75
|
const menuContent = useTemplateRef("menuContent");
|
|
75
|
-
const { reference: activator, popover: menu, open, visible, currentPlacement, leavePending, onLeavePending, onOpen, onClose, onLeaveComplete, updatePosition } = useFloating(() => __props.popper ? toFloatingOptions(__props.popper) : __props.options ?? {}, () => __props.disabled, () => __props.openDelay, () => __props.closeDelay);
|
|
76
|
+
const { reference: activator, popover: menu, open, visible, currentPlacement, leavePending, onLeavePending, onOpen, onClose, onLeaveComplete, updatePosition } = useFloating(() => __props.popper ? toFloatingOptions(__props.popper) : __props.options ?? {}, () => __props.disabled, () => __props.openDelay, () => __props.closeDelay, () => __props.anchorEl);
|
|
76
77
|
const { width } = useElementSize(activator);
|
|
77
78
|
const { hasError, hasSuccess } = useFormTextDetail(() => __props.errorMessages, () => __props.successMessages);
|
|
78
79
|
const menuStyles = tv({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiMenu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/overlays/menu/RuiMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { VueClassValue } from '@/types/class-value';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { type FloatingOptions, useFloating } from '@/composables/floating';\nimport { type PopperOptions, toFloatingOptions } from '@/composables/popper';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { cn, tv } from '@/utils/tv';\n\ninterface BaseMenuAttrs { onMouseover?: () => void; onMouseleave?: () => void }\n\ninterface MenuAttrs extends BaseMenuAttrs { onClick?: () => void }\n\nexport interface RuiMenuClassNames {\n root?: VueClassValue;\n wrapper?: VueClassValue;\n menu?: VueClassValue;\n}\n\nexport interface MenuProps {\n openOnHover?: boolean;\n fullWidth?: boolean;\n disabled?: boolean;\n openDelay?: number;\n closeDelay?: number;\n options?: FloatingOptions;\n /** @deprecated Use `options` instead */\n popper?: PopperOptions;\n classNames?: RuiMenuClassNames;\n /** @deprecated Use `classNames.wrapper` instead */\n wrapperClass?: string | object | string[];\n /** @deprecated Use `classNames.menu` instead */\n menuClass?: string | object | string[];\n closeOnContentClick?: boolean;\n persistOnActivatorClick?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n showDetails?: boolean;\n dense?: boolean;\n persistent?: boolean;\n disableAutoFocus?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenu',\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n openOnHover = false,\n disabled = false,\n fullWidth = false,\n openDelay = 0,\n closeDelay = 0,\n options,\n popper,\n classNames,\n wrapperClass = '',\n menuClass = '',\n closeOnContentClick = false,\n persistOnActivatorClick = false,\n hint,\n errorMessages = [],\n successMessages = [],\n showDetails = false,\n dense = false,\n persistent = false,\n disableAutoFocus = false,\n} = defineProps<MenuProps>();\n\ndefineSlots<{\n activator?: (props: {\n attrs: { onMouseover?: () => void; onMouseleave?: () => void; onClick?: () => void };\n open: boolean;\n disabled: boolean;\n hasError: boolean;\n hasSuccess: boolean;\n }) => any;\n default?: (props: { width: number }) => any;\n}>();\n\nconst click = ref<boolean>(false);\nconst menuContent = useTemplateRef<HTMLElement>('menuContent');\n\nconst FOCUSABLE_ELEMENTS_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst {\n reference: activator,\n popover: menu,\n open,\n visible,\n currentPlacement,\n leavePending,\n onLeavePending,\n onOpen,\n onClose,\n onLeaveComplete,\n updatePosition,\n} = useFloating(\n () => popper ? toFloatingOptions(popper) : (options ?? {}),\n () => disabled,\n () => openDelay,\n () => closeDelay,\n);\n\nconst { width } = useElementSize(activator);\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst menuStyles = tv({\n slots: {\n wrapper: 'relative inline-flex max-w-full',\n popover: 'w-max z-[9999]',\n content: 'rounded overflow-hidden shadow-8 bg-white dark:bg-[#2E2E2E] text-rui-text focus:outline-none py-2',\n details: 'pt-1',\n },\n variants: {\n fullWidth: {\n true: { wrapper: 'w-full' },\n },\n dense: {\n true: { details: 'px-2' },\n false: { details: 'px-4' },\n },\n },\n defaultVariants: { fullWidth: false, dense: false },\n});\n\nconst ui = computed<ReturnType<typeof menuStyles>>(() => menuStyles({\n fullWidth,\n dense,\n}));\n\n// NOTE: both computed functions must return the *same* object shape from\n// every branch — otherwise vue-tsc infers the slot's `attrs` type as a\n// discriminated union where each key is either \"all defined\" or \"all\n// undefined\", which breaks consumer code that types its own `attrs`\n// handler with individually-optional keys.\nconst baseMenuAttrs = computed<BaseMenuAttrs>(() => {\n const clickVal = get(click);\n return {\n onMouseover: disabled\n ? undefined\n : () => {\n if (openOnHover)\n onOpen();\n },\n onMouseleave: disabled\n ? undefined\n : () => {\n if (openOnHover && !clickVal)\n onClose();\n },\n };\n});\n\nconst menuAttrs = computed<MenuAttrs>(() => ({\n ...get(baseMenuAttrs),\n onClick: disabled ? undefined : checkClick,\n}));\n\nfunction focusOnContent() {\n const content = get(menuContent);\n if (!content)\n return;\n\n // Focus on the menu container itself\n content.focus();\n}\n\nfunction focusMenu(): void {\n if (disableAutoFocus)\n return;\n\n nextTick(() => focusOnContent());\n}\n\nfunction focusOnActivator() {\n const activatorEl = get(activator);\n if (!activatorEl) {\n return;\n }\n const focusableEl = activatorEl.querySelector<HTMLElement>(FOCUSABLE_ELEMENTS_SELECTOR);\n if (focusableEl) {\n focusableEl.focus();\n }\n}\n\nfunction onLeave(event?: KeyboardEvent): void {\n if (!get(open))\n return;\n onClose();\n set(click, false);\n event?.stopPropagation();\n\n // Return focus to activator when menu closes\n if (disableAutoFocus) {\n return;\n }\n\n nextTick(() => focusOnActivator());\n}\n\nfunction checkClick(): void {\n if (get(open) && get(click)) {\n if (!persistOnActivatorClick)\n onLeave();\n }\n else {\n onOpen();\n set(click, true);\n }\n}\n\nwatch(modelValue, (value) => {\n if (get(open) === value)\n return;\n\n if (value) {\n onOpen();\n set(click, true);\n }\n else {\n onLeave();\n }\n});\n\nwatch(open, (open) => {\n set(modelValue, open);\n if (open) {\n focusMenu();\n }\n});\n\nonClickOutside(menu, () => {\n if (get(open) && !persistent)\n onLeave();\n}, { ignore: [activator] });\n</script>\n\n<template>\n <div\n :class=\"classNames?.root\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <div\n ref=\"activator\"\n :class=\"ui.wrapper({ class: cn(classNames?.wrapper) ?? cn(wrapperClass as VueClassValue) })\"\n :data-menu-disabled=\"disabled\"\n aria-haspopup=\"true\"\n :aria-expanded=\"open\"\n >\n <slot\n name=\"activator\"\n v-bind=\"{ attrs: menuAttrs, open, disabled, hasError, hasSuccess }\"\n />\n </div>\n <Teleport\n v-if=\"!disabled\"\n to=\"body\"\n >\n <div\n v-if=\"visible\"\n ref=\"menu\"\n :class=\"ui.popover({ class: cn(classNames?.menu) ?? cn(menuClass as VueClassValue) })\"\n role=\"menu\"\n :data-placement=\"currentPlacement\"\n @click=\"closeOnContentClick ? onLeave() : undefined\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <TransitionGroup\n enter-active-class=\"transition ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n @before-enter=\"updatePosition()\"\n @after-leave=\"leavePending ? onLeaveComplete() : undefined\"\n @before-leave=\"onLeavePending()\"\n >\n <div\n v-if=\"open\"\n ref=\"menuContent\"\n key=\"menu\"\n data-id=\"content\"\n :class=\"ui.content()\"\n tabindex=\"-1\"\n v-bind=\"baseMenuAttrs\"\n >\n <slot v-bind=\"{ width }\" />\n </div>\n </TransitionGroup>\n </div>\n </Teleport>\n <RuiFormTextDetail\n v-if=\"showDetails\"\n :class=\"ui.details()\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiMenu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/overlays/menu/RuiMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { VueClassValue } from '@/types/class-value';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { type FloatingOptions, useFloating } from '@/composables/floating';\nimport { type PopperOptions, toFloatingOptions } from '@/composables/popper';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { cn, tv } from '@/utils/tv';\n\ninterface BaseMenuAttrs { onMouseover?: () => void; onMouseleave?: () => void }\n\ninterface MenuAttrs extends BaseMenuAttrs { onClick?: () => void }\n\nexport interface RuiMenuClassNames {\n root?: VueClassValue;\n wrapper?: VueClassValue;\n menu?: VueClassValue;\n}\n\nexport interface MenuProps {\n openOnHover?: boolean;\n fullWidth?: boolean;\n disabled?: boolean;\n openDelay?: number;\n closeDelay?: number;\n options?: FloatingOptions;\n /** @deprecated Use `options` instead */\n popper?: PopperOptions;\n classNames?: RuiMenuClassNames;\n /** @deprecated Use `classNames.wrapper` instead */\n wrapperClass?: string | object | string[];\n /** @deprecated Use `classNames.menu` instead */\n menuClass?: string | object | string[];\n closeOnContentClick?: boolean;\n persistOnActivatorClick?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n showDetails?: boolean;\n dense?: boolean;\n persistent?: boolean;\n disableAutoFocus?: boolean;\n /**\n * Optional external element to anchor the menu to, instead of the\n * activator slot's wrapper. When set, the menu's position is computed\n * against this element.\n */\n anchorEl?: HTMLElement;\n}\n\ndefineOptions({\n name: 'RuiMenu',\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n openOnHover = false,\n disabled = false,\n fullWidth = false,\n openDelay = 0,\n closeDelay = 0,\n options,\n popper,\n classNames,\n wrapperClass = '',\n menuClass = '',\n closeOnContentClick = false,\n persistOnActivatorClick = false,\n hint,\n errorMessages = [],\n successMessages = [],\n showDetails = false,\n dense = false,\n persistent = false,\n disableAutoFocus = false,\n anchorEl,\n} = defineProps<MenuProps>();\n\ndefineSlots<{\n activator?: (props: {\n attrs: { onMouseover?: () => void; onMouseleave?: () => void; onClick?: () => void };\n open: boolean;\n disabled: boolean;\n hasError: boolean;\n hasSuccess: boolean;\n }) => any;\n default?: (props: { width: number }) => any;\n}>();\n\nconst click = ref<boolean>(false);\nconst menuContent = useTemplateRef<HTMLElement>('menuContent');\n\nconst FOCUSABLE_ELEMENTS_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst {\n reference: activator,\n popover: menu,\n open,\n visible,\n currentPlacement,\n leavePending,\n onLeavePending,\n onOpen,\n onClose,\n onLeaveComplete,\n updatePosition,\n} = useFloating(\n () => popper ? toFloatingOptions(popper) : (options ?? {}),\n () => disabled,\n () => openDelay,\n () => closeDelay,\n () => anchorEl,\n);\n\nconst { width } = useElementSize(activator);\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst menuStyles = tv({\n slots: {\n wrapper: 'relative inline-flex max-w-full',\n popover: 'w-max z-[9999]',\n content: 'rounded overflow-hidden shadow-8 bg-white dark:bg-[#2E2E2E] text-rui-text focus:outline-none py-2',\n details: 'pt-1',\n },\n variants: {\n fullWidth: {\n true: { wrapper: 'w-full' },\n },\n dense: {\n true: { details: 'px-2' },\n false: { details: 'px-4' },\n },\n },\n defaultVariants: { fullWidth: false, dense: false },\n});\n\nconst ui = computed<ReturnType<typeof menuStyles>>(() => menuStyles({\n fullWidth,\n dense,\n}));\n\n// NOTE: both computed functions must return the *same* object shape from\n// every branch — otherwise vue-tsc infers the slot's `attrs` type as a\n// discriminated union where each key is either \"all defined\" or \"all\n// undefined\", which breaks consumer code that types its own `attrs`\n// handler with individually-optional keys.\nconst baseMenuAttrs = computed<BaseMenuAttrs>(() => {\n const clickVal = get(click);\n return {\n onMouseover: disabled\n ? undefined\n : () => {\n if (openOnHover)\n onOpen();\n },\n onMouseleave: disabled\n ? undefined\n : () => {\n if (openOnHover && !clickVal)\n onClose();\n },\n };\n});\n\nconst menuAttrs = computed<MenuAttrs>(() => ({\n ...get(baseMenuAttrs),\n onClick: disabled ? undefined : checkClick,\n}));\n\nfunction focusOnContent() {\n const content = get(menuContent);\n if (!content)\n return;\n\n // Focus on the menu container itself\n content.focus();\n}\n\nfunction focusMenu(): void {\n if (disableAutoFocus)\n return;\n\n nextTick(() => focusOnContent());\n}\n\nfunction focusOnActivator() {\n const activatorEl = get(activator);\n if (!activatorEl) {\n return;\n }\n const focusableEl = activatorEl.querySelector<HTMLElement>(FOCUSABLE_ELEMENTS_SELECTOR);\n if (focusableEl) {\n focusableEl.focus();\n }\n}\n\nfunction onLeave(event?: KeyboardEvent): void {\n if (!get(open))\n return;\n onClose();\n set(click, false);\n event?.stopPropagation();\n\n // Return focus to activator when menu closes\n if (disableAutoFocus) {\n return;\n }\n\n nextTick(() => focusOnActivator());\n}\n\nfunction checkClick(): void {\n if (get(open) && get(click)) {\n if (!persistOnActivatorClick)\n onLeave();\n }\n else {\n onOpen();\n set(click, true);\n }\n}\n\nwatch(modelValue, (value) => {\n if (get(open) === value)\n return;\n\n if (value) {\n onOpen();\n set(click, true);\n }\n else {\n onLeave();\n }\n});\n\nwatch(open, (open) => {\n set(modelValue, open);\n if (open) {\n focusMenu();\n }\n});\n\nonClickOutside(menu, () => {\n if (get(open) && !persistent)\n onLeave();\n}, { ignore: [activator] });\n</script>\n\n<template>\n <div\n :class=\"classNames?.root\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <div\n ref=\"activator\"\n :class=\"ui.wrapper({ class: cn(classNames?.wrapper) ?? cn(wrapperClass as VueClassValue) })\"\n :data-menu-disabled=\"disabled\"\n aria-haspopup=\"true\"\n :aria-expanded=\"open\"\n >\n <slot\n name=\"activator\"\n v-bind=\"{ attrs: menuAttrs, open, disabled, hasError, hasSuccess }\"\n />\n </div>\n <Teleport\n v-if=\"!disabled\"\n to=\"body\"\n >\n <div\n v-if=\"visible\"\n ref=\"menu\"\n :class=\"ui.popover({ class: cn(classNames?.menu) ?? cn(menuClass as VueClassValue) })\"\n role=\"menu\"\n :data-placement=\"currentPlacement\"\n @click=\"closeOnContentClick ? onLeave() : undefined\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <TransitionGroup\n enter-active-class=\"transition ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n @before-enter=\"updatePosition()\"\n @after-leave=\"leavePending ? onLeaveComplete() : undefined\"\n @before-leave=\"onLeavePending()\"\n >\n <div\n v-if=\"open\"\n ref=\"menuContent\"\n key=\"menu\"\n data-id=\"content\"\n :class=\"ui.content()\"\n tabindex=\"-1\"\n v-bind=\"baseMenuAttrs\"\n >\n <slot v-bind=\"{ width }\" />\n </div>\n </TransitionGroup>\n </div>\n </Teleport>\n <RuiFormTextDetail\n v-if=\"showDetails\"\n :class=\"ui.details()\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export interface DropdownItemAttr<TValue, TItem> {
|
|
|
6
6
|
keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;
|
|
7
7
|
textAttr?: keyof TItem | ((item: TItem) => string);
|
|
8
8
|
}
|
|
9
|
+
export type GroupBy<TItem> = keyof TItem | ((item: TItem) => string);
|
|
10
|
+
export type ItemDisabled<TItem> = keyof TItem | ((item: TItem) => boolean);
|
|
11
|
+
export interface DropdownOptionGroup<TItem> {
|
|
12
|
+
group: string;
|
|
13
|
+
items: TItem[];
|
|
14
|
+
}
|
|
9
15
|
export interface DropdownOptions<TValue, TItem> {
|
|
10
16
|
options: MaybeRefOrGetter<TItem[]>;
|
|
11
17
|
dense?: MaybeRefOrGetter<boolean>;
|
|
@@ -24,12 +30,14 @@ export interface DropdownOptions<TValue, TItem> {
|
|
|
24
30
|
isOpen?: Ref<boolean>;
|
|
25
31
|
getText?: (item: TItem) => string | undefined;
|
|
26
32
|
getIdentifier?: (item: TItem) => any;
|
|
33
|
+
groupBy?: MaybeRefOrGetter<GroupBy<TItem> | undefined>;
|
|
34
|
+
itemDisabled?: MaybeRefOrGetter<ItemDisabled<TItem> | undefined>;
|
|
27
35
|
}
|
|
28
36
|
export declare function useDropdownOptionProperty<TValue, TItem>({ keyAttr, textAttr, }: DropdownItemAttr<TValue, TItem>): {
|
|
29
37
|
getIdentifier: (item: TItem) => TItem | TItem[KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>];
|
|
30
38
|
getText: (item: TItem) => string | undefined;
|
|
31
39
|
};
|
|
32
|
-
export declare function useDropdownMenu<TValue, TItem>({ appendWidth, autoSelectFirst, dense, disabled, getIdentifier: externalGetIdentifier, getText: externalGetText, hideSelected, isOpen: externalIsOpen, itemHeight, keyAttr, menuRef: _menuRef, options: allOptions, overscan, prependWidth, setValue, textAttr, value, }: DropdownOptions<TValue, TItem>): {
|
|
40
|
+
export declare function useDropdownMenu<TValue, TItem>({ appendWidth, autoSelectFirst, dense, disabled, getIdentifier: externalGetIdentifier, getText: externalGetText, hideSelected, isOpen: externalIsOpen, itemHeight, keyAttr, menuRef: _menuRef, options: allOptions, overscan, prependWidth, setValue, textAttr, value, groupBy, itemDisabled, }: DropdownOptions<TValue, TItem>): {
|
|
33
41
|
applyHighlighted: () => void;
|
|
34
42
|
containerProps: {
|
|
35
43
|
ref: Ref<HTMLElement | null>;
|
|
@@ -38,8 +46,11 @@ export declare function useDropdownMenu<TValue, TItem>({ appendWidth, autoSelect
|
|
|
38
46
|
};
|
|
39
47
|
getIdentifier: (item: TItem) => any;
|
|
40
48
|
getText: (item: TItem) => string | undefined;
|
|
49
|
+
groupedOptions: globalThis.ComputedRef<DropdownOptionGroup<TItem>[]>;
|
|
41
50
|
highlightedIndex: Ref<number, number>;
|
|
42
51
|
isActiveItem: (item: TItem) => boolean;
|
|
52
|
+
isGrouped: globalThis.ComputedRef<boolean>;
|
|
53
|
+
isItemDisabled: (item: TItem) => boolean;
|
|
43
54
|
isOpen: Ref<boolean, boolean>;
|
|
44
55
|
itemIndexInValue: (item: TItem) => number;
|
|
45
56
|
menuWidth: globalThis.ComputedRef<string>;
|
|
@@ -22,7 +22,7 @@ function toSelectedArray(val) {
|
|
|
22
22
|
if (val !== null && val !== void 0) return [val];
|
|
23
23
|
return [];
|
|
24
24
|
}
|
|
25
|
-
function useDropdownMenu({ appendWidth, autoSelectFirst, dense, disabled = false, getIdentifier: externalGetIdentifier, getText: externalGetText, hideSelected, isOpen: externalIsOpen, itemHeight = 48, keyAttr, menuRef: _menuRef, options: allOptions, overscan = 5, prependWidth, setValue, textAttr, value }) {
|
|
25
|
+
function useDropdownMenu({ appendWidth, autoSelectFirst, dense, disabled = false, getIdentifier: externalGetIdentifier, getText: externalGetText, hideSelected, isOpen: externalIsOpen, itemHeight = 48, keyAttr, menuRef: _menuRef, options: allOptions, overscan = 5, prependWidth, setValue, textAttr, value, groupBy, itemDisabled }) {
|
|
26
26
|
const { getIdentifier: defaultGetIdentifier, getText: defaultGetText } = useDropdownOptionProperty({
|
|
27
27
|
keyAttr,
|
|
28
28
|
textAttr
|
|
@@ -43,6 +43,33 @@ function useDropdownMenu({ appendWidth, autoSelectFirst, dense, disabled = false
|
|
|
43
43
|
if (!hideSelected) return options;
|
|
44
44
|
return options.filter((item) => !isActiveItem(item));
|
|
45
45
|
});
|
|
46
|
+
function getGroupKey(item) {
|
|
47
|
+
const group = toValue(groupBy);
|
|
48
|
+
if (!group) return "";
|
|
49
|
+
if (typeof group === "function") return group(item);
|
|
50
|
+
return String(item[group] ?? "");
|
|
51
|
+
}
|
|
52
|
+
function isItemDisabled(item) {
|
|
53
|
+
const itemDisabledValue = toValue(itemDisabled);
|
|
54
|
+
if (!itemDisabledValue) return false;
|
|
55
|
+
if (typeof itemDisabledValue === "function") return itemDisabledValue(item);
|
|
56
|
+
return Boolean(item[itemDisabledValue]);
|
|
57
|
+
}
|
|
58
|
+
const isGrouped = computed(() => toValue(groupBy) !== void 0);
|
|
59
|
+
const groupedOptions = computed(() => {
|
|
60
|
+
if (!get$1(isGrouped)) return [];
|
|
61
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
62
|
+
for (const item of get$1(options)) {
|
|
63
|
+
const key = getGroupKey(item);
|
|
64
|
+
const list = buckets.get(key);
|
|
65
|
+
if (list) list.push(item);
|
|
66
|
+
else buckets.set(key, [item]);
|
|
67
|
+
}
|
|
68
|
+
return Array.from(buckets.entries()).map(([group, items]) => ({
|
|
69
|
+
group,
|
|
70
|
+
items
|
|
71
|
+
}));
|
|
72
|
+
});
|
|
46
73
|
const { containerProps, list, scrollTo, wrapperProps } = useVirtualList(options, {
|
|
47
74
|
itemHeight,
|
|
48
75
|
overscan
|
|
@@ -147,27 +174,39 @@ function useDropdownMenu({ appendWidth, autoSelectFirst, dense, disabled = false
|
|
|
147
174
|
return;
|
|
148
175
|
}
|
|
149
176
|
set$1(userNavigated, true);
|
|
177
|
+
const items = get$1(options);
|
|
178
|
+
const total = items.length;
|
|
179
|
+
if (total === 0) return;
|
|
180
|
+
const move = up ? -1 : 1;
|
|
150
181
|
let position = get$1(highlightedIndex);
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
182
|
+
for (let step = 0; step < total; step++) {
|
|
183
|
+
position += move;
|
|
184
|
+
if (position >= total) position = 0;
|
|
185
|
+
else if (position < 0) position = total - 1;
|
|
186
|
+
const candidate = items[position];
|
|
187
|
+
if (candidate !== void 0 && !isItemDisabled(candidate)) {
|
|
188
|
+
set$1(highlightedIndex, position);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
156
192
|
};
|
|
157
193
|
const applyHighlighted = () => {
|
|
158
194
|
if (!setValue || !get$1(isOpen)) return;
|
|
159
195
|
const highlightedIndexVal = get$1(highlightedIndex);
|
|
160
196
|
if (highlightedIndexVal === -1) return;
|
|
161
197
|
const entry = get$1(options)[highlightedIndexVal];
|
|
162
|
-
if (entry !== void 0) setValue(entry);
|
|
198
|
+
if (entry !== void 0 && !isItemDisabled(entry)) setValue(entry);
|
|
163
199
|
};
|
|
164
200
|
return {
|
|
165
201
|
applyHighlighted,
|
|
166
202
|
containerProps,
|
|
167
203
|
getIdentifier,
|
|
168
204
|
getText,
|
|
205
|
+
groupedOptions,
|
|
169
206
|
highlightedIndex,
|
|
170
207
|
isActiveItem,
|
|
208
|
+
isGrouped,
|
|
209
|
+
isItemDisabled,
|
|
171
210
|
isOpen,
|
|
172
211
|
itemIndexInValue,
|
|
173
212
|
menuWidth,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../src/composables/dropdown-menu.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, TemplateRef } from 'vue';\n\nexport type KeyOfType<T, V> = T extends string | number | boolean | symbol | null | undefined\n ? never\n : V extends object\n ? keyof T\n : keyof {\n [P in keyof T as T[P] extends V ? P : V extends T[P] ? P : never]: any;\n };\n\nexport interface DropdownItemAttr<TValue, TItem> {\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n}\n\nexport interface DropdownOptions<TValue, TItem> {\n options: MaybeRefOrGetter<TItem[]>;\n dense?: MaybeRefOrGetter<boolean>;\n disabled?: MaybeRefOrGetter<boolean>;\n value: Ref<TItem | TItem[] | undefined>;\n menuRef: Ref<HTMLElement> | TemplateRef<HTMLElement>;\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n appendWidth?: number;\n prependWidth?: number;\n itemHeight?: number;\n overscan?: number;\n autoSelectFirst?: boolean;\n setValue?: (val: TItem) => void;\n hideSelected?: boolean;\n isOpen?: Ref<boolean>;\n getText?: (item: TItem) => string | undefined;\n getIdentifier?: (item: TItem) => any;\n}\n\nexport function useDropdownOptionProperty<TValue, TItem>({\n keyAttr,\n textAttr,\n}: DropdownItemAttr<TValue, TItem>) {\n function getText(item: TItem): string | undefined {\n if (textAttr) {\n if (typeof textAttr === 'function')\n return textAttr(item);\n else return item[textAttr]?.toString();\n }\n\n return item?.toString();\n }\n\n function getIdentifier(\n item: TItem,\n ): TItem | TItem[KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>] {\n if (keyAttr)\n return item[keyAttr];\n\n return item;\n }\n\n return {\n getIdentifier,\n getText,\n };\n}\n\nfunction toSelectedArray<TItem>(val: TItem | TItem[] | undefined): TItem[] {\n if (Array.isArray(val))\n return val;\n if (val !== null && val !== undefined)\n return [val];\n return [];\n}\n\nexport function useDropdownMenu<TValue, TItem>({\n appendWidth,\n autoSelectFirst,\n dense,\n disabled = false,\n getIdentifier: externalGetIdentifier,\n getText: externalGetText,\n hideSelected,\n isOpen: externalIsOpen,\n itemHeight = 48,\n keyAttr,\n menuRef: _menuRef,\n options: allOptions,\n overscan = 5,\n prependWidth,\n setValue,\n textAttr,\n value,\n}: DropdownOptions<TValue, TItem>) {\n const { getIdentifier: defaultGetIdentifier, getText: defaultGetText } = useDropdownOptionProperty({\n keyAttr,\n textAttr,\n });\n\n const getIdentifier = externalGetIdentifier ?? defaultGetIdentifier;\n const getText = externalGetText ?? defaultGetText;\n\n const activeIdentifiers = computed<Set<any>>(() => {\n const val = get(value);\n const selected: TItem[] = toSelectedArray(val);\n const identifiers = new Set<any>();\n for (const item of selected) {\n identifiers.add(getIdentifier(item));\n }\n return identifiers;\n });\n\n function isActiveItem(item: TItem): boolean {\n return get(activeIdentifiers).has(getIdentifier(item));\n }\n\n const options = computed<TItem[]>(() => {\n const options = toValue(allOptions);\n if (!hideSelected)\n return options;\n\n return options.filter(item => !isActiveItem(item));\n });\n\n const { containerProps, list, scrollTo, wrapperProps } = useVirtualList<TItem>(options, {\n itemHeight,\n overscan,\n });\n\n const renderedData = useArrayMap(list, ({ data, index: _index }) => ({ _index, item: data }));\n\n const isOpen = externalIsOpen ?? shallowRef<boolean>(false);\n\n const valueKey = computed(() => {\n const selected = get(value);\n if (!keyAttr || !selected)\n return selected;\n return Array.isArray(selected) ? selected.map(item => item[keyAttr]) : selected[keyAttr];\n });\n\n const highlightedIndex: Ref<number> = ref(get(autoSelectFirst) ? 0 : -1);\n const userNavigated = shallowRef<boolean>(false);\n\n const optionWidthBounds = computed<{ min: number; max: number }>(() => {\n let min = 0;\n let max = 0;\n for (const option of get(options)) {\n const length = getText(option)?.toString()?.length ?? 0;\n if (min === 0 && max === 0) {\n min = length;\n max = length;\n }\n else if (length < min) {\n min = length;\n }\n else if (length > max) {\n max = length;\n }\n }\n return { min, max };\n });\n\n const menuWidth = computed<string>(() => {\n const { min, max } = get(optionWidthBounds);\n const maxWidth = 30;\n const paddingX = 1.5;\n const fontMultiplier = toValue(dense) ? 12 : 13;\n const difference = max - min;\n\n function computeValue(width: number): string {\n const additionalWidths =\n (prependWidth ? prependWidth + 0.5 : 0) + (appendWidth ? appendWidth + 0.5 : 0);\n return `${Math.min((width * fontMultiplier) / 16 + paddingX + additionalWidths, maxWidth)}rem`;\n }\n\n if (difference <= 5)\n return computeValue(max);\n\n return computeValue(min + difference / 2);\n });\n\n function toggle(state: boolean = false): void {\n set(isOpen, state);\n }\n\n function itemIndexInValue(item: TItem): number {\n const val = get(value);\n const selected: TItem[] = toSelectedArray(val);\n\n if (selected.length === 0)\n return -1;\n\n const itemId = getIdentifier(item);\n return selected.findIndex(selectedItem => getIdentifier(selectedItem) === itemId);\n }\n\n function scrollHighlightedIntoView(): void {\n get(_menuRef)\n ?.querySelector<HTMLElement>('[data-highlighted=\"true\"]')\n ?.scrollIntoView({ block: 'nearest' });\n }\n\n async function adjustScrollByHighlightedIndex(): Promise<void> {\n const index = get(highlightedIndex);\n if (index === -1)\n return;\n\n await nextTick();\n if (get(_menuRef)?.querySelector('[data-highlighted=\"true\"]')) {\n scrollHighlightedIntoView();\n return;\n }\n\n // Highlighted item is outside the virtual list's rendered window —\n // kick the virtual scroll to render it, then nudge it fully into view.\n scrollTo(index);\n await nextTick();\n scrollHighlightedIntoView();\n }\n\n async function updateOpen(open: boolean): Promise<void> {\n if (!open)\n return;\n\n const val = get(value);\n\n // Set highlighted index to active item\n if ((Array.isArray(val) && val.length > 0) || (val !== null && val !== undefined)) {\n const index = get(options).findIndex(isActiveItem);\n if (index > -1)\n set(highlightedIndex, index);\n }\n\n await adjustScrollByHighlightedIndex();\n }\n\n watch([isOpen, () => toValue(disabled)], async ([open, _]) => {\n await updateOpen(open);\n });\n\n watch(highlightedIndex, async () => {\n await adjustScrollByHighlightedIndex();\n });\n\n watch(options, async () => {\n set(userNavigated, false);\n if (get(highlightedIndex) !== -1) {\n if (get(autoSelectFirst)) {\n set(highlightedIndex, 0);\n await adjustScrollByHighlightedIndex();\n }\n else {\n set(highlightedIndex, -1);\n scrollTo(0);\n }\n }\n else {\n scrollTo(0);\n }\n });\n\n watch(isOpen, (open) => {\n if (!open)\n set(userNavigated, false);\n });\n\n const moveHighlight = (up: boolean): void => {\n if (!get(isOpen)) {\n toggle(true);\n return;\n }\n\n set(userNavigated, true);\n\n let position = get(highlightedIndex);\n const move = up ? -1 : 1;\n\n position += move;\n\n const total = get(options).length;\n\n if (position >= total)\n set(highlightedIndex, 0);\n else if (position < 0)\n set(highlightedIndex, total - 1);\n else set(highlightedIndex, position);\n };\n\n const applyHighlighted = (): void => {\n if (!setValue || !get(isOpen))\n return;\n\n const highlightedIndexVal = get(highlightedIndex);\n if (highlightedIndexVal === -1)\n return;\n\n const entry = get(options)[highlightedIndexVal];\n if (entry !== undefined)\n setValue(entry);\n };\n\n return {\n applyHighlighted,\n containerProps,\n getIdentifier,\n getText,\n highlightedIndex,\n isActiveItem,\n isOpen,\n itemIndexInValue,\n menuWidth,\n moveHighlight,\n optionsWithSelectedHidden: options,\n renderedData,\n toggle,\n userNavigated,\n valueKey,\n wrapperProps,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../src/composables/dropdown-menu.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, TemplateRef } from 'vue';\n\nexport type KeyOfType<T, V> = T extends string | number | boolean | symbol | null | undefined\n ? never\n : V extends object\n ? keyof T\n : keyof {\n [P in keyof T as T[P] extends V ? P : V extends T[P] ? P : never]: any;\n };\n\nexport interface DropdownItemAttr<TValue, TItem> {\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n}\n\nexport type GroupBy<TItem> = keyof TItem | ((item: TItem) => string);\n\nexport type ItemDisabled<TItem> = keyof TItem | ((item: TItem) => boolean);\n\nexport interface DropdownOptionGroup<TItem> {\n group: string;\n items: TItem[];\n}\n\nexport interface DropdownOptions<TValue, TItem> {\n options: MaybeRefOrGetter<TItem[]>;\n dense?: MaybeRefOrGetter<boolean>;\n disabled?: MaybeRefOrGetter<boolean>;\n value: Ref<TItem | TItem[] | undefined>;\n menuRef: Ref<HTMLElement> | TemplateRef<HTMLElement>;\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n appendWidth?: number;\n prependWidth?: number;\n itemHeight?: number;\n overscan?: number;\n autoSelectFirst?: boolean;\n setValue?: (val: TItem) => void;\n hideSelected?: boolean;\n isOpen?: Ref<boolean>;\n getText?: (item: TItem) => string | undefined;\n getIdentifier?: (item: TItem) => any;\n groupBy?: MaybeRefOrGetter<GroupBy<TItem> | undefined>;\n itemDisabled?: MaybeRefOrGetter<ItemDisabled<TItem> | undefined>;\n}\n\nexport function useDropdownOptionProperty<TValue, TItem>({\n keyAttr,\n textAttr,\n}: DropdownItemAttr<TValue, TItem>) {\n function getText(item: TItem): string | undefined {\n if (textAttr) {\n if (typeof textAttr === 'function')\n return textAttr(item);\n else return item[textAttr]?.toString();\n }\n\n return item?.toString();\n }\n\n function getIdentifier(\n item: TItem,\n ): TItem | TItem[KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>] {\n if (keyAttr)\n return item[keyAttr];\n\n return item;\n }\n\n return {\n getIdentifier,\n getText,\n };\n}\n\nfunction toSelectedArray<TItem>(val: TItem | TItem[] | undefined): TItem[] {\n if (Array.isArray(val))\n return val;\n if (val !== null && val !== undefined)\n return [val];\n return [];\n}\n\nexport function useDropdownMenu<TValue, TItem>({\n appendWidth,\n autoSelectFirst,\n dense,\n disabled = false,\n getIdentifier: externalGetIdentifier,\n getText: externalGetText,\n hideSelected,\n isOpen: externalIsOpen,\n itemHeight = 48,\n keyAttr,\n menuRef: _menuRef,\n options: allOptions,\n overscan = 5,\n prependWidth,\n setValue,\n textAttr,\n value,\n groupBy,\n itemDisabled,\n}: DropdownOptions<TValue, TItem>) {\n const { getIdentifier: defaultGetIdentifier, getText: defaultGetText } = useDropdownOptionProperty({\n keyAttr,\n textAttr,\n });\n\n const getIdentifier = externalGetIdentifier ?? defaultGetIdentifier;\n const getText = externalGetText ?? defaultGetText;\n\n const activeIdentifiers = computed<Set<any>>(() => {\n const val = get(value);\n const selected: TItem[] = toSelectedArray(val);\n const identifiers = new Set<any>();\n for (const item of selected) {\n identifiers.add(getIdentifier(item));\n }\n return identifiers;\n });\n\n function isActiveItem(item: TItem): boolean {\n return get(activeIdentifiers).has(getIdentifier(item));\n }\n\n const options = computed<TItem[]>(() => {\n const options = toValue(allOptions);\n if (!hideSelected)\n return options;\n\n return options.filter(item => !isActiveItem(item));\n });\n\n function getGroupKey(item: TItem): string {\n const group = toValue(groupBy);\n if (!group)\n return '';\n\n if (typeof group === 'function')\n return group(item);\n\n return String(item[group] ?? '');\n }\n\n function isItemDisabled(item: TItem): boolean {\n const itemDisabledValue = toValue(itemDisabled);\n if (!itemDisabledValue)\n return false;\n\n if (typeof itemDisabledValue === 'function')\n return itemDisabledValue(item);\n\n return Boolean(item[itemDisabledValue]);\n }\n\n const isGrouped = computed<boolean>(() => toValue(groupBy) !== undefined);\n\n const groupedOptions = computed<DropdownOptionGroup<TItem>[]>(() => {\n if (!get(isGrouped))\n return [];\n\n const buckets = new Map<string, TItem[]>();\n for (const item of get(options)) {\n const key = getGroupKey(item);\n const list = buckets.get(key);\n if (list)\n list.push(item);\n else\n buckets.set(key, [item]);\n }\n\n return Array.from(buckets.entries()).map(([group, items]) => ({ group, items }));\n });\n\n const { containerProps, list, scrollTo, wrapperProps } = useVirtualList<TItem>(options, {\n itemHeight,\n overscan,\n });\n\n const renderedData = useArrayMap(list, ({ data, index: _index }) => ({ _index, item: data }));\n\n const isOpen = externalIsOpen ?? shallowRef<boolean>(false);\n\n const valueKey = computed(() => {\n const selected = get(value);\n if (!keyAttr || !selected)\n return selected;\n return Array.isArray(selected) ? selected.map(item => item[keyAttr]) : selected[keyAttr];\n });\n\n const highlightedIndex: Ref<number> = ref(get(autoSelectFirst) ? 0 : -1);\n const userNavigated = shallowRef<boolean>(false);\n\n const optionWidthBounds = computed<{ min: number; max: number }>(() => {\n let min = 0;\n let max = 0;\n for (const option of get(options)) {\n const length = getText(option)?.toString()?.length ?? 0;\n if (min === 0 && max === 0) {\n min = length;\n max = length;\n }\n else if (length < min) {\n min = length;\n }\n else if (length > max) {\n max = length;\n }\n }\n return { min, max };\n });\n\n const menuWidth = computed<string>(() => {\n const { min, max } = get(optionWidthBounds);\n const maxWidth = 30;\n const paddingX = 1.5;\n const fontMultiplier = toValue(dense) ? 12 : 13;\n const difference = max - min;\n\n function computeValue(width: number): string {\n const additionalWidths =\n (prependWidth ? prependWidth + 0.5 : 0) + (appendWidth ? appendWidth + 0.5 : 0);\n return `${Math.min((width * fontMultiplier) / 16 + paddingX + additionalWidths, maxWidth)}rem`;\n }\n\n if (difference <= 5)\n return computeValue(max);\n\n return computeValue(min + difference / 2);\n });\n\n function toggle(state: boolean = false): void {\n set(isOpen, state);\n }\n\n function itemIndexInValue(item: TItem): number {\n const val = get(value);\n const selected: TItem[] = toSelectedArray(val);\n\n if (selected.length === 0)\n return -1;\n\n const itemId = getIdentifier(item);\n return selected.findIndex(selectedItem => getIdentifier(selectedItem) === itemId);\n }\n\n function scrollHighlightedIntoView(): void {\n get(_menuRef)\n ?.querySelector<HTMLElement>('[data-highlighted=\"true\"]')\n ?.scrollIntoView({ block: 'nearest' });\n }\n\n async function adjustScrollByHighlightedIndex(): Promise<void> {\n const index = get(highlightedIndex);\n if (index === -1)\n return;\n\n await nextTick();\n if (get(_menuRef)?.querySelector('[data-highlighted=\"true\"]')) {\n scrollHighlightedIntoView();\n return;\n }\n\n // Highlighted item is outside the virtual list's rendered window —\n // kick the virtual scroll to render it, then nudge it fully into view.\n scrollTo(index);\n await nextTick();\n scrollHighlightedIntoView();\n }\n\n async function updateOpen(open: boolean): Promise<void> {\n if (!open)\n return;\n\n const val = get(value);\n\n // Set highlighted index to active item\n if ((Array.isArray(val) && val.length > 0) || (val !== null && val !== undefined)) {\n const index = get(options).findIndex(isActiveItem);\n if (index > -1)\n set(highlightedIndex, index);\n }\n\n await adjustScrollByHighlightedIndex();\n }\n\n watch([isOpen, () => toValue(disabled)], async ([open, _]) => {\n await updateOpen(open);\n });\n\n watch(highlightedIndex, async () => {\n await adjustScrollByHighlightedIndex();\n });\n\n watch(options, async () => {\n set(userNavigated, false);\n if (get(highlightedIndex) !== -1) {\n if (get(autoSelectFirst)) {\n set(highlightedIndex, 0);\n await adjustScrollByHighlightedIndex();\n }\n else {\n set(highlightedIndex, -1);\n scrollTo(0);\n }\n }\n else {\n scrollTo(0);\n }\n });\n\n watch(isOpen, (open) => {\n if (!open)\n set(userNavigated, false);\n });\n\n const moveHighlight = (up: boolean): void => {\n if (!get(isOpen)) {\n toggle(true);\n return;\n }\n\n set(userNavigated, true);\n\n const items = get(options);\n const total = items.length;\n if (total === 0)\n return;\n\n const move = up ? -1 : 1;\n let position = get(highlightedIndex);\n\n for (let step = 0; step < total; step++) {\n position += move;\n if (position >= total)\n position = 0;\n else if (position < 0)\n position = total - 1;\n\n const candidate = items[position];\n if (candidate !== undefined && !isItemDisabled(candidate)) {\n set(highlightedIndex, position);\n return;\n }\n }\n };\n\n const applyHighlighted = (): void => {\n if (!setValue || !get(isOpen))\n return;\n\n const highlightedIndexVal = get(highlightedIndex);\n if (highlightedIndexVal === -1)\n return;\n\n const entry = get(options)[highlightedIndexVal];\n if (entry !== undefined && !isItemDisabled(entry))\n setValue(entry);\n };\n\n return {\n applyHighlighted,\n containerProps,\n getIdentifier,\n getText,\n groupedOptions,\n highlightedIndex,\n isActiveItem,\n isGrouped,\n isItemDisabled,\n isOpen,\n itemIndexInValue,\n menuWidth,\n moveHighlight,\n optionsWithSelectedHidden: options,\n renderedData,\n toggle,\n userNavigated,\n valueKey,\n wrapperProps,\n };\n}\n"],"mappings":"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"}
|
|
@@ -38,35 +38,37 @@ function useAutoCompleteKeyboardNavigation(options, deps) {
|
|
|
38
38
|
function submitClosestForm() {
|
|
39
39
|
(get(deps.activator)?.closest("form"))?.dispatchEvent(new Event("submit"));
|
|
40
40
|
}
|
|
41
|
-
function
|
|
41
|
+
function tryApplyHighlight(event) {
|
|
42
42
|
const filteredOptions = get(deps.filteredOptions);
|
|
43
|
-
|
|
43
|
+
if (get(deps.highlightedIndex) <= -1 || filteredOptions.length === 0) return false;
|
|
44
|
+
deps.applyHighlighted();
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
function tryApplyCustom(event, requireEmptyOptions) {
|
|
44
49
|
const customValue = toValue(options.customValue);
|
|
45
|
-
const multiple = toValue(options.multiple);
|
|
46
50
|
const internalSearch = get(deps.internalSearch);
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
if (filteredOptions.length === 0 && customValue && internalSearch) {
|
|
62
|
-
applyCustomValue(event, multiple);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
51
|
+
if (!customValue || !internalSearch) return false;
|
|
52
|
+
const filteredOptions = get(deps.filteredOptions);
|
|
53
|
+
if (requireEmptyOptions) {
|
|
54
|
+
if (filteredOptions.length > 0) return false;
|
|
55
|
+
} else if (highlightedMatchesSearch(filteredOptions, get(deps.highlightedIndex), internalSearch)) return false;
|
|
56
|
+
applyCustomValue(event, toValue(options.multiple));
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
function handleOpenMenuEnter(event) {
|
|
60
|
+
if (get(deps.userNavigated) && tryApplyHighlight(event)) return true;
|
|
61
|
+
if (tryApplyCustom(event, false)) return true;
|
|
62
|
+
if (tryApplyHighlight(event)) return true;
|
|
63
|
+
return tryApplyCustom(event, true);
|
|
66
64
|
}
|
|
67
65
|
function onEnter(event) {
|
|
68
|
-
if (get(deps.isOpen)
|
|
69
|
-
|
|
66
|
+
if (get(deps.isOpen)) {
|
|
67
|
+
if (handleOpenMenuEnter(event)) return;
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (get(deps.value).length === 0) {
|
|
70
72
|
set(deps.isOpen, true);
|
|
71
73
|
return event.preventDefault();
|
|
72
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-navigation.js","names":[],"sources":["../../../../src/composables/forms/auto-complete/keyboard-navigation.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, TemplateRef } from 'vue';\nimport { get, set } from '@vueuse/shared';\n\nexport interface UseAutoCompleteKeyboardNavigationOptions {\n /** Whether multiple items can be selected. */\n multiple: MaybeRefOrGetter<boolean>;\n /** Whether custom (free-text) values are allowed. */\n customValue: MaybeRefOrGetter<boolean>;\n /** Whether selected values are displayed as chips. */\n chips: MaybeRefOrGetter<boolean>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationDeps<TItem> {\n internalSearch: Ref<string>;\n value: Ref<TItem[]>;\n filteredOptions: Ref<TItem[]>;\n isOpen: Ref<boolean>;\n highlightedIndex: Ref<number>;\n userNavigated: Ref<boolean>;\n searchInputFocused: Ref<boolean>;\n applyHighlighted: () => void;\n clear: () => void;\n removeValue: (item: TItem) => void;\n setSearchAsValue: () => void;\n getText: (item: TItem) => string | undefined;\n activator: Ref<HTMLElement | undefined> | TemplateRef<HTMLElement>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationReturn {\n focusedValueIndex: Ref<number>;\n moveSelectedValueHighlight: (event: KeyboardEvent, next: boolean) => void;\n onEnter: (event: KeyboardEvent) => void;\n onTab: (event: KeyboardEvent) => void;\n onInputDeletePressed: () => void;\n setValueFocus: (index: number) => void;\n}\n\nexport function useAutoCompleteKeyboardNavigation<TItem>(\n options: UseAutoCompleteKeyboardNavigationOptions,\n deps: UseAutoCompleteKeyboardNavigationDeps<TItem>,\n): UseAutoCompleteKeyboardNavigationReturn {\n const focusedValueIndex = ref<number>(-1);\n\n function setValueFocus(index: number): void {\n set(focusedValueIndex, index);\n }\n\n function moveSelectedValueHighlight(event: KeyboardEvent, next: boolean): void {\n const multiple = toValue(options.multiple);\n const internalSearchValue = get(deps.internalSearch);\n\n if (!multiple || internalSearchValue.length > 0)\n return;\n\n event.preventDefault();\n const total = get(deps.value).length;\n\n let current = get(focusedValueIndex);\n\n if (current === -1) {\n set(focusedValueIndex, next ? 0 : total - 1);\n return;\n }\n\n const move = next ? 1 : -1;\n current += move;\n\n if (current < 0 || current >= total) {\n set(focusedValueIndex, -1);\n set(deps.searchInputFocused, true);\n }\n else {\n set(focusedValueIndex, current);\n }\n }\n\n function highlightedMatchesSearch(filteredOptions: TItem[], highlightedIndex: number, search: string): boolean {\n if (highlightedIndex < 0 || highlightedIndex >= filteredOptions.length)\n return false;\n\n const option = filteredOptions[highlightedIndex];\n if (typeof option === 'string')\n return option === search;\n\n if (option && typeof option === 'object')\n return (deps.getText(option) ?? '') === search;\n\n return false;\n }\n\n function applyCustomValue(event: KeyboardEvent, multiple: boolean): void {\n deps.setSearchAsValue();\n if (!multiple)\n set(deps.isOpen, false);\n event.preventDefault();\n }\n\n function submitClosestForm(): void {\n const activator = get(deps.activator);\n const form = activator?.closest('form');\n form?.dispatchEvent(new Event('submit'));\n }\n\n function handleOpenMenuEnter(event: KeyboardEvent): boolean {\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n const customValue = toValue(options.customValue);\n const multiple = toValue(options.multiple);\n const internalSearch = get(deps.internalSearch);\n\n const userNavigated = get(deps.userNavigated);\n\n if (userNavigated && highlightedIndex > -1 && filteredOptions.length > 0) {\n deps.applyHighlighted();\n event.preventDefault();\n return true;\n }\n\n if (customValue && internalSearch && !highlightedMatchesSearch(filteredOptions, highlightedIndex, internalSearch)) {\n applyCustomValue(event, multiple);\n return true;\n }\n\n if (highlightedIndex > -1 && filteredOptions.length > 0) {\n deps.applyHighlighted();\n event.preventDefault();\n return true;\n }\n\n if (filteredOptions.length === 0 && customValue && internalSearch) {\n applyCustomValue(event, multiple);\n return true;\n }\n\n return false;\n }\n\n function onEnter(event: KeyboardEvent): void {\n if (get(deps.isOpen) && handleOpenMenuEnter(event))\n return;\n\n // Nothing selected, menu closed: open menu\n if (!get(deps.isOpen) && get(deps.value).length === 0) {\n set(deps.isOpen, true);\n return event.preventDefault();\n }\n\n // Fallback: submit parent form\n submitClosestForm();\n }\n\n function onTab(event: KeyboardEvent): void {\n const isOpen = get(deps.isOpen);\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n const multiple = toValue(options.multiple);\n\n if (isOpen && filteredOptions.length > 0 && highlightedIndex > -1 && !multiple) {\n deps.applyHighlighted();\n event.preventDefault();\n }\n }\n\n function onInputDeletePressed(): void {\n const internalSearch = get(deps.internalSearch);\n const value = get(deps.value);\n const total = value.length;\n const multiple = toValue(options.multiple);\n\n if (!internalSearch && total > 0) {\n if (multiple) {\n if (toValue(options.chips)) {\n set(focusedValueIndex, total - 1);\n }\n else {\n const lastItem = value[total - 1];\n if (lastItem !== undefined)\n deps.removeValue(lastItem);\n }\n }\n else {\n deps.clear();\n }\n }\n }\n\n // Watch value changes to reset focused index\n watch(deps.value, () => {\n setValueFocus(-1);\n });\n\n // Watch focused value index to handle chip focus\n watch(focusedValueIndex, async (index) => {\n const multiple = toValue(options.multiple);\n if (index === -1 || !multiple)\n return;\n\n await nextTick(() => {\n const activator = get(deps.activator);\n const element = activator?.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n element?.focus();\n });\n });\n\n return {\n // eslint-disable-next-line @rotki/composable-return-readonly -- written by focus.ts onInputFocused\n focusedValueIndex,\n moveSelectedValueHighlight,\n onEnter,\n onInputDeletePressed,\n onTab,\n setValueFocus,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keyboard-navigation.js","names":[],"sources":["../../../../src/composables/forms/auto-complete/keyboard-navigation.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, TemplateRef } from 'vue';\nimport { get, set } from '@vueuse/shared';\n\nexport interface UseAutoCompleteKeyboardNavigationOptions {\n /** Whether multiple items can be selected. */\n multiple: MaybeRefOrGetter<boolean>;\n /** Whether custom (free-text) values are allowed. */\n customValue: MaybeRefOrGetter<boolean>;\n /** Whether selected values are displayed as chips. */\n chips: MaybeRefOrGetter<boolean>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationDeps<TItem> {\n internalSearch: Ref<string>;\n value: Ref<TItem[]>;\n filteredOptions: Ref<TItem[]>;\n isOpen: Ref<boolean>;\n highlightedIndex: Ref<number>;\n userNavigated: Ref<boolean>;\n searchInputFocused: Ref<boolean>;\n applyHighlighted: () => void;\n clear: () => void;\n removeValue: (item: TItem) => void;\n setSearchAsValue: () => void;\n getText: (item: TItem) => string | undefined;\n activator: Ref<HTMLElement | undefined> | TemplateRef<HTMLElement>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationReturn {\n focusedValueIndex: Ref<number>;\n moveSelectedValueHighlight: (event: KeyboardEvent, next: boolean) => void;\n onEnter: (event: KeyboardEvent) => void;\n onTab: (event: KeyboardEvent) => void;\n onInputDeletePressed: () => void;\n setValueFocus: (index: number) => void;\n}\n\nexport function useAutoCompleteKeyboardNavigation<TItem>(\n options: UseAutoCompleteKeyboardNavigationOptions,\n deps: UseAutoCompleteKeyboardNavigationDeps<TItem>,\n): UseAutoCompleteKeyboardNavigationReturn {\n const focusedValueIndex = ref<number>(-1);\n\n function setValueFocus(index: number): void {\n set(focusedValueIndex, index);\n }\n\n function moveSelectedValueHighlight(event: KeyboardEvent, next: boolean): void {\n const multiple = toValue(options.multiple);\n const internalSearchValue = get(deps.internalSearch);\n\n if (!multiple || internalSearchValue.length > 0)\n return;\n\n event.preventDefault();\n const total = get(deps.value).length;\n\n let current = get(focusedValueIndex);\n\n if (current === -1) {\n set(focusedValueIndex, next ? 0 : total - 1);\n return;\n }\n\n const move = next ? 1 : -1;\n current += move;\n\n if (current < 0 || current >= total) {\n set(focusedValueIndex, -1);\n set(deps.searchInputFocused, true);\n }\n else {\n set(focusedValueIndex, current);\n }\n }\n\n function highlightedMatchesSearch(filteredOptions: TItem[], highlightedIndex: number, search: string): boolean {\n if (highlightedIndex < 0 || highlightedIndex >= filteredOptions.length)\n return false;\n\n const option = filteredOptions[highlightedIndex];\n if (typeof option === 'string')\n return option === search;\n\n if (option && typeof option === 'object')\n return (deps.getText(option) ?? '') === search;\n\n return false;\n }\n\n function applyCustomValue(event: KeyboardEvent, multiple: boolean): void {\n deps.setSearchAsValue();\n if (!multiple)\n set(deps.isOpen, false);\n event.preventDefault();\n }\n\n function submitClosestForm(): void {\n const activator = get(deps.activator);\n const form = activator?.closest('form');\n form?.dispatchEvent(new Event('submit'));\n }\n\n function tryApplyHighlight(event: KeyboardEvent): boolean {\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n if (highlightedIndex <= -1 || filteredOptions.length === 0)\n return false;\n\n deps.applyHighlighted();\n event.preventDefault();\n return true;\n }\n\n function tryApplyCustom(event: KeyboardEvent, requireEmptyOptions: boolean): boolean {\n const customValue = toValue(options.customValue);\n const internalSearch = get(deps.internalSearch);\n if (!customValue || !internalSearch)\n return false;\n\n const filteredOptions = get(deps.filteredOptions);\n if (requireEmptyOptions) {\n if (filteredOptions.length > 0)\n return false;\n }\n else {\n const highlightedIndex = get(deps.highlightedIndex);\n if (highlightedMatchesSearch(filteredOptions, highlightedIndex, internalSearch))\n return false;\n }\n\n applyCustomValue(event, toValue(options.multiple));\n return true;\n }\n\n function handleOpenMenuEnter(event: KeyboardEvent): boolean {\n // Prefer the user's explicit navigation.\n if (get(deps.userNavigated) && tryApplyHighlight(event))\n return true;\n\n // Fall back to a typed custom value when it differs from the highlight.\n if (tryApplyCustom(event, false))\n return true;\n\n // Use the (auto-)highlighted option if there is one.\n if (tryApplyHighlight(event))\n return true;\n\n // No options matched but custom values are allowed — accept the typed text.\n return tryApplyCustom(event, true);\n }\n\n function onEnter(event: KeyboardEvent): void {\n if (get(deps.isOpen)) {\n if (handleOpenMenuEnter(event))\n return;\n\n // Menu is open but no actionable selection (e.g. typed text with no\n // matches and customValue=false, or no highlighted option). Swallow\n // Enter so it does not bubble up and submit a surrounding form.\n event.preventDefault();\n return;\n }\n\n // Nothing selected, menu closed: open menu\n if (get(deps.value).length === 0) {\n set(deps.isOpen, true);\n return event.preventDefault();\n }\n\n // Menu closed with a value selected: let Enter submit the parent form.\n submitClosestForm();\n }\n\n function onTab(event: KeyboardEvent): void {\n const isOpen = get(deps.isOpen);\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n const multiple = toValue(options.multiple);\n\n if (isOpen && filteredOptions.length > 0 && highlightedIndex > -1 && !multiple) {\n deps.applyHighlighted();\n event.preventDefault();\n }\n }\n\n function onInputDeletePressed(): void {\n const internalSearch = get(deps.internalSearch);\n const value = get(deps.value);\n const total = value.length;\n const multiple = toValue(options.multiple);\n\n if (!internalSearch && total > 0) {\n if (multiple) {\n if (toValue(options.chips)) {\n set(focusedValueIndex, total - 1);\n }\n else {\n const lastItem = value[total - 1];\n if (lastItem !== undefined)\n deps.removeValue(lastItem);\n }\n }\n else {\n deps.clear();\n }\n }\n }\n\n // Watch value changes to reset focused index\n watch(deps.value, () => {\n setValueFocus(-1);\n });\n\n // Watch focused value index to handle chip focus\n watch(focusedValueIndex, async (index) => {\n const multiple = toValue(options.multiple);\n if (index === -1 || !multiple)\n return;\n\n await nextTick(() => {\n const activator = get(deps.activator);\n const element = activator?.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n element?.focus();\n });\n });\n\n return {\n // eslint-disable-next-line @rotki/composable-return-readonly -- written by focus.ts onInputFocused\n focusedValueIndex,\n moveSelectedValueHighlight,\n onEnter,\n onInputDeletePressed,\n onTab,\n setValueFocus,\n };\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,7 @@ import RuiDateTimePicker_default from "./components/date-time-picker/RuiDateTime
|
|
|
37
37
|
import RuiDivider_default from "./components/divider/RuiDivider.js";
|
|
38
38
|
import RuiCheckboxGroup_default from "./components/forms/checkbox/checkbox-group/RuiCheckboxGroup.js";
|
|
39
39
|
import RuiCheckbox_default from "./components/forms/checkbox/RuiCheckbox.js";
|
|
40
|
+
import RuiFileUpload_default from "./components/forms/file-upload/RuiFileUpload.js";
|
|
40
41
|
import RuiRadioGroup_default from "./components/forms/radio-button/radio-group/RuiRadioGroup.js";
|
|
41
42
|
import RuiRadio_default from "./components/forms/radio-button/radio/RuiRadio.js";
|
|
42
43
|
import RuiRevealableTextField_default from "./components/forms/revealable-text-field/RuiRevealableTextField.js";
|
|
@@ -95,6 +96,6 @@ function createRuiI8nPlugin(i18nInstance) {
|
|
|
95
96
|
} };
|
|
96
97
|
}
|
|
97
98
|
//#endregion
|
|
98
|
-
export { LuAArrowDown, LuAArrowUp, LuALargeSmall, LuAccessibility, LuActivatePremium, LuActivity, LuAirVent, LuAirplay, LuAlarmClock, LuAlarmClockCheck, LuAlarmClockMinus, LuAlarmClockOff, LuAlarmClockPlus, LuAlarmSmoke, LuAlbum, LuAlignCenterHorizontal, LuAlignCenterVertical, LuAlignEndHorizontal, LuAlignEndVertical, LuAlignHorizontalDistributeCenter, LuAlignHorizontalDistributeEnd, LuAlignHorizontalDistributeStart, LuAlignHorizontalJustifyCenter, LuAlignHorizontalJustifyEnd, LuAlignHorizontalJustifyStart, LuAlignHorizontalSpaceAround, LuAlignHorizontalSpaceBetween, LuAlignStartHorizontal, LuAlignStartVertical, LuAlignVerticalDistributeCenter, LuAlignVerticalDistributeEnd, LuAlignVerticalDistributeStart, LuAlignVerticalJustifyCenter, LuAlignVerticalJustifyEnd, LuAlignVerticalJustifyStart, LuAlignVerticalSpaceAround, LuAlignVerticalSpaceBetween, LuAmbulance, LuAmpersand, LuAmpersands, LuAmphora, LuAnchor, LuAngry, LuAnnoyed, LuAntenna, LuAnvil, LuAperture, LuAppWindow, LuAppWindowMac, LuApple, LuArchive, LuArchiveRestore, LuArchiveX, LuArmchair, LuArrowBigDown, LuArrowBigDownDash, LuArrowBigLeft, LuArrowBigLeftDash, LuArrowBigRight, LuArrowBigRightDash, LuArrowBigUp, LuArrowBigUpDash, LuArrowDown, LuArrowDown01, LuArrowDown10, LuArrowDownAZ, LuArrowDownFromLine, LuArrowDownLeft, LuArrowDownNarrowWide, LuArrowDownRight, LuArrowDownToDot, LuArrowDownToLine, LuArrowDownUp, LuArrowDownWideNarrow, LuArrowDownZA, LuArrowLeft, LuArrowLeftFromLine, LuArrowLeftRight, LuArrowLeftToLine, LuArrowRight, LuArrowRightFromLine, LuArrowRightLeft, LuArrowRightToLine, LuArrowUp, LuArrowUp01, LuArrowUp10, LuArrowUpAZ, LuArrowUpDown, LuArrowUpFromDot, LuArrowUpFromLine, LuArrowUpLeft, LuArrowUpNarrowWide, LuArrowUpRight, LuArrowUpToLine, LuArrowUpWideNarrow, LuArrowUpZA, LuArrowsUpFromLine, LuAsterisk, LuAtSign, LuAtom, LuAudioLines, LuAudioWaveform, LuAward, LuAxe, LuAxis3d, LuBaby, LuBackpack, LuBadge, LuBadgeAlert, LuBadgeCent, LuBadgeCheck, LuBadgeDollarSign, LuBadgeEuro, LuBadgeIndianRupee, LuBadgeInfo, LuBadgeJapaneseYen, LuBadgeMinus, LuBadgePercent, LuBadgePlus, LuBadgePoundSterling, LuBadgeQuestionMark, LuBadgeRussianRuble, LuBadgeSwissFranc, LuBadgeTurkishLira, LuBadgeX, LuBaggageClaim, LuBalances, LuBalloon, LuBan, LuBanana, LuBandage, LuBanknote, LuBanknoteArrowDown, LuBanknoteArrowUp, LuBanknoteX, LuBarcode, LuBarrel, LuBaseline, LuBath, LuBattery, LuBatteryCharging, LuBatteryFull, LuBatteryLow, LuBatteryMedium, LuBatteryPlus, LuBatteryWarning, LuBeaker, LuBean, LuBeanOff, LuBed, LuBedDouble, LuBedSingle, LuBeef, LuBeer, LuBeerOff, LuBell, LuBellDot, LuBellElectric, LuBellMinus, LuBellOff, LuBellPlus, LuBellRing, LuBetweenHorizontalEnd, LuBetweenHorizontalStart, LuBetweenVerticalEnd, LuBetweenVerticalStart, LuBicepsFlexed, LuBike, LuBinary, LuBinoculars, LuBiohazard, LuBird, LuBirdhouse, LuBitcoin, LuBitcoinAccounts, LuBlend, LuBlinds, LuBlockchain, LuBlocks, LuBluetooth, LuBluetoothConnected, LuBluetoothOff, LuBluetoothSearching, LuBold, LuBolt, LuBomb, LuBone, LuBook, LuBookA, LuBookAlert, LuBookAudio, LuBookCheck, LuBookCopy, LuBookDashed, LuBookDown, LuBookHeadphones, LuBookHeart, LuBookImage, LuBookKey, LuBookLock, LuBookMarked, LuBookMinus, LuBookOpen, LuBookOpenCheck, LuBookOpenText, LuBookPlus, LuBookSearch, LuBookText, LuBookType, LuBookUp, LuBookUp2, LuBookUser, LuBookX, LuBookmark, LuBookmarkCheck, LuBookmarkMinus, LuBookmarkPlus, LuBookmarkX, LuBoomBox, LuBot, LuBotMessageSquare, LuBotOff, LuBottleWine, LuBowArrow, LuBox, LuBoxes, LuBraces, LuBrackets, LuBrain, LuBrainCircuit, LuBrainCog, LuBrickWall, LuBrickWallFire, LuBrickWallShield, LuBriefcase, LuBriefcaseBusiness, LuBriefcaseConveyorBelt, LuBriefcaseMedical, LuBringToFront, LuBrush, LuBrushCleaning, LuBubbles, LuBug, LuBugOff, LuBugPlay, LuBuilding, LuBuilding2, LuBus, LuBusFront, LuCable, LuCableCar, LuCake, LuCakeSlice, LuCalculator, LuCalendar, LuCalendar1, LuCalendarArrowDown, LuCalendarArrowUp, LuCalendarCheck, LuCalendarCheck2, LuCalendarClock, LuCalendarCog, LuCalendarDays, LuCalendarFold, LuCalendarHeart, LuCalendarMinus, LuCalendarMinus2, LuCalendarOff, LuCalendarPlus, LuCalendarPlus2, LuCalendarRange, LuCalendarSearch, LuCalendarSync, LuCalendarX, LuCalendarX2, LuCalendars, LuCamera, LuCameraOff, LuCandy, LuCandyCane, LuCandyOff, LuCannabis, LuCannabisOff, LuCaptions, LuCaptionsOff, LuCar, LuCarFront, LuCarTaxiFront, LuCaravan, LuCardSim, LuCarrot, LuCaseLower, LuCaseSensitive, LuCaseUpper, LuCassetteTape, LuCast, LuCastle, LuCat, LuCctv, LuChartArea, LuChartBar, LuChartBarBig, LuChartBarDecreasing, LuChartBarIncreasing, LuChartBarStacked, LuChartCandlestick, LuChartColumn, LuChartColumnBig, LuChartColumnDecreasing, LuChartColumnIncreasing, LuChartColumnStacked, LuChartGantt, LuChartLine, LuChartNetwork, LuChartNoAxesColumn, LuChartNoAxesColumnDecreasing, LuChartNoAxesColumnIncreasing, LuChartNoAxesCombined, LuChartNoAxesGantt, LuChartPie, LuChartScatter, LuChartSpline, LuCheck, LuCheckCheck, LuCheckLine, LuCheckboxBlank, LuCheckboxBlankCircle, LuCheckboxBlankCircleFill, LuCheckboxFill, LuCheckboxIndeterminateFill, LuChefHat, LuCherry, LuChessBishop, LuChessKing, LuChessKnight, LuChessPawn, LuChessQueen, LuChessRook, LuChevronDown, LuChevronFirst, LuChevronLast, LuChevronLeft, LuChevronRight, LuChevronUp, LuChevronsDown, LuChevronsDownUp, LuChevronsLeft, LuChevronsLeftRight, LuChevronsLeftRightEllipsis, LuChevronsRight, LuChevronsRightLeft, LuChevronsUp, LuChevronsUpDown, LuChromium, LuChurch, LuCigarette, LuCigaretteOff, LuCircle, LuCircleAlert, LuCircleArrowDown, LuCircleArrowLeft, LuCircleArrowOutDownLeft, LuCircleArrowOutDownRight, LuCircleArrowOutUpLeft, LuCircleArrowOutUpRight, LuCircleArrowRight, LuCircleArrowUp, LuCircleCheck, LuCircleCheckBig, LuCircleChevronDown, LuCircleChevronLeft, LuCircleChevronRight, LuCircleChevronUp, LuCircleDashed, LuCircleDivide, LuCircleDollarSign, LuCircleDot, LuCircleDotDashed, LuCircleEllipsis, LuCircleEqual, LuCircleFadingArrowUp, LuCircleFadingPlus, LuCircleGauge, LuCircleMinus, LuCircleOff, LuCircleParking, LuCircleParkingOff, LuCirclePause, LuCirclePercent, LuCirclePile, LuCirclePlay, LuCirclePlus, LuCirclePoundSterling, LuCirclePower, LuCircleQuestionMark, LuCircleSlash, LuCircleSlash2, LuCircleSmall, LuCircleStar, LuCircleStop, LuCircleUser, LuCircleUserRound, LuCircleX, LuCircuitBoard, LuCitrus, LuClapperboard, LuClipboard, LuClipboardCheck, LuClipboardClock, LuClipboardCopy, LuClipboardList, LuClipboardMinus, LuClipboardPaste, LuClipboardPen, LuClipboardPenLine, LuClipboardPlus, LuClipboardType, LuClipboardX, LuClock, LuClock1, LuClock10, LuClock11, LuClock12, LuClock2, LuClock3, LuClock4, LuClock5, LuClock6, LuClock7, LuClock8, LuClock9, LuClockAlert, LuClockArrowDown, LuClockArrowUp, LuClockCheck, LuClockFading, LuClockPlus, LuClosedCaption, LuCloud, LuCloudAlert, LuCloudBackup, LuCloudCheck, LuCloudCog, LuCloudDownload, LuCloudDownload2Fill, LuCloudDownloadFill, LuCloudDrizzle, LuCloudFill, LuCloudFog, LuCloudHail, LuCloudLightning, LuCloudMoon, LuCloudMoonRain, LuCloudOff, LuCloudOffFill, LuCloudRain, LuCloudRainWind, LuCloudSnow, LuCloudSun, LuCloudSunRain, LuCloudSync, LuCloudSyncFill, LuCloudUpload, LuCloudUpload2Fill, LuCloudUploadFill, LuCloudy, LuClover, LuClub, LuCode, LuCodeXml, LuCodepen, LuCodesandbox, LuCoffee, LuCog, LuCoins, LuCoinsExchange, LuColumns2, LuColumns3, LuColumns3Cog, LuColumns4, LuCombine, LuCommand, LuCompass, LuComponent, LuComputer, LuConciergeBell, LuCone, LuConstruction, LuContact, LuContactRound, LuContainer, LuContrast, LuCookie, LuCookingPot, LuCopy, LuCopyCheck, LuCopyMinus, LuCopyPlus, LuCopySlash, LuCopyX, LuCopyleft, LuCopyright, LuCornerDownLeft, LuCornerDownRight, LuCornerLeftDown, LuCornerLeftUp, LuCornerRightDown, LuCornerRightUp, LuCornerUpLeft, LuCornerUpRight, LuCpu, LuCreativeCommons, LuCreditCard, LuCroissant, LuCrop, LuCross, LuCrosshair, LuCrown, LuCuboid, LuCupSoda, LuCurrency, LuCustomAssets, LuCylinder, LuDam, LuDatabase, LuDatabaseBackup, LuDatabaseSearch, LuDatabaseZap, LuDecimalsArrowLeft, LuDecimalsArrowRight, LuDelete, LuDeposits, LuDessert, LuDiameter, LuDiamond, LuDiamondMinus, LuDiamondPercent, LuDiamondPlus, LuDice1, LuDice2, LuDice3, LuDice4, LuDice5, LuDice6, LuDices, LuDiff, LuDisc, LuDisc2, LuDisc3, LuDiscAlbum, LuDiscord, LuDivide, LuDna, LuDnaOff, LuDock, LuDog, LuDollarSign, LuDonateFill, LuDonut, LuDoorClosed, LuDoorClosedLocked, LuDoorOpen, LuDot, LuDownload, LuDraftingCompass, LuDrama, LuDribbble, LuDrill, LuDrone, LuDroplet, LuDropletFill, LuDropletHalfFill, LuDropletOff, LuDropletTrendingDown, LuDroplets, LuDrum, LuDrumstick, LuDumbbell, LuEar, LuEarOff, LuEarth, LuEarthLock, LuEclipse, LuEgg, LuEggFried, LuEggOff, LuEllipse, LuEllipsis, LuEllipsisVertical, LuEqual, LuEqualApproximately, LuEqualNot, LuEraser, LuEthernetPort, LuEuro, LuEvCharger, LuEvmAccounts, LuExpand, LuExport, LuExternalLink, LuEye, LuEyeClosed, LuEyeOff, LuEyeSemiOff, LuFacebook, LuFactory, LuFan, LuFastForward, LuFeather, LuFence, LuFerrisWheel, LuFigma, LuFile, LuFileArchive, LuFileAxis3d, LuFileBadge, LuFileBox, LuFileBraces, LuFileBracesCorner, LuFileChartColumn, LuFileChartColumnIncreasing, LuFileChartLine, LuFileChartPie, LuFileCheck, LuFileCheckCorner, LuFileClock, LuFileCode, LuFileCodeCorner, LuFileCog, LuFileDiff, LuFileDigit, LuFileDown, LuFileExclamationPoint, LuFileHeadphone, LuFileHeart, LuFileImage, LuFileInput, LuFileKey, LuFileLock, LuFileMinus, LuFileMinusCorner, LuFileMusic, LuFileOutput, LuFilePen, LuFilePenLine, LuFilePlay, LuFilePlus, LuFilePlusCorner, LuFileQuestionMark, LuFileScan, LuFileSearch, LuFileSearchCorner, LuFileSignal, LuFileSliders, LuFileSpreadsheet, LuFileStack, LuFileSymlink, LuFileTerminal, LuFileText, LuFileType, LuFileTypeCorner, LuFileUp, LuFileUser, LuFileVideoCamera, LuFileVolume, LuFileX, LuFileXCorner, LuFiles, LuFilm, LuFingerprintPattern, LuFireExtinguisher, LuFish, LuFishOff, LuFishSymbol, LuFishingHook, LuFishingRod, LuFlag, LuFlagOff, LuFlagTriangleLeft, LuFlagTriangleRight, LuFlame, LuFlameKindling, LuFlashlight, LuFlashlightOff, LuFlaskConical, LuFlaskConicalOff, LuFlaskRound, LuFlipHorizontal2, LuFlipVertical2, LuFlower, LuFlower2, LuFocus, LuFoldHorizontal, LuFoldVertical, LuFolder, LuFolderArchive, LuFolderCheck, LuFolderClock, LuFolderClosed, LuFolderCode, LuFolderCog, LuFolderDot, LuFolderDown, LuFolderGit, LuFolderGit2, LuFolderHeart, LuFolderInput, LuFolderKanban, LuFolderKey, LuFolderLock, LuFolderMinus, LuFolderOpen, LuFolderOpenDot, LuFolderOutput, LuFolderPen, LuFolderPlus, LuFolderRoot, LuFolderSearch, LuFolderSearch2, LuFolderShrink1, LuFolderShrink2, LuFolderSymlink, LuFolderSync, LuFolderTree, LuFolderUp, LuFolderX, LuFolders, LuFootprints, LuForklift, LuForm, LuForward, LuFrame, LuFramer, LuFrown, LuFuel, LuFullscreen, LuFunnel, LuFunnelPlus, LuFunnelX, LuGalleryHorizontal, LuGalleryHorizontalEnd, LuGalleryThumbnails, LuGalleryVertical, LuGalleryVerticalEnd, LuGamepad, LuGamepad2, LuGamepadDirectional, LuGauge, LuGavel, LuGem, LuGeorgianLari, LuGhost, LuGift, LuGitBranch, LuGitBranchMinus, LuGitBranchPlus, LuGitCommitHorizontal, LuGitCommitVertical, LuGitCompare, LuGitCompareArrows, LuGitFork, LuGitGraph, LuGitMerge, LuGitMergeConflict, LuGitPullRequest, LuGitPullRequestArrow, LuGitPullRequestClosed, LuGitPullRequestCreate, LuGitPullRequestCreateArrow, LuGitPullRequestDraft, LuGithub, LuGitlab, LuGlassWater, LuGlasses, LuGlobe, LuGlobeLock, LuGlobeOff, LuGlobeX, LuGoal, LuGpu, LuGraduationCap, LuGrape, LuGrid2x2, LuGrid2x2Check, LuGrid2x2Plus, LuGrid2x2X, LuGrid3x2, LuGrid3x3, LuGrip, LuGripHorizontal, LuGripVertical, LuGroup, LuGuitar, LuHam, LuHamburger, LuHammer, LuHand, LuHandCoins, LuHandFist, LuHandGrab, LuHandHeart, LuHandHelping, LuHandMetal, LuHandPlatter, LuHandbag, LuHandshake, LuHardDrive, LuHardDriveDownload, LuHardDriveUpload, LuHardHat, LuHash, LuHatGlasses, LuHaze, LuHd, LuHdmiPort, LuHeading, LuHeading1, LuHeading2, LuHeading3, LuHeading4, LuHeading5, LuHeading6, LuHeadphoneOff, LuHeadphones, LuHeadset, LuHeart, LuHeartCrack, LuHeartHandshake, LuHeartMinus, LuHeartOff, LuHeartPlus, LuHeartPulse, LuHeater, LuHelicopter, LuHexagon, LuHighlighter, LuHistoricPrices, LuHistory, LuHistoryEventsFill, LuHop, LuHopOff, LuHospital, LuHotel, LuHourglass, LuHouse, LuHouseHeart, LuHousePlug, LuHousePlus, LuHouseWifi, LuIceCreamBowl, LuIceCreamCone, LuIdCard, LuIdCardLanyard, LuImage, LuImageDown, LuImageMinus, LuImageOff, LuImagePlay, LuImagePlus, LuImageUp, LuImageUpscale, LuImages, LuImport, LuInbox, LuIndianRupee, LuInfinity, LuInfo, LuInspectionPanel, LuInstagram, LuItalic, LuIterationCcw, LuIterationCw, LuJapaneseYen, LuJoystick, LuKanban, LuKayak, LuKey, LuKeyRound, LuKeySquare, LuKeyboard, LuKeyboardMusic, LuKeyboardOff, LuLamp, LuLampCeiling, LuLampDesk, LuLampFloor, LuLampWallDown, LuLampWallUp, LuLandPlot, LuLandmark, LuLanguages, LuLaptop, LuLaptopMinimal, LuLaptopMinimalCheck, LuLasso, LuLassoSelect, LuLatestPrices, LuLaugh, LuLayers, LuLayers2, LuLayersIn, LuLayersOut, LuLayersPlus, LuLayoutDashboard, LuLayoutGrid, LuLayoutList, LuLayoutPanelLeft, LuLayoutPanelTop, LuLayoutTemplate, LuLeaf, LuLeafyGreen, LuLectern, LuLensConcave, LuLensConvex, LuLiabilities, LuLibrary, LuLibraryBig, LuLifeBuoy, LuLigature, LuLightbulb, LuLightbulbOff, LuLineDotRightHorizontal, LuLineSquiggle, LuLink, LuLink2, LuLink2Off, LuLinkedin, LuList, LuListCheck, LuListChecks, LuListChevronsDownUp, LuListChevronsUpDown, LuListCollapse, LuListEnd, LuListFilter, LuListFilterPlus, LuListIndentDecrease, LuListIndentIncrease, LuListMinus, LuListMusic, LuListOrdered, LuListPlus, LuListRestart, LuListStart, LuListTodo, LuListTree, LuListVideo, LuListX, LuLoader, LuLoaderCircle, LuLoaderPinwheel, LuLocate, LuLocateFixed, LuLocateOff, LuLock, LuLockKeyhole, LuLockKeyholeOpen, LuLockOpen, LuLogIn, LuLogOut, LuLogs, LuLollipop, LuLuggage, LuMagnet, LuMail, LuMailCheck, LuMailMinus, LuMailOpen, LuMailPlus, LuMailQuestionMark, LuMailSearch, LuMailWarning, LuMailX, LuMailbox, LuMails, LuManageAssets, LuManagePrices, LuManualBalances, LuMap, LuMapMinus, LuMapPin, LuMapPinCheck, LuMapPinCheckInside, LuMapPinHouse, LuMapPinMinus, LuMapPinMinusInside, LuMapPinOff, LuMapPinPen, LuMapPinPlus, LuMapPinPlusInside, LuMapPinX, LuMapPinXInside, LuMapPinned, LuMapPlus, LuMars, LuMarsStroke, LuMartini, LuMaximize, LuMaximize2, LuMedal, LuMegaphone, LuMegaphoneOff, LuMeh, LuMemoryStick, LuMenu, LuMerge, LuMessageCircle, LuMessageCircleCheck, LuMessageCircleCode, LuMessageCircleDashed, LuMessageCircleHeart, LuMessageCircleMore, LuMessageCircleOff, LuMessageCirclePlus, LuMessageCircleQuestionMark, LuMessageCircleReply, LuMessageCircleWarning, LuMessageCircleX, LuMessageSquare, LuMessageSquareCheck, LuMessageSquareCode, LuMessageSquareDashed, LuMessageSquareDiff, LuMessageSquareDot, LuMessageSquareHeart, LuMessageSquareLock, LuMessageSquareMore, LuMessageSquareOff, LuMessageSquarePlus, LuMessageSquareQuote, LuMessageSquareReply, LuMessageSquareShare, LuMessageSquareText, LuMessageSquareWarning, LuMessageSquareX, LuMessagesSquare, LuMetronome, LuMic, LuMicOff, LuMicVocal, LuMicrochip, LuMicroscope, LuMicrowave, LuMilestone, LuMilk, LuMilkOff, LuMinimize, LuMinimize2, LuMinus, LuMirrorRectangular, LuMirrorRound, LuMonitor, LuMonitorCheck, LuMonitorCloud, LuMonitorCog, LuMonitorDot, LuMonitorDown, LuMonitorOff, LuMonitorPause, LuMonitorPlay, LuMonitorSmartphone, LuMonitorSpeaker, LuMonitorStop, LuMonitorUp, LuMonitorX, LuMoon, LuMoonStar, LuMoreAssets, LuMotorbike, LuMountain, LuMountainSnow, LuMouse, LuMouseLeft, LuMouseOff, LuMousePointer, LuMousePointer2, LuMousePointer2Off, LuMousePointerBan, LuMousePointerClick, LuMouseRight, LuMove, LuMove3d, LuMoveDiagonal, LuMoveDiagonal2, LuMoveDown, LuMoveDownLeft, LuMoveDownRight, LuMoveHorizontal, LuMoveLeft, LuMoveRight, LuMoveUp, LuMoveUpLeft, LuMoveUpRight, LuMoveVertical, LuMusic, LuMusic2, LuMusic3, LuMusic4, LuNavigation, LuNavigation2, LuNavigation2Off, LuNavigationOff, LuNetwork, LuNewspaper, LuNfc, LuNonBinary, LuNotebook, LuNotebookPen, LuNotebookTabs, LuNotebookText, LuNotepadText, LuNotepadTextDashed, LuNut, LuNutOff, LuOctagon, LuOctagonAlert, LuOctagonMinus, LuOctagonPause, LuOctagonX, LuOmega, LuOnchain, LuOption, LuOrbit, LuOrigami, LuOsApple, LuOsWindows, LuPackage, LuPackage2, LuPackageCheck, LuPackageMinus, LuPackageOpen, LuPackagePlus, LuPackageSearch, LuPackageX, LuPaintBucket, LuPaintRoller, LuPaintbrush, LuPaintbrushVertical, LuPalette, LuPanda, LuPanelBottom, LuPanelBottomClose, LuPanelBottomDashed, LuPanelBottomOpen, LuPanelLeft, LuPanelLeftClose, LuPanelLeftDashed, LuPanelLeftOpen, LuPanelLeftRightDashed, LuPanelRight, LuPanelRightClose, LuPanelRightDashed, LuPanelRightOpen, LuPanelTop, LuPanelTopBottomDashed, LuPanelTopClose, LuPanelTopDashed, LuPanelTopOpen, LuPanelsLeftBottom, LuPanelsRightBottom, LuPanelsTopLeft, LuPaperclip, LuParentheses, LuParkingMeter, LuPartyPopper, LuPause, LuPawPrint, LuPaypal, LuPcCase, LuPen, LuPenLine, LuPenOff, LuPenTool, LuPencil, LuPencilLine, LuPencilOff, LuPencilRuler, LuPentagon, LuPercent, LuPersonStanding, LuPhilippinePeso, LuPhone, LuPhoneCall, LuPhoneForwarded, LuPhoneIncoming, LuPhoneMissed, LuPhoneOff, LuPhoneOutgoing, LuPi, LuPiano, LuPickaxe, LuPictureInPicture, LuPictureInPicture2, LuPiggyBank, LuPilcrow, LuPilcrowLeft, LuPilcrowRight, LuPill, LuPillBottle, LuPin, LuPinOff, LuPipette, LuPizza, LuPlane, LuPlaneLanding, LuPlaneTakeoff, LuPlay, LuPlug, LuPlug2, LuPlugZap, LuPlus, LuPocket, LuPocketKnife, LuPodcast, LuPointer, LuPointerOff, LuPopcorn, LuPopsicle, LuPoundSterling, LuPower, LuPowerOff, LuPresentation, LuPrinter, LuPrinterCheck, LuPrinterX, LuProjector, LuProportions, LuPuzzle, LuPyramid, LuQrCode, LuQuote, LuRabbit, LuRadar, LuRadiation, LuRadical, LuRadio, LuRadioButtonFill, LuRadioReceiver, LuRadioTower, LuRadius, LuRailSymbol, LuRainbow, LuRat, LuRatio, LuReceipt, LuReceiptCent, LuReceiptEuro, LuReceiptIndianRupee, LuReceiptJapaneseYen, LuReceiptPoundSterling, LuReceiptRussianRuble, LuReceiptSwissFranc, LuReceiptText, LuReceiptTurkishLira, LuReceiveDonationFill, LuRectangleCircle, LuRectangleEllipsis, LuRectangleGoggles, LuRectangleHorizontal, LuRectangleVertical, LuRecycle, LuReddit, LuRedo, LuRedo2, LuRedoDot, LuRefreshCcw, LuRefreshCcwDot, LuRefreshCw, LuRefreshCwOff, LuRefrigerator, LuRefund, LuRegex, LuRemoveFormatting, LuRepeat, LuRepeat1, LuRepeat2, LuReplace, LuReplaceAll, LuReply, LuReplyAll, LuRewind, LuRibbon, LuRocket, LuRockingChair, LuRollerCoaster, LuRose, LuRotate3d, LuRotateCcw, LuRotateCcwKey, LuRotateCcwSquare, LuRotateCw, LuRotateCwSquare, LuRoute, LuRouteOff, LuRouter, LuRows2, LuRows3, LuRows4, LuRss, LuRuler, LuRulerDimensionLine, LuRussianRuble, LuSailboat, LuSalad, LuSandwich, LuSatellite, LuSatelliteDish, LuSaudiRiyal, LuSave, LuSaveAll, LuSaveOff, LuScale, LuScale3d, LuScaling, LuScan, LuScanBarcode, LuScanEye, LuScanFace, LuScanHeart, LuScanLine, LuScanQrCode, LuScanSearch, LuScanText, LuSchool, LuScissors, LuScissorsLineDashed, LuScooter, LuScreenShare, LuScreenShareOff, LuScroll, LuScrollText, LuSearch, LuSearchAlert, LuSearchCheck, LuSearchCode, LuSearchSlash, LuSearchX, LuSection, LuSend, LuSendHorizontal, LuSendToBack, LuSeparatorHorizontal, LuSeparatorVertical, LuServer, LuServerCog, LuServerCrash, LuServerOff, LuSettings, LuSettings2, LuShapes, LuShare, LuShare2, LuSheet, LuShell, LuShelvingUnit, LuShield, LuShieldAlert, LuShieldBan, LuShieldCheck, LuShieldEllipsis, LuShieldHalf, LuShieldMinus, LuShieldOff, LuShieldPlus, LuShieldQuestionMark, LuShieldUser, LuShieldX, LuShip, LuShipWheel, LuShirt, LuShoppingBag, LuShoppingBasket, LuShoppingCart, LuShovel, LuShowerHead, LuShredder, LuShrimp, LuShrink, LuShrub, LuShuffle, LuSigma, LuSignal, LuSignalHigh, LuSignalLow, LuSignalMedium, LuSignalZero, LuSignature, LuSignpost, LuSignpostBig, LuSiren, LuSkipBack, LuSkipForward, LuSkull, LuSlack, LuSlash, LuSlashDivider, LuSlice, LuSlidersHorizontal, LuSlidersVertical, LuSmartphone, LuSmartphoneCharging, LuSmartphoneNfc, LuSmile, LuSmilePlus, LuSnail, LuSnowflake, LuSoapDispenserDroplet, LuSofa, LuSolanaAccountsFill, LuSolarPanel, LuSoup, LuSpace, LuSpade, LuSparkle, LuSparkles, LuSpeaker, LuSpeech, LuSpellCheck, LuSpellCheck2, LuSpline, LuSplinePointer, LuSplit, LuSpool, LuSpotlight, LuSprayCan, LuSprout, LuSquare, LuSquareActivity, LuSquareArrowDown, LuSquareArrowDownLeft, LuSquareArrowDownRight, LuSquareArrowLeft, LuSquareArrowOutDownLeft, LuSquareArrowOutDownRight, LuSquareArrowOutUpLeft, LuSquareArrowOutUpRight, LuSquareArrowRight, LuSquareArrowRightEnter, LuSquareArrowRightExit, LuSquareArrowUp, LuSquareArrowUpLeft, LuSquareArrowUpRight, LuSquareAsterisk, LuSquareBottomDashedScissors, LuSquareCenterlineDashedHorizontal, LuSquareCenterlineDashedVertical, LuSquareChartGantt, LuSquareCheck, LuSquareCheckBig, LuSquareChevronDown, LuSquareChevronLeft, LuSquareChevronRight, LuSquareChevronUp, LuSquareCode, LuSquareDashed, LuSquareDashedBottom, LuSquareDashedBottomCode, LuSquareDashedKanban, LuSquareDashedMousePointer, LuSquareDashedTopSolid, LuSquareDivide, LuSquareDot, LuSquareEqual, LuSquareFunction, LuSquareKanban, LuSquareLibrary, LuSquareM, LuSquareMenu, LuSquareMinus, LuSquareMousePointer, LuSquareParking, LuSquareParkingOff, LuSquarePause, LuSquarePen, LuSquarePercent, LuSquarePi, LuSquarePilcrow, LuSquarePlay, LuSquarePlus, LuSquarePower, LuSquareRadical, LuSquareRoundCorner, LuSquareScissors, LuSquareSigma, LuSquareSlash, LuSquareSplitHorizontal, LuSquareSplitVertical, LuSquareSquare, LuSquareStack, LuSquareStar, LuSquareStop, LuSquareTerminal, LuSquareUser, LuSquareUserRound, LuSquareX, LuSquaresExclude, LuSquaresIntersect, LuSquaresSubtract, LuSquaresUnite, LuSquircle, LuSquircleDashed, LuSquirrel, LuStamp, LuStar, LuStarHalf, LuStarOff, LuStepBack, LuStepForward, LuStethoscope, LuSticker, LuStickyNote, LuStone, LuStore, LuStretchHorizontal, LuStretchVertical, LuStrikethrough, LuSubscript, LuSubstrateAccounts, LuSun, LuSunDim, LuSunMedium, LuSunMoon, LuSunSnow, LuSunrise, LuSunset, LuSuperscript, LuSwatchBook, LuSwissFranc, LuSwitchCamera, LuSword, LuSwords, LuSyringe, LuTable, LuTable2, LuTableCellsMerge, LuTableCellsSplit, LuTableColumnsSplit, LuTableOfContents, LuTableProperties, LuTableRowsSplit, LuTablet, LuTabletSmartphone, LuTablets, LuTag, LuTagManager, LuTags, LuTally1, LuTally2, LuTally3, LuTally4, LuTally5, LuTangent, LuTarget, LuTelescope, LuTent, LuTentTree, LuTerminal, LuTestTube, LuTestTubeDiagonal, LuTestTubes, LuTextAlignCenter, LuTextAlignEnd, LuTextAlignJustify, LuTextAlignStart, LuTextCursor, LuTextCursorInput, LuTextInitial, LuTextQuote, LuTextSearch, LuTextSelect, LuTextWrap, LuTheater, LuThermometer, LuThermometerSnowflake, LuThermometerSun, LuThumbsDown, LuThumbsUp, LuTicket, LuTicketCheck, LuTicketMinus, LuTicketPercent, LuTicketPlus, LuTicketSlash, LuTicketX, LuTickets, LuTicketsPlane, LuTimer, LuTimerOff, LuTimerReset, LuToggleLeft, LuToggleRight, LuToilet, LuToolCase, LuToolbox, LuTornado, LuTorus, LuTouchpad, LuTouchpadOff, LuTowelRack, LuTowerControl, LuToyBrick, LuTractor, LuTrafficCone, LuTrainFront, LuTrainFrontTunnel, LuTrainTrack, LuTramFront, LuTransgender, LuTrash, LuTrash2, LuTreeDeciduous, LuTreePalm, LuTreePine, LuTrees, LuTrello, LuTrendingDown, LuTrendingUp, LuTrendingUpDown, LuTriangle, LuTriangleAlert, LuTriangleDashed, LuTriangleRight, LuTrophy, LuTruck, LuTruckElectric, LuTurkishLira, LuTurntable, LuTurtle, LuTv, LuTvMinimal, LuTvMinimalPlay, LuTwitch, LuTwitter, LuType, LuTypeOutline, LuUmbrella, LuUmbrellaOff, LuUnderline, LuUndo, LuUndo2, LuUndoDot, LuUnfoldHorizontal, LuUnfoldVertical, LuUngroup, LuUniversity, LuUnlink, LuUnlink2, LuUnplug, LuUpload, LuUsb, LuUser, LuUserCheck, LuUserCog, LuUserKey, LuUserLock, LuUserMinus, LuUserPen, LuUserPlus, LuUserRound, LuUserRoundCheck, LuUserRoundCog, LuUserRoundKey, LuUserRoundMinus, LuUserRoundPen, LuUserRoundPlus, LuUserRoundSearch, LuUserRoundX, LuUserSearch, LuUserStar, LuUserX, LuUsers, LuUsersRound, LuUtensils, LuUtensilsCrossed, LuUtilityPole, LuVan, LuVariable, LuVault, LuVectorSquare, LuVegan, LuVenetianMask, LuVenus, LuVenusAndMars, LuVibrate, LuVibrateOff, LuVideo, LuVideoOff, LuVideotape, LuView, LuVoicemail, LuVolleyball, LuVolume, LuVolume1, LuVolume2, LuVolumeOff, LuVolumeX, LuVote, LuWallet, LuWalletCards, LuWalletMinimal, LuWallpaper, LuWand, LuWandSparkles, LuWarehouse, LuWashingMachine, LuWatch, LuWaves, LuWavesArrowDown, LuWavesArrowUp, LuWavesLadder, LuWaypoints, LuWebcam, LuWebhook, LuWebhookOff, LuWeight, LuWeightTilde, LuWheat, LuWheatOff, LuWholeWord, LuWifi, LuWifiCog, LuWifiHigh, LuWifiLow, LuWifiOff, LuWifiPen, LuWifiSync, LuWifiZero, LuWind, LuWindArrowDown, LuWine, LuWineOff, LuWorkflow, LuWorm, LuWrench, LuX, LuXLineTop, LuXTwitter, LuYoutube, LuZap, LuZapOff, LuZodiacAquarius, LuZodiacAries, LuZodiacCancer, LuZodiacCapricorn, LuZodiacGemini, LuZodiacLeo, LuZodiacLibra, LuZodiacOphiuchus, LuZodiacPisces, LuZodiacSagittarius, LuZodiacScorpio, LuZodiacTaurus, LuZodiacVirgo, LuZoomIn, LuZoomOut, RuiAccordion_default as RuiAccordion, RuiAccordions_default as RuiAccordions, RuiAlert_default as RuiAlert, RuiAutoComplete_default as RuiAutoComplete, RuiAvatar_default as RuiAvatar, RuiAvatarGroup_default as RuiAvatarGroup, RuiBadge_default as RuiBadge, RuiBottomSheet_default as RuiBottomSheet, RuiButton_default as RuiButton, RuiButtonGroup_default as RuiButtonGroup, RuiCalendar_default as RuiCalendar, RuiCard_default as RuiCard, RuiCardHeader_default as RuiCardHeader, RuiCheckbox_default as RuiCheckbox, RuiCheckboxGroup_default as RuiCheckboxGroup, RuiChip_default as RuiChip, RuiColorPicker_default as RuiColorPicker, RuiDataTable_default as RuiDataTable, RuiDateTimePicker_default as RuiDateTimePicker, RuiDialog_default as RuiDialog, RuiDivider_default as RuiDivider, RuiFooterStepper_default as RuiFooterStepper, RuiIcon_default as RuiIcon, RuiIcons, RuiLogo_default as RuiLogo, RuiMenu_default as RuiMenu, RuiMenuSelect_default as RuiMenuSelect, RuiNavigationDrawer_default as RuiNavigationDrawer, RuiNotification_default as RuiNotification, RuiProgress_default as RuiProgress, RuiRadio_default as RuiRadio, RuiRadioGroup_default as RuiRadioGroup, RuiRevealableTextField_default as RuiRevealableTextField, RuiSimpleSelect_default as RuiSimpleSelect, RuiSkeletonLoader_default as RuiSkeletonLoader, RuiSlider_default as RuiSlider, RuiStepper_default as RuiStepper, RuiSwitch_default as RuiSwitch, RuiTab_default as RuiTab, RuiTabItem_default as RuiTabItem, RuiTabItems_default as RuiTabItems, RuiTablePagination_default as RuiTablePagination, RuiExpandButton_default as RuiTableRowExpander, RuiTabs_default as RuiTabs, RuiTextArea_default as RuiTextArea, RuiTextField_default as RuiTextField, RuiTimePicker_default as RuiTimePicker, RuiTimezoneSelect_default as RuiTimezoneSelect, RuiTooltip_default as RuiTooltip, StepperState, ThemeMode, cn, contextColors, createBlockie, createRui, createRuiI8nPlugin, isRuiIcon, translationKeys, tv, useBreakpoint, useIcons, useRotkiTheme };
|
|
99
|
+
export { LuAArrowDown, LuAArrowUp, LuALargeSmall, LuAccessibility, LuActivatePremium, LuActivity, LuAirVent, LuAirplay, LuAlarmClock, LuAlarmClockCheck, LuAlarmClockMinus, LuAlarmClockOff, LuAlarmClockPlus, LuAlarmSmoke, LuAlbum, LuAlignCenterHorizontal, LuAlignCenterVertical, LuAlignEndHorizontal, LuAlignEndVertical, LuAlignHorizontalDistributeCenter, LuAlignHorizontalDistributeEnd, LuAlignHorizontalDistributeStart, LuAlignHorizontalJustifyCenter, LuAlignHorizontalJustifyEnd, LuAlignHorizontalJustifyStart, LuAlignHorizontalSpaceAround, LuAlignHorizontalSpaceBetween, LuAlignStartHorizontal, LuAlignStartVertical, LuAlignVerticalDistributeCenter, LuAlignVerticalDistributeEnd, LuAlignVerticalDistributeStart, LuAlignVerticalJustifyCenter, LuAlignVerticalJustifyEnd, LuAlignVerticalJustifyStart, LuAlignVerticalSpaceAround, LuAlignVerticalSpaceBetween, LuAmbulance, LuAmpersand, LuAmpersands, LuAmphora, LuAnchor, LuAngry, LuAnnoyed, LuAntenna, LuAnvil, LuAperture, LuAppWindow, LuAppWindowMac, LuApple, LuArchive, LuArchiveRestore, LuArchiveX, LuArmchair, LuArrowBigDown, LuArrowBigDownDash, LuArrowBigLeft, LuArrowBigLeftDash, LuArrowBigRight, LuArrowBigRightDash, LuArrowBigUp, LuArrowBigUpDash, LuArrowDown, LuArrowDown01, LuArrowDown10, LuArrowDownAZ, LuArrowDownFromLine, LuArrowDownLeft, LuArrowDownNarrowWide, LuArrowDownRight, LuArrowDownToDot, LuArrowDownToLine, LuArrowDownUp, LuArrowDownWideNarrow, LuArrowDownZA, LuArrowLeft, LuArrowLeftFromLine, LuArrowLeftRight, LuArrowLeftToLine, LuArrowRight, LuArrowRightFromLine, LuArrowRightLeft, LuArrowRightToLine, LuArrowUp, LuArrowUp01, LuArrowUp10, LuArrowUpAZ, LuArrowUpDown, LuArrowUpFromDot, LuArrowUpFromLine, LuArrowUpLeft, LuArrowUpNarrowWide, LuArrowUpRight, LuArrowUpToLine, LuArrowUpWideNarrow, LuArrowUpZA, LuArrowsUpFromLine, LuAsterisk, LuAtSign, LuAtom, LuAudioLines, LuAudioWaveform, LuAward, LuAxe, LuAxis3d, LuBaby, LuBackpack, LuBadge, LuBadgeAlert, LuBadgeCent, LuBadgeCheck, LuBadgeDollarSign, LuBadgeEuro, LuBadgeIndianRupee, LuBadgeInfo, LuBadgeJapaneseYen, LuBadgeMinus, LuBadgePercent, LuBadgePlus, LuBadgePoundSterling, LuBadgeQuestionMark, LuBadgeRussianRuble, LuBadgeSwissFranc, LuBadgeTurkishLira, LuBadgeX, LuBaggageClaim, LuBalances, LuBalloon, LuBan, LuBanana, LuBandage, LuBanknote, LuBanknoteArrowDown, LuBanknoteArrowUp, LuBanknoteX, LuBarcode, LuBarrel, LuBaseline, LuBath, LuBattery, LuBatteryCharging, LuBatteryFull, LuBatteryLow, LuBatteryMedium, LuBatteryPlus, LuBatteryWarning, LuBeaker, LuBean, LuBeanOff, LuBed, LuBedDouble, LuBedSingle, LuBeef, LuBeer, LuBeerOff, LuBell, LuBellDot, LuBellElectric, LuBellMinus, LuBellOff, LuBellPlus, LuBellRing, LuBetweenHorizontalEnd, LuBetweenHorizontalStart, LuBetweenVerticalEnd, LuBetweenVerticalStart, LuBicepsFlexed, LuBike, LuBinary, LuBinoculars, LuBiohazard, LuBird, LuBirdhouse, LuBitcoin, LuBitcoinAccounts, LuBlend, LuBlinds, LuBlockchain, LuBlocks, LuBluetooth, LuBluetoothConnected, LuBluetoothOff, LuBluetoothSearching, LuBold, LuBolt, LuBomb, LuBone, LuBook, LuBookA, LuBookAlert, LuBookAudio, LuBookCheck, LuBookCopy, LuBookDashed, LuBookDown, LuBookHeadphones, LuBookHeart, LuBookImage, LuBookKey, LuBookLock, LuBookMarked, LuBookMinus, LuBookOpen, LuBookOpenCheck, LuBookOpenText, LuBookPlus, LuBookSearch, LuBookText, LuBookType, LuBookUp, LuBookUp2, LuBookUser, LuBookX, LuBookmark, LuBookmarkCheck, LuBookmarkMinus, LuBookmarkPlus, LuBookmarkX, LuBoomBox, LuBot, LuBotMessageSquare, LuBotOff, LuBottleWine, LuBowArrow, LuBox, LuBoxes, LuBraces, LuBrackets, LuBrain, LuBrainCircuit, LuBrainCog, LuBrickWall, LuBrickWallFire, LuBrickWallShield, LuBriefcase, LuBriefcaseBusiness, LuBriefcaseConveyorBelt, LuBriefcaseMedical, LuBringToFront, LuBrush, LuBrushCleaning, LuBubbles, LuBug, LuBugOff, LuBugPlay, LuBuilding, LuBuilding2, LuBus, LuBusFront, LuCable, LuCableCar, LuCake, LuCakeSlice, LuCalculator, LuCalendar, LuCalendar1, LuCalendarArrowDown, LuCalendarArrowUp, LuCalendarCheck, LuCalendarCheck2, LuCalendarClock, LuCalendarCog, LuCalendarDays, LuCalendarFold, LuCalendarHeart, LuCalendarMinus, LuCalendarMinus2, LuCalendarOff, LuCalendarPlus, LuCalendarPlus2, LuCalendarRange, LuCalendarSearch, LuCalendarSync, LuCalendarX, LuCalendarX2, LuCalendars, LuCamera, LuCameraOff, LuCandy, LuCandyCane, LuCandyOff, LuCannabis, LuCannabisOff, LuCaptions, LuCaptionsOff, LuCar, LuCarFront, LuCarTaxiFront, LuCaravan, LuCardSim, LuCarrot, LuCaseLower, LuCaseSensitive, LuCaseUpper, LuCassetteTape, LuCast, LuCastle, LuCat, LuCctv, LuChartArea, LuChartBar, LuChartBarBig, LuChartBarDecreasing, LuChartBarIncreasing, LuChartBarStacked, LuChartCandlestick, LuChartColumn, LuChartColumnBig, LuChartColumnDecreasing, LuChartColumnIncreasing, LuChartColumnStacked, LuChartGantt, LuChartLine, LuChartNetwork, LuChartNoAxesColumn, LuChartNoAxesColumnDecreasing, LuChartNoAxesColumnIncreasing, LuChartNoAxesCombined, LuChartNoAxesGantt, LuChartPie, LuChartScatter, LuChartSpline, LuCheck, LuCheckCheck, LuCheckLine, LuCheckboxBlank, LuCheckboxBlankCircle, LuCheckboxBlankCircleFill, LuCheckboxFill, LuCheckboxIndeterminateFill, LuChefHat, LuCherry, LuChessBishop, LuChessKing, LuChessKnight, LuChessPawn, LuChessQueen, LuChessRook, LuChevronDown, LuChevronFirst, LuChevronLast, LuChevronLeft, LuChevronRight, LuChevronUp, LuChevronsDown, LuChevronsDownUp, LuChevronsLeft, LuChevronsLeftRight, LuChevronsLeftRightEllipsis, LuChevronsRight, LuChevronsRightLeft, LuChevronsUp, LuChevronsUpDown, LuChromium, LuChurch, LuCigarette, LuCigaretteOff, LuCircle, LuCircleAlert, LuCircleArrowDown, LuCircleArrowLeft, LuCircleArrowOutDownLeft, LuCircleArrowOutDownRight, LuCircleArrowOutUpLeft, LuCircleArrowOutUpRight, LuCircleArrowRight, LuCircleArrowUp, LuCircleCheck, LuCircleCheckBig, LuCircleChevronDown, LuCircleChevronLeft, LuCircleChevronRight, LuCircleChevronUp, LuCircleDashed, LuCircleDivide, LuCircleDollarSign, LuCircleDot, LuCircleDotDashed, LuCircleEllipsis, LuCircleEqual, LuCircleFadingArrowUp, LuCircleFadingPlus, LuCircleGauge, LuCircleMinus, LuCircleOff, LuCircleParking, LuCircleParkingOff, LuCirclePause, LuCirclePercent, LuCirclePile, LuCirclePlay, LuCirclePlus, LuCirclePoundSterling, LuCirclePower, LuCircleQuestionMark, LuCircleSlash, LuCircleSlash2, LuCircleSmall, LuCircleStar, LuCircleStop, LuCircleUser, LuCircleUserRound, LuCircleX, LuCircuitBoard, LuCitrus, LuClapperboard, LuClipboard, LuClipboardCheck, LuClipboardClock, LuClipboardCopy, LuClipboardList, LuClipboardMinus, LuClipboardPaste, LuClipboardPen, LuClipboardPenLine, LuClipboardPlus, LuClipboardType, LuClipboardX, LuClock, LuClock1, LuClock10, LuClock11, LuClock12, LuClock2, LuClock3, LuClock4, LuClock5, LuClock6, LuClock7, LuClock8, LuClock9, LuClockAlert, LuClockArrowDown, LuClockArrowUp, LuClockCheck, LuClockFading, LuClockPlus, LuClosedCaption, LuCloud, LuCloudAlert, LuCloudBackup, LuCloudCheck, LuCloudCog, LuCloudDownload, LuCloudDownload2Fill, LuCloudDownloadFill, LuCloudDrizzle, LuCloudFill, LuCloudFog, LuCloudHail, LuCloudLightning, LuCloudMoon, LuCloudMoonRain, LuCloudOff, LuCloudOffFill, LuCloudRain, LuCloudRainWind, LuCloudSnow, LuCloudSun, LuCloudSunRain, LuCloudSync, LuCloudSyncFill, LuCloudUpload, LuCloudUpload2Fill, LuCloudUploadFill, LuCloudy, LuClover, LuClub, LuCode, LuCodeXml, LuCodepen, LuCodesandbox, LuCoffee, LuCog, LuCoins, LuCoinsExchange, LuColumns2, LuColumns3, LuColumns3Cog, LuColumns4, LuCombine, LuCommand, LuCompass, LuComponent, LuComputer, LuConciergeBell, LuCone, LuConstruction, LuContact, LuContactRound, LuContainer, LuContrast, LuCookie, LuCookingPot, LuCopy, LuCopyCheck, LuCopyMinus, LuCopyPlus, LuCopySlash, LuCopyX, LuCopyleft, LuCopyright, LuCornerDownLeft, LuCornerDownRight, LuCornerLeftDown, LuCornerLeftUp, LuCornerRightDown, LuCornerRightUp, LuCornerUpLeft, LuCornerUpRight, LuCpu, LuCreativeCommons, LuCreditCard, LuCroissant, LuCrop, LuCross, LuCrosshair, LuCrown, LuCuboid, LuCupSoda, LuCurrency, LuCustomAssets, LuCylinder, LuDam, LuDatabase, LuDatabaseBackup, LuDatabaseSearch, LuDatabaseZap, LuDecimalsArrowLeft, LuDecimalsArrowRight, LuDelete, LuDeposits, LuDessert, LuDiameter, LuDiamond, LuDiamondMinus, LuDiamondPercent, LuDiamondPlus, LuDice1, LuDice2, LuDice3, LuDice4, LuDice5, LuDice6, LuDices, LuDiff, LuDisc, LuDisc2, LuDisc3, LuDiscAlbum, LuDiscord, LuDivide, LuDna, LuDnaOff, LuDock, LuDog, LuDollarSign, LuDonateFill, LuDonut, LuDoorClosed, LuDoorClosedLocked, LuDoorOpen, LuDot, LuDownload, LuDraftingCompass, LuDrama, LuDribbble, LuDrill, LuDrone, LuDroplet, LuDropletFill, LuDropletHalfFill, LuDropletOff, LuDropletTrendingDown, LuDroplets, LuDrum, LuDrumstick, LuDumbbell, LuEar, LuEarOff, LuEarth, LuEarthLock, LuEclipse, LuEgg, LuEggFried, LuEggOff, LuEllipse, LuEllipsis, LuEllipsisVertical, LuEqual, LuEqualApproximately, LuEqualNot, LuEraser, LuEthernetPort, LuEuro, LuEvCharger, LuEvmAccounts, LuExpand, LuExport, LuExternalLink, LuEye, LuEyeClosed, LuEyeOff, LuEyeSemiOff, LuFacebook, LuFactory, LuFan, LuFastForward, LuFeather, LuFence, LuFerrisWheel, LuFigma, LuFile, LuFileArchive, LuFileAxis3d, LuFileBadge, LuFileBox, LuFileBraces, LuFileBracesCorner, LuFileChartColumn, LuFileChartColumnIncreasing, LuFileChartLine, LuFileChartPie, LuFileCheck, LuFileCheckCorner, LuFileClock, LuFileCode, LuFileCodeCorner, LuFileCog, LuFileDiff, LuFileDigit, LuFileDown, LuFileExclamationPoint, LuFileHeadphone, LuFileHeart, LuFileImage, LuFileInput, LuFileKey, LuFileLock, LuFileMinus, LuFileMinusCorner, LuFileMusic, LuFileOutput, LuFilePen, LuFilePenLine, LuFilePlay, LuFilePlus, LuFilePlusCorner, LuFileQuestionMark, LuFileScan, LuFileSearch, LuFileSearchCorner, LuFileSignal, LuFileSliders, LuFileSpreadsheet, LuFileStack, LuFileSymlink, LuFileTerminal, LuFileText, LuFileType, LuFileTypeCorner, LuFileUp, LuFileUser, LuFileVideoCamera, LuFileVolume, LuFileX, LuFileXCorner, LuFiles, LuFilm, LuFingerprintPattern, LuFireExtinguisher, LuFish, LuFishOff, LuFishSymbol, LuFishingHook, LuFishingRod, LuFlag, LuFlagOff, LuFlagTriangleLeft, LuFlagTriangleRight, LuFlame, LuFlameKindling, LuFlashlight, LuFlashlightOff, LuFlaskConical, LuFlaskConicalOff, LuFlaskRound, LuFlipHorizontal2, LuFlipVertical2, LuFlower, LuFlower2, LuFocus, LuFoldHorizontal, LuFoldVertical, LuFolder, LuFolderArchive, LuFolderCheck, LuFolderClock, LuFolderClosed, LuFolderCode, LuFolderCog, LuFolderDot, LuFolderDown, LuFolderGit, LuFolderGit2, LuFolderHeart, LuFolderInput, LuFolderKanban, LuFolderKey, LuFolderLock, LuFolderMinus, LuFolderOpen, LuFolderOpenDot, LuFolderOutput, LuFolderPen, LuFolderPlus, LuFolderRoot, LuFolderSearch, LuFolderSearch2, LuFolderShrink1, LuFolderShrink2, LuFolderSymlink, LuFolderSync, LuFolderTree, LuFolderUp, LuFolderX, LuFolders, LuFootprints, LuForklift, LuForm, LuForward, LuFrame, LuFramer, LuFrown, LuFuel, LuFullscreen, LuFunnel, LuFunnelPlus, LuFunnelX, LuGalleryHorizontal, LuGalleryHorizontalEnd, LuGalleryThumbnails, LuGalleryVertical, LuGalleryVerticalEnd, LuGamepad, LuGamepad2, LuGamepadDirectional, LuGauge, LuGavel, LuGem, LuGeorgianLari, LuGhost, LuGift, LuGitBranch, LuGitBranchMinus, LuGitBranchPlus, LuGitCommitHorizontal, LuGitCommitVertical, LuGitCompare, LuGitCompareArrows, LuGitFork, LuGitGraph, LuGitMerge, LuGitMergeConflict, LuGitPullRequest, LuGitPullRequestArrow, LuGitPullRequestClosed, LuGitPullRequestCreate, LuGitPullRequestCreateArrow, LuGitPullRequestDraft, LuGithub, LuGitlab, LuGlassWater, LuGlasses, LuGlobe, LuGlobeLock, LuGlobeOff, LuGlobeX, LuGoal, LuGpu, LuGraduationCap, LuGrape, LuGrid2x2, LuGrid2x2Check, LuGrid2x2Plus, LuGrid2x2X, LuGrid3x2, LuGrid3x3, LuGrip, LuGripHorizontal, LuGripVertical, LuGroup, LuGuitar, LuHam, LuHamburger, LuHammer, LuHand, LuHandCoins, LuHandFist, LuHandGrab, LuHandHeart, LuHandHelping, LuHandMetal, LuHandPlatter, LuHandbag, LuHandshake, LuHardDrive, LuHardDriveDownload, LuHardDriveUpload, LuHardHat, LuHash, LuHatGlasses, LuHaze, LuHd, LuHdmiPort, LuHeading, LuHeading1, LuHeading2, LuHeading3, LuHeading4, LuHeading5, LuHeading6, LuHeadphoneOff, LuHeadphones, LuHeadset, LuHeart, LuHeartCrack, LuHeartHandshake, LuHeartMinus, LuHeartOff, LuHeartPlus, LuHeartPulse, LuHeater, LuHelicopter, LuHexagon, LuHighlighter, LuHistoricPrices, LuHistory, LuHistoryEventsFill, LuHop, LuHopOff, LuHospital, LuHotel, LuHourglass, LuHouse, LuHouseHeart, LuHousePlug, LuHousePlus, LuHouseWifi, LuIceCreamBowl, LuIceCreamCone, LuIdCard, LuIdCardLanyard, LuImage, LuImageDown, LuImageMinus, LuImageOff, LuImagePlay, LuImagePlus, LuImageUp, LuImageUpscale, LuImages, LuImport, LuInbox, LuIndianRupee, LuInfinity, LuInfo, LuInspectionPanel, LuInstagram, LuItalic, LuIterationCcw, LuIterationCw, LuJapaneseYen, LuJoystick, LuKanban, LuKayak, LuKey, LuKeyRound, LuKeySquare, LuKeyboard, LuKeyboardMusic, LuKeyboardOff, LuLamp, LuLampCeiling, LuLampDesk, LuLampFloor, LuLampWallDown, LuLampWallUp, LuLandPlot, LuLandmark, LuLanguages, LuLaptop, LuLaptopMinimal, LuLaptopMinimalCheck, LuLasso, LuLassoSelect, LuLatestPrices, LuLaugh, LuLayers, LuLayers2, LuLayersIn, LuLayersOut, LuLayersPlus, LuLayoutDashboard, LuLayoutGrid, LuLayoutList, LuLayoutPanelLeft, LuLayoutPanelTop, LuLayoutTemplate, LuLeaf, LuLeafyGreen, LuLectern, LuLensConcave, LuLensConvex, LuLiabilities, LuLibrary, LuLibraryBig, LuLifeBuoy, LuLigature, LuLightbulb, LuLightbulbOff, LuLineDotRightHorizontal, LuLineSquiggle, LuLink, LuLink2, LuLink2Off, LuLinkedin, LuList, LuListCheck, LuListChecks, LuListChevronsDownUp, LuListChevronsUpDown, LuListCollapse, LuListEnd, LuListFilter, LuListFilterPlus, LuListIndentDecrease, LuListIndentIncrease, LuListMinus, LuListMusic, LuListOrdered, LuListPlus, LuListRestart, LuListStart, LuListTodo, LuListTree, LuListVideo, LuListX, LuLoader, LuLoaderCircle, LuLoaderPinwheel, LuLocate, LuLocateFixed, LuLocateOff, LuLock, LuLockKeyhole, LuLockKeyholeOpen, LuLockOpen, LuLogIn, LuLogOut, LuLogs, LuLollipop, LuLuggage, LuMagnet, LuMail, LuMailCheck, LuMailMinus, LuMailOpen, LuMailPlus, LuMailQuestionMark, LuMailSearch, LuMailWarning, LuMailX, LuMailbox, LuMails, LuManageAssets, LuManagePrices, LuManualBalances, LuMap, LuMapMinus, LuMapPin, LuMapPinCheck, LuMapPinCheckInside, LuMapPinHouse, LuMapPinMinus, LuMapPinMinusInside, LuMapPinOff, LuMapPinPen, LuMapPinPlus, LuMapPinPlusInside, LuMapPinX, LuMapPinXInside, LuMapPinned, LuMapPlus, LuMars, LuMarsStroke, LuMartini, LuMaximize, LuMaximize2, LuMedal, LuMegaphone, LuMegaphoneOff, LuMeh, LuMemoryStick, LuMenu, LuMerge, LuMessageCircle, LuMessageCircleCheck, LuMessageCircleCode, LuMessageCircleDashed, LuMessageCircleHeart, LuMessageCircleMore, LuMessageCircleOff, LuMessageCirclePlus, LuMessageCircleQuestionMark, LuMessageCircleReply, LuMessageCircleWarning, LuMessageCircleX, LuMessageSquare, LuMessageSquareCheck, LuMessageSquareCode, LuMessageSquareDashed, LuMessageSquareDiff, LuMessageSquareDot, LuMessageSquareHeart, LuMessageSquareLock, LuMessageSquareMore, LuMessageSquareOff, LuMessageSquarePlus, LuMessageSquareQuote, LuMessageSquareReply, LuMessageSquareShare, LuMessageSquareText, LuMessageSquareWarning, LuMessageSquareX, LuMessagesSquare, LuMetronome, LuMic, LuMicOff, LuMicVocal, LuMicrochip, LuMicroscope, LuMicrowave, LuMilestone, LuMilk, LuMilkOff, LuMinimize, LuMinimize2, LuMinus, LuMirrorRectangular, LuMirrorRound, LuMonitor, LuMonitorCheck, LuMonitorCloud, LuMonitorCog, LuMonitorDot, LuMonitorDown, LuMonitorOff, LuMonitorPause, LuMonitorPlay, LuMonitorSmartphone, LuMonitorSpeaker, LuMonitorStop, LuMonitorUp, LuMonitorX, LuMoon, LuMoonStar, LuMoreAssets, LuMotorbike, LuMountain, LuMountainSnow, LuMouse, LuMouseLeft, LuMouseOff, LuMousePointer, LuMousePointer2, LuMousePointer2Off, LuMousePointerBan, LuMousePointerClick, LuMouseRight, LuMove, LuMove3d, LuMoveDiagonal, LuMoveDiagonal2, LuMoveDown, LuMoveDownLeft, LuMoveDownRight, LuMoveHorizontal, LuMoveLeft, LuMoveRight, LuMoveUp, LuMoveUpLeft, LuMoveUpRight, LuMoveVertical, LuMusic, LuMusic2, LuMusic3, LuMusic4, LuNavigation, LuNavigation2, LuNavigation2Off, LuNavigationOff, LuNetwork, LuNewspaper, LuNfc, LuNonBinary, LuNotebook, LuNotebookPen, LuNotebookTabs, LuNotebookText, LuNotepadText, LuNotepadTextDashed, LuNut, LuNutOff, LuOctagon, LuOctagonAlert, LuOctagonMinus, LuOctagonPause, LuOctagonX, LuOmega, LuOnchain, LuOption, LuOrbit, LuOrigami, LuOsApple, LuOsWindows, LuPackage, LuPackage2, LuPackageCheck, LuPackageMinus, LuPackageOpen, LuPackagePlus, LuPackageSearch, LuPackageX, LuPaintBucket, LuPaintRoller, LuPaintbrush, LuPaintbrushVertical, LuPalette, LuPanda, LuPanelBottom, LuPanelBottomClose, LuPanelBottomDashed, LuPanelBottomOpen, LuPanelLeft, LuPanelLeftClose, LuPanelLeftDashed, LuPanelLeftOpen, LuPanelLeftRightDashed, LuPanelRight, LuPanelRightClose, LuPanelRightDashed, LuPanelRightOpen, LuPanelTop, LuPanelTopBottomDashed, LuPanelTopClose, LuPanelTopDashed, LuPanelTopOpen, LuPanelsLeftBottom, LuPanelsRightBottom, LuPanelsTopLeft, LuPaperclip, LuParentheses, LuParkingMeter, LuPartyPopper, LuPause, LuPawPrint, LuPaypal, LuPcCase, LuPen, LuPenLine, LuPenOff, LuPenTool, LuPencil, LuPencilLine, LuPencilOff, LuPencilRuler, LuPentagon, LuPercent, LuPersonStanding, LuPhilippinePeso, LuPhone, LuPhoneCall, LuPhoneForwarded, LuPhoneIncoming, LuPhoneMissed, LuPhoneOff, LuPhoneOutgoing, LuPi, LuPiano, LuPickaxe, LuPictureInPicture, LuPictureInPicture2, LuPiggyBank, LuPilcrow, LuPilcrowLeft, LuPilcrowRight, LuPill, LuPillBottle, LuPin, LuPinOff, LuPipette, LuPizza, LuPlane, LuPlaneLanding, LuPlaneTakeoff, LuPlay, LuPlug, LuPlug2, LuPlugZap, LuPlus, LuPocket, LuPocketKnife, LuPodcast, LuPointer, LuPointerOff, LuPopcorn, LuPopsicle, LuPoundSterling, LuPower, LuPowerOff, LuPresentation, LuPrinter, LuPrinterCheck, LuPrinterX, LuProjector, LuProportions, LuPuzzle, LuPyramid, LuQrCode, LuQuote, LuRabbit, LuRadar, LuRadiation, LuRadical, LuRadio, LuRadioButtonFill, LuRadioReceiver, LuRadioTower, LuRadius, LuRailSymbol, LuRainbow, LuRat, LuRatio, LuReceipt, LuReceiptCent, LuReceiptEuro, LuReceiptIndianRupee, LuReceiptJapaneseYen, LuReceiptPoundSterling, LuReceiptRussianRuble, LuReceiptSwissFranc, LuReceiptText, LuReceiptTurkishLira, LuReceiveDonationFill, LuRectangleCircle, LuRectangleEllipsis, LuRectangleGoggles, LuRectangleHorizontal, LuRectangleVertical, LuRecycle, LuReddit, LuRedo, LuRedo2, LuRedoDot, LuRefreshCcw, LuRefreshCcwDot, LuRefreshCw, LuRefreshCwOff, LuRefrigerator, LuRefund, LuRegex, LuRemoveFormatting, LuRepeat, LuRepeat1, LuRepeat2, LuReplace, LuReplaceAll, LuReply, LuReplyAll, LuRewind, LuRibbon, LuRocket, LuRockingChair, LuRollerCoaster, LuRose, LuRotate3d, LuRotateCcw, LuRotateCcwKey, LuRotateCcwSquare, LuRotateCw, LuRotateCwSquare, LuRoute, LuRouteOff, LuRouter, LuRows2, LuRows3, LuRows4, LuRss, LuRuler, LuRulerDimensionLine, LuRussianRuble, LuSailboat, LuSalad, LuSandwich, LuSatellite, LuSatelliteDish, LuSaudiRiyal, LuSave, LuSaveAll, LuSaveOff, LuScale, LuScale3d, LuScaling, LuScan, LuScanBarcode, LuScanEye, LuScanFace, LuScanHeart, LuScanLine, LuScanQrCode, LuScanSearch, LuScanText, LuSchool, LuScissors, LuScissorsLineDashed, LuScooter, LuScreenShare, LuScreenShareOff, LuScroll, LuScrollText, LuSearch, LuSearchAlert, LuSearchCheck, LuSearchCode, LuSearchSlash, LuSearchX, LuSection, LuSend, LuSendHorizontal, LuSendToBack, LuSeparatorHorizontal, LuSeparatorVertical, LuServer, LuServerCog, LuServerCrash, LuServerOff, LuSettings, LuSettings2, LuShapes, LuShare, LuShare2, LuSheet, LuShell, LuShelvingUnit, LuShield, LuShieldAlert, LuShieldBan, LuShieldCheck, LuShieldEllipsis, LuShieldHalf, LuShieldMinus, LuShieldOff, LuShieldPlus, LuShieldQuestionMark, LuShieldUser, LuShieldX, LuShip, LuShipWheel, LuShirt, LuShoppingBag, LuShoppingBasket, LuShoppingCart, LuShovel, LuShowerHead, LuShredder, LuShrimp, LuShrink, LuShrub, LuShuffle, LuSigma, LuSignal, LuSignalHigh, LuSignalLow, LuSignalMedium, LuSignalZero, LuSignature, LuSignpost, LuSignpostBig, LuSiren, LuSkipBack, LuSkipForward, LuSkull, LuSlack, LuSlash, LuSlashDivider, LuSlice, LuSlidersHorizontal, LuSlidersVertical, LuSmartphone, LuSmartphoneCharging, LuSmartphoneNfc, LuSmile, LuSmilePlus, LuSnail, LuSnowflake, LuSoapDispenserDroplet, LuSofa, LuSolanaAccountsFill, LuSolarPanel, LuSoup, LuSpace, LuSpade, LuSparkle, LuSparkles, LuSpeaker, LuSpeech, LuSpellCheck, LuSpellCheck2, LuSpline, LuSplinePointer, LuSplit, LuSpool, LuSpotlight, LuSprayCan, LuSprout, LuSquare, LuSquareActivity, LuSquareArrowDown, LuSquareArrowDownLeft, LuSquareArrowDownRight, LuSquareArrowLeft, LuSquareArrowOutDownLeft, LuSquareArrowOutDownRight, LuSquareArrowOutUpLeft, LuSquareArrowOutUpRight, LuSquareArrowRight, LuSquareArrowRightEnter, LuSquareArrowRightExit, LuSquareArrowUp, LuSquareArrowUpLeft, LuSquareArrowUpRight, LuSquareAsterisk, LuSquareBottomDashedScissors, LuSquareCenterlineDashedHorizontal, LuSquareCenterlineDashedVertical, LuSquareChartGantt, LuSquareCheck, LuSquareCheckBig, LuSquareChevronDown, LuSquareChevronLeft, LuSquareChevronRight, LuSquareChevronUp, LuSquareCode, LuSquareDashed, LuSquareDashedBottom, LuSquareDashedBottomCode, LuSquareDashedKanban, LuSquareDashedMousePointer, LuSquareDashedTopSolid, LuSquareDivide, LuSquareDot, LuSquareEqual, LuSquareFunction, LuSquareKanban, LuSquareLibrary, LuSquareM, LuSquareMenu, LuSquareMinus, LuSquareMousePointer, LuSquareParking, LuSquareParkingOff, LuSquarePause, LuSquarePen, LuSquarePercent, LuSquarePi, LuSquarePilcrow, LuSquarePlay, LuSquarePlus, LuSquarePower, LuSquareRadical, LuSquareRoundCorner, LuSquareScissors, LuSquareSigma, LuSquareSlash, LuSquareSplitHorizontal, LuSquareSplitVertical, LuSquareSquare, LuSquareStack, LuSquareStar, LuSquareStop, LuSquareTerminal, LuSquareUser, LuSquareUserRound, LuSquareX, LuSquaresExclude, LuSquaresIntersect, LuSquaresSubtract, LuSquaresUnite, LuSquircle, LuSquircleDashed, LuSquirrel, LuStamp, LuStar, LuStarHalf, LuStarOff, LuStepBack, LuStepForward, LuStethoscope, LuSticker, LuStickyNote, LuStone, LuStore, LuStretchHorizontal, LuStretchVertical, LuStrikethrough, LuSubscript, LuSubstrateAccounts, LuSun, LuSunDim, LuSunMedium, LuSunMoon, LuSunSnow, LuSunrise, LuSunset, LuSuperscript, LuSwatchBook, LuSwissFranc, LuSwitchCamera, LuSword, LuSwords, LuSyringe, LuTable, LuTable2, LuTableCellsMerge, LuTableCellsSplit, LuTableColumnsSplit, LuTableOfContents, LuTableProperties, LuTableRowsSplit, LuTablet, LuTabletSmartphone, LuTablets, LuTag, LuTagManager, LuTags, LuTally1, LuTally2, LuTally3, LuTally4, LuTally5, LuTangent, LuTarget, LuTelescope, LuTent, LuTentTree, LuTerminal, LuTestTube, LuTestTubeDiagonal, LuTestTubes, LuTextAlignCenter, LuTextAlignEnd, LuTextAlignJustify, LuTextAlignStart, LuTextCursor, LuTextCursorInput, LuTextInitial, LuTextQuote, LuTextSearch, LuTextSelect, LuTextWrap, LuTheater, LuThermometer, LuThermometerSnowflake, LuThermometerSun, LuThumbsDown, LuThumbsUp, LuTicket, LuTicketCheck, LuTicketMinus, LuTicketPercent, LuTicketPlus, LuTicketSlash, LuTicketX, LuTickets, LuTicketsPlane, LuTimer, LuTimerOff, LuTimerReset, LuToggleLeft, LuToggleRight, LuToilet, LuToolCase, LuToolbox, LuTornado, LuTorus, LuTouchpad, LuTouchpadOff, LuTowelRack, LuTowerControl, LuToyBrick, LuTractor, LuTrafficCone, LuTrainFront, LuTrainFrontTunnel, LuTrainTrack, LuTramFront, LuTransgender, LuTrash, LuTrash2, LuTreeDeciduous, LuTreePalm, LuTreePine, LuTrees, LuTrello, LuTrendingDown, LuTrendingUp, LuTrendingUpDown, LuTriangle, LuTriangleAlert, LuTriangleDashed, LuTriangleRight, LuTrophy, LuTruck, LuTruckElectric, LuTurkishLira, LuTurntable, LuTurtle, LuTv, LuTvMinimal, LuTvMinimalPlay, LuTwitch, LuTwitter, LuType, LuTypeOutline, LuUmbrella, LuUmbrellaOff, LuUnderline, LuUndo, LuUndo2, LuUndoDot, LuUnfoldHorizontal, LuUnfoldVertical, LuUngroup, LuUniversity, LuUnlink, LuUnlink2, LuUnplug, LuUpload, LuUsb, LuUser, LuUserCheck, LuUserCog, LuUserKey, LuUserLock, LuUserMinus, LuUserPen, LuUserPlus, LuUserRound, LuUserRoundCheck, LuUserRoundCog, LuUserRoundKey, LuUserRoundMinus, LuUserRoundPen, LuUserRoundPlus, LuUserRoundSearch, LuUserRoundX, LuUserSearch, LuUserStar, LuUserX, LuUsers, LuUsersRound, LuUtensils, LuUtensilsCrossed, LuUtilityPole, LuVan, LuVariable, LuVault, LuVectorSquare, LuVegan, LuVenetianMask, LuVenus, LuVenusAndMars, LuVibrate, LuVibrateOff, LuVideo, LuVideoOff, LuVideotape, LuView, LuVoicemail, LuVolleyball, LuVolume, LuVolume1, LuVolume2, LuVolumeOff, LuVolumeX, LuVote, LuWallet, LuWalletCards, LuWalletMinimal, LuWallpaper, LuWand, LuWandSparkles, LuWarehouse, LuWashingMachine, LuWatch, LuWaves, LuWavesArrowDown, LuWavesArrowUp, LuWavesLadder, LuWaypoints, LuWebcam, LuWebhook, LuWebhookOff, LuWeight, LuWeightTilde, LuWheat, LuWheatOff, LuWholeWord, LuWifi, LuWifiCog, LuWifiHigh, LuWifiLow, LuWifiOff, LuWifiPen, LuWifiSync, LuWifiZero, LuWind, LuWindArrowDown, LuWine, LuWineOff, LuWorkflow, LuWorm, LuWrench, LuX, LuXLineTop, LuXTwitter, LuYoutube, LuZap, LuZapOff, LuZodiacAquarius, LuZodiacAries, LuZodiacCancer, LuZodiacCapricorn, LuZodiacGemini, LuZodiacLeo, LuZodiacLibra, LuZodiacOphiuchus, LuZodiacPisces, LuZodiacSagittarius, LuZodiacScorpio, LuZodiacTaurus, LuZodiacVirgo, LuZoomIn, LuZoomOut, RuiAccordion_default as RuiAccordion, RuiAccordions_default as RuiAccordions, RuiAlert_default as RuiAlert, RuiAutoComplete_default as RuiAutoComplete, RuiAvatar_default as RuiAvatar, RuiAvatarGroup_default as RuiAvatarGroup, RuiBadge_default as RuiBadge, RuiBottomSheet_default as RuiBottomSheet, RuiButton_default as RuiButton, RuiButtonGroup_default as RuiButtonGroup, RuiCalendar_default as RuiCalendar, RuiCard_default as RuiCard, RuiCardHeader_default as RuiCardHeader, RuiCheckbox_default as RuiCheckbox, RuiCheckboxGroup_default as RuiCheckboxGroup, RuiChip_default as RuiChip, RuiColorPicker_default as RuiColorPicker, RuiDataTable_default as RuiDataTable, RuiDateTimePicker_default as RuiDateTimePicker, RuiDialog_default as RuiDialog, RuiDivider_default as RuiDivider, RuiFileUpload_default as RuiFileUpload, RuiFooterStepper_default as RuiFooterStepper, RuiIcon_default as RuiIcon, RuiIcons, RuiLogo_default as RuiLogo, RuiMenu_default as RuiMenu, RuiMenuSelect_default as RuiMenuSelect, RuiNavigationDrawer_default as RuiNavigationDrawer, RuiNotification_default as RuiNotification, RuiProgress_default as RuiProgress, RuiRadio_default as RuiRadio, RuiRadioGroup_default as RuiRadioGroup, RuiRevealableTextField_default as RuiRevealableTextField, RuiSimpleSelect_default as RuiSimpleSelect, RuiSkeletonLoader_default as RuiSkeletonLoader, RuiSlider_default as RuiSlider, RuiStepper_default as RuiStepper, RuiSwitch_default as RuiSwitch, RuiTab_default as RuiTab, RuiTabItem_default as RuiTabItem, RuiTabItems_default as RuiTabItems, RuiTablePagination_default as RuiTablePagination, RuiExpandButton_default as RuiTableRowExpander, RuiTabs_default as RuiTabs, RuiTextArea_default as RuiTextArea, RuiTextField_default as RuiTextField, RuiTimePicker_default as RuiTimePicker, RuiTimezoneSelect_default as RuiTimezoneSelect, RuiTooltip_default as RuiTooltip, StepperState, ThemeMode, cn, contextColors, createBlockie, createRui, createRuiI8nPlugin, isRuiIcon, translationKeys, tv, useBreakpoint, useIcons, useRotkiTheme };
|
|
99
100
|
|
|
100
101
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { App } from 'vue';\nimport type { InitThemeOptions } from '@/types/theme';\nimport {\n createTableDefaults,\n type TableOptions,\n TableSymbol,\n} from '@/composables/defaults/table';\nimport { createIconDefaults, IconsSymbol } from '@/composables/icons';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { RUI_I18N_INJECTION_KEY } from '@/composables/use-rui-i18n';\nimport { StepperState } from '@/types/stepper';\nimport '@/style.css';\n\nexport * from '@/components';\n\nexport * from '@/composables';\n\nexport { contextColors, type ContextColorsType } from '@/consts/colors';\n\nexport { translationKeys } from '@/i18n/keys';\n\nexport * from '@/icons';\n\nexport { StepperState };\n\nexport type { VueClassValue } from '@/types/class-value';\n\nexport {\n type InitThemeOptions,\n type ThemeConfig,\n type ThemeContent,\n type ThemeData,\n ThemeMode,\n} from '@/types/theme';\n\nexport { createBlockie } from '@/utils/blockie';\n\nexport { cn, tv } from '@/utils/tv';\n\nexport type { VariantProps } from 'tailwind-variants';\n\nexport interface RuiOptions {\n theme?: InitThemeOptions;\n defaults?: {\n table?: Partial<TableOptions>;\n };\n}\n\nexport function createRui(options: RuiOptions = {}) {\n const { theme, defaults: defaultOptions } = options;\n\n const defaults = Object.freeze({\n icons: createIconDefaults({\n registeredIcons: theme?.icons,\n }),\n table: createTableDefaults(defaultOptions?.table),\n });\n\n const install = (app: App) => {\n useRotkiTheme().init({ ...theme });\n\n app.provide(TableSymbol, defaults.table);\n app.provide(IconsSymbol, defaults.icons);\n };\n\n return {\n defaults,\n install,\n };\n}\n\nexport function createRuiI8nPlugin(i18nInstance: any) {\n if (!i18nInstance || typeof i18nInstance !== 'object') {\n throw new Error('i18nInstance must be an object');\n }\n\n if (!i18nInstance.global || typeof i18nInstance.global !== 'object') {\n throw new Error('i18nInstance must have a global property');\n }\n\n if (!i18nInstance.global.t || typeof i18nInstance.global.t !== 'function') {\n throw new Error('i18nInstance.global.t must be a function');\n }\n\n if (!i18nInstance.global.te || typeof i18nInstance.global.te !== 'function') {\n throw new Error('i18nInstance.global.te must be a function');\n }\n\n return {\n install: (app: App) => {\n app.provide(RUI_I18N_INJECTION_KEY, {\n t: i18nInstance.global.t.bind(i18nInstance.global),\n te: i18nInstance.global.te.bind(i18nInstance.global),\n });\n },\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { App } from 'vue';\nimport type { InitThemeOptions } from '@/types/theme';\nimport {\n createTableDefaults,\n type TableOptions,\n TableSymbol,\n} from '@/composables/defaults/table';\nimport { createIconDefaults, IconsSymbol } from '@/composables/icons';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { RUI_I18N_INJECTION_KEY } from '@/composables/use-rui-i18n';\nimport { StepperState } from '@/types/stepper';\nimport '@/style.css';\n\nexport * from '@/components';\n\nexport * from '@/composables';\n\nexport { contextColors, type ContextColorsType } from '@/consts/colors';\n\nexport { translationKeys } from '@/i18n/keys';\n\nexport * from '@/icons';\n\nexport { StepperState };\n\nexport type { VueClassValue } from '@/types/class-value';\n\nexport {\n type InitThemeOptions,\n type ThemeConfig,\n type ThemeContent,\n type ThemeData,\n ThemeMode,\n} from '@/types/theme';\n\nexport { createBlockie } from '@/utils/blockie';\n\nexport { cn, tv } from '@/utils/tv';\n\nexport type { VariantProps } from 'tailwind-variants';\n\nexport interface RuiOptions {\n theme?: InitThemeOptions;\n defaults?: {\n table?: Partial<TableOptions>;\n };\n}\n\nexport function createRui(options: RuiOptions = {}) {\n const { theme, defaults: defaultOptions } = options;\n\n const defaults = Object.freeze({\n icons: createIconDefaults({\n registeredIcons: theme?.icons,\n }),\n table: createTableDefaults(defaultOptions?.table),\n });\n\n const install = (app: App) => {\n useRotkiTheme().init({ ...theme });\n\n app.provide(TableSymbol, defaults.table);\n app.provide(IconsSymbol, defaults.icons);\n };\n\n return {\n defaults,\n install,\n };\n}\n\nexport function createRuiI8nPlugin(i18nInstance: any) {\n if (!i18nInstance || typeof i18nInstance !== 'object') {\n throw new Error('i18nInstance must be an object');\n }\n\n if (!i18nInstance.global || typeof i18nInstance.global !== 'object') {\n throw new Error('i18nInstance must have a global property');\n }\n\n if (!i18nInstance.global.t || typeof i18nInstance.global.t !== 'function') {\n throw new Error('i18nInstance.global.t must be a function');\n }\n\n if (!i18nInstance.global.te || typeof i18nInstance.global.te !== 'function') {\n throw new Error('i18nInstance.global.te must be a function');\n }\n\n return {\n install: (app: App) => {\n app.provide(RUI_I18N_INJECTION_KEY, {\n t: i18nInstance.global.t.bind(i18nInstance.global),\n te: i18nInstance.global.te.bind(i18nInstance.global),\n });\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,SAAgB,UAAU,UAAsB,EAAE,EAAE;CAClD,MAAM,EAAE,OAAO,UAAU,mBAAmB;CAE5C,MAAM,WAAW,OAAO,OAAO;EAC7B,OAAO,mBAAmB,EACxB,iBAAiB,OAAO,OACzB,CAAC;EACF,OAAO,oBAAoB,gBAAgB,MAAM;EAClD,CAAC;CAEF,MAAM,WAAW,QAAa;AAC5B,iBAAe,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC;AAElC,MAAI,QAAQ,aAAa,SAAS,MAAM;AACxC,MAAI,QAAQ,aAAa,SAAS,MAAM;;AAG1C,QAAO;EACL;EACA;EACD;;AAGH,SAAgB,mBAAmB,cAAmB;AACpD,KAAI,CAAC,gBAAgB,OAAO,iBAAiB,SAC3C,OAAM,IAAI,MAAM,iCAAiC;AAGnD,KAAI,CAAC,aAAa,UAAU,OAAO,aAAa,WAAW,SACzD,OAAM,IAAI,MAAM,2CAA2C;AAG7D,KAAI,CAAC,aAAa,OAAO,KAAK,OAAO,aAAa,OAAO,MAAM,WAC7D,OAAM,IAAI,MAAM,2CAA2C;AAG7D,KAAI,CAAC,aAAa,OAAO,MAAM,OAAO,aAAa,OAAO,OAAO,WAC/D,OAAM,IAAI,MAAM,4CAA4C;AAG9D,QAAO,EACL,UAAU,QAAa;AACrB,MAAI,QAAQ,wBAAwB;GAClC,GAAG,aAAa,OAAO,EAAE,KAAK,aAAa,OAAO;GAClD,IAAI,aAAa,OAAO,GAAG,KAAK,aAAa,OAAO;GACrD,CAAC;IAEL"}
|