@particle-academy/fancy-cms-ui 0.0.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/chunk-MRWUUNJR.js +47 -0
- package/dist/chunk-MRWUUNJR.js.map +1 -0
- package/dist/chunk-NWH2AJLH.js +352 -0
- package/dist/chunk-NWH2AJLH.js.map +1 -0
- package/dist/editor.cjs +701 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.d.cts +89 -0
- package/dist/editor.d.ts +89 -0
- package/dist/editor.js +369 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.cjs +407 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +68 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/ops-CJenUAsy.d.ts +71 -0
- package/dist/ops-DWgJjAbX.d.cts +71 -0
- package/dist/react.cjs +211 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +55 -0
- package/dist/react.d.ts +55 -0
- package/dist/react.js +21 -0
- package/dist/react.js.map +1 -0
- package/dist/types-DKCl14aV.d.cts +176 -0
- package/dist/types-DKCl14aV.d.ts +176 -0
- package/package.json +102 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stages document model — see `fancy-ui/docs/fancy-cms.md` §4.
|
|
3
|
+
*
|
|
4
|
+
* A page is a vertical stack of full-bleed **sections**; inside each, **layers**
|
|
5
|
+
* are positioned by constraints (free + bold stays responsive), with stack/grid
|
|
6
|
+
* containers where structure is wanted. Nodes live in a **flat map** keyed by id
|
|
7
|
+
* (Figma-style) so ops target a stable identity and collab merges stay clean.
|
|
8
|
+
*/
|
|
9
|
+
type NodeId = string;
|
|
10
|
+
type ScrollMode = "snap" | "smooth";
|
|
11
|
+
/** Ordered, mobile-first. Convention: `"base" | "md" | "lg"`. */
|
|
12
|
+
type Breakpoint = string;
|
|
13
|
+
type Json = string | number | boolean | null | Json[] | {
|
|
14
|
+
[key: string]: Json;
|
|
15
|
+
};
|
|
16
|
+
/** A literal value OR a binding into the page's data context (`{ $bind: "profile.coins" }`). */
|
|
17
|
+
interface Binding {
|
|
18
|
+
$bind: string;
|
|
19
|
+
}
|
|
20
|
+
type Bound<T> = T | Binding;
|
|
21
|
+
declare function isBinding(v: unknown): v is Binding;
|
|
22
|
+
type LengthUnit = "px" | "%" | "vw" | "vh" | "rem" | "fr";
|
|
23
|
+
interface Length {
|
|
24
|
+
value: number;
|
|
25
|
+
unit: LengthUnit;
|
|
26
|
+
}
|
|
27
|
+
type SizeMode = Length | "fill" | "hug";
|
|
28
|
+
interface Constraints {
|
|
29
|
+
/** Pinned offsets within a `free` parent (null = unpinned). */
|
|
30
|
+
left?: Length | null;
|
|
31
|
+
right?: Length | null;
|
|
32
|
+
top?: Length | null;
|
|
33
|
+
bottom?: Length | null;
|
|
34
|
+
centerX?: boolean;
|
|
35
|
+
centerY?: boolean;
|
|
36
|
+
width: SizeMode;
|
|
37
|
+
height: SizeMode;
|
|
38
|
+
}
|
|
39
|
+
type LayoutMode = "free" | "stack" | "grid";
|
|
40
|
+
interface StyleProps {
|
|
41
|
+
padding?: Length;
|
|
42
|
+
margin?: Length;
|
|
43
|
+
radius?: Length;
|
|
44
|
+
background?: string;
|
|
45
|
+
color?: string;
|
|
46
|
+
opacity?: number;
|
|
47
|
+
fontFamily?: string;
|
|
48
|
+
fontSize?: Length;
|
|
49
|
+
fontWeight?: number;
|
|
50
|
+
lineHeight?: number;
|
|
51
|
+
textAlign?: "left" | "center" | "right" | "justify";
|
|
52
|
+
letterSpacing?: Length;
|
|
53
|
+
border?: string;
|
|
54
|
+
boxShadow?: string;
|
|
55
|
+
transform?: string;
|
|
56
|
+
filter?: string;
|
|
57
|
+
gap?: Length;
|
|
58
|
+
direction?: "row" | "column";
|
|
59
|
+
columns?: number;
|
|
60
|
+
align?: "start" | "center" | "end" | "stretch";
|
|
61
|
+
justify?: "start" | "center" | "end" | "between" | "around";
|
|
62
|
+
}
|
|
63
|
+
/** Per-breakpoint overrides; `base` is required, others cascade mobile-first. */
|
|
64
|
+
type PerBreakpoint<T> = {
|
|
65
|
+
base: T;
|
|
66
|
+
} & Partial<Record<Breakpoint, Partial<T>>>;
|
|
67
|
+
type AnimDriver = "enter" | "scroll" | "loop" | "hover" | "click" | "drag";
|
|
68
|
+
interface Keyframe {
|
|
69
|
+
at: number;
|
|
70
|
+
props: Record<string, number | string>;
|
|
71
|
+
}
|
|
72
|
+
interface Anim {
|
|
73
|
+
id: string;
|
|
74
|
+
driver: AnimDriver;
|
|
75
|
+
keyframes: Keyframe[];
|
|
76
|
+
range?: {
|
|
77
|
+
start: number;
|
|
78
|
+
end: number;
|
|
79
|
+
};
|
|
80
|
+
ease?: string;
|
|
81
|
+
duration?: number;
|
|
82
|
+
delay?: number;
|
|
83
|
+
stagger?: number;
|
|
84
|
+
once?: boolean;
|
|
85
|
+
emit?: "css" | "js";
|
|
86
|
+
}
|
|
87
|
+
type ActionEvent = "click" | "submit" | "change" | "load" | "timer" | "scroll-into" | "hover";
|
|
88
|
+
type ActionHandler = {
|
|
89
|
+
kind: "navigate";
|
|
90
|
+
href: Bound<string>;
|
|
91
|
+
} | {
|
|
92
|
+
kind: "submitForm";
|
|
93
|
+
endpoint: string;
|
|
94
|
+
method?: "post" | "put";
|
|
95
|
+
} | {
|
|
96
|
+
kind: "mutate";
|
|
97
|
+
target: string;
|
|
98
|
+
value: Bound<Json>;
|
|
99
|
+
} | {
|
|
100
|
+
kind: "callEndpoint";
|
|
101
|
+
endpoint: string;
|
|
102
|
+
method?: string;
|
|
103
|
+
} | {
|
|
104
|
+
kind: "runFlow";
|
|
105
|
+
flow: string;
|
|
106
|
+
} | {
|
|
107
|
+
kind: "openModal";
|
|
108
|
+
node: NodeId;
|
|
109
|
+
} | {
|
|
110
|
+
kind: "openDrawer";
|
|
111
|
+
node: NodeId;
|
|
112
|
+
} | {
|
|
113
|
+
kind: "playTimeline";
|
|
114
|
+
section: NodeId;
|
|
115
|
+
} | {
|
|
116
|
+
kind: "toggleNode";
|
|
117
|
+
node: NodeId;
|
|
118
|
+
};
|
|
119
|
+
interface Action {
|
|
120
|
+
on: ActionEvent;
|
|
121
|
+
do: ActionHandler;
|
|
122
|
+
}
|
|
123
|
+
interface Node {
|
|
124
|
+
id: NodeId;
|
|
125
|
+
/** Addon key: `section | text | image | shape | stack | grid | frame | <addon>`. */
|
|
126
|
+
type: string;
|
|
127
|
+
/** `null` = a top-level section. */
|
|
128
|
+
parent: NodeId | null;
|
|
129
|
+
/** Fractional index — collab-safe ordering among siblings. */
|
|
130
|
+
order: string;
|
|
131
|
+
/** Addon-specific props; any value may be a {@link Binding}. */
|
|
132
|
+
props: Record<string, Bound<Json>>;
|
|
133
|
+
/** How this node arranges its children. */
|
|
134
|
+
layout?: LayoutMode;
|
|
135
|
+
/** How this node positions itself within its parent. */
|
|
136
|
+
constraints?: PerBreakpoint<Constraints>;
|
|
137
|
+
style: PerBreakpoint<StyleProps>;
|
|
138
|
+
animations?: Anim[];
|
|
139
|
+
actions?: Action[];
|
|
140
|
+
/** Repeater: render this node once per item of a bound array. */
|
|
141
|
+
repeat?: {
|
|
142
|
+
each: Binding;
|
|
143
|
+
as: string;
|
|
144
|
+
};
|
|
145
|
+
/** Derived from the addon manifest — interactive/3rd-party ⇒ hydration island. */
|
|
146
|
+
island?: boolean;
|
|
147
|
+
}
|
|
148
|
+
interface ThemeTokens {
|
|
149
|
+
name?: string;
|
|
150
|
+
[key: string]: Json | undefined;
|
|
151
|
+
}
|
|
152
|
+
interface PageMeta {
|
|
153
|
+
title: string;
|
|
154
|
+
slug: string;
|
|
155
|
+
scrollMode: ScrollMode;
|
|
156
|
+
seo?: Record<string, string>;
|
|
157
|
+
}
|
|
158
|
+
interface PageDoc {
|
|
159
|
+
id: string;
|
|
160
|
+
/** Op counter — collab ordering + revision checkpoints. */
|
|
161
|
+
seq: number;
|
|
162
|
+
meta: PageMeta;
|
|
163
|
+
theme: ThemeTokens;
|
|
164
|
+
/** Ordered, mobile-first. */
|
|
165
|
+
breakpoints: Breakpoint[];
|
|
166
|
+
/** Top-level section order. */
|
|
167
|
+
sections: NodeId[];
|
|
168
|
+
/** Flat map — not a nested tree. */
|
|
169
|
+
nodes: Record<NodeId, Node>;
|
|
170
|
+
}
|
|
171
|
+
/** Default breakpoint → min-width (px) map. `base` has no media query. */
|
|
172
|
+
declare const DEFAULT_BREAKPOINTS: Record<string, number>;
|
|
173
|
+
/** A minimal empty document. */
|
|
174
|
+
declare function emptyDoc(id: string, slug?: string): PageDoc;
|
|
175
|
+
|
|
176
|
+
export { type Action as A, type Binding as B, type Constraints as C, DEFAULT_BREAKPOINTS as D, type Json as J, type Keyframe as K, type LayoutMode as L, type Node as N, type PageDoc as P, type ScrollMode as S, type ThemeTokens as T, type ActionEvent as a, type ActionHandler as b, type Anim as c, type AnimDriver as d, type Bound as e, type Breakpoint as f, type Length as g, type LengthUnit as h, type NodeId as i, type PageMeta as j, type PerBreakpoint as k, type SizeMode as l, type StyleProps as m, emptyDoc as n, isBinding as o };
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stages document model — see `fancy-ui/docs/fancy-cms.md` §4.
|
|
3
|
+
*
|
|
4
|
+
* A page is a vertical stack of full-bleed **sections**; inside each, **layers**
|
|
5
|
+
* are positioned by constraints (free + bold stays responsive), with stack/grid
|
|
6
|
+
* containers where structure is wanted. Nodes live in a **flat map** keyed by id
|
|
7
|
+
* (Figma-style) so ops target a stable identity and collab merges stay clean.
|
|
8
|
+
*/
|
|
9
|
+
type NodeId = string;
|
|
10
|
+
type ScrollMode = "snap" | "smooth";
|
|
11
|
+
/** Ordered, mobile-first. Convention: `"base" | "md" | "lg"`. */
|
|
12
|
+
type Breakpoint = string;
|
|
13
|
+
type Json = string | number | boolean | null | Json[] | {
|
|
14
|
+
[key: string]: Json;
|
|
15
|
+
};
|
|
16
|
+
/** A literal value OR a binding into the page's data context (`{ $bind: "profile.coins" }`). */
|
|
17
|
+
interface Binding {
|
|
18
|
+
$bind: string;
|
|
19
|
+
}
|
|
20
|
+
type Bound<T> = T | Binding;
|
|
21
|
+
declare function isBinding(v: unknown): v is Binding;
|
|
22
|
+
type LengthUnit = "px" | "%" | "vw" | "vh" | "rem" | "fr";
|
|
23
|
+
interface Length {
|
|
24
|
+
value: number;
|
|
25
|
+
unit: LengthUnit;
|
|
26
|
+
}
|
|
27
|
+
type SizeMode = Length | "fill" | "hug";
|
|
28
|
+
interface Constraints {
|
|
29
|
+
/** Pinned offsets within a `free` parent (null = unpinned). */
|
|
30
|
+
left?: Length | null;
|
|
31
|
+
right?: Length | null;
|
|
32
|
+
top?: Length | null;
|
|
33
|
+
bottom?: Length | null;
|
|
34
|
+
centerX?: boolean;
|
|
35
|
+
centerY?: boolean;
|
|
36
|
+
width: SizeMode;
|
|
37
|
+
height: SizeMode;
|
|
38
|
+
}
|
|
39
|
+
type LayoutMode = "free" | "stack" | "grid";
|
|
40
|
+
interface StyleProps {
|
|
41
|
+
padding?: Length;
|
|
42
|
+
margin?: Length;
|
|
43
|
+
radius?: Length;
|
|
44
|
+
background?: string;
|
|
45
|
+
color?: string;
|
|
46
|
+
opacity?: number;
|
|
47
|
+
fontFamily?: string;
|
|
48
|
+
fontSize?: Length;
|
|
49
|
+
fontWeight?: number;
|
|
50
|
+
lineHeight?: number;
|
|
51
|
+
textAlign?: "left" | "center" | "right" | "justify";
|
|
52
|
+
letterSpacing?: Length;
|
|
53
|
+
border?: string;
|
|
54
|
+
boxShadow?: string;
|
|
55
|
+
transform?: string;
|
|
56
|
+
filter?: string;
|
|
57
|
+
gap?: Length;
|
|
58
|
+
direction?: "row" | "column";
|
|
59
|
+
columns?: number;
|
|
60
|
+
align?: "start" | "center" | "end" | "stretch";
|
|
61
|
+
justify?: "start" | "center" | "end" | "between" | "around";
|
|
62
|
+
}
|
|
63
|
+
/** Per-breakpoint overrides; `base` is required, others cascade mobile-first. */
|
|
64
|
+
type PerBreakpoint<T> = {
|
|
65
|
+
base: T;
|
|
66
|
+
} & Partial<Record<Breakpoint, Partial<T>>>;
|
|
67
|
+
type AnimDriver = "enter" | "scroll" | "loop" | "hover" | "click" | "drag";
|
|
68
|
+
interface Keyframe {
|
|
69
|
+
at: number;
|
|
70
|
+
props: Record<string, number | string>;
|
|
71
|
+
}
|
|
72
|
+
interface Anim {
|
|
73
|
+
id: string;
|
|
74
|
+
driver: AnimDriver;
|
|
75
|
+
keyframes: Keyframe[];
|
|
76
|
+
range?: {
|
|
77
|
+
start: number;
|
|
78
|
+
end: number;
|
|
79
|
+
};
|
|
80
|
+
ease?: string;
|
|
81
|
+
duration?: number;
|
|
82
|
+
delay?: number;
|
|
83
|
+
stagger?: number;
|
|
84
|
+
once?: boolean;
|
|
85
|
+
emit?: "css" | "js";
|
|
86
|
+
}
|
|
87
|
+
type ActionEvent = "click" | "submit" | "change" | "load" | "timer" | "scroll-into" | "hover";
|
|
88
|
+
type ActionHandler = {
|
|
89
|
+
kind: "navigate";
|
|
90
|
+
href: Bound<string>;
|
|
91
|
+
} | {
|
|
92
|
+
kind: "submitForm";
|
|
93
|
+
endpoint: string;
|
|
94
|
+
method?: "post" | "put";
|
|
95
|
+
} | {
|
|
96
|
+
kind: "mutate";
|
|
97
|
+
target: string;
|
|
98
|
+
value: Bound<Json>;
|
|
99
|
+
} | {
|
|
100
|
+
kind: "callEndpoint";
|
|
101
|
+
endpoint: string;
|
|
102
|
+
method?: string;
|
|
103
|
+
} | {
|
|
104
|
+
kind: "runFlow";
|
|
105
|
+
flow: string;
|
|
106
|
+
} | {
|
|
107
|
+
kind: "openModal";
|
|
108
|
+
node: NodeId;
|
|
109
|
+
} | {
|
|
110
|
+
kind: "openDrawer";
|
|
111
|
+
node: NodeId;
|
|
112
|
+
} | {
|
|
113
|
+
kind: "playTimeline";
|
|
114
|
+
section: NodeId;
|
|
115
|
+
} | {
|
|
116
|
+
kind: "toggleNode";
|
|
117
|
+
node: NodeId;
|
|
118
|
+
};
|
|
119
|
+
interface Action {
|
|
120
|
+
on: ActionEvent;
|
|
121
|
+
do: ActionHandler;
|
|
122
|
+
}
|
|
123
|
+
interface Node {
|
|
124
|
+
id: NodeId;
|
|
125
|
+
/** Addon key: `section | text | image | shape | stack | grid | frame | <addon>`. */
|
|
126
|
+
type: string;
|
|
127
|
+
/** `null` = a top-level section. */
|
|
128
|
+
parent: NodeId | null;
|
|
129
|
+
/** Fractional index — collab-safe ordering among siblings. */
|
|
130
|
+
order: string;
|
|
131
|
+
/** Addon-specific props; any value may be a {@link Binding}. */
|
|
132
|
+
props: Record<string, Bound<Json>>;
|
|
133
|
+
/** How this node arranges its children. */
|
|
134
|
+
layout?: LayoutMode;
|
|
135
|
+
/** How this node positions itself within its parent. */
|
|
136
|
+
constraints?: PerBreakpoint<Constraints>;
|
|
137
|
+
style: PerBreakpoint<StyleProps>;
|
|
138
|
+
animations?: Anim[];
|
|
139
|
+
actions?: Action[];
|
|
140
|
+
/** Repeater: render this node once per item of a bound array. */
|
|
141
|
+
repeat?: {
|
|
142
|
+
each: Binding;
|
|
143
|
+
as: string;
|
|
144
|
+
};
|
|
145
|
+
/** Derived from the addon manifest — interactive/3rd-party ⇒ hydration island. */
|
|
146
|
+
island?: boolean;
|
|
147
|
+
}
|
|
148
|
+
interface ThemeTokens {
|
|
149
|
+
name?: string;
|
|
150
|
+
[key: string]: Json | undefined;
|
|
151
|
+
}
|
|
152
|
+
interface PageMeta {
|
|
153
|
+
title: string;
|
|
154
|
+
slug: string;
|
|
155
|
+
scrollMode: ScrollMode;
|
|
156
|
+
seo?: Record<string, string>;
|
|
157
|
+
}
|
|
158
|
+
interface PageDoc {
|
|
159
|
+
id: string;
|
|
160
|
+
/** Op counter — collab ordering + revision checkpoints. */
|
|
161
|
+
seq: number;
|
|
162
|
+
meta: PageMeta;
|
|
163
|
+
theme: ThemeTokens;
|
|
164
|
+
/** Ordered, mobile-first. */
|
|
165
|
+
breakpoints: Breakpoint[];
|
|
166
|
+
/** Top-level section order. */
|
|
167
|
+
sections: NodeId[];
|
|
168
|
+
/** Flat map — not a nested tree. */
|
|
169
|
+
nodes: Record<NodeId, Node>;
|
|
170
|
+
}
|
|
171
|
+
/** Default breakpoint → min-width (px) map. `base` has no media query. */
|
|
172
|
+
declare const DEFAULT_BREAKPOINTS: Record<string, number>;
|
|
173
|
+
/** A minimal empty document. */
|
|
174
|
+
declare function emptyDoc(id: string, slug?: string): PageDoc;
|
|
175
|
+
|
|
176
|
+
export { type Action as A, type Binding as B, type Constraints as C, DEFAULT_BREAKPOINTS as D, type Json as J, type Keyframe as K, type LayoutMode as L, type Node as N, type PageDoc as P, type ScrollMode as S, type ThemeTokens as T, type ActionEvent as a, type ActionHandler as b, type Anim as c, type AnimDriver as d, type Bound as e, type Breakpoint as f, type Length as g, type LengthUnit as h, type NodeId as i, type PageMeta as j, type PerBreakpoint as k, type SizeMode as l, type StyleProps as m, emptyDoc as n, isBinding as o };
|
package/package.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@particle-academy/fancy-cms-ui",
|
|
3
|
+
"version": "0.0.1-dev.0",
|
|
4
|
+
"description": "Editor + isomorphic renderer for fancy-cms — the Stages document model, PageOp op-spine, the JS style→CSS emitter (one half of the dual-emitter pair with the PHP particle-academy/fancy-cms), and the React renderer. Built on the Fancy UI suite.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/Particle-Academy/fancy-cms-ui.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Particle-Academy/fancy-cms-ui#readme",
|
|
10
|
+
"bugs": "https://github.com/Particle-Academy/fancy-cms-ui/issues",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "./dist/index.cjs",
|
|
13
|
+
"module": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"require": {
|
|
22
|
+
"types": "./dist/index.d.cts",
|
|
23
|
+
"default": "./dist/index.cjs"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"./react": {
|
|
27
|
+
"import": {
|
|
28
|
+
"types": "./dist/react.d.ts",
|
|
29
|
+
"default": "./dist/react.js"
|
|
30
|
+
},
|
|
31
|
+
"require": {
|
|
32
|
+
"types": "./dist/react.d.cts",
|
|
33
|
+
"default": "./dist/react.cjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"./editor": {
|
|
37
|
+
"import": {
|
|
38
|
+
"types": "./dist/editor.d.ts",
|
|
39
|
+
"default": "./dist/editor.js"
|
|
40
|
+
},
|
|
41
|
+
"require": {
|
|
42
|
+
"types": "./dist/editor.d.cts",
|
|
43
|
+
"default": "./dist/editor.cjs"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"dist",
|
|
49
|
+
"docs",
|
|
50
|
+
"README.md"
|
|
51
|
+
],
|
|
52
|
+
"sideEffects": false,
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsup",
|
|
55
|
+
"dev": "tsup --watch",
|
|
56
|
+
"lint": "tsc --noEmit",
|
|
57
|
+
"test": "vitest run",
|
|
58
|
+
"test:watch": "vitest",
|
|
59
|
+
"parity": "node parity/run.mjs",
|
|
60
|
+
"clean": "rm -rf dist",
|
|
61
|
+
"prepublishOnly": "tsup"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"cms",
|
|
65
|
+
"website-builder",
|
|
66
|
+
"wysiwyg",
|
|
67
|
+
"editor",
|
|
68
|
+
"fancy",
|
|
69
|
+
"human-plus",
|
|
70
|
+
"laravel",
|
|
71
|
+
"inertia"
|
|
72
|
+
],
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"react": "^18 || ^19",
|
|
75
|
+
"@particle-academy/react-fancy": ">=3"
|
|
76
|
+
},
|
|
77
|
+
"peerDependenciesMeta": {
|
|
78
|
+
"react": {
|
|
79
|
+
"optional": true
|
|
80
|
+
},
|
|
81
|
+
"@particle-academy/react-fancy": {
|
|
82
|
+
"optional": true
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"devDependencies": {
|
|
86
|
+
"@types/node": "^20.0.0",
|
|
87
|
+
"@types/react": "^19.0.0",
|
|
88
|
+
"@types/react-dom": "^19.0.0",
|
|
89
|
+
"react": "^19.0.0",
|
|
90
|
+
"react-dom": "^19.0.0",
|
|
91
|
+
"tsup": "^8.5.0",
|
|
92
|
+
"typescript": "^5.8.0",
|
|
93
|
+
"vitest": "^3.2.0"
|
|
94
|
+
},
|
|
95
|
+
"engines": {
|
|
96
|
+
"node": ">=18"
|
|
97
|
+
},
|
|
98
|
+
"publishConfig": {
|
|
99
|
+
"access": "public"
|
|
100
|
+
},
|
|
101
|
+
"license": "MIT"
|
|
102
|
+
}
|