jaci-ui 0.6.2 → 0.7.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/CHANGELOG.md +12 -0
- package/README.md +31 -0
- package/dist/components/alert/alert.cjs +11 -1
- package/dist/components/alert/alert.cjs.map +1 -1
- package/dist/components/alert/alert.d.cts +4 -1
- package/dist/components/alert/alert.d.ts +4 -1
- package/dist/components/alert/alert.js +11 -2
- package/dist/components/alert/alert.js.map +1 -1
- package/dist/components/alert/index.d.cts +2 -2
- package/dist/components/alert/index.d.ts +2 -2
- package/dist/components/aspect-ratio/aspect-ratio.cjs +23 -0
- package/dist/components/aspect-ratio/aspect-ratio.cjs.map +1 -0
- package/dist/components/aspect-ratio/aspect-ratio.d.cts +9 -0
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +9 -0
- package/dist/components/aspect-ratio/aspect-ratio.js +23 -0
- package/dist/components/aspect-ratio/aspect-ratio.js.map +1 -0
- package/dist/components/aspect-ratio/index.d.cts +2 -0
- package/dist/components/aspect-ratio/index.d.ts +2 -0
- package/dist/components/card/card.cjs +10 -1
- package/dist/components/card/card.cjs.map +1 -1
- package/dist/components/card/card.d.cts +15 -2
- package/dist/components/card/card.d.ts +15 -2
- package/dist/components/card/card.js +10 -2
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/card/index.d.cts +2 -2
- package/dist/components/card/index.d.ts +2 -2
- package/dist/components/code/code.cjs +39 -0
- package/dist/components/code/code.cjs.map +1 -0
- package/dist/components/code/code.d.cts +14 -0
- package/dist/components/code/code.d.ts +14 -0
- package/dist/components/code/code.js +39 -0
- package/dist/components/code/code.js.map +1 -0
- package/dist/components/code/index.d.cts +2 -0
- package/dist/components/code/index.d.ts +2 -0
- package/dist/components/feedback/badge.cjs +6 -3
- package/dist/components/feedback/badge.cjs.map +1 -1
- package/dist/components/feedback/badge.d.cts +1 -0
- package/dist/components/feedback/badge.d.ts +1 -0
- package/dist/components/feedback/badge.js +6 -3
- package/dist/components/feedback/badge.js.map +1 -1
- package/dist/components/figure/figure.cjs +125 -0
- package/dist/components/figure/figure.cjs.map +1 -0
- package/dist/components/figure/figure.d.cts +24 -0
- package/dist/components/figure/figure.d.ts +24 -0
- package/dist/components/figure/figure.js +122 -0
- package/dist/components/figure/figure.js.map +1 -0
- package/dist/components/figure/index.d.cts +2 -0
- package/dist/components/figure/index.d.ts +2 -0
- package/dist/components/image/image.cjs +103 -0
- package/dist/components/image/image.cjs.map +1 -0
- package/dist/components/image/image.d.cts +21 -0
- package/dist/components/image/image.d.ts +21 -0
- package/dist/components/image/image.js +103 -0
- package/dist/components/image/image.js.map +1 -0
- package/dist/components/image/index.d.cts +2 -0
- package/dist/components/image/index.d.ts +2 -0
- package/dist/components/kbd/index.d.cts +2 -0
- package/dist/components/kbd/index.d.ts +2 -0
- package/dist/components/kbd/kbd.cjs +23 -0
- package/dist/components/kbd/kbd.cjs.map +1 -0
- package/dist/components/kbd/kbd.d.cts +12 -0
- package/dist/components/kbd/kbd.d.ts +12 -0
- package/dist/components/kbd/kbd.js +23 -0
- package/dist/components/kbd/kbd.js.map +1 -0
- package/dist/components/progress/progress.cjs +19 -7
- package/dist/components/progress/progress.cjs.map +1 -1
- package/dist/components/progress/progress.d.cts +4 -0
- package/dist/components/progress/progress.d.ts +4 -0
- package/dist/components/progress/progress.js +19 -7
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/quote/index.d.cts +2 -0
- package/dist/components/quote/index.d.ts +2 -0
- package/dist/components/quote/quote.cjs +38 -0
- package/dist/components/quote/quote.cjs.map +1 -0
- package/dist/components/quote/quote.d.cts +19 -0
- package/dist/components/quote/quote.d.ts +19 -0
- package/dist/components/quote/quote.js +38 -0
- package/dist/components/quote/quote.js.map +1 -0
- package/dist/components/stat/index.d.cts +2 -0
- package/dist/components/stat/index.d.ts +2 -0
- package/dist/components/stat/stat.cjs +122 -0
- package/dist/components/stat/stat.cjs.map +1 -0
- package/dist/components/stat/stat.d.cts +51 -0
- package/dist/components/stat/stat.d.ts +51 -0
- package/dist/components/stat/stat.js +114 -0
- package/dist/components/stat/stat.js.map +1 -0
- package/dist/components/stat-group/index.d.cts +2 -0
- package/dist/components/stat-group/index.d.ts +2 -0
- package/dist/components/typography/heading.cjs +8 -2
- package/dist/components/typography/heading.cjs.map +1 -1
- package/dist/components/typography/heading.d.cts +8 -1
- package/dist/components/typography/heading.d.ts +8 -1
- package/dist/components/typography/heading.js +8 -2
- package/dist/components/typography/heading.js.map +1 -1
- package/dist/components/typography/index.d.cts +2 -2
- package/dist/components/typography/index.d.ts +2 -2
- package/dist/components/typography/paragraph.cjs +7 -2
- package/dist/components/typography/paragraph.cjs.map +1 -1
- package/dist/components/typography/paragraph.d.cts +8 -2
- package/dist/components/typography/paragraph.d.ts +8 -2
- package/dist/components/typography/paragraph.js +7 -2
- package/dist/components/typography/paragraph.js.map +1 -1
- package/dist/components/typography/text.cjs +6 -2
- package/dist/components/typography/text.cjs.map +1 -1
- package/dist/components/typography/text.d.cts +5 -0
- package/dist/components/typography/text.d.ts +5 -0
- package/dist/components/typography/text.js +6 -2
- package/dist/components/typography/text.js.map +1 -1
- package/dist/index.cjs +27 -0
- package/dist/index.d.cts +19 -4
- package/dist/index.d.ts +19 -4
- package/dist/index.js +10 -3
- package/dist/styled-system/recipes/alert.cjs +2 -1
- package/dist/styled-system/recipes/alert.cjs.map +1 -1
- package/dist/styled-system/recipes/alert.js +2 -1
- package/dist/styled-system/recipes/alert.js.map +1 -1
- package/dist/styled-system/recipes/aspect-ratio-box.cjs +25 -0
- package/dist/styled-system/recipes/aspect-ratio-box.cjs.map +1 -0
- package/dist/styled-system/recipes/aspect-ratio-box.js +25 -0
- package/dist/styled-system/recipes/aspect-ratio-box.js.map +1 -0
- package/dist/styled-system/recipes/badge.cjs +16 -6
- package/dist/styled-system/recipes/badge.cjs.map +1 -1
- package/dist/styled-system/recipes/badge.js +16 -6
- package/dist/styled-system/recipes/badge.js.map +1 -1
- package/dist/styled-system/recipes/code.cjs +33 -0
- package/dist/styled-system/recipes/code.cjs.map +1 -0
- package/dist/styled-system/recipes/code.js +33 -0
- package/dist/styled-system/recipes/code.js.map +1 -0
- package/dist/styled-system/recipes/figure.cjs +42 -0
- package/dist/styled-system/recipes/figure.cjs.map +1 -0
- package/dist/styled-system/recipes/figure.js +42 -0
- package/dist/styled-system/recipes/figure.js.map +1 -0
- package/dist/styled-system/recipes/heading.cjs +34 -9
- package/dist/styled-system/recipes/heading.cjs.map +1 -1
- package/dist/styled-system/recipes/heading.js +34 -9
- package/dist/styled-system/recipes/heading.js.map +1 -1
- package/dist/styled-system/recipes/image.cjs +56 -0
- package/dist/styled-system/recipes/image.cjs.map +1 -0
- package/dist/styled-system/recipes/image.js +56 -0
- package/dist/styled-system/recipes/image.js.map +1 -0
- package/dist/styled-system/recipes/kbd.cjs +39 -0
- package/dist/styled-system/recipes/kbd.cjs.map +1 -0
- package/dist/styled-system/recipes/kbd.js +39 -0
- package/dist/styled-system/recipes/kbd.js.map +1 -0
- package/dist/styled-system/recipes/paragraph.cjs +25 -2
- package/dist/styled-system/recipes/paragraph.cjs.map +1 -1
- package/dist/styled-system/recipes/paragraph.js +25 -2
- package/dist/styled-system/recipes/paragraph.js.map +1 -1
- package/dist/styled-system/recipes/progress.cjs +1 -0
- package/dist/styled-system/recipes/progress.cjs.map +1 -1
- package/dist/styled-system/recipes/progress.js +1 -0
- package/dist/styled-system/recipes/progress.js.map +1 -1
- package/dist/styled-system/recipes/quote.cjs +39 -0
- package/dist/styled-system/recipes/quote.cjs.map +1 -0
- package/dist/styled-system/recipes/quote.js +39 -0
- package/dist/styled-system/recipes/quote.js.map +1 -0
- package/dist/styled-system/recipes/stat-group.cjs +40 -0
- package/dist/styled-system/recipes/stat-group.cjs.map +1 -0
- package/dist/styled-system/recipes/stat-group.js +40 -0
- package/dist/styled-system/recipes/stat-group.js.map +1 -0
- package/dist/styled-system/recipes/stat.cjs +63 -0
- package/dist/styled-system/recipes/stat.cjs.map +1 -0
- package/dist/styled-system/recipes/stat.js +63 -0
- package/dist/styled-system/recipes/stat.js.map +1 -0
- package/dist/styled-system/recipes/text.cjs +23 -2
- package/dist/styled-system/recipes/text.cjs.map +1 -1
- package/dist/styled-system/recipes/text.js +23 -2
- package/dist/styled-system/recipes/text.js.map +1 -1
- package/dist/styles.css +1005 -81
- package/package.json +1 -1
|
@@ -3,13 +3,16 @@ const require_badge = require("../../styled-system/recipes/badge.cjs");
|
|
|
3
3
|
let react = require("react");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
//#region src/components/feedback/badge.tsx
|
|
6
|
-
const Badge = (0, react.forwardRef)(function Badge({ className, tone = "neutral", ...props }, ref) {
|
|
6
|
+
const Badge = (0, react.forwardRef)(function Badge({ className, tone = "neutral", variant = "solid", ...props }, ref) {
|
|
7
|
+
const appearance = `${tone}-${variant}`;
|
|
7
8
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8
9
|
...props,
|
|
9
10
|
ref,
|
|
10
|
-
className: require_cx.cx(require_badge.badge({ tone }), className),
|
|
11
|
+
className: require_cx.cx(require_badge.badge({ tone: appearance }), className),
|
|
11
12
|
"data-jaci-component": "badge",
|
|
12
|
-
"data-
|
|
13
|
+
"data-jaci-tone": tone,
|
|
14
|
+
"data-slot": "badge",
|
|
15
|
+
"data-variant": variant
|
|
13
16
|
});
|
|
14
17
|
});
|
|
15
18
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.cjs","names":["cx","badge"],"sources":["../../../src/components/feedback/badge.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { badge } from \"../../styled-system/recipes\";\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<\"span\"> {\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, tone = \"neutral\", ...props },\n ref,\n) {\n return (\n <span\n {...props}\n ref={ref}\n className={cx(badge({ tone }), className)}\n data-jaci-component=\"badge\"\n data-slot=\"badge\"\n />\n );\n});\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"badge.cjs","names":["cx","badge"],"sources":["../../../src/components/feedback/badge.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { badge } from \"../../styled-system/recipes\";\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<\"span\"> {\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n variant?: \"solid\" | \"soft\" | \"outline\";\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, tone = \"neutral\", variant = \"solid\", ...props },\n ref,\n) {\n const appearance = `${tone}-${variant}` as\n | \"neutral-solid\"\n | \"accent-solid\"\n | \"success-solid\"\n | \"warning-solid\"\n | \"danger-solid\"\n | \"neutral-soft\"\n | \"accent-soft\"\n | \"success-soft\"\n | \"warning-soft\"\n | \"danger-soft\"\n | \"neutral-outline\"\n | \"accent-outline\"\n | \"success-outline\"\n | \"warning-outline\"\n | \"danger-outline\";\n\n return (\n <span\n {...props}\n ref={ref}\n className={cx(badge({ tone: appearance }), className)}\n data-jaci-component=\"badge\"\n data-jaci-tone={tone}\n data-slot=\"badge\"\n data-variant={variant}\n />\n );\n});\n"],"mappings":";;;;;AAWA,MAAa,SAAA,GAAA,MAAA,WAAA,CAAgD,SAAS,MACpE,EAAE,WAAW,OAAO,WAAW,UAAU,SAAS,GAAG,SACrD,KACA;CACA,MAAM,aAAa,GAAG,KAAK,GAAG;CAiB9B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,GAAI;EACC;EACL,WAAWA,WAAAA,GAAGC,cAAAA,MAAM,EAAE,MAAM,WAAW,CAAC,GAAG,SAAS;EACpD,uBAAoB;EACpB,kBAAgB;EAChB,aAAU;EACV,gBAAc;CACf,CAAA;AAEL,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { ComponentPropsWithoutRef } from "react";
|
|
|
2
2
|
//#region src/components/feedback/badge.d.ts
|
|
3
3
|
interface BadgeProps extends ComponentPropsWithoutRef<"span"> {
|
|
4
4
|
tone?: "neutral" | "accent" | "success" | "warning" | "danger";
|
|
5
|
+
variant?: "solid" | "soft" | "outline";
|
|
5
6
|
}
|
|
6
7
|
declare const Badge: import("react").ForwardRefExoticComponent<BadgeProps & import("react").RefAttributes<HTMLSpanElement>>;
|
|
7
8
|
//#endregion
|
|
@@ -2,6 +2,7 @@ import { ComponentPropsWithoutRef } from "react";
|
|
|
2
2
|
//#region src/components/feedback/badge.d.ts
|
|
3
3
|
interface BadgeProps extends ComponentPropsWithoutRef<"span"> {
|
|
4
4
|
tone?: "neutral" | "accent" | "success" | "warning" | "danger";
|
|
5
|
+
variant?: "solid" | "soft" | "outline";
|
|
5
6
|
}
|
|
6
7
|
declare const Badge: import("react").ForwardRefExoticComponent<BadgeProps & import("react").RefAttributes<HTMLSpanElement>>;
|
|
7
8
|
//#endregion
|
|
@@ -3,13 +3,16 @@ import { badge } from "../../styled-system/recipes/badge.js";
|
|
|
3
3
|
import { forwardRef } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/feedback/badge.tsx
|
|
6
|
-
const Badge = forwardRef(function Badge({ className, tone = "neutral", ...props }, ref) {
|
|
6
|
+
const Badge = forwardRef(function Badge({ className, tone = "neutral", variant = "solid", ...props }, ref) {
|
|
7
|
+
const appearance = `${tone}-${variant}`;
|
|
7
8
|
return /* @__PURE__ */ jsx("span", {
|
|
8
9
|
...props,
|
|
9
10
|
ref,
|
|
10
|
-
className: cx(badge({ tone }), className),
|
|
11
|
+
className: cx(badge({ tone: appearance }), className),
|
|
11
12
|
"data-jaci-component": "badge",
|
|
12
|
-
"data-
|
|
13
|
+
"data-jaci-tone": tone,
|
|
14
|
+
"data-slot": "badge",
|
|
15
|
+
"data-variant": variant
|
|
13
16
|
});
|
|
14
17
|
});
|
|
15
18
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/feedback/badge.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { badge } from \"../../styled-system/recipes\";\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<\"span\"> {\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, tone = \"neutral\", ...props },\n ref,\n) {\n return (\n <span\n {...props}\n ref={ref}\n className={cx(badge({ tone }), className)}\n data-jaci-component=\"badge\"\n data-slot=\"badge\"\n />\n );\n});\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/feedback/badge.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { badge } from \"../../styled-system/recipes\";\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<\"span\"> {\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n variant?: \"solid\" | \"soft\" | \"outline\";\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, tone = \"neutral\", variant = \"solid\", ...props },\n ref,\n) {\n const appearance = `${tone}-${variant}` as\n | \"neutral-solid\"\n | \"accent-solid\"\n | \"success-solid\"\n | \"warning-solid\"\n | \"danger-solid\"\n | \"neutral-soft\"\n | \"accent-soft\"\n | \"success-soft\"\n | \"warning-soft\"\n | \"danger-soft\"\n | \"neutral-outline\"\n | \"accent-outline\"\n | \"success-outline\"\n | \"warning-outline\"\n | \"danger-outline\";\n\n return (\n <span\n {...props}\n ref={ref}\n className={cx(badge({ tone: appearance }), className)}\n data-jaci-component=\"badge\"\n data-jaci-tone={tone}\n data-slot=\"badge\"\n data-variant={variant}\n />\n );\n});\n"],"mappings":";;;;;AAWA,MAAa,QAAQ,WAAwC,SAAS,MACpE,EAAE,WAAW,OAAO,WAAW,UAAU,SAAS,GAAG,SACrD,KACA;CACA,MAAM,aAAa,GAAG,KAAK,GAAG;CAiB9B,OACE,oBAAC,QAAD;EACE,GAAI;EACC;EACL,WAAW,GAAG,MAAM,EAAE,MAAM,WAAW,CAAC,GAAG,SAAS;EACpD,uBAAoB;EACpB,kBAAgB;EAChB,aAAU;EACV,gBAAc;CACf,CAAA;AAEL,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_cx = require("../../styled-system/css/cx.cjs");
|
|
3
|
+
const require_figure = require("../../styled-system/recipes/figure.cjs");
|
|
4
|
+
const require_image = require("../image/image.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _base_ui_react_dialog = require("@base-ui/react/dialog");
|
|
8
|
+
//#region src/components/figure/figure.tsx
|
|
9
|
+
const FigureContext = (0, react.createContext)(null);
|
|
10
|
+
function useFigureContext() {
|
|
11
|
+
const value = (0, react.useContext)(FigureContext);
|
|
12
|
+
if (!value) throw new Error("Figure parts must be rendered inside Figure.Root.");
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
const FigureImage = (0, react.forwardRef)(function FigureImage({ className, lightbox: _lightbox, ...props }, ref) {
|
|
16
|
+
const { lightbox, styles } = useFigureContext();
|
|
17
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_image.Image, {
|
|
18
|
+
...props,
|
|
19
|
+
ref,
|
|
20
|
+
className: require_cx.cx(styles.image, className),
|
|
21
|
+
"data-slot": "figure-image",
|
|
22
|
+
lightbox: false
|
|
23
|
+
});
|
|
24
|
+
if (!lightbox) return content;
|
|
25
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Trigger, {
|
|
26
|
+
"aria-label": "Open image",
|
|
27
|
+
className: styles.trigger,
|
|
28
|
+
"data-jaci-component": "figure-trigger",
|
|
29
|
+
"data-slot": "figure-trigger",
|
|
30
|
+
children: content
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
const FigureCaption = (0, react.forwardRef)(function FigureCaption({ className, ...props }, ref) {
|
|
34
|
+
const { styles } = useFigureContext();
|
|
35
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("figcaption", {
|
|
36
|
+
...props,
|
|
37
|
+
ref,
|
|
38
|
+
className: require_cx.cx(styles.caption, className),
|
|
39
|
+
"data-slot": "figure-caption"
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
function findChild(children, component) {
|
|
43
|
+
return react.Children.toArray(children).find((item) => (0, react.isValidElement)(item) && item.type === component) ?? null;
|
|
44
|
+
}
|
|
45
|
+
const FigureRoot = (0, react.forwardRef)(function FigureRoot({ children, className, closeLabel = "Close image", defaultOpen, lightbox = false, onOpenChange, open, ...props }, ref) {
|
|
46
|
+
const styles = require_figure.figure();
|
|
47
|
+
const media = findChild(children, FigureImage);
|
|
48
|
+
const caption = findChild(children, FigureCaption);
|
|
49
|
+
const canOpen = Boolean(lightbox && media?.props.src);
|
|
50
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("figure", {
|
|
51
|
+
...props,
|
|
52
|
+
ref,
|
|
53
|
+
className: require_cx.cx(styles.root, className),
|
|
54
|
+
"data-jaci-component": "figure",
|
|
55
|
+
"data-lightbox": canOpen || void 0,
|
|
56
|
+
"data-slot": "figure",
|
|
57
|
+
children
|
|
58
|
+
});
|
|
59
|
+
const value = {
|
|
60
|
+
lightbox: canOpen,
|
|
61
|
+
styles
|
|
62
|
+
};
|
|
63
|
+
if (!canOpen || !media) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FigureContext.Provider, {
|
|
64
|
+
value,
|
|
65
|
+
children: content
|
|
66
|
+
});
|
|
67
|
+
const alt = media.props.alt;
|
|
68
|
+
const src = media.props.src;
|
|
69
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FigureContext.Provider, {
|
|
70
|
+
value,
|
|
71
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Root, {
|
|
72
|
+
defaultOpen,
|
|
73
|
+
onOpenChange: (nextOpen) => onOpenChange?.(nextOpen),
|
|
74
|
+
open,
|
|
75
|
+
children: [content, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Portal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Backdrop, {
|
|
76
|
+
className: styles.backdrop,
|
|
77
|
+
"data-slot": "figure-lightbox-backdrop"
|
|
78
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Viewport, {
|
|
79
|
+
className: styles.viewport,
|
|
80
|
+
"data-slot": "figure-lightbox-viewport",
|
|
81
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Popup, {
|
|
82
|
+
"aria-label": alt || "Image preview",
|
|
83
|
+
className: styles.popup,
|
|
84
|
+
"data-jaci-component": "figure-lightbox",
|
|
85
|
+
"data-slot": "figure-lightbox-popup",
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Title, {
|
|
88
|
+
className: styles.title,
|
|
89
|
+
children: alt || "Image preview"
|
|
90
|
+
}),
|
|
91
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Close, {
|
|
92
|
+
"aria-label": closeLabel,
|
|
93
|
+
className: styles.close,
|
|
94
|
+
"data-slot": "figure-lightbox-close",
|
|
95
|
+
children: "×"
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
98
|
+
alt,
|
|
99
|
+
className: styles.lightboxImage,
|
|
100
|
+
"data-slot": "figure-lightbox-image",
|
|
101
|
+
src
|
|
102
|
+
}),
|
|
103
|
+
caption ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("figcaption", {
|
|
104
|
+
className: styles.lightboxCaption,
|
|
105
|
+
"data-slot": "figure-lightbox-caption",
|
|
106
|
+
children: caption.props.children
|
|
107
|
+
}) : null
|
|
108
|
+
]
|
|
109
|
+
})
|
|
110
|
+
})] })]
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
const Figure = {
|
|
115
|
+
Root: FigureRoot,
|
|
116
|
+
Image: FigureImage,
|
|
117
|
+
Caption: FigureCaption
|
|
118
|
+
};
|
|
119
|
+
//#endregion
|
|
120
|
+
exports.Figure = Figure;
|
|
121
|
+
exports.FigureCaption = FigureCaption;
|
|
122
|
+
exports.FigureImage = FigureImage;
|
|
123
|
+
exports.FigureRoot = FigureRoot;
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=figure.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figure.cjs","names":["Image","cx","BaseDialog","Children","figureStyles"],"sources":["../../../src/components/figure/figure.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Children, createContext, forwardRef, isValidElement, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactElement, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { figure as figureStyles } from \"../../styled-system/recipes\";\nimport { Image } from \"../image\";\nimport type { ImageProps } from \"../image\";\n\ninterface FigureContextValue {\n lightbox: boolean;\n styles: ReturnType<typeof figureStyles>;\n}\n\nconst FigureContext = createContext<FigureContextValue | null>(null);\n\nfunction useFigureContext() {\n const value = useContext(FigureContext);\n if (!value) {\n throw new Error(\"Figure parts must be rendered inside Figure.Root.\");\n }\n return value;\n}\n\nexport type FigureImageProps = ImageProps;\n\nexport const FigureImage = forwardRef<HTMLImageElement, FigureImageProps>(function FigureImage(\n { className, lightbox: _lightbox, ...props },\n ref,\n) {\n const { lightbox, styles } = useFigureContext();\n const content = (\n <Image\n {...props}\n ref={ref}\n className={cx(styles.image, className)}\n data-slot=\"figure-image\"\n lightbox={false}\n />\n );\n\n if (!lightbox) {\n return content;\n }\n\n return (\n <BaseDialog.Trigger\n aria-label=\"Open image\"\n className={styles.trigger}\n data-jaci-component=\"figure-trigger\"\n data-slot=\"figure-trigger\"\n >\n {content}\n </BaseDialog.Trigger>\n );\n});\n\nexport type FigureCaptionProps = ComponentPropsWithoutRef<\"figcaption\">;\n\nexport const FigureCaption = forwardRef<HTMLElement, FigureCaptionProps>(function FigureCaption(\n { className, ...props },\n ref,\n) {\n const { styles } = useFigureContext();\n return (\n <figcaption\n {...props}\n ref={ref}\n className={cx(styles.caption, className)}\n data-slot=\"figure-caption\"\n />\n );\n});\n\nexport interface FigureRootProps extends ComponentPropsWithoutRef<\"figure\"> {\n lightbox?: boolean;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeLabel?: string;\n}\n\nfunction findChild<T>(children: ReactNode, component: ElementType): ReactElement<T> | null {\n const child = Children.toArray(children).find(\n (item) => isValidElement(item) && item.type === component,\n );\n return (child as ReactElement<T> | undefined) ?? null;\n}\n\nexport const FigureRoot = forwardRef<HTMLElement, FigureRootProps>(function FigureRoot(\n {\n children,\n className,\n closeLabel = \"Close image\",\n defaultOpen,\n lightbox = false,\n onOpenChange,\n open,\n ...props\n },\n ref,\n) {\n const styles = figureStyles();\n const media = findChild<FigureImageProps>(children, FigureImage);\n const caption = findChild<FigureCaptionProps>(children, FigureCaption);\n const canOpen = Boolean(lightbox && media?.props.src);\n const content = (\n <figure\n {...props}\n ref={ref}\n className={cx(styles.root, className)}\n data-jaci-component=\"figure\"\n data-lightbox={canOpen || undefined}\n data-slot=\"figure\"\n >\n {children}\n </figure>\n );\n\n const value = { lightbox: canOpen, styles };\n\n if (!canOpen || !media) {\n return <FigureContext.Provider value={value}>{content}</FigureContext.Provider>;\n }\n\n const alt = media.props.alt;\n const src = media.props.src;\n\n return (\n <FigureContext.Provider value={value}>\n <BaseDialog.Root\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => onOpenChange?.(nextOpen)}\n open={open}\n >\n {content}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={styles.backdrop} data-slot=\"figure-lightbox-backdrop\" />\n <BaseDialog.Viewport className={styles.viewport} data-slot=\"figure-lightbox-viewport\">\n <BaseDialog.Popup\n aria-label={alt || \"Image preview\"}\n className={styles.popup}\n data-jaci-component=\"figure-lightbox\"\n data-slot=\"figure-lightbox-popup\"\n >\n <BaseDialog.Title className={styles.title}>{alt || \"Image preview\"}</BaseDialog.Title>\n <BaseDialog.Close\n aria-label={closeLabel}\n className={styles.close}\n data-slot=\"figure-lightbox-close\"\n >\n ×\n </BaseDialog.Close>\n <img\n alt={alt}\n className={styles.lightboxImage}\n data-slot=\"figure-lightbox-image\"\n src={src}\n />\n {caption ? (\n <figcaption className={styles.lightboxCaption} data-slot=\"figure-lightbox-caption\">\n {caption.props.children}\n </figcaption>\n ) : null}\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n </FigureContext.Provider>\n );\n});\n\nexport const Figure = {\n Root: FigureRoot,\n Image: FigureImage,\n Caption: FigureCaption,\n};\n"],"mappings":";;;;;;;;AAgBA,MAAM,iBAAA,GAAA,MAAA,cAAA,CAAyD,IAAI;AAEnE,SAAS,mBAAmB;CAC1B,MAAM,SAAA,GAAA,MAAA,WAAA,CAAmB,aAAa;CACtC,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,mDAAmD;CAErE,OAAO;AACT;AAIA,MAAa,eAAA,GAAA,MAAA,WAAA,CAA6D,SAAS,YACjF,EAAE,WAAW,UAAU,WAAW,GAAG,SACrC,KACA;CACA,MAAM,EAAE,UAAU,WAAW,iBAAiB;CAC9C,MAAM,UACJ,iBAAA,GAAA,kBAAA,IAAA,CAACA,cAAAA,OAAD;EACE,GAAI;EACC;EACL,WAAWC,WAAAA,GAAG,OAAO,OAAO,SAAS;EACrC,aAAU;EACV,UAAU;CACX,CAAA;CAGH,IAAI,CAAC,UACH,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,OAAW,SAAZ;EACE,cAAW;EACX,WAAW,OAAO;EAClB,uBAAoB;EACpB,aAAU;YAET;CACiB,CAAA;AAExB,CAAC;AAID,MAAa,iBAAA,GAAA,MAAA,WAAA,CAA4D,SAAS,cAChF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,EAAE,WAAW,iBAAiB;CACpC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;EACE,GAAI;EACC;EACL,WAAWD,WAAAA,GAAG,OAAO,SAAS,SAAS;EACvC,aAAU;CACX,CAAA;AAEL,CAAC;AAUD,SAAS,UAAa,UAAqB,WAAgD;CAIzF,OAHcE,MAAAA,SAAS,QAAQ,QAAQ,CAAC,CAAC,MACtC,UAAA,GAAA,MAAA,eAAA,CAAwB,IAAI,KAAK,KAAK,SAAS,SAEtC,KAAqC;AACnD;AAEA,MAAa,cAAA,GAAA,MAAA,WAAA,CAAsD,SAAS,WAC1E,EACE,UACA,WACA,aAAa,eACb,aACA,WAAW,OACX,cACA,MACA,GAAG,SAEL,KACA;CACA,MAAM,SAASC,eAAAA,OAAa;CAC5B,MAAM,QAAQ,UAA4B,UAAU,WAAW;CAC/D,MAAM,UAAU,UAA8B,UAAU,aAAa;CACrE,MAAM,UAAU,QAAQ,YAAY,OAAO,MAAM,GAAG;CACpD,MAAM,UACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,GAAI;EACC;EACL,WAAWH,WAAAA,GAAG,OAAO,MAAM,SAAS;EACpC,uBAAoB;EACpB,iBAAe,WAAW,KAAA;EAC1B,aAAU;EAET;CACK,CAAA;CAGV,MAAM,QAAQ;EAAE,UAAU;EAAS;CAAO;CAE1C,IAAI,CAAC,WAAW,CAAC,OACf,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAc,UAAf;EAA+B;YAAQ;CAAgC,CAAA;CAGhF,MAAM,MAAM,MAAM,MAAM;CACxB,MAAM,MAAM,MAAM,MAAM;CAExB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAc,UAAf;EAA+B;YAC7B,iBAAA,GAAA,kBAAA,KAAA,CAACC,sBAAAA,OAAW,MAAZ;GACe;GACb,eAAe,aAAa,eAAe,QAAQ;GAC7C;aAHR,CAKG,SACD,iBAAA,GAAA,kBAAA,KAAA,CAACA,sBAAAA,OAAW,QAAZ,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,UAAZ;IAAqB,WAAW,OAAO;IAAU,aAAU;GAA4B,CAAA,GACvF,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,UAAZ;IAAqB,WAAW,OAAO;IAAU,aAAU;cACzD,iBAAA,GAAA,kBAAA,KAAA,CAACA,sBAAAA,OAAW,OAAZ;KACE,cAAY,OAAO;KACnB,WAAW,OAAO;KAClB,uBAAoB;KACpB,aAAU;eAJZ;MAME,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,OAAZ;OAAkB,WAAW,OAAO;iBAAQ,OAAO;MAAkC,CAAA;MACrF,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,OAAZ;OACE,cAAY;OACZ,WAAW,OAAO;OAClB,aAAU;iBACX;MAEiB,CAAA;MAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OACO;OACL,WAAW,OAAO;OAClB,aAAU;OACL;MACN,CAAA;MACA,UACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;OAAY,WAAW,OAAO;OAAiB,aAAU;iBACtD,QAAQ,MAAM;MACL,CAAA,IACV;KACY;;GACC,CAAA,CACJ,EAAA,CAAA,CACJ;;CACK,CAAA;AAE5B,CAAC;AAED,MAAa,SAAS;CACpB,MAAM;CACN,OAAO;CACP,SAAS;AACX"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ImageProps } from "../image/image.cjs";
|
|
2
|
+
import "../image/index.cjs";
|
|
3
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
4
|
+
//#region src/components/figure/figure.d.ts
|
|
5
|
+
type FigureImageProps = ImageProps;
|
|
6
|
+
declare const FigureImage: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
7
|
+
type FigureCaptionProps = ComponentPropsWithoutRef<"figcaption">;
|
|
8
|
+
declare const FigureCaption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
9
|
+
interface FigureRootProps extends ComponentPropsWithoutRef<"figure"> {
|
|
10
|
+
lightbox?: boolean;
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
open?: boolean;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
closeLabel?: string;
|
|
15
|
+
}
|
|
16
|
+
declare const FigureRoot: import("react").ForwardRefExoticComponent<FigureRootProps & import("react").RefAttributes<HTMLElement>>;
|
|
17
|
+
declare const Figure: {
|
|
18
|
+
Root: import("react").ForwardRefExoticComponent<FigureRootProps & import("react").RefAttributes<HTMLElement>>;
|
|
19
|
+
Image: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
20
|
+
Caption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { Figure, FigureCaption, FigureCaptionProps, FigureImage, FigureImageProps, FigureRoot, FigureRootProps };
|
|
24
|
+
//# sourceMappingURL=figure.d.cts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ImageProps } from "../image/image.js";
|
|
2
|
+
import "../image/index.js";
|
|
3
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
4
|
+
//#region src/components/figure/figure.d.ts
|
|
5
|
+
type FigureImageProps = ImageProps;
|
|
6
|
+
declare const FigureImage: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
7
|
+
type FigureCaptionProps = ComponentPropsWithoutRef<"figcaption">;
|
|
8
|
+
declare const FigureCaption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
9
|
+
interface FigureRootProps extends ComponentPropsWithoutRef<"figure"> {
|
|
10
|
+
lightbox?: boolean;
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
open?: boolean;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
closeLabel?: string;
|
|
15
|
+
}
|
|
16
|
+
declare const FigureRoot: import("react").ForwardRefExoticComponent<FigureRootProps & import("react").RefAttributes<HTMLElement>>;
|
|
17
|
+
declare const Figure: {
|
|
18
|
+
Root: import("react").ForwardRefExoticComponent<FigureRootProps & import("react").RefAttributes<HTMLElement>>;
|
|
19
|
+
Image: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
20
|
+
Caption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { Figure, FigureCaption, FigureCaptionProps, FigureImage, FigureImageProps, FigureRoot, FigureRootProps };
|
|
24
|
+
//# sourceMappingURL=figure.d.ts.map
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx } from "../../styled-system/css/cx.js";
|
|
3
|
+
import { figure } from "../../styled-system/recipes/figure.js";
|
|
4
|
+
import { Image } from "../image/image.js";
|
|
5
|
+
import { Children, createContext, forwardRef, isValidElement, useContext } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Dialog } from "@base-ui/react/dialog";
|
|
8
|
+
//#region src/components/figure/figure.tsx
|
|
9
|
+
const FigureContext = createContext(null);
|
|
10
|
+
function useFigureContext() {
|
|
11
|
+
const value = useContext(FigureContext);
|
|
12
|
+
if (!value) throw new Error("Figure parts must be rendered inside Figure.Root.");
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
const FigureImage = forwardRef(function FigureImage({ className, lightbox: _lightbox, ...props }, ref) {
|
|
16
|
+
const { lightbox, styles } = useFigureContext();
|
|
17
|
+
const content = /* @__PURE__ */ jsx(Image, {
|
|
18
|
+
...props,
|
|
19
|
+
ref,
|
|
20
|
+
className: cx(styles.image, className),
|
|
21
|
+
"data-slot": "figure-image",
|
|
22
|
+
lightbox: false
|
|
23
|
+
});
|
|
24
|
+
if (!lightbox) return content;
|
|
25
|
+
return /* @__PURE__ */ jsx(Dialog.Trigger, {
|
|
26
|
+
"aria-label": "Open image",
|
|
27
|
+
className: styles.trigger,
|
|
28
|
+
"data-jaci-component": "figure-trigger",
|
|
29
|
+
"data-slot": "figure-trigger",
|
|
30
|
+
children: content
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
const FigureCaption = forwardRef(function FigureCaption({ className, ...props }, ref) {
|
|
34
|
+
const { styles } = useFigureContext();
|
|
35
|
+
return /* @__PURE__ */ jsx("figcaption", {
|
|
36
|
+
...props,
|
|
37
|
+
ref,
|
|
38
|
+
className: cx(styles.caption, className),
|
|
39
|
+
"data-slot": "figure-caption"
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
function findChild(children, component) {
|
|
43
|
+
return Children.toArray(children).find((item) => isValidElement(item) && item.type === component) ?? null;
|
|
44
|
+
}
|
|
45
|
+
const FigureRoot = forwardRef(function FigureRoot({ children, className, closeLabel = "Close image", defaultOpen, lightbox = false, onOpenChange, open, ...props }, ref) {
|
|
46
|
+
const styles = figure();
|
|
47
|
+
const media = findChild(children, FigureImage);
|
|
48
|
+
const caption = findChild(children, FigureCaption);
|
|
49
|
+
const canOpen = Boolean(lightbox && media?.props.src);
|
|
50
|
+
const content = /* @__PURE__ */ jsx("figure", {
|
|
51
|
+
...props,
|
|
52
|
+
ref,
|
|
53
|
+
className: cx(styles.root, className),
|
|
54
|
+
"data-jaci-component": "figure",
|
|
55
|
+
"data-lightbox": canOpen || void 0,
|
|
56
|
+
"data-slot": "figure",
|
|
57
|
+
children
|
|
58
|
+
});
|
|
59
|
+
const value = {
|
|
60
|
+
lightbox: canOpen,
|
|
61
|
+
styles
|
|
62
|
+
};
|
|
63
|
+
if (!canOpen || !media) return /* @__PURE__ */ jsx(FigureContext.Provider, {
|
|
64
|
+
value,
|
|
65
|
+
children: content
|
|
66
|
+
});
|
|
67
|
+
const alt = media.props.alt;
|
|
68
|
+
const src = media.props.src;
|
|
69
|
+
return /* @__PURE__ */ jsx(FigureContext.Provider, {
|
|
70
|
+
value,
|
|
71
|
+
children: /* @__PURE__ */ jsxs(Dialog.Root, {
|
|
72
|
+
defaultOpen,
|
|
73
|
+
onOpenChange: (nextOpen) => onOpenChange?.(nextOpen),
|
|
74
|
+
open,
|
|
75
|
+
children: [content, /* @__PURE__ */ jsxs(Dialog.Portal, { children: [/* @__PURE__ */ jsx(Dialog.Backdrop, {
|
|
76
|
+
className: styles.backdrop,
|
|
77
|
+
"data-slot": "figure-lightbox-backdrop"
|
|
78
|
+
}), /* @__PURE__ */ jsx(Dialog.Viewport, {
|
|
79
|
+
className: styles.viewport,
|
|
80
|
+
"data-slot": "figure-lightbox-viewport",
|
|
81
|
+
children: /* @__PURE__ */ jsxs(Dialog.Popup, {
|
|
82
|
+
"aria-label": alt || "Image preview",
|
|
83
|
+
className: styles.popup,
|
|
84
|
+
"data-jaci-component": "figure-lightbox",
|
|
85
|
+
"data-slot": "figure-lightbox-popup",
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ jsx(Dialog.Title, {
|
|
88
|
+
className: styles.title,
|
|
89
|
+
children: alt || "Image preview"
|
|
90
|
+
}),
|
|
91
|
+
/* @__PURE__ */ jsx(Dialog.Close, {
|
|
92
|
+
"aria-label": closeLabel,
|
|
93
|
+
className: styles.close,
|
|
94
|
+
"data-slot": "figure-lightbox-close",
|
|
95
|
+
children: "×"
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ jsx("img", {
|
|
98
|
+
alt,
|
|
99
|
+
className: styles.lightboxImage,
|
|
100
|
+
"data-slot": "figure-lightbox-image",
|
|
101
|
+
src
|
|
102
|
+
}),
|
|
103
|
+
caption ? /* @__PURE__ */ jsx("figcaption", {
|
|
104
|
+
className: styles.lightboxCaption,
|
|
105
|
+
"data-slot": "figure-lightbox-caption",
|
|
106
|
+
children: caption.props.children
|
|
107
|
+
}) : null
|
|
108
|
+
]
|
|
109
|
+
})
|
|
110
|
+
})] })]
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
const Figure = {
|
|
115
|
+
Root: FigureRoot,
|
|
116
|
+
Image: FigureImage,
|
|
117
|
+
Caption: FigureCaption
|
|
118
|
+
};
|
|
119
|
+
//#endregion
|
|
120
|
+
export { Figure, FigureCaption, FigureImage, FigureRoot };
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=figure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figure.js","names":["BaseDialog","figureStyles"],"sources":["../../../src/components/figure/figure.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Children, createContext, forwardRef, isValidElement, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactElement, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { figure as figureStyles } from \"../../styled-system/recipes\";\nimport { Image } from \"../image\";\nimport type { ImageProps } from \"../image\";\n\ninterface FigureContextValue {\n lightbox: boolean;\n styles: ReturnType<typeof figureStyles>;\n}\n\nconst FigureContext = createContext<FigureContextValue | null>(null);\n\nfunction useFigureContext() {\n const value = useContext(FigureContext);\n if (!value) {\n throw new Error(\"Figure parts must be rendered inside Figure.Root.\");\n }\n return value;\n}\n\nexport type FigureImageProps = ImageProps;\n\nexport const FigureImage = forwardRef<HTMLImageElement, FigureImageProps>(function FigureImage(\n { className, lightbox: _lightbox, ...props },\n ref,\n) {\n const { lightbox, styles } = useFigureContext();\n const content = (\n <Image\n {...props}\n ref={ref}\n className={cx(styles.image, className)}\n data-slot=\"figure-image\"\n lightbox={false}\n />\n );\n\n if (!lightbox) {\n return content;\n }\n\n return (\n <BaseDialog.Trigger\n aria-label=\"Open image\"\n className={styles.trigger}\n data-jaci-component=\"figure-trigger\"\n data-slot=\"figure-trigger\"\n >\n {content}\n </BaseDialog.Trigger>\n );\n});\n\nexport type FigureCaptionProps = ComponentPropsWithoutRef<\"figcaption\">;\n\nexport const FigureCaption = forwardRef<HTMLElement, FigureCaptionProps>(function FigureCaption(\n { className, ...props },\n ref,\n) {\n const { styles } = useFigureContext();\n return (\n <figcaption\n {...props}\n ref={ref}\n className={cx(styles.caption, className)}\n data-slot=\"figure-caption\"\n />\n );\n});\n\nexport interface FigureRootProps extends ComponentPropsWithoutRef<\"figure\"> {\n lightbox?: boolean;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n closeLabel?: string;\n}\n\nfunction findChild<T>(children: ReactNode, component: ElementType): ReactElement<T> | null {\n const child = Children.toArray(children).find(\n (item) => isValidElement(item) && item.type === component,\n );\n return (child as ReactElement<T> | undefined) ?? null;\n}\n\nexport const FigureRoot = forwardRef<HTMLElement, FigureRootProps>(function FigureRoot(\n {\n children,\n className,\n closeLabel = \"Close image\",\n defaultOpen,\n lightbox = false,\n onOpenChange,\n open,\n ...props\n },\n ref,\n) {\n const styles = figureStyles();\n const media = findChild<FigureImageProps>(children, FigureImage);\n const caption = findChild<FigureCaptionProps>(children, FigureCaption);\n const canOpen = Boolean(lightbox && media?.props.src);\n const content = (\n <figure\n {...props}\n ref={ref}\n className={cx(styles.root, className)}\n data-jaci-component=\"figure\"\n data-lightbox={canOpen || undefined}\n data-slot=\"figure\"\n >\n {children}\n </figure>\n );\n\n const value = { lightbox: canOpen, styles };\n\n if (!canOpen || !media) {\n return <FigureContext.Provider value={value}>{content}</FigureContext.Provider>;\n }\n\n const alt = media.props.alt;\n const src = media.props.src;\n\n return (\n <FigureContext.Provider value={value}>\n <BaseDialog.Root\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => onOpenChange?.(nextOpen)}\n open={open}\n >\n {content}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={styles.backdrop} data-slot=\"figure-lightbox-backdrop\" />\n <BaseDialog.Viewport className={styles.viewport} data-slot=\"figure-lightbox-viewport\">\n <BaseDialog.Popup\n aria-label={alt || \"Image preview\"}\n className={styles.popup}\n data-jaci-component=\"figure-lightbox\"\n data-slot=\"figure-lightbox-popup\"\n >\n <BaseDialog.Title className={styles.title}>{alt || \"Image preview\"}</BaseDialog.Title>\n <BaseDialog.Close\n aria-label={closeLabel}\n className={styles.close}\n data-slot=\"figure-lightbox-close\"\n >\n ×\n </BaseDialog.Close>\n <img\n alt={alt}\n className={styles.lightboxImage}\n data-slot=\"figure-lightbox-image\"\n src={src}\n />\n {caption ? (\n <figcaption className={styles.lightboxCaption} data-slot=\"figure-lightbox-caption\">\n {caption.props.children}\n </figcaption>\n ) : null}\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n </FigureContext.Provider>\n );\n});\n\nexport const Figure = {\n Root: FigureRoot,\n Image: FigureImage,\n Caption: FigureCaption,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_cx = require("../../styled-system/css/cx.cjs");
|
|
3
|
+
const require_image = require("../../styled-system/recipes/image.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let _base_ui_react_dialog = require("@base-ui/react/dialog");
|
|
7
|
+
//#region src/components/image/image.tsx
|
|
8
|
+
const Image = (0, react.forwardRef)(function Image({ alt, aspectRatio, className, defaultOpen, fallback, fit = "cover", lightbox = false, lightboxLabel = "Open image", onError, onLoad, onOpenChange, onStatusChange, open, position, src, style, ...props }, ref) {
|
|
9
|
+
const [status, setStatus] = (0, react.useState)("loading");
|
|
10
|
+
(0, react.useEffect)(() => {
|
|
11
|
+
setStatus("loading");
|
|
12
|
+
}, [src]);
|
|
13
|
+
(0, react.useEffect)(() => {
|
|
14
|
+
onStatusChange?.(status);
|
|
15
|
+
}, [onStatusChange, status]);
|
|
16
|
+
const styles = require_image.image({
|
|
17
|
+
fit,
|
|
18
|
+
status
|
|
19
|
+
});
|
|
20
|
+
const rootStyle = {
|
|
21
|
+
...aspectRatio && Number.isFinite(aspectRatio) && aspectRatio > 0 ? { aspectRatio } : void 0,
|
|
22
|
+
...style
|
|
23
|
+
};
|
|
24
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
25
|
+
"aria-busy": status === "loading" || void 0,
|
|
26
|
+
className: styles.root,
|
|
27
|
+
"data-fit": fit,
|
|
28
|
+
"data-jaci-component": "image",
|
|
29
|
+
"data-slot": "image",
|
|
30
|
+
"data-status": status,
|
|
31
|
+
style: rootStyle,
|
|
32
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
33
|
+
...props,
|
|
34
|
+
ref,
|
|
35
|
+
alt,
|
|
36
|
+
className: require_cx.cx(styles.image, className),
|
|
37
|
+
"data-slot": "image-content",
|
|
38
|
+
onError: (event) => {
|
|
39
|
+
setStatus("error");
|
|
40
|
+
onError?.(event);
|
|
41
|
+
},
|
|
42
|
+
onLoad: (event) => {
|
|
43
|
+
setStatus("loaded");
|
|
44
|
+
onLoad?.(event);
|
|
45
|
+
},
|
|
46
|
+
src,
|
|
47
|
+
style: { objectPosition: position }
|
|
48
|
+
}), status === "error" && fallback ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49
|
+
"aria-live": "polite",
|
|
50
|
+
className: styles.fallback,
|
|
51
|
+
"data-slot": "image-fallback",
|
|
52
|
+
children: fallback
|
|
53
|
+
}) : null]
|
|
54
|
+
});
|
|
55
|
+
if (!lightbox) return content;
|
|
56
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Root, {
|
|
57
|
+
defaultOpen,
|
|
58
|
+
onOpenChange: (nextOpen) => onOpenChange?.(nextOpen),
|
|
59
|
+
open,
|
|
60
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Trigger, {
|
|
61
|
+
"aria-label": lightboxLabel,
|
|
62
|
+
className: styles.trigger,
|
|
63
|
+
"data-jaci-component": "image-trigger",
|
|
64
|
+
"data-slot": "image-trigger",
|
|
65
|
+
children: content
|
|
66
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Portal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Backdrop, {
|
|
67
|
+
className: styles.backdrop,
|
|
68
|
+
"data-slot": "image-lightbox-backdrop"
|
|
69
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Viewport, {
|
|
70
|
+
className: styles.viewport,
|
|
71
|
+
"data-slot": "image-lightbox-viewport",
|
|
72
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Popup, {
|
|
73
|
+
"aria-label": alt || lightboxLabel,
|
|
74
|
+
className: styles.popup,
|
|
75
|
+
"data-jaci-component": "image-lightbox",
|
|
76
|
+
"data-slot": "image-lightbox-popup",
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Title, {
|
|
79
|
+
className: styles.title,
|
|
80
|
+
children: alt || lightboxLabel
|
|
81
|
+
}),
|
|
82
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Close, {
|
|
83
|
+
"aria-label": "Close image",
|
|
84
|
+
className: styles.close,
|
|
85
|
+
"data-slot": "image-lightbox-close",
|
|
86
|
+
children: "×"
|
|
87
|
+
}),
|
|
88
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
89
|
+
alt,
|
|
90
|
+
className: styles.lightboxImage,
|
|
91
|
+
"data-slot": "image-lightbox-content",
|
|
92
|
+
src,
|
|
93
|
+
style: { objectPosition: position }
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
})
|
|
97
|
+
})] })]
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//#endregion
|
|
101
|
+
exports.Image = Image;
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=image.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.cjs","names":["image","cx","BaseDialog"],"sources":["../../../src/components/image/image.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { image } from \"../../styled-system/recipes\";\n\nexport type ImageFit = \"contain\" | \"cover\" | \"fill\" | \"none\";\nexport type ImageStatus = \"loading\" | \"loaded\" | \"error\";\n\nexport interface ImageProps extends Omit<ComponentPropsWithoutRef<\"img\">, \"children\"> {\n alt: string;\n aspectRatio?: number;\n defaultOpen?: boolean;\n fallback?: ReactNode;\n fit?: ImageFit;\n lightbox?: boolean;\n lightboxLabel?: string;\n onOpenChange?: (open: boolean) => void;\n onStatusChange?: (status: ImageStatus) => void;\n open?: boolean;\n position?: string;\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(\n {\n alt,\n aspectRatio,\n className,\n defaultOpen,\n fallback,\n fit = \"cover\",\n lightbox = false,\n lightboxLabel = \"Open image\",\n onError,\n onLoad,\n onOpenChange,\n onStatusChange,\n open,\n position,\n src,\n style,\n ...props\n },\n ref,\n) {\n const [status, setStatus] = useState<ImageStatus>(\"loading\");\n\n // The source is intentionally the reset key for the native image lifecycle.\n // biome-ignore lint/correctness/useExhaustiveDependencies: changing src starts a new lifecycle.\n useEffect(() => {\n setStatus(\"loading\");\n }, [src]);\n\n useEffect(() => {\n onStatusChange?.(status);\n }, [onStatusChange, status]);\n\n const styles = image({ fit, status });\n const rootStyle = {\n ...(aspectRatio && Number.isFinite(aspectRatio) && aspectRatio > 0\n ? { aspectRatio }\n : undefined),\n ...style,\n };\n\n const content = (\n <span\n aria-busy={status === \"loading\" || undefined}\n className={styles.root}\n data-fit={fit}\n data-jaci-component=\"image\"\n data-slot=\"image\"\n data-status={status}\n style={rootStyle}\n >\n <img\n {...props}\n ref={ref}\n alt={alt}\n className={cx(styles.image, className)}\n data-slot=\"image-content\"\n onError={(event) => {\n setStatus(\"error\");\n onError?.(event);\n }}\n onLoad={(event) => {\n setStatus(\"loaded\");\n onLoad?.(event);\n }}\n src={src}\n style={{ objectPosition: position }}\n />\n {status === \"error\" && fallback ? (\n <span aria-live=\"polite\" className={styles.fallback} data-slot=\"image-fallback\">\n {fallback}\n </span>\n ) : null}\n </span>\n );\n\n if (!lightbox) {\n return content;\n }\n\n return (\n <BaseDialog.Root\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => onOpenChange?.(nextOpen)}\n open={open}\n >\n <BaseDialog.Trigger\n aria-label={lightboxLabel}\n className={styles.trigger}\n data-jaci-component=\"image-trigger\"\n data-slot=\"image-trigger\"\n >\n {content}\n </BaseDialog.Trigger>\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={styles.backdrop} data-slot=\"image-lightbox-backdrop\" />\n <BaseDialog.Viewport className={styles.viewport} data-slot=\"image-lightbox-viewport\">\n <BaseDialog.Popup\n aria-label={alt || lightboxLabel}\n className={styles.popup}\n data-jaci-component=\"image-lightbox\"\n data-slot=\"image-lightbox-popup\"\n >\n <BaseDialog.Title className={styles.title}>{alt || lightboxLabel}</BaseDialog.Title>\n <BaseDialog.Close\n aria-label=\"Close image\"\n className={styles.close}\n data-slot=\"image-lightbox-close\"\n >\n ×\n </BaseDialog.Close>\n <img\n alt={alt}\n className={styles.lightboxImage}\n data-slot=\"image-lightbox-content\"\n src={src}\n style={{ objectPosition: position }}\n />\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\n"],"mappings":";;;;;;;AA0BA,MAAa,SAAA,GAAA,MAAA,WAAA,CAAiD,SAAS,MACrE,EACE,KACA,aACA,WACA,aACA,UACA,MAAM,SACN,WAAW,OACX,gBAAgB,cAChB,SACA,QACA,cACA,gBACA,MACA,UACA,KACA,OACA,GAAG,SAEL,KACA;CACA,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,SAAA,CAAmC,SAAS;CAI3D,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,UAAU,SAAS;CACrB,GAAG,CAAC,GAAG,CAAC;CAER,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,iBAAiB,MAAM;CACzB,GAAG,CAAC,gBAAgB,MAAM,CAAC;CAE3B,MAAM,SAASA,cAAAA,MAAM;EAAE;EAAK;CAAO,CAAC;CACpC,MAAM,YAAY;EAChB,GAAI,eAAe,OAAO,SAAS,WAAW,KAAK,cAAc,IAC7D,EAAE,YAAY,IACd,KAAA;EACJ,GAAG;CACL;CAEA,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EACE,aAAW,WAAW,aAAa,KAAA;EACnC,WAAW,OAAO;EAClB,YAAU;EACV,uBAAoB;EACpB,aAAU;EACV,eAAa;EACb,OAAO;YAPT,CASE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,GAAI;GACC;GACA;GACL,WAAWC,WAAAA,GAAG,OAAO,OAAO,SAAS;GACrC,aAAU;GACV,UAAU,UAAU;IAClB,UAAU,OAAO;IACjB,UAAU,KAAK;GACjB;GACA,SAAS,UAAU;IACjB,UAAU,QAAQ;IAClB,SAAS,KAAK;GAChB;GACK;GACL,OAAO,EAAE,gBAAgB,SAAS;EACnC,CAAA,GACA,WAAW,WAAW,WACrB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,aAAU;GAAS,WAAW,OAAO;GAAU,aAAU;aAC5D;EACG,CAAA,IACJ,IACA;;CAGR,IAAI,CAAC,UACH,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,sBAAAA,OAAW,MAAZ;EACe;EACb,eAAe,aAAa,eAAe,QAAQ;EAC7C;YAHR,CAKE,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,SAAZ;GACE,cAAY;GACZ,WAAW,OAAO;GAClB,uBAAoB;GACpB,aAAU;aAET;EACiB,CAAA,GACpB,iBAAA,GAAA,kBAAA,KAAA,CAACA,sBAAAA,OAAW,QAAZ,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,UAAZ;GAAqB,WAAW,OAAO;GAAU,aAAU;EAA2B,CAAA,GACtF,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,UAAZ;GAAqB,WAAW,OAAO;GAAU,aAAU;aACzD,iBAAA,GAAA,kBAAA,KAAA,CAACA,sBAAAA,OAAW,OAAZ;IACE,cAAY,OAAO;IACnB,WAAW,OAAO;IAClB,uBAAoB;IACpB,aAAU;cAJZ;KAME,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,OAAZ;MAAkB,WAAW,OAAO;gBAAQ,OAAO;KAAgC,CAAA;KACnF,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,OAAW,OAAZ;MACE,cAAW;MACX,WAAW,OAAO;MAClB,aAAU;gBACX;KAEiB,CAAA;KAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MACO;MACL,WAAW,OAAO;MAClB,aAAU;MACL;MACL,OAAO,EAAE,gBAAgB,SAAS;KACnC,CAAA;IACe;;EACC,CAAA,CACJ,EAAA,CAAA,CACJ;;AAErB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
|
+
//#region src/components/image/image.d.ts
|
|
3
|
+
type ImageFit = "contain" | "cover" | "fill" | "none";
|
|
4
|
+
type ImageStatus = "loading" | "loaded" | "error";
|
|
5
|
+
interface ImageProps extends Omit<ComponentPropsWithoutRef<"img">, "children"> {
|
|
6
|
+
alt: string;
|
|
7
|
+
aspectRatio?: number;
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
fallback?: ReactNode;
|
|
10
|
+
fit?: ImageFit;
|
|
11
|
+
lightbox?: boolean;
|
|
12
|
+
lightboxLabel?: string;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
onStatusChange?: (status: ImageStatus) => void;
|
|
15
|
+
open?: boolean;
|
|
16
|
+
position?: string;
|
|
17
|
+
}
|
|
18
|
+
declare const Image: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { Image, ImageFit, ImageProps, ImageStatus };
|
|
21
|
+
//# sourceMappingURL=image.d.cts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
|
+
//#region src/components/image/image.d.ts
|
|
3
|
+
type ImageFit = "contain" | "cover" | "fill" | "none";
|
|
4
|
+
type ImageStatus = "loading" | "loaded" | "error";
|
|
5
|
+
interface ImageProps extends Omit<ComponentPropsWithoutRef<"img">, "children"> {
|
|
6
|
+
alt: string;
|
|
7
|
+
aspectRatio?: number;
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
fallback?: ReactNode;
|
|
10
|
+
fit?: ImageFit;
|
|
11
|
+
lightbox?: boolean;
|
|
12
|
+
lightboxLabel?: string;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
onStatusChange?: (status: ImageStatus) => void;
|
|
15
|
+
open?: boolean;
|
|
16
|
+
position?: string;
|
|
17
|
+
}
|
|
18
|
+
declare const Image: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HTMLImageElement>>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { Image, ImageFit, ImageProps, ImageStatus };
|
|
21
|
+
//# sourceMappingURL=image.d.ts.map
|