@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.
Files changed (201) hide show
  1. package/dist/components/dashboard/block-editor/block-picker.d.ts +7 -2
  2. package/dist/components/dashboard/block-editor/block-picker.d.ts.map +1 -1
  3. package/dist/components/dashboard/block-editor/block-picker.js +27 -20
  4. package/dist/components/dashboard/block-editor/block-preview-canvas.d.ts.map +1 -1
  5. package/dist/components/dashboard/block-editor/block-preview-canvas.js +37 -37
  6. package/dist/components/dashboard/block-editor/block-settings-panel.js +3 -3
  7. package/dist/components/dashboard/block-editor/builder-editor-view.d.ts.map +1 -1
  8. package/dist/components/dashboard/block-editor/builder-editor-view.js +124 -82
  9. package/dist/components/dashboard/block-editor/config-panel.d.ts +18 -0
  10. package/dist/components/dashboard/block-editor/config-panel.d.ts.map +1 -0
  11. package/dist/components/dashboard/block-editor/config-panel.js +413 -0
  12. package/dist/components/dashboard/block-editor/floating-block-toolbar.js +1 -1
  13. package/dist/components/dashboard/block-editor/pattern-card.js +1 -1
  14. package/dist/components/dashboard/block-editor/pattern-reference-preview.js +1 -1
  15. package/dist/components/dashboard/block-editor/sortable-block.js +1 -1
  16. package/dist/components/dashboard/block-editor/tree-view-node.d.ts +11 -0
  17. package/dist/components/dashboard/block-editor/tree-view-node.d.ts.map +1 -0
  18. package/dist/components/dashboard/block-editor/tree-view-node.js +91 -0
  19. package/dist/components/dashboard/block-editor/tree-view.d.ts +17 -0
  20. package/dist/components/dashboard/block-editor/tree-view.d.ts.map +1 -0
  21. package/dist/components/dashboard/block-editor/tree-view.js +125 -0
  22. package/dist/components/dashboard/block-editor/viewport-toggle.d.ts +10 -0
  23. package/dist/components/dashboard/block-editor/viewport-toggle.d.ts.map +1 -0
  24. package/dist/components/dashboard/block-editor/viewport-toggle.js +55 -0
  25. package/dist/components/public/pageBuilder/PageRenderer.d.ts.map +1 -1
  26. package/dist/components/public/pageBuilder/PageRenderer.js +10 -1
  27. package/dist/components/settings/layouts/SettingsSidebar.d.ts.map +1 -1
  28. package/dist/components/settings/layouts/SettingsSidebar.js +14 -0
  29. package/dist/components/ui/dynamic-icon.d.ts +12 -0
  30. package/dist/components/ui/dynamic-icon.d.ts.map +1 -0
  31. package/dist/components/ui/dynamic-icon.js +11 -0
  32. package/dist/components/ui/index.d.ts +7 -0
  33. package/dist/components/ui/index.d.ts.map +1 -1
  34. package/dist/components/ui/index.js +7 -0
  35. package/dist/components/ui/skeleton-dashboard.d.ts +32 -0
  36. package/dist/components/ui/skeleton-dashboard.d.ts.map +1 -0
  37. package/dist/components/ui/skeleton-dashboard.js +69 -0
  38. package/dist/components/ui/skeleton-detail.d.ts.map +1 -1
  39. package/dist/components/ui/skeleton-detail.js +0 -1
  40. package/dist/components/ui/skeleton-features.d.ts +27 -0
  41. package/dist/components/ui/skeleton-features.d.ts.map +1 -0
  42. package/dist/components/ui/skeleton-features.js +90 -0
  43. package/dist/components/ui/skeleton-form.d.ts.map +1 -1
  44. package/dist/components/ui/skeleton-form.js +0 -1
  45. package/dist/components/ui/skeleton-list.d.ts.map +1 -1
  46. package/dist/components/ui/skeleton-list.js +0 -1
  47. package/dist/components/ui/skeleton-public.d.ts +26 -0
  48. package/dist/components/ui/skeleton-public.d.ts.map +1 -0
  49. package/dist/components/ui/skeleton-public.js +61 -0
  50. package/dist/components/ui/skeleton-settings.d.ts +54 -0
  51. package/dist/components/ui/skeleton-settings.d.ts.map +1 -0
  52. package/dist/components/ui/skeleton-settings.js +332 -0
  53. package/dist/components/ui/skeleton.d.ts +23 -1
  54. package/dist/components/ui/skeleton.d.ts.map +1 -1
  55. package/dist/components/ui/skeleton.js +46 -2
  56. package/dist/contexts/TeamContext.d.ts +2 -0
  57. package/dist/contexts/TeamContext.d.ts.map +1 -1
  58. package/dist/contexts/TeamContext.js +78 -68
  59. package/dist/hooks/usePrefetch.d.ts +43 -0
  60. package/dist/hooks/usePrefetch.d.ts.map +1 -0
  61. package/dist/hooks/usePrefetch.js +56 -0
  62. package/dist/lib/actions/index.d.ts +27 -14
  63. package/dist/lib/actions/index.d.ts.map +1 -1
  64. package/dist/lib/actions/index.js +19 -1
  65. package/dist/lib/actions/team.actions.d.ts +107 -0
  66. package/dist/lib/actions/team.actions.d.ts.map +1 -0
  67. package/dist/lib/actions/team.actions.js +220 -0
  68. package/dist/lib/actions/user.actions.d.ts +99 -0
  69. package/dist/lib/actions/user.actions.d.ts.map +1 -0
  70. package/dist/lib/actions/user.actions.js +149 -0
  71. package/dist/lib/selectors/core-selectors.d.ts +98 -44
  72. package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
  73. package/dist/lib/selectors/domains/block-editor.selectors.d.ts +136 -71
  74. package/dist/lib/selectors/domains/block-editor.selectors.d.ts.map +1 -1
  75. package/dist/lib/selectors/domains/block-editor.selectors.js +130 -60
  76. package/dist/lib/selectors/selectors.d.ts +196 -88
  77. package/dist/lib/selectors/selectors.d.ts.map +1 -1
  78. package/dist/messages/de/devtools.json +4 -0
  79. package/dist/messages/de/index.d.ts +4 -0
  80. package/dist/messages/de/index.d.ts.map +1 -1
  81. package/dist/messages/en/admin.json +15 -1
  82. package/dist/messages/en/devtools.json +16 -0
  83. package/dist/messages/en/index.d.ts +30 -0
  84. package/dist/messages/en/index.d.ts.map +1 -1
  85. package/dist/messages/es/admin.json +16 -1
  86. package/dist/messages/es/devtools.json +4 -0
  87. package/dist/messages/es/index.d.ts +19 -0
  88. package/dist/messages/es/index.d.ts.map +1 -1
  89. package/dist/messages/fr/devtools.json +4 -0
  90. package/dist/messages/fr/index.d.ts +4 -0
  91. package/dist/messages/fr/index.d.ts.map +1 -1
  92. package/dist/messages/it/devtools.json +4 -0
  93. package/dist/messages/it/index.d.ts +4 -0
  94. package/dist/messages/it/index.d.ts.map +1 -1
  95. package/dist/messages/pt/devtools.json +4 -0
  96. package/dist/messages/pt/index.d.ts +4 -0
  97. package/dist/messages/pt/index.d.ts.map +1 -1
  98. package/dist/nextspark-entities.d.ts +59 -0
  99. package/dist/presets/blocks/cta-section/component.tsx +4 -4
  100. package/dist/presets/blocks/features-grid/component.tsx +5 -5
  101. package/dist/presets/blocks/hero/component.tsx +2 -2
  102. package/dist/presets/blocks/testimonials/component.tsx +4 -4
  103. package/dist/presets/blocks/text-content/component.tsx +2 -2
  104. package/dist/presets/theme/blocks/hero/component.tsx +2 -2
  105. package/dist/presets/theme/tests/cypress/src/core/BlockEditorBasePOM.ts +123 -24
  106. package/dist/styles/classes.json +22 -2
  107. package/dist/styles/ui.css +1 -1
  108. package/dist/templates/app/(public)/[...slug]/page.tsx +2 -1
  109. package/dist/templates/app/(public)/docs/[section]/[page]/page.tsx +1 -1
  110. package/dist/templates/app/api/devtools/config/entities/route.ts +2 -1
  111. package/dist/templates/app/api/user/plan-flags/route.ts +1 -1
  112. package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +4 -2
  113. package/dist/templates/app/dashboard/(main)/layout.tsx +2 -1
  114. package/dist/templates/app/dashboard/(main)/loading.tsx +5 -0
  115. package/dist/templates/app/dashboard/features/loading.tsx +5 -0
  116. package/dist/templates/app/dashboard/settings/api-keys/loading.tsx +5 -0
  117. package/dist/templates/app/dashboard/settings/billing/loading.tsx +5 -0
  118. package/dist/templates/app/dashboard/settings/invoices/loading.tsx +5 -0
  119. package/dist/templates/app/dashboard/settings/loading.tsx +5 -0
  120. package/dist/templates/app/dashboard/settings/notifications/loading.tsx +5 -0
  121. package/dist/templates/app/dashboard/settings/password/loading.tsx +5 -0
  122. package/dist/templates/app/dashboard/settings/plans/loading.tsx +5 -0
  123. package/dist/templates/app/dashboard/settings/profile/loading.tsx +5 -0
  124. package/dist/templates/app/dashboard/settings/security/loading.tsx +5 -0
  125. package/dist/templates/app/dashboard/settings/teams/loading.tsx +5 -0
  126. package/dist/templates/app/devtools/config/page.tsx +1 -1
  127. package/dist/templates/app/devtools/page.tsx +1 -1
  128. package/dist/templates/app/devtools/tests/[[...path]]/page.tsx +1 -1
  129. package/dist/templates/contents/themes/starter/messages/de/common.json +4 -1
  130. package/dist/templates/contents/themes/starter/messages/de/index.ts +15 -0
  131. package/dist/templates/contents/themes/starter/messages/en/common.json +4 -1
  132. package/dist/templates/contents/themes/starter/messages/en/index.ts +15 -0
  133. package/dist/templates/contents/themes/starter/messages/es/common.json +4 -1
  134. package/dist/templates/contents/themes/starter/messages/es/index.ts +15 -0
  135. package/dist/templates/contents/themes/starter/messages/fr/common.json +4 -1
  136. package/dist/templates/contents/themes/starter/messages/fr/index.ts +15 -0
  137. package/dist/templates/contents/themes/starter/messages/it/common.json +4 -1
  138. package/dist/templates/contents/themes/starter/messages/it/index.ts +13 -0
  139. package/dist/templates/contents/themes/starter/messages/pt/common.json +4 -1
  140. package/dist/templates/contents/themes/starter/messages/pt/index.ts +13 -0
  141. package/dist/templates/contents/themes/starter/styles/globals.css +3 -1
  142. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/loading.tsx +5 -0
  143. package/dist/templates/contents/themes/starter/templates/(public)/loading.tsx +5 -0
  144. package/dist/templates/features/blog/blocks/post-content/component.tsx +2 -2
  145. package/dist/templates/features/pages/blocks/hero/component.tsx +2 -2
  146. package/dist/templates/next.config.mjs +10 -3
  147. package/dist/templates/{middleware.ts → proxy.ts} +5 -6
  148. package/globals.css +54 -0
  149. package/nextspark-entities.d.ts +59 -0
  150. package/package.json +18 -16
  151. package/scripts/build/registry/discovery/api-presets.mjs +20 -12
  152. package/scripts/build/registry/generators/api-presets-registry.mjs +18 -5
  153. package/scripts/build/registry/generators/block-registry.mjs +14 -3
  154. package/scripts/build/registry/generators/docs-registry.mjs +21 -3
  155. package/scripts/build/registry/generators/translation-registry.mjs +16 -7
  156. package/scripts/build/theme.mjs +2 -1
  157. package/templates/app/(public)/[...slug]/page.tsx +2 -1
  158. package/templates/app/(public)/docs/[section]/[page]/page.tsx +1 -1
  159. package/templates/app/api/auth/[...all]/route.ts +13 -5
  160. package/templates/app/api/devtools/config/entities/route.ts +2 -1
  161. package/templates/app/api/user/plan-flags/route.ts +1 -1
  162. package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +4 -2
  163. package/templates/app/dashboard/(main)/layout.tsx +2 -1
  164. package/templates/app/dashboard/(main)/loading.tsx +5 -0
  165. package/templates/app/dashboard/features/loading.tsx +5 -0
  166. package/templates/app/dashboard/settings/api-keys/loading.tsx +5 -0
  167. package/templates/app/dashboard/settings/billing/loading.tsx +5 -0
  168. package/templates/app/dashboard/settings/invoices/loading.tsx +5 -0
  169. package/templates/app/dashboard/settings/loading.tsx +5 -0
  170. package/templates/app/dashboard/settings/notifications/loading.tsx +5 -0
  171. package/templates/app/dashboard/settings/password/loading.tsx +5 -0
  172. package/templates/app/dashboard/settings/plans/loading.tsx +5 -0
  173. package/templates/app/dashboard/settings/profile/loading.tsx +5 -0
  174. package/templates/app/dashboard/settings/security/loading.tsx +5 -0
  175. package/templates/app/dashboard/settings/teams/loading.tsx +5 -0
  176. package/templates/app/devtools/config/page.tsx +1 -1
  177. package/templates/app/devtools/page.tsx +1 -1
  178. package/templates/app/devtools/tests/[[...path]]/page.tsx +1 -1
  179. package/templates/contents/themes/starter/config/app.config.ts +8 -7
  180. package/templates/contents/themes/starter/messages/de/common.json +4 -1
  181. package/templates/contents/themes/starter/messages/de/index.ts +15 -0
  182. package/templates/contents/themes/starter/messages/en/common.json +4 -1
  183. package/templates/contents/themes/starter/messages/en/index.ts +15 -0
  184. package/templates/contents/themes/starter/messages/es/common.json +4 -1
  185. package/templates/contents/themes/starter/messages/es/index.ts +15 -0
  186. package/templates/contents/themes/starter/messages/fr/common.json +4 -1
  187. package/templates/contents/themes/starter/messages/fr/index.ts +15 -0
  188. package/templates/contents/themes/starter/messages/it/common.json +4 -1
  189. package/templates/contents/themes/starter/messages/it/index.ts +13 -0
  190. package/templates/contents/themes/starter/messages/pt/common.json +4 -1
  191. package/templates/contents/themes/starter/messages/pt/index.ts +13 -0
  192. package/templates/contents/themes/starter/styles/globals.css +3 -1
  193. package/templates/contents/themes/starter/templates/(dashboard)/analytics/loading.tsx +5 -0
  194. package/templates/contents/themes/starter/templates/(public)/loading.tsx +5 -0
  195. package/templates/features/blog/blocks/post-content/component.tsx +2 -2
  196. package/templates/features/pages/blocks/hero/component.tsx +2 -2
  197. package/templates/next.config.mjs +10 -3
  198. package/templates/pnpm-workspace.yaml +5 -0
  199. package/templates/{middleware.ts → proxy.ts} +5 -6
  200. package/tests/jest/setup.ts +5 -0
  201. 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,2CA0BvD"}
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("div", { "data-block-id": block.id, "data-block-slug": block.blockSlug, children: /* @__PURE__ */ jsx(BlockRenderer, { block }) }, block.id)) });
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":"AAmCA,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAmJlE"}
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;AAQH;;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"}
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"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { jsx, jsxs } from "react/jsx-runtime";
3
2
  import { Card, CardContent, CardHeader } from "./card.js";
4
3
  import { Skeleton } from "./skeleton.js";
@@ -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;AAQH;;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
+ {"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,4 +1,3 @@
1
- "use client";
2
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
2
  import { Card, CardContent, CardHeader } from "./card.js";
4
3
  import { Skeleton } from "./skeleton.js";
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton-list.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton-list.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;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"}
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"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { jsx, jsxs } from "react/jsx-runtime";
3
2
  import { Card, CardContent } from "./card.js";
4
3
  import { Skeleton } from "./skeleton.js";
@@ -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"}