@piying/view-solid 1.5.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/builder.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { FormBuilder } from '@piying/view-core';
2
+ import type { SolidSchemaHandle } from './schema-handle';
3
+ export declare class SolidFormBuilder extends FormBuilder<SolidSchemaHandle> {
4
+ }
@@ -0,0 +1,5 @@
1
+ import type { PiResolvedViewFieldConfig } from '../type';
2
+ export interface PiyingFieldTemplateProps {
3
+ field: PiResolvedViewFieldConfig;
4
+ }
5
+ export declare function PiyingFieldTemplate(props: PiyingFieldTemplateProps): import("solid-js").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function PiyingGroup(): import("solid-js").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export * from './field-template';
2
+ export * from './group';
3
+ export * from './view';
4
+ export * from './wrapper';
@@ -0,0 +1,8 @@
1
+ import * as v from 'valibot';
2
+ export interface PiyingViewProps {
3
+ schema: v.BaseSchema<any, any, any> | v.SchemaWithPipe<any>;
4
+ model?: any;
5
+ modelChange?: (value: any) => void;
6
+ options: any;
7
+ }
8
+ export declare function PiyingView(props: PiyingViewProps): import("solid-js").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { CoreResolvedWrapperConfig } from '@piying/view-core';
2
+ export interface PiyingWrapperProps {
3
+ wrappers: CoreResolvedWrapperConfig[];
4
+ children: any;
5
+ }
6
+ export declare function PiyingWrapper(props: PiyingWrapperProps): import("solid-js").JSX.Element;
package/index.cjs ADDED
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const solidJs = require("solid-js");
4
+ const staticInjector = require("static-injector");
5
+ const viewCore = require("@piying/view-core");
6
+ require("valibot");
7
+ const PI_VIEW_FIELD_TOKEN = solidJs.createContext(void 0);
8
+ const InjectorToken = solidJs.createContext(void 0);
9
+ const CVA = Symbol.for("ControlValueAccessor");
10
+ function useSignalToRef(value) {
11
+ const injector = solidJs.useContext(InjectorToken);
12
+ const [result, setResult] = solidJs.createSignal(value());
13
+ solidJs.createEffect(() => {
14
+ setResult(() => value());
15
+ const ref = staticInjector.effect(
16
+ () => {
17
+ const currentValue = value();
18
+ if (!Object.is(result(), currentValue)) {
19
+ setResult(() => currentValue);
20
+ }
21
+ },
22
+ { injector }
23
+ );
24
+ solidJs.onCleanup(() => {
25
+ ref.destroy();
26
+ });
27
+ });
28
+ return result;
29
+ }
30
+ function PiyingWrapper(props) {
31
+ const wrapper = solidJs.createMemo(() => props.wrappers[0]);
32
+ const restWrappers = solidJs.createMemo(() => props.wrappers?.slice(1));
33
+ const inputs = useSignalToRef(() => ({
34
+ ...wrapper()?.inputs(),
35
+ ...wrapper()?.attributes(),
36
+ ...wrapper()?.outputs
37
+ }));
38
+ return solidJs.createComponent(solidJs.Show, {
39
+ get when() {
40
+ return solidJs.createMemo(() => wrapper()?.type)();
41
+ },
42
+ get fallback() {
43
+ return props.children;
44
+ },
45
+ keyed: true,
46
+ children: (WrapperType) => {
47
+ return solidJs.createComponent(WrapperType, solidJs.mergeProps(inputs, {
48
+ get children() {
49
+ return solidJs.createComponent(PiyingWrapper, {
50
+ get wrappers() {
51
+ return restWrappers();
52
+ },
53
+ get children() {
54
+ return props.children;
55
+ }
56
+ });
57
+ }
58
+ }));
59
+ }
60
+ });
61
+ }
62
+ function PiyingFieldTemplate(props) {
63
+ const fieldInputs = useSignalToRef(() => ({
64
+ ...props.field.attributes(),
65
+ ...props.field.inputs(),
66
+ ...props.field.outputs()
67
+ }));
68
+ const renderConfig = useSignalToRef(() => props.field.renderConfig());
69
+ const wrappers = useSignalToRef(() => props.field.wrappers());
70
+ const control = solidJs.createMemo(() => props.field.form.control);
71
+ const ComponentType$$ = solidJs.createMemo(() => props.field.define?.type);
72
+ const isHidden = solidJs.createMemo(() => {
73
+ return !!renderConfig().hidden || !ComponentType$$();
74
+ });
75
+ const injector = solidJs.useContext(InjectorToken);
76
+ const [controlRef, setControlRef] = solidJs.createSignal(void 0);
77
+ const fieldControlInput = solidJs.createMemo(() => ({
78
+ ...fieldInputs(),
79
+ [CVA]: setControlRef
80
+ }));
81
+ solidJs.createEffect(() => {
82
+ let dispose;
83
+ if (controlRef()) {
84
+ dispose = viewCore.createViewControlLink(control, controlRef(), injector);
85
+ }
86
+ return () => {
87
+ dispose?.();
88
+ dispose = void 0;
89
+ };
90
+ });
91
+ return solidJs.createComponent(PI_VIEW_FIELD_TOKEN.Provider, {
92
+ get value() {
93
+ return props.field;
94
+ },
95
+ get children() {
96
+ return solidJs.createComponent(solidJs.Show, {
97
+ get when() {
98
+ return !isHidden();
99
+ },
100
+ get children() {
101
+ return solidJs.createComponent(PiyingWrapper, {
102
+ get wrappers() {
103
+ return wrappers();
104
+ },
105
+ get children() {
106
+ return solidJs.createComponent(solidJs.Show, {
107
+ get when() {
108
+ return ComponentType$$();
109
+ },
110
+ keyed: true,
111
+ children: (ComponentType) => solidJs.createComponent(solidJs.Show, {
112
+ get when() {
113
+ return props.field.form.control;
114
+ },
115
+ get fallback() {
116
+ return solidJs.createComponent(ComponentType, solidJs.mergeProps(fieldInputs));
117
+ },
118
+ get children() {
119
+ return solidJs.createComponent(ComponentType, solidJs.mergeProps(fieldControlInput));
120
+ }
121
+ })
122
+ });
123
+ }
124
+ });
125
+ }
126
+ });
127
+ }
128
+ });
129
+ }
130
+ function useControlValueAccessor() {
131
+ const [value, setValue] = solidJs.createSignal(void 0);
132
+ const [disabled, setDisabled] = solidJs.createSignal(false);
133
+ const [onChange, setOnChange] = solidJs.createSignal(void 0);
134
+ const [touched, setTouched] = solidJs.createSignal(
135
+ void 0
136
+ );
137
+ const cva = {
138
+ writeValue(obj) {
139
+ setValue(obj);
140
+ },
141
+ registerOnChange(fn) {
142
+ setOnChange(() => fn);
143
+ },
144
+ registerOnTouched(fn) {
145
+ setTouched(() => fn);
146
+ },
147
+ setDisabledState(value2) {
148
+ setDisabled(value2);
149
+ }
150
+ };
151
+ return {
152
+ cva,
153
+ cvaa: {
154
+ value,
155
+ disabled,
156
+ valueChange: (value2) => {
157
+ onChange()?.(value2);
158
+ setValue(value2);
159
+ },
160
+ touchedChange: () => {
161
+ touched()?.();
162
+ }
163
+ }
164
+ };
165
+ }
166
+ function useEffectSync(fn) {
167
+ let dispose = void 0;
168
+ solidJs.createMemo(() => {
169
+ dispose = fn();
170
+ });
171
+ solidJs.createEffect(() => {
172
+ solidJs.onCleanup(() => {
173
+ dispose?.();
174
+ dispose = void 0;
175
+ });
176
+ });
177
+ }
178
+ function PiyingGroup() {
179
+ const field = solidJs.useContext(PI_VIEW_FIELD_TOKEN);
180
+ const children = useSignalToRef(() => field?.children());
181
+ return solidJs.createComponent(solidJs.For, {
182
+ get each() {
183
+ return children();
184
+ },
185
+ children: (field2) => {
186
+ return solidJs.createComponent(PiyingFieldTemplate, {
187
+ field: field2
188
+ });
189
+ }
190
+ });
191
+ }
192
+ class SolidSchemaHandle extends viewCore.CoreSchemaHandle {
193
+ }
194
+ class SolidFormBuilder extends viewCore.FormBuilder {
195
+ }
196
+ function PiyingView(props) {
197
+ const rootInjector = staticInjector.createRootInjector({
198
+ providers: [{
199
+ provide: staticInjector.ChangeDetectionScheduler,
200
+ useClass: staticInjector.ChangeDetectionSchedulerImpl
201
+ }]
202
+ });
203
+ const initResult = solidJs.createMemo(() => {
204
+ const subInjector = staticInjector.createInjector({
205
+ providers: [],
206
+ parent: rootInjector
207
+ });
208
+ const field2 = viewCore.convert(props.schema, {
209
+ handle: SolidSchemaHandle,
210
+ builder: SolidFormBuilder,
211
+ injector: subInjector,
212
+ registerOnDestroy: (fn) => {
213
+ subInjector.get(staticInjector.DestroyRef).onDestroy(fn);
214
+ },
215
+ ...props.options
216
+ });
217
+ return [field2, subInjector];
218
+ });
219
+ const field = solidJs.createMemo(() => {
220
+ return initResult()[0];
221
+ });
222
+ useEffectSync(() => {
223
+ let ref;
224
+ const [field2, subInjector] = initResult();
225
+ if (field2.form.control) {
226
+ const model = solidJs.untrack(() => props.model);
227
+ ref = viewCore.initListen(typeof model !== "undefined" ? model : void 0, field2.form.control, subInjector, (value) => {
228
+ staticInjector.untracked(() => {
229
+ if (field2.form.control?.valueNoError$$()) {
230
+ props.modelChange?.(value);
231
+ }
232
+ });
233
+ });
234
+ }
235
+ return () => {
236
+ subInjector.destroy();
237
+ ref?.destroy();
238
+ };
239
+ });
240
+ solidJs.createMemo(() => {
241
+ field().form.control?.updateValue(props.model);
242
+ });
243
+ return solidJs.createComponent(InjectorToken.Provider, {
244
+ value: rootInjector,
245
+ get children() {
246
+ return solidJs.createComponent(PiyingFieldTemplate, {
247
+ get field() {
248
+ return field();
249
+ }
250
+ });
251
+ }
252
+ });
253
+ }
254
+ function useInputTextModel(cvaa, compositionMode) {
255
+ const [composing, setComposing] = solidJs.createSignal(false);
256
+ return solidJs.createMemo(() => {
257
+ const obj = {
258
+ value: cvaa.value() == null ? "" : cvaa.value(),
259
+ disabled: cvaa.disabled(),
260
+ onBlur: cvaa.touchedChange,
261
+ onInput: (event) => {
262
+ if (!compositionMode() || compositionMode() && !composing()) {
263
+ cvaa.valueChange(event.target.value);
264
+ }
265
+ }
266
+ };
267
+ if (compositionMode()) {
268
+ return {
269
+ ...obj,
270
+ onCompositionStart: () => {
271
+ setComposing(true);
272
+ },
273
+ onCompositionEnd: (event) => {
274
+ setComposing(false);
275
+ cvaa.valueChange(event.target.value);
276
+ }
277
+ };
278
+ }
279
+ return obj;
280
+ });
281
+ }
282
+ function useInputCheckboxModel(cvaa) {
283
+ return solidJs.createMemo(() => ({
284
+ checked: cvaa.value() ?? false,
285
+ disabled: cvaa.disabled(),
286
+ onBlur: cvaa.touchedChange,
287
+ onChange: (event) => cvaa.valueChange(event.target.checked)
288
+ }));
289
+ }
290
+ function useInputNumberModel(cvaa) {
291
+ return solidJs.createMemo(() => {
292
+ return {
293
+ value: cvaa.value() == null ? "" : cvaa.value(),
294
+ disabled: cvaa.disabled(),
295
+ onBlur: cvaa.touchedChange,
296
+ onInput: (event) => {
297
+ const value = event.target.value;
298
+ cvaa.valueChange(value == "" ? void 0 : parseFloat(value));
299
+ }
300
+ };
301
+ });
302
+ }
303
+ function useInputRadioModel(cvaa, value) {
304
+ return solidJs.createMemo(() => {
305
+ return {
306
+ value,
307
+ checked: Object.is(cvaa.value(), value),
308
+ disabled: cvaa.disabled(),
309
+ onBlur: cvaa.touchedChange,
310
+ onChange: () => cvaa.valueChange(value)
311
+ };
312
+ });
313
+ }
314
+ function useInputRangeModel(cvaa) {
315
+ return solidJs.createMemo(() => {
316
+ const onInput = (event) => {
317
+ const value = event.target.value;
318
+ cvaa.valueChange(value == "" ? void 0 : parseFloat(value));
319
+ };
320
+ return {
321
+ value: cvaa.value() == null ? "" : cvaa.value(),
322
+ disabled: cvaa.disabled(),
323
+ onBlur: cvaa.touchedChange,
324
+ onInput,
325
+ onChange: onInput
326
+ };
327
+ });
328
+ }
329
+ function useSelectModel(cvaa, multiple = false) {
330
+ return solidJs.createMemo(() => {
331
+ return {
332
+ value: cvaa.value(),
333
+ disabled: cvaa.disabled(),
334
+ onBlur: cvaa.touchedChange,
335
+ onChange: (event) => {
336
+ const selected = [];
337
+ const el = event.target;
338
+ if (el.selectedOptions !== void 0) {
339
+ for (let index = 0; index < el.selectedOptions.length; index++) {
340
+ const item = el.selectedOptions[index];
341
+ selected.push(item.value);
342
+ if (!multiple) {
343
+ break;
344
+ }
345
+ }
346
+ } else {
347
+ for (let index = 0; index < el.options.length; index++) {
348
+ const option = el.options[index];
349
+ if (option.selected) {
350
+ selected.push(option.value);
351
+ if (!multiple) {
352
+ break;
353
+ }
354
+ }
355
+ }
356
+ }
357
+ cvaa.valueChange(multiple ? selected : selected[0]);
358
+ }
359
+ };
360
+ });
361
+ }
362
+ exports.CVA = CVA;
363
+ exports.InjectorToken = InjectorToken;
364
+ exports.PI_VIEW_FIELD_TOKEN = PI_VIEW_FIELD_TOKEN;
365
+ exports.PiyingFieldTemplate = PiyingFieldTemplate;
366
+ exports.PiyingGroup = PiyingGroup;
367
+ exports.PiyingView = PiyingView;
368
+ exports.PiyingWrapper = PiyingWrapper;
369
+ exports.SolidFormBuilder = SolidFormBuilder;
370
+ exports.SolidSchemaHandle = SolidSchemaHandle;
371
+ exports.useControlValueAccessor = useControlValueAccessor;
372
+ exports.useEffectSync = useEffectSync;
373
+ exports.useInputCheckboxModel = useInputCheckboxModel;
374
+ exports.useInputNumberModel = useInputNumberModel;
375
+ exports.useInputRadioModel = useInputRadioModel;
376
+ exports.useInputRangeModel = useInputRangeModel;
377
+ exports.useInputTextModel = useInputTextModel;
378
+ exports.useSelectModel = useSelectModel;
379
+ exports.useSignalToRef = useSignalToRef;
380
+ //# sourceMappingURL=index.cjs.map
package/index.cjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../packages/solid/src/token.ts","../../packages/solid/src/util/signal-convert.ts","../../packages/solid/src/component/wrapper.tsx","../../packages/solid/src/component/field-template.tsx","../../packages/solid/src/util/use-control-value-accessor.ts","../../packages/solid/src/util/use-effect-sync.ts","../../packages/solid/src/component/group.tsx","../../packages/solid/src/schema-handle.ts","../../packages/solid/src/builder.ts","../../packages/solid/src/component/view.tsx","../../packages/solid/src/use-model/use-text-model.ts","../../packages/solid/src/use-model/use-checkbox-model.ts","../../packages/solid/src/use-model/use-number-model.ts","../../packages/solid/src/use-model/use-radio-model.ts","../../packages/solid/src/use-model/use-range-model.ts","../../packages/solid/src/use-model/use-select-model.ts"],"sourcesContent":["import type { Injector } from 'static-injector';\nimport type { PiResolvedViewFieldConfig } from './type/group';\nimport { createContext } from 'solid-js';\n\nexport const PI_VIEW_FIELD_TOKEN = createContext<\n PiResolvedViewFieldConfig | undefined\n>(undefined);\nexport const InjectorToken = createContext<Injector | undefined>(undefined);\n\nexport const CVA = Symbol.for('ControlValueAccessor');\n","import { effect } from 'static-injector';\n\nimport { InjectorToken } from '../token';\nimport { useContext, createEffect, createSignal, onCleanup } from 'solid-js';\n\n// signal=>ref\n// todo 重命名\nexport function useSignalToRef<T>(value: () => T) {\n const injector = useContext(InjectorToken)!;\n const [result, setResult] = createSignal(value());\n createEffect(() => {\n setResult(() => value());\n const ref = effect(\n () => {\n const currentValue = value();\n if (!Object.is(result(), currentValue)) {\n setResult(() => currentValue!);\n }\n },\n { injector: injector },\n );\n onCleanup(() => {\n ref.destroy();\n });\n });\n return result;\n}\n","import type { CoreResolvedWrapperConfig } from '@piying/view-core';\nimport { useSignalToRef } from '../util/signal-convert';\nimport { createMemo, Show } from 'solid-js';\n\nexport interface PiyingWrapperProps {\n wrappers: CoreResolvedWrapperConfig[];\n children: any;\n}\n\nexport function PiyingWrapper(props: PiyingWrapperProps) {\n const wrapper = createMemo(() => props.wrappers[0]);\n const restWrappers = createMemo(() => props.wrappers?.slice(1));\n const inputs = useSignalToRef(() => ({\n ...wrapper()?.inputs(),\n ...wrapper()?.attributes(),\n ...wrapper()?.outputs,\n }));\n return (\n <Show\n when={createMemo(() => wrapper()?.type)()}\n fallback={props.children}\n keyed\n >\n {(WrapperType) => {\n return (\n <WrapperType {...inputs()}>\n <PiyingWrapper wrappers={restWrappers()}>\n {props.children}\n </PiyingWrapper>\n </WrapperType>\n );\n }}\n </Show>\n );\n}\n","import {\n createEffect,\n createMemo,\n createSignal,\n Show,\n useContext,\n} from 'solid-js';\nimport type { PiResolvedViewFieldConfig } from '../type';\nimport { CVA, InjectorToken, PI_VIEW_FIELD_TOKEN } from '../token';\nimport { useSignalToRef } from '../util/signal-convert';\nimport { PiyingWrapper } from './wrapper';\nimport {\n createViewControlLink,\n type ControlValueAccessor,\n} from '@piying/view-core';\nexport interface PiyingFieldTemplateProps {\n field: PiResolvedViewFieldConfig;\n}\n\nexport function PiyingFieldTemplate(props: PiyingFieldTemplateProps) {\n const fieldInputs = useSignalToRef(() => ({\n ...props.field.attributes(),\n ...props.field.inputs(),\n ...props.field.outputs(),\n }));\n const renderConfig = useSignalToRef(() => props.field.renderConfig());\n const wrappers = useSignalToRef(() => props.field.wrappers());\n const control = createMemo(() => props.field.form.control);\n const ComponentType$$ = createMemo(() => props.field.define?.type);\n const isHidden = createMemo(() => {\n return !!renderConfig().hidden || !ComponentType$$();\n });\n const injector = useContext(InjectorToken)!;\n\n const [controlRef, setControlRef] = createSignal<\n ControlValueAccessor | undefined\n >(undefined);\n const fieldControlInput = createMemo(\n () =>\n ({\n ...fieldInputs(),\n [CVA]: setControlRef,\n }) as Record<any, any>,\n );\n\n createEffect(() => {\n let dispose: (() => any) | undefined;\n if (controlRef()) {\n dispose = createViewControlLink(control as any, controlRef()!, injector);\n }\n return () => {\n dispose?.();\n dispose = undefined;\n };\n });\n\n return (\n <>\n <PI_VIEW_FIELD_TOKEN.Provider value={props.field}>\n <Show when={!isHidden()}>\n <PiyingWrapper wrappers={wrappers()}>\n <Show when={ComponentType$$()} keyed>\n {(ComponentType) => (\n <Show\n when={props.field.form.control}\n fallback={<ComponentType {...fieldInputs()}></ComponentType>}\n >\n <ComponentType {...fieldControlInput()}></ComponentType>\n </Show>\n )}\n </Show>\n </PiyingWrapper>\n </Show>\n </PI_VIEW_FIELD_TOKEN.Provider>\n </>\n );\n}\n","import type { ControlValueAccessor } from '@piying/view-core';\nimport { createSignal, type Accessor } from 'solid-js';\n\nexport function useControlValueAccessor() {\n const [value, setValue] = createSignal<any>(undefined);\n const [disabled, setDisabled] = createSignal(false);\n const [onChange, setOnChange] = createSignal<\n ((input: any) => void) | undefined\n >(undefined);\n const [touched, setTouched] = createSignal<(() => void) | undefined>(\n undefined,\n );\n const cva: ControlValueAccessor = {\n writeValue(obj) {\n setValue(obj);\n },\n registerOnChange(fn) {\n setOnChange(() => fn);\n },\n registerOnTouched(fn) {\n setTouched(() => fn);\n },\n setDisabledState(value) {\n setDisabled(value);\n },\n };\n\n return {\n cva: cva,\n cvaa: {\n value: value,\n disabled: disabled,\n valueChange: (value: any) => {\n onChange()?.(value);\n setValue(value);\n },\n touchedChange: () => {\n touched()?.();\n },\n } as ControlValueAccessorAdapter,\n };\n}\n\nexport type ControlValueAccessorAdapter = {\n value: Accessor<any>;\n disabled: Accessor<boolean>;\n touchedChange: () => void;\n valueChange: (value: any) => void;\n};\n","import { createEffect, createMemo, onCleanup } from 'solid-js';\n\nexport function useEffectSync(fn: () => (() => void) | void) {\n let dispose: any = undefined;\n\n createMemo(() => {\n dispose = fn();\n });\n createEffect(() => {\n onCleanup(() => {\n dispose?.();\n dispose = undefined;\n });\n });\n}\n","import { For, useContext } from 'solid-js';\nimport { PiyingFieldTemplate } from './field-template';\nimport { PI_VIEW_FIELD_TOKEN } from '../token';\nimport { useSignalToRef } from '../util';\n\nexport function PiyingGroup() {\n const field = useContext(PI_VIEW_FIELD_TOKEN);\n const children = useSignalToRef(() => field?.children!())!;\n return (\n <For each={children()}>\n {(field) => {\n return <PiyingFieldTemplate field={field}></PiyingFieldTemplate>;\n }}\n </For>\n );\n}\n","import { CoreSchemaHandle } from '@piying/view-core';\nimport type { PiResolvedViewFieldConfig } from './type/group';\n\nexport class SolidSchemaHandle extends CoreSchemaHandle<\n SolidSchemaHandle,\n () => PiResolvedViewFieldConfig\n> {\n declare type?: any;\n}\n","import { FormBuilder } from '@piying/view-core';\nimport type { SolidSchemaHandle } from './schema-handle';\n\nexport class SolidFormBuilder extends FormBuilder<SolidSchemaHandle> {}\n","import {\n ChangeDetectionScheduler,\n ChangeDetectionSchedulerImpl,\n createInjector,\n createRootInjector,\n DestroyRef,\n Injector,\n untracked,\n type EffectRef,\n} from 'static-injector';\nimport * as v from 'valibot';\nimport { InjectorToken } from '../token';\nimport { PiyingFieldTemplate } from './field-template';\nimport { convert, initListen } from '@piying/view-core';\nimport { SolidSchemaHandle } from '../schema-handle';\nimport { SolidFormBuilder } from '../builder';\nimport { createMemo, untrack } from 'solid-js';\nimport { useEffectSync } from '../util';\nexport interface PiyingViewProps {\n schema: v.BaseSchema<any, any, any> | v.SchemaWithPipe<any>;\n model?: any;\n modelChange?: (value: any) => void;\n options: any;\n}\nexport function PiyingView(props: PiyingViewProps) {\n const rootInjector = createRootInjector({\n providers: [\n {\n provide: ChangeDetectionScheduler,\n useClass: ChangeDetectionSchedulerImpl,\n },\n ],\n });\n const initResult = createMemo(() => {\n const subInjector = createInjector({ providers: [], parent: rootInjector });\n const field = convert(props.schema as any, {\n handle: SolidSchemaHandle as any,\n builder: SolidFormBuilder,\n injector: subInjector,\n registerOnDestroy: (fn) => {\n subInjector!.get(DestroyRef).onDestroy(fn);\n },\n ...props.options,\n });\n return [field, subInjector] as const;\n });\n const field = createMemo(() => {\n return initResult()[0];\n });\n useEffectSync(() => {\n let ref: EffectRef | undefined;\n const [field, subInjector] = initResult();\n if (field.form.control) {\n const model = untrack(() => props.model);\n ref = initListen(\n typeof model !== 'undefined' ? model : undefined,\n field!.form.control!,\n subInjector as Injector,\n (value) => {\n untracked(() => {\n if (field!.form.control?.valueNoError$$()) {\n props.modelChange?.(value);\n }\n });\n },\n );\n }\n return () => {\n subInjector.destroy();\n ref?.destroy();\n };\n });\n createMemo(() => {\n field()!.form.control?.updateValue(props.model);\n });\n return (\n <>\n <InjectorToken.Provider value={rootInjector}>\n <PiyingFieldTemplate field={field()}></PiyingFieldTemplate>\n </InjectorToken.Provider>\n </>\n );\n}\n","import { createMemo, createSignal } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputTextModel(\n cvaa: ControlValueAccessorAdapter,\n compositionMode: () => boolean,\n) {\n const [composing, setComposing] = createSignal(false);\n return createMemo(() => {\n const obj = {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: (event: any) => {\n if (!compositionMode() || (compositionMode() && !composing())) {\n cvaa.valueChange((event.target as any).value);\n }\n },\n };\n if (compositionMode()) {\n return {\n ...obj,\n onCompositionStart: () => {\n setComposing(true);\n },\n onCompositionEnd: (event: any) => {\n setComposing(false);\n cvaa.valueChange((event.target as any).value);\n },\n };\n }\n return obj;\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputCheckboxModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => ({\n checked: cvaa.value() ?? false,\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: (\n event: Event & {\n target: HTMLInputElement;\n },\n ) => cvaa.valueChange(event.target.checked),\n }));\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputNumberModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => {\n return {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: (event: any) => {\n const value = (event.target as any).value;\n cvaa.valueChange(value == '' ? undefined : parseFloat(value));\n },\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputRadioModel(\n cvaa: ControlValueAccessorAdapter,\n value: any,\n) {\n return createMemo(() => {\n return {\n value,\n checked: Object.is(cvaa.value(), value),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: () => cvaa.valueChange(value),\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputRangeModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => {\n const onInput = (event: any) => {\n const value = (event.target as any).value;\n cvaa.valueChange(value == '' ? undefined : parseFloat(value));\n };\n return {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: onInput,\n onChange: onInput,\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useSelectModel(\n cvaa: ControlValueAccessorAdapter,\n multiple: boolean = false,\n) {\n return createMemo(() => {\n return {\n value: cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: (\n event: Event & {\n target: HTMLSelectElement;\n },\n ) => {\n const selected = [];\n const el = event.target;\n if (el.selectedOptions !== undefined) {\n for (let index = 0; index < el.selectedOptions.length; index++) {\n const item = el.selectedOptions[index];\n selected.push(item.value);\n if (!multiple) {\n break;\n }\n }\n } else {\n for (let index = 0; index < el.options.length; index++) {\n const option = el.options[index];\n if (option.selected) {\n selected.push(option.value);\n if (!multiple) {\n break;\n }\n }\n }\n }\n cvaa.valueChange(multiple ? selected : selected[0]);\n },\n };\n });\n}\n"],"names":["createContext","useContext","createSignal","createEffect","effect","onCleanup","PiyingWrapper","props","wrapper","createMemo","wrappers","restWrappers","slice","inputs","useSignalToRef","attributes","outputs","_$createComponent","Show","when","type","fallback","children","keyed","WrapperType","_$mergeProps","PiyingFieldTemplate","fieldInputs","field","renderConfig","control","form","ComponentType$$","define","isHidden","hidden","injector","InjectorToken","controlRef","setControlRef","undefined","fieldControlInput","CVA","dispose","createViewControlLink","PI_VIEW_FIELD_TOKEN","Provider","value","ComponentType","PiyingGroup","For","each","CoreSchemaHandle","FormBuilder","PiyingView","rootInjector","createRootInjector","providers","provide","ChangeDetectionScheduler","useClass","ChangeDetectionSchedulerImpl","initResult","subInjector","createInjector","parent","convert","schema","handle","SolidSchemaHandle","builder","SolidFormBuilder","registerOnDestroy","fn","get","DestroyRef","onDestroy","options","useEffectSync","ref","model","untrack","initListen","untracked","valueNoError$$","modelChange","destroy","updateValue"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from './type';
2
+ export * from './component';
3
+ export * from './builder';
4
+ export * from './schema-handle';
5
+ export * from './token';
6
+ export * from './use-model';
7
+ export * from './util';
package/index.js ADDED
@@ -0,0 +1,380 @@
1
+ import { createContext, useContext, createSignal, createEffect, onCleanup, createMemo, createComponent, Show, mergeProps, For, untrack } from "solid-js";
2
+ import { effect, createRootInjector, ChangeDetectionSchedulerImpl, ChangeDetectionScheduler, createInjector, DestroyRef, untracked } from "static-injector";
3
+ import { createViewControlLink, CoreSchemaHandle, FormBuilder, convert, initListen } from "@piying/view-core";
4
+ import "valibot";
5
+ const PI_VIEW_FIELD_TOKEN = createContext(void 0);
6
+ const InjectorToken = createContext(void 0);
7
+ const CVA = Symbol.for("ControlValueAccessor");
8
+ function useSignalToRef(value) {
9
+ const injector = useContext(InjectorToken);
10
+ const [result, setResult] = createSignal(value());
11
+ createEffect(() => {
12
+ setResult(() => value());
13
+ const ref = effect(
14
+ () => {
15
+ const currentValue = value();
16
+ if (!Object.is(result(), currentValue)) {
17
+ setResult(() => currentValue);
18
+ }
19
+ },
20
+ { injector }
21
+ );
22
+ onCleanup(() => {
23
+ ref.destroy();
24
+ });
25
+ });
26
+ return result;
27
+ }
28
+ function PiyingWrapper(props) {
29
+ const wrapper = createMemo(() => props.wrappers[0]);
30
+ const restWrappers = createMemo(() => props.wrappers?.slice(1));
31
+ const inputs = useSignalToRef(() => ({
32
+ ...wrapper()?.inputs(),
33
+ ...wrapper()?.attributes(),
34
+ ...wrapper()?.outputs
35
+ }));
36
+ return createComponent(Show, {
37
+ get when() {
38
+ return createMemo(() => wrapper()?.type)();
39
+ },
40
+ get fallback() {
41
+ return props.children;
42
+ },
43
+ keyed: true,
44
+ children: (WrapperType) => {
45
+ return createComponent(WrapperType, mergeProps(inputs, {
46
+ get children() {
47
+ return createComponent(PiyingWrapper, {
48
+ get wrappers() {
49
+ return restWrappers();
50
+ },
51
+ get children() {
52
+ return props.children;
53
+ }
54
+ });
55
+ }
56
+ }));
57
+ }
58
+ });
59
+ }
60
+ function PiyingFieldTemplate(props) {
61
+ const fieldInputs = useSignalToRef(() => ({
62
+ ...props.field.attributes(),
63
+ ...props.field.inputs(),
64
+ ...props.field.outputs()
65
+ }));
66
+ const renderConfig = useSignalToRef(() => props.field.renderConfig());
67
+ const wrappers = useSignalToRef(() => props.field.wrappers());
68
+ const control = createMemo(() => props.field.form.control);
69
+ const ComponentType$$ = createMemo(() => props.field.define?.type);
70
+ const isHidden = createMemo(() => {
71
+ return !!renderConfig().hidden || !ComponentType$$();
72
+ });
73
+ const injector = useContext(InjectorToken);
74
+ const [controlRef, setControlRef] = createSignal(void 0);
75
+ const fieldControlInput = createMemo(() => ({
76
+ ...fieldInputs(),
77
+ [CVA]: setControlRef
78
+ }));
79
+ createEffect(() => {
80
+ let dispose;
81
+ if (controlRef()) {
82
+ dispose = createViewControlLink(control, controlRef(), injector);
83
+ }
84
+ return () => {
85
+ dispose?.();
86
+ dispose = void 0;
87
+ };
88
+ });
89
+ return createComponent(PI_VIEW_FIELD_TOKEN.Provider, {
90
+ get value() {
91
+ return props.field;
92
+ },
93
+ get children() {
94
+ return createComponent(Show, {
95
+ get when() {
96
+ return !isHidden();
97
+ },
98
+ get children() {
99
+ return createComponent(PiyingWrapper, {
100
+ get wrappers() {
101
+ return wrappers();
102
+ },
103
+ get children() {
104
+ return createComponent(Show, {
105
+ get when() {
106
+ return ComponentType$$();
107
+ },
108
+ keyed: true,
109
+ children: (ComponentType) => createComponent(Show, {
110
+ get when() {
111
+ return props.field.form.control;
112
+ },
113
+ get fallback() {
114
+ return createComponent(ComponentType, mergeProps(fieldInputs));
115
+ },
116
+ get children() {
117
+ return createComponent(ComponentType, mergeProps(fieldControlInput));
118
+ }
119
+ })
120
+ });
121
+ }
122
+ });
123
+ }
124
+ });
125
+ }
126
+ });
127
+ }
128
+ function useControlValueAccessor() {
129
+ const [value, setValue] = createSignal(void 0);
130
+ const [disabled, setDisabled] = createSignal(false);
131
+ const [onChange, setOnChange] = createSignal(void 0);
132
+ const [touched, setTouched] = createSignal(
133
+ void 0
134
+ );
135
+ const cva = {
136
+ writeValue(obj) {
137
+ setValue(obj);
138
+ },
139
+ registerOnChange(fn) {
140
+ setOnChange(() => fn);
141
+ },
142
+ registerOnTouched(fn) {
143
+ setTouched(() => fn);
144
+ },
145
+ setDisabledState(value2) {
146
+ setDisabled(value2);
147
+ }
148
+ };
149
+ return {
150
+ cva,
151
+ cvaa: {
152
+ value,
153
+ disabled,
154
+ valueChange: (value2) => {
155
+ onChange()?.(value2);
156
+ setValue(value2);
157
+ },
158
+ touchedChange: () => {
159
+ touched()?.();
160
+ }
161
+ }
162
+ };
163
+ }
164
+ function useEffectSync(fn) {
165
+ let dispose = void 0;
166
+ createMemo(() => {
167
+ dispose = fn();
168
+ });
169
+ createEffect(() => {
170
+ onCleanup(() => {
171
+ dispose?.();
172
+ dispose = void 0;
173
+ });
174
+ });
175
+ }
176
+ function PiyingGroup() {
177
+ const field = useContext(PI_VIEW_FIELD_TOKEN);
178
+ const children = useSignalToRef(() => field?.children());
179
+ return createComponent(For, {
180
+ get each() {
181
+ return children();
182
+ },
183
+ children: (field2) => {
184
+ return createComponent(PiyingFieldTemplate, {
185
+ field: field2
186
+ });
187
+ }
188
+ });
189
+ }
190
+ class SolidSchemaHandle extends CoreSchemaHandle {
191
+ }
192
+ class SolidFormBuilder extends FormBuilder {
193
+ }
194
+ function PiyingView(props) {
195
+ const rootInjector = createRootInjector({
196
+ providers: [{
197
+ provide: ChangeDetectionScheduler,
198
+ useClass: ChangeDetectionSchedulerImpl
199
+ }]
200
+ });
201
+ const initResult = createMemo(() => {
202
+ const subInjector = createInjector({
203
+ providers: [],
204
+ parent: rootInjector
205
+ });
206
+ const field2 = convert(props.schema, {
207
+ handle: SolidSchemaHandle,
208
+ builder: SolidFormBuilder,
209
+ injector: subInjector,
210
+ registerOnDestroy: (fn) => {
211
+ subInjector.get(DestroyRef).onDestroy(fn);
212
+ },
213
+ ...props.options
214
+ });
215
+ return [field2, subInjector];
216
+ });
217
+ const field = createMemo(() => {
218
+ return initResult()[0];
219
+ });
220
+ useEffectSync(() => {
221
+ let ref;
222
+ const [field2, subInjector] = initResult();
223
+ if (field2.form.control) {
224
+ const model = untrack(() => props.model);
225
+ ref = initListen(typeof model !== "undefined" ? model : void 0, field2.form.control, subInjector, (value) => {
226
+ untracked(() => {
227
+ if (field2.form.control?.valueNoError$$()) {
228
+ props.modelChange?.(value);
229
+ }
230
+ });
231
+ });
232
+ }
233
+ return () => {
234
+ subInjector.destroy();
235
+ ref?.destroy();
236
+ };
237
+ });
238
+ createMemo(() => {
239
+ field().form.control?.updateValue(props.model);
240
+ });
241
+ return createComponent(InjectorToken.Provider, {
242
+ value: rootInjector,
243
+ get children() {
244
+ return createComponent(PiyingFieldTemplate, {
245
+ get field() {
246
+ return field();
247
+ }
248
+ });
249
+ }
250
+ });
251
+ }
252
+ function useInputTextModel(cvaa, compositionMode) {
253
+ const [composing, setComposing] = createSignal(false);
254
+ return createMemo(() => {
255
+ const obj = {
256
+ value: cvaa.value() == null ? "" : cvaa.value(),
257
+ disabled: cvaa.disabled(),
258
+ onBlur: cvaa.touchedChange,
259
+ onInput: (event) => {
260
+ if (!compositionMode() || compositionMode() && !composing()) {
261
+ cvaa.valueChange(event.target.value);
262
+ }
263
+ }
264
+ };
265
+ if (compositionMode()) {
266
+ return {
267
+ ...obj,
268
+ onCompositionStart: () => {
269
+ setComposing(true);
270
+ },
271
+ onCompositionEnd: (event) => {
272
+ setComposing(false);
273
+ cvaa.valueChange(event.target.value);
274
+ }
275
+ };
276
+ }
277
+ return obj;
278
+ });
279
+ }
280
+ function useInputCheckboxModel(cvaa) {
281
+ return createMemo(() => ({
282
+ checked: cvaa.value() ?? false,
283
+ disabled: cvaa.disabled(),
284
+ onBlur: cvaa.touchedChange,
285
+ onChange: (event) => cvaa.valueChange(event.target.checked)
286
+ }));
287
+ }
288
+ function useInputNumberModel(cvaa) {
289
+ return createMemo(() => {
290
+ return {
291
+ value: cvaa.value() == null ? "" : cvaa.value(),
292
+ disabled: cvaa.disabled(),
293
+ onBlur: cvaa.touchedChange,
294
+ onInput: (event) => {
295
+ const value = event.target.value;
296
+ cvaa.valueChange(value == "" ? void 0 : parseFloat(value));
297
+ }
298
+ };
299
+ });
300
+ }
301
+ function useInputRadioModel(cvaa, value) {
302
+ return createMemo(() => {
303
+ return {
304
+ value,
305
+ checked: Object.is(cvaa.value(), value),
306
+ disabled: cvaa.disabled(),
307
+ onBlur: cvaa.touchedChange,
308
+ onChange: () => cvaa.valueChange(value)
309
+ };
310
+ });
311
+ }
312
+ function useInputRangeModel(cvaa) {
313
+ return createMemo(() => {
314
+ const onInput = (event) => {
315
+ const value = event.target.value;
316
+ cvaa.valueChange(value == "" ? void 0 : parseFloat(value));
317
+ };
318
+ return {
319
+ value: cvaa.value() == null ? "" : cvaa.value(),
320
+ disabled: cvaa.disabled(),
321
+ onBlur: cvaa.touchedChange,
322
+ onInput,
323
+ onChange: onInput
324
+ };
325
+ });
326
+ }
327
+ function useSelectModel(cvaa, multiple = false) {
328
+ return createMemo(() => {
329
+ return {
330
+ value: cvaa.value(),
331
+ disabled: cvaa.disabled(),
332
+ onBlur: cvaa.touchedChange,
333
+ onChange: (event) => {
334
+ const selected = [];
335
+ const el = event.target;
336
+ if (el.selectedOptions !== void 0) {
337
+ for (let index = 0; index < el.selectedOptions.length; index++) {
338
+ const item = el.selectedOptions[index];
339
+ selected.push(item.value);
340
+ if (!multiple) {
341
+ break;
342
+ }
343
+ }
344
+ } else {
345
+ for (let index = 0; index < el.options.length; index++) {
346
+ const option = el.options[index];
347
+ if (option.selected) {
348
+ selected.push(option.value);
349
+ if (!multiple) {
350
+ break;
351
+ }
352
+ }
353
+ }
354
+ }
355
+ cvaa.valueChange(multiple ? selected : selected[0]);
356
+ }
357
+ };
358
+ });
359
+ }
360
+ export {
361
+ CVA,
362
+ InjectorToken,
363
+ PI_VIEW_FIELD_TOKEN,
364
+ PiyingFieldTemplate,
365
+ PiyingGroup,
366
+ PiyingView,
367
+ PiyingWrapper,
368
+ SolidFormBuilder,
369
+ SolidSchemaHandle,
370
+ useControlValueAccessor,
371
+ useEffectSync,
372
+ useInputCheckboxModel,
373
+ useInputNumberModel,
374
+ useInputRadioModel,
375
+ useInputRangeModel,
376
+ useInputTextModel,
377
+ useSelectModel,
378
+ useSignalToRef
379
+ };
380
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../packages/solid/src/token.ts","../../packages/solid/src/util/signal-convert.ts","../../packages/solid/src/component/wrapper.tsx","../../packages/solid/src/component/field-template.tsx","../../packages/solid/src/util/use-control-value-accessor.ts","../../packages/solid/src/util/use-effect-sync.ts","../../packages/solid/src/component/group.tsx","../../packages/solid/src/schema-handle.ts","../../packages/solid/src/builder.ts","../../packages/solid/src/component/view.tsx","../../packages/solid/src/use-model/use-text-model.ts","../../packages/solid/src/use-model/use-checkbox-model.ts","../../packages/solid/src/use-model/use-number-model.ts","../../packages/solid/src/use-model/use-radio-model.ts","../../packages/solid/src/use-model/use-range-model.ts","../../packages/solid/src/use-model/use-select-model.ts"],"sourcesContent":["import type { Injector } from 'static-injector';\nimport type { PiResolvedViewFieldConfig } from './type/group';\nimport { createContext } from 'solid-js';\n\nexport const PI_VIEW_FIELD_TOKEN = createContext<\n PiResolvedViewFieldConfig | undefined\n>(undefined);\nexport const InjectorToken = createContext<Injector | undefined>(undefined);\n\nexport const CVA = Symbol.for('ControlValueAccessor');\n","import { effect } from 'static-injector';\n\nimport { InjectorToken } from '../token';\nimport { useContext, createEffect, createSignal, onCleanup } from 'solid-js';\n\n// signal=>ref\n// todo 重命名\nexport function useSignalToRef<T>(value: () => T) {\n const injector = useContext(InjectorToken)!;\n const [result, setResult] = createSignal(value());\n createEffect(() => {\n setResult(() => value());\n const ref = effect(\n () => {\n const currentValue = value();\n if (!Object.is(result(), currentValue)) {\n setResult(() => currentValue!);\n }\n },\n { injector: injector },\n );\n onCleanup(() => {\n ref.destroy();\n });\n });\n return result;\n}\n","import type { CoreResolvedWrapperConfig } from '@piying/view-core';\nimport { useSignalToRef } from '../util/signal-convert';\nimport { createMemo, Show } from 'solid-js';\n\nexport interface PiyingWrapperProps {\n wrappers: CoreResolvedWrapperConfig[];\n children: any;\n}\n\nexport function PiyingWrapper(props: PiyingWrapperProps) {\n const wrapper = createMemo(() => props.wrappers[0]);\n const restWrappers = createMemo(() => props.wrappers?.slice(1));\n const inputs = useSignalToRef(() => ({\n ...wrapper()?.inputs(),\n ...wrapper()?.attributes(),\n ...wrapper()?.outputs,\n }));\n return (\n <Show\n when={createMemo(() => wrapper()?.type)()}\n fallback={props.children}\n keyed\n >\n {(WrapperType) => {\n return (\n <WrapperType {...inputs()}>\n <PiyingWrapper wrappers={restWrappers()}>\n {props.children}\n </PiyingWrapper>\n </WrapperType>\n );\n }}\n </Show>\n );\n}\n","import {\n createEffect,\n createMemo,\n createSignal,\n Show,\n useContext,\n} from 'solid-js';\nimport type { PiResolvedViewFieldConfig } from '../type';\nimport { CVA, InjectorToken, PI_VIEW_FIELD_TOKEN } from '../token';\nimport { useSignalToRef } from '../util/signal-convert';\nimport { PiyingWrapper } from './wrapper';\nimport {\n createViewControlLink,\n type ControlValueAccessor,\n} from '@piying/view-core';\nexport interface PiyingFieldTemplateProps {\n field: PiResolvedViewFieldConfig;\n}\n\nexport function PiyingFieldTemplate(props: PiyingFieldTemplateProps) {\n const fieldInputs = useSignalToRef(() => ({\n ...props.field.attributes(),\n ...props.field.inputs(),\n ...props.field.outputs(),\n }));\n const renderConfig = useSignalToRef(() => props.field.renderConfig());\n const wrappers = useSignalToRef(() => props.field.wrappers());\n const control = createMemo(() => props.field.form.control);\n const ComponentType$$ = createMemo(() => props.field.define?.type);\n const isHidden = createMemo(() => {\n return !!renderConfig().hidden || !ComponentType$$();\n });\n const injector = useContext(InjectorToken)!;\n\n const [controlRef, setControlRef] = createSignal<\n ControlValueAccessor | undefined\n >(undefined);\n const fieldControlInput = createMemo(\n () =>\n ({\n ...fieldInputs(),\n [CVA]: setControlRef,\n }) as Record<any, any>,\n );\n\n createEffect(() => {\n let dispose: (() => any) | undefined;\n if (controlRef()) {\n dispose = createViewControlLink(control as any, controlRef()!, injector);\n }\n return () => {\n dispose?.();\n dispose = undefined;\n };\n });\n\n return (\n <>\n <PI_VIEW_FIELD_TOKEN.Provider value={props.field}>\n <Show when={!isHidden()}>\n <PiyingWrapper wrappers={wrappers()}>\n <Show when={ComponentType$$()} keyed>\n {(ComponentType) => (\n <Show\n when={props.field.form.control}\n fallback={<ComponentType {...fieldInputs()}></ComponentType>}\n >\n <ComponentType {...fieldControlInput()}></ComponentType>\n </Show>\n )}\n </Show>\n </PiyingWrapper>\n </Show>\n </PI_VIEW_FIELD_TOKEN.Provider>\n </>\n );\n}\n","import type { ControlValueAccessor } from '@piying/view-core';\nimport { createSignal, type Accessor } from 'solid-js';\n\nexport function useControlValueAccessor() {\n const [value, setValue] = createSignal<any>(undefined);\n const [disabled, setDisabled] = createSignal(false);\n const [onChange, setOnChange] = createSignal<\n ((input: any) => void) | undefined\n >(undefined);\n const [touched, setTouched] = createSignal<(() => void) | undefined>(\n undefined,\n );\n const cva: ControlValueAccessor = {\n writeValue(obj) {\n setValue(obj);\n },\n registerOnChange(fn) {\n setOnChange(() => fn);\n },\n registerOnTouched(fn) {\n setTouched(() => fn);\n },\n setDisabledState(value) {\n setDisabled(value);\n },\n };\n\n return {\n cva: cva,\n cvaa: {\n value: value,\n disabled: disabled,\n valueChange: (value: any) => {\n onChange()?.(value);\n setValue(value);\n },\n touchedChange: () => {\n touched()?.();\n },\n } as ControlValueAccessorAdapter,\n };\n}\n\nexport type ControlValueAccessorAdapter = {\n value: Accessor<any>;\n disabled: Accessor<boolean>;\n touchedChange: () => void;\n valueChange: (value: any) => void;\n};\n","import { createEffect, createMemo, onCleanup } from 'solid-js';\n\nexport function useEffectSync(fn: () => (() => void) | void) {\n let dispose: any = undefined;\n\n createMemo(() => {\n dispose = fn();\n });\n createEffect(() => {\n onCleanup(() => {\n dispose?.();\n dispose = undefined;\n });\n });\n}\n","import { For, useContext } from 'solid-js';\nimport { PiyingFieldTemplate } from './field-template';\nimport { PI_VIEW_FIELD_TOKEN } from '../token';\nimport { useSignalToRef } from '../util';\n\nexport function PiyingGroup() {\n const field = useContext(PI_VIEW_FIELD_TOKEN);\n const children = useSignalToRef(() => field?.children!())!;\n return (\n <For each={children()}>\n {(field) => {\n return <PiyingFieldTemplate field={field}></PiyingFieldTemplate>;\n }}\n </For>\n );\n}\n","import { CoreSchemaHandle } from '@piying/view-core';\nimport type { PiResolvedViewFieldConfig } from './type/group';\n\nexport class SolidSchemaHandle extends CoreSchemaHandle<\n SolidSchemaHandle,\n () => PiResolvedViewFieldConfig\n> {\n declare type?: any;\n}\n","import { FormBuilder } from '@piying/view-core';\nimport type { SolidSchemaHandle } from './schema-handle';\n\nexport class SolidFormBuilder extends FormBuilder<SolidSchemaHandle> {}\n","import {\n ChangeDetectionScheduler,\n ChangeDetectionSchedulerImpl,\n createInjector,\n createRootInjector,\n DestroyRef,\n Injector,\n untracked,\n type EffectRef,\n} from 'static-injector';\nimport * as v from 'valibot';\nimport { InjectorToken } from '../token';\nimport { PiyingFieldTemplate } from './field-template';\nimport { convert, initListen } from '@piying/view-core';\nimport { SolidSchemaHandle } from '../schema-handle';\nimport { SolidFormBuilder } from '../builder';\nimport { createMemo, untrack } from 'solid-js';\nimport { useEffectSync } from '../util';\nexport interface PiyingViewProps {\n schema: v.BaseSchema<any, any, any> | v.SchemaWithPipe<any>;\n model?: any;\n modelChange?: (value: any) => void;\n options: any;\n}\nexport function PiyingView(props: PiyingViewProps) {\n const rootInjector = createRootInjector({\n providers: [\n {\n provide: ChangeDetectionScheduler,\n useClass: ChangeDetectionSchedulerImpl,\n },\n ],\n });\n const initResult = createMemo(() => {\n const subInjector = createInjector({ providers: [], parent: rootInjector });\n const field = convert(props.schema as any, {\n handle: SolidSchemaHandle as any,\n builder: SolidFormBuilder,\n injector: subInjector,\n registerOnDestroy: (fn) => {\n subInjector!.get(DestroyRef).onDestroy(fn);\n },\n ...props.options,\n });\n return [field, subInjector] as const;\n });\n const field = createMemo(() => {\n return initResult()[0];\n });\n useEffectSync(() => {\n let ref: EffectRef | undefined;\n const [field, subInjector] = initResult();\n if (field.form.control) {\n const model = untrack(() => props.model);\n ref = initListen(\n typeof model !== 'undefined' ? model : undefined,\n field!.form.control!,\n subInjector as Injector,\n (value) => {\n untracked(() => {\n if (field!.form.control?.valueNoError$$()) {\n props.modelChange?.(value);\n }\n });\n },\n );\n }\n return () => {\n subInjector.destroy();\n ref?.destroy();\n };\n });\n createMemo(() => {\n field()!.form.control?.updateValue(props.model);\n });\n return (\n <>\n <InjectorToken.Provider value={rootInjector}>\n <PiyingFieldTemplate field={field()}></PiyingFieldTemplate>\n </InjectorToken.Provider>\n </>\n );\n}\n","import { createMemo, createSignal } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputTextModel(\n cvaa: ControlValueAccessorAdapter,\n compositionMode: () => boolean,\n) {\n const [composing, setComposing] = createSignal(false);\n return createMemo(() => {\n const obj = {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: (event: any) => {\n if (!compositionMode() || (compositionMode() && !composing())) {\n cvaa.valueChange((event.target as any).value);\n }\n },\n };\n if (compositionMode()) {\n return {\n ...obj,\n onCompositionStart: () => {\n setComposing(true);\n },\n onCompositionEnd: (event: any) => {\n setComposing(false);\n cvaa.valueChange((event.target as any).value);\n },\n };\n }\n return obj;\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputCheckboxModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => ({\n checked: cvaa.value() ?? false,\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: (\n event: Event & {\n target: HTMLInputElement;\n },\n ) => cvaa.valueChange(event.target.checked),\n }));\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputNumberModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => {\n return {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: (event: any) => {\n const value = (event.target as any).value;\n cvaa.valueChange(value == '' ? undefined : parseFloat(value));\n },\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputRadioModel(\n cvaa: ControlValueAccessorAdapter,\n value: any,\n) {\n return createMemo(() => {\n return {\n value,\n checked: Object.is(cvaa.value(), value),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: () => cvaa.valueChange(value),\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useInputRangeModel(cvaa: ControlValueAccessorAdapter) {\n return createMemo(() => {\n const onInput = (event: any) => {\n const value = (event.target as any).value;\n cvaa.valueChange(value == '' ? undefined : parseFloat(value));\n };\n return {\n value: cvaa.value() == null ? '' : cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onInput: onInput,\n onChange: onInput,\n };\n });\n}\n","import { createMemo } from 'solid-js';\nimport type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';\n\nexport function useSelectModel(\n cvaa: ControlValueAccessorAdapter,\n multiple: boolean = false,\n) {\n return createMemo(() => {\n return {\n value: cvaa.value(),\n disabled: cvaa.disabled(),\n onBlur: cvaa.touchedChange,\n onChange: (\n event: Event & {\n target: HTMLSelectElement;\n },\n ) => {\n const selected = [];\n const el = event.target;\n if (el.selectedOptions !== undefined) {\n for (let index = 0; index < el.selectedOptions.length; index++) {\n const item = el.selectedOptions[index];\n selected.push(item.value);\n if (!multiple) {\n break;\n }\n }\n } else {\n for (let index = 0; index < el.options.length; index++) {\n const option = el.options[index];\n if (option.selected) {\n selected.push(option.value);\n if (!multiple) {\n break;\n }\n }\n }\n }\n cvaa.valueChange(multiple ? selected : selected[0]);\n },\n };\n });\n}\n"],"names":["PiyingWrapper","props","wrapper","createMemo","wrappers","restWrappers","slice","inputs","useSignalToRef","attributes","outputs","_$createComponent","Show","when","type","fallback","children","keyed","WrapperType","_$mergeProps","PiyingFieldTemplate","fieldInputs","field","renderConfig","control","form","ComponentType$$","define","isHidden","hidden","injector","useContext","InjectorToken","controlRef","setControlRef","createSignal","undefined","fieldControlInput","CVA","createEffect","dispose","createViewControlLink","PI_VIEW_FIELD_TOKEN","Provider","value","ComponentType","PiyingGroup","For","each","PiyingView","rootInjector","createRootInjector","providers","provide","ChangeDetectionScheduler","useClass","ChangeDetectionSchedulerImpl","initResult","subInjector","createInjector","parent","convert","schema","handle","SolidSchemaHandle","builder","SolidFormBuilder","registerOnDestroy","fn","get","DestroyRef","onDestroy","options","useEffectSync","ref","model","untrack","initListen","untracked","valueNoError$$","modelChange","destroy","updateValue"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@piying/view-solid",
3
+ "version": "1.5.0",
4
+ "description": "Piying view For Solid;Valibot to Component",
5
+ "type": "module",
6
+ "homepage": "https://piying-org.github.io/website/docs/client/intro",
7
+ "repository": {
8
+ "url": "git+https://github.com/piying-org/piying-view.git",
9
+ "directory": "packages/react",
10
+ "type": "git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/piying-org/piying-view/issues"
14
+ },
15
+ "author": {
16
+ "name": "wszgrcy",
17
+ "url": "https://github.com/wszgrcy",
18
+ "email": "wszgrcy@gmail.com"
19
+ },
20
+ "keywords": [
21
+ "Solid",
22
+ "form",
23
+ "valibot",
24
+ "validation",
25
+ "validator",
26
+ "layout",
27
+ "listen",
28
+ "field",
29
+ "control",
30
+ "group",
31
+ "array",
32
+ "control",
33
+ "metadata"
34
+ ],
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "@piying/view-core": "^1.5.0",
38
+ "static-injector": "^6.1.2"
39
+ },
40
+ "sideEffects": false,
41
+ "peerDependencies": {
42
+ "solid-js": "^1.9.9",
43
+ "valibot": "^1.1.0"
44
+ },
45
+ "module": "index.js",
46
+ "typings": "index.d.ts",
47
+ "exports": {
48
+ "./package.json": {
49
+ "default": "./package.json"
50
+ },
51
+ ".": {
52
+ "types": "./index.d.ts",
53
+ "default": "./index.js",
54
+ "import": "./index.js",
55
+ "require": "./index.cjs"
56
+ }
57
+ }
58
+ }
package/readme.md ADDED
@@ -0,0 +1,27 @@
1
+ <div><a href="https://www.npmjs.com/package/@piying/view-core"><img src="https://img.shields.io/npm/v/@piying/view-core" alt="NPM Version" /></a> <a href="https://coveralls.io/github/piying-org/piying-view?branch=main"><img src="https://coveralls.io/repos/github/piying-org/piying-view/badge.svg" alt="Coverage Status" ></a> <a href=""><img src="https://img.shields.io/badge/License-MIT-teal.svg" alt="MIT License" /></a></div>
2
+
3
+ ## document
4
+
5
+ - https://piying-org.github.io/website/docs/client/intro
6
+
7
+ ## start
8
+
9
+ - npm i
10
+ - npm run build:core
11
+
12
+ ## test
13
+
14
+ - npx playwright install
15
+ - npm run test:all
16
+
17
+ ### test Core/Angular
18
+
19
+ - npm run test
20
+
21
+ ### test Vue
22
+
23
+ - npm run test:vue
24
+
25
+ ### test React
26
+
27
+ - npm run test:react
@@ -0,0 +1,5 @@
1
+ import { CoreSchemaHandle } from '@piying/view-core';
2
+ import type { PiResolvedViewFieldConfig } from './type/group';
3
+ export declare class SolidSchemaHandle extends CoreSchemaHandle<SolidSchemaHandle, () => PiResolvedViewFieldConfig> {
4
+ type?: any;
5
+ }
package/token.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { Injector } from 'static-injector';
2
+ import type { PiResolvedViewFieldConfig } from './type/group';
3
+ export declare const PI_VIEW_FIELD_TOKEN: import("solid-js").Context<PiResolvedViewFieldConfig | undefined>;
4
+ export declare const InjectorToken: import("solid-js").Context<Injector | undefined>;
5
+ export declare const CVA: unique symbol;
@@ -0,0 +1,40 @@
1
+ import type { SolidSchemaHandle } from '../schema-handle';
2
+ import type { ConfigMergeStrategy, CoreResolvedComponentDefine, PiResolvedCommonViewFieldConfig } from '@piying/view-core';
3
+ import type { SetOptional } from '@piying/view-core';
4
+ export interface RawDirectiveOutputs {
5
+ [name: string]: (event: any, field: PiResolvedViewFieldConfig) => void;
6
+ }
7
+ export type RawWrapperDefine = {
8
+ inputs?: Record<string, any>;
9
+ type: string;
10
+ };
11
+ export type ResolvedrapperDefine = {
12
+ inputs?: Record<string, any>;
13
+ type: any;
14
+ };
15
+ export interface RawComponentDefine {
16
+ type: string;
17
+ }
18
+ export interface ComponentFieldConfig {
19
+ type?: string;
20
+ }
21
+ export type ResolvedComponentFieldConfig = Omit<ComponentFieldConfig, 'inputs' | 'outputs' | 'directives' | 'wrappers'>;
22
+ export type PiDefaultRawViewFieldConfig = Pick<SolidSchemaHandle, 'inputs' | 'outputs' | 'wrappers' | 'formConfig' | 'renderConfig' | 'props'>;
23
+ export type PiResolvedViewFieldConfig = PiResolvedCommonViewFieldConfig<() => PiResolvedViewFieldConfig, CoreResolvedComponentDefine> & ResolvedComponentFieldConfig & {
24
+ /** 除了无component的控件,其他情况下都应该有define,group/array会赋值默认 */
25
+ define?: RawComponentDefine;
26
+ };
27
+ export type PiComponentDefaultConfig = {
28
+ type: any | (() => Promise<any>);
29
+ } & Omit<SetOptional<PiDefaultRawViewFieldConfig, 'formConfig'>, 'type'>;
30
+ export interface PiViewConfig {
31
+ types?: Record<string, PiComponentDefaultConfig>;
32
+ wrappers?: Record<string, {
33
+ type: any | (() => Promise<any>);
34
+ inputs?: Record<string, any>;
35
+ }>;
36
+ defaultConfig?: PiDefaultRawViewFieldConfig;
37
+ /** merge 数组/对象会合并 replace 优先自身/组件/全局 */
38
+ defaultConfigMergeStrategy?: ConfigMergeStrategy | ConfigMergeStrategyObject;
39
+ }
40
+ export type ConfigMergeStrategyObject = Record<keyof PiDefaultRawViewFieldConfig, ConfigMergeStrategy>;
@@ -0,0 +1 @@
1
+ export * from './group';
@@ -0,0 +1,6 @@
1
+ export * from './use-text-model';
2
+ export * from './use-checkbox-model';
3
+ export * from './use-number-model';
4
+ export * from './use-radio-model';
5
+ export * from './use-range-model';
6
+ export * from './use-select-model';
@@ -0,0 +1,9 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useInputCheckboxModel(cvaa: ControlValueAccessorAdapter): import("solid-js").Accessor<{
3
+ checked: any;
4
+ disabled: boolean;
5
+ onBlur: () => void;
6
+ onChange: (event: Event & {
7
+ target: HTMLInputElement;
8
+ }) => void;
9
+ }>;
@@ -0,0 +1,7 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useInputNumberModel(cvaa: ControlValueAccessorAdapter): import("solid-js").Accessor<{
3
+ value: any;
4
+ disabled: boolean;
5
+ onBlur: () => void;
6
+ onInput: (event: any) => void;
7
+ }>;
@@ -0,0 +1,8 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useInputRadioModel(cvaa: ControlValueAccessorAdapter, value: any): import("solid-js").Accessor<{
3
+ value: any;
4
+ checked: boolean;
5
+ disabled: boolean;
6
+ onBlur: () => void;
7
+ onChange: () => void;
8
+ }>;
@@ -0,0 +1,8 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useInputRangeModel(cvaa: ControlValueAccessorAdapter): import("solid-js").Accessor<{
3
+ value: any;
4
+ disabled: boolean;
5
+ onBlur: () => void;
6
+ onInput: (event: any) => void;
7
+ onChange: (event: any) => void;
8
+ }>;
@@ -0,0 +1,9 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useSelectModel(cvaa: ControlValueAccessorAdapter, multiple?: boolean): import("solid-js").Accessor<{
3
+ value: any;
4
+ disabled: boolean;
5
+ onBlur: () => void;
6
+ onChange: (event: Event & {
7
+ target: HTMLSelectElement;
8
+ }) => void;
9
+ }>;
@@ -0,0 +1,14 @@
1
+ import type { ControlValueAccessorAdapter } from '../util/use-control-value-accessor';
2
+ export declare function useInputTextModel(cvaa: ControlValueAccessorAdapter, compositionMode: () => boolean): import("solid-js").Accessor<{
3
+ value: any;
4
+ disabled: boolean;
5
+ onBlur: () => void;
6
+ onInput: (event: any) => void;
7
+ } | {
8
+ onCompositionStart: () => void;
9
+ onCompositionEnd: (event: any) => void;
10
+ value: any;
11
+ disabled: boolean;
12
+ onBlur: () => void;
13
+ onInput: (event: any) => void;
14
+ }>;
@@ -0,0 +1,3 @@
1
+ export * from './signal-convert';
2
+ export * from './use-control-value-accessor';
3
+ export * from './use-effect-sync';
@@ -0,0 +1 @@
1
+ export declare function useSignalToRef<T>(value: () => T): import("solid-js").Accessor<T>;
@@ -0,0 +1,12 @@
1
+ import type { ControlValueAccessor } from '@piying/view-core';
2
+ import { type Accessor } from 'solid-js';
3
+ export declare function useControlValueAccessor(): {
4
+ cva: ControlValueAccessor;
5
+ cvaa: ControlValueAccessorAdapter;
6
+ };
7
+ export type ControlValueAccessorAdapter = {
8
+ value: Accessor<any>;
9
+ disabled: Accessor<boolean>;
10
+ touchedChange: () => void;
11
+ valueChange: (value: any) => void;
12
+ };
@@ -0,0 +1 @@
1
+ export declare function useEffectSync(fn: () => (() => void) | void): void;