From 21329e8239b909bd55719793cf2802d9ed9953ed Mon Sep 17 00:00:00 2001 From: jd-solanki Date: Thu, 9 Feb 2023 17:12:41 +0530 Subject: [PATCH] feat(select)!: reuse `AFloating` & `AList`components --- .../demos/list/DemoListVModelSupport.vue | 12 +- .../demos/select/DemoSelectBasic.vue | 10 +- .../src/components/floating/AFloating.vue | 7 ++ .../src/components/floating/middlewares.ts | 18 ++- .../anu-vue/src/components/list/AList.vue | 52 +++++--- .../anu-vue/src/components/select/ASelect.vue | 113 ++++++------------ .../preset-theme-default/src/scss/index.scss | 12 +- .../preset-theme-default/src/shortcuts.ts | 5 +- 8 files changed, 109 insertions(+), 120 deletions(-) diff --git a/docs/components/demos/list/DemoListVModelSupport.vue b/docs/components/demos/list/DemoListVModelSupport.vue index d5cd504a..d12a9b81 100644 --- a/docs/components/demos/list/DemoListVModelSupport.vue +++ b/docs/components/demos/list/DemoListVModelSupport.vue @@ -8,8 +8,8 @@ const items = [ { text: 'Cake gummi', disabled: true }, ] -const itemsPropSelection = ref(0) -const slotSelection = ref(0) +const itemsPropSelection = ref(null) +const slotSelection = ref(null) @@ -44,8 +44,8 @@ const slotSelection = ref(0) :key="item.text" :text="item.text" :value="index" - :disable="item.disable" - :is-active="slotSelection === index" + :disabled="item.disabled" + :is-active="slotSelection?.text === item.text" @click="handleListItemClick(item, index)" /> @@ -53,7 +53,7 @@ const slotSelection = ref(0)
diff --git a/docs/components/demos/select/DemoSelectBasic.vue b/docs/components/demos/select/DemoSelectBasic.vue index 435ddc59..da3ac6de 100644 --- a/docs/components/demos/select/DemoSelectBasic.vue +++ b/docs/components/demos/select/DemoSelectBasic.vue @@ -8,11 +8,11 @@ const fruits = ['banana', 'apple', 'watermelon', 'orange'] // Framework const selectedFramework = ref() const frameworks = [ - { label: 'VueJS', value: 'vue' }, - { label: 'ReactJS', value: 'react' }, - { label: 'AngularJS', value: 'angular' }, - { label: 'SolidJS', value: 'solid' }, - { label: 'AlpineJS', value: 'alpine' }, + { text: 'VueJS', value: 'vue' }, + { text: 'ReactJS', value: 'react' }, + { text: 'AngularJS', value: 'angular' }, + { text: 'SolidJS', value: 'solid' }, + { text: 'AlpineJS', value: 'alpine' }, ] diff --git a/packages/anu-vue/src/components/floating/AFloating.vue b/packages/anu-vue/src/components/floating/AFloating.vue index b9aa1d1f..4bdfd2be 100644 --- a/packages/anu-vue/src/components/floating/AFloating.vue +++ b/packages/anu-vue/src/components/floating/AFloating.vue @@ -16,6 +16,7 @@ const emit = defineEmits<{ defineOptions({ name: 'AFloating', + inheritAttrs: false, }) const { teleportTarget } = useTeleport() @@ -106,6 +107,11 @@ if (props.modelValue === undefined) { } } } + +// Expose: https://vuejs.org/api/sfc-script-setup.html#defineexpose +defineExpose({ + refFloating, +}) diff --git a/packages/preset-theme-default/src/scss/index.scss b/packages/preset-theme-default/src/scss/index.scss index bd84ac6b..67574c11 100644 --- a/packages/preset-theme-default/src/scss/index.scss +++ b/packages/preset-theme-default/src/scss/index.scss @@ -12,6 +12,8 @@ $body-color: hsla(var(--a-base-c), 0.68); // #region all-css-vars --a-base-c: 0, 10%, 20%; + --a-spacing: 1; + // ℹī¸ Represents theme color. light => white, dark => black. ATM, it's used for backdrop & badge outline color. --a-theme-c: 0, 0%, 100%; @@ -69,11 +71,11 @@ $body-color: hsla(var(--a-base-c), 0.68); // 👉 List // ℹī¸ We might not need `--a-list-gap` this if we are using just `AList`, however when we use list inside another component this will be helpful // #region a-list-css-vars - --a-list-gap: 0rem; - --a-list-item-gap: 0.75rem; - --a-list-item-padding: 0.5rem 1rem; - --a-list-item-margin: 0rem; - --a-list-item-min-height: 2.5rem; + --a-list-gap: calc(0em * var(--a-spacing)); + --a-list-item-gap: calc(0.75em * var(--a-spacing)); + --a-list-item-padding: calc(0.5em * var(--a-spacing)) calc(1em * var(--a-spacing)); + --a-list-item-margin: calc(0em * var(--a-spacing)); + --a-list-item-min-height: calc(2.5em * var(--a-spacing)); // #endregion a-list-css-vars // #endregion all-css-vars diff --git a/packages/preset-theme-default/src/shortcuts.ts b/packages/preset-theme-default/src/shortcuts.ts index 017afb92..3be50dd5 100644 --- a/packages/preset-theme-default/src/shortcuts.ts +++ b/packages/preset-theme-default/src/shortcuts.ts @@ -130,8 +130,9 @@ const shortcuts: Exclude = [ 'a-radio-disabled': 'opacity-50', // 👉 Select - 'a-select-options-container': 'z-10 border border-solid border-a-border em:spacing:rounded-lg em:spacing:py-3 shadow-lg', - 'a-select-option': 'em:spacing:px-4 em:spacing:py-1', + 'a-select-floating': '[--a-transition-slide-up-transform:6px]', + 'a-select-options-container': '', + 'a-select-options-list': '![--a-spacing:0.75]', // 👉 Switch 'a-switch': 'select-none',