vueless 0.0.478 → 0.0.480
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/adatper.locale/vue-i18n.ts +14 -0
- package/adatper.locale/{vueless.js → vueless.ts} +67 -19
- package/composables/useAutoPosition.ts +113 -0
- package/composables/useBreakpoint.ts +109 -0
- package/composables/useLocale.ts +22 -0
- package/composables/useMutationObserver.ts +53 -0
- package/composables/{useUI.js → useUI.ts} +109 -105
- package/constants.js +124 -2
- package/directives/clickOutside/storybook/Docs.mdx +1 -1
- package/directives/clickOutside/storybook/{stories.js → stories.ts} +7 -9
- package/directives/clickOutside/types.ts +22 -0
- package/directives/clickOutside/vClickOutside.ts +96 -0
- package/directives/index.js +7 -2
- package/directives/tooltip/storybook/Docs.mdx +1 -1
- package/directives/tooltip/storybook/{stories.js → stories.ts} +22 -10
- package/directives/tooltip/types.ts +14 -0
- package/directives/tooltip/vTooltip.ts +82 -0
- package/{index.js → index.ts} +12 -9
- package/package.json +38 -25
- package/plugin-vite.d.ts +10 -0
- package/plugin-vite.js +97 -0
- package/{preset.tailwind.js → preset-tailwind.js} +21 -7
- package/types.ts +322 -0
- package/ui.button/UButton.vue +1 -1
- package/ui.button/storybook/Docs.mdx +1 -1
- package/ui.button/storybook/stories.js +11 -6
- package/ui.button/useAttrs.js +1 -1
- package/ui.button-link/ULink.vue +2 -2
- package/ui.button-link/storybook/Docs.mdx +1 -1
- package/ui.button-link/storybook/stories.js +2 -2
- package/ui.button-link/useAttrs.js +1 -1
- package/ui.button-toggle/UToggle.vue +1 -1
- package/ui.button-toggle/storybook/Docs.mdx +1 -1
- package/ui.button-toggle/storybook/stories.js +2 -2
- package/ui.button-toggle/useAttrs.js +1 -1
- package/ui.button-toggle-item/UToggleItem.vue +1 -1
- package/ui.button-toggle-item/storybook/Docs.mdx +1 -1
- package/ui.button-toggle-item/storybook/stories.js +1 -1
- package/ui.button-toggle-item/useAttrs.js +1 -1
- package/ui.container-accordion/UAccordion.vue +1 -1
- package/ui.container-accordion/storybook/Docs.mdx +1 -1
- package/ui.container-accordion/storybook/stories.js +1 -1
- package/ui.container-accordion/useAttrs.js +1 -1
- package/ui.container-card/storybook/Docs.mdx +1 -1
- package/ui.container-card/storybook/stories.js +1 -1
- package/ui.container-card/useAttrs.js +1 -1
- package/ui.container-col/UCol.vue +1 -1
- package/ui.container-col/storybook/Docs.mdx +1 -1
- package/ui.container-col/storybook/stories.js +1 -1
- package/ui.container-col/useAttrs.js +1 -1
- package/ui.container-divider/UDivider.vue +1 -1
- package/ui.container-divider/storybook/Docs.mdx +1 -1
- package/ui.container-divider/storybook/stories.js +2 -2
- package/ui.container-divider/useAttrs.js +1 -1
- package/ui.container-group/UGroup.vue +1 -1
- package/ui.container-group/storybook/Docs.mdx +1 -1
- package/ui.container-group/storybook/stories.js +1 -1
- package/ui.container-group/useAttrs.js +1 -1
- package/ui.container-modal/UModal.vue +1 -1
- package/ui.container-modal/storybook/Docs.mdx +1 -1
- package/ui.container-modal/storybook/stories.js +2 -2
- package/ui.container-modal/useAttrs.js +1 -1
- package/ui.container-modal-confirm/UModalConfirm.vue +2 -2
- package/ui.container-modal-confirm/storybook/Docs.mdx +1 -1
- package/ui.container-modal-confirm/storybook/stories.js +2 -2
- package/ui.container-modal-confirm/useAttrs.js +1 -1
- package/ui.container-page/UPage.vue +2 -2
- package/ui.container-page/storybook/Docs.mdx +1 -1
- package/ui.container-page/storybook/stories.js +1 -1
- package/ui.container-page/useAttrs.js +2 -2
- package/ui.container-row/URow.vue +1 -1
- package/ui.container-row/storybook/Docs.mdx +1 -1
- package/ui.container-row/storybook/stories.js +2 -2
- package/ui.container-row/useAttrs.js +1 -1
- package/ui.data-list/UDataList.vue +6 -6
- package/ui.data-list/storybook/Docs.mdx +1 -1
- package/ui.data-list/storybook/stories.js +1 -1
- package/ui.data-list/useAttrs.js +1 -1
- package/ui.data-table/UTable.vue +3 -3
- package/ui.data-table/UTableRow.vue +7 -6
- package/ui.data-table/config.js +10 -3
- package/ui.data-table/storybook/Docs.mdx +1 -1
- package/ui.data-table/storybook/stories.js +5 -3
- package/ui.data-table/useAttrs.js +1 -1
- package/ui.data-table/utilTable.js +1 -1
- package/ui.dropdown-badge/UDropdownBadge.vue +1 -1
- package/ui.dropdown-badge/storybook/Docs.mdx +1 -1
- package/ui.dropdown-badge/storybook/stories.js +2 -2
- package/ui.dropdown-badge/useAttrs.js +1 -1
- package/ui.dropdown-button/UDropdownButton.vue +1 -1
- package/ui.dropdown-button/storybook/Docs.mdx +1 -1
- package/ui.dropdown-button/storybook/stories.js +3 -3
- package/ui.dropdown-button/useAttrs.js +1 -1
- package/ui.dropdown-link/UDropdownLink.vue +1 -1
- package/ui.dropdown-link/config.js +1 -1
- package/ui.dropdown-link/storybook/Docs.mdx +1 -1
- package/ui.dropdown-link/storybook/stories.js +2 -2
- package/ui.dropdown-link/useAttrs.js +4 -6
- package/ui.dropdown-list/UDropdownList.vue +3 -3
- package/ui.dropdown-list/storybook/Docs.mdx +1 -1
- package/ui.dropdown-list/storybook/stories.js +2 -2
- package/ui.dropdown-list/useAttrs.js +1 -1
- package/ui.form-calendar/UCalendar.vue +2 -2
- package/ui.form-calendar/storybook/Docs.mdx +1 -1
- package/ui.form-calendar/storybook/stories.js +1 -1
- package/ui.form-calendar/useAttrs.js +1 -1
- package/ui.form-checkbox/UCheckbox.vue +1 -1
- package/ui.form-checkbox/storybook/Docs.mdx +1 -1
- package/ui.form-checkbox/storybook/stories.js +2 -2
- package/ui.form-checkbox/useAttrs.js +1 -1
- package/ui.form-checkbox-group/UCheckboxGroup.vue +1 -1
- package/ui.form-checkbox-group/storybook/Docs.mdx +1 -1
- package/ui.form-checkbox-group/storybook/stories.js +2 -2
- package/ui.form-checkbox-group/useAttrs.js +1 -1
- package/ui.form-checkbox-multi-state/UCheckboxMultiState.vue +1 -1
- package/ui.form-checkbox-multi-state/storybook/Docs.mdx +1 -1
- package/ui.form-checkbox-multi-state/storybook/stories.js +2 -2
- package/ui.form-checkbox-multi-state/useAttrs.js +1 -1
- package/ui.form-color-picker/UColorPicker.vue +1 -1
- package/ui.form-color-picker/storybook/Docs.mdx +1 -1
- package/ui.form-color-picker/storybook/stories.js +2 -2
- package/ui.form-color-picker/useAttrs.js +1 -1
- package/ui.form-date-picker/UDatePicker.vue +4 -7
- package/ui.form-date-picker/storybook/Docs.mdx +1 -1
- package/ui.form-date-picker/storybook/stories.js +3 -3
- package/ui.form-date-picker/useAttrs.js +2 -2
- package/ui.form-date-picker-range/UDatePickerRange.vue +2 -2
- package/ui.form-date-picker-range/storybook/Docs.mdx +1 -1
- package/ui.form-date-picker-range/storybook/stories.js +2 -2
- package/ui.form-date-picker-range/useAttrs.js +2 -2
- package/ui.form-date-picker-range/useLocale.js +1 -1
- package/ui.form-input/UInput.vue +3 -3
- package/ui.form-input/storybook/Docs.mdx +1 -1
- package/ui.form-input/storybook/stories.js +2 -2
- package/ui.form-input/useAttrs.js +1 -1
- package/ui.form-input-file/UInputFile.vue +2 -2
- package/ui.form-input-file/storybook/Docs.mdx +1 -1
- package/ui.form-input-file/storybook/stories.js +2 -2
- package/ui.form-input-file/useAttrs.js +1 -1
- package/ui.form-input-money/UInputMoney.vue +1 -1
- package/ui.form-input-money/storybook/Docs.mdx +1 -1
- package/ui.form-input-money/storybook/stories.js +2 -2
- package/ui.form-input-money/useAttrs.js +1 -1
- package/ui.form-input-money/useFormatCurrency.js +1 -1
- package/ui.form-input-number/UInputNumber.vue +5 -4
- package/ui.form-input-number/storybook/Docs.mdx +1 -1
- package/ui.form-input-number/storybook/stories.js +2 -2
- package/ui.form-input-number/useAttrs.js +1 -1
- package/ui.form-input-rating/UInputRating.vue +1 -1
- package/ui.form-input-rating/storybook/Docs.mdx +1 -1
- package/ui.form-input-rating/storybook/stories.js +2 -2
- package/ui.form-input-rating/useAttrs.js +1 -1
- package/ui.form-input-search/UInputSearch.vue +2 -2
- package/ui.form-input-search/storybook/Docs.mdx +1 -1
- package/ui.form-input-search/storybook/stories.js +2 -2
- package/ui.form-input-search/useAttrs.js +1 -1
- package/ui.form-label/ULabel.vue +1 -1
- package/ui.form-label/config.js +2 -2
- package/ui.form-label/storybook/Docs.mdx +1 -1
- package/ui.form-label/storybook/stories.js +2 -2
- package/ui.form-label/useAttrs.js +1 -1
- package/ui.form-radio/URadio.vue +1 -1
- package/ui.form-radio/storybook/Docs.mdx +1 -1
- package/ui.form-radio/storybook/stories.js +1 -1
- package/ui.form-radio/useAttrs.js +1 -1
- package/ui.form-radio-group/URadioGroup.vue +1 -1
- package/ui.form-radio-group/storybook/Docs.mdx +1 -1
- package/ui.form-radio-group/storybook/stories.js +2 -2
- package/ui.form-radio-group/useAttrs.js +1 -1
- package/ui.form-select/USelect.vue +4 -4
- package/ui.form-select/storybook/Docs.mdx +1 -1
- package/ui.form-select/storybook/stories.js +2 -2
- package/ui.form-select/useAttrs.js +1 -1
- package/ui.form-switch/USwitch.vue +2 -2
- package/ui.form-switch/storybook/Docs.mdx +1 -1
- package/ui.form-switch/storybook/stories.js +2 -2
- package/ui.form-switch/useAttrs.js +1 -1
- package/ui.form-switch/utilVariant.js +1 -1
- package/ui.form-textarea/UTextarea.vue +1 -1
- package/ui.form-textarea/storybook/Docs.mdx +1 -1
- package/ui.form-textarea/storybook/stories.js +2 -2
- package/ui.form-textarea/useAttrs.js +1 -1
- package/ui.image-avatar/UAvatar.vue +1 -1
- package/ui.image-avatar/storybook/Docs.mdx +1 -1
- package/ui.image-avatar/storybook/stories.js +2 -2
- package/ui.image-avatar/useAttrs.js +1 -1
- package/ui.image-icon/UIcon.vue +23 -8
- package/ui.image-icon/storybook/Docs.mdx +2 -2
- package/ui.image-icon/storybook/stories.js +2 -2
- package/ui.image-icon/useAttrs.js +2 -2
- package/ui.loader/ULoader.vue +1 -1
- package/ui.loader/storybook/Docs.mdx +1 -1
- package/ui.loader/storybook/stories.js +2 -2
- package/ui.loader/useAttrs.js +1 -1
- package/ui.loader-overlay/ULoaderOverlay.vue +1 -1
- package/ui.loader-overlay/storybook/Docs.mdx +1 -1
- package/ui.loader-overlay/storybook/stories.js +1 -1
- package/ui.loader-overlay/useAttrs.js +1 -1
- package/ui.loader-progress/ULoaderProgress.vue +33 -48
- package/ui.loader-progress/constants.js +1 -0
- package/ui.loader-progress/storybook/Docs.mdx +1 -1
- package/ui.loader-progress/storybook/stories.js +3 -4
- package/ui.loader-progress/useAttrs.js +1 -1
- package/ui.loader-progress/useLoaderProgress.js +13 -8
- package/ui.loader-progress/utilLoaderProgress.js +1 -1
- package/ui.navigation-pagination/UPagination.vue +1 -1
- package/ui.navigation-pagination/storybook/Docs.mdx +1 -1
- package/ui.navigation-pagination/storybook/stories.js +1 -1
- package/ui.navigation-pagination/useAttrs.js +1 -1
- package/ui.navigation-progress/UProgress.vue +1 -1
- package/ui.navigation-progress/storybook/Docs.mdx +1 -1
- package/ui.navigation-progress/storybook/stories.js +2 -2
- package/ui.navigation-progress/useAttrs.js +1 -1
- package/ui.navigation-tab/UTab.vue +1 -1
- package/ui.navigation-tab/storybook/Docs.mdx +1 -1
- package/ui.navigation-tab/storybook/stories.js +1 -1
- package/ui.navigation-tab/useAttrs.js +1 -1
- package/ui.navigation-tabs/UTabs.vue +1 -1
- package/ui.navigation-tabs/storybook/Docs.mdx +1 -1
- package/ui.navigation-tabs/storybook/stories.js +2 -2
- package/ui.navigation-tabs/useAttrs.js +1 -1
- package/ui.other-dot/UDot.vue +1 -1
- package/ui.other-dot/storybook/Docs.mdx +1 -1
- package/ui.other-dot/storybook/stories.js +2 -2
- package/ui.other-dot/useAttrs.js +1 -1
- package/ui.text-alert/UAlert.vue +1 -1
- package/ui.text-alert/storybook/Docs.mdx +1 -1
- package/ui.text-alert/storybook/stories.js +2 -2
- package/ui.text-alert/useAttrs.js +1 -1
- package/ui.text-badge/UBadge.vue +89 -179
- package/ui.text-badge/storybook/Docs.mdx +3 -3
- package/ui.text-badge/storybook/{stories.js → stories.ts} +33 -37
- package/ui.text-badge/types.ts +84 -0
- package/ui.text-badge/useAttrs.ts +28 -0
- package/ui.text-block/UText.vue +18 -62
- package/ui.text-block/storybook/Docs.mdx +3 -3
- package/ui.text-block/storybook/{stories.js → stories.ts} +13 -8
- package/ui.text-block/types.ts +33 -0
- package/ui.text-block/useAttrs.ts +20 -0
- package/ui.text-empty/UEmpty.vue +1 -1
- package/ui.text-empty/storybook/Docs.mdx +1 -1
- package/ui.text-empty/storybook/stories.js +2 -2
- package/ui.text-empty/useAttrs.js +1 -1
- package/ui.text-file/UFile.vue +13 -16
- package/ui.text-file/config.js +12 -2
- package/ui.text-file/storybook/Docs.mdx +1 -1
- package/ui.text-file/storybook/stories.js +1 -1
- package/ui.text-file/useAttrs.js +1 -1
- package/ui.text-files/UFiles.vue +1 -1
- package/ui.text-files/config.js +1 -1
- package/ui.text-files/storybook/Docs.mdx +1 -1
- package/ui.text-files/storybook/stories.js +1 -1
- package/ui.text-files/useAttrs.js +1 -1
- package/ui.text-header/UHeader.vue +1 -1
- package/ui.text-header/storybook/Docs.mdx +1 -1
- package/ui.text-header/storybook/stories.js +2 -2
- package/ui.text-header/useAttrs.js +1 -1
- package/ui.text-money/UMoney.vue +1 -1
- package/ui.text-money/storybook/Docs.mdx +1 -1
- package/ui.text-money/storybook/stories.js +2 -2
- package/ui.text-money/useAttrs.js +1 -1
- package/ui.text-money/utilMoney.js +2 -2
- package/ui.text-notify/UNotify.vue +2 -2
- package/ui.text-notify/storybook/Docs.mdx +1 -1
- package/ui.text-notify/storybook/stories.js +1 -1
- package/ui.text-notify/useAttrs.js +1 -1
- package/ui.text-notify/utilNotify.js +1 -1
- package/utils/{utilHelper.js → helper.ts} +14 -27
- package/utils/node/helper.js +78 -0
- package/utils/node/loaderIcon.js +232 -0
- package/utils/node/loaderSvg.js +71 -0
- package/utils/node/mergeConfigs.js +199 -0
- package/utils/node/tailwindSafelist.js +366 -0
- package/utils/node/vuelessConfig.js +42 -0
- package/utils/node/vuelessResolver.js +28 -0
- package/utils/{utilPlatform.js → platform.ts} +10 -3
- package/utils/{utilStorybook.js → storybook.ts} +102 -36
- package/utils/tailwindConfig.ts +33 -0
- package/utils/{utilTheme.js → theme.ts} +65 -30
- package/utils/ui.ts +129 -0
- package/web-types.json +1362 -157
- package/adatper.locale/vue-i18n.js +0 -11
- package/composables/useAutoPosition.js +0 -94
- package/composables/useBreakpoint.js +0 -104
- package/composables/useLocale.js +0 -25
- package/composables/useMutationObserver.js +0 -48
- package/directives/clickOutside/vClickOutside.js +0 -64
- package/directives/tooltip/vTooltip.js +0 -56
- package/ui.text-badge/useAttrs.js +0 -23
- package/ui.text-block/useAttrs.js +0 -15
- package/utils/utilUI.js +0 -360
- /package/adatper.locale/locales/{en.js → en.ts} +0 -0
- /package/ui.image-icon/{config.js → config.ts} +0 -0
- /package/ui.text-badge/{config.js → config.ts} +0 -0
- /package/ui.text-badge/{constants.js → constants.ts} +0 -0
- /package/ui.text-block/{config.js → config.ts} +0 -0
- /package/ui.text-block/{constants.js → constants.ts} +0 -0
package/utils/utilUI.js
DELETED
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import { merge } from "lodash-es";
|
|
2
|
-
import { defineConfig } from "cva";
|
|
3
|
-
import { extendTailwindMerge } from "tailwind-merge";
|
|
4
|
-
import { cloneDeep, isCSR, isSSR } from "./utilHelper.js";
|
|
5
|
-
import {
|
|
6
|
-
BRAND_COLOR,
|
|
7
|
-
GRAYSCALE_COLOR,
|
|
8
|
-
DEFAULT_BRAND_COLOR,
|
|
9
|
-
NESTED_COMPONENT_REG_EXP,
|
|
10
|
-
SYSTEM_CONFIG_KEY,
|
|
11
|
-
} from "../constants.js";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Load Vueless config from the project root.
|
|
15
|
-
* Both for server and client side renderings.
|
|
16
|
-
* IIFE for SSR is used to prevent top level await issue.
|
|
17
|
-
*/
|
|
18
|
-
export let vuelessConfig = {};
|
|
19
|
-
|
|
20
|
-
if (isSSR) {
|
|
21
|
-
/* Load Vueless config from the project root in IIFE (no top-level await). */
|
|
22
|
-
(async () => {
|
|
23
|
-
try {
|
|
24
|
-
const filePath = `${process.cwd()}/vueless.config`;
|
|
25
|
-
|
|
26
|
-
vuelessConfig = (await import(/* @vite-ignore */ `${filePath}.js`)).default;
|
|
27
|
-
|
|
28
|
-
if (!vuelessConfig) {
|
|
29
|
-
vuelessConfig = (await import(/* @vite-ignore */ `${filePath}.ts`)).default;
|
|
30
|
-
}
|
|
31
|
-
} catch (error) {
|
|
32
|
-
vuelessConfig = {};
|
|
33
|
-
}
|
|
34
|
-
})();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (isCSR) {
|
|
38
|
-
vuelessConfig =
|
|
39
|
-
Object.values(
|
|
40
|
-
import.meta.glob("/vueless.config.{js,ts}", { eager: true, import: "default" }),
|
|
41
|
-
)[0] || {};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Recursively merge config objects with removing tailwind classes duplicates.
|
|
46
|
-
* @param {Object} defaultConfig
|
|
47
|
-
* @param {Object} globalConfig
|
|
48
|
-
* @param {Object} propsConfig
|
|
49
|
-
* @param {Object} config - final merged config.
|
|
50
|
-
* @param {boolean} isReplace - enables class replacement instead of merge.
|
|
51
|
-
* @param {boolean} isVarinants - if true, prevents adding a "base" key into nested objects.
|
|
52
|
-
*
|
|
53
|
-
* @returns {Object}
|
|
54
|
-
*/
|
|
55
|
-
export function mergeConfigs({
|
|
56
|
-
defaultConfig,
|
|
57
|
-
globalConfig,
|
|
58
|
-
propsConfig,
|
|
59
|
-
config = {},
|
|
60
|
-
isReplace = false,
|
|
61
|
-
isVariants = false,
|
|
62
|
-
}) {
|
|
63
|
-
globalConfig = cloneDeep(globalConfig || {});
|
|
64
|
-
propsConfig = cloneDeep(propsConfig || {});
|
|
65
|
-
|
|
66
|
-
const isGlobalConfig = Object.keys(globalConfig).length;
|
|
67
|
-
const isPropsConfig = Object.keys(propsConfig).length;
|
|
68
|
-
|
|
69
|
-
// Add unique keys from defaultConfig to composedConfig
|
|
70
|
-
let composedConfig = cloneDeep(defaultConfig);
|
|
71
|
-
|
|
72
|
-
// Add unique keys from globalConfig to composedConfig
|
|
73
|
-
for (let key in globalConfig) {
|
|
74
|
-
if (!Object.keys(composedConfig).includes(key)) {
|
|
75
|
-
composedConfig[key] = globalConfig[key];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Add unique keys from propsConfig to composedConfig
|
|
80
|
-
for (let key in propsConfig) {
|
|
81
|
-
if (!Object.keys(composedConfig).includes(key)) {
|
|
82
|
-
composedConfig[key] = propsConfig[key];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const {
|
|
87
|
-
i18n,
|
|
88
|
-
defaults,
|
|
89
|
-
strategy,
|
|
90
|
-
safelist,
|
|
91
|
-
component,
|
|
92
|
-
safelistColors,
|
|
93
|
-
defaultVariants,
|
|
94
|
-
compoundVariants,
|
|
95
|
-
} = SYSTEM_CONFIG_KEY;
|
|
96
|
-
|
|
97
|
-
for (let key in composedConfig) {
|
|
98
|
-
if (isGlobalConfig || isPropsConfig) {
|
|
99
|
-
if (key === safelist || key === safelistColors) {
|
|
100
|
-
if (propsConfig[key]) {
|
|
101
|
-
// eslint-disable-next-line no-console
|
|
102
|
-
console.warn(`Passing '${key}' key in 'config' prop is not allowed.`);
|
|
103
|
-
}
|
|
104
|
-
} else if (key === component) {
|
|
105
|
-
config[key] = propsConfig[key] || defaultConfig[key];
|
|
106
|
-
|
|
107
|
-
if (globalConfig[key]) {
|
|
108
|
-
// eslint-disable-next-line no-console
|
|
109
|
-
console.warn(`Passing '${key}' key in 'config' prop or by global config is not allowed.`);
|
|
110
|
-
}
|
|
111
|
-
} else if (key === strategy) {
|
|
112
|
-
config[key] = propsConfig[key] || globalConfig[key] || defaultConfig[key];
|
|
113
|
-
} else if (key === defaults || key === defaultVariants) {
|
|
114
|
-
config[key] = { ...defaultConfig[key], ...globalConfig[key], ...propsConfig[key] };
|
|
115
|
-
} else if (key === compoundVariants) {
|
|
116
|
-
config[key] = mergeCompoundVariants({
|
|
117
|
-
defaultConfig: composedConfig,
|
|
118
|
-
globalConfig,
|
|
119
|
-
propsConfig,
|
|
120
|
-
isReplace,
|
|
121
|
-
key,
|
|
122
|
-
});
|
|
123
|
-
} else {
|
|
124
|
-
const isObjectComposedConfig = typeof composedConfig[key] === "object";
|
|
125
|
-
const isObjectGlobalConfig = typeof globalConfig[key] === "object";
|
|
126
|
-
const isObjectPropsConfig = typeof propsConfig[key] === "object";
|
|
127
|
-
|
|
128
|
-
const isObject = isObjectComposedConfig || isObjectGlobalConfig || isObjectPropsConfig;
|
|
129
|
-
const isEmpty = composedConfig[key] === null;
|
|
130
|
-
const isI18n = key === i18n;
|
|
131
|
-
|
|
132
|
-
if (key === "variants" && !isVariants) {
|
|
133
|
-
isVariants = true;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
config[key] =
|
|
137
|
-
isObject && !isEmpty && !isI18n
|
|
138
|
-
? mergeConfigs({
|
|
139
|
-
defaultConfig: stringToObject(composedConfig[key], { addBase: !isVariants }),
|
|
140
|
-
globalConfig: stringToObject(globalConfig[key], { addBase: !isVariants }),
|
|
141
|
-
propsConfig: stringToObject(propsConfig[key], { addBase: !isVariants }),
|
|
142
|
-
config: stringToObject(composedConfig[key], { addBase: !isVariants }),
|
|
143
|
-
isReplace,
|
|
144
|
-
isVariants,
|
|
145
|
-
})
|
|
146
|
-
: isReplace || isI18n
|
|
147
|
-
? propsConfig[key] || globalConfig[key] || defaultConfig[key]
|
|
148
|
-
: cx([defaultConfig[key], globalConfig[key], propsConfig[key]]);
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
config[key] = composedConfig[key];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return config;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
Turn simplified nested component config to regular config.
|
|
160
|
-
@param {Object | String} value
|
|
161
|
-
@param {Boolean} addBase
|
|
162
|
-
@returns {Object}
|
|
163
|
-
*/
|
|
164
|
-
function stringToObject(value, { addBase = false }) {
|
|
165
|
-
if (value === undefined) value = "";
|
|
166
|
-
|
|
167
|
-
return typeof value !== "object" ? addBase && { base: value } : value;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Merge CVA compound variants arrays.
|
|
172
|
-
* @param {Object} defaultConfig
|
|
173
|
-
* @param {Object} globalConfig
|
|
174
|
-
* @param {Object} propsConfig
|
|
175
|
-
* @param {string} key
|
|
176
|
-
* @param {boolean} isReplace - enables class replacement instead of merge.
|
|
177
|
-
*
|
|
178
|
-
* @returns {Array}
|
|
179
|
-
*/
|
|
180
|
-
function mergeCompoundVariants({ defaultConfig, globalConfig, propsConfig, key, isReplace }) {
|
|
181
|
-
if (
|
|
182
|
-
(globalConfig[key] && !Array.isArray(globalConfig[key])) ||
|
|
183
|
-
(propsConfig[key] && !Array.isArray(propsConfig[key])) ||
|
|
184
|
-
(defaultConfig[key] && !Array.isArray(defaultConfig[key]))
|
|
185
|
-
) {
|
|
186
|
-
// eslint-disable-next-line no-console
|
|
187
|
-
console.error("CompoundVariants should be an array.");
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
let globalConfigUniqueItems = cloneDeep(globalConfig[key] || []);
|
|
191
|
-
let propsConfigUniqueItems = cloneDeep(propsConfig[key] || []);
|
|
192
|
-
|
|
193
|
-
const config = defaultConfig[key].map((defaultConfigItem) => {
|
|
194
|
-
/**
|
|
195
|
-
* Compare two objects by keys for match.
|
|
196
|
-
* @param {Object} configItem
|
|
197
|
-
* @returns {Boolean}
|
|
198
|
-
*/
|
|
199
|
-
function isSameItem(configItem) {
|
|
200
|
-
const hasConfigItemKeys = Object.keys(defaultConfigItem)
|
|
201
|
-
.map((key) => defaultConfigItem[key] === configItem[key] || key === "class")
|
|
202
|
-
.every((item) => !!item);
|
|
203
|
-
|
|
204
|
-
const hasDefaultConfigItemKeys = Object.keys(configItem)
|
|
205
|
-
.map((key) => defaultConfigItem[key] === configItem[key] || key === "class")
|
|
206
|
-
.every((item) => !!item);
|
|
207
|
-
|
|
208
|
-
return hasConfigItemKeys && hasDefaultConfigItemKeys;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Find the same compound variant item in custom config if exist.
|
|
213
|
-
* @param {Object} config
|
|
214
|
-
* @returns {Object|undefined}
|
|
215
|
-
*/
|
|
216
|
-
function findItem(config = []) {
|
|
217
|
-
const globalConfigUniqueItemIndex = globalConfigUniqueItems.findIndex(isSameItem);
|
|
218
|
-
const propsConfigUniqueItemIndex = propsConfigUniqueItems.findIndex(isSameItem);
|
|
219
|
-
|
|
220
|
-
if (~globalConfigUniqueItemIndex) {
|
|
221
|
-
globalConfigUniqueItems.splice(globalConfigUniqueItemIndex, 1);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (~propsConfigUniqueItemIndex) {
|
|
225
|
-
propsConfigUniqueItems.splice(propsConfigUniqueItemIndex, 1);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
return config.find(isSameItem);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const globalConfigItem = findItem(globalConfig[key]);
|
|
232
|
-
const propsConfigItem = findItem(propsConfig[key]);
|
|
233
|
-
|
|
234
|
-
return globalConfigItem || propsConfigItem
|
|
235
|
-
? {
|
|
236
|
-
...defaultConfigItem,
|
|
237
|
-
class: isReplace
|
|
238
|
-
? propsConfigItem?.class || globalConfigItem?.class || defaultConfigItem.class
|
|
239
|
-
: cx([defaultConfigItem.class, globalConfigItem?.class, propsConfigItem?.class]),
|
|
240
|
-
}
|
|
241
|
-
: defaultConfigItem;
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
return [...config, ...globalConfigUniqueItems, ...propsConfigUniqueItems];
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Extend twMerge (tailwind merge) by vueless and user config:
|
|
249
|
-
* All list of rules available here:
|
|
250
|
-
* https://github.com/dcastil/tailwind-merge/blob/v2.3.0/src/lib/default-config.ts
|
|
251
|
-
*/
|
|
252
|
-
const twMerge = extendTailwindMerge(
|
|
253
|
-
merge(
|
|
254
|
-
{
|
|
255
|
-
extend: {
|
|
256
|
-
theme: {
|
|
257
|
-
spacing: ["safe-top", "safe-bottom", "safe-left", "safe-right"],
|
|
258
|
-
},
|
|
259
|
-
classGroups: {
|
|
260
|
-
"ring-w": [{ ring: ["dynamic"] }],
|
|
261
|
-
"ring-offset-w": [{ "ring-offset": ["dynamic"] }],
|
|
262
|
-
"ring-offset-color": [{ "ring-offset": ["dynamic"] }],
|
|
263
|
-
"font-size": [{ text: ["2xs"] }],
|
|
264
|
-
rounded: [{ rounded: ["dynamic"] }],
|
|
265
|
-
},
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
vuelessConfig.tailwindMerge,
|
|
269
|
-
),
|
|
270
|
-
);
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Export cva (class variance authority) methods:
|
|
274
|
-
* – extended with tailwind-merge
|
|
275
|
-
* – remove all Vueless nested component names ({U...} strings) from class list string.
|
|
276
|
-
* Learn more here: https://beta.cva.style
|
|
277
|
-
*/
|
|
278
|
-
export const {
|
|
279
|
-
cx,
|
|
280
|
-
compose,
|
|
281
|
-
cva: classVarianceAuthority,
|
|
282
|
-
} = defineConfig({
|
|
283
|
-
hooks: {
|
|
284
|
-
onComplete: (classNames) => twMerge(classNames).replace(NESTED_COMPONENT_REG_EXP, ""),
|
|
285
|
-
},
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
/* This allows skipping some CVA config keys in vueless config. */
|
|
289
|
-
export const cva = ({ base = "", variants = {}, compoundVariants = [], defaultVariants = {} }) =>
|
|
290
|
-
classVarianceAuthority({
|
|
291
|
-
base,
|
|
292
|
-
variants,
|
|
293
|
-
compoundVariants,
|
|
294
|
-
defaultVariants,
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Return default values for component props, icons, etc..
|
|
299
|
-
* @param { Object } defaultConfig
|
|
300
|
-
* @param { String } name
|
|
301
|
-
*
|
|
302
|
-
* @returns { Object }
|
|
303
|
-
*/
|
|
304
|
-
export function getDefault(defaultConfig, name) {
|
|
305
|
-
const defaults = merge(
|
|
306
|
-
cloneDeep(defaultConfig.defaults),
|
|
307
|
-
vuelessConfig.component ? vuelessConfig.component[name]?.defaults : {},
|
|
308
|
-
);
|
|
309
|
-
|
|
310
|
-
defaults.color = getColor(defaults.color);
|
|
311
|
-
|
|
312
|
-
return defaults;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* Return `grayscale` color if in component config it `brand` but in vueless config it `grayscale`
|
|
317
|
-
* Otherwise return given color.
|
|
318
|
-
* @param { String } color
|
|
319
|
-
*
|
|
320
|
-
* @returns { String }
|
|
321
|
-
*/
|
|
322
|
-
export function getColor(color) {
|
|
323
|
-
return (vuelessConfig.brand ?? DEFAULT_BRAND_COLOR) === GRAYSCALE_COLOR && color === BRAND_COLOR
|
|
324
|
-
? GRAYSCALE_COLOR
|
|
325
|
-
: color;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Replace in tailwind classes `{color}` variable into given color.
|
|
330
|
-
* @param { String } classes
|
|
331
|
-
* @param { String } color
|
|
332
|
-
*
|
|
333
|
-
* @returns { String }
|
|
334
|
-
*/
|
|
335
|
-
export function setColor(classes, color) {
|
|
336
|
-
if (typeof classes !== "string") {
|
|
337
|
-
return "";
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
return classes?.replaceAll("{color}", color);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Generates simple unique identifier.
|
|
345
|
-
* @param { Number } length
|
|
346
|
-
*
|
|
347
|
-
* @returns { String }
|
|
348
|
-
*/
|
|
349
|
-
export function getRandomId(length = 15) {
|
|
350
|
-
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
351
|
-
const charactersLength = characters.length;
|
|
352
|
-
|
|
353
|
-
let id = "";
|
|
354
|
-
|
|
355
|
-
while (id.length < length) {
|
|
356
|
-
id += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
return id;
|
|
360
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|