@rotki/ui-library 3.0.0 → 3.1.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/components/accordions/accordion/RuiAccordion.js.map +1 -1
- package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +13 -2
- package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
- package/dist/components/buttons/button/RuiButton.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.vue.d.ts +7 -1
- package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/buttons/button/button-props.d.ts +3 -0
- package/dist/components/buttons/button/button-props.js +2 -1
- package/dist/components/buttons/button/button-props.js.map +1 -1
- package/dist/components/buttons/button/button-styles.d.ts +75 -0
- package/dist/components/buttons/button/button-styles.js +135 -4
- package/dist/components/buttons/button/button-styles.js.map +1 -1
- package/dist/components/cards/RuiCard.js.map +1 -1
- package/dist/components/cards/RuiCard.vue.d.ts +6 -0
- package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chips/RuiChip.js.map +1 -1
- package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +14 -0
- package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chips/chip-props.d.ts +2 -0
- package/dist/components/chips/chip-props.js +3 -0
- package/dist/components/chips/chip-props.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/color-picker/RuiColorInput.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.d.ts +4 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/RuiTimezoneSelect.js.map +1 -1
- package/dist/components/date-time-picker/RuiTimezoneSelect.vue.d.ts +4 -0
- package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/date-time-picker/RuiTimezoneSelect.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_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/auto-complete/auto-complete-props.d.ts +4 -0
- package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -1
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +4 -1
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/check-control-styles.d.ts +27 -0
- package/dist/components/forms/check-control-styles.js +26 -1
- package/dist/components/forms/check-control-styles.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +6 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +14 -4
- package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue.d.ts +4 -0
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/field-defaults/RuiFieldDefaults.js.map +1 -1
- package/dist/components/forms/field-defaults/RuiFieldDefaults.vue.d.ts +3 -0
- package/dist/components/forms/field-defaults/RuiFieldDefaults.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/components/forms/field-defaults/RuiFieldDefaults.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
- package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +4 -1
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +10 -3
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +6 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +14 -3
- package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +4 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +4 -0
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +4 -0
- package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +6 -0
- package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +25 -5
- package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +4 -0
- package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +6 -4
- package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-area/text-area-styles.d.ts +0 -1
- package/dist/components/forms/text-area/text-area-styles.js +0 -1
- package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +6 -2
- package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +6 -4
- package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-field/text-field-styles.d.ts +0 -1
- package/dist/components/forms/text-field/text-field-styles.js +0 -1
- package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +14 -0
- package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +41 -11
- package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonBase.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +3 -0
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiDataTable.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +4 -0
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTableHead.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableAppendRow.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableAppendRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table-styles.d.ts +6 -0
- package/dist/components/tables/data-table-styles.js +11 -3
- package/dist/components/tables/data-table-styles.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/clip-while-resizing.d.ts +15 -0
- package/dist/composables/clip-while-resizing.js +46 -0
- package/dist/composables/clip-while-resizing.js.map +1 -0
- package/dist/composables/defaults/field.d.ts +19 -3
- package/dist/composables/defaults/field.js +32 -6
- package/dist/composables/defaults/field.js.map +1 -1
- package/dist/composables/sticky-blocker.d.ts +20 -0
- package/dist/composables/sticky-blocker.js +62 -0
- package/dist/composables/sticky-blocker.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js.map +1 -1
- package/dist/style.css +275 -0
- package/dist/utils/development.d.ts +6 -0
- package/dist/utils/development.js +17 -0
- package/dist/utils/development.js.map +1 -0
- package/dist/utils/form-text-detail.d.ts +15 -0
- package/dist/utils/form-text-detail.js +11 -1
- package/dist/utils/form-text-detail.js.map +1 -1
- package/dist/web-types.json +232 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiAccordion.js","names":["_sfc_main"],"sources":["../../../../src/components/accordions/accordion/RuiAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { VueClassValue } from '@/types/class-value';\nimport Icon from '@/components/icons/RuiIcon.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiAccordionClassNames {\n root?: VueClassValue;\n header?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface AccordionProps {\n open?: boolean;\n eager?: boolean;\n headerGrow?: boolean;\n classNames?: RuiAccordionClassNames;\n}\n\ndefineOptions({\n name: 'RuiAccordion',\n inheritAttrs: false,\n});\n\nconst {\n open = false,\n eager = false,\n headerGrow = false,\n classNames,\n} = defineProps<AccordionProps>();\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\ndefineSlots<{\n header?: (props: { open: boolean }) => any;\n default?: () => any;\n}>();\n\nconst inner = useTemplateRef<HTMLDivElement>('inner');\n\nconst triggerId = useId();\nconst contentId = useId();\nconst { height: innerHeight } = useElementSize(inner);\n\nconst contentHeight = computed<string>(() => (open ? `${get(innerHeight)}px` : '0px'));\n\nfunction toggle(): void {\n emit('click');\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n}\n\nconst rootStyle = tv({ base: 'flex flex-col items-start' });\n</script>\n\n<template>\n <div\n :class=\"rootStyle({ class: cn(classNames?.root ?? $attrs.class) })\"\n :data-state=\"open ? 'open' : 'closed'\"\n data-accordion\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <!-- rounded only while focused: a permanent radius bent any border an app draws on the header -->\n <div\n v-if=\"$slots.header\"\n :id=\"triggerId\"\n class=\"group flex gap-2 items-center cursor-pointer outline-hidden focus-visible:focus-ring focus-visible:rounded-rui-control\"\n :class=\"[classNames?.header, { 'w-full': headerGrow }]\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"open\"\n :aria-controls=\"contentId\"\n data-accordion-trigger\n @click=\"toggle()\"\n @keydown=\"onKeydown($event)\"\n >\n <div :class=\"{ grow: headerGrow }\">\n <slot\n name=\"header\"\n :open=\"open\"\n />\n </div>\n <Icon\n class=\"shrink-0 text-rui-text-secondary transition-[rotate,color] duration-200 ease-out group-hover:text-rui-text motion-reduce:transition-none\"\n :class=\"{ '-rotate-180': open }\"\n name=\"lu-chevron-down\"\n :size=\"16\"\n />\n </div>\n <div\n v-if=\"open || eager\"\n :id=\"contentId\"\n class=\"grow transition-[height] duration-200 ease-out
|
|
1
|
+
{"version":3,"file":"RuiAccordion.js","names":["_sfc_main"],"sources":["../../../../src/components/accordions/accordion/RuiAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { VueClassValue } from '@/types/class-value';\nimport Icon from '@/components/icons/RuiIcon.vue';\nimport { useClipWhileResizing } from '@/composables/clip-while-resizing';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiAccordionClassNames {\n root?: VueClassValue;\n header?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface AccordionProps {\n open?: boolean;\n eager?: boolean;\n headerGrow?: boolean;\n classNames?: RuiAccordionClassNames;\n}\n\ndefineOptions({\n name: 'RuiAccordion',\n inheritAttrs: false,\n});\n\nconst {\n open = false,\n eager = false,\n headerGrow = false,\n classNames,\n} = defineProps<AccordionProps>();\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\ndefineSlots<{\n header?: (props: { open: boolean }) => any;\n default?: () => any;\n}>();\n\nconst inner = useTemplateRef<HTMLDivElement>('inner');\nconst content = useTemplateRef<HTMLDivElement>('content');\n\nconst triggerId = useId();\nconst contentId = useId();\nconst { height: innerHeight } = useElementSize(inner);\n\nconst contentHeight = computed<string>(() => (open ? `${get(innerHeight)}px` : '0px'));\n\nconst resizing = useClipWhileResizing(content, contentHeight);\n\n// a closed `eager` panel keeps its content at height 0, so it clips; an open one only while it resizes, so sticky content works\nconst clipped = computed<boolean>(() => !open || get(resizing));\n\nfunction toggle(): void {\n emit('click');\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n}\n\nconst rootStyle = tv({ base: 'flex flex-col items-start' });\n</script>\n\n<template>\n <div\n :class=\"rootStyle({ class: cn(classNames?.root ?? $attrs.class) })\"\n :data-state=\"open ? 'open' : 'closed'\"\n data-accordion\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <!-- rounded only while focused: a permanent radius bent any border an app draws on the header -->\n <div\n v-if=\"$slots.header\"\n :id=\"triggerId\"\n class=\"group flex gap-2 items-center cursor-pointer outline-hidden focus-visible:focus-ring focus-visible:rounded-rui-control\"\n :class=\"[classNames?.header, { 'w-full': headerGrow }]\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"open\"\n :aria-controls=\"contentId\"\n data-accordion-trigger\n @click=\"toggle()\"\n @keydown=\"onKeydown($event)\"\n >\n <div :class=\"{ grow: headerGrow }\">\n <slot\n name=\"header\"\n :open=\"open\"\n />\n </div>\n <Icon\n class=\"shrink-0 text-rui-text-secondary transition-[rotate,color] duration-200 ease-out group-hover:text-rui-text motion-reduce:transition-none\"\n :class=\"{ '-rotate-180': open }\"\n name=\"lu-chevron-down\"\n :size=\"16\"\n />\n </div>\n <div\n v-if=\"open || eager\"\n :id=\"contentId\"\n ref=\"content\"\n class=\"grow transition-[height] duration-200 ease-out w-full motion-reduce:transition-none\"\n :class=\"[{ 'overflow-hidden': clipped }, classNames?.content]\"\n :data-clipped=\"clipped || undefined\"\n :style=\"{ height: contentHeight }\"\n role=\"region\"\n :aria-labelledby=\"triggerId\"\n data-accordion-content\n >\n <div ref=\"inner\">\n <slot name=\"default\" />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -2,6 +2,7 @@ import { get } from "../../../vendor/@vueuse/shared/dist/index.js";
|
|
|
2
2
|
import { useElementSize } from "../../../vendor/@vueuse/core/dist/index.js";
|
|
3
3
|
import { cn, tv } from "../../../utils/tv.js";
|
|
4
4
|
import RuiIcon_default from "../../icons/RuiIcon.js";
|
|
5
|
+
import { useClipWhileResizing } from "../../../composables/clip-while-resizing.js";
|
|
5
6
|
import { computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, renderSlot, unref, useId, useTemplateRef } from "vue";
|
|
6
7
|
//#region src/components/accordions/accordion/RuiAccordion.vue?vue&type=script&setup=true&lang.ts
|
|
7
8
|
var _hoisted_1 = ["data-state"];
|
|
@@ -10,7 +11,11 @@ var _hoisted_2 = [
|
|
|
10
11
|
"aria-expanded",
|
|
11
12
|
"aria-controls"
|
|
12
13
|
];
|
|
13
|
-
var _hoisted_3 = [
|
|
14
|
+
var _hoisted_3 = [
|
|
15
|
+
"id",
|
|
16
|
+
"data-clipped",
|
|
17
|
+
"aria-labelledby"
|
|
18
|
+
];
|
|
14
19
|
var RuiAccordion_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
15
20
|
name: "RuiAccordion",
|
|
16
21
|
inheritAttrs: false,
|
|
@@ -34,10 +39,13 @@ var RuiAccordion_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
34
39
|
setup(__props, { emit: __emit }) {
|
|
35
40
|
const emit = __emit;
|
|
36
41
|
const inner = useTemplateRef("inner");
|
|
42
|
+
const content = useTemplateRef("content");
|
|
37
43
|
const triggerId = useId();
|
|
38
44
|
const contentId = useId();
|
|
39
45
|
const { height: innerHeight } = useElementSize(inner);
|
|
40
46
|
const contentHeight = computed(() => __props.open ? `${get(innerHeight)}px` : "0px");
|
|
47
|
+
const resizing = useClipWhileResizing(content, contentHeight);
|
|
48
|
+
const clipped = computed(() => !__props.open || get(resizing));
|
|
41
49
|
function toggle() {
|
|
42
50
|
emit("click");
|
|
43
51
|
}
|
|
@@ -74,7 +82,10 @@ var RuiAccordion_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
74
82
|
}, null, 8, ["class"])], 42, _hoisted_2)) : createCommentVNode("", true), __props.open || __props.eager ? (openBlock(), createElementBlock("div", {
|
|
75
83
|
key: 1,
|
|
76
84
|
id: unref(contentId),
|
|
77
|
-
|
|
85
|
+
ref_key: "content",
|
|
86
|
+
ref: content,
|
|
87
|
+
class: normalizeClass(["grow transition-[height] duration-200 ease-out w-full motion-reduce:transition-none", [{ "overflow-hidden": unref(clipped) }, __props.classNames?.content]]),
|
|
88
|
+
"data-clipped": unref(clipped) || void 0,
|
|
78
89
|
style: normalizeStyle({ height: unref(contentHeight) }),
|
|
79
90
|
role: "region",
|
|
80
91
|
"aria-labelledby": unref(triggerId),
|
package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiAccordion.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots","_openBlock","_createElementBlock","_mergeProps","_unref","_normalizeClass","_createElementVNode","_renderSlot","_createVNode","Icon","_createCommentVNode","_normalizeStyle"],"sources":["../../../../src/components/accordions/accordion/RuiAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { VueClassValue } from '@/types/class-value';\nimport Icon from '@/components/icons/RuiIcon.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiAccordionClassNames {\n root?: VueClassValue;\n header?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface AccordionProps {\n open?: boolean;\n eager?: boolean;\n headerGrow?: boolean;\n classNames?: RuiAccordionClassNames;\n}\n\ndefineOptions({\n name: 'RuiAccordion',\n inheritAttrs: false,\n});\n\nconst {\n open = false,\n eager = false,\n headerGrow = false,\n classNames,\n} = defineProps<AccordionProps>();\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\ndefineSlots<{\n header?: (props: { open: boolean }) => any;\n default?: () => any;\n}>();\n\nconst inner = useTemplateRef<HTMLDivElement>('inner');\n\nconst triggerId = useId();\nconst contentId = useId();\nconst { height: innerHeight } = useElementSize(inner);\n\nconst contentHeight = computed<string>(() => (open ? `${get(innerHeight)}px` : '0px'));\n\nfunction toggle(): void {\n emit('click');\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n}\n\nconst rootStyle = tv({ base: 'flex flex-col items-start' });\n</script>\n\n<template>\n <div\n :class=\"rootStyle({ class: cn(classNames?.root ?? $attrs.class) })\"\n :data-state=\"open ? 'open' : 'closed'\"\n data-accordion\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <!-- rounded only while focused: a permanent radius bent any border an app draws on the header -->\n <div\n v-if=\"$slots.header\"\n :id=\"triggerId\"\n class=\"group flex gap-2 items-center cursor-pointer outline-hidden focus-visible:focus-ring focus-visible:rounded-rui-control\"\n :class=\"[classNames?.header, { 'w-full': headerGrow }]\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"open\"\n :aria-controls=\"contentId\"\n data-accordion-trigger\n @click=\"toggle()\"\n @keydown=\"onKeydown($event)\"\n >\n <div :class=\"{ grow: headerGrow }\">\n <slot\n name=\"header\"\n :open=\"open\"\n />\n </div>\n <Icon\n class=\"shrink-0 text-rui-text-secondary transition-[rotate,color] duration-200 ease-out group-hover:text-rui-text motion-reduce:transition-none\"\n :class=\"{ '-rotate-180': open }\"\n name=\"lu-chevron-down\"\n :size=\"16\"\n />\n </div>\n <div\n v-if=\"open || eager\"\n :id=\"contentId\"\n class=\"grow transition-[height] duration-200 ease-out
|
|
1
|
+
{"version":3,"file":"RuiAccordion.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots","_openBlock","_createElementBlock","_mergeProps","_unref","_normalizeClass","_createElementVNode","_renderSlot","_createVNode","Icon","_createCommentVNode","_normalizeStyle"],"sources":["../../../../src/components/accordions/accordion/RuiAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { VueClassValue } from '@/types/class-value';\nimport Icon from '@/components/icons/RuiIcon.vue';\nimport { useClipWhileResizing } from '@/composables/clip-while-resizing';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiAccordionClassNames {\n root?: VueClassValue;\n header?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface AccordionProps {\n open?: boolean;\n eager?: boolean;\n headerGrow?: boolean;\n classNames?: RuiAccordionClassNames;\n}\n\ndefineOptions({\n name: 'RuiAccordion',\n inheritAttrs: false,\n});\n\nconst {\n open = false,\n eager = false,\n headerGrow = false,\n classNames,\n} = defineProps<AccordionProps>();\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\ndefineSlots<{\n header?: (props: { open: boolean }) => any;\n default?: () => any;\n}>();\n\nconst inner = useTemplateRef<HTMLDivElement>('inner');\nconst content = useTemplateRef<HTMLDivElement>('content');\n\nconst triggerId = useId();\nconst contentId = useId();\nconst { height: innerHeight } = useElementSize(inner);\n\nconst contentHeight = computed<string>(() => (open ? `${get(innerHeight)}px` : '0px'));\n\nconst resizing = useClipWhileResizing(content, contentHeight);\n\n// a closed `eager` panel keeps its content at height 0, so it clips; an open one only while it resizes, so sticky content works\nconst clipped = computed<boolean>(() => !open || get(resizing));\n\nfunction toggle(): void {\n emit('click');\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n}\n\nconst rootStyle = tv({ base: 'flex flex-col items-start' });\n</script>\n\n<template>\n <div\n :class=\"rootStyle({ class: cn(classNames?.root ?? $attrs.class) })\"\n :data-state=\"open ? 'open' : 'closed'\"\n data-accordion\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <!-- rounded only while focused: a permanent radius bent any border an app draws on the header -->\n <div\n v-if=\"$slots.header\"\n :id=\"triggerId\"\n class=\"group flex gap-2 items-center cursor-pointer outline-hidden focus-visible:focus-ring focus-visible:rounded-rui-control\"\n :class=\"[classNames?.header, { 'w-full': headerGrow }]\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"open\"\n :aria-controls=\"contentId\"\n data-accordion-trigger\n @click=\"toggle()\"\n @keydown=\"onKeydown($event)\"\n >\n <div :class=\"{ grow: headerGrow }\">\n <slot\n name=\"header\"\n :open=\"open\"\n />\n </div>\n <Icon\n class=\"shrink-0 text-rui-text-secondary transition-[rotate,color] duration-200 ease-out group-hover:text-rui-text motion-reduce:transition-none\"\n :class=\"{ '-rotate-180': open }\"\n name=\"lu-chevron-down\"\n :size=\"16\"\n />\n </div>\n <div\n v-if=\"open || eager\"\n :id=\"contentId\"\n ref=\"content\"\n class=\"grow transition-[height] duration-200 ease-out w-full motion-reduce:transition-none\"\n :class=\"[{ 'overflow-hidden': clipped }, classNames?.content]\"\n :data-clipped=\"clipped || undefined\"\n :style=\"{ height: contentHeight }\"\n role=\"region\"\n :aria-labelledby=\"triggerId\"\n data-accordion-content\n >\n <div ref=\"inner\">\n <slot name=\"default\" />\n </div>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BA,MAAM,OAAO;EASb,MAAM,QAAQ,eAA+B,OAAO;EACpD,MAAM,UAAU,eAA+B,SAAS;EAExD,MAAM,YAAY,MAAM;EACxB,MAAM,YAAY,MAAM;EACxB,MAAM,EAAE,QAAQ,gBAAgB,eAAe,KAAK;EAEpD,MAAM,gBAAgB,eAAwB,QAAA,OAAO,GAAG,IAAI,WAAW,EAAE,MAAM,KAAM;EAErF,MAAM,WAAW,qBAAqB,SAAS,aAAa;EAG5D,MAAM,UAAU,eAAwB,CAAC,QAAA,QAAQ,IAAI,QAAQ,CAAC;EAE9D,SAAS,SAAe;GACtB,KAAK,OAAO;EACd;EAEA,SAAS,UAAU,OAA4B;GAC7C,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC9C,MAAM,eAAe;IACrB,OAAO;GACT;EACF;EAEA,MAAM,YAAY,GAAG,EAAE,MAAM,4BAA4B,CAAC;;GAIxD,OAAAE,UAAA,GAAAC,mBAiDM,OAjDNC,WAiDM;IAhDH,OAAOC,MAAA,SAAA,CAAS,CAAA,EAAA,OAAUA,MAAA,EAAA,CAAE,CAAC,QAAA,YAAY,QAAQL,KAAAA,OAAO,KAAK,EAAA,CAAA;IAC7D,cAAY,QAAA,OAAI,SAAA;IACjB,kBAAA;GACaA,GAAAA;IAAAA,GAAAA,KAAAA;IAAM,OAAS,KAAA;GAAS,CAAA,GAAA,CAI7BC,KAAAA,OAAO,UADfC,UAAA,GAAAC,mBAyBM,OAAA;;IAvBH,IAAIE,MAAA,SAAA;IACL,OAAKC,eAAA,CAAC,0HAAwH,CACrH,QAAA,YAAY,QAAM,EAAA,UAAc,QAAA,WAAU,CAAA,CAAA,CAAA;IACnD,MAAK;IACL,UAAS;IACR,iBAAe,QAAA;IACf,iBAAeD,MAAA,SAAA;IAChB,0BAAA;IACC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAM;IACb,WAAO,OAAA,OAAA,OAAA,MAAA,WAAE,UAAU,MAAM;GAE1BE,GAAAA,CAAAA,mBAKM,OAAA,EALA,OAAKD,eAAA,EAAA,MAAU,QAAA,WAAU,CAAA,EAAA,GAAA,CAC7BE,WAGE,KAAA,QAAA,UAAA,EADC,MAAM,QAAA,KAAI,CAAA,CAAA,GAAA,CAAA,GAGfC,YAKEC,iBAAA;IAJA,OAAKJ,eAAA,CAAC,4IAA0I,EAAA,eACvH,QAAA,KAAI,CAAA,CAAA;IAC7B,MAAK;IACJ,MAAM;GAIH,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,CAAA,GAAA,IAAA,UAAA,KAAA,mBAAA,IAAA,IAAA,GAAA,QAAA,QAAQ,QAAA,SADhBJ,UAAA,GAAAC,mBAeM,OAAA;;IAbH,IAAIE,MAAA,SAAA;IACD,SAAA;IAAJ,KAAI;IACJ,OAAKC,eAAA,CAAC,uFAAqF,CAAA,EAAA,mBAC7DD,MAAA,OAAA,EAAO,GAAI,QAAA,YAAY,OAAO,CAAA,CAAA;IAC3D,gBAAcA,MAAA,OAAA,KAAW,KAAA;IACzB,OAAKO,eAAA,EAAA,QAAYP,MAAA,aAAA,EAAa,CAAA;IAC/B,MAAK;IACJ,mBAAiBA,MAAA,SAAA;IAClB,0BAAA;GAEAE,GAAAA,CAAAA,mBAEM,OAAA;IAFG,SAAA;IAAJ,KAAI;GACPC,GAAAA,CAAAA,WAAuB,KAAA,QAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,IAAA,UAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,IAAA,UAAA"}
|
|
@@ -14,11 +14,11 @@ type __VLS_Slots = {
|
|
|
14
14
|
default?: () => any;
|
|
15
15
|
};
|
|
16
16
|
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
|
-
action: () => any;
|
|
18
17
|
close: () => any;
|
|
18
|
+
action: () => any;
|
|
19
19
|
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
20
|
-
onAction?: (() => any) | undefined;
|
|
21
20
|
onClose?: (() => any) | undefined;
|
|
21
|
+
onAction?: (() => any) | undefined;
|
|
22
22
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
23
23
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
24
24
|
declare const _default: typeof __VLS_export;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiButton.js","names":["_sfc_main"],"sources":["../../../../src/components/buttons/button/RuiButton.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { ButtonGroupKey } from '@/components/buttons/button-group/button-group-context';\nimport { type ButtonSize, ButtonVariant, getButtonSpinnerSize } from '@/components/buttons/button/button-props';\nimport { buttonStyles } from '@/components/buttons/button/button-styles';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { cn } from '@/utils/tv';\n\nexport interface Props<T = undefined> {\n disabled?: boolean;\n loading?: boolean;\n color?: ContextColorsType;\n rounded?: boolean;\n variant?: ButtonVariant;\n icon?: boolean;\n active?: boolean;\n size?: ButtonSize;\n tag?: 'button' | 'a';\n type?: 'button' | 'submit';\n modelValue?: T;\n hideFocusIndicator?: boolean;\n}\n\ndefineOptions({\n name: 'RuiButton',\n inheritAttrs: false,\n});\n\nconst {\n disabled = false,\n loading = false,\n color = undefined,\n rounded = false,\n variant = ButtonVariant.default,\n icon = false,\n active = false,\n size = undefined,\n tag = 'button',\n type = 'button',\n modelValue = undefined,\n hideFocusIndicator = false,\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'update:model-value': [value?: T];\n}>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n append?: () => any;\n default?: () => any;\n}>();\n\n// a RuiButtonGroup anywhere above, unless an overlay's content sits in between\nconst group = inject(ButtonGroupKey, undefined);\n\nconst btnValue = computed<T | undefined>(() => modelValue);\n\nconst resolvedVariant = computed<ButtonVariant>(() => group?.variant() ?? variant);\n\nconst resolvedSize = computed<ButtonSize | undefined>(() => size ?? group?.size());\n\nconst resolvedDisabled = computed<boolean>(() => disabled || (group?.disabled() ?? false));\n\n// a grouped button is pressed when the group's model holds its value; it needs one to take part\nconst resolvedActive = computed<boolean>(() => active || (!!group && modelValue !== undefined && group.isActive(modelValue)));\n\nconst resolvedColor = computed<ContextColorsType | undefined>(() => group?.color(get(resolvedActive)) ?? color);\n\nconst spinnerSize = computed<number>(() => getButtonSpinnerSize(get(resolvedSize)));\n\nconst ui = computed<ReturnType<typeof buttonStyles>>(() => buttonStyles({\n variant: get(resolvedVariant),\n color: get(resolvedColor) ?? 'grey',\n size: get(resolvedSize),\n rounded,\n icon,\n active: get(resolvedActive),\n loading,\n hideFocusIndicator,\n}));\n\nfunction onClick(): void {\n emit('update:model-value', get(btnValue));\n if (group && modelValue !== undefined)\n group.toggle(modelValue);\n}\n</script>\n\n<template>\n <Component\n :is=\"tag\"\n :class=\"ui.root({ class: cn([group?.itemClass(), $attrs.class]) })\"\n :disabled=\"resolvedDisabled || loading\"\n :type=\"tag === 'button' ? type : undefined\"\n :data-variant=\"resolvedVariant\"\n :data-size=\"resolvedSize ?? 'md'\"\n :data-color=\"resolvedColor\"\n :data-active=\"resolvedActive || undefined\"\n :aria-busy=\"loading || undefined\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n @click=\"onClick()\"\n >\n <!-- the button's aria-busy announces the wait, so the spinner stays out of the accessibility tree -->\n <RuiProgress\n v-if=\"loading\"\n circular\n data-spinner\n aria-hidden=\"true\"\n :class=\"ui.spinner()\"\n variant=\"indeterminate\"\n thickness=\"2\"\n :size=\"spinnerSize\"\n />\n <!-- while loading, the spinner stands in for the prepend icon; the label stays -->\n <slot\n v-if=\"!loading || icon\"\n name=\"prepend\"\n />\n <span\n v-if=\"slots.default\"\n :class=\"ui.label()\"\n data-id=\"btn-label\"\n >\n <slot />\n </span>\n <slot name=\"append\" />\n </Component>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"RuiButton.js","names":["_sfc_main"],"sources":["../../../../src/components/buttons/button/RuiButton.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { ButtonGroupKey } from '@/components/buttons/button-group/button-group-context';\nimport { type ButtonCollapseBreakpoint, type ButtonSize, ButtonVariant, getButtonSpinnerSize } from '@/components/buttons/button/button-props';\nimport { buttonStyles } from '@/components/buttons/button/button-styles';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { cn } from '@/utils/tv';\n\nexport interface Props<T = undefined> {\n disabled?: boolean;\n loading?: boolean;\n color?: ContextColorsType;\n rounded?: boolean;\n variant?: ButtonVariant;\n icon?: boolean;\n active?: boolean;\n size?: ButtonSize;\n tag?: 'button' | 'a';\n type?: 'button' | 'submit';\n modelValue?: T;\n hideFocusIndicator?: boolean;\n /**\n * Below this breakpoint the button shows only its icons: the label becomes screen-reader text,\n * so it still names the button, and the button takes its icon-only padding. Give it a `prepend`\n * or `append` icon. Ignored on an `icon` button.\n */\n collapseBelow?: ButtonCollapseBreakpoint;\n}\n\ndefineOptions({\n name: 'RuiButton',\n inheritAttrs: false,\n});\n\nconst {\n disabled = false,\n loading = false,\n color = undefined,\n rounded = false,\n variant = ButtonVariant.default,\n icon = false,\n active = false,\n size = undefined,\n tag = 'button',\n type = 'button',\n modelValue = undefined,\n hideFocusIndicator = false,\n collapseBelow = undefined,\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'update:model-value': [value?: T];\n}>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n append?: () => any;\n default?: () => any;\n}>();\n\n// a RuiButtonGroup anywhere above, unless an overlay's content sits in between\nconst group = inject(ButtonGroupKey, undefined);\n\nconst btnValue = computed<T | undefined>(() => modelValue);\n\nconst resolvedVariant = computed<ButtonVariant>(() => group?.variant() ?? variant);\n\nconst resolvedSize = computed<ButtonSize | undefined>(() => size ?? group?.size());\n\nconst resolvedDisabled = computed<boolean>(() => disabled || (group?.disabled() ?? false));\n\n// a grouped button is pressed when the group's model holds its value; it needs one to take part\nconst resolvedActive = computed<boolean>(() => active || (!!group && modelValue !== undefined && group.isActive(modelValue)));\n\nconst resolvedColor = computed<ContextColorsType | undefined>(() => group?.color(get(resolvedActive)) ?? color);\n\nconst spinnerSize = computed<number>(() => getButtonSpinnerSize(get(resolvedSize)));\n\nconst ui = computed<ReturnType<typeof buttonStyles>>(() => buttonStyles({\n variant: get(resolvedVariant),\n color: get(resolvedColor) ?? 'grey',\n size: get(resolvedSize),\n rounded,\n icon,\n active: get(resolvedActive),\n loading,\n hideFocusIndicator,\n collapseBelow: icon ? undefined : collapseBelow,\n}));\n\nfunction onClick(): void {\n emit('update:model-value', get(btnValue));\n if (group && modelValue !== undefined)\n group.toggle(modelValue);\n}\n</script>\n\n<template>\n <Component\n :is=\"tag\"\n :class=\"ui.root({ class: cn([group?.itemClass(), $attrs.class]) })\"\n :disabled=\"resolvedDisabled || loading\"\n :type=\"tag === 'button' ? type : undefined\"\n :data-variant=\"resolvedVariant\"\n :data-size=\"resolvedSize ?? 'md'\"\n :data-color=\"resolvedColor\"\n :data-active=\"resolvedActive || undefined\"\n :aria-busy=\"loading || undefined\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n @click=\"onClick()\"\n >\n <!-- the button's aria-busy announces the wait, so the spinner stays out of the accessibility tree -->\n <RuiProgress\n v-if=\"loading\"\n circular\n data-spinner\n aria-hidden=\"true\"\n :class=\"ui.spinner()\"\n variant=\"indeterminate\"\n thickness=\"2\"\n :size=\"spinnerSize\"\n />\n <!-- while loading, the spinner stands in for the prepend icon; the label stays -->\n <slot\n v-if=\"!loading || icon\"\n name=\"prepend\"\n />\n <span\n v-if=\"slots.default\"\n :class=\"ui.label()\"\n data-id=\"btn-label\"\n >\n <slot />\n </span>\n <slot name=\"append\" />\n </Component>\n</template>\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ContextColorsType } from '../../../consts/colors.js';
|
|
2
|
-
import { type ButtonSize, ButtonVariant } from './button-props.js';
|
|
2
|
+
import { type ButtonCollapseBreakpoint, type ButtonSize, ButtonVariant } from './button-props.js';
|
|
3
3
|
export interface Props<T = undefined> {
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
loading?: boolean;
|
|
@@ -13,6 +13,12 @@ export interface Props<T = undefined> {
|
|
|
13
13
|
type?: 'button' | 'submit';
|
|
14
14
|
modelValue?: T;
|
|
15
15
|
hideFocusIndicator?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Below this breakpoint the button shows only its icons: the label becomes screen-reader text,
|
|
18
|
+
* so it still names the button, and the button takes its icon-only padding. Give it a `prepend`
|
|
19
|
+
* or `append` icon. Ignored on an `icon` button.
|
|
20
|
+
*/
|
|
21
|
+
collapseBelow?: ButtonCollapseBreakpoint;
|
|
16
22
|
}
|
|
17
23
|
declare const __VLS_export: <T = undefined>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
18
24
|
props: import("vue").PublicProps & __VLS_PrettifyLocal<Props<T> & {
|
|
@@ -40,7 +40,8 @@ var RuiButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
40
40
|
hideFocusIndicator: {
|
|
41
41
|
type: Boolean,
|
|
42
42
|
default: false
|
|
43
|
-
}
|
|
43
|
+
},
|
|
44
|
+
collapseBelow: { default: () => void 0 }
|
|
44
45
|
},
|
|
45
46
|
emits: ["update:model-value"],
|
|
46
47
|
setup(__props, { emit: __emit }) {
|
|
@@ -62,7 +63,8 @@ var RuiButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
62
63
|
icon: __props.icon,
|
|
63
64
|
active: get(resolvedActive),
|
|
64
65
|
loading: __props.loading,
|
|
65
|
-
hideFocusIndicator: __props.hideFocusIndicator
|
|
66
|
+
hideFocusIndicator: __props.hideFocusIndicator,
|
|
67
|
+
collapseBelow: __props.icon ? void 0 : __props.collapseBelow
|
|
66
68
|
}));
|
|
67
69
|
function onClick() {
|
|
68
70
|
emit("update:model-value", get(btnValue));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_useSlots","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_unref","_withCtx","RuiProgress","_normalizeClass","_createCommentVNode","_renderSlot","_createElementBlock"],"sources":["../../../../src/components/buttons/button/RuiButton.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { ButtonGroupKey } from '@/components/buttons/button-group/button-group-context';\nimport { type ButtonSize, ButtonVariant, getButtonSpinnerSize } from '@/components/buttons/button/button-props';\nimport { buttonStyles } from '@/components/buttons/button/button-styles';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { cn } from '@/utils/tv';\n\nexport interface Props<T = undefined> {\n disabled?: boolean;\n loading?: boolean;\n color?: ContextColorsType;\n rounded?: boolean;\n variant?: ButtonVariant;\n icon?: boolean;\n active?: boolean;\n size?: ButtonSize;\n tag?: 'button' | 'a';\n type?: 'button' | 'submit';\n modelValue?: T;\n hideFocusIndicator?: boolean;\n}\n\ndefineOptions({\n name: 'RuiButton',\n inheritAttrs: false,\n});\n\nconst {\n disabled = false,\n loading = false,\n color = undefined,\n rounded = false,\n variant = ButtonVariant.default,\n icon = false,\n active = false,\n size = undefined,\n tag = 'button',\n type = 'button',\n modelValue = undefined,\n hideFocusIndicator = false,\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'update:model-value': [value?: T];\n}>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n append?: () => any;\n default?: () => any;\n}>();\n\n// a RuiButtonGroup anywhere above, unless an overlay's content sits in between\nconst group = inject(ButtonGroupKey, undefined);\n\nconst btnValue = computed<T | undefined>(() => modelValue);\n\nconst resolvedVariant = computed<ButtonVariant>(() => group?.variant() ?? variant);\n\nconst resolvedSize = computed<ButtonSize | undefined>(() => size ?? group?.size());\n\nconst resolvedDisabled = computed<boolean>(() => disabled || (group?.disabled() ?? false));\n\n// a grouped button is pressed when the group's model holds its value; it needs one to take part\nconst resolvedActive = computed<boolean>(() => active || (!!group && modelValue !== undefined && group.isActive(modelValue)));\n\nconst resolvedColor = computed<ContextColorsType | undefined>(() => group?.color(get(resolvedActive)) ?? color);\n\nconst spinnerSize = computed<number>(() => getButtonSpinnerSize(get(resolvedSize)));\n\nconst ui = computed<ReturnType<typeof buttonStyles>>(() => buttonStyles({\n variant: get(resolvedVariant),\n color: get(resolvedColor) ?? 'grey',\n size: get(resolvedSize),\n rounded,\n icon,\n active: get(resolvedActive),\n loading,\n hideFocusIndicator,\n}));\n\nfunction onClick(): void {\n emit('update:model-value', get(btnValue));\n if (group && modelValue !== undefined)\n group.toggle(modelValue);\n}\n</script>\n\n<template>\n <Component\n :is=\"tag\"\n :class=\"ui.root({ class: cn([group?.itemClass(), $attrs.class]) })\"\n :disabled=\"resolvedDisabled || loading\"\n :type=\"tag === 'button' ? type : undefined\"\n :data-variant=\"resolvedVariant\"\n :data-size=\"resolvedSize ?? 'md'\"\n :data-color=\"resolvedColor\"\n :data-active=\"resolvedActive || undefined\"\n :aria-busy=\"loading || undefined\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n @click=\"onClick()\"\n >\n <!-- the button's aria-busy announces the wait, so the spinner stays out of the accessibility tree -->\n <RuiProgress\n v-if=\"loading\"\n circular\n data-spinner\n aria-hidden=\"true\"\n :class=\"ui.spinner()\"\n variant=\"indeterminate\"\n thickness=\"2\"\n :size=\"spinnerSize\"\n />\n <!-- while loading, the spinner stands in for the prepend icon; the label stays -->\n <slot\n v-if=\"!loading || icon\"\n name=\"prepend\"\n />\n <span\n v-if=\"slots.default\"\n :class=\"ui.label()\"\n data-id=\"btn-label\"\n >\n <slot />\n </span>\n <slot name=\"append\" />\n </Component>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RuiButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_useSlots","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_unref","_withCtx","RuiProgress","_normalizeClass","_createCommentVNode","_renderSlot","_createElementBlock"],"sources":["../../../../src/components/buttons/button/RuiButton.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { ButtonGroupKey } from '@/components/buttons/button-group/button-group-context';\nimport { type ButtonCollapseBreakpoint, type ButtonSize, ButtonVariant, getButtonSpinnerSize } from '@/components/buttons/button/button-props';\nimport { buttonStyles } from '@/components/buttons/button/button-styles';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { cn } from '@/utils/tv';\n\nexport interface Props<T = undefined> {\n disabled?: boolean;\n loading?: boolean;\n color?: ContextColorsType;\n rounded?: boolean;\n variant?: ButtonVariant;\n icon?: boolean;\n active?: boolean;\n size?: ButtonSize;\n tag?: 'button' | 'a';\n type?: 'button' | 'submit';\n modelValue?: T;\n hideFocusIndicator?: boolean;\n /**\n * Below this breakpoint the button shows only its icons: the label becomes screen-reader text,\n * so it still names the button, and the button takes its icon-only padding. Give it a `prepend`\n * or `append` icon. Ignored on an `icon` button.\n */\n collapseBelow?: ButtonCollapseBreakpoint;\n}\n\ndefineOptions({\n name: 'RuiButton',\n inheritAttrs: false,\n});\n\nconst {\n disabled = false,\n loading = false,\n color = undefined,\n rounded = false,\n variant = ButtonVariant.default,\n icon = false,\n active = false,\n size = undefined,\n tag = 'button',\n type = 'button',\n modelValue = undefined,\n hideFocusIndicator = false,\n collapseBelow = undefined,\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'update:model-value': [value?: T];\n}>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n append?: () => any;\n default?: () => any;\n}>();\n\n// a RuiButtonGroup anywhere above, unless an overlay's content sits in between\nconst group = inject(ButtonGroupKey, undefined);\n\nconst btnValue = computed<T | undefined>(() => modelValue);\n\nconst resolvedVariant = computed<ButtonVariant>(() => group?.variant() ?? variant);\n\nconst resolvedSize = computed<ButtonSize | undefined>(() => size ?? group?.size());\n\nconst resolvedDisabled = computed<boolean>(() => disabled || (group?.disabled() ?? false));\n\n// a grouped button is pressed when the group's model holds its value; it needs one to take part\nconst resolvedActive = computed<boolean>(() => active || (!!group && modelValue !== undefined && group.isActive(modelValue)));\n\nconst resolvedColor = computed<ContextColorsType | undefined>(() => group?.color(get(resolvedActive)) ?? color);\n\nconst spinnerSize = computed<number>(() => getButtonSpinnerSize(get(resolvedSize)));\n\nconst ui = computed<ReturnType<typeof buttonStyles>>(() => buttonStyles({\n variant: get(resolvedVariant),\n color: get(resolvedColor) ?? 'grey',\n size: get(resolvedSize),\n rounded,\n icon,\n active: get(resolvedActive),\n loading,\n hideFocusIndicator,\n collapseBelow: icon ? undefined : collapseBelow,\n}));\n\nfunction onClick(): void {\n emit('update:model-value', get(btnValue));\n if (group && modelValue !== undefined)\n group.toggle(modelValue);\n}\n</script>\n\n<template>\n <Component\n :is=\"tag\"\n :class=\"ui.root({ class: cn([group?.itemClass(), $attrs.class]) })\"\n :disabled=\"resolvedDisabled || loading\"\n :type=\"tag === 'button' ? type : undefined\"\n :data-variant=\"resolvedVariant\"\n :data-size=\"resolvedSize ?? 'md'\"\n :data-color=\"resolvedColor\"\n :data-active=\"resolvedActive || undefined\"\n :aria-busy=\"loading || undefined\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n @click=\"onClick()\"\n >\n <!-- the button's aria-busy announces the wait, so the spinner stays out of the accessibility tree -->\n <RuiProgress\n v-if=\"loading\"\n circular\n data-spinner\n aria-hidden=\"true\"\n :class=\"ui.spinner()\"\n variant=\"indeterminate\"\n thickness=\"2\"\n :size=\"spinnerSize\"\n />\n <!-- while loading, the spinner stands in for the prepend icon; the label stays -->\n <slot\n v-if=\"!loading || icon\"\n name=\"prepend\"\n />\n <span\n v-if=\"slots.default\"\n :class=\"ui.label()\"\n data-id=\"btn-label\"\n >\n <slot />\n </span>\n <slot name=\"append\" />\n </Component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDA,MAAM,OAAO;EAIb,MAAM,QAAQC,SAAA;EAOd,MAAM,QAAQ,OAAO,gBAAgB,KAAA,CAAS;EAE9C,MAAM,WAAW,eAA8B,QAAA,UAAU;EAEzD,MAAM,kBAAkB,eAA8B,OAAO,QAAQ,KAAK,QAAA,OAAO;EAEjF,MAAM,eAAe,eAAuC,QAAA,QAAQ,OAAO,KAAK,CAAC;EAEjF,MAAM,mBAAmB,eAAwB,QAAA,aAAa,OAAO,SAAS,KAAK,MAAM;EAGzF,MAAM,iBAAiB,eAAwB,QAAA,UAAW,CAAC,CAAC,SAAS,QAAA,eAAe,KAAA,KAAa,MAAM,SAAS,QAAA,UAAU,CAAE;EAE5H,MAAM,gBAAgB,eAA8C,OAAO,MAAM,IAAI,cAAc,CAAC,KAAK,QAAA,KAAK;EAE9G,MAAM,cAAc,eAAuB,qBAAqB,IAAI,YAAY,CAAC,CAAC;EAElF,MAAM,KAAK,eAAgD,aAAa;GACtE,SAAS,IAAI,eAAe;GAC5B,OAAO,IAAI,aAAa,KAAK;GAC7B,MAAM,IAAI,YAAY;GACtB,SAAM,QAAA;GACN,MAAG,QAAA;GACH,QAAQ,IAAI,cAAc;GAC1B,SAAM,QAAA;GACN,oBAAiB,QAAA;GACjB,eAAe,QAAA,OAAO,KAAA,IAAY,QAAA;EACpC,CAAC,CAAC;EAEF,SAAS,UAAgB;GACvB,KAAK,sBAAsB,IAAI,QAAQ,CAAC;GACxC,IAAI,SAAS,QAAA,eAAe,KAAA,GAC1B,MAAM,OAAO,QAAA,UAAU;EAC3B;;GAIE,OAAAC,UAAA,GAAAC,YAqCYC,wBApCL,QAAA,GAAG,GADVC,WAqCY;IAnCT,OAAOC,MAAA,EAAA,CAAE,CAAC,KAAI,EAAA,OAAUA,MAAA,EAAA,CAAE,CAAA,CAAEA,MAAA,KAAA,CAAK,EAAE,UAAS,GAAIN,KAAAA,OAAO,KAAK,CAAA,EAAA,CAAA;IAC5D,UAAUM,MAAA,gBAAA,KAAoB,QAAA;IAC9B,MAAM,QAAA,QAAG,WAAgB,QAAA,OAAO,KAAA;IAChC,gBAAcA,MAAA,eAAA;IACd,aAAWA,MAAA,YAAA,KAAY;IACvB,cAAYA,MAAA,aAAA;IACZ,eAAaA,MAAA,cAAA,KAAkB,KAAA;IAC/B,aAAW,QAAA,WAAW,KAAA;GACVN,GAAAA;IAAAA,GAAAA,KAAAA;IAAM,OAAS,KAAA;GAAS,GAAA,EACpC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,QAAO,GAAA,CAAA,GAAA;IAGf,SAAAO,cASE;KARM,QAAA,WADRL,UAAA,GAAAC,YASEK,qBAAA;;MAPA,UAAA;MACA,gBAAA;MACA,eAAY;MACX,OAAKC,eAAEH,MAAA,EAAA,CAAE,CAAC,QAAO,CAAA;MAClB,SAAQ;MACR,WAAU;MACT,MAAMA,MAAA,WAAA;;KAIA,CAAA,QAAA,WAAW,QAAA,OADpBK,WAGE,KAAA,QAAA,WAAA,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,IAAA,mBAAA,IAAA,IAAA;KAEM,MAAM,WADdT,UAAA,GAAAU,mBAMO,QAAA;;MAJJ,OAAKH,eAAEH,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;MAChB,WAAQ;KAERK,GAAAA,CAAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;KAEVA,WAAsB,KAAA,QAAA,QAAA"}
|
|
@@ -4,6 +4,7 @@ export declare const ButtonVariant: {
|
|
|
4
4
|
readonly text: "text";
|
|
5
5
|
readonly fab: "fab";
|
|
6
6
|
readonly list: "list";
|
|
7
|
+
readonly link: "link";
|
|
7
8
|
};
|
|
8
9
|
export type ButtonVariant = (typeof ButtonVariant)[keyof typeof ButtonVariant];
|
|
9
10
|
export declare const ButtonSize: {
|
|
@@ -14,4 +15,6 @@ export declare const ButtonSize: {
|
|
|
14
15
|
readonly '2xl': "2xl";
|
|
15
16
|
};
|
|
16
17
|
export type ButtonSize = (typeof ButtonSize)[keyof typeof ButtonSize];
|
|
18
|
+
/** The Tailwind breakpoint below which `collapseBelow` hides a button's label. */
|
|
19
|
+
export type ButtonCollapseBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
17
20
|
export declare function getButtonSpinnerSize(size?: ButtonSize): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-props.js","names":[],"sources":["../../../../src/components/buttons/button/button-props.ts"],"sourcesContent":["export const ButtonVariant = {\n default: 'default',\n outlined: 'outlined',\n text: 'text',\n fab: 'fab',\n list: 'list',\n} as const;\n\nexport type ButtonVariant = (typeof ButtonVariant)[keyof typeof ButtonVariant];\n\nexport const ButtonSize = {\n 'xs': 'xs',\n 'sm': 'sm',\n 'lg': 'lg',\n 'xl': 'xl',\n '2xl': '2xl',\n} as const;\n\nexport type ButtonSize = (typeof ButtonSize)[keyof typeof ButtonSize];\n\n// the icon size plus 2px: the spinner takes the icon's place, a thin ring reading lighter than a glyph\nconst SPINNER_SIZES: Record<string, number> = { 'xs': 12, 'sm': 16, 'lg': 22, 'xl': 24, '2xl': 24 };\nconst DEFAULT_SPINNER_SIZE = 18;\n\nexport function getButtonSpinnerSize(size?: ButtonSize): number {\n return (size && SPINNER_SIZES[size]) || DEFAULT_SPINNER_SIZE;\n}\n"],"mappings":";AAAA,IAAa,gBAAgB;CAC3B,SAAS;CACT,UAAU;CACV,MAAM;CACN,KAAK;CACL,MAAM;AACR;
|
|
1
|
+
{"version":3,"file":"button-props.js","names":[],"sources":["../../../../src/components/buttons/button/button-props.ts"],"sourcesContent":["export const ButtonVariant = {\n default: 'default',\n outlined: 'outlined',\n text: 'text',\n fab: 'fab',\n list: 'list',\n link: 'link',\n} as const;\n\nexport type ButtonVariant = (typeof ButtonVariant)[keyof typeof ButtonVariant];\n\nexport const ButtonSize = {\n 'xs': 'xs',\n 'sm': 'sm',\n 'lg': 'lg',\n 'xl': 'xl',\n '2xl': '2xl',\n} as const;\n\nexport type ButtonSize = (typeof ButtonSize)[keyof typeof ButtonSize];\n\n/** The Tailwind breakpoint below which `collapseBelow` hides a button's label. */\nexport type ButtonCollapseBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n// the icon size plus 2px: the spinner takes the icon's place, a thin ring reading lighter than a glyph\nconst SPINNER_SIZES: Record<string, number> = { 'xs': 12, 'sm': 16, 'lg': 22, 'xl': 24, '2xl': 24 };\nconst DEFAULT_SPINNER_SIZE = 18;\n\nexport function getButtonSpinnerSize(size?: ButtonSize): number {\n return (size && SPINNER_SIZES[size]) || DEFAULT_SPINNER_SIZE;\n}\n"],"mappings":";AAAA,IAAa,gBAAgB;CAC3B,SAAS;CACT,UAAU;CACV,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;AACR;AAkBA,IAAM,gBAAwC;CAAE,MAAM;CAAI,MAAM;CAAI,MAAM;CAAI,MAAM;CAAI,OAAO;AAAG;AAClG,IAAM,uBAAuB;AAE7B,SAAgB,qBAAqB,MAA2B;CAC9D,OAAQ,QAAQ,cAAc,SAAU;AAC1C"}
|
|
@@ -50,6 +50,9 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
50
50
|
root: string;
|
|
51
51
|
label: string;
|
|
52
52
|
};
|
|
53
|
+
link: {
|
|
54
|
+
root: string;
|
|
55
|
+
};
|
|
53
56
|
};
|
|
54
57
|
size: {
|
|
55
58
|
xs: {
|
|
@@ -117,6 +120,28 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
117
120
|
root: string;
|
|
118
121
|
};
|
|
119
122
|
};
|
|
123
|
+
collapseBelow: {
|
|
124
|
+
sm: {
|
|
125
|
+
root: string;
|
|
126
|
+
label: string;
|
|
127
|
+
};
|
|
128
|
+
md: {
|
|
129
|
+
root: string;
|
|
130
|
+
label: string;
|
|
131
|
+
};
|
|
132
|
+
lg: {
|
|
133
|
+
root: string;
|
|
134
|
+
label: string;
|
|
135
|
+
};
|
|
136
|
+
xl: {
|
|
137
|
+
root: string;
|
|
138
|
+
label: string;
|
|
139
|
+
};
|
|
140
|
+
'2xl': {
|
|
141
|
+
root: string;
|
|
142
|
+
label: string;
|
|
143
|
+
};
|
|
144
|
+
};
|
|
120
145
|
}, {
|
|
121
146
|
root: string;
|
|
122
147
|
label: string;
|
|
@@ -135,6 +160,9 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
135
160
|
root: string;
|
|
136
161
|
label: string;
|
|
137
162
|
};
|
|
163
|
+
link: {
|
|
164
|
+
root: string;
|
|
165
|
+
};
|
|
138
166
|
};
|
|
139
167
|
size: {
|
|
140
168
|
xs: {
|
|
@@ -202,6 +230,28 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
202
230
|
root: string;
|
|
203
231
|
};
|
|
204
232
|
};
|
|
233
|
+
collapseBelow: {
|
|
234
|
+
sm: {
|
|
235
|
+
root: string;
|
|
236
|
+
label: string;
|
|
237
|
+
};
|
|
238
|
+
md: {
|
|
239
|
+
root: string;
|
|
240
|
+
label: string;
|
|
241
|
+
};
|
|
242
|
+
lg: {
|
|
243
|
+
root: string;
|
|
244
|
+
label: string;
|
|
245
|
+
};
|
|
246
|
+
xl: {
|
|
247
|
+
root: string;
|
|
248
|
+
label: string;
|
|
249
|
+
};
|
|
250
|
+
'2xl': {
|
|
251
|
+
root: string;
|
|
252
|
+
label: string;
|
|
253
|
+
};
|
|
254
|
+
};
|
|
205
255
|
}, {
|
|
206
256
|
root: string;
|
|
207
257
|
label: string;
|
|
@@ -220,6 +270,9 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
220
270
|
root: string;
|
|
221
271
|
label: string;
|
|
222
272
|
};
|
|
273
|
+
link: {
|
|
274
|
+
root: string;
|
|
275
|
+
};
|
|
223
276
|
};
|
|
224
277
|
size: {
|
|
225
278
|
xs: {
|
|
@@ -287,6 +340,28 @@ export declare const buttonStyles: import("tailwind-variants").TVReturnType<{
|
|
|
287
340
|
root: string;
|
|
288
341
|
};
|
|
289
342
|
};
|
|
343
|
+
collapseBelow: {
|
|
344
|
+
sm: {
|
|
345
|
+
root: string;
|
|
346
|
+
label: string;
|
|
347
|
+
};
|
|
348
|
+
md: {
|
|
349
|
+
root: string;
|
|
350
|
+
label: string;
|
|
351
|
+
};
|
|
352
|
+
lg: {
|
|
353
|
+
root: string;
|
|
354
|
+
label: string;
|
|
355
|
+
};
|
|
356
|
+
xl: {
|
|
357
|
+
root: string;
|
|
358
|
+
label: string;
|
|
359
|
+
};
|
|
360
|
+
'2xl': {
|
|
361
|
+
root: string;
|
|
362
|
+
label: string;
|
|
363
|
+
};
|
|
364
|
+
};
|
|
290
365
|
}, {
|
|
291
366
|
root: string;
|
|
292
367
|
label: string;
|
|
@@ -60,7 +60,8 @@ var buttonStyles = tv({
|
|
|
60
60
|
list: {
|
|
61
61
|
root: "p-3 px-3 rounded-rui-sm w-full justify-start text-left",
|
|
62
62
|
label: "w-full leading-4"
|
|
63
|
-
}
|
|
63
|
+
},
|
|
64
|
+
link: { root: "inline-flex align-baseline gap-x-1 underline-offset-2 not-disabled:hover:underline" }
|
|
64
65
|
},
|
|
65
66
|
size: {
|
|
66
67
|
"xs": { root: "px-2 py-[0.125rem] text-[.75rem] leading-4 ![--rui-icon-size:0.75rem]" },
|
|
@@ -91,7 +92,29 @@ var buttonStyles = tv({
|
|
|
91
92
|
true: { root: "relative !cursor-progress" },
|
|
92
93
|
false: {}
|
|
93
94
|
},
|
|
94
|
-
hideFocusIndicator: { true: { root: "focus-visible:!outline-hidden" } }
|
|
95
|
+
hideFocusIndicator: { true: { root: "focus-visible:!outline-hidden" } },
|
|
96
|
+
collapseBelow: {
|
|
97
|
+
"sm": {
|
|
98
|
+
root: "max-sm:gap-x-0 max-sm:p-(--rui-btn-collapsed-p) max-sm:![--rui-icon-size:var(--rui-btn-collapsed-icon)]",
|
|
99
|
+
label: "max-sm:sr-only"
|
|
100
|
+
},
|
|
101
|
+
"md": {
|
|
102
|
+
root: "max-md:gap-x-0 max-md:p-(--rui-btn-collapsed-p) max-md:![--rui-icon-size:var(--rui-btn-collapsed-icon)]",
|
|
103
|
+
label: "max-md:sr-only"
|
|
104
|
+
},
|
|
105
|
+
"lg": {
|
|
106
|
+
root: "max-lg:gap-x-0 max-lg:p-(--rui-btn-collapsed-p) max-lg:![--rui-icon-size:var(--rui-btn-collapsed-icon)]",
|
|
107
|
+
label: "max-lg:sr-only"
|
|
108
|
+
},
|
|
109
|
+
"xl": {
|
|
110
|
+
root: "max-xl:gap-x-0 max-xl:p-(--rui-btn-collapsed-p) max-xl:![--rui-icon-size:var(--rui-btn-collapsed-icon)]",
|
|
111
|
+
label: "max-xl:sr-only"
|
|
112
|
+
},
|
|
113
|
+
"2xl": {
|
|
114
|
+
root: "max-2xl:gap-x-0 max-2xl:p-(--rui-btn-collapsed-p) max-2xl:![--rui-icon-size:var(--rui-btn-collapsed-icon)]",
|
|
115
|
+
label: "max-2xl:sr-only"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
95
118
|
},
|
|
96
119
|
compoundVariants: [
|
|
97
120
|
{
|
|
@@ -125,7 +148,7 @@ var buttonStyles = tv({
|
|
|
125
148
|
},
|
|
126
149
|
{
|
|
127
150
|
loading: false,
|
|
128
|
-
variant: "text",
|
|
151
|
+
variant: ["text", "link"],
|
|
129
152
|
class: { root: "disabled:!bg-transparent dark:disabled:!bg-transparent disabled:active:!bg-transparent" }
|
|
130
153
|
},
|
|
131
154
|
{
|
|
@@ -165,7 +188,7 @@ var buttonStyles = tv({
|
|
|
165
188
|
{
|
|
166
189
|
color: "grey",
|
|
167
190
|
variant: "text",
|
|
168
|
-
class: { root: "text-rui-text-secondary" }
|
|
191
|
+
class: { root: "text-rui-text-secondary dark:text-rui-text-secondary" }
|
|
169
192
|
},
|
|
170
193
|
{
|
|
171
194
|
color: "primary",
|
|
@@ -425,6 +448,114 @@ var buttonStyles = tv({
|
|
|
425
448
|
icon: true,
|
|
426
449
|
size: "sm",
|
|
427
450
|
class: { root: "px-2 py-2" }
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
collapseBelow: [
|
|
454
|
+
"sm",
|
|
455
|
+
"md",
|
|
456
|
+
"lg",
|
|
457
|
+
"xl",
|
|
458
|
+
"2xl"
|
|
459
|
+
],
|
|
460
|
+
class: { root: "[--rui-btn-collapsed-p:0.5rem] [--rui-btn-collapsed-icon:1.25rem]" }
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
collapseBelow: [
|
|
464
|
+
"sm",
|
|
465
|
+
"md",
|
|
466
|
+
"lg",
|
|
467
|
+
"xl",
|
|
468
|
+
"2xl"
|
|
469
|
+
],
|
|
470
|
+
size: "xs",
|
|
471
|
+
class: { root: "[--rui-btn-collapsed-p:0.1875rem] [--rui-btn-collapsed-icon:0.875rem]" }
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
collapseBelow: [
|
|
475
|
+
"sm",
|
|
476
|
+
"md",
|
|
477
|
+
"lg",
|
|
478
|
+
"xl",
|
|
479
|
+
"2xl"
|
|
480
|
+
],
|
|
481
|
+
size: "sm",
|
|
482
|
+
class: { root: "[--rui-btn-collapsed-p:0.25rem] [--rui-btn-collapsed-icon:1.25rem]" }
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
collapseBelow: [
|
|
486
|
+
"sm",
|
|
487
|
+
"md",
|
|
488
|
+
"lg",
|
|
489
|
+
"xl",
|
|
490
|
+
"2xl"
|
|
491
|
+
],
|
|
492
|
+
size: "lg",
|
|
493
|
+
class: { root: "[--rui-btn-collapsed-p:0.375rem] [--rui-btn-collapsed-icon:1.5rem]" }
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
collapseBelow: [
|
|
497
|
+
"sm",
|
|
498
|
+
"md",
|
|
499
|
+
"lg",
|
|
500
|
+
"xl",
|
|
501
|
+
"2xl"
|
|
502
|
+
],
|
|
503
|
+
size: "xl",
|
|
504
|
+
class: { root: "[--rui-btn-collapsed-p:0.5rem] [--rui-btn-collapsed-icon:1.5rem]" }
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
collapseBelow: [
|
|
508
|
+
"sm",
|
|
509
|
+
"md",
|
|
510
|
+
"lg",
|
|
511
|
+
"xl",
|
|
512
|
+
"2xl"
|
|
513
|
+
],
|
|
514
|
+
size: "2xl",
|
|
515
|
+
class: { root: "[--rui-btn-collapsed-p:0.5rem] [--rui-btn-collapsed-icon:1.75rem]" }
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
variant: "link",
|
|
519
|
+
class: { root: [
|
|
520
|
+
"p-0 text-[length:inherit] leading-[inherit] ![--rui-icon-size:1em]",
|
|
521
|
+
"bg-transparent hover:bg-transparent active:bg-transparent",
|
|
522
|
+
"dark:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent"
|
|
523
|
+
].join(" ") }
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
color: "grey",
|
|
527
|
+
variant: "link",
|
|
528
|
+
class: { root: "text-rui-text dark:text-rui-text" }
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
color: "primary",
|
|
532
|
+
variant: "link",
|
|
533
|
+
class: { root: "text-rui-primary dark:text-rui-primary-lighter" }
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
color: "secondary",
|
|
537
|
+
variant: "link",
|
|
538
|
+
class: { root: "text-rui-secondary dark:text-rui-secondary-lighter" }
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
color: "error",
|
|
542
|
+
variant: "link",
|
|
543
|
+
class: { root: "text-rui-error dark:text-rui-error-lighter" }
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
color: "warning",
|
|
547
|
+
variant: "link",
|
|
548
|
+
class: { root: "text-rui-warning dark:text-rui-warning" }
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
color: "info",
|
|
552
|
+
variant: "link",
|
|
553
|
+
class: { root: "text-rui-info dark:text-rui-info" }
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
color: "success",
|
|
557
|
+
variant: "link",
|
|
558
|
+
class: { root: "text-rui-success dark:text-rui-success" }
|
|
428
559
|
}
|
|
429
560
|
],
|
|
430
561
|
compoundSlots: [
|