@uniformdev/canvas-react 19.40.0 → 19.41.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/dist/index.d.mts +16 -3
- package/dist/index.d.ts +16 -3
- package/dist/index.esm.js +9 -9
- package/dist/index.js +9 -9
- package/dist/index.mjs +9 -9
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -324,6 +324,10 @@ type CustomSlotChildRenderFunc = (options: {
|
|
|
324
324
|
component: ComponentInstance;
|
|
325
325
|
key: Key;
|
|
326
326
|
}) => JSX.Element;
|
|
327
|
+
type UniformSlotWrapperComponentProps = {
|
|
328
|
+
items: ReactNode[];
|
|
329
|
+
slotName: string;
|
|
330
|
+
};
|
|
327
331
|
type UniformSlotProps<TSlotNames extends string> = {
|
|
328
332
|
/** Name of the slot to render */
|
|
329
333
|
name: TSlotNames;
|
|
@@ -332,8 +336,17 @@ type UniformSlotProps<TSlotNames extends string> = {
|
|
|
332
336
|
* If not specified, the resolveRenderer function on the nearest Layout will be used, if any.
|
|
333
337
|
*/
|
|
334
338
|
resolveRenderer?: RenderComponentResolver;
|
|
335
|
-
/**
|
|
339
|
+
/**
|
|
340
|
+
* Optional render props enables wrapping all child components in the slot with some markup
|
|
341
|
+
*
|
|
342
|
+
* @deprecated Use `wrapperComponent` instead and define wrapping component for slot children inside.
|
|
343
|
+
*/
|
|
336
344
|
children?: CustomSlotChildRenderFunc;
|
|
345
|
+
/**
|
|
346
|
+
* Optional wrapper component around list of slot items that allows to control
|
|
347
|
+
* exactly how to render slot items, otherwise React.Fragment is being used
|
|
348
|
+
*/
|
|
349
|
+
wrapperComponent?: React$1.ComponentType<UniformSlotWrapperComponentProps>;
|
|
337
350
|
/**
|
|
338
351
|
* Optional ReactNode to use as a placeholder in Canvas editor when the slot is empty.
|
|
339
352
|
* The node is used to render a placeholder with realistic dimensions and it's never shown to users.
|
|
@@ -342,7 +355,7 @@ type UniformSlotProps<TSlotNames extends string> = {
|
|
|
342
355
|
emptyPlaceholder?: React$1.ReactNode;
|
|
343
356
|
};
|
|
344
357
|
/** Renders a named Slot within a Composition. */
|
|
345
|
-
declare function UniformSlot<TSlotNames extends string = string>({ name, resolveRenderer, children, emptyPlaceholder, }: UniformSlotProps<TSlotNames>): JSX.Element | null;
|
|
358
|
+
declare function UniformSlot<TSlotNames extends string = string>({ name, resolveRenderer, children, emptyPlaceholder, wrapperComponent, }: UniformSlotProps<TSlotNames>): JSX.Element | null;
|
|
346
359
|
|
|
347
360
|
/**
|
|
348
361
|
* Returns the attributes needed to annotate a Uniform parameter for inline editing.
|
|
@@ -391,4 +404,4 @@ declare const createComponentStoreResolver: (options: {
|
|
|
391
404
|
defaultComponent?: React$1.ComponentType<ComponentProps<any>>;
|
|
392
405
|
}) => RenderComponentResolver;
|
|
393
406
|
|
|
394
|
-
export { ComponentProps, ComponentStore, DefaultNotImplementedComponent, NOT_IMPLEMENTED_COMPONENT, RenderComponentResolver, RenderRichTextComponentResolver, RichTextComponentProps, RichTextRendererComponent, SystemRenderConfig, SystemRenderFunction, UniformComponent, UniformComponentContextValue, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformRichText, UniformRichTextNode, UniformRichTextNodeProps, UniformRichTextProps, UniformSlot, UniformSlotProps, UniformText, UniformTextProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, UseUniformContextualEditingStateProps, componentStore, componentStoreResolver, createComponentStore, createComponentStoreResolver, getParameterAttributes, registerUniformComponent, useCompositionEventEffect, useUniformContextualEditing, useUniformContextualEditingState, useUniformCurrentComponent, useUniformCurrentComposition };
|
|
407
|
+
export { ComponentProps, ComponentStore, CustomSlotChildRenderFunc, DefaultNotImplementedComponent, NOT_IMPLEMENTED_COMPONENT, RenderComponentResolver, RenderRichTextComponentResolver, RichTextComponentProps, RichTextRendererComponent, SystemRenderConfig, SystemRenderFunction, UniformComponent, UniformComponentContextValue, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformRichText, UniformRichTextNode, UniformRichTextNodeProps, UniformRichTextProps, UniformSlot, UniformSlotProps, UniformSlotWrapperComponentProps, UniformText, UniformTextProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, UseUniformContextualEditingStateProps, componentStore, componentStoreResolver, createComponentStore, createComponentStoreResolver, getParameterAttributes, registerUniformComponent, useCompositionEventEffect, useUniformContextualEditing, useUniformContextualEditingState, useUniformCurrentComponent, useUniformCurrentComposition };
|
package/dist/index.d.ts
CHANGED
|
@@ -324,6 +324,10 @@ type CustomSlotChildRenderFunc = (options: {
|
|
|
324
324
|
component: ComponentInstance;
|
|
325
325
|
key: Key;
|
|
326
326
|
}) => JSX.Element;
|
|
327
|
+
type UniformSlotWrapperComponentProps = {
|
|
328
|
+
items: ReactNode[];
|
|
329
|
+
slotName: string;
|
|
330
|
+
};
|
|
327
331
|
type UniformSlotProps<TSlotNames extends string> = {
|
|
328
332
|
/** Name of the slot to render */
|
|
329
333
|
name: TSlotNames;
|
|
@@ -332,8 +336,17 @@ type UniformSlotProps<TSlotNames extends string> = {
|
|
|
332
336
|
* If not specified, the resolveRenderer function on the nearest Layout will be used, if any.
|
|
333
337
|
*/
|
|
334
338
|
resolveRenderer?: RenderComponentResolver;
|
|
335
|
-
/**
|
|
339
|
+
/**
|
|
340
|
+
* Optional render props enables wrapping all child components in the slot with some markup
|
|
341
|
+
*
|
|
342
|
+
* @deprecated Use `wrapperComponent` instead and define wrapping component for slot children inside.
|
|
343
|
+
*/
|
|
336
344
|
children?: CustomSlotChildRenderFunc;
|
|
345
|
+
/**
|
|
346
|
+
* Optional wrapper component around list of slot items that allows to control
|
|
347
|
+
* exactly how to render slot items, otherwise React.Fragment is being used
|
|
348
|
+
*/
|
|
349
|
+
wrapperComponent?: React$1.ComponentType<UniformSlotWrapperComponentProps>;
|
|
337
350
|
/**
|
|
338
351
|
* Optional ReactNode to use as a placeholder in Canvas editor when the slot is empty.
|
|
339
352
|
* The node is used to render a placeholder with realistic dimensions and it's never shown to users.
|
|
@@ -342,7 +355,7 @@ type UniformSlotProps<TSlotNames extends string> = {
|
|
|
342
355
|
emptyPlaceholder?: React$1.ReactNode;
|
|
343
356
|
};
|
|
344
357
|
/** Renders a named Slot within a Composition. */
|
|
345
|
-
declare function UniformSlot<TSlotNames extends string = string>({ name, resolveRenderer, children, emptyPlaceholder, }: UniformSlotProps<TSlotNames>): JSX.Element | null;
|
|
358
|
+
declare function UniformSlot<TSlotNames extends string = string>({ name, resolveRenderer, children, emptyPlaceholder, wrapperComponent, }: UniformSlotProps<TSlotNames>): JSX.Element | null;
|
|
346
359
|
|
|
347
360
|
/**
|
|
348
361
|
* Returns the attributes needed to annotate a Uniform parameter for inline editing.
|
|
@@ -391,4 +404,4 @@ declare const createComponentStoreResolver: (options: {
|
|
|
391
404
|
defaultComponent?: React$1.ComponentType<ComponentProps<any>>;
|
|
392
405
|
}) => RenderComponentResolver;
|
|
393
406
|
|
|
394
|
-
export { ComponentProps, ComponentStore, DefaultNotImplementedComponent, NOT_IMPLEMENTED_COMPONENT, RenderComponentResolver, RenderRichTextComponentResolver, RichTextComponentProps, RichTextRendererComponent, SystemRenderConfig, SystemRenderFunction, UniformComponent, UniformComponentContextValue, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformRichText, UniformRichTextNode, UniformRichTextNodeProps, UniformRichTextProps, UniformSlot, UniformSlotProps, UniformText, UniformTextProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, UseUniformContextualEditingStateProps, componentStore, componentStoreResolver, createComponentStore, createComponentStoreResolver, getParameterAttributes, registerUniformComponent, useCompositionEventEffect, useUniformContextualEditing, useUniformContextualEditingState, useUniformCurrentComponent, useUniformCurrentComposition };
|
|
407
|
+
export { ComponentProps, ComponentStore, CustomSlotChildRenderFunc, DefaultNotImplementedComponent, NOT_IMPLEMENTED_COMPONENT, RenderComponentResolver, RenderRichTextComponentResolver, RichTextComponentProps, RichTextRendererComponent, SystemRenderConfig, SystemRenderFunction, UniformComponent, UniformComponentContextValue, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformRichText, UniformRichTextNode, UniformRichTextNodeProps, UniformRichTextProps, UniformSlot, UniformSlotProps, UniformSlotWrapperComponentProps, UniformText, UniformTextProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, UseUniformContextualEditingStateProps, componentStore, componentStoreResolver, createComponentStore, createComponentStoreResolver, getParameterAttributes, registerUniformComponent, useCompositionEventEffect, useUniformContextualEditing, useUniformContextualEditingState, useUniformCurrentComponent, useUniformCurrentComposition };
|
package/dist/index.esm.js
CHANGED
|
@@ -356,7 +356,8 @@ function UniformSlot({
|
|
|
356
356
|
name,
|
|
357
357
|
resolveRenderer,
|
|
358
358
|
children,
|
|
359
|
-
emptyPlaceholder
|
|
359
|
+
emptyPlaceholder,
|
|
360
|
+
wrapperComponent
|
|
360
361
|
}) {
|
|
361
362
|
var _a;
|
|
362
363
|
const { data: parentData, resolveRenderer: parentResolveRenderer } = useUniformCurrentComponent();
|
|
@@ -374,12 +375,10 @@ function UniformSlot({
|
|
|
374
375
|
return null;
|
|
375
376
|
}
|
|
376
377
|
const resolver = resolveRenderer != null ? resolveRenderer : parentResolveRenderer;
|
|
377
|
-
const systemResolver = defaultSystemComponentResolver;
|
|
378
378
|
const finalChildren = slot.map((component, index) => {
|
|
379
379
|
const child = renderComponent({
|
|
380
380
|
component,
|
|
381
381
|
resolveRenderer: resolver,
|
|
382
|
-
resolveSystem: systemResolver,
|
|
383
382
|
key: `inner-${index}`,
|
|
384
383
|
indexInSlot: index,
|
|
385
384
|
slotName: name,
|
|
@@ -390,12 +389,15 @@ function UniformSlot({
|
|
|
390
389
|
const elements = children ? children({ child, component, key: `wrapped-inner-${index}` }) : child;
|
|
391
390
|
return React5.createElement(React5.Fragment, { key: index }, elements);
|
|
392
391
|
});
|
|
393
|
-
|
|
392
|
+
if (!wrapperComponent) {
|
|
393
|
+
return React5.createElement(React5.Fragment, void 0, finalChildren);
|
|
394
|
+
}
|
|
395
|
+
const Wrapper = wrapperComponent;
|
|
396
|
+
return /* @__PURE__ */ React5.createElement(Wrapper, { items: finalChildren, slotName: name });
|
|
394
397
|
}
|
|
395
398
|
function renderComponent({
|
|
396
399
|
component,
|
|
397
400
|
resolveRenderer,
|
|
398
|
-
resolveSystem,
|
|
399
401
|
key = 0,
|
|
400
402
|
indexInSlot,
|
|
401
403
|
slotName,
|
|
@@ -405,7 +407,7 @@ function renderComponent({
|
|
|
405
407
|
}) {
|
|
406
408
|
const RenderComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
|
|
407
409
|
if (component.type === CANVAS_TEST_TYPE) {
|
|
408
|
-
const testComponent =
|
|
410
|
+
const testComponent = defaultSystemComponentResolver.test(
|
|
409
411
|
component,
|
|
410
412
|
key,
|
|
411
413
|
(variantComponent, key2) => {
|
|
@@ -413,7 +415,6 @@ function renderComponent({
|
|
|
413
415
|
return renderComponent({
|
|
414
416
|
component: variantComponent,
|
|
415
417
|
resolveRenderer,
|
|
416
|
-
resolveSystem,
|
|
417
418
|
key: key2,
|
|
418
419
|
parentComponent: component,
|
|
419
420
|
slotName: CANVAS_TEST_SLOT,
|
|
@@ -437,7 +438,7 @@ function renderComponent({
|
|
|
437
438
|
testComponent
|
|
438
439
|
);
|
|
439
440
|
} else if (component.type === CANVAS_PERSONALIZE_TYPE) {
|
|
440
|
-
const personalizationComponent =
|
|
441
|
+
const personalizationComponent = defaultSystemComponentResolver.personalization(
|
|
441
442
|
component,
|
|
442
443
|
key,
|
|
443
444
|
(variantComponent, key2) => {
|
|
@@ -445,7 +446,6 @@ function renderComponent({
|
|
|
445
446
|
return renderComponent({
|
|
446
447
|
component: variantComponent,
|
|
447
448
|
resolveRenderer,
|
|
448
|
-
resolveSystem,
|
|
449
449
|
key: key2,
|
|
450
450
|
parentComponent: component,
|
|
451
451
|
slotName: CANVAS_PERSONALIZE_SLOT,
|
package/dist/index.js
CHANGED
|
@@ -388,7 +388,8 @@ function UniformSlot({
|
|
|
388
388
|
name,
|
|
389
389
|
resolveRenderer,
|
|
390
390
|
children,
|
|
391
|
-
emptyPlaceholder
|
|
391
|
+
emptyPlaceholder,
|
|
392
|
+
wrapperComponent
|
|
392
393
|
}) {
|
|
393
394
|
var _a;
|
|
394
395
|
const { data: parentData, resolveRenderer: parentResolveRenderer } = useUniformCurrentComponent();
|
|
@@ -406,12 +407,10 @@ function UniformSlot({
|
|
|
406
407
|
return null;
|
|
407
408
|
}
|
|
408
409
|
const resolver = resolveRenderer != null ? resolveRenderer : parentResolveRenderer;
|
|
409
|
-
const systemResolver = defaultSystemComponentResolver;
|
|
410
410
|
const finalChildren = slot.map((component, index) => {
|
|
411
411
|
const child = renderComponent({
|
|
412
412
|
component,
|
|
413
413
|
resolveRenderer: resolver,
|
|
414
|
-
resolveSystem: systemResolver,
|
|
415
414
|
key: `inner-${index}`,
|
|
416
415
|
indexInSlot: index,
|
|
417
416
|
slotName: name,
|
|
@@ -422,12 +421,15 @@ function UniformSlot({
|
|
|
422
421
|
const elements = children ? children({ child, component, key: `wrapped-inner-${index}` }) : child;
|
|
423
422
|
return import_react5.default.createElement(import_react5.default.Fragment, { key: index }, elements);
|
|
424
423
|
});
|
|
425
|
-
|
|
424
|
+
if (!wrapperComponent) {
|
|
425
|
+
return import_react5.default.createElement(import_react5.default.Fragment, void 0, finalChildren);
|
|
426
|
+
}
|
|
427
|
+
const Wrapper = wrapperComponent;
|
|
428
|
+
return /* @__PURE__ */ import_react5.default.createElement(Wrapper, { items: finalChildren, slotName: name });
|
|
426
429
|
}
|
|
427
430
|
function renderComponent({
|
|
428
431
|
component,
|
|
429
432
|
resolveRenderer,
|
|
430
|
-
resolveSystem,
|
|
431
433
|
key = 0,
|
|
432
434
|
indexInSlot,
|
|
433
435
|
slotName,
|
|
@@ -437,7 +439,7 @@ function renderComponent({
|
|
|
437
439
|
}) {
|
|
438
440
|
const RenderComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
|
|
439
441
|
if (component.type === import_canvas5.CANVAS_TEST_TYPE) {
|
|
440
|
-
const testComponent =
|
|
442
|
+
const testComponent = defaultSystemComponentResolver.test(
|
|
441
443
|
component,
|
|
442
444
|
key,
|
|
443
445
|
(variantComponent, key2) => {
|
|
@@ -445,7 +447,6 @@ function renderComponent({
|
|
|
445
447
|
return renderComponent({
|
|
446
448
|
component: variantComponent,
|
|
447
449
|
resolveRenderer,
|
|
448
|
-
resolveSystem,
|
|
449
450
|
key: key2,
|
|
450
451
|
parentComponent: component,
|
|
451
452
|
slotName: import_canvas5.CANVAS_TEST_SLOT,
|
|
@@ -469,7 +470,7 @@ function renderComponent({
|
|
|
469
470
|
testComponent
|
|
470
471
|
);
|
|
471
472
|
} else if (component.type === import_canvas5.CANVAS_PERSONALIZE_TYPE) {
|
|
472
|
-
const personalizationComponent =
|
|
473
|
+
const personalizationComponent = defaultSystemComponentResolver.personalization(
|
|
473
474
|
component,
|
|
474
475
|
key,
|
|
475
476
|
(variantComponent, key2) => {
|
|
@@ -477,7 +478,6 @@ function renderComponent({
|
|
|
477
478
|
return renderComponent({
|
|
478
479
|
component: variantComponent,
|
|
479
480
|
resolveRenderer,
|
|
480
|
-
resolveSystem,
|
|
481
481
|
key: key2,
|
|
482
482
|
parentComponent: component,
|
|
483
483
|
slotName: import_canvas5.CANVAS_PERSONALIZE_SLOT,
|
package/dist/index.mjs
CHANGED
|
@@ -356,7 +356,8 @@ function UniformSlot({
|
|
|
356
356
|
name,
|
|
357
357
|
resolveRenderer,
|
|
358
358
|
children,
|
|
359
|
-
emptyPlaceholder
|
|
359
|
+
emptyPlaceholder,
|
|
360
|
+
wrapperComponent
|
|
360
361
|
}) {
|
|
361
362
|
var _a;
|
|
362
363
|
const { data: parentData, resolveRenderer: parentResolveRenderer } = useUniformCurrentComponent();
|
|
@@ -374,12 +375,10 @@ function UniformSlot({
|
|
|
374
375
|
return null;
|
|
375
376
|
}
|
|
376
377
|
const resolver = resolveRenderer != null ? resolveRenderer : parentResolveRenderer;
|
|
377
|
-
const systemResolver = defaultSystemComponentResolver;
|
|
378
378
|
const finalChildren = slot.map((component, index) => {
|
|
379
379
|
const child = renderComponent({
|
|
380
380
|
component,
|
|
381
381
|
resolveRenderer: resolver,
|
|
382
|
-
resolveSystem: systemResolver,
|
|
383
382
|
key: `inner-${index}`,
|
|
384
383
|
indexInSlot: index,
|
|
385
384
|
slotName: name,
|
|
@@ -390,12 +389,15 @@ function UniformSlot({
|
|
|
390
389
|
const elements = children ? children({ child, component, key: `wrapped-inner-${index}` }) : child;
|
|
391
390
|
return React5.createElement(React5.Fragment, { key: index }, elements);
|
|
392
391
|
});
|
|
393
|
-
|
|
392
|
+
if (!wrapperComponent) {
|
|
393
|
+
return React5.createElement(React5.Fragment, void 0, finalChildren);
|
|
394
|
+
}
|
|
395
|
+
const Wrapper = wrapperComponent;
|
|
396
|
+
return /* @__PURE__ */ React5.createElement(Wrapper, { items: finalChildren, slotName: name });
|
|
394
397
|
}
|
|
395
398
|
function renderComponent({
|
|
396
399
|
component,
|
|
397
400
|
resolveRenderer,
|
|
398
|
-
resolveSystem,
|
|
399
401
|
key = 0,
|
|
400
402
|
indexInSlot,
|
|
401
403
|
slotName,
|
|
@@ -405,7 +407,7 @@ function renderComponent({
|
|
|
405
407
|
}) {
|
|
406
408
|
const RenderComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
|
|
407
409
|
if (component.type === CANVAS_TEST_TYPE) {
|
|
408
|
-
const testComponent =
|
|
410
|
+
const testComponent = defaultSystemComponentResolver.test(
|
|
409
411
|
component,
|
|
410
412
|
key,
|
|
411
413
|
(variantComponent, key2) => {
|
|
@@ -413,7 +415,6 @@ function renderComponent({
|
|
|
413
415
|
return renderComponent({
|
|
414
416
|
component: variantComponent,
|
|
415
417
|
resolveRenderer,
|
|
416
|
-
resolveSystem,
|
|
417
418
|
key: key2,
|
|
418
419
|
parentComponent: component,
|
|
419
420
|
slotName: CANVAS_TEST_SLOT,
|
|
@@ -437,7 +438,7 @@ function renderComponent({
|
|
|
437
438
|
testComponent
|
|
438
439
|
);
|
|
439
440
|
} else if (component.type === CANVAS_PERSONALIZE_TYPE) {
|
|
440
|
-
const personalizationComponent =
|
|
441
|
+
const personalizationComponent = defaultSystemComponentResolver.personalization(
|
|
441
442
|
component,
|
|
442
443
|
key,
|
|
443
444
|
(variantComponent, key2) => {
|
|
@@ -445,7 +446,6 @@ function renderComponent({
|
|
|
445
446
|
return renderComponent({
|
|
446
447
|
component: variantComponent,
|
|
447
448
|
resolveRenderer,
|
|
448
|
-
resolveSystem,
|
|
449
449
|
key: key2,
|
|
450
450
|
parentComponent: component,
|
|
451
451
|
slotName: CANVAS_PERSONALIZE_SLOT,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uniformdev/canvas-react",
|
|
3
|
-
"version": "19.
|
|
3
|
+
"version": "19.41.0",
|
|
4
4
|
"description": "React SDK for Uniform Canvas",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"document": "api-extractor run --local"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@uniformdev/canvas": "19.
|
|
28
|
-
"@uniformdev/context": "19.
|
|
29
|
-
"@uniformdev/context-react": "19.
|
|
30
|
-
"@uniformdev/richtext": "19.
|
|
27
|
+
"@uniformdev/canvas": "19.41.0",
|
|
28
|
+
"@uniformdev/context": "19.41.0",
|
|
29
|
+
"@uniformdev/context-react": "19.41.0",
|
|
30
|
+
"@uniformdev/richtext": "19.41.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"react": ">= 16 || 17 || 18",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "cd4f9fd5bbdcba2b7f7235dbf342418a6bbaacb9"
|
|
48
48
|
}
|