diff --git a/apps/showcase/components/layout/AppDesigner.vue b/apps/showcase/components/layout/AppDesigner.vue index 59cffc5f9..d38ce175a 100644 --- a/apps/showcase/components/layout/AppDesigner.vue +++ b/apps/showcase/components/layout/AppDesigner.vue @@ -1,5 +1,5 @@ @@ -82,6 +90,7 @@ import { usePreset } from '@primeuix/themes'; import Aura from '@primeuix/themes/aura'; export default { + scrollListener: null, setup() { const runtimeConfig = useRuntimeConfig(); @@ -90,6 +99,9 @@ export default { }; }, inject: ['designerService'], + beforeUnmount() { + this.unbindScrollListener(); + }, data() { return { licenseKey: null, @@ -236,21 +248,30 @@ export default { } }, async renameTheme(theme) { - const { error } = await $fetch(this.designerApiUrl + '/theme/rename/' + theme.t_key, { - method: 'PATCH', - credentials: 'include', - headers: { - 'X-CSRF-Token': this.$appState.designer.csrfToken - }, - body: { - name: theme.t_name - } - }); + if (theme.t_name && theme.t_name.trim().length) { + const { error } = await $fetch(this.designerApiUrl + '/theme/rename/' + theme.t_key, { + method: 'PATCH', + credentials: 'include', + headers: { + 'X-CSRF-Token': this.$appState.designer.csrfToken + }, + body: { + name: theme.t_name + } + }); - if (error) { - this.$toast.add({ severity: 'error', summary: 'An Error Occurred', detail: error.message, life: 3000 }); + if (error) { + this.$toast.add({ severity: 'error', summary: 'An Error Occurred', detail: error.message, life: 3000 }); + } } }, + onThemeNameEnterKey(event) { + event.target.blur(); + }, + onThemeNameEscape(event) { + event.target.blur(); + event.stopPropagation(); + }, async deleteTheme(theme) { const { error } = await $fetch(this.designerApiUrl + '/theme/delete/' + theme.t_key, { method: 'DELETE', @@ -299,6 +320,27 @@ export default { this.currentTheme = theme; this.$refs.themeMenu.toggle(event); }, + onMenuShow() { + this.bindScrollListener(); + }, + onMenuHide() { + this.unbindScrollListener(); + }, + bindScrollListener() { + if (!this.scrollListener) { + this.scrollListener = () => { + this.$refs.themeMenu.hide(); + }; + + window.addEventListener('scroll', this.scrollListener); + } + }, + unbindScrollListener() { + if (this.scrollListener) { + window.removeEventListener('scroll', this.scrollListener); + this.scrollListener = null; + } + }, abbrThemeName(theme) { return theme.t_name ? theme.t_name.substring(0, 2) : 'UT'; } diff --git a/apps/showcase/components/layout/designer/editor/DesignTokenField.vue b/apps/showcase/components/layout/designer/editor/DesignTokenField.vue index 6fe571dda..6c37fb702 100644 --- a/apps/showcase/components/layout/designer/editor/DesignTokenField.vue +++ b/apps/showcase/components/layout/designer/editor/DesignTokenField.vue @@ -17,6 +17,7 @@ unstyled optionLabel="label" :showEmptyMessage="false" + appendTo="self" :pt="{ pcInputText: { root: [ diff --git a/apps/showcase/components/layout/designer/editor/component/DesignComponent.vue b/apps/showcase/components/layout/designer/editor/component/DesignComponent.vue index 87de0da3c..8dfabbe4c 100644 --- a/apps/showcase/components/layout/designer/editor/component/DesignComponent.vue +++ b/apps/showcase/components/layout/designer/editor/component/DesignComponent.vue @@ -5,7 +5,7 @@
There are no design tokens @@ -54,7 +54,11 @@ export default { return this.tokens.colorScheme != undefined; }, hasCommonTokens() { - return Object.keys(this.tokens).filter((name) => name !== 'colorScheme').length > 0; + return ( + Object.keys(this.tokens).filter((name) => { + return name !== 'colorScheme' && name !== 'css'; + }).length > 0 + ); } } }; diff --git a/apps/showcase/components/layout/designer/editor/custom/DesignCustomTokens.vue b/apps/showcase/components/layout/designer/editor/custom/DesignCustomTokens.vue index c51946d4d..fb73d5329 100644 --- a/apps/showcase/components/layout/designer/editor/custom/DesignCustomTokens.vue +++ b/apps/showcase/components/layout/designer/editor/custom/DesignCustomTokens.vue @@ -1,5 +1,7 @@