@ps1ui/core 0.0.1 → 0.2.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/README.md +49 -0
- package/dist/base.css +56 -0
- package/dist/components/Anchor/Anchor.d.mts +2 -0
- package/dist/components/Anchor/Anchor.mjs.map +1 -1
- package/dist/components/Button/Button.d.mts +7 -1
- package/dist/components/Button/Button.mjs.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.mts +1 -0
- package/dist/components/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.d.mts +3 -0
- package/dist/components/CodeBlock/CodeBlock.mjs.map +1 -1
- package/dist/components/Container/Container.d.mts +8 -0
- package/dist/components/Container/Container.mjs.map +1 -1
- package/dist/components/Details/Details.d.mts +1 -0
- package/dist/components/Details/Details.mjs.map +1 -1
- package/dist/components/Grid/Grid.d.mts +8 -0
- package/dist/components/Grid/Grid.mjs.map +1 -1
- package/dist/components/GridItem/GridItem.d.mts +4 -0
- package/dist/components/GridItem/GridItem.mjs.map +1 -1
- package/dist/components/Heading/Heading.d.mts +4 -0
- package/dist/components/Heading/Heading.mjs.map +1 -1
- package/dist/components/List/List.d.mts +2 -0
- package/dist/components/List/List.mjs.map +1 -1
- package/dist/components/Stack/Stack.d.mts +14 -0
- package/dist/components/Stack/Stack.mjs.map +1 -1
- package/dist/components/Text/Text.d.mts +9 -1
- package/dist/components/Text/Text.mjs.map +1 -1
- package/dist/components/Textarea/Textarea.d.mts +7 -0
- package/dist/components/Textarea/Textarea.mjs +14 -0
- package/dist/components/Textarea/Textarea.mjs.map +1 -0
- package/dist/components.css +85 -159
- package/dist/index.d.mts +2 -1
- package/dist/index.mjs +2 -1
- package/dist/styles.css +206 -7
- package/package.json +4 -4
|
@@ -7,10 +7,24 @@ type StackGap = SpaceScale;
|
|
|
7
7
|
type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
8
8
|
type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
9
9
|
type StackProps = ComponentProps<"div"> & {
|
|
10
|
+
/**
|
|
11
|
+
* Main-axis direction.
|
|
12
|
+
* @default "column"
|
|
13
|
+
*/
|
|
10
14
|
direction?: Responsive<StackDirection>;
|
|
15
|
+
/**
|
|
16
|
+
* Gap between items on the space scale.
|
|
17
|
+
* @default "md"
|
|
18
|
+
*/
|
|
11
19
|
gap?: Responsive<StackGap>;
|
|
20
|
+
/** Cross-axis alignment (align-items). */
|
|
12
21
|
align?: Responsive<StackAlign>;
|
|
22
|
+
/** Main-axis distribution (justify-content). */
|
|
13
23
|
justify?: Responsive<StackJustify>;
|
|
24
|
+
/**
|
|
25
|
+
* Wrap items onto multiple lines instead of overflowing.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
14
28
|
wrap?: Responsive<boolean>;
|
|
15
29
|
};
|
|
16
30
|
declare function Stack({ direction, gap, align, justify, wrap, className, style, ...rest }: StackProps): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.mjs","names":[],"sources":["../../../src/components/Stack/Stack.tsx"],"sourcesContent":["import type { ComponentProps, CSSProperties } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport { resolveResponsive, type Responsive } from \"../../utils/responsive\";\nimport { spaceToVar, type SpaceScale } from \"../../utils/spacing\";\n\nexport type StackDirection = \"row\" | \"column\";\nexport type StackGap = SpaceScale;\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport type StackProps = ComponentProps<\"div\"> & {\n direction?: Responsive<StackDirection>;\n gap?: Responsive<StackGap>;\n align?: Responsive<StackAlign>;\n justify?: Responsive<StackJustify>;\n wrap?: Responsive<boolean>;\n};\n\n// direction values pass straight through — CSS flex-direction accepts\n// `row` / `column` (and `row-reverse` / `column-reverse`, which the union\n// deliberately excludes; add those to the union if the API ever grows).\nconst directionToValue = (v: StackDirection): string => v;\n\n// Flexbox uses `flex-start` / `flex-end` in the box-alignment spec. The\n// StackAlign union exposes the shorter `start` / `end` alias for terseness;\n// the transform remaps them so the CSS variable holds a valid `align-items`\n// value directly.\nconst alignToValue = (v: StackAlign): string => {\n switch (v) {\n case \"start\":\n return \"flex-start\";\n case \"end\":\n return \"flex-end\";\n default:\n return v;\n }\n};\n\n// Same treatment as `alignToValue`, plus expansions for the `space-*`\n// justify-content variants.\nconst justifyToValue = (v: StackJustify): string => {\n switch (v) {\n case \"start\":\n return \"flex-start\";\n case \"end\":\n return \"flex-end\";\n case \"between\":\n return \"space-between\";\n case \"around\":\n return \"space-around\";\n case \"evenly\":\n return \"space-evenly\";\n default:\n return v;\n }\n};\n\n// boolean → CSS flex-wrap keyword.\nconst wrapToValue = (v: boolean): string => (v ? \"wrap\" : \"nowrap\");\n\nexport function Stack({\n direction,\n gap,\n align,\n justify,\n wrap,\n className,\n style,\n ...rest\n}: StackProps) {\n const directionVars = resolveResponsive(direction, \"--_stack-direction\", directionToValue);\n const gapVars = resolveResponsive(gap, \"--_stack-gap\", spaceToVar);\n const alignVars = resolveResponsive(align, \"--_stack-align\", alignToValue);\n const justifyVars = resolveResponsive(justify, \"--_stack-justify\", justifyToValue);\n const wrapVars = resolveResponsive(wrap, \"--_stack-wrap\", wrapToValue);\n\n // Caller style first, internal `--_*` vars win — see Text.tsx. Cast because\n // csstype has no index signature for `--*` keys (React 19 included).\n const mergedStyle: CSSProperties = {\n ...style,\n ...directionVars,\n ...gapVars,\n ...alignVars,\n ...justifyVars,\n ...wrapVars,\n } as CSSProperties;\n\n return <div {...rest} className={cx(\"ps1ui-stack\", className)} style={mergedStyle} />;\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Stack.mjs","names":[],"sources":["../../../src/components/Stack/Stack.tsx"],"sourcesContent":["import type { ComponentProps, CSSProperties } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport { resolveResponsive, type Responsive } from \"../../utils/responsive\";\nimport { spaceToVar, type SpaceScale } from \"../../utils/spacing\";\n\nexport type StackDirection = \"row\" | \"column\";\nexport type StackGap = SpaceScale;\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport type StackProps = ComponentProps<\"div\"> & {\n /**\n * Main-axis direction.\n * @default \"column\"\n */\n direction?: Responsive<StackDirection>;\n /**\n * Gap between items on the space scale.\n * @default \"md\"\n */\n gap?: Responsive<StackGap>;\n /** Cross-axis alignment (align-items). */\n align?: Responsive<StackAlign>;\n /** Main-axis distribution (justify-content). */\n justify?: Responsive<StackJustify>;\n /**\n * Wrap items onto multiple lines instead of overflowing.\n * @default false\n */\n wrap?: Responsive<boolean>;\n};\n\n// direction values pass straight through — CSS flex-direction accepts\n// `row` / `column` (and `row-reverse` / `column-reverse`, which the union\n// deliberately excludes; add those to the union if the API ever grows).\nconst directionToValue = (v: StackDirection): string => v;\n\n// Flexbox uses `flex-start` / `flex-end` in the box-alignment spec. The\n// StackAlign union exposes the shorter `start` / `end` alias for terseness;\n// the transform remaps them so the CSS variable holds a valid `align-items`\n// value directly.\nconst alignToValue = (v: StackAlign): string => {\n switch (v) {\n case \"start\":\n return \"flex-start\";\n case \"end\":\n return \"flex-end\";\n default:\n return v;\n }\n};\n\n// Same treatment as `alignToValue`, plus expansions for the `space-*`\n// justify-content variants.\nconst justifyToValue = (v: StackJustify): string => {\n switch (v) {\n case \"start\":\n return \"flex-start\";\n case \"end\":\n return \"flex-end\";\n case \"between\":\n return \"space-between\";\n case \"around\":\n return \"space-around\";\n case \"evenly\":\n return \"space-evenly\";\n default:\n return v;\n }\n};\n\n// boolean → CSS flex-wrap keyword.\nconst wrapToValue = (v: boolean): string => (v ? \"wrap\" : \"nowrap\");\n\nexport function Stack({\n direction,\n gap,\n align,\n justify,\n wrap,\n className,\n style,\n ...rest\n}: StackProps) {\n const directionVars = resolveResponsive(direction, \"--_stack-direction\", directionToValue);\n const gapVars = resolveResponsive(gap, \"--_stack-gap\", spaceToVar);\n const alignVars = resolveResponsive(align, \"--_stack-align\", alignToValue);\n const justifyVars = resolveResponsive(justify, \"--_stack-justify\", justifyToValue);\n const wrapVars = resolveResponsive(wrap, \"--_stack-wrap\", wrapToValue);\n\n // Caller style first, internal `--_*` vars win — see Text.tsx. Cast because\n // csstype has no index signature for `--*` keys (React 19 included).\n const mergedStyle: CSSProperties = {\n ...style,\n ...directionVars,\n ...gapVars,\n ...alignVars,\n ...justifyVars,\n ...wrapVars,\n } as CSSProperties;\n\n return <div {...rest} className={cx(\"ps1ui-stack\", className)} style={mergedStyle} />;\n}\n"],"mappings":";;;;;AAmCA,MAAM,oBAAoB,MAA8B;AAMxD,MAAM,gBAAgB,MAA0B;CAC9C,QAAQ,GAAR;EACE,KAAK,SACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAIA,MAAM,kBAAkB,MAA4B;CAClD,QAAQ,GAAR;EACE,KAAK,SACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAGA,MAAM,eAAe,MAAwB,IAAI,SAAS;AAE1D,SAAgB,MAAM,EACpB,WACA,KACA,OACA,SACA,MACA,WACA,OACA,GAAG,QACU;CACb,MAAM,gBAAgB,kBAAkB,WAAW,sBAAsB,gBAAgB;CACzF,MAAM,UAAU,kBAAkB,KAAK,gBAAgB,UAAU;CACjE,MAAM,YAAY,kBAAkB,OAAO,kBAAkB,YAAY;CACzE,MAAM,cAAc,kBAAkB,SAAS,oBAAoB,cAAc;CACjF,MAAM,WAAW,kBAAkB,MAAM,iBAAiB,WAAW;CAIrE,MAAM,cAA6B;EACjC,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;CAEA,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAM,WAAW,GAAG,eAAe,SAAS;EAAG,OAAO;CAAc,CAAA;AACtF"}
|
|
@@ -3,14 +3,22 @@ import { FontWeight } from "../../utils/typography.mjs";
|
|
|
3
3
|
import { CSSProperties, ComponentPropsWithoutRef } from "react";
|
|
4
4
|
//#region src/components/Text/Text.d.ts
|
|
5
5
|
type TextElement = "p" | "span" | "div" | "label" | "strong" | "em" | "small";
|
|
6
|
-
type TextVariant = "body" | "muted" | "subtle" | "primary" | "accent";
|
|
6
|
+
type TextVariant = "body" | "muted" | "subtle" | "primary" | "accent" | "danger";
|
|
7
7
|
type TextSize = "xs" | "sm" | "md" | "lg" | "xl";
|
|
8
8
|
type TextWeight = FontWeight;
|
|
9
9
|
type TextOwnProps<E extends TextElement> = {
|
|
10
|
+
/** Element to render. */
|
|
10
11
|
as?: E;
|
|
12
|
+
/** Color variant. */
|
|
11
13
|
variant?: TextVariant;
|
|
14
|
+
/**
|
|
15
|
+
* Font size on the type scale.
|
|
16
|
+
* @default "sm"
|
|
17
|
+
*/
|
|
12
18
|
size?: Responsive<TextSize>;
|
|
19
|
+
/** Font weight. */
|
|
13
20
|
weight?: Responsive<TextWeight>;
|
|
21
|
+
/** Truncate overflowing text with an ellipsis instead of wrapping. */
|
|
14
22
|
truncate?: boolean;
|
|
15
23
|
};
|
|
16
24
|
type TextProps<E extends TextElement = "p"> = TextOwnProps<E> & Omit<ComponentPropsWithoutRef<E>, keyof TextOwnProps<E>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.mjs","names":[],"sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { ComponentPropsWithoutRef, CSSProperties } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport { resolveResponsive, type Responsive } from \"../../utils/responsive\";\nimport { fontSizeToVar, weightToValue, type FontWeight } from \"../../utils/typography\";\n\nexport type TextElement = \"p\" | \"span\" | \"div\" | \"label\" | \"strong\" | \"em\" | \"small\";\n\nexport type TextVariant = \"body\" | \"muted\" | \"subtle\" | \"primary\" | \"accent\";\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n// TextWeight is a re-export of the shared FontWeight scale. Keeping a\n// component-local alias preserves the public type name (backwards compat)\n// while the underlying scale stays single-sourced in utils/typography.ts.\nexport type TextWeight = FontWeight;\n\ntype TextOwnProps<E extends TextElement> = {\n as?: E;\n variant?: TextVariant;\n size?: Responsive<TextSize>;\n weight?: Responsive<TextWeight>;\n truncate?: boolean;\n};\n\n// Deliberate exception to the general \"use ComponentProps<'tag'>\" rule other components follow.\n// With the polymorphic `as` prop, TypeScript cannot narrow the `ref` prop's type against the\n// resolved element E — allowing `ref` here would silently accept mismatched ref types\n// (e.g. a ref typed for HTMLParagraphElement on `<Text as=\"span\" ref={…} />`). Keeping `ref`\n// out of the prop type entirely is safer than a misleading loose type; don't switch this\n// to ComponentProps for consistency with the other components.\nexport type TextProps<E extends TextElement = \"p\"> = TextOwnProps<E> &\n Omit<ComponentPropsWithoutRef<E>, keyof TextOwnProps<E>>;\n\n// Exhaustive over TextElement so adding a tag without classifying it fails to typecheck,\n// instead of silently leaving truncate's inline-block fix un-applied for that tag.\nconst INLINE_TEXT_ELEMENTS: Record<TextElement, boolean> = {\n p: false,\n div: false,\n span: true,\n label: true,\n strong: true,\n em: true,\n small: true,\n};\n\nexport function Text<E extends TextElement = \"p\">({\n as,\n variant = \"body\",\n size,\n weight,\n truncate = false,\n className,\n style,\n ...rest\n}: TextProps<E>) {\n const tag = as ?? \"p\";\n const sizeVars = resolveResponsive(size, \"--_text-size\", fontSizeToVar);\n const weightVars = resolveResponsive(weight, \"--_text-weight\", weightToValue);\n\n const classes = cx(\n \"ps1ui-text\",\n `ps1ui-text--${variant}`,\n truncate && \"ps1ui-text--truncate\",\n truncate && INLINE_TEXT_ELEMENTS[tag] && \"ps1ui-text--truncate-inline\",\n className,\n );\n\n // Caller style first, resolved vars last: `--_*` is the reserved internal\n // prefix and wins on purpose — responsive values are prop-controlled. Cast\n // because csstype has no index signature for `--*` keys (React 19 included).\n const mergedStyle: CSSProperties = {\n ...style,\n ...sizeVars,\n ...weightVars,\n } as CSSProperties;\n\n return createElement(tag, { ...rest, className: classes, style: mergedStyle });\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Text.mjs","names":[],"sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import { createElement } from \"react\";\nimport type { ComponentPropsWithoutRef, CSSProperties } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport { resolveResponsive, type Responsive } from \"../../utils/responsive\";\nimport { fontSizeToVar, weightToValue, type FontWeight } from \"../../utils/typography\";\n\nexport type TextElement = \"p\" | \"span\" | \"div\" | \"label\" | \"strong\" | \"em\" | \"small\";\n\nexport type TextVariant = \"body\" | \"muted\" | \"subtle\" | \"primary\" | \"accent\" | \"danger\";\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n// TextWeight is a re-export of the shared FontWeight scale. Keeping a\n// component-local alias preserves the public type name (backwards compat)\n// while the underlying scale stays single-sourced in utils/typography.ts.\nexport type TextWeight = FontWeight;\n\ntype TextOwnProps<E extends TextElement> = {\n /** Element to render. */\n as?: E;\n /** Color variant. */\n variant?: TextVariant;\n /**\n * Font size on the type scale.\n * @default \"sm\"\n */\n size?: Responsive<TextSize>;\n /** Font weight. */\n weight?: Responsive<TextWeight>;\n /** Truncate overflowing text with an ellipsis instead of wrapping. */\n truncate?: boolean;\n};\n\n// Deliberate exception to the general \"use ComponentProps<'tag'>\" rule other components follow.\n// With the polymorphic `as` prop, TypeScript cannot narrow the `ref` prop's type against the\n// resolved element E — allowing `ref` here would silently accept mismatched ref types\n// (e.g. a ref typed for HTMLParagraphElement on `<Text as=\"span\" ref={…} />`). Keeping `ref`\n// out of the prop type entirely is safer than a misleading loose type; don't switch this\n// to ComponentProps for consistency with the other components.\nexport type TextProps<E extends TextElement = \"p\"> = TextOwnProps<E> &\n Omit<ComponentPropsWithoutRef<E>, keyof TextOwnProps<E>>;\n\n// Exhaustive over TextElement so adding a tag without classifying it fails to typecheck,\n// instead of silently leaving truncate's inline-block fix un-applied for that tag.\nconst INLINE_TEXT_ELEMENTS: Record<TextElement, boolean> = {\n p: false,\n div: false,\n span: true,\n label: true,\n strong: true,\n em: true,\n small: true,\n};\n\nexport function Text<E extends TextElement = \"p\">({\n as,\n variant = \"body\",\n size,\n weight,\n truncate = false,\n className,\n style,\n ...rest\n}: TextProps<E>) {\n const tag = as ?? \"p\";\n const sizeVars = resolveResponsive(size, \"--_text-size\", fontSizeToVar);\n const weightVars = resolveResponsive(weight, \"--_text-weight\", weightToValue);\n\n const classes = cx(\n \"ps1ui-text\",\n `ps1ui-text--${variant}`,\n truncate && \"ps1ui-text--truncate\",\n truncate && INLINE_TEXT_ELEMENTS[tag] && \"ps1ui-text--truncate-inline\",\n className,\n );\n\n // Caller style first, resolved vars last: `--_*` is the reserved internal\n // prefix and wins on purpose — responsive values are prop-controlled. Cast\n // because csstype has no index signature for `--*` keys (React 19 included).\n const mergedStyle: CSSProperties = {\n ...style,\n ...sizeVars,\n ...weightVars,\n } as CSSProperties;\n\n return createElement(tag, { ...rest, className: classes, style: mergedStyle });\n}\n"],"mappings":";;;;;AA0CA,MAAM,uBAAqD;CACzD,GAAG;CACH,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,IAAI;CACJ,OAAO;AACT;AAEA,SAAgB,KAAkC,EAChD,IACA,UAAU,QACV,MACA,QACA,WAAW,OACX,WACA,OACA,GAAG,QACY;CACf,MAAM,MAAM,MAAM;CAClB,MAAM,WAAW,kBAAkB,MAAM,gBAAgB,aAAa;CACtE,MAAM,aAAa,kBAAkB,QAAQ,kBAAkB,aAAa;CAE5E,MAAM,UAAU,GACd,cACA,eAAe,WACf,YAAY,wBACZ,YAAY,qBAAqB,QAAQ,+BACzC,SACF;CAKA,MAAM,cAA6B;EACjC,GAAG;EACH,GAAG;EACH,GAAG;CACL;CAEA,OAAO,cAAc,KAAK;EAAE,GAAG;EAAM,WAAW;EAAS,OAAO;CAAY,CAAC;AAC/E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
//#region src/components/Textarea/Textarea.d.ts
|
|
3
|
+
type TextareaProps = ComponentProps<"textarea">;
|
|
4
|
+
declare function Textarea({ className, ...rest }: TextareaProps): import("react").JSX.Element;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { Textarea, TextareaProps };
|
|
7
|
+
//# sourceMappingURL=Textarea.d.mts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { cx } from "../../utils/cx.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/Textarea/Textarea.tsx
|
|
4
|
+
function Textarea({ className, ...rest }) {
|
|
5
|
+
const classes = cx("ps1ui-textarea", className);
|
|
6
|
+
return /* @__PURE__ */ jsx("textarea", {
|
|
7
|
+
...rest,
|
|
8
|
+
className: classes
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Textarea };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=Textarea.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.mjs","names":[],"sources":["../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport { cx } from \"../../utils/cx\";\n\nexport type TextareaProps = ComponentProps<\"textarea\">;\n\nexport function Textarea({ className, ...rest }: TextareaProps) {\n const classes = cx(\"ps1ui-textarea\", className);\n return <textarea {...rest} className={classes} />;\n}\n"],"mappings":";;;AAKA,SAAgB,SAAS,EAAE,WAAW,GAAG,QAAuB;CAC9D,MAAM,UAAU,GAAG,kBAAkB,SAAS;CAC9C,OAAO,oBAAC,YAAD;EAAU,GAAI;EAAM,WAAW;CAAU,CAAA;AAClD"}
|