@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,44 +0,0 @@
1
- import { Icon } from '@/Icon'
2
- import { Switch, SwitchProps } from '@/Switch'
3
- import { faCheck, faClose } from '@fortawesome/free-solid-svg-icons'
4
- import { useState } from 'react'
5
-
6
- const longtext = `The expanded form makes it easy to schedule meetings: fields to fill out are displayed on the left, and the participants' schedule is shown on the right.`
7
-
8
- export const SwitchExample = () => {
9
- return (
10
- <div className="col-group">
11
- <div className="flex gap-24">
12
- <div className="flex flex-col gap-12">
13
- <SwitchControl label="Accept terms and conditions" />
14
- <SwitchControl
15
- label="I want to recieve promote emails"
16
- checkedIcon={<Icon icon={faCheck} />}
17
- uncheckedIcon={<Icon icon={faClose} />}
18
- />
19
- </div>
20
- <div className="flex flex-col gap-12">
21
- <SwitchControl label="Accept terms and conditions" disabled defaultChecked />
22
- <SwitchControl label="I want to recieve promote emails" disabled />
23
- </div>
24
- </div>
25
- <div style={{ height: '1px', background: '#eeeeee', margin: '12px 0px' }} />
26
- <div className="flex flex-col gap-12">
27
- <SwitchControl label="Accept terms and conditions" defaultChecked />
28
- <SwitchControl defaultChecked label={'Use the advanced form to create events'} />
29
- <SwitchControl label={longtext + ' ' + longtext} defaultChecked />
30
- </div>
31
- </div>
32
- )
33
- }
34
-
35
- interface Props extends Omit<SwitchProps, 'checked' | 'onCheckedChange'> {
36
- label?: React.ReactNode
37
- defaultChecked?: boolean
38
- }
39
-
40
- const SwitchControl = ({ defaultChecked, ...props }: Props) => {
41
- const [checked, setCheck] = useState(defaultChecked ?? false)
42
-
43
- return <Switch {...props} checked={checked} onCheckedChange={setCheck} />
44
- }
@@ -1,16 +0,0 @@
1
- import { Tabs } from '@/Tabs'
2
- import { useState } from 'react'
3
-
4
- export const TabsExample = () => {
5
- const [value, onChange] = useState<string>('account')
6
-
7
- return (
8
- <div>
9
- <Tabs value={value} onChange={onChange}>
10
- <Tabs.Tab value="account">Account</Tabs.Tab>
11
- <Tabs.Tab value="password">Password</Tabs.Tab>
12
- <Tabs.Tab value="settings">Settings</Tabs.Tab>
13
- </Tabs>
14
- </div>
15
- )
16
- }
File without changes
@@ -1,17 +0,0 @@
1
- import { TextArea } from '@/TextArea'
2
-
3
- export const TextAreaExample = () => {
4
- return (
5
- <div className="col-group">
6
- <div className="flex items-start gap-10">
7
- <TextArea grow placeholder="Auto growing" />
8
- <TextArea grow placeholder="Growing limited" style={{ maxHeight: '240px' }} />
9
- <TextArea placeholder="Resizable and fill" fill />
10
- </div>
11
- <div className="flex items-start gap-10">
12
- <TextArea grow placeholder="Auto growing" disabled />
13
- <TextArea grow placeholder="Growing limited" style={{ maxHeight: '240px' }} required />
14
- </div>
15
- </div>
16
- )
17
- }
@@ -1,12 +0,0 @@
1
- import { Form } from '@/Form'
2
-
3
- export const TextInput = () => {
4
- return (
5
- <div style={{ width: '200px' }}>
6
- <div style={{ color: '#ffffff', marginBottom: '10px' }}>TextInput</div>
7
- <div style={{ marginBottom: '20px' }}>
8
- <Form />
9
- </div>
10
- </div>
11
- )
12
- }
@@ -1,156 +0,0 @@
1
- import { Button } from '@/Button'
2
- import { ButtonGroup } from '@/ButtonGroup'
3
- import { Icon } from '@/Icon'
4
- import { createToaster } from '@/Toaster'
5
- import { faCircleCheck, faCircleInfo, faTriangleExclamation } from '@fortawesome/free-solid-svg-icons'
6
- import { useState } from 'react'
7
-
8
- const Toaster = createToaster({ duration: 2500, align: 'center' })
9
-
10
- export const ToasterExample = () => {
11
- const [side, setSide] = useState<'top' | 'bottom'>('top')
12
- const [align, setAlign] = useState<'center' | 'left' | 'right'>('center')
13
-
14
- return (
15
- <div>
16
- <div className="col-group">
17
- <div className="row-group">
18
- <ButtonGroup>
19
- <Button active={side === 'top'} onClick={() => setSide('top')}>
20
- top
21
- </Button>
22
- <Button active={side === 'bottom'} onClick={() => setSide('bottom')}>
23
- bottom
24
- </Button>
25
- </ButtonGroup>
26
- <ButtonGroup>
27
- <Button active={align === 'left'} onClick={() => setAlign('left')}>
28
- left
29
- </Button>
30
- <Button active={align === 'center'} onClick={() => setAlign('center')}>
31
- center
32
- </Button>
33
- <Button active={align === 'right'} onClick={() => setAlign('right')}>
34
- right
35
- </Button>
36
- </ButtonGroup>
37
- </div>
38
- <div className="row-group">
39
- <Button
40
- appearance="neutral"
41
- onClick={() => {
42
- Toaster.send({
43
- appearance: 'neutral',
44
- title: 'Event created',
45
- description: 'Sunday, December 21, 2025 at 2:45 AM'
46
- })
47
- }}
48
- >
49
- Create event
50
- </Button>
51
- <Button
52
- onClick={() => {
53
- Toaster.send({
54
- appearance: 'neutral',
55
- title: 'The text is copied'
56
- })
57
- }}
58
- >
59
- Copy text
60
- </Button>
61
- <Button
62
- onClick={() => {
63
- Toaster.send({
64
- appearance: 'positive',
65
- title: 'Move files is completed!',
66
- description: 'Moved 6 files'
67
- })
68
- }}
69
- >
70
- Move files
71
- </Button>
72
- <Button
73
- onClick={() =>
74
- Toaster.send({
75
- appearance: 'negative',
76
- title: 'Permission error',
77
- description:
78
- 'You do not have permissions to perform this action. Please contact your system administrator to request the appropriate access rights.'
79
- })
80
- }
81
- >
82
- Delete root
83
- </Button>
84
- </div>
85
- <div className="row-group">
86
- <Button
87
- appearance="primary"
88
- onClick={() => {
89
- Toaster.send({
90
- appearance: 'primary',
91
- title: 'Event has been created',
92
- description: 'Be at the area 10 minutes before the event time',
93
- icon: <Icon icon={faCircleInfo} />
94
- })
95
- }}
96
- >
97
- Primary
98
- </Button>
99
- <Button
100
- appearance="neutral"
101
- onClick={() => {
102
- Toaster.send({
103
- appearance: 'neutral',
104
- title: 'Event has been created',
105
- description: 'Be at the area 10 minutes before the event time',
106
- icon: <Icon icon={faCircleInfo} />
107
- })
108
- }}
109
- >
110
- Neutral
111
- </Button>
112
- <Button
113
- appearance="positive"
114
- onClick={() => {
115
- Toaster.send({
116
- appearance: 'positive',
117
- title: 'Event has been created',
118
- description: 'Be at the area 10 minutes before the event time',
119
- icon: <Icon icon={faCircleCheck} />
120
- })
121
- }}
122
- >
123
- Positive
124
- </Button>
125
- <Button
126
- appearance="negative"
127
- onClick={() => {
128
- Toaster.send({
129
- appearance: 'negative',
130
- title: 'Event has been created',
131
- description: 'Be at the area 10 minutes before the event time',
132
- icon: <Icon icon={faTriangleExclamation} />
133
- })
134
- }}
135
- >
136
- Negative
137
- </Button>
138
- <Button
139
- appearance="neutral"
140
- onClick={() => {
141
- Toaster.send({
142
- appearance: 'warning',
143
- title: 'Event has been created',
144
- description: 'Be at the area 10 minutes before the event time',
145
- icon: <Icon icon={faTriangleExclamation} />
146
- })
147
- }}
148
- >
149
- Warning
150
- </Button>
151
- </div>
152
- </div>
153
- <Toaster.Viewport align={align} side={side} />
154
- </div>
155
- )
156
- }
@@ -1,26 +0,0 @@
1
- import { Button } from '@/Button'
2
- import { ButtonGroup } from '@/ButtonGroup'
3
- import { Tooltip } from '@/Tooltip'
4
-
5
- export const TooltipExample = () => {
6
- return (
7
- <div className="col-group">
8
- <div className="row-group">
9
- <Tooltip content={<div>Content Tooltip</div>}>
10
- <Button>Hover</Button>
11
- </Tooltip>
12
- <ButtonGroup>
13
- <Tooltip content={<div>Each</div>}>
14
- <Button>Group</Button>
15
- </Tooltip>
16
- <Tooltip content={<div>has</div>}>
17
- <Button>Of</Button>
18
- </Tooltip>
19
- <Tooltip content={<div>a tooltip</div>}>
20
- <Button>Buttons</Button>
21
- </Tooltip>
22
- </ButtonGroup>
23
- </div>
24
- </div>
25
- )
26
- }
@@ -1,128 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- // scheme: bth-[appearance]-[mode]-[property]--[state]
4
- //
5
- // appearance: primary, neutral, positive, negative
6
- // mode: default, outline, minimal
7
- // state: enabled, hovered, pressed, disabled, loading
8
- // property: text, background, shadow, border
9
-
10
- @mixin use-mode($appearance, $mode) {
11
- @include mixins.use-styles(button, $appearance, $mode, enabled);
12
-
13
- &:hover {
14
- @include mixins.use-styles(button, $appearance, $mode, hovered);
15
- }
16
-
17
- &[data-active],
18
- &:active {
19
- @include mixins.use-styles(button, $appearance, $mode, pressed);
20
- }
21
-
22
- &[data-loading] {
23
- @include mixins.use-styles(button, $appearance, $mode, loading);
24
- }
25
-
26
- &[disabled] {
27
- cursor: not-allowed;
28
- @include mixins.use-styles(button, $appearance, $mode, disabled);
29
- }
30
- }
31
-
32
- @mixin use-appearance($appearance) {
33
- &[data-appearance='#{$appearance}'] {
34
- &[data-mode='default'] {
35
- @include use-mode($appearance, default);
36
- }
37
-
38
- &[data-mode='outline'] {
39
- @include use-mode($appearance, outline);
40
- }
41
-
42
- &[data-mode='minimal'] {
43
- @include use-mode($appearance, minimal);
44
- }
45
- }
46
- }
47
-
48
- .button {
49
- overflow: visible;
50
- box-sizing: border-box;
51
- -moz-user-focus: ignore;
52
- -webkit-user-select: none;
53
- -moz-user-select: none;
54
- -ms-user-select: none;
55
- user-select: none;
56
- text-decoration: none;
57
- outline: none;
58
- -webkit-tap-highlight-color: transparent;
59
- -ms-touch-action: manipulation;
60
- touch-action: manipulation;
61
- cursor: pointer;
62
- display: flex;
63
- align-items: center;
64
-
65
- @include mixins.use-styles(button);
66
- @include mixins.items-spacing(8px);
67
-
68
- // fill
69
-
70
- &[data-fill] {
71
- width: 100%;
72
- }
73
-
74
- // align
75
-
76
- &[data-align='center'] {
77
- justify-content: center;
78
-
79
- & > .button-text {
80
- text-align: center;
81
- }
82
- }
83
-
84
- &[data-align='left'] {
85
- justify-content: left;
86
-
87
- & > .button-text {
88
- flex: 1 1 auto;
89
- text-align: left;
90
- }
91
- }
92
-
93
- &[data-align='right'] {
94
- justify-content: right;
95
-
96
- & > .button-text {
97
- flex: 1 1 auto;
98
- text-align: right;
99
- }
100
- }
101
-
102
- // sizes
103
-
104
- &[data-size='sm'] {
105
- @include mixins.use-styles(button, size, sm);
106
- }
107
-
108
- &[data-size='md'] {
109
- @include mixins.use-styles(button, size, md);
110
- }
111
-
112
- &[data-size='lg'] {
113
- @include mixins.use-styles(button, size, lg);
114
- }
115
-
116
- // text
117
-
118
- &-text {
119
- @include mixins.truncate-text();
120
- }
121
-
122
- // appearance
123
-
124
- @include use-appearance(primary);
125
- @include use-appearance(neutral);
126
- @include use-appearance(negative);
127
- @include use-appearance(positive);
128
- }
@@ -1,72 +0,0 @@
1
- import classNames from 'classnames'
2
- import { Spinner } from '../Spinner'
3
- import { forwardRef } from 'react'
4
- import { attr } from '@companix/utils-browser'
5
-
6
- export type Appearance = 'primary' | 'neutral' | 'positive' | 'negative'
7
- export type Mode = 'default' | 'outline' | 'minimal'
8
- export type Size = 'sm' | 'md' | 'lg'
9
-
10
- export interface InternButtonProps {
11
- icon?: React.ReactNode
12
- iconRight?: React.ReactNode
13
- appearance?: Appearance
14
- mode?: Mode
15
- size?: Size
16
- fill?: boolean
17
- align?: 'left' | 'center' | 'right'
18
- loading?: boolean
19
- active?: boolean
20
- text?: React.ReactNode
21
- children?: React.ReactNode
22
- className?: string
23
- }
24
-
25
- export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, InternButtonProps {}
26
-
27
- export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
28
- (
29
- {
30
- children,
31
- fill,
32
- text,
33
- active,
34
- mode = 'default',
35
- appearance = 'neutral',
36
- size = 'md',
37
- align,
38
- icon,
39
- loading,
40
- className,
41
- iconRight,
42
- ...buttonProps
43
- },
44
- ref
45
- ) => {
46
- return (
47
- <button
48
- ref={ref}
49
- className={classNames('button', className)}
50
- data-size={size}
51
- data-loading={attr(loading)}
52
- data-align={loading ? 'center' : align ?? (icon && iconRight ? 'left' : 'center')}
53
- data-appearance={appearance}
54
- data-mode={mode}
55
- data-fill={attr(fill)}
56
- data-active={attr(active)}
57
- {...buttonProps}
58
- onClick={loading ?? buttonProps.disabled ? undefined : buttonProps.onClick}
59
- >
60
- {loading ? (
61
- <Spinner size={14} width={2} />
62
- ) : (
63
- <>
64
- {icon}
65
- {(children ?? text) && <span className="button-text">{text ?? children}</span>}
66
- {iconRight}
67
- </>
68
- )}
69
- </button>
70
- )
71
- }
72
- )
@@ -1,18 +0,0 @@
1
- .button-group {
2
- display: flex;
3
-
4
- &[data-fill] {
5
- width: 100%;
6
- }
7
-
8
- & > .button:not(:first-child) {
9
- border-bottom-left-radius: 0;
10
- border-top-left-radius: 0;
11
- }
12
-
13
- & > .button:not(:last-child) {
14
- border-bottom-right-radius: 0;
15
- border-top-right-radius: 0;
16
- margin-right: -1px;
17
- }
18
- }
@@ -1,20 +0,0 @@
1
- import './ButtonGroup.scss'
2
- import { forwardRef } from 'react'
3
- import cn from 'classnames'
4
- import { attr } from '@companix/utils-browser'
5
-
6
- interface ButtonGroupProps {
7
- children: React.ReactNode
8
- className?: string
9
- fill?: boolean
10
- }
11
-
12
- export const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(
13
- ({ children, className, fill }, ref) => {
14
- return (
15
- <div ref={ref} className={cn('button-group', className)} data-fill={attr(fill)}>
16
- {children}
17
- </div>
18
- )
19
- }
20
- )
@@ -1,115 +0,0 @@
1
- @use '../mixins.scss';
2
-
3
- .checkbox {
4
- display: inline-table;
5
- user-select: none;
6
- touch-action: manipulation;
7
- max-width: max-content;
8
-
9
- @include mixins.use-styles(checkbox);
10
-
11
- &:not([data-disabled]):not([data-required]):hover {
12
- .checkbox-box[data-state='unchecked'] {
13
- @include mixins.use-styles(checkbox, box, hover);
14
- }
15
- }
16
-
17
- &:not([data-disabled]):not([data-required]):active {
18
- .checkbox-box[data-state='unchecked'] {
19
- @include mixins.use-styles(checkbox, box, active);
20
- }
21
- }
22
-
23
- &:not([data-disabled]) {
24
- .checkbox-box[data-state='checked'] {
25
- @include mixins.use-styles(checkbox, box, checked);
26
- }
27
- }
28
-
29
- &[data-disabled] {
30
- @include mixins.use-styles(checkbox, disabled);
31
- }
32
-
33
- &[data-required] {
34
- @include mixins.use-styles(checkbox, required);
35
-
36
- .checkbox-box::before {
37
- content: '';
38
- position: absolute;
39
- width: 100%;
40
- height: 100%;
41
- left: 0;
42
-
43
- @include mixins.use-styles(checkbox, required, box);
44
-
45
- border-radius: mixins.get-var-name(checkbox, box, border-radius);
46
- }
47
- }
48
-
49
- &[data-size='sm'] {
50
- @include mixins.use-styles(checkbox, size, sm);
51
-
52
- .checkbox-box {
53
- @include mixins.use-size(checkbox, size, sm, box);
54
- }
55
- }
56
-
57
- &[data-size='md'] {
58
- @include mixins.use-styles(checkbox, size, md);
59
-
60
- .checkbox-box {
61
- @include mixins.use-size(checkbox, size, md, box);
62
- }
63
- }
64
-
65
- &-box {
66
- cursor: pointer;
67
- outline: none;
68
- transition: background-color 0.1s linear;
69
- display: inline-block;
70
- position: relative;
71
- z-index: 0;
72
-
73
- @include mixins.use-styles(checkbox, box);
74
-
75
- &[data-disabled] {
76
- cursor: default;
77
- }
78
-
79
- &:after {
80
- visibility: hidden;
81
- content: '\00A0';
82
- }
83
- }
84
-
85
- &-label {
86
- cursor: pointer;
87
- display: table-cell;
88
- word-break: break-word;
89
-
90
- &[data-disabled] {
91
- cursor: default;
92
- }
93
-
94
- @include mixins.use-styles(checkbox, label);
95
- }
96
-
97
- &-icon {
98
- display: flex;
99
- align-items: center;
100
- justify-content: center;
101
- z-index: 3;
102
- position: absolute;
103
- width: 100%;
104
- height: 100%;
105
- top: 0;
106
-
107
- &[data-state='checked'] {
108
- @include mixins.use-styles(checkbox, icon, in);
109
- }
110
-
111
- &[data-state='unchecked'] {
112
- @include mixins.use-styles(checkbox, icon, out);
113
- }
114
- }
115
- }
@@ -1,46 +0,0 @@
1
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox'
2
- import { Icon } from '../Icon'
3
- import { faCheck } from '@fortawesome/free-solid-svg-icons'
4
- import { useId } from 'react'
5
- import { attr } from '@companix/utils-browser'
6
-
7
- interface CheckboxProps {
8
- checked: boolean
9
- onCheckedChange: (checked: boolean) => void
10
- size?: 'sm' | 'md'
11
- label?: React.ReactNode
12
- disabled?: boolean
13
- required?: boolean
14
- }
15
-
16
- const Checkbox = ({ checked, required, disabled, onCheckedChange, size, label }: CheckboxProps) => {
17
- const id = useId()
18
-
19
- return (
20
- <div
21
- className="checkbox"
22
- data-size={size ?? 'md'}
23
- data-required={attr(required && !checked)}
24
- data-disabled={attr(disabled)}
25
- >
26
- <CheckboxPrimitive.Root
27
- className="checkbox-box"
28
- checked={checked}
29
- onCheckedChange={onCheckedChange}
30
- disabled={disabled}
31
- id={id}
32
- >
33
- <CheckboxPrimitive.Indicator className="checkbox-icon">
34
- <Icon icon={faCheck} size="xxxs" />
35
- </CheckboxPrimitive.Indicator>
36
- </CheckboxPrimitive.Root>
37
- {label && (
38
- <label className="checkbox-label" htmlFor={id} data-disabled={attr(disabled)}>
39
- {label}
40
- </label>
41
- )}
42
- </div>
43
- )
44
- }
45
-
46
- export { Checkbox }