@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,76 +0,0 @@
1
- import './StepperInput.scss'
2
-
3
- import { Form } from '../Form'
4
- import { useStepperInput, StepperInputOptions } from '../__hooks/use-stepper-input'
5
- import { usePress } from '@react-aria/interactions'
6
- import { Button } from '../Button'
7
- import { attr } from '@companix/utils-browser'
8
- import { Icon } from '../Icon'
9
- import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons'
10
-
11
- interface StepperInputProps extends StepperInputOptions {
12
- buttons?: boolean
13
- placeholder?: string
14
- inputStyle?: React.CSSProperties
15
- }
16
-
17
- export const StepperInput = ({ inputStyle, placeholder, buttons, ...options }: StepperInputProps) => {
18
- const { inputRef, increment, decrement, handleChange, value } = useStepperInput(options)
19
-
20
- return (
21
- <div className="number-input-container">
22
- <Form
23
- ref={inputRef}
24
- placeholder={placeholder}
25
- style={inputStyle}
26
- value={value}
27
- onChange={handleChange}
28
- />
29
- {buttons && <Stepper increment={increment} decrement={decrement} />}
30
- </div>
31
- )
32
- }
33
-
34
- interface StepperProps {
35
- increment: () => void
36
- decrement: () => void
37
- }
38
-
39
- const Stepper = ({ increment, decrement }: StepperProps) => {
40
- return (
41
- <div className="number-stepper">
42
- <SlepButton slot="increment" onClick={increment}>
43
- <Icon size="xxs" icon={faChevronUp} />
44
- </SlepButton>
45
- <div className="number-stepper-splitter" />
46
- <SlepButton slot="decrement" onClick={decrement}>
47
- <Icon size="xxs" icon={faChevronDown} />
48
- </SlepButton>
49
- </div>
50
- )
51
- }
52
-
53
- interface ButtonProps {
54
- children: React.ReactNode
55
- slot: string
56
- onClick: () => void
57
- }
58
-
59
- const SlepButton = ({ children, slot, onClick }: ButtonProps) => {
60
- const { pressProps, isPressed } = usePress({ onClick, preventFocusOnPress: true })
61
- const { onBeforeInput, ...rest } = pressProps
62
-
63
- return (
64
- <Button
65
- {...rest}
66
- onBeforeInput={onBeforeInput as any}
67
- data-slot={slot}
68
- data-size={undefined}
69
- data-pressed={attr(isPressed)}
70
- style={{ border: 'none' }}
71
- className="number-stepper-slot"
72
- >
73
- {children}
74
- </Button>
75
- )
76
- }
@@ -1,102 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .switch {
4
- display: inline-table;
5
- user-select: none;
6
- touch-action: manipulation;
7
- max-width: max-content;
8
-
9
- &[data-disabled] {
10
- @include mixins.use-styles(switch, disabled);
11
- }
12
-
13
- &-track {
14
- cursor: pointer;
15
- outline: none;
16
- position: relative;
17
-
18
- &:after {
19
- visibility: hidden;
20
- content: '\00A0';
21
- }
22
-
23
- &[data-disabled] {
24
- cursor: default;
25
- @include mixins.use-styles(switch, track, disabled);
26
- }
27
-
28
- &[data-state='checked'] {
29
- @include mixins.use-styles(switch, track, checked);
30
- }
31
-
32
- &[data-state='unchecked'] {
33
- @include mixins.use-styles(switch, track, unchecked);
34
- }
35
-
36
- @include mixins.use-styles(switch, track);
37
- }
38
-
39
- &-thumb {
40
- position: absolute;
41
- top: 0;
42
- left: 0;
43
-
44
- @include mixins.use-styles(switch, thumb);
45
- @include mixins.use-size(switch, thumb, size);
46
-
47
- border-radius: 9999px;
48
-
49
- &[data-state='unchecked'] {
50
- transform: translate(
51
- var(--switch_track_outline_width),
52
- calc(var(--switch_track_height) - var(--switch_thumb_size) - var(--switch_track_outline_width))
53
- );
54
-
55
- .switch-thumb-icon {
56
- @include mixins.use-styles(switch, icon, unchecked);
57
- }
58
- }
59
-
60
- &[data-state='checked'] {
61
- transform: translate(
62
- calc(var(--switch_track_width) - var(--switch_thumb_size) - var(--switch_track_outline_width)),
63
- calc(var(--switch_track_height) - var(--switch_thumb_size) - var(--switch_track_outline_width))
64
- );
65
-
66
- .switch-thumb-icon {
67
- @include mixins.use-styles(switch, icon, checked);
68
- }
69
- }
70
-
71
- &-icon {
72
- display: flex;
73
- align-items: center;
74
- justify-content: center;
75
- position: absolute;
76
- inset: 0;
77
-
78
- @include mixins.use-styles(switch, icon);
79
-
80
- &[data-visible] {
81
- @include mixins.use-styles(switch, icon, visible);
82
- }
83
-
84
- svg {
85
- @include mixins.use-size(switch, icon, size);
86
- }
87
- }
88
- }
89
-
90
- &-label {
91
- cursor: pointer;
92
- display: table-cell;
93
- word-break: break-word;
94
-
95
- &[data-disabled] {
96
- cursor: default;
97
- @include mixins.use-styles(switch, label, disabled);
98
- }
99
-
100
- @include mixins.use-styles(switch, label);
101
- }
102
- }
@@ -1,49 +0,0 @@
1
- import * as SwitchPrimitive from '@radix-ui/react-switch'
2
- import { attr } from '@companix/utils-browser'
3
- import { useId } from 'react'
4
-
5
- export interface SwitchProps {
6
- checked: boolean
7
- onCheckedChange: (checked: boolean) => void
8
- label?: React.ReactNode
9
- disabled?: boolean
10
- checkedIcon?: React.ReactNode
11
- uncheckedIcon?: React.ReactNode
12
- }
13
-
14
- const Switch = (props: SwitchProps) => {
15
- const { checked, disabled, onCheckedChange, uncheckedIcon, checkedIcon, label } = props
16
- const id = useId()
17
-
18
- return (
19
- <div className="switch" data-disabled={attr(disabled)}>
20
- <SwitchPrimitive.Root
21
- className="switch-track"
22
- checked={checked}
23
- onCheckedChange={onCheckedChange}
24
- disabled={disabled}
25
- id={id}
26
- >
27
- <SwitchPrimitive.Thumb className="switch-thumb">
28
- {uncheckedIcon && (
29
- <span className="switch-thumb-icon" data-visible={attr(!checked)}>
30
- {uncheckedIcon}
31
- </span>
32
- )}
33
- {checkedIcon && (
34
- <span className="switch-thumb-icon" data-visible={attr(checked)}>
35
- {checkedIcon}
36
- </span>
37
- )}
38
- </SwitchPrimitive.Thumb>
39
- </SwitchPrimitive.Root>
40
- {label && (
41
- <label className="switch-label" htmlFor={id} data-disabled={disabled}>
42
- {label}
43
- </label>
44
- )}
45
- </div>
46
- )
47
- }
48
-
49
- export { Switch }
@@ -1,58 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .tabs {
4
- display: flex;
5
- align-items: flex-end;
6
- flex: 0 0 auto;
7
- position: relative;
8
-
9
- @include mixins.use-styles(tab, container);
10
- }
11
-
12
- .tab-indicator-container {
13
- left: 0;
14
- pointer-events: none;
15
- position: absolute;
16
- top: 0;
17
-
18
- @include mixins.use-styles(tab, indicator, container);
19
- }
20
-
21
- .tab-indicator {
22
- position: absolute;
23
- bottom: 0;
24
- left: 0;
25
- right: 0;
26
-
27
- @include mixins.use-styles(tab, indicator);
28
- }
29
-
30
- .tab {
31
- outline: none;
32
- font-family: inherit;
33
- flex: 1;
34
- display: flex;
35
- align-items: center;
36
- justify-content: center;
37
- line-height: 1;
38
- background-color: transparent;
39
- user-select: none;
40
- position: relative;
41
- cursor: pointer;
42
- font-family: inherit;
43
-
44
- @include mixins.use-styles(tab);
45
-
46
- &[data-disabled] {
47
- cursor: not-allowed;
48
- @include mixins.use-styles(tab, disabled);
49
- }
50
-
51
- &:not([data-disabled]):not([data-state='active']):hover {
52
- @include mixins.use-styles(tab, hover);
53
- }
54
-
55
- &[data-state='active'] {
56
- @include mixins.use-styles(tab, active);
57
- }
58
- }
@@ -1,89 +0,0 @@
1
- import * as RadixTabs from '@radix-ui/react-tabs'
2
- import { createContext, useContext, useEffect, useId, useRef, useState } from 'react'
3
-
4
- interface Props {
5
- children: React.ReactNode
6
- onChange: (value: string) => void
7
- value: string
8
- }
9
-
10
- const TabsContext = createContext({ baseId: '', listRef: {} as React.RefObject<HTMLDivElement> })
11
-
12
- const makeTriggerId = (baseId: string, value: string) => {
13
- return `radix-${baseId}-trigger-${value}`
14
- }
15
-
16
- export const Tabs = ({ children, value, onChange }: Props) => {
17
- const listRef = useRef<HTMLDivElement>(null)
18
- const baseId = useId()
19
-
20
- return (
21
- <RadixTabs.Root value={value} onValueChange={onChange}>
22
- <TabsContext.Provider value={{ baseId, listRef }}>
23
- <RadixTabs.List className="tabs" ref={listRef}>
24
- <TabIndicator value={value} />
25
- {children}
26
- </RadixTabs.List>
27
- </TabsContext.Provider>
28
- </RadixTabs.Root>
29
- )
30
- }
31
-
32
- const TabIndicator = ({ value }: { value: string }) => {
33
- const [styles, setStyles] = useState<React.CSSProperties>({})
34
- const { baseId, listRef } = useContext(TabsContext)
35
-
36
- useEffect(() => {
37
- const state = { observer: null as null | ResizeObserver }
38
-
39
- if (listRef.current) {
40
- const tabIdSelector = `.tab[id="${makeTriggerId(baseId, value)}"]`
41
- const selectedTabElement = listRef.current.querySelector<HTMLElement>(tabIdSelector)
42
-
43
- if (selectedTabElement != null) {
44
- state.observer = new ResizeObserver(() => {
45
- const { clientHeight, clientWidth, offsetLeft, offsetTop } = selectedTabElement
46
-
47
- setStyles({
48
- height: clientHeight,
49
- transform: `translateX(${Math.floor(offsetLeft)}px) translateY(${Math.floor(offsetTop)}px)`,
50
- width: clientWidth
51
- })
52
- })
53
-
54
- state.observer.observe(selectedTabElement)
55
- } else {
56
- setStyles({ display: 'none' })
57
- }
58
- }
59
-
60
- return () => {
61
- if (state.observer) {
62
- state.observer.disconnect()
63
- }
64
- }
65
- }, [value])
66
-
67
- return (
68
- <div className="tab-indicator-container" style={styles}>
69
- <div className="tab-indicator" />
70
- </div>
71
- )
72
- }
73
-
74
- interface TabProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
75
- value: string
76
- }
77
-
78
- const Tab = ({ children, value, ...restProps }: TabProps) => {
79
- const { baseId } = useContext(TabsContext)
80
- const id = makeTriggerId(baseId, value)
81
-
82
- return (
83
- <RadixTabs.Trigger {...restProps} id={id} className="tab" value={value}>
84
- {children}
85
- </RadixTabs.Trigger>
86
- )
87
- }
88
-
89
- Tabs.Tab = Tab
@@ -1,34 +0,0 @@
1
- .form-textarea {
2
- display: flex;
3
-
4
- textarea {
5
- padding: var(--form_space-y, 0px) var(--form_space, 0px);
6
- border-radius: var(--form_border-radius);
7
- border-style: solid;
8
- border-width: 2px;
9
- border-top-width: 0;
10
- border-left-width: 0;
11
- border-color: transparent;
12
- min-height: max-content;
13
- resize: vertical;
14
- display: block;
15
-
16
- ::-webkit-search-cancel-button {
17
- display: none;
18
- }
19
-
20
- ::-webkit-search-decoration {
21
- -webkit-appearance: none;
22
- appearance: none;
23
- }
24
-
25
- ::-ms-clear {
26
- display: none;
27
- }
28
-
29
- &[data-grow] {
30
- resize: none;
31
- border: none;
32
- }
33
- }
34
- }
@@ -1,51 +0,0 @@
1
- import { useResizeTextarea } from '../__hooks/use-resize'
2
- import { attr, callMultiple } from '@companix/utils-browser'
3
- import { useEffect } from 'react'
4
-
5
- interface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
6
- /**
7
- * Свойство управляющее автоматическим изменением высоты компонента.
8
- */
9
- grow?: boolean
10
- /**
11
- * Обработчик, срабатывающий при изменении размера компонента.
12
- */
13
- onResize?: (el: HTMLTextAreaElement) => void
14
- fill?: boolean
15
- }
16
-
17
- export const TextArea = ({
18
- onResize,
19
- grow = false,
20
- value,
21
- onChange,
22
- disabled,
23
- required,
24
- rows = 2,
25
- fill = false,
26
- ...textAreaProps
27
- }: TextAreaProps) => {
28
- const [refResizeTextarea, resize] = useResizeTextarea(onResize, grow)
29
-
30
- useEffect(resize, [resize, value])
31
-
32
- return (
33
- <div
34
- className="form form-textarea"
35
- data-required={attr(required)}
36
- data-disabled={attr(disabled)}
37
- data-fill={attr(fill)}
38
- >
39
- <textarea
40
- className="form-input"
41
- data-grow={attr(grow)}
42
- value={value}
43
- ref={refResizeTextarea}
44
- rows={rows}
45
- disabled={disabled}
46
- onChange={callMultiple(onChange, resize)}
47
- {...textAreaProps}
48
- />
49
- </div>
50
- )
51
- }
@@ -1,11 +0,0 @@
1
- import { useEffect } from 'react'
2
-
3
- export const RemoveListener = ({ callback }: { callback?: () => void }) => {
4
- useEffect(() => {
5
- return () => {
6
- callback?.()
7
- }
8
- }, [])
9
-
10
- return null
11
- }
@@ -1,69 +0,0 @@
1
- import * as ToasterPrimitive from '@radix-ui/react-toast'
2
- import { attr } from '@companix/utils-browser'
3
- import { useEffect, useLayoutEffect, useRef, useState } from 'react'
4
- import { ToastOptions } from '.'
5
- import { RemoveListener } from './RemoveListener'
6
-
7
- interface ToastProps extends ToastOptions {
8
- onRemoved: () => void
9
- onRemoving: () => void
10
- onInitialized: (ref: HTMLLIElement) => void
11
- closeIcon?: React.ReactNode
12
- }
13
-
14
- export const Toast = (options: ToastProps) => {
15
- const [mounted, setMounted] = useState(false)
16
-
17
- const ref = useRef<HTMLLIElement>(null)
18
-
19
- const {
20
- appearance = 'neutral',
21
- icon,
22
- title,
23
- description,
24
- duration,
25
- closeIcon,
26
- onRemoving,
27
- onRemoved,
28
- onInitialized
29
- } = options
30
-
31
- useEffect(() => {
32
- setMounted(true)
33
- }, [])
34
-
35
- useLayoutEffect(() => {
36
- if (ref.current) {
37
- onInitialized(ref.current)
38
- }
39
- }, [])
40
-
41
- return (
42
- <ToasterPrimitive.Root
43
- ref={ref}
44
- data-expanded
45
- data-appearance={appearance}
46
- data-mounted={attr(mounted)}
47
- className="toaster"
48
- duration={duration}
49
- >
50
- <RemoveListener callback={onRemoved} />
51
- {icon && <div className="toaster-icon">{icon}</div>}
52
- <div className="toaster-content">
53
- {title && <ToasterPrimitive.Title className="toaster-title">{title}</ToasterPrimitive.Title>}
54
- {description && (
55
- <ToasterPrimitive.Description className="toaster-description">
56
- {description}
57
- </ToasterPrimitive.Description>
58
- )}
59
- </div>
60
- <ToasterPrimitive.Close className="toaster-close" onClick={onRemoving}>
61
- {closeIcon ?? (
62
- <svg viewBox="0 0 16 16" fill="currentColor">
63
- <path d="M2.96967 2.96967C3.26256 2.67678 3.73744 2.67678 4.03033 2.96967L8 6.939L11.9697 2.96967C12.2626 2.67678 12.7374 2.67678 13.0303 2.96967C13.3232 3.26256 13.3232 3.73744 13.0303 4.03033L9.061 8L13.0303 11.9697C13.2966 12.2359 13.3208 12.6526 13.1029 12.9462L13.0303 13.0303C12.7374 13.3232 12.2626 13.3232 11.9697 13.0303L8 9.061L4.03033 13.0303C3.73744 13.3232 3.26256 13.3232 2.96967 13.0303C2.67678 12.7374 2.67678 12.2626 2.96967 11.9697L6.939 8L2.96967 4.03033C2.7034 3.76406 2.6792 3.3474 2.89705 3.05379L2.96967 2.96967Z" />
64
- </svg>
65
- )}
66
- </ToasterPrimitive.Close>
67
- </ToasterPrimitive.Root>
68
- )
69
- }
@@ -1,151 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- @mixin use-appearance($appearance) {
4
- &[data-appearance='#{$appearance}'] {
5
- @include mixins.use-styles(toaster, $appearance);
6
-
7
- .toaster {
8
- &-icon {
9
- @include mixins.use-styles(toaster, $appearance, icon);
10
- }
11
-
12
- &-title {
13
- @include mixins.use-styles(toaster, $appearance, title);
14
- }
15
-
16
- &-description {
17
- @include mixins.use-styles(toaster, $appearance, description);
18
- }
19
- }
20
- }
21
- }
22
-
23
- .toaster {
24
- pointer-events: all;
25
- position: absolute;
26
- outline: none;
27
- opacity: 1;
28
- transition: transform 0.4s, opacity 0.4s, height 0.4s, box-shadow 0.2s;
29
- transform: var(--y);
30
- display: flex;
31
- align-items: center;
32
-
33
- @include mixins.use-styles(toaster);
34
-
35
- // appearance
36
-
37
- @include use-appearance(primary);
38
- @include use-appearance(neutral);
39
- @include use-appearance(negative);
40
- @include use-appearance(positive);
41
- @include use-appearance(warning);
42
-
43
- &[data-expanded]:not([data-mounted]) {
44
- opacity: 0;
45
- --y: translateY(calc(var(--lift) * -100% - var(--toaster_viewport_offset, 0)));
46
- }
47
-
48
- &[data-expanded][data-mounted] {
49
- --y: translateY(calc(var(--lift) * var(--offset)));
50
- }
51
-
52
- &[data-state='closed'] {
53
- animation: toastOut 400ms, toastFadeOut 400ms;
54
- }
55
-
56
- &-viewport {
57
- position: fixed;
58
- display: flex;
59
- flex-direction: column;
60
- left: var(--toaster_viewport_offset);
61
- right: var(--toaster_viewport_offset);
62
- z-index: 40;
63
- outline: none;
64
- pointer-events: none;
65
- gap: var(--toasters-gap, 0);
66
-
67
- &[data-side='top'] {
68
- top: var(--toaster_viewport_offset);
69
-
70
- .toaster {
71
- --lift: 1;
72
- top: 0;
73
- }
74
- }
75
-
76
- &[data-side='bottom'] {
77
- bottom: var(--toaster_viewport_offset);
78
- top: auto;
79
-
80
- .toaster {
81
- --lift: -1;
82
- bottom: 0;
83
- }
84
- }
85
-
86
- &[data-align='center'] {
87
- align-items: center;
88
- }
89
-
90
- &[data-align='right'] {
91
- align-items: flex-end;
92
- }
93
-
94
- &[data-align='left'] {
95
- align-items: flex-start;
96
- }
97
- }
98
-
99
- &-content {
100
- display: flex;
101
- flex-direction: column;
102
-
103
- @include mixins.use-styles(toaster, content);
104
- }
105
-
106
- &-title {
107
- @include mixins.use-styles(toaster, title);
108
- }
109
-
110
- &-description {
111
- @include mixins.use-styles(toaster, description);
112
- }
113
-
114
- &-close {
115
- cursor: pointer;
116
- top: var(--toaster_close_space, 0);
117
- right: var(--toaster_close_space, 0);
118
- position: absolute;
119
- transition: color 0.2s;
120
-
121
- @include mixins.use-styles(toaster, close);
122
-
123
- &:hover {
124
- @include mixins.use-styles(toaster, close, hover);
125
- }
126
-
127
- svg {
128
- @include mixins.use-size(toaster, close, size);
129
- }
130
- }
131
-
132
- &-icon {
133
- @include mixins.use-styles(toaster, icon);
134
-
135
- svg {
136
- @include mixins.use-size(toaster, icon, size);
137
- }
138
- }
139
- }
140
-
141
- @keyframes toastOut {
142
- to {
143
- transform: translateY(calc(var(--lift) * -100% - var(--toaster_viewport_offset)));
144
- }
145
- }
146
-
147
- @keyframes toastFadeOut {
148
- to {
149
- opacity: 0;
150
- }
151
- }