@divayth/brick-ui 0.0.0-stage → 0.0.2
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 +43 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/sizes.d.ts +2 -0
- package/dist/lib/sizes.d.ts.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/ui/Accordion/Accordion.d.ts +8 -0
- package/dist/ui/Accordion/Accordion.d.ts.map +1 -0
- package/dist/ui/Accordion/Accordion.js +42 -0
- package/dist/ui/Accordion/Accordion.module.css.js +13 -0
- package/dist/ui/Alert/Alert.d.ts +8 -0
- package/dist/ui/Alert/Alert.d.ts.map +1 -0
- package/dist/ui/Alert/Alert.js +38 -0
- package/dist/ui/Button/Button.d.ts +21 -0
- package/dist/ui/Button/Button.d.ts.map +1 -0
- package/dist/ui/Button/Button.js +64 -0
- package/dist/ui/Button/Button.module.css.js +33 -0
- package/dist/ui/Card/Card.d.ts +4 -0
- package/dist/ui/Card/Card.d.ts.map +1 -0
- package/dist/ui/Card/Card.js +20 -0
- package/dist/ui/Card/Card.module.css.js +9 -0
- package/dist/ui/Chip/Chip.d.ts +14 -0
- package/dist/ui/Chip/Chip.d.ts.map +1 -0
- package/dist/ui/Chip/Chip.js +45 -0
- package/dist/ui/Chip/Chip.module.css.js +23 -0
- package/dist/ui/CircularLoading/CircularLoading.d.ts +8 -0
- package/dist/ui/CircularLoading/CircularLoading.d.ts.map +1 -0
- package/dist/ui/CircularLoading/CircularLoading.js +30 -0
- package/dist/ui/CircularLoading/CircularLoading.module.css.js +9 -0
- package/dist/ui/Flex/Flex.d.ts +10 -0
- package/dist/ui/Flex/Flex.d.ts.map +1 -0
- package/dist/ui/Flex/Flex.js +29 -0
- package/dist/ui/Flex/constants.d.ts +30 -0
- package/dist/ui/Flex/constants.d.ts.map +1 -0
- package/dist/ui/Flex/constants.js +27 -0
- package/dist/ui/Grid/Grid.d.ts +6 -0
- package/dist/ui/Grid/Grid.d.ts.map +1 -0
- package/dist/ui/Grid/Grid.js +9 -0
- package/dist/ui/Grid/Grid.module.css.js +11 -0
- package/dist/ui/Grid/Grid.types.d.ts +21 -0
- package/dist/ui/Grid/Grid.types.d.ts.map +1 -0
- package/dist/ui/Grid/GridItem.d.ts +3 -0
- package/dist/ui/Grid/GridItem.d.ts.map +1 -0
- package/dist/ui/Grid/GridItem.js +48 -0
- package/dist/ui/Grid/GridRoot.d.ts +3 -0
- package/dist/ui/Grid/GridRoot.d.ts.map +1 -0
- package/dist/ui/Grid/GridRoot.js +71 -0
- package/dist/ui/Grid/utils.d.ts +6 -0
- package/dist/ui/Grid/utils.d.ts.map +1 -0
- package/dist/ui/Grid/utils.js +21 -0
- package/dist/ui/IconButton/IconButton.d.ts +19 -0
- package/dist/ui/IconButton/IconButton.d.ts.map +1 -0
- package/dist/ui/IconButton/IconButton.js +56 -0
- package/dist/ui/IconButton/IconButton.module.css.js +29 -0
- package/dist/ui/ProgressBar/ProgressBar.d.ts +12 -0
- package/dist/ui/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/ui/ProgressBar/ProgressBar.js +34 -0
- package/dist/ui/Skeleton/Skeleton.d.ts +8 -0
- package/dist/ui/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/ui/Skeleton/Skeleton.js +14 -0
- package/dist/ui/Skeleton/Skeleton.module.css.js +7 -0
- package/dist/ui/Text/Text.d.ts +30 -0
- package/dist/ui/Text/Text.d.ts.map +1 -0
- package/dist/ui/Text/Text.js +39 -0
- package/dist/ui/index.d.ts +13 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/package.json +53 -4
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Size } from "../../lib/sizes.js";
|
|
2
|
+
export declare const ALIGN_ITEMS_SX: {
|
|
3
|
+
readonly stretch: "items-stretch";
|
|
4
|
+
readonly center: "items-center";
|
|
5
|
+
readonly start: "items-start";
|
|
6
|
+
readonly end: "items-end";
|
|
7
|
+
};
|
|
8
|
+
export declare const JUSTIFY_CONTENT_SX: {
|
|
9
|
+
readonly start: "justify-start";
|
|
10
|
+
readonly center: "justify-center";
|
|
11
|
+
readonly end: "justify-end";
|
|
12
|
+
readonly between: "justify-between";
|
|
13
|
+
};
|
|
14
|
+
export declare const DIRECTION_SX: {
|
|
15
|
+
readonly row: "flex-row";
|
|
16
|
+
readonly col: "flex-col";
|
|
17
|
+
};
|
|
18
|
+
export declare const GAP_SX: {
|
|
19
|
+
readonly none: "gap-0";
|
|
20
|
+
readonly xs: "gap-1";
|
|
21
|
+
readonly sm: "gap-2";
|
|
22
|
+
readonly md: "gap-4";
|
|
23
|
+
readonly lg: "gap-6";
|
|
24
|
+
readonly xl: "gap-8";
|
|
25
|
+
};
|
|
26
|
+
export type AlignItemsType = keyof typeof ALIGN_ITEMS_SX;
|
|
27
|
+
export type JustifayContentType = keyof typeof JUSTIFY_CONTENT_SX;
|
|
28
|
+
export type DirectionType = keyof typeof DIRECTION_SX;
|
|
29
|
+
export type GapType = Size;
|
|
30
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/ui/Flex/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,cAAc,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAEtD,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const t = {
|
|
2
|
+
stretch: "items-stretch",
|
|
3
|
+
center: "items-center",
|
|
4
|
+
start: "items-start",
|
|
5
|
+
end: "items-end"
|
|
6
|
+
}, e = {
|
|
7
|
+
start: "justify-start",
|
|
8
|
+
center: "justify-center",
|
|
9
|
+
end: "justify-end",
|
|
10
|
+
between: "justify-between"
|
|
11
|
+
}, s = {
|
|
12
|
+
row: "flex-row",
|
|
13
|
+
col: "flex-col"
|
|
14
|
+
}, n = {
|
|
15
|
+
none: "gap-0",
|
|
16
|
+
xs: "gap-1",
|
|
17
|
+
sm: "gap-2",
|
|
18
|
+
md: "gap-4",
|
|
19
|
+
lg: "gap-6",
|
|
20
|
+
xl: "gap-8"
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
t as ALIGN_ITEMS_SX,
|
|
24
|
+
s as DIRECTION_SX,
|
|
25
|
+
n as GAP_SX,
|
|
26
|
+
e as JUSTIFY_CONTENT_SX
|
|
27
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { GridGap, GridItemProps, GridItemSize, GridRootProps, ResponsiveValue, } from "./Grid.types.js";
|
|
2
|
+
export declare const Grid: {
|
|
3
|
+
Root: ({ columns, gap, rowGap, columnGap, align, justify, className, style, children, ...props }: import("./Grid.types.js").GridRootProps) => import("react").JSX.Element;
|
|
4
|
+
Item: ({ size, offset, order, align, className, style, children, ...props }: import("./Grid.types.js").GridItemProps) => import("react").JSX.Element;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=Grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../src/ui/Grid/Grid.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,OAAO,EACP,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,IAAI;;;CAGhB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
import type { AlignItemsType, JustifayContentType } from "../Flex/constants.js";
|
|
3
|
+
import type { Size } from "../../lib/sizes.js";
|
|
4
|
+
export type GridGap = Size | "none";
|
|
5
|
+
export type ResponsiveValue<T> = T | Partial<Record<Size, T>>;
|
|
6
|
+
export type GridItemSize = ResponsiveValue<number> | "fit" | "grow";
|
|
7
|
+
export interface GridRootProps extends ComponentProps<"div"> {
|
|
8
|
+
columns?: number;
|
|
9
|
+
gap?: ResponsiveValue<GridGap>;
|
|
10
|
+
rowGap?: ResponsiveValue<GridGap>;
|
|
11
|
+
columnGap?: ResponsiveValue<GridGap>;
|
|
12
|
+
align?: AlignItemsType;
|
|
13
|
+
justify?: JustifayContentType;
|
|
14
|
+
}
|
|
15
|
+
export interface GridItemProps extends ComponentProps<"div"> {
|
|
16
|
+
size?: GridItemSize;
|
|
17
|
+
offset?: ResponsiveValue<number>;
|
|
18
|
+
order?: ResponsiveValue<number>;
|
|
19
|
+
align?: ResponsiveValue<AlignItemsType | "auto">;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Grid.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.types.d.ts","sourceRoot":"","sources":["../../../src/ui/Grid/Grid.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,eAAe,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridItem.d.ts","sourceRoot":"","sources":["../../../src/ui/Grid/GridItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAarD,eAAO,MAAM,QAAQ,GAAI,sEAStB,aAAa,gCAyBf,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as g } from "react/jsx-runtime";
|
|
2
|
+
import p from "clsx";
|
|
3
|
+
import { getResponsiveCssVariables as e } from "./utils.js";
|
|
4
|
+
import o from "./Grid.module.css.js";
|
|
5
|
+
const u = {
|
|
6
|
+
auto: "auto",
|
|
7
|
+
stretch: "stretch",
|
|
8
|
+
center: "center",
|
|
9
|
+
start: "flex-start",
|
|
10
|
+
end: "flex-end"
|
|
11
|
+
}, G = ({
|
|
12
|
+
size: r = "grow",
|
|
13
|
+
offset: s = 0,
|
|
14
|
+
order: m = 0,
|
|
15
|
+
align: a = "auto",
|
|
16
|
+
className: c,
|
|
17
|
+
style: d,
|
|
18
|
+
children: f,
|
|
19
|
+
...n
|
|
20
|
+
}) => {
|
|
21
|
+
const i = r === "fit", l = i ? 1 : r;
|
|
22
|
+
return /* @__PURE__ */ g(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
...n,
|
|
26
|
+
className: p(o.item, i && o.fit, c),
|
|
27
|
+
style: {
|
|
28
|
+
...e("grid-item-size", l),
|
|
29
|
+
...e(
|
|
30
|
+
"grid-item-offset",
|
|
31
|
+
s,
|
|
32
|
+
(t) => t === 0 ? "auto" : t + 1
|
|
33
|
+
),
|
|
34
|
+
...e("grid-item-order", m),
|
|
35
|
+
...e(
|
|
36
|
+
"grid-item-align",
|
|
37
|
+
a,
|
|
38
|
+
(t) => u[t]
|
|
39
|
+
),
|
|
40
|
+
...d
|
|
41
|
+
},
|
|
42
|
+
children: f
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
export {
|
|
47
|
+
G as GridItem
|
|
48
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridRoot.d.ts","sourceRoot":"","sources":["../../../src/ui/Grid/GridRoot.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAgFzB,eAAO,MAAM,QAAQ,GAAI,2FAWtB,aAAa,gCA+Bf,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as h } from "react/jsx-runtime";
|
|
2
|
+
import { Children as w, isValidElement as C, cloneElement as S } from "react";
|
|
3
|
+
import b from "clsx";
|
|
4
|
+
import { getResponsiveCssVariables as p, GRID_GAP_VALUES as d } from "./utils.js";
|
|
5
|
+
import { GridItem as z } from "./GridItem.js";
|
|
6
|
+
import I from "./Grid.module.css.js";
|
|
7
|
+
const v = {
|
|
8
|
+
stretch: "stretch",
|
|
9
|
+
center: "center",
|
|
10
|
+
start: "flex-start",
|
|
11
|
+
end: "flex-end"
|
|
12
|
+
}, y = {
|
|
13
|
+
start: "flex-start",
|
|
14
|
+
center: "center",
|
|
15
|
+
end: "flex-end",
|
|
16
|
+
between: "space-between"
|
|
17
|
+
}, g = (t) => t === "grow" || t === "fit" ? 0 : typeof t == "number" ? t : t?.md ?? 1, G = (t, a) => {
|
|
18
|
+
const m = w.toArray(t), n = m.filter(
|
|
19
|
+
(e) => C(e) && e.type === z
|
|
20
|
+
);
|
|
21
|
+
if (!n.some(({ props: e }) => e.size === "fit" || e.size === "grow" ? !0 : !Number.isInteger(g(e.size))))
|
|
22
|
+
return { children: t, templateColumns: void 0 };
|
|
23
|
+
const s = n.filter(
|
|
24
|
+
({ props: e }) => e.size === "grow"
|
|
25
|
+
).length, u = n.reduce(
|
|
26
|
+
(e, { props: f }) => e + g(f.size),
|
|
27
|
+
0
|
|
28
|
+
), o = Math.max(s, a - u), c = s > 0 ? o / s : 0, r = [], l = m.map((e) => !C(e) || e.type !== z ? e : (e.props.size === "fit" ? r.push("max-content") : e.props.size === "grow" ? r.push(`minmax(0, ${c}fr)`) : r.push(`minmax(0, ${g(e.props.size)}fr)`), S(e, { size: 1 })));
|
|
29
|
+
return s === 0 && o > 0 && r.push(`minmax(0, ${o}fr)`), {
|
|
30
|
+
children: l,
|
|
31
|
+
templateColumns: r.join(" ")
|
|
32
|
+
};
|
|
33
|
+
}, j = ({
|
|
34
|
+
columns: t = 12,
|
|
35
|
+
gap: a = "sm",
|
|
36
|
+
rowGap: m,
|
|
37
|
+
columnGap: n,
|
|
38
|
+
align: x = "stretch",
|
|
39
|
+
justify: s = "start",
|
|
40
|
+
className: u,
|
|
41
|
+
style: o,
|
|
42
|
+
children: c,
|
|
43
|
+
...r
|
|
44
|
+
}) => {
|
|
45
|
+
const l = Math.max(1, t), e = G(c, l), f = {
|
|
46
|
+
"--grid-columns": l,
|
|
47
|
+
"--grid-align": v[x],
|
|
48
|
+
"--grid-justify": y[s],
|
|
49
|
+
gridTemplateColumns: e.templateColumns,
|
|
50
|
+
...p(
|
|
51
|
+
"grid-gap",
|
|
52
|
+
a,
|
|
53
|
+
(i) => d[i]
|
|
54
|
+
),
|
|
55
|
+
...p(
|
|
56
|
+
"grid-row-gap",
|
|
57
|
+
m,
|
|
58
|
+
(i) => d[i]
|
|
59
|
+
),
|
|
60
|
+
...p(
|
|
61
|
+
"grid-column-gap",
|
|
62
|
+
n,
|
|
63
|
+
(i) => d[i]
|
|
64
|
+
),
|
|
65
|
+
...o
|
|
66
|
+
};
|
|
67
|
+
return /* @__PURE__ */ h("div", { ...r, className: b(I.root, u), style: f, children: e.children });
|
|
68
|
+
};
|
|
69
|
+
export {
|
|
70
|
+
j as GridRoot
|
|
71
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { GridGap, ResponsiveValue } from "./Grid.types.js";
|
|
3
|
+
export type GridCssVariables = CSSProperties & Record<`--${string}`, string | number | undefined>;
|
|
4
|
+
export declare const GRID_GAP_VALUES: Record<GridGap, string>;
|
|
5
|
+
export declare const getResponsiveCssVariables: <T>(name: string, value: ResponsiveValue<T> | undefined, transform?: (entry: T) => string | number) => GridCssVariables;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ui/Grid/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAC1C,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAIrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAOnD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,CAAC,EACzC,MAAM,MAAM,EACZ,OAAO,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,EACrC,YAAW,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,MAAiC,KAClE,gBAeF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const c = ["xs", "sm", "md", "lg", "xl"], i = {
|
|
2
|
+
none: "0rem",
|
|
3
|
+
xs: "0.25rem",
|
|
4
|
+
sm: "0.5rem",
|
|
5
|
+
md: "1rem",
|
|
6
|
+
lg: "1.5rem",
|
|
7
|
+
xl: "2rem"
|
|
8
|
+
}, d = (s, e, n = (r) => String(r)) => {
|
|
9
|
+
if (e === void 0) return {};
|
|
10
|
+
if (typeof e != "object" || e === null)
|
|
11
|
+
return { [`--${s}-base`]: n(e) };
|
|
12
|
+
const r = e;
|
|
13
|
+
return c.reduce((t, o) => {
|
|
14
|
+
const m = r[o];
|
|
15
|
+
return m !== void 0 && (t[`--${s}-${o}`] = n(m)), t;
|
|
16
|
+
}, {});
|
|
17
|
+
};
|
|
18
|
+
export {
|
|
19
|
+
i as GRID_GAP_VALUES,
|
|
20
|
+
d as getResponsiveCssVariables
|
|
21
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AriaAttributes, ComponentPropsWithRef, ElementType, ReactNode } from 'react';
|
|
2
|
+
import type { Size } from '../../lib/sizes.js';
|
|
3
|
+
export type IconButtonColor = 'primary' | 'secondary' | 'danger';
|
|
4
|
+
type IconButtonOwnProps<T extends ElementType> = {
|
|
5
|
+
color?: IconButtonColor;
|
|
6
|
+
size?: Size;
|
|
7
|
+
isLoading?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
type?: 'button' | 'submit' | 'reset';
|
|
10
|
+
component?: T;
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
className?: string;
|
|
13
|
+
'aria-disabled'?: AriaAttributes['aria-disabled'];
|
|
14
|
+
'aria-busy'?: AriaAttributes['aria-busy'];
|
|
15
|
+
};
|
|
16
|
+
export type IconButtonProps<T extends ElementType = 'button'> = IconButtonOwnProps<T> & Omit<ComponentPropsWithRef<T>, keyof IconButtonOwnProps<T>>;
|
|
17
|
+
export declare const IconButton: <T extends ElementType = "button">({ color, size, disabled, isLoading, component, children, className, type, onClick, onKeyDown, tabIndex, "aria-disabled": ariaDisabled, "aria-busy": ariaBusy, ...props }: IconButtonProps<T>) => import("react").JSX.Element;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=IconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/ui/IconButton/IconButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAI/C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjE,KAAK,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI;IAC/C,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;CAC3C,CAAC;AACF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,QAAQ,IAC1D,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,WAAW,GAAG,QAAQ,EAAE,0KAI1D,eAAe,CAAC,CAAC,CAAC,gCA8BpB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as g, jsx as l } from "react/jsx-runtime";
|
|
3
|
+
import k from "clsx";
|
|
4
|
+
import { CircularLoading as N } from "../CircularLoading/CircularLoading.js";
|
|
5
|
+
import a from "./IconButton.module.css.js";
|
|
6
|
+
const P = ({
|
|
7
|
+
color: m = "primary",
|
|
8
|
+
size: n = "md",
|
|
9
|
+
disabled: p = !1,
|
|
10
|
+
isLoading: r = !1,
|
|
11
|
+
component: c,
|
|
12
|
+
children: d,
|
|
13
|
+
className: u,
|
|
14
|
+
type: b = "button",
|
|
15
|
+
onClick: f,
|
|
16
|
+
onKeyDown: y,
|
|
17
|
+
tabIndex: h,
|
|
18
|
+
"aria-disabled": x,
|
|
19
|
+
"aria-busy": C,
|
|
20
|
+
...D
|
|
21
|
+
}) => {
|
|
22
|
+
const s = c || "button", o = p || r, i = s === "button", e = typeof s != "string";
|
|
23
|
+
return /* @__PURE__ */ g(
|
|
24
|
+
s,
|
|
25
|
+
{
|
|
26
|
+
...D,
|
|
27
|
+
type: i || e ? b : void 0,
|
|
28
|
+
disabled: i || e ? o : void 0,
|
|
29
|
+
"aria-disabled": o || x,
|
|
30
|
+
"aria-busy": r || C,
|
|
31
|
+
tabIndex: !i && o ? -1 : h,
|
|
32
|
+
className: k(a.root, a[m], a[n], { [a.disabled]: o }, u),
|
|
33
|
+
onClick: (t) => {
|
|
34
|
+
if (o) {
|
|
35
|
+
t.preventDefault(), t.stopPropagation();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
f?.(t);
|
|
39
|
+
},
|
|
40
|
+
onKeyDown: (t) => {
|
|
41
|
+
if (o && (t.key === "Enter" || t.key === " ")) {
|
|
42
|
+
t.preventDefault(), t.stopPropagation();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
y?.(t);
|
|
46
|
+
},
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ l("span", { className: a.content, style: { opacity: r ? 0 : 1 }, children: d }),
|
|
49
|
+
r && /* @__PURE__ */ l(N, { size: n, style: { width: "1em", height: "1em" }, className: a.loading, "aria-hidden": "true" })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
P as IconButton
|
|
56
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const o = "_root_1o2bt_2", t = "_xs_1o2bt_21", _ = "_sm_1o2bt_25", n = "_md_1o2bt_29", s = "_lg_1o2bt_33", c = "_xl_1o2bt_37", d = "_primary_1o2bt_41", a = "_secondary_1o2bt_49", r = "_danger_1o2bt_58", b = "_disabled_1o2bt_67", e = "_content_1o2bt_72", l = "_loading_1o2bt_80", g = {
|
|
2
|
+
root: o,
|
|
3
|
+
xs: t,
|
|
4
|
+
sm: _,
|
|
5
|
+
md: n,
|
|
6
|
+
lg: s,
|
|
7
|
+
xl: c,
|
|
8
|
+
primary: d,
|
|
9
|
+
secondary: a,
|
|
10
|
+
danger: r,
|
|
11
|
+
disabled: b,
|
|
12
|
+
content: e,
|
|
13
|
+
loading: l
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
e as content,
|
|
17
|
+
r as danger,
|
|
18
|
+
g as default,
|
|
19
|
+
b as disabled,
|
|
20
|
+
s as lg,
|
|
21
|
+
l as loading,
|
|
22
|
+
n as md,
|
|
23
|
+
d as primary,
|
|
24
|
+
o as root,
|
|
25
|
+
a as secondary,
|
|
26
|
+
_ as sm,
|
|
27
|
+
c as xl,
|
|
28
|
+
t as xs
|
|
29
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ProgressBarProps {
|
|
2
|
+
current: {
|
|
3
|
+
value: number;
|
|
4
|
+
label?: string;
|
|
5
|
+
};
|
|
6
|
+
max: {
|
|
7
|
+
value: number;
|
|
8
|
+
label?: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare const ProgressBar: ({ current, max }: ProgressBarProps) => import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/ui/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED,eAAO,MAAM,WAAW,GAAI,kBAAkB,gBAAgB,gCA+B7D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs as s, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import t from "clsx";
|
|
3
|
+
import { Flex as r } from "../Flex/Flex.js";
|
|
4
|
+
import { Text as o } from "../Text/Text.js";
|
|
5
|
+
const b = ({ current: e, max: l }) => {
|
|
6
|
+
const i = Number.isFinite(e.value) && Number.isFinite(l.value) && l.value > 0 ? Math.min(100, Math.max(0, e.value * 100 / l.value)) : 0;
|
|
7
|
+
return /* @__PURE__ */ s(r, { direction: "col", className: "w-full", gap: "xs", children: [
|
|
8
|
+
/* @__PURE__ */ s(r, { justifyContent: "between", children: [
|
|
9
|
+
e.label && /* @__PURE__ */ a(o, { size: "sm", className: "text-gray-1", children: e.label }),
|
|
10
|
+
l.label && /* @__PURE__ */ a(o, { size: "sm", className: "text-gray-1", children: l.label })
|
|
11
|
+
] }),
|
|
12
|
+
/* @__PURE__ */ a(
|
|
13
|
+
r,
|
|
14
|
+
{
|
|
15
|
+
className: "gap-0 bg-gray-2 rounded-full overflow-hidden",
|
|
16
|
+
role: "progressbar",
|
|
17
|
+
"aria-label": e.label,
|
|
18
|
+
"aria-valuemin": 0,
|
|
19
|
+
"aria-valuemax": 100,
|
|
20
|
+
"aria-valuenow": Math.round(i),
|
|
21
|
+
children: /* @__PURE__ */ a(
|
|
22
|
+
r,
|
|
23
|
+
{
|
|
24
|
+
className: t("gap-0 h-1.5 rounded-full", e.value > l.value ? "bg-error-1" : "bg-primary-1"),
|
|
25
|
+
style: { width: `${i}%` }
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
] });
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
b as ProgressBar
|
|
34
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface SkeletonProps {
|
|
2
|
+
width?: string | number;
|
|
3
|
+
height?: string | number;
|
|
4
|
+
borderRadius?: string | number;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const Skeleton: ({ width, height, borderRadius, className }: SkeletonProps) => import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=Skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../src/ui/Skeleton/Skeleton.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,GAAI,4CAAqD,aAAa,gCAQ1F,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import i from "clsx";
|
|
3
|
+
import c from "./Skeleton.module.css.js";
|
|
4
|
+
const p = ({ width: o, height: r = 16, borderRadius: t = 4, className: e }) => {
|
|
5
|
+
const s = {
|
|
6
|
+
width: o,
|
|
7
|
+
height: r,
|
|
8
|
+
borderRadius: t
|
|
9
|
+
};
|
|
10
|
+
return /* @__PURE__ */ m("div", { "aria-hidden": "true", className: i(c.root, e), style: s });
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
p as Skeleton
|
|
14
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
declare const WEIGHTS_MAP: {
|
|
3
|
+
readonly thin: "font-thin";
|
|
4
|
+
readonly extralight: "font-extralight";
|
|
5
|
+
readonly light: "font-light";
|
|
6
|
+
readonly normal: "font-normal";
|
|
7
|
+
readonly medium: "font-medium";
|
|
8
|
+
readonly semibold: "font-semibold";
|
|
9
|
+
readonly bold: "font-bold";
|
|
10
|
+
readonly extrabold: "font-extrabold";
|
|
11
|
+
readonly black: "font-black";
|
|
12
|
+
};
|
|
13
|
+
declare const FONT_SIZES: {
|
|
14
|
+
readonly xs: "text-xs";
|
|
15
|
+
readonly sm: "text-sm";
|
|
16
|
+
readonly md: "text-base";
|
|
17
|
+
readonly lg: "text-lg";
|
|
18
|
+
readonly xl: "text-xl";
|
|
19
|
+
readonly "2xl": "text-2xl";
|
|
20
|
+
readonly "3xl": "text-3xl";
|
|
21
|
+
readonly "4xl": "text-4xl";
|
|
22
|
+
readonly inherit: "";
|
|
23
|
+
};
|
|
24
|
+
export interface TextProps extends ComponentProps<"span"> {
|
|
25
|
+
size?: keyof typeof FONT_SIZES;
|
|
26
|
+
weight?: keyof typeof WEIGHTS_MAP;
|
|
27
|
+
}
|
|
28
|
+
export declare const Text: ({ children, weight, size, className, ...props }: TextProps) => import("react").JSX.Element;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=Text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../src/ui/Text/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,QAAA,MAAM,WAAW;;;;;;;;;;CAUP,CAAC;AAEX,QAAA,MAAM,UAAU;;;;;;;;;;CAUN,CAAC;AAEX,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,MAAM,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,OAAO,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;CACnC;AAED,eAAO,MAAM,IAAI,GAAI,iDAMlB,SAAS,gCASX,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge as m } from "tailwind-merge";
|
|
3
|
+
const r = {
|
|
4
|
+
thin: "font-thin",
|
|
5
|
+
extralight: "font-extralight",
|
|
6
|
+
light: "font-light",
|
|
7
|
+
normal: "font-normal",
|
|
8
|
+
medium: "font-medium",
|
|
9
|
+
semibold: "font-semibold",
|
|
10
|
+
bold: "font-bold",
|
|
11
|
+
extrabold: "font-extrabold",
|
|
12
|
+
black: "font-black"
|
|
13
|
+
}, i = {
|
|
14
|
+
xs: "text-xs",
|
|
15
|
+
sm: "text-sm",
|
|
16
|
+
md: "text-base",
|
|
17
|
+
lg: "text-lg",
|
|
18
|
+
xl: "text-xl",
|
|
19
|
+
"2xl": "text-2xl",
|
|
20
|
+
"3xl": "text-3xl",
|
|
21
|
+
"4xl": "text-4xl",
|
|
22
|
+
inherit: ""
|
|
23
|
+
}, f = ({
|
|
24
|
+
children: t,
|
|
25
|
+
weight: l = "normal",
|
|
26
|
+
size: o = "md",
|
|
27
|
+
className: x,
|
|
28
|
+
...e
|
|
29
|
+
}) => /* @__PURE__ */ n(
|
|
30
|
+
"span",
|
|
31
|
+
{
|
|
32
|
+
className: m(i[o], r[l], x),
|
|
33
|
+
...e,
|
|
34
|
+
children: t
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
export {
|
|
38
|
+
f as Text
|
|
39
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { Text, type TextProps } from "./Text/Text.js";
|
|
2
|
+
export { Flex, type FlexProps } from "./Flex/Flex.js";
|
|
3
|
+
export { Button, type ButtonProps } from "./Button/Button.js";
|
|
4
|
+
export { Card, type CardProps } from "./Card/Card.js";
|
|
5
|
+
export { Chip, type ChipProps, type ChipColor, type ChipVariant, } from "./Chip/Chip.js";
|
|
6
|
+
export { Skeleton, type SkeletonProps } from "./Skeleton/Skeleton.js";
|
|
7
|
+
export { IconButton, type IconButtonProps, type IconButtonColor, } from "./IconButton/IconButton.js";
|
|
8
|
+
export { CircularLoading, type CircularLoadingProps, } from "./CircularLoading/CircularLoading.js";
|
|
9
|
+
export { ProgressBar, type ProgressBarProps, } from "./ProgressBar/ProgressBar.js";
|
|
10
|
+
export { Accordion, type AccordionProps } from "./Accordion/Accordion.js";
|
|
11
|
+
export { Alert, type AlertProps } from "./Alert/Alert.js";
|
|
12
|
+
export { Grid, type GridGap, type GridItemProps, type GridItemSize, type GridRootProps, type ResponsiveValue, } from "./Grid/Grid.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,IAAI,EACJ,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@divayth/brick-ui",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "React components for Brick UI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"sideEffects": [
|
|
10
|
+
"**/*.css"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./styles.css": "./dist/styles.css"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "vite build && tsc -p tsconfig.build.json",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"storybook": "storybook dev -p 6006",
|
|
23
|
+
"build-storybook": "storybook build",
|
|
24
|
+
"prepack": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"react": "^19.0.0",
|
|
28
|
+
"react-dom": "^19.0.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"clsx": "^2.1.1",
|
|
32
|
+
"lucide-react": "^1.57.0",
|
|
33
|
+
"tailwind-merge": "^3.7.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@fontsource-variable/inter": "^5.3.0",
|
|
37
|
+
"@storybook/addon-docs": "^10.3.6",
|
|
38
|
+
"@storybook/react-vite": "^10.3.6",
|
|
39
|
+
"@tailwindcss/vite": "^4.0.0",
|
|
40
|
+
"@types/node": "^22.0.0",
|
|
41
|
+
"@types/react": "^19.0.0",
|
|
42
|
+
"@types/react-dom": "^19.0.0",
|
|
43
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
44
|
+
"react": "^19.0.0",
|
|
45
|
+
"react-dom": "^19.0.0",
|
|
46
|
+
"rollup-plugin-preserve-directives": "^0.4.0",
|
|
47
|
+
"storybook": "^10.3.6",
|
|
48
|
+
"tailwindcss": "^4.0.0",
|
|
49
|
+
"typescript": "^5.0.0",
|
|
50
|
+
"vite": "^7.0.0"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|