@stack-spot/citric-react 0.16.0 → 0.18.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/citric.css +2 -0
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/Card.js +1 -1
- package/dist/components/Card.js.map +1 -1
- package/dist/components/ImageWithFallback.d.ts +8 -0
- package/dist/components/ImageWithFallback.d.ts.map +1 -0
- package/dist/components/ImageWithFallback.js +27 -0
- package/dist/components/ImageWithFallback.js.map +1 -0
- package/dist/components/layout.d.ts +63 -3
- package/dist/components/layout.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/css.d.ts +24 -2
- package/dist/utils/css.d.ts.map +1 -1
- package/dist/utils/css.js +9 -6
- package/dist/utils/css.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Card.tsx +1 -0
- package/src/components/ImageWithFallback.tsx +47 -0
- package/src/index.ts +2 -0
- package/src/utils/css.ts +32 -32
package/dist/citric.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI1C,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC5D;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACjC;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,aAAa,CAAA;AAE1E,eAAO,MAAM,IAAI,mEAAoF,SAAS,
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI1C,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC5D;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACjC;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,aAAa,CAAA;AAE1E,eAAO,MAAM,IAAI,mEAAoF,SAAS,4CAU5G,CAAA"}
|
package/dist/components/Card.js
CHANGED
|
@@ -2,5 +2,5 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { listToClass } from '@stack-spot/portal-theme';
|
|
3
3
|
import { withRef } from '../utils/react.js';
|
|
4
4
|
import { CitricComponent } from './CitricComponent.js';
|
|
5
|
-
export const Card = withRef(({ tag = 'div', onClick, size, bgLevel, className, children, ...props }) => (_jsx(CitricComponent, { tag: tag, component: "card", className: listToClass([onClick && 'clickable', size, bgLevel && `bg-${bgLevel}`, className]), ...props, children: children })));
|
|
5
|
+
export const Card = withRef(({ tag = 'div', onClick, size, bgLevel, className, children, ...props }) => (_jsx(CitricComponent, { tag: tag, component: "card", onClick: onClick, className: listToClass([onClick && 'clickable', size, bgLevel && `bg-${bgLevel}`, className]), ...props, children: children })));
|
|
6
6
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA0BnD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAa,EAAE,EAAE,CAAC,CACjH,KAAC,eAAe,IACd,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,MAAM,EAChB,SAAS,EAAE,WAAW,CAAC,CAAC,OAAO,IAAI,WAAW,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,KACzF,KAAK,YAER,QAAQ,GACO,CACnB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA0BnD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAa,EAAE,EAAE,CAAC,CACjH,KAAC,eAAe,IACd,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,CAAC,CAAC,OAAO,IAAI,WAAW,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,KACzF,KAAK,YAER,QAAQ,GACO,CACnB,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WithStyleShortcuts } from '../types.js';
|
|
2
|
+
export interface BaseImageWithFallbackProps extends Pick<WithStyleShortcuts, 'w' | 'h' | 'radius' | 'bg'> {
|
|
3
|
+
fallback: React.ReactNode;
|
|
4
|
+
showLoading?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export type ImageWithFallbackProps = JSX.IntrinsicElements['img'] & BaseImageWithFallbackProps;
|
|
7
|
+
export declare const ImageWithFallback: ({ onLoad, onError, className, style: ogStyle, fallback, showLoading, w, h, radius, bg, ...props }: ImageWithFallbackProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ImageWithFallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageWithFallback.d.ts","sourceRoot":"","sources":["../../src/components/ImageWithFallback.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAI7C,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,kBAAkB,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC;IACvG,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,0BAA0B,CAAA;AAE9F,eAAO,MAAM,iBAAiB,GAC5B,mGAAmG,sBAAsB,4CAgC1H,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { listToClass } from '@stack-spot/portal-theme';
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { getStyleFromProps } from '../utils/css.js';
|
|
5
|
+
import { Skeleton } from './Skeleton.js';
|
|
6
|
+
export const ImageWithFallback = ({ onLoad, onError, className, style: ogStyle, fallback, showLoading, w, h, radius, bg, ...props }) => {
|
|
7
|
+
const [state, setState] = useState(props.src ? 'loading' : 'error');
|
|
8
|
+
const isLoading = state === 'loading' && showLoading;
|
|
9
|
+
const style = useMemo(() => ({ ...getStyleFromProps({ w, h, radius, bg }), ...ogStyle }), [ogStyle, w, h, radius, bg]);
|
|
10
|
+
function handleLoad(e) {
|
|
11
|
+
if (state === 'loading')
|
|
12
|
+
setState('ready');
|
|
13
|
+
onLoad?.(e);
|
|
14
|
+
}
|
|
15
|
+
function handleError(e) {
|
|
16
|
+
setState('error');
|
|
17
|
+
onError?.(e);
|
|
18
|
+
}
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (state !== 'loading')
|
|
21
|
+
setState(props.src ? 'loading' : 'error');
|
|
22
|
+
}, [props.src]);
|
|
23
|
+
if (state === 'error')
|
|
24
|
+
return _jsx("div", { className: listToClass([className, 'center']), style: style, children: fallback });
|
|
25
|
+
return _jsxs(_Fragment, { children: [isLoading && _jsx(Skeleton, { className: className, style: style }), _jsx("img", { onLoad: handleLoad, onError: handleError, style: { ...style, ...(isLoading ? { pointerEvents: 'none', position: 'absolute', opacity: 0 } : {}) }, "aria-hidden": isLoading, className: className, ...props })] });
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=ImageWithFallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageWithFallback.js","sourceRoot":"","sources":["../../src/components/ImageWithFallback.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AASrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,EAA0B,EACzH,EAAE;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAClG,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,WAAW,CAAA;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAEtH,SAAS,UAAU,CAAC,CAAgD;QAClE,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IAED,SAAS,WAAW,CAAC,CAAgD;QACnE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACjB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACd,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACpE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAEf,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAO,CAAA;IAChH,OAAO,8BACJ,SAAS,IAAI,KAAC,QAAQ,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAI,EAC9D,cACE,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,iBACzF,SAAS,EACtB,SAAS,EAAE,SAAS,KAChB,KAAK,GACT,IACD,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -32,15 +32,75 @@ export type CenterProps<T extends keyof HTMLTag> = HTMLTag[T] & BaseLayoutProps<
|
|
|
32
32
|
export type RowProps<T extends keyof HTMLTag> = HTMLTag[T] & BaseRowProps<T>;
|
|
33
33
|
export type ColumnProps<T extends keyof HTMLTag> = HTMLTag[T] & BaseColumnProps<T>;
|
|
34
34
|
declare function _Center<T extends keyof HTMLTag = 'div'>({ tag, className, ...props }: CenterProps<T>): import("react").ReactElement<{
|
|
35
|
-
|
|
35
|
+
bg?: import("@stack-spot/portal-theme").ColorKey;
|
|
36
|
+
fg?: import("@stack-spot/portal-theme").ColorKey;
|
|
37
|
+
border?: import("@stack-spot/portal-theme").ColorKey;
|
|
38
|
+
radius?: import("@stack-spot/portal-theme").RadiusKey;
|
|
39
|
+
m?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
40
|
+
mt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
41
|
+
mb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
42
|
+
ml?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
43
|
+
mr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
44
|
+
p?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
45
|
+
pt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
46
|
+
pb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
47
|
+
pl?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
48
|
+
pr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
49
|
+
w?: string | number;
|
|
50
|
+
h?: string | number;
|
|
51
|
+
flex?: React.CSSProperties["flex"];
|
|
52
|
+
justifyContent?: React.CSSProperties["justifyContent"];
|
|
53
|
+
alignItems?: React.CSSProperties["alignItems"];
|
|
54
|
+
gap?: React.CSSProperties["gap"];
|
|
55
|
+
style: any;
|
|
36
56
|
className: string;
|
|
37
57
|
}, string | import("react").JSXElementConstructor<any>>;
|
|
38
58
|
declare function _Row<T extends keyof HTMLTag = 'div'>({ tag, className, center, ...props }: RowProps<T>): import("react").ReactElement<{
|
|
39
|
-
|
|
59
|
+
bg?: import("@stack-spot/portal-theme").ColorKey;
|
|
60
|
+
fg?: import("@stack-spot/portal-theme").ColorKey;
|
|
61
|
+
border?: import("@stack-spot/portal-theme").ColorKey;
|
|
62
|
+
radius?: import("@stack-spot/portal-theme").RadiusKey;
|
|
63
|
+
m?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
64
|
+
mt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
65
|
+
mb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
66
|
+
ml?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
67
|
+
mr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
68
|
+
p?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
69
|
+
pt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
70
|
+
pb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
71
|
+
pl?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
72
|
+
pr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
73
|
+
w?: string | number;
|
|
74
|
+
h?: string | number;
|
|
75
|
+
flex?: React.CSSProperties["flex"];
|
|
76
|
+
justifyContent?: React.CSSProperties["justifyContent"];
|
|
77
|
+
alignItems?: React.CSSProperties["alignItems"];
|
|
78
|
+
gap?: React.CSSProperties["gap"];
|
|
79
|
+
style: any;
|
|
40
80
|
className: string;
|
|
41
81
|
}, string | import("react").JSXElementConstructor<any>>;
|
|
42
82
|
declare function _Column<T extends keyof HTMLTag = 'div'>({ tag, className, center, ...props }: ColumnProps<T>): import("react").ReactElement<{
|
|
43
|
-
|
|
83
|
+
bg?: import("@stack-spot/portal-theme").ColorKey;
|
|
84
|
+
fg?: import("@stack-spot/portal-theme").ColorKey;
|
|
85
|
+
border?: import("@stack-spot/portal-theme").ColorKey;
|
|
86
|
+
radius?: import("@stack-spot/portal-theme").RadiusKey;
|
|
87
|
+
m?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
88
|
+
mt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
89
|
+
mb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
90
|
+
ml?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
91
|
+
mr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
92
|
+
p?: import("@stack-spot/portal-theme").SpacingKey | import("@stack-spot/portal-theme").SpacingKey[] | string;
|
|
93
|
+
pt?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
94
|
+
pb?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
95
|
+
pl?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
96
|
+
pr?: import("@stack-spot/portal-theme").SpacingKey | string;
|
|
97
|
+
w?: string | number;
|
|
98
|
+
h?: string | number;
|
|
99
|
+
flex?: React.CSSProperties["flex"];
|
|
100
|
+
justifyContent?: React.CSSProperties["justifyContent"];
|
|
101
|
+
alignItems?: React.CSSProperties["alignItems"];
|
|
102
|
+
gap?: React.CSSProperties["gap"];
|
|
103
|
+
style: any;
|
|
44
104
|
className: string;
|
|
45
105
|
}, string | import("react").JSXElementConstructor<any>>;
|
|
46
106
|
export declare const Center: typeof _Center;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/components/layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAItD,eAAO,MAAM,MAAM;;;;CAIlB,CAAA;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,kBAAkB;IAClF;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAC/E;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAClF;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAClF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAC5E,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAElF,iBAAS,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/components/layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAItD,eAAO,MAAM,MAAM;;;;CAIlB,CAAA;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,kBAAkB;IAClF;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAC/E;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAClF;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAClF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAC5E,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAElF,iBAAS,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;wDAE7F;AAED,iBAAS,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;wDAE/F;AAED,iBAAS,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;wDAErG;AAED,eAAO,MAAM,MAAM,gBAAmB,CAAA;AACtC,eAAO,MAAM,GAAG,aAAgB,CAAA;AAChC,eAAO,MAAM,MAAM,gBAAmB,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export * from './components/Form.js';
|
|
|
21
21
|
export * from './components/FormGroup.js';
|
|
22
22
|
export * from './components/IconBox.js';
|
|
23
23
|
export * from './components/ImageBox.js';
|
|
24
|
+
export * from './components/ImageWithFallback.js';
|
|
24
25
|
export * from './components/Input.js';
|
|
25
26
|
export * from './components/layout.js';
|
|
26
27
|
export * from './components/Link.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ export * from './components/Form.js';
|
|
|
21
21
|
export * from './components/FormGroup.js';
|
|
22
22
|
export * from './components/IconBox.js';
|
|
23
23
|
export * from './components/ImageBox.js';
|
|
24
|
+
export * from './components/ImageWithFallback.js';
|
|
24
25
|
export * from './components/Input.js';
|
|
25
26
|
export * from './components/layout.js';
|
|
26
27
|
export * from './components/Link.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AAExC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AAExC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
|
package/dist/utils/css.d.ts
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import { ColorKey } from '@stack-spot/portal-theme';
|
|
2
|
+
import { SpacingKey } from '@stack-spot/portal-theme/dist/definition.js';
|
|
2
3
|
import { TextAppearance, WithStyleShortcuts } from '../types.js';
|
|
3
4
|
export declare function colorNameToColorVariable(name: ColorKey): string;
|
|
4
5
|
export declare function applyColor(style: React.CSSProperties | undefined, color: ColorKey | undefined): import("react").CSSProperties | undefined;
|
|
5
6
|
export declare function textAppearanceToClass(appearance: TextAppearance): string;
|
|
6
7
|
export declare function applyTextAppearance(className: string | undefined, appearance: TextAppearance | undefined): string;
|
|
7
8
|
export declare function applyCSSVariable(style: React.CSSProperties | undefined, name: string, value: any): import("react").CSSProperties | undefined;
|
|
8
|
-
export declare function
|
|
9
|
-
|
|
9
|
+
export declare function getStyleFromProps({ bg, fg, border, radius, justifyContent, alignItems, flex, gap, m, mt, mb, ml, mr, p, pt, pb, pl, pr, w, h, }: WithStyleShortcuts): React.CSSProperties;
|
|
10
|
+
export declare function applyStyles({ style, ...props }: WithStyleShortcuts & Record<string, any>): {
|
|
11
|
+
bg?: ColorKey;
|
|
12
|
+
fg?: ColorKey;
|
|
13
|
+
border?: ColorKey;
|
|
14
|
+
radius?: import("@stack-spot/portal-theme").RadiusKey;
|
|
15
|
+
m?: SpacingKey | SpacingKey[] | string;
|
|
16
|
+
mt?: SpacingKey | string;
|
|
17
|
+
mb?: SpacingKey | string;
|
|
18
|
+
ml?: SpacingKey | string;
|
|
19
|
+
mr?: SpacingKey | string;
|
|
20
|
+
p?: SpacingKey | SpacingKey[] | string;
|
|
21
|
+
pt?: SpacingKey | string;
|
|
22
|
+
pb?: SpacingKey | string;
|
|
23
|
+
pl?: SpacingKey | string;
|
|
24
|
+
pr?: SpacingKey | string;
|
|
25
|
+
w?: string | number;
|
|
26
|
+
h?: string | number;
|
|
27
|
+
flex?: React.CSSProperties["flex"];
|
|
28
|
+
justifyContent?: React.CSSProperties["justifyContent"];
|
|
29
|
+
alignItems?: React.CSSProperties["alignItems"];
|
|
30
|
+
gap?: React.CSSProperties["gap"];
|
|
31
|
+
style: any;
|
|
10
32
|
};
|
|
11
33
|
export declare function styleObjectToCssString(styleObject?: React.CSSProperties): string;
|
|
12
34
|
//# sourceMappingURL=css.d.ts.map
|
package/dist/utils/css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE/D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,6CAE7F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAExE;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,SAAS,UAExG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,6CAGhG;AAQD,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,EAAE,EACF,MAAM,EACN,MAAM,EACN,cAAc,EACd,UAAU,EACV,IAAI,EACJ,GAAG,EACH,CAAC,EACD,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,CAAC,EACD,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,CAAC,EACD,CAAC,GACF,EAAE,kBAAkB,GAAG,KAAK,CAAC,aAAa,CA4B1C;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;EAGxF;AAGD,wBAAgB,sBAAsB,CAAC,WAAW,GAAE,KAAK,CAAC,aAAkB,UAgB3E"}
|
package/dist/utils/css.js
CHANGED
|
@@ -24,7 +24,7 @@ function spacingToStyle(spacing) {
|
|
|
24
24
|
return theme.spacing[spacing];
|
|
25
25
|
return spacing?.map(s => theme.spacing[s]).join(' ');
|
|
26
26
|
}
|
|
27
|
-
export function
|
|
27
|
+
export function getStyleFromProps({ bg, fg, border, radius, justifyContent, alignItems, flex, gap, m, mt, mb, ml, mr, p, pt, pb, pl, pr, w, h, }) {
|
|
28
28
|
const [bgColor, bgLevel] = bg?.split('.') ?? [];
|
|
29
29
|
const [fgColor, fgLevel] = fg?.split('.') ?? [];
|
|
30
30
|
const [borderColor, borderLevel] = border?.split('.') ?? [];
|
|
@@ -50,23 +50,26 @@ export function applyStyles({ bg, fg, border, radius, justifyContent, alignItems
|
|
|
50
50
|
paddingRight: spacingToStyle(pr),
|
|
51
51
|
width: w,
|
|
52
52
|
height: h,
|
|
53
|
-
...style,
|
|
54
53
|
};
|
|
55
|
-
return
|
|
54
|
+
return omitBy(newStyle, v => v === undefined);
|
|
55
|
+
}
|
|
56
|
+
export function applyStyles({ style, ...props }) {
|
|
57
|
+
const newStyle = getStyleFromProps(props);
|
|
58
|
+
return { style: { ...newStyle, ...style }, ...props };
|
|
56
59
|
}
|
|
57
60
|
// AI generated
|
|
58
61
|
export function styleObjectToCssString(styleObject = {}) {
|
|
59
62
|
return Object.entries(styleObject)
|
|
60
63
|
.map(([property, value]) => {
|
|
61
64
|
// Convert camelCase to kebab-case
|
|
62
|
-
const cssProperty = property.replace(/([A-Z])/g,
|
|
65
|
+
const cssProperty = property.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
63
66
|
// Append 'px' to numeric values for common dimension properties
|
|
64
|
-
const cssValue = typeof value ===
|
|
67
|
+
const cssValue = typeof value === 'number' &&
|
|
65
68
|
!['zIndex', 'opacity', 'fontWeight'].includes(property)
|
|
66
69
|
? `${value}px`
|
|
67
70
|
: value;
|
|
68
71
|
return `${cssProperty}: ${cssValue}`;
|
|
69
72
|
})
|
|
70
|
-
.join(
|
|
73
|
+
.join('; ');
|
|
71
74
|
}
|
|
72
75
|
//# sourceMappingURL=css.js.map
|
package/dist/utils/css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGtC,MAAM,UAAU,wBAAwB,CAAC,IAAc;IACrD,OAAO,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAsC,EAAE,KAA2B;IAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAA0B;IAC9D,OAAO,QAAQ,UAAU,EAAE,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAA6B,EAAE,UAAsC;IACvG,OAAO,WAAW,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAsC,EAAE,IAAY,EAAE,KAAU;IAC/F,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9B,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,EAAyB,CAAA;AACvE,CAAC;AAED,SAAS,cAAc,CAAC,OAAuD;IAC7E,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAA;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9D,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/components/Card.tsx
CHANGED
|
@@ -31,6 +31,7 @@ export const Card = withRef(({ tag = 'div', onClick, size, bgLevel, className, c
|
|
|
31
31
|
<CitricComponent
|
|
32
32
|
tag={tag}
|
|
33
33
|
component="card"
|
|
34
|
+
onClick={onClick}
|
|
34
35
|
className={listToClass([onClick && 'clickable', size, bgLevel && `bg-${bgLevel}`, className])}
|
|
35
36
|
{...props}
|
|
36
37
|
>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { listToClass } from '@stack-spot/portal-theme'
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react'
|
|
3
|
+
import { WithStyleShortcuts } from '../types'
|
|
4
|
+
import { getStyleFromProps } from '../utils/css'
|
|
5
|
+
import { Skeleton } from './Skeleton'
|
|
6
|
+
|
|
7
|
+
export interface BaseImageWithFallbackProps extends Pick<WithStyleShortcuts, 'w' | 'h' | 'radius' | 'bg'> {
|
|
8
|
+
fallback: React.ReactNode,
|
|
9
|
+
showLoading?: boolean,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ImageWithFallbackProps = JSX.IntrinsicElements['img'] & BaseImageWithFallbackProps
|
|
13
|
+
|
|
14
|
+
export const ImageWithFallback = (
|
|
15
|
+
{ onLoad, onError, className, style: ogStyle, fallback, showLoading, w, h, radius, bg, ...props }: ImageWithFallbackProps,
|
|
16
|
+
) => {
|
|
17
|
+
const [state, setState] = useState<'loading' | 'ready' | 'error'>(props.src ? 'loading' : 'error')
|
|
18
|
+
const isLoading = state === 'loading' && showLoading
|
|
19
|
+
const style = useMemo(() => ({ ...getStyleFromProps({ w, h, radius, bg }), ...ogStyle }), [ogStyle, w, h, radius, bg])
|
|
20
|
+
|
|
21
|
+
function handleLoad(e: React.SyntheticEvent<HTMLImageElement, Event>) {
|
|
22
|
+
if (state === 'loading') setState('ready')
|
|
23
|
+
onLoad?.(e)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function handleError(e: React.SyntheticEvent<HTMLImageElement, Event>) {
|
|
27
|
+
setState('error')
|
|
28
|
+
onError?.(e)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (state !== 'loading') setState(props.src ? 'loading' : 'error')
|
|
33
|
+
}, [props.src])
|
|
34
|
+
|
|
35
|
+
if (state === 'error') return <div className={listToClass([className, 'center'])} style={style}>{fallback}</div>
|
|
36
|
+
return <>
|
|
37
|
+
{isLoading && <Skeleton className={className} style={style} />}
|
|
38
|
+
<img
|
|
39
|
+
onLoad={handleLoad}
|
|
40
|
+
onError={handleError}
|
|
41
|
+
style={{ ...style, ...(isLoading ? { pointerEvents: 'none', position: 'absolute', opacity: 0 } : {}) }}
|
|
42
|
+
aria-hidden={isLoading}
|
|
43
|
+
className={className}
|
|
44
|
+
{...props}
|
|
45
|
+
/>
|
|
46
|
+
</>
|
|
47
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -21,6 +21,7 @@ export * from './components/Form'
|
|
|
21
21
|
export * from './components/FormGroup'
|
|
22
22
|
export * from './components/IconBox'
|
|
23
23
|
export * from './components/ImageBox'
|
|
24
|
+
export * from './components/ImageWithFallback'
|
|
24
25
|
export * from './components/Input'
|
|
25
26
|
export * from './components/layout'
|
|
26
27
|
export * from './components/Link'
|
|
@@ -52,3 +53,4 @@ export type { CitricController } from './types'
|
|
|
52
53
|
export * from './utils/checkbox'
|
|
53
54
|
export * from './utils/radio'
|
|
54
55
|
export * from './utils/ValueController'
|
|
56
|
+
|
package/src/utils/css.ts
CHANGED
|
@@ -30,37 +30,33 @@ function spacingToStyle(spacing: SpacingKey | SpacingKey[] | string | undefined)
|
|
|
30
30
|
return spacing?.map(s => theme.spacing[s]).join(' ')
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
style,
|
|
56
|
-
...props
|
|
57
|
-
}: WithStyleShortcuts & Record<string, any>,
|
|
58
|
-
) {
|
|
33
|
+
export function getStyleFromProps({
|
|
34
|
+
bg,
|
|
35
|
+
fg,
|
|
36
|
+
border,
|
|
37
|
+
radius,
|
|
38
|
+
justifyContent,
|
|
39
|
+
alignItems,
|
|
40
|
+
flex,
|
|
41
|
+
gap,
|
|
42
|
+
m,
|
|
43
|
+
mt,
|
|
44
|
+
mb,
|
|
45
|
+
ml,
|
|
46
|
+
mr,
|
|
47
|
+
p,
|
|
48
|
+
pt,
|
|
49
|
+
pb,
|
|
50
|
+
pl,
|
|
51
|
+
pr,
|
|
52
|
+
w,
|
|
53
|
+
h,
|
|
54
|
+
}: WithStyleShortcuts): React.CSSProperties {
|
|
59
55
|
const [bgColor, bgLevel] = bg?.split('.') ?? []
|
|
60
56
|
const [fgColor, fgLevel] = fg?.split('.') ?? []
|
|
61
57
|
const [borderColor, borderLevel] = border?.split('.') ?? []
|
|
62
58
|
const borderColorVar = (theme.color as any)[borderColor]?.[borderLevel]
|
|
63
|
-
const newStyle: React.CSSProperties =
|
|
59
|
+
const newStyle: React.CSSProperties = {
|
|
64
60
|
backgroundColor: (theme.color as any)[bgColor]?.[bgLevel],
|
|
65
61
|
color: (theme.color as any)[fgColor]?.[fgLevel],
|
|
66
62
|
border: borderColorVar ? `1px solid ${borderColorVar}` : undefined,
|
|
@@ -81,9 +77,13 @@ export function applyStyles(
|
|
|
81
77
|
paddingRight: spacingToStyle(pr),
|
|
82
78
|
width: w,
|
|
83
79
|
height: h,
|
|
84
|
-
...style,
|
|
85
80
|
}
|
|
86
|
-
return
|
|
81
|
+
return omitBy(newStyle, v => v === undefined)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function applyStyles({ style, ...props }: WithStyleShortcuts & Record<string, any>) {
|
|
85
|
+
const newStyle = getStyleFromProps(props)
|
|
86
|
+
return { style: { ...newStyle, ...style }, ...props }
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// AI generated
|
|
@@ -91,16 +91,16 @@ export function styleObjectToCssString(styleObject: React.CSSProperties = {}) {
|
|
|
91
91
|
return Object.entries(styleObject)
|
|
92
92
|
.map(([property, value]) => {
|
|
93
93
|
// Convert camelCase to kebab-case
|
|
94
|
-
const cssProperty = property.replace(/([A-Z])/g,
|
|
94
|
+
const cssProperty = property.replace(/([A-Z])/g, '-$1').toLowerCase()
|
|
95
95
|
|
|
96
96
|
// Append 'px' to numeric values for common dimension properties
|
|
97
97
|
const cssValue =
|
|
98
|
-
typeof value ===
|
|
98
|
+
typeof value === 'number' &&
|
|
99
99
|
!['zIndex', 'opacity', 'fontWeight'].includes(property)
|
|
100
100
|
? `${value}px`
|
|
101
101
|
: value
|
|
102
102
|
|
|
103
103
|
return `${cssProperty}: ${cssValue}`
|
|
104
104
|
})
|
|
105
|
-
.join(
|
|
105
|
+
.join('; ')
|
|
106
106
|
}
|