ndcloud-storybook 1.3.0 → 1.3.5

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.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { keyframes, css } from '@emotion/react';
2
- import styled17 from '@emotion/styled';
2
+ import styled18 from '@emotion/styled';
3
+ import { forwardRef, useState, useEffect } from 'react';
3
4
  import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
4
- import { useState, useEffect } from 'react';
5
5
 
6
6
  // src/atoms/Button/Button.tsx
7
7
  var Spinner = ({
@@ -36,7 +36,7 @@ var spin = keyframes`
36
36
  from { transform: rotate(0deg); }
37
37
  to { transform: rotate(360deg); }
38
38
  `;
39
- var Wrapper = styled17.div`
39
+ var Wrapper = styled18.div`
40
40
  display: inline-flex;
41
41
  align-items: center;
42
42
  justify-content: center;
@@ -147,6 +147,7 @@ var Variant = /* @__PURE__ */ ((Variant2) => {
147
147
  Variant2["Primary"] = "primary";
148
148
  Variant2["Secondary"] = "secondary";
149
149
  Variant2["Outline"] = "outline";
150
+ Variant2["Dark"] = "dark";
150
151
  return Variant2;
151
152
  })(Variant || {});
152
153
  var VARIANTS = {
@@ -162,33 +163,44 @@ var VARIANTS = {
162
163
  background: colors.backgrounds.transparent,
163
164
  border: `1px solid ${getOpacity(colors.baseColors.grey2, 10)}`,
164
165
  color: getOpacity(colors.baseColors.darkBlue3, 85)
166
+ },
167
+ dark: {
168
+ background: colors.baseColors.grey6,
169
+ color: colors.baseColors.white1
165
170
  }
166
171
  };
167
- var Button = ({
168
- label,
169
- icon,
170
- loading,
171
- disabled,
172
- className,
173
- variant = "primary",
174
- selected,
175
- ...rest
176
- }) => /* @__PURE__ */ jsx(
177
- StyledButton,
178
- {
179
- variant,
180
- disabled: disabled || loading,
181
- selected,
172
+ var Button = forwardRef(
173
+ ({
174
+ label,
175
+ icon,
176
+ loading,
177
+ disabled,
182
178
  className,
183
- ...rest,
184
- children: loading ? /* @__PURE__ */ jsx(Spinner_default, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
185
- icon && /* @__PURE__ */ jsx("span", { children: icon }),
186
- label
187
- ] })
188
- }
179
+ variant = "primary",
180
+ selected,
181
+ type = "button",
182
+ ...rest
183
+ }, ref) => /* @__PURE__ */ jsx(
184
+ StyledButton,
185
+ {
186
+ ref,
187
+ variant,
188
+ disabled: disabled || loading,
189
+ selected,
190
+ className,
191
+ type,
192
+ "aria-busy": loading,
193
+ "aria-label": loading ? `${label} (loading)` : void 0,
194
+ ...rest,
195
+ children: loading ? /* @__PURE__ */ jsx(Spinner_default, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
196
+ icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: icon }),
197
+ label
198
+ ] })
199
+ }
200
+ )
189
201
  );
190
202
  var Button_default = Button;
191
- var StyledButton = styled17.button`
203
+ var StyledButton = styled18.button`
192
204
  display: flex;
193
205
  align-items: center;
194
206
  justify-content: center;
@@ -208,6 +220,29 @@ var StyledButton = styled17.button`
208
220
  }
209
221
 
210
222
  ${({ variant = "primary", disabled, selected }) => {
223
+ if (variant === "dark") {
224
+ return css`
225
+ background: ${colors.baseColors.grey6};
226
+ border: ${selected ? `2px solid ${colors.baseColors.white1}` : "1px solid transparent"};
227
+ color: ${disabled ? colors.baseColors.grey4 : colors.baseColors.white1};
228
+ opacity: ${disabled ? 0.6 : 1};
229
+ cursor: ${disabled ? "not-allowed" : "pointer"};
230
+ pointer-events: ${disabled ? "none" : "auto"};
231
+
232
+ &:hover:not(:disabled) {
233
+ background: ${colors.baseColors.grey5};
234
+ }
235
+
236
+ &:active:not(:disabled) {
237
+ border: 1px solid ${colors.baseColors.primaryPurple};
238
+ }
239
+
240
+ &:focus-visible {
241
+ outline: 2px solid ${colors.baseColors.primaryBlue};
242
+ outline-offset: 2px;
243
+ }
244
+ `;
245
+ }
211
246
  const { background, color, border } = VARIANTS[variant];
212
247
  return css`
213
248
  background: ${background};
@@ -283,7 +318,7 @@ var Input = ({ className, error, warning, ...rest }) => {
283
318
  return /* @__PURE__ */ jsx(StyledInput, { className, error, warning, ...rest });
284
319
  };
285
320
  var Input_default = Input;
286
- var StyledInput = styled17.input`
321
+ var StyledInput = styled18.input`
287
322
  ${baseInputStyles}
288
323
 
289
324
  ${({ error }) => error && errorStyles}
@@ -303,9 +338,16 @@ var useDarkMode = () => {
303
338
  }, []);
304
339
  return isDark;
305
340
  };
306
-
307
- // src/assets/icons/Checkmark.svg?react
308
- var Checkmark_default = "./Checkmark-OGDFVW3O.svg?react";
341
+ var CheckmarkIcon = (props) => /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx(
342
+ "path",
343
+ {
344
+ d: "M2 6L5 9L10 2",
345
+ stroke: "currentColor",
346
+ strokeWidth: "2",
347
+ strokeLinecap: "round",
348
+ strokeLinejoin: "round"
349
+ }
350
+ ) });
309
351
  var Checkbox = ({
310
352
  className,
311
353
  danger,
@@ -336,13 +378,13 @@ var Checkbox = ({
336
378
  darkMode,
337
379
  disabled,
338
380
  size,
339
- children: /* @__PURE__ */ jsx(Checkmark_default, {})
381
+ children: /* @__PURE__ */ jsx(CheckmarkIcon, {})
340
382
  }
341
383
  )
342
384
  ] });
343
385
  };
344
386
  var Checkbox_default = Checkbox;
345
- var CheckboxWrapper = styled17.label`
387
+ var CheckboxWrapper = styled18.label`
346
388
  position: relative;
347
389
  display: inline-block;
348
390
  cursor: pointer;
@@ -363,7 +405,7 @@ var CheckboxWrapper = styled17.label`
363
405
  `}
364
406
  }
365
407
  `;
366
- var StyledCheckbox = styled17.input`
408
+ var StyledCheckbox = styled18.input`
367
409
  position: absolute;
368
410
  opacity: 0;
369
411
  cursor: pointer;
@@ -381,7 +423,7 @@ var StyledCheckbox = styled17.input`
381
423
  cursor: not-allowed;
382
424
  }
383
425
  `;
384
- var CheckmarkWrapper = styled17.span`
426
+ var CheckmarkWrapper = styled18.span`
385
427
  display: inline-flex;
386
428
  align-items: center;
387
429
  justify-content: center;
@@ -391,6 +433,7 @@ var CheckmarkWrapper = styled17.span`
391
433
  border-radius: 4px;
392
434
  transition: all 0.2s ease;
393
435
  color: transparent;
436
+ cursor: pointer;
394
437
 
395
438
  svg {
396
439
  width: 60%;
@@ -402,9 +445,11 @@ var CheckmarkWrapper = styled17.span`
402
445
  return darkMode ? css`
403
446
  background-color: ${colors.baseColors.grey1};
404
447
  border: 1px solid ${colors.baseColors.grey4};
448
+ cursor: not-allowed;
405
449
  ` : css`
406
450
  background-color: ${colors.baseColors.grey7};
407
451
  border: 1px solid ${colors.baseColors.grey7};
452
+ cursor: not-allowed;
408
453
  `;
409
454
  }
410
455
  if (checked) {
@@ -430,6 +475,72 @@ var CheckmarkWrapper = styled17.span`
430
475
  `;
431
476
  }}
432
477
  `;
478
+ var XIcon = (props) => /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx(
479
+ "path",
480
+ {
481
+ d: "M4 4L12 12M12 4L4 12",
482
+ stroke: "currentColor",
483
+ strokeWidth: "2",
484
+ strokeLinecap: "round",
485
+ strokeLinejoin: "round"
486
+ }
487
+ ) });
488
+ var ErrorNotification = ({
489
+ message,
490
+ className,
491
+ darkMode: darkModeProp
492
+ }) => {
493
+ const autoDarkMode = useDarkMode();
494
+ const darkMode = darkModeProp !== void 0 ? darkModeProp : autoDarkMode;
495
+ const isLongMessage = message.length > 120;
496
+ return /* @__PURE__ */ jsxs(ErrorNotificationWrapper, { className, darkMode, isLong: isLongMessage, children: [
497
+ /* @__PURE__ */ jsx(IconContainer, { darkMode, isLong: isLongMessage, children: /* @__PURE__ */ jsx(XIcon, {}) }),
498
+ /* @__PURE__ */ jsx(MessageText, { darkMode, isLong: isLongMessage, children: message })
499
+ ] });
500
+ };
501
+ var ErrorNotification_default = ErrorNotification;
502
+ var ErrorNotificationWrapper = styled18.div`
503
+ display: flex;
504
+ align-items: ${({ isLong }) => isLong ? "flex-start" : "center"};
505
+ gap: 12px;
506
+ min-height: 74px;
507
+ max-width: 356px;
508
+ padding: ${({ isLong }) => isLong ? "20px" : "0"} 16px;
509
+ border-radius: 6px;
510
+ background-color: ${getOpacity(colors.accents.error, 30)};
511
+ border: 1px solid ${colors.accents.error};
512
+ color: ${({ darkMode }) => darkMode ? colors.baseColors.white1 : colors.baseColors.darkBlue1};
513
+ font-family: ${typography.fontFamily.primary};
514
+ font-size: ${FONT_SIZES.m}px;
515
+ font-weight: ${FONT_WEIGHTS.normal};
516
+ line-height: ${typography.lineHeight.normal};
517
+ `;
518
+ var IconContainer = styled18.div`
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
+ flex-shrink: 0;
523
+ width: 32px;
524
+ height: 32px;
525
+ margin: 0;
526
+ border-radius: 50%;
527
+ background-color: ${getOpacity(colors.baseColors.white1, 30)};
528
+ color: ${colors.accents.error};
529
+
530
+ svg {
531
+ width: 16px;
532
+ height: 16px;
533
+ }
534
+ `;
535
+ var MessageText = styled18.p`
536
+ flex: 1;
537
+ margin: 0;
538
+ padding: 0;
539
+ color: ${({ darkMode }) => darkMode ? colors.baseColors.white1 : colors.baseColors.darkBlue1};
540
+ font-weight: ${FONT_WEIGHTS.bold};
541
+ word-wrap: break-word;
542
+ word-break: break-word;
543
+ `;
433
544
  var Label = ({ className, htmlFor, children, ...rest }) => {
434
545
  return /* @__PURE__ */ jsx("label", { className, htmlFor, ...rest, children });
435
546
  };
@@ -438,7 +549,7 @@ var Textarea = ({ className, error, warning, ...rest }) => {
438
549
  return /* @__PURE__ */ jsx(StyledTextarea, { className, error, warning, ...rest });
439
550
  };
440
551
  var Textarea_default = Textarea;
441
- var StyledTextarea = styled17.textarea`
552
+ var StyledTextarea = styled18.textarea`
442
553
  ${baseInputStyles}
443
554
  resize: vertical;
444
555
  min-height: 80px;
@@ -466,7 +577,7 @@ var Tab = ({
466
577
  );
467
578
  };
468
579
  var Tab_default = Tab;
469
- var StyledTab = styled17.div`
580
+ var StyledTab = styled18.div`
470
581
  display: inline-block;
471
582
  padding: 8px 16px;
472
583
  user-select: none;
@@ -487,7 +598,7 @@ var StyledTab = styled17.div`
487
598
  }
488
599
  `}
489
600
  `;
490
- var HelperText = styled17.div`
601
+ var HelperText = styled18.div`
491
602
  margin-top: 4px;
492
603
  font-size: ${typography.fontSize.xs}px;
493
604
  color: ${({ error, warning }) => {
@@ -527,7 +638,7 @@ function GroupBadge({ role, status, children }) {
527
638
  const displayText = status?.toLowerCase() === USER_STATUS.INVITED ? "Invited" : children;
528
639
  return /* @__PURE__ */ jsx(Badge, { badgeColor, children: displayText });
529
640
  }
530
- var Badge = styled17.div`
641
+ var Badge = styled18.div`
531
642
  display: inline-flex;
532
643
  padding: 8px 28px;
533
644
  border-radius: 100px;
@@ -562,7 +673,7 @@ function UserAvatar({
562
673
  return /* @__PURE__ */ jsx(ColourAvatar, { badgeColor, size, children: initials });
563
674
  }
564
675
  var UserAvatar_default = UserAvatar;
565
- var ColourAvatar = styled17.div`
676
+ var ColourAvatar = styled18.div`
566
677
  width: ${({ size }) => typeof size === "number" ? `${size}px` : size === "large" ? "56px" : "40px"};
567
678
  height: ${({ size }) => typeof size === "number" ? `${size}px` : size === "large" ? "56px" : "40px"};
568
679
  border-radius: 50%;
@@ -576,7 +687,7 @@ var ColourAvatar = styled17.div`
576
687
  font-weight: ${FONT_WEIGHTS.normal};
577
688
  flex-shrink: 0;
578
689
  `;
579
- var ProfileAvatar = styled17(ColourAvatar)`
690
+ var ProfileAvatar = styled18(ColourAvatar)`
580
691
  color: #fff;
581
692
  background: ${colors.gradients.gradient1};
582
693
  border: none;
@@ -621,7 +732,7 @@ var FormField = ({
621
732
  displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
622
733
  ] });
623
734
  };
624
- var FormFieldWrapper = styled17.div`
735
+ var FormFieldWrapper = styled18.div`
625
736
  display: flex;
626
737
  flex-direction: column;
627
738
 
@@ -669,7 +780,7 @@ var FormFieldTextarea = ({
669
780
  displayText && /* @__PURE__ */ jsx(HelperText, { error: hasError, warning: hasWarning, children: displayText })
670
781
  ] });
671
782
  };
672
- var FormFieldWrapper2 = styled17.div`
783
+ var FormFieldWrapper2 = styled18.div`
673
784
  display: flex;
674
785
  flex-direction: column;
675
786
 
@@ -680,16 +791,16 @@ var FormFieldWrapper2 = styled17.div`
680
791
  }
681
792
  `;
682
793
  var FormFieldTextarea_default = FormFieldTextarea;
683
- var SearchContainer = styled17.div`
794
+ var SearchContainer = styled18.div`
684
795
  width: ${({ width }) => typeof width === "number" ? `${width}px` : width || "208px"};
685
796
  `;
686
- var InputWrapper = styled17.div`
797
+ var InputWrapper = styled18.div`
687
798
  position: relative;
688
799
  width: 100%;
689
800
  display: flex;
690
801
  align-items: center;
691
802
  `;
692
- var IconWrapper = styled17.div`
803
+ var IconWrapper = styled18.div`
693
804
  position: absolute;
694
805
  left: 17px;
695
806
  top: 50%;
@@ -701,7 +812,7 @@ var IconWrapper = styled17.div`
701
812
  pointer-events: none;
702
813
  z-index: 2;
703
814
  `;
704
- var StyledInput2 = styled17(Input_default)`
815
+ var StyledInput2 = styled18(Input_default)`
705
816
  width: 100%;
706
817
  padding-right: ${({ hasClearButton }) => hasClearButton ? "32px" : "17px"};
707
818
  padding-left: ${({ hasIcon }) => hasIcon ? "44px" : "17px"};
@@ -713,7 +824,7 @@ var StyledInput2 = styled17(Input_default)`
713
824
  padding-left: ${({ hasIcon }) => hasIcon ? "43px" : "16px"};
714
825
  }
715
826
  `;
716
- var ClearButton = styled17.button`
827
+ var ClearButton = styled18.button`
717
828
  position: absolute;
718
829
  right: 8px;
719
830
  top: 50%;
@@ -739,7 +850,7 @@ var ClearButton = styled17.button`
739
850
  border-radius: 4px;
740
851
  }
741
852
  `;
742
- var ClearIcon = styled17.svg`
853
+ var ClearIcon = styled18.svg`
743
854
  width: 16px;
744
855
  height: 16px;
745
856
  stroke-width: 2;
@@ -789,7 +900,7 @@ function TableElement({ children, ...rest }) {
789
900
  return /* @__PURE__ */ jsx(StyledTable, { ...rest, children });
790
901
  }
791
902
  var Table_default = TableElement;
792
- var StyledTable = styled17.table`
903
+ var StyledTable = styled18.table`
793
904
  width: 100%;
794
905
  border-collapse: separate;
795
906
  border-spacing: 0 4px;
@@ -798,7 +909,7 @@ function TableHeader({ alignRight, children, ...rest }) {
798
909
  return /* @__PURE__ */ jsx(StyledTableHeader, { alignRight, ...rest, children });
799
910
  }
800
911
  var TableHeader_default = TableHeader;
801
- var StyledTableHeader = styled17.th`
912
+ var StyledTableHeader = styled18.th`
802
913
  padding-bottom: 12px;
803
914
  text-align: ${({ alignRight }) => alignRight ? "right" : "left"};
804
915
  font-size: ${FONT_SIZES.xs}px;
@@ -810,17 +921,17 @@ function TableCell({ children, colSpan, ...rest }) {
810
921
  return /* @__PURE__ */ jsx(StyledTableCell, { colSpan, ...rest, children });
811
922
  }
812
923
  var TableCell_default = TableCell;
813
- var StyledTableCell = styled17.td`
924
+ var StyledTableCell = styled18.td`
814
925
 
815
926
  `;
816
927
  function TableRow({ children, ...rest }) {
817
928
  return /* @__PURE__ */ jsx(StyledTableRow, { ...rest, children });
818
929
  }
819
930
  var TableRow_default = TableRow;
820
- var StyledTableRow = styled17.tr`
931
+ var StyledTableRow = styled18.tr`
821
932
  /* Base row styling */
822
933
  `;
823
- var TableRowWrapper = styled17.div`
934
+ var TableRowWrapper = styled18.div`
824
935
  border-radius: 6px;
825
936
  border: 1px solid ${colors.baseColors.grey7};
826
937
  display: flex;
@@ -828,16 +939,16 @@ var TableRowWrapper = styled17.div`
828
939
  justify-content: space-between;
829
940
  padding: 12px 24px;
830
941
  `;
831
- var CheckboxWrapper2 = styled17.div`
942
+ var CheckboxWrapper2 = styled18.div`
832
943
  display: flex;
833
944
  align-items: center;
834
945
  `;
835
- var ActionsWrapper = styled17.div`
946
+ var ActionsWrapper = styled18.div`
836
947
  display: flex;
837
948
  align-items: center;
838
949
  justify-content: flex-end;
839
950
  `;
840
- var AlignedTableCell = styled17(TableCell_default)`
951
+ var AlignedTableCell = styled18(TableCell_default)`
841
952
  padding-top: 12px;
842
953
  padding-bottom: 12px;
843
954
  padding-left: ${({ alignRight }) => alignRight ? "0" : "24px"};
@@ -849,29 +960,29 @@ var AlignedTableCell = styled17(TableCell_default)`
849
960
  ${({ isFirst }) => isFirst && `border-top-left-radius: 6px; border-bottom-left-radius: 6px;`}
850
961
  ${({ isLast }) => isLast && `border-top-right-radius: 6px; border-bottom-right-radius: 6px;`}
851
962
  `;
852
- var CellContent = styled17.div`
963
+ var CellContent = styled18.div`
853
964
  display: flex;
854
965
  align-items: center;
855
966
  justify-content: ${({ alignRight }) => alignRight ? "flex-end" : "flex-start"};
856
967
  flex: ${({ alignRight }) => alignRight ? "0 0 auto" : "1"};
857
968
  min-width: 0;
858
969
  `;
859
- var TableWrapper = styled17.div`
970
+ var TableWrapper = styled18.div`
860
971
  margin-top: 32px;
861
972
  `;
862
- var EmptyState = styled17.div`
973
+ var EmptyState = styled18.div`
863
974
  padding: 24px;
864
975
  text-align: center;
865
976
  display: flex;
866
977
  flex-direction: column;
867
978
  gap: 8px;
868
979
  `;
869
- var EmptyHeader = styled17.div`
980
+ var EmptyHeader = styled18.div`
870
981
  font-size: 26px;
871
982
  font-weight: 700;
872
983
  color: ${colors.baseColors.darkBlue1};
873
984
  `;
874
- var EmptySubheader = styled17.div`
985
+ var EmptySubheader = styled18.div`
875
986
  font-size: 12px;
876
987
  font-weight: 500;
877
988
  color: ${colors.baseColors.grey3};
@@ -981,6 +1092,6 @@ function Table({
981
1092
  }
982
1093
  var DataTable_default = Table;
983
1094
 
984
- export { Badge_default as Badge, Button_default as Button, Checkbox_default as Checkbox, 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 };
1095
+ export { Badge_default as Badge, Button_default as Button, Checkbox_default as Checkbox, ErrorNotification_default as ErrorNotification, 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 };
985
1096
  //# sourceMappingURL=index.js.map
986
1097
  //# sourceMappingURL=index.js.map