stargazer-ui 1.2.1 → 1.2.2

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 (349) hide show
  1. package/Bar/Bar.type.d.ts +6 -0
  2. package/Bar/index.js +2 -0
  3. package/Bar/index.js.map +1 -0
  4. package/Bar/package.json +1 -0
  5. package/Button/Button.js +12 -0
  6. package/Button/Button.js.map +1 -0
  7. package/{types/components/Button → Button}/Button.types.d.ts +1 -2
  8. package/Button/index.d.ts +3 -0
  9. package/Button/index.js +7 -0
  10. package/Button/index.js.map +1 -0
  11. package/Button/package.json +1 -0
  12. package/ButtonGroup/ButtonGroup.d.ts +4 -0
  13. package/ButtonGroup/ButtonGroup.js +10 -0
  14. package/ButtonGroup/ButtonGroup.js.map +1 -0
  15. package/ButtonGroup/ButtonGroup.types.d.ts +7 -0
  16. package/ButtonGroup/index.d.ts +3 -0
  17. package/ButtonGroup/index.js +7 -0
  18. package/ButtonGroup/index.js.map +1 -0
  19. package/ButtonGroup/package.json +1 -0
  20. package/Card/Card.js +41 -0
  21. package/Card/Card.js.map +1 -0
  22. package/{types/components/Card → Card}/Card.types.d.ts +3 -1
  23. package/Card/index.d.ts +3 -0
  24. package/Card/index.js +7 -0
  25. package/Card/index.js.map +1 -0
  26. package/Card/package.json +1 -0
  27. package/CloseButton/CloseButton.js +11 -0
  28. package/CloseButton/CloseButton.js.map +1 -0
  29. package/{types/components/CloseButton → CloseButton}/CloseButton.types.d.ts +1 -1
  30. package/CloseButton/index.d.ts +3 -0
  31. package/CloseButton/index.js +7 -0
  32. package/CloseButton/index.js.map +1 -0
  33. package/CloseButton/package.json +1 -0
  34. package/Dropdown/Dropdown.js +301 -0
  35. package/Dropdown/Dropdown.js.map +1 -0
  36. package/{types/components/Dropdown → Dropdown}/Dropdown.types.d.ts +3 -10
  37. package/Dropdown/index.d.ts +4 -0
  38. package/Dropdown/index.js +8 -0
  39. package/Dropdown/index.js.map +1 -0
  40. package/Dropdown/package.json +1 -0
  41. package/FileUploadButton/FileUploadButton.d.ts +4 -0
  42. package/FileUploadButton/FileUploadButton.js +21 -0
  43. package/FileUploadButton/FileUploadButton.js.map +1 -0
  44. package/FileUploadButton/FileUploadButton.types.d.ts +7 -0
  45. package/FileUploadButton/index.d.ts +3 -0
  46. package/FileUploadButton/index.js +7 -0
  47. package/FileUploadButton/index.js.map +1 -0
  48. package/FileUploadButton/package.json +1 -0
  49. package/FloatingLabel/FloatingLabel.js +17 -0
  50. package/FloatingLabel/FloatingLabel.js.map +1 -0
  51. package/{types/components/FloatingLabel → FloatingLabel}/FloatingLabel.types.d.ts +1 -1
  52. package/FloatingLabel/index.d.ts +3 -0
  53. package/FloatingLabel/index.js +7 -0
  54. package/FloatingLabel/index.js.map +1 -0
  55. package/FloatingLabel/package.json +1 -0
  56. package/Form/Form.d.ts +38 -0
  57. package/Form/Form.js +308 -0
  58. package/Form/Form.js.map +1 -0
  59. package/Form/Form.types.d.ts +105 -0
  60. package/Form/index.d.ts +4 -0
  61. package/Form/index.js +8 -0
  62. package/Form/index.js.map +1 -0
  63. package/Form/package.json +1 -0
  64. package/InputGroup/InputGroup.d.ts +7 -0
  65. package/InputGroup/InputGroup.js +31 -0
  66. package/InputGroup/InputGroup.js.map +1 -0
  67. package/InputGroup/InputGroup.types.d.ts +16 -0
  68. package/InputGroup/index.d.ts +4 -0
  69. package/InputGroup/index.js +7 -0
  70. package/InputGroup/index.js.map +1 -0
  71. package/InputGroup/package.json +1 -0
  72. package/List/List.d.ts +14 -0
  73. package/List/List.js +76 -0
  74. package/List/List.js.map +1 -0
  75. package/List/List.types.d.ts +28 -0
  76. package/List/index.d.ts +3 -0
  77. package/List/index.js +7 -0
  78. package/List/index.js.map +1 -0
  79. package/List/package.json +1 -0
  80. package/{types/components/Modal → Modal}/Modal.d.ts +1 -1
  81. package/Modal/Modal.js +160 -0
  82. package/Modal/Modal.js.map +1 -0
  83. package/{types/components/Modal → Modal}/Modal.types.d.ts +3 -2
  84. package/Modal/index.d.ts +3 -0
  85. package/Modal/index.js +7 -0
  86. package/Modal/index.js.map +1 -0
  87. package/Modal/package.json +1 -0
  88. package/Nav/Nav.js +28 -0
  89. package/Nav/Nav.js.map +1 -0
  90. package/{types/components/Nav → Nav}/Nav.types.d.ts +1 -1
  91. package/Nav/index.d.ts +4 -0
  92. package/Nav/index.js +7 -0
  93. package/Nav/index.js.map +1 -0
  94. package/Nav/package.json +1 -0
  95. package/{types/components/NavBar → NavBar}/Navbar.d.ts +1 -2
  96. package/NavBar/Navbar.js +36 -0
  97. package/NavBar/Navbar.js.map +1 -0
  98. package/{types/components/NavBar → NavBar}/Navbar.types.d.ts +2 -1
  99. package/NavBar/index.d.ts +4 -0
  100. package/NavBar/index.js +8 -0
  101. package/NavBar/index.js.map +1 -0
  102. package/NavBar/package.json +1 -0
  103. package/{types/components/NavDropdown → NavDropdown}/NavDropdown.d.ts +2 -2
  104. package/NavDropdown/NavDropdown.js +77 -0
  105. package/NavDropdown/NavDropdown.js.map +1 -0
  106. package/NavDropdown/index.d.ts +3 -0
  107. package/NavDropdown/index.js +7 -0
  108. package/NavDropdown/index.js.map +1 -0
  109. package/NavDropdown/package.json +1 -0
  110. package/Overlay/Overlay.d.ts +4 -0
  111. package/Overlay/Overlay.js +228 -0
  112. package/Overlay/Overlay.js.map +1 -0
  113. package/Overlay/Overlay.types.d.ts +18 -0
  114. package/{src/Overlay/index.ts → Overlay/index.d.ts} +3 -3
  115. package/Overlay/index.js +7 -0
  116. package/Overlay/index.js.map +1 -0
  117. package/Overlay/package.json +1 -0
  118. package/Popout/Popout.js +110 -0
  119. package/Popout/Popout.js.map +1 -0
  120. package/{types/components/Popout → Popout}/Popout.types.d.ts +1 -1
  121. package/Popout/index.d.ts +3 -0
  122. package/Popout/index.js +7 -0
  123. package/Popout/index.js.map +1 -0
  124. package/Popout/package.json +1 -0
  125. package/Spinner/Spinner.js +12 -0
  126. package/Spinner/Spinner.js.map +1 -0
  127. package/Spinner/index.d.ts +3 -0
  128. package/Spinner/index.js +7 -0
  129. package/Spinner/index.js.map +1 -0
  130. package/Spinner/package.json +1 -0
  131. package/Table/Table.js +11 -0
  132. package/Table/Table.js.map +1 -0
  133. package/{types/components/Table → Table}/Table.types.d.ts +1 -1
  134. package/Table/index.d.ts +3 -0
  135. package/Table/index.js +7 -0
  136. package/Table/index.js.map +1 -0
  137. package/Table/package.json +1 -0
  138. package/Tabs/Tabs.js +158 -0
  139. package/Tabs/Tabs.js.map +1 -0
  140. package/{types/components/Tabs → Tabs}/Tabs.types.d.ts +9 -1
  141. package/Tabs/index.d.ts +3 -0
  142. package/Tabs/index.js +7 -0
  143. package/Tabs/index.js.map +1 -0
  144. package/Tabs/package.json +1 -0
  145. package/ToggleButton/ToggleButton.d.ts +4 -0
  146. package/ToggleButton/ToggleButton.js +17 -0
  147. package/ToggleButton/ToggleButton.js.map +1 -0
  148. package/ToggleButton/ToggleButton.types.d.ts +7 -0
  149. package/ToggleButton/index.d.ts +3 -0
  150. package/ToggleButton/index.js +7 -0
  151. package/ToggleButton/index.js.map +1 -0
  152. package/ToggleButton/package.json +1 -0
  153. package/{src/hooks/index.ts → hooks/index.d.ts} +5 -6
  154. package/hooks/index.js +6 -0
  155. package/hooks/index.js.map +1 -0
  156. package/hooks/package.json +1 -0
  157. package/hooks/useClassname.d.ts +2 -0
  158. package/hooks/useClassname.js +7 -0
  159. package/hooks/useClassname.js.map +1 -0
  160. package/hooks/useDraggable.d.ts +23 -0
  161. package/hooks/useDraggable.js +147 -0
  162. package/hooks/useDraggable.js.map +1 -0
  163. package/hooks/useKeepElementFocused.d.ts +2 -0
  164. package/hooks/useKeepElementFocused.js +37 -0
  165. package/hooks/useKeepElementFocused.js.map +1 -0
  166. package/hooks/useScreenSize.d.ts +5 -0
  167. package/hooks/useScreenSize.js +21 -0
  168. package/hooks/useScreenSize.js.map +1 -0
  169. package/index.d.ts +18 -0
  170. package/index.js +19 -0
  171. package/index.js.map +1 -0
  172. package/package.json +1 -79
  173. package/{dev → styles}/stargazerui.css +3099 -395
  174. package/styles/stargazerui.css.map +1 -0
  175. package/{src/utils/BaseTypes.ts → utils/BaseTypes.d.ts} +23 -30
  176. package/utils/ContrastingColor.d.ts +1 -0
  177. package/utils/MergeClassnames.d.ts +2 -0
  178. package/utils/MergeClassnames.js +7 -0
  179. package/utils/MergeClassnames.js.map +1 -0
  180. package/utils/MergeRefs.d.ts +2 -0
  181. package/utils/MergeRefs.js +16 -0
  182. package/utils/MergeRefs.js.map +1 -0
  183. package/.babelrc.json +0 -10
  184. package/.eslintrc.cjs +0 -18
  185. package/.gitattributes +0 -2
  186. package/LICENSE +0 -21
  187. package/dev/index.html +0 -12
  188. package/dev/index.jsx +0 -49
  189. package/dev/index.scss +0 -59
  190. package/dev/pages/ButtonPage.jsx +0 -44
  191. package/dev/pages/CardPage.jsx +0 -81
  192. package/dev/pages/DropdownPage.jsx +0 -31
  193. package/dev/pages/FormPage.jsx +0 -130
  194. package/dev/pages/ListPage.jsx +0 -52
  195. package/dev/pages/ModalPage.jsx +0 -37
  196. package/dev/pages/OverlayPage.jsx +0 -35
  197. package/dev/pages/components.jsx +0 -19
  198. package/dev/stargazerui.css.map +0 -1
  199. package/dev/test.jsx +0 -88
  200. package/rollup.config.js +0 -140
  201. package/scripts/writePackageJsons.js +0 -42
  202. package/src/Bar/Bar.tsx +0 -0
  203. package/src/Bar/Bar.type.ts +0 -9
  204. package/src/Bar/index.ts +0 -0
  205. package/src/Button/Button.tsx +0 -17
  206. package/src/Button/Button.types.ts +0 -8
  207. package/src/Button/index.ts +0 -3
  208. package/src/ButtonGroup/ButtonGroup.tsx +0 -14
  209. package/src/ButtonGroup/ButtonGroup.types.ts +0 -8
  210. package/src/ButtonGroup/index.ts +0 -3
  211. package/src/Card/Card.tsx +0 -70
  212. package/src/Card/Card.types.ts +0 -33
  213. package/src/Card/index.ts +0 -3
  214. package/src/CloseButton/CloseButton.tsx +0 -14
  215. package/src/CloseButton/CloseButton.types.ts +0 -6
  216. package/src/CloseButton/index.ts +0 -3
  217. package/src/Dropdown/Dropdown.tsx +0 -358
  218. package/src/Dropdown/Dropdown.types.ts +0 -52
  219. package/src/Dropdown/index.ts +0 -4
  220. package/src/FileUploadButton/FileUploadButton.tsx +0 -27
  221. package/src/FileUploadButton/FileUploadButton.types.ts +0 -9
  222. package/src/FileUploadButton/index.ts +0 -3
  223. package/src/FloatingLabel/FloatingLabel.tsx +0 -22
  224. package/src/FloatingLabel/FloatingLabel.types.ts +0 -11
  225. package/src/FloatingLabel/index.ts +0 -3
  226. package/src/Form/Form.tsx +0 -445
  227. package/src/Form/Form.types.ts +0 -117
  228. package/src/Form/index.ts +0 -4
  229. package/src/InputGroup/InputGroup.tsx +0 -46
  230. package/src/InputGroup/InputGroup.types.ts +0 -21
  231. package/src/InputGroup/index.ts +0 -4
  232. package/src/List/List.tsx +0 -112
  233. package/src/List/List.types.ts +0 -34
  234. package/src/List/index.ts +0 -4
  235. package/src/Modal/Modal.tsx +0 -220
  236. package/src/Modal/Modal.types.ts +0 -49
  237. package/src/Modal/index.ts +0 -4
  238. package/src/Nav/Nav.tsx +0 -43
  239. package/src/Nav/Nav.types.ts +0 -21
  240. package/src/Nav/index.ts +0 -4
  241. package/src/NavBar/Navbar.tsx +0 -57
  242. package/src/NavBar/Navbar.types.ts +0 -24
  243. package/src/NavBar/index.ts +0 -4
  244. package/src/NavDropdown/NavDropdown.tsx +0 -93
  245. package/src/NavDropdown/NavDropdown.types.ts +0 -6
  246. package/src/NavDropdown/index.ts +0 -3
  247. package/src/Overlay/Overlay.tsx +0 -277
  248. package/src/Overlay/Overlay.types.ts +0 -20
  249. package/src/Popout/Popout.tsx +0 -155
  250. package/src/Popout/Popout.types.ts +0 -42
  251. package/src/Popout/index.ts +0 -3
  252. package/src/Spinner/Spinner.tsx +0 -15
  253. package/src/Spinner/Spinner.types.ts +0 -7
  254. package/src/Spinner/index.ts +0 -3
  255. package/src/Table/Table.tsx +0 -16
  256. package/src/Table/Table.types.ts +0 -9
  257. package/src/Table/index.ts +0 -3
  258. package/src/Tabs/Tabs.tsx +0 -215
  259. package/src/Tabs/Tabs.types.ts +0 -49
  260. package/src/Tabs/index.ts +0 -3
  261. package/src/ToggleButton/ToggleButton.tsx +0 -21
  262. package/src/ToggleButton/ToggleButton.types.ts +0 -8
  263. package/src/ToggleButton/index.ts +0 -3
  264. package/src/hooks/useClassname.ts +0 -5
  265. package/src/hooks/useDraggable.ts +0 -186
  266. package/src/hooks/useKeepElementFocused.ts +0 -37
  267. package/src/hooks/useScreenSize.ts +0 -24
  268. package/src/index.ts +0 -21
  269. package/src/styles/_Card.scss +0 -166
  270. package/src/styles/_CloseButton.scss +0 -51
  271. package/src/styles/_CustomButton.scss +0 -132
  272. package/src/styles/_Dropdown.scss +0 -120
  273. package/src/styles/_FloatingLabel.scss +0 -56
  274. package/src/styles/_Forms.scss +0 -7
  275. package/src/styles/_Grid.scss +0 -178
  276. package/src/styles/_InputGroup.scss +0 -71
  277. package/src/styles/_List.scss +0 -62
  278. package/src/styles/_Modal.scss +0 -234
  279. package/src/styles/_ModalOld.scss +0 -242
  280. package/src/styles/_Nav.scss +0 -36
  281. package/src/styles/_NavBar.scss +0 -116
  282. package/src/styles/_NavDropdown.scss +0 -34
  283. package/src/styles/_OffCanvas.scss +0 -260
  284. package/src/styles/_OverLay.scss +0 -56
  285. package/src/styles/_Popout.scss +0 -75
  286. package/src/styles/_Spinner.scss +0 -19
  287. package/src/styles/_Table.scss +0 -34
  288. package/src/styles/_Tabs.scss +0 -129
  289. package/src/styles/_colors.scss +0 -510
  290. package/src/styles/_components.scss +0 -40
  291. package/src/styles/_functions.scss +0 -134
  292. package/src/styles/_mixins.scss +0 -26
  293. package/src/styles/_reset.scss +0 -231
  294. package/src/styles/_utilities.scss +0 -2480
  295. package/src/styles/_variables.scss +0 -146
  296. package/src/styles/forms/_FormCheck.scss +0 -269
  297. package/src/styles/forms/_FormControl.scss +0 -102
  298. package/src/styles/forms/_FormGroup.scss +0 -21
  299. package/src/styles/forms/_FormLabel.scss +0 -3
  300. package/src/styles/forms/_FormSelect.scss +0 -164
  301. package/src/styles/forms/_FormSlider.scss +0 -116
  302. package/src/styles/forms/_FormText.scss +0 -6
  303. package/src/utils/ContrastingColor.ts +0 -25
  304. package/src/utils/FileImportExport.js +0 -50
  305. package/src/utils/MergeClassnames.ts +0 -5
  306. package/src/utils/MergeRefs.ts +0 -12
  307. package/src/vite-env.d.ts +0 -1
  308. package/tsconfig-build.json +0 -4
  309. package/tsconfig.json +0 -79
  310. package/tsconfig.node.json +0 -10
  311. package/types/BaseTypes.d.ts +0 -19
  312. package/types/components/Button/index.d.ts +0 -1
  313. package/types/components/Card/index.d.ts +0 -1
  314. package/types/components/CloseButton/index.d.ts +0 -1
  315. package/types/components/Dropdown/index.d.ts +0 -1
  316. package/types/components/FloatingLabel/index.d.ts +0 -1
  317. package/types/components/Form/Form.d.ts +0 -17
  318. package/types/components/Form/Form.types.d.ts +0 -50
  319. package/types/components/Form/index.d.ts +0 -1
  320. package/types/components/InputGroup/InputGroup.d.ts +0 -6
  321. package/types/components/InputGroup/InputGroup.types.d.ts +0 -10
  322. package/types/components/InputGroup/index.d.ts +0 -1
  323. package/types/components/Modal/index.d.ts +0 -1
  324. package/types/components/Nav/index.d.ts +0 -1
  325. package/types/components/NavBar/index.d.ts +0 -1
  326. package/types/components/NavDropdown/index.d.ts +0 -1
  327. package/types/components/Popout/index.d.ts +0 -1
  328. package/types/components/Spinner/index.d.ts +0 -1
  329. package/types/components/Table/index.d.ts +0 -1
  330. package/types/components/Tabs/index.d.ts +0 -1
  331. package/types/components/ToggleButton/ToggleButton.d.ts +0 -9
  332. package/types/components/ToggleButton/ToggleButton.types.d.ts +0 -0
  333. package/types/components/ToggleButton/index.d.ts +0 -1
  334. package/types/components/index.d.ts +0 -16
  335. package/types/index.d.ts +0 -1
  336. package/vite.config.js +0 -57
  337. package/vite.config.js.timestamp-1708777378490-e94428ceb2bf9.mjs +0 -42
  338. /package/{types/components/Button → Button}/Button.d.ts +0 -0
  339. /package/{types/components/Card → Card}/Card.d.ts +0 -0
  340. /package/{types/components/CloseButton → CloseButton}/CloseButton.d.ts +0 -0
  341. /package/{types/components/Dropdown → Dropdown}/Dropdown.d.ts +0 -0
  342. /package/{types/components/FloatingLabel → FloatingLabel}/FloatingLabel.d.ts +0 -0
  343. /package/{types/components/Nav → Nav}/Nav.d.ts +0 -0
  344. /package/{types/components/NavDropdown → NavDropdown}/NavDropdown.types.d.ts +0 -0
  345. /package/{types/components/Popout → Popout}/Popout.d.ts +0 -0
  346. /package/{types/components/Spinner → Spinner}/Spinner.d.ts +0 -0
  347. /package/{types/components/Spinner → Spinner}/Spinner.types.d.ts +0 -0
  348. /package/{types/components/Table → Table}/Table.d.ts +0 -0
  349. /package/{types/components/Tabs → Tabs}/Tabs.d.ts +0 -0
package/src/Form/Form.tsx DELETED
@@ -1,445 +0,0 @@
1
- import React, { forwardRef, useContext, createContext, useMemo, useState, useRef, useEffect, InvalidEvent } from "react";
2
-
3
- import { FormCheckType, FormContextType, FormControlType, FormGroupType, FormLabelType, FormSliderType, FormTextType, FormType, FormSelectType, FormSelectControlType, FormSelectInputType, FormSelectListType, FormSelectListItemType, SelectContextType, SliderContextType } from "./Form.types";
4
- import useClassname from "../hooks/useClassname";
5
- import mergeRefs from "../utils/MergeRefs";
6
- import contrastingColor from "../utils/ContrastingColor";
7
- import { debounce } from "lodash";
8
-
9
- export const FormContext = createContext<FormContextType | null>(null)
10
- export const FormContextProvider = ({children, value} : {children: React.ReactNode, value:FormContextType}) => {
11
- return (
12
- <FormContext.Provider value={value}>
13
- {children}
14
- </FormContext.Provider>
15
- )
16
- }
17
- export const useFormContext = () => {
18
- const context = useContext(FormContext)
19
- if(!context) {
20
- return { controlId: null}
21
- }
22
- return context
23
- }
24
-
25
-
26
- const Form = forwardRef<HTMLFormElement, FormType>(({children, ...restProps}, ref) => {
27
- return (
28
- <form ref={ref} {...restProps}>
29
- {children}
30
- </form>
31
- )
32
- })
33
- Form.displayName = "Form"
34
-
35
-
36
- const Control = forwardRef<HTMLInputElement, FormControlType>( (
37
- {as = "input", className = "", plaintext = false, id="", type = "text", autoFocus=false, ...restProps}, ref
38
- ) => {
39
- let Component = as
40
-
41
- const { controlId } = useFormContext()
42
-
43
- let elementId = controlId ?? id
44
-
45
- let computedClassName = (plaintext ? "sg-form-control-plaintext" : "sg-form-control") + (className != "" ? " "+className : "") + (type == "color" ? " sg-form-control-color" : "")
46
-
47
- return (
48
- <Component autoFocus={autoFocus} ref={ref} id={elementId} type={type} className={computedClassName} {...restProps} />
49
- )
50
- })
51
- Control.displayName = "FormControl"
52
-
53
- const Group = forwardRef<HTMLDivElement, FormGroupType>( ({children, className, controlId, vertical, ...restProps}, ref) => {
54
- const context = useMemo(() => {
55
- return {controlId: controlId}
56
- }, [controlId])
57
- return (
58
- <div ref={ref} className={`sg-form-group${className ? " "+className : ""}${vertical ? " sg-form-group-vertical":""}`} {...restProps}>
59
- <FormContextProvider value={context}>
60
- {children}
61
- </FormContextProvider>
62
- </div>
63
- )
64
- })
65
- Group.displayName = "FormGroup"
66
-
67
- const Label = forwardRef<HTMLLabelElement, FormLabelType>( ({children, className, htmlFor}, ref) => {
68
- const { controlId } = useFormContext()
69
-
70
- let elementHtmlFor = controlId ?? htmlFor
71
- return (
72
- <label ref={ref} htmlFor={elementHtmlFor} className={`sg-form-label${className ? " "+className : ""}`}>
73
- {children}
74
- </label>
75
- )
76
- })
77
- Label.displayName = "FormLabel"
78
-
79
- const Check = forwardRef<HTMLInputElement, FormCheckType>( ({ children,
80
- classNameContainer, containerRef, containerId, styleContainer,
81
- classNameLabel, labelRef, label, labelId, styleLabel,
82
- className, type="checkbox", id, reverse=false, style, onChange, ...restProps
83
- } , ref) => {
84
- const { controlId } = useFormContext()
85
-
86
- const typeComputed = !["radio", "checkbox", "color"].includes(type) ? "checkbox" : type
87
-
88
- const [contrastColor, setContrastColor] = useState<React.CSSProperties>({})
89
- const onChangeInternal = (event: React.ChangeEvent<HTMLInputElement>) => {
90
- //setContrastColor({backgroundColor: "#"+contrastingColor(event.target.value)})
91
- if(onChange) onChange(event)
92
- }
93
-
94
-
95
- return (
96
- <div ref={containerRef} id={containerId} style={styleContainer} className={`sg-form-check${reverse ? " sg-form-check-reverse":""}${classNameContainer ? " "+classNameContainer : ""}${type === "switch" ? " sg-form-switch":""}`} >
97
- {
98
- controlId ?
99
- <input id={controlId} ref={ref} type={typeComputed} style={style} className={`sg-form-check-input${className ? " "+className : ""}`} onChange={event => onChangeInternal(event)} {...restProps} />
100
- :
101
- <label ref={labelRef} id={labelId} style={styleLabel} className={`sg-form-check-label${classNameLabel ? " "+classNameLabel : ""}`}>
102
- {reverse ?
103
- <>
104
- <span>{children ?? label}</span>
105
- <input ref={ref} type={typeComputed} style={style} className={`sg-form-check-input${className ? " "+className : ""}`} onChange={event => onChangeInternal(event)} {...restProps} />
106
- </>
107
- :
108
- <>
109
- <input ref={ref} type={typeComputed} style={style} className={`sg-form-check-input${className ? " "+className : ""}`} onChange={event => onChangeInternal(event)} {...restProps} />
110
- <span>{children ?? label}</span>
111
- </>
112
- }
113
- </label>
114
- }
115
- </div>
116
- )
117
- })
118
- Check.displayName = "FormCheck"
119
-
120
- const Text = forwardRef<HTMLElement, FormTextType>( ({children, className, ...restProps}, ref) => {
121
- return (
122
- <small ref={ref} className={`sg-form-text${className ? " "+className:""}`} {...restProps}>
123
- {children}
124
- </small>
125
- )
126
- })
127
- Check.displayName = "FormText"
128
-
129
- export const SliderContext = createContext<SliderContextType | null>(null)
130
- export const SliderContextProvider = ({children, value} : {children: React.ReactNode, value:SliderContextType}) => {
131
- return (
132
- <SliderContext.Provider value={value}>
133
- {children}
134
- </SliderContext.Provider>
135
- )
136
- }
137
- export const useSliderContext = () => {
138
- const context = useContext(SliderContext)
139
- if(!context) {
140
- throw new Error("UseSliderContext must be used within a SliderContextProvider!")
141
- }
142
- return context
143
- }
144
-
145
- const Slider = forwardRef<HTMLSpanElement, FormSliderType>( ({className, style, controlId, min=1, max=10, step=1, defaultValue=6, value, onChange, ...restProps}, ref) => {
146
- const internalRef = useRef<HTMLDivElement>(null)
147
- //if(internalRef.current) console.log(internalRef.current)
148
- const trackEmpty = useRef<HTMLDivElement>(null)
149
- const trackFilled = useRef<HTMLDivElement>(null)
150
- const thumbRef = useRef<HTMLSpanElement>(null)
151
- const [ internalValue, setInternalValue ] = useState(value ? value + 1 - min : defaultValue - min)
152
- if(value && value != internalValue + min) {
153
- setInternalValue(value - min)
154
- }
155
- const internalMin = min < 1 ? 1 : min
156
- const internalMax = min < 1 ? max + 1 - min : max
157
-
158
- const [ isGrabbing, setIsGrabbing ] = useState(false)
159
- const updateValue = (value: number) => {
160
- let parsedValue = value < internalMin - 1 ? internalMin - 1 : value
161
- parsedValue = parsedValue > internalMax - internalMin ? internalMax - internalMin : parsedValue
162
- if(parsedValue === internalValue) return
163
-
164
- setInternalValue(parsedValue)
165
- if(onChange) {
166
- onChange(Math.abs(parsedValue) + min)
167
- }
168
- }
169
- const getNearestStep = (event: React.PointerEvent, targetElement: HTMLElement) => {
170
- const { pageX } = event
171
- const paddingLeft = parseFloat(window.getComputedStyle(targetElement, null).getPropertyValue('padding-left'))
172
- const leftEdge = targetElement.getBoundingClientRect().left + paddingLeft
173
-
174
- const width = targetElement.scrollWidth - 2*paddingLeft
175
- const thresholdDeltaX = width*(step)/(internalMax-internalMin)
176
-
177
- const relativeMousePositionX = (pageX - leftEdge)/thresholdDeltaX < 0 ? 0 : (pageX - leftEdge)/thresholdDeltaX
178
- const nearestStep = Math.round((pageX - leftEdge)/thresholdDeltaX)
179
- return { relativeMousePositionX, nearestStep }
180
- }
181
-
182
- const onPointerDownTrack = (event: React.PointerEvent) => {
183
- if(!internalRef.current) return
184
- const { nearestStep } = getNearestStep(event, internalRef.current)
185
- updateValue(nearestStep*step)
186
- }
187
- const onPointerDown = (event: React.PointerEvent) => {
188
- (event.target as HTMLElement).setPointerCapture(event.pointerId)
189
- setIsGrabbing(true)
190
- if(!thumbRef.current) return
191
-
192
- }
193
-
194
- const onPointerMove = (event: React.PointerEvent) => {
195
- if(!isGrabbing) return
196
- if(!internalRef.current) return
197
- const { relativeMousePositionX, nearestStep } = getNearestStep(event, internalRef.current)
198
- //console.log(nearestStep)
199
- const lowerBoundary = nearestStep === 0 || relativeMousePositionX === 0? -0.05 : 0.95*nearestStep
200
- const upperBoundary = nearestStep === 0 || relativeMousePositionX === 0? 0.05 : 1.05*nearestStep
201
- if(lowerBoundary < relativeMousePositionX && relativeMousePositionX < upperBoundary) {
202
- updateValue(nearestStep*step)
203
- }
204
-
205
- }
206
-
207
- const onPointerUp = (event: React.PointerEvent) => {
208
- setIsGrabbing(false)
209
- }
210
-
211
- const onKeyDown = (event: React.KeyboardEvent) => {
212
- let caseTrue = false
213
- switch (event.key) {
214
- case "ArrowLeft":
215
- case "ArrowDown":
216
- updateValue(internalValue - 1)
217
- event.preventDefault()
218
- break
219
- case "ArrowRight":
220
- case "ArrowUp":
221
- updateValue(internalValue + 1)
222
- event.preventDefault()
223
- break
224
- case "End":
225
- updateValue(internalMax - 1)
226
- event.preventDefault()
227
- break
228
- case "Home":
229
- updateValue(internalMin - 1)
230
- event.preventDefault()
231
- break
232
- }
233
- }
234
- const filled = (internalValue)/(internalMax-internalMin)
235
- const pointerActions = {onPointerDown, onPointerMove, onPointerUp}
236
- return (
237
- <div onPointerDown={onPointerDownTrack} ref={mergeRefs([ref, internalRef])} id={controlId} style={{...style, "--filled":filled*100+"%"} as React.CSSProperties} className={useClassname("sg-form-slider", className)}>
238
- <span ref={trackFilled} className="sg-form-slider-filled" id={controlId+"-track-filled"}></span>
239
- <span
240
- role="slider" tabIndex={0} ref={thumbRef} data-grabbing={isGrabbing} id={controlId+"-track-thumb"}
241
- {...pointerActions} onKeyDown={onKeyDown} className="sg-form-slider-thumb"
242
- aria-valuenow={internalValue + min} aria-valuemax={max} aria-valuemin={min} {...restProps}
243
- ></span>
244
- <span ref={trackEmpty} className="sg-form-slider-empty" id={controlId+"-track-empty"}></span>
245
- </div>
246
- )
247
- })
248
- Slider.displayName = "FormSlider"
249
-
250
- export const SelectContext = createContext<SelectContextType | null>(null)
251
- export const SelectContextProvider = ({children, value} : {children: React.ReactNode, value:SelectContextType}) => {
252
- return (
253
- <SelectContext.Provider value={value}>
254
- {children}
255
- </SelectContext.Provider>
256
- )
257
- }
258
- export const useSelectContext = () => {
259
- const context = useContext(SelectContext)
260
- if(!context) {
261
- throw new Error("UseSelectContext must be used within a SelectContextProvider!")
262
- }
263
- return context
264
- }
265
-
266
- const SelectTag = forwardRef<HTMLSelectElement, FormSelectType>( ({children, className, id, ...restProps}, ref) => {
267
- const { controlId } = useFormContext()
268
- const elementId = controlId ?? id
269
- const classNames = ["sg-form-select-tag", className]
270
- return (
271
- <select ref={ref} className={`sg-form-select-tag${className ? " "+className : ""}`} id={elementId} {...restProps}>
272
- {children}
273
- </select>
274
- )
275
- })
276
- SelectTag.displayName = "FormSelectTag"
277
-
278
- const Select = forwardRef<HTMLDivElement, FormSelectType>( ({children, className, id, required="false", ...restProps}, ref) => {
279
- const { controlId } = useFormContext()
280
-
281
- const internalSelectRef = useRef<HTMLDivElement>(null)
282
-
283
- const [ showList, setShowList ] = useState<boolean>(false)
284
- const [ activeDescendant, setActiveDescendant ] = useState<string>("")
285
- const [ inputValue, setInputValue ] = useState<string>("")
286
-
287
- let elementId = controlId ?? id
288
-
289
- const context = useMemo(() => ({
290
- internalId: elementId,
291
- showList,
292
- setShowList,
293
- activeDescendant,
294
- setActiveDescendant,
295
- inputValue,
296
- setInputValue
297
- }), [showList, activeDescendant, inputValue])
298
-
299
- useEffect(() => {
300
- const selectElement = internalSelectRef.current
301
- const handleClick = (event: MouseEvent) => {
302
- if(!selectElement!.contains(event.target as HTMLElement)) {
303
- setShowList(false)
304
- document.querySelectorAll(".sg-select-control.focus").forEach(element => {
305
- element.classList.remove("focus")
306
- })
307
- }
308
- }
309
- if(selectElement) {
310
- document.addEventListener("click", handleClick, true)
311
- }
312
- const handleSubmit = (event: any) => {
313
- console.log(event.target)
314
- }
315
- document.addEventListener("invalid", handleSubmit, true)
316
- return function cleanup() {
317
- if(selectElement) {
318
- document.removeEventListener("click", handleClick, true)
319
- }
320
- document.removeEventListener("invalid", handleSubmit, true)
321
- }
322
- }, [internalSelectRef.current])
323
-
324
- return (
325
- <div ref={mergeRefs([ref, internalSelectRef])} className={`sg-form-select${className ? " "+className : ""}`} id={elementId} {...restProps} >
326
- <SelectContextProvider value={context}>
327
- {children}
328
- </SelectContextProvider>
329
- </div>
330
- )
331
- })
332
- Select.displayName = "FormSelect"
333
-
334
- const SelectControl = forwardRef<HTMLDivElement, FormSelectControlType>( ({children, className, placeholder="Placeholder...", searchable=false, inputRef, inputOptions, ...restProps}, ref) => {
335
- const { setShowList, internalId } = useSelectContext()
336
- const selectControlRef = useRef<HTMLDivElement>(null)
337
-
338
- const handlePointerUp = (event: React.MouseEvent) => {
339
- setShowList(prev => !prev);
340
- const selectControl = selectControlRef.current
341
- if(selectControl) {
342
- selectControl.classList.add("focus")
343
- const eventTargetChildren = selectControl.children[0] as HTMLElement
344
- if(eventTargetChildren) { eventTargetChildren.focus() }
345
- }
346
- }
347
- const inputParams = {...inputOptions, disabled:searchable, placeholder:placeholder, ref:inputRef}
348
-
349
- return (
350
- <div ref={mergeRefs([ref, selectControlRef])} onPointerUp={handlePointerUp} className={useClassname("sg-select-control", className)} {...restProps}>
351
- <SelectInput {...inputParams}/>
352
- </div>
353
- )
354
- })
355
- SelectControl.displayName = "FormSelectControl"
356
-
357
- const SelectInput = forwardRef<HTMLInputElement, FormSelectInputType>( ({className, id, value, onChange, ...restProps}, ref ) => {
358
- const { showList, setShowList, inputValue, setInputValue, internalId } = useSelectContext()
359
-
360
- const debouncedInput = (value: string) => {
361
- setTimeout(()=>{
362
- setInputValue(value)
363
- }, 300)
364
- }
365
- const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
366
- console.log(event)
367
- if(!showList) { setShowList(true) }
368
- if(onChange) { onChange(event) }
369
- //debouncedInput(event.target.value)
370
- setInputValue(event.target.value)
371
- }
372
- const handleKeyUp = (event: React.KeyboardEvent) => {
373
- const key = event.key
374
- switch(key) {
375
- case "ArrowDown":
376
- console.log("down arrow")
377
- break
378
- case "ArrowUp":
379
- console.log("up arrow")
380
- break
381
- }
382
- }
383
-
384
-
385
- return (
386
- <input value={inputValue} ref={ref}
387
- onKeyUp={handleKeyUp} onChange={handleChange}
388
- className={useClassname("sg-select-input", className)}
389
- {...restProps}
390
- />
391
- )
392
- })
393
- SelectInput.displayName = "FormSelectInput"
394
-
395
- const SelectList = forwardRef<HTMLUListElement, FormSelectListType>( ({children, className, id, ...restProps}, ref) => {
396
- const { showList, internalId } = useSelectContext()
397
-
398
- const listRef = useRef<HTMLUListElement>(null)
399
-
400
- return (
401
- <ul ref={mergeRefs([ref, listRef])} className={useClassname("sg-select-list", className)} style={showList ? undefined : {display:"none"}} {...restProps}>
402
- {children}
403
- </ul>
404
- )
405
- })
406
- SelectList.displayName = "FormSelectList"
407
-
408
- const SelectOption = forwardRef<HTMLLIElement, FormSelectListItemType>(({children, className, id, value,...restProps}, ref) => {
409
- const { internalId } = useSelectContext()
410
- const handlePointerEnter = (event: React.MouseEvent) => {
411
- if(!event.target) return
412
-
413
- let element = event.target as HTMLElement
414
- let focusElement = document.querySelectorAll(".sg-select-list-item.focus")
415
- //console.log(element, focusElement)
416
- focusElement.forEach(element => element.classList.remove("focus"))
417
- element.classList.add("focus")
418
- }
419
- const handlePointerUp = (event: React.MouseEvent) => {
420
- console.log((event.target as HTMLElement).id)
421
- }
422
- return (
423
- <li onPointerDown={handlePointerUp} onPointerOver={handlePointerEnter} id={value ?? id} className={useClassname("sg-select-list-item", className)} {...restProps}>
424
- {children}
425
- </li>
426
- )
427
- })
428
- SelectOption.displayName = "FormSelectOption"
429
-
430
-
431
- export default Object.assign(Form, {
432
- Control: Control,
433
- Select: Object.assign(Select, {
434
- Control: SelectControl,
435
- Input: SelectInput,
436
- Options: SelectList,
437
- Option: SelectOption
438
- }),
439
- SelectTag: SelectTag,
440
- Group: Group,
441
- Label: Label,
442
- Check: Check,
443
- Text: Text,
444
- Slider: Slider
445
- })
@@ -1,117 +0,0 @@
1
- import { ReactNode, Dispatch, Children } from "react";
2
-
3
- import { BaseDivType, BaseFormType, BaseInputType, BaseLabelType, BaseLItemType, BaseSelectType, BaseSpanType, BaseSliderType, BaseSmallType, BaseUListType } from "../utils/BaseTypes";
4
-
5
- export type FormContextType = {
6
- controlId: string
7
- }
8
-
9
- export type FormType = {
10
- children: ReactNode
11
- } & BaseFormType
12
-
13
- export type FormControlType = {
14
- as?: React.ElementType,
15
- className?: string,
16
- plaintext?: boolean,
17
- id?: string,
18
- type?: string,
19
- autoFocus?: boolean
20
- } & BaseInputType
21
-
22
- // Form Select types
23
- export type SelectContextType = {
24
- internalId?:string,
25
- showList: boolean,
26
- setShowList: Dispatch<React.SetStateAction<boolean>>,
27
- activeDescendant: string,
28
- setActiveDescendant: Dispatch<React.SetStateAction<string>>,
29
- inputValue: string,
30
- setInputValue: Dispatch<React.SetStateAction<string>>
31
- }
32
- export type FormSelectType = {
33
- children: ReactNode,
34
- className?: string,
35
- id?: string,
36
- required?: boolean
37
- } & (BaseSelectType & BaseDivType)
38
- export type FormSelectControlType = {
39
- children?: ReactNode,
40
- className?: string,
41
- placeholder?: string,
42
- searchable?: boolean,
43
- inputRef?: React.Ref<HTMLInputElement>,
44
- inputOptions?: FormSelectInputType
45
- } & BaseDivType
46
- export type FormSelectInputType = {
47
- className?: string,
48
- id?: string
49
- } & BaseInputType
50
- export type FormSelectListType = {
51
- children: ReactNode,
52
- className?: string,
53
- id?: string
54
- } & BaseUListType
55
- export type FormSelectListItemType = {
56
- children: ReactNode,
57
- className?: string,
58
- id?: string,
59
- value?: string
60
- } & BaseLItemType
61
-
62
-
63
- export type FormGroupType = {
64
- children: ReactNode,
65
- className?: string,
66
- controlId: string,
67
- vertical?: boolean
68
- } & BaseDivType
69
-
70
- export type FormLabelType = {
71
- children: ReactNode,
72
- className?: string,
73
- htmlFor?: string
74
- } & BaseLabelType
75
-
76
- export type FormCheckType = {
77
- children?: ReactNode,
78
- style?: React.CSSProperties,
79
- classNameContainer?:string,
80
- containerRef?:React.LegacyRef<HTMLDivElement>,
81
- containerId?: string,
82
- styleContainer?: React.CSSProperties,
83
- classNameLabel?: string,
84
- labelRef?: React.LegacyRef<HTMLLabelElement>,
85
- label?: string,
86
- labelId?: string,
87
- styleLabel?: React.CSSProperties,
88
- className?: string,
89
- type?: string,
90
- controlId?: string,
91
- reverse?: boolean,
92
- } & BaseInputType
93
-
94
- export type FormTextType = {
95
- children: ReactNode,
96
- className?: string,
97
- } & BaseSmallType
98
-
99
- export type FormSliderType = {
100
- children?: ReactNode,
101
- className?: string,
102
- style?: React.CSSProperties,
103
- controlId: string,
104
- min?: number,
105
- max?: number,
106
- step?: number,
107
- defaultValue?: number,
108
- value: number,
109
- onChange(value :number): () => any
110
- } & BaseSpanType // BaseSliderType
111
- export type SliderContextType = {
112
- children: ReactNode,
113
- controlId: string,
114
- min?: number,
115
- max?: number,
116
- step?: number
117
- }
package/src/Form/index.ts DELETED
@@ -1,4 +0,0 @@
1
- import Form from "./Form"
2
- export default Form
3
- export {FormContextProvider, useFormContext} from "./Form"
4
- export type {FormCheckType, FormContextType, FormControlType, FormGroupType, FormLabelType, FormSelectType, FormTextType, FormType} from "./Form.types"
@@ -1,46 +0,0 @@
1
- import React, { forwardRef, useMemo } from "react"
2
-
3
- import { InputGroupText, InputGroupType, InputGroupGridType } from "./InputGroup.types"
4
-
5
- import { FormContextProvider, useFormContext } from "../Form"
6
- import { useClassname } from "../hooks"
7
-
8
- const InputGroup = forwardRef<HTMLDivElement, InputGroupType>(({children, className, controlId, ...restProps}, ref) => {
9
- const context = useMemo(() => {
10
- return {controlId: controlId}
11
- }, [controlId])
12
- return (
13
- <div ref={ref} className={useClassname("sg-input-group", className)} {...restProps}>
14
- <FormContextProvider value={context}>
15
- {children}
16
- </FormContextProvider>
17
- </div>
18
- )
19
- })
20
- InputGroup.displayName = "InputGroup"
21
-
22
- const Grid = forwardRef<HTMLDivElement, InputGroupGridType>( ({children, className, ...restProps}, ref) => {
23
- return (
24
- <div ref={ref} className={useClassname("sg-input-group-grid", className)}>
25
- {children}
26
- </div>
27
- )
28
- })
29
- Grid.displayName = "InputGroupGrid"
30
-
31
- const Text = forwardRef<HTMLLabelElement, InputGroupText>( ({children, className, htmlFor, ...restProps}, ref) => {
32
- const { controlId } = useFormContext()
33
-
34
- const computedHtmlFor = controlId ?? htmlFor
35
- return (
36
- <label ref={ref} htmlFor={computedHtmlFor} className={useClassname("sg-input-group-text", className)} {...restProps}>
37
- {children}
38
- </label>
39
- )
40
- })
41
- Text.displayName = "InputGroupText"
42
-
43
- export default Object.assign(InputGroup, {
44
- Text: Text,
45
- Grid: Grid
46
- })
@@ -1,21 +0,0 @@
1
- import { ReactNode } from "react";
2
-
3
- import { BaseDivType, BaseLabelType } from "../utils/BaseTypes";
4
-
5
- export type InputGroupType = {
6
- children: ReactNode,
7
- className?: string,
8
- controlId: string
9
- } & BaseDivType
10
-
11
- export type InputGroupText = {
12
- children: ReactNode,
13
- className?: string,
14
- htmlFor?: string
15
- } & BaseLabelType
16
-
17
- export type InputGroupGridType = {
18
- children: ReactNode,
19
- className?:string,
20
-
21
- } & BaseDivType
@@ -1,4 +0,0 @@
1
- import InputGroup from "./InputGroup"
2
- export default InputGroup
3
- export * from "./InputGroup"
4
- export type { InputGroupText, InputGroupType} from "./InputGroup.types"