@easy-editor/setters 0.0.2

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/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright © 2025-PRESENT JinSo <https://github.com/JinSooo>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,256 @@
1
+ # @easy-editor/setters
2
+
3
+ Official setters library for EasyEditor - A collection of property setter components for the visual low-code editor.
4
+
5
+ ## 📦 Included Setters
6
+
7
+ ### Basic Setters
8
+ - **StringSetter** - Text input setter
9
+ - **NumberSetter** - Number input setter with min/max/step support
10
+ - **ColorSetter** - Color picker setter
11
+ - **NodeIdSetter** - Display node ID and component title
12
+ - **RectSetter** - Rectangle position and size setter (X, Y, W, H)
13
+ - **SwitchSetter** - Boolean toggle switch
14
+ - **UploadSetter** - File upload setter with preview
15
+
16
+ ### Group Setters
17
+ - **CollapseSetter** - Collapsible group container
18
+ - **TabSetter** - Tabbed group container
19
+
20
+ ## 🚀 Installation
21
+
22
+ ```bash
23
+ npm install @easy-editor/setters
24
+ # or
25
+ pnpm add @easy-editor/setters
26
+ ```
27
+
28
+ ## 📖 Usage
29
+
30
+ ### Import All Setters
31
+
32
+ ```typescript
33
+ import { setterMap } from '@easy-editor/setters'
34
+
35
+ // Register all setters at once
36
+ Object.entries(setterMap).forEach(([name, setter]) => {
37
+ editor.setters.register(name, setter)
38
+ })
39
+ ```
40
+
41
+ ### Import Individual Setters
42
+
43
+ ```typescript
44
+ import { StringSetter, NumberSetter, ColorSetter } from '@easy-editor/setters'
45
+
46
+ // Register individually
47
+ editor.setters.register('StringSetter', StringSetter)
48
+ editor.setters.register('NumberSetter', NumberSetter)
49
+ editor.setters.register('ColorSetter', ColorSetter)
50
+ ```
51
+
52
+ ### Import Specific Setter
53
+
54
+ ```typescript
55
+ import StringSetter from '@easy-editor/setters/StringSetter'
56
+
57
+ editor.setters.register('StringSetter', StringSetter)
58
+ ```
59
+
60
+ ### Via CDN (UMD)
61
+
62
+ ```html
63
+ <script src="https://unpkg.com/@easy-editor/setters@latest/dist/index.min.js"></script>
64
+ <script>
65
+ // All setters are available at window.$EasyEditor.setters
66
+ const { StringSetter, NumberSetter, ColorSetter } = window.$EasyEditor.setters
67
+
68
+ // Or use the setterMap
69
+ const setterMap = window.$EasyEditor.setters.setterMap
70
+ </script>
71
+ ```
72
+
73
+ ## 🎨 Setter Examples
74
+
75
+ ### StringSetter
76
+
77
+ ```typescript
78
+ {
79
+ name: 'title',
80
+ title: 'Title',
81
+ setter: 'StringSetter',
82
+ extraProps: {
83
+ placeholder: 'Enter title...',
84
+ suffix: 'px',
85
+ },
86
+ }
87
+ ```
88
+
89
+ ### NumberSetter
90
+
91
+ ```typescript
92
+ {
93
+ name: 'fontSize',
94
+ title: 'Font Size',
95
+ setter: 'NumberSetter',
96
+ extraProps: {
97
+ min: 12,
98
+ max: 72,
99
+ step: 2,
100
+ suffix: 'px',
101
+ },
102
+ }
103
+ ```
104
+
105
+ ### ColorSetter
106
+
107
+ ```typescript
108
+ {
109
+ name: 'color',
110
+ title: 'Color',
111
+ setter: 'ColorSetter',
112
+ extraProps: {
113
+ disableAlpha: false,
114
+ },
115
+ }
116
+ ```
117
+
118
+ ### RectSetter
119
+
120
+ ```typescript
121
+ {
122
+ name: 'rect',
123
+ title: 'Position & Size',
124
+ setter: 'RectSetter',
125
+ extraProps: {
126
+ getValue(target) {
127
+ return target.getExtraPropValue('$dashboard.rect')
128
+ },
129
+ setValue(target, value) {
130
+ target.setExtraPropValue('$dashboard.rect', value)
131
+ },
132
+ },
133
+ }
134
+ ```
135
+
136
+ ### SwitchSetter
137
+
138
+ ```typescript
139
+ {
140
+ name: 'visible',
141
+ title: 'Visible',
142
+ setter: 'SwitchSetter',
143
+ extraProps: {
144
+ defaultValue: true,
145
+ },
146
+ }
147
+ ```
148
+
149
+ ### UploadSetter
150
+
151
+ ```typescript
152
+ {
153
+ name: 'image',
154
+ title: 'Image',
155
+ setter: 'UploadSetter',
156
+ extraProps: {
157
+ accept: '.jpg,.jpeg,.png,.gif',
158
+ maxSize: 5 * 1024 * 1024, // 5MB
159
+ },
160
+ }
161
+ ```
162
+
163
+ ### CollapseSetter (Group)
164
+
165
+ ```typescript
166
+ {
167
+ type: 'group',
168
+ title: 'Advanced Settings',
169
+ setter: {
170
+ componentName: 'CollapseSetter',
171
+ props: {
172
+ icon: true,
173
+ },
174
+ },
175
+ items: [
176
+ // ... nested field configs
177
+ ],
178
+ }
179
+ ```
180
+
181
+ ### TabSetter (Group)
182
+
183
+ ```typescript
184
+ {
185
+ type: 'group',
186
+ title: 'Settings',
187
+ setter: 'TabSetter',
188
+ items: [
189
+ {
190
+ type: 'group',
191
+ key: 'basic',
192
+ title: 'Basic',
193
+ items: [/* ... */],
194
+ },
195
+ {
196
+ type: 'group',
197
+ key: 'advanced',
198
+ title: 'Advanced',
199
+ items: [/* ... */],
200
+ },
201
+ ],
202
+ }
203
+ ```
204
+
205
+ ## 🔧 TypeScript Support
206
+
207
+ All setters are fully typed with TypeScript:
208
+
209
+ ```typescript
210
+ import type { StringSetterProps, NumberSetterProps, ColorSetterProps, UploadValue } from '@easy-editor/setters'
211
+ ```
212
+
213
+ ## 📦 Package Exports
214
+
215
+ The package supports multiple import methods:
216
+
217
+ - **Default**: `import setterMap from '@easy-editor/setters'`
218
+ - **Named**: `import { StringSetter, NumberSetter } from '@easy-editor/setters'`
219
+ - **Specific**: `import StringSetter from '@easy-editor/setters/StringSetter'`
220
+
221
+ ## 🌐 CDN Usage
222
+
223
+ ### unpkg
224
+
225
+ ```html
226
+ <script src="https://unpkg.com/@easy-editor/setters@latest/dist/index.min.js"></script>
227
+ ```
228
+
229
+ ### jsdelivr
230
+
231
+ ```html
232
+ <script src="https://cdn.jsdelivr.net/npm/@easy-editor/setters@latest/dist/index.min.js"></script>
233
+ ```
234
+
235
+ ## 🎯 Features
236
+
237
+ - ✅ **9 Built-in Setters** - Covers most common property types
238
+ - ✅ **TypeScript Support** - Fully typed with IntelliSense
239
+ - ✅ **Multiple Import Methods** - Use all or individual setters
240
+ - ✅ **CDN Ready** - UMD build for browser usage
241
+ - ✅ **Zero Dependencies** - Only peer dependencies (React, @easy-editor/core)
242
+ - ✅ **Lightweight** - Small bundle size with tree-shaking support
243
+ - ✅ **Customizable** - Pure inline styles, no CSS dependencies
244
+
245
+ ## 📄 License
246
+
247
+ MIT © JinSo
248
+
249
+ ## 🔗 Related Projects
250
+
251
+ - [EasyEditor](https://github.com/Easy-Editor/EasyEditor) - Core editor
252
+ - [EasyMaterials](https://github.com/Easy-Editor/EasyMaterials) - Official materials library
253
+
254
+ ## 💬 Support
255
+
256
+ If you have any questions or suggestions, please submit an [Issue](https://github.com/Easy-Editor/EasySetters/issues).
@@ -0,0 +1,6 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface ColorSetterProps extends SetterProps<string> {
3
+ disableAlpha?: boolean;
4
+ }
5
+ declare const ColorSetter: (props: ColorSetterProps) => import("react").JSX.Element;
6
+ export default ColorSetter;
@@ -0,0 +1,5 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface NodeIdSetterProps extends SetterProps<string> {
3
+ }
4
+ declare const NodeIdSetter: (props: NodeIdSetterProps) => import("react").JSX.Element;
5
+ export default NodeIdSetter;
@@ -0,0 +1,7 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface NumberSetterProps extends SetterProps<number> {
3
+ placeholder?: string;
4
+ suffix?: string;
5
+ }
6
+ declare const NumberSetter: (props: NumberSetterProps) => import("react").JSX.Element;
7
+ export default NumberSetter;
@@ -0,0 +1,5 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface RectSetterProps extends SetterProps<DOMRect> {
3
+ }
4
+ declare const RectSetter: (props: RectSetterProps) => import("react").JSX.Element;
5
+ export default RectSetter;
@@ -0,0 +1,7 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface StringSetterProps extends SetterProps<string> {
3
+ placeholder?: string;
4
+ suffix?: string;
5
+ }
6
+ declare const StringSetter: (props: StringSetterProps) => import("react").JSX.Element;
7
+ export default StringSetter;
@@ -0,0 +1,5 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface SwitchSetterProps extends SetterProps<boolean> {
3
+ }
4
+ declare const SwitchSetter: (props: SwitchSetterProps) => import("react").JSX.Element;
5
+ export default SwitchSetter;
@@ -0,0 +1,17 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ export interface UploadValue {
3
+ raw: {
4
+ name: string;
5
+ size: number;
6
+ type: string;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ base64: string;
11
+ }
12
+ export interface UploadSetterProps extends SetterProps<UploadValue | null> {
13
+ accept?: string;
14
+ maxSize?: number;
15
+ }
16
+ declare const UploadSetter: (props: UploadSetterProps) => import("react").JSX.Element;
17
+ export default UploadSetter;
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare const Button: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
8
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
9
+ size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
11
+ asChild?: boolean;
12
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>>;
13
+ export { Button, buttonVariants };
@@ -0,0 +1,5 @@
1
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
2
+ declare function Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>): import("react").JSX.Element;
3
+ declare function CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): import("react").JSX.Element;
4
+ declare function CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>): import("react").JSX.Element;
5
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
3
+ declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): React.JSX.Element;
4
+ declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): React.JSX.Element;
5
+ declare function DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): React.JSX.Element;
6
+ declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): React.JSX.Element;
7
+ declare function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): React.JSX.Element;
8
+ declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
9
+ inset?: boolean;
10
+ variant?: "default" | "destructive";
11
+ }): React.JSX.Element;
12
+ declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): React.JSX.Element;
13
+ declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): React.JSX.Element;
14
+ declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): React.JSX.Element;
15
+ declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
16
+ inset?: boolean;
17
+ }): React.JSX.Element;
18
+ declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): React.JSX.Element;
19
+ declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
20
+ declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.JSX.Element;
21
+ declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
22
+ inset?: boolean;
23
+ }): React.JSX.Element;
24
+ declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): React.JSX.Element;
25
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<"input">): React.JSX.Element;
3
+ export { Input };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ declare function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
4
+ export { Label };
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
3
+ declare function Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>): React.JSX.Element;
4
+ declare function PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>): React.JSX.Element;
5
+ declare function PopoverContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): React.JSX.Element;
6
+ declare function PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>): React.JSX.Element;
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import * as SwitchPrimitive from "@radix-ui/react-switch";
3
+ declare function Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>): React.JSX.Element;
4
+ export { Switch };
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
3
+ declare function Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): React.JSX.Element;
4
+ declare function TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>): React.JSX.Element;
5
+ declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): React.JSX.Element;
6
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): React.JSX.Element;
7
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,3 @@
1
+ import type { SettingField } from '@easy-editor/core';
2
+ import type { ReactNode } from 'react';
3
+ export declare const customFieldItem: (field: SettingField, setter: ReactNode) => import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ import type { PropsWithChildren } from 'react';
3
+ export interface CollapseSetterProps extends SetterProps<boolean>, PropsWithChildren {
4
+ icon?: boolean;
5
+ }
6
+ declare const CollapseSetter: (props: CollapseSetterProps) => import("react").JSX.Element;
7
+ export default CollapseSetter;
@@ -0,0 +1,11 @@
1
+ import type { SetterProps } from '@easy-editor/core';
2
+ import type { PropsWithChildren } from 'react';
3
+ import React from 'react';
4
+ export interface TabSetterProps extends SetterProps<string>, PropsWithChildren {
5
+ tabs?: {
6
+ label: string;
7
+ value: string;
8
+ }[];
9
+ }
10
+ declare const TabSetter: (props: TabSetterProps) => React.JSX.Element;
11
+ export default TabSetter;