@jiwambe/components 0.3.4 → 0.3.6

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 (203) hide show
  1. package/dist/client.d.ts +8 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +10 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/components/Accordion/Accordion.test.d.ts +2 -0
  6. package/dist/components/Accordion/Accordion.test.d.ts.map +1 -0
  7. package/dist/components/BarGraph/BarGraph.d.ts +66 -0
  8. package/dist/components/BarGraph/BarGraph.d.ts.map +1 -0
  9. package/dist/components/BarGraph/BarGraph.js +151 -0
  10. package/dist/components/BarGraph/BarGraph.js.map +1 -0
  11. package/dist/components/BarGraph/BarGraph.test.d.ts +1 -0
  12. package/dist/components/BarGraph/BarGraph.test.d.ts.map +1 -0
  13. package/dist/components/BarGraph/BarGraphSkeleton.d.ts +12 -0
  14. package/dist/components/BarGraph/BarGraphSkeleton.d.ts.map +1 -0
  15. package/dist/components/BarGraph/BarGraphSkeleton.js +36 -0
  16. package/dist/components/BarGraph/BarGraphSkeleton.js.map +1 -0
  17. package/dist/components/Box/Box.test.d.ts +15 -0
  18. package/dist/components/Box/Box.test.d.ts.map +1 -0
  19. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  20. package/dist/components/Breadcrumb/Breadcrumb.js +89 -0
  21. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  22. package/dist/components/Button/Button.test.d.ts +2 -0
  23. package/dist/components/Button/Button.test.d.ts.map +1 -0
  24. package/dist/components/Card/Card.d.ts +57 -43
  25. package/dist/components/Card/Card.d.ts.map +1 -1
  26. package/dist/components/Card/Card.js +51 -89
  27. package/dist/components/Card/Card.js.map +1 -1
  28. package/dist/components/Card/Card.test.d.ts +2 -0
  29. package/dist/components/Card/Card.test.d.ts.map +1 -0
  30. package/dist/components/CheckboxGroup/CheckboxGroup.test.d.ts +2 -0
  31. package/dist/components/CheckboxGroup/CheckboxGroup.test.d.ts.map +1 -0
  32. package/dist/components/Container/Container.test.d.ts +2 -0
  33. package/dist/components/Container/Container.test.d.ts.map +1 -0
  34. package/dist/components/DataTable/DataTable.d.ts +74 -0
  35. package/dist/components/DataTable/DataTable.d.ts.map +1 -0
  36. package/dist/components/DataTable/DataTable.js +183 -0
  37. package/dist/components/DataTable/DataTable.js.map +1 -0
  38. package/dist/components/DataTable/DataTable.test.d.ts +2 -0
  39. package/dist/components/DataTable/DataTable.test.d.ts.map +1 -0
  40. package/dist/components/DataTable/DataTableCell.d.ts +15 -0
  41. package/dist/components/DataTable/DataTableCell.d.ts.map +1 -0
  42. package/dist/components/DataTable/DataTableCell.js +24 -0
  43. package/dist/components/DataTable/DataTableCell.js.map +1 -0
  44. package/dist/components/DataTable/DataTableHeader.d.ts +31 -0
  45. package/dist/components/DataTable/DataTableHeader.d.ts.map +1 -0
  46. package/dist/components/DataTable/DataTableHeader.js +83 -0
  47. package/dist/components/DataTable/DataTableHeader.js.map +1 -0
  48. package/dist/components/DataTable/DataTablePagination.d.ts +26 -0
  49. package/dist/components/DataTable/DataTablePagination.d.ts.map +1 -0
  50. package/dist/components/DataTable/DataTablePagination.js +115 -0
  51. package/dist/components/DataTable/DataTablePagination.js.map +1 -0
  52. package/dist/components/DataTable/DataTableReviewerCell.d.ts +18 -0
  53. package/dist/components/DataTable/DataTableReviewerCell.d.ts.map +1 -0
  54. package/dist/components/DataTable/DataTableReviewerCell.js +31 -0
  55. package/dist/components/DataTable/DataTableReviewerCell.js.map +1 -0
  56. package/dist/components/DataTable/DataTableRow.d.ts +35 -0
  57. package/dist/components/DataTable/DataTableRow.d.ts.map +1 -0
  58. package/dist/components/DataTable/DataTableRow.js +77 -0
  59. package/dist/components/DataTable/DataTableRow.js.map +1 -0
  60. package/dist/components/DataTable/DataTableRowMenu.d.ts +25 -0
  61. package/dist/components/DataTable/DataTableRowMenu.d.ts.map +1 -0
  62. package/dist/components/DataTable/DataTableRowMenu.js +60 -0
  63. package/dist/components/DataTable/DataTableRowMenu.js.map +1 -0
  64. package/dist/components/DataTable/DataTableStatusBadge.d.ts +16 -0
  65. package/dist/components/DataTable/DataTableStatusBadge.d.ts.map +1 -0
  66. package/dist/components/DataTable/DataTableStatusBadge.js +37 -0
  67. package/dist/components/DataTable/DataTableStatusBadge.js.map +1 -0
  68. package/dist/components/DataTable/DataTableToolbar.d.ts +32 -0
  69. package/dist/components/DataTable/DataTableToolbar.d.ts.map +1 -0
  70. package/dist/components/DataTable/DataTableToolbar.js +37 -0
  71. package/dist/components/DataTable/DataTableToolbar.js.map +1 -0
  72. package/dist/components/DateInput/DateInput.test.d.ts +2 -0
  73. package/dist/components/DateInput/DateInput.test.d.ts.map +1 -0
  74. package/dist/components/Dialog/Dialog.d.ts +28 -0
  75. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  76. package/dist/components/Dialog/Dialog.js +34 -0
  77. package/dist/components/Dialog/Dialog.js.map +1 -0
  78. package/dist/components/Dialog/Dialog.test.d.ts +2 -0
  79. package/dist/components/Dialog/Dialog.test.d.ts.map +1 -0
  80. package/dist/components/Divider/Divider.test.d.ts +2 -0
  81. package/dist/components/Divider/Divider.test.d.ts.map +1 -0
  82. package/dist/components/Drawer/Drawer.test.d.ts +2 -0
  83. package/dist/components/Drawer/Drawer.test.d.ts.map +1 -0
  84. package/dist/components/FAQ/FAQ.test.d.ts +2 -0
  85. package/dist/components/FAQ/FAQ.test.d.ts.map +1 -0
  86. package/dist/components/Grid/Grid.d.ts +6 -6
  87. package/dist/components/Grid/Grid.js.map +1 -1
  88. package/dist/components/Grid/Grid.test.d.ts +2 -0
  89. package/dist/components/Grid/Grid.test.d.ts.map +1 -0
  90. package/dist/components/Icon/Icon.d.ts +17 -13
  91. package/dist/components/Icon/Icon.d.ts.map +1 -1
  92. package/dist/components/Icon/Icon.js +12 -162
  93. package/dist/components/Icon/Icon.js.map +1 -1
  94. package/dist/components/Icon/Icon.test.d.ts +2 -0
  95. package/dist/components/Icon/Icon.test.d.ts.map +1 -0
  96. package/dist/components/JiwambeCard/JiwambeCard.d.ts +54 -0
  97. package/dist/components/JiwambeCard/JiwambeCard.d.ts.map +1 -0
  98. package/dist/components/JiwambeCard/JiwambeCard.js +101 -0
  99. package/dist/components/JiwambeCard/JiwambeCard.js.map +1 -0
  100. package/dist/components/JiwambeCard/JiwambeCard.test.d.ts +2 -0
  101. package/dist/components/JiwambeCard/JiwambeCard.test.d.ts.map +1 -0
  102. package/dist/components/LineGraph/LineGraph.d.ts +40 -0
  103. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -0
  104. package/dist/components/LineGraph/LineGraph.js +176 -0
  105. package/dist/components/LineGraph/LineGraph.js.map +1 -0
  106. package/dist/components/LineGraph/LineGraph.test.d.ts +1 -0
  107. package/dist/components/LineGraph/LineGraph.test.d.ts.map +1 -0
  108. package/dist/components/LineGraph/LineGraphLegend.d.ts +17 -0
  109. package/dist/components/LineGraph/LineGraphLegend.d.ts.map +1 -0
  110. package/dist/components/LineGraph/LineGraphLegend.js +56 -0
  111. package/dist/components/LineGraph/LineGraphLegend.js.map +1 -0
  112. package/dist/components/LineGraph/LineGraphSkeleton.d.ts +12 -0
  113. package/dist/components/LineGraph/LineGraphSkeleton.d.ts.map +1 -0
  114. package/dist/components/LineGraph/LineGraphSkeleton.js +21 -0
  115. package/dist/components/LineGraph/LineGraphSkeleton.js.map +1 -0
  116. package/dist/components/LineGraph/LineGraphTooltip.d.ts +12 -0
  117. package/dist/components/LineGraph/LineGraphTooltip.d.ts.map +1 -0
  118. package/dist/components/LineGraph/LineGraphTooltip.js +41 -0
  119. package/dist/components/LineGraph/LineGraphTooltip.js.map +1 -0
  120. package/dist/components/LineGraph/lineGraphUtils.d.ts +33 -0
  121. package/dist/components/LineGraph/lineGraphUtils.d.ts.map +1 -0
  122. package/dist/components/LineGraph/lineGraphUtils.js +62 -0
  123. package/dist/components/LineGraph/lineGraphUtils.js.map +1 -0
  124. package/dist/components/LineGraph/types.d.ts +21 -0
  125. package/dist/components/LineGraph/types.d.ts.map +1 -0
  126. package/dist/components/Link/Link.test.d.ts +2 -0
  127. package/dist/components/Link/Link.test.d.ts.map +1 -0
  128. package/dist/components/List/List.d.ts +5 -3
  129. package/dist/components/List/List.d.ts.map +1 -1
  130. package/dist/components/List/List.js +35 -6
  131. package/dist/components/List/List.js.map +1 -1
  132. package/dist/components/List/List.test.d.ts +2 -0
  133. package/dist/components/List/List.test.d.ts.map +1 -0
  134. package/dist/components/Overlay/Overlay.test.d.ts +2 -0
  135. package/dist/components/Overlay/Overlay.test.d.ts.map +1 -0
  136. package/dist/components/PhoneInput/PhoneInput.test.d.ts +2 -0
  137. package/dist/components/PhoneInput/PhoneInput.test.d.ts.map +1 -0
  138. package/dist/components/Popover/Popover.test.d.ts +2 -0
  139. package/dist/components/Popover/Popover.test.d.ts.map +1 -0
  140. package/dist/components/ProductCard/ProductCard.d.ts +12 -0
  141. package/dist/components/ProductCard/ProductCard.d.ts.map +1 -1
  142. package/dist/components/ProductCard/ProductCard.js +25 -10
  143. package/dist/components/ProductCard/ProductCard.js.map +1 -1
  144. package/dist/components/ProductCard/ProductCard.test.d.ts +2 -0
  145. package/dist/components/ProductCard/ProductCard.test.d.ts.map +1 -0
  146. package/dist/components/ProductImage/ProductImage.test.d.ts +2 -0
  147. package/dist/components/ProductImage/ProductImage.test.d.ts.map +1 -0
  148. package/dist/components/RadioGroup/RadioGroup.test.d.ts +2 -0
  149. package/dist/components/RadioGroup/RadioGroup.test.d.ts.map +1 -0
  150. package/dist/components/Section/Section.test.d.ts +2 -0
  151. package/dist/components/Section/Section.test.d.ts.map +1 -0
  152. package/dist/components/Select/Select.test.d.ts +2 -0
  153. package/dist/components/Select/Select.test.d.ts.map +1 -0
  154. package/dist/components/SelectTab/SelectTab.test.d.ts +2 -0
  155. package/dist/components/SelectTab/SelectTab.test.d.ts.map +1 -0
  156. package/dist/components/Skeleton/Skeleton.d.ts +4 -4
  157. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  158. package/dist/components/Skeleton/Skeleton.js +1 -1
  159. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  160. package/dist/components/Skeleton/Skeleton.test.d.ts +2 -0
  161. package/dist/components/Skeleton/Skeleton.test.d.ts.map +1 -0
  162. package/dist/components/Slider/Slider.test.d.ts +2 -0
  163. package/dist/components/Slider/Slider.test.d.ts.map +1 -0
  164. package/dist/components/Stack/Stack.test.d.ts +2 -0
  165. package/dist/components/Stack/Stack.test.d.ts.map +1 -0
  166. package/dist/components/Tab/Tab.test.d.ts +2 -0
  167. package/dist/components/Tab/Tab.test.d.ts.map +1 -0
  168. package/dist/components/TextArea/TextArea.test.d.ts +2 -0
  169. package/dist/components/TextArea/TextArea.test.d.ts.map +1 -0
  170. package/dist/components/TextInput/TextInput.test.d.ts +2 -0
  171. package/dist/components/TextInput/TextInput.test.d.ts.map +1 -0
  172. package/dist/components/Toggle/Toggle.test.d.ts +2 -0
  173. package/dist/components/Toggle/Toggle.test.d.ts.map +1 -0
  174. package/dist/components/Typography/Typography.test.d.ts +15 -0
  175. package/dist/components/Typography/Typography.test.d.ts.map +1 -0
  176. package/dist/components/UploadInput/UploadInput.test.d.ts +2 -0
  177. package/dist/components/UploadInput/UploadInput.test.d.ts.map +1 -0
  178. package/dist/components/index.d.ts +18 -3
  179. package/dist/components/index.d.ts.map +1 -1
  180. package/dist/index.d.ts +2 -2
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +12 -0
  183. package/dist/index.js.map +1 -1
  184. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/Check.js +10 -0
  185. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/Check.js.map +1 -0
  186. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/ChevronLeft.js +10 -0
  187. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/ChevronLeft.js.map +1 -0
  188. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/ChevronRight.js +10 -0
  189. package/dist/node_modules/.pnpm/@jiwambe_icons@0.3.1_react@19.2.4/node_modules/@jiwambe/icons/dist/icons/ChevronRight.js.map +1 -0
  190. package/dist/plugin/jiwambe-plugin.d.ts.map +1 -1
  191. package/dist/plugin/jiwambe-plugin.js +5 -0
  192. package/dist/plugin/jiwambe-plugin.js.map +1 -1
  193. package/dist/server.d.ts +3 -3
  194. package/dist/server.d.ts.map +1 -1
  195. package/dist/server.js +2 -2
  196. package/dist/types/list.d.ts +4 -3
  197. package/dist/types/list.d.ts.map +1 -1
  198. package/dist/types/list.js.map +1 -1
  199. package/dist/utils/layoutClasses.test.d.ts +2 -0
  200. package/dist/utils/layoutClasses.test.d.ts.map +1 -0
  201. package/dist/utils/spacing.test.d.ts +2 -0
  202. package/dist/utils/spacing.test.d.ts.map +1 -0
  203. package/package.json +5 -3
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Button } from "../Button/Button.js";
5
+ import { Popover } from "../Popover/Popover.js";
6
+ import { Icon } from "../Icon/Icon.js";
7
+ import { Typography } from "../Typography/Typography.js";
8
+ function DataTableRowMenu({ actions, onOpen }) {
9
+ const [isOpen, setIsOpen] = useState(false);
10
+ const handleOpen = () => {
11
+ setIsOpen(!isOpen);
12
+ if (!isOpen) onOpen == null ? void 0 : onOpen();
13
+ };
14
+ return /* @__PURE__ */ jsxs("div", { className: "relative flex justify-center items-center", children: [
15
+ /* @__PURE__ */ jsx(
16
+ Button,
17
+ {
18
+ variant: "ghost",
19
+ size: "small",
20
+ iconOnly: /* @__PURE__ */ jsx(
21
+ Icon,
22
+ {
23
+ icon: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: [
24
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1" }),
25
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "5", r: "1" }),
26
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "19", r: "1" })
27
+ ] }),
28
+ size: 16
29
+ }
30
+ ),
31
+ onClick: (e) => {
32
+ e.stopPropagation();
33
+ handleOpen();
34
+ },
35
+ "aria-label": "Row menu"
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsx(Popover, { open: isOpen, onClose: () => setIsOpen(false), align: "right", minWidth: "12rem", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col py-space-1", children: actions.map((action, idx) => /* @__PURE__ */ jsx(
39
+ "button",
40
+ {
41
+ type: "button",
42
+ className: [
43
+ "w-full text-left px-space-4 py-space-3 transition-colors rounded-rad-xs",
44
+ action.destructive ? "hover:bg-fill-bg-err text-text-err" : "hover:bg-fill-bg-secondary text-text-primary"
45
+ ].filter(Boolean).join(" "),
46
+ onClick: (e) => {
47
+ e.stopPropagation();
48
+ action.onSelect();
49
+ setIsOpen(false);
50
+ },
51
+ children: /* @__PURE__ */ jsx(Typography, { variant: "text-sm", as: "span", className: "font-medium", children: action.label })
52
+ },
53
+ idx
54
+ )) }) })
55
+ ] });
56
+ }
57
+ export {
58
+ DataTableRowMenu
59
+ };
60
+ //# sourceMappingURL=DataTableRowMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableRowMenu.js","sources":["../../../src/components/DataTable/DataTableRowMenu.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Button } from '../Button/Button';\nimport { Popover } from '../Popover/Popover';\nimport { Icon } from '../Icon/Icon';\nimport { Typography } from '../Typography/Typography';\n\n/**\n * Shape of a single action in the DataTableRowMenu.\n */\nexport interface DataTableAction {\n /** Label displayed in the menu. */\n label: string;\n /** Callback fired when the action is selected. */\n onSelect: () => void;\n /** When true, applies error/danger styling. @default false */\n destructive?: boolean;\n}\n\n/**\n * Props for the DataTableRowMenu component.\n */\nexport interface DataTableRowMenuProps {\n /** Array of actions to display in the menu. */\n actions: DataTableAction[];\n /** Fired when the menu is opened. */\n onOpen?: () => void;\n}\n\n/**\n * Row context menu (three-dot dropdown). Renders a trigger button and a Popover panel.\n */\nexport function DataTableRowMenu({ actions, onOpen }: DataTableRowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const handleOpen = () => {\n setIsOpen(!isOpen);\n if (!isOpen) onOpen?.();\n };\n\n return (\n <div className=\"relative flex justify-center items-center\">\n <Button\n variant=\"ghost\"\n size=\"small\"\n iconOnly={\n <Icon\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n }\n size={16}\n />\n }\n onClick={(e) => {\n e.stopPropagation();\n handleOpen();\n }}\n aria-label=\"Row menu\"\n />\n \n <Popover open={isOpen} onClose={() => setIsOpen(false)} align=\"right\" minWidth=\"12rem\">\n <div className=\"flex flex-col py-space-1\">\n {actions.map((action, idx) => (\n <button\n key={idx}\n type=\"button\"\n className={[\n 'w-full text-left px-space-4 py-space-3 transition-colors rounded-rad-xs',\n action.destructive ? 'hover:bg-fill-bg-err text-text-err' : 'hover:bg-fill-bg-secondary text-text-primary'\n ].filter(Boolean).join(' ')}\n onClick={(e) => {\n e.stopPropagation();\n action.onSelect();\n setIsOpen(false);\n }}\n >\n <Typography variant=\"text-sm\" as=\"span\" className=\"font-medium\">\n {action.label}\n </Typography>\n </button>\n ))}\n </div>\n </Popover>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAiCO;AACL;AAEA;AACE;AACA;AAAa;AAGf;AAEI;AAAA;AAAC;AAAA;AACS;AACH;AAEH;AAAC;AAAA;AAGK;AAA8B;AACD;AACC;AAChC;AAEI;AAAA;AAAA;AAIR;AACA;AAAA;AACF;AACW;AAAA;AAAA;AAMP;AAAC;AAAA;AAEM;AACM;AACT;AAC4D;AACpC;AAExB;AACA;AACA;AAAe;AACjB;AAIA;AAAA;AAdK;AAkBb;AAGN;;;;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Props for the DataTableStatusBadge component.
3
+ */
4
+ export interface DataTableStatusBadgeProps {
5
+ /** Status key: 'success', 'warning', 'error', 'neutral', 'done', 'in_process', 'not_started', or custom string. */
6
+ status: 'success' | 'warning' | 'error' | 'neutral' | 'done' | 'in_process' | 'not_started' | string;
7
+ /** Optional override for the display label. */
8
+ label?: string;
9
+ /** Additional class names. */
10
+ className?: string;
11
+ }
12
+ /**
13
+ * Pill badge for row status. Renders with specific background/text/icon based on status.
14
+ */
15
+ export declare function DataTableStatusBadge({ status, label, className }: DataTableStatusBadgeProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=DataTableStatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableStatusBadge.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,mHAAmH;IACnH,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC;IACrG,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,yBAAyB,2CAsChG"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { Typography } from "../Typography/Typography.js";
4
+ function DotIcon() {
5
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 8 8", fill: "currentColor", className: "w-2 h-2", children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "4" }) });
6
+ }
7
+ function ProcessIcon() {
8
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", className: "w-3 h-3 animate-spin", children: /* @__PURE__ */ jsx("path", { d: "M8 2a6 6 0 1 1-6 6" }) });
9
+ }
10
+ function DataTableStatusBadge({ status, label, className = "" }) {
11
+ const theme = {
12
+ success: { bg: "bg-green-100", text: "text-green-700", icon: "dot" },
13
+ done: { bg: "bg-green-100", text: "text-green-700", icon: "dot" },
14
+ warning: { bg: "bg-yellow-100", text: "text-yellow-700", icon: "dot" },
15
+ // Or spinner if preferred
16
+ in_process: { bg: "bg-fill-bg-secondary", text: "text-text-secondary", icon: "spinner" },
17
+ error: { bg: "bg-red-100", text: "text-red-700", icon: "dot" },
18
+ neutral: { bg: "bg-fill-bg-secondary", text: "text-text-secondary", icon: "dot" },
19
+ not_started: { bg: "bg-fill-bg-secondary", text: "text-text-secondary", icon: "dot" }
20
+ }[status] || { bg: "bg-fill-bg-secondary", text: "text-text-secondary", icon: "dot" };
21
+ const isSpinner = theme.icon === "spinner";
22
+ const displayLabel = label ?? (status === "success" ? "Success" : status === "done" ? "Done" : status === "warning" ? "Warning" : status === "in_process" ? "In Process" : status === "error" ? "Error" : status.replace(/_/g, " "));
23
+ const containerClasses = [
24
+ "inline-flex items-center gap-space-2 px-space-1 py-space-0-25 rounded-rad-lg whitespace-nowrap",
25
+ theme.bg,
26
+ theme.text,
27
+ className
28
+ ].filter(Boolean).join(" ");
29
+ return /* @__PURE__ */ jsxs("div", { className: containerClasses, children: [
30
+ isSpinner ? /* @__PURE__ */ jsx(ProcessIcon, {}) : /* @__PURE__ */ jsx(DotIcon, {}),
31
+ /* @__PURE__ */ jsx(Typography, { variant: "text-xs", as: "span", className: "font-semibold capitalize leading-none", children: displayLabel })
32
+ ] });
33
+ }
34
+ export {
35
+ DataTableStatusBadge
36
+ };
37
+ //# sourceMappingURL=DataTableStatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableStatusBadge.js","sources":["../../../src/components/DataTable/DataTableStatusBadge.tsx"],"sourcesContent":["'use client';\n\nimport { Typography } from '../Typography/Typography';\n\n/**\n * Props for the DataTableStatusBadge component.\n */\nexport interface DataTableStatusBadgeProps {\n /** Status key: 'success', 'warning', 'error', 'neutral', 'done', 'in_process', 'not_started', or custom string. */\n status: 'success' | 'warning' | 'error' | 'neutral' | 'done' | 'in_process' | 'not_started' | string;\n /** Optional override for the display label. */\n label?: string;\n /** Additional class names. */\n className?: string;\n}\n\n/**\n * Internal helper to render a small filled circle (dot).\n */\nfunction DotIcon() {\n return (\n <svg viewBox=\"0 0 8 8\" fill=\"currentColor\" className=\"w-2 h-2\">\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n );\n}\n\n/**\n * Internal helper to render a simple spinner/process icon.\n */\nfunction ProcessIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" className=\"w-3 h-3 animate-spin\">\n <path d=\"M8 2a6 6 0 1 1-6 6\" />\n </svg>\n );\n}\n\n/**\n * Pill badge for row status. Renders with specific background/text/icon based on status.\n */\nexport function DataTableStatusBadge({ status, label, className = '' }: DataTableStatusBadgeProps) {\n // Map semantic statuses to design system themes\n const theme = {\n success: { bg: 'bg-green-100', text: 'text-green-700', icon: 'dot' },\n done: { bg: 'bg-green-100', text: 'text-green-700', icon: 'dot' },\n warning: { bg: 'bg-yellow-100', text: 'text-yellow-700', icon: 'dot' }, // Or spinner if preferred\n in_process: { bg: 'bg-fill-bg-secondary', text: 'text-text-secondary', icon: 'spinner' },\n error: { bg: 'bg-red-100', text: 'text-red-700', icon: 'dot' },\n neutral: { bg: 'bg-fill-bg-secondary', text: 'text-text-secondary', icon: 'dot' },\n not_started: { bg: 'bg-fill-bg-secondary', text: 'text-text-secondary', icon: 'dot' },\n }[status as string] || { bg: 'bg-fill-bg-secondary', text: 'text-text-secondary', icon: 'dot' };\n\n const isSpinner = theme.icon === 'spinner';\n \n const displayLabel = label ?? (\n status === 'success' ? 'Success' : \n status === 'done' ? 'Done' :\n status === 'warning' ? 'Warning' :\n status === 'in_process' ? 'In Process' :\n status === 'error' ? 'Error' : \n status.replace(/_/g, ' ')\n );\n\n const containerClasses = [\n 'inline-flex items-center gap-space-2 px-space-1 py-space-0-25 rounded-rad-lg whitespace-nowrap',\n theme.bg,\n theme.text,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {isSpinner ? <ProcessIcon /> : <DotIcon />}\n <Typography variant=\"text-xs\" as=\"span\" className=\"font-semibold capitalize leading-none\">\n {displayLabel}\n </Typography>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAmBA;AACE;AAKF;AAKA;AACE;AAKF;AAKO;AAEL;AAAc;AACiD;AACH;AACK;AAAA;AACc;AACtB;AACmB;AACI;AAGhF;AAEA;AASA;AAAyB;AACvB;AACM;AACA;AACN;AAGF;AAEK;AAAuC;AAGxC;AAGN;;;;"}
@@ -0,0 +1,32 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * Shape of a single tab in the DataTableToolbar.
4
+ */
5
+ export interface DataTableTab {
6
+ /** Unique ID for the tab. */
7
+ id: string;
8
+ /** Visible label. */
9
+ label: string;
10
+ /** Optional count shown in a badge. */
11
+ count?: number;
12
+ }
13
+ /**
14
+ * Props for the DataTableToolbar component.
15
+ */
16
+ export interface DataTableToolbarProps {
17
+ /** Optional array of tabs to display on the left. */
18
+ tabs?: DataTableTab[];
19
+ /** ID of the currently active tab. */
20
+ activeTab?: string;
21
+ /** Callback fired when a tab is clicked. */
22
+ onTabChange?: (tabId: string) => void;
23
+ /** Right-side actions (e.g. Buttons). */
24
+ children?: React.ReactNode;
25
+ /** Additional class names for the wrapper. */
26
+ className?: string;
27
+ }
28
+ /**
29
+ * Toolbar for the DataTable containing tab navigation and action buttons.
30
+ */
31
+ export declare function DataTableToolbar({ tabs, activeTab, onTabChange, children, className, }: DataTableToolbarProps): import("react/jsx-runtime").JSX.Element;
32
+ //# sourceMappingURL=DataTableToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableToolbar.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableToolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAc,GACf,EAAE,qBAAqB,2CAoCvB"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { Typography } from "../Typography/Typography.js";
4
+ function DataTableToolbar({
5
+ tabs = [],
6
+ activeTab,
7
+ onTabChange,
8
+ children,
9
+ className = ""
10
+ }) {
11
+ return /* @__PURE__ */ jsxs("div", { className: ["flex items-center justify-between gap-space-4 py-space-4 border-b border-border-light", className].filter(Boolean).join(" "), children: [
12
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-space-6", children: tabs.map((tab) => {
13
+ const isActive = activeTab === tab.id;
14
+ return /* @__PURE__ */ jsxs(
15
+ "button",
16
+ {
17
+ type: "button",
18
+ onClick: () => onTabChange == null ? void 0 : onTabChange(tab.id),
19
+ className: [
20
+ "flex items-center gap-space-2 pb-space-4 -mb-[17px] transition-colors border-b-2",
21
+ isActive ? "border-text-primary text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"
22
+ ].filter(Boolean).join(" "),
23
+ children: [
24
+ /* @__PURE__ */ jsx(Typography, { variant: "btn-reg", as: "span", className: isActive ? "font-semibold" : "font-normal", children: tab.label }),
25
+ tab.count !== void 0 && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center px-space-1-5 py-0.5 rounded-full bg-fill-bg-secondary text-text-secondary text-[10px] font-bold min-w-[1.25rem]", children: tab.count })
26
+ ]
27
+ },
28
+ tab.id
29
+ );
30
+ }) }),
31
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-space-3", children })
32
+ ] });
33
+ }
34
+ export {
35
+ DataTableToolbar
36
+ };
37
+ //# sourceMappingURL=DataTableToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableToolbar.js","sources":["../../../src/components/DataTable/DataTableToolbar.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { Typography } from '../Typography/Typography';\n\n/**\n * Shape of a single tab in the DataTableToolbar.\n */\nexport interface DataTableTab {\n /** Unique ID for the tab. */\n id: string;\n /** Visible label. */\n label: string;\n /** Optional count shown in a badge. */\n count?: number;\n}\n\n/**\n * Props for the DataTableToolbar component.\n */\nexport interface DataTableToolbarProps {\n /** Optional array of tabs to display on the left. */\n tabs?: DataTableTab[];\n /** ID of the currently active tab. */\n activeTab?: string;\n /** Callback fired when a tab is clicked. */\n onTabChange?: (tabId: string) => void;\n /** Right-side actions (e.g. Buttons). */\n children?: React.ReactNode;\n /** Additional class names for the wrapper. */\n className?: string;\n}\n\n/**\n * Toolbar for the DataTable containing tab navigation and action buttons.\n */\nexport function DataTableToolbar({\n tabs = [],\n activeTab,\n onTabChange,\n children,\n className = '',\n}: DataTableToolbarProps) {\n return (\n <div className={['flex items-center justify-between gap-space-4 py-space-4 border-b border-border-light', className].filter(Boolean).join(' ')}>\n {/* Tabs */}\n <div className=\"flex items-center gap-space-6\">\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n className={[\n 'flex items-center gap-space-2 pb-space-4 -mb-[17px] transition-colors border-b-2',\n isActive ? 'border-text-primary text-text-primary' : 'border-transparent text-text-secondary hover:text-text-primary'\n ].filter(Boolean).join(' ')}\n >\n <Typography variant=\"btn-reg\" as=\"span\" className={isActive ? 'font-semibold' : 'font-normal'}>\n {tab.label}\n </Typography>\n {tab.count !== undefined && (\n <span className=\"flex items-center justify-center px-space-1-5 py-0.5 rounded-full bg-fill-bg-secondary text-text-secondary text-[10px] font-bold min-w-[1.25rem]\">\n {tab.count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-space-3\">\n {children}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAoCO;AAA0B;AACxB;AACP;AACA;AACA;AAEF;AACE;AAGI;AAEI;AACA;AACE;AAAC;AAAA;AAEM;AAC4B;AACtB;AACT;AACqD;AAC7B;AAE1B;AAEA;AAIE;AAAA;AAAA;AAdO;AAAA;AAmBjB;AAKA;AAGN;;;;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DateInput.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateInput.test.d.ts","sourceRoot":"","sources":["../../../src/components/DateInput/DateInput.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * Props for the Dialog component. Dialog does not control visibility — use it inside
4
+ * an Overlay and control open/onClose on the Overlay.
5
+ */
6
+ export interface DialogProps extends React.HTMLAttributes<HTMLDivElement> {
7
+ /** Max width of the dialog panel. @default '24rem' (384px) */
8
+ maxWidth?: string;
9
+ /** Panel content. Typically Stack or Form content. @default undefined */
10
+ children?: React.ReactNode;
11
+ /** Forwarded ref for the root div. @default undefined */
12
+ ref?: React.Ref<HTMLDivElement>;
13
+ }
14
+ /**
15
+ * Centered modal dialog panel.
16
+ * Designed to be used inside an `<Overlay>`.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <Overlay open={isOpen} onClose={close}>
21
+ * <Dialog maxWidth="24rem">
22
+ * <Stack gap="space-4" className="p-space-6">...</Stack>
23
+ * </Dialog>
24
+ * </Overlay>
25
+ * ```
26
+ */
27
+ export declare function Dialog({ maxWidth, children, className, style, ref, ...rest }: DialogProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,yDAAyD;IACzD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAkB,EAClB,QAAQ,EACR,SAAc,EACd,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,WAAW,2CAuBb"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ function Dialog({
4
+ maxWidth = "24rem",
5
+ children,
6
+ className = "",
7
+ style,
8
+ ref,
9
+ ...rest
10
+ }) {
11
+ const classes = [
12
+ "fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",
13
+ "w-full max-w-[calc(100vw-2rem)] max-h-[calc(100vh-2rem)]",
14
+ "bg-fill-bg-primary rounded-xl shadow-elevation-normal",
15
+ "overflow-y-auto",
16
+ className
17
+ ].filter(Boolean).join(" ");
18
+ return /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ ref,
22
+ className: classes,
23
+ style: { maxWidth, ...style },
24
+ role: "dialog",
25
+ "aria-modal": "true",
26
+ ...rest,
27
+ children
28
+ }
29
+ );
30
+ }
31
+ export {
32
+ Dialog
33
+ };
34
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.js","sources":["../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\n/**\n * Props for the Dialog component. Dialog does not control visibility — use it inside\n * an Overlay and control open/onClose on the Overlay.\n */\nexport interface DialogProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Max width of the dialog panel. @default '24rem' (384px) */\n maxWidth?: string;\n /** Panel content. Typically Stack or Form content. @default undefined */\n children?: React.ReactNode;\n /** Forwarded ref for the root div. @default undefined */\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Centered modal dialog panel.\n * Designed to be used inside an `<Overlay>`.\n *\n * @example\n * ```tsx\n * <Overlay open={isOpen} onClose={close}>\n * <Dialog maxWidth=\"24rem\">\n * <Stack gap=\"space-4\" className=\"p-space-6\">...</Stack>\n * </Dialog>\n * </Overlay>\n * ```\n */\nexport function Dialog({\n maxWidth = '24rem',\n children,\n className = '',\n style,\n ref,\n ...rest\n}: DialogProps) {\n const classes = [\n 'fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'w-full max-w-[calc(100vw-2rem)] max-h-[calc(100vh-2rem)]',\n 'bg-fill-bg-primary rounded-xl shadow-elevation-normal',\n 'overflow-y-auto',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n ref={ref}\n className={classes}\n style={{ maxWidth, ...style }}\n role=\"dialog\"\n aria-modal=\"true\"\n {...rest}\n >\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AA8BO;AAAgB;AACV;AACX;AACY;AACZ;AACA;AAEF;AACE;AAAgB;AACd;AACA;AACA;AACA;AACA;AAKF;AACE;AAAC;AAAA;AACC;AACW;AACW;AACjB;AACM;AACP;AAEH;AAAA;AAGP;;;;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Dialog.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.test.d.ts","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Divider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.test.d.ts","sourceRoot":"","sources":["../../../src/components/Divider/Divider.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Drawer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.test.d.ts","sourceRoot":"","sources":["../../../src/components/Drawer/Drawer.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FAQ.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAQ.test.d.ts","sourceRoot":"","sources":["../../../src/components/FAQ/FAQ.test.tsx"],"names":[],"mappings":""}
@@ -41,17 +41,17 @@ export interface GridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'd
41
41
  * @example
42
42
  * // Fixed 3-column grid
43
43
  * <Grid columns={3} gap="space-4">
44
- * <Card />
45
- * <Card />
46
- * <Card />
44
+ * <JiwambeCard />
45
+ * <JiwambeCard />
46
+ * <JiwambeCard />
47
47
  * </Grid>
48
48
  *
49
49
  * @example
50
50
  * // Responsive column grid
51
51
  * <Grid columns={{ base: 1, sm: 2, lg: 3 }} gap="space-6" p="space-4">
52
- * <Card />
53
- * <Card />
54
- * <Card />
52
+ * <JiwambeCard />
53
+ * <JiwambeCard />
54
+ * <JiwambeCard />
55
55
  * </Grid>
56
56
  */
57
57
  export declare function Grid({ columns, gap, rowGap, columnGap, alignItems, justifyContent, alignSelf, children, className, style, ref, ...rest }: GridProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sources":["../../../src/components/Grid/Grid.tsx"],"sourcesContent":["import React from 'react';\nimport {\n isResponsiveObject,\n generateScopeId,\n buildMediaCSS,\n renderScopedStyle,\n type ResponsiveValue,\n} from '../../utils/responsive-props';\nimport type { SpacingProps, GapProps } from '../../types/spacing';\nimport type { LayoutProps } from '../../types/layout';\nimport { resolveSpacing, SPACING_PROP_KEYS } from '../../utils/spacing';\nimport { resolveLayout } from '../../utils/layoutClasses';\n\nconst GRID_SPACING_KEYS = [\n ...SPACING_PROP_KEYS,\n 'gap',\n 'rowGap',\n 'columnGap',\n] as const;\n\nconst GRID_LAYOUT_KEYS = ['alignItems', 'justifyContent', 'alignSelf'] as const;\n\n/**\n * Props for the Grid component. Extends div attributes (display omitted),\n * SpacingProps, GapProps, and a subset of LayoutProps (alignItems,\n * justifyContent, alignSelf only).\n */\nexport interface GridProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'display'>,\n SpacingProps,\n GapProps,\n Pick<LayoutProps, 'alignItems' | 'justifyContent' | 'alignSelf'> {\n /**\n * Number of equal-width columns in the grid.\n *\n * Pass a number for a fixed layout:\n * columns={3} → grid-template-columns: repeat(3, minmax(0, 1fr))\n *\n * Pass a responsive object for breakpoint-specific layouts:\n * columns={{ base: 1, sm: 2, lg: 4 }}\n * Breakpoints: sm=600px, md=800px, lg=940px, xl=1440px\n *\n * When undefined, defaults to a 9-column grid at base and\n * 12-column at sm (the library's default layout grid).\n * @default undefined\n */\n columns?: ResponsiveValue<number>;\n /** Forwarded ref for the root div. @default undefined */\n ref?: React.Ref<HTMLDivElement>;\n /** Grid cell content. @default undefined */\n children?: React.ReactNode;\n}\n\n/**\n * Two-dimensional CSS grid layout component. Use for multi-column\n * layouts, card grids, and any content that needs rows and columns.\n *\n * For one-dimensional sequences of children, use Stack instead.\n * Grid renders with display: grid and width: 100% by default.\n *\n * The columns prop accepts a number for a fixed column count or a\n * responsive object for breakpoint-specific column counts.\n *\n * @example\n * // Fixed 3-column grid\n * <Grid columns={3} gap=\"space-4\">\n * <Card />\n * <Card />\n * <Card />\n * </Grid>\n *\n * @example\n * // Responsive column grid\n * <Grid columns={{ base: 1, sm: 2, lg: 3 }} gap=\"space-6\" p=\"space-4\">\n * <Card />\n * <Card />\n * <Card />\n * </Grid>\n */\nexport function Grid({\n columns,\n gap = 'space-2',\n rowGap,\n columnGap,\n alignItems,\n justifyContent,\n alignSelf,\n children,\n className = '',\n style,\n ref,\n ...rest\n}: GridProps) {\n const spacingClasses = resolveSpacing({\n ...rest,\n gap,\n rowGap,\n columnGap,\n });\n const layoutClasses = resolveLayout({\n alignItems,\n justifyContent,\n alignSelf,\n });\n const restWithoutSpacing = { ...rest };\n for (const key of GRID_SPACING_KEYS) {\n delete (restWithoutSpacing as Record<string, unknown>)[key];\n }\n for (const key of GRID_LAYOUT_KEYS) {\n delete (restWithoutSpacing as Record<string, unknown>)[key];\n }\n\n const base: React.CSSProperties = {\n display: 'grid',\n width: '100%',\n ...style,\n };\n\n let needsId = false;\n const mediaRules: Record<string, Record<string, string>> = {};\n const useDefaultColumns = columns === undefined;\n\n if (columns !== undefined) {\n if (isResponsiveObject(columns)) {\n needsId = true;\n for (const [bp, val] of Object.entries(columns)) {\n if (val === undefined) continue;\n const gridVal = `repeat(${val}, minmax(0, 1fr))`;\n if (bp === 'base') {\n base.gridTemplateColumns = gridVal;\n } else {\n if (!mediaRules[bp]) mediaRules[bp] = {};\n mediaRules[bp]['grid-template-columns'] = gridVal;\n }\n }\n } else {\n base.gridTemplateColumns = `repeat(${columns}, minmax(0, 1fr))`;\n }\n }\n\n const componentMedia = buildMediaCSS(mediaRules);\n const scopeId = needsId && componentMedia ? generateScopeId(componentMedia, 'grd') : undefined;\n\n const classes = [\n useDefaultColumns ? 'grid-cols-9 sm:grid-cols-12' : '',\n layoutClasses,\n spacingClasses,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const elementProps: Record<string, unknown> = {\n ref,\n className: classes || undefined,\n style: base,\n ...restWithoutSpacing,\n };\n\n if (scopeId) {\n elementProps['data-jds'] = scopeId;\n }\n\n return (\n <>\n {scopeId && renderScopedStyle(componentMedia, scopeId)}\n <div {...elementProps}>{children}</div>\n </>\n );\n}\n\nGrid.displayName = 'Grid';\n"],"names":[],"mappings":";;;;AAaA,MAAM,oBAAoB;AAAA,EACxB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,mBAAmB,CAAC,cAAc,kBAAkB,WAAW;AA2D9D,SAAS,KAAK;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,QAAM,iBAAiB,eAAe;AAAA,IACpC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,gBAAgB,cAAc;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,qBAAqB,EAAE,GAAG,KAAA;AAChC,aAAW,OAAO,mBAAmB;AACnC,WAAQ,mBAA+C,GAAG;AAAA,EAC5D;AACA,aAAW,OAAO,kBAAkB;AAClC,WAAQ,mBAA+C,GAAG;AAAA,EAC5D;AAEA,QAAM,OAA4B;AAAA,IAChC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,GAAG;AAAA,EAAA;AAGL,MAAI,UAAU;AACd,QAAM,aAAqD,CAAA;AAC3D,QAAM,oBAAoB,YAAY;AAEtC,MAAI,YAAY,QAAW;AACzB,QAAI,mBAAmB,OAAO,GAAG;AAC/B,gBAAU;AACV,iBAAW,CAAC,IAAI,GAAG,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC/C,YAAI,QAAQ,OAAW;AACvB,cAAM,UAAU,UAAU,GAAG;AAC7B,YAAI,OAAO,QAAQ;AACjB,eAAK,sBAAsB;AAAA,QAC7B,OAAO;AACL,cAAI,CAAC,WAAW,EAAE,EAAG,YAAW,EAAE,IAAI,CAAA;AACtC,qBAAW,EAAE,EAAE,uBAAuB,IAAI;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,OAAO;AACL,WAAK,sBAAsB,UAAU,OAAO;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,iBAAiB,cAAc,UAAU;AAC/C,QAAM,UAAU,WAAW,iBAAiB,gBAAgB,gBAAgB,KAAK,IAAI;AAErF,QAAM,UAAU;AAAA,IACd,oBAAoB,gCAAgC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,eAAwC;AAAA,IAC5C;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,OAAO;AAAA,IACP,GAAG;AAAA,EAAA;AAGL,MAAI,SAAS;AACX,iBAAa,UAAU,IAAI;AAAA,EAC7B;AAEA,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,WAAW,kBAAkB,gBAAgB,OAAO;AAAA,IACrD,oBAAC,OAAA,EAAK,GAAG,cAAe,SAAA,CAAS;AAAA,EAAA,GACnC;AAEJ;AAEA,KAAK,cAAc;"}
1
+ {"version":3,"file":"Grid.js","sources":["../../../src/components/Grid/Grid.tsx"],"sourcesContent":["import React from 'react';\nimport {\n isResponsiveObject,\n generateScopeId,\n buildMediaCSS,\n renderScopedStyle,\n type ResponsiveValue,\n} from '../../utils/responsive-props';\nimport type { SpacingProps, GapProps } from '../../types/spacing';\nimport type { LayoutProps } from '../../types/layout';\nimport { resolveSpacing, SPACING_PROP_KEYS } from '../../utils/spacing';\nimport { resolveLayout } from '../../utils/layoutClasses';\n\nconst GRID_SPACING_KEYS = [\n ...SPACING_PROP_KEYS,\n 'gap',\n 'rowGap',\n 'columnGap',\n] as const;\n\nconst GRID_LAYOUT_KEYS = ['alignItems', 'justifyContent', 'alignSelf'] as const;\n\n/**\n * Props for the Grid component. Extends div attributes (display omitted),\n * SpacingProps, GapProps, and a subset of LayoutProps (alignItems,\n * justifyContent, alignSelf only).\n */\nexport interface GridProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'display'>,\n SpacingProps,\n GapProps,\n Pick<LayoutProps, 'alignItems' | 'justifyContent' | 'alignSelf'> {\n /**\n * Number of equal-width columns in the grid.\n *\n * Pass a number for a fixed layout:\n * columns={3} → grid-template-columns: repeat(3, minmax(0, 1fr))\n *\n * Pass a responsive object for breakpoint-specific layouts:\n * columns={{ base: 1, sm: 2, lg: 4 }}\n * Breakpoints: sm=600px, md=800px, lg=940px, xl=1440px\n *\n * When undefined, defaults to a 9-column grid at base and\n * 12-column at sm (the library's default layout grid).\n * @default undefined\n */\n columns?: ResponsiveValue<number>;\n /** Forwarded ref for the root div. @default undefined */\n ref?: React.Ref<HTMLDivElement>;\n /** Grid cell content. @default undefined */\n children?: React.ReactNode;\n}\n\n/**\n * Two-dimensional CSS grid layout component. Use for multi-column\n * layouts, card grids, and any content that needs rows and columns.\n *\n * For one-dimensional sequences of children, use Stack instead.\n * Grid renders with display: grid and width: 100% by default.\n *\n * The columns prop accepts a number for a fixed column count or a\n * responsive object for breakpoint-specific column counts.\n *\n * @example\n * // Fixed 3-column grid\n * <Grid columns={3} gap=\"space-4\">\n * <JiwambeCard />\n * <JiwambeCard />\n * <JiwambeCard />\n * </Grid>\n *\n * @example\n * // Responsive column grid\n * <Grid columns={{ base: 1, sm: 2, lg: 3 }} gap=\"space-6\" p=\"space-4\">\n * <JiwambeCard />\n * <JiwambeCard />\n * <JiwambeCard />\n * </Grid>\n */\nexport function Grid({\n columns,\n gap = 'space-2',\n rowGap,\n columnGap,\n alignItems,\n justifyContent,\n alignSelf,\n children,\n className = '',\n style,\n ref,\n ...rest\n}: GridProps) {\n const spacingClasses = resolveSpacing({\n ...rest,\n gap,\n rowGap,\n columnGap,\n });\n const layoutClasses = resolveLayout({\n alignItems,\n justifyContent,\n alignSelf,\n });\n const restWithoutSpacing = { ...rest };\n for (const key of GRID_SPACING_KEYS) {\n delete (restWithoutSpacing as Record<string, unknown>)[key];\n }\n for (const key of GRID_LAYOUT_KEYS) {\n delete (restWithoutSpacing as Record<string, unknown>)[key];\n }\n\n const base: React.CSSProperties = {\n display: 'grid',\n width: '100%',\n ...style,\n };\n\n let needsId = false;\n const mediaRules: Record<string, Record<string, string>> = {};\n const useDefaultColumns = columns === undefined;\n\n if (columns !== undefined) {\n if (isResponsiveObject(columns)) {\n needsId = true;\n for (const [bp, val] of Object.entries(columns)) {\n if (val === undefined) continue;\n const gridVal = `repeat(${val}, minmax(0, 1fr))`;\n if (bp === 'base') {\n base.gridTemplateColumns = gridVal;\n } else {\n if (!mediaRules[bp]) mediaRules[bp] = {};\n mediaRules[bp]['grid-template-columns'] = gridVal;\n }\n }\n } else {\n base.gridTemplateColumns = `repeat(${columns}, minmax(0, 1fr))`;\n }\n }\n\n const componentMedia = buildMediaCSS(mediaRules);\n const scopeId = needsId && componentMedia ? generateScopeId(componentMedia, 'grd') : undefined;\n\n const classes = [\n useDefaultColumns ? 'grid-cols-9 sm:grid-cols-12' : '',\n layoutClasses,\n spacingClasses,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const elementProps: Record<string, unknown> = {\n ref,\n className: classes || undefined,\n style: base,\n ...restWithoutSpacing,\n };\n\n if (scopeId) {\n elementProps['data-jds'] = scopeId;\n }\n\n return (\n <>\n {scopeId && renderScopedStyle(componentMedia, scopeId)}\n <div {...elementProps}>{children}</div>\n </>\n );\n}\n\nGrid.displayName = 'Grid';\n"],"names":[],"mappings":";;;;AAaA,MAAM,oBAAoB;AAAA,EACxB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,mBAAmB,CAAC,cAAc,kBAAkB,WAAW;AA2D9D,SAAS,KAAK;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,QAAM,iBAAiB,eAAe;AAAA,IACpC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,gBAAgB,cAAc;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,qBAAqB,EAAE,GAAG,KAAA;AAChC,aAAW,OAAO,mBAAmB;AACnC,WAAQ,mBAA+C,GAAG;AAAA,EAC5D;AACA,aAAW,OAAO,kBAAkB;AAClC,WAAQ,mBAA+C,GAAG;AAAA,EAC5D;AAEA,QAAM,OAA4B;AAAA,IAChC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,GAAG;AAAA,EAAA;AAGL,MAAI,UAAU;AACd,QAAM,aAAqD,CAAA;AAC3D,QAAM,oBAAoB,YAAY;AAEtC,MAAI,YAAY,QAAW;AACzB,QAAI,mBAAmB,OAAO,GAAG;AAC/B,gBAAU;AACV,iBAAW,CAAC,IAAI,GAAG,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC/C,YAAI,QAAQ,OAAW;AACvB,cAAM,UAAU,UAAU,GAAG;AAC7B,YAAI,OAAO,QAAQ;AACjB,eAAK,sBAAsB;AAAA,QAC7B,OAAO;AACL,cAAI,CAAC,WAAW,EAAE,EAAG,YAAW,EAAE,IAAI,CAAA;AACtC,qBAAW,EAAE,EAAE,uBAAuB,IAAI;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,OAAO;AACL,WAAK,sBAAsB,UAAU,OAAO;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,iBAAiB,cAAc,UAAU;AAC/C,QAAM,UAAU,WAAW,iBAAiB,gBAAgB,gBAAgB,KAAK,IAAI;AAErF,QAAM,UAAU;AAAA,IACd,oBAAoB,gCAAgC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,eAAwC;AAAA,IAC5C;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,OAAO;AAAA,IACP,GAAG;AAAA,EAAA;AAGL,MAAI,SAAS;AACX,iBAAa,UAAU,IAAI;AAAA,EAC7B;AAEA,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,WAAW,kBAAkB,gBAAgB,OAAO;AAAA,IACrD,oBAAC,OAAA,EAAK,GAAG,cAAe,SAAA,CAAS;AAAA,EAAA,GACnC;AAEJ;AAEA,KAAK,cAAc;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Grid.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.test.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Grid.test.tsx"],"names":[],"mappings":""}
@@ -1,21 +1,25 @@
1
- import { default as React } from 'react';
1
+ import { ReactElement, SVGProps, Ref } from 'react';
2
2
  /**
3
- * Union of all available icon names in the library. Use with the Icon component's name prop.
4
- * Icons use currentColor so they inherit text colour from CSS.
3
+ * Props for the Icon component. Renders an inline SVG passed via the `icon` prop.
5
4
  */
6
- export type IconName = 'chevron-down' | 'chevron-up' | 'chevron-left' | 'chevron-right' | 'arrow-right' | 'arrow-left' | 'arrow-up' | 'arrow-down' | 'close' | 'menu' | 'check' | 'search' | 'globe' | 'info' | 'warning' | 'error' | 'plus' | 'minus' | 'edit' | 'trash' | 'eye' | 'eye-off' | 'copy' | 'download' | 'upload' | 'filter' | 'sort' | 'calendar' | 'clock' | 'user' | 'settings' | 'home' | 'mail' | 'phone' | 'map-pin' | 'external-link' | 'link' | 'star' | 'heart' | 'share' | 'whatsapp' | 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'x-twitter';
7
- /**
8
- * Props for the Icon component. Renders an inline SVG; colour comes from CSS (currentColor).
9
- */
10
- export interface IconProps extends React.SVGAttributes<SVGSVGElement> {
11
- /** Which icon to render. Must be a valid IconName. */
12
- name: IconName;
5
+ export interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'name'> {
6
+ /** The icon component to render (e.g. `<ChevronRight />`) */
7
+ icon: ReactElement<SVGProps<SVGSVGElement>>;
13
8
  /** Width and height in pixels. @default 24 */
14
- size?: number;
9
+ size?: number | string;
15
10
  /** Additional class names. @default undefined */
16
11
  className?: string;
17
12
  /** Forwarded ref for the SVG element. @default undefined */
18
- ref?: React.Ref<SVGSVGElement>;
13
+ ref?: Ref<SVGSVGElement>;
19
14
  }
20
- export declare function Icon({ name, size, className, style, ref, ...rest }: IconProps): import("react/jsx-runtime").JSX.Element;
15
+ /**
16
+ * Renders an inline SVG icon (typically imported from @jiwambe/icons).
17
+ * Size and colour (via currentColor) are controlled by props or CSS.
18
+ * Use for buttons, labels, or decorative icons.
19
+ *
20
+ * @example
21
+ * import { ChevronDown } from '@jiwambe/icons';
22
+ * <Icon icon={<ChevronDown />} size={20} />
23
+ */
24
+ export declare function Icon({ icon, size, className, style, ref, ...rest }: IconProps): ReactElement<SVGProps<SVGSVGElement>, string | import('react').JSXElementConstructor<any>> | null;
21
25
  //# sourceMappingURL=Icon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,YAAY,GACZ,cAAc,GACd,eAAe,GACf,aAAa,GACb,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,KAAK,GACL,SAAS,GACT,MAAM,GACN,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,eAAe,GACf,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,UAAU,GACV,UAAU,GACV,WAAW,GACX,QAAQ,GACR,UAAU,GACV,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC;IACnE,sDAAsD;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;CAChC;AA0PD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAc,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAiBvF"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icon/Icon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACtE,6DAA6D;IAC7D,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5C,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAc,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,qGAYvF"}