@nextsparkjs/core 0.1.0-beta.67 → 0.1.0-beta.69
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/dist/components/dashboard/block-editor/block-picker.d.ts +7 -2
- package/dist/components/dashboard/block-editor/block-picker.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/block-picker.js +27 -20
- package/dist/components/dashboard/block-editor/block-preview-canvas.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/block-preview-canvas.js +37 -37
- package/dist/components/dashboard/block-editor/block-settings-panel.js +3 -3
- package/dist/components/dashboard/block-editor/builder-editor-view.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/builder-editor-view.js +124 -82
- package/dist/components/dashboard/block-editor/config-panel.d.ts +18 -0
- package/dist/components/dashboard/block-editor/config-panel.d.ts.map +1 -0
- package/dist/components/dashboard/block-editor/config-panel.js +413 -0
- package/dist/components/dashboard/block-editor/floating-block-toolbar.js +1 -1
- package/dist/components/dashboard/block-editor/pattern-card.js +1 -1
- package/dist/components/dashboard/block-editor/pattern-reference-preview.js +1 -1
- package/dist/components/dashboard/block-editor/sortable-block.js +1 -1
- package/dist/components/dashboard/block-editor/tree-view-node.d.ts +11 -0
- package/dist/components/dashboard/block-editor/tree-view-node.d.ts.map +1 -0
- package/dist/components/dashboard/block-editor/tree-view-node.js +91 -0
- package/dist/components/dashboard/block-editor/tree-view.d.ts +17 -0
- package/dist/components/dashboard/block-editor/tree-view.d.ts.map +1 -0
- package/dist/components/dashboard/block-editor/tree-view.js +125 -0
- package/dist/components/dashboard/block-editor/viewport-toggle.d.ts +10 -0
- package/dist/components/dashboard/block-editor/viewport-toggle.d.ts.map +1 -0
- package/dist/components/dashboard/block-editor/viewport-toggle.js +55 -0
- package/dist/components/public/pageBuilder/PageRenderer.d.ts.map +1 -1
- package/dist/components/public/pageBuilder/PageRenderer.js +10 -1
- package/dist/components/settings/layouts/SettingsSidebar.d.ts.map +1 -1
- package/dist/components/settings/layouts/SettingsSidebar.js +14 -0
- package/dist/components/ui/dynamic-icon.d.ts +12 -0
- package/dist/components/ui/dynamic-icon.d.ts.map +1 -0
- package/dist/components/ui/dynamic-icon.js +11 -0
- package/dist/components/ui/index.d.ts +7 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +7 -0
- package/dist/components/ui/skeleton-dashboard.d.ts +32 -0
- package/dist/components/ui/skeleton-dashboard.d.ts.map +1 -0
- package/dist/components/ui/skeleton-dashboard.js +69 -0
- package/dist/components/ui/skeleton-detail.d.ts.map +1 -1
- package/dist/components/ui/skeleton-detail.js +0 -1
- package/dist/components/ui/skeleton-features.d.ts +27 -0
- package/dist/components/ui/skeleton-features.d.ts.map +1 -0
- package/dist/components/ui/skeleton-features.js +90 -0
- package/dist/components/ui/skeleton-form.d.ts.map +1 -1
- package/dist/components/ui/skeleton-form.js +0 -1
- package/dist/components/ui/skeleton-list.d.ts.map +1 -1
- package/dist/components/ui/skeleton-list.js +0 -1
- package/dist/components/ui/skeleton-public.d.ts +26 -0
- package/dist/components/ui/skeleton-public.d.ts.map +1 -0
- package/dist/components/ui/skeleton-public.js +61 -0
- package/dist/components/ui/skeleton-settings.d.ts +54 -0
- package/dist/components/ui/skeleton-settings.d.ts.map +1 -0
- package/dist/components/ui/skeleton-settings.js +332 -0
- package/dist/components/ui/skeleton.d.ts +23 -1
- package/dist/components/ui/skeleton.d.ts.map +1 -1
- package/dist/components/ui/skeleton.js +46 -2
- package/dist/contexts/TeamContext.d.ts +2 -0
- package/dist/contexts/TeamContext.d.ts.map +1 -1
- package/dist/contexts/TeamContext.js +78 -68
- package/dist/hooks/usePrefetch.d.ts +43 -0
- package/dist/hooks/usePrefetch.d.ts.map +1 -0
- package/dist/hooks/usePrefetch.js +56 -0
- package/dist/lib/actions/index.d.ts +27 -14
- package/dist/lib/actions/index.d.ts.map +1 -1
- package/dist/lib/actions/index.js +19 -1
- package/dist/lib/actions/team.actions.d.ts +107 -0
- package/dist/lib/actions/team.actions.d.ts.map +1 -0
- package/dist/lib/actions/team.actions.js +220 -0
- package/dist/lib/actions/user.actions.d.ts +99 -0
- package/dist/lib/actions/user.actions.d.ts.map +1 -0
- package/dist/lib/actions/user.actions.js +149 -0
- package/dist/lib/selectors/core-selectors.d.ts +98 -44
- package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/block-editor.selectors.d.ts +136 -71
- package/dist/lib/selectors/domains/block-editor.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/block-editor.selectors.js +130 -60
- package/dist/lib/selectors/selectors.d.ts +196 -88
- package/dist/lib/selectors/selectors.d.ts.map +1 -1
- package/dist/messages/de/devtools.json +4 -0
- package/dist/messages/de/index.d.ts +4 -0
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/en/admin.json +15 -1
- package/dist/messages/en/devtools.json +16 -0
- package/dist/messages/en/index.d.ts +30 -0
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/es/admin.json +16 -1
- package/dist/messages/es/devtools.json +4 -0
- package/dist/messages/es/index.d.ts +19 -0
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/fr/devtools.json +4 -0
- package/dist/messages/fr/index.d.ts +4 -0
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/it/devtools.json +4 -0
- package/dist/messages/it/index.d.ts +4 -0
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/pt/devtools.json +4 -0
- package/dist/messages/pt/index.d.ts +4 -0
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/nextspark-entities.d.ts +59 -0
- package/dist/presets/blocks/cta-section/component.tsx +4 -4
- package/dist/presets/blocks/features-grid/component.tsx +5 -5
- package/dist/presets/blocks/hero/component.tsx +2 -2
- package/dist/presets/blocks/testimonials/component.tsx +4 -4
- package/dist/presets/blocks/text-content/component.tsx +2 -2
- package/dist/presets/theme/blocks/hero/component.tsx +2 -2
- package/dist/presets/theme/tests/cypress/src/core/BlockEditorBasePOM.ts +123 -24
- package/dist/styles/classes.json +22 -2
- package/dist/styles/ui.css +1 -1
- package/dist/templates/app/(public)/[...slug]/page.tsx +2 -1
- package/dist/templates/app/(public)/docs/[section]/[page]/page.tsx +1 -1
- package/dist/templates/app/api/devtools/config/entities/route.ts +2 -1
- package/dist/templates/app/api/user/plan-flags/route.ts +1 -1
- package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +4 -2
- package/dist/templates/app/dashboard/(main)/layout.tsx +2 -1
- package/dist/templates/app/dashboard/(main)/loading.tsx +5 -0
- package/dist/templates/app/dashboard/features/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/api-keys/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/billing/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/invoices/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/notifications/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/password/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/plans/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/profile/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/security/loading.tsx +5 -0
- package/dist/templates/app/dashboard/settings/teams/loading.tsx +5 -0
- package/dist/templates/app/devtools/config/page.tsx +1 -1
- package/dist/templates/app/devtools/page.tsx +1 -1
- package/dist/templates/app/devtools/tests/[[...path]]/page.tsx +1 -1
- package/dist/templates/contents/themes/starter/messages/de/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/de/index.ts +15 -0
- package/dist/templates/contents/themes/starter/messages/en/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/en/index.ts +15 -0
- package/dist/templates/contents/themes/starter/messages/es/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/es/index.ts +15 -0
- package/dist/templates/contents/themes/starter/messages/fr/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/fr/index.ts +15 -0
- package/dist/templates/contents/themes/starter/messages/it/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/it/index.ts +13 -0
- package/dist/templates/contents/themes/starter/messages/pt/common.json +4 -1
- package/dist/templates/contents/themes/starter/messages/pt/index.ts +13 -0
- package/dist/templates/contents/themes/starter/styles/globals.css +3 -1
- package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/loading.tsx +5 -0
- package/dist/templates/contents/themes/starter/templates/(public)/loading.tsx +5 -0
- package/dist/templates/features/blog/blocks/post-content/component.tsx +2 -2
- package/dist/templates/features/pages/blocks/hero/component.tsx +2 -2
- package/dist/templates/next.config.mjs +10 -3
- package/dist/templates/{middleware.ts → proxy.ts} +5 -6
- package/globals.css +54 -0
- package/nextspark-entities.d.ts +59 -0
- package/package.json +18 -16
- package/scripts/build/registry/discovery/api-presets.mjs +20 -12
- package/scripts/build/registry/generators/api-presets-registry.mjs +18 -5
- package/scripts/build/registry/generators/block-registry.mjs +14 -3
- package/scripts/build/registry/generators/docs-registry.mjs +21 -3
- package/scripts/build/registry/generators/translation-registry.mjs +16 -7
- package/scripts/build/theme.mjs +2 -1
- package/templates/app/(public)/[...slug]/page.tsx +2 -1
- package/templates/app/(public)/docs/[section]/[page]/page.tsx +1 -1
- package/templates/app/api/auth/[...all]/route.ts +13 -5
- package/templates/app/api/devtools/config/entities/route.ts +2 -1
- package/templates/app/api/user/plan-flags/route.ts +1 -1
- package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +4 -2
- package/templates/app/dashboard/(main)/layout.tsx +2 -1
- package/templates/app/dashboard/(main)/loading.tsx +5 -0
- package/templates/app/dashboard/features/loading.tsx +5 -0
- package/templates/app/dashboard/settings/api-keys/loading.tsx +5 -0
- package/templates/app/dashboard/settings/billing/loading.tsx +5 -0
- package/templates/app/dashboard/settings/invoices/loading.tsx +5 -0
- package/templates/app/dashboard/settings/loading.tsx +5 -0
- package/templates/app/dashboard/settings/notifications/loading.tsx +5 -0
- package/templates/app/dashboard/settings/password/loading.tsx +5 -0
- package/templates/app/dashboard/settings/plans/loading.tsx +5 -0
- package/templates/app/dashboard/settings/profile/loading.tsx +5 -0
- package/templates/app/dashboard/settings/security/loading.tsx +5 -0
- package/templates/app/dashboard/settings/teams/loading.tsx +5 -0
- package/templates/app/devtools/config/page.tsx +1 -1
- package/templates/app/devtools/page.tsx +1 -1
- package/templates/app/devtools/tests/[[...path]]/page.tsx +1 -1
- package/templates/contents/themes/starter/config/app.config.ts +8 -7
- package/templates/contents/themes/starter/messages/de/common.json +4 -1
- package/templates/contents/themes/starter/messages/de/index.ts +15 -0
- package/templates/contents/themes/starter/messages/en/common.json +4 -1
- package/templates/contents/themes/starter/messages/en/index.ts +15 -0
- package/templates/contents/themes/starter/messages/es/common.json +4 -1
- package/templates/contents/themes/starter/messages/es/index.ts +15 -0
- package/templates/contents/themes/starter/messages/fr/common.json +4 -1
- package/templates/contents/themes/starter/messages/fr/index.ts +15 -0
- package/templates/contents/themes/starter/messages/it/common.json +4 -1
- package/templates/contents/themes/starter/messages/it/index.ts +13 -0
- package/templates/contents/themes/starter/messages/pt/common.json +4 -1
- package/templates/contents/themes/starter/messages/pt/index.ts +13 -0
- package/templates/contents/themes/starter/styles/globals.css +3 -1
- package/templates/contents/themes/starter/templates/(dashboard)/analytics/loading.tsx +5 -0
- package/templates/contents/themes/starter/templates/(public)/loading.tsx +5 -0
- package/templates/features/blog/blocks/post-content/component.tsx +2 -2
- package/templates/features/pages/blocks/hero/component.tsx +2 -2
- package/templates/next.config.mjs +10 -3
- package/templates/pnpm-workspace.yaml +5 -0
- package/templates/{middleware.ts → proxy.ts} +5 -6
- package/tests/jest/setup.ts +5 -0
- package/dist/presets/plugin/.env.example.template +0 -19
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useMemo, useEffect } from "react";
|
|
4
|
+
import {
|
|
5
|
+
DndContext,
|
|
6
|
+
closestCenter,
|
|
7
|
+
KeyboardSensor,
|
|
8
|
+
PointerSensor,
|
|
9
|
+
useSensor,
|
|
10
|
+
useSensors
|
|
11
|
+
} from "@dnd-kit/core";
|
|
12
|
+
import {
|
|
13
|
+
arrayMove,
|
|
14
|
+
SortableContext,
|
|
15
|
+
sortableKeyboardCoordinates,
|
|
16
|
+
verticalListSortingStrategy
|
|
17
|
+
} from "@dnd-kit/sortable";
|
|
18
|
+
import { useTranslations } from "next-intl";
|
|
19
|
+
import { LayoutList } from "lucide-react";
|
|
20
|
+
import { ScrollArea } from "../../ui/scroll-area.js";
|
|
21
|
+
import { sel } from "../../../lib/test/index.js";
|
|
22
|
+
import { TreeViewNode } from "./tree-view-node.js";
|
|
23
|
+
import { isPatternReference } from "../../../types/pattern-reference.js";
|
|
24
|
+
function TreeView({
|
|
25
|
+
blocks,
|
|
26
|
+
selectedBlockId,
|
|
27
|
+
onSelectBlock,
|
|
28
|
+
onReorder,
|
|
29
|
+
emptyMessage
|
|
30
|
+
}) {
|
|
31
|
+
const t = useTranslations("admin.builder");
|
|
32
|
+
const sensors = useSensors(
|
|
33
|
+
useSensor(PointerSensor, {
|
|
34
|
+
activationConstraint: {
|
|
35
|
+
distance: 8
|
|
36
|
+
}
|
|
37
|
+
}),
|
|
38
|
+
useSensor(KeyboardSensor, {
|
|
39
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
40
|
+
})
|
|
41
|
+
);
|
|
42
|
+
const groupedItems = useMemo(() => {
|
|
43
|
+
const items = [];
|
|
44
|
+
blocks.forEach((block) => {
|
|
45
|
+
if (isPatternReference(block)) {
|
|
46
|
+
items.push({ id: block.id, block, patternRef: block.ref });
|
|
47
|
+
} else {
|
|
48
|
+
items.push({ id: block.id, block });
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return items;
|
|
52
|
+
}, [blocks]);
|
|
53
|
+
const handleDragEnd = useCallback((event) => {
|
|
54
|
+
const { active, over } = event;
|
|
55
|
+
if (over && active.id !== over.id) {
|
|
56
|
+
const oldIndex = blocks.findIndex((b) => b.id === active.id);
|
|
57
|
+
const newIndex = blocks.findIndex((b) => b.id === over.id);
|
|
58
|
+
if (oldIndex !== -1 && newIndex !== -1) {
|
|
59
|
+
const newBlocks = arrayMove(blocks, oldIndex, newIndex);
|
|
60
|
+
onReorder(newBlocks);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}, [blocks, onReorder]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (selectedBlockId) {
|
|
66
|
+
const previewBlock = document.querySelector(
|
|
67
|
+
`[data-cy="${sel("blockEditor.previewCanvas.block", { id: selectedBlockId })}"]`
|
|
68
|
+
);
|
|
69
|
+
if (previewBlock) {
|
|
70
|
+
previewBlock.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, [selectedBlockId]);
|
|
74
|
+
const handleSelectBlock = useCallback((blockId) => {
|
|
75
|
+
onSelectBlock(blockId);
|
|
76
|
+
}, [onSelectBlock]);
|
|
77
|
+
if (blocks.length === 0) {
|
|
78
|
+
return /* @__PURE__ */ jsxs(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
"data-cy": sel("blockEditor.treeView.empty"),
|
|
82
|
+
className: "flex flex-col items-center justify-center h-full p-6 text-center",
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ jsx(LayoutList, { className: "h-12 w-12 text-muted-foreground/30 mb-4" }),
|
|
85
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage || t("layout.empty") })
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
return /* @__PURE__ */ jsx(ScrollArea, { className: "h-full", children: /* @__PURE__ */ jsx(
|
|
91
|
+
"div",
|
|
92
|
+
{
|
|
93
|
+
"data-cy": sel("blockEditor.treeView.container"),
|
|
94
|
+
className: "p-3 space-y-1",
|
|
95
|
+
children: /* @__PURE__ */ jsx(
|
|
96
|
+
DndContext,
|
|
97
|
+
{
|
|
98
|
+
sensors,
|
|
99
|
+
collisionDetection: closestCenter,
|
|
100
|
+
onDragEnd: handleDragEnd,
|
|
101
|
+
children: /* @__PURE__ */ jsx(
|
|
102
|
+
SortableContext,
|
|
103
|
+
{
|
|
104
|
+
items: groupedItems.map((item) => item.id),
|
|
105
|
+
strategy: verticalListSortingStrategy,
|
|
106
|
+
children: groupedItems.map((item) => /* @__PURE__ */ jsx(
|
|
107
|
+
TreeViewNode,
|
|
108
|
+
{
|
|
109
|
+
block: item.block,
|
|
110
|
+
isSelected: selectedBlockId === item.id,
|
|
111
|
+
onSelect: () => handleSelectBlock(item.id),
|
|
112
|
+
isPartOfPattern: false
|
|
113
|
+
},
|
|
114
|
+
item.id
|
|
115
|
+
))
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
) });
|
|
122
|
+
}
|
|
123
|
+
export {
|
|
124
|
+
TreeView
|
|
125
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ViewportMode = 'desktop' | 'mobile';
|
|
2
|
+
export declare const MOBILE_VIEWPORT_WIDTH = 375;
|
|
3
|
+
interface ViewportToggleProps {
|
|
4
|
+
value: ViewportMode;
|
|
5
|
+
onChange: (value: ViewportMode) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function ViewportToggle({ value, onChange, className }: ViewportToggleProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=viewport-toggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport-toggle.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/viewport-toggle.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE/C,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC,UAAU,mBAAmB;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAqCjF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Monitor, Smartphone } from "lucide-react";
|
|
4
|
+
import { Button } from "../../ui/button.js";
|
|
5
|
+
import { cn } from "../../../lib/utils.js";
|
|
6
|
+
import { sel } from "../../../lib/test/index.js";
|
|
7
|
+
const MOBILE_VIEWPORT_WIDTH = 375;
|
|
8
|
+
function ViewportToggle({ value, onChange, className }) {
|
|
9
|
+
return /* @__PURE__ */ jsxs(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
"data-cy": sel("blockEditor.header.viewportToggle.container"),
|
|
13
|
+
className: cn(
|
|
14
|
+
"flex items-center bg-muted rounded-lg p-1",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
children: [
|
|
18
|
+
/* @__PURE__ */ jsx(
|
|
19
|
+
Button,
|
|
20
|
+
{
|
|
21
|
+
variant: "ghost",
|
|
22
|
+
size: "sm",
|
|
23
|
+
className: cn(
|
|
24
|
+
"h-7 w-7 p-0 rounded-md",
|
|
25
|
+
value === "mobile" && "bg-background shadow-sm"
|
|
26
|
+
),
|
|
27
|
+
onClick: () => onChange("mobile"),
|
|
28
|
+
"data-cy": sel("blockEditor.header.viewportToggle.mobileBtn"),
|
|
29
|
+
title: "Mobile view (375px)",
|
|
30
|
+
children: /* @__PURE__ */ jsx(Smartphone, { className: "h-4 w-4" })
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
Button,
|
|
35
|
+
{
|
|
36
|
+
variant: "ghost",
|
|
37
|
+
size: "sm",
|
|
38
|
+
className: cn(
|
|
39
|
+
"h-7 w-7 p-0 rounded-md",
|
|
40
|
+
value === "desktop" && "bg-background shadow-sm"
|
|
41
|
+
),
|
|
42
|
+
onClick: () => onChange("desktop"),
|
|
43
|
+
"data-cy": sel("blockEditor.header.viewportToggle.desktopBtn"),
|
|
44
|
+
title: "Desktop view (100%)",
|
|
45
|
+
children: /* @__PURE__ */ jsx(Monitor, { className: "h-4 w-4" })
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
export {
|
|
53
|
+
MOBILE_VIEWPORT_WIDTH,
|
|
54
|
+
ViewportToggle
|
|
55
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/public/pageBuilder/PageRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAmD1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,aAAa,EAAE,CAAA;QACvB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"PageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/public/pageBuilder/PageRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAmD1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,aAAa,EAAE,CAAA;QACvB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA+BvD"}
|
|
@@ -34,7 +34,16 @@ function PageRenderer({ page }) {
|
|
|
34
34
|
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "This page does not have any content yet." })
|
|
35
35
|
] }) });
|
|
36
36
|
}
|
|
37
|
-
return /* @__PURE__ */ jsx("div", { className: "min-h-screen", "data-page-id": page.id, "data-page-slug": page.slug, children: blocks.map((block) => /* @__PURE__ */ jsx(
|
|
37
|
+
return /* @__PURE__ */ jsx("div", { className: "min-h-screen", "data-page-id": page.id, "data-page-slug": page.slug, children: blocks.map((block) => /* @__PURE__ */ jsx(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
className: "@container w-full",
|
|
41
|
+
"data-block-id": block.id,
|
|
42
|
+
"data-block-slug": block.blockSlug,
|
|
43
|
+
children: /* @__PURE__ */ jsx(BlockRenderer, { block })
|
|
44
|
+
},
|
|
45
|
+
block.id
|
|
46
|
+
)) });
|
|
38
47
|
}
|
|
39
48
|
export {
|
|
40
49
|
PageRenderer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/layouts/SettingsSidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SettingsSidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/layouts/SettingsSidebar.tsx"],"names":[],"mappings":"AAoCA,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAkKlE"}
|
|
@@ -5,6 +5,7 @@ import { usePathname } from "next/navigation";
|
|
|
5
5
|
import { useState, useCallback, useMemo } from "react";
|
|
6
6
|
import { cn } from "../../../lib/utils.js";
|
|
7
7
|
import { useUserProfile } from "../../../hooks/useUserProfile.js";
|
|
8
|
+
import { usePrefetchSettings } from "../../../hooks/usePrefetch.js";
|
|
8
9
|
import {
|
|
9
10
|
User,
|
|
10
11
|
Users,
|
|
@@ -34,8 +35,19 @@ function SettingsSidebar({ className }) {
|
|
|
34
35
|
const pathname = usePathname();
|
|
35
36
|
const [statusMessage, setStatusMessage] = useState("");
|
|
36
37
|
const { hasPassword } = useUserProfile();
|
|
38
|
+
const { prefetchProfile, prefetchTeams } = usePrefetchSettings();
|
|
37
39
|
const t = useTranslations("common");
|
|
38
40
|
const tSettings = useTranslations("settings");
|
|
41
|
+
const getPrefetchHandler = useCallback((pageName) => {
|
|
42
|
+
switch (pageName) {
|
|
43
|
+
case "profile":
|
|
44
|
+
return prefetchProfile;
|
|
45
|
+
case "teams":
|
|
46
|
+
return prefetchTeams;
|
|
47
|
+
default:
|
|
48
|
+
return void 0;
|
|
49
|
+
}
|
|
50
|
+
}, [prefetchProfile, prefetchTeams]);
|
|
39
51
|
const filteredNavigation = useMemo(() => {
|
|
40
52
|
const enabledPages = getEnabledSettingsPages();
|
|
41
53
|
console.log("[SettingsSidebar] enabledPages:", enabledPages);
|
|
@@ -117,6 +129,7 @@ function SettingsSidebar({ className }) {
|
|
|
117
129
|
children: filteredNavigation.map((item) => {
|
|
118
130
|
const isActive = pathname === item.href;
|
|
119
131
|
const Icon = item.icon;
|
|
132
|
+
const prefetchHandler = getPrefetchHandler(item.name);
|
|
120
133
|
return /* @__PURE__ */ jsxs(
|
|
121
134
|
Link,
|
|
122
135
|
{
|
|
@@ -124,6 +137,7 @@ function SettingsSidebar({ className }) {
|
|
|
124
137
|
role: "listitem",
|
|
125
138
|
onClick: () => handleNavigation(tSettings(`navigation.${item.name}`), tSettings(`overview.${item.name}Description`)),
|
|
126
139
|
onKeyDown: (e) => handleKeyDown(e, item.href, tSettings(`navigation.${item.name}`), tSettings(`overview.${item.name}Description`)),
|
|
140
|
+
onMouseEnter: prefetchHandler,
|
|
127
141
|
"aria-current": isActive ? "page" : void 0,
|
|
128
142
|
"aria-label": createAriaLabel(
|
|
129
143
|
"{name} - {description}{current}",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface DynamicIconProps {
|
|
2
|
+
name: string;
|
|
3
|
+
className?: string;
|
|
4
|
+
fallback?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Renders a Lucide icon dynamically by name.
|
|
8
|
+
* Falls back to 'LayoutGrid' if icon name is not found.
|
|
9
|
+
*/
|
|
10
|
+
export declare function DynamicIcon({ name, className, fallback }: DynamicIconProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=dynamic-icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-icon.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dynamic-icon.tsx"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAuB,EAAE,EAAE,gBAAgB,2CAKzF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { icons } from "lucide-react";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
function DynamicIcon({ name, className, fallback = "LayoutGrid" }) {
|
|
6
|
+
const IconComponent = icons[name] || icons[fallback] || icons.LayoutGrid;
|
|
7
|
+
return /* @__PURE__ */ jsx(IconComponent, { className: cn("h-4 w-4", className) });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
DynamicIcon
|
|
11
|
+
};
|
|
@@ -27,6 +27,13 @@ export * from './select';
|
|
|
27
27
|
export * from './separator';
|
|
28
28
|
export * from './sheet';
|
|
29
29
|
export * from './skeleton';
|
|
30
|
+
export * from './skeleton-dashboard';
|
|
31
|
+
export * from './skeleton-detail';
|
|
32
|
+
export * from './skeleton-features';
|
|
33
|
+
export * from './skeleton-form';
|
|
34
|
+
export * from './skeleton-list';
|
|
35
|
+
export * from './skeleton-settings';
|
|
36
|
+
export * from './skeleton-public';
|
|
30
37
|
export * from './slider';
|
|
31
38
|
export * from './switch';
|
|
32
39
|
export * from './table';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAGzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAGzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA"}
|
|
@@ -27,6 +27,13 @@ export * from "./select.js";
|
|
|
27
27
|
export * from "./separator.js";
|
|
28
28
|
export * from "./sheet.js";
|
|
29
29
|
export * from "./skeleton.js";
|
|
30
|
+
export * from "./skeleton-dashboard.js";
|
|
31
|
+
export * from "./skeleton-detail.js";
|
|
32
|
+
export * from "./skeleton-features.js";
|
|
33
|
+
export * from "./skeleton-form.js";
|
|
34
|
+
export * from "./skeleton-list.js";
|
|
35
|
+
export * from "./skeleton-settings.js";
|
|
36
|
+
export * from "./skeleton-public.js";
|
|
30
37
|
export * from "./slider.js";
|
|
31
38
|
export * from "./switch.js";
|
|
32
39
|
export * from "./table.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skeleton components specifically for dashboard pages
|
|
3
|
+
* Provides realistic loading states that match the actual dashboard structure
|
|
4
|
+
*
|
|
5
|
+
* Performance optimizations:
|
|
6
|
+
* - Uses SkeletonContainer for content-visibility optimization
|
|
7
|
+
* - CSS containment isolates layout calculations
|
|
8
|
+
* - Supports prefers-reduced-motion
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Skeleton for a single stat card
|
|
12
|
+
*/
|
|
13
|
+
export declare function SkeletonStatCard(): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Skeleton for stats grid (4 cards)
|
|
16
|
+
* Uses SkeletonContainer for content-visibility optimization
|
|
17
|
+
*/
|
|
18
|
+
export declare function SkeletonStatsGrid(): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Skeleton for quick actions section
|
|
21
|
+
*/
|
|
22
|
+
export declare function SkeletonQuickActions(): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* Skeleton for activity section
|
|
25
|
+
*/
|
|
26
|
+
export declare function SkeletonActivity(): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
/**
|
|
28
|
+
* Complete skeleton for dashboard home page
|
|
29
|
+
* Matches the layout of the actual dashboard home
|
|
30
|
+
*/
|
|
31
|
+
export declare function SkeletonDashboardHome(): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=skeleton-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-dashboard.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,wBAAgB,gBAAgB,4CAa/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,4CAShC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,4CAoBnC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,4CAsB/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,4CAqBpC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardContent, CardHeader } from "./card.js";
|
|
3
|
+
import { Skeleton, SkeletonContainer } from "./skeleton.js";
|
|
4
|
+
function SkeletonStatCard() {
|
|
5
|
+
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
6
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
7
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }),
|
|
8
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-4" })
|
|
9
|
+
] }),
|
|
10
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
11
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-16 mb-2" }),
|
|
12
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-20" })
|
|
13
|
+
] })
|
|
14
|
+
] });
|
|
15
|
+
}
|
|
16
|
+
function SkeletonStatsGrid() {
|
|
17
|
+
return /* @__PURE__ */ jsxs(SkeletonContainer, { "data-cy": "skeleton-stats-grid", className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(SkeletonStatCard, {}),
|
|
19
|
+
/* @__PURE__ */ jsx(SkeletonStatCard, {}),
|
|
20
|
+
/* @__PURE__ */ jsx(SkeletonStatCard, {}),
|
|
21
|
+
/* @__PURE__ */ jsx(SkeletonStatCard, {})
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
function SkeletonQuickActions() {
|
|
25
|
+
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
26
|
+
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-32" }),
|
|
28
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-64" })
|
|
29
|
+
] }),
|
|
30
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(SkeletonContainer, { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "p-4 border rounded-lg space-y-2", children: [
|
|
31
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-5" }),
|
|
32
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-24" }),
|
|
33
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-32" })
|
|
34
|
+
] }, i)) }) })
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
function SkeletonActivity() {
|
|
38
|
+
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
39
|
+
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
40
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-32" }),
|
|
41
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-48" })
|
|
42
|
+
] }),
|
|
43
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", { className: "space-y-4", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
44
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-2 w-2 rounded-full" }),
|
|
45
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-1", children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-40" }),
|
|
47
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-24" })
|
|
48
|
+
] })
|
|
49
|
+
] }, i)) }) })
|
|
50
|
+
] });
|
|
51
|
+
}
|
|
52
|
+
function SkeletonDashboardHome() {
|
|
53
|
+
return /* @__PURE__ */ jsx("div", { "data-cy": "skeleton-dashboard-home", className: "min-h-screen bg-gradient-to-b from-background to-muted/20 py-12 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto space-y-8", children: [
|
|
54
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
|
|
55
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-64 mb-2" }),
|
|
56
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-80" })
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsx(SkeletonStatsGrid, {}),
|
|
59
|
+
/* @__PURE__ */ jsx(SkeletonQuickActions, {}),
|
|
60
|
+
/* @__PURE__ */ jsx(SkeletonActivity, {})
|
|
61
|
+
] }) });
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
SkeletonActivity,
|
|
65
|
+
SkeletonDashboardHome,
|
|
66
|
+
SkeletonQuickActions,
|
|
67
|
+
SkeletonStatCard,
|
|
68
|
+
SkeletonStatsGrid
|
|
69
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-detail.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-detail.tsx"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"skeleton-detail.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-detail.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,oBAAoB,4CAqBnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,OAAe,EAAE,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,2CAO7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAc,EACf,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,2CAkBA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,4CAqC/B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,4CAYnC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skeleton components specifically for feature pages
|
|
3
|
+
* Provides realistic loading states that match the feature gate/placeholder structure
|
|
4
|
+
*
|
|
5
|
+
* Performance optimizations:
|
|
6
|
+
* - Uses SkeletonContainer for content-visibility optimization
|
|
7
|
+
* - CSS containment isolates layout calculations
|
|
8
|
+
* - Supports prefers-reduced-motion
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Skeleton for feature placeholder page
|
|
12
|
+
* Matches the FeaturePlaceholder component layout
|
|
13
|
+
*/
|
|
14
|
+
export declare function SkeletonFeaturePlaceholder(): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* Skeleton for analytics dashboard page
|
|
17
|
+
*/
|
|
18
|
+
export declare function SkeletonAnalyticsPage(): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Skeleton for webhooks configuration page
|
|
21
|
+
*/
|
|
22
|
+
export declare function SkeletonWebhooksPage(): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* Skeleton for automation page
|
|
25
|
+
*/
|
|
26
|
+
export declare function SkeletonAutomationPage(): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=skeleton-features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-features.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-features.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;GAGG;AACH,wBAAgB,0BAA0B,4CA8BzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,4CAkCpC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,4CAoCnC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,4CAiCrC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardContent, CardHeader } from "./card.js";
|
|
3
|
+
import { Skeleton } from "./skeleton.js";
|
|
4
|
+
function SkeletonFeaturePlaceholder() {
|
|
5
|
+
return /* @__PURE__ */ jsx("div", { "data-cy": "skeleton-feature-placeholder", className: "flex flex-col items-center justify-center min-h-[400px] p-8", children: /* @__PURE__ */ jsxs(Card, { className: "max-w-md w-full text-center", children: [
|
|
6
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "pb-4", children: [
|
|
7
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center mb-4", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-16 w-16 rounded-full" }) }),
|
|
8
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-48 mx-auto mb-2" }),
|
|
9
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-64 mx-auto" })
|
|
10
|
+
] }),
|
|
11
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "space-y-4", children: [
|
|
12
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
13
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-5 flex-shrink-0" }),
|
|
14
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-full" })
|
|
15
|
+
] }, i)) }),
|
|
16
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full mt-6" })
|
|
17
|
+
] })
|
|
18
|
+
] }) });
|
|
19
|
+
}
|
|
20
|
+
function SkeletonAnalyticsPage() {
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
22
|
+
/* @__PURE__ */ jsxs("header", { children: [
|
|
23
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-48 mb-2" }),
|
|
24
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-72" })
|
|
25
|
+
] }),
|
|
26
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-4 md:grid-cols-4", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6", children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24 mb-2" }),
|
|
28
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-16 mb-1" }),
|
|
29
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20" })
|
|
30
|
+
] }) }, i)) }),
|
|
31
|
+
/* @__PURE__ */ jsxs(Card, { children: [
|
|
32
|
+
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-32" }),
|
|
34
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-48" })
|
|
35
|
+
] }),
|
|
36
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Skeleton, { className: "h-64 w-full" }) })
|
|
37
|
+
] })
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
function SkeletonWebhooksPage() {
|
|
41
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between", children: [
|
|
43
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
44
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-32 mb-2" }),
|
|
45
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-64" })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-36" })
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "divide-y", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4", children: [
|
|
50
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
51
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-5" }),
|
|
52
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
53
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-40" }),
|
|
54
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-64" })
|
|
55
|
+
] })
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
58
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-16 rounded-full" }),
|
|
59
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8" })
|
|
60
|
+
] })
|
|
61
|
+
] }, i)) }) }) })
|
|
62
|
+
] });
|
|
63
|
+
}
|
|
64
|
+
function SkeletonAutomationPage() {
|
|
65
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between", children: [
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
68
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-36 mb-2" }),
|
|
69
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-72" })
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-40" })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-4 md:grid-cols-2", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between", children: [
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-10 rounded-lg" }),
|
|
76
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
77
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-32" }),
|
|
78
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-48" })
|
|
79
|
+
] })
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-12 rounded-full" })
|
|
82
|
+
] }) }) }, i)) })
|
|
83
|
+
] });
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
SkeletonAnalyticsPage,
|
|
87
|
+
SkeletonAutomationPage,
|
|
88
|
+
SkeletonFeaturePlaceholder,
|
|
89
|
+
SkeletonWebhooksPage
|
|
90
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-form.tsx"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"skeleton-form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-form.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,kBAAkB,4CAgBjC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,UAAc,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,2CAWjF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,UAAkB,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,2CAOjF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,4CAYpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAc,EACd,YAAmB,EACnB,aAAoB,EACrB,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,2CAuCA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,4CAUlC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAc,EACd,YAAmB,EACnB,aAAoB,EACrB,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,2CAqBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-list.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-list.tsx"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"skeleton-list.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-list.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,kBAAkB,4CAgBjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,WAAe,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,2CAqBhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,WAAe,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,2CA0B7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAY,EACZ,WAAe,EAChB,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,2CAeA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,4CAmBjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,4CAiBlC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAY,EACZ,WAAe,EACf,eAAuB,EACxB,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,2CAgBA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skeleton components specifically for public pages
|
|
3
|
+
* Provides realistic loading states that match the public page structure
|
|
4
|
+
*
|
|
5
|
+
* Performance optimizations:
|
|
6
|
+
* - Uses SkeletonContainer for content-visibility optimization
|
|
7
|
+
* - CSS containment isolates layout calculations
|
|
8
|
+
* - Supports prefers-reduced-motion
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Skeleton for hero section
|
|
12
|
+
*/
|
|
13
|
+
export declare function SkeletonHeroSection(): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Skeleton for features section
|
|
16
|
+
*/
|
|
17
|
+
export declare function SkeletonFeaturesSection(): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
/**
|
|
19
|
+
* Complete skeleton for landing/home page
|
|
20
|
+
*/
|
|
21
|
+
export declare function SkeletonLandingPage(): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* Skeleton for support/contact page
|
|
24
|
+
*/
|
|
25
|
+
export declare function SkeletonSupportPage(): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=skeleton-public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-public.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-public.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;GAEG;AACH,wBAAgB,mBAAmB,4CAYlC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,4CAsBtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,4CAOlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,4CA+BlC"}
|