@rotki/ui-library 2.12.1 → 2.13.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.vue.d.ts +6 -14
- package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
- package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
- package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
- package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
- package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
- package/dist/components/alerts/RuiAlert.vue.d.ts +7 -17
- package/dist/components/alerts/RuiAlert.vue2.js +8 -16
- package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
- package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
- package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
- package/dist/components/calendar/RuiCalendar.vue.js +7 -8
- package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue2.js +20 -18
- package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue2.js +3 -4
- package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue2.js +48 -40
- package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
- package/dist/components/cards/RuiCard.vue.d.ts +9 -24
- package/dist/components/cards/RuiCard.vue2.js +7 -7
- package/dist/components/cards/RuiCard.vue2.js.map +1 -1
- package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
- package/dist/components/cards/RuiCardHeader.vue2.js +1 -1
- package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
- package/dist/components/chips/RuiChip.vue.d.ts +7 -21
- package/dist/components/chips/RuiChip.vue2.js +16 -21
- package/dist/components/chips/RuiChip.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue2.js +19 -19
- package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
- package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorHue.vue2.js +17 -14
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +9 -7
- package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
- package/dist/components/color-picker/RuiColorPicker.vue.js +23 -14
- package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
- package/dist/components/color-picker/utils.js +22 -5
- package/dist/components/color-picker/utils.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +75 -79
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +1 -1
- package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
- package/dist/components/date-time-picker/dayjs-setup.js +8 -0
- package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
- package/dist/components/date-time-picker/segment-config.d.ts +14 -0
- package/dist/components/date-time-picker/segment-config.js +23 -0
- package/dist/components/date-time-picker/segment-config.js.map +1 -0
- package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
- package/dist/components/date-time-picker/segment-utils.js +36 -0
- package/dist/components/date-time-picker/segment-utils.js.map +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
- package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
- package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
- package/dist/components/date-time-picker/utils.d.ts +1 -0
- package/dist/components/date-time-picker/utils.js +1 -0
- package/dist/components/date-time-picker/utils.js.map +1 -1
- package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
- package/dist/components/divider/RuiDivider.vue.js +6 -3
- package/dist/components/divider/RuiDivider.vue.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +10 -1138
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +153 -160
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +32 -32
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +2 -2
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +19 -22
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +4 -2
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +13 -16
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +7 -13
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +10 -9
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +10 -785
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +60 -56
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
- package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +11 -10
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +21 -26
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
- package/dist/components/forms/slider/RuiSlider.vue2.js +45 -48
- package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
- package/dist/components/forms/switch/RuiSwitch.vue2.js +22 -21
- package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
- package/dist/components/forms/text-area/RuiTextArea.vue2.js +47 -83
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -30
- package/dist/components/forms/text-field/RuiTextField.vue2.js +36 -67
- package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
- package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
- package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
- package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
- package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
- package/dist/components/icons/RuiIcon.vue2.js +11 -14
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
- package/dist/components/index.d.ts +4 -4
- package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +2 -2
- package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js +2 -2
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
- package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
- package/dist/components/logos/RuiLogo.vue.js +13 -13
- package/dist/components/logos/RuiLogo.vue.js.map +1 -1
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
- package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
- package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
- package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +22 -27
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +90 -67
- package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
- package/dist/components/overlays/menu/RuiMenu.vue2.js +71 -78
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +23 -30
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +78 -49
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
- package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
- package/dist/components/overlays/notification/RuiNotification.vue.js +27 -22
- package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +16 -9
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
- package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
- package/dist/components/progress/RuiProgress.vue2.js +18 -24
- package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
- package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
- package/dist/components/steppers/RuiFooterStepper.vue2.js +33 -26
- package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
- package/dist/components/steppers/RuiStepper.vue2.js +39 -36
- package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +2 -2
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperIcon.vue2.js +2 -2
- package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
- package/dist/components/tables/RuiDataTable.vue2.js +196 -601
- package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue3.js +24 -27
- package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
- package/dist/components/tables/RuiExpandButton.vue2.js +4 -2
- package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
- package/dist/components/tables/RuiTableHead.vue2.js +20 -20
- package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
- package/dist/components/tables/RuiTablePagination.vue2.js +27 -19
- package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
- package/dist/components/tabs/tab/RuiTab.vue2.js +84 -52
- package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +3 -2
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +2 -5
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
- package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
- package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
- package/dist/components/time-picker/RuiTimePicker.vue2.js +88 -38
- package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
- package/dist/composables/breakpoint.js +8 -13
- package/dist/composables/breakpoint.js.map +1 -1
- package/dist/composables/dropdown-menu.d.ts +7 -4
- package/dist/composables/dropdown-menu.js +73 -50
- package/dist/composables/dropdown-menu.js.map +1 -1
- package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
- package/dist/composables/forms/auto-complete/focus.js +28 -17
- package/dist/composables/forms/auto-complete/focus.js.map +1 -1
- package/dist/composables/forms/auto-complete/index.d.ts +0 -9
- package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
- package/dist/composables/forms/auto-complete/search.d.ts +7 -0
- package/dist/composables/forms/auto-complete/search.js +10 -8
- package/dist/composables/forms/auto-complete/search.js.map +1 -1
- package/dist/composables/forms/auto-complete/value.d.ts +4 -0
- package/dist/composables/forms/auto-complete/value.js +24 -42
- package/dist/composables/forms/auto-complete/value.js.map +1 -1
- package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
- package/dist/composables/forms/use-label-with-quote.js +14 -0
- package/dist/composables/forms/use-label-with-quote.js.map +1 -0
- package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
- package/dist/composables/forms/use-prepend-append-width.js +25 -0
- package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
- package/dist/composables/icons.js +1 -1
- package/dist/composables/icons.js.map +1 -1
- package/dist/composables/popper.js +63 -49
- package/dist/composables/popper.js.map +1 -1
- package/dist/composables/sticky-header.d.ts +7 -5
- package/dist/composables/sticky-header.js +51 -41
- package/dist/composables/sticky-header.js.map +1 -1
- package/dist/composables/tables/data-table/columns.d.ts +25 -0
- package/dist/composables/tables/data-table/columns.js +54 -0
- package/dist/composables/tables/data-table/columns.js.map +1 -0
- package/dist/composables/tables/data-table/expansion.d.ts +17 -0
- package/dist/composables/tables/data-table/expansion.js +38 -0
- package/dist/composables/tables/data-table/expansion.js.map +1 -0
- package/dist/composables/tables/data-table/grouping.d.ts +29 -0
- package/dist/composables/tables/data-table/grouping.js +136 -0
- package/dist/composables/tables/data-table/grouping.js.map +1 -0
- package/dist/composables/tables/data-table/pagination.d.ts +33 -0
- package/dist/composables/tables/data-table/pagination.js +119 -0
- package/dist/composables/tables/data-table/pagination.js.map +1 -0
- package/dist/composables/tables/data-table/selection.d.ts +29 -0
- package/dist/composables/tables/data-table/selection.js +164 -0
- package/dist/composables/tables/data-table/selection.js.map +1 -0
- package/dist/composables/tables/data-table/sort.d.ts +32 -0
- package/dist/composables/tables/data-table/sort.js +136 -0
- package/dist/composables/tables/data-table/sort.js.map +1 -0
- package/dist/composables/tables/data-table/types.d.ts +14 -0
- package/dist/composables/tables/data-table/types.js +11 -0
- package/dist/composables/tables/data-table/types.js.map +1 -0
- package/dist/composables/theme.js +5 -21
- package/dist/composables/theme.js.map +1 -1
- package/dist/composables/timeout-manager.d.ts +4 -2
- package/dist/composables/timeout-manager.js +2 -1
- package/dist/composables/timeout-manager.js.map +1 -1
- package/dist/icons/icons_1.d.ts +15 -15
- package/dist/icons/icons_1.js +123 -123
- package/dist/icons/icons_1.js.map +1 -1
- package/dist/icons/icons_2.d.ts +46 -46
- package/dist/icons/icons_2.js +301 -301
- package/dist/icons/icons_2.js.map +1 -1
- package/dist/icons/icons_3.d.ts +43 -43
- package/dist/icons/icons_3.js +252 -252
- package/dist/icons/icons_3.js.map +1 -1
- package/dist/icons/icons_4.d.ts +72 -2
- package/dist/icons/icons_4.js +368 -18
- package/dist/icons/icons_4.js.map +1 -1
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/icons/index.js.map +1 -1
- package/dist/index.js +105 -42
- package/dist/index.js.map +1 -1
- package/dist/style.css +189 -162
- package/dist/theme/index.js +15 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/utils/assert.d.ts +1 -1
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/form-text-detail.d.ts +9 -8
- package/dist/utils/form-text-detail.js +1 -2
- package/dist/utils/form-text-detail.js.map +1 -1
- package/dist/utils/helpers.d.ts +4 -32
- package/dist/utils/helpers.js +8 -9
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/is-equal.d.ts +1 -1
- package/dist/utils/is-equal.js +5 -3
- package/dist/utils/is-equal.js.map +1 -1
- package/dist/vite-plugin/index.js +4 -4
- package/dist/vite-plugin/index.js.map +1 -1
- package/dist/vite-plugin/scanner.js +3 -3
- package/dist/vite-plugin/scanner.js.map +1 -1
- package/dist/web-types.json +390 -371
- package/package.json +47 -44
- package/dist/utils/generate-id.d.ts +0 -5
- package/dist/utils/generate-id.js +0 -21
- package/dist/utils/generate-id.js.map +0 -1
package/dist/theme/index.js
CHANGED
|
@@ -60,7 +60,21 @@ const adaptiveTextColorsCombination = {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
const themePlugin = plugin(
|
|
63
|
-
({ addUtilities, addVariant, matchUtilities }) => {
|
|
63
|
+
({ addBase, addUtilities, addVariant, matchUtilities }) => {
|
|
64
|
+
const themeVariables = (theme) => Object.fromEntries([
|
|
65
|
+
...contextColors.flatMap((color) => [
|
|
66
|
+
[`--rui-${color}-main`, `var(--rui-${theme}-${color}-main)`],
|
|
67
|
+
[`--rui-${color}-darker`, `var(--rui-${theme}-${color}-darker)`],
|
|
68
|
+
[`--rui-${color}-lighter`, `var(--rui-${theme}-${color}-lighter)`]
|
|
69
|
+
]),
|
|
70
|
+
["--rui-text-primary", `var(--rui-${theme}-text-primary)`],
|
|
71
|
+
["--rui-text-secondary", `var(--rui-${theme}-text-secondary)`],
|
|
72
|
+
["--rui-text-disabled", `var(--rui-${theme}-text-disabled)`]
|
|
73
|
+
]);
|
|
74
|
+
addBase({
|
|
75
|
+
'html[data-theme="light"], html.light': themeVariables("light"),
|
|
76
|
+
'html[data-theme="dark"], html.dark': themeVariables("dark")
|
|
77
|
+
});
|
|
64
78
|
addUtilities({
|
|
65
79
|
".border-default": {
|
|
66
80
|
"border-color": "rgb(var(--rui-grey-200))"
|
package/dist/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/theme/index.ts"],"sourcesContent":["import plugin from 'tailwindcss/plugin';\nimport {\n baseColors,\n baseColorsIntensities,\n contextColors,\n} from '../consts/colors';\n\nconst baseColorsCombination = Object.fromEntries(\n baseColors.map((color: string) => [\n color,\n Object.fromEntries(\n baseColorsIntensities.map((intensity: string) => [\n intensity,\n `rgba(var(--rui-${color}-${intensity}), <alpha-value>)`,\n ]),\n ),\n ]),\n);\n\nconst contextColorsCombination = Object.fromEntries(\n ['light', 'dark'].map(theme => [\n theme,\n Object.fromEntries(\n contextColors.map(color => [\n color,\n {\n darker: `rgba(var(--rui-${theme}-${color}-darker), <alpha-value>)`,\n DEFAULT: `rgba(var(--rui-${theme}-${color}-main), <alpha-value>)`,\n lighter: `rgba(var(--rui-${theme}-${color}-lighter), <alpha-value>)`,\n shade: `color-mix(in srgb, black calc(<alpha-value> * 100%), rgb(var(--rui-${theme}-${color}-main)))`,\n tint: `color-mix(in srgb, white calc(<alpha-value> * 100%), rgb(var(--rui-${theme}-${color}-main)))`,\n },\n ]),\n ),\n ]),\n);\n\nconst adaptiveContextColorCombination = Object.fromEntries(\n contextColors.map(color => [\n color,\n {\n darker: `rgba(var(--rui-${color}-darker), <alpha-value>)`,\n DEFAULT: `rgba(var(--rui-${color}-main), <alpha-value>)`,\n lighter: `rgba(var(--rui-${color}-lighter), <alpha-value>)`,\n shade: `color-mix(in srgb, black calc(<alpha-value> * 100%), rgb(var(--rui-${color}-main)))`,\n tint: `color-mix(in srgb, white calc(<alpha-value> * 100%), rgb(var(--rui-${color}-main)))`,\n },\n ]),\n);\n\nconst textColorsCombination = Object.fromEntries(\n ['light', 'dark'].map(theme => [\n theme,\n {\n text: {\n DEFAULT: `var(--rui-${theme}-text-primary)`,\n disabled: `var(--rui-${theme}-text-disabled)`,\n secondary: `var(--rui-${theme}-text-secondary)`,\n },\n },\n ]),\n);\n\nconst adaptiveTextColorsCombination = {\n text: {\n DEFAULT: `var(--rui-text-primary)`,\n disabled: `var(--rui-text-disabled)`,\n secondary: `var(--rui-text-secondary)`,\n },\n};\n\nconst themePlugin = plugin(\n ({ addUtilities, addVariant, matchUtilities }) => {\n // Border utilities\n addUtilities({\n '.border-default': {\n 'border-color': 'rgb(var(--rui-grey-200))',\n },\n '.dark .border-default': {\n 'border-color': 'rgb(var(--rui-grey-800))',\n },\n });\n\n // Typography\n addUtilities({\n '.text-body-1': {\n '@apply text-base': {},\n },\n '.text-body-2': {\n '@apply text-sm': {},\n },\n '.text-caption': {\n '@apply text-xs': {},\n 'line-height': '1.25rem',\n },\n '.text-h1': {\n '@apply text-8xl font-light': {},\n 'line-height': '7rem',\n },\n '.text-h2': {\n '@apply text-6xl font-light': {},\n 'line-height': '4.5rem',\n },\n '.text-h3': {\n '@apply text-5xl': {},\n 'line-height': '3.5rem',\n },\n '.text-h4': {\n '@apply text-4xl font-semibold': {},\n 'line-height': '2.625rem',\n },\n '.text-h5': {\n '@apply text-2xl': {},\n 'line-height': '2rem',\n },\n '.text-h6': {\n '@apply text-xl font-medium': {},\n 'line-height': '2rem',\n },\n '.text-overline': {\n '@apply text-xs uppercase': {},\n 'line-height': '2rem',\n },\n '.text-subtitle-1': {\n '@apply text-base': {},\n 'line-height': '1.75rem',\n },\n '.text-subtitle-2': {\n '@apply text-sm font-medium': {},\n 'line-height': '1.25rem',\n },\n });\n\n // Tint and Shade Colors\n matchUtilities(\n Object.fromEntries(\n ['bg-tint', 'bg-shade', 'text-tint', 'text-shade'].map(item => [\n item,\n value => ({\n animation: `${item} 1s calc(${value} * -1s) linear forwards paused`,\n }),\n ]),\n ),\n );\n addVariant('color-mix-supported', '@supports (color-mix())');\n },\n {\n theme: {\n extend: {\n boxShadow: {\n 1: '0px 2px 1px -1px var(--rui-shadow-primary), 0px 1px 1px var(--rui-shadow-secondary), 0px 1px 3px var(--rui-shadow-tertiary)',\n 10: '0px 6px 6px -3px var(--rui-shadow-primary), 0px 10px 14px 1px var(--rui-shadow-secondary), 0px 4px 18px 3px var(--rui-shadow-tertiary)',\n 11: '0px 6px 7px -4px var(--rui-shadow-primary), 0px 11px 15px 1px var(--rui-shadow-secondary), 0px 4px 20px 3px var(--rui-shadow-tertiary)',\n 12: '0px 7px 8px -4px var(--rui-shadow-primary), 0px 12px 17px 2px var(--rui-shadow-secondary), 0px 5px 22px 4px var(--rui-shadow-tertiary)',\n 13: '0px 7px 8px -4px var(--rui-shadow-primary), 0px 13px 19px 2px var(--rui-shadow-secondary), 0px 5px 24px 4px var(--rui-shadow-tertiary)',\n 14: '0px 7px 9px -4px var(--rui-shadow-primary), 0px 14px 21px 2px var(--rui-shadow-secondary), 0px 5px 26px 4px var(--rui-shadow-tertiary)',\n 15: '0px 8px 9px -5px var(--rui-shadow-primary), 0px 15px 22px 2px var(--rui-shadow-secondary), 0px 6px 28px 5px var(--rui-shadow-tertiary)',\n 16: '0px 8px 10px -5px var(--rui-shadow-primary), 0px 16px 24px 2px var(--rui-shadow-secondary), 0px 6px 30px 5px var(--rui-shadow-tertiary)',\n 17: '0px 8px 11px -5px var(--rui-shadow-primary), 0px 17px 26px 2px var(--rui-shadow-secondary), 0px 6px 32px 5px var(--rui-shadow-tertiary)',\n 18: '0px 9px 11px -5px var(--rui-shadow-primary), 0px 18px 28px 2px var(--rui-shadow-secondary), 0px 7px 34px 6px var(--rui-shadow-tertiary)',\n 19: '0px 9px 12px -6px var(--rui-shadow-primary), 0px 19px 29px 2px var(--rui-shadow-secondary), 0px 7px 36px 6px var(--rui-shadow-tertiary)',\n 2: '0px 3px 1px -2px var(--rui-shadow-primary), 0px 2px 2px var(--rui-shadow-secondary), 0px 1px 5px var(--rui-shadow-tertiary)',\n 20: '0px 10px 13px -6px var(--rui-shadow-primary), 0px 20px 31px 3px var(--rui-shadow-secondary), 0px 8px 38px 7px var(--rui-shadow-tertiary)',\n 21: '0px 10px 13px -6px var(--rui-shadow-primary), 0px 21px 33px 3px var(--rui-shadow-secondary), 0px 8px 40px 7px var(--rui-shadow-tertiary)',\n 22: '0px 10px 14px -6px var(--rui-shadow-primary), 0px 22px 35px 3px var(--rui-shadow-secondary), 0px 8px 42px 7px var(--rui-shadow-tertiary)',\n 23: '0px 11px 14px -7px var(--rui-shadow-primary), 0px 23px 36px 3px var(--rui-shadow-secondary), 0px 9px 44px 8px var(--rui-shadow-tertiary)',\n 24: '0px 11px 15px -7px var(--rui-shadow-primary), 0px 24px 38px 3px var(--rui-shadow-secondary), 0px 9px 46px 8px var(--rui-shadow-tertiary)',\n 3: '0px 3px 3px -2px var(--rui-shadow-primary), 0px 3px 4px var(--rui-shadow-secondary), 0px 1px 8px var(--rui-shadow-tertiary)',\n 4: '0px 2px 4px -1px var(--rui-shadow-primary), 0px 4px 5px var(--rui-shadow-secondary), 0px 1px 10px var(--rui-shadow-tertiary)',\n 5: '0px 3px 5px -1px var(--rui-shadow-primary), 0px 5px 8px var(--rui-shadow-secondary), 0px 1px 14px var(--rui-shadow-tertiary)',\n 6: '0px 3px 5px -1px var(--rui-shadow-primary), 0px 6px 10px var(--rui-shadow-secondary), 0px 1px 18px var(--rui-shadow-tertiary)',\n 7: '0px 4px 5px -2px var(--rui-shadow-primary), 0px 7px 10px 1px var(--rui-shadow-secondary), 0px 2px 16px 1px var(--rui-shadow-tertiary)',\n 8: '0px 5px 5px -3px var(--rui-shadow-primary), 0px 8px 10px 1px var(--rui-shadow-secondary), 0px 3px 14px 2px var(--rui-shadow-tertiary)',\n 9: '0px 5px 6px -3px var(--rui-shadow-primary), 0px 9px 12px 1px var(--rui-shadow-secondary), 0px 3px 16px 2px var(--rui-shadow-tertiary)',\n },\n colors: {\n rui: {\n ...baseColorsCombination,\n ...contextColorsCombination,\n ...textColorsCombination,\n dark: {\n ...contextColorsCombination.dark,\n ...textColorsCombination.dark,\n },\n light: {\n ...contextColorsCombination.light,\n ...textColorsCombination.light,\n },\n ...adaptiveContextColorCombination,\n ...adaptiveTextColorsCombination,\n },\n },\n },\n },\n },\n);\n\nexport default themePlugin;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/theme/index.ts"],"sourcesContent":["import plugin from 'tailwindcss/plugin';\nimport {\n baseColors,\n baseColorsIntensities,\n contextColors,\n} from '../consts/colors';\n\nconst baseColorsCombination = Object.fromEntries(\n baseColors.map((color: string) => [\n color,\n Object.fromEntries(\n baseColorsIntensities.map((intensity: string) => [\n intensity,\n `rgba(var(--rui-${color}-${intensity}), <alpha-value>)`,\n ]),\n ),\n ]),\n);\n\nconst contextColorsCombination = Object.fromEntries(\n ['light', 'dark'].map(theme => [\n theme,\n Object.fromEntries(\n contextColors.map(color => [\n color,\n {\n darker: `rgba(var(--rui-${theme}-${color}-darker), <alpha-value>)`,\n DEFAULT: `rgba(var(--rui-${theme}-${color}-main), <alpha-value>)`,\n lighter: `rgba(var(--rui-${theme}-${color}-lighter), <alpha-value>)`,\n shade: `color-mix(in srgb, black calc(<alpha-value> * 100%), rgb(var(--rui-${theme}-${color}-main)))`,\n tint: `color-mix(in srgb, white calc(<alpha-value> * 100%), rgb(var(--rui-${theme}-${color}-main)))`,\n },\n ]),\n ),\n ]),\n);\n\nconst adaptiveContextColorCombination = Object.fromEntries(\n contextColors.map(color => [\n color,\n {\n darker: `rgba(var(--rui-${color}-darker), <alpha-value>)`,\n DEFAULT: `rgba(var(--rui-${color}-main), <alpha-value>)`,\n lighter: `rgba(var(--rui-${color}-lighter), <alpha-value>)`,\n shade: `color-mix(in srgb, black calc(<alpha-value> * 100%), rgb(var(--rui-${color}-main)))`,\n tint: `color-mix(in srgb, white calc(<alpha-value> * 100%), rgb(var(--rui-${color}-main)))`,\n },\n ]),\n);\n\nconst textColorsCombination = Object.fromEntries(\n ['light', 'dark'].map(theme => [\n theme,\n {\n text: {\n DEFAULT: `var(--rui-${theme}-text-primary)`,\n disabled: `var(--rui-${theme}-text-disabled)`,\n secondary: `var(--rui-${theme}-text-secondary)`,\n },\n },\n ]),\n);\n\nconst adaptiveTextColorsCombination = {\n text: {\n DEFAULT: `var(--rui-text-primary)`,\n disabled: `var(--rui-text-disabled)`,\n secondary: `var(--rui-text-secondary)`,\n },\n};\n\nconst themePlugin = plugin(\n ({ addBase, addUtilities, addVariant, matchUtilities }) => {\n // Adaptive theme variable aliases\n const themeVariables = (theme: 'light' | 'dark'): Record<string, string> =>\n Object.fromEntries([\n ...contextColors.flatMap(color => [\n [`--rui-${color}-main`, `var(--rui-${theme}-${color}-main)`],\n [`--rui-${color}-darker`, `var(--rui-${theme}-${color}-darker)`],\n [`--rui-${color}-lighter`, `var(--rui-${theme}-${color}-lighter)`],\n ]),\n ['--rui-text-primary', `var(--rui-${theme}-text-primary)`],\n ['--rui-text-secondary', `var(--rui-${theme}-text-secondary)`],\n ['--rui-text-disabled', `var(--rui-${theme}-text-disabled)`],\n ]);\n\n addBase({\n 'html[data-theme=\"light\"], html.light': themeVariables('light'),\n 'html[data-theme=\"dark\"], html.dark': themeVariables('dark'),\n });\n\n // Border utilities\n addUtilities({\n '.border-default': {\n 'border-color': 'rgb(var(--rui-grey-200))',\n },\n '.dark .border-default': {\n 'border-color': 'rgb(var(--rui-grey-800))',\n },\n });\n\n // Typography\n addUtilities({\n '.text-body-1': {\n '@apply text-base': {},\n },\n '.text-body-2': {\n '@apply text-sm': {},\n },\n '.text-caption': {\n '@apply text-xs': {},\n 'line-height': '1.25rem',\n },\n '.text-h1': {\n '@apply text-8xl font-light': {},\n 'line-height': '7rem',\n },\n '.text-h2': {\n '@apply text-6xl font-light': {},\n 'line-height': '4.5rem',\n },\n '.text-h3': {\n '@apply text-5xl': {},\n 'line-height': '3.5rem',\n },\n '.text-h4': {\n '@apply text-4xl font-semibold': {},\n 'line-height': '2.625rem',\n },\n '.text-h5': {\n '@apply text-2xl': {},\n 'line-height': '2rem',\n },\n '.text-h6': {\n '@apply text-xl font-medium': {},\n 'line-height': '2rem',\n },\n '.text-overline': {\n '@apply text-xs uppercase': {},\n 'line-height': '2rem',\n },\n '.text-subtitle-1': {\n '@apply text-base': {},\n 'line-height': '1.75rem',\n },\n '.text-subtitle-2': {\n '@apply text-sm font-medium': {},\n 'line-height': '1.25rem',\n },\n });\n\n // Tint and Shade Colors\n matchUtilities(\n Object.fromEntries(\n ['bg-tint', 'bg-shade', 'text-tint', 'text-shade'].map(item => [\n item,\n value => ({\n animation: `${item} 1s calc(${value} * -1s) linear forwards paused`,\n }),\n ]),\n ),\n );\n addVariant('color-mix-supported', '@supports (color-mix())');\n },\n {\n theme: {\n extend: {\n boxShadow: {\n 1: '0px 2px 1px -1px var(--rui-shadow-primary), 0px 1px 1px var(--rui-shadow-secondary), 0px 1px 3px var(--rui-shadow-tertiary)',\n 10: '0px 6px 6px -3px var(--rui-shadow-primary), 0px 10px 14px 1px var(--rui-shadow-secondary), 0px 4px 18px 3px var(--rui-shadow-tertiary)',\n 11: '0px 6px 7px -4px var(--rui-shadow-primary), 0px 11px 15px 1px var(--rui-shadow-secondary), 0px 4px 20px 3px var(--rui-shadow-tertiary)',\n 12: '0px 7px 8px -4px var(--rui-shadow-primary), 0px 12px 17px 2px var(--rui-shadow-secondary), 0px 5px 22px 4px var(--rui-shadow-tertiary)',\n 13: '0px 7px 8px -4px var(--rui-shadow-primary), 0px 13px 19px 2px var(--rui-shadow-secondary), 0px 5px 24px 4px var(--rui-shadow-tertiary)',\n 14: '0px 7px 9px -4px var(--rui-shadow-primary), 0px 14px 21px 2px var(--rui-shadow-secondary), 0px 5px 26px 4px var(--rui-shadow-tertiary)',\n 15: '0px 8px 9px -5px var(--rui-shadow-primary), 0px 15px 22px 2px var(--rui-shadow-secondary), 0px 6px 28px 5px var(--rui-shadow-tertiary)',\n 16: '0px 8px 10px -5px var(--rui-shadow-primary), 0px 16px 24px 2px var(--rui-shadow-secondary), 0px 6px 30px 5px var(--rui-shadow-tertiary)',\n 17: '0px 8px 11px -5px var(--rui-shadow-primary), 0px 17px 26px 2px var(--rui-shadow-secondary), 0px 6px 32px 5px var(--rui-shadow-tertiary)',\n 18: '0px 9px 11px -5px var(--rui-shadow-primary), 0px 18px 28px 2px var(--rui-shadow-secondary), 0px 7px 34px 6px var(--rui-shadow-tertiary)',\n 19: '0px 9px 12px -6px var(--rui-shadow-primary), 0px 19px 29px 2px var(--rui-shadow-secondary), 0px 7px 36px 6px var(--rui-shadow-tertiary)',\n 2: '0px 3px 1px -2px var(--rui-shadow-primary), 0px 2px 2px var(--rui-shadow-secondary), 0px 1px 5px var(--rui-shadow-tertiary)',\n 20: '0px 10px 13px -6px var(--rui-shadow-primary), 0px 20px 31px 3px var(--rui-shadow-secondary), 0px 8px 38px 7px var(--rui-shadow-tertiary)',\n 21: '0px 10px 13px -6px var(--rui-shadow-primary), 0px 21px 33px 3px var(--rui-shadow-secondary), 0px 8px 40px 7px var(--rui-shadow-tertiary)',\n 22: '0px 10px 14px -6px var(--rui-shadow-primary), 0px 22px 35px 3px var(--rui-shadow-secondary), 0px 8px 42px 7px var(--rui-shadow-tertiary)',\n 23: '0px 11px 14px -7px var(--rui-shadow-primary), 0px 23px 36px 3px var(--rui-shadow-secondary), 0px 9px 44px 8px var(--rui-shadow-tertiary)',\n 24: '0px 11px 15px -7px var(--rui-shadow-primary), 0px 24px 38px 3px var(--rui-shadow-secondary), 0px 9px 46px 8px var(--rui-shadow-tertiary)',\n 3: '0px 3px 3px -2px var(--rui-shadow-primary), 0px 3px 4px var(--rui-shadow-secondary), 0px 1px 8px var(--rui-shadow-tertiary)',\n 4: '0px 2px 4px -1px var(--rui-shadow-primary), 0px 4px 5px var(--rui-shadow-secondary), 0px 1px 10px var(--rui-shadow-tertiary)',\n 5: '0px 3px 5px -1px var(--rui-shadow-primary), 0px 5px 8px var(--rui-shadow-secondary), 0px 1px 14px var(--rui-shadow-tertiary)',\n 6: '0px 3px 5px -1px var(--rui-shadow-primary), 0px 6px 10px var(--rui-shadow-secondary), 0px 1px 18px var(--rui-shadow-tertiary)',\n 7: '0px 4px 5px -2px var(--rui-shadow-primary), 0px 7px 10px 1px var(--rui-shadow-secondary), 0px 2px 16px 1px var(--rui-shadow-tertiary)',\n 8: '0px 5px 5px -3px var(--rui-shadow-primary), 0px 8px 10px 1px var(--rui-shadow-secondary), 0px 3px 14px 2px var(--rui-shadow-tertiary)',\n 9: '0px 5px 6px -3px var(--rui-shadow-primary), 0px 9px 12px 1px var(--rui-shadow-secondary), 0px 3px 16px 2px var(--rui-shadow-tertiary)',\n },\n colors: {\n rui: {\n ...baseColorsCombination,\n ...contextColorsCombination,\n ...textColorsCombination,\n dark: {\n ...contextColorsCombination.dark,\n ...textColorsCombination.dark,\n },\n light: {\n ...contextColorsCombination.light,\n ...textColorsCombination.light,\n },\n ...adaptiveContextColorCombination,\n ...adaptiveTextColorsCombination,\n },\n },\n },\n },\n },\n);\n\nexport default themePlugin;\n"],"names":[],"mappings":"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"}
|
package/dist/utils/assert.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function assert(condition:
|
|
1
|
+
export declare function assert(condition: unknown, msg?: string): asserts condition;
|
package/dist/utils/assert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.js","sources":["../../src/utils/assert.ts"],"sourcesContent":["class AssertionError extends Error {\n constructor(msg?: string) {\n super(msg ?? 'AssertionError');\n this.name = 'AssertionError';\n }\n}\n\nexport function assert(condition:
|
|
1
|
+
{"version":3,"file":"assert.js","sources":["../../src/utils/assert.ts"],"sourcesContent":["class AssertionError extends Error {\n constructor(msg?: string) {\n super(msg ?? 'AssertionError');\n this.name = 'AssertionError';\n }\n}\n\nexport function assert(condition: unknown, msg?: string): asserts condition {\n if (!condition)\n throw new AssertionError(msg);\n}\n"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,MAAM;AAAA,EACjC,YAAY,KAAc;AACxB,UAAM,OAAO,gBAAgB;AAC7B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,OAAO,WAAoB,KAAiC;AAC1E,MAAI,CAAC;AACH,UAAM,IAAI,eAAe,GAAG;AAChC;"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { MaybeRef } from 'vue';
|
|
2
|
-
export
|
|
3
|
-
formattedErrorMessages:
|
|
4
|
-
formattedSuccessMessages:
|
|
5
|
-
hasError:
|
|
6
|
-
hasMessages:
|
|
7
|
-
hasSuccess:
|
|
8
|
-
}
|
|
1
|
+
import type { ComputedRef, MaybeRef } from 'vue';
|
|
2
|
+
export interface FormTextDetailReturn {
|
|
3
|
+
formattedErrorMessages: ComputedRef<string[]>;
|
|
4
|
+
formattedSuccessMessages: ComputedRef<string[]>;
|
|
5
|
+
hasError: ComputedRef<boolean>;
|
|
6
|
+
hasMessages: ComputedRef<boolean>;
|
|
7
|
+
hasSuccess: ComputedRef<boolean>;
|
|
8
|
+
}
|
|
9
|
+
export declare function useFormTextDetail(errorMessages: MaybeRef<string | string[]>, successMessages: MaybeRef<string | string[]>): FormTextDetailReturn;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { logicOr } from "@vueuse/math";
|
|
2
1
|
import { computed } from "vue";
|
|
3
2
|
import { get } from "@vueuse/shared";
|
|
4
3
|
function useFormTextDetail(errorMessages, successMessages) {
|
|
@@ -16,7 +15,7 @@ function useFormTextDetail(errorMessages, successMessages) {
|
|
|
16
15
|
});
|
|
17
16
|
const hasError = computed(() => get(formattedErrorMessages).length > 0);
|
|
18
17
|
const hasSuccess = computed(() => get(formattedSuccessMessages).length > 0);
|
|
19
|
-
const hasMessages =
|
|
18
|
+
const hasMessages = computed(() => get(hasError) || get(hasSuccess));
|
|
20
19
|
return {
|
|
21
20
|
formattedErrorMessages,
|
|
22
21
|
formattedSuccessMessages,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-text-detail.js","sources":["../../src/utils/form-text-detail.ts"],"sourcesContent":["import type { MaybeRef } from 'vue';\
|
|
1
|
+
{"version":3,"file":"form-text-detail.js","sources":["../../src/utils/form-text-detail.ts"],"sourcesContent":["import type { ComputedRef, MaybeRef } from 'vue';\n\nexport interface FormTextDetailReturn {\n formattedErrorMessages: ComputedRef<string[]>;\n formattedSuccessMessages: ComputedRef<string[]>;\n hasError: ComputedRef<boolean>;\n hasMessages: ComputedRef<boolean>;\n hasSuccess: ComputedRef<boolean>;\n}\n\nexport function useFormTextDetail(\n errorMessages: MaybeRef<string | string[]>,\n successMessages: MaybeRef<string | string[]>,\n): FormTextDetailReturn {\n const formattedErrorMessages = computed<string[]>(() => {\n let errorMessagesVal = get(errorMessages);\n if (typeof errorMessagesVal === 'string')\n errorMessagesVal = [errorMessagesVal];\n\n return errorMessagesVal.filter(item => !!item);\n });\n\n const formattedSuccessMessages = computed<string[]>(() => {\n let successMessagesVal = get(successMessages);\n if (typeof successMessagesVal === 'string')\n successMessagesVal = [successMessagesVal];\n\n return successMessagesVal.filter(item => !!item);\n });\n\n const hasError = computed<boolean>(() => get(formattedErrorMessages).length > 0);\n\n const hasSuccess = computed<boolean>(() => get(formattedSuccessMessages).length > 0);\n const hasMessages = computed<boolean>(() => get(hasError) || get(hasSuccess));\n\n return {\n formattedErrorMessages,\n formattedSuccessMessages,\n hasError,\n hasMessages,\n hasSuccess,\n };\n}\n"],"names":[],"mappings":";;AAUO,SAAS,kBACd,eACA,iBACsB;AACtB,QAAM,yBAAyB,SAAmB,MAAM;AACtD,QAAI,mBAAmB,IAAI,aAAa;AACxC,QAAI,OAAO,qBAAqB;AAC9B,yBAAmB,CAAC,gBAAgB;AAEtC,WAAO,iBAAiB,OAAO,CAAA,SAAQ,CAAC,CAAC,IAAI;AAAA,EAC/C,CAAC;AAED,QAAM,2BAA2B,SAAmB,MAAM;AACxD,QAAI,qBAAqB,IAAI,eAAe;AAC5C,QAAI,OAAO,uBAAuB;AAChC,2BAAqB,CAAC,kBAAkB;AAE1C,WAAO,mBAAmB,OAAO,CAAA,SAAQ,CAAC,CAAC,IAAI;AAAA,EACjD,CAAC;AAED,QAAM,WAAW,SAAkB,MAAM,IAAI,sBAAsB,EAAE,SAAS,CAAC;AAE/E,QAAM,aAAa,SAAkB,MAAM,IAAI,wBAAwB,EAAE,SAAS,CAAC;AACnF,QAAM,cAAc,SAAkB,MAAM,IAAI,QAAQ,KAAK,IAAI,UAAU,CAAC;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -1,60 +1,32 @@
|
|
|
1
1
|
import type { SetupContext } from 'vue';
|
|
2
|
-
interface CurrencyOptions {
|
|
3
|
-
currency?: string;
|
|
4
|
-
locale?: string;
|
|
5
|
-
style?: Intl.NumberFormatOptionsStyle;
|
|
6
|
-
fractionDigits?: number;
|
|
7
|
-
}
|
|
8
2
|
type SetupContextAttrs = SetupContext['attrs'];
|
|
9
3
|
type SetupContextAttrsKeys = (keyof SetupContextAttrs)[];
|
|
10
|
-
/**
|
|
11
|
-
* Format number value to specified currency format
|
|
12
|
-
* @param {number} amount
|
|
13
|
-
* @param {CurrencyOptions} options
|
|
14
|
-
*/
|
|
15
|
-
export declare function formatCurrency(amount: number | string, { currency, fractionDigits, locale, style, }: CurrencyOptions): string;
|
|
16
|
-
/**
|
|
17
|
-
* Format number value
|
|
18
|
-
* @param {number} amount
|
|
19
|
-
* @param {CurrencyOptions} options
|
|
20
|
-
*/
|
|
21
|
-
export declare function formatNumber(amount: number | string, { fractionDigits }: CurrencyOptions): string;
|
|
22
4
|
/**
|
|
23
5
|
* Format number value without fraction
|
|
24
6
|
* @param {number} amount
|
|
25
7
|
*/
|
|
26
8
|
export declare function formatInteger(amount: number | string): string;
|
|
27
|
-
/**
|
|
28
|
-
* Generates and returns the array of root allowed attributes
|
|
29
|
-
* @param {SetupContextAttrs} data
|
|
30
|
-
* @returns {SetupContextAttrsKeys}
|
|
31
|
-
*/
|
|
32
|
-
export declare function getRootKeys(data: SetupContextAttrs): SetupContextAttrsKeys;
|
|
33
9
|
/**
|
|
34
10
|
* Picks only required attributes for root element
|
|
35
11
|
* @param {SetupContextAttrs} data
|
|
36
12
|
* @param {SetupContextAttrsKeys} include
|
|
37
13
|
* @returns {Pick<SetupContextAttrs, any>}
|
|
38
14
|
*/
|
|
39
|
-
export declare function getRootAttrs(data: SetupContextAttrs, include?: SetupContextAttrsKeys): Pick<
|
|
40
|
-
[x: string]: unknown;
|
|
41
|
-
}, string>;
|
|
15
|
+
export declare function getRootAttrs(data: SetupContextAttrs, include?: SetupContextAttrsKeys): Pick<import("vue").Attrs, string>;
|
|
42
16
|
/**
|
|
43
17
|
* Omits root attributes from component's attributes
|
|
44
18
|
* @param {SetupContextAttrs} data
|
|
45
19
|
* @param {SetupContextAttrsKeys} exclude
|
|
46
20
|
* @returns {Omit<SetupContextAttrs, any>}
|
|
47
21
|
*/
|
|
48
|
-
export declare function getNonRootAttrs(data: SetupContextAttrs, exclude?: SetupContextAttrsKeys): Omit<
|
|
49
|
-
[x: string]: unknown;
|
|
50
|
-
}, string>;
|
|
22
|
+
export declare function getNonRootAttrs(data: SetupContextAttrs, exclude?: SetupContextAttrsKeys): Omit<import("vue").Attrs, string>;
|
|
51
23
|
/**
|
|
52
24
|
* Transforms the keys of an object to either camelCase or snake_case
|
|
53
25
|
* @param {T} item
|
|
54
26
|
* @param {"camelCase" | "snake_case"} to
|
|
55
27
|
* @returns {Record<string, any>}
|
|
56
28
|
*/
|
|
57
|
-
export declare function transformCase<T extends object>(item: T, to: 'camelCase' | 'snake_case'): Record<string,
|
|
29
|
+
export declare function transformCase<T extends object>(item: T, to: 'camelCase' | 'snake_case'): Record<string, T[keyof T]>;
|
|
58
30
|
/**
|
|
59
31
|
*
|
|
60
32
|
* @param {string} string - String to convert
|
|
@@ -62,6 +34,6 @@ export declare function transformCase<T extends object>(item: T, to: 'camelCase'
|
|
|
62
34
|
* @example
|
|
63
35
|
* getTextToken('this is a sentence'); // thisisasentence
|
|
64
36
|
*/
|
|
65
|
-
export declare function getTextToken(string:
|
|
37
|
+
export declare function getTextToken(string: unknown): string;
|
|
66
38
|
export declare function transformPropsUnit(value?: string | number): string | undefined;
|
|
67
39
|
export {};
|
package/dist/utils/helpers.js
CHANGED
|
@@ -10,9 +10,7 @@ function formatInteger(amount) {
|
|
|
10
10
|
return formatNumber(amount, { fractionDigits: 0 });
|
|
11
11
|
}
|
|
12
12
|
function getRootKeys(data) {
|
|
13
|
-
return Object.keys(data).filter(
|
|
14
|
-
(key) => key.startsWith("data-")
|
|
15
|
-
);
|
|
13
|
+
return Object.keys(data).filter((key) => key.startsWith("data-"));
|
|
16
14
|
}
|
|
17
15
|
function getRootAttrs(data, include = ["class"]) {
|
|
18
16
|
return objectPick(data, [...getRootKeys(data), ...include]);
|
|
@@ -23,10 +21,13 @@ function getNonRootAttrs(data, exclude = ["class"]) {
|
|
|
23
21
|
function transformCase(item, to) {
|
|
24
22
|
if (!item)
|
|
25
23
|
return item;
|
|
26
|
-
return Object.keys(item).reduce(
|
|
27
|
-
acc
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
return Object.keys(item).reduce(
|
|
25
|
+
(acc, curr) => {
|
|
26
|
+
acc[camelCase(curr)] = item[curr];
|
|
27
|
+
return acc;
|
|
28
|
+
},
|
|
29
|
+
{}
|
|
30
|
+
);
|
|
30
31
|
}
|
|
31
32
|
function getTextToken(string) {
|
|
32
33
|
if (!string)
|
|
@@ -40,10 +41,8 @@ function transformPropsUnit(value) {
|
|
|
40
41
|
}
|
|
41
42
|
export {
|
|
42
43
|
formatInteger,
|
|
43
|
-
formatNumber,
|
|
44
44
|
getNonRootAttrs,
|
|
45
45
|
getRootAttrs,
|
|
46
|
-
getRootKeys,
|
|
47
46
|
getTextToken,
|
|
48
47
|
transformCase,
|
|
49
48
|
transformPropsUnit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../src/utils/helpers.ts"],"sourcesContent":["import type { SetupContext } from 'vue';\nimport { objectOmit, objectPick } from '@vueuse/shared';\nimport { camelCase, snakeCase } from 'scule';\n\ninterface
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../src/utils/helpers.ts"],"sourcesContent":["import type { SetupContext } from 'vue';\nimport { objectOmit, objectPick } from '@vueuse/shared';\nimport { camelCase, snakeCase } from 'scule';\n\ninterface FormatNumberOptions {\n fractionDigits?: number;\n}\n\ntype SetupContextAttrs = SetupContext['attrs'];\n\ntype SetupContextAttrsKeys = (keyof SetupContextAttrs)[];\n\nfunction formatNumber(\n amount: number | string,\n { fractionDigits = 2 }: FormatNumberOptions,\n): string {\n return new Intl.NumberFormat(undefined, {\n maximumFractionDigits: fractionDigits,\n minimumFractionDigits: fractionDigits,\n }).format(Number(amount));\n}\n\n/**\n * Format number value without fraction\n * @param {number} amount\n */\nexport function formatInteger(amount: number | string): string {\n return formatNumber(amount, { fractionDigits: 0 });\n}\n\n/**\n * Generates and returns the array of root allowed attributes\n * @param {SetupContextAttrs} data\n * @returns {SetupContextAttrsKeys}\n */\nfunction getRootKeys(data: SetupContextAttrs): SetupContextAttrsKeys {\n return Object.keys(data).filter(key => key.startsWith('data-')) as SetupContextAttrsKeys;\n}\n\n/**\n * Picks only required attributes for root element\n * @param {SetupContextAttrs} data\n * @param {SetupContextAttrsKeys} include\n * @returns {Pick<SetupContextAttrs, any>}\n */\nexport function getRootAttrs(data: SetupContextAttrs, include: SetupContextAttrsKeys = ['class']) {\n return objectPick(data, [...getRootKeys(data), ...include]);\n}\n\n/**\n * Omits root attributes from component's attributes\n * @param {SetupContextAttrs} data\n * @param {SetupContextAttrsKeys} exclude\n * @returns {Omit<SetupContextAttrs, any>}\n */\nexport function getNonRootAttrs(\n data: SetupContextAttrs,\n exclude: SetupContextAttrsKeys = ['class'],\n) {\n return objectOmit(data, [...getRootKeys(data), ...exclude]);\n}\n\n/**\n * Transforms the keys of an object to either camelCase or snake_case\n * @param {T} item\n * @param {\"camelCase\" | \"snake_case\"} to\n * @returns {Record<string, any>}\n */\nexport function transformCase<T extends object>(\n item: T,\n to: 'camelCase' | 'snake_case',\n): Record<string, T[keyof T]> {\n if (!item)\n return item;\n\n return Object.keys(item).reduce(\n (acc, curr) => {\n if (to === 'camelCase')\n acc[camelCase(curr)] = item[curr as keyof T];\n else acc[snakeCase(curr)] = item[curr as keyof T];\n\n return acc;\n },\n {} as Record<string, T[keyof T]>,\n );\n}\n\n/**\n *\n * @param {string} string - String to convert\n * @return {string} - String converted to text token, mostly used to matching keyword\n * @example\n * getTextToken('this is a sentence'); // thisisasentence\n */\n\nexport function getTextToken(string: unknown): string {\n if (!string)\n return '';\n\n return string\n .toString()\n .toLowerCase()\n .replace(/[^\\da-z]/gi, '');\n}\n\nexport function transformPropsUnit(value?: string | number): string | undefined {\n if (value === undefined || (typeof value === 'string' && isNaN(Number(value))))\n return value;\n return `${value}px`;\n}\n"],"names":[],"mappings":";;AAYA,SAAS,aACP,QACA,EAAE,iBAAiB,KACX;AACR,SAAO,IAAI,KAAK,aAAa,QAAW;AAAA,IACtC,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EAAA,CACxB,EAAE,OAAO,OAAO,MAAM,CAAC;AAC1B;AAMO,SAAS,cAAc,QAAiC;AAC7D,SAAO,aAAa,QAAQ,EAAE,gBAAgB,GAAG;AACnD;AAOA,SAAS,YAAY,MAAgD;AACnE,SAAO,OAAO,KAAK,IAAI,EAAE,OAAO,CAAA,QAAO,IAAI,WAAW,OAAO,CAAC;AAChE;AAQO,SAAS,aAAa,MAAyB,UAAiC,CAAC,OAAO,GAAG;AAChG,SAAO,WAAW,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,GAAG,OAAO,CAAC;AAC5D;AAQO,SAAS,gBACd,MACA,UAAiC,CAAC,OAAO,GACzC;AACA,SAAO,WAAW,MAAM,CAAC,GAAG,YAAY,IAAI,GAAG,GAAG,OAAO,CAAC;AAC5D;AAQO,SAAS,cACd,MACA,IAC4B;AAC5B,MAAI,CAAC;AACH,WAAO;AAET,SAAO,OAAO,KAAK,IAAI,EAAE;AAAA,IACvB,CAAC,KAAK,SAAS;AAEX,UAAI,UAAU,IAAI,CAAC,IAAI,KAAK,IAAe;AAG7C,aAAO;AAAA,IACT;AAAA,IACA,CAAA;AAAA,EAAC;AAEL;AAUO,SAAS,aAAa,QAAyB;AACpD,MAAI,CAAC;AACH,WAAO;AAET,SAAO,OACJ,WACA,cACA,QAAQ,cAAc,EAAE;AAC7B;AAEO,SAAS,mBAAmB,OAA6C;AAC9E,MAAI,UAAU,UAAc,OAAO,UAAU,YAAY,MAAM,OAAO,KAAK,CAAC;AAC1E,WAAO;AACT,SAAO,GAAG,KAAK;AACjB;"}
|
package/dist/utils/is-equal.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function isEqual(value:
|
|
1
|
+
export declare function isEqual(value: unknown, other: unknown): boolean;
|
package/dist/utils/is-equal.js
CHANGED
|
@@ -15,12 +15,14 @@ function isEqual(value, other) {
|
|
|
15
15
|
return true;
|
|
16
16
|
}
|
|
17
17
|
if (typeof value === "object") {
|
|
18
|
-
const
|
|
19
|
-
const
|
|
18
|
+
const valueRecord = value;
|
|
19
|
+
const otherRecord = other;
|
|
20
|
+
const valueKeys = Object.keys(valueRecord);
|
|
21
|
+
const otherKeys = Object.keys(otherRecord);
|
|
20
22
|
if (valueKeys.length !== otherKeys.length)
|
|
21
23
|
return false;
|
|
22
24
|
for (const key of valueKeys) {
|
|
23
|
-
if (!isEqual(
|
|
25
|
+
if (!isEqual(valueRecord[key], otherRecord[key]))
|
|
24
26
|
return false;
|
|
25
27
|
}
|
|
26
28
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-equal.js","sources":["../../src/utils/is-equal.ts"],"sourcesContent":["export function isEqual(value:
|
|
1
|
+
{"version":3,"file":"is-equal.js","sources":["../../src/utils/is-equal.ts"],"sourcesContent":["export function isEqual(value: unknown, other: unknown): boolean {\n // Check if the values are identical (covers primitives and functions)\n if (value === other)\n return true;\n\n // Check if the values are null or undefined\n if (value == null || other == null)\n return value === other;\n\n // Check if the values are of different types\n if (typeof value !== typeof other)\n return false;\n\n // Compare arrays\n if (Array.isArray(value)) {\n if (!Array.isArray(other) || value.length !== other.length)\n return false;\n\n for (const [i, element] of value.entries()) {\n if (!isEqual(element, other[i]))\n return false;\n }\n return true;\n }\n\n // Compare objects\n if (typeof value === 'object') {\n const valueRecord = value as Record<string, unknown>;\n const otherRecord = other as Record<string, unknown>;\n const valueKeys = Object.keys(valueRecord);\n const otherKeys = Object.keys(otherRecord);\n\n if (valueKeys.length !== otherKeys.length)\n return false;\n\n for (const key of valueKeys) {\n if (!isEqual(valueRecord[key], otherRecord[key]))\n return false;\n }\n return true;\n }\n\n // If the values are neither primitives, arrays, nor objects, return false\n return false;\n}\n"],"names":[],"mappings":"AAAO,SAAS,QAAQ,OAAgB,OAAyB;AAE/D,MAAI,UAAU;AACZ,WAAO;AAGT,MAAI,SAAS,QAAQ,SAAS;AAC5B,WAAO,UAAU;AAGnB,MAAI,OAAO,UAAU,OAAO;AAC1B,WAAO;AAGT,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,MAAM;AAClD,aAAO;AAET,eAAW,CAAC,GAAG,OAAO,KAAK,MAAM,WAAW;AAC1C,UAAI,CAAC,QAAQ,SAAS,MAAM,CAAC,CAAC;AAC5B,eAAO;AAAA,IACX;AACA,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,cAAc;AACpB,UAAM,cAAc;AACpB,UAAM,YAAY,OAAO,KAAK,WAAW;AACzC,UAAM,YAAY,OAAO,KAAK,WAAW;AAEzC,QAAI,UAAU,WAAW,UAAU;AACjC,aAAO;AAET,eAAW,OAAO,WAAW;AAC3B,UAAI,CAAC,QAAQ,YAAY,GAAG,GAAG,YAAY,GAAG,CAAC;AAC7C,eAAO;AAAA,IACX;AACA,WAAO;AAAA,EACT;AAGA,SAAO;AACT;"}
|
|
@@ -6,11 +6,11 @@ const VIRTUAL_MODULE_ID = "virtual:rotki-icons";
|
|
|
6
6
|
const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
7
7
|
const DEFAULT_SCAN_PATTERNS = ["**/*.vue", "**/*.ts", "**/*.tsx"];
|
|
8
8
|
const EXCLUDED_PATTERNS = ["**/node_modules/**", "**/dist/**", "**/.git/**"];
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = dirname(__filename);
|
|
9
|
+
const __filename$1 = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname$1 = dirname(__filename$1);
|
|
11
11
|
function loadValidIcons() {
|
|
12
12
|
try {
|
|
13
|
-
const distPath = resolve(__dirname, "../icons/index.js");
|
|
13
|
+
const distPath = resolve(__dirname$1, "../icons/index.js");
|
|
14
14
|
if (existsSync(distPath)) {
|
|
15
15
|
const content = readFileSync(distPath, "utf-8");
|
|
16
16
|
const match = content.match(/const RuiIcons = \[(.*?)];/s);
|
|
@@ -22,7 +22,7 @@ function loadValidIcons() {
|
|
|
22
22
|
}
|
|
23
23
|
} catch {
|
|
24
24
|
}
|
|
25
|
-
const sourcePath = resolve(__dirname, "../icons/index.ts");
|
|
25
|
+
const sourcePath = resolve(__dirname$1, "../icons/index.ts");
|
|
26
26
|
if (existsSync(sourcePath)) {
|
|
27
27
|
const content = readFileSync(sourcePath, "utf-8");
|
|
28
28
|
const match = content.match(/export const RuiIcons = \[(.*?)] as const/s);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/vite-plugin/index.ts"],"sourcesContent":["import type { Plugin, ViteDevServer } from 'vite';\nimport type { RuiIconsPluginOptions, ScanResult } from './types';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport {\n extractIconsFromSource,\n generateVirtualModule,\n validateIcons,\n} from './scanner';\n\nconst VIRTUAL_MODULE_ID = 'virtual:rotki-icons';\nconst RESOLVED_VIRTUAL_MODULE_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\nconst DEFAULT_SCAN_PATTERNS = ['**/*.vue', '**/*.ts', '**/*.tsx'];\nconst EXCLUDED_PATTERNS = ['**/node_modules/**', '**/dist/**', '**/.git/**'];\n\n// Get __dirname equivalent in ES modules\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Loads the valid RuiIcons array from the library\n */\nfunction loadValidIcons(): Set<string> {\n // Import the RuiIcons array from the icons module\n // This will be resolved at build time\n try {\n // Try to load from the built dist first (for consumers)\n const distPath = resolve(__dirname, '../icons/index.js');\n if (existsSync(distPath)) {\n // Read and parse the file to extract the RuiIcons array\n const content = readFileSync(distPath, 'utf-8');\n // eslint-disable-next-line regexp/strict\n const match = content.match(/const RuiIcons = \\[(.*?)];/s);\n if (match?.[1]) {\n const iconsStr = match[1];\n const icons = iconsStr.match(/\"([^\"]+)\"/g)?.map(s => s.slice(1, -1)) || [];\n return new Set(icons);\n }\n }\n }\n catch {\n // Fallback: parse the icons source file directly\n }\n\n // Fallback: read and parse the source file\n const sourcePath = resolve(__dirname, '../icons/index.ts');\n if (existsSync(sourcePath)) {\n const content = readFileSync(sourcePath, 'utf-8');\n // eslint-disable-next-line regexp/strict\n const match = content.match(/export const RuiIcons = \\[(.*?)] as const/s);\n if (match?.[1]) {\n const iconsStr = match[1];\n const icons = iconsStr.match(/\"([^\"]+)\"/g)?.map(s => s.slice(1, -1)) || [];\n return new Set(icons);\n }\n }\n\n console.warn('[@rotki/ui-library] Could not load RuiIcons list, validation disabled');\n return new Set();\n}\n\n/**\n * Vite plugin for automatic icon detection and registration\n */\nexport function ruiIconsPlugin(options: RuiIconsPluginOptions = {}): Plugin {\n const {\n include = [],\n scanPatterns = DEFAULT_SCAN_PATTERNS,\n strict = false,\n debug = false,\n } = options;\n\n let validIcons: Set<string>;\n let scanResult: ScanResult;\n let server: ViteDevServer | null = null;\n let root: string;\n\n const log = (message: string): void => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(`[@rotki/ui-library/icons] ${message}`);\n }\n };\n\n const warn = (message: string): void => {\n console.warn(`[@rotki/ui-library/icons] ${message}`);\n };\n\n /**\n * Scans all matching files for icon usage\n */\n async function scanFiles(): Promise<void> {\n const fg = await import('fast-glob');\n const glob = fg.default || fg;\n\n scanResult = {\n icons: new Set(include),\n invalidIcons: new Map(),\n };\n\n const files = glob.sync(scanPatterns, {\n cwd: root,\n ignore: EXCLUDED_PATTERNS,\n absolute: true,\n });\n\n log(`Scanning ${files.length} files for icon usage...`);\n\n for (const filePath of files) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const detectedIcons = extractIconsFromSource(content);\n\n if (detectedIcons.size > 0) {\n log(`Found ${detectedIcons.size} potential icons in ${filePath}`);\n validateIcons(detectedIcons, validIcons, filePath, scanResult);\n }\n }\n catch {\n warn(`Failed to read file: ${filePath}`);\n }\n }\n\n // Add manually included icons\n for (const icon of include) {\n if (validIcons.has(icon)) {\n scanResult.icons.add(icon);\n }\n else {\n warn(`Included icon \"${icon}\" is not a valid RuiIcon`);\n }\n }\n\n log(`Detected ${scanResult.icons.size} valid icons`);\n\n // Report invalid icons\n if (scanResult.invalidIcons.size > 0) {\n const invalidList = [...scanResult.invalidIcons.entries()]\n .map(([icon, files]) => ` - \"${icon}\" in: ${files.join(', ')}`)\n .join('\\n');\n\n const message = `Found ${scanResult.invalidIcons.size} invalid icon name(s):\\n${invalidList}`;\n\n if (strict) {\n throw new Error(message);\n }\n else {\n warn(message);\n }\n }\n }\n\n /**\n * Handles file changes in dev mode\n */\n function handleFileChange(filePath: string): void {\n // Check if the changed file matches our scan patterns\n const isRelevantFile = scanPatterns.some((pattern) => {\n const ext = filePath.split('.').pop();\n return pattern.includes(`*.${ext}`);\n });\n\n if (!isRelevantFile)\n return;\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const detectedIcons = extractIconsFromSource(content);\n const previousSize = scanResult.icons.size;\n\n validateIcons(detectedIcons, validIcons, filePath, scanResult);\n\n // If new icons were detected, invalidate the virtual module\n if (scanResult.icons.size > previousSize) {\n log(`New icons detected in ${filePath}, invalidating virtual module...`);\n\n // Invalidate the virtual module to trigger re-import\n const mod = server?.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);\n if (mod) {\n server?.moduleGraph.invalidateModule(mod);\n // Trigger HMR update\n server?.ws.send({\n type: 'full-reload',\n path: '*',\n });\n }\n }\n }\n catch {\n // Ignore read errors\n }\n }\n\n return {\n name: 'rotki-ui-library-icons',\n enforce: 'pre',\n\n configResolved(config) {\n root = config.root;\n validIcons = loadValidIcons();\n log(`Loaded ${validIcons.size} valid icon names`);\n },\n\n configureServer(_server) {\n server = _server;\n\n // Watch for file changes\n server.watcher.on('change', handleFileChange);\n server.watcher.on('add', handleFileChange);\n },\n\n async buildStart() {\n await scanFiles();\n },\n\n resolveId(id) {\n if (id === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n },\n\n load(id) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n const moduleContent = generateVirtualModule(scanResult.icons);\n log(`Generated virtual module with ${scanResult.icons.size} icons`);\n return moduleContent;\n }\n },\n };\n}\n\nexport type { RuiIconsPluginOptions } from './types';\n\n// eslint-disable-next-line import/no-default-export\nexport default ruiIconsPlugin;\n"],"names":["files"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/vite-plugin/index.ts"],"sourcesContent":["import type { Plugin, ViteDevServer } from 'vite';\nimport type { RuiIconsPluginOptions, ScanResult } from './types';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport {\n extractIconsFromSource,\n generateVirtualModule,\n validateIcons,\n} from './scanner';\n\nconst VIRTUAL_MODULE_ID = 'virtual:rotki-icons';\nconst RESOLVED_VIRTUAL_MODULE_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\nconst DEFAULT_SCAN_PATTERNS = ['**/*.vue', '**/*.ts', '**/*.tsx'];\nconst EXCLUDED_PATTERNS = ['**/node_modules/**', '**/dist/**', '**/.git/**'];\n\n// Get __dirname equivalent in ES modules\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Loads the valid RuiIcons array from the library\n */\nfunction loadValidIcons(): Set<string> {\n // Import the RuiIcons array from the icons module\n // This will be resolved at build time\n try {\n // Try to load from the built dist first (for consumers)\n const distPath = resolve(__dirname, '../icons/index.js');\n if (existsSync(distPath)) {\n // Read and parse the file to extract the RuiIcons array\n const content = readFileSync(distPath, 'utf-8');\n // eslint-disable-next-line regexp/strict\n const match = content.match(/const RuiIcons = \\[(.*?)];/s);\n if (match?.[1]) {\n const iconsStr = match[1];\n const icons = iconsStr.match(/\"([^\"]+)\"/g)?.map(s => s.slice(1, -1)) || [];\n return new Set(icons);\n }\n }\n }\n catch {\n // Fallback: parse the icons source file directly\n }\n\n // Fallback: read and parse the source file\n const sourcePath = resolve(__dirname, '../icons/index.ts');\n if (existsSync(sourcePath)) {\n const content = readFileSync(sourcePath, 'utf-8');\n // eslint-disable-next-line regexp/strict\n const match = content.match(/export const RuiIcons = \\[(.*?)] as const/s);\n if (match?.[1]) {\n const iconsStr = match[1];\n const icons = iconsStr.match(/\"([^\"]+)\"/g)?.map(s => s.slice(1, -1)) || [];\n return new Set(icons);\n }\n }\n\n console.warn('[@rotki/ui-library] Could not load RuiIcons list, validation disabled');\n return new Set();\n}\n\n/**\n * Vite plugin for automatic icon detection and registration\n */\nexport function ruiIconsPlugin(options: RuiIconsPluginOptions = {}): Plugin {\n const {\n include = [],\n scanPatterns = DEFAULT_SCAN_PATTERNS,\n strict = false,\n debug = false,\n } = options;\n\n let validIcons: Set<string>;\n let scanResult: ScanResult;\n let server: ViteDevServer | null = null;\n let root: string;\n\n const log = (message: string): void => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(`[@rotki/ui-library/icons] ${message}`);\n }\n };\n\n const warn = (message: string): void => {\n console.warn(`[@rotki/ui-library/icons] ${message}`);\n };\n\n /**\n * Scans all matching files for icon usage\n */\n async function scanFiles(): Promise<void> {\n const fg = await import('fast-glob');\n const glob = fg.default || fg;\n\n scanResult = {\n icons: new Set(include),\n invalidIcons: new Map(),\n };\n\n const files = glob.sync(scanPatterns, {\n cwd: root,\n ignore: EXCLUDED_PATTERNS,\n absolute: true,\n });\n\n log(`Scanning ${files.length} files for icon usage...`);\n\n for (const filePath of files) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const detectedIcons = extractIconsFromSource(content);\n\n if (detectedIcons.size > 0) {\n log(`Found ${detectedIcons.size} potential icons in ${filePath}`);\n validateIcons(detectedIcons, validIcons, filePath, scanResult);\n }\n }\n catch {\n warn(`Failed to read file: ${filePath}`);\n }\n }\n\n // Add manually included icons\n for (const icon of include) {\n if (validIcons.has(icon)) {\n scanResult.icons.add(icon);\n }\n else {\n warn(`Included icon \"${icon}\" is not a valid RuiIcon`);\n }\n }\n\n log(`Detected ${scanResult.icons.size} valid icons`);\n\n // Report invalid icons\n if (scanResult.invalidIcons.size > 0) {\n const invalidList = [...scanResult.invalidIcons.entries()]\n .map(([icon, files]) => ` - \"${icon}\" in: ${files.join(', ')}`)\n .join('\\n');\n\n const message = `Found ${scanResult.invalidIcons.size} invalid icon name(s):\\n${invalidList}`;\n\n if (strict) {\n throw new Error(message);\n }\n else {\n warn(message);\n }\n }\n }\n\n /**\n * Handles file changes in dev mode\n */\n function handleFileChange(filePath: string): void {\n // Check if the changed file matches our scan patterns\n const isRelevantFile = scanPatterns.some((pattern) => {\n const ext = filePath.split('.').pop();\n return pattern.includes(`*.${ext}`);\n });\n\n if (!isRelevantFile)\n return;\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const detectedIcons = extractIconsFromSource(content);\n const previousSize = scanResult.icons.size;\n\n validateIcons(detectedIcons, validIcons, filePath, scanResult);\n\n // If new icons were detected, invalidate the virtual module\n if (scanResult.icons.size > previousSize) {\n log(`New icons detected in ${filePath}, invalidating virtual module...`);\n\n // Invalidate the virtual module to trigger re-import\n const mod = server?.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);\n if (mod) {\n server?.moduleGraph.invalidateModule(mod);\n // Trigger HMR update\n server?.ws.send({\n type: 'full-reload',\n path: '*',\n });\n }\n }\n }\n catch {\n // Ignore read errors\n }\n }\n\n return {\n name: 'rotki-ui-library-icons',\n enforce: 'pre',\n\n configResolved(config) {\n root = config.root;\n validIcons = loadValidIcons();\n log(`Loaded ${validIcons.size} valid icon names`);\n },\n\n configureServer(_server) {\n server = _server;\n\n // Watch for file changes\n server.watcher.on('change', handleFileChange);\n server.watcher.on('add', handleFileChange);\n },\n\n async buildStart() {\n await scanFiles();\n },\n\n resolveId(id) {\n if (id === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n },\n\n load(id) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n const moduleContent = generateVirtualModule(scanResult.icons);\n log(`Generated virtual module with ${scanResult.icons.size} icons`);\n return moduleContent;\n }\n },\n };\n}\n\nexport type { RuiIconsPluginOptions } from './types';\n\n// eslint-disable-next-line import/no-default-export\nexport default ruiIconsPlugin;\n"],"names":["__filename","__dirname","files"],"mappings":"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"}
|
|
@@ -42,14 +42,14 @@ export default [];
|
|
|
42
42
|
`;
|
|
43
43
|
}
|
|
44
44
|
const sortedIcons = [...icons].sort();
|
|
45
|
-
const exports = sortedIcons.map(iconNameToExportName);
|
|
45
|
+
const exports$1 = sortedIcons.map(iconNameToExportName);
|
|
46
46
|
const importStatement = `import {
|
|
47
|
-
${exports.join(",\n ")},
|
|
47
|
+
${exports$1.join(",\n ")},
|
|
48
48
|
} from '@rotki/ui-library';
|
|
49
49
|
`;
|
|
50
50
|
const exportStatement = `
|
|
51
51
|
export default [
|
|
52
|
-
${exports.join(",\n ")},
|
|
52
|
+
${exports$1.join(",\n ")},
|
|
53
53
|
];
|
|
54
54
|
`;
|
|
55
55
|
return importStatement + exportStatement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sources":["../../src/vite-plugin/scanner.ts"],"sourcesContent":["import type { ScanResult } from './types';\n\n/**\n * Regex patterns to detect icon usage in source files\n */\nconst ICON_PATTERNS: RegExp[] = [\n // Static name attribute: <RuiIcon name=\"lu-star\" /> or name='lu-star'\n /\\bname=[\"'](lu-[\\da-z-]+)[\"']/gi,\n\n // Dynamic bound name with string literal: :name=\"'lu-star'\" or :name=\"`lu-star`\"\n /:name=[\"']['`](lu-[\\da-z-]+)['`]?[\"']/gi,\n\n // String literals that look like icon names: 'lu-star' or \"lu-star\"\n /[\"'`](lu-[\\da-z-]+)[\"'`]/gi,\n];\n\n/**\n * Extracts all potential icon names from source code\n */\nexport function extractIconsFromSource(source: string): Set<string> {\n const icons = new Set<string>();\n\n for (const pattern of ICON_PATTERNS) {\n // Reset lastIndex for global regex\n pattern.lastIndex = 0;\n\n let match: RegExpExecArray | null = pattern.exec(source);\n while (match !== null) {\n const iconName = match[1];\n if (iconName) {\n icons.add(iconName);\n }\n match = pattern.exec(source);\n }\n }\n\n return icons;\n}\n\n/**\n * Validates detected icons against known valid icons\n */\nexport function validateIcons(\n detectedIcons: Set<string>,\n validIcons: Set<string>,\n filePath: string,\n result: ScanResult,\n): void {\n for (const icon of detectedIcons) {\n if (validIcons.has(icon)) {\n result.icons.add(icon);\n }\n else {\n // Track invalid icons\n const files = result.invalidIcons.get(icon) || [];\n files.push(filePath);\n result.invalidIcons.set(icon, files);\n }\n }\n}\n\n/**\n * Converts icon name to export constant name\n * e.g., 'lu-arrow-down' -> 'LuArrowDown'\n */\nexport function iconNameToExportName(iconName: string): string {\n return iconName\n .split('-')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Generates the virtual module content with detected icons\n */\nexport function generateVirtualModule(icons: Set<string>): string {\n if (icons.size === 0) {\n return `// No icons detected\nexport default [];\n`;\n }\n\n const sortedIcons = [...icons].sort();\n const exports = sortedIcons.map(iconNameToExportName);\n\n const importStatement = `import {\\n ${exports.join(',\\n ')},\\n} from '@rotki/ui-library';\\n`;\n const exportStatement = `\\nexport default [\\n ${exports.join(',\\n ')},\\n];\\n`;\n\n return importStatement + exportStatement;\n}\n"],"names":[],"mappings":"AAKA,MAAM,gBAA0B;AAAA;AAAA,EAE9B;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AACF;AAKO,SAAS,uBAAuB,QAA6B;AAClE,QAAM,4BAAY,IAAA;AAElB,aAAW,WAAW,eAAe;AAEnC,YAAQ,YAAY;AAEpB,QAAI,QAAgC,QAAQ,KAAK,MAAM;AACvD,WAAO,UAAU,MAAM;AACrB,YAAM,WAAW,MAAM,CAAC;AACxB,UAAI,UAAU;AACZ,cAAM,IAAI,QAAQ;AAAA,MACpB;AACA,cAAQ,QAAQ,KAAK,MAAM;AAAA,IAC7B;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,cACd,eACA,YACA,UACA,QACM;AACN,aAAW,QAAQ,eAAe;AAChC,QAAI,WAAW,IAAI,IAAI,GAAG;AACxB,aAAO,MAAM,IAAI,IAAI;AAAA,IACvB,OACK;AAEH,YAAM,QAAQ,OAAO,aAAa,IAAI,IAAI,KAAK,CAAA;AAC/C,YAAM,KAAK,QAAQ;AACnB,aAAO,aAAa,IAAI,MAAM,KAAK;AAAA,IACrC;AAAA,EACF;AACF;AAMO,SAAS,qBAAqB,UAA0B;AAC7D,SAAO,SACJ,MAAM,GAAG,EACT,IAAI,CAAA,SAAQ,KAAK,OAAO,CAAC,EAAE,YAAA,IAAgB,KAAK,MAAM,CAAC,CAAC,EACxD,KAAK,EAAE;AACZ;AAKO,SAAS,sBAAsB,OAA4B;AAChE,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA;AAAA;AAAA,EAGT;AAEA,QAAM,cAAc,CAAC,GAAG,KAAK,EAAE,KAAA;AAC/B,
|
|
1
|
+
{"version":3,"file":"scanner.js","sources":["../../src/vite-plugin/scanner.ts"],"sourcesContent":["import type { ScanResult } from './types';\n\n/**\n * Regex patterns to detect icon usage in source files\n */\nconst ICON_PATTERNS: RegExp[] = [\n // Static name attribute: <RuiIcon name=\"lu-star\" /> or name='lu-star'\n /\\bname=[\"'](lu-[\\da-z-]+)[\"']/gi,\n\n // Dynamic bound name with string literal: :name=\"'lu-star'\" or :name=\"`lu-star`\"\n /:name=[\"']['`](lu-[\\da-z-]+)['`]?[\"']/gi,\n\n // String literals that look like icon names: 'lu-star' or \"lu-star\"\n /[\"'`](lu-[\\da-z-]+)[\"'`]/gi,\n];\n\n/**\n * Extracts all potential icon names from source code\n */\nexport function extractIconsFromSource(source: string): Set<string> {\n const icons = new Set<string>();\n\n for (const pattern of ICON_PATTERNS) {\n // Reset lastIndex for global regex\n pattern.lastIndex = 0;\n\n let match: RegExpExecArray | null = pattern.exec(source);\n while (match !== null) {\n const iconName = match[1];\n if (iconName) {\n icons.add(iconName);\n }\n match = pattern.exec(source);\n }\n }\n\n return icons;\n}\n\n/**\n * Validates detected icons against known valid icons\n */\nexport function validateIcons(\n detectedIcons: Set<string>,\n validIcons: Set<string>,\n filePath: string,\n result: ScanResult,\n): void {\n for (const icon of detectedIcons) {\n if (validIcons.has(icon)) {\n result.icons.add(icon);\n }\n else {\n // Track invalid icons\n const files = result.invalidIcons.get(icon) || [];\n files.push(filePath);\n result.invalidIcons.set(icon, files);\n }\n }\n}\n\n/**\n * Converts icon name to export constant name\n * e.g., 'lu-arrow-down' -> 'LuArrowDown'\n */\nexport function iconNameToExportName(iconName: string): string {\n return iconName\n .split('-')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Generates the virtual module content with detected icons\n */\nexport function generateVirtualModule(icons: Set<string>): string {\n if (icons.size === 0) {\n return `// No icons detected\nexport default [];\n`;\n }\n\n const sortedIcons = [...icons].sort();\n const exports = sortedIcons.map(iconNameToExportName);\n\n const importStatement = `import {\\n ${exports.join(',\\n ')},\\n} from '@rotki/ui-library';\\n`;\n const exportStatement = `\\nexport default [\\n ${exports.join(',\\n ')},\\n];\\n`;\n\n return importStatement + exportStatement;\n}\n"],"names":["exports"],"mappings":"AAKA,MAAM,gBAA0B;AAAA;AAAA,EAE9B;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AACF;AAKO,SAAS,uBAAuB,QAA6B;AAClE,QAAM,4BAAY,IAAA;AAElB,aAAW,WAAW,eAAe;AAEnC,YAAQ,YAAY;AAEpB,QAAI,QAAgC,QAAQ,KAAK,MAAM;AACvD,WAAO,UAAU,MAAM;AACrB,YAAM,WAAW,MAAM,CAAC;AACxB,UAAI,UAAU;AACZ,cAAM,IAAI,QAAQ;AAAA,MACpB;AACA,cAAQ,QAAQ,KAAK,MAAM;AAAA,IAC7B;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,cACd,eACA,YACA,UACA,QACM;AACN,aAAW,QAAQ,eAAe;AAChC,QAAI,WAAW,IAAI,IAAI,GAAG;AACxB,aAAO,MAAM,IAAI,IAAI;AAAA,IACvB,OACK;AAEH,YAAM,QAAQ,OAAO,aAAa,IAAI,IAAI,KAAK,CAAA;AAC/C,YAAM,KAAK,QAAQ;AACnB,aAAO,aAAa,IAAI,MAAM,KAAK;AAAA,IACrC;AAAA,EACF;AACF;AAMO,SAAS,qBAAqB,UAA0B;AAC7D,SAAO,SACJ,MAAM,GAAG,EACT,IAAI,CAAA,SAAQ,KAAK,OAAO,CAAC,EAAE,YAAA,IAAgB,KAAK,MAAM,CAAC,CAAC,EACxD,KAAK,EAAE;AACZ;AAKO,SAAS,sBAAsB,OAA4B;AAChE,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA;AAAA;AAAA,EAGT;AAEA,QAAM,cAAc,CAAC,GAAG,KAAK,EAAE,KAAA;AAC/B,QAAMA,YAAU,YAAY,IAAI,oBAAoB;AAEpD,QAAM,kBAAkB;AAAA,IAAeA,UAAQ,KAAK,OAAO,CAAC;AAAA;AAAA;AAC5D,QAAM,kBAAkB;AAAA;AAAA,IAAyBA,UAAQ,KAAK,OAAO,CAAC;AAAA;AAAA;AAEtE,SAAO,kBAAkB;AAC3B;"}
|