colibri-ui 0.8.76 → 0.8.78

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 (128) hide show
  1. package/Autocomplete/Autocomplete.d.ts +6 -0
  2. package/Autocomplete/Autocomplete.js +298 -0
  3. package/Autocomplete/Autocomplete.module.css +147 -0
  4. package/Autocomplete/index.d.ts +2 -0
  5. package/Autocomplete/index.js +7 -0
  6. package/Autocomplete/index.props.d.ts +39 -0
  7. package/Autocomplete/package.json +9 -0
  8. package/Button/tokens.d.ts +78 -0
  9. package/Button/tokens.js +84 -0
  10. package/Calendar/Calendar.js +3 -1
  11. package/Input/index.d.ts +1 -1
  12. package/Input/index.js +20 -14
  13. package/Input/index.props.d.ts +4 -1
  14. package/List/List.d.ts +5 -0
  15. package/List/List.js +161 -0
  16. package/List/List.module.css +185 -0
  17. package/List/index.d.ts +2 -0
  18. package/List/index.js +9 -0
  19. package/List/index.props.d.ts +43 -0
  20. package/List/package.json +9 -0
  21. package/Modal/Modal.module.css +14 -7
  22. package/Modal/components/Body/Body.module.css +12 -0
  23. package/Modal/components/Body/index.d.ts +3 -0
  24. package/Modal/components/Body/index.js +27 -0
  25. package/Modal/components/Body/index.props.d.ts +1 -0
  26. package/Modal/components/Close/index.js +5 -2
  27. package/Modal/components/Close/index.props.d.ts +1 -0
  28. package/Modal/components/Footer/Footer.module.css +10 -0
  29. package/Modal/components/Footer/index.d.ts +3 -0
  30. package/Modal/components/Footer/index.js +23 -0
  31. package/Modal/components/Footer/index.props.d.ts +1 -0
  32. package/Modal/components/Header/Header.module.css +32 -0
  33. package/Modal/components/Header/index.d.ts +3 -0
  34. package/Modal/components/Header/index.js +37 -0
  35. package/Modal/components/Header/index.props.d.ts +1 -0
  36. package/Modal/components/Title/index.js +20 -7
  37. package/Modal/components/Title/index.props.d.ts +1 -2
  38. package/Modal/context.d.ts +9 -0
  39. package/Modal/context.js +15 -0
  40. package/Modal/index.d.ts +12 -2
  41. package/Modal/index.js +103 -31
  42. package/Modal/index.props.d.ts +25 -0
  43. package/Modal/useModalStack.d.ts +2 -0
  44. package/Modal/useModalStack.js +20 -0
  45. package/README.md +59 -0
  46. package/Theme/breakpoints.d.ts +20 -16
  47. package/Theme/breakpoints.js +21 -32
  48. package/Theme/colors/index.d.ts +4 -0
  49. package/Theme/colors/theme_buenos_aires.d.ts +4 -0
  50. package/Theme/colors/theme_buenos_aires.js +2 -0
  51. package/Theme/colors/theme_jaipur.d.ts +4 -0
  52. package/Theme/colors/theme_jaipur.js +2 -0
  53. package/Theme/index.d.ts +300 -152
  54. package/Theme/index.js +6 -2
  55. package/Theme/themes/buenos_aires.d.ts +73 -76
  56. package/Theme/themes/buenos_aires.js +73 -76
  57. package/Theme/themes/jaipur.d.ts +73 -76
  58. package/Theme/themes/jaipur.js +73 -76
  59. package/esm/Autocomplete/Autocomplete.d.ts +6 -0
  60. package/esm/Autocomplete/Autocomplete.js +288 -0
  61. package/esm/Autocomplete/Autocomplete.module.css +147 -0
  62. package/esm/Autocomplete/index.d.ts +2 -0
  63. package/esm/Autocomplete/index.props.d.ts +39 -0
  64. package/esm/Button/tokens.d.ts +78 -0
  65. package/esm/Button/tokens.js +82 -0
  66. package/esm/Calendar/Calendar.js +3 -1
  67. package/esm/Input/index.d.ts +1 -1
  68. package/esm/Input/index.js +16 -10
  69. package/esm/Input/index.props.d.ts +4 -1
  70. package/esm/List/List.d.ts +5 -0
  71. package/esm/List/List.js +150 -0
  72. package/esm/List/List.module.css +185 -0
  73. package/esm/List/index.d.ts +2 -0
  74. package/esm/List/index.props.d.ts +43 -0
  75. package/esm/Modal/Modal.module.css +14 -7
  76. package/esm/Modal/components/Body/Body.module.css +12 -0
  77. package/esm/Modal/components/Body/index.d.ts +3 -0
  78. package/esm/Modal/components/Body/index.js +18 -0
  79. package/esm/Modal/components/Body/index.props.d.ts +1 -0
  80. package/esm/Modal/components/Close/index.js +4 -2
  81. package/esm/Modal/components/Close/index.props.d.ts +1 -0
  82. package/esm/Modal/components/Footer/Footer.module.css +10 -0
  83. package/esm/Modal/components/Footer/index.d.ts +3 -0
  84. package/esm/Modal/components/Footer/index.js +15 -0
  85. package/esm/Modal/components/Footer/index.props.d.ts +1 -0
  86. package/esm/Modal/components/Header/Header.module.css +32 -0
  87. package/esm/Modal/components/Header/index.d.ts +3 -0
  88. package/esm/Modal/components/Header/index.js +28 -0
  89. package/esm/Modal/components/Header/index.props.d.ts +1 -0
  90. package/esm/Modal/components/Title/index.js +20 -8
  91. package/esm/Modal/components/Title/index.props.d.ts +1 -2
  92. package/esm/Modal/context.d.ts +9 -0
  93. package/esm/Modal/context.js +12 -0
  94. package/esm/Modal/index.d.ts +12 -2
  95. package/esm/Modal/index.js +92 -25
  96. package/esm/Modal/index.props.d.ts +25 -0
  97. package/esm/Modal/useModalStack.d.ts +2 -0
  98. package/esm/Modal/useModalStack.js +18 -0
  99. package/esm/Theme/breakpoints.d.ts +20 -16
  100. package/esm/Theme/breakpoints.js +20 -26
  101. package/esm/Theme/colors/index.d.ts +4 -0
  102. package/esm/Theme/colors/theme_buenos_aires.d.ts +4 -0
  103. package/esm/Theme/colors/theme_buenos_aires.js +2 -0
  104. package/esm/Theme/colors/theme_jaipur.d.ts +4 -0
  105. package/esm/Theme/colors/theme_jaipur.js +2 -0
  106. package/esm/Theme/index.d.ts +300 -152
  107. package/esm/Theme/index.js +3 -2
  108. package/esm/Theme/themes/buenos_aires.d.ts +73 -76
  109. package/esm/Theme/themes/buenos_aires.js +73 -76
  110. package/esm/Theme/themes/jaipur.d.ts +73 -76
  111. package/esm/Theme/themes/jaipur.js +73 -76
  112. package/esm/hooks/useMediaSizes/index.d.ts +2 -2
  113. package/esm/hooks/useMediaSizes/index.js +2 -2
  114. package/esm/hooks/useTrapFocus/index.d.ts +1 -1
  115. package/esm/hooks/useTrapFocus/index.js +3 -2
  116. package/esm/index.d.ts +8 -3
  117. package/esm/index.js +7 -0
  118. package/esm/theme_ba_variables.css +149 -76
  119. package/esm/theme_jaipur_variables.css +149 -76
  120. package/hooks/useMediaSizes/index.d.ts +2 -2
  121. package/hooks/useMediaSizes/index.js +1 -1
  122. package/hooks/useTrapFocus/index.d.ts +1 -1
  123. package/hooks/useTrapFocus/index.js +3 -2
  124. package/index.d.ts +8 -3
  125. package/index.js +54 -35
  126. package/package.json +1 -1
  127. package/theme_ba_variables.css +149 -76
  128. package/theme_jaipur_variables.css +149 -76
@@ -0,0 +1,78 @@
1
+ export declare const BUTTON_TOKENS: {
2
+ readonly "component-button-primary-bg": "var(--color-action-primary)";
3
+ readonly "component-button-primary-border": "var(--color-action-primary)";
4
+ readonly "component-button-primary-text": "var(--color-action-secondary)";
5
+ readonly "component-button-primary-bg-hover": "var(--color-action-primary-hover)";
6
+ readonly "component-button-primary-border-hover": "var(--color-action-primary-hover)";
7
+ readonly "component-button-primary-text-hover": "var(--color-action-secondary)";
8
+ readonly "component-button-primary-bg-pressed": "var(--color-action-secondary)";
9
+ readonly "component-button-primary-border-pressed": "var(--color-action-secondary)";
10
+ readonly "component-button-primary-text-pressed": "var(--color-text-on-brand)";
11
+ readonly "component-button-secondary-bg": "var(--color-bg-surface-strong)";
12
+ readonly "component-button-secondary-border": "var(--color-border-default)";
13
+ readonly "component-button-secondary-text": "var(--color-text-primary)";
14
+ readonly "component-button-secondary-bg-hover": "var(--color-neutral-300)";
15
+ readonly "component-button-secondary-border-hover": "var(--color-border-strong)";
16
+ readonly "component-button-secondary-text-hover": "var(--color-text-primary)";
17
+ readonly "component-button-secondary-bg-pressed": "var(--color-action-primary)";
18
+ readonly "component-button-secondary-border-pressed": "var(--color-action-primary)";
19
+ readonly "component-button-secondary-text-pressed": "var(--color-action-secondary)";
20
+ readonly "component-button-outline-bg": "var(--color-bg-surface)";
21
+ readonly "component-button-outline-border": "var(--color-border-default)";
22
+ readonly "component-button-outline-text": "var(--color-text-primary)";
23
+ readonly "component-button-outline-bg-hover": "var(--color-bg-surface-subtle)";
24
+ readonly "component-button-outline-border-hover": "var(--color-border-strong)";
25
+ readonly "component-button-outline-text-hover": "var(--color-text-primary)";
26
+ readonly "component-button-outline-bg-pressed": "var(--color-bg-surface-strong)";
27
+ readonly "component-button-outline-border-pressed": "var(--color-action-primary)";
28
+ readonly "component-button-outline-text-pressed": "var(--color-action-primary-pressed)";
29
+ readonly "component-button-pseudo-bg": "var(--color-bg-canvas)";
30
+ readonly "component-button-pseudo-border": "var(--color-bg-canvas)";
31
+ readonly "component-button-pseudo-text": "var(--color-text-primary)";
32
+ readonly "component-button-pseudo-bg-hover": "var(--color-bg-surface-subtle)";
33
+ readonly "component-button-pseudo-border-hover": "var(--color-bg-surface-subtle)";
34
+ readonly "component-button-pseudo-text-hover": "var(--color-text-primary)";
35
+ readonly "component-button-pseudo-bg-pressed": "var(--color-bg-surface-strong)";
36
+ readonly "component-button-pseudo-border-pressed": "var(--color-bg-surface-strong)";
37
+ readonly "component-button-pseudo-text-pressed": "var(--color-text-primary)";
38
+ readonly "component-button-clear-bg": "transparent";
39
+ readonly "component-button-clear-border": "transparent";
40
+ readonly "component-button-clear-text": "var(--color-text-primary)";
41
+ readonly "component-button-clear-bg-hover": "transparent";
42
+ readonly "component-button-clear-border-hover": "transparent";
43
+ readonly "component-button-clear-text-hover": "var(--color-action-clear-text-hover)";
44
+ readonly "component-button-clear-bg-pressed": "transparent";
45
+ readonly "component-button-clear-border-pressed": "transparent";
46
+ readonly "component-button-clear-text-pressed": "var(--color-action-primary-pressed)";
47
+ readonly "component-button-alert-bg": "var(--color-status-error)";
48
+ readonly "component-button-alert-border": "var(--color-status-error)";
49
+ readonly "component-button-alert-text": "var(--color-brand-white)";
50
+ readonly "component-button-alert-bg-hover": "var(--color-status-error-hover)";
51
+ readonly "component-button-alert-border-hover": "var(--color-status-error-hover)";
52
+ readonly "component-button-alert-text-hover": "var(--color-brand-white)";
53
+ readonly "component-button-alert-bg-pressed": "var(--color-status-error-accent)";
54
+ readonly "component-button-alert-border-pressed": "var(--color-status-error-accent)";
55
+ readonly "component-button-alert-text-pressed": "var(--color-brand-white)";
56
+ readonly "component-button-success-bg": "var(--color-status-success-bg)";
57
+ readonly "component-button-success-border": "var(--color-status-success-bg)";
58
+ readonly "component-button-success-text": "var(--color-text-primary)";
59
+ readonly "component-button-success-bg-hover": "var(--color-status-success-bg-hover)";
60
+ readonly "component-button-success-border-hover": "var(--color-status-success-bg-hover)";
61
+ readonly "component-button-success-text-hover": "var(--color-text-primary)";
62
+ readonly "component-button-success-bg-pressed": "var(--color-status-success)";
63
+ readonly "component-button-success-border-pressed": "var(--color-status-success)";
64
+ readonly "component-button-success-text-pressed": "var(--color-brand-white)";
65
+ readonly "component-button-bg-disabled": "var(--color-action-disabled)";
66
+ readonly "component-button-border-disabled": "var(--color-action-disabled)";
67
+ readonly "component-button-text-disabled": "var(--color-action-disabled-text)";
68
+ readonly "component-button-font-size-xs": string;
69
+ readonly "component-button-font-size-s": string;
70
+ readonly "component-button-font-size-m": string;
71
+ readonly "component-button-font-size-l": string;
72
+ readonly "component-button-height-xs": string;
73
+ readonly "component-button-height-s": string;
74
+ readonly "component-button-height-m": string;
75
+ readonly "component-button-height-l": string;
76
+ readonly "component-button-radius": string;
77
+ readonly "component-button-radius-lg": string;
78
+ };
@@ -0,0 +1,82 @@
1
+ var commonButtonTokens = {
2
+ "component-button-font-size-xs": "0.75rem",
3
+ "component-button-font-size-s": "0.8125rem",
4
+ "component-button-font-size-m": "0.9375rem",
5
+ "component-button-font-size-l": "1.125rem",
6
+ "component-button-height-xs": "1.8125rem",
7
+ "component-button-height-s": "2rem",
8
+ "component-button-height-m": "2.25rem",
9
+ "component-button-height-l": "2.625rem",
10
+ "component-button-radius": "1.125rem",
11
+ "component-button-radius-lg": "1.5rem"
12
+ };
13
+ var BUTTON_TOKENS = Object.assign(Object.assign({}, commonButtonTokens), {
14
+ "component-button-primary-bg": "var(--color-action-primary)",
15
+ "component-button-primary-border": "var(--color-action-primary)",
16
+ "component-button-primary-text": "var(--color-action-secondary)",
17
+ "component-button-primary-bg-hover": "var(--color-action-primary-hover)",
18
+ "component-button-primary-border-hover": "var(--color-action-primary-hover)",
19
+ "component-button-primary-text-hover": "var(--color-action-secondary)",
20
+ "component-button-primary-bg-pressed": "var(--color-action-secondary)",
21
+ "component-button-primary-border-pressed": "var(--color-action-secondary)",
22
+ "component-button-primary-text-pressed": "var(--color-text-on-brand)",
23
+ "component-button-secondary-bg": "var(--color-bg-surface-strong)",
24
+ "component-button-secondary-border": "var(--color-border-default)",
25
+ "component-button-secondary-text": "var(--color-text-primary)",
26
+ "component-button-secondary-bg-hover": "var(--color-neutral-300)",
27
+ "component-button-secondary-border-hover": "var(--color-border-strong)",
28
+ "component-button-secondary-text-hover": "var(--color-text-primary)",
29
+ "component-button-secondary-bg-pressed": "var(--color-action-primary)",
30
+ "component-button-secondary-border-pressed": "var(--color-action-primary)",
31
+ "component-button-secondary-text-pressed": "var(--color-action-secondary)",
32
+ "component-button-outline-bg": "var(--color-bg-surface)",
33
+ "component-button-outline-border": "var(--color-border-default)",
34
+ "component-button-outline-text": "var(--color-text-primary)",
35
+ "component-button-outline-bg-hover": "var(--color-bg-surface-subtle)",
36
+ "component-button-outline-border-hover": "var(--color-border-strong)",
37
+ "component-button-outline-text-hover": "var(--color-text-primary)",
38
+ "component-button-outline-bg-pressed": "var(--color-bg-surface-strong)",
39
+ "component-button-outline-border-pressed": "var(--color-action-primary)",
40
+ "component-button-outline-text-pressed": "var(--color-action-primary-pressed)",
41
+ "component-button-pseudo-bg": "var(--color-bg-canvas)",
42
+ "component-button-pseudo-border": "var(--color-bg-canvas)",
43
+ "component-button-pseudo-text": "var(--color-text-primary)",
44
+ "component-button-pseudo-bg-hover": "var(--color-bg-surface-subtle)",
45
+ "component-button-pseudo-border-hover": "var(--color-bg-surface-subtle)",
46
+ "component-button-pseudo-text-hover": "var(--color-text-primary)",
47
+ "component-button-pseudo-bg-pressed": "var(--color-bg-surface-strong)",
48
+ "component-button-pseudo-border-pressed": "var(--color-bg-surface-strong)",
49
+ "component-button-pseudo-text-pressed": "var(--color-text-primary)",
50
+ "component-button-clear-bg": "transparent",
51
+ "component-button-clear-border": "transparent",
52
+ "component-button-clear-text": "var(--color-text-primary)",
53
+ "component-button-clear-bg-hover": "transparent",
54
+ "component-button-clear-border-hover": "transparent",
55
+ "component-button-clear-text-hover": "var(--color-action-clear-text-hover)",
56
+ "component-button-clear-bg-pressed": "transparent",
57
+ "component-button-clear-border-pressed": "transparent",
58
+ "component-button-clear-text-pressed": "var(--color-action-primary-pressed)",
59
+ "component-button-alert-bg": "var(--color-status-error)",
60
+ "component-button-alert-border": "var(--color-status-error)",
61
+ "component-button-alert-text": "var(--color-brand-white)",
62
+ "component-button-alert-bg-hover": "var(--color-status-error-hover)",
63
+ "component-button-alert-border-hover": "var(--color-status-error-hover)",
64
+ "component-button-alert-text-hover": "var(--color-brand-white)",
65
+ "component-button-alert-bg-pressed": "var(--color-status-error-accent)",
66
+ "component-button-alert-border-pressed": "var(--color-status-error-accent)",
67
+ "component-button-alert-text-pressed": "var(--color-brand-white)",
68
+ "component-button-success-bg": "var(--color-status-success-bg)",
69
+ "component-button-success-border": "var(--color-status-success-bg)",
70
+ "component-button-success-text": "var(--color-text-primary)",
71
+ "component-button-success-bg-hover": "var(--color-status-success-bg-hover)",
72
+ "component-button-success-border-hover": "var(--color-status-success-bg-hover)",
73
+ "component-button-success-text-hover": "var(--color-text-primary)",
74
+ "component-button-success-bg-pressed": "var(--color-status-success)",
75
+ "component-button-success-border-pressed": "var(--color-status-success)",
76
+ "component-button-success-text-pressed": "var(--color-brand-white)",
77
+ "component-button-bg-disabled": "var(--color-action-disabled)",
78
+ "component-button-border-disabled": "var(--color-action-disabled)",
79
+ "component-button-text-disabled": "var(--color-action-disabled-text)"
80
+ });
81
+
82
+ export { BUTTON_TOKENS };
@@ -5,6 +5,7 @@ import React, { useState, useRef, useMemo } from 'react';
5
5
  import { Button } from '../Button/index.js';
6
6
  import { Chevron } from '../Icons/Chevron.js';
7
7
  import styles from './Calendar.module.css';
8
+ import { Typography } from '../Typography/index.js';
8
9
 
9
10
  var cx = function cx() {
10
11
  for (var _len = arguments.length, classNames = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -431,7 +432,8 @@ var Calendar = function Calendar(props) {
431
432
  className: styles.month,
432
433
  key: dayKey(month),
433
434
  "aria-label": heading
434
- }, monthsToShow === 2 && (/*#__PURE__*/React.createElement("h2", {
435
+ }, monthsToShow === 2 && (/*#__PURE__*/React.createElement(Typography, {
436
+ tag: "h2",
435
437
  className: styles.heading
436
438
  }, heading)), /*#__PURE__*/React.createElement("div", {
437
439
  className: styles.weekdays,
@@ -1,3 +1,3 @@
1
1
  import React from "react";
2
2
  import type { InputProps } from "./index.props";
3
- export declare const Input: ({ className, startIcon, endIcon, label, hint, hasError, required, onChange, onFocus, onBlur, onKeyDown, inputRef, disabled, variant, size, ref, ...props }: InputProps) => React.JSX.Element;
3
+ export declare const Input: ({ className, startIcon, endIcon, label, hint, hasError, required, onChange, onFocus, onBlur, onKeyDown, inputRef, controlAfter, controlClassName, controlRef, disabled, variant, size, ref, ...props }: InputProps) => React.JSX.Element;
@@ -18,21 +18,18 @@ var Input = function Input(_a) {
18
18
  onBlur = _a.onBlur,
19
19
  onKeyDown = _a.onKeyDown,
20
20
  inputRef = _a.inputRef,
21
+ controlAfter = _a.controlAfter,
22
+ controlClassName = _a.controlClassName,
23
+ controlRef = _a.controlRef,
21
24
  disabled = _a.disabled,
22
25
  _a$variant = _a.variant,
23
26
  variant = _a$variant === void 0 ? "primary" : _a$variant,
24
27
  _a$size = _a.size,
25
28
  size = _a$size === void 0 ? "m" : _a$size,
26
29
  ref = _a.ref,
27
- props = __rest(_a, ["className", "startIcon", "endIcon", "label", "hint", "hasError", "required", "onChange", "onFocus", "onBlur", "onKeyDown", "inputRef", "disabled", "variant", "size", "ref"]);
28
- return /*#__PURE__*/React.createElement(FormField, {
29
- className: clsx(className),
30
- label: label,
31
- required: required,
32
- hint: hint,
33
- hasError: hasError
34
- }, /*#__PURE__*/React.createElement(InputRoot, {
35
- ref: ref,
30
+ props = __rest(_a, ["className", "startIcon", "endIcon", "label", "hint", "hasError", "required", "onChange", "onFocus", "onBlur", "onKeyDown", "inputRef", "controlAfter", "controlClassName", "controlRef", "disabled", "variant", "size", "ref"]);
31
+ var control = /*#__PURE__*/React.createElement(InputRoot, {
32
+ ref: controlRef !== null && controlRef !== void 0 ? controlRef : ref,
36
33
  startIcon: startIcon,
37
34
  endIcon: endIcon,
38
35
  variant: variant,
@@ -46,7 +43,16 @@ var Input = function Input(_a) {
46
43
  onBlur: onBlur,
47
44
  onKeyDown: onKeyDown,
48
45
  type: "text"
49
- }, props))));
46
+ }, props)));
47
+ return /*#__PURE__*/React.createElement(FormField, {
48
+ className: clsx(className),
49
+ label: label,
50
+ required: required,
51
+ hint: hint,
52
+ hasError: hasError
53
+ }, controlAfter || controlClassName || controlRef ? (/*#__PURE__*/React.createElement("div", {
54
+ className: controlClassName
55
+ }, control, controlAfter)) : control);
50
56
  };
51
57
 
52
58
  export { Input };
@@ -2,6 +2,9 @@ import type { ChangeEvent, ForwardedRef, InputHTMLAttributes, ReactNode, FocusEv
2
2
  import type { FormFieldProps } from "../base/FormField/index.props";
3
3
  import type { Size, Variant } from "../base/InputRoot/index.props";
4
4
  export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChange" | "size">, Omit<FormFieldProps, "children"> {
5
+ controlAfter?: ReactNode;
6
+ controlClassName?: string;
7
+ controlRef?: Ref<HTMLDivElement>;
5
8
  endIcon?: ReactNode;
6
9
  hasError?: boolean;
7
10
  hint?: ReactNode;
@@ -12,7 +15,7 @@ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
12
15
  onBlur?: (event: FocusEvent<HTMLInputElement>) => void;
13
16
  onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;
14
17
  onInput?: (event: FormEvent<HTMLInputElement>) => void;
15
- ref?: Ref<HTMLInputElement>;
18
+ ref?: Ref<HTMLDivElement>;
16
19
  required?: boolean;
17
20
  size?: Size;
18
21
  startIcon?: ReactNode;
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import type { ListItemProps, ListProps, ListSectionProps } from "./index.props";
3
+ export declare const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLUListElement>>;
4
+ export declare const ListItem: React.ForwardRefExoticComponent<ListItemProps & React.RefAttributes<HTMLLIElement>>;
5
+ export declare const ListSection: React.ForwardRefExoticComponent<ListSectionProps & React.RefAttributes<HTMLLIElement>>;
@@ -0,0 +1,150 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import { __rest } from 'tslib';
3
+ import React, { forwardRef, useMemo, useContext, createContext } from 'react';
4
+ import clsx from 'clsx';
5
+ import styles from './List.module.css';
6
+
7
+ var ListContext = /*#__PURE__*/createContext({
8
+ disabled: false,
9
+ dividers: false,
10
+ surface: "none"
11
+ });
12
+ var ItemContent = function ItemContent(_ref) {
13
+ var children = _ref.children,
14
+ description = _ref.description,
15
+ contentLeft = _ref.contentLeft,
16
+ contentRight = _ref.contentRight;
17
+ return /*#__PURE__*/React.createElement(React.Fragment, null, contentLeft != null && /*#__PURE__*/React.createElement("span", {
18
+ className: styles.left
19
+ }, contentLeft), /*#__PURE__*/React.createElement("span", {
20
+ className: styles.content
21
+ }, /*#__PURE__*/React.createElement("span", {
22
+ className: styles.title
23
+ }, children), description != null && (/*#__PURE__*/React.createElement("span", {
24
+ className: styles.description
25
+ }, description))), contentRight != null && (/*#__PURE__*/React.createElement("span", {
26
+ className: styles.right
27
+ }, contentRight)));
28
+ };
29
+ var List = /*#__PURE__*/forwardRef(function (_a, ref) {
30
+ var _a$size = _a.size,
31
+ size = _a$size === void 0 ? "m" : _a$size,
32
+ _a$density = _a.density,
33
+ density = _a$density === void 0 ? "normal" : _a$density,
34
+ _a$surface = _a.surface,
35
+ surface = _a$surface === void 0 ? "none" : _a$surface,
36
+ _a$dividers = _a.dividers,
37
+ dividers = _a$dividers === void 0 ? false : _a$dividers,
38
+ _a$disabled = _a.disabled,
39
+ disabled = _a$disabled === void 0 ? false : _a$disabled,
40
+ ariaLabel = _a.ariaLabel,
41
+ className = _a.className,
42
+ children = _a.children,
43
+ rest = __rest(_a, ["size", "density", "surface", "dividers", "disabled", "ariaLabel", "className", "children"]);
44
+ var context = useMemo(function () {
45
+ return {
46
+ disabled: disabled,
47
+ dividers: dividers,
48
+ surface: surface
49
+ };
50
+ }, [disabled, dividers, surface]);
51
+ return /*#__PURE__*/React.createElement(ListContext.Provider, {
52
+ value: context
53
+ }, /*#__PURE__*/React.createElement("ul", Object.assign({}, rest, {
54
+ ref: ref,
55
+ "aria-label": ariaLabel,
56
+ "aria-disabled": disabled || undefined,
57
+ className: clsx(styles.list, styles["size_".concat(size)], styles["density_".concat(density)], styles["surface_".concat(surface)], _defineProperty(_defineProperty({}, styles.dividers, dividers), styles["list_disabled"], disabled), className)
58
+ }), children));
59
+ });
60
+ List.displayName = "List";
61
+ var ListItem = /*#__PURE__*/forwardRef(function (props, ref) {
62
+ var _a;
63
+ var _useContext = useContext(ListContext),
64
+ listDisabled = _useContext.disabled,
65
+ dividers = _useContext.dividers,
66
+ surface = _useContext.surface;
67
+ var children = props.children,
68
+ description = props.description,
69
+ contentLeft = props.contentLeft,
70
+ contentRight = props.contentRight,
71
+ _props$disabled = props.disabled,
72
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
73
+ _props$selected = props.selected,
74
+ selected = _props$selected === void 0 ? false : _props$selected,
75
+ className = props.className,
76
+ interactiveProps = __rest(props, ["children", "description", "contentLeft", "contentRight", "disabled", "selected", "className"]);
77
+ var isDisabled = listDisabled || disabled;
78
+ var itemClassName = clsx(styles.item, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles["item_surface"], surface === "items"), styles["item_divider"], dividers), styles.selected, selected), styles["item_disabled"], isDisabled), className);
79
+ var content = /*#__PURE__*/React.createElement(ItemContent, {
80
+ contentLeft: contentLeft,
81
+ contentRight: contentRight,
82
+ description: description
83
+ }, children);
84
+ if ("href" in interactiveProps && interactiveProps.href) {
85
+ var _b = interactiveProps,
86
+ href = _b.href,
87
+ onAction = _b.onAction,
88
+ _onClick = _b.onClick,
89
+ anchorProps = __rest(_b, ["href", "onAction", "onClick"]);
90
+ return /*#__PURE__*/React.createElement("li", {
91
+ ref: ref,
92
+ className: itemClassName,
93
+ "aria-disabled": isDisabled || undefined
94
+ }, /*#__PURE__*/React.createElement("a", Object.assign({}, anchorProps, {
95
+ href: isDisabled ? undefined : href,
96
+ tabIndex: isDisabled ? -1 : anchorProps.tabIndex,
97
+ "aria-current": selected ? "page" : undefined,
98
+ className: styles.action,
99
+ onClick: function onClick(event) {
100
+ if (isDisabled) {
101
+ event.preventDefault();
102
+ return;
103
+ }
104
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick(event);
105
+ if (!event.defaultPrevented) onAction === null || onAction === void 0 ? void 0 : onAction();
106
+ }
107
+ }), content));
108
+ }
109
+ if ("onAction" in interactiveProps && interactiveProps.onAction) {
110
+ var _c = interactiveProps,
111
+ _onAction = _c.onAction,
112
+ buttonProps = __rest(_c, ["onAction"]);
113
+ return /*#__PURE__*/React.createElement("li", {
114
+ ref: ref,
115
+ className: itemClassName
116
+ }, /*#__PURE__*/React.createElement("button", Object.assign({}, buttonProps, {
117
+ type: (_a = buttonProps.type) !== null && _a !== void 0 ? _a : "button",
118
+ disabled: isDisabled,
119
+ "aria-pressed": selected || undefined,
120
+ className: styles.action,
121
+ onClick: _onAction
122
+ }), content));
123
+ }
124
+ return /*#__PURE__*/React.createElement("li", Object.assign({}, interactiveProps, {
125
+ ref: ref,
126
+ className: itemClassName,
127
+ "aria-disabled": isDisabled || undefined,
128
+ "aria-current": selected || undefined
129
+ }), /*#__PURE__*/React.createElement("div", {
130
+ className: styles["static-content"]
131
+ }, content));
132
+ });
133
+ ListItem.displayName = "ListItem";
134
+ var ListSection = /*#__PURE__*/forwardRef(function (_a, ref) {
135
+ var title = _a.title,
136
+ children = _a.children,
137
+ className = _a.className,
138
+ rest = __rest(_a, ["title", "children", "className"]);
139
+ return /*#__PURE__*/React.createElement("li", Object.assign({}, rest, {
140
+ ref: ref,
141
+ className: clsx(styles.section, className)
142
+ }), title != null && /*#__PURE__*/React.createElement("div", {
143
+ className: styles["section-title"]
144
+ }, title), /*#__PURE__*/React.createElement("ul", {
145
+ className: styles["nested-list"]
146
+ }, children));
147
+ });
148
+ ListSection.displayName = "ListSection";
149
+
150
+ export { List, ListItem, ListSection };
@@ -0,0 +1,185 @@
1
+ .list {
2
+ box-sizing: border-box;
3
+ color: var(--component-list-text);
4
+ font-family: var(--font-family-ui);
5
+ list-style: none;
6
+ margin: var(--space-0);
7
+ padding: var(--space-0);
8
+ width: 100%;
9
+ }
10
+
11
+ .surface_container {
12
+ background: var(--component-list-bg);
13
+ border-radius: var(--component-list-container-radius);
14
+ padding: var(--component-list-container-padding);
15
+ }
16
+
17
+ .surface_items {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: var(--component-list-items-gap);
21
+ }
22
+
23
+ .item {
24
+ display: block;
25
+ margin: var(--space-0);
26
+ position: relative;
27
+ }
28
+
29
+ .item_surface {
30
+ background: var(--component-list-bg);
31
+ border-radius: var(--component-list-item-surface-radius);
32
+ overflow: hidden;
33
+ }
34
+
35
+ .action,
36
+ .static-content {
37
+ align-items: center;
38
+ background: transparent;
39
+ border: 0;
40
+ border-radius: var(--component-list-item-radius);
41
+ box-sizing: border-box;
42
+ color: inherit;
43
+ display: flex;
44
+ font: inherit;
45
+ gap: var(--component-list-item-gap);
46
+ min-height: var(--component-list-item-min-height-m);
47
+ padding: var(--component-list-item-padding-block) var(--component-list-item-padding-inline);
48
+ text-align: left;
49
+ text-decoration: none;
50
+ width: 100%;
51
+ }
52
+
53
+ .action {
54
+ cursor: pointer;
55
+ }
56
+ .action:hover {
57
+ background: var(--component-list-item-bg-hover);
58
+ }
59
+ .action:focus-visible {
60
+ outline: var(--focus-ring-width) solid var(--component-list-focus-ring);
61
+ outline-offset: calc(var(--focus-ring-width) * -1);
62
+ }
63
+
64
+ .content {
65
+ display: flex;
66
+ flex: 1;
67
+ flex-direction: column;
68
+ justify-content: center;
69
+ min-width: 0;
70
+ }
71
+
72
+ .title {
73
+ overflow: hidden;
74
+ text-overflow: ellipsis;
75
+ white-space: nowrap;
76
+ }
77
+
78
+ .description {
79
+ color: var(--component-list-description);
80
+ font-size: var(--component-list-description-font-size);
81
+ line-height: var(--component-list-description-line-height);
82
+ margin-top: var(--component-list-description-offset);
83
+ overflow: hidden;
84
+ text-overflow: ellipsis;
85
+ white-space: nowrap;
86
+ }
87
+
88
+ .left,
89
+ .right {
90
+ align-items: center;
91
+ display: inline-flex;
92
+ flex: none;
93
+ justify-content: center;
94
+ }
95
+
96
+ .selected .action,
97
+ .selected .static-content {
98
+ background: var(--component-list-item-bg-selected);
99
+ color: var(--component-list-item-text-selected);
100
+ }
101
+ .selected .description {
102
+ color: var(--component-list-description-selected);
103
+ }
104
+
105
+ .list_disabled {
106
+ color: var(--component-list-text-disabled);
107
+ }
108
+
109
+ .item_divider:not(:last-child)::after {
110
+ background: var(--component-list-divider);
111
+ bottom: 0;
112
+ content: "";
113
+ height: var(--border-width-hairline);
114
+ left: var(--component-list-item-padding-inline);
115
+ position: absolute;
116
+ right: var(--component-list-item-padding-inline);
117
+ }
118
+
119
+ .density_compact .action,
120
+ .density_compact .static-content {
121
+ min-height: var(--component-list-item-min-height-compact);
122
+ padding-bottom: var(--component-list-item-padding-block-compact);
123
+ padding-top: var(--component-list-item-padding-block-compact);
124
+ }
125
+
126
+ .size_s {
127
+ font-size: var(--component-list-font-size-s);
128
+ line-height: var(--component-list-line-height-s);
129
+ }
130
+ .size_s .action,
131
+ .size_s .static-content {
132
+ min-height: var(--component-list-item-min-height-s);
133
+ }
134
+
135
+ .size_m {
136
+ font-size: var(--component-list-font-size-m);
137
+ line-height: var(--component-list-line-height-m);
138
+ }
139
+
140
+ .size_l {
141
+ font-size: var(--component-list-font-size-l);
142
+ line-height: var(--component-list-line-height-l);
143
+ }
144
+ .size_l .action,
145
+ .size_l .static-content {
146
+ min-height: var(--component-list-item-min-height-l);
147
+ padding-left: var(--component-list-item-padding-inline-l);
148
+ padding-right: var(--component-list-item-padding-inline-l);
149
+ }
150
+
151
+ .item_disabled {
152
+ color: var(--component-list-item-text-disabled);
153
+ }
154
+ .item_disabled .action {
155
+ cursor: not-allowed;
156
+ }
157
+ .item_disabled .action:hover {
158
+ background: transparent;
159
+ }
160
+
161
+ .section {
162
+ list-style: none;
163
+ margin: var(--space-0);
164
+ padding: var(--space-0);
165
+ }
166
+
167
+ .section + .section {
168
+ margin-top: var(--component-list-section-gap);
169
+ }
170
+
171
+ .section-title {
172
+ color: var(--component-list-section-title);
173
+ font-size: var(--component-list-section-title-font-size);
174
+ font-weight: var(--font-weight-semibold);
175
+ letter-spacing: var(--letter-spacing-ui);
176
+ line-height: var(--component-list-section-title-line-height);
177
+ padding: var(--component-list-section-title-padding-block-start) var(--component-list-item-padding-inline) var(--component-list-section-title-padding-block-end);
178
+ text-transform: uppercase;
179
+ }
180
+
181
+ .nested-list {
182
+ list-style: none;
183
+ margin: var(--space-0);
184
+ padding: var(--space-0);
185
+ }
@@ -0,0 +1,2 @@
1
+ export { List, ListItem, ListSection } from "./List";
2
+ export type { ListDensity, ListItemBaseProps, ListItemButtonProps, ListItemLinkProps, ListItemProps, ListItemStaticProps, ListProps, ListSectionProps, ListSize, ListSurface, } from "./index.props";
@@ -0,0 +1,43 @@
1
+ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, ReactNode } from "react";
2
+ export type ListSize = "s" | "m" | "l";
3
+ export type ListDensity = "compact" | "normal";
4
+ export type ListSurface = "none" | "container" | "items";
5
+ export interface ListContextValue {
6
+ disabled: boolean;
7
+ dividers: boolean;
8
+ surface: ListSurface;
9
+ }
10
+ export interface ListProps extends HTMLAttributes<HTMLUListElement> {
11
+ ariaLabel?: string;
12
+ density?: ListDensity;
13
+ disabled?: boolean;
14
+ dividers?: boolean;
15
+ size?: ListSize;
16
+ surface?: ListSurface;
17
+ }
18
+ export interface ListItemBaseProps {
19
+ children: ReactNode;
20
+ className?: string;
21
+ contentLeft?: ReactNode;
22
+ contentRight?: ReactNode;
23
+ description?: ReactNode;
24
+ disabled?: boolean;
25
+ selected?: boolean;
26
+ }
27
+ export interface ListItemStaticProps extends ListItemBaseProps, Omit<HTMLAttributes<HTMLLIElement>, "children" | "onClick"> {
28
+ href?: never;
29
+ onAction?: never;
30
+ }
31
+ export interface ListItemButtonProps extends ListItemBaseProps, Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "disabled" | "onClick"> {
32
+ href?: never;
33
+ onAction: () => void;
34
+ }
35
+ export interface ListItemLinkProps extends ListItemBaseProps, Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "children" | "href"> {
36
+ href: string;
37
+ onAction?: () => void;
38
+ }
39
+ export type ListItemProps = ListItemStaticProps | ListItemButtonProps | ListItemLinkProps;
40
+ export interface ListSectionProps extends Omit<HTMLAttributes<HTMLLIElement>, "title"> {
41
+ children: ReactNode;
42
+ title?: ReactNode;
43
+ }