@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,67 @@
1
+ import * as React from 'react';
2
+
3
+ interface SectionHeadingInteractiveProps {
4
+ /**
5
+ * The heading text (required)
6
+ */
7
+ title: string;
8
+ /**
9
+ * Content to display when expanded (sub-sections, list rows, etc.)
10
+ */
11
+ children?: React.ReactNode;
12
+ /**
13
+ * Whether the section is expanded (controlled mode)
14
+ */
15
+ expanded?: boolean;
16
+ /**
17
+ * Default expanded state (uncontrolled mode)
18
+ * @default true
19
+ */
20
+ defaultExpanded?: boolean;
21
+ /**
22
+ * Callback when expanded state changes
23
+ */
24
+ onExpandedChange?: (expanded: boolean) => void;
25
+ /**
26
+ * Additional CSS class name
27
+ */
28
+ className?: string;
29
+ /**
30
+ * Additional inline styles
31
+ */
32
+ style?: React.CSSProperties;
33
+ }
34
+ /**
35
+ * SectionHeadingInteractive component - Arbor Design System
36
+ *
37
+ * A collapsible section heading component that can contain sub-sections,
38
+ * list rows, and other content. Click the header to expand/collapse.
39
+ * Uses h2 heading style (22px) for main section level.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * // Basic collapsible section
44
+ * <SectionHeadingInteractive title="Personal Information">
45
+ * <SubSectionInteractive title="Contact Details">
46
+ * <ListRow label="Email" value="john@example.com" />
47
+ * </SubSectionInteractive>
48
+ * </SectionHeadingInteractive>
49
+ *
50
+ * // Initially collapsed
51
+ * <SectionHeadingInteractive title="Additional Settings" defaultExpanded={false}>
52
+ * <ListRow label="Theme" value="Dark" />
53
+ * </SectionHeadingInteractive>
54
+ *
55
+ * // Controlled mode
56
+ * <SectionHeadingInteractive
57
+ * title="Account"
58
+ * expanded={isExpanded}
59
+ * onExpandedChange={setIsExpanded}
60
+ * >
61
+ * <ListRow label="Status" value="Active" />
62
+ * </SectionHeadingInteractive>
63
+ * ```
64
+ */
65
+ declare const SectionHeadingInteractive: React.ForwardRefExoticComponent<SectionHeadingInteractiveProps & React.RefAttributes<HTMLDivElement>>;
66
+
67
+ export { SectionHeadingInteractive, type SectionHeadingInteractiveProps };
@@ -0,0 +1,67 @@
1
+ import * as React from 'react';
2
+
3
+ interface SectionHeadingInteractiveProps {
4
+ /**
5
+ * The heading text (required)
6
+ */
7
+ title: string;
8
+ /**
9
+ * Content to display when expanded (sub-sections, list rows, etc.)
10
+ */
11
+ children?: React.ReactNode;
12
+ /**
13
+ * Whether the section is expanded (controlled mode)
14
+ */
15
+ expanded?: boolean;
16
+ /**
17
+ * Default expanded state (uncontrolled mode)
18
+ * @default true
19
+ */
20
+ defaultExpanded?: boolean;
21
+ /**
22
+ * Callback when expanded state changes
23
+ */
24
+ onExpandedChange?: (expanded: boolean) => void;
25
+ /**
26
+ * Additional CSS class name
27
+ */
28
+ className?: string;
29
+ /**
30
+ * Additional inline styles
31
+ */
32
+ style?: React.CSSProperties;
33
+ }
34
+ /**
35
+ * SectionHeadingInteractive component - Arbor Design System
36
+ *
37
+ * A collapsible section heading component that can contain sub-sections,
38
+ * list rows, and other content. Click the header to expand/collapse.
39
+ * Uses h2 heading style (22px) for main section level.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * // Basic collapsible section
44
+ * <SectionHeadingInteractive title="Personal Information">
45
+ * <SubSectionInteractive title="Contact Details">
46
+ * <ListRow label="Email" value="john@example.com" />
47
+ * </SubSectionInteractive>
48
+ * </SectionHeadingInteractive>
49
+ *
50
+ * // Initially collapsed
51
+ * <SectionHeadingInteractive title="Additional Settings" defaultExpanded={false}>
52
+ * <ListRow label="Theme" value="Dark" />
53
+ * </SectionHeadingInteractive>
54
+ *
55
+ * // Controlled mode
56
+ * <SectionHeadingInteractive
57
+ * title="Account"
58
+ * expanded={isExpanded}
59
+ * onExpandedChange={setIsExpanded}
60
+ * >
61
+ * <ListRow label="Status" value="Active" />
62
+ * </SectionHeadingInteractive>
63
+ * ```
64
+ */
65
+ declare const SectionHeadingInteractive: React.ForwardRefExoticComponent<SectionHeadingInteractiveProps & React.RefAttributes<HTMLDivElement>>;
66
+
67
+ export { SectionHeadingInteractive, type SectionHeadingInteractiveProps };
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/SectionHeadingInteractive/index.ts
31
+ var SectionHeadingInteractive_exports = {};
32
+ __export(SectionHeadingInteractive_exports, {
33
+ SectionHeadingInteractive: () => SectionHeadingInteractive
34
+ });
35
+ module.exports = __toCommonJS(SectionHeadingInteractive_exports);
36
+
37
+ // src/SectionHeadingInteractive/SectionHeadingInteractive.tsx
38
+ var React = __toESM(require("react"));
39
+ var import_clsx = require("clsx");
40
+ var import_jsx_runtime = require("react/jsx-runtime");
41
+ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
42
+ "svg",
43
+ {
44
+ width: "16",
45
+ height: "16",
46
+ viewBox: "0 0 16 16",
47
+ fill: "none",
48
+ xmlns: "http://www.w3.org/2000/svg",
49
+ style: {
50
+ transform: expanded ? "rotate(180deg)" : "rotate(0deg)",
51
+ transition: "transform 0.2s ease-in-out"
52
+ },
53
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
54
+ "path",
55
+ {
56
+ d: "M4 6L8 10L12 6",
57
+ stroke: "#2f2f2f",
58
+ strokeWidth: "1.2",
59
+ strokeLinecap: "round",
60
+ strokeLinejoin: "round"
61
+ }
62
+ )
63
+ }
64
+ );
65
+ var sectionHeadingInteractiveStyles = {
66
+ container: {
67
+ display: "flex",
68
+ flexDirection: "column",
69
+ width: "100%",
70
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
71
+ boxSizing: "border-box"
72
+ },
73
+ header: {
74
+ display: "flex",
75
+ alignItems: "center",
76
+ width: "100%",
77
+ cursor: "pointer",
78
+ border: "none",
79
+ background: "transparent",
80
+ padding: 0,
81
+ margin: 0,
82
+ textAlign: "left",
83
+ outline: "none"
84
+ },
85
+ // When collapsed, no bottom border
86
+ headerContainerCollapsed: {
87
+ display: "flex",
88
+ alignItems: "center",
89
+ width: "100%"
90
+ },
91
+ // When expanded, has bottom border
92
+ headerContainerExpanded: {
93
+ display: "flex",
94
+ alignItems: "center",
95
+ width: "100%",
96
+ borderBottom: "1px solid #f8f8f8"
97
+ },
98
+ headerContent: {
99
+ display: "flex",
100
+ alignItems: "center",
101
+ justifyContent: "space-between",
102
+ width: "100%",
103
+ padding: "12px 8px",
104
+ borderRadius: "8px",
105
+ transition: "background-color 0.15s ease-in-out",
106
+ minHeight: "16px",
107
+ gap: "12px"
108
+ },
109
+ headerContentHover: {
110
+ backgroundColor: "#f8f8f8"
111
+ },
112
+ headerContentFocus: {
113
+ outline: "3px solid #3cad51",
114
+ outlineOffset: "-3px"
115
+ },
116
+ title: {
117
+ fontSize: "22px",
118
+ fontWeight: "600",
119
+ color: "#2f2f2f",
120
+ lineHeight: "1.25",
121
+ margin: 0,
122
+ flex: 1,
123
+ whiteSpace: "nowrap"
124
+ },
125
+ iconWrapper: {
126
+ display: "flex",
127
+ alignItems: "center",
128
+ justifyContent: "center",
129
+ width: "16px",
130
+ height: "16px",
131
+ flexShrink: 0
132
+ },
133
+ content: {
134
+ overflow: "hidden",
135
+ transition: "max-height 0.3s ease-in-out, opacity 0.2s ease-in-out"
136
+ },
137
+ contentExpanded: {
138
+ maxHeight: "5000px",
139
+ opacity: 1
140
+ },
141
+ contentCollapsed: {
142
+ maxHeight: "0px",
143
+ opacity: 0
144
+ },
145
+ contentInner: {
146
+ // Content area styling - children go here
147
+ }
148
+ };
149
+ var SectionHeadingInteractive = React.forwardRef(
150
+ ({
151
+ title,
152
+ children,
153
+ expanded: controlledExpanded,
154
+ defaultExpanded = true,
155
+ onExpandedChange,
156
+ className,
157
+ style,
158
+ ...props
159
+ }, ref) => {
160
+ const [internalExpanded, setInternalExpanded] = React.useState(defaultExpanded);
161
+ const isControlled = controlledExpanded !== void 0;
162
+ const isExpanded = isControlled ? controlledExpanded : internalExpanded;
163
+ const [isHovered, setIsHovered] = React.useState(false);
164
+ const [isFocused, setIsFocused] = React.useState(false);
165
+ const handleToggle = () => {
166
+ const newExpanded = !isExpanded;
167
+ if (!isControlled) {
168
+ setInternalExpanded(newExpanded);
169
+ }
170
+ onExpandedChange?.(newExpanded);
171
+ };
172
+ const handleKeyDown = (event) => {
173
+ if (event.key === "Enter" || event.key === " ") {
174
+ event.preventDefault();
175
+ handleToggle();
176
+ }
177
+ };
178
+ const headerContainerStyle = isExpanded ? sectionHeadingInteractiveStyles.headerContainerExpanded : sectionHeadingInteractiveStyles.headerContainerCollapsed;
179
+ const headerContentStyle = {
180
+ ...sectionHeadingInteractiveStyles.headerContent,
181
+ ...isHovered && sectionHeadingInteractiveStyles.headerContentHover,
182
+ ...isFocused && sectionHeadingInteractiveStyles.headerContentFocus
183
+ };
184
+ const contentStyle = {
185
+ ...sectionHeadingInteractiveStyles.content,
186
+ ...isExpanded ? sectionHeadingInteractiveStyles.contentExpanded : sectionHeadingInteractiveStyles.contentCollapsed
187
+ };
188
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
189
+ "div",
190
+ {
191
+ ref,
192
+ className: (0, import_clsx.clsx)("arbor-section-heading-interactive", className),
193
+ style: { ...sectionHeadingInteractiveStyles.container, ...style },
194
+ ...props,
195
+ children: [
196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: headerContainerStyle, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
197
+ "button",
198
+ {
199
+ type: "button",
200
+ style: sectionHeadingInteractiveStyles.header,
201
+ onClick: handleToggle,
202
+ onMouseEnter: () => setIsHovered(true),
203
+ onMouseLeave: () => setIsHovered(false),
204
+ onFocus: () => setIsFocused(true),
205
+ onBlur: () => setIsFocused(false),
206
+ onKeyDown: handleKeyDown,
207
+ "aria-expanded": isExpanded,
208
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: headerContentStyle, children: [
209
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { style: sectionHeadingInteractiveStyles.title, children: title }),
210
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: sectionHeadingInteractiveStyles.iconWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChevronIcon, { expanded: isExpanded }) })
211
+ ] })
212
+ }
213
+ ) }),
214
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: contentStyle, "aria-hidden": !isExpanded, children: children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: sectionHeadingInteractiveStyles.contentInner, children }) })
215
+ ]
216
+ }
217
+ );
218
+ }
219
+ );
220
+ SectionHeadingInteractive.displayName = "SectionHeadingInteractive";
221
+ // Annotate the CommonJS export names for ESM import in node:
222
+ 0 && (module.exports = {
223
+ SectionHeadingInteractive
224
+ });
225
+ //# sourceMappingURL=SectionHeadingInteractive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SectionHeadingInteractive/index.ts","../src/SectionHeadingInteractive/SectionHeadingInteractive.tsx"],"sourcesContent":["export { SectionHeadingInteractive } from './SectionHeadingInteractive';\nexport type { SectionHeadingInteractiveProps } from './SectionHeadingInteractive';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface SectionHeadingInteractiveProps {\n /**\n * The heading text (required)\n */\n title: string;\n /**\n * Content to display when expanded (sub-sections, list rows, etc.)\n */\n children?: React.ReactNode;\n /**\n * Whether the section is expanded (controlled mode)\n */\n expanded?: boolean;\n /**\n * Default expanded state (uncontrolled mode)\n * @default true\n */\n defaultExpanded?: boolean;\n /**\n * Callback when expanded state changes\n */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Additional inline styles\n */\n style?: React.CSSProperties;\n}\n\n// Chevron icon - rotates based on expanded state\nconst ChevronIcon = ({ expanded }: { expanded: boolean }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease-in-out',\n }}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Arbor Design System section heading interactive styles\nconst sectionHeadingInteractiveStyles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n width: '100%',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n boxSizing: 'border-box' as const,\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n margin: 0,\n textAlign: 'left' as const,\n outline: 'none',\n },\n // When collapsed, no bottom border\n headerContainerCollapsed: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n },\n // When expanded, has bottom border\n headerContainerExpanded: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n borderBottom: '1px solid #f8f8f8',\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '12px 8px',\n borderRadius: '8px',\n transition: 'background-color 0.15s ease-in-out',\n minHeight: '16px',\n gap: '12px',\n },\n headerContentHover: {\n backgroundColor: '#f8f8f8',\n },\n headerContentFocus: {\n outline: '3px solid #3cad51',\n outlineOffset: '-3px',\n },\n title: {\n fontSize: '22px',\n fontWeight: '600',\n color: '#2f2f2f',\n lineHeight: '1.25',\n margin: 0,\n flex: 1,\n whiteSpace: 'nowrap' as const,\n },\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n flexShrink: 0,\n },\n content: {\n overflow: 'hidden',\n transition: 'max-height 0.3s ease-in-out, opacity 0.2s ease-in-out',\n },\n contentExpanded: {\n maxHeight: '5000px',\n opacity: 1,\n },\n contentCollapsed: {\n maxHeight: '0px',\n opacity: 0,\n },\n contentInner: {\n // Content area styling - children go here\n },\n};\n\n/**\n * SectionHeadingInteractive component - Arbor Design System\n *\n * A collapsible section heading component that can contain sub-sections,\n * list rows, and other content. Click the header to expand/collapse.\n * Uses h2 heading style (22px) for main section level.\n *\n * @example\n * ```tsx\n * // Basic collapsible section\n * <SectionHeadingInteractive title=\"Personal Information\">\n * <SubSectionInteractive title=\"Contact Details\">\n * <ListRow label=\"Email\" value=\"john@example.com\" />\n * </SubSectionInteractive>\n * </SectionHeadingInteractive>\n *\n * // Initially collapsed\n * <SectionHeadingInteractive title=\"Additional Settings\" defaultExpanded={false}>\n * <ListRow label=\"Theme\" value=\"Dark\" />\n * </SectionHeadingInteractive>\n *\n * // Controlled mode\n * <SectionHeadingInteractive\n * title=\"Account\"\n * expanded={isExpanded}\n * onExpandedChange={setIsExpanded}\n * >\n * <ListRow label=\"Status\" value=\"Active\" />\n * </SectionHeadingInteractive>\n * ```\n */\nexport const SectionHeadingInteractive = React.forwardRef<HTMLDivElement, SectionHeadingInteractiveProps>(\n (\n {\n title,\n children,\n expanded: controlledExpanded,\n defaultExpanded = true,\n onExpandedChange,\n className,\n style,\n ...props\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [internalExpanded, setInternalExpanded] = React.useState(defaultExpanded);\n const isControlled = controlledExpanded !== undefined;\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n\n const handleToggle = () => {\n const newExpanded = !isExpanded;\n if (!isControlled) {\n setInternalExpanded(newExpanded);\n }\n onExpandedChange?.(newExpanded);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleToggle();\n }\n };\n\n const headerContainerStyle: React.CSSProperties = isExpanded\n ? sectionHeadingInteractiveStyles.headerContainerExpanded\n : sectionHeadingInteractiveStyles.headerContainerCollapsed;\n\n const headerContentStyle: React.CSSProperties = {\n ...sectionHeadingInteractiveStyles.headerContent,\n ...(isHovered && sectionHeadingInteractiveStyles.headerContentHover),\n ...(isFocused && sectionHeadingInteractiveStyles.headerContentFocus),\n };\n\n const contentStyle: React.CSSProperties = {\n ...sectionHeadingInteractiveStyles.content,\n ...(isExpanded\n ? sectionHeadingInteractiveStyles.contentExpanded\n : sectionHeadingInteractiveStyles.contentCollapsed),\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-section-heading-interactive', className)}\n style={{ ...sectionHeadingInteractiveStyles.container, ...style }}\n {...props}\n >\n <div style={headerContainerStyle}>\n <button\n type=\"button\"\n style={sectionHeadingInteractiveStyles.header}\n onClick={handleToggle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n aria-expanded={isExpanded}\n >\n <div style={headerContentStyle}>\n <h2 style={sectionHeadingInteractiveStyles.title}>{title}</h2>\n <span style={sectionHeadingInteractiveStyles.iconWrapper}>\n <ChevronIcon expanded={isExpanded} />\n </span>\n </div>\n </button>\n </div>\n <div style={contentStyle} aria-hidden={!isExpanded}>\n {children && (\n <div style={sectionHeadingInteractiveStyles.contentInner}>{children}</div>\n )}\n </div>\n </div>\n );\n }\n);\n\nSectionHeadingInteractive.displayName = 'SectionHeadingInteractive';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,7 @@
1
+ import {
2
+ SectionHeadingInteractive
3
+ } from "./chunk-RL4G7MR3.mjs";
4
+ export {
5
+ SectionHeadingInteractive
6
+ };
7
+ //# sourceMappingURL=SectionHeadingInteractive.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+
3
+ type SectionIconVariant = 'warning' | 'danger' | 'info' | 'success';
4
+ interface SectionIconProps {
5
+ /**
6
+ * The variant/style of the section icon
7
+ * @default 'info'
8
+ */
9
+ variant?: SectionIconVariant;
10
+ /**
11
+ * Additional CSS class name
12
+ */
13
+ className?: string;
14
+ /**
15
+ * Additional inline styles
16
+ */
17
+ style?: React.CSSProperties;
18
+ }
19
+ /**
20
+ * SectionIcon component - Arbor Design System
21
+ *
22
+ * A small badge-like icon used in section headings to indicate status or alerts.
23
+ * Available in 4 variants: warning (orange), danger (red), info (blue), success (green).
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <SectionIcon variant="warning" />
28
+ * <SectionIcon variant="danger" />
29
+ * <SectionIcon variant="info" />
30
+ * <SectionIcon variant="success" />
31
+ * ```
32
+ */
33
+ declare const SectionIcon: React.ForwardRefExoticComponent<SectionIconProps & React.RefAttributes<HTMLDivElement>>;
34
+
35
+ export { SectionIcon, type SectionIconProps, type SectionIconVariant };
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+
3
+ type SectionIconVariant = 'warning' | 'danger' | 'info' | 'success';
4
+ interface SectionIconProps {
5
+ /**
6
+ * The variant/style of the section icon
7
+ * @default 'info'
8
+ */
9
+ variant?: SectionIconVariant;
10
+ /**
11
+ * Additional CSS class name
12
+ */
13
+ className?: string;
14
+ /**
15
+ * Additional inline styles
16
+ */
17
+ style?: React.CSSProperties;
18
+ }
19
+ /**
20
+ * SectionIcon component - Arbor Design System
21
+ *
22
+ * A small badge-like icon used in section headings to indicate status or alerts.
23
+ * Available in 4 variants: warning (orange), danger (red), info (blue), success (green).
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <SectionIcon variant="warning" />
28
+ * <SectionIcon variant="danger" />
29
+ * <SectionIcon variant="info" />
30
+ * <SectionIcon variant="success" />
31
+ * ```
32
+ */
33
+ declare const SectionIcon: React.ForwardRefExoticComponent<SectionIconProps & React.RefAttributes<HTMLDivElement>>;
34
+
35
+ export { SectionIcon, type SectionIconProps, type SectionIconVariant };
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/SectionIcon/index.ts
31
+ var SectionIcon_exports = {};
32
+ __export(SectionIcon_exports, {
33
+ SectionIcon: () => SectionIcon
34
+ });
35
+ module.exports = __toCommonJS(SectionIcon_exports);
36
+
37
+ // src/SectionIcon/SectionIcon.tsx
38
+ var React = __toESM(require("react"));
39
+ var import_clsx = require("clsx");
40
+ var import_jsx_runtime = require("react/jsx-runtime");
41
+ var WarningIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "14", height: "12", viewBox: "0 0 14 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
42
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
43
+ "path",
44
+ {
45
+ d: "M7 0.5L13.5 11.5H0.5L7 0.5Z",
46
+ stroke: color,
47
+ strokeWidth: "1.2",
48
+ strokeLinejoin: "round",
49
+ fill: "none"
50
+ }
51
+ ),
52
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53
+ "path",
54
+ {
55
+ d: "M7 4.5V7",
56
+ stroke: color,
57
+ strokeWidth: "1.2",
58
+ strokeLinecap: "round"
59
+ }
60
+ ),
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "7", cy: "9", r: "0.75", fill: color })
62
+ ] });
63
+ var InfoIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "7", cy: "7", r: "6", stroke: color, strokeWidth: "1.2", fill: "none" }),
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M7 6V10", stroke: color, strokeWidth: "1.2", strokeLinecap: "round" }),
66
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "7", cy: "4", r: "0.75", fill: color })
67
+ ] });
68
+ var SuccessIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "7", cy: "7", r: "6", stroke: color, strokeWidth: "1.2", fill: "none" }),
70
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M4 7L6 9L10 5", stroke: color, strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" })
71
+ ] });
72
+ var variantConfig = {
73
+ warning: {
74
+ backgroundColor: "#fffaf5",
75
+ iconColor: "#e4720d"
76
+ },
77
+ danger: {
78
+ backgroundColor: "#fff5f5",
79
+ iconColor: "#c93232"
80
+ },
81
+ info: {
82
+ backgroundColor: "#f5fbff",
83
+ iconColor: "#2c8bca"
84
+ },
85
+ success: {
86
+ backgroundColor: "#f5fff8",
87
+ iconColor: "#16a33d"
88
+ }
89
+ };
90
+ var sectionIconStyles = {
91
+ container: {
92
+ display: "inline-flex",
93
+ alignItems: "center",
94
+ justifyContent: "center",
95
+ padding: "4px",
96
+ borderRadius: "99px"
97
+ },
98
+ iconWrapper: {
99
+ display: "flex",
100
+ alignItems: "center",
101
+ justifyContent: "center",
102
+ width: "16px",
103
+ height: "16px"
104
+ }
105
+ };
106
+ var SectionIcon = React.forwardRef(
107
+ ({ variant = "info", className, style, ...props }, ref) => {
108
+ const config = variantConfig[variant];
109
+ const renderIcon = () => {
110
+ switch (variant) {
111
+ case "warning":
112
+ case "danger":
113
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WarningIcon, { color: config.iconColor });
114
+ case "success":
115
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SuccessIcon, { color: config.iconColor });
116
+ case "info":
117
+ default:
118
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InfoIcon, { color: config.iconColor });
119
+ }
120
+ };
121
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
122
+ "div",
123
+ {
124
+ ref,
125
+ className: (0, import_clsx.clsx)("arbor-section-icon", className),
126
+ style: {
127
+ ...sectionIconStyles.container,
128
+ backgroundColor: config.backgroundColor,
129
+ ...style
130
+ },
131
+ ...props,
132
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: sectionIconStyles.iconWrapper, children: renderIcon() })
133
+ }
134
+ );
135
+ }
136
+ );
137
+ SectionIcon.displayName = "SectionIcon";
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ SectionIcon
141
+ });
142
+ //# sourceMappingURL=SectionIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SectionIcon/index.ts","../src/SectionIcon/SectionIcon.tsx"],"sourcesContent":["export { SectionIcon } from './SectionIcon';\nexport type { SectionIconProps, SectionIconVariant } from './SectionIcon';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type SectionIconVariant = 'warning' | 'danger' | 'info' | 'success';\n\nexport interface SectionIconProps {\n /**\n * The variant/style of the section icon\n * @default 'info'\n */\n variant?: SectionIconVariant;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Additional inline styles\n */\n style?: React.CSSProperties;\n}\n\n// Warning triangle icon\nconst WarningIcon = ({ color }: { color: string }) => (\n <svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7 0.5L13.5 11.5H0.5L7 0.5Z\"\n stroke={color}\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n <path\n d=\"M7 4.5V7\"\n stroke={color}\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"7\" cy=\"9\" r=\"0.75\" fill={color} />\n </svg>\n);\n\n// Info circle icon\nconst InfoIcon = ({ color }: { color: string }) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke={color} strokeWidth=\"1.2\" fill=\"none\" />\n <path d=\"M7 6V10\" stroke={color} strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"4\" r=\"0.75\" fill={color} />\n </svg>\n);\n\n// Success checkmark icon\nconst SuccessIcon = ({ color }: { color: string }) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke={color} strokeWidth=\"1.2\" fill=\"none\" />\n <path d=\"M4 7L6 9L10 5\" stroke={color} strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n// Variant configurations\nconst variantConfig: Record<SectionIconVariant, { backgroundColor: string; iconColor: string }> = {\n warning: {\n backgroundColor: '#fffaf5',\n iconColor: '#e4720d',\n },\n danger: {\n backgroundColor: '#fff5f5',\n iconColor: '#c93232',\n },\n info: {\n backgroundColor: '#f5fbff',\n iconColor: '#2c8bca',\n },\n success: {\n backgroundColor: '#f5fff8',\n iconColor: '#16a33d',\n },\n};\n\n// Arbor Design System section icon styles\nconst sectionIconStyles = {\n container: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n borderRadius: '99px',\n },\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n },\n};\n\n/**\n * SectionIcon component - Arbor Design System\n *\n * A small badge-like icon used in section headings to indicate status or alerts.\n * Available in 4 variants: warning (orange), danger (red), info (blue), success (green).\n *\n * @example\n * ```tsx\n * <SectionIcon variant=\"warning\" />\n * <SectionIcon variant=\"danger\" />\n * <SectionIcon variant=\"info\" />\n * <SectionIcon variant=\"success\" />\n * ```\n */\nexport const SectionIcon = React.forwardRef<HTMLDivElement, SectionIconProps>(\n ({ variant = 'info', className, style, ...props }, ref) => {\n const config = variantConfig[variant];\n\n const renderIcon = () => {\n switch (variant) {\n case 'warning':\n case 'danger':\n return <WarningIcon color={config.iconColor} />;\n case 'success':\n return <SuccessIcon color={config.iconColor} />;\n case 'info':\n default:\n return <InfoIcon color={config.iconColor} />;\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-section-icon', className)}\n style={{\n ...sectionIconStyles.container,\n backgroundColor: config.backgroundColor,\n ...style,\n }}\n {...props}\n >\n <div style={sectionIconStyles.iconWrapper}>\n {renderIcon()}\n </div>\n </div>\n );\n }\n);\n\nSectionIcon.displayName = 'SectionIcon';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,7 @@
1
+ import {
2
+ SectionIcon
3
+ } from "./chunk-7NYBJKJS.mjs";
4
+ export {
5
+ SectionIcon
6
+ };
7
+ //# sourceMappingURL=SectionIcon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}