@yahoo/uds-create-config 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AssetGroup.d.ts +77 -0
- package/dist/AssetGroup.js +125 -0
- package/dist/Component.d.ts +308 -0
- package/dist/Component.js +896 -0
- package/dist/ComponentGroup.d.ts +20 -0
- package/dist/ComponentGroup.js +46 -0
- package/dist/CompositeStyle.d.ts +27 -0
- package/dist/CompositeStyle.js +52 -0
- package/dist/Config.d.ts +423 -0
- package/dist/Config.js +1429 -0
- package/dist/Mode.d.ts +41 -0
- package/dist/Mode.js +81 -0
- package/dist/Modifier.d.ts +51 -0
- package/dist/Modifier.js +97 -0
- package/dist/MotionDef.d.ts +49 -0
- package/dist/MotionDef.js +97 -0
- package/dist/Props.d.ts +317 -0
- package/dist/Props.js +35 -0
- package/dist/Provider.d.ts +20 -0
- package/dist/Provider.js +14 -0
- package/dist/StyleProp.d.ts +112 -0
- package/dist/StyleProp.js +197 -0
- package/dist/Token.d.ts +55 -0
- package/dist/Token.js +112 -0
- package/dist/TokenGroup.d.ts +32 -0
- package/dist/TokenGroup.js +68 -0
- package/dist/asset-kind.d.ts +55 -0
- package/dist/asset-kind.js +29 -0
- package/dist/brands.d.ts +30 -0
- package/dist/brands.js +20 -0
- package/dist/captureCallerPath.d.ts +48 -0
- package/dist/captureCallerPath.js +95 -0
- package/dist/colorExpressions.d.ts +131 -0
- package/dist/colorExpressions.js +148 -0
- package/dist/defineAssetGroup.d.ts +166 -0
- package/dist/defineAssetGroup.js +264 -0
- package/dist/defineProvider.d.ts +29 -0
- package/dist/defineProvider.js +60 -0
- package/dist/element-marker.d.ts +54 -0
- package/dist/element-marker.js +113 -0
- package/dist/entity-utils.d.ts +56 -0
- package/dist/entity-utils.js +105 -0
- package/dist/factories.d.ts +707 -0
- package/dist/factories.js +393 -0
- package/dist/foreign-component-name.d.ts +21 -0
- package/dist/foreign-component-name.js +42 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +28 -0
- package/dist/interpolate.d.ts +20 -0
- package/dist/interpolate.js +10 -0
- package/dist/jsx/__fixtures__/cross-component-preview.d.ts +3 -0
- package/dist/jsx/__fixtures__/cross-component-preview.js +15 -0
- package/dist/jsx/jsx-dev-runtime.d.ts +15 -0
- package/dist/jsx/jsx-dev-runtime.js +11 -0
- package/dist/jsx/jsx-runtime.d.ts +48 -0
- package/dist/jsx/jsx-runtime.js +305 -0
- package/dist/markers.d.ts +217 -0
- package/dist/markers.js +67 -0
- package/dist/refs.d.ts +158 -0
- package/dist/refs.js +104 -0
- package/dist/renderer/RendererErrorBoundary.d.ts +26 -0
- package/dist/renderer/RendererErrorBoundary.js +30 -0
- package/dist/renderer/UdsRenderer.d.ts +80 -0
- package/dist/renderer/UdsRenderer.js +33 -0
- package/dist/renderer/assetRenderable.d.ts +13 -0
- package/dist/renderer/assetRenderable.js +13 -0
- package/dist/renderer/index.d.ts +14 -0
- package/dist/renderer/index.js +14 -0
- package/dist/renderer/makeRegistry.d.ts +34 -0
- package/dist/renderer/makeRegistry.js +52 -0
- package/dist/renderer/makeUdsRenderer.d.ts +29 -0
- package/dist/renderer/makeUdsRenderer.js +35 -0
- package/dist/renderer/primitives/FragmentRenderer.d.ts +12 -0
- package/dist/renderer/primitives/FragmentRenderer.js +11 -0
- package/dist/renderer/primitives/SlotRenderer.d.ts +21 -0
- package/dist/renderer/primitives/SlotRenderer.js +20 -0
- package/dist/renderer/wrapRegistry.d.ts +64 -0
- package/dist/renderer/wrapRegistry.js +39 -0
- package/dist/renderer/wrappers/component-slots.d.ts +41 -0
- package/dist/renderer/wrappers/component-slots.js +66 -0
- package/dist/renderer/wrappers/event-bridge.d.ts +20 -0
- package/dist/renderer/wrappers/event-bridge.js +78 -0
- package/dist/renderer/wrappers/hex-normalize.d.ts +14 -0
- package/dist/renderer/wrappers/hex-normalize.js +35 -0
- package/dist/renderer/wrappers/html-aliases.d.ts +24 -0
- package/dist/renderer/wrappers/html-aliases.js +62 -0
- package/dist/renderer/wrappers/inline-styles.d.ts +16 -0
- package/dist/renderer/wrappers/inline-styles.js +104 -0
- package/dist/renderer/wrappers/slot-resolution.d.ts +25 -0
- package/dist/renderer/wrappers/slot-resolution.js +68 -0
- package/dist/renderer/wrappers/void-elements.d.ts +23 -0
- package/dist/renderer/wrappers/void-elements.js +28 -0
- package/dist/spec/apply-forced-modifiers.d.ts +19 -0
- package/dist/spec/apply-forced-modifiers.js +49 -0
- package/dist/spec/asset-jsx.d.ts +48 -0
- package/dist/spec/asset-jsx.js +48 -0
- package/dist/spec/collapse-text-labels.d.ts +44 -0
- package/dist/spec/collapse-text-labels.js +107 -0
- package/dist/spec/empty-node-slots.d.ts +51 -0
- package/dist/spec/empty-node-slots.js +141 -0
- package/dist/spec/index.d.ts +10 -0
- package/dist/spec/index.js +10 -0
- package/dist/spec/jsxToSpec.d.ts +48 -0
- package/dist/spec/jsxToSpec.js +506 -0
- package/dist/spec/layer-props.d.ts +52 -0
- package/dist/spec/layer-props.js +149 -0
- package/dist/spec/preview-controls.d.ts +44 -0
- package/dist/spec/preview-controls.js +139 -0
- package/dist/spec/slot-refs.d.ts +39 -0
- package/dist/spec/slot-refs.js +56 -0
- package/dist/spec/specToJsx.d.ts +35 -0
- package/dist/spec/specToJsx.js +127 -0
- package/dist/token-override-rows.d.ts +66 -0
- package/dist/token-override-rows.js +223 -0
- package/dist/tokenValueType.d.ts +34 -0
- package/dist/tokenValueType.js +138 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/css-properties.d.ts +232 -0
- package/dist/types/css-properties.js +14 -0
- package/dist/types/css-property-keywords.d.ts +156 -0
- package/dist/types/css-property-keywords.js +616 -0
- package/dist/types/css-values.d.ts +63 -0
- package/dist/types/css-values.js +16 -0
- package/dist/types.d.ts +708 -0
- package/dist/types.js +12 -0
- package/dist/units.d.ts +14 -0
- package/dist/units.js +16 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/package.json +81 -0
package/dist/refs.d.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
//#region src/refs.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Cross-reference markers — the `{ __kind, ref }` shapes that appear in
|
|
4
|
+
* authored values and in the wire format. Each one represents "this
|
|
5
|
+
* position holds a pointer to another resource, not a literal."
|
|
6
|
+
*
|
|
7
|
+
* Naming:
|
|
8
|
+
*
|
|
9
|
+
* - `<X>Name` — the string-side identifier (`'color/brand'`, `'Box'`).
|
|
10
|
+
* Narrowed when the matching `Registered*` interface is augmented;
|
|
11
|
+
* falls open to `string` otherwise.
|
|
12
|
+
* - `<X>Ref` — the boxed marker shape `{ __kind, ref }` carrying an
|
|
13
|
+
* `<X>Name`. Distinguishes a pointer from a literal at every position
|
|
14
|
+
* that can hold either.
|
|
15
|
+
* - `<x>()` — the helper that constructs an `<X>Ref` from an `<X>Name`.
|
|
16
|
+
* - `is<X>Ref(value)` — type guard for use by the resolver and patch
|
|
17
|
+
* system.
|
|
18
|
+
*
|
|
19
|
+
* # Augmented refs
|
|
20
|
+
*
|
|
21
|
+
* The `Registered*` interfaces below are augmentation seams that
|
|
22
|
+
* consumer codegen populates via `declare module '@yahoo/uds-create-config' {
|
|
23
|
+
* interface Registered* { ... } }`. When augmented, each ref's `ref`
|
|
24
|
+
* field narrows to only valid references — `token('color/brand')` is OK
|
|
25
|
+
* but `token('color/nope')` is a compile error. When un-augmented (this
|
|
26
|
+
* package's own tests, fresh consumers before first build), the ref
|
|
27
|
+
* accepts any string — codegen narrows it later.
|
|
28
|
+
*/
|
|
29
|
+
interface RegisteredTokenGroups {}
|
|
30
|
+
interface RegisteredModifiers<T> {}
|
|
31
|
+
interface RegisteredModes {}
|
|
32
|
+
interface RegisteredCompositeStyles {}
|
|
33
|
+
interface RegisteredStyleProps {}
|
|
34
|
+
interface RegisteredComponents {}
|
|
35
|
+
interface RegisteredMotionDefs {}
|
|
36
|
+
interface RegisteredAssetGroups {}
|
|
37
|
+
/** `<groupName>/<tokenName>` for every registered token. */
|
|
38
|
+
type TokenName = [keyof RegisteredTokenGroups] extends [never] ? string : { [G in keyof RegisteredTokenGroups & string]: `${G}/${keyof RegisteredTokenGroups[G] & string}` }[keyof RegisteredTokenGroups & string];
|
|
39
|
+
/** Bare group names — `'color'`, `'spacing'`. */
|
|
40
|
+
type TokenGroupName = [keyof RegisteredTokenGroups] extends [never] ? string : keyof RegisteredTokenGroups & string;
|
|
41
|
+
/**
|
|
42
|
+
* Bare composite name (`'elevation'`) or `<name>/<variant>`
|
|
43
|
+
* (`'elevation/1'`).
|
|
44
|
+
*
|
|
45
|
+
* Indexes straight into `['styles']` rather than routing each member
|
|
46
|
+
* through an `extends { styles: infer V } ? … : never` conditional, for
|
|
47
|
+
* the same reason as `ModeName` — same resulting union, but no per-member
|
|
48
|
+
* conditional check + `infer`, and one consistent shape across every
|
|
49
|
+
* `*Name` union.
|
|
50
|
+
*/
|
|
51
|
+
type CompositeName = [keyof RegisteredCompositeStyles] extends [never] ? `${string}/${string}` : (keyof RegisteredCompositeStyles & string) | { [C in keyof RegisteredCompositeStyles & string]: `${C}/${keyof RegisteredCompositeStyles[C]['styles'] & string}` }[keyof RegisteredCompositeStyles & string];
|
|
52
|
+
/**
|
|
53
|
+
* `<modeName>/<optionName>` for every registered mode option.
|
|
54
|
+
*
|
|
55
|
+
* Indexes straight into `['options']` rather than routing each member
|
|
56
|
+
* through an `extends { options: infer O } ? … : never` conditional.
|
|
57
|
+
* Both yield the same union, but the indexed access skips a per-member
|
|
58
|
+
* conditional assignability check + `infer`, so it's cheaper for the
|
|
59
|
+
* checker and keeps every `*Name` union on the one shape `TokenName`
|
|
60
|
+
* uses.
|
|
61
|
+
*/
|
|
62
|
+
type ModeName = [keyof RegisteredModes] extends [never] ? `${string}/${string}` : { [M in keyof RegisteredModes & string]: `${M}/${keyof RegisteredModes[M]['options'] & string}` }[keyof RegisteredModes & string];
|
|
63
|
+
/** Style-prop names — `'bg'`, `'padding'`. */
|
|
64
|
+
type StylePropName = [keyof RegisteredStyleProps] extends [never] ? string : keyof RegisteredStyleProps & string;
|
|
65
|
+
/** Registered component names — `'Box'`, `'Alert'`. */
|
|
66
|
+
type ComponentName = [keyof RegisteredComponents] extends [never] ? string : keyof RegisteredComponents & string;
|
|
67
|
+
/** Bare asset-group slugs — `'icons'`, `'fonts'`. */
|
|
68
|
+
type AssetGroupName = [keyof RegisteredAssetGroups] extends [never] ? string : keyof RegisteredAssetGroups & string;
|
|
69
|
+
/** HTML tag names — open string for now; could narrow against `keyof JSX.IntrinsicElements`. */
|
|
70
|
+
type TagName = string;
|
|
71
|
+
interface TokenRef<TName extends string = string> {
|
|
72
|
+
readonly __kind: 'token';
|
|
73
|
+
readonly ref: TName;
|
|
74
|
+
}
|
|
75
|
+
interface TokenGroupRef<TName extends string = string> {
|
|
76
|
+
readonly __kind: 'tokenGroup';
|
|
77
|
+
readonly ref: TName;
|
|
78
|
+
}
|
|
79
|
+
interface CompositeRef<TName extends string = string, TLayer extends string | undefined = string | undefined> {
|
|
80
|
+
readonly __kind: 'composite';
|
|
81
|
+
readonly ref: TName;
|
|
82
|
+
/**
|
|
83
|
+
* Layer the marker should land on when used as a `.config()` prop
|
|
84
|
+
* binding (set by `composite(ref).on(layer)`). Absent when the ref
|
|
85
|
+
* is used as a token value, modifier selector, or as a bare prop
|
|
86
|
+
* binding that defaults to the `'root'` layer downstream.
|
|
87
|
+
*/
|
|
88
|
+
readonly layer?: TLayer;
|
|
89
|
+
}
|
|
90
|
+
interface ModeRef<TName extends string = string> {
|
|
91
|
+
readonly __kind: 'mode';
|
|
92
|
+
readonly ref: TName;
|
|
93
|
+
}
|
|
94
|
+
interface StylePropRef<TName extends string = string> {
|
|
95
|
+
readonly __kind: 'styleProp';
|
|
96
|
+
readonly ref: TName;
|
|
97
|
+
readonly layer?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Bind the style-prop to a specific layer — `styleProp('bg').on('root')`
|
|
100
|
+
* routes the JSX prop into the named layer instead of the component's
|
|
101
|
+
* own layer. Codegen reads the `layer` field and emits a class on
|
|
102
|
+
* that layer. Mirrors the old `@yahoo/uds-create-config` `styleProp().on()` chain.
|
|
103
|
+
*/
|
|
104
|
+
on(layer: string): StylePropRef<TName>;
|
|
105
|
+
}
|
|
106
|
+
interface TagRef<TName extends string = string> {
|
|
107
|
+
readonly __kind: 'tag';
|
|
108
|
+
readonly ref: TName;
|
|
109
|
+
}
|
|
110
|
+
interface ComponentRef<TName extends string = string> {
|
|
111
|
+
readonly __kind: 'component';
|
|
112
|
+
readonly ref: TName;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Asset-group pointer. The same `{ __kind, ref }` tag is *embedded* on
|
|
116
|
+
* the full group definition `defineAssetGroup(...)` returns (the
|
|
117
|
+
* definition object doubles as its own ref), so `isAssetGroupRef()` accepts
|
|
118
|
+
* both the bare marker and the live group object. The definition's
|
|
119
|
+
* `ref` is late-bound at `registerAssetGroups` and throws when read
|
|
120
|
+
* before registration; the guard only inspects `__kind`, so it is safe
|
|
121
|
+
* on unregistered groups.
|
|
122
|
+
*/
|
|
123
|
+
interface AssetGroupRef<TName extends string = string> {
|
|
124
|
+
readonly __kind: 'assetGroup';
|
|
125
|
+
readonly ref: TName;
|
|
126
|
+
}
|
|
127
|
+
type AnyRef = TokenRef | TokenGroupRef | CompositeRef | ModeRef | StylePropRef | TagRef | ComponentRef | AssetGroupRef;
|
|
128
|
+
/** Doc-alignment alias kept for ergonomic import. */
|
|
129
|
+
type TokenQualifiedName = TokenName;
|
|
130
|
+
declare function token<TName extends TokenName>(ref: TName): TokenRef<TName>;
|
|
131
|
+
declare function tokenGroup<TName extends TokenGroupName>(ref: TName): TokenGroupRef<TName>;
|
|
132
|
+
/**
|
|
133
|
+
* `composite(ref)` returns a bare `CompositeRef` plus an `.on(layer)`
|
|
134
|
+
* method that produces the same shape with `layer` filled in — both
|
|
135
|
+
* forms are `CompositeRef`. Codegen's marker probe in
|
|
136
|
+
* `transformAuthoringSource.ts` reads `{ __kind, ref, layer? }`
|
|
137
|
+
* uniformly, so the on-layer marker is just a `CompositeRef` with a
|
|
138
|
+
* concrete `layer` field.
|
|
139
|
+
*/
|
|
140
|
+
interface CompositeRefBuilder<TName extends string> extends CompositeRef<TName, undefined> {
|
|
141
|
+
on<TLayer extends string>(layer: TLayer): CompositeRef<TName, TLayer>;
|
|
142
|
+
}
|
|
143
|
+
declare function composite<TName extends CompositeName>(ref: TName): CompositeRefBuilder<TName>;
|
|
144
|
+
declare function mode<TName extends ModeName>(ref: TName): ModeRef<TName>;
|
|
145
|
+
declare function styleProp<TName extends StylePropName>(ref: TName): StylePropRef<TName>;
|
|
146
|
+
declare function tag<TName extends TagName>(ref: TName): TagRef<TName>;
|
|
147
|
+
declare function component<TName extends ComponentName>(ref: TName): ComponentRef<TName>;
|
|
148
|
+
declare function assetGroup<TName extends AssetGroupName>(ref: TName): AssetGroupRef<TName>;
|
|
149
|
+
declare function isTokenRef(value: unknown): value is TokenRef;
|
|
150
|
+
declare function isTokenGroupRef(value: unknown): value is TokenGroupRef;
|
|
151
|
+
declare function isCompositeRef(value: unknown): value is CompositeRef;
|
|
152
|
+
declare function isModeRef(value: unknown): value is ModeRef;
|
|
153
|
+
declare function isStylePropRef(value: unknown): value is StylePropRef;
|
|
154
|
+
declare function isTagRef(value: unknown): value is TagRef;
|
|
155
|
+
declare function isComponentRef(value: unknown): value is ComponentRef;
|
|
156
|
+
declare function isAssetGroupRef(value: unknown): value is AssetGroupRef;
|
|
157
|
+
//#endregion
|
|
158
|
+
export { AnyRef, AssetGroupName, AssetGroupRef, ComponentName, ComponentRef, CompositeName, CompositeRef, CompositeRefBuilder, ModeName, ModeRef, RegisteredAssetGroups, RegisteredComponents, RegisteredCompositeStyles, RegisteredModes, RegisteredModifiers, RegisteredMotionDefs, RegisteredStyleProps, RegisteredTokenGroups, StylePropName, StylePropRef, TagName, TagRef, TokenGroupName, TokenGroupRef, TokenName, TokenQualifiedName, TokenRef, assetGroup, component, composite, isAssetGroupRef, isComponentRef, isCompositeRef, isModeRef, isStylePropRef, isTagRef, isTokenGroupRef, isTokenRef, mode, styleProp, tag, token, tokenGroup };
|
package/dist/refs.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
//#region src/refs.ts
|
|
2
|
+
function token(ref) {
|
|
3
|
+
return {
|
|
4
|
+
__kind: "token",
|
|
5
|
+
ref
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function tokenGroup(ref) {
|
|
9
|
+
return {
|
|
10
|
+
__kind: "tokenGroup",
|
|
11
|
+
ref
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function composite(ref) {
|
|
15
|
+
return Object.assign({
|
|
16
|
+
__kind: "composite",
|
|
17
|
+
ref
|
|
18
|
+
}, { on(layer) {
|
|
19
|
+
return {
|
|
20
|
+
__kind: "composite",
|
|
21
|
+
ref,
|
|
22
|
+
layer
|
|
23
|
+
};
|
|
24
|
+
} });
|
|
25
|
+
}
|
|
26
|
+
function mode(ref) {
|
|
27
|
+
return {
|
|
28
|
+
__kind: "mode",
|
|
29
|
+
ref
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function styleProp(ref) {
|
|
33
|
+
const marker = {
|
|
34
|
+
__kind: "styleProp",
|
|
35
|
+
ref
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(marker, "on", {
|
|
38
|
+
enumerable: false,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value(layer) {
|
|
42
|
+
const next = {
|
|
43
|
+
__kind: "styleProp",
|
|
44
|
+
ref,
|
|
45
|
+
layer
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(next, "on", {
|
|
48
|
+
enumerable: false,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: marker.on
|
|
52
|
+
});
|
|
53
|
+
return next;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return marker;
|
|
57
|
+
}
|
|
58
|
+
function tag(ref) {
|
|
59
|
+
return {
|
|
60
|
+
__kind: "tag",
|
|
61
|
+
ref
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function component(ref) {
|
|
65
|
+
return {
|
|
66
|
+
__kind: "component",
|
|
67
|
+
ref
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function assetGroup(ref) {
|
|
71
|
+
return {
|
|
72
|
+
__kind: "assetGroup",
|
|
73
|
+
ref
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function isRefOf(value, kind) {
|
|
77
|
+
return typeof value === "object" && value !== null && value.__kind === kind;
|
|
78
|
+
}
|
|
79
|
+
function isTokenRef(value) {
|
|
80
|
+
return isRefOf(value, "token");
|
|
81
|
+
}
|
|
82
|
+
function isTokenGroupRef(value) {
|
|
83
|
+
return isRefOf(value, "tokenGroup");
|
|
84
|
+
}
|
|
85
|
+
function isCompositeRef(value) {
|
|
86
|
+
return isRefOf(value, "composite");
|
|
87
|
+
}
|
|
88
|
+
function isModeRef(value) {
|
|
89
|
+
return isRefOf(value, "mode");
|
|
90
|
+
}
|
|
91
|
+
function isStylePropRef(value) {
|
|
92
|
+
return isRefOf(value, "styleProp");
|
|
93
|
+
}
|
|
94
|
+
function isTagRef(value) {
|
|
95
|
+
return isRefOf(value, "tag");
|
|
96
|
+
}
|
|
97
|
+
function isComponentRef(value) {
|
|
98
|
+
return isRefOf(value, "component");
|
|
99
|
+
}
|
|
100
|
+
function isAssetGroupRef(value) {
|
|
101
|
+
return isRefOf(value, "assetGroup");
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { assetGroup, component, composite, isAssetGroupRef, isComponentRef, isCompositeRef, isModeRef, isStylePropRef, isTagRef, isTokenGroupRef, isTokenRef, mode, styleProp, tag, token, tokenGroup };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/renderer/RendererErrorBoundary.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Error boundary wrapped around each component's render entry. One
|
|
6
|
+
* broken component renders an inline error tile but doesn't take down
|
|
7
|
+
* the rest of the Spec.
|
|
8
|
+
*/
|
|
9
|
+
declare class RendererErrorBoundary extends React.Component<{
|
|
10
|
+
name: string;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}, {
|
|
13
|
+
error: string | null;
|
|
14
|
+
}> {
|
|
15
|
+
constructor(props: {
|
|
16
|
+
name: string;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
});
|
|
19
|
+
static getDerivedStateFromError(err: unknown): {
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
componentDidCatch(err: unknown): void;
|
|
23
|
+
render(): React.ReactNode;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { RendererErrorBoundary };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
//#region src/renderer/RendererErrorBoundary.tsx
|
|
3
|
+
/**
|
|
4
|
+
* Error boundary wrapped around each component's render entry. One
|
|
5
|
+
* broken component renders an inline error tile but doesn't take down
|
|
6
|
+
* the rest of the Spec.
|
|
7
|
+
*/
|
|
8
|
+
var RendererErrorBoundary = class extends React.Component {
|
|
9
|
+
constructor(props) {
|
|
10
|
+
super(props);
|
|
11
|
+
this.state = { error: null };
|
|
12
|
+
}
|
|
13
|
+
static getDerivedStateFromError(err) {
|
|
14
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
15
|
+
}
|
|
16
|
+
componentDidCatch(err) {
|
|
17
|
+
console.error(`[json-render] Rendering error in <${this.props.name}>:`, err);
|
|
18
|
+
}
|
|
19
|
+
render() {
|
|
20
|
+
if (this.state.error) return React.createElement("div", { style: {
|
|
21
|
+
padding: 8,
|
|
22
|
+
fontSize: 11,
|
|
23
|
+
color: "#ef4444",
|
|
24
|
+
fontFamily: "monospace"
|
|
25
|
+
} }, `<${this.props.name}> render error`);
|
|
26
|
+
return this.props.children;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { RendererErrorBoundary };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { RegistryDescriptor } from "./wrapRegistry.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import { ComponentRegistry, JSONUIProviderProps } from "@json-render/react";
|
|
4
|
+
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
|
+
import { Spec } from "@json-render/core";
|
|
6
|
+
|
|
7
|
+
//#region src/renderer/UdsRenderer.d.ts
|
|
8
|
+
interface UdsRendererProps {
|
|
9
|
+
spec: Spec | null;
|
|
10
|
+
loading?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Component registry to render with. Typically the codegen-emitted
|
|
13
|
+
* `bundleRegistry` (already composed through `makeRegistry`) —
|
|
14
|
+
* passed in by the project's `.uds/react-renderer.tsx` shell. Hosts
|
|
15
|
+
* can supply their own to override or extend it; we re-run the
|
|
16
|
+
* wrapper stack so built-in primitives + slot/event/style
|
|
17
|
+
* normalisation still apply.
|
|
18
|
+
*/
|
|
19
|
+
registry: ComponentRegistry;
|
|
20
|
+
/** Action handlers (`emit`-target name → async function). */
|
|
21
|
+
handlers?: Record<string, (params: Record<string, unknown>) => Promise<unknown> | unknown>;
|
|
22
|
+
/** Seed state for the internal `StateProvider`. */
|
|
23
|
+
initialState?: Record<string, unknown>;
|
|
24
|
+
onStateChange?: (changes: {
|
|
25
|
+
path: string;
|
|
26
|
+
value: unknown;
|
|
27
|
+
}[]) => void;
|
|
28
|
+
/**
|
|
29
|
+
* External `StateStore` (controlled mode). When provided, the store is the
|
|
30
|
+
* single source of truth and `initialState`/`onStateChange` are ignored.
|
|
31
|
+
*/
|
|
32
|
+
store?: JSONUIProviderProps['store'];
|
|
33
|
+
/** Navigation handler for `navigate` actions (`(path) => void`). */
|
|
34
|
+
navigate?: JSONUIProviderProps['navigate'];
|
|
35
|
+
/** Custom validators for `checks` whose `type` isn't a built-in validator. */
|
|
36
|
+
validationFunctions?: JSONUIProviderProps['validationFunctions'];
|
|
37
|
+
/** Named functions backing `$computed` prop expressions. */
|
|
38
|
+
functions?: JSONUIProviderProps['functions'];
|
|
39
|
+
/** Custom directives for user-defined `$`-prefixed dynamic values. */
|
|
40
|
+
directives?: JSONUIProviderProps['directives'];
|
|
41
|
+
/** Fallback renderer when the spec references an unknown type. */
|
|
42
|
+
fallback?: ComponentRegistry[string];
|
|
43
|
+
/**
|
|
44
|
+
* Config-derived facts for the wrapper stack (void components, CSS→style-prop
|
|
45
|
+
* map, layout/text sets). The codegen-emitted bundle registry was already
|
|
46
|
+
* wrapped with this; only needed here when a host supplies its own `registry`
|
|
47
|
+
* that should get the same config-aware normalisation.
|
|
48
|
+
*/
|
|
49
|
+
registryDescriptor?: RegistryDescriptor;
|
|
50
|
+
/**
|
|
51
|
+
* Rendered inside the `JSONUIProvider` (alongside the `Renderer`) so it
|
|
52
|
+
* shares the same actions/state context. The codegen shell passes
|
|
53
|
+
* `<UdsActionBridge/>` here — it calls `useActions()` to register handlers
|
|
54
|
+
* and must sit within the provider, not as an outer sibling.
|
|
55
|
+
*/
|
|
56
|
+
children?: ReactNode;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Top-level UDS renderer. Wraps `@json-render/react`'s `Renderer` with
|
|
60
|
+
* a `JSONUIProvider` + the standard wrapper stack on top of the
|
|
61
|
+
* supplied registry.
|
|
62
|
+
*/
|
|
63
|
+
declare function UdsRenderer({
|
|
64
|
+
spec,
|
|
65
|
+
loading,
|
|
66
|
+
registry,
|
|
67
|
+
handlers,
|
|
68
|
+
initialState,
|
|
69
|
+
onStateChange,
|
|
70
|
+
store,
|
|
71
|
+
navigate,
|
|
72
|
+
validationFunctions,
|
|
73
|
+
functions,
|
|
74
|
+
directives,
|
|
75
|
+
fallback,
|
|
76
|
+
registryDescriptor,
|
|
77
|
+
children
|
|
78
|
+
}: UdsRendererProps): _$react_jsx_runtime0.JSX.Element;
|
|
79
|
+
//#endregion
|
|
80
|
+
export { UdsRenderer, UdsRendererProps };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { wrapRegistry } from "./wrapRegistry.js";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { JSONUIProvider, Renderer } from "@json-render/react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/renderer/UdsRenderer.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Top-level UDS renderer. Wraps `@json-render/react`'s `Renderer` with
|
|
9
|
+
* a `JSONUIProvider` + the standard wrapper stack on top of the
|
|
10
|
+
* supplied registry.
|
|
11
|
+
*/
|
|
12
|
+
function UdsRenderer({ spec, loading, registry, handlers, initialState, onStateChange, store, navigate, validationFunctions, functions, directives, fallback, registryDescriptor, children }) {
|
|
13
|
+
const wrapped = useMemo(() => wrapRegistry(registry, registryDescriptor), [registry, registryDescriptor]);
|
|
14
|
+
return /* @__PURE__ */ jsxs(JSONUIProvider, {
|
|
15
|
+
registry: wrapped,
|
|
16
|
+
handlers,
|
|
17
|
+
initialState,
|
|
18
|
+
onStateChange,
|
|
19
|
+
store,
|
|
20
|
+
navigate,
|
|
21
|
+
validationFunctions,
|
|
22
|
+
functions,
|
|
23
|
+
directives,
|
|
24
|
+
children: [children, /* @__PURE__ */ jsx(Renderer, {
|
|
25
|
+
spec,
|
|
26
|
+
registry: wrapped,
|
|
27
|
+
loading,
|
|
28
|
+
fallback
|
|
29
|
+
})]
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { UdsRenderer };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/renderer/assetRenderable.d.ts
|
|
4
|
+
/** Props callers pass when rendering an asset member directly (icon picker
|
|
5
|
+
* grid, drag ghost). The member — or the system component it renders through —
|
|
6
|
+
* maps these to a glyph; the registry-derived `name` always wins, and any
|
|
7
|
+
* extra props are ignored by static glyphs. */
|
|
8
|
+
type AssetRenderProps = {
|
|
9
|
+
variant?: string;
|
|
10
|
+
size?: string | number;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { AssetRenderProps };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
//#region src/renderer/assetRenderable.tsx
|
|
3
|
+
function makeAssetRenderable(SystemComponent, member, name) {
|
|
4
|
+
if (SystemComponent === void 0) return member;
|
|
5
|
+
return function AssetRenderable(props) {
|
|
6
|
+
return /* @__PURE__ */ jsx(SystemComponent, {
|
|
7
|
+
...props,
|
|
8
|
+
name
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { makeAssetRenderable };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RegistryDescriptor, wrapRegistry } from "./wrapRegistry.js";
|
|
2
|
+
import { AssetMembers, MakeRegistryResult, makeRegistry } from "./makeRegistry.js";
|
|
3
|
+
import { makeUdsRenderer } from "./makeUdsRenderer.js";
|
|
4
|
+
import { FragmentRenderer } from "./primitives/FragmentRenderer.js";
|
|
5
|
+
import { SlotRenderer } from "./primitives/SlotRenderer.js";
|
|
6
|
+
import { RendererErrorBoundary } from "./RendererErrorBoundary.js";
|
|
7
|
+
import { UdsRenderer, UdsRendererProps } from "./UdsRenderer.js";
|
|
8
|
+
import { wrapEventBridge } from "./wrappers/event-bridge.js";
|
|
9
|
+
import { wrapNormalizeHex } from "./wrappers/hex-normalize.js";
|
|
10
|
+
import { aliasHtmlTypes } from "./wrappers/html-aliases.js";
|
|
11
|
+
import { wrapInlineStyleProps } from "./wrappers/inline-styles.js";
|
|
12
|
+
import { wrapSlotResolution } from "./wrappers/slot-resolution.js";
|
|
13
|
+
import { wrapVoidElements } from "./wrappers/void-elements.js";
|
|
14
|
+
export { type AssetMembers, FragmentRenderer, type MakeRegistryResult, type RegistryDescriptor, RendererErrorBoundary, SlotRenderer, UdsRenderer, type UdsRendererProps, aliasHtmlTypes, makeRegistry, makeUdsRenderer, wrapEventBridge, wrapInlineStyleProps, wrapNormalizeHex, wrapRegistry, wrapSlotResolution, wrapVoidElements };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RendererErrorBoundary } from "./RendererErrorBoundary.js";
|
|
2
|
+
import { makeUdsRenderer } from "./makeUdsRenderer.js";
|
|
3
|
+
import { FragmentRenderer } from "./primitives/FragmentRenderer.js";
|
|
4
|
+
import { SlotRenderer } from "./primitives/SlotRenderer.js";
|
|
5
|
+
import { wrapEventBridge } from "./wrappers/event-bridge.js";
|
|
6
|
+
import { wrapNormalizeHex } from "./wrappers/hex-normalize.js";
|
|
7
|
+
import { aliasHtmlTypes } from "./wrappers/html-aliases.js";
|
|
8
|
+
import { wrapInlineStyleProps } from "./wrappers/inline-styles.js";
|
|
9
|
+
import { wrapSlotResolution } from "./wrappers/slot-resolution.js";
|
|
10
|
+
import { wrapVoidElements } from "./wrappers/void-elements.js";
|
|
11
|
+
import { wrapRegistry } from "./wrapRegistry.js";
|
|
12
|
+
import { makeRegistry } from "./makeRegistry.js";
|
|
13
|
+
import { UdsRenderer } from "./UdsRenderer.js";
|
|
14
|
+
export { FragmentRenderer, RendererErrorBoundary, SlotRenderer, UdsRenderer, aliasHtmlTypes, makeRegistry, makeUdsRenderer, wrapEventBridge, wrapInlineStyleProps, wrapNormalizeHex, wrapRegistry, wrapSlotResolution, wrapVoidElements };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AssetGroup } from "../AssetGroup.js";
|
|
2
|
+
import { AssetRenderProps } from "./assetRenderable.js";
|
|
3
|
+
import { RegistryDescriptor } from "./wrapRegistry.js";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { ComponentRegistry } from "@json-render/react";
|
|
6
|
+
|
|
7
|
+
//#region src/renderer/makeRegistry.d.ts
|
|
8
|
+
/** Plain, provider-free asset renderables indexed `slug → name → component`.
|
|
9
|
+
* Each is `makeAssetRenderable(SystemComponent, member, name)` — the SAME
|
|
10
|
+
* component identity the registry keys under the namespaced asset type, but
|
|
11
|
+
* surfaced directly so callers (e.g. the icon picker) can render a single
|
|
12
|
+
* glyph without standing up a json-render engine per cell. */
|
|
13
|
+
type AssetMembers = ReadonlyMap<string, ReadonlyMap<string, React.ComponentType<AssetRenderProps>>>;
|
|
14
|
+
interface MakeRegistryResult {
|
|
15
|
+
registry: ComponentRegistry;
|
|
16
|
+
/** @see AssetMembers — empty when the config registers no placeable assets. */
|
|
17
|
+
assetMembers: AssetMembers;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Compose a complete json-render `ComponentRegistry` from a project's
|
|
21
|
+
* UDS components. Wraps each component with a uniform prop-forwarding
|
|
22
|
+
* + error-boundary `ComponentFn` (`makeUdsRenderer`), routes through
|
|
23
|
+
* `defineRegistry` to adapt to the `ComponentRenderer` shape, then
|
|
24
|
+
* applies the standard wrapper stack (`wrapRegistry`) so consumers
|
|
25
|
+
* can render any Spec from any source (author-emitted, AI-emitted,
|
|
26
|
+
* Figma import) without per-call normalisation.
|
|
27
|
+
*
|
|
28
|
+
* Replaces the per-project codegen that used to emit ~50 lines of
|
|
29
|
+
* `${name}Renderer` function definitions plus a flat registry literal.
|
|
30
|
+
* Codegen now emits a single `makeRegistry({...components})` call.
|
|
31
|
+
*/
|
|
32
|
+
declare function makeRegistry(components: Record<string, React.ComponentType<any>>, foreignComponents?: readonly React.ComponentType<any>[], descriptor?: RegistryDescriptor, assetGroups?: Iterable<AssetGroup>): MakeRegistryResult;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { AssetMembers, MakeRegistryResult, makeRegistry };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isPlaceable } from "../asset-kind.js";
|
|
2
|
+
import { foreignRegistryKey } from "../foreign-component-name.js";
|
|
3
|
+
import { makeAssetRenderable } from "./assetRenderable.js";
|
|
4
|
+
import { makeUdsRenderer } from "./makeUdsRenderer.js";
|
|
5
|
+
import { wrapRegistry } from "./wrapRegistry.js";
|
|
6
|
+
import { defineRegistry } from "@json-render/react";
|
|
7
|
+
//#region src/renderer/makeRegistry.ts
|
|
8
|
+
/**
|
|
9
|
+
* Compose a complete json-render `ComponentRegistry` from a project's
|
|
10
|
+
* UDS components. Wraps each component with a uniform prop-forwarding
|
|
11
|
+
* + error-boundary `ComponentFn` (`makeUdsRenderer`), routes through
|
|
12
|
+
* `defineRegistry` to adapt to the `ComponentRenderer` shape, then
|
|
13
|
+
* applies the standard wrapper stack (`wrapRegistry`) so consumers
|
|
14
|
+
* can render any Spec from any source (author-emitted, AI-emitted,
|
|
15
|
+
* Figma import) without per-call normalisation.
|
|
16
|
+
*
|
|
17
|
+
* Replaces the per-project codegen that used to emit ~50 lines of
|
|
18
|
+
* `${name}Renderer` function definitions plus a flat registry literal.
|
|
19
|
+
* Codegen now emits a single `makeRegistry({...components})` call.
|
|
20
|
+
*/
|
|
21
|
+
function makeRegistry(components, foreignComponents = [], descriptor, assetGroups = []) {
|
|
22
|
+
const componentFns = {};
|
|
23
|
+
for (const [name, Comp] of Object.entries(components)) componentFns[name] = makeUdsRenderer(Comp, name);
|
|
24
|
+
for (const Comp of foreignComponents) {
|
|
25
|
+
const key = foreignRegistryKey(Comp);
|
|
26
|
+
if (key !== null) componentFns[key] = makeUdsRenderer(Comp, key);
|
|
27
|
+
}
|
|
28
|
+
const assetMembersBySlug = /* @__PURE__ */ new Map();
|
|
29
|
+
for (const group of assetGroups) {
|
|
30
|
+
if (!isPlaceable(group)) continue;
|
|
31
|
+
const members = group.members;
|
|
32
|
+
if (!members) continue;
|
|
33
|
+
const SystemComponent = group.component !== void 0 ? components[group.component] : void 0;
|
|
34
|
+
const bySlug = /* @__PURE__ */ new Map();
|
|
35
|
+
for (const name of group.assetNames) {
|
|
36
|
+
const member = members[name];
|
|
37
|
+
if (member === void 0) continue;
|
|
38
|
+
const key = group.assetType(name);
|
|
39
|
+
const Renderable = makeAssetRenderable(SystemComponent, member, name);
|
|
40
|
+
componentFns[key] = makeUdsRenderer(Renderable, key);
|
|
41
|
+
bySlug.set(name, Renderable);
|
|
42
|
+
}
|
|
43
|
+
assetMembersBySlug.set(group.name, bySlug);
|
|
44
|
+
}
|
|
45
|
+
const { registry } = defineRegistry(null, { components: componentFns });
|
|
46
|
+
return {
|
|
47
|
+
registry: wrapRegistry(registry, descriptor, assetMembersBySlug),
|
|
48
|
+
assetMembers: assetMembersBySlug
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { makeRegistry };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { BaseComponentProps } from "@json-render/react";
|
|
3
|
+
|
|
4
|
+
//#region src/renderer/makeUdsRenderer.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Component-fn signature used in `defineRegistry`'s `components` map.
|
|
7
|
+
* Matches `@json-render/react`'s `BaseComponentProps` so the registry
|
|
8
|
+
* lookup hands us `{ props, children, emit, bindings, ... }` directly.
|
|
9
|
+
*/
|
|
10
|
+
type UdsComponentFn = (ctx: BaseComponentProps<Record<string, unknown>>) => React.ReactElement;
|
|
11
|
+
/**
|
|
12
|
+
* Minimal pass-through `ComponentFn` for any UDS component. The
|
|
13
|
+
* component's own `bindRender` (codegen-emitted FC) owns variant /
|
|
14
|
+
* style-prop / modifier resolution at runtime — this wrapper just
|
|
15
|
+
* forwards `props` + `children` inside an error boundary.
|
|
16
|
+
*
|
|
17
|
+
* Replaces the per-component wrapper functions codegen used to emit
|
|
18
|
+
* as a dedent string (one `${name}Renderer` function per registered
|
|
19
|
+
* component, all structurally identical). The new factory composes
|
|
20
|
+
* once at runtime; codegen just calls `makeRegistry({ ...components })`.
|
|
21
|
+
*
|
|
22
|
+
* Returns a `ComponentFn` (hoisted-props shape) so it can flow through
|
|
23
|
+
* `defineRegistry` the same way the original codegen-emitted wrappers
|
|
24
|
+
* did — `defineRegistry` adapts it to a `ComponentRenderer` (element-
|
|
25
|
+
* shape) before `wrapRegistry` runs.
|
|
26
|
+
*/
|
|
27
|
+
declare function makeUdsRenderer(Comp: React.ComponentType<any>, name: string): UdsComponentFn;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { makeUdsRenderer };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { RendererErrorBoundary } from "./RendererErrorBoundary.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/renderer/makeUdsRenderer.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Minimal pass-through `ComponentFn` for any UDS component. The
|
|
7
|
+
* component's own `bindRender` (codegen-emitted FC) owns variant /
|
|
8
|
+
* style-prop / modifier resolution at runtime — this wrapper just
|
|
9
|
+
* forwards `props` + `children` inside an error boundary.
|
|
10
|
+
*
|
|
11
|
+
* Replaces the per-component wrapper functions codegen used to emit
|
|
12
|
+
* as a dedent string (one `${name}Renderer` function per registered
|
|
13
|
+
* component, all structurally identical). The new factory composes
|
|
14
|
+
* once at runtime; codegen just calls `makeRegistry({ ...components })`.
|
|
15
|
+
*
|
|
16
|
+
* Returns a `ComponentFn` (hoisted-props shape) so it can flow through
|
|
17
|
+
* `defineRegistry` the same way the original codegen-emitted wrappers
|
|
18
|
+
* did — `defineRegistry` adapts it to a `ComponentRenderer` (element-
|
|
19
|
+
* shape) before `wrapRegistry` runs.
|
|
20
|
+
*/
|
|
21
|
+
function makeUdsRenderer(Comp, name) {
|
|
22
|
+
return function UdsComponentRenderer({ props, children }) {
|
|
23
|
+
const { children: propChildren, ...rest } = props;
|
|
24
|
+
const finalChildren = React.Children.count(children) > 0 ? children : propChildren;
|
|
25
|
+
return /* @__PURE__ */ jsx(RendererErrorBoundary, {
|
|
26
|
+
name,
|
|
27
|
+
children: finalChildren !== void 0 && finalChildren !== null ? /* @__PURE__ */ jsx(Comp, {
|
|
28
|
+
...rest,
|
|
29
|
+
children: finalChildren
|
|
30
|
+
}) : /* @__PURE__ */ jsx(Comp, { ...rest })
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { makeUdsRenderer };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ComponentRenderer } from "@json-render/react";
|
|
2
|
+
|
|
3
|
+
//#region src/renderer/primitives/FragmentRenderer.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Renders `Fragment`-typed Spec elements transparently — children
|
|
6
|
+
* pass through untouched. The runtime emits `type: 'Fragment'` for
|
|
7
|
+
* both the JSX `<>...</>` shorthand and the explicit `<Fragment>`
|
|
8
|
+
* sentinel; this renderer handles both cases.
|
|
9
|
+
*/
|
|
10
|
+
declare const FragmentRenderer: ComponentRenderer;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { FragmentRenderer };
|