@companix/uikit 0.0.1 → 0.0.3

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 (254) hide show
  1. package/dist/bundle.es.js +61 -0
  2. package/dist/bundle.es10.js +87 -0
  3. package/dist/bundle.es11.js +75 -0
  4. package/dist/bundle.es12.js +38 -0
  5. package/dist/bundle.es13.js +33 -0
  6. package/dist/bundle.es14.js +18 -0
  7. package/dist/bundle.es15.js +11 -0
  8. package/dist/bundle.es16.js +35 -0
  9. package/dist/bundle.es17.js +27 -0
  10. package/dist/bundle.es18.js +23 -0
  11. package/dist/bundle.es19.js +24 -0
  12. package/dist/bundle.es20.js +15 -0
  13. package/dist/bundle.es21.js +41 -0
  14. package/dist/bundle.es22.js +18 -0
  15. package/dist/bundle.es23.js +36 -0
  16. package/dist/bundle.es24.js +23 -0
  17. package/dist/bundle.es25.js +42 -0
  18. package/dist/bundle.es26.js +114 -0
  19. package/dist/bundle.es27.js +115 -0
  20. package/dist/bundle.es28.js +38 -0
  21. package/dist/bundle.es29.js +13 -0
  22. package/dist/bundle.es3.js +45 -0
  23. package/dist/bundle.es30.js +27 -0
  24. package/dist/bundle.es31.js +38 -0
  25. package/dist/bundle.es35.js +43 -0
  26. package/dist/bundle.es36.js +442 -0
  27. package/dist/bundle.es37.js +24 -0
  28. package/dist/bundle.es38.js +26 -0
  29. package/dist/bundle.es39.js +83 -0
  30. package/dist/bundle.es4.js +14 -0
  31. package/dist/bundle.es40.js +20 -0
  32. package/dist/bundle.es41.js +16 -0
  33. package/dist/bundle.es43.js +7 -0
  34. package/dist/bundle.es44.js +23 -0
  35. package/dist/bundle.es45.js +16 -0
  36. package/dist/bundle.es46.js +72 -0
  37. package/dist/bundle.es47.js +70 -0
  38. package/dist/bundle.es48.js +34 -0
  39. package/dist/bundle.es49.js +70 -0
  40. package/dist/bundle.es5.js +88 -0
  41. package/dist/bundle.es50.js +33 -0
  42. package/dist/bundle.es51.js +78 -0
  43. package/dist/bundle.es52.js +51 -0
  44. package/dist/bundle.es53.js +45 -0
  45. package/dist/bundle.es54.js +40 -0
  46. package/dist/bundle.es55.js +36 -0
  47. package/dist/bundle.es56.js +9 -0
  48. package/dist/bundle.es57.js +9 -0
  49. package/dist/bundle.es58.js +7 -0
  50. package/dist/bundle.es59.js +9 -0
  51. package/dist/bundle.es6.js +87 -0
  52. package/dist/bundle.es60.js +8 -0
  53. package/dist/bundle.es61.js +19 -0
  54. package/dist/bundle.es62.js +15 -0
  55. package/dist/bundle.es63.js +22 -0
  56. package/dist/bundle.es64.js +45 -0
  57. package/dist/bundle.es65.js +28 -0
  58. package/dist/bundle.es66.js +34 -0
  59. package/dist/bundle.es67.js +6 -0
  60. package/dist/bundle.es68.js +12 -0
  61. package/dist/bundle.es69.js +47 -0
  62. package/dist/bundle.es7.js +80 -0
  63. package/dist/bundle.es70.js +11 -0
  64. package/dist/bundle.es71.js +18 -0
  65. package/dist/bundle.es72.js +32 -0
  66. package/dist/bundle.es73.js +35 -0
  67. package/dist/bundle.es74.js +6 -0
  68. package/dist/bundle.es75.js +7 -0
  69. package/dist/bundle.es76.js +7 -0
  70. package/dist/bundle.es77.js +11 -0
  71. package/dist/bundle.es78.js +17 -0
  72. package/dist/bundle.es79.js +7 -0
  73. package/dist/bundle.es8.js +29 -0
  74. package/dist/bundle.es80.js +17 -0
  75. package/dist/bundle.es81.js +25 -0
  76. package/dist/bundle.es9.js +47 -0
  77. package/dist/types/Button/index.d.ts +20 -0
  78. package/dist/types/ButtonGroup/index.d.ts +7 -0
  79. package/dist/types/Checkbox/index.d.ts +10 -0
  80. package/dist/types/Countdown/index.d.ts +7 -0
  81. package/dist/types/DateInput/index.d.ts +13 -0
  82. package/dist/types/DatePicker/Calendar.d.ts +14 -0
  83. package/dist/types/DatePicker/CalendarHeader.d.ts +10 -0
  84. package/dist/types/DatePicker/index.d.ts +12 -0
  85. package/dist/types/Dialog/index.d.ts +12 -0
  86. package/dist/types/DialogAlert/Alert.d.ts +19 -0
  87. package/dist/types/DialogAlert/Viewport.d.ts +8 -0
  88. package/dist/types/DialogAlert/index.d.ts +11 -0
  89. package/dist/types/Drawer/index.d.ts +13 -0
  90. package/dist/types/File/index.d.ts +10 -0
  91. package/dist/types/Form/index.d.ts +17 -0
  92. package/dist/types/Icon/index.d.ts +7 -0
  93. package/dist/types/LoadButton/index.d.ts +5 -0
  94. package/dist/types/NumberInput/index.d.ts +6 -0
  95. package/dist/types/OptionItem/OptionItem.d.ts +7 -0
  96. package/dist/types/OptionItem/OptionsList.d.ts +8 -0
  97. package/dist/types/Popover/index.d.ts +26 -0
  98. package/dist/types/Radio/index.d.ts +20 -0
  99. package/dist/types/Scrollable/ImitateScroll.d.ts +10 -0
  100. package/dist/types/Scrollable/index.d.ts +33 -0
  101. package/dist/types/Select/SelectInput.d.ts +14 -0
  102. package/dist/types/Select/index.d.ts +15 -0
  103. package/dist/types/SelectTags/index.d.ts +15 -0
  104. package/dist/types/Spinner/index.d.ts +8 -0
  105. package/dist/types/Stepper/index.d.ts +8 -0
  106. package/dist/types/Switch/index.d.ts +10 -0
  107. package/dist/types/Tabs/index.d.ts +13 -0
  108. package/dist/types/TextArea/index.d.ts +7 -0
  109. package/dist/types/Toaster/RemoveListener.d.ts +3 -0
  110. package/dist/types/Toaster/Toast.d.ts +9 -0
  111. package/dist/types/Toaster/Viewport.d.ts +13 -0
  112. package/dist/types/Toaster/index.d.ts +15 -0
  113. package/dist/types/Tooltip/index.d.ts +8 -0
  114. package/dist/types/__hooks/use-frooze-closing.d.ts +5 -0
  115. package/dist/types/__hooks/use-loading.d.ts +8 -0
  116. package/dist/types/__hooks/use-local-storage.d.ts +1 -0
  117. package/dist/types/__hooks/use-popover-position.d.ts +8 -0
  118. package/dist/types/__hooks/use-previos.d.ts +2 -0
  119. package/dist/types/__hooks/use-resize.d.ts +3 -0
  120. package/dist/types/__hooks/use-scrollbox.d.ts +7 -0
  121. package/dist/types/__hooks/use-stepper-input.d.ts +13 -0
  122. package/dist/types/__hooks/use-update.d.ts +1 -0
  123. package/dist/types/__hooks/useCalendar.d.ts +17 -0
  124. package/dist/types/__hooks/useCalendarOptions-copy.d.ts +22 -0
  125. package/dist/types/__hooks/useCalendarOptions.d.ts +31 -0
  126. package/dist/types/__libs/calendar.d.ts +25 -0
  127. package/dist/types/__utils/utils.d.ts +25 -0
  128. package/dist/types/index.d.ts +31 -0
  129. package/dist/types/types.d.ts +13 -0
  130. package/dist/uikit.css +1 -0
  131. package/package.json +10 -6
  132. package/.eslintrc +0 -54
  133. package/declaration.d.ts +0 -4
  134. package/index.html +0 -12
  135. package/playground/App.tsx +0 -166
  136. package/playground/Example.tsx +0 -14
  137. package/playground/Test.tsx +0 -44
  138. package/playground/animation-test-1/index.scss +0 -20
  139. package/playground/animation-test-1/index.tsx +0 -17
  140. package/playground/animation-test-2/index.scss +0 -62
  141. package/playground/animation-test-2/index.tsx +0 -32
  142. package/playground/bootstrap.tsx +0 -19
  143. package/playground/buttons/index.tsx +0 -132
  144. package/playground/checkbox/index.tsx +0 -64
  145. package/playground/date-input/index.tsx +0 -45
  146. package/playground/date-picker/index.tsx +0 -41
  147. package/playground/dialog/index.tsx +0 -92
  148. package/playground/dialog-alert/index.tsx +0 -47
  149. package/playground/drawer/index.tsx +0 -55
  150. package/playground/index.css +0 -33
  151. package/playground/index.scss +0 -270
  152. package/playground/input/index.tsx +0 -112
  153. package/playground/number-inputs/index.tsx +0 -50
  154. package/playground/popovers/index.tsx +0 -70
  155. package/playground/radio-group/index.tsx +0 -69
  156. package/playground/select/index.tsx +0 -72
  157. package/playground/select-tags/index.tsx +0 -36
  158. package/playground/styles.scss +0 -2
  159. package/playground/switch/index.tsx +0 -44
  160. package/playground/tabs/index.tsx +0 -16
  161. package/playground/test.scss +0 -0
  162. package/playground/text-area/index.tsx +0 -17
  163. package/playground/text-input/index.tsx +0 -12
  164. package/playground/toaster/index.tsx +0 -156
  165. package/playground/tooltip/index.tsx +0 -26
  166. package/src/Button/Button.scss +0 -128
  167. package/src/Button/index.tsx +0 -72
  168. package/src/ButtonGroup/ButtonGroup.scss +0 -18
  169. package/src/ButtonGroup/index.tsx +0 -20
  170. package/src/Checkbox/Checkbox.scss +0 -115
  171. package/src/Checkbox/index.tsx +0 -46
  172. package/src/Countdown/index.tsx +0 -54
  173. package/src/DateInput/DateInput.scss +0 -11
  174. package/src/DateInput/index.tsx +0 -96
  175. package/src/DatePicker/Calendar.scss +0 -125
  176. package/src/DatePicker/Calendar.tsx +0 -157
  177. package/src/DatePicker/CalendarHeader.tsx +0 -139
  178. package/src/DatePicker/DatePicker.scss +0 -0
  179. package/src/DatePicker/index.tsx +0 -177
  180. package/src/Dialog/Dialog.scss +0 -25
  181. package/src/Dialog/Popup.scss +0 -55
  182. package/src/Dialog/index.tsx +0 -31
  183. package/src/DialogAlert/Alert.scss +0 -52
  184. package/src/DialogAlert/Alert.tsx +0 -78
  185. package/src/DialogAlert/Viewport.tsx +0 -52
  186. package/src/DialogAlert/index.tsx +0 -37
  187. package/src/Drawer/Drawer.scss +0 -112
  188. package/src/Drawer/index.tsx +0 -46
  189. package/src/File/index.tsx +0 -60
  190. package/src/Form/Form.scss +0 -70
  191. package/src/Form/Input.scss +0 -24
  192. package/src/Form/index.tsx +0 -131
  193. package/src/Icon/icon.scss +0 -18
  194. package/src/Icon/index.tsx +0 -43
  195. package/src/LoadButton/index.tsx +0 -17
  196. package/src/NumberInput/index.tsx +0 -74
  197. package/src/OptionItem/Option.scss +0 -89
  198. package/src/OptionItem/OptionItem.tsx +0 -49
  199. package/src/OptionItem/OptionsList.tsx +0 -26
  200. package/src/Popover/Popover.scss +0 -80
  201. package/src/Popover/index.tsx +0 -117
  202. package/src/Radio/Radio.scss +0 -148
  203. package/src/Radio/index.tsx +0 -68
  204. package/src/Scrollable/ImitateScroll.tsx +0 -141
  205. package/src/Scrollable/Scrollable.scss +0 -50
  206. package/src/Scrollable/index.tsx +0 -141
  207. package/src/Select/Select.scss +0 -80
  208. package/src/Select/SelectInput.tsx +0 -131
  209. package/src/Select/index.tsx +0 -134
  210. package/src/SelectTags/SelectTags.scss +0 -66
  211. package/src/SelectTags/index.tsx +0 -192
  212. package/src/Spinner/Spinner.scss +0 -14
  213. package/src/Spinner/index.tsx +0 -19
  214. package/src/Stepper/StepperInput.scss +0 -35
  215. package/src/Stepper/index.tsx +0 -76
  216. package/src/Switch/Switch.scss +0 -102
  217. package/src/Switch/index.tsx +0 -49
  218. package/src/Tabs/Tabs.scss +0 -58
  219. package/src/Tabs/index.tsx +0 -89
  220. package/src/TextArea/TextArea.scss +0 -34
  221. package/src/TextArea/index.tsx +0 -51
  222. package/src/Toaster/RemoveListener.tsx +0 -11
  223. package/src/Toaster/Toast.tsx +0 -69
  224. package/src/Toaster/Toaster.scss +0 -151
  225. package/src/Toaster/Viewport.tsx +0 -117
  226. package/src/Toaster/index.tsx +0 -52
  227. package/src/Tooltip/Tooltip.scss +0 -28
  228. package/src/Tooltip/index.tsx +0 -33
  229. package/src/__hooks/use-frooze-closing.ts +0 -51
  230. package/src/__hooks/use-loading.ts +0 -34
  231. package/src/__hooks/use-local-storage.ts +0 -19
  232. package/src/__hooks/use-popover-position.ts +0 -24
  233. package/src/__hooks/use-previos.ts +0 -25
  234. package/src/__hooks/use-resize.ts +0 -41
  235. package/src/__hooks/use-scrollbox.ts +0 -45
  236. package/src/__hooks/use-stepper-input.ts +0 -82
  237. package/src/__hooks/use-update.ts +0 -19
  238. package/src/__hooks/useCalendar.ts +0 -104
  239. package/src/__hooks/useCalendarOptions-copy.ts +0 -87
  240. package/src/__hooks/useCalendarOptions.ts +0 -68
  241. package/src/__libs/calendar.ts +0 -175
  242. package/src/__utils/utils.ts +0 -137
  243. package/src/css.scss +0 -120
  244. package/src/index.scss +0 -22
  245. package/src/index.ts +0 -36
  246. package/src/mixins.scss +0 -99
  247. package/src/theme.scss +0 -103
  248. package/src/types.ts +0 -14
  249. package/tailwind.config.js +0 -91
  250. package/themes/classic/animations.scss +0 -179
  251. package/themes/classic/classic.scss +0 -493
  252. package/tsconfig.json +0 -27
  253. package/vite.build.ts +0 -35
  254. package/vite.config.ts +0 -33
@@ -1,177 +0,0 @@
1
- import { Popover } from '..'
2
- import { Form, FormProps } from '../Form'
3
- import { faChevronDown, faClose } from '@fortawesome/free-solid-svg-icons'
4
- import { Icon } from '../Icon'
5
- import { useRef, useState } from 'react'
6
- import { Calendar, CalendarProps } from './Calendar'
7
- import { useDayDisableCheker } from '../__libs/calendar'
8
- import { formatTime, getNum } from '@companix/utils-js'
9
-
10
- interface DatePickerProps
11
- extends Omit<CalendarProps, 'onChange'>,
12
- Omit<FormProps, 'value' | 'onChange' | 'rightElement'> {
13
- onChange?: (value: Date | null) => void
14
- placeholder?: string
15
- clearButton?: boolean
16
- clearButtonIcon?: boolean
17
- children?: React.ReactNode
18
- minimalOptions?: boolean
19
- }
20
-
21
- const createInputValue = (value: Date | null, char: string = '-'): string => {
22
- if (value) {
23
- const day = formatTime(value.getDate())
24
- const month = formatTime(value.getMonth() + 1)
25
- const year = value.getFullYear()
26
-
27
- return [day, month, year].join(char)
28
- }
29
-
30
- return ''
31
- }
32
-
33
- const inputToDate = (input: string, char: string = '-'): Date | null => {
34
- const values = input.split(char)
35
-
36
- if (values.length === 3) {
37
- const [day, month, year] = [getNum(values[0]), getNum(values[1]), getNum(values[2])]
38
-
39
- if (day && month && year) {
40
- const date = new Date(year, month - 1, day)
41
-
42
- if (date.getFullYear() === year && date.getDate() === day && date.getMonth() === month - 1) {
43
- return date
44
- }
45
- }
46
- }
47
-
48
- return null
49
- }
50
-
51
- export const DatePicker = (props: DatePickerProps) => {
52
- const {
53
- minimalOptions,
54
- clearButton,
55
- clearButtonIcon,
56
- children,
57
- disabled,
58
- // calendar props
59
- value,
60
-
61
- enableTime,
62
- disablePickers,
63
- showNeighboringMonth,
64
- onChange,
65
- shouldDisableDate,
66
- viewDate,
67
- disablePast,
68
- disableFuture,
69
- minDateTime,
70
- maxDateTime,
71
- // input props
72
- ...inputProps
73
- } = props
74
-
75
- const [inputValue, setInputValue] = useState(() => {
76
- return createInputValue(value ?? null)
77
- })
78
-
79
- const popoverRef = useRef<HTMLDivElement>(null)
80
-
81
- const isDayDisabled = useDayDisableCheker({
82
- disableFuture,
83
- disablePast,
84
- shouldDisableDate,
85
- minDateTime,
86
- maxDateTime
87
- })
88
-
89
- const handleRootClick = (event: React.MouseEvent) => {
90
- if (disabled) return
91
-
92
- // Предотвращаем закрытие Popover при клике на форму
93
- if (popoverRef.current && popoverRef.current.getAttribute('data-state') === 'open') {
94
- event.preventDefault()
95
- }
96
- }
97
-
98
- const handleClear = (e: React.MouseEvent) => {
99
- e.stopPropagation()
100
-
101
- setInputValue('')
102
- onChange?.(null)
103
- }
104
-
105
- const handleInputChange = (value: string) => {
106
- setInputValue(value)
107
-
108
- const date = inputToDate(value)
109
-
110
- if (date && !isDayDisabled(date)) {
111
- onChange?.(date)
112
- }
113
- }
114
-
115
- const handleInputBlur = () => {
116
- const date = inputToDate(inputValue)
117
-
118
- if (!date || isDayDisabled(date)) {
119
- setInputValue(createInputValue(value ?? null))
120
- }
121
- }
122
-
123
- const handleCalendarChange = (value: Date) => {
124
- onChange?.(value)
125
- setInputValue(createInputValue(value))
126
- }
127
-
128
- return (
129
- <Popover
130
- minimal
131
- ref={popoverRef}
132
- sideOffset={0}
133
- onOpenAutoFocus={(e) => e.preventDefault()}
134
- onCloseAutoFocus={(e) => e.preventDefault()}
135
- disabled={disabled}
136
- content={() => (
137
- <Calendar
138
- value={value}
139
- disablePast={disablePast}
140
- disableFuture={disableFuture}
141
- enableTime={enableTime}
142
- disablePickers={disablePickers}
143
- showNeighboringMonth={showNeighboringMonth}
144
- onChange={handleCalendarChange}
145
- shouldDisableDate={shouldDisableDate}
146
- viewDate={viewDate}
147
- minDateTime={minDateTime}
148
- maxDateTime={maxDateTime}
149
- />
150
- )}
151
- >
152
- <Form
153
- {...inputProps}
154
- value={inputValue}
155
- disabled={disabled}
156
- onClick={handleRootClick}
157
- onValueChange={handleInputChange}
158
- onBlur={handleInputBlur}
159
- mask={'99-99-9999'}
160
- rightElement={
161
- <>
162
- {clearButton && isInputDefined(inputValue) && (
163
- <button className="select-close-button" onClick={handleClear}>
164
- {clearButtonIcon ?? <Icon className="select-close-icon" icon={faClose} size="xxxs" />}
165
- </button>
166
- )}
167
- <Icon className="expand-icon select-expand" icon={faChevronDown} size="xxxs" />
168
- </>
169
- }
170
- />
171
- </Popover>
172
- )
173
- }
174
-
175
- const isInputDefined = (value: string) => {
176
- return value.trim().replaceAll('-', '').replaceAll('_', '')
177
- }
@@ -1,25 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .dialog {
4
- &-container {
5
- @include mixins.use-styles(dialog, container);
6
- }
7
-
8
- &-overlay {
9
- @include mixins.use-styles(dialog, overlay);
10
- }
11
-
12
- @include mixins.use-styles(dialog);
13
- }
14
-
15
- .dialog-container {
16
- @each $size, $v in (xxs, xs, s, m, l, xl, xxl, full) {
17
- &[data-size='#{$size}'] {
18
- @include mixins.use-styles(dialog, size, $size, container);
19
-
20
- .dialog {
21
- @include mixins.use-styles(dialog, size, $size);
22
- }
23
- }
24
- }
25
- }
@@ -1,55 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .popup {
4
- display: flex;
5
- flex-direction: column;
6
- max-height: 100%;
7
- z-index: 1000;
8
- outline: none;
9
- pointer-events: auto;
10
- position: relative;
11
- width: 100%;
12
-
13
- @include mixins.use-styles(popup);
14
-
15
- &-overlay {
16
- inset: 0;
17
- overflow: auto;
18
- position: fixed;
19
- -webkit-user-select: none;
20
- -moz-user-select: none;
21
- -ms-user-select: none;
22
- user-select: none;
23
- outline: none;
24
- z-index: 9999;
25
-
26
- @include mixins.use-styles(popup, overlay);
27
-
28
- &[data-state='open'] {
29
- @include mixins.use-styles(popup, overlay, in);
30
- }
31
-
32
- &[data-state='closed'] {
33
- @include mixins.use-styles(popup, overlay, out);
34
- }
35
- }
36
-
37
- &-container {
38
- position: fixed;
39
- inset: 0;
40
- z-index: 9999;
41
- display: flex;
42
- align-items: center;
43
- justify-content: center;
44
- pointer-events: none !important;
45
- outline: none;
46
-
47
- &[data-state='open'] {
48
- @include mixins.use-styles(popup, in);
49
- }
50
-
51
- &[data-state='closed'] {
52
- @include mixins.use-styles(popup, out);
53
- }
54
- }
55
- }
@@ -1,31 +0,0 @@
1
- import cn from 'classnames'
2
- import * as DialogPrimitive from '@radix-ui/react-dialog'
3
- import { VisuallyHidden } from '@radix-ui/react-visually-hidden'
4
-
5
- export interface DialogProps {
6
- open: boolean
7
- onOpenChange: (value: boolean) => void
8
- children: React.ReactNode
9
- size?: 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl' | 'full'
10
- className?: string
11
- }
12
-
13
- export const Dialog = ({ size = 's', open, onOpenChange, children, className }: DialogProps) => {
14
- return (
15
- <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>
16
- <DialogPrimitive.Portal>
17
- <DialogPrimitive.Overlay className="popup-overlay dialog-overlay" />
18
- <DialogPrimitive.Content className="popup-container dialog-container" data-size={size}>
19
- <div className={cn('popup dialog', className)}>
20
- <VisuallyHidden>
21
- <DialogPrimitive.Title />
22
- </VisuallyHidden>
23
- {children}
24
- </div>
25
- </DialogPrimitive.Content>
26
- </DialogPrimitive.Portal>
27
- </DialogPrimitive.Root>
28
- )
29
- }
30
-
31
- Dialog.Close = DialogPrimitive.Close
@@ -1,52 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .alert {
4
- max-height: max-content;
5
-
6
- @include mixins.use-styles(alert);
7
-
8
- &-container {
9
- @include mixins.use-styles(alert, container);
10
- }
11
-
12
- &-overlay {
13
- @include mixins.use-styles(alert, overlay);
14
- }
15
-
16
- &-body {
17
- display: flex;
18
- flex-direction: row;
19
-
20
- @include mixins.use-styles(alert, body);
21
- }
22
-
23
- &-title {
24
- @include mixins.use-styles(alert, title);
25
- }
26
-
27
- &-description {
28
- @include mixins.use-styles(alert, description);
29
- }
30
-
31
- &-icon {
32
- @include mixins.use-styles(alert, icon);
33
-
34
- svg {
35
- @include mixins.use-size(alert, icon, size);
36
- }
37
- }
38
-
39
- &-content {
40
- display: flex;
41
- flex-direction: column;
42
-
43
- @include mixins.use-styles(alert, content);
44
- }
45
-
46
- &-footer {
47
- display: flex;
48
- justify-content: end;
49
-
50
- @include mixins.use-styles(alert, footer);
51
- }
52
- }
@@ -1,78 +0,0 @@
1
- import * as AlertPrimitive from '@radix-ui/react-alert-dialog'
2
- import { Button } from '..'
3
- import { InternButtonProps } from '../Button'
4
- import { RemoveListener } from '../Toaster/RemoveListener'
5
- import { VisuallyHidden } from '@radix-ui/react-visually-hidden'
6
-
7
- interface ActionProps extends Omit<InternButtonProps, 'children'> {
8
- onClick?: () => void
9
- }
10
-
11
- export interface AlertDialogProps {
12
- open?: boolean
13
- defaultOpen?: boolean
14
- onOpenChange?: (value: boolean) => void
15
- onUnMounted?: () => void
16
- icon?: React.ReactNode
17
- title?: string
18
- description?: string
19
- confirm?: ActionProps
20
- cancel?: ActionProps
21
- cancelDefaultText?: string
22
- disableCancel?: boolean
23
- }
24
-
25
- export const AlertDialog = ({
26
- open,
27
- defaultOpen,
28
- onOpenChange,
29
- onUnMounted,
30
- icon,
31
- title,
32
- description,
33
- cancelDefaultText,
34
- cancel,
35
- disableCancel,
36
- confirm
37
- }: AlertDialogProps) => {
38
- return (
39
- <AlertPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
40
- <RemoveListener callback={onUnMounted} />
41
- <AlertPrimitive.Portal>
42
- <AlertPrimitive.Overlay className="popup-overlay dialog-overlay" />
43
- <AlertPrimitive.Content className="popup-container dialog-container">
44
- <div className="popup alert">
45
- <div className="alert-body">
46
- {icon && <span className="alert-icon">{icon}</span>}
47
- <div className="alert-content">
48
- {title && <AlertPrimitive.Title className="alert-title">{title}</AlertPrimitive.Title>}
49
- {!title && (
50
- <VisuallyHidden>
51
- <AlertPrimitive.Title />
52
- </VisuallyHidden>
53
- )}
54
- {description && (
55
- <AlertPrimitive.Description className="alert-description">
56
- {description}
57
- </AlertPrimitive.Description>
58
- )}
59
- </div>
60
- </div>
61
- <div className="alert-footer">
62
- {!disableCancel && (cancel?.text || cancelDefaultText) && (
63
- <AlertPrimitive.Cancel asChild>
64
- <Button appearance="neutral" {...cancel} text={cancel?.text ?? cancelDefaultText} />
65
- </AlertPrimitive.Cancel>
66
- )}
67
- {confirm?.text && (
68
- <AlertPrimitive.Action asChild>
69
- <Button appearance="negative" {...confirm} />
70
- </AlertPrimitive.Action>
71
- )}
72
- </div>
73
- </div>
74
- </AlertPrimitive.Content>
75
- </AlertPrimitive.Portal>
76
- </AlertPrimitive.Root>
77
- )
78
- }
@@ -1,52 +0,0 @@
1
- import { forwardRef, useImperativeHandle, useState } from 'react'
2
- import { InnerAlert } from '.'
3
- import { AlertDialog, AlertDialogProps } from './Alert'
4
-
5
- export interface ViewportRef {
6
- showAlert: (alert: InnerAlert) => void
7
- }
8
-
9
- export interface AlertBaseProps extends Pick<AlertDialogProps, 'cancelDefaultText'> {}
10
-
11
- export const Viewport = forwardRef<ViewportRef, AlertBaseProps>((props, ref) => {
12
- const [alerts, setAlerts] = useState<InnerAlert[]>([])
13
-
14
- useImperativeHandle(
15
- ref,
16
- () => {
17
- return {
18
- showAlert: (alert) => {
19
- setAlerts((state) => [...state, alert])
20
- }
21
- }
22
- },
23
- []
24
- )
25
-
26
- const handleClose = (id: string) => {
27
- setAlerts((state) => {
28
- const nextState = [...state]
29
- const index = nextState.findIndex((item) => item.id === id)
30
-
31
- if (index !== -1) {
32
- nextState.splice(index, 1)
33
- }
34
-
35
- return nextState
36
- })
37
- }
38
-
39
- return (
40
- <>
41
- {alerts.map(({ id, ...alert }) => (
42
- <AlertDialog
43
- defaultOpen
44
- onUnMounted={() => handleClose(id)}
45
- key={`alert-${id}`}
46
- {...props}
47
- {...alert}
48
- />
49
- ))}
50
- </>
51
- )
52
- })
@@ -1,37 +0,0 @@
1
- import { hash } from '@companix/utils-js'
2
- import { useMemo, useRef } from 'react'
3
- import { AlertDialogProps } from './Alert'
4
- import { AlertBaseProps, Viewport, ViewportRef } from './Viewport'
5
-
6
- export interface AlertOptions extends Omit<AlertDialogProps, 'open' | 'onOpenChange'> {}
7
-
8
- export interface InnerAlert extends AlertOptions {
9
- id: string
10
- }
11
-
12
- export const createAlertAgent = (options: AlertBaseProps = {}) => {
13
- const store = {
14
- emit: (alert: InnerAlert) => {
15
- console.error('uninitialized', alert)
16
- }
17
- }
18
-
19
- return {
20
- show: (value: Omit<InnerAlert, 'id'>) => {
21
- store.emit({ ...value, id: hash() })
22
- },
23
- Viewport: () => {
24
- const ref = useRef<ViewportRef>(null)
25
-
26
- useMemo(() => {
27
- store.emit = (value) => {
28
- if (ref.current) {
29
- ref.current.showAlert(value)
30
- }
31
- }
32
- }, [])
33
-
34
- return <Viewport ref={ref} {...options} />
35
- }
36
- }
37
- }
@@ -1,112 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .drawer {
4
- display: flex;
5
- flex-direction: column;
6
- max-height: 100%;
7
- z-index: 1000;
8
- outline: none;
9
- pointer-events: auto;
10
- position: fixed;
11
- z-index: 9999;
12
-
13
- @include mixins.use-styles(drawer);
14
-
15
- &-overlay {
16
- inset: 0;
17
- overflow: auto;
18
- position: fixed;
19
- -webkit-user-select: none;
20
- -moz-user-select: none;
21
- -ms-user-select: none;
22
- user-select: none;
23
- outline: none;
24
- z-index: 9999;
25
-
26
- @include mixins.use-styles(drawer, overlay);
27
-
28
- &[data-state='open'] {
29
- @include mixins.use-styles(drawer, overlay, in);
30
- }
31
-
32
- &[data-state='closed'] {
33
- @include mixins.use-styles(drawer, overlay, out);
34
- }
35
- }
36
-
37
- // animations
38
-
39
- &[data-state='open'] {
40
- &[data-direction='left'] {
41
- @include mixins.use-styles(drawer, in, left);
42
- }
43
-
44
- &[data-direction='right'] {
45
- @include mixins.use-styles(drawer, in, right);
46
- }
47
-
48
- &[data-direction='top'] {
49
- @include mixins.use-styles(drawer, in, top);
50
- }
51
-
52
- &[data-direction='bottom'] {
53
- @include mixins.use-styles(drawer, in, bottom);
54
- }
55
- }
56
-
57
- &[data-state='closed'] {
58
- &[data-direction='left'] {
59
- @include mixins.use-styles(drawer, out, left);
60
- }
61
-
62
- &[data-direction='right'] {
63
- @include mixins.use-styles(drawer, out, right);
64
- }
65
-
66
- &[data-direction='top'] {
67
- @include mixins.use-styles(drawer, out, top);
68
- }
69
-
70
- &[data-direction='bottom'] {
71
- @include mixins.use-styles(drawer, out, bottom);
72
- }
73
- }
74
-
75
- // placement
76
-
77
- &[data-direction='left'] {
78
- top: 0;
79
- left: 0;
80
- bottom: 0;
81
- width: var(--drawer-size, 50%);
82
- border-top-right-radius: var(--drawer_radius, 0);
83
- border-bottom-right-radius: var(--drawer_radius, 0);
84
- }
85
-
86
- &[data-direction='right'] {
87
- top: 0;
88
- right: 0;
89
- bottom: 0;
90
- width: var(--drawer-size, 50%);
91
- border-top-left-radius: var(--drawer_radius, 0);
92
- border-bottom-left-radius: var(--drawer_radius, 0);
93
- }
94
-
95
- &[data-direction='bottom'] {
96
- left: 0;
97
- right: 0;
98
- bottom: 0;
99
- height: var(--drawer-size, 50%);
100
- border-top-right-radius: var(--drawer_radius, 0);
101
- border-top-left-radius: var(--drawer_radius, 0);
102
- }
103
-
104
- &[data-direction='top'] {
105
- left: 0;
106
- right: 0;
107
- top: 0;
108
- height: var(--drawer-size, 50%);
109
- border-bottom-right-radius: var(--drawer_radius, 0);
110
- border-bottom-left-radius: var(--drawer_radius, 0);
111
- }
112
- }
@@ -1,46 +0,0 @@
1
- import classNames from 'classnames'
2
- import * as DialogPrimitive from '@radix-ui/react-dialog'
3
- import { VisuallyHidden } from '@radix-ui/react-visually-hidden'
4
- import { varToStyle } from '@companix/utils-browser'
5
-
6
- export interface DrawerProps {
7
- open: boolean
8
- onOpenChange: (value: boolean) => void
9
- children: React.ReactNode
10
- direction?: 'bottom' | 'top' | 'left' | 'right'
11
- className?: string
12
- /**
13
- * CSS size of the drawer. This sets `width` if horizontal position (default)
14
- * and `height` otherwise.
15
- *
16
- * Constants are available for common sizes:
17
- * - `DrawerSize.SMALL = 360px`
18
- * - `DrawerSize.STANDARD = 50%`
19
- * - `DrawerSize.LARGE = 90%`
20
- *
21
- * @default DrawerSize.STANDARD = "50%"
22
- */
23
- size?: string
24
- }
25
-
26
- export const Drawer = ({ open, onOpenChange, children, size, direction, className }: DrawerProps) => {
27
- return (
28
- <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>
29
- <DialogPrimitive.Portal>
30
- <DialogPrimitive.Overlay className="drawer-overlay" />
31
- <DialogPrimitive.Content
32
- style={varToStyle({ '--drawer-size': size ?? '50%' })}
33
- className={classNames('drawer', className)}
34
- data-direction={direction}
35
- >
36
- <VisuallyHidden>
37
- <DialogPrimitive.Title />
38
- </VisuallyHidden>
39
- {children}
40
- </DialogPrimitive.Content>
41
- </DialogPrimitive.Portal>
42
- </DialogPrimitive.Root>
43
- )
44
- }
45
-
46
- Drawer.Close = DialogPrimitive.Close