@revenexx/studio-shared 0.1.2 → 0.3.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/README.md +22 -12
- package/dist/module.d.mts +15 -0
- package/dist/module.json +9 -0
- package/dist/module.mjs +58 -0
- package/dist/runtime/components/DataTable/ColumnsMenu.d.vue.ts +12 -0
- package/{components → dist/runtime/components}/DataTable/ColumnsMenu.vue +13 -19
- package/dist/runtime/components/DataTable/ColumnsMenu.vue.d.ts +12 -0
- package/dist/runtime/components/DataTable/DataTable.d.vue.ts +87 -0
- package/dist/runtime/components/DataTable/DataTable.vue +510 -0
- package/dist/runtime/components/DataTable/DataTable.vue.d.ts +87 -0
- package/dist/runtime/components/DataTable/FilterMenu.d.vue.ts +21 -0
- package/dist/runtime/components/DataTable/FilterMenu.vue +46 -0
- package/dist/runtime/components/DataTable/FilterMenu.vue.d.ts +21 -0
- package/dist/runtime/components/DataTable/SavedViewsMenu.d.vue.ts +6 -0
- package/dist/runtime/components/DataTable/SavedViewsMenu.vue +189 -0
- package/dist/runtime/components/DataTable/SavedViewsMenu.vue.d.ts +6 -0
- package/dist/runtime/components/DataTable/SortMenu.d.vue.ts +13 -0
- package/dist/runtime/components/DataTable/SortMenu.vue +47 -0
- package/dist/runtime/components/DataTable/SortMenu.vue.d.ts +13 -0
- package/dist/runtime/components/DataTable/ViewModeSwitch.d.vue.ts +20 -0
- package/dist/runtime/components/DataTable/ViewModeSwitch.vue +26 -0
- package/dist/runtime/components/DataTable/ViewModeSwitch.vue.d.ts +20 -0
- package/dist/runtime/components/DataTable/types.d.ts +104 -0
- package/dist/runtime/components/DataTable/types.js +0 -0
- package/dist/runtime/components/Media/MediaFolderTree.d.vue.ts +17 -0
- package/dist/runtime/components/Media/MediaFolderTree.vue +65 -0
- package/dist/runtime/components/Media/MediaFolderTree.vue.d.ts +17 -0
- package/dist/runtime/components/Media/MediaPickerDialog.d.vue.ts +18 -0
- package/dist/runtime/components/Media/MediaPickerDialog.vue +163 -0
- package/dist/runtime/components/Media/MediaPickerDialog.vue.d.ts +18 -0
- package/dist/runtime/components/Media/MediaUploader.d.vue.ts +29 -0
- package/dist/runtime/components/Media/MediaUploader.vue +161 -0
- package/dist/runtime/components/Media/MediaUploader.vue.d.ts +29 -0
- package/dist/runtime/components/Shared/BuildLogsFlyout.d.vue.ts +30 -0
- package/{components → dist/runtime/components}/Shared/BuildLogsFlyout.vue +37 -54
- package/dist/runtime/components/Shared/BuildLogsFlyout.vue.d.ts +30 -0
- package/dist/runtime/components/Shared/GitDeploymentSettings.d.vue.ts +17 -0
- package/dist/runtime/components/Shared/GitDeploymentSettings.vue +75 -0
- package/dist/runtime/components/Shared/GitDeploymentSettings.vue.d.ts +17 -0
- package/dist/runtime/components/Shared/KpiTile.d.vue.ts +13 -0
- package/{components → dist/runtime/components}/Shared/KpiTile.vue +11 -19
- package/dist/runtime/components/Shared/KpiTile.vue.d.ts +13 -0
- package/dist/runtime/components/Shared/ListSurface.d.vue.ts +38 -0
- package/dist/runtime/components/Shared/ListSurface.vue +27 -0
- package/dist/runtime/components/Shared/ListSurface.vue.d.ts +38 -0
- package/dist/runtime/components/Shared/PageHeader.d.vue.ts +23 -0
- package/{components → dist/runtime/components}/Shared/PageHeader.vue +6 -8
- package/dist/runtime/components/Shared/PageHeader.vue.d.ts +23 -0
- package/dist/runtime/components/Shared/RecordLayout.d.vue.ts +52 -0
- package/dist/runtime/components/Shared/RecordLayout.vue +63 -0
- package/dist/runtime/components/Shared/RecordLayout.vue.d.ts +52 -0
- package/dist/runtime/components/Shared/RecordRailCard.d.vue.ts +26 -0
- package/dist/runtime/components/Shared/RecordRailCard.vue +20 -0
- package/dist/runtime/components/Shared/RecordRailCard.vue.d.ts +26 -0
- package/dist/runtime/components/Shared/SidebarNav.d.vue.ts +41 -0
- package/dist/runtime/components/Shared/SidebarNav.vue +48 -0
- package/dist/runtime/components/Shared/SidebarNav.vue.d.ts +41 -0
- package/dist/runtime/components/Shared/SidebarNavLink.d.vue.ts +15 -0
- package/dist/runtime/components/Shared/SidebarNavLink.vue +49 -0
- package/dist/runtime/components/Shared/SidebarNavLink.vue.d.ts +15 -0
- package/dist/runtime/components/Shared/SortHeader.d.vue.ts +23 -0
- package/dist/runtime/components/Shared/SortHeader.vue +35 -0
- package/dist/runtime/components/Shared/SortHeader.vue.d.ts +23 -0
- package/dist/runtime/components/Shared/StateCard.d.vue.ts +32 -0
- package/{components → dist/runtime/components}/Shared/StateCard.vue +21 -36
- package/dist/runtime/components/Shared/StateCard.vue.d.ts +32 -0
- package/dist/runtime/components/Shared/StudioCard.d.vue.ts +15 -0
- package/dist/runtime/components/Shared/StudioCard.vue +19 -0
- package/dist/runtime/components/Shared/StudioCard.vue.d.ts +15 -0
- package/dist/runtime/components/Shared/TabBar.d.vue.ts +23 -0
- package/{components → dist/runtime/components}/Shared/TabBar.vue +7 -16
- package/dist/runtime/components/Shared/TabBar.vue.d.ts +23 -0
- package/dist/runtime/components/Shared/ViewTab.d.vue.ts +7 -0
- package/{components → dist/runtime/components}/Shared/ViewTab.vue +7 -9
- package/dist/runtime/components/Shared/ViewTab.vue.d.ts +7 -0
- package/dist/runtime/components/Shared/Wizard.d.vue.ts +47 -0
- package/dist/runtime/components/Shared/Wizard.vue +66 -0
- package/dist/runtime/components/Shared/Wizard.vue.d.ts +47 -0
- package/dist/runtime/composables/useListRail.d.ts +9 -0
- package/dist/runtime/composables/useListRail.js +19 -0
- package/dist/runtime/composables/useMediaLibrary.d.ts +41 -0
- package/dist/runtime/composables/useMediaLibrary.js +36 -0
- package/dist/runtime/composables/usePlatformAuth.d.ts +35 -0
- package/dist/runtime/composables/usePlatformAuth.js +17 -0
- package/dist/runtime/composables/usePlatformTalkback.d.ts +29 -0
- package/dist/runtime/composables/usePlatformTalkback.js +54 -0
- package/dist/runtime/composables/usePlatformTenant.d.ts +14 -0
- package/dist/runtime/composables/usePlatformTenant.js +18 -0
- package/dist/runtime/composables/useT.d.ts +11 -0
- package/dist/runtime/composables/useT.js +8 -0
- package/dist/runtime/composables/useTalkbackChannels.d.ts +78 -0
- package/dist/runtime/composables/useTalkbackChannels.js +52 -0
- package/dist/runtime/lib/formatBridge.d.ts +50 -0
- package/dist/runtime/lib/formatBridge.js +54 -0
- package/dist/runtime/lib/i18nBridge.d.ts +31 -0
- package/dist/runtime/lib/i18nBridge.js +17 -0
- package/dist/runtime/lib/isoLists.d.ts +61 -0
- package/dist/runtime/lib/isoLists.js +62 -0
- package/dist/runtime/lib/sidebarNav.d.ts +34 -0
- package/dist/runtime/lib/sidebarNav.js +22 -0
- package/dist/runtime/lib/talkback.d.ts +59 -0
- package/dist/runtime/lib/talkback.js +49 -0
- package/dist/runtime/types/nav.d.ts +37 -0
- package/dist/runtime/types/nav.js +0 -0
- package/dist/runtime/types/storage.d.ts +67 -0
- package/dist/runtime/types/storage.js +0 -0
- package/dist/types.d.mts +27 -0
- package/package.json +41 -13
- package/components/DataTable/DataTable.vue +0 -518
- package/components/DataTable/FilterMenu.vue +0 -40
- package/components/DataTable/types.ts +0 -82
- package/components/Shared/GitDeploymentSettings.vue +0 -87
- package/components/Shared/SidebarNav.vue +0 -100
- package/components/Shared/SortHeader.vue +0 -50
- package/components/Shared/StudioCard.vue +0 -24
- package/components/Shared/Wizard.vue +0 -80
- package/composables/usePlatformAuth.ts +0 -35
- package/composables/usePlatformTenant.ts +0 -35
- package/index.ts +0 -16
- package/nuxt.config.ts +0 -23
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import {
|
|
3
|
+
Card,
|
|
4
|
+
CardContent,
|
|
5
|
+
CardDescription,
|
|
6
|
+
CardHeader,
|
|
7
|
+
CardTitle,
|
|
8
|
+
Label,
|
|
9
|
+
Select,
|
|
10
|
+
SelectContent,
|
|
11
|
+
SelectItem,
|
|
12
|
+
SelectTrigger,
|
|
13
|
+
SelectValue,
|
|
14
|
+
Switch
|
|
15
|
+
} from "@revenexx/studio";
|
|
16
|
+
defineProps({
|
|
17
|
+
triggerMode: { type: String, required: true },
|
|
18
|
+
previewsEnabled: { type: Boolean, required: true },
|
|
19
|
+
disabled: { type: Boolean, required: false, default: false },
|
|
20
|
+
showPreviews: { type: Boolean, required: false, default: true }
|
|
21
|
+
});
|
|
22
|
+
defineEmits(["update:triggerMode", "update:previewsEnabled"]);
|
|
23
|
+
const t = useT();
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<Card class="bg-white/60 backdrop-blur-sm">
|
|
28
|
+
<CardHeader>
|
|
29
|
+
<CardTitle class="text-sm">{{ t("shared.git.settings.title") }}</CardTitle>
|
|
30
|
+
<CardDescription class="text-sm">
|
|
31
|
+
{{ t("shared.git.settings.description") }}
|
|
32
|
+
</CardDescription>
|
|
33
|
+
</CardHeader>
|
|
34
|
+
<CardContent class="space-y-4">
|
|
35
|
+
<div class="space-y-1">
|
|
36
|
+
<Label for="vcs-trigger-mode">{{ t("shared.git.settings.field.when") }}</Label>
|
|
37
|
+
<Select
|
|
38
|
+
:model-value="triggerMode"
|
|
39
|
+
:disabled="disabled"
|
|
40
|
+
@update:model-value="(v) => $emit('update:triggerMode', v)"
|
|
41
|
+
>
|
|
42
|
+
<SelectTrigger id="vcs-trigger-mode">
|
|
43
|
+
<SelectValue :placeholder="t('shared.git.settings.select.placeholder')" />
|
|
44
|
+
</SelectTrigger>
|
|
45
|
+
<SelectContent>
|
|
46
|
+
<SelectItem value="push">{{ t("shared.git.settings.option.push") }}</SelectItem>
|
|
47
|
+
<SelectItem value="tag">{{ t("shared.git.settings.option.tag") }}</SelectItem>
|
|
48
|
+
</SelectContent>
|
|
49
|
+
</Select>
|
|
50
|
+
<p class="text-sm text-muted-foreground">
|
|
51
|
+
<template v-if="triggerMode === 'tag'">
|
|
52
|
+
{{ t("shared.git.settings.hint.tag") }}
|
|
53
|
+
</template>
|
|
54
|
+
<template v-else>
|
|
55
|
+
{{ t("shared.git.settings.hint.push") }}
|
|
56
|
+
</template>
|
|
57
|
+
</p>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div v-if="showPreviews" class="flex items-center gap-2 pt-1">
|
|
61
|
+
<Switch
|
|
62
|
+
:model-value="previewsEnabled"
|
|
63
|
+
:disabled="disabled"
|
|
64
|
+
@update:model-value="(v) => $emit('update:previewsEnabled', v)"
|
|
65
|
+
/>
|
|
66
|
+
<div class="text-sm">
|
|
67
|
+
<div class="font-medium">{{ t("shared.git.settings.previews.title") }}</div>
|
|
68
|
+
<div class="text-sm text-muted-foreground">
|
|
69
|
+
{{ t("shared.git.settings.previews.description") }}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</CardContent>
|
|
74
|
+
</Card>
|
|
75
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
triggerMode: string;
|
|
3
|
+
previewsEnabled: boolean;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
showPreviews?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
8
|
+
"update:triggerMode": (value: string) => any;
|
|
9
|
+
"update:previewsEnabled": (value: boolean) => any;
|
|
10
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
"onUpdate:triggerMode"?: ((value: string) => any) | undefined;
|
|
12
|
+
"onUpdate:previewsEnabled"?: ((value: boolean) => any) | undefined;
|
|
13
|
+
}>, {
|
|
14
|
+
disabled: boolean;
|
|
15
|
+
showPreviews: boolean;
|
|
16
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string | number;
|
|
4
|
+
icon?: unknown;
|
|
5
|
+
/** Colored change indicator, e.g. "+12.5%". */
|
|
6
|
+
delta?: string;
|
|
7
|
+
up?: boolean;
|
|
8
|
+
/** Muted line under the value (e.g. "vs last month"). */
|
|
9
|
+
sub?: string;
|
|
10
|
+
to?: string;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
export default _default;
|
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
<script setup
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
icon?: unknown
|
|
13
|
-
/** Colored change indicator, e.g. "+12.5%". */
|
|
14
|
-
delta?: string
|
|
15
|
-
up?: boolean
|
|
16
|
-
/** Muted line under the value (e.g. "vs last month"). */
|
|
17
|
-
sub?: string
|
|
18
|
-
to?: string
|
|
19
|
-
}>()
|
|
1
|
+
<script setup>
|
|
2
|
+
import { NuxtLink } from "#components";
|
|
3
|
+
defineProps({
|
|
4
|
+
label: { type: String, required: true },
|
|
5
|
+
value: { type: [String, Number], required: true },
|
|
6
|
+
icon: { type: null, required: false },
|
|
7
|
+
delta: { type: String, required: false },
|
|
8
|
+
up: { type: Boolean, required: false },
|
|
9
|
+
sub: { type: String, required: false },
|
|
10
|
+
to: { type: String, required: false }
|
|
11
|
+
});
|
|
20
12
|
</script>
|
|
21
13
|
|
|
22
14
|
<template>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string | number;
|
|
4
|
+
icon?: unknown;
|
|
5
|
+
/** Colored change indicator, e.g. "+12.5%". */
|
|
6
|
+
delta?: string;
|
|
7
|
+
up?: boolean;
|
|
8
|
+
/** Muted line under the value (e.g. "vs last month"). */
|
|
9
|
+
sub?: string;
|
|
10
|
+
to?: string;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frame every list surface with a left rail shares: an optional,
|
|
3
|
+
* collapsible rail column, the list itself, and an optional aside (a detail
|
|
4
|
+
* flyout column).
|
|
5
|
+
*
|
|
6
|
+
* The collapse *control* lives in the DataTable toolbar (`rail` prop +
|
|
7
|
+
* `v-model:rail-open`) so a surface never grows a second control row; this
|
|
8
|
+
* component only reacts to the same boolean. Use `useListRail()` for a state
|
|
9
|
+
* that survives a reload.
|
|
10
|
+
*/
|
|
11
|
+
type __VLS_Props = {
|
|
12
|
+
/** Rail visible? Bind the same ref the DataTable's `rail-open` model has. */
|
|
13
|
+
railOpen?: boolean;
|
|
14
|
+
/** Rail track width (default 240px). */
|
|
15
|
+
railWidth?: string;
|
|
16
|
+
/** Aside track width (default 280px). */
|
|
17
|
+
asideWidth?: string;
|
|
18
|
+
};
|
|
19
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
|
|
20
|
+
type __VLS_Slots = {} & {
|
|
21
|
+
rail?: (props: typeof __VLS_1) => any;
|
|
22
|
+
} & {
|
|
23
|
+
default?: (props: typeof __VLS_3) => any;
|
|
24
|
+
} & {
|
|
25
|
+
aside?: (props: typeof __VLS_5) => any;
|
|
26
|
+
};
|
|
27
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
28
|
+
railOpen: boolean;
|
|
29
|
+
railWidth: string;
|
|
30
|
+
asideWidth: string;
|
|
31
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
32
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
33
|
+
export default _default;
|
|
34
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
35
|
+
new (): {
|
|
36
|
+
$slots: S;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
defineProps({
|
|
3
|
+
railOpen: { type: Boolean, required: false, default: true },
|
|
4
|
+
railWidth: { type: String, required: false, default: "240px" },
|
|
5
|
+
asideWidth: { type: String, required: false, default: "280px" }
|
|
6
|
+
});
|
|
7
|
+
const slots = useSlots();
|
|
8
|
+
const hasAside = computed(() => !!slots.aside);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<div
|
|
13
|
+
class="grid grid-cols-1 items-start gap-3"
|
|
14
|
+
:style="{ '--rail-w': railWidth, '--aside-w': asideWidth }"
|
|
15
|
+
:class="railOpen ? hasAside ? 'lg:grid-cols-[var(--rail-w)_minmax(0,1fr)_var(--aside-w)]' : 'lg:grid-cols-[var(--rail-w)_minmax(0,1fr)]' : hasAside ? 'lg:grid-cols-[minmax(0,1fr)_var(--aside-w)]' : 'lg:grid-cols-1'"
|
|
16
|
+
>
|
|
17
|
+
<div v-if="railOpen" class="min-w-0">
|
|
18
|
+
<slot name="rail" />
|
|
19
|
+
</div>
|
|
20
|
+
<div class="min-w-0">
|
|
21
|
+
<slot />
|
|
22
|
+
</div>
|
|
23
|
+
<div v-if="hasAside" class="min-w-0">
|
|
24
|
+
<slot name="aside" />
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</template>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frame every list surface with a left rail shares: an optional,
|
|
3
|
+
* collapsible rail column, the list itself, and an optional aside (a detail
|
|
4
|
+
* flyout column).
|
|
5
|
+
*
|
|
6
|
+
* The collapse *control* lives in the DataTable toolbar (`rail` prop +
|
|
7
|
+
* `v-model:rail-open`) so a surface never grows a second control row; this
|
|
8
|
+
* component only reacts to the same boolean. Use `useListRail()` for a state
|
|
9
|
+
* that survives a reload.
|
|
10
|
+
*/
|
|
11
|
+
type __VLS_Props = {
|
|
12
|
+
/** Rail visible? Bind the same ref the DataTable's `rail-open` model has. */
|
|
13
|
+
railOpen?: boolean;
|
|
14
|
+
/** Rail track width (default 240px). */
|
|
15
|
+
railWidth?: string;
|
|
16
|
+
/** Aside track width (default 280px). */
|
|
17
|
+
asideWidth?: string;
|
|
18
|
+
};
|
|
19
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
|
|
20
|
+
type __VLS_Slots = {} & {
|
|
21
|
+
rail?: (props: typeof __VLS_1) => any;
|
|
22
|
+
} & {
|
|
23
|
+
default?: (props: typeof __VLS_3) => any;
|
|
24
|
+
} & {
|
|
25
|
+
aside?: (props: typeof __VLS_5) => any;
|
|
26
|
+
};
|
|
27
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
28
|
+
railOpen: boolean;
|
|
29
|
+
railWidth: string;
|
|
30
|
+
asideWidth: string;
|
|
31
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
32
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
33
|
+
export default _default;
|
|
34
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
35
|
+
new (): {
|
|
36
|
+
$slots: S;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** Lucide icon component shown left of the title. Rendered as a plain
|
|
3
|
+
* outline icon (no tile background) to keep the header calm. */
|
|
4
|
+
icon?: unknown;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
declare var __VLS_5: {}, __VLS_7: {}, __VLS_9: {};
|
|
9
|
+
type __VLS_Slots = {} & {
|
|
10
|
+
title?: (props: typeof __VLS_5) => any;
|
|
11
|
+
} & {
|
|
12
|
+
actions?: (props: typeof __VLS_7) => any;
|
|
13
|
+
} & {
|
|
14
|
+
tabs?: (props: typeof __VLS_9) => any;
|
|
15
|
+
};
|
|
16
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
18
|
+
export default _default;
|
|
19
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
20
|
+
new (): {
|
|
21
|
+
$slots: S;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
<script setup
|
|
2
|
-
defineProps
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
description?: string
|
|
8
|
-
}>()
|
|
1
|
+
<script setup>
|
|
2
|
+
defineProps({
|
|
3
|
+
icon: { type: null, required: false },
|
|
4
|
+
title: { type: String, required: true },
|
|
5
|
+
description: { type: String, required: false }
|
|
6
|
+
});
|
|
9
7
|
</script>
|
|
10
8
|
|
|
11
9
|
<template>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** Lucide icon component shown left of the title. Rendered as a plain
|
|
3
|
+
* outline icon (no tile background) to keep the header calm. */
|
|
4
|
+
icon?: unknown;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
declare var __VLS_5: {}, __VLS_7: {}, __VLS_9: {};
|
|
9
|
+
type __VLS_Slots = {} & {
|
|
10
|
+
title?: (props: typeof __VLS_5) => any;
|
|
11
|
+
} & {
|
|
12
|
+
actions?: (props: typeof __VLS_7) => any;
|
|
13
|
+
} & {
|
|
14
|
+
tabs?: (props: typeof __VLS_9) => any;
|
|
15
|
+
};
|
|
16
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
18
|
+
export default _default;
|
|
19
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
20
|
+
new (): {
|
|
21
|
+
$slots: S;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface RecordTab {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
badge?: number | string | null;
|
|
5
|
+
}
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
/** Tabs for the body column. Empty = render no tab bar. */
|
|
8
|
+
tabs?: RecordTab[];
|
|
9
|
+
/** Active tab key (`v-model`). */
|
|
10
|
+
modelValue?: string;
|
|
11
|
+
/** Rail track width. 320px reads as a column; below ~280 it reads as a list. */
|
|
12
|
+
railWidth?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Height of the sticky PageHeader, in px — the rail (and the shared TabBar)
|
|
15
|
+
* park directly under it. 57 = `px-4 pt-4 pb-3` + the text-xl line + hairline;
|
|
16
|
+
* pass something else only together with a custom `#tabs` slot, because
|
|
17
|
+
* `TabBar` hard-codes the same offset.
|
|
18
|
+
*/
|
|
19
|
+
stickyOffset?: number;
|
|
20
|
+
/** What the narrow-width disclosure calls the rail body. */
|
|
21
|
+
railLabel?: string;
|
|
22
|
+
/** Start the narrow-width disclosure expanded (initial value only). */
|
|
23
|
+
railOpenOnNarrow?: boolean;
|
|
24
|
+
};
|
|
25
|
+
declare var __VLS_1: {}, __VLS_7: {}, __VLS_9: {}, __VLS_18: {};
|
|
26
|
+
type __VLS_Slots = {} & {
|
|
27
|
+
'rail-head'?: (props: typeof __VLS_1) => any;
|
|
28
|
+
} & {
|
|
29
|
+
rail?: (props: typeof __VLS_7) => any;
|
|
30
|
+
} & {
|
|
31
|
+
tabs?: (props: typeof __VLS_9) => any;
|
|
32
|
+
} & {
|
|
33
|
+
default?: (props: typeof __VLS_18) => any;
|
|
34
|
+
};
|
|
35
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
36
|
+
"update:modelValue": (key: string) => any;
|
|
37
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
38
|
+
"onUpdate:modelValue"?: ((key: string) => any) | undefined;
|
|
39
|
+
}>, {
|
|
40
|
+
modelValue: string;
|
|
41
|
+
railWidth: string;
|
|
42
|
+
tabs: RecordTab[];
|
|
43
|
+
stickyOffset: number;
|
|
44
|
+
railOpenOnNarrow: boolean;
|
|
45
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
46
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
47
|
+
export default _default;
|
|
48
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
49
|
+
new (): {
|
|
50
|
+
$slots: S;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { AltArrowDown } from "#solar-icons";
|
|
3
|
+
import TabBar from "./TabBar.vue";
|
|
4
|
+
const props = defineProps({
|
|
5
|
+
tabs: { type: Array, required: false, default: () => [] },
|
|
6
|
+
modelValue: { type: String, required: false, default: "" },
|
|
7
|
+
railWidth: { type: String, required: false, default: "20rem" },
|
|
8
|
+
stickyOffset: { type: Number, required: false, default: 57 },
|
|
9
|
+
railLabel: { type: String, required: false },
|
|
10
|
+
railOpenOnNarrow: { type: Boolean, required: false, default: false }
|
|
11
|
+
});
|
|
12
|
+
const emit = defineEmits(["update:modelValue"]);
|
|
13
|
+
const t = useT();
|
|
14
|
+
const railLabelText = computed(() => props.railLabel ?? t("shared.recordlayout.rail.label.default"));
|
|
15
|
+
const narrowOpen = ref(props.railOpenOnNarrow);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<div
|
|
20
|
+
class="grid grid-cols-1 items-start gap-4 xl:grid-cols-[var(--record-rail-w)_minmax(0,1fr)]"
|
|
21
|
+
:style="{ '--record-rail-w': railWidth, '--record-rail-top': `${stickyOffset}px` }"
|
|
22
|
+
>
|
|
23
|
+
<aside
|
|
24
|
+
class="min-w-0 space-y-3 xl:sticky xl:top-[var(--record-rail-top)] xl:max-h-[calc(100svh_-_var(--record-rail-top)_-_5.5rem)] xl:overflow-y-auto xl:overscroll-contain xl:pb-1"
|
|
25
|
+
>
|
|
26
|
+
<slot name="rail-head" />
|
|
27
|
+
|
|
28
|
+
<!-- Narrow widths: the rail body folds away so the tabs stay reachable. -->
|
|
29
|
+
<button
|
|
30
|
+
v-if="$slots.rail"
|
|
31
|
+
type="button"
|
|
32
|
+
class="flex w-full cursor-pointer items-center justify-between gap-2 rounded-md border border-black/[0.06] bg-white/60 px-3 py-2 text-sm font-medium text-[#0B0522] transition-colors hover:text-primary xl:hidden"
|
|
33
|
+
:aria-expanded="narrowOpen"
|
|
34
|
+
@click="narrowOpen = !narrowOpen"
|
|
35
|
+
>
|
|
36
|
+
<span>{{ narrowOpen ? t("shared.recordlayout.rail.action.hide", { label: railLabelText }) : t("shared.recordlayout.rail.action.show", { label: railLabelText }) }}</span>
|
|
37
|
+
<AltArrowDown
|
|
38
|
+
:size="14"
|
|
39
|
+
class="shrink-0 transition-transform"
|
|
40
|
+
:class="narrowOpen ? 'rotate-180' : ''"
|
|
41
|
+
/>
|
|
42
|
+
</button>
|
|
43
|
+
|
|
44
|
+
<div :class="narrowOpen ? 'space-y-3' : 'hidden space-y-3 xl:block'">
|
|
45
|
+
<slot name="rail" />
|
|
46
|
+
</div>
|
|
47
|
+
</aside>
|
|
48
|
+
|
|
49
|
+
<div class="min-w-0">
|
|
50
|
+
<slot name="tabs">
|
|
51
|
+
<TabBar
|
|
52
|
+
v-if="tabs.length"
|
|
53
|
+
:tabs="tabs"
|
|
54
|
+
:model-value="modelValue"
|
|
55
|
+
@update:model-value="(k) => emit('update:modelValue', k)"
|
|
56
|
+
/>
|
|
57
|
+
</slot>
|
|
58
|
+
<div class="pt-4">
|
|
59
|
+
<slot />
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</template>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface RecordTab {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
badge?: number | string | null;
|
|
5
|
+
}
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
/** Tabs for the body column. Empty = render no tab bar. */
|
|
8
|
+
tabs?: RecordTab[];
|
|
9
|
+
/** Active tab key (`v-model`). */
|
|
10
|
+
modelValue?: string;
|
|
11
|
+
/** Rail track width. 320px reads as a column; below ~280 it reads as a list. */
|
|
12
|
+
railWidth?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Height of the sticky PageHeader, in px — the rail (and the shared TabBar)
|
|
15
|
+
* park directly under it. 57 = `px-4 pt-4 pb-3` + the text-xl line + hairline;
|
|
16
|
+
* pass something else only together with a custom `#tabs` slot, because
|
|
17
|
+
* `TabBar` hard-codes the same offset.
|
|
18
|
+
*/
|
|
19
|
+
stickyOffset?: number;
|
|
20
|
+
/** What the narrow-width disclosure calls the rail body. */
|
|
21
|
+
railLabel?: string;
|
|
22
|
+
/** Start the narrow-width disclosure expanded (initial value only). */
|
|
23
|
+
railOpenOnNarrow?: boolean;
|
|
24
|
+
};
|
|
25
|
+
declare var __VLS_1: {}, __VLS_7: {}, __VLS_9: {}, __VLS_18: {};
|
|
26
|
+
type __VLS_Slots = {} & {
|
|
27
|
+
'rail-head'?: (props: typeof __VLS_1) => any;
|
|
28
|
+
} & {
|
|
29
|
+
rail?: (props: typeof __VLS_7) => any;
|
|
30
|
+
} & {
|
|
31
|
+
tabs?: (props: typeof __VLS_9) => any;
|
|
32
|
+
} & {
|
|
33
|
+
default?: (props: typeof __VLS_18) => any;
|
|
34
|
+
};
|
|
35
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
36
|
+
"update:modelValue": (key: string) => any;
|
|
37
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
38
|
+
"onUpdate:modelValue"?: ((key: string) => any) | undefined;
|
|
39
|
+
}>, {
|
|
40
|
+
modelValue: string;
|
|
41
|
+
railWidth: string;
|
|
42
|
+
tabs: RecordTab[];
|
|
43
|
+
stickyOffset: number;
|
|
44
|
+
railOpenOnNarrow: boolean;
|
|
45
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
46
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
47
|
+
export default _default;
|
|
48
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
49
|
+
new (): {
|
|
50
|
+
$slots: S;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A card sized for the `RecordLayout` rail (PE-250).
|
|
3
|
+
*
|
|
4
|
+
* Same glass shell as the page cards, but on the rail's budget: `px-4 py-3`
|
|
5
|
+
* instead of `px-6 py-4`, a `text-xs` section label instead of a headline, and
|
|
6
|
+
* an optional right-aligned `#actions` (usually the link that jumps to the tab
|
|
7
|
+
* that owns the full thing). Use it so every rail across the studio stacks the
|
|
8
|
+
* same way instead of each page re-rolling its own `<section>`.
|
|
9
|
+
*/
|
|
10
|
+
type __VLS_Props = {
|
|
11
|
+
title?: string;
|
|
12
|
+
};
|
|
13
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
14
|
+
type __VLS_Slots = {} & {
|
|
15
|
+
actions?: (props: typeof __VLS_1) => any;
|
|
16
|
+
} & {
|
|
17
|
+
default?: (props: typeof __VLS_3) => any;
|
|
18
|
+
};
|
|
19
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
21
|
+
export default _default;
|
|
22
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
23
|
+
new (): {
|
|
24
|
+
$slots: S;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
defineProps({
|
|
3
|
+
title: { type: String, required: false }
|
|
4
|
+
});
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<section class="overflow-hidden rounded-lg border border-gray-400/10 bg-white/60 outline-1 outline-white/30 backdrop-blur-sm">
|
|
9
|
+
<div
|
|
10
|
+
v-if="title || $slots.actions"
|
|
11
|
+
class="flex items-center justify-between gap-2 border-b border-black/[0.06] px-4 py-2.5"
|
|
12
|
+
>
|
|
13
|
+
<h3 class="truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground">
|
|
14
|
+
{{ title }}
|
|
15
|
+
</h3>
|
|
16
|
+
<slot name="actions" />
|
|
17
|
+
</div>
|
|
18
|
+
<slot />
|
|
19
|
+
</section>
|
|
20
|
+
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A card sized for the `RecordLayout` rail (PE-250).
|
|
3
|
+
*
|
|
4
|
+
* Same glass shell as the page cards, but on the rail's budget: `px-4 py-3`
|
|
5
|
+
* instead of `px-6 py-4`, a `text-xs` section label instead of a headline, and
|
|
6
|
+
* an optional right-aligned `#actions` (usually the link that jumps to the tab
|
|
7
|
+
* that owns the full thing). Use it so every rail across the studio stacks the
|
|
8
|
+
* same way instead of each page re-rolling its own `<section>`.
|
|
9
|
+
*/
|
|
10
|
+
type __VLS_Props = {
|
|
11
|
+
title?: string;
|
|
12
|
+
};
|
|
13
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
14
|
+
type __VLS_Slots = {} & {
|
|
15
|
+
actions?: (props: typeof __VLS_1) => any;
|
|
16
|
+
} & {
|
|
17
|
+
default?: (props: typeof __VLS_3) => any;
|
|
18
|
+
};
|
|
19
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
21
|
+
export default _default;
|
|
22
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
23
|
+
new (): {
|
|
24
|
+
$slots: S;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared studio sidebar.
|
|
3
|
+
*
|
|
4
|
+
* Header (icon + title) + a sectioned, link list driven by data. Every
|
|
5
|
+
* studio sidebar (Settings, Integrations, Commerce, Apps, …) renders
|
|
6
|
+
* through this so spacing, active state, badges and "soon" tags stay
|
|
7
|
+
* identical. Pass `sections`; use `#notice` for loading/empty hints.
|
|
8
|
+
*
|
|
9
|
+
* Items may declare `children`. Those are **tabs of the page the item opens**,
|
|
10
|
+
* not sub-navigation: every item is exactly one row, and it stays highlighted
|
|
11
|
+
* while the route is on any of its tabs. A surface that should stand on its
|
|
12
|
+
* own in the sidebar is declared as its own item.
|
|
13
|
+
*/
|
|
14
|
+
import type { Component } from 'vue';
|
|
15
|
+
import type { SidebarNavSection } from '../../types/nav.js';
|
|
16
|
+
export type { SidebarNavItem, SidebarNavSection } from '../../types/nav.js';
|
|
17
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
18
|
+
title: string;
|
|
19
|
+
icon?: Component;
|
|
20
|
+
sections: SidebarNavSection[];
|
|
21
|
+
/** Hide the header icon and use a lighter header title weight. */
|
|
22
|
+
minimal?: boolean;
|
|
23
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
24
|
+
title: string;
|
|
25
|
+
icon?: Component;
|
|
26
|
+
sections: SidebarNavSection[];
|
|
27
|
+
/** Hide the header icon and use a lighter header title weight. */
|
|
28
|
+
minimal?: boolean;
|
|
29
|
+
}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
30
|
+
icon?: (props: {}) => any;
|
|
31
|
+
} & {
|
|
32
|
+
top?: (props: {}) => any;
|
|
33
|
+
} & {
|
|
34
|
+
notice?: (props: {}) => any;
|
|
35
|
+
}>;
|
|
36
|
+
export default _default;
|
|
37
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
38
|
+
new (): {
|
|
39
|
+
$slots: S;
|
|
40
|
+
};
|
|
41
|
+
};
|