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/Tabs/Tabs.tsx DELETED
@@ -1,215 +0,0 @@
1
- import React, { createContext, forwardRef, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react"
2
-
3
- import { TabsButtonType, TabsContentType, TabsContextType, TabsControlsType, TabsPageType, TabsType, TabsScrollButtonType } from "./Tabs.types"
4
-
5
- import mergeClassnames from "../utils/MergeClassnames"
6
- import mergeRefs from "../utils/MergeRefs"
7
- import { useScreenSize } from "../hooks"
8
-
9
- const TabsContext = createContext<TabsContextType | null>(null)
10
- const TabsContextProvider = ({children, value}:{children: React.ReactNode, value: TabsContextType}) => {
11
- return (
12
- <TabsContext.Provider value={value}>
13
- {children}
14
- </TabsContext.Provider>
15
- )
16
- }
17
- const useTabsContext = () => {
18
- const context = useContext(TabsContext)
19
- if(!context) {
20
- throw new Error(
21
- "useTabContext has to be used within a TabContextProvider!"
22
- )
23
- }
24
- return context
25
- }
26
-
27
- const Tabs = forwardRef<HTMLDivElement, TabsType>(({children, className, controlId, activeClassName, defaultActive, active, onTabChange, ...restProps}, ref) => {
28
- const [activeTab, setActiveTab] = useState<string>(defaultActive)
29
- const activeClass= activeClassName ? activeClassName: "sg-active"
30
- if(active && activeTab != active) {
31
- setActiveTab(active)
32
- }
33
-
34
- if(active && !onTabChange || !active && onTabChange) {
35
- throw new Error(
36
- "If you control the tabs externally, you need both an 'active' state and a function 'onTabChange' that controls the 'active' state!"
37
- )
38
- }
39
-
40
- const contextValue = useMemo(() => ({
41
- activeTab,
42
- setActiveTab,
43
- controlId,
44
- activeClass,
45
- onTabChange
46
- }), [activeTab, activeClass, controlId, activeClass, onTabChange])
47
- return (
48
- <TabsContextProvider value={contextValue}>
49
- <div ref={ref} id={controlId+"-tab-wrapper"} className={`sg-tabs${className ? " "+className: ""}`} {...restProps}>
50
- {children}
51
- </div>
52
- </TabsContextProvider>
53
- )
54
- })
55
- Tabs.displayName = "Tabs"
56
-
57
- const ScrollButton = forwardRef<HTMLButtonElement, TabsScrollButtonType>( ({className, left = true, controlsRef, style, ...restProps}, ref) => {
58
- const internalRef = useRef<HTMLButtonElement>(null)
59
-
60
- const handleScrollBy = () => {
61
- if(!controlsRef || !controlsRef.current) return
62
-
63
- const tabControls = controlsRef.current
64
- const toScroll = (left ? -1 : 1) * 32
65
- tabControls.scrollBy(toScroll, 0)
66
- }
67
-
68
- let scrollIntervalId: NodeJS.Timeout
69
- const handlePointerDown = (event: React.MouseEvent<HTMLButtonElement>) => {
70
- clearInterval(scrollIntervalId)
71
- scrollIntervalId = setInterval(handleScrollBy, 20)
72
- }
73
- const handlePointerUp = (event: React.MouseEvent<HTMLButtonElement>) => {
74
- clearInterval(scrollIntervalId)
75
- }
76
- const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement> ) => {
77
- if(event.key === "Space" || event.key === "Enter") {
78
- clearInterval(scrollIntervalId)
79
- scrollIntervalId = setInterval(handleScrollBy, 20)
80
- return
81
- }
82
- clearInterval(scrollIntervalId)
83
- }
84
- const handleKeyUp = (event: React.KeyboardEvent<HTMLButtonElement> ) => {
85
- clearInterval(scrollIntervalId)
86
- }
87
-
88
-
89
-
90
- return (
91
- <button
92
- type="button" ref={mergeRefs([ref, internalRef])} data-position={left ? "left":"right"}
93
- onPointerDown={handlePointerDown} onPointerUp={handlePointerUp} onKeyDown={handleKeyDown} onKeyUp={handleKeyUp}
94
- className={mergeClassnames("sg-tabs-button", "sg-tabs-scroll-button", className)}
95
- {...restProps} >
96
- <span className="visually-hidden">Scroll tab controls {left ? "left":"right"}</span>
97
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
98
- <polyline
99
- points={left ? "144 88 104 128 144 168" : "112 88 152 128 112 168" } //168 64 104 128 168 192
100
- fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="32"
101
- />
102
- </svg>
103
- </button>
104
- )
105
- })
106
-
107
- const Controls = forwardRef<HTMLDivElement, TabsControlsType>( ({children, className, ...restProps}, ref) => {
108
- const { controlId, activeClass } = useTabsContext()
109
- const [ isOverflow, setIsOverflow ] = useState(false)
110
- const internalRef = useRef<HTMLDivElement>(null)
111
-
112
- const checkWidthOverflow = () => {
113
- if(!internalRef.current) return
114
-
115
- const el = internalRef.current
116
- setIsOverflow(el.clientWidth < el.scrollWidth)
117
- }
118
- useLayoutEffect(() => {
119
- console.log(internalRef.current)
120
- checkWidthOverflow()
121
- }, [children])
122
- useEffect(() => {
123
- window.addEventListener("resize", checkWidthOverflow, true)
124
- return function cleanup() {
125
- window.removeEventListener("resize", checkWidthOverflow, true)
126
- }
127
- }, [])
128
-
129
- const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
130
- const key = event.key
131
- const tabsControls = internalRef.current
132
- if(tabsControls) {
133
- const tabControlsChildren = Array.from(tabsControls.children) as HTMLElement[]
134
- let newIndex
135
- if(key === "ArrowRight" || key === "ArrowLeft") {
136
- event.preventDefault()
137
- const activeTab = document.querySelector(".sg-tabs-button"+"."+activeClass) as HTMLElement
138
- const activeTabIndex = tabControlsChildren.indexOf(activeTab)
139
- const indexChange = key === "ArrowRight" ? 1 : -1
140
- newIndex = activeTabIndex + indexChange < 0 ? tabControlsChildren.length - 1 : (activeTabIndex + indexChange >= tabControlsChildren.length ? 0 : activeTabIndex + indexChange)
141
- } else if (key === "Home" || key === "End") {
142
- event.preventDefault()
143
- newIndex = key === "Home" ? 0 : tabControlsChildren.length -1
144
- }
145
- if(!newIndex) return
146
- tabControlsChildren[newIndex].focus()
147
- tabControlsChildren[newIndex].click()
148
- }
149
- }
150
- //div style={{maxWidth:"100%", display:"flex", overflowX:"auto"}}
151
- return (
152
- <div tabIndex={-1} onKeyDown={(event) => handleKeyDown(event)} role="tablist" id={controlId+"-tab-controls"} ref={mergeRefs([ref, internalRef])} className={`sg-tabs-controls${className ? " "+className:""}`} {...restProps}>
153
- {isOverflow ? <ScrollButton controlsRef={internalRef} /> : null }
154
- {children}
155
- {isOverflow ? <ScrollButton controlsRef={internalRef} left={false}/> : null }
156
- </div>
157
- )
158
- })
159
- Controls.displayName = "TabsControl"
160
-
161
- const Button = forwardRef<HTMLButtonElement, TabsButtonType>( ({children, className, onClick, tabId, id,...restProps}, ref) => {
162
- const { activeTab, setActiveTab, activeClass, onTabChange } = useTabsContext()
163
- const isActiveTab = activeTab === tabId
164
- const classNameComputed = "sg-tabs-button" + (className ? " "+className:"") + (isActiveTab ? " "+activeClass : "")
165
- const handleClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
166
- if(onTabChange) {
167
- onTabChange(tabId)
168
- }
169
- else {
170
- setActiveTab(tabId)
171
- }
172
- if(onClick) {
173
- onClick(event)
174
- }
175
- }
176
- return (
177
- <button
178
- role="tab" type="button" id={tabId+"-button"} ref={ref} onClick={event => handleClick(event)} className={classNameComputed} {...restProps}
179
- tabIndex={isActiveTab ? 0:-1} aria-selected={isActiveTab ? "true":"false"} aria-controls={tabId+"-page"}
180
- >
181
- {children}
182
- </button>
183
- )
184
- })
185
- Button.displayName = "TabsButton"
186
-
187
- const Content = forwardRef<HTMLDivElement, TabsContentType>( ({children, className, ...restProps}, ref) => {
188
- return (
189
- <div role="none" ref={ref} className={`sg-tabs-content${className ? " "+className:""}`} {...restProps}>
190
- {children}
191
- </div>
192
- )
193
- })
194
- Content.displayName = "TabsContent"
195
-
196
- const Page = forwardRef<HTMLDivElement, TabsPageType>( ({children, className, tabId, ...restProps}, ref) => {
197
- const { activeTab, activeClass } = useTabsContext()
198
- const classNameComputed = "sg-tabs-page" + (className ? " "+className:"") + (activeTab === tabId ? " "+activeClass : "")
199
- return (
200
- <div
201
- role="tabpanel" id={tabId+"-page"} aria-labelledby={tabId+"-button"}
202
- ref={ref} className={classNameComputed} {...restProps}
203
- >
204
- {children}
205
- </div>
206
- )
207
- })
208
- Page.displayName = "TabsPage"
209
-
210
- export default Object.assign(Tabs, {
211
- Controls: Controls,
212
- Button: Button,
213
- Content: Content,
214
- Page: Page,
215
- })
@@ -1,49 +0,0 @@
1
- import { BaseButtonType, BaseDivType } from "../utils/BaseTypes"
2
-
3
- export type TabsContextType = {
4
- activeTab: string,
5
- setActiveTab: React.Dispatch<React.SetStateAction<string>>,
6
- controlId: string,
7
- activeClass: string,
8
- onTabChange: Function | undefined
9
- }
10
-
11
- export type TabsType = {
12
- children: React.ReactNode,
13
- className?: string,
14
- controlId: string,
15
- activeClassName?: string,
16
- defaultActive: string,
17
- active?: string,
18
- onTabChange?: Function
19
- } & BaseDivType
20
-
21
- export type TabsControlsType = {
22
- children: React.ReactNode,
23
- className?: string,
24
- } & BaseDivType
25
-
26
- export type TabsScrollButtonType = {
27
- className?: string,
28
- left?: boolean,
29
- controlsRef?: React.RefObject<HTMLDivElement>
30
- } & BaseButtonType
31
-
32
- export type TabsButtonType = {
33
- children: React.ReactNode,
34
- className?: string,
35
- onClick?: Function,
36
- tabId: string,
37
- id?: string,
38
- } & BaseButtonType
39
-
40
- export type TabsContentType = {
41
- children: React.ReactNode,
42
- className?: string,
43
- } & BaseDivType
44
-
45
- export type TabsPageType = {
46
- children: React.ReactNode,
47
- className?: string,
48
- tabId: string,
49
- } & BaseDivType
package/src/Tabs/index.ts DELETED
@@ -1,3 +0,0 @@
1
- import Tabs from "./Tabs"
2
- export default Tabs
3
- export type {TabsButtonType, TabsContentType, TabsContextType, TabsControlsType, TabsPageType, TabsType} from "./Tabs.types"
@@ -1,21 +0,0 @@
1
- import React, { useState, forwardRef } from "react"
2
-
3
- import { ToggleButtonType } from "./ToggleButton.types"
4
-
5
- const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonType>( ({children, toggled="false", onClick, ...restProps}, ref) => {
6
- const [ toggledInternal, setToggledInternal ] = useState<boolean>(toggled === "true" ? true : false)
7
- const handleClick = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
8
- setToggledInternal(prev => !prev)
9
- if(onClick) {
10
- onClick(event)
11
- }
12
- }
13
- return (
14
- <button onClick={(event) => handleClick(event)} data-toggled={toggledInternal} {...restProps}>
15
- {children}
16
- </button>
17
- )
18
- })
19
- ToggleButton.displayName = "ToggleButton"
20
-
21
- export default ToggleButton
@@ -1,8 +0,0 @@
1
- import { ReactNode } from "react"
2
- import { BaseButtonType } from "../utils/BaseTypes"
3
-
4
- export type ToggleButtonType = {
5
- children: ReactNode,
6
- toggled?: boolean,
7
- onClick?: <T>(event: T) => T
8
- } & BaseButtonType
@@ -1,3 +0,0 @@
1
- import ToggleButton from "./ToggleButton"
2
- export default ToggleButton
3
- export type {ToggleButtonType} from "./ToggleButton.types"
@@ -1,5 +0,0 @@
1
- const useClassname = (...args: (string | undefined)[]) => {
2
- return args.filter(arg => arg != undefined).join(" ")
3
- }
4
-
5
- export default useClassname
@@ -1,186 +0,0 @@
1
- import { useRef, useState, useEffect, RefObject, useLayoutEffect, cloneElement, ReactNode } from "react"
2
- import { createPortal } from "react-dom"
3
-
4
- type Coordinates = {
5
- top?: number,
6
- bottom?: number,
7
- right?: number,
8
- left?: number,
9
- offSetTop:number,
10
- offSetLeft:number,
11
- width?: number | null
12
- }
13
- type Dimensions = {
14
- height?: number,
15
- width?: number
16
- }
17
- type Options = {
18
- moveClass?: string,
19
- draggable?: boolean
20
- }
21
-
22
- export const insertPhantomElement = (targetElement: HTMLElement, movingElement: HTMLElement, options: {after?:boolean, first?:boolean} = {after: true, first: true}) => {
23
- const nextSibling = targetElement.nextElementSibling as HTMLElement
24
- const previousSibling = targetElement.previousElementSibling as HTMLElement
25
- const phantomData = document.querySelectorAll<HTMLElement>("[data-phantom='before'], [data-phantom='after']")
26
- phantomData.forEach(element => {
27
- if( targetElement !== element) {
28
- element.dataset.phantom = "none"
29
- //console.log("equal")
30
- }
31
- })
32
- targetElement.dataset.phantom = options.after ? "after":"before"
33
- if(options.after && nextSibling) { nextSibling.dataset.phantom = "before" }
34
- if(!options.after && previousSibling) { previousSibling.dataset.phantom = "after" }
35
-
36
- const { width, height } = movingElement.getBoundingClientRect()
37
- const parentElement = targetElement.parentElement!
38
-
39
- document.querySelectorAll(".phantom").forEach(phantom => phantom.remove())
40
-
41
- const phantomDiv = document.createElement("li")
42
- phantomDiv.classList.add("phantom")
43
- phantomDiv.classList.add("sg-sublist")
44
- phantomDiv.style.width = options.first ? width.toString()+"px" : ""
45
- phantomDiv.style.height = height.toString()+"px"
46
- parentElement.insertBefore(phantomDiv, options.after ? targetElement.nextSibling : targetElement)
47
- }
48
-
49
- const insertDraggedElement = () => {
50
-
51
- }
52
-
53
- /*
54
- const useDraggable = (movingElementRef: RefObject<HTMLElement>, options: Options = {}) => {
55
- const [ dragging, setDragging ] = useState<boolean>(false)
56
-
57
- const onDragStart = (event: React.DragEvent) => {
58
- console.log("drag start")
59
- insertPhantomElement(movingElementRef.current!)
60
- }
61
-
62
- const onDragEnd = (event: React.DragEvent) => {
63
- document.querySelectorAll(".phantom").forEach(phantom => phantom.remove())
64
- }
65
-
66
- return { onDragStart, onDragEnd }
67
- }
68
- */
69
-
70
- const useDraggable = (movingElementRef: RefObject<HTMLElement>, options: Options = {draggable: false}) => {
71
- const [coordinates, setCoordinates] = useState<Coordinates>({offSetTop:0, offSetLeft:0})
72
- const [ isMouseDown, setIsMouseDown ] = useState<boolean>(false)
73
-
74
- const elementWithPhantom = useRef<HTMLElement | null>(null)
75
- const isMouseDownRef = useRef<boolean>(isMouseDown)
76
- const coordinatesRef = useRef<Coordinates>(coordinates)
77
- useEffect(() => {
78
- isMouseDownRef.current = isMouseDown
79
- }, [isMouseDown])
80
- useEffect(() => {
81
- coordinatesRef.current = coordinates
82
- }, [coordinates])
83
-
84
- useEffect(() => {
85
- if(movingElementRef && options.draggable) {
86
- const movingElement = movingElementRef.current!
87
-
88
- const onPointerDown = (event: PointerEvent) => {
89
- event.stopPropagation()
90
- const { width } = (event.target as HTMLElement).getBoundingClientRect()
91
-
92
- insertPhantomElement(movingElement, movingElement, {first: true})
93
-
94
- const { top, left} = movingElement.getBoundingClientRect()
95
- //Initial coordinates & setup for moving
96
- setCoordinates(prev => ({
97
- ...prev,
98
- top: top,
99
- left: left,
100
- offSetTop:event.clientY - top,
101
- offSetLeft:event.clientX - left,
102
- width: width
103
- }))
104
- movingElement.style.setProperty("user-select", "none")
105
- movingElement.setPointerCapture(event.pointerId)
106
- movingElement.classList.add("moving")
107
- setIsMouseDown(true)
108
- }
109
- const onPointerUp = (event: PointerEvent) => {
110
- if(isMouseDownRef.current) {
111
- const phantomElement = document.querySelectorAll(".phantom")[0]
112
- const phantomElementParent = phantomElement.parentElement!
113
-
114
- phantomElementParent.insertBefore(movingElement, phantomElement)
115
-
116
- document.querySelectorAll(".phantom").forEach(phantom => phantom.remove())
117
-
118
- movingElement.style.removeProperty("user-select")
119
- movingElement.classList.remove("moving")
120
- setCoordinates(prev => ({
121
- ...prev,
122
- width: null
123
- }))
124
- setIsMouseDown(false)
125
- }
126
- }
127
- const onPointerMove = (event: PointerEvent) => {
128
- if(isMouseDownRef.current) {
129
- const isTopOver = event.clientY - coordinatesRef.current.offSetTop < 0
130
- const isBottomOver = window.innerHeight - (event.clientY - coordinatesRef.current.offSetTop + movingElement.offsetHeight) < 0
131
- const isLeftOver = event.clientX - coordinatesRef.current.offSetLeft < 0
132
- const isRightOver = window.innerWidth - (event.clientX - coordinatesRef.current.offSetLeft + movingElement.offsetWidth) < 0
133
-
134
- let topCoordinate = isTopOver ? 0 : event.clientY - coordinatesRef.current.offSetTop
135
- topCoordinate = isBottomOver ? window.innerHeight - movingElement.offsetHeight : topCoordinate
136
-
137
- let leftCoordinate = isLeftOver ? 0 : event.clientX - coordinatesRef.current.offSetLeft
138
- leftCoordinate = isRightOver ? window.innerWidth - movingElement.offsetWidth : leftCoordinate
139
-
140
- setCoordinates(prev => ({
141
- ...prev,
142
- top:topCoordinate,
143
- left:leftCoordinate
144
- }))
145
-
146
- movingElement.hidden = true
147
- const elemBelow = document.elementFromPoint(event.clientX, event.clientY)
148
- movingElement.hidden = false
149
- const isElemeBelowDropable = elemBelow?.classList.contains("sg-list-item") || elemBelow?.classList.contains("sg-sublist")
150
- const elemBelowClosestDroppable = isElemeBelowDropable ? elemBelow as HTMLElement : elemBelow?.closest(".sg-list-item, .sg-sublist") as HTMLElement
151
- console.log(elemBelow, elemBelowClosestDroppable)
152
-
153
- if(!elemBelowClosestDroppable || elemBelow?.classList.contains("phantom")) { return }
154
-
155
- if(elementWithPhantom.current != elemBelowClosestDroppable) {
156
- elementWithPhantom.current = elemBelowClosestDroppable
157
- }
158
-
159
- const {top, left, width, height} = elementWithPhantom.current.getBoundingClientRect()
160
- const phantomPosition = elementWithPhantom.current.dataset.phantom
161
-
162
- const afterTest = event.clientY - top >= height/2 && phantomPosition != "after"
163
- const beforeTest = event.clientY - top < height/2 && phantomPosition != "before"
164
- if(afterTest || beforeTest) {
165
- insertPhantomElement(elementWithPhantom.current, movingElement, {after: afterTest ? true : false})
166
- }
167
- }
168
- }
169
-
170
- const bubble = false
171
-
172
- movingElement.addEventListener("pointerdown", onPointerDown, bubble)
173
- movingElement.addEventListener("pointerup", onPointerUp, bubble)
174
- movingElement.addEventListener("pointermove", onPointerMove, bubble)
175
- return function cleanup() {
176
- movingElement.removeEventListener("pointerdown", onPointerDown, bubble)
177
- movingElement.removeEventListener("pointerup", onPointerUp, bubble)
178
- movingElement.removeEventListener("pointermove", onPointerMove, bubble)
179
- }
180
- }
181
- },[])
182
-
183
- return { coordinates, isMouseDown}
184
- }
185
-
186
- export default useDraggable
@@ -1,37 +0,0 @@
1
- import { useEffect } from "react";
2
-
3
- const useKeepElementFocused = (elementRef:any) => {
4
- useEffect(() => {
5
- const onKeyDown = (event: React.KeyboardEvent | KeyboardEvent) => {
6
- const focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
7
- const modal = elementRef.current as HTMLElement
8
- if(modal) {
9
- const firstFocusableElement = modal.querySelectorAll<HTMLElement>(focusableElements)[0]
10
- const focusableContent = modal.querySelectorAll<HTMLElement>(focusableElements)
11
- const lastFocusableElement = focusableContent[focusableContent.length - 1]
12
- let isTabPressed = event.key === 'Tab' || event.keyCode === 9;
13
-
14
- if (!isTabPressed) {
15
- return;
16
- }
17
-
18
- if (event.shiftKey) {
19
- if (document.activeElement === firstFocusableElement) {
20
- lastFocusableElement.focus()
21
- event.preventDefault()
22
- }
23
- } else if (document.activeElement === lastFocusableElement) {
24
- firstFocusableElement.focus();
25
- event.preventDefault()
26
- }
27
- }
28
- }
29
- document.addEventListener('keydown', onKeyDown, true )
30
-
31
- return function cleanup() {
32
- document.removeEventListener('keydown', onKeyDown, true )
33
- }
34
- }, [elementRef])
35
- }
36
-
37
- export default useKeepElementFocused
@@ -1,24 +0,0 @@
1
- import { useState, useMemo, useEffect} from "react"
2
- import { debounce } from "lodash"
3
-
4
- const useScreenSize = (debounceTime=25) => {
5
- const [size, setSize]= useState({height: window.innerHeight, width: window.innerWidth})
6
-
7
-
8
- const handleResize = ()=> {
9
- setSize({height: window.innerHeight, width: window.innerWidth})
10
- }
11
- const handleResizeDebounced = useMemo(() =>
12
- debounce(handleResize, debounceTime)
13
- , [debounceTime] )
14
-
15
- useEffect(() => {
16
- window.addEventListener("resize", handleResizeDebounced, true)
17
- return function cleanup() {
18
- window.removeEventListener("resize", handleResizeDebounced, true)
19
- }
20
- }, [handleResizeDebounced])
21
- return size
22
- }
23
-
24
- export default useScreenSize
package/src/index.ts DELETED
@@ -1,21 +0,0 @@
1
- export * from "./Button"
2
- export * from "./ButtonGroup"
3
- export * from "./Card"
4
- export * from "./CloseButton"
5
- export * from "./Dropdown"
6
- export * from "./FloatingLabel"
7
- export * from "./Form"
8
- //export * from "./Grid"
9
- export * from "./InputGroup"
10
- export * from "./Modal"
11
- export * from "./Nav"
12
- export * from "./NavBar"
13
- export * from "./NavDropdown"
14
- //export * from "./OffCanvas"
15
- //export * from "./Overlay"
16
- export * from "./Popout"
17
- export * from "./Spinner"
18
- export * from "./Table"
19
- export * from "./Tabs"
20
- export * from "./ToggleButton"
21
- export * from "./utils/BaseTypes"