@tonyarbor/components 0.4.0 → 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 (118) hide show
  1. package/dist/Button.d.mts +1 -1
  2. package/dist/Button.d.ts +1 -1
  3. package/dist/Button.js +56 -0
  4. package/dist/Button.js.map +1 -1
  5. package/dist/Button.mjs +1 -1
  6. package/dist/ButtonSegmented.d.mts +61 -0
  7. package/dist/ButtonSegmented.d.ts +61 -0
  8. package/dist/ButtonSegmented.js +167 -0
  9. package/dist/ButtonSegmented.js.map +1 -0
  10. package/dist/ButtonSegmented.mjs +7 -0
  11. package/dist/ButtonSegmented.mjs.map +1 -0
  12. package/dist/ListRow.d.mts +72 -0
  13. package/dist/ListRow.d.ts +72 -0
  14. package/dist/ListRow.js +194 -0
  15. package/dist/ListRow.js.map +1 -0
  16. package/dist/ListRow.mjs +7 -0
  17. package/dist/ListRow.mjs.map +1 -0
  18. package/dist/ListRowMultiLine.d.mts +56 -0
  19. package/dist/ListRowMultiLine.d.ts +56 -0
  20. package/dist/ListRowMultiLine.js +182 -0
  21. package/dist/ListRowMultiLine.js.map +1 -0
  22. package/dist/ListRowMultiLine.mjs +7 -0
  23. package/dist/ListRowMultiLine.mjs.map +1 -0
  24. package/dist/Logo.d.mts +39 -0
  25. package/dist/Logo.d.ts +39 -0
  26. package/dist/Logo.js +119 -0
  27. package/dist/Logo.js.map +1 -0
  28. package/dist/Logo.mjs +7 -0
  29. package/dist/Logo.mjs.map +1 -0
  30. package/dist/Modal.d.mts +73 -0
  31. package/dist/Modal.d.ts +73 -0
  32. package/dist/Modal.js +114 -0
  33. package/dist/Modal.js.map +1 -0
  34. package/dist/Modal.mjs +9 -0
  35. package/dist/Modal.mjs.map +1 -0
  36. package/dist/ModalFooter.d.mts +40 -0
  37. package/dist/ModalFooter.d.ts +40 -0
  38. package/dist/ModalFooter.js +73 -0
  39. package/dist/ModalFooter.js.map +1 -0
  40. package/dist/ModalFooter.mjs +7 -0
  41. package/dist/ModalFooter.mjs.map +1 -0
  42. package/dist/ModalHeader.d.mts +65 -0
  43. package/dist/ModalHeader.d.ts +65 -0
  44. package/dist/ModalHeader.js +257 -0
  45. package/dist/ModalHeader.js.map +1 -0
  46. package/dist/ModalHeader.mjs +8 -0
  47. package/dist/ModalHeader.mjs.map +1 -0
  48. package/dist/Section.d.mts +57 -0
  49. package/dist/Section.d.ts +57 -0
  50. package/dist/Section.js +72 -0
  51. package/dist/Section.js.map +1 -0
  52. package/dist/Section.mjs +7 -0
  53. package/dist/Section.mjs.map +1 -0
  54. package/dist/SectionHeading.d.mts +111 -0
  55. package/dist/SectionHeading.d.ts +111 -0
  56. package/dist/SectionHeading.js +385 -0
  57. package/dist/SectionHeading.js.map +1 -0
  58. package/dist/SectionHeading.mjs +8 -0
  59. package/dist/SectionHeading.mjs.map +1 -0
  60. package/dist/SectionHeadingInteractive.d.mts +67 -0
  61. package/dist/SectionHeadingInteractive.d.ts +67 -0
  62. package/dist/SectionHeadingInteractive.js +225 -0
  63. package/dist/SectionHeadingInteractive.js.map +1 -0
  64. package/dist/SectionHeadingInteractive.mjs +7 -0
  65. package/dist/SectionHeadingInteractive.mjs.map +1 -0
  66. package/dist/SectionIcon.d.mts +35 -0
  67. package/dist/SectionIcon.d.ts +35 -0
  68. package/dist/SectionIcon.js +142 -0
  69. package/dist/SectionIcon.js.map +1 -0
  70. package/dist/SectionIcon.mjs +7 -0
  71. package/dist/SectionIcon.mjs.map +1 -0
  72. package/dist/SubSectionHeading.d.mts +75 -0
  73. package/dist/SubSectionHeading.d.ts +75 -0
  74. package/dist/SubSectionHeading.js +225 -0
  75. package/dist/SubSectionHeading.js.map +1 -0
  76. package/dist/SubSectionHeading.mjs +7 -0
  77. package/dist/SubSectionHeading.mjs.map +1 -0
  78. package/dist/SubSectionInteractive.d.mts +65 -0
  79. package/dist/SubSectionInteractive.d.ts +65 -0
  80. package/dist/SubSectionInteractive.js +211 -0
  81. package/dist/SubSectionInteractive.js.map +1 -0
  82. package/dist/SubSectionInteractive.mjs +7 -0
  83. package/dist/SubSectionInteractive.mjs.map +1 -0
  84. package/dist/chunk-7JWINM2N.mjs +77 -0
  85. package/dist/chunk-7JWINM2N.mjs.map +1 -0
  86. package/dist/chunk-7NYBJKJS.mjs +106 -0
  87. package/dist/chunk-7NYBJKJS.mjs.map +1 -0
  88. package/dist/chunk-ALLCJATI.mjs +189 -0
  89. package/dist/chunk-ALLCJATI.mjs.map +1 -0
  90. package/dist/chunk-F6JVEIWC.mjs +158 -0
  91. package/dist/chunk-F6JVEIWC.mjs.map +1 -0
  92. package/dist/chunk-GHATS25Y.mjs +249 -0
  93. package/dist/chunk-GHATS25Y.mjs.map +1 -0
  94. package/dist/chunk-GIQDPHZQ.mjs +121 -0
  95. package/dist/chunk-GIQDPHZQ.mjs.map +1 -0
  96. package/dist/chunk-ILLGBZ6R.mjs +131 -0
  97. package/dist/chunk-ILLGBZ6R.mjs.map +1 -0
  98. package/dist/chunk-NNYU4DPD.mjs +83 -0
  99. package/dist/chunk-NNYU4DPD.mjs.map +1 -0
  100. package/dist/{chunk-ALEJXAZY.mjs → chunk-NOUFR6W2.mjs} +57 -1
  101. package/dist/chunk-NOUFR6W2.mjs.map +1 -0
  102. package/dist/chunk-ODKT7LGV.mjs +146 -0
  103. package/dist/chunk-ODKT7LGV.mjs.map +1 -0
  104. package/dist/chunk-P7RKUESQ.mjs +37 -0
  105. package/dist/chunk-P7RKUESQ.mjs.map +1 -0
  106. package/dist/chunk-RL4G7MR3.mjs +189 -0
  107. package/dist/chunk-RL4G7MR3.mjs.map +1 -0
  108. package/dist/chunk-X2CW5GF3.mjs +175 -0
  109. package/dist/chunk-X2CW5GF3.mjs.map +1 -0
  110. package/dist/chunk-YJ36ZZJQ.mjs +36 -0
  111. package/dist/chunk-YJ36ZZJQ.mjs.map +1 -0
  112. package/dist/index.d.mts +14 -1
  113. package/dist/index.d.ts +14 -1
  114. package/dist/index.js +1722 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/index.mjs +55 -1
  117. package/package.json +66 -1
  118. package/dist/chunk-ALEJXAZY.mjs.map +0 -1
@@ -0,0 +1,131 @@
1
+ // src/ButtonSegmented/ButtonSegmented.tsx
2
+ import * as React from "react";
3
+ import { clsx } from "clsx";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ var segmentedStyles = {
6
+ container: {
7
+ display: "inline-flex",
8
+ alignItems: "center",
9
+ gap: "8px",
10
+ padding: "8px",
11
+ backgroundColor: "#ffffff",
12
+ border: "1px solid #efefef",
13
+ borderRadius: "99px",
14
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
15
+ },
16
+ button: {
17
+ base: {
18
+ display: "inline-flex",
19
+ alignItems: "center",
20
+ justifyContent: "center",
21
+ gap: "8px",
22
+ padding: "8px 16px",
23
+ borderRadius: "99px",
24
+ border: "none",
25
+ cursor: "pointer",
26
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
27
+ fontSize: "13px",
28
+ fontWeight: "600",
29
+ lineHeight: "1.5",
30
+ transition: "all 0.15s ease-in-out",
31
+ outline: "none",
32
+ whiteSpace: "nowrap"
33
+ },
34
+ default: {
35
+ backgroundColor: "transparent",
36
+ color: "#595959"
37
+ },
38
+ hover: {
39
+ backgroundColor: "#f8f8f8",
40
+ color: "#2f2f2f"
41
+ },
42
+ active: {
43
+ backgroundColor: "#0e8a0e",
44
+ color: "#ffffff"
45
+ },
46
+ activeHover: {
47
+ backgroundColor: "#005700",
48
+ color: "#ffffff"
49
+ }
50
+ }
51
+ };
52
+ var ButtonSegmented = React.forwardRef(
53
+ ({ items, activeIndex = 0, onChange, className, style, ...props }, ref) => {
54
+ const [hoveredIndex, setHoveredIndex] = React.useState(null);
55
+ const validItems = items.slice(0, 4);
56
+ if (validItems.length < 2) {
57
+ console.warn("ButtonSegmented requires at least 2 items");
58
+ }
59
+ const hasIcons = validItems.some((item) => item.icon);
60
+ const handleClick = (index) => {
61
+ if (index !== activeIndex && onChange) {
62
+ onChange(index, validItems[index]);
63
+ }
64
+ };
65
+ return /* @__PURE__ */ jsx(
66
+ "div",
67
+ {
68
+ ref,
69
+ className: clsx("arbor-button-segmented", className),
70
+ style: { ...segmentedStyles.container, ...style },
71
+ role: "group",
72
+ "aria-label": "Segmented button group",
73
+ ...props,
74
+ children: validItems.map((item, index) => {
75
+ const isActive = index === activeIndex;
76
+ const isHovered = hoveredIndex === index;
77
+ let buttonStyle = {
78
+ ...segmentedStyles.button.base
79
+ };
80
+ if (isActive) {
81
+ buttonStyle = {
82
+ ...buttonStyle,
83
+ ...segmentedStyles.button.active,
84
+ ...isHovered && segmentedStyles.button.activeHover
85
+ };
86
+ } else {
87
+ buttonStyle = {
88
+ ...buttonStyle,
89
+ ...segmentedStyles.button.default,
90
+ ...isHovered && segmentedStyles.button.hover
91
+ };
92
+ }
93
+ return /* @__PURE__ */ jsxs(
94
+ "button",
95
+ {
96
+ type: "button",
97
+ style: buttonStyle,
98
+ onClick: () => handleClick(index),
99
+ onMouseEnter: () => setHoveredIndex(index),
100
+ onMouseLeave: () => setHoveredIndex(null),
101
+ "aria-pressed": isActive,
102
+ children: [
103
+ hasIcons && item.icon && /* @__PURE__ */ jsx(
104
+ "span",
105
+ {
106
+ style: {
107
+ display: "flex",
108
+ alignItems: "center",
109
+ justifyContent: "center",
110
+ width: "16px",
111
+ height: "16px"
112
+ },
113
+ children: item.icon
114
+ }
115
+ ),
116
+ item.label
117
+ ]
118
+ },
119
+ item.value || index
120
+ );
121
+ })
122
+ }
123
+ );
124
+ }
125
+ );
126
+ ButtonSegmented.displayName = "ButtonSegmented";
127
+
128
+ export {
129
+ ButtonSegmented
130
+ };
131
+ //# sourceMappingURL=chunk-ILLGBZ6R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ButtonSegmented/ButtonSegmented.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface ButtonSegmentedItem {\n /**\n * The label text for the button\n */\n label: string;\n /**\n * Optional icon to display before the label\n */\n icon?: React.ReactNode;\n /**\n * Optional value identifier for the button\n */\n value?: string;\n}\n\nexport interface ButtonSegmentedProps {\n /**\n * Array of button items (minimum 2, maximum 4)\n */\n items: ButtonSegmentedItem[];\n /**\n * The index of the currently active button\n * @default 0\n */\n activeIndex?: number;\n /**\n * Callback when a button is clicked\n */\n onChange?: (index: number, item: ButtonSegmentedItem) => void;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Additional inline styles\n */\n style?: React.CSSProperties;\n}\n\n// Arbor Design System segmented button styles\nconst segmentedStyles = {\n container: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n backgroundColor: '#ffffff',\n border: '1px solid #efefef',\n borderRadius: '99px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n },\n button: {\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '8px 16px',\n borderRadius: '99px',\n border: 'none',\n cursor: 'pointer',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontSize: '13px',\n fontWeight: '600',\n lineHeight: '1.5',\n transition: 'all 0.15s ease-in-out',\n outline: 'none',\n whiteSpace: 'nowrap' as const,\n },\n default: {\n backgroundColor: 'transparent',\n color: '#595959',\n },\n hover: {\n backgroundColor: '#f8f8f8',\n color: '#2f2f2f',\n },\n active: {\n backgroundColor: '#0e8a0e',\n color: '#ffffff',\n },\n activeHover: {\n backgroundColor: '#005700',\n color: '#ffffff',\n },\n },\n};\n\n/**\n * ButtonSegmented component - Arbor Design System\n *\n * A segmented button group where one button is always active.\n * Supports 2-4 buttons with optional icons.\n *\n * @example\n * ```tsx\n * <ButtonSegmented\n * items={[\n * { label: 'Day' },\n * { label: 'Week' },\n * { label: 'Month' },\n * ]}\n * activeIndex={0}\n * onChange={(index, item) => console.log(index, item)}\n * />\n * ```\n */\nexport const ButtonSegmented = React.forwardRef<HTMLDivElement, ButtonSegmentedProps>(\n ({ items, activeIndex = 0, onChange, className, style, ...props }, ref) => {\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null);\n\n // Validate items count (2-4)\n const validItems = items.slice(0, 4);\n if (validItems.length < 2) {\n console.warn('ButtonSegmented requires at least 2 items');\n }\n\n // Check if any item has an icon - if so, all should have icons\n const hasIcons = validItems.some((item) => item.icon);\n\n const handleClick = (index: number) => {\n if (index !== activeIndex && onChange) {\n onChange(index, validItems[index]);\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-button-segmented', className)}\n style={{ ...segmentedStyles.container, ...style }}\n role=\"group\"\n aria-label=\"Segmented button group\"\n {...props}\n >\n {validItems.map((item, index) => {\n const isActive = index === activeIndex;\n const isHovered = hoveredIndex === index;\n\n let buttonStyle: React.CSSProperties = {\n ...segmentedStyles.button.base,\n };\n\n if (isActive) {\n buttonStyle = {\n ...buttonStyle,\n ...segmentedStyles.button.active,\n ...(isHovered && segmentedStyles.button.activeHover),\n };\n } else {\n buttonStyle = {\n ...buttonStyle,\n ...segmentedStyles.button.default,\n ...(isHovered && segmentedStyles.button.hover),\n };\n }\n\n return (\n <button\n key={item.value || index}\n type=\"button\"\n style={buttonStyle}\n onClick={() => handleClick(index)}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n aria-pressed={isActive}\n >\n {hasIcons && item.icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n }}\n >\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n }\n);\n\nButtonSegmented.displayName = 'ButtonSegmented';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,83 @@
1
+ // src/Logo/Logo.tsx
2
+ import * as React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ var Logo = React.forwardRef(
5
+ ({
6
+ withText = true,
7
+ light = false,
8
+ width,
9
+ height,
10
+ className,
11
+ style
12
+ }, ref) => {
13
+ const defaultWidth = withText ? 66 : 25;
14
+ const defaultHeight = withText ? 26 : 25;
15
+ const finalWidth = width ?? defaultWidth;
16
+ const finalHeight = height ?? defaultHeight;
17
+ if (!withText) {
18
+ return /* @__PURE__ */ jsxs(
19
+ "svg",
20
+ {
21
+ ref,
22
+ width: finalWidth,
23
+ height: finalHeight,
24
+ viewBox: "0 0 25 25",
25
+ fill: "none",
26
+ xmlns: "http://www.w3.org/2000/svg",
27
+ className,
28
+ style,
29
+ "aria-label": "Arbor logo",
30
+ children: [
31
+ /* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_logo_icon)", children: [
32
+ /* @__PURE__ */ jsx("path", { d: "M12.6821 12.448C12.6821 9.06699 15.4229 6.32623 18.8039 6.32623C18.8039 2.94571 16.0631 0.205391 12.6817 0.205391C9.30163 0.205391 6.56086 2.94571 6.56042 6.32623C9.94138 6.32623 12.6817 9.06699 12.6821 12.448Z", fill: "#F7931E" }),
33
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.4481C12.6826 15.8286 9.9423 18.5694 6.56178 18.5694C6.56178 21.9503 9.3021 24.6902 12.6826 24.6902C16.064 24.6902 18.8043 21.9499 18.8043 18.5694C15.4229 18.5676 12.6822 15.8281 12.6822 12.4472L12.6826 12.4481Z", fill: "#AFD318" }),
34
+ /* @__PURE__ */ jsx("path", { d: "M18.8043 6.32631C18.8043 9.70727 16.064 12.448 12.6826 12.448C16.0636 12.448 18.8043 15.1888 18.8043 18.5693C22.1853 18.5693 24.9252 15.8286 24.9252 12.448C24.9252 9.06619 22.1844 6.32543 18.8048 6.32543L18.8043 6.32631Z", fill: "#DEEE21" }),
35
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.448C16.064 12.448 18.8043 9.70725 18.8043 6.32673C15.4225 6.32673 12.6822 9.06705 12.6826 12.448Z", fill: "#D58822" }),
36
+ /* @__PURE__ */ jsx("path", { d: "M12.6822 12.4481C12.6822 15.8286 15.423 18.5693 18.8039 18.5693C18.8039 15.1875 16.0632 12.4472 12.6818 12.4472L12.6822 12.4481Z", fill: "#96BA0F" }),
37
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.448C9.30204 12.448 6.56128 9.70725 6.56128 6.32673C3.18076 6.32673 0.440002 9.06705 0.440002 12.448C0.440002 15.8285 3.18076 18.5684 6.56128 18.5693C6.56128 15.1874 9.30204 12.4471 12.6826 12.4471V12.448Z", fill: "#7DBA3C" }),
38
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.448C12.6826 9.06705 9.9423 6.32629 6.56178 6.32629L6.56134 6.32673C6.56134 9.70769 9.3021 12.448 12.6826 12.448Z", fill: "#A0861A" }),
39
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.4481C9.3021 12.4481 6.56178 15.1888 6.56134 18.5693C9.94186 18.5676 12.6826 15.8281 12.6826 12.4472V12.4481Z", fill: "#68AA22" })
40
+ ] }),
41
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_logo_icon", children: /* @__PURE__ */ jsx("rect", { width: "25", height: "25", fill: "white" }) }) })
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ const textColor = light ? "#2F2F2F" : "white";
47
+ return /* @__PURE__ */ jsxs(
48
+ "svg",
49
+ {
50
+ ref,
51
+ width: finalWidth,
52
+ height: finalHeight,
53
+ viewBox: "0 0 66 26",
54
+ fill: "none",
55
+ xmlns: "http://www.w3.org/2000/svg",
56
+ className,
57
+ style,
58
+ "aria-label": "Arbor",
59
+ children: [
60
+ /* @__PURE__ */ jsx("path", { d: "M12.6822 12.4479C12.6822 9.06698 15.423 6.32622 18.8039 6.32622C18.8039 2.9457 16.0632 0.205383 12.6818 0.205383C9.30169 0.205383 6.56093 2.9457 6.56049 6.32622C9.94145 6.32622 12.6818 9.06698 12.6822 12.4479Z", fill: "#F7931E" }),
61
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.4481C12.6826 15.8286 9.9423 18.5694 6.56178 18.5694C6.56178 21.9503 9.3021 24.6902 12.6826 24.6902C16.064 24.6902 18.8043 21.9499 18.8043 18.5694C15.4229 18.5676 12.6822 15.8281 12.6822 12.4472L12.6826 12.4481Z", fill: "#AFD318" }),
62
+ /* @__PURE__ */ jsx("path", { d: "M18.8044 6.3263C18.8044 9.70726 16.0641 12.448 12.6827 12.448C16.0636 12.448 18.8044 15.1888 18.8044 18.5693C22.1854 18.5693 24.9252 15.8285 24.9252 12.448C24.9252 9.06618 22.1845 6.32542 18.8048 6.32542L18.8044 6.3263Z", fill: "#DEEE21" }),
63
+ /* @__PURE__ */ jsx("path", { d: "M12.6827 12.448C16.0641 12.448 18.8044 9.70725 18.8044 6.32673C15.4226 6.32673 12.6822 9.06705 12.6827 12.448Z", fill: "#D58822" }),
64
+ /* @__PURE__ */ jsx("path", { d: "M12.6823 12.4481C12.6823 15.8286 15.423 18.5693 18.804 18.5693C18.804 15.1875 16.0632 12.4472 12.6818 12.4472L12.6823 12.4481Z", fill: "#96BA0F" }),
65
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.448C9.30204 12.448 6.56128 9.70725 6.56128 6.32673C3.18076 6.32673 0.440002 9.06705 0.440002 12.448C0.440002 15.8285 3.18076 18.5684 6.56128 18.5693C6.56128 15.1875 9.30204 12.4471 12.6826 12.4471V12.448Z", fill: "#7DBA3C" }),
66
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.448C12.6826 9.06705 9.9423 6.32629 6.56178 6.32629L6.56134 6.32673C6.56134 9.70769 9.3021 12.448 12.6826 12.448Z", fill: "#A0861A" }),
67
+ /* @__PURE__ */ jsx("path", { d: "M12.6826 12.4481C9.3021 12.4481 6.56178 15.1888 6.56134 18.5693C9.94186 18.5676 12.6826 15.8281 12.6826 12.4472V12.4481Z", fill: "#68AA22" }),
68
+ /* @__PURE__ */ jsx("path", { d: "M37.7924 17.8181L36.4913 14.3809H31.9131L30.6604 17.7055H29.1345L33.4716 6.57394H34.9821L39.255 17.4965L37.7924 17.8181ZM34.1936 8.37222L32.4266 13.0459H35.9761L34.195 8.37222H34.1936Z", fill: textColor }),
69
+ /* @__PURE__ */ jsx("path", { d: "M41.4713 13.1755V17.7053H40.0417V10.0427H41.1822L41.4229 11.6012C41.9689 10.7335 42.8529 9.94635 44.1056 9.88211L44.3308 11.2479C43.0614 11.3121 41.9843 12.1635 41.4708 13.1751L41.4713 13.1755Z", fill: textColor }),
70
+ /* @__PURE__ */ jsx("path", { d: "M48.2659 17.8016C47.1092 17.8016 46.2903 17.6252 45.2779 17.3194V6.33171L46.707 6.10687V10.942C47.2218 10.4118 47.9601 9.88163 49.0047 9.88163C50.6591 9.88163 52.024 11.1026 52.024 13.6564C52.024 16.4513 50.4822 17.8008 48.2659 17.8008V17.8016ZM48.7957 11.1515C47.9931 11.1515 47.2861 11.6817 46.7079 12.4046V16.3241C47.1897 16.5006 47.5439 16.5811 48.2505 16.5811C49.7443 16.5811 50.5795 15.6971 50.5795 13.722C50.5795 12.0522 49.8231 11.1528 48.7957 11.1528V11.1515Z", fill: textColor }),
71
+ /* @__PURE__ */ jsx("path", { d: "M56.5064 17.8664C54.467 17.8664 52.9882 16.4042 52.9882 13.8826C52.9882 11.3605 54.467 9.88211 56.5064 9.88211C58.563 9.88211 60.0722 11.3601 60.0722 13.8826C60.0722 16.4038 58.563 17.8664 56.5064 17.8664ZM56.5064 11.0873C55.1248 11.0873 54.4345 12.2762 54.4345 13.8822C54.4345 15.4565 55.1574 16.6775 56.5064 16.6775C57.9202 16.6775 58.6263 15.4886 58.6263 13.8822C58.625 12.3087 57.8845 11.0877 56.5042 11.0877L56.5064 11.0873Z", fill: textColor }),
72
+ /* @__PURE__ */ jsx("path", { d: "M62.4495 13.1755V17.7053H61.0199V10.0427H62.1613L62.4019 11.6012C62.948 10.7335 63.8315 9.94635 65.0846 9.88211L65.3099 11.2479C64.0423 11.3121 62.9651 12.1635 62.4517 13.1751L62.4495 13.1755Z", fill: textColor })
73
+ ]
74
+ }
75
+ );
76
+ }
77
+ );
78
+ Logo.displayName = "Logo";
79
+
80
+ export {
81
+ Logo
82
+ };
83
+ //# sourceMappingURL=chunk-NNYU4DPD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Logo/Logo.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport interface LogoProps {\n /**\n * Whether to show the \"Arbor\" text alongside the logo\n */\n withText?: boolean;\n /**\n * Whether to use light (dark text) or dark (white text) variant\n * Only applies when withText is true\n */\n light?: boolean;\n /**\n * Width of the logo in pixels\n * @default withText ? 66 : 25\n */\n width?: number;\n /**\n * Height of the logo in pixels\n * @default withText ? 26 : 25\n */\n height?: number;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\n/**\n * Logo component - Arbor Design System\n *\n * Displays the Arbor logo with optional text in light or dark variants.\n */\nexport const Logo = React.forwardRef<SVGSVGElement, LogoProps>(\n (\n {\n withText = true,\n light = false,\n width,\n height,\n className,\n style,\n },\n ref\n ) => {\n const defaultWidth = withText ? 66 : 25;\n const defaultHeight = withText ? 26 : 25;\n const finalWidth = width ?? defaultWidth;\n const finalHeight = height ?? defaultHeight;\n\n // Icon only (no text)\n if (!withText) {\n return (\n <svg\n ref={ref}\n width={finalWidth}\n height={finalHeight}\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n aria-label=\"Arbor logo\"\n >\n <g clipPath=\"url(#clip0_logo_icon)\">\n <path d=\"M12.6821 12.448C12.6821 9.06699 15.4229 6.32623 18.8039 6.32623C18.8039 2.94571 16.0631 0.205391 12.6817 0.205391C9.30163 0.205391 6.56086 2.94571 6.56042 6.32623C9.94138 6.32623 12.6817 9.06699 12.6821 12.448Z\" fill=\"#F7931E\"/>\n <path d=\"M12.6826 12.4481C12.6826 15.8286 9.9423 18.5694 6.56178 18.5694C6.56178 21.9503 9.3021 24.6902 12.6826 24.6902C16.064 24.6902 18.8043 21.9499 18.8043 18.5694C15.4229 18.5676 12.6822 15.8281 12.6822 12.4472L12.6826 12.4481Z\" fill=\"#AFD318\"/>\n <path d=\"M18.8043 6.32631C18.8043 9.70727 16.064 12.448 12.6826 12.448C16.0636 12.448 18.8043 15.1888 18.8043 18.5693C22.1853 18.5693 24.9252 15.8286 24.9252 12.448C24.9252 9.06619 22.1844 6.32543 18.8048 6.32543L18.8043 6.32631Z\" fill=\"#DEEE21\"/>\n <path d=\"M12.6826 12.448C16.064 12.448 18.8043 9.70725 18.8043 6.32673C15.4225 6.32673 12.6822 9.06705 12.6826 12.448Z\" fill=\"#D58822\"/>\n <path d=\"M12.6822 12.4481C12.6822 15.8286 15.423 18.5693 18.8039 18.5693C18.8039 15.1875 16.0632 12.4472 12.6818 12.4472L12.6822 12.4481Z\" fill=\"#96BA0F\"/>\n <path d=\"M12.6826 12.448C9.30204 12.448 6.56128 9.70725 6.56128 6.32673C3.18076 6.32673 0.440002 9.06705 0.440002 12.448C0.440002 15.8285 3.18076 18.5684 6.56128 18.5693C6.56128 15.1874 9.30204 12.4471 12.6826 12.4471V12.448Z\" fill=\"#7DBA3C\"/>\n <path d=\"M12.6826 12.448C12.6826 9.06705 9.9423 6.32629 6.56178 6.32629L6.56134 6.32673C6.56134 9.70769 9.3021 12.448 12.6826 12.448Z\" fill=\"#A0861A\"/>\n <path d=\"M12.6826 12.4481C9.3021 12.4481 6.56178 15.1888 6.56134 18.5693C9.94186 18.5676 12.6826 15.8281 12.6826 12.4472V12.4481Z\" fill=\"#68AA22\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_logo_icon\">\n <rect width=\"25\" height=\"25\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n );\n }\n\n // Logo with text\n const textColor = light ? '#2F2F2F' : 'white';\n\n return (\n <svg\n ref={ref}\n width={finalWidth}\n height={finalHeight}\n viewBox=\"0 0 66 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n aria-label=\"Arbor\"\n >\n <path d=\"M12.6822 12.4479C12.6822 9.06698 15.423 6.32622 18.8039 6.32622C18.8039 2.9457 16.0632 0.205383 12.6818 0.205383C9.30169 0.205383 6.56093 2.9457 6.56049 6.32622C9.94145 6.32622 12.6818 9.06698 12.6822 12.4479Z\" fill=\"#F7931E\"/>\n <path d=\"M12.6826 12.4481C12.6826 15.8286 9.9423 18.5694 6.56178 18.5694C6.56178 21.9503 9.3021 24.6902 12.6826 24.6902C16.064 24.6902 18.8043 21.9499 18.8043 18.5694C15.4229 18.5676 12.6822 15.8281 12.6822 12.4472L12.6826 12.4481Z\" fill=\"#AFD318\"/>\n <path d=\"M18.8044 6.3263C18.8044 9.70726 16.0641 12.448 12.6827 12.448C16.0636 12.448 18.8044 15.1888 18.8044 18.5693C22.1854 18.5693 24.9252 15.8285 24.9252 12.448C24.9252 9.06618 22.1845 6.32542 18.8048 6.32542L18.8044 6.3263Z\" fill=\"#DEEE21\"/>\n <path d=\"M12.6827 12.448C16.0641 12.448 18.8044 9.70725 18.8044 6.32673C15.4226 6.32673 12.6822 9.06705 12.6827 12.448Z\" fill=\"#D58822\"/>\n <path d=\"M12.6823 12.4481C12.6823 15.8286 15.423 18.5693 18.804 18.5693C18.804 15.1875 16.0632 12.4472 12.6818 12.4472L12.6823 12.4481Z\" fill=\"#96BA0F\"/>\n <path d=\"M12.6826 12.448C9.30204 12.448 6.56128 9.70725 6.56128 6.32673C3.18076 6.32673 0.440002 9.06705 0.440002 12.448C0.440002 15.8285 3.18076 18.5684 6.56128 18.5693C6.56128 15.1875 9.30204 12.4471 12.6826 12.4471V12.448Z\" fill=\"#7DBA3C\"/>\n <path d=\"M12.6826 12.448C12.6826 9.06705 9.9423 6.32629 6.56178 6.32629L6.56134 6.32673C6.56134 9.70769 9.3021 12.448 12.6826 12.448Z\" fill=\"#A0861A\"/>\n <path d=\"M12.6826 12.4481C9.3021 12.4481 6.56178 15.1888 6.56134 18.5693C9.94186 18.5676 12.6826 15.8281 12.6826 12.4472V12.4481Z\" fill=\"#68AA22\"/>\n <path d=\"M37.7924 17.8181L36.4913 14.3809H31.9131L30.6604 17.7055H29.1345L33.4716 6.57394H34.9821L39.255 17.4965L37.7924 17.8181ZM34.1936 8.37222L32.4266 13.0459H35.9761L34.195 8.37222H34.1936Z\" fill={textColor}/>\n <path d=\"M41.4713 13.1755V17.7053H40.0417V10.0427H41.1822L41.4229 11.6012C41.9689 10.7335 42.8529 9.94635 44.1056 9.88211L44.3308 11.2479C43.0614 11.3121 41.9843 12.1635 41.4708 13.1751L41.4713 13.1755Z\" fill={textColor}/>\n <path d=\"M48.2659 17.8016C47.1092 17.8016 46.2903 17.6252 45.2779 17.3194V6.33171L46.707 6.10687V10.942C47.2218 10.4118 47.9601 9.88163 49.0047 9.88163C50.6591 9.88163 52.024 11.1026 52.024 13.6564C52.024 16.4513 50.4822 17.8008 48.2659 17.8008V17.8016ZM48.7957 11.1515C47.9931 11.1515 47.2861 11.6817 46.7079 12.4046V16.3241C47.1897 16.5006 47.5439 16.5811 48.2505 16.5811C49.7443 16.5811 50.5795 15.6971 50.5795 13.722C50.5795 12.0522 49.8231 11.1528 48.7957 11.1528V11.1515Z\" fill={textColor}/>\n <path d=\"M56.5064 17.8664C54.467 17.8664 52.9882 16.4042 52.9882 13.8826C52.9882 11.3605 54.467 9.88211 56.5064 9.88211C58.563 9.88211 60.0722 11.3601 60.0722 13.8826C60.0722 16.4038 58.563 17.8664 56.5064 17.8664ZM56.5064 11.0873C55.1248 11.0873 54.4345 12.2762 54.4345 13.8822C54.4345 15.4565 55.1574 16.6775 56.5064 16.6775C57.9202 16.6775 58.6263 15.4886 58.6263 13.8822C58.625 12.3087 57.8845 11.0877 56.5042 11.0877L56.5064 11.0873Z\" fill={textColor}/>\n <path d=\"M62.4495 13.1755V17.7053H61.0199V10.0427H62.1613L62.4019 11.6012C62.948 10.7335 63.8315 9.94635 65.0846 9.88211L65.3099 11.2479C64.0423 11.3121 62.9651 12.1635 62.4517 13.1751L62.4495 13.1755Z\" fill={textColor}/>\n </svg>\n );\n }\n);\n\nLogo.displayName = 'Logo';\n"],"mappings":";AAAA,YAAY,WAAW;AAoEb,SACE,KADF;AA/BH,IAAM,OAAa;AAAA,EACxB,CACE;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GACA,QACG;AACH,UAAM,eAAe,WAAW,KAAK;AACrC,UAAM,gBAAgB,WAAW,KAAK;AACtC,UAAM,aAAa,SAAS;AAC5B,UAAM,cAAc,UAAU;AAG9B,QAAI,CAAC,UAAU;AACb,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,cAAW;AAAA,UAEX;AAAA,iCAAC,OAAE,UAAS,yBACV;AAAA,kCAAC,UAAK,GAAE,sNAAqN,MAAK,WAAS;AAAA,cAC3O,oBAAC,UAAK,GAAE,kOAAiO,MAAK,WAAS;AAAA,cACvP,oBAAC,UAAK,GAAE,gOAA+N,MAAK,WAAS;AAAA,cACrP,oBAAC,UAAK,GAAE,iHAAgH,MAAK,WAAS;AAAA,cACtI,oBAAC,UAAK,GAAE,oIAAmI,MAAK,WAAS;AAAA,cACzJ,oBAAC,UAAK,GAAE,4NAA2N,MAAK,WAAS;AAAA,cACjP,oBAAC,UAAK,GAAE,gIAA+H,MAAK,WAAS;AAAA,cACrJ,oBAAC,UAAK,GAAE,4HAA2H,MAAK,WAAS;AAAA,eACnJ;AAAA,YACA,oBAAC,UACC,8BAAC,cAAS,IAAG,mBACX,8BAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAO,GAC3C,GACF;AAAA;AAAA;AAAA,MACF;AAAA,IAEJ;AAGA,UAAM,YAAY,QAAQ,YAAY;AAEtC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,cAAW;AAAA,QAEX;AAAA,8BAAC,UAAK,GAAE,qNAAoN,MAAK,WAAS;AAAA,UAC1O,oBAAC,UAAK,GAAE,kOAAiO,MAAK,WAAS;AAAA,UACvP,oBAAC,UAAK,GAAE,+NAA8N,MAAK,WAAS;AAAA,UACpP,oBAAC,UAAK,GAAE,kHAAiH,MAAK,WAAS;AAAA,UACvI,oBAAC,UAAK,GAAE,kIAAiI,MAAK,WAAS;AAAA,UACvJ,oBAAC,UAAK,GAAE,4NAA2N,MAAK,WAAS;AAAA,UACjP,oBAAC,UAAK,GAAE,gIAA+H,MAAK,WAAS;AAAA,UACrJ,oBAAC,UAAK,GAAE,4HAA2H,MAAK,WAAS;AAAA,UACjJ,oBAAC,UAAK,GAAE,4LAA2L,MAAM,WAAU;AAAA,UACnN,oBAAC,UAAK,GAAE,qMAAoM,MAAM,WAAU;AAAA,UAC5N,oBAAC,UAAK,GAAE,wdAAud,MAAM,WAAU;AAAA,UAC/e,oBAAC,UAAK,GAAE,ibAAgb,MAAM,WAAU;AAAA,UACxc,oBAAC,UAAK,GAAE,oMAAmM,MAAM,WAAU;AAAA;AAAA;AAAA,IAC7N;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;","names":[]}
@@ -66,6 +66,32 @@ var buttonStyles = {
66
66
  cursor: "not-allowed"
67
67
  }
68
68
  },
69
+ tertiary: {
70
+ backgroundColor: "#efefef",
71
+ // grey-100
72
+ color: "#2f2f2f",
73
+ // grey-900
74
+ ":hover": {
75
+ backgroundColor: "#dfdfdf"
76
+ // grey-200
77
+ },
78
+ ":active": {
79
+ backgroundColor: "#d1d1d1"
80
+ // grey-300
81
+ },
82
+ ":focus-visible": {
83
+ outline: "3px solid #3cad51",
84
+ // brand-500
85
+ outlineOffset: "0px"
86
+ },
87
+ ":disabled": {
88
+ backgroundColor: "#f8f8f8",
89
+ // grey-050
90
+ color: "#b3b3b3",
91
+ // grey-400
92
+ cursor: "not-allowed"
93
+ }
94
+ },
69
95
  destructive: {
70
96
  backgroundColor: "#c93232",
71
97
  // destructive-500
@@ -88,6 +114,36 @@ var buttonStyles = {
88
114
  cursor: "not-allowed"
89
115
  }
90
116
  },
117
+ "destructive-secondary": {
118
+ backgroundColor: "#ffffff",
119
+ color: "#a62323",
120
+ // destructive-600
121
+ border: "1px solid #c93232",
122
+ // destructive-500
123
+ ":hover": {
124
+ backgroundColor: "#a62323",
125
+ // destructive-600
126
+ color: "#ffffff",
127
+ border: "1px solid #a62323"
128
+ },
129
+ ":active": {
130
+ backgroundColor: "#920a0a",
131
+ // destructive-700
132
+ color: "#ffffff",
133
+ border: "1px solid #920a0a"
134
+ },
135
+ ":focus-visible": {
136
+ outline: "3px solid #3cad51",
137
+ // brand-500 (green focus ring)
138
+ outlineOffset: "0px"
139
+ },
140
+ ":disabled": {
141
+ backgroundColor: "#ffffff",
142
+ color: "#b3b3b3",
143
+ border: "1px solid #d1d1d1",
144
+ cursor: "not-allowed"
145
+ }
146
+ },
91
147
  ghost: {
92
148
  backgroundColor: "transparent",
93
149
  color: "#0b800b",
@@ -191,4 +247,4 @@ Button.displayName = "Button";
191
247
  export {
192
248
  Button
193
249
  };
194
- //# sourceMappingURL=chunk-ALEJXAZY.mjs.map
250
+ //# sourceMappingURL=chunk-NOUFR6W2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Button/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { clsx } from 'clsx';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'destructive' | 'destructive-secondary' | 'ghost';\nexport type ButtonSize = 'small' | 'medium';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * The visual style variant of the button\n * @default 'primary'\n */\n variant?: ButtonVariant;\n /**\n * The size of the button\n * @default 'medium'\n */\n size?: ButtonSize;\n /**\n * If true, the component will be rendered as a child element\n * and merge its props with the child\n */\n asChild?: boolean;\n /**\n * The content of the button\n */\n children: React.ReactNode;\n}\n\n// Arbor Design System button styles\nconst buttonStyles = {\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontWeight: '500',\n borderRadius: '99px', // Pill shape\n border: 'none',\n cursor: 'pointer',\n transition: 'all 0.2s ease-in-out',\n outline: 'none',\n },\n variants: {\n primary: {\n backgroundColor: '#0e8a0e', // brand-600\n color: '#ffffff',\n ':hover': {\n backgroundColor: '#005700', // brand-800\n },\n ':active': {\n backgroundColor: '#024002', // brand-900\n },\n ':focus-visible': {\n outline: '3px solid #3cad51', // brand-500\n outlineOffset: '0px',\n },\n ':disabled': {\n backgroundColor: '#b3b3b3', // grey-400\n cursor: 'not-allowed',\n },\n },\n secondary: {\n backgroundColor: '#ffffff',\n color: '#2f2f2f', // grey-900\n border: '1px solid #d1d1d1', // grey-300\n ':hover': {\n backgroundColor: '#f8f8f8', // grey-050\n },\n ':active': {\n backgroundColor: '#efefef', // grey-100\n },\n ':focus-visible': {\n outline: '3px solid #3cad51', // brand-500\n outlineOffset: '0px',\n },\n ':disabled': {\n backgroundColor: '#f8f8f8',\n color: '#b3b3b3',\n cursor: 'not-allowed',\n },\n },\n tertiary: {\n backgroundColor: '#efefef', // grey-100\n color: '#2f2f2f', // grey-900\n ':hover': {\n backgroundColor: '#dfdfdf', // grey-200\n },\n ':active': {\n backgroundColor: '#d1d1d1', // grey-300\n },\n ':focus-visible': {\n outline: '3px solid #3cad51', // brand-500\n outlineOffset: '0px',\n },\n ':disabled': {\n backgroundColor: '#f8f8f8', // grey-050\n color: '#b3b3b3', // grey-400\n cursor: 'not-allowed',\n },\n },\n destructive: {\n backgroundColor: '#c93232', // destructive-500\n color: '#ffffff',\n ':hover': {\n backgroundColor: '#920a0a', // destructive-700\n },\n ':active': {\n backgroundColor: '#610202', // destructive-800\n },\n ':focus-visible': {\n outline: '3px solid #e86565', // destructive-300\n outlineOffset: '0px',\n },\n ':disabled': {\n backgroundColor: '#b3b3b3',\n cursor: 'not-allowed',\n },\n },\n 'destructive-secondary': {\n backgroundColor: '#ffffff',\n color: '#a62323', // destructive-600\n border: '1px solid #c93232', // destructive-500\n ':hover': {\n backgroundColor: '#a62323', // destructive-600\n color: '#ffffff',\n border: '1px solid #a62323',\n },\n ':active': {\n backgroundColor: '#920a0a', // destructive-700\n color: '#ffffff',\n border: '1px solid #920a0a',\n },\n ':focus-visible': {\n outline: '3px solid #3cad51', // brand-500 (green focus ring)\n outlineOffset: '0px',\n },\n ':disabled': {\n backgroundColor: '#ffffff',\n color: '#b3b3b3',\n border: '1px solid #d1d1d1',\n cursor: 'not-allowed',\n },\n },\n ghost: {\n backgroundColor: 'transparent',\n color: '#0b800b', // brand-700 for link style\n textDecoration: 'underline',\n ':hover': {\n color: '#005700', // brand-800\n },\n ':active': {\n color: '#024002', // brand-900\n },\n ':focus-visible': {\n outline: '3px solid #3cad51',\n outlineOffset: '2px',\n },\n ':disabled': {\n color: '#b3b3b3',\n cursor: 'not-allowed',\n },\n },\n },\n sizes: {\n small: {\n height: '32px',\n fontSize: '13px',\n padding: '8px 16px',\n },\n medium: {\n height: '36px',\n fontSize: '13px',\n padding: '8px 16px',\n },\n },\n};\n\n/**\n * Button component - Arbor Design System\n *\n * A flexible button component with pill-shaped design following Arbor's design system.\n * Supports primary (green), secondary (outlined), destructive (red), and ghost (link-style) variants.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"medium\">\n * Save Changes\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'medium',\n asChild = false,\n className,\n disabled,\n style,\n children,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button';\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n\n const variantStyles = buttonStyles.variants[variant];\n const sizeStyles = buttonStyles.sizes[size];\n\n const combinedStyle: React.CSSProperties = {\n ...buttonStyles.base,\n ...variantStyles,\n ...sizeStyles,\n ...(isHovered && !disabled && variantStyles[':hover']),\n ...(isFocused && !disabled && variantStyles[':focus-visible']),\n ...(disabled && variantStyles[':disabled']),\n ...style,\n };\n\n const handleMouseEnter = (e: React.MouseEvent<HTMLButtonElement>) => {\n setIsHovered(true);\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave = (e: React.MouseEvent<HTMLButtonElement>) => {\n setIsHovered(false);\n onMouseLeave?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLButtonElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n return (\n <Comp\n ref={ref}\n className={clsx('arbor-button', className)}\n style={combinedStyle}\n disabled={disabled}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nButton.displayName = 'Button';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,146 @@
1
+ // src/ListRowMultiLine/ListRowMultiLine.tsx
2
+ import * as React from "react";
3
+ import { clsx } from "clsx";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ var CaretIcon = ({ isHovered }) => {
6
+ if (isHovered) {
7
+ return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx(
8
+ "path",
9
+ {
10
+ d: "M6 4L10 8L6 12",
11
+ stroke: "#2f2f2f",
12
+ strokeWidth: "1.2",
13
+ strokeLinecap: "round",
14
+ strokeLinejoin: "round"
15
+ }
16
+ ) });
17
+ }
18
+ return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx(
19
+ "path",
20
+ {
21
+ d: "M6 4L10 8L6 12",
22
+ stroke: "#b3b3b3",
23
+ strokeWidth: "1.2",
24
+ strokeLinecap: "round",
25
+ strokeLinejoin: "round"
26
+ }
27
+ ) });
28
+ };
29
+ var listRowMultiLineStyles = {
30
+ container: {
31
+ display: "flex",
32
+ alignItems: "center",
33
+ width: "100%",
34
+ borderBottom: "1px solid #f8f8f8",
35
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
36
+ boxSizing: "border-box",
37
+ borderRadius: "8px",
38
+ transition: "background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out",
39
+ outline: "none"
40
+ },
41
+ containerHover: {
42
+ backgroundColor: "#f8f8f8"
43
+ },
44
+ containerFocus: {
45
+ outline: "3px solid #3cad51",
46
+ outlineOffset: "-3px"
47
+ },
48
+ containerClickable: {
49
+ cursor: "pointer"
50
+ },
51
+ content: {
52
+ display: "flex",
53
+ alignItems: "center",
54
+ justifyContent: "space-between",
55
+ width: "100%",
56
+ padding: "4px 8px",
57
+ minHeight: "44px"
58
+ },
59
+ textContent: {
60
+ display: "flex",
61
+ flexDirection: "column",
62
+ alignItems: "flex-start",
63
+ justifyContent: "center",
64
+ flex: 1,
65
+ gap: "0px"
66
+ },
67
+ title: {
68
+ fontSize: "16px",
69
+ fontWeight: "600",
70
+ color: "#2f2f2f",
71
+ lineHeight: "1.5",
72
+ margin: 0
73
+ },
74
+ description: {
75
+ fontSize: "13px",
76
+ fontWeight: "400",
77
+ color: "#2f2f2f",
78
+ lineHeight: "1.5",
79
+ margin: 0
80
+ },
81
+ iconWrapper: {
82
+ display: "flex",
83
+ alignItems: "center",
84
+ justifyContent: "center",
85
+ width: "16px",
86
+ height: "16px",
87
+ flexShrink: 0,
88
+ marginLeft: "8px"
89
+ }
90
+ };
91
+ var ListRowMultiLine = React.forwardRef(
92
+ ({ title, description, icon = false, onClick, className, style, ...props }, ref) => {
93
+ const [isHovered, setIsHovered] = React.useState(false);
94
+ const [isFocused, setIsFocused] = React.useState(false);
95
+ const showHoverState = icon && isHovered;
96
+ const isClickable = icon && onClick;
97
+ const containerStyle = {
98
+ ...listRowMultiLineStyles.container,
99
+ ...showHoverState && listRowMultiLineStyles.containerHover,
100
+ ...isFocused && listRowMultiLineStyles.containerFocus,
101
+ ...isClickable && listRowMultiLineStyles.containerClickable,
102
+ ...style
103
+ };
104
+ const handleClick = () => {
105
+ if (isClickable && onClick) {
106
+ onClick();
107
+ }
108
+ };
109
+ const handleKeyDown = (event) => {
110
+ if (isClickable && (event.key === "Enter" || event.key === " ")) {
111
+ event.preventDefault();
112
+ onClick?.();
113
+ }
114
+ };
115
+ return /* @__PURE__ */ jsx(
116
+ "div",
117
+ {
118
+ ref,
119
+ className: clsx("arbor-list-row-multi-line", className),
120
+ style: containerStyle,
121
+ onClick: handleClick,
122
+ onMouseEnter: () => icon && setIsHovered(true),
123
+ onMouseLeave: () => setIsHovered(false),
124
+ onFocus: () => setIsFocused(true),
125
+ onBlur: () => setIsFocused(false),
126
+ onKeyDown: handleKeyDown,
127
+ tabIndex: isClickable ? 0 : void 0,
128
+ role: isClickable ? "button" : void 0,
129
+ ...props,
130
+ children: /* @__PURE__ */ jsxs("div", { style: listRowMultiLineStyles.content, children: [
131
+ /* @__PURE__ */ jsxs("div", { style: listRowMultiLineStyles.textContent, children: [
132
+ /* @__PURE__ */ jsx("span", { style: listRowMultiLineStyles.title, children: title }),
133
+ /* @__PURE__ */ jsx("span", { style: listRowMultiLineStyles.description, children: description })
134
+ ] }),
135
+ icon && /* @__PURE__ */ jsx("div", { style: listRowMultiLineStyles.iconWrapper, children: /* @__PURE__ */ jsx(CaretIcon, { isHovered }) })
136
+ ] })
137
+ }
138
+ );
139
+ }
140
+ );
141
+ ListRowMultiLine.displayName = "ListRowMultiLine";
142
+
143
+ export {
144
+ ListRowMultiLine
145
+ };
146
+ //# sourceMappingURL=chunk-ODKT7LGV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ListRowMultiLine/ListRowMultiLine.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface ListRowMultiLineProps {\n /**\n * The heading/title text (displayed on line 1, larger and bold)\n */\n title: string;\n /**\n * The description text (displayed on line 2, smaller and regular weight)\n */\n description: string;\n /**\n * Show the right arrow icon - enables hover state and indicates row is clickable\n * @default false\n */\n icon?: boolean;\n /**\n * Click handler - typically used with icon prop for navigation\n */\n onClick?: () => void;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Additional inline styles\n */\n style?: React.CSSProperties;\n}\n\n// Caret/Arrow icon - transforms on hover\nconst CaretIcon = ({ isHovered }: { isHovered: boolean }) => {\n if (isHovered) {\n // Arrow pointing right on hover\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n // Default caret (chevron right)\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"#b3b3b3\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\n// Arbor Design System list row multiple lines styles\nconst listRowMultiLineStyles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n borderBottom: '1px solid #f8f8f8',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n boxSizing: 'border-box' as const,\n borderRadius: '8px',\n transition: 'background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out',\n outline: 'none',\n },\n containerHover: {\n backgroundColor: '#f8f8f8',\n },\n containerFocus: {\n outline: '3px solid #3cad51',\n outlineOffset: '-3px',\n },\n containerClickable: {\n cursor: 'pointer',\n },\n content: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '4px 8px',\n minHeight: '44px',\n },\n textContent: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'flex-start',\n justifyContent: 'center',\n flex: 1,\n gap: '0px',\n },\n title: {\n fontSize: '16px',\n fontWeight: '600',\n color: '#2f2f2f',\n lineHeight: '1.5',\n margin: 0,\n },\n description: {\n fontSize: '13px',\n fontWeight: '400',\n color: '#2f2f2f',\n lineHeight: '1.5',\n margin: 0,\n },\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n flexShrink: 0,\n marginLeft: '8px',\n },\n};\n\n/**\n * ListRowMultiLine component - Arbor Design System\n *\n * A list row component with content displayed on two vertical lines.\n * Cannot be mixed with single-line ListRow in the same section.\n * Hover state is only enabled when icon is present (indicating clickable row).\n *\n * @example\n * ```tsx\n * // Basic multi-line row (not clickable)\n * <ListRowMultiLine\n * title=\"Section Title\"\n * description=\"A brief description of this section\"\n * />\n *\n * // Clickable multi-line row with icon\n * <ListRowMultiLine\n * title=\"View Details\"\n * description=\"Click to see more information\"\n * icon\n * onClick={() => navigate('/details')}\n * />\n * ```\n */\nexport const ListRowMultiLine = React.forwardRef<HTMLDivElement, ListRowMultiLineProps>(\n ({ title, description, icon = false, onClick, className, style, ...props }, ref) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n\n // Only enable hover state when icon is present\n const showHoverState = icon && isHovered;\n const isClickable = icon && onClick;\n\n const containerStyle: React.CSSProperties = {\n ...listRowMultiLineStyles.container,\n ...(showHoverState && listRowMultiLineStyles.containerHover),\n ...(isFocused && listRowMultiLineStyles.containerFocus),\n ...(isClickable && listRowMultiLineStyles.containerClickable),\n ...style,\n };\n\n const handleClick = () => {\n if (isClickable && onClick) {\n onClick();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (isClickable && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-list-row-multi-line', className)}\n style={containerStyle}\n onClick={handleClick}\n onMouseEnter={() => icon && setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n tabIndex={isClickable ? 0 : undefined}\n role={isClickable ? 'button' : undefined}\n {...props}\n >\n <div style={listRowMultiLineStyles.content}>\n <div style={listRowMultiLineStyles.textContent}>\n <span style={listRowMultiLineStyles.title}>{title}</span>\n <span style={listRowMultiLineStyles.description}>{description}</span>\n </div>\n {icon && (\n <div style={listRowMultiLineStyles.iconWrapper}>\n <CaretIcon isHovered={isHovered} />\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nListRowMultiLine.displayName = 'ListRowMultiLine';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,37 @@
1
+ // src/ModalFooter/ModalFooter.tsx
2
+ import * as React from "react";
3
+ import { clsx } from "clsx";
4
+ import { jsx } from "react/jsx-runtime";
5
+ var modalFooterStyles = {
6
+ container: {
7
+ display: "flex",
8
+ alignItems: "center",
9
+ justifyContent: "flex-end",
10
+ gap: "16px",
11
+ width: "100%",
12
+ padding: "16px",
13
+ backgroundColor: "#ffffff",
14
+ boxSizing: "border-box",
15
+ maxHeight: "56px"
16
+ }
17
+ };
18
+ var ModalFooter = React.forwardRef(
19
+ ({ children, className, style, ...props }, ref) => {
20
+ return /* @__PURE__ */ jsx(
21
+ "div",
22
+ {
23
+ ref,
24
+ className: clsx("arbor-modal-footer", className),
25
+ style: { ...modalFooterStyles.container, ...style },
26
+ ...props,
27
+ children
28
+ }
29
+ );
30
+ }
31
+ );
32
+ ModalFooter.displayName = "ModalFooter";
33
+
34
+ export {
35
+ ModalFooter
36
+ };
37
+ //# sourceMappingURL=chunk-P7RKUESQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ModalFooter/ModalFooter.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface ModalFooterProps {\n /**\n * The content of the footer, typically buttons\n */\n children: React.ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Additional inline styles\n */\n style?: React.CSSProperties;\n}\n\n// Arbor Design System modal footer styles\nconst modalFooterStyles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '16px',\n width: '100%',\n padding: '16px',\n backgroundColor: '#ffffff',\n boxSizing: 'border-box' as const,\n maxHeight: '56px',\n },\n};\n\n/**\n * ModalFooter component - Arbor Design System\n *\n * The footer part of a modal dialog, typically containing action buttons.\n * Buttons are right-aligned by default.\n *\n * @example\n * ```tsx\n * // Footer with two buttons\n * <ModalFooter>\n * <Button variant=\"tertiary\">Cancel</Button>\n * <Button variant=\"primary\">Save</Button>\n * </ModalFooter>\n *\n * // Footer with destructive action\n * <ModalFooter>\n * <Button variant=\"tertiary\">Cancel</Button>\n * <Button variant=\"destructive-secondary\">Delete</Button>\n * </ModalFooter>\n * ```\n */\nexport const ModalFooter = React.forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ children, className, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('arbor-modal-footer', className)}\n style={{ ...modalFooterStyles.container, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nModalFooter.displayName = 'ModalFooter';\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,YAAY;AAwDf;AAtCN,IAAM,oBAAoB;AAAA,EACxB,WAAW;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF;AAuBO,IAAM,cAAoB;AAAA,EAC/B,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,MAAM,GAAG,QAAQ;AACjD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,KAAK,sBAAsB,SAAS;AAAA,QAC/C,OAAO,EAAE,GAAG,kBAAkB,WAAW,GAAG,MAAM;AAAA,QACjD,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;","names":[]}