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.
Files changed (170) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +31 -0
  3. package/dist/components/alert/alert.cjs +11 -1
  4. package/dist/components/alert/alert.cjs.map +1 -1
  5. package/dist/components/alert/alert.d.cts +4 -1
  6. package/dist/components/alert/alert.d.ts +4 -1
  7. package/dist/components/alert/alert.js +11 -2
  8. package/dist/components/alert/alert.js.map +1 -1
  9. package/dist/components/alert/index.d.cts +2 -2
  10. package/dist/components/alert/index.d.ts +2 -2
  11. package/dist/components/aspect-ratio/aspect-ratio.cjs +23 -0
  12. package/dist/components/aspect-ratio/aspect-ratio.cjs.map +1 -0
  13. package/dist/components/aspect-ratio/aspect-ratio.d.cts +9 -0
  14. package/dist/components/aspect-ratio/aspect-ratio.d.ts +9 -0
  15. package/dist/components/aspect-ratio/aspect-ratio.js +23 -0
  16. package/dist/components/aspect-ratio/aspect-ratio.js.map +1 -0
  17. package/dist/components/aspect-ratio/index.d.cts +2 -0
  18. package/dist/components/aspect-ratio/index.d.ts +2 -0
  19. package/dist/components/card/card.cjs +10 -1
  20. package/dist/components/card/card.cjs.map +1 -1
  21. package/dist/components/card/card.d.cts +15 -2
  22. package/dist/components/card/card.d.ts +15 -2
  23. package/dist/components/card/card.js +10 -2
  24. package/dist/components/card/card.js.map +1 -1
  25. package/dist/components/card/index.d.cts +2 -2
  26. package/dist/components/card/index.d.ts +2 -2
  27. package/dist/components/code/code.cjs +39 -0
  28. package/dist/components/code/code.cjs.map +1 -0
  29. package/dist/components/code/code.d.cts +14 -0
  30. package/dist/components/code/code.d.ts +14 -0
  31. package/dist/components/code/code.js +39 -0
  32. package/dist/components/code/code.js.map +1 -0
  33. package/dist/components/code/index.d.cts +2 -0
  34. package/dist/components/code/index.d.ts +2 -0
  35. package/dist/components/feedback/badge.cjs +6 -3
  36. package/dist/components/feedback/badge.cjs.map +1 -1
  37. package/dist/components/feedback/badge.d.cts +1 -0
  38. package/dist/components/feedback/badge.d.ts +1 -0
  39. package/dist/components/feedback/badge.js +6 -3
  40. package/dist/components/feedback/badge.js.map +1 -1
  41. package/dist/components/figure/figure.cjs +125 -0
  42. package/dist/components/figure/figure.cjs.map +1 -0
  43. package/dist/components/figure/figure.d.cts +24 -0
  44. package/dist/components/figure/figure.d.ts +24 -0
  45. package/dist/components/figure/figure.js +122 -0
  46. package/dist/components/figure/figure.js.map +1 -0
  47. package/dist/components/figure/index.d.cts +2 -0
  48. package/dist/components/figure/index.d.ts +2 -0
  49. package/dist/components/image/image.cjs +103 -0
  50. package/dist/components/image/image.cjs.map +1 -0
  51. package/dist/components/image/image.d.cts +21 -0
  52. package/dist/components/image/image.d.ts +21 -0
  53. package/dist/components/image/image.js +103 -0
  54. package/dist/components/image/image.js.map +1 -0
  55. package/dist/components/image/index.d.cts +2 -0
  56. package/dist/components/image/index.d.ts +2 -0
  57. package/dist/components/kbd/index.d.cts +2 -0
  58. package/dist/components/kbd/index.d.ts +2 -0
  59. package/dist/components/kbd/kbd.cjs +23 -0
  60. package/dist/components/kbd/kbd.cjs.map +1 -0
  61. package/dist/components/kbd/kbd.d.cts +12 -0
  62. package/dist/components/kbd/kbd.d.ts +12 -0
  63. package/dist/components/kbd/kbd.js +23 -0
  64. package/dist/components/kbd/kbd.js.map +1 -0
  65. package/dist/components/progress/progress.cjs +19 -7
  66. package/dist/components/progress/progress.cjs.map +1 -1
  67. package/dist/components/progress/progress.d.cts +4 -0
  68. package/dist/components/progress/progress.d.ts +4 -0
  69. package/dist/components/progress/progress.js +19 -7
  70. package/dist/components/progress/progress.js.map +1 -1
  71. package/dist/components/quote/index.d.cts +2 -0
  72. package/dist/components/quote/index.d.ts +2 -0
  73. package/dist/components/quote/quote.cjs +38 -0
  74. package/dist/components/quote/quote.cjs.map +1 -0
  75. package/dist/components/quote/quote.d.cts +19 -0
  76. package/dist/components/quote/quote.d.ts +19 -0
  77. package/dist/components/quote/quote.js +38 -0
  78. package/dist/components/quote/quote.js.map +1 -0
  79. package/dist/components/stat/index.d.cts +2 -0
  80. package/dist/components/stat/index.d.ts +2 -0
  81. package/dist/components/stat/stat.cjs +122 -0
  82. package/dist/components/stat/stat.cjs.map +1 -0
  83. package/dist/components/stat/stat.d.cts +51 -0
  84. package/dist/components/stat/stat.d.ts +51 -0
  85. package/dist/components/stat/stat.js +114 -0
  86. package/dist/components/stat/stat.js.map +1 -0
  87. package/dist/components/stat-group/index.d.cts +2 -0
  88. package/dist/components/stat-group/index.d.ts +2 -0
  89. package/dist/components/typography/heading.cjs +8 -2
  90. package/dist/components/typography/heading.cjs.map +1 -1
  91. package/dist/components/typography/heading.d.cts +8 -1
  92. package/dist/components/typography/heading.d.ts +8 -1
  93. package/dist/components/typography/heading.js +8 -2
  94. package/dist/components/typography/heading.js.map +1 -1
  95. package/dist/components/typography/index.d.cts +2 -2
  96. package/dist/components/typography/index.d.ts +2 -2
  97. package/dist/components/typography/paragraph.cjs +7 -2
  98. package/dist/components/typography/paragraph.cjs.map +1 -1
  99. package/dist/components/typography/paragraph.d.cts +8 -2
  100. package/dist/components/typography/paragraph.d.ts +8 -2
  101. package/dist/components/typography/paragraph.js +7 -2
  102. package/dist/components/typography/paragraph.js.map +1 -1
  103. package/dist/components/typography/text.cjs +6 -2
  104. package/dist/components/typography/text.cjs.map +1 -1
  105. package/dist/components/typography/text.d.cts +5 -0
  106. package/dist/components/typography/text.d.ts +5 -0
  107. package/dist/components/typography/text.js +6 -2
  108. package/dist/components/typography/text.js.map +1 -1
  109. package/dist/index.cjs +27 -0
  110. package/dist/index.d.cts +19 -4
  111. package/dist/index.d.ts +19 -4
  112. package/dist/index.js +10 -3
  113. package/dist/styled-system/recipes/alert.cjs +2 -1
  114. package/dist/styled-system/recipes/alert.cjs.map +1 -1
  115. package/dist/styled-system/recipes/alert.js +2 -1
  116. package/dist/styled-system/recipes/alert.js.map +1 -1
  117. package/dist/styled-system/recipes/aspect-ratio-box.cjs +25 -0
  118. package/dist/styled-system/recipes/aspect-ratio-box.cjs.map +1 -0
  119. package/dist/styled-system/recipes/aspect-ratio-box.js +25 -0
  120. package/dist/styled-system/recipes/aspect-ratio-box.js.map +1 -0
  121. package/dist/styled-system/recipes/badge.cjs +16 -6
  122. package/dist/styled-system/recipes/badge.cjs.map +1 -1
  123. package/dist/styled-system/recipes/badge.js +16 -6
  124. package/dist/styled-system/recipes/badge.js.map +1 -1
  125. package/dist/styled-system/recipes/code.cjs +33 -0
  126. package/dist/styled-system/recipes/code.cjs.map +1 -0
  127. package/dist/styled-system/recipes/code.js +33 -0
  128. package/dist/styled-system/recipes/code.js.map +1 -0
  129. package/dist/styled-system/recipes/figure.cjs +42 -0
  130. package/dist/styled-system/recipes/figure.cjs.map +1 -0
  131. package/dist/styled-system/recipes/figure.js +42 -0
  132. package/dist/styled-system/recipes/figure.js.map +1 -0
  133. package/dist/styled-system/recipes/heading.cjs +34 -9
  134. package/dist/styled-system/recipes/heading.cjs.map +1 -1
  135. package/dist/styled-system/recipes/heading.js +34 -9
  136. package/dist/styled-system/recipes/heading.js.map +1 -1
  137. package/dist/styled-system/recipes/image.cjs +56 -0
  138. package/dist/styled-system/recipes/image.cjs.map +1 -0
  139. package/dist/styled-system/recipes/image.js +56 -0
  140. package/dist/styled-system/recipes/image.js.map +1 -0
  141. package/dist/styled-system/recipes/kbd.cjs +39 -0
  142. package/dist/styled-system/recipes/kbd.cjs.map +1 -0
  143. package/dist/styled-system/recipes/kbd.js +39 -0
  144. package/dist/styled-system/recipes/kbd.js.map +1 -0
  145. package/dist/styled-system/recipes/paragraph.cjs +25 -2
  146. package/dist/styled-system/recipes/paragraph.cjs.map +1 -1
  147. package/dist/styled-system/recipes/paragraph.js +25 -2
  148. package/dist/styled-system/recipes/paragraph.js.map +1 -1
  149. package/dist/styled-system/recipes/progress.cjs +1 -0
  150. package/dist/styled-system/recipes/progress.cjs.map +1 -1
  151. package/dist/styled-system/recipes/progress.js +1 -0
  152. package/dist/styled-system/recipes/progress.js.map +1 -1
  153. package/dist/styled-system/recipes/quote.cjs +39 -0
  154. package/dist/styled-system/recipes/quote.cjs.map +1 -0
  155. package/dist/styled-system/recipes/quote.js +39 -0
  156. package/dist/styled-system/recipes/quote.js.map +1 -0
  157. package/dist/styled-system/recipes/stat-group.cjs +40 -0
  158. package/dist/styled-system/recipes/stat-group.cjs.map +1 -0
  159. package/dist/styled-system/recipes/stat-group.js +40 -0
  160. package/dist/styled-system/recipes/stat-group.js.map +1 -0
  161. package/dist/styled-system/recipes/stat.cjs +63 -0
  162. package/dist/styled-system/recipes/stat.cjs.map +1 -0
  163. package/dist/styled-system/recipes/stat.js +63 -0
  164. package/dist/styled-system/recipes/stat.js.map +1 -0
  165. package/dist/styled-system/recipes/text.cjs +23 -2
  166. package/dist/styled-system/recipes/text.cjs.map +1 -1
  167. package/dist/styled-system/recipes/text.js +23 -2
  168. package/dist/styled-system/recipes/text.js.map +1 -1
  169. package/dist/styles.css +1005 -81
  170. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ import { Code, CodeProps, CodeVariant } from "./code.js";
2
+ export { Code, type CodeProps, type CodeVariant };
@@ -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-slot": "badge"
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":";;;;;AAUA,MAAa,SAAA,GAAA,MAAA,WAAA,CAAgD,SAAS,MACpE,EAAE,WAAW,OAAO,WAAW,GAAG,SAClC,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,GAAI;EACC;EACL,WAAWA,WAAAA,GAAGC,cAAAA,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS;EACxC,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC"}
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-slot": "badge"
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":";;;;;AAUA,MAAa,QAAQ,WAAwC,SAAS,MACpE,EAAE,WAAW,OAAO,WAAW,GAAG,SAClC,KACA;CACA,OACE,oBAAC,QAAD;EACE,GAAI;EACC;EACL,WAAW,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS;EACxC,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC"}
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":"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"}
@@ -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,2 @@
1
+ import { Figure, FigureCaption, FigureCaptionProps, FigureImage, FigureImageProps, FigureRoot, FigureRootProps } from "./figure.cjs";
2
+ export { Figure, FigureCaption, type FigureCaptionProps, FigureImage, type FigureImageProps, FigureRoot, type FigureRootProps };
@@ -0,0 +1,2 @@
1
+ import { Figure, FigureCaption, FigureCaptionProps, FigureImage, FigureImageProps, FigureRoot, FigureRootProps } from "./figure.js";
2
+ export { Figure, FigureCaption, type FigureCaptionProps, FigureImage, type FigureImageProps, FigureRoot, type FigureRootProps };
@@ -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