@tonyarbor/components 0.2.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Avatar.d.mts +42 -0
- package/dist/Avatar.d.ts +42 -0
- package/dist/Avatar.js +158 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/Avatar.mjs +7 -0
- package/dist/Avatar.mjs.map +1 -0
- package/dist/Breadcrumbs.d.mts +51 -0
- package/dist/Breadcrumbs.d.ts +51 -0
- package/dist/Breadcrumbs.js +276 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.mjs +7 -0
- package/dist/Breadcrumbs.mjs.map +1 -0
- package/dist/ButtonSegmented.d.mts +61 -0
- package/dist/ButtonSegmented.d.ts +61 -0
- package/dist/ButtonSegmented.js +167 -0
- package/dist/ButtonSegmented.js.map +1 -0
- package/dist/ButtonSegmented.mjs +7 -0
- package/dist/ButtonSegmented.mjs.map +1 -0
- package/dist/ListRow.d.mts +72 -0
- package/dist/ListRow.d.ts +72 -0
- package/dist/ListRow.js +194 -0
- package/dist/ListRow.js.map +1 -0
- package/dist/ListRow.mjs +7 -0
- package/dist/ListRow.mjs.map +1 -0
- package/dist/ListRowMultiLine.d.mts +56 -0
- package/dist/ListRowMultiLine.d.ts +56 -0
- package/dist/ListRowMultiLine.js +182 -0
- package/dist/ListRowMultiLine.js.map +1 -0
- package/dist/ListRowMultiLine.mjs +7 -0
- package/dist/ListRowMultiLine.mjs.map +1 -0
- package/dist/Logo.d.mts +39 -0
- package/dist/Logo.d.ts +39 -0
- package/dist/Logo.js +119 -0
- package/dist/Logo.js.map +1 -0
- package/dist/Logo.mjs +7 -0
- package/dist/Logo.mjs.map +1 -0
- package/dist/SearchGlobal.d.mts +45 -0
- package/dist/SearchGlobal.d.ts +45 -0
- package/dist/SearchGlobal.js +209 -0
- package/dist/SearchGlobal.js.map +1 -0
- package/dist/SearchGlobal.mjs +7 -0
- package/dist/SearchGlobal.mjs.map +1 -0
- package/dist/SearchOnPage.d.mts +45 -0
- package/dist/SearchOnPage.d.ts +45 -0
- package/dist/SearchOnPage.js +171 -0
- package/dist/SearchOnPage.js.map +1 -0
- package/dist/SearchOnPage.mjs +7 -0
- package/dist/SearchOnPage.mjs.map +1 -0
- package/dist/Section.d.mts +57 -0
- package/dist/Section.d.ts +57 -0
- package/dist/Section.js +72 -0
- package/dist/Section.js.map +1 -0
- package/dist/Section.mjs +7 -0
- package/dist/Section.mjs.map +1 -0
- package/dist/SectionHeading.d.mts +111 -0
- package/dist/SectionHeading.d.ts +111 -0
- package/dist/SectionHeading.js +385 -0
- package/dist/SectionHeading.js.map +1 -0
- package/dist/SectionHeading.mjs +8 -0
- package/dist/SectionHeading.mjs.map +1 -0
- package/dist/SectionHeadingInteractive.d.mts +67 -0
- package/dist/SectionHeadingInteractive.d.ts +67 -0
- package/dist/SectionHeadingInteractive.js +225 -0
- package/dist/SectionHeadingInteractive.js.map +1 -0
- package/dist/SectionHeadingInteractive.mjs +7 -0
- package/dist/SectionHeadingInteractive.mjs.map +1 -0
- package/dist/SectionIcon.d.mts +35 -0
- package/dist/SectionIcon.d.ts +35 -0
- package/dist/SectionIcon.js +142 -0
- package/dist/SectionIcon.js.map +1 -0
- package/dist/SectionIcon.mjs +7 -0
- package/dist/SectionIcon.mjs.map +1 -0
- package/dist/SubSectionHeading.d.mts +75 -0
- package/dist/SubSectionHeading.d.ts +75 -0
- package/dist/SubSectionHeading.js +225 -0
- package/dist/SubSectionHeading.js.map +1 -0
- package/dist/SubSectionHeading.mjs +7 -0
- package/dist/SubSectionHeading.mjs.map +1 -0
- package/dist/SubSectionInteractive.d.mts +65 -0
- package/dist/SubSectionInteractive.d.ts +65 -0
- package/dist/SubSectionInteractive.js +211 -0
- package/dist/SubSectionInteractive.js.map +1 -0
- package/dist/SubSectionInteractive.mjs +7 -0
- package/dist/SubSectionInteractive.mjs.map +1 -0
- package/dist/chunk-7NYBJKJS.mjs +106 -0
- package/dist/chunk-7NYBJKJS.mjs.map +1 -0
- package/dist/chunk-ALLCJATI.mjs +189 -0
- package/dist/chunk-ALLCJATI.mjs.map +1 -0
- package/dist/chunk-B7RX3TPX.mjs +135 -0
- package/dist/chunk-B7RX3TPX.mjs.map +1 -0
- package/dist/chunk-F6JVEIWC.mjs +158 -0
- package/dist/chunk-F6JVEIWC.mjs.map +1 -0
- package/dist/chunk-GHATS25Y.mjs +249 -0
- package/dist/chunk-GHATS25Y.mjs.map +1 -0
- package/dist/chunk-ILLGBZ6R.mjs +131 -0
- package/dist/chunk-ILLGBZ6R.mjs.map +1 -0
- package/dist/chunk-JSG27ZZS.mjs +122 -0
- package/dist/chunk-JSG27ZZS.mjs.map +1 -0
- package/dist/chunk-NNYU4DPD.mjs +83 -0
- package/dist/chunk-NNYU4DPD.mjs.map +1 -0
- package/dist/chunk-ODKT7LGV.mjs +146 -0
- package/dist/chunk-ODKT7LGV.mjs.map +1 -0
- package/dist/chunk-RL4G7MR3.mjs +189 -0
- package/dist/chunk-RL4G7MR3.mjs.map +1 -0
- package/dist/chunk-RQP6ZGD7.mjs +240 -0
- package/dist/chunk-RQP6ZGD7.mjs.map +1 -0
- package/dist/chunk-UPBHDBAK.mjs +173 -0
- package/dist/chunk-UPBHDBAK.mjs.map +1 -0
- package/dist/chunk-X2CW5GF3.mjs +175 -0
- package/dist/chunk-X2CW5GF3.mjs.map +1 -0
- package/dist/chunk-YJ36ZZJQ.mjs +36 -0
- package/dist/chunk-YJ36ZZJQ.mjs.map +1 -0
- package/dist/index.d.mts +14 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +2102 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +56 -0
- package/package.json +71 -1
|
@@ -0,0 +1,171 @@
|
|
|
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/SearchOnPage/index.ts
|
|
31
|
+
var SearchOnPage_exports = {};
|
|
32
|
+
__export(SearchOnPage_exports, {
|
|
33
|
+
SearchOnPage: () => SearchOnPage
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(SearchOnPage_exports);
|
|
36
|
+
|
|
37
|
+
// src/SearchOnPage/SearchOnPage.tsx
|
|
38
|
+
var React = __toESM(require("react"));
|
|
39
|
+
var import_lucide_react = require("lucide-react");
|
|
40
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
41
|
+
var SearchOnPage = React.forwardRef(
|
|
42
|
+
({
|
|
43
|
+
value = "",
|
|
44
|
+
onChange,
|
|
45
|
+
onSubmit,
|
|
46
|
+
onClear,
|
|
47
|
+
placeholder = "Search Reports",
|
|
48
|
+
className,
|
|
49
|
+
style,
|
|
50
|
+
"data-testid": dataTestId
|
|
51
|
+
}, ref) => {
|
|
52
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
53
|
+
const [isHovered, setIsHovered] = React.useState(false);
|
|
54
|
+
const inputRef = React.useRef(null);
|
|
55
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
56
|
+
const handleFocus = () => {
|
|
57
|
+
setIsFocused(true);
|
|
58
|
+
};
|
|
59
|
+
const handleBlur = () => {
|
|
60
|
+
setIsFocused(false);
|
|
61
|
+
};
|
|
62
|
+
const handleChange = (e) => {
|
|
63
|
+
onChange?.(e.target.value);
|
|
64
|
+
};
|
|
65
|
+
const handleKeyDown = (e) => {
|
|
66
|
+
if (e.key === "Enter") {
|
|
67
|
+
onSubmit?.(value);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const handleClear = () => {
|
|
71
|
+
onChange?.("");
|
|
72
|
+
onClear?.();
|
|
73
|
+
inputRef.current?.focus();
|
|
74
|
+
};
|
|
75
|
+
const containerStyles = {
|
|
76
|
+
position: "relative",
|
|
77
|
+
width: "200px",
|
|
78
|
+
height: "32px",
|
|
79
|
+
backgroundColor: isFocused ? "#ffffff" : isHovered ? "#efefef" : "#ffffff",
|
|
80
|
+
borderRadius: "16px",
|
|
81
|
+
padding: "8px 16px",
|
|
82
|
+
display: "flex",
|
|
83
|
+
alignItems: "center",
|
|
84
|
+
gap: "8px",
|
|
85
|
+
cursor: "text",
|
|
86
|
+
transition: "all 0.2s ease-in-out",
|
|
87
|
+
boxSizing: "border-box",
|
|
88
|
+
border: isFocused ? "1px solid #efefef" : "none",
|
|
89
|
+
boxShadow: isFocused ? "0px 0px 0px 3px #3cad51" : "none",
|
|
90
|
+
...style
|
|
91
|
+
};
|
|
92
|
+
const iconContainerStyles = {
|
|
93
|
+
display: "flex",
|
|
94
|
+
alignItems: "center",
|
|
95
|
+
justifyContent: "center",
|
|
96
|
+
flexShrink: 0,
|
|
97
|
+
padding: "2px"
|
|
98
|
+
};
|
|
99
|
+
const inputStyles = {
|
|
100
|
+
border: "none",
|
|
101
|
+
outline: "none",
|
|
102
|
+
backgroundColor: "transparent",
|
|
103
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
104
|
+
fontSize: "13px",
|
|
105
|
+
fontWeight: 400,
|
|
106
|
+
color: "#2f2f2f",
|
|
107
|
+
lineHeight: "1.5",
|
|
108
|
+
flex: 1,
|
|
109
|
+
width: "100%",
|
|
110
|
+
minWidth: 0
|
|
111
|
+
};
|
|
112
|
+
const clearButtonStyles = {
|
|
113
|
+
display: "flex",
|
|
114
|
+
alignItems: "center",
|
|
115
|
+
justifyContent: "center",
|
|
116
|
+
flexShrink: 0,
|
|
117
|
+
width: "16px",
|
|
118
|
+
height: "16px",
|
|
119
|
+
cursor: "pointer",
|
|
120
|
+
border: "none",
|
|
121
|
+
background: "none",
|
|
122
|
+
padding: 0
|
|
123
|
+
};
|
|
124
|
+
const showClearButton = isFocused && value.length > 0;
|
|
125
|
+
const iconColor = isFocused || isHovered ? "#2f2f2f" : "#595959";
|
|
126
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
className,
|
|
130
|
+
style: containerStyles,
|
|
131
|
+
onMouseEnter: () => setIsHovered(true),
|
|
132
|
+
onMouseLeave: () => setIsHovered(false),
|
|
133
|
+
onClick: () => inputRef.current?.focus(),
|
|
134
|
+
"data-testid": dataTestId,
|
|
135
|
+
children: [
|
|
136
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: iconContainerStyles, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Search, { size: 12, color: iconColor, strokeWidth: 2 }) }),
|
|
137
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
138
|
+
"input",
|
|
139
|
+
{
|
|
140
|
+
ref: inputRef,
|
|
141
|
+
type: "text",
|
|
142
|
+
value,
|
|
143
|
+
onChange: handleChange,
|
|
144
|
+
onFocus: handleFocus,
|
|
145
|
+
onBlur: handleBlur,
|
|
146
|
+
onKeyDown: handleKeyDown,
|
|
147
|
+
placeholder: isFocused ? "" : placeholder,
|
|
148
|
+
style: inputStyles
|
|
149
|
+
}
|
|
150
|
+
),
|
|
151
|
+
showClearButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
152
|
+
"button",
|
|
153
|
+
{
|
|
154
|
+
type: "button",
|
|
155
|
+
onClick: handleClear,
|
|
156
|
+
style: clearButtonStyles,
|
|
157
|
+
"aria-label": "Clear search",
|
|
158
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { size: 13.333, color: "#2f2f2f", strokeWidth: 2 })
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
SearchOnPage.displayName = "SearchOnPage";
|
|
167
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
168
|
+
0 && (module.exports = {
|
|
169
|
+
SearchOnPage
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=SearchOnPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/SearchOnPage/index.ts","../src/SearchOnPage/SearchOnPage.tsx"],"sourcesContent":["export { SearchOnPage } from './SearchOnPage';\nexport type { SearchOnPageProps } from './SearchOnPage';\n","import * as React from 'react';\nimport { Search, X } from 'lucide-react';\n\nexport interface SearchOnPageProps {\n /**\n * Value of the search input\n */\n value?: string;\n /**\n * Callback when value changes\n */\n onChange?: (value: string) => void;\n /**\n * Callback when search is submitted\n */\n onSubmit?: (value: string) => void;\n /**\n * Callback when clear button is clicked\n */\n onClear?: () => void;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n /**\n * Test ID for testing\n */\n 'data-testid'?: string;\n}\n\n/**\n * SearchOnPage component - Arbor Design System\n *\n * A search input with fixed 200px width for filtering content on the current page.\n * Shows green focus ring when active and X button to clear.\n */\nexport const SearchOnPage = React.forwardRef<HTMLInputElement, SearchOnPageProps>(\n (\n {\n value = '',\n onChange,\n onSubmit,\n onClear,\n placeholder = 'Search Reports',\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Merge refs\n React.useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onSubmit?.(value);\n }\n };\n\n const handleClear = () => {\n onChange?.('');\n onClear?.();\n inputRef.current?.focus();\n };\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n width: '200px',\n height: '32px',\n backgroundColor: isFocused ? '#ffffff' : isHovered ? '#efefef' : '#ffffff',\n borderRadius: '16px',\n padding: '8px 16px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n cursor: 'text',\n transition: 'all 0.2s ease-in-out',\n boxSizing: 'border-box',\n border: isFocused ? '1px solid #efefef' : 'none',\n boxShadow: isFocused ? '0px 0px 0px 3px #3cad51' : 'none',\n ...style,\n };\n\n const iconContainerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n padding: '2px',\n };\n\n const inputStyles: React.CSSProperties = {\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontSize: '13px',\n fontWeight: 400,\n color: '#2f2f2f',\n lineHeight: '1.5',\n flex: 1,\n width: '100%',\n minWidth: 0,\n };\n\n const clearButtonStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '16px',\n height: '16px',\n cursor: 'pointer',\n border: 'none',\n background: 'none',\n padding: 0,\n };\n\n const showClearButton = isFocused && value.length > 0;\n const iconColor = isFocused || isHovered ? '#2f2f2f' : '#595959';\n\n return (\n <div\n className={className}\n style={containerStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => inputRef.current?.focus()}\n data-testid={dataTestId}\n >\n <div style={iconContainerStyles}>\n <Search size={12} color={iconColor} strokeWidth={2} />\n </div>\n\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={isFocused ? '' : placeholder}\n style={inputStyles}\n />\n\n {showClearButton && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={clearButtonStyles}\n aria-label=\"Clear search\"\n >\n <X size={13.333} color=\"#2f2f2f\" strokeWidth={2} />\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchOnPage.displayName = 'SearchOnPage';\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SectionProps {
|
|
4
|
+
/**
|
|
5
|
+
* Content to display inside the section
|
|
6
|
+
*/
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Additional CSS class name
|
|
10
|
+
*/
|
|
11
|
+
className?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Additional inline styles
|
|
14
|
+
*/
|
|
15
|
+
style?: React.CSSProperties;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Section component - Arbor Design System
|
|
19
|
+
*
|
|
20
|
+
* A container component that provides consistent styling for content sections.
|
|
21
|
+
* Has 8px padding, 8px border radius, and white background.
|
|
22
|
+
* Used to wrap SectionHeadings, SubSectionHeadings, ListRows, and other content.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* // Basic section with heading and list rows
|
|
27
|
+
* <Section>
|
|
28
|
+
* <SectionHeading title="Contact Information" />
|
|
29
|
+
* <ListRow label="Email" value="john@example.com" />
|
|
30
|
+
* <ListRow label="Phone" value="+44 123 456 7890" />
|
|
31
|
+
* </Section>
|
|
32
|
+
*
|
|
33
|
+
* // Section with interactive heading
|
|
34
|
+
* <Section>
|
|
35
|
+
* <SectionHeadingInteractive title="Personal Details">
|
|
36
|
+
* <SubSectionInteractive title="Profile">
|
|
37
|
+
* <ListRow label="Name" value="John Smith" />
|
|
38
|
+
* </SubSectionInteractive>
|
|
39
|
+
* </SectionHeadingInteractive>
|
|
40
|
+
* </Section>
|
|
41
|
+
*
|
|
42
|
+
* // Multiple sections on a page
|
|
43
|
+
* <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
44
|
+
* <Section>
|
|
45
|
+
* <SectionHeading title="Section 1" />
|
|
46
|
+
* <ListRow label="Field" value="Value" />
|
|
47
|
+
* </Section>
|
|
48
|
+
* <Section>
|
|
49
|
+
* <SectionHeading title="Section 2" />
|
|
50
|
+
* <ListRow label="Field" value="Value" />
|
|
51
|
+
* </Section>
|
|
52
|
+
* </div>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
declare const Section: React.ForwardRefExoticComponent<SectionProps & React.RefAttributes<HTMLDivElement>>;
|
|
56
|
+
|
|
57
|
+
export { Section, type SectionProps };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SectionProps {
|
|
4
|
+
/**
|
|
5
|
+
* Content to display inside the section
|
|
6
|
+
*/
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Additional CSS class name
|
|
10
|
+
*/
|
|
11
|
+
className?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Additional inline styles
|
|
14
|
+
*/
|
|
15
|
+
style?: React.CSSProperties;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Section component - Arbor Design System
|
|
19
|
+
*
|
|
20
|
+
* A container component that provides consistent styling for content sections.
|
|
21
|
+
* Has 8px padding, 8px border radius, and white background.
|
|
22
|
+
* Used to wrap SectionHeadings, SubSectionHeadings, ListRows, and other content.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* // Basic section with heading and list rows
|
|
27
|
+
* <Section>
|
|
28
|
+
* <SectionHeading title="Contact Information" />
|
|
29
|
+
* <ListRow label="Email" value="john@example.com" />
|
|
30
|
+
* <ListRow label="Phone" value="+44 123 456 7890" />
|
|
31
|
+
* </Section>
|
|
32
|
+
*
|
|
33
|
+
* // Section with interactive heading
|
|
34
|
+
* <Section>
|
|
35
|
+
* <SectionHeadingInteractive title="Personal Details">
|
|
36
|
+
* <SubSectionInteractive title="Profile">
|
|
37
|
+
* <ListRow label="Name" value="John Smith" />
|
|
38
|
+
* </SubSectionInteractive>
|
|
39
|
+
* </SectionHeadingInteractive>
|
|
40
|
+
* </Section>
|
|
41
|
+
*
|
|
42
|
+
* // Multiple sections on a page
|
|
43
|
+
* <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
44
|
+
* <Section>
|
|
45
|
+
* <SectionHeading title="Section 1" />
|
|
46
|
+
* <ListRow label="Field" value="Value" />
|
|
47
|
+
* </Section>
|
|
48
|
+
* <Section>
|
|
49
|
+
* <SectionHeading title="Section 2" />
|
|
50
|
+
* <ListRow label="Field" value="Value" />
|
|
51
|
+
* </Section>
|
|
52
|
+
* </div>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
declare const Section: React.ForwardRefExoticComponent<SectionProps & React.RefAttributes<HTMLDivElement>>;
|
|
56
|
+
|
|
57
|
+
export { Section, type SectionProps };
|
package/dist/Section.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
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/Section/index.ts
|
|
31
|
+
var Section_exports = {};
|
|
32
|
+
__export(Section_exports, {
|
|
33
|
+
Section: () => Section
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(Section_exports);
|
|
36
|
+
|
|
37
|
+
// src/Section/Section.tsx
|
|
38
|
+
var React = __toESM(require("react"));
|
|
39
|
+
var import_clsx = require("clsx");
|
|
40
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
41
|
+
var sectionStyles = {
|
|
42
|
+
container: {
|
|
43
|
+
display: "flex",
|
|
44
|
+
flexDirection: "column",
|
|
45
|
+
width: "100%",
|
|
46
|
+
padding: "8px",
|
|
47
|
+
borderRadius: "8px",
|
|
48
|
+
backgroundColor: "#ffffff",
|
|
49
|
+
boxSizing: "border-box",
|
|
50
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var Section = React.forwardRef(
|
|
54
|
+
({ children, className, style, ...props }, ref) => {
|
|
55
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
ref,
|
|
59
|
+
className: (0, import_clsx.clsx)("arbor-section", className),
|
|
60
|
+
style: { ...sectionStyles.container, ...style },
|
|
61
|
+
...props,
|
|
62
|
+
children
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
Section.displayName = "Section";
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
Section
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=Section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Section/index.ts","../src/Section/Section.tsx"],"sourcesContent":["export { Section } from './Section';\nexport type { SectionProps } from './Section';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface SectionProps {\n /**\n * Content to display inside the section\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 section container styles\nconst sectionStyles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n width: '100%',\n padding: '8px',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n boxSizing: 'border-box' as const,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n },\n};\n\n/**\n * Section component - Arbor Design System\n *\n * A container component that provides consistent styling for content sections.\n * Has 8px padding, 8px border radius, and white background.\n * Used to wrap SectionHeadings, SubSectionHeadings, ListRows, and other content.\n *\n * @example\n * ```tsx\n * // Basic section with heading and list rows\n * <Section>\n * <SectionHeading title=\"Contact Information\" />\n * <ListRow label=\"Email\" value=\"john@example.com\" />\n * <ListRow label=\"Phone\" value=\"+44 123 456 7890\" />\n * </Section>\n *\n * // Section with interactive heading\n * <Section>\n * <SectionHeadingInteractive title=\"Personal Details\">\n * <SubSectionInteractive title=\"Profile\">\n * <ListRow label=\"Name\" value=\"John Smith\" />\n * </SubSectionInteractive>\n * </SectionHeadingInteractive>\n * </Section>\n *\n * // Multiple sections on a page\n * <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n * <Section>\n * <SectionHeading title=\"Section 1\" />\n * <ListRow label=\"Field\" value=\"Value\" />\n * </Section>\n * <Section>\n * <SectionHeading title=\"Section 2\" />\n * <ListRow label=\"Field\" value=\"Value\" />\n * </Section>\n * </div>\n * ```\n */\nexport const Section = React.forwardRef<HTMLDivElement, SectionProps>(\n ({ children, className, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('arbor-section', className)}\n style={{ ...sectionStyles.container, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSection.displayName = 'Section';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AACvB,kBAAqB;AAwEf;AAtDN,IAAM,gBAAgB;AAAA,EACpB,WAAW;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,OAAO;AAAA,IACP,SAAS;AAAA,IACT,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;AAwCO,IAAM,UAAgB;AAAA,EAC3B,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,MAAM,GAAG,QAAQ;AACjD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAW,kBAAK,iBAAiB,SAAS;AAAA,QAC1C,OAAO,EAAE,GAAG,cAAc,WAAW,GAAG,MAAM;AAAA,QAC7C,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,QAAQ,cAAc;","names":[]}
|
package/dist/Section.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { SectionIconVariant } from './SectionIcon.mjs';
|
|
3
|
+
|
|
4
|
+
interface SectionHeadingButton {
|
|
5
|
+
/**
|
|
6
|
+
* The label for the button
|
|
7
|
+
*/
|
|
8
|
+
label: string;
|
|
9
|
+
/**
|
|
10
|
+
* Optional icon to display before the label
|
|
11
|
+
*/
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Click handler for the button
|
|
15
|
+
*/
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
}
|
|
18
|
+
interface SectionHeadingButtonGroupItem {
|
|
19
|
+
/**
|
|
20
|
+
* The label for the button
|
|
21
|
+
*/
|
|
22
|
+
label: string;
|
|
23
|
+
/**
|
|
24
|
+
* Optional icon to display before the label
|
|
25
|
+
*/
|
|
26
|
+
icon?: React.ReactNode;
|
|
27
|
+
/**
|
|
28
|
+
* Optional value identifier
|
|
29
|
+
*/
|
|
30
|
+
value?: string;
|
|
31
|
+
}
|
|
32
|
+
interface SectionHeadingProps {
|
|
33
|
+
/**
|
|
34
|
+
* The heading title text
|
|
35
|
+
*/
|
|
36
|
+
title: string;
|
|
37
|
+
/**
|
|
38
|
+
* Show an icon badge next to the title.
|
|
39
|
+
* Can be a boolean (defaults to 'info') or a specific variant.
|
|
40
|
+
* Available variants: 'warning', 'danger', 'info', 'success'
|
|
41
|
+
*/
|
|
42
|
+
icon?: boolean | SectionIconVariant;
|
|
43
|
+
/**
|
|
44
|
+
* Avatar configuration - can be an image URL or initials
|
|
45
|
+
*/
|
|
46
|
+
avatar?: {
|
|
47
|
+
src?: string;
|
|
48
|
+
initials?: string;
|
|
49
|
+
alt?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Primary button configuration (mutually exclusive with buttonGroup)
|
|
53
|
+
*/
|
|
54
|
+
button?: SectionHeadingButton;
|
|
55
|
+
/**
|
|
56
|
+
* Button group configuration (mutually exclusive with button)
|
|
57
|
+
*/
|
|
58
|
+
buttonGroup?: {
|
|
59
|
+
items: SectionHeadingButtonGroupItem[];
|
|
60
|
+
activeIndex?: number;
|
|
61
|
+
onChange?: (index: number) => void;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Additional CSS class name
|
|
65
|
+
*/
|
|
66
|
+
className?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Additional inline styles
|
|
69
|
+
*/
|
|
70
|
+
style?: React.CSSProperties;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* SectionHeading component - Arbor Design System
|
|
74
|
+
*
|
|
75
|
+
* A flexible section heading component that can include an icon, avatar,
|
|
76
|
+
* button, or button group. Button and button group are mutually exclusive.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* // Basic heading
|
|
81
|
+
* <SectionHeading title="Section Title" />
|
|
82
|
+
*
|
|
83
|
+
* // With icon
|
|
84
|
+
* <SectionHeading title="Section Title" icon />
|
|
85
|
+
*
|
|
86
|
+
* // With avatar
|
|
87
|
+
* <SectionHeading
|
|
88
|
+
* title="User Profile"
|
|
89
|
+
* avatar={{ src: "/avatar.jpg", alt: "User" }}
|
|
90
|
+
* />
|
|
91
|
+
*
|
|
92
|
+
* // With button
|
|
93
|
+
* <SectionHeading
|
|
94
|
+
* title="Section Title"
|
|
95
|
+
* button={{ label: "Add Item", onClick: () => {} }}
|
|
96
|
+
* />
|
|
97
|
+
*
|
|
98
|
+
* // With button group
|
|
99
|
+
* <SectionHeading
|
|
100
|
+
* title="Section Title"
|
|
101
|
+
* buttonGroup={{
|
|
102
|
+
* items: [{ label: "Day" }, { label: "Week" }],
|
|
103
|
+
* activeIndex: 0,
|
|
104
|
+
* onChange: (index) => {}
|
|
105
|
+
* }}
|
|
106
|
+
* />
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
declare const SectionHeading: React.ForwardRefExoticComponent<SectionHeadingProps & React.RefAttributes<HTMLDivElement>>;
|
|
110
|
+
|
|
111
|
+
export { SectionHeading, type SectionHeadingButton, type SectionHeadingButtonGroupItem, type SectionHeadingProps };
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { SectionIconVariant } from './SectionIcon.js';
|
|
3
|
+
|
|
4
|
+
interface SectionHeadingButton {
|
|
5
|
+
/**
|
|
6
|
+
* The label for the button
|
|
7
|
+
*/
|
|
8
|
+
label: string;
|
|
9
|
+
/**
|
|
10
|
+
* Optional icon to display before the label
|
|
11
|
+
*/
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Click handler for the button
|
|
15
|
+
*/
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
}
|
|
18
|
+
interface SectionHeadingButtonGroupItem {
|
|
19
|
+
/**
|
|
20
|
+
* The label for the button
|
|
21
|
+
*/
|
|
22
|
+
label: string;
|
|
23
|
+
/**
|
|
24
|
+
* Optional icon to display before the label
|
|
25
|
+
*/
|
|
26
|
+
icon?: React.ReactNode;
|
|
27
|
+
/**
|
|
28
|
+
* Optional value identifier
|
|
29
|
+
*/
|
|
30
|
+
value?: string;
|
|
31
|
+
}
|
|
32
|
+
interface SectionHeadingProps {
|
|
33
|
+
/**
|
|
34
|
+
* The heading title text
|
|
35
|
+
*/
|
|
36
|
+
title: string;
|
|
37
|
+
/**
|
|
38
|
+
* Show an icon badge next to the title.
|
|
39
|
+
* Can be a boolean (defaults to 'info') or a specific variant.
|
|
40
|
+
* Available variants: 'warning', 'danger', 'info', 'success'
|
|
41
|
+
*/
|
|
42
|
+
icon?: boolean | SectionIconVariant;
|
|
43
|
+
/**
|
|
44
|
+
* Avatar configuration - can be an image URL or initials
|
|
45
|
+
*/
|
|
46
|
+
avatar?: {
|
|
47
|
+
src?: string;
|
|
48
|
+
initials?: string;
|
|
49
|
+
alt?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Primary button configuration (mutually exclusive with buttonGroup)
|
|
53
|
+
*/
|
|
54
|
+
button?: SectionHeadingButton;
|
|
55
|
+
/**
|
|
56
|
+
* Button group configuration (mutually exclusive with button)
|
|
57
|
+
*/
|
|
58
|
+
buttonGroup?: {
|
|
59
|
+
items: SectionHeadingButtonGroupItem[];
|
|
60
|
+
activeIndex?: number;
|
|
61
|
+
onChange?: (index: number) => void;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Additional CSS class name
|
|
65
|
+
*/
|
|
66
|
+
className?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Additional inline styles
|
|
69
|
+
*/
|
|
70
|
+
style?: React.CSSProperties;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* SectionHeading component - Arbor Design System
|
|
74
|
+
*
|
|
75
|
+
* A flexible section heading component that can include an icon, avatar,
|
|
76
|
+
* button, or button group. Button and button group are mutually exclusive.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* // Basic heading
|
|
81
|
+
* <SectionHeading title="Section Title" />
|
|
82
|
+
*
|
|
83
|
+
* // With icon
|
|
84
|
+
* <SectionHeading title="Section Title" icon />
|
|
85
|
+
*
|
|
86
|
+
* // With avatar
|
|
87
|
+
* <SectionHeading
|
|
88
|
+
* title="User Profile"
|
|
89
|
+
* avatar={{ src: "/avatar.jpg", alt: "User" }}
|
|
90
|
+
* />
|
|
91
|
+
*
|
|
92
|
+
* // With button
|
|
93
|
+
* <SectionHeading
|
|
94
|
+
* title="Section Title"
|
|
95
|
+
* button={{ label: "Add Item", onClick: () => {} }}
|
|
96
|
+
* />
|
|
97
|
+
*
|
|
98
|
+
* // With button group
|
|
99
|
+
* <SectionHeading
|
|
100
|
+
* title="Section Title"
|
|
101
|
+
* buttonGroup={{
|
|
102
|
+
* items: [{ label: "Day" }, { label: "Week" }],
|
|
103
|
+
* activeIndex: 0,
|
|
104
|
+
* onChange: (index) => {}
|
|
105
|
+
* }}
|
|
106
|
+
* />
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
declare const SectionHeading: React.ForwardRefExoticComponent<SectionHeadingProps & React.RefAttributes<HTMLDivElement>>;
|
|
110
|
+
|
|
111
|
+
export { SectionHeading, type SectionHeadingButton, type SectionHeadingButtonGroupItem, type SectionHeadingProps };
|