@indico-data/design-system 2.18.0 → 2.20.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 (58) hide show
  1. package/lib/index.css +55 -33
  2. package/lib/index.d.ts +34 -20
  3. package/lib/index.esm.css +55 -33
  4. package/lib/index.esm.js +1666 -85
  5. package/lib/index.esm.js.map +1 -1
  6. package/lib/index.js +1669 -86
  7. package/lib/index.js.map +1 -1
  8. package/lib/src/components/forms/input/Input.d.ts +5 -7
  9. package/lib/src/components/forms/passwordInput/PasswordInput.d.ts +5 -7
  10. package/lib/src/components/forms/subcomponents/Label.d.ts +6 -3
  11. package/lib/src/components/forms/textarea/Textarea.d.ts +5 -7
  12. package/lib/src/components/index.d.ts +2 -0
  13. package/lib/src/components/menu/Menu.d.ts +5 -0
  14. package/lib/src/components/menu/Menu.stories.d.ts +6 -0
  15. package/lib/src/components/menu/Menu.test.d.ts +1 -0
  16. package/lib/src/components/menu/index.d.ts +1 -0
  17. package/lib/src/components/popper/Popper.d.ts +12 -0
  18. package/lib/src/components/popper/Popper.stories.d.ts +6 -0
  19. package/lib/src/components/popper/Popper.test.d.ts +1 -0
  20. package/lib/src/components/popper/index.d.ts +1 -0
  21. package/lib/src/hooks/useClickOutside.d.ts +2 -0
  22. package/lib/src/index.d.ts +2 -0
  23. package/lib/src/storybook/labelArgTypes.d.ts +3 -0
  24. package/package.json +2 -1
  25. package/src/components/forms/input/Input.mdx +15 -2
  26. package/src/components/forms/input/Input.stories.tsx +10 -45
  27. package/src/components/forms/input/Input.tsx +22 -15
  28. package/src/components/forms/input/styles/Input.scss +0 -11
  29. package/src/components/forms/passwordInput/PasswordInput.mdx +10 -8
  30. package/src/components/forms/passwordInput/PasswordInput.stories.tsx +3 -44
  31. package/src/components/forms/passwordInput/PasswordInput.tsx +20 -15
  32. package/src/components/forms/passwordInput/styles/PasswordInput.scss +0 -11
  33. package/src/components/forms/subcomponents/Label.tsx +29 -6
  34. package/src/components/forms/subcomponents/__tests__/Label.test.tsx +63 -15
  35. package/src/components/forms/textarea/Textarea.mdx +12 -2
  36. package/src/components/forms/textarea/Textarea.stories.tsx +4 -46
  37. package/src/components/forms/textarea/Textarea.tsx +15 -13
  38. package/src/components/forms/textarea/styles/Textarea.scss +0 -11
  39. package/src/components/index.ts +2 -0
  40. package/src/components/menu/Menu.mdx +15 -0
  41. package/src/components/menu/Menu.stories.tsx +56 -0
  42. package/src/components/menu/Menu.test.tsx +88 -0
  43. package/src/components/menu/Menu.tsx +20 -0
  44. package/src/components/menu/index.ts +1 -0
  45. package/src/components/menu/styles/Menu.scss +19 -0
  46. package/src/components/menu/styles/_variables.scss +15 -0
  47. package/src/components/popper/Popper.mdx +79 -0
  48. package/src/components/popper/Popper.stories.tsx +161 -0
  49. package/src/components/popper/Popper.test.tsx +68 -0
  50. package/src/components/popper/Popper.tsx +57 -0
  51. package/src/components/popper/index.ts +1 -0
  52. package/src/components/popper/styles/Popper.scss +11 -0
  53. package/src/components/popper/styles/_variables.scss +15 -0
  54. package/src/hooks/useClickOutside.tsx +22 -0
  55. package/src/index.ts +2 -0
  56. package/src/legacy/components/buttons/commonStyles.ts +0 -4
  57. package/src/storybook/labelArgTypes.ts +50 -0
  58. package/src/styles/index.scss +2 -0
package/lib/index.css CHANGED
@@ -982,17 +982,6 @@
982
982
  color: var(--pf-input-text-color);
983
983
  cursor: pointer;
984
984
  }
985
- .form-control .is-visually-hidden {
986
- position: absolute;
987
- width: 1px;
988
- height: 1px;
989
- padding: 0;
990
- margin: -1px;
991
- overflow: hidden;
992
- clip: rect(0, 0, 0, 0);
993
- white-space: nowrap;
994
- border: 0;
995
- }
996
985
  .form-control .form-label {
997
986
  margin-bottom: var(--pf-margin-2);
998
987
  }
@@ -1252,17 +1241,6 @@
1252
1241
  color: var(--pf-textarea-help-text-color);
1253
1242
  font-size: var(--pf-font-size-subtitle2);
1254
1243
  }
1255
- .form-control .is-visually-hidden {
1256
- position: absolute;
1257
- width: 1px;
1258
- height: 1px;
1259
- padding: 0;
1260
- margin: -1px;
1261
- overflow: hidden;
1262
- clip: rect(0, 0, 0, 0);
1263
- white-space: nowrap;
1264
- border: 0;
1265
- }
1266
1244
  .form-control .form-label {
1267
1245
  margin-bottom: var(--pf-margin-2);
1268
1246
  }
@@ -1361,17 +1339,6 @@
1361
1339
  color: var(--pf-password-input-text-color);
1362
1340
  cursor: pointer;
1363
1341
  }
1364
- .form-control .is-visually-hidden {
1365
- position: absolute;
1366
- width: 1px;
1367
- height: 1px;
1368
- padding: 0;
1369
- margin: -1px;
1370
- overflow: hidden;
1371
- clip: rect(0, 0, 0, 0);
1372
- white-space: nowrap;
1373
- border: 0;
1374
- }
1375
1342
  .form-control .form-label {
1376
1343
  margin-bottom: var(--pf-margin-2);
1377
1344
  }
@@ -1642,6 +1609,61 @@ form {
1642
1609
  box-shadow: var(--pf-dropshadow);
1643
1610
  }
1644
1611
 
1612
+ :root,
1613
+ :root [data-theme=light],
1614
+ :root [data-theme=dark] {
1615
+ --pf-menu-rounded: var(--pf-rounded);
1616
+ --pf-menu-item-hover-color: var(--pf-primary-color-100);
1617
+ --pf-menu-item-background-color: var(--pf-white-color);
1618
+ --pf-menu-item-color: var(--pf-gray-color);
1619
+ }
1620
+
1621
+ :root [data-theme=dark] {
1622
+ --pf-menu-item-hover-color: var(--pf-primary-color-300);
1623
+ --pf-menu-item-background-color: var(--pf-primary-color-600);
1624
+ --pf-menu-item-color: var(--pf-gray-color-100);
1625
+ }
1626
+
1627
+ .menu {
1628
+ border-radius: var(--pf-menu-rounded);
1629
+ }
1630
+ .menu .menu-item {
1631
+ width: 100%;
1632
+ background: var(--pf-menu-item-background-color);
1633
+ color: var(--pf-menu-item-color);
1634
+ display: block;
1635
+ width: 100%;
1636
+ text-align: left;
1637
+ border: none;
1638
+ }
1639
+ .menu .menu-item:hover {
1640
+ background: var(--pf-menu-item-hover-color);
1641
+ }
1642
+
1643
+ :root,
1644
+ :root [data-theme=light],
1645
+ :root [data-theme=dark] {
1646
+ --pf-popper-background-color: var(--pf-white-color);
1647
+ --pf-popper-border-color: var(--pf-gray-color-900);
1648
+ --pf-popper-border-radius: var(--pf-rounded);
1649
+ --pf-popper-padding: var(--pf-padding-2);
1650
+ }
1651
+
1652
+ :root [data-theme=dark] {
1653
+ --pf-popper-background-color: var(--pf-primary-color-600);
1654
+ --pf-popper-border-color: var(--pf-gray-color);
1655
+ }
1656
+
1657
+ .popper-container {
1658
+ z-index: 99;
1659
+ }
1660
+
1661
+ .popper-content {
1662
+ border-radius: var(--pf-popper-border-radius);
1663
+ border: 1px solid var(--pf-popper-border-color);
1664
+ background: var(--pf-popper-background-color);
1665
+ }
1666
+
1645
1667
  .rdp {
1646
1668
  --rdp-cell-size: 40px;
1647
1669
  --rdp-accent-color: #6833d0;
package/lib/index.d.ts CHANGED
@@ -8,6 +8,7 @@ import { DateRange } from 'react-day-picker';
8
8
  import { ContainerProps, RowProps, ColProps } from 'react-grid-system';
9
9
  import { TableProps as TableProps$1, Direction as Direction$1, Alignment as Alignment$1 } from 'react-data-table-component';
10
10
  import { Props as Props$r } from 'react-select';
11
+ import { Placement } from '@floating-ui/react-dom';
11
12
 
12
13
  declare const GlobalStyles: () => react_jsx_runtime.JSX.Element;
13
14
 
@@ -919,23 +920,28 @@ declare const Icon: ({ name, size, className, ariaLabel, ...props }: IconProps)
919
920
 
920
921
  declare const Table: <T>(props: TableProps<T>) => react_jsx_runtime.JSX.Element;
921
922
 
922
- interface InputProps {
923
+ interface LabelProps {
923
924
  label: string;
924
925
  name: string;
926
+ isRequired?: boolean;
927
+ }
928
+ interface WithLabelProps extends LabelProps {
929
+ hasHiddenLabel?: boolean;
930
+ }
931
+
932
+ interface InputProps extends WithLabelProps {
925
933
  value?: string | undefined;
926
- placeholder: string;
934
+ placeholder?: string;
927
935
  onChange: (e: React$1.ChangeEvent<HTMLInputElement>) => void;
928
- isRequired?: boolean;
929
936
  isDisabled?: boolean;
930
937
  errorMessage?: string | undefined;
931
938
  helpText?: string;
932
- hasHiddenLabel?: boolean;
933
939
  iconName?: IconName$1;
934
940
  isClearable?: boolean;
935
941
  className?: string;
936
942
  defaultValue?: string;
937
943
  }
938
- declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
944
+ declare const LabeledInput: React$1.ForwardRefExoticComponent<Omit<InputProps & React$1.RefAttributes<HTMLInputElement> & WithLabelProps, "ref"> & React$1.RefAttributes<any>>;
939
945
 
940
946
  interface RadioProps {
941
947
  ref?: React$1.LegacyRef<HTMLInputElement>;
@@ -975,18 +981,14 @@ interface ToggleProps {
975
981
  }
976
982
  declare const Toggle: React$1.ForwardRefExoticComponent<Omit<ToggleProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
977
983
 
978
- interface TextareaProps {
984
+ interface TextareaProps extends WithLabelProps {
979
985
  ref?: React$1.LegacyRef<HTMLTextAreaElement>;
980
- label: string;
981
- name: string;
982
- placeholder: string;
986
+ placeholder?: string;
983
987
  value?: string | undefined;
984
988
  onChange: (e: React$1.ChangeEvent<HTMLTextAreaElement>) => void;
985
- isRequired?: boolean;
986
989
  isDisabled?: boolean;
987
990
  errorMessage?: string | undefined;
988
991
  helpText?: string;
989
- hasHiddenLabel?: boolean;
990
992
  rows?: number;
991
993
  cols?: number;
992
994
  readonly?: boolean;
@@ -996,24 +998,20 @@ interface TextareaProps {
996
998
  autofocus?: boolean;
997
999
  defaultValue?: string;
998
1000
  }
999
- declare const Textarea: React$1.ForwardRefExoticComponent<Omit<TextareaProps, "ref"> & React$1.RefAttributes<HTMLTextAreaElement>>;
1001
+ declare const LabeledTextarea: React$1.ForwardRefExoticComponent<Omit<Omit<TextareaProps, "ref"> & React$1.RefAttributes<HTMLTextAreaElement> & WithLabelProps, "ref"> & React$1.RefAttributes<any>>;
1000
1002
 
1001
- interface PasswordInputProps {
1003
+ interface PasswordInputProps extends WithLabelProps {
1002
1004
  ref?: React$1.LegacyRef<HTMLInputElement>;
1003
- label: string;
1004
1005
  value?: string | undefined;
1005
- name: string;
1006
- placeholder: string;
1006
+ placeholder?: string;
1007
1007
  onChange: (e: React$1.ChangeEvent<HTMLInputElement>) => void;
1008
- isRequired?: boolean;
1009
1008
  isDisabled?: boolean;
1010
1009
  errorMessage?: string | undefined;
1011
1010
  helpText?: string;
1012
- hasHiddenLabel?: boolean;
1013
1011
  hasShowPassword?: boolean;
1014
1012
  defaultValue?: string;
1015
1013
  }
1016
- declare const PasswordInput: React$1.ForwardRefExoticComponent<Omit<PasswordInputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
1014
+ declare const LabeledPasswordInput: React$1.ForwardRefExoticComponent<Omit<Omit<PasswordInputProps, "ref"> & React$1.RefAttributes<HTMLInputElement> & WithLabelProps, "ref"> & React$1.RefAttributes<any>>;
1017
1015
 
1018
1016
  interface SelectProps<OptionType extends SelectOption> extends Props$r<OptionType> {
1019
1017
  options: OptionType[];
@@ -1052,4 +1050,20 @@ type Props = {
1052
1050
  };
1053
1051
  declare const Card: React$1.FC<Props>;
1054
1052
 
1055
- export { animation as ANIMATION, Radio$1 as AbstractRadio, RadioGroup as AbstractRadioGroup, Accordion, breakpoints as BREAKPOINT, BarSpinner, BorderSelect, Button, allColors as COLORS, Card, Checkbox, CirclePulse, CircleSpinner, Col, ConfirmModal, Container, DatePicker, EditableInput, Form, GlobalStyles, Icon, IconButton, Input, Button$1 as LegacyButton, ListTable, LoadingAwareContainer, LoadingList, margin as MARGINS, MATH, mediaQueries as MEDIA_QUERIES, ModalBase, MultiCombobox, NoInputDatePicker, NumberInput, padding as PADDINGS, Pagination, PasswordInput, PercentageRing, Radio$2 as Radio, RadioGroup$1 as RadioGroup, Radio as RadioInput, RandomLoadingMessage, Row, spacings as SPACING, SearchInput, Section, SectionBlock, SectionBody, SectionHeader, SectionTable, Select$1 as Select, Select as SelectInput, Shrug, SingleCombobox, Skeleton, typography as TYPOGRAPHY, Table, TextInput, TextTruncate, Textarea, Toggle$1 as Toggle, Toggle as ToggleInput, Tooltip, color as colorUtils, number as numberUtils, string as stringUtils };
1053
+ type PopperProps = {
1054
+ children: React$1.ReactNode;
1055
+ referenceElement: HTMLElement | null;
1056
+ isOpen: boolean;
1057
+ onClose: () => void;
1058
+ ariaLabel: string;
1059
+ placement?: Placement;
1060
+ offsetValue?: number;
1061
+ };
1062
+ declare function Popper({ children, referenceElement, isOpen, onClose, ariaLabel, placement, offsetValue, }: PopperProps): react_jsx_runtime.JSX.Element | null;
1063
+
1064
+ type MenuProps = {
1065
+ children: React$1.ReactNode;
1066
+ };
1067
+ declare function Menu({ children }: MenuProps): react_jsx_runtime.JSX.Element;
1068
+
1069
+ export { animation as ANIMATION, Radio$1 as AbstractRadio, RadioGroup as AbstractRadioGroup, Accordion, breakpoints as BREAKPOINT, BarSpinner, BorderSelect, Button, allColors as COLORS, Card, Checkbox, CirclePulse, CircleSpinner, Col, ConfirmModal, Container, DatePicker, EditableInput, Form, GlobalStyles, Icon, IconButton, LabeledInput as Input, Button$1 as LegacyButton, ListTable, LoadingAwareContainer, LoadingList, margin as MARGINS, MATH, mediaQueries as MEDIA_QUERIES, Menu, ModalBase, MultiCombobox, NoInputDatePicker, NumberInput, padding as PADDINGS, Pagination, LabeledPasswordInput as PasswordInput, PercentageRing, Popper, Radio$2 as Radio, RadioGroup$1 as RadioGroup, Radio as RadioInput, RandomLoadingMessage, Row, spacings as SPACING, SearchInput, Section, SectionBlock, SectionBody, SectionHeader, SectionTable, Select$1 as Select, Select as SelectInput, Shrug, SingleCombobox, Skeleton, typography as TYPOGRAPHY, Table, TextInput, TextTruncate, LabeledTextarea as Textarea, Toggle$1 as Toggle, Toggle as ToggleInput, Tooltip, color as colorUtils, number as numberUtils, string as stringUtils };
package/lib/index.esm.css CHANGED
@@ -982,17 +982,6 @@
982
982
  color: var(--pf-input-text-color);
983
983
  cursor: pointer;
984
984
  }
985
- .form-control .is-visually-hidden {
986
- position: absolute;
987
- width: 1px;
988
- height: 1px;
989
- padding: 0;
990
- margin: -1px;
991
- overflow: hidden;
992
- clip: rect(0, 0, 0, 0);
993
- white-space: nowrap;
994
- border: 0;
995
- }
996
985
  .form-control .form-label {
997
986
  margin-bottom: var(--pf-margin-2);
998
987
  }
@@ -1252,17 +1241,6 @@
1252
1241
  color: var(--pf-textarea-help-text-color);
1253
1242
  font-size: var(--pf-font-size-subtitle2);
1254
1243
  }
1255
- .form-control .is-visually-hidden {
1256
- position: absolute;
1257
- width: 1px;
1258
- height: 1px;
1259
- padding: 0;
1260
- margin: -1px;
1261
- overflow: hidden;
1262
- clip: rect(0, 0, 0, 0);
1263
- white-space: nowrap;
1264
- border: 0;
1265
- }
1266
1244
  .form-control .form-label {
1267
1245
  margin-bottom: var(--pf-margin-2);
1268
1246
  }
@@ -1361,17 +1339,6 @@
1361
1339
  color: var(--pf-password-input-text-color);
1362
1340
  cursor: pointer;
1363
1341
  }
1364
- .form-control .is-visually-hidden {
1365
- position: absolute;
1366
- width: 1px;
1367
- height: 1px;
1368
- padding: 0;
1369
- margin: -1px;
1370
- overflow: hidden;
1371
- clip: rect(0, 0, 0, 0);
1372
- white-space: nowrap;
1373
- border: 0;
1374
- }
1375
1342
  .form-control .form-label {
1376
1343
  margin-bottom: var(--pf-margin-2);
1377
1344
  }
@@ -1642,6 +1609,61 @@ form {
1642
1609
  box-shadow: var(--pf-dropshadow);
1643
1610
  }
1644
1611
 
1612
+ :root,
1613
+ :root [data-theme=light],
1614
+ :root [data-theme=dark] {
1615
+ --pf-menu-rounded: var(--pf-rounded);
1616
+ --pf-menu-item-hover-color: var(--pf-primary-color-100);
1617
+ --pf-menu-item-background-color: var(--pf-white-color);
1618
+ --pf-menu-item-color: var(--pf-gray-color);
1619
+ }
1620
+
1621
+ :root [data-theme=dark] {
1622
+ --pf-menu-item-hover-color: var(--pf-primary-color-300);
1623
+ --pf-menu-item-background-color: var(--pf-primary-color-600);
1624
+ --pf-menu-item-color: var(--pf-gray-color-100);
1625
+ }
1626
+
1627
+ .menu {
1628
+ border-radius: var(--pf-menu-rounded);
1629
+ }
1630
+ .menu .menu-item {
1631
+ width: 100%;
1632
+ background: var(--pf-menu-item-background-color);
1633
+ color: var(--pf-menu-item-color);
1634
+ display: block;
1635
+ width: 100%;
1636
+ text-align: left;
1637
+ border: none;
1638
+ }
1639
+ .menu .menu-item:hover {
1640
+ background: var(--pf-menu-item-hover-color);
1641
+ }
1642
+
1643
+ :root,
1644
+ :root [data-theme=light],
1645
+ :root [data-theme=dark] {
1646
+ --pf-popper-background-color: var(--pf-white-color);
1647
+ --pf-popper-border-color: var(--pf-gray-color-900);
1648
+ --pf-popper-border-radius: var(--pf-rounded);
1649
+ --pf-popper-padding: var(--pf-padding-2);
1650
+ }
1651
+
1652
+ :root [data-theme=dark] {
1653
+ --pf-popper-background-color: var(--pf-primary-color-600);
1654
+ --pf-popper-border-color: var(--pf-gray-color);
1655
+ }
1656
+
1657
+ .popper-container {
1658
+ z-index: 99;
1659
+ }
1660
+
1661
+ .popper-content {
1662
+ border-radius: var(--pf-popper-border-radius);
1663
+ border: 1px solid var(--pf-popper-border-color);
1664
+ background: var(--pf-popper-background-color);
1665
+ }
1666
+
1645
1667
  .rdp {
1646
1668
  --rdp-cell-size: 40px;
1647
1669
  --rdp-accent-color: #6833d0;