@egose/shadcn-theme 0.1.11 → 0.1.12
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/{chunk-OURAYOOM.mjs → chunk-3NMW42UR.mjs} +2 -2
- package/{chunk-AQWVA6TL.js → chunk-BIO4TVNT.js} +3 -3
- package/{chunk-XF75HZNV.js → chunk-NDH24NNQ.js} +2 -2
- package/{chunk-DL6HJ3OB.mjs → chunk-OZF3JOG4.mjs} +2 -2
- package/chunk-VYBFV2QD.js +31 -0
- package/chunk-WJKG5MUH.mjs +30 -0
- package/components/form/date-picker.js +3 -3
- package/components/form/date-picker.mjs +2 -2
- package/components/form/date-range-picker.js +2 -2
- package/components/form/date-range-picker.mjs +1 -1
- package/components/form/hook-checkbox.d.mts +7 -5
- package/components/form/hook-checkbox.d.ts +7 -5
- package/components/form/hook-checkbox.js +11 -3
- package/components/form/hook-checkbox.js.map +1 -1
- package/components/form/hook-checkbox.mjs +11 -3
- package/components/form/hook-checkbox.mjs.map +1 -1
- package/components/form/hook-date-picker.js +3 -3
- package/components/form/hook-date-picker.mjs +2 -2
- package/components/form/hook-native-select.d.mts +7 -4
- package/components/form/hook-native-select.d.ts +7 -4
- package/components/form/hook-native-select.js +13 -6
- package/components/form/hook-native-select.js.map +1 -1
- package/components/form/hook-native-select.mjs +13 -6
- package/components/form/hook-native-select.mjs.map +1 -1
- package/components/form/hook-text-input.d.mts +7 -4
- package/components/form/hook-text-input.d.ts +7 -4
- package/components/form/hook-text-input.js +26 -6
- package/components/form/hook-text-input.js.map +1 -1
- package/components/form/hook-text-input.mjs +26 -6
- package/components/form/hook-text-input.mjs.map +1 -1
- package/components/form/hook-textarea.d.mts +7 -4
- package/components/form/hook-textarea.d.ts +7 -4
- package/components/form/hook-textarea.js +20 -6
- package/components/form/hook-textarea.js.map +1 -1
- package/components/form/hook-textarea.mjs +20 -6
- package/components/form/hook-textarea.mjs.map +1 -1
- package/components/form/hook-time-input.d.mts +7 -5
- package/components/form/hook-time-input.d.ts +7 -5
- package/components/form/hook-time-input.js +24 -3
- package/components/form/hook-time-input.js.map +1 -1
- package/components/form/hook-time-input.mjs +24 -3
- package/components/form/hook-time-input.mjs.map +1 -1
- package/components/form/types.d.mts +12 -2
- package/components/form/types.d.ts +12 -2
- package/components/form/types.js +12 -1
- package/components/form/types.js.map +1 -1
- package/components/form/types.mjs +11 -0
- package/components/ui/calendar.js +2 -2
- package/components/ui/calendar.mjs +1 -1
- package/components/ui/multi-select.d.mts +1 -1
- package/components/ui/multi-select.d.ts +1 -1
- package/package.json +13 -13
|
@@ -3,6 +3,11 @@ import {
|
|
|
3
3
|
FormTimeInput
|
|
4
4
|
} from "../../chunk-SVZMGPZC.mjs";
|
|
5
5
|
import "../../chunk-S7HB64F7.mjs";
|
|
6
|
+
import {
|
|
7
|
+
getValidationRuleValue,
|
|
8
|
+
isValidationRuleEnabled,
|
|
9
|
+
mergeHookFormRules
|
|
10
|
+
} from "../../chunk-WJKG5MUH.mjs";
|
|
6
11
|
import "../../chunk-OXUVPYJE.mjs";
|
|
7
12
|
import {
|
|
8
13
|
FormError
|
|
@@ -30,7 +35,12 @@ function HookFormTimeInput(_a) {
|
|
|
30
35
|
label,
|
|
31
36
|
error,
|
|
32
37
|
classNames,
|
|
33
|
-
disabled
|
|
38
|
+
disabled,
|
|
39
|
+
required,
|
|
40
|
+
min,
|
|
41
|
+
max,
|
|
42
|
+
maxLength,
|
|
43
|
+
minLength
|
|
34
44
|
} = _b, rest = __objRest(_b, [
|
|
35
45
|
"id",
|
|
36
46
|
"name",
|
|
@@ -38,7 +48,12 @@ function HookFormTimeInput(_a) {
|
|
|
38
48
|
"label",
|
|
39
49
|
"error",
|
|
40
50
|
"classNames",
|
|
41
|
-
"disabled"
|
|
51
|
+
"disabled",
|
|
52
|
+
"required",
|
|
53
|
+
"min",
|
|
54
|
+
"max",
|
|
55
|
+
"maxLength",
|
|
56
|
+
"minLength"
|
|
42
57
|
]);
|
|
43
58
|
const methods = useFormContext();
|
|
44
59
|
if (!methods) return null;
|
|
@@ -49,12 +64,13 @@ function HookFormTimeInput(_a) {
|
|
|
49
64
|
const fieldError = _get(errors, name);
|
|
50
65
|
const errorMessage = error != null ? error : fieldError == null ? void 0 : fieldError.message;
|
|
51
66
|
const showError = !!fieldError && !disabled;
|
|
67
|
+
const mergedRules = mergeHookFormRules(rules, { required, min, max, maxLength, minLength });
|
|
52
68
|
return /* @__PURE__ */ React.createElement("div", { className: cn("$hook-form-time-input", classNames == null ? void 0 : classNames.wrapper) }, /* @__PURE__ */ React.createElement(
|
|
53
69
|
Controller,
|
|
54
70
|
{
|
|
55
71
|
name,
|
|
56
72
|
control,
|
|
57
|
-
rules,
|
|
73
|
+
rules: mergedRules,
|
|
58
74
|
render: ({ field: { onChange, onBlur, value } }) => /* @__PURE__ */ React.createElement(
|
|
59
75
|
FormTimeInput,
|
|
60
76
|
__spreadProps(__spreadValues({}, rest), {
|
|
@@ -64,6 +80,11 @@ function HookFormTimeInput(_a) {
|
|
|
64
80
|
onChange,
|
|
65
81
|
onBlur,
|
|
66
82
|
disabled,
|
|
83
|
+
required: isValidationRuleEnabled(mergedRules == null ? void 0 : mergedRules.required),
|
|
84
|
+
min: getValidationRuleValue(mergedRules == null ? void 0 : mergedRules.min),
|
|
85
|
+
max: getValidationRuleValue(mergedRules == null ? void 0 : mergedRules.max),
|
|
86
|
+
maxLength: getValidationRuleValue(mergedRules == null ? void 0 : mergedRules.maxLength),
|
|
87
|
+
minLength: getValidationRuleValue(mergedRules == null ? void 0 : mergedRules.minLength),
|
|
67
88
|
classNames: {
|
|
68
89
|
label: cn(classNames == null ? void 0 : classNames.label, {
|
|
69
90
|
"text-danger": showError
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/form/hook-time-input.tsx"],"sourcesContent":["\"use client\";\nimport React from 'react';\nimport _get from 'lodash-es/get';\nimport { Controller, FieldValues,
|
|
1
|
+
{"version":3,"sources":["../../../components/form/hook-time-input.tsx"],"sourcesContent":["\"use client\";\nimport React from 'react';\nimport _get from 'lodash-es/get';\nimport { Controller, FieldValues, Path, useFormContext } from 'react-hook-form';\nimport { cn } from '../../utils/ui';\nimport { FormError } from './error';\nimport { FormTimeInput } from './time-input';\nimport type { FormTimeInputProps } from './time-input';\nimport { getValidationRuleValue, isValidationRuleEnabled, mergeHookFormRules } from './types';\nimport type { HookFormRules, HookFormValidationAttributes } from './types';\n\ntype HookFormTimeInputValidationAttributes = Pick<\n HookFormValidationAttributes,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength'\n>;\n\ntype HookFormTimeInputProps<T extends FieldValues> = Omit<\n FormTimeInputProps,\n 'name' | 'inputProps' | keyof HookFormTimeInputValidationAttributes\n> & {\n name: Path<T>;\n rules?: HookFormRules<T>;\n error?: string;\n} & HookFormTimeInputValidationAttributes;\n\nexport function HookFormTimeInput<T extends FieldValues>({\n id,\n name,\n rules,\n label,\n error,\n classNames,\n disabled,\n required,\n min,\n max,\n maxLength,\n minLength,\n ...rest\n}: HookFormTimeInputProps<T>) {\n const methods = useFormContext<T>();\n if (!methods) return null;\n\n const {\n control,\n formState: { errors },\n } = methods;\n\n const fieldError = _get(errors, name);\n const errorMessage = error ?? (fieldError?.message as string);\n const showError = !!fieldError && !disabled;\n const mergedRules = mergeHookFormRules(rules, { required, min, max, maxLength, minLength });\n\n return (\n <div className={cn('$hook-form-time-input', classNames?.wrapper)}>\n <Controller\n name={name}\n control={control}\n rules={mergedRules}\n render={({ field: { onChange, onBlur, value } }) => (\n <FormTimeInput\n {...rest}\n name={name}\n label={label}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n required={isValidationRuleEnabled(mergedRules?.required)}\n min={getValidationRuleValue(mergedRules?.min)}\n max={getValidationRuleValue(mergedRules?.max)}\n maxLength={getValidationRuleValue(mergedRules?.maxLength)}\n minLength={getValidationRuleValue(mergedRules?.minLength)}\n classNames={{\n label: cn(classNames?.label, {\n 'text-danger': showError,\n }),\n input: cn(classNames?.input, {\n 'ring-danger text-danger': showError,\n }),\n }}\n />\n )}\n />\n {showError && <FormError field={name} className=\"mt-1\" message={errorMessage} />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,YAA+B,sBAAsB;AAsBvD,SAAS,kBAAyC,IAc3B;AAd2B,eACvD;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EArCF,IAyByD,IAapD,iBAboD,IAapD;AAAA,IAZH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,UAAU,eAAkB;AAClC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM;AAAA,IACJ;AAAA,IACA,WAAW,EAAE,OAAO;AAAA,EACtB,IAAI;AAEJ,QAAM,aAAa,KAAK,QAAQ,IAAI;AACpC,QAAM,eAAe,wBAAU,yCAAY;AAC3C,QAAM,YAAY,CAAC,CAAC,cAAc,CAAC;AACnC,QAAM,cAAc,mBAAmB,OAAO,EAAE,UAAU,KAAK,KAAK,WAAW,UAAU,CAAC;AAE1F,SACE,oCAAC,SAAI,WAAW,GAAG,yBAAyB,yCAAY,OAAO,KAC7D;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,QAAQ,MAAM,EAAE,MAC5C;AAAA,QAAC;AAAA,yCACK,OADL;AAAA,UAEC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,wBAAwB,2CAAa,QAAQ;AAAA,UACvD,KAAK,uBAAuB,2CAAa,GAAG;AAAA,UAC5C,KAAK,uBAAuB,2CAAa,GAAG;AAAA,UAC5C,WAAW,uBAAuB,2CAAa,SAAS;AAAA,UACxD,WAAW,uBAAuB,2CAAa,SAAS;AAAA,UACxD,YAAY;AAAA,YACV,OAAO,GAAG,yCAAY,OAAO;AAAA,cAC3B,eAAe;AAAA,YACjB,CAAC;AAAA,YACD,OAAO,GAAG,yCAAY,OAAO;AAAA,cAC3B,2BAA2B;AAAA,YAC7B,CAAC;AAAA,UACH;AAAA;AAAA,MACF;AAAA;AAAA,EAEJ,GACC,aAAa,oCAAC,aAAU,OAAO,MAAM,WAAU,QAAO,SAAS,cAAc,CAChF;AAEJ;","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
1
|
+
import { Message, ValidationRule, FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Subset of `react-hook-form`'s `RegisterOptions` that is safe to pass to the
|
|
@@ -7,5 +7,15 @@ import { FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
|
7
7
|
* and `disabled`, since those are handled by the form-field wrappers.
|
|
8
8
|
*/
|
|
9
9
|
type HookFormRules<T extends FieldValues> = Omit<RegisterOptions<T, Path<T>>, 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'>;
|
|
10
|
+
interface HookFormValidationAttributes {
|
|
11
|
+
required?: Message | ValidationRule<boolean>;
|
|
12
|
+
min?: ValidationRule<number | string>;
|
|
13
|
+
max?: ValidationRule<number | string>;
|
|
14
|
+
maxLength?: ValidationRule<number>;
|
|
15
|
+
minLength?: ValidationRule<number>;
|
|
16
|
+
}
|
|
17
|
+
declare function mergeHookFormRules<T extends FieldValues>(rules: HookFormRules<T> | undefined, overrides: Partial<HookFormValidationAttributes>): HookFormRules<T> | undefined;
|
|
18
|
+
declare function isValidationRuleEnabled(rule: HookFormValidationAttributes['required']): boolean;
|
|
19
|
+
declare function getValidationRuleValue<T extends number | string>(rule?: ValidationRule<T>): T | undefined;
|
|
10
20
|
|
|
11
|
-
export type
|
|
21
|
+
export { type HookFormRules, type HookFormValidationAttributes, getValidationRuleValue, isValidationRuleEnabled, mergeHookFormRules };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
1
|
+
import { Message, ValidationRule, FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Subset of `react-hook-form`'s `RegisterOptions` that is safe to pass to the
|
|
@@ -7,5 +7,15 @@ import { FieldValues, RegisterOptions, Path } from 'react-hook-form';
|
|
|
7
7
|
* and `disabled`, since those are handled by the form-field wrappers.
|
|
8
8
|
*/
|
|
9
9
|
type HookFormRules<T extends FieldValues> = Omit<RegisterOptions<T, Path<T>>, 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'>;
|
|
10
|
+
interface HookFormValidationAttributes {
|
|
11
|
+
required?: Message | ValidationRule<boolean>;
|
|
12
|
+
min?: ValidationRule<number | string>;
|
|
13
|
+
max?: ValidationRule<number | string>;
|
|
14
|
+
maxLength?: ValidationRule<number>;
|
|
15
|
+
minLength?: ValidationRule<number>;
|
|
16
|
+
}
|
|
17
|
+
declare function mergeHookFormRules<T extends FieldValues>(rules: HookFormRules<T> | undefined, overrides: Partial<HookFormValidationAttributes>): HookFormRules<T> | undefined;
|
|
18
|
+
declare function isValidationRuleEnabled(rule: HookFormValidationAttributes['required']): boolean;
|
|
19
|
+
declare function getValidationRuleValue<T extends number | string>(rule?: ValidationRule<T>): T | undefined;
|
|
10
20
|
|
|
11
|
-
export type
|
|
21
|
+
export { type HookFormRules, type HookFormValidationAttributes, getValidationRuleValue, isValidationRuleEnabled, mergeHookFormRules };
|
package/components/form/types.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkVYBFV2QDjs = require('../../chunk-VYBFV2QD.js');
|
|
8
|
+
require('../../chunk-2NMEKWO5.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.getValidationRuleValue = _chunkVYBFV2QDjs.getValidationRuleValue; exports.isValidationRuleEnabled = _chunkVYBFV2QDjs.isValidationRuleEnabled; exports.mergeHookFormRules = _chunkVYBFV2QDjs.mergeHookFormRules;
|
|
3
14
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/components/form/types.js"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/components/form/types.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACF,0DAAgC;AAChC,mCAAgC;AAChC;AACE;AACA;AACA;AACF,uNAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/components/form/types.js"}
|
|
@@ -1,2 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
getValidationRuleValue,
|
|
4
|
+
isValidationRuleEnabled,
|
|
5
|
+
mergeHookFormRules
|
|
6
|
+
} from "../../chunk-WJKG5MUH.mjs";
|
|
7
|
+
import "../../chunk-YOSPWY5K.mjs";
|
|
8
|
+
export {
|
|
9
|
+
getValidationRuleValue,
|
|
10
|
+
isValidationRuleEnabled,
|
|
11
|
+
mergeHookFormRules
|
|
12
|
+
};
|
|
2
13
|
//# sourceMappingURL=types.mjs.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkNDH24NNQjs = require('../../chunk-NDH24NNQ.js');
|
|
7
7
|
require('../../chunk-IEPLSUBR.js');
|
|
8
8
|
require('../../chunk-5CUM73VT.js');
|
|
9
9
|
require('../../chunk-NBQEF4JD.js');
|
|
@@ -11,5 +11,5 @@ require('../../chunk-2NMEKWO5.js');
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.Calendar =
|
|
14
|
+
exports.Calendar = _chunkNDH24NNQjs.Calendar; exports.CalendarDayButton = _chunkNDH24NNQjs.CalendarDayButton;
|
|
15
15
|
//# sourceMappingURL=calendar.js.map
|
|
@@ -20,7 +20,7 @@ declare const MultiSelectorInput: React.ForwardRefExoticComponent<Omit<Omit<Pick
|
|
|
20
20
|
ref?: React.Ref<HTMLInputElement>;
|
|
21
21
|
} & {
|
|
22
22
|
asChild?: boolean;
|
|
23
|
-
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "
|
|
23
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "value" | "onChange" | "type"> & {
|
|
24
24
|
value?: string;
|
|
25
25
|
onValueChange?: (search: string) => void;
|
|
26
26
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -20,7 +20,7 @@ declare const MultiSelectorInput: React.ForwardRefExoticComponent<Omit<Omit<Pick
|
|
|
20
20
|
ref?: React.Ref<HTMLInputElement>;
|
|
21
21
|
} & {
|
|
22
22
|
asChild?: boolean;
|
|
23
|
-
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "
|
|
23
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "value" | "onChange" | "type"> & {
|
|
24
24
|
value?: string;
|
|
25
25
|
onValueChange?: (search: string) => void;
|
|
26
26
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.
|
|
2
|
+
"version": "0.1.12",
|
|
3
3
|
"description": "shadcn UI theme for React",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"shadcn",
|
|
@@ -35,25 +35,25 @@
|
|
|
35
35
|
"directory": "packages/react"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@base-ui/react": "^1.
|
|
39
|
-
"@hookform/resolvers": "^5.
|
|
40
|
-
"@tabler/icons-react": "^3.
|
|
38
|
+
"@base-ui/react": "^1.6.0",
|
|
39
|
+
"@hookform/resolvers": "^5.4.0",
|
|
40
|
+
"@tabler/icons-react": "^3.44.0",
|
|
41
41
|
"class-variance-authority": "^0.7.1",
|
|
42
42
|
"clsx": "^2.1.1",
|
|
43
43
|
"cmdk": "1.1.1",
|
|
44
|
-
"date-fns": "^4.
|
|
44
|
+
"date-fns": "^4.4.0",
|
|
45
45
|
"embla-carousel-react": "^8.5.2",
|
|
46
46
|
"input-otp": "^1.4.2",
|
|
47
|
-
"lodash-es": "^4.
|
|
48
|
-
"lucide-react": "^
|
|
47
|
+
"lodash-es": "^4.18.1",
|
|
48
|
+
"lucide-react": "^1.23.0",
|
|
49
49
|
"next-themes": "^0.4.4",
|
|
50
|
-
"radix-ui": "^1.
|
|
51
|
-
"react-day-picker": "
|
|
52
|
-
"react-resizable-panels": "^4.
|
|
53
|
-
"tailwind-merge": "^3.
|
|
54
|
-
"valtio": "^2.3.
|
|
50
|
+
"radix-ui": "^1.6.1",
|
|
51
|
+
"react-day-picker": "10.0.1",
|
|
52
|
+
"react-resizable-panels": "^4.12.1",
|
|
53
|
+
"tailwind-merge": "^3.6.0",
|
|
54
|
+
"valtio": "^2.3.2",
|
|
55
55
|
"vaul": "^1.1.2",
|
|
56
|
-
"zod": "^4.3
|
|
56
|
+
"zod": "^4.4.3"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"react": "^18.3.1 || ^19.0.0",
|