@stack-spot/citric-react 0.35.1 → 0.37.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 (186) hide show
  1. package/dist/citric.css +2844 -2832
  2. package/dist/components/Accordion.d.ts +1 -1
  3. package/dist/components/Accordion.js +1 -1
  4. package/dist/components/Alert.d.ts +1 -1
  5. package/dist/components/Alert.js +1 -1
  6. package/dist/components/AsyncContent.d.ts +1 -1
  7. package/dist/components/AsyncContent.js +1 -1
  8. package/dist/components/Avatar.d.ts +1 -1
  9. package/dist/components/Avatar.js +1 -1
  10. package/dist/components/AvatarGroup.d.ts +1 -1
  11. package/dist/components/AvatarGroup.js +1 -1
  12. package/dist/components/Badge.d.ts +1 -1
  13. package/dist/components/Badge.js +1 -1
  14. package/dist/components/Blockquote.d.ts +1 -1
  15. package/dist/components/Blockquote.js +1 -1
  16. package/dist/components/Breadcrumb.d.ts +1 -1
  17. package/dist/components/Breadcrumb.js +1 -1
  18. package/dist/components/Button.d.ts +1 -1
  19. package/dist/components/Button.js +1 -1
  20. package/dist/components/ButtonLink.d.ts +1 -1
  21. package/dist/components/ButtonLink.js +1 -1
  22. package/dist/components/Card.d.ts +1 -1
  23. package/dist/components/Card.js +1 -1
  24. package/dist/components/Checkbox.d.ts +1 -1
  25. package/dist/components/Checkbox.js +1 -1
  26. package/dist/components/CheckboxGroup.d.ts +1 -1
  27. package/dist/components/CheckboxGroup.js +1 -1
  28. package/dist/components/Circle.d.ts +1 -1
  29. package/dist/components/Circle.js +1 -1
  30. package/dist/components/Divider.d.ts +1 -1
  31. package/dist/components/Divider.js +1 -1
  32. package/dist/components/ErrorBoundary.d.ts +1 -1
  33. package/dist/components/ErrorBoundary.js +1 -1
  34. package/dist/components/ErrorMessage.d.ts +1 -1
  35. package/dist/components/ErrorMessage.js +1 -1
  36. package/dist/components/FallbackBoundary.d.ts +1 -1
  37. package/dist/components/FallbackBoundary.js +1 -1
  38. package/dist/components/Favorite.d.ts +1 -1
  39. package/dist/components/Favorite.js +1 -1
  40. package/dist/components/FieldGroup.d.ts +1 -1
  41. package/dist/components/FieldGroup.js +1 -1
  42. package/dist/components/Form.d.ts +2 -2
  43. package/dist/components/Form.js +1 -1
  44. package/dist/components/FormGroup.d.ts +1 -1
  45. package/dist/components/FormGroup.js +1 -1
  46. package/dist/components/Icon.d.ts +1 -1
  47. package/dist/components/Icon.js +1 -1
  48. package/dist/components/IconBox.d.ts +3 -3
  49. package/dist/components/IconBox.js +1 -1
  50. package/dist/components/ImageBox.d.ts +3 -3
  51. package/dist/components/ImageBox.js +1 -1
  52. package/dist/components/ImageWithFallback.d.ts +1 -1
  53. package/dist/components/ImageWithFallback.js +1 -1
  54. package/dist/components/Input.d.ts +1 -1
  55. package/dist/components/Input.js +1 -1
  56. package/dist/components/Link.d.ts +1 -1
  57. package/dist/components/Link.js +1 -1
  58. package/dist/components/LoadingPanel.d.ts +1 -1
  59. package/dist/components/LoadingPanel.js +1 -1
  60. package/dist/components/MenuOverlay/Menu.d.ts +1 -1
  61. package/dist/components/MenuOverlay/Menu.js +1 -1
  62. package/dist/components/MenuOverlay/index.d.ts +1 -1
  63. package/dist/components/MenuOverlay/index.js +1 -1
  64. package/dist/components/Overlay/index.d.ts +1 -1
  65. package/dist/components/Overlay/index.js +1 -1
  66. package/dist/components/Pagination.d.ts +1 -1
  67. package/dist/components/Pagination.js +1 -1
  68. package/dist/components/ProgressBar.d.ts +1 -1
  69. package/dist/components/ProgressBar.js +1 -1
  70. package/dist/components/ProgressCircular.d.ts +1 -1
  71. package/dist/components/ProgressCircular.js +1 -1
  72. package/dist/components/RadioGroup.d.ts +1 -1
  73. package/dist/components/RadioGroup.js +1 -1
  74. package/dist/components/Rating.d.ts +17 -3
  75. package/dist/components/Rating.d.ts.map +1 -1
  76. package/dist/components/Rating.js +11 -3
  77. package/dist/components/Rating.js.map +1 -1
  78. package/dist/components/Select/MultiSelect.d.ts +1 -1
  79. package/dist/components/Select/MultiSelect.js +1 -1
  80. package/dist/components/Select/RichSelect.d.ts +1 -1
  81. package/dist/components/Select/RichSelect.js +1 -1
  82. package/dist/components/Select/SimpleSelect.d.ts +1 -1
  83. package/dist/components/Select/SimpleSelect.js +1 -1
  84. package/dist/components/Select/index.d.ts +1 -1
  85. package/dist/components/Select/index.js +1 -1
  86. package/dist/components/SelectBox.d.ts +1 -1
  87. package/dist/components/SelectBox.js +1 -1
  88. package/dist/components/Skeleton.d.ts +1 -1
  89. package/dist/components/Skeleton.js +1 -1
  90. package/dist/components/Slider.d.ts +1 -1
  91. package/dist/components/Slider.js +1 -1
  92. package/dist/components/SmartTable.d.ts +1 -1
  93. package/dist/components/SmartTable.js +1 -1
  94. package/dist/components/Stepper.d.ts +1 -1
  95. package/dist/components/Stepper.js +1 -1
  96. package/dist/components/Table.d.ts +3 -3
  97. package/dist/components/Table.js +1 -1
  98. package/dist/components/Tabs/index.d.ts +1 -1
  99. package/dist/components/Tabs/index.js +1 -1
  100. package/dist/components/Textarea.d.ts +1 -1
  101. package/dist/components/Textarea.js +1 -1
  102. package/dist/components/Tooltip.d.ts +1 -1
  103. package/dist/components/Tooltip.js +1 -1
  104. package/dist/context/CitricProvider.d.ts +1 -1
  105. package/dist/context/CitricProvider.js +1 -1
  106. package/dist/overlay.js +1 -1
  107. package/dist/theme.css +415 -415
  108. package/package.json +7 -6
  109. package/scripts/build-css.ts +49 -49
  110. package/src/components/Accordion.tsx +130 -130
  111. package/src/components/Alert.tsx +24 -24
  112. package/src/components/AsyncContent.tsx +70 -70
  113. package/src/components/Avatar.tsx +45 -45
  114. package/src/components/AvatarGroup.tsx +49 -49
  115. package/src/components/Badge.tsx +47 -47
  116. package/src/components/Blockquote.tsx +18 -18
  117. package/src/components/Breadcrumb.tsx +33 -33
  118. package/src/components/Button.tsx +105 -105
  119. package/src/components/ButtonLink.tsx +45 -45
  120. package/src/components/Card.tsx +68 -68
  121. package/src/components/Checkbox.tsx +51 -51
  122. package/src/components/CheckboxGroup.tsx +152 -152
  123. package/src/components/Circle.tsx +43 -43
  124. package/src/components/CitricComponent.ts +47 -47
  125. package/src/components/Divider.tsx +24 -24
  126. package/src/components/ErrorBoundary.tsx +75 -75
  127. package/src/components/ErrorMessage.tsx +11 -11
  128. package/src/components/FallbackBoundary.tsx +40 -40
  129. package/src/components/Favorite.tsx +57 -57
  130. package/src/components/FieldGroup.tsx +46 -46
  131. package/src/components/Form.tsx +36 -36
  132. package/src/components/FormGroup.tsx +57 -57
  133. package/src/components/Icon.tsx +35 -35
  134. package/src/components/IconBox.tsx +134 -134
  135. package/src/components/ImageBox.tsx +125 -125
  136. package/src/components/ImageWithFallback.tsx +65 -65
  137. package/src/components/Input.tsx +49 -49
  138. package/src/components/Link.tsx +55 -55
  139. package/src/components/LoadingPanel.tsx +8 -8
  140. package/src/components/MenuOverlay/Menu.tsx +158 -158
  141. package/src/components/MenuOverlay/context.ts +20 -20
  142. package/src/components/MenuOverlay/index.tsx +55 -55
  143. package/src/components/MenuOverlay/keyboard.ts +60 -60
  144. package/src/components/MenuOverlay/types.ts +171 -171
  145. package/src/components/Overlay/context.ts +10 -10
  146. package/src/components/Overlay/index.tsx +164 -164
  147. package/src/components/Overlay/types.ts +70 -70
  148. package/src/components/Pagination.tsx +113 -113
  149. package/src/components/ProgressBar.tsx +45 -45
  150. package/src/components/ProgressCircular.tsx +45 -45
  151. package/src/components/RadioGroup.tsx +146 -146
  152. package/src/components/Rating.tsx +98 -35
  153. package/src/components/Select/MultiSelect.tsx +217 -217
  154. package/src/components/Select/RichSelect.tsx +128 -128
  155. package/src/components/Select/SimpleSelect.tsx +73 -73
  156. package/src/components/Select/hooks.ts +133 -133
  157. package/src/components/Select/index.tsx +35 -35
  158. package/src/components/Select/types.ts +134 -134
  159. package/src/components/SelectBox.tsx +167 -167
  160. package/src/components/Skeleton.tsx +53 -53
  161. package/src/components/Slider.tsx +89 -89
  162. package/src/components/SmartTable.tsx +227 -227
  163. package/src/components/Stepper.tsx +163 -163
  164. package/src/components/Table.tsx +234 -234
  165. package/src/components/Tabs/TabController.ts +54 -54
  166. package/src/components/Tabs/index.tsx +87 -87
  167. package/src/components/Tabs/types.ts +54 -54
  168. package/src/components/Tabs/utils.ts +6 -6
  169. package/src/components/Text.ts +111 -111
  170. package/src/components/Textarea.tsx +27 -27
  171. package/src/components/Tooltip.tsx +72 -72
  172. package/src/components/layout.tsx +101 -101
  173. package/src/context/CitricContext.tsx +4 -4
  174. package/src/context/CitricProvider.tsx +14 -14
  175. package/src/context/hooks.ts +6 -6
  176. package/src/index.ts +58 -58
  177. package/src/overlay.ts +341 -341
  178. package/src/types.ts +216 -216
  179. package/src/utils/ValueController.ts +28 -28
  180. package/src/utils/acessibility.ts +92 -92
  181. package/src/utils/checkbox.ts +121 -121
  182. package/src/utils/css.ts +119 -119
  183. package/src/utils/options.ts +9 -9
  184. package/src/utils/radio.ts +93 -93
  185. package/src/utils/react.ts +6 -6
  186. package/tsconfig.json +10 -10
@@ -1,113 +1,113 @@
1
- import { Dictionary, interpolate, useTranslate } from '@stack-spot/portal-translate'
2
- import { useMemo } from 'react'
3
- import { withRef } from '../utils/react'
4
- import { CitricComponent } from './CitricComponent'
5
- import { IconButton } from './IconBox'
6
-
7
- export interface PaginationValue {
8
- /**
9
- * The first page is 1. If "0" is provided, it will be treated as if it was "1".
10
- */
11
- page: number,
12
- /**
13
- * The current number of items in a page.
14
- */
15
- size: number,
16
- }
17
-
18
- export interface BasePaginationProps {
19
- /**
20
- * The options for the page size.
21
- *
22
- * @default [10, 20, 30]
23
- */
24
- pageSizeOptions?: number[],
25
- /**
26
- * Total number of pages
27
- */
28
- totalPages: number,
29
- /**
30
- * The current page and page size.
31
- */
32
- value: PaginationValue,
33
- /**
34
- * Function to run whenever the page size or current page changes.
35
- */
36
- onChange: (value: PaginationValue) => void,
37
- }
38
-
39
- export type PaginationProps = Omit<React.JSX.IntrinsicElements['div'], 'onChange'> & BasePaginationProps
40
-
41
- /**
42
- * Renders a pagination UI, letting the user chose one among multiple pages. This is generally rendered at the bottom of a table.
43
- *
44
- * @example
45
- * ```
46
- * const [pageData, setPageData] = useState({ page: 1, size: 10 })
47
- * return <Pagination
48
- * value={pageData}
49
- * totalPages={50}
50
- * onChange={setPageData}
51
- * />
52
- * ```
53
- */
54
- export const Pagination = withRef((
55
- { pageSizeOptions = [10, 20, 30], totalPages, value, onChange, ...props }: PaginationProps,
56
- ) => {
57
- const t = useTranslate(dictionary)
58
- const sizeOptions = useMemo(
59
- () => pageSizeOptions.map(o => <option key={o} selected={value.size === o}>{o}</option>),
60
- [pageSizeOptions],
61
- )
62
- const pageOptions = useMemo(() => {
63
- const options: React.ReactElement[] = []
64
- for (let i = 1; i <= totalPages; i++) {
65
- options.push(<option key={i} value={i} selected={value.page === i}>{i}</option>)
66
- }
67
- return options
68
- }, [value.page, totalPages])
69
-
70
- return (
71
- <CitricComponent tag="div" component="pagination" {...props}>
72
- <div className="page-size">
73
- <label>
74
- {t.itemsPerPage}:
75
- <select name="itemsPerPage" onChange={e => onChange({ page: value.page, size: parseInt(e.target.value) })}>{sizeOptions}</select>
76
- </label>
77
- </div>
78
- <div className="page-number">
79
- <label>
80
- <select name="page" onChange={e => onChange({ page: parseInt(e.target.value), size: value.size })}>{pageOptions}</select>
81
- </label>
82
- {totalPages > 1 ? interpolate(t.ofTotalPlural, totalPages) : t.ofTotalSingular}
83
- <IconButton
84
- icon="ChevronLeft"
85
- aria-label="previous"
86
- title="previous"
87
- disabled={value.page === 1}
88
- onClick={() => onChange({ page: value.page - 1, size: value.size })}
89
- />
90
- <IconButton
91
- icon="ChevronRight"
92
- aria-label="next"
93
- title="next"
94
- disabled={value.page === totalPages}
95
- onClick={() => onChange({ page: value.page + 1, size: value.size })}
96
- />
97
- </div>
98
- </CitricComponent>
99
- )
100
- })
101
-
102
- const dictionary = {
103
- en: {
104
- itemsPerPage: 'Items per page',
105
- ofTotalSingular: 'of 1 page',
106
- ofTotalPlural: 'of $0 pages',
107
- },
108
- pt: {
109
- itemsPerPage: 'Itens por página',
110
- ofTotalSingular: 'de 1 página',
111
- ofTotalPlural: 'de $0 páginas',
112
- },
113
- } satisfies Dictionary
1
+ import { Dictionary, interpolate, useTranslate } from '@stack-spot/portal-translate'
2
+ import { useMemo } from 'react'
3
+ import { withRef } from '../utils/react'
4
+ import { CitricComponent } from './CitricComponent'
5
+ import { IconButton } from './IconBox'
6
+
7
+ export interface PaginationValue {
8
+ /**
9
+ * The first page is 1. If "0" is provided, it will be treated as if it was "1".
10
+ */
11
+ page: number,
12
+ /**
13
+ * The current number of items in a page.
14
+ */
15
+ size: number,
16
+ }
17
+
18
+ export interface BasePaginationProps {
19
+ /**
20
+ * The options for the page size.
21
+ *
22
+ * @default [10, 20, 30]
23
+ */
24
+ pageSizeOptions?: number[],
25
+ /**
26
+ * Total number of pages
27
+ */
28
+ totalPages: number,
29
+ /**
30
+ * The current page and page size.
31
+ */
32
+ value: PaginationValue,
33
+ /**
34
+ * Function to run whenever the page size or current page changes.
35
+ */
36
+ onChange: (value: PaginationValue) => void,
37
+ }
38
+
39
+ export type PaginationProps = Omit<React.JSX.IntrinsicElements['div'], 'onChange'> & BasePaginationProps
40
+
41
+ /**
42
+ * Renders a pagination UI, letting the user chose one among multiple pages. This is generally rendered at the bottom of a table.
43
+ *
44
+ * @example
45
+ * ```
46
+ * const [pageData, setPageData] = useState({ page: 1, size: 10 })
47
+ * return <Pagination
48
+ * value={pageData}
49
+ * totalPages={50}
50
+ * onChange={setPageData}
51
+ * />
52
+ * ```
53
+ */
54
+ export const Pagination = withRef((
55
+ { pageSizeOptions = [10, 20, 30], totalPages, value, onChange, ...props }: PaginationProps,
56
+ ) => {
57
+ const t = useTranslate(dictionary)
58
+ const sizeOptions = useMemo(
59
+ () => pageSizeOptions.map(o => <option key={o} selected={value.size === o}>{o}</option>),
60
+ [pageSizeOptions],
61
+ )
62
+ const pageOptions = useMemo(() => {
63
+ const options: React.ReactElement[] = []
64
+ for (let i = 1; i <= totalPages; i++) {
65
+ options.push(<option key={i} value={i} selected={value.page === i}>{i}</option>)
66
+ }
67
+ return options
68
+ }, [value.page, totalPages])
69
+
70
+ return (
71
+ <CitricComponent tag="div" component="pagination" {...props}>
72
+ <div className="page-size">
73
+ <label>
74
+ {t.itemsPerPage}:
75
+ <select name="itemsPerPage" onChange={e => onChange({ page: value.page, size: parseInt(e.target.value) })}>{sizeOptions}</select>
76
+ </label>
77
+ </div>
78
+ <div className="page-number">
79
+ <label>
80
+ <select name="page" onChange={e => onChange({ page: parseInt(e.target.value), size: value.size })}>{pageOptions}</select>
81
+ </label>
82
+ {totalPages > 1 ? interpolate(t.ofTotalPlural, totalPages) : t.ofTotalSingular}
83
+ <IconButton
84
+ icon="ChevronLeft"
85
+ aria-label="previous"
86
+ title="previous"
87
+ disabled={value.page === 1}
88
+ onClick={() => onChange({ page: value.page - 1, size: value.size })}
89
+ />
90
+ <IconButton
91
+ icon="ChevronRight"
92
+ aria-label="next"
93
+ title="next"
94
+ disabled={value.page === totalPages}
95
+ onClick={() => onChange({ page: value.page + 1, size: value.size })}
96
+ />
97
+ </div>
98
+ </CitricComponent>
99
+ )
100
+ })
101
+
102
+ const dictionary = {
103
+ en: {
104
+ itemsPerPage: 'Items per page',
105
+ ofTotalSingular: 'of 1 page',
106
+ ofTotalPlural: 'of $0 pages',
107
+ },
108
+ pt: {
109
+ itemsPerPage: 'Itens por página',
110
+ ofTotalSingular: 'de 1 página',
111
+ ofTotalPlural: 'de $0 páginas',
112
+ },
113
+ } satisfies Dictionary
@@ -1,45 +1,45 @@
1
- import { listToClass } from '@stack-spot/portal-theme'
2
- import { isNil } from 'lodash'
3
- import { WithColorPalette, WithColorScheme } from '../types'
4
- import { applyCSSVariable } from '../utils/css'
5
- import { withRef } from '../utils/react'
6
- import { CitricComponent } from './CitricComponent'
7
-
8
- export interface BaseProgressBarProps extends WithColorScheme, WithColorPalette {
9
- /**
10
- * A number varying from 0 to 100.
11
- *
12
- * If not provided, the progress will be indeterminate, causing an animation loop.
13
- */
14
- progress?: number,
15
- /**
16
- * The speed which the bar animation runs. Only valid if `progress` is `undefined`.
17
- */
18
- speed?: 'normal' | 'fast',
19
- }
20
-
21
- export type ProgressBarProps = React.JSX.IntrinsicElements['div'] & BaseProgressBarProps
22
-
23
- /**
24
- * Shows a progress bar. This can indicate a loading state or the progress of a task. When "progress" is not set, the bar is animated,
25
- * indicating a busy state.
26
- *
27
- * @example
28
- * A simple loading with a Progress Bar.
29
- * ```
30
- * <ProgressBar />
31
- * ```
32
- * A Progress Bar that is 50% complete.
33
- * ```
34
- * <ProgressBar progress={50} />
35
- * ```
36
- */
37
- export const ProgressBar = withRef(({ progress, speed, style, className, ...props }: ProgressBarProps) =>
38
- <CitricComponent
39
- tag="div"
40
- component="progress-bar"
41
- className={listToClass([className, isNil(progress) && 'indeterminate', speed === 'fast' && 'fast'])}
42
- style={progress === undefined ? style : applyCSSVariable(style, 'progress', progress)}
43
- {...props}
44
- />,
45
- )
1
+ import { listToClass } from '@stack-spot/portal-theme'
2
+ import { isNil } from 'lodash'
3
+ import { WithColorPalette, WithColorScheme } from '../types'
4
+ import { applyCSSVariable } from '../utils/css'
5
+ import { withRef } from '../utils/react'
6
+ import { CitricComponent } from './CitricComponent'
7
+
8
+ export interface BaseProgressBarProps extends WithColorScheme, WithColorPalette {
9
+ /**
10
+ * A number varying from 0 to 100.
11
+ *
12
+ * If not provided, the progress will be indeterminate, causing an animation loop.
13
+ */
14
+ progress?: number,
15
+ /**
16
+ * The speed which the bar animation runs. Only valid if `progress` is `undefined`.
17
+ */
18
+ speed?: 'normal' | 'fast',
19
+ }
20
+
21
+ export type ProgressBarProps = React.JSX.IntrinsicElements['div'] & BaseProgressBarProps
22
+
23
+ /**
24
+ * Shows a progress bar. This can indicate a loading state or the progress of a task. When "progress" is not set, the bar is animated,
25
+ * indicating a busy state.
26
+ *
27
+ * @example
28
+ * A simple loading with a Progress Bar.
29
+ * ```
30
+ * <ProgressBar />
31
+ * ```
32
+ * A Progress Bar that is 50% complete.
33
+ * ```
34
+ * <ProgressBar progress={50} />
35
+ * ```
36
+ */
37
+ export const ProgressBar = withRef(({ progress, speed, style, className, ...props }: ProgressBarProps) =>
38
+ <CitricComponent
39
+ tag="div"
40
+ component="progress-bar"
41
+ className={listToClass([className, isNil(progress) && 'indeterminate', speed === 'fast' && 'fast'])}
42
+ style={progress === undefined ? style : applyCSSVariable(style, 'progress', progress)}
43
+ {...props}
44
+ />,
45
+ )
@@ -1,45 +1,45 @@
1
- import { listToClass } from '@stack-spot/portal-theme'
2
- import { isNil } from 'lodash'
3
- import { WithColorPalette, WithColorScheme } from '../types'
4
- import { applyCSSVariable } from '../utils/css'
5
- import { withRef } from '../utils/react'
6
- import { CitricComponent } from './CitricComponent'
7
-
8
- export interface BaseProgressCircularProps extends WithColorScheme, WithColorPalette {
9
- /**
10
- * A number varying from 0 to 100.
11
- *
12
- * If not provided, the progress will be indeterminate, causing an animation loop.
13
- */
14
- progress?: number,
15
- /**
16
- * @default 'md'
17
- */
18
- size?: 'xs' | 'sm' | 'md' | 'lg',
19
- }
20
-
21
- export type ProgressCircularProps = React.JSX.IntrinsicElements['div'] & BaseProgressCircularProps
22
-
23
- /**
24
- * Shows a circular progress. This can indicate a loading state (spinner) or the progress of a task. When "progress" is not set, the
25
- * spinner is animated, indicating a busy state.
26
- *
27
- * @example
28
- * A simple loading with a Progress Circular.
29
- * ```
30
- * <ProgressCircular />
31
- * ```
32
- * A Progress Circular that is 50% complete.
33
- * ```
34
- * <ProgressCircular progress={50} />
35
- * ```
36
- */
37
- export const ProgressCircular = withRef(({ progress, size, style, className, ...props }: ProgressCircularProps) =>
38
- <CitricComponent
39
- tag="div"
40
- component="progress-circular"
41
- className={listToClass([size, className, isNil(progress) && 'indeterminate'])}
42
- style={progress === undefined ? style : applyCSSVariable(style, 'progress', progress)}
43
- {...props}
44
- />,
45
- )
1
+ import { listToClass } from '@stack-spot/portal-theme'
2
+ import { isNil } from 'lodash'
3
+ import { WithColorPalette, WithColorScheme } from '../types'
4
+ import { applyCSSVariable } from '../utils/css'
5
+ import { withRef } from '../utils/react'
6
+ import { CitricComponent } from './CitricComponent'
7
+
8
+ export interface BaseProgressCircularProps extends WithColorScheme, WithColorPalette {
9
+ /**
10
+ * A number varying from 0 to 100.
11
+ *
12
+ * If not provided, the progress will be indeterminate, causing an animation loop.
13
+ */
14
+ progress?: number,
15
+ /**
16
+ * @default 'md'
17
+ */
18
+ size?: 'xs' | 'sm' | 'md' | 'lg',
19
+ }
20
+
21
+ export type ProgressCircularProps = React.JSX.IntrinsicElements['div'] & BaseProgressCircularProps
22
+
23
+ /**
24
+ * Shows a circular progress. This can indicate a loading state (spinner) or the progress of a task. When "progress" is not set, the
25
+ * spinner is animated, indicating a busy state.
26
+ *
27
+ * @example
28
+ * A simple loading with a Progress Circular.
29
+ * ```
30
+ * <ProgressCircular />
31
+ * ```
32
+ * A Progress Circular that is 50% complete.
33
+ * ```
34
+ * <ProgressCircular progress={50} />
35
+ * ```
36
+ */
37
+ export const ProgressCircular = withRef(({ progress, size, style, className, ...props }: ProgressCircularProps) =>
38
+ <CitricComponent
39
+ tag="div"
40
+ component="progress-circular"
41
+ className={listToClass([size, className, isNil(progress) && 'indeterminate'])}
42
+ style={progress === undefined ? style : applyCSSVariable(style, 'progress', progress)}
43
+ {...props}
44
+ />,
45
+ )