ndcloud-storybook 1.2.0 → 1.2.2-beta.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/index.cjs +476 -62
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -2
- package/dist/index.d.ts +113 -2
- package/dist/index.js +462 -62
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
import { keyframes, css } from '@emotion/react';
|
|
2
|
-
import
|
|
2
|
+
import styled16 from '@emotion/styled';
|
|
3
3
|
import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
|
|
4
4
|
|
|
5
5
|
// src/atoms/Button/Button.tsx
|
|
6
|
-
var spin = keyframes`
|
|
7
|
-
from { transform: rotate(0deg); }
|
|
8
|
-
to { transform: rotate(360deg); }
|
|
9
|
-
`;
|
|
10
|
-
var Wrapper = styled.div`
|
|
11
|
-
display: inline-flex;
|
|
12
|
-
align-items: center;
|
|
13
|
-
justify-content: center;
|
|
14
|
-
|
|
15
|
-
svg {
|
|
16
|
-
width: ${({ size = 20 }) => size}px;
|
|
17
|
-
height: ${({ size = 20 }) => size}px;
|
|
18
|
-
animation: ${spin} ${({ speed = "0.75s" }) => speed} linear infinite;
|
|
19
|
-
transform-origin: center;
|
|
20
|
-
}
|
|
21
|
-
`;
|
|
22
6
|
var Spinner = ({
|
|
23
7
|
size = 20,
|
|
24
8
|
speed = "0.75s",
|
|
@@ -47,6 +31,22 @@ var Spinner = ({
|
|
|
47
31
|
}
|
|
48
32
|
) });
|
|
49
33
|
var Spinner_default = Spinner;
|
|
34
|
+
var spin = keyframes`
|
|
35
|
+
from { transform: rotate(0deg); }
|
|
36
|
+
to { transform: rotate(360deg); }
|
|
37
|
+
`;
|
|
38
|
+
var Wrapper = styled16.div`
|
|
39
|
+
display: inline-flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
justify-content: center;
|
|
42
|
+
|
|
43
|
+
svg {
|
|
44
|
+
width: ${({ size = 20 }) => size}px;
|
|
45
|
+
height: ${({ size = 20 }) => size}px;
|
|
46
|
+
animation: ${spin} ${({ speed = "0.75s" }) => speed} linear infinite;
|
|
47
|
+
transform-origin: center;
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
50
|
|
|
51
51
|
// src/tokens/colors.ts
|
|
52
52
|
var colors = {
|
|
@@ -55,6 +55,7 @@ var colors = {
|
|
|
55
55
|
// Brand
|
|
56
56
|
primaryGreen: "#7EE896",
|
|
57
57
|
primaryPurple: "#6D65DA",
|
|
58
|
+
primaryBlue: "#55A3BD",
|
|
58
59
|
// Palette
|
|
59
60
|
darkBlue1: "#12131B",
|
|
60
61
|
darkBlue2: "#2A2B33",
|
|
@@ -120,6 +121,27 @@ var typography = {
|
|
|
120
121
|
relaxed: 1.75
|
|
121
122
|
}
|
|
122
123
|
};
|
|
124
|
+
var FONT_SIZE_KEYS = {
|
|
125
|
+
xxs: "xxs",
|
|
126
|
+
xs: "xs",
|
|
127
|
+
s: "s",
|
|
128
|
+
m: "m",
|
|
129
|
+
base: "base",
|
|
130
|
+
lg: "lg",
|
|
131
|
+
xl: "xl",
|
|
132
|
+
"2xl": "2xl"
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// src/utils/colorHelpers.ts
|
|
136
|
+
function getOpacity(hexColor, opacity) {
|
|
137
|
+
const hex = hexColor.trim().replace(/^#/, "");
|
|
138
|
+
if (!/^[\da-fA-F]{6}$/.test(hex)) {
|
|
139
|
+
throw new Error(`Invalid hex color: ${hexColor}`);
|
|
140
|
+
}
|
|
141
|
+
const opacityFraction = Math.round(opacity / 100 * 255);
|
|
142
|
+
const alphaHex = opacityFraction.toString(16).padStart(2, "0");
|
|
143
|
+
return `#${hex}${alphaHex}`;
|
|
144
|
+
}
|
|
123
145
|
var Variant = /* @__PURE__ */ ((Variant2) => {
|
|
124
146
|
Variant2["Primary"] = "primary";
|
|
125
147
|
Variant2["Secondary"] = "secondary";
|
|
@@ -137,11 +159,35 @@ var VARIANTS = {
|
|
|
137
159
|
},
|
|
138
160
|
outline: {
|
|
139
161
|
background: colors.backgrounds.transparent,
|
|
140
|
-
border:
|
|
141
|
-
color:
|
|
162
|
+
border: `1px solid ${getOpacity(colors.baseColors.grey2, 10)}`,
|
|
163
|
+
color: getOpacity(colors.baseColors.darkBlue3, 85)
|
|
142
164
|
}
|
|
143
165
|
};
|
|
144
|
-
var
|
|
166
|
+
var Button = ({
|
|
167
|
+
label,
|
|
168
|
+
icon,
|
|
169
|
+
loading,
|
|
170
|
+
disabled,
|
|
171
|
+
className,
|
|
172
|
+
variant = "primary",
|
|
173
|
+
selected,
|
|
174
|
+
...rest
|
|
175
|
+
}) => /* @__PURE__ */ jsx(
|
|
176
|
+
StyledButton,
|
|
177
|
+
{
|
|
178
|
+
variant,
|
|
179
|
+
disabled: disabled || loading,
|
|
180
|
+
selected,
|
|
181
|
+
className,
|
|
182
|
+
...rest,
|
|
183
|
+
children: loading ? /* @__PURE__ */ jsx(Spinner_default, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
184
|
+
icon && /* @__PURE__ */ jsx("span", { children: icon }),
|
|
185
|
+
label
|
|
186
|
+
] })
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
var Button_default = Button;
|
|
190
|
+
var StyledButton = styled16.button`
|
|
145
191
|
display: flex;
|
|
146
192
|
align-items: center;
|
|
147
193
|
justify-content: center;
|
|
@@ -171,46 +217,12 @@ var StyledButton = styled.button`
|
|
|
171
217
|
pointer-events: ${disabled ? "none" : "auto"};
|
|
172
218
|
|
|
173
219
|
&:focus-visible {
|
|
174
|
-
outline: 2px solid
|
|
220
|
+
outline: 2px solid ${colors.baseColors.primaryBlue};
|
|
175
221
|
outline-offset: 2px;
|
|
176
222
|
}
|
|
177
223
|
`;
|
|
178
224
|
}}
|
|
179
225
|
`;
|
|
180
|
-
var Button = ({
|
|
181
|
-
label,
|
|
182
|
-
icon,
|
|
183
|
-
loading,
|
|
184
|
-
disabled,
|
|
185
|
-
className,
|
|
186
|
-
...rest
|
|
187
|
-
}) => /* @__PURE__ */ jsx(
|
|
188
|
-
StyledButton,
|
|
189
|
-
{
|
|
190
|
-
label: "",
|
|
191
|
-
disabled: disabled || loading,
|
|
192
|
-
className,
|
|
193
|
-
...rest,
|
|
194
|
-
children: loading ? /* @__PURE__ */ jsx(Spinner_default, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
195
|
-
icon && /* @__PURE__ */ jsx("span", { children: icon }),
|
|
196
|
-
label
|
|
197
|
-
] })
|
|
198
|
-
}
|
|
199
|
-
);
|
|
200
|
-
var Button_default = Button;
|
|
201
|
-
|
|
202
|
-
// src/utils/colorHelpers.ts
|
|
203
|
-
function getOpacity(hexColor, opacity) {
|
|
204
|
-
const hex = hexColor.trim().replace(/^#/, "");
|
|
205
|
-
if (!/^[\da-fA-F]{6}$/.test(hex)) {
|
|
206
|
-
throw new Error(`Invalid hex color: ${hexColor}`);
|
|
207
|
-
}
|
|
208
|
-
const opacityFraction = Math.round(opacity / 100 * 255);
|
|
209
|
-
const alphaHex = opacityFraction.toString(16).padStart(2, "0");
|
|
210
|
-
return `#${hex}${alphaHex}`;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// src/atoms/shared/inputStyles.ts
|
|
214
226
|
var defaultPadding = "9px 17px";
|
|
215
227
|
var focusedPadding = "8px 16px";
|
|
216
228
|
var baseInputStyles = css`
|
|
@@ -270,7 +282,7 @@ var Input = ({ className, error, warning, ...rest }) => {
|
|
|
270
282
|
return /* @__PURE__ */ jsx(StyledInput, { className, error, warning, ...rest });
|
|
271
283
|
};
|
|
272
284
|
var Input_default = Input;
|
|
273
|
-
var StyledInput =
|
|
285
|
+
var StyledInput = styled16.input`
|
|
274
286
|
${baseInputStyles}
|
|
275
287
|
|
|
276
288
|
${({ error }) => error && errorStyles}
|
|
@@ -284,7 +296,7 @@ var Textarea = ({ className, error, warning, ...rest }) => {
|
|
|
284
296
|
return /* @__PURE__ */ jsx(StyledTextarea, { className, error, warning, ...rest });
|
|
285
297
|
};
|
|
286
298
|
var Textarea_default = Textarea;
|
|
287
|
-
var StyledTextarea =
|
|
299
|
+
var StyledTextarea = styled16.textarea`
|
|
288
300
|
${baseInputStyles}
|
|
289
301
|
resize: vertical;
|
|
290
302
|
min-height: 80px;
|
|
@@ -312,7 +324,7 @@ var Tab = ({
|
|
|
312
324
|
);
|
|
313
325
|
};
|
|
314
326
|
var Tab_default = Tab;
|
|
315
|
-
var StyledTab =
|
|
327
|
+
var StyledTab = styled16.div`
|
|
316
328
|
display: inline-block;
|
|
317
329
|
padding: 8px 16px;
|
|
318
330
|
user-select: none;
|
|
@@ -333,7 +345,7 @@ var StyledTab = styled.div`
|
|
|
333
345
|
}
|
|
334
346
|
`}
|
|
335
347
|
`;
|
|
336
|
-
var HelperText =
|
|
348
|
+
var HelperText = styled16.div`
|
|
337
349
|
margin-top: 4px;
|
|
338
350
|
font-size: ${typography.fontSize.xs}px;
|
|
339
351
|
color: ${({ error, warning }) => {
|
|
@@ -342,6 +354,94 @@ var HelperText = styled.div`
|
|
|
342
354
|
return colors.baseColors.grey3;
|
|
343
355
|
}};
|
|
344
356
|
`;
|
|
357
|
+
var USER_ROLES = {
|
|
358
|
+
OWNER: "owner",
|
|
359
|
+
EDITOR: "editor",
|
|
360
|
+
VIEWER: "viewer",
|
|
361
|
+
AUDITOR: "auditor"
|
|
362
|
+
};
|
|
363
|
+
var USER_STATUS = {
|
|
364
|
+
INVITED: "invited"
|
|
365
|
+
};
|
|
366
|
+
var getBadgeColor = (role, status) => {
|
|
367
|
+
if (status?.toLowerCase() === USER_STATUS.INVITED) {
|
|
368
|
+
return colors.accents.warning;
|
|
369
|
+
}
|
|
370
|
+
const roleLower = role.toLowerCase();
|
|
371
|
+
switch (roleLower) {
|
|
372
|
+
case USER_ROLES.OWNER:
|
|
373
|
+
return colors.baseColors.primaryGreen;
|
|
374
|
+
case USER_ROLES.EDITOR:
|
|
375
|
+
return colors.baseColors.primaryBlue;
|
|
376
|
+
case USER_ROLES.VIEWER:
|
|
377
|
+
case USER_ROLES.AUDITOR:
|
|
378
|
+
return colors.baseColors.primaryPurple;
|
|
379
|
+
default:
|
|
380
|
+
return colors.baseColors.primaryGreen;
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
function GroupBadge({ role, status, children }) {
|
|
384
|
+
const badgeColor = getBadgeColor(role, status);
|
|
385
|
+
const displayText = status?.toLowerCase() === USER_STATUS.INVITED ? "Invited" : children;
|
|
386
|
+
return /* @__PURE__ */ jsx(Badge, { badgeColor, children: displayText });
|
|
387
|
+
}
|
|
388
|
+
var Badge = styled16.div`
|
|
389
|
+
display: inline-flex;
|
|
390
|
+
padding: 8px 28px;
|
|
391
|
+
border-radius: 100px;
|
|
392
|
+
background-color: ${({ badgeColor }) => getOpacity(badgeColor, 20)};
|
|
393
|
+
border: 1px solid ${({ badgeColor }) => badgeColor};
|
|
394
|
+
color: ${({ badgeColor }) => badgeColor};
|
|
395
|
+
font-size: ${FONT_SIZES.s}px;
|
|
396
|
+
font-weight: ${FONT_WEIGHTS.bold};
|
|
397
|
+
text-transform: capitalize;
|
|
398
|
+
`;
|
|
399
|
+
var Badge_default = GroupBadge;
|
|
400
|
+
function UserAvatar({
|
|
401
|
+
initials,
|
|
402
|
+
badgeColor,
|
|
403
|
+
onClick,
|
|
404
|
+
size = 56
|
|
405
|
+
}) {
|
|
406
|
+
if (!initials || !initials.trim()) {
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
409
|
+
if (onClick) {
|
|
410
|
+
return /* @__PURE__ */ jsx(
|
|
411
|
+
ProfileAvatar,
|
|
412
|
+
{
|
|
413
|
+
badgeColor,
|
|
414
|
+
size,
|
|
415
|
+
onClick,
|
|
416
|
+
children: initials
|
|
417
|
+
}
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
return /* @__PURE__ */ jsx(ColourAvatar, { badgeColor, size, children: initials });
|
|
421
|
+
}
|
|
422
|
+
var UserAvatar_default = UserAvatar;
|
|
423
|
+
var ColourAvatar = styled16.div`
|
|
424
|
+
width: ${({ size }) => typeof size === "number" ? `${size}px` : size === "large" ? "56px" : "40px"};
|
|
425
|
+
height: ${({ size }) => typeof size === "number" ? `${size}px` : size === "large" ? "56px" : "40px"};
|
|
426
|
+
border-radius: 50%;
|
|
427
|
+
background: ${({ badgeColor }) => badgeColor ? getOpacity(badgeColor, 20) : "linear-gradient(90deg, #6d65da 0.08%, #55a3bd 68.44%)"};
|
|
428
|
+
border: ${({ badgeColor }) => badgeColor ? `2px solid ${badgeColor}` : "none"};
|
|
429
|
+
display: flex;
|
|
430
|
+
align-items: center;
|
|
431
|
+
justify-content: center;
|
|
432
|
+
color: ${colors.baseColors.darkBlue1};
|
|
433
|
+
font-size: ${({ size }) => typeof size === "number" ? `${size * 0.325}px` : size === "large" ? `${FONT_SIZES.xs}px` : `${FONT_SIZES.s}px`};
|
|
434
|
+
font-weight: ${FONT_WEIGHTS.normal};
|
|
435
|
+
flex-shrink: 0;
|
|
436
|
+
`;
|
|
437
|
+
var ProfileAvatar = styled16(ColourAvatar)`
|
|
438
|
+
color: #fff;
|
|
439
|
+
background: ${colors.gradients.gradient1};
|
|
440
|
+
border: none;
|
|
441
|
+
border-radius: 999px;
|
|
442
|
+
line-height: 138%;
|
|
443
|
+
margin-bottom: 12px;
|
|
444
|
+
`;
|
|
345
445
|
var FormField = ({
|
|
346
446
|
id,
|
|
347
447
|
label,
|
|
@@ -379,7 +479,7 @@ var FormField = ({
|
|
|
379
479
|
displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
|
|
380
480
|
] });
|
|
381
481
|
};
|
|
382
|
-
var FormFieldWrapper =
|
|
482
|
+
var FormFieldWrapper = styled16.div`
|
|
383
483
|
display: flex;
|
|
384
484
|
flex-direction: column;
|
|
385
485
|
|
|
@@ -427,7 +527,7 @@ var FormFieldTextarea = ({
|
|
|
427
527
|
displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
|
|
428
528
|
] });
|
|
429
529
|
};
|
|
430
|
-
var FormFieldWrapper2 =
|
|
530
|
+
var FormFieldWrapper2 = styled16.div`
|
|
431
531
|
display: flex;
|
|
432
532
|
flex-direction: column;
|
|
433
533
|
|
|
@@ -438,7 +538,307 @@ var FormFieldWrapper2 = styled.div`
|
|
|
438
538
|
}
|
|
439
539
|
`;
|
|
440
540
|
var FormFieldTextarea_default = FormFieldTextarea;
|
|
541
|
+
var SearchContainer = styled16.div`
|
|
542
|
+
width: ${({ width }) => typeof width === "number" ? `${width}px` : width || "208px"};
|
|
543
|
+
`;
|
|
544
|
+
var InputWrapper = styled16.div`
|
|
545
|
+
position: relative;
|
|
546
|
+
width: 100%;
|
|
547
|
+
display: flex;
|
|
548
|
+
align-items: center;
|
|
549
|
+
`;
|
|
550
|
+
var IconWrapper = styled16.div`
|
|
551
|
+
position: absolute;
|
|
552
|
+
left: 17px;
|
|
553
|
+
top: 50%;
|
|
554
|
+
transform: translateY(-50%);
|
|
555
|
+
display: flex;
|
|
556
|
+
align-items: center;
|
|
557
|
+
justify-content: center;
|
|
558
|
+
color: ${colors.baseColors.grey3};
|
|
559
|
+
pointer-events: none;
|
|
560
|
+
z-index: 2;
|
|
561
|
+
`;
|
|
562
|
+
var StyledInput2 = styled16(Input_default)`
|
|
563
|
+
width: 100%;
|
|
564
|
+
padding-right: ${({ hasClearButton }) => hasClearButton ? "32px" : "17px"};
|
|
565
|
+
padding-left: ${({ hasIcon }) => hasIcon ? "44px" : "17px"};
|
|
566
|
+
font-size: ${({ fontSize = "s" }) => `${typography.fontSize[fontSize]}px`};
|
|
567
|
+
position: relative;
|
|
568
|
+
z-index: 1;
|
|
569
|
+
|
|
570
|
+
&:focus {
|
|
571
|
+
padding-left: ${({ hasIcon }) => hasIcon ? "43px" : "16px"};
|
|
572
|
+
}
|
|
573
|
+
`;
|
|
574
|
+
var ClearButton = styled16.button`
|
|
575
|
+
position: absolute;
|
|
576
|
+
right: 8px;
|
|
577
|
+
top: 50%;
|
|
578
|
+
transform: translateY(-50%);
|
|
579
|
+
background: none;
|
|
580
|
+
border: none;
|
|
581
|
+
cursor: pointer;
|
|
582
|
+
padding: 4px;
|
|
583
|
+
display: flex;
|
|
584
|
+
align-items: center;
|
|
585
|
+
justify-content: center;
|
|
586
|
+
color: ${colors.baseColors.grey3};
|
|
587
|
+
transition: color 0.2s ease;
|
|
588
|
+
z-index: 3;
|
|
589
|
+
|
|
590
|
+
&:hover {
|
|
591
|
+
color: ${colors.baseColors.grey1};
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
&:focus {
|
|
595
|
+
outline: 2px solid ${colors.baseColors.primaryPurple};
|
|
596
|
+
outline-offset: 2px;
|
|
597
|
+
border-radius: 4px;
|
|
598
|
+
}
|
|
599
|
+
`;
|
|
600
|
+
var ClearIcon = styled16.svg`
|
|
601
|
+
width: 16px;
|
|
602
|
+
height: 16px;
|
|
603
|
+
stroke-width: 2;
|
|
604
|
+
stroke-linecap: round;
|
|
605
|
+
stroke-linejoin: round;
|
|
606
|
+
`;
|
|
607
|
+
function SearchInput({
|
|
608
|
+
value,
|
|
609
|
+
onChange,
|
|
610
|
+
placeholder = "Search...",
|
|
611
|
+
showClearButton = false,
|
|
612
|
+
icon,
|
|
613
|
+
width = "208px",
|
|
614
|
+
fontSize = "s"
|
|
615
|
+
}) {
|
|
616
|
+
const handleChange = (e) => {
|
|
617
|
+
onChange(e.target.value);
|
|
618
|
+
};
|
|
619
|
+
const handleClear = () => {
|
|
620
|
+
onChange("");
|
|
621
|
+
};
|
|
622
|
+
const hasClearButton = showClearButton && !!value;
|
|
623
|
+
const hasIcon = !!icon;
|
|
624
|
+
return /* @__PURE__ */ jsx(SearchContainer, { width, children: /* @__PURE__ */ jsxs(InputWrapper, { children: [
|
|
625
|
+
hasIcon && /* @__PURE__ */ jsx(IconWrapper, { children: icon }),
|
|
626
|
+
/* @__PURE__ */ jsx(
|
|
627
|
+
StyledInput2,
|
|
628
|
+
{
|
|
629
|
+
type: "text",
|
|
630
|
+
placeholder,
|
|
631
|
+
value,
|
|
632
|
+
onChange: handleChange,
|
|
633
|
+
autoComplete: "off",
|
|
634
|
+
hasClearButton,
|
|
635
|
+
hasIcon,
|
|
636
|
+
fontSize
|
|
637
|
+
}
|
|
638
|
+
),
|
|
639
|
+
hasClearButton && /* @__PURE__ */ jsx(ClearButton, { onClick: handleClear, type: "button", "aria-label": "Clear search", children: /* @__PURE__ */ jsxs(ClearIcon, { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: [
|
|
640
|
+
/* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
641
|
+
/* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
642
|
+
] }) })
|
|
643
|
+
] }) });
|
|
644
|
+
}
|
|
645
|
+
var SearchInput_default = SearchInput;
|
|
646
|
+
function TableElement({ children, ...rest }) {
|
|
647
|
+
return /* @__PURE__ */ jsx(StyledTable, { ...rest, children });
|
|
648
|
+
}
|
|
649
|
+
var Table_default = TableElement;
|
|
650
|
+
var StyledTable = styled16.table`
|
|
651
|
+
width: 100%;
|
|
652
|
+
border-collapse: separate;
|
|
653
|
+
border-spacing: 0 4px;
|
|
654
|
+
`;
|
|
655
|
+
function TableHeader({ alignRight, children, ...rest }) {
|
|
656
|
+
return /* @__PURE__ */ jsx(StyledTableHeader, { alignRight, ...rest, children });
|
|
657
|
+
}
|
|
658
|
+
var TableHeader_default = TableHeader;
|
|
659
|
+
var StyledTableHeader = styled16.th`
|
|
660
|
+
padding-bottom: 12px;
|
|
661
|
+
text-align: ${({ alignRight }) => alignRight ? "right" : "left"};
|
|
662
|
+
font-size: ${FONT_SIZES.xs}px;
|
|
663
|
+
font-weight: ${FONT_WEIGHTS.bold};
|
|
664
|
+
padding-left: ${({ alignRight }) => alignRight ? "0" : "24px"};
|
|
665
|
+
padding-right: ${({ alignRight }) => alignRight ? "60px" : "0"};
|
|
666
|
+
`;
|
|
667
|
+
function TableCell({ children, colSpan, ...rest }) {
|
|
668
|
+
return /* @__PURE__ */ jsx(StyledTableCell, { colSpan, ...rest, children });
|
|
669
|
+
}
|
|
670
|
+
var TableCell_default = TableCell;
|
|
671
|
+
var StyledTableCell = styled16.td`
|
|
672
|
+
|
|
673
|
+
`;
|
|
674
|
+
function TableRow({ children, ...rest }) {
|
|
675
|
+
return /* @__PURE__ */ jsx(StyledTableRow, { ...rest, children });
|
|
676
|
+
}
|
|
677
|
+
var TableRow_default = TableRow;
|
|
678
|
+
var StyledTableRow = styled16.tr`
|
|
679
|
+
/* Base row styling */
|
|
680
|
+
`;
|
|
681
|
+
var TableRowWrapper = styled16.div`
|
|
682
|
+
border-radius: 6px;
|
|
683
|
+
border: 1px solid ${colors.baseColors.grey7};
|
|
684
|
+
display: flex;
|
|
685
|
+
align-items: center;
|
|
686
|
+
justify-content: space-between;
|
|
687
|
+
padding: 12px 24px;
|
|
688
|
+
`;
|
|
689
|
+
var CheckboxWrapper = styled16.div`
|
|
690
|
+
display: flex;
|
|
691
|
+
align-items: center;
|
|
692
|
+
`;
|
|
693
|
+
var ActionsWrapper = styled16.div`
|
|
694
|
+
display: flex;
|
|
695
|
+
align-items: center;
|
|
696
|
+
justify-content: flex-end;
|
|
697
|
+
`;
|
|
698
|
+
var AlignedTableCell = styled16(TableCell_default)`
|
|
699
|
+
padding-top: 12px;
|
|
700
|
+
padding-bottom: 12px;
|
|
701
|
+
padding-left: ${({ alignRight }) => alignRight ? "0" : "24px"};
|
|
702
|
+
padding-right: ${({ alignRight }) => alignRight ? "60px" : "0"};
|
|
703
|
+
text-align: ${({ alignRight }) => alignRight ? "right" : "left"};
|
|
704
|
+
border: 1px solid ${colors.baseColors.grey7};
|
|
705
|
+
border-right: ${({ isLast }) => isLast ? `1px solid ${colors.baseColors.grey7}` : "none"};
|
|
706
|
+
border-left: ${({ isFirst }) => isFirst ? `1px solid ${colors.baseColors.grey7}` : "none"};
|
|
707
|
+
${({ isFirst }) => isFirst && `border-top-left-radius: 6px; border-bottom-left-radius: 6px;`}
|
|
708
|
+
${({ isLast }) => isLast && `border-top-right-radius: 6px; border-bottom-right-radius: 6px;`}
|
|
709
|
+
`;
|
|
710
|
+
var CellContent = styled16.div`
|
|
711
|
+
display: flex;
|
|
712
|
+
align-items: center;
|
|
713
|
+
justify-content: ${({ alignRight }) => alignRight ? "flex-end" : "flex-start"};
|
|
714
|
+
flex: ${({ alignRight }) => alignRight ? "0 0 auto" : "1"};
|
|
715
|
+
min-width: 0;
|
|
716
|
+
`;
|
|
717
|
+
var TableWrapper = styled16.div`
|
|
718
|
+
margin-top: 32px;
|
|
719
|
+
`;
|
|
720
|
+
var EmptyState = styled16.div`
|
|
721
|
+
padding: 24px;
|
|
722
|
+
text-align: center;
|
|
723
|
+
display: flex;
|
|
724
|
+
flex-direction: column;
|
|
725
|
+
gap: 8px;
|
|
726
|
+
`;
|
|
727
|
+
var EmptyHeader = styled16.div`
|
|
728
|
+
font-size: 26px;
|
|
729
|
+
font-weight: 700;
|
|
730
|
+
color: ${colors.baseColors.darkBlue1};
|
|
731
|
+
`;
|
|
732
|
+
var EmptySubheader = styled16.div`
|
|
733
|
+
font-size: 12px;
|
|
734
|
+
font-weight: 500;
|
|
735
|
+
color: ${colors.baseColors.grey3};
|
|
736
|
+
`;
|
|
737
|
+
function getCellContent(column, row, rowIndex) {
|
|
738
|
+
if (column.renderCell) {
|
|
739
|
+
return column.renderCell(row, rowIndex);
|
|
740
|
+
}
|
|
741
|
+
if (column.accessor) {
|
|
742
|
+
if (typeof column.accessor === "function") {
|
|
743
|
+
return column.accessor(row);
|
|
744
|
+
}
|
|
745
|
+
return String(row[column.accessor] ?? "");
|
|
746
|
+
}
|
|
747
|
+
return null;
|
|
748
|
+
}
|
|
749
|
+
function getTotalColumns(columns, showCheckboxes, renderActions) {
|
|
750
|
+
return columns.length + (showCheckboxes ? 1 : 0) + (renderActions ? 1 : 0);
|
|
751
|
+
}
|
|
752
|
+
function Table({
|
|
753
|
+
data,
|
|
754
|
+
columns,
|
|
755
|
+
getRowKey,
|
|
756
|
+
emptyMessage,
|
|
757
|
+
emptyHeader,
|
|
758
|
+
emptySubheader,
|
|
759
|
+
showCheckboxes = false,
|
|
760
|
+
onSelectAll,
|
|
761
|
+
onSelectRow,
|
|
762
|
+
selectedRows = /* @__PURE__ */ new Set(),
|
|
763
|
+
renderActions,
|
|
764
|
+
rowLayout = "aligned"
|
|
765
|
+
}) {
|
|
766
|
+
const getKey = getRowKey || ((row, index) => index);
|
|
767
|
+
const allSelected = data.length > 0 && data.every((row, idx) => selectedRows.has(getKey(row, idx)));
|
|
768
|
+
const someSelected = data.some((row, idx) => selectedRows.has(getKey(row, idx)));
|
|
769
|
+
const totalColumns = getTotalColumns(columns, showCheckboxes, renderActions);
|
|
770
|
+
const handleSelectAll = (e) => {
|
|
771
|
+
onSelectAll?.(e.target.checked);
|
|
772
|
+
};
|
|
773
|
+
const handleSelectRow = (row, e) => {
|
|
774
|
+
onSelectRow?.(row, e.target.checked);
|
|
775
|
+
};
|
|
776
|
+
return /* @__PURE__ */ jsx(TableWrapper, { children: /* @__PURE__ */ jsxs(Table_default, { children: [
|
|
777
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs(TableRow_default, { children: [
|
|
778
|
+
showCheckboxes && /* @__PURE__ */ jsx(TableHeader_default, { children: /* @__PURE__ */ jsx(
|
|
779
|
+
"input",
|
|
780
|
+
{
|
|
781
|
+
type: "checkbox",
|
|
782
|
+
checked: allSelected,
|
|
783
|
+
ref: (input) => {
|
|
784
|
+
if (input) input.indeterminate = someSelected && !allSelected;
|
|
785
|
+
},
|
|
786
|
+
onChange: handleSelectAll,
|
|
787
|
+
"aria-label": "Select all rows"
|
|
788
|
+
}
|
|
789
|
+
) }),
|
|
790
|
+
columns.map((column, index) => /* @__PURE__ */ jsx(TableHeader_default, { alignRight: column.alignRight, children: column.label }, index)),
|
|
791
|
+
renderActions && /* @__PURE__ */ jsx(TableHeader_default, { alignRight: true, children: " " })
|
|
792
|
+
] }) }),
|
|
793
|
+
/* @__PURE__ */ jsx("tbody", { children: data.length === 0 ? /* @__PURE__ */ jsx(TableRow_default, { children: /* @__PURE__ */ jsx(TableCell_default, { colSpan: totalColumns, children: /* @__PURE__ */ jsx(EmptyState, { children: emptyHeader ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
794
|
+
/* @__PURE__ */ jsx(EmptyHeader, { children: emptyHeader }),
|
|
795
|
+
emptySubheader && /* @__PURE__ */ jsx(EmptySubheader, { children: emptySubheader })
|
|
796
|
+
] }) : /* @__PURE__ */ jsx("div", { children: emptyMessage || "No data found" }) }) }) }) : data.map((row, rowIndex) => {
|
|
797
|
+
const rowKey = getKey(row, rowIndex);
|
|
798
|
+
const isSelected = selectedRows.has(rowKey);
|
|
799
|
+
if (rowLayout === "spaced") {
|
|
800
|
+
return /* @__PURE__ */ jsx(TableRow_default, { children: /* @__PURE__ */ jsx(TableCell_default, { colSpan: totalColumns, children: /* @__PURE__ */ jsxs(TableRowWrapper, { children: [
|
|
801
|
+
showCheckboxes && /* @__PURE__ */ jsx(CheckboxWrapper, { children: /* @__PURE__ */ jsx(
|
|
802
|
+
"input",
|
|
803
|
+
{
|
|
804
|
+
type: "checkbox",
|
|
805
|
+
checked: isSelected,
|
|
806
|
+
onChange: (e) => handleSelectRow(row, e),
|
|
807
|
+
"aria-label": `Select row ${rowIndex + 1}`
|
|
808
|
+
}
|
|
809
|
+
) }),
|
|
810
|
+
columns.map((column, colIndex) => {
|
|
811
|
+
const cellContent = getCellContent(column, row, rowIndex);
|
|
812
|
+
const isLast = colIndex === columns.length - 1 && !renderActions;
|
|
813
|
+
return /* @__PURE__ */ jsx(CellContent, { alignRight: column.alignRight, isLast, children: cellContent }, colIndex);
|
|
814
|
+
}),
|
|
815
|
+
renderActions && /* @__PURE__ */ jsx(ActionsWrapper, { children: renderActions(row, rowIndex) })
|
|
816
|
+
] }) }) }, rowKey);
|
|
817
|
+
} else {
|
|
818
|
+
return /* @__PURE__ */ jsxs(TableRow_default, { children: [
|
|
819
|
+
showCheckboxes && /* @__PURE__ */ jsx(AlignedTableCell, { isFirst: true, isLast: totalColumns === 1, children: /* @__PURE__ */ jsx(
|
|
820
|
+
"input",
|
|
821
|
+
{
|
|
822
|
+
type: "checkbox",
|
|
823
|
+
checked: isSelected,
|
|
824
|
+
onChange: (e) => handleSelectRow(row, e),
|
|
825
|
+
"aria-label": `Select row ${rowIndex + 1}`
|
|
826
|
+
}
|
|
827
|
+
) }),
|
|
828
|
+
columns.map((column, colIndex) => {
|
|
829
|
+
const cellContent = getCellContent(column, row, rowIndex);
|
|
830
|
+
const isFirst = !showCheckboxes && colIndex === 0;
|
|
831
|
+
const isLast = !renderActions && colIndex === columns.length - 1;
|
|
832
|
+
return /* @__PURE__ */ jsx(AlignedTableCell, { alignRight: column.alignRight, isFirst, isLast, children: cellContent }, colIndex);
|
|
833
|
+
}),
|
|
834
|
+
renderActions && /* @__PURE__ */ jsx(AlignedTableCell, { alignRight: true, isLast: true, children: renderActions(row, rowIndex) })
|
|
835
|
+
] }, rowKey);
|
|
836
|
+
}
|
|
837
|
+
}) })
|
|
838
|
+
] }) });
|
|
839
|
+
}
|
|
840
|
+
var DataTable_default = Table;
|
|
441
841
|
|
|
442
|
-
export { Button_default as Button, FONT_SIZES, FONT_WEIGHTS, FormField_default as FormField, FormFieldTextarea_default as FormFieldTextarea, HelperText, Input_default as Input, Label_default as Label, Tab_default as Tab, Textarea_default as Textarea, Variant, colors, getOpacity, typography };
|
|
842
|
+
export { Badge_default as Badge, Button_default as Button, FONT_SIZES, FONT_SIZE_KEYS, FONT_WEIGHTS, FormField_default as FormField, FormFieldTextarea_default as FormFieldTextarea, GroupBadge, HelperText, Input_default as Input, Label_default as Label, SearchInput_default as SearchInput, Tab_default as Tab, DataTable_default as Table, TableCell_default as TableCell, Table_default as TableElement, TableHeader_default as TableHeader, TableRow_default as TableRow, TableRowWrapper, Textarea_default as Textarea, USER_ROLES, USER_STATUS, UserAvatar_default as UserAvatar, Variant, colors, getBadgeColor, getOpacity, typography };
|
|
443
843
|
//# sourceMappingURL=index.js.map
|
|
444
844
|
//# sourceMappingURL=index.js.map
|