@musecat/uikit 0.1.1

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 (180) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +51 -0
  3. package/index.ts +78 -0
  4. package/package.json +103 -0
  5. package/packages/Components/Box/Box.tsx +173 -0
  6. package/packages/Components/Box/Box.types.ts +48 -0
  7. package/packages/Components/Button/Button.tsx +275 -0
  8. package/packages/Components/Button/Button.types.ts +44 -0
  9. package/packages/Components/Card/Card.default.tsx +180 -0
  10. package/packages/Components/Card/Card.foldable.tsx +383 -0
  11. package/packages/Components/Card/Card.module.scss +23 -0
  12. package/packages/Components/Card/Card.tsx +8 -0
  13. package/packages/Components/Card/Card.types.ts +91 -0
  14. package/packages/Components/Card/Card.utils.ts +66 -0
  15. package/packages/Components/Checkbox/Checkbox.module.scss +11 -0
  16. package/packages/Components/Checkbox/Checkbox.tsx +104 -0
  17. package/packages/Components/Checkbox/Checkbox.types.ts +24 -0
  18. package/packages/Components/CodeBox/CodeBox.copy.tsx +43 -0
  19. package/packages/Components/CodeBox/CodeBox.module.scss +72 -0
  20. package/packages/Components/CodeBox/CodeBox.tsx +91 -0
  21. package/packages/Components/CodeBox/CodeBox.types.ts +17 -0
  22. package/packages/Components/ContextMenu/ContextMenu.module.scss +8 -0
  23. package/packages/Components/ContextMenu/ContextMenu.options.tsx +126 -0
  24. package/packages/Components/ContextMenu/ContextMenu.tsx +381 -0
  25. package/packages/Components/ContextMenu/ContextMenu.types.ts +46 -0
  26. package/packages/Components/ContributionGraph/ContributionGraph.module.scss +42 -0
  27. package/packages/Components/ContributionGraph/ContributionGraph.tsx +454 -0
  28. package/packages/Components/ContributionGraph/ContributionGraph.types.ts +27 -0
  29. package/packages/Components/DatePicker/DatePicker.calendar.tsx +161 -0
  30. package/packages/Components/DatePicker/DatePicker.core.tsx +582 -0
  31. package/packages/Components/DatePicker/DatePicker.module.scss +26 -0
  32. package/packages/Components/DatePicker/DatePicker.tsx +786 -0
  33. package/packages/Components/DatePicker/DatePicker.types.ts +36 -0
  34. package/packages/Components/DatePicker/DatePicker.utils.ts +80 -0
  35. package/packages/Components/DatePicker/hooks/useCalendar.ts +61 -0
  36. package/packages/Components/DatePicker/hooks/useSelection.ts +208 -0
  37. package/packages/Components/Divider/Divider.tsx +46 -0
  38. package/packages/Components/Divider/Divider.types.ts +12 -0
  39. package/packages/Components/Header/Header.module.scss +74 -0
  40. package/packages/Components/Header/Header.tsx +47 -0
  41. package/packages/Components/Header/Header.types.ts +8 -0
  42. package/packages/Components/Icon/Icon.group.tsx +122 -0
  43. package/packages/Components/Icon/Icon.group.types.ts +20 -0
  44. package/packages/Components/Icon/Icon.tsx +341 -0
  45. package/packages/Components/Icon/Icon.types.ts +59 -0
  46. package/packages/Components/Icon/SVG/data.tsx +232 -0
  47. package/packages/Components/Input/Input.module.scss +5 -0
  48. package/packages/Components/Input/Input.tsx +87 -0
  49. package/packages/Components/Input/Input.types.ts +14 -0
  50. package/packages/Components/Label/Label.module.scss +19 -0
  51. package/packages/Components/Label/Label.tsx +115 -0
  52. package/packages/Components/Label/Label.types.ts +28 -0
  53. package/packages/Components/Layout/Layout.docs.module.scss +42 -0
  54. package/packages/Components/Layout/Layout.docs.tsx +150 -0
  55. package/packages/Components/Layout/Layout.docs.types.ts +18 -0
  56. package/packages/Components/Layout/Layout.module.scss +91 -0
  57. package/packages/Components/Layout/Layout.tsx +306 -0
  58. package/packages/Components/Layout/Layout.types.ts +71 -0
  59. package/packages/Components/Maps/OSM/MapOSM.module.scss +11 -0
  60. package/packages/Components/Maps/OSM/MapOSM.shared.ts +121 -0
  61. package/packages/Components/Maps/OSM/MapOSM.tsx +279 -0
  62. package/packages/Components/Maps/OSM/MapOSM.types.ts +18 -0
  63. package/packages/Components/Nav/Nav.module.scss +137 -0
  64. package/packages/Components/Nav/Nav.tsx +304 -0
  65. package/packages/Components/Nav/Nav.types.ts +32 -0
  66. package/packages/Components/Nav/hooks/useNavDrag.ts +374 -0
  67. package/packages/Components/Nav/hooks/useNavIndicator.ts +137 -0
  68. package/packages/Components/Pagination/Pagination.tsx +254 -0
  69. package/packages/Components/Pagination/Pagination.types.ts +18 -0
  70. package/packages/Components/Pill/Pill.tsx +127 -0
  71. package/packages/Components/Pill/Pill.types.ts +33 -0
  72. package/packages/Components/Profile/Profile.shared.ts +74 -0
  73. package/packages/Components/Profile/Profile.tsx +382 -0
  74. package/packages/Components/Profile/Profile.types.ts +55 -0
  75. package/packages/Components/Progress/Progress.module.scss +15 -0
  76. package/packages/Components/Progress/Progress.tsx +88 -0
  77. package/packages/Components/Progress/Progress.types.ts +22 -0
  78. package/packages/Components/Radio/Radio.module.scss +11 -0
  79. package/packages/Components/Radio/Radio.tsx +121 -0
  80. package/packages/Components/Radio/Radio.types.ts +20 -0
  81. package/packages/Components/Select/Select.keyboard.tsx +76 -0
  82. package/packages/Components/Select/Select.trigger.tsx +88 -0
  83. package/packages/Components/Select/Select.tsx +11 -0
  84. package/packages/Components/Select/Select.types.ts +38 -0
  85. package/packages/Components/Select/Select.utils.ts +84 -0
  86. package/packages/Components/Select/hooks/useSelectNavigation.ts +461 -0
  87. package/packages/Components/Select/hooks/useSelectSelection.ts +142 -0
  88. package/packages/Components/Select/hooks/useSelectState.ts +314 -0
  89. package/packages/Components/Select/select.control.tsx +228 -0
  90. package/packages/Components/Select/select.inner.tsx +312 -0
  91. package/packages/Components/Skeleton/Skeleton.tsx +30 -0
  92. package/packages/Components/Skeleton/Skeleton.types.ts +12 -0
  93. package/packages/Components/Spinner/Spinner.module.scss +78 -0
  94. package/packages/Components/Spinner/Spinner.tsx +125 -0
  95. package/packages/Components/Spinner/Spinner.types.ts +19 -0
  96. package/packages/Components/Text/Text.module.scss +7 -0
  97. package/packages/Components/Text/Text.tsx +49 -0
  98. package/packages/Components/Text/Text.types.ts +33 -0
  99. package/packages/Components/TimePicker/TimePicker.core.tsx +448 -0
  100. package/packages/Components/TimePicker/TimePicker.module.scss +30 -0
  101. package/packages/Components/TimePicker/TimePicker.tsx +511 -0
  102. package/packages/Components/TimePicker/TimePicker.types.ts +22 -0
  103. package/packages/Components/Timeline/Timeline.tsx +111 -0
  104. package/packages/Components/Timeline/Timeline.types.ts +23 -0
  105. package/packages/Components/Title/Title.tsx +305 -0
  106. package/packages/Components/Title/Title.types.ts +64 -0
  107. package/packages/Components/Toggle/Toggle.module.scss +32 -0
  108. package/packages/Components/Toggle/Toggle.tsx +272 -0
  109. package/packages/Components/Toggle/Toggle.types.ts +17 -0
  110. package/packages/Components/Tooltip/Tooltip.module.scss +44 -0
  111. package/packages/Components/Tooltip/Tooltip.tsx +340 -0
  112. package/packages/Components/Tooltip/Tooltip.types.ts +38 -0
  113. package/packages/Frameworks/Dialog/Dialog.background.tsx +88 -0
  114. package/packages/Frameworks/Dialog/Dialog.boot.tsx +32 -0
  115. package/packages/Frameworks/Dialog/Dialog.store.ts +199 -0
  116. package/packages/Frameworks/Dialog/Dialog.tsx +185 -0
  117. package/packages/Frameworks/Dialog/Dialog.types.ts +264 -0
  118. package/packages/Frameworks/Dialog/Dialog.utils.ts +22 -0
  119. package/packages/Frameworks/Dialog/contents/Dialog.footer.tsx +79 -0
  120. package/packages/Frameworks/Dialog/contents/Dialog.funnel.tsx +260 -0
  121. package/packages/Frameworks/Dialog/contents/Dialog.header.tsx +137 -0
  122. package/packages/Frameworks/Dialog/hooks/useDialogPosition.ts +298 -0
  123. package/packages/Frameworks/Dialog/hooks/useSheetDrag.ts +325 -0
  124. package/packages/Frameworks/Dialog/hooks/useSheetGeometry.ts +201 -0
  125. package/packages/Frameworks/Dialog/hooks/useSheetProgressive.ts +98 -0
  126. package/packages/Frameworks/Dialog/renderers/renderModal.tsx +228 -0
  127. package/packages/Frameworks/Dialog/renderers/renderPopover.tsx +220 -0
  128. package/packages/Frameworks/Dialog/renderers/renderSheet.tsx +571 -0
  129. package/packages/Frameworks/EdgeEffect/EdgeEffect.tsx +52 -0
  130. package/packages/Frameworks/EdgeEffect/EdgeEffect.types.ts +5 -0
  131. package/packages/Frameworks/Motion/Motion.presets.ts +49 -0
  132. package/packages/Frameworks/Pressable/Pressable.module.scss +19 -0
  133. package/packages/Frameworks/Pressable/Pressable.tsx +651 -0
  134. package/packages/Frameworks/Pressable/Pressable.types.ts +73 -0
  135. package/packages/Frameworks/Squircle/Squircle.tsx +263 -0
  136. package/packages/Frameworks/Squircle/Squircle.types.ts +15 -0
  137. package/packages/Frameworks/Theme/Radius.types.ts +55 -0
  138. package/packages/Frameworks/Theme/Theme.types.ts +325 -0
  139. package/packages/Frameworks/Toaster/Toaster.boot.tsx +47 -0
  140. package/packages/Frameworks/Toaster/Toaster.module.scss +168 -0
  141. package/packages/Frameworks/Toaster/Toaster.types.ts +13 -0
  142. package/packages/Frameworks/View/DNDView/DNDView.module.scss +8 -0
  143. package/packages/Frameworks/View/DNDView/DNDView.tsx +470 -0
  144. package/packages/Frameworks/View/DNDView/DNDView.types.ts +61 -0
  145. package/packages/Frameworks/View/HScrollView/HScrollView.module.scss +59 -0
  146. package/packages/Frameworks/View/HScrollView/HScrollView.tsx +386 -0
  147. package/packages/Frameworks/View/HScrollView/HScrollView.types.ts +46 -0
  148. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.counter.tsx +27 -0
  149. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.footer.tsx +76 -0
  150. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.header.tsx +49 -0
  151. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.list.tsx +74 -0
  152. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.slide.tsx +71 -0
  153. package/packages/Frameworks/View/ImageView/Dialog/ImageDialog.tsx +175 -0
  154. package/packages/Frameworks/View/ImageView/Image.controls.tsx +39 -0
  155. package/packages/Frameworks/View/ImageView/Image.hooks.ts +82 -0
  156. package/packages/Frameworks/View/ImageView/Image.module.scss +7 -0
  157. package/packages/Frameworks/View/ImageView/Image.tsx +375 -0
  158. package/packages/Frameworks/View/ImageView/Image.types.ts +71 -0
  159. package/packages/Frameworks/View/ImageView/Image.utils.ts +79 -0
  160. package/packages/Frameworks/View/View.module.scss +34 -0
  161. package/packages/Frameworks/View/View.tsx +200 -0
  162. package/packages/Frameworks/View/View.types.ts +36 -0
  163. package/packages/Frameworks/_shared/Padding.types.ts +52 -0
  164. package/packages/Frameworks/_shared/StopParentInteraction.tsx +45 -0
  165. package/packages/Frameworks/_shared/Wind.types.ts +17 -0
  166. package/packages/Frameworks/_shared/bodyScrollLock.ts +127 -0
  167. package/packages/Frameworks/_shared/layer.constants.ts +8 -0
  168. package/packages/Frameworks/_shared/normalize.ts +39 -0
  169. package/packages/Frameworks/_shared/sizing.ts +55 -0
  170. package/packages/Frameworks/_shared/useControllableState.ts +29 -0
  171. package/packages/Styles/_animation.scss +42 -0
  172. package/packages/Styles/_color.scss +131 -0
  173. package/packages/Styles/_font.scss +30 -0
  174. package/packages/Styles/_icon.scss +782 -0
  175. package/packages/Styles/_importer.scss +9 -0
  176. package/packages/Styles/_system.scss +69 -0
  177. package/packages/Styles/_textstyle.scss +111 -0
  178. package/packages/Styles/_theme.scss +452 -0
  179. package/packages/Styles/_viewport-global.scss +99 -0
  180. package/packages/Styles/_viewport.scss +108 -0
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Musecat Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # @musecat/uikit
2
+
3
+ A Next.js 16 + React 19 + TypeScript UI Design component library.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @musecat/uikit
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ Built with `View` and `Pressable` layout primitives.
14
+
15
+ ```tsx
16
+ import { View, Pressable, ImageView } from "@musecat/uikit";
17
+
18
+ export default function Example() {
19
+ return (
20
+ <View column gap={16} padding={24} radius="Regular" background="BaseLight2">
21
+ <ImageView src="/avatar.png" radius="Circle" width={48} height={48} />
22
+
23
+ <Pressable
24
+ radius="Bold"
25
+ background={["BaseFull", "BaseFull", "Base1TP2"]}
26
+ padding={12}
27
+ align="center"
28
+ justify="center"
29
+ >
30
+ <View typography="Button1" color="ReversedBaseFull">
31
+ Action
32
+ </View>
33
+ </Pressable>
34
+ </View>
35
+ );
36
+ }
37
+ ```
38
+
39
+ ## Acknowledgements
40
+
41
+ - [Motion (Framer Motion)](https://motion.dev/)
42
+ - [dnd-kit](https://dndkit.com/)
43
+ - [Embla Carousel](https://www.embla-carousel.com/)
44
+ - [figma-squircle](https://github.com/phamfoo/figma-squircle)
45
+ - [Sonner](https://sonner.emilkowal.ski/)
46
+ - [es-hangul](https://es-hangul.toss.im/)
47
+ - [MapLibre GL JS](https://maplibre.org/)
48
+
49
+ ## License
50
+
51
+ [MIT License](./LICENSE) © Musecat Team.
package/index.ts ADDED
@@ -0,0 +1,78 @@
1
+ // Frameworks
2
+ export { default as View } from "@/packages/Frameworks/View/View";
3
+ export { default as Pressable } from "@/packages/Frameworks/Pressable/Pressable";
4
+ export { default as ImageView } from "@/packages/Frameworks/View/ImageView/Image";
5
+ export { default as HScrollView } from "@/packages/Frameworks/View/HScrollView/HScrollView";
6
+ export { default as DNDView } from "@/packages/Frameworks/View/DNDView/DNDView";
7
+ export { default as Dialog, useDialog } from "@/packages/Frameworks/Dialog/Dialog";
8
+ export { dialog, DialogStore } from "@/packages/Frameworks/Dialog/Dialog.store";
9
+ export type { DialogInstance } from "@/packages/Frameworks/Dialog/Dialog.store";
10
+ export { default as DialogBootstrap } from "@/packages/Frameworks/Dialog/Dialog.boot";
11
+ export { default as ToasterBootstrap, toast } from "@/packages/Frameworks/Toaster/Toaster.boot";
12
+ export type { ToasterBootstrapProps } from "@/packages/Frameworks/Toaster/Toaster.types";
13
+ export { default as Squircle } from "@/packages/Frameworks/Squircle/Squircle";
14
+ export { default as EdgeEffect } from "@/packages/Frameworks/EdgeEffect/EdgeEffect";
15
+ export { motionTransitions, motionPresets } from "@/packages/Frameworks/Motion/Motion.presets";
16
+ export { default as StopParentInteraction } from "@/packages/Frameworks/_shared/StopParentInteraction";
17
+ export { useScrollLock } from "@/packages/Frameworks/_shared/bodyScrollLock";
18
+ export { useControllableState } from "@/packages/Frameworks/_shared/useControllableState";
19
+ export { Size, SizePX } from "@/packages/Frameworks/_shared/sizing";
20
+ export { normalizeUIKitImageSrc, normalizeBrandIconClass, normalizeLang } from "@/packages/Frameworks/_shared/normalize";
21
+ export { LAYER_Z_INDEX } from "@/packages/Frameworks/_shared/layer.constants";
22
+ export { default as DialogHeader } from "@/packages/Frameworks/Dialog/contents/Dialog.header";
23
+ export { default as DialogFooter } from "@/packages/Frameworks/Dialog/contents/Dialog.footer";
24
+
25
+ // Theme
26
+ export {
27
+ Shadow,
28
+ Border,
29
+ BackgroundBlur,
30
+ resolveThemeClasses,
31
+ resolveThemeHasBorder,
32
+ type ThemePreset,
33
+ type ThemePaint,
34
+ type ThemeBackgroundPaint,
35
+ type ThemeBorderPaint,
36
+ type ThemeBorderWidth,
37
+ type ThemeShadow,
38
+ type ShadowScale,
39
+ type ThemeSystemProps,
40
+ type BorderProps,
41
+ type BackgroundBlurValue,
42
+ } from "@/packages/Frameworks/Theme/Theme.types";
43
+ export { Radius } from "@/packages/Frameworks/Theme/Radius.types";
44
+ export type { RadiusProps, RadiusValue, RadiusScale } from "@/packages/Frameworks/Theme/Radius.types";
45
+
46
+ // Components
47
+ export { default as Box } from "@/packages/Components/Box/Box";
48
+ export { default as Button } from "@/packages/Components/Button/Button";
49
+ export { default as Card } from "@/packages/Components/Card/Card";
50
+ export { default as CardDefault } from "@/packages/Components/Card/Card.default";
51
+ export { default as CardFoldable } from "@/packages/Components/Card/Card.foldable";
52
+ export { default as Checkbox } from "@/packages/Components/Checkbox/Checkbox";
53
+ export { default as CodeBox } from "@/packages/Components/CodeBox/CodeBox";
54
+ export { default as ContextMenu } from "@/packages/Components/ContextMenu/ContextMenu";
55
+ export { default as ContributionGraph } from "@/packages/Components/ContributionGraph/ContributionGraph";
56
+ export { default as DatePicker } from "@/packages/Components/DatePicker/DatePicker";
57
+ export { default as Divider } from "@/packages/Components/Divider/Divider";
58
+ export { default as Header } from "@/packages/Components/Header/Header";
59
+ export { default as Icon } from "@/packages/Components/Icon/Icon";
60
+ export { default as Input } from "@/packages/Components/Input/Input";
61
+ export { default as Label } from "@/packages/Components/Label/Label";
62
+ export { default as Layout, LayoutGrid, LayoutSection } from "@/packages/Components/Layout/Layout";
63
+ export { default as MapOSM } from "@/packages/Components/Maps/OSM/MapOSM";
64
+ export { default as Nav } from "@/packages/Components/Nav/Nav";
65
+ export { default as Pagination } from "@/packages/Components/Pagination/Pagination";
66
+ export { default as Pill } from "@/packages/Components/Pill/Pill";
67
+ export { default as Profile } from "@/packages/Components/Profile/Profile";
68
+ export { default as Progress } from "@/packages/Components/Progress/Progress";
69
+ export { default as Radio } from "@/packages/Components/Radio/Radio";
70
+ export { default as Select } from "@/packages/Components/Select/Select";
71
+ export { default as Skeleton } from "@/packages/Components/Skeleton/Skeleton";
72
+ export { default as Spinner } from "@/packages/Components/Spinner/Spinner";
73
+ export { default as Text } from "@/packages/Components/Text/Text";
74
+ export { default as TimePicker } from "@/packages/Components/TimePicker/TimePicker";
75
+ export { default as Timeline } from "@/packages/Components/Timeline/Timeline";
76
+ export { default as Title } from "@/packages/Components/Title/Title";
77
+ export { default as Toggle } from "@/packages/Components/Toggle/Toggle";
78
+ export { default as Tooltip } from "@/packages/Components/Tooltip/Tooltip";
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@musecat/uikit",
3
+ "version": "0.1.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "High-performance Next.js React UI component library with Squircle shapes, theme tokens, and gesture-driven overlays",
7
+ "author": "Musecat Team",
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/TheTechclip/UIKit.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/TheTechclip/UIKit/issues"
15
+ },
16
+ "homepage": "https://musecat.app",
17
+ "keywords": [
18
+ "react",
19
+ "nextjs",
20
+ "uikit",
21
+ "components",
22
+ "squircle",
23
+ "framer-motion",
24
+ "dialog",
25
+ "bottom-sheet",
26
+ "date-picker"
27
+ ],
28
+ "main": "./index.ts",
29
+ "types": "./index.ts",
30
+ "exports": {
31
+ ".": "./index.ts",
32
+ "./*": "./*"
33
+ },
34
+ "files": [
35
+ "index.ts",
36
+ "packages/",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "sideEffects": [
41
+ "**/*.scss"
42
+ ],
43
+ "overrides": {
44
+ "@swc/helpers": "0.5.23"
45
+ },
46
+ "engines": {
47
+ "node": ">=20.0.0"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "scripts": {
53
+ "lint": "biome check",
54
+ "format": "prettier --write . && biome format --write",
55
+ "lint:css": "stylelint \"packages/**/*.scss\"",
56
+ "typecheck": "tsc --noEmit",
57
+ "test": "vitest run",
58
+ "test:coverage": "vitest run --coverage"
59
+ },
60
+ "dependencies": {
61
+ "@dnd-kit/core": "^6.3.1",
62
+ "@dnd-kit/sortable": "^10.0.0",
63
+ "@dnd-kit/utilities": "^3.2.2",
64
+ "@musecat/functionkit": "^1.0.1",
65
+ "@use-funnel/browser": "^0.0.17",
66
+ "clsx": "^2.1.1",
67
+ "embla-carousel": "^8.6.0",
68
+ "embla-carousel-react": "^8.6.0",
69
+ "embla-carousel-wheel-gestures": "^8.1.0",
70
+ "figma-squircle": "1.1.0",
71
+ "maplibre-gl": "^5.24.0",
72
+ "motion": "^12.42.2",
73
+ "next": "16.2.10",
74
+ "next-intl": "^4.13.1",
75
+ "prismjs": "^1.30.0",
76
+ "react": "19.2.7",
77
+ "react-dom": "19.2.7",
78
+ "sharp": "^0.35.3",
79
+ "sonner": "^2.0.7"
80
+ },
81
+ "devDependencies": {
82
+ "@biomejs/biome": "2.5.2",
83
+ "@testing-library/jest-dom": "^6.9.1",
84
+ "@testing-library/react": "^16.3.2",
85
+ "@testing-library/user-event": "^14.6.1",
86
+ "@types/node": "^26",
87
+ "@types/prismjs": "^1.26.6",
88
+ "@types/react": "^19",
89
+ "@types/react-dom": "^19",
90
+ "babel-plugin-react-compiler": "1.0.0",
91
+ "jsdom": "^29.1.1",
92
+ "prettier": "^3.9.5",
93
+ "sass": "^1.101.0",
94
+ "stylelint": "^17.14.0",
95
+ "stylelint-config-standard-scss": "^17.0.0",
96
+ "stylelint-declaration-strict-value": "^1.11.1",
97
+ "stylelint-scss": "^7.2.0",
98
+ "ts-morph": "^28.0.0",
99
+ "typescript": "^6",
100
+ "vitest": "^4.1.10",
101
+ "@vitest/coverage-v8": "^4.1.10"
102
+ }
103
+ }
@@ -0,0 +1,173 @@
1
+ import { createContext, useContext } from "react";
2
+ import type {
3
+ BoxContentProps,
4
+ BoxFooterProps,
5
+ BoxProps,
6
+ } from "@/packages/Components/Box/Box.types";
7
+ import Divider from "@/packages/Components/Divider/Divider";
8
+ import Icon from "@/packages/Components/Icon/Icon";
9
+ import Spinner from "@/packages/Components/Spinner/Spinner";
10
+ import Text from "@/packages/Components/Text/Text";
11
+ import Pressable from "@/packages/Frameworks/Pressable/Pressable";
12
+ import View from "@/packages/Frameworks/View/View";
13
+
14
+ const BoxContentContext = createContext(false);
15
+
16
+ export function useInBoxContent() {
17
+ return useContext(BoxContentContext);
18
+ }
19
+
20
+ export default function Box({
21
+ themePreset,
22
+ background,
23
+ color,
24
+ themeInteractive,
25
+ selected,
26
+ border,
27
+ children,
28
+ radius,
29
+ shadow,
30
+ style,
31
+ className,
32
+ "data-color-mode": dataTheme,
33
+ }: BoxProps) {
34
+ return (
35
+ <View
36
+ column
37
+ gap={0}
38
+ className={className}
39
+ padding={4}
40
+ height="min-content"
41
+ data-color-mode={dataTheme}
42
+ border={border}
43
+ radius={radius ?? "Regular"}
44
+ shadow={shadow}
45
+ themePreset={themePreset ?? "UIPrimary"}
46
+ background={background}
47
+ color={color}
48
+ themeInteractive={themeInteractive}
49
+ selected={selected}
50
+ style={{ overflow: "hidden", ...style }}
51
+ >
52
+ {children}
53
+ </View>
54
+ );
55
+ }
56
+
57
+ export function BoxContent({
58
+ title,
59
+ titleSize,
60
+ children,
61
+ contentClassName,
62
+ contentStyle,
63
+ "data-color-mode": dataTheme,
64
+ icon,
65
+ loading,
66
+ card,
67
+ padding,
68
+ paddingHorizontal,
69
+ paddingVertical,
70
+ }: BoxContentProps) {
71
+ return (
72
+ <>
73
+ {(title || icon || loading) && (
74
+ <View
75
+ alignItems="center"
76
+ data-color-mode={dataTheme}
77
+ gap={6}
78
+ justifyContent="space-between"
79
+ padding={[8, 12, 4, 12]}
80
+ fullWidth
81
+ >
82
+ <View alignItems="center" gap={6} data-color-mode={dataTheme}>
83
+ {icon && <Icon size={12} {...icon} />}
84
+ {title && <Text type={titleSize || "Footnote"}>{title}</Text>}
85
+ </View>
86
+ {loading && <Spinner size={12} opacity={0.6} />}
87
+ </View>
88
+ )}
89
+ {children && (
90
+ <BoxContentContext.Provider value>
91
+ <View
92
+ column
93
+ gap={card ? 2 : undefined}
94
+ className={contentClassName}
95
+ data-color-mode={dataTheme}
96
+ padding={
97
+ padding !== undefined ? padding : card ? 0 : [6, 12, 12, 12]
98
+ }
99
+ paddingHorizontal={paddingHorizontal}
100
+ paddingVertical={paddingVertical}
101
+ style={contentStyle}
102
+ >
103
+ {children}
104
+ </View>
105
+ </BoxContentContext.Provider>
106
+ )}
107
+ </>
108
+ );
109
+ }
110
+
111
+ export function BoxFooter({
112
+ title,
113
+ titleSize,
114
+ children,
115
+ className,
116
+ style,
117
+ "data-color-mode": dataTheme,
118
+ icon,
119
+ pressable,
120
+ divider,
121
+ radius,
122
+ themePreset,
123
+ background,
124
+ color,
125
+ border,
126
+ shadow,
127
+ themeInteractive,
128
+ selected,
129
+ disabled,
130
+ readOnly,
131
+ backgroundBlur,
132
+ }: BoxFooterProps) {
133
+ return (
134
+ <View column gap={0}>
135
+ <Divider gradient {...divider} marginVertical={2} />
136
+ <Pressable
137
+ data-color-mode={dataTheme}
138
+ className={className}
139
+ style={{ textAlign: "center", ...style }}
140
+ alignItems="center"
141
+ justifyContent="center"
142
+ gap={6}
143
+ padding={[10, 12]}
144
+ fullWidth
145
+ radius={radius ?? "Light"}
146
+ {...pressable}
147
+ themePreset={pressable?.themePreset ?? themePreset}
148
+ background={pressable?.background ?? background}
149
+ color={pressable?.color ?? color}
150
+ border={pressable?.border ?? border}
151
+ shadow={pressable?.shadow ?? shadow}
152
+ themeInteractive={
153
+ pressable?.themeInteractive ?? themeInteractive ?? true
154
+ }
155
+ selected={pressable?.selected ?? selected}
156
+ disabled={pressable?.disabled ?? disabled}
157
+ readOnly={pressable?.readOnly ?? readOnly}
158
+ backgroundBlur={pressable?.backgroundBlur ?? backgroundBlur}
159
+ >
160
+ {title && (
161
+ <Text type={titleSize || "Footnote"} opacity={0.6}>
162
+ {title}
163
+ </Text>
164
+ )}
165
+ {children}
166
+ {icon && <Icon size={14} opacity={0.6} {...icon} />}
167
+ </Pressable>
168
+ </View>
169
+ );
170
+ }
171
+
172
+ Box.Content = BoxContent;
173
+ Box.Footer = BoxFooter;
@@ -0,0 +1,48 @@
1
+ import type { DividerProps } from "@/packages/Components/Divider/Divider.types";
2
+ import type { IconProps } from "@/packages/Components/Icon/Icon.types";
3
+ import type { TitleProps } from "@/packages/Components/Title/Title.types";
4
+ import type { UIKitSizeValue } from "@/packages/Frameworks/_shared/sizing";
5
+ import type { PressableProps } from "@/packages/Frameworks/Pressable/Pressable.types";
6
+ import type { RadiusProps } from "@/packages/Frameworks/Theme/Radius.types";
7
+ import type {
8
+ BorderProps,
9
+ ThemeSystemProps,
10
+ } from "@/packages/Frameworks/Theme/Theme.types";
11
+
12
+ export interface BoxProps extends ThemeSystemProps, RadiusProps, BorderProps {
13
+ "data-color-mode"?: string;
14
+ children?: React.ReactNode;
15
+ className?: string;
16
+ style?: React.CSSProperties;
17
+ }
18
+
19
+ export interface BoxContentProps {
20
+ "data-color-mode"?: string;
21
+ children?: React.ReactNode;
22
+ title?: React.ReactNode;
23
+ titleSize?: TitleProps["titleType"];
24
+ contentClassName?: string;
25
+ contentStyle?: React.CSSProperties;
26
+ icon?: IconProps;
27
+ loading?: boolean;
28
+ titleCustom?: React.ReactNode;
29
+ card?: boolean;
30
+ padding?: UIKitSizeValue;
31
+ paddingHorizontal?: UIKitSizeValue;
32
+ paddingVertical?: UIKitSizeValue;
33
+ }
34
+
35
+ export interface BoxFooterProps
36
+ extends ThemeSystemProps,
37
+ BorderProps,
38
+ RadiusProps {
39
+ "data-color-mode"?: string;
40
+ children?: React.ReactNode;
41
+ className?: string;
42
+ style?: React.CSSProperties;
43
+ title?: React.ReactNode;
44
+ titleSize?: TitleProps["titleType"];
45
+ icon?: IconProps;
46
+ pressable?: PressableProps;
47
+ divider?: DividerProps;
48
+ }