Skip to content

Commit 7e6f439

Browse files
[6.x] Stacks updates (#13350)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 99111cf commit 7e6f439

45 files changed

Lines changed: 1295 additions & 417 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.storybook/main.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { StorybookConfig } from '@storybook/vue3-vite';
2+
import { resolve } from 'path';
23

34
const config: StorybookConfig = {
45
stories: [
@@ -16,6 +17,15 @@ const config: StorybookConfig = {
1617
docgen: 'vue-component-meta'
1718
}
1819
},
20+
async viteFinal(config) {
21+
if (config.resolve) {
22+
config.resolve.alias = {
23+
...config.resolve.alias,
24+
'@api': resolve(process.cwd(), 'resources/js/api.js'),
25+
};
26+
}
27+
return config;
28+
},
1929
};
2030

2131
export default config;

.storybook/preview.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,14 @@ import PortalVue from 'portal-vue';
1313
import FullscreenHeader from '@/components/publish/FullscreenHeader.vue';
1414
import Portal from '@/components/portals/Portal.vue';
1515
import PortalTargets from '@/components/portals/PortalTargets.vue';
16+
import { portals, stacks } from '@api';
1617

1718
// Intercept Inertia navigation and log to Actions tab.
1819
router.on('before', (event) => {
1920
action('inertia navigate')(event.detail.visit.url);
2021
return false;
2122
});
2223

23-
// const portals = markRaw(new Portals());
24-
// const stacks = new Stacks(portals);
25-
2624
setup(async (app) => {
2725
window.__ = translate;
2826

@@ -53,8 +51,8 @@ setup(async (app) => {
5351
app.config.globalProperties.__ = translate;
5452
app.config.globalProperties.$date = new DateFormatter;
5553
app.config.globalProperties.cp_url = (url) => url;
56-
// app.config.globalProperties.$portals = portals;
57-
// app.config.globalProperties.$stacks = stacks;
54+
app.config.globalProperties.$portals = portals;
55+
app.config.globalProperties.$stacks = stacks;
5856

5957
app.use(PortalVue, { portalName: 'v-portal' });
6058

@@ -129,7 +127,10 @@ const preview: Preview = {
129127
}
130128
}
131129

132-
return story();
130+
return {
131+
components: { PortalTargets },
132+
template: '<div><story /><PortalTargets /></div>',
133+
};
133134
},
134135
],
135136
};

.storybook/storybook.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@import '../resources/css/ui.css';
33
@import '../resources/css/core/utilities.css';
44
@import '../resources/css/elements/tables.css';
5+
@import '../resources/css/components/stacks.css';
56
@custom-variant dark (&:where(.dark, .dark *));
67

78
.sbdocs h1:not(.sbdocs-preview *, .sbdocs-preview h1),
@@ -46,3 +47,11 @@
4647
.dark .sbdocs-preview {
4748
background: var(--theme-color-content-bg);
4849
}
50+
51+
.docs-story div[scale="1"] {
52+
transform: none !important;
53+
}
54+
55+
.stacks-on-stacks {
56+
z-index: 100;
57+
}

packages/cms/src/ui.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ export const {
9797
Switch,
9898
TabContent,
9999
Stack,
100+
StackClose,
101+
StackHeader,
102+
StackFooter,
103+
StackContent,
100104
Table,
101105
TableCell,
102106
TableColumn,

resources/js/bootstrap/cms/ui.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ export {
9797
Switch,
9898
TabContent,
9999
Stack,
100+
StackClose,
101+
StackHeader,
102+
StackFooter,
103+
StackContent,
100104
Table,
101105
TableCell,
102106
TableColumn,

resources/js/components/Config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { ref } from 'vue';
2+
import { data_get } from '@/bootstrap/globals';
23

34
export default class Config {
5+
config = ref({});
6+
47
initialize(initialConfig) {
58
this.config = ref(initialConfig);
69
}

resources/js/components/assets/Editor/Editor.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<ui-stack name="asset-editor" :before-close="shouldClose" :full="true" @closed="$emit('closed')" v-slot="{ close }">
2+
<Stack size="full" open inset ref="stack" :before-close="shouldClose" @update:open="$emit('closed')" :show-close-button="false">
33
<div
44
class="asset-editor relative flex h-full flex-col rounded-sm bg-gray-100 dark:bg-dark-800"
55
:class="isImage ? 'is-image' : 'is-file'"
@@ -22,7 +22,7 @@
2222
{{ asset.path }}
2323
</span>
2424
</button>
25-
<ui-button variant="ghost" icon="x" class="absolute top-1.5 end-1.5" round @click="confirmClose(close)" :aria-label="__('Close Editor')" />
25+
<ui-button variant="ghost" icon="x" class="absolute top-1.5 end-1.5" round @click="confirmClose()" :aria-label="__('Close Editor')" />
2626
</header>
2727

2828
<div class="flex flex-1 grow flex-col overflow-auto md:flex-row md:justify-between">
@@ -174,7 +174,7 @@
174174
@cancel="closingWithChanges = false"
175175
/>
176176
</div>
177-
</ui-stack>
177+
</Stack>
178178
</template>
179179

180180
<script>
@@ -188,6 +188,7 @@ import {
188188
PublishContainer,
189189
PublishTabs,
190190
Icon,
191+
Stack,
191192
} from '@ui';
192193
import ItemActions from '@/components/actions/ItemActions.vue';
193194
@@ -204,6 +205,7 @@ export default {
204205
PublishContainer,
205206
PublishTabs,
206207
Icon,
208+
Stack,
207209
},
208210
209211
props: {
@@ -435,7 +437,7 @@ export default {
435437
},
436438
437439
confirmClose(close) {
438-
if (this.shouldClose()) close();
440+
if (this.shouldClose()) this.$refs.stack.close();
439441
},
440442
441443
confirmCloseWithChanges() {

resources/js/components/blueprints/Fields.vue

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,22 @@
3333
<ui-button icon="add-circle" :text="__('Create Field')" @click="createField" />
3434
</div>
3535

36-
<ui-stack
37-
name="fieldtype-selector"
38-
v-if="isSelectingNewFieldtype"
36+
<Stack
37+
v-model:open="isSelectingNewFieldtype"
3938
@closed="isSelectingNewFieldtype = false"
39+
:title="__('Fieldtypes')"
40+
icon="cog"
4041
v-slot="{ close }"
4142
>
4243
<fieldtype-selector @closed="close" @selected="fieldtypeSelected" />
43-
</ui-stack>
44+
</Stack>
4445

45-
<ui-stack
46-
name="field-settings"
47-
v-if="pendingCreatedField != null"
46+
<Stack
47+
:open="pendingCreatedField != null"
48+
@update:open="(value) => { if (!value) pendingCreatedField = null }"
4849
@closed="pendingCreatedField = null"
4950
v-slot="{ close }"
51+
inset
5052
>
5153
<field-settings
5254
ref="settings"
@@ -59,7 +61,7 @@
5961
@committed="fieldCreated"
6062
@closed="close"
6163
/>
62-
</ui-stack>
64+
</Stack>
6365
</div>
6466
</template>
6567

@@ -71,6 +73,7 @@ import LinkFields from './LinkFields.vue';
7173
import FieldtypeSelector from '../fields/FieldtypeSelector.vue';
7274
import FieldSettings from '../fields/Settings.vue';
7375
import CanDefineLocalizable from '../fields/CanDefineLocalizable';
76+
import { Stack } from '@/components/ui';
7477
7578
export default {
7679
mixins: [CanDefineLocalizable],
@@ -81,6 +84,7 @@ export default {
8184
LinkFields,
8285
FieldtypeSelector,
8386
FieldSettings,
87+
Stack,
8488
},
8589
8690
props: {
@@ -129,7 +133,7 @@ export default {
129133
},
130134
};
131135
132-
this.$nextTick(() => (this.pendingCreatedField = pending));
136+
setTimeout(() => (this.pendingCreatedField = pending), 500); // wait for stack to close
133137
},
134138
135139
createField() {

resources/js/components/blueprints/ImportField.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</div>
1717
<div class="flex items-center gap-2">
1818
<ui-button size="sm" icon="trash" variant="subtle" @click.prevent="$emit('deleted')" v-tooltip="__('Remove')" />
19-
<ui-stack name="field-settings" v-if="isEditing" @closed="editorClosed">
19+
<ui-stack :open="isEditing" @update:open="editorClosed" inset :show-close-button="false">
2020
<field-settings
2121
ref="settings"
2222
:id="field._id"

resources/js/components/blueprints/LinkFields.vue

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
<template>
22
<div>
3-
<ui-button icon="link" @click="open = true" :text="__('Link Existing')" />
4-
5-
<ui-stack narrow v-if="open" @closed="open = false" name="field-linker" v-slot="{ close }">
6-
<div class="h-full overflow-auto bg-white dark:bg-gray-800 p-3 rounded-l-xl">
7-
<header class="flex items-center justify-between pl-3">
8-
<Heading :text="__('Link Fields')" size="lg" icon="fieldsets" />
9-
<Button type="button" icon="x" variant="subtle" @click="close" />
10-
</header>
11-
12-
<div class="flex-1 overflow-auto px-3 py-4">
3+
<Stack
4+
size="narrow"
5+
v-model:open="open"
6+
:title="__('Link Fields')"
7+
icon="fieldsets"
8+
>
9+
<template #trigger>
10+
<Button icon="link" :text="__('Link Existing')" />
11+
</template>
12+
13+
<div class="">
14+
<div class="">
1315
<Field
1416
:label="__('Link a single field')"
1517
:instructions="__('Changes to this field in the fieldset will stay in sync.')"
@@ -90,17 +92,17 @@
9092
/>
9193
</div>
9294
</div>
93-
</ui-stack>
95+
</Stack>
9496
</div>
9597
</template>
9698

9799
<script>
98100
import uniqid from 'uniqid';
99-
import { Combobox, Button, Input, Heading, Field } from '@/components/ui';
101+
import { Combobox, Button, Input, Heading, Field, Stack, StackClose } from '@/components/ui';
100102
import { usePage } from '@inertiajs/vue3';
101103
102104
export default {
103-
components: { Heading, Combobox, Button, Input, Field },
105+
components: { Heading, Combobox, Button, Input, Field, Stack, StackClose },
104106
105107
props: {
106108
excludeFieldset: String,

0 commit comments

Comments
 (0)