@spatika/react 1.0.0

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 (406) hide show
  1. package/README.md +72 -0
  2. package/dist/composites/ActionBar.d.ts +7 -0
  3. package/dist/composites/ActionBar.d.ts.map +1 -0
  4. package/dist/composites/ActionBar.js +5 -0
  5. package/dist/composites/AmountInput.d.ts +10 -0
  6. package/dist/composites/AmountInput.d.ts.map +1 -0
  7. package/dist/composites/AmountInput.js +7 -0
  8. package/dist/composites/AppHeader.d.ts +25 -0
  9. package/dist/composites/AppHeader.d.ts.map +1 -0
  10. package/dist/composites/AppHeader.js +13 -0
  11. package/dist/composites/AppSidebar.d.ts +30 -0
  12. package/dist/composites/AppSidebar.d.ts.map +1 -0
  13. package/dist/composites/AppSidebar.js +15 -0
  14. package/dist/composites/BottomSheet.d.ts +36 -0
  15. package/dist/composites/BottomSheet.d.ts.map +1 -0
  16. package/dist/composites/BottomSheet.js +37 -0
  17. package/dist/composites/Breadcrumb.d.ts +10 -0
  18. package/dist/composites/Breadcrumb.d.ts.map +1 -0
  19. package/dist/composites/Breadcrumb.js +10 -0
  20. package/dist/composites/Callout.d.ts +8 -0
  21. package/dist/composites/Callout.d.ts.map +1 -0
  22. package/dist/composites/Callout.js +5 -0
  23. package/dist/composites/Card.d.ts +31 -0
  24. package/dist/composites/Card.d.ts.map +1 -0
  25. package/dist/composites/Card.js +33 -0
  26. package/dist/composites/Chip.d.ts +13 -0
  27. package/dist/composites/Chip.d.ts.map +1 -0
  28. package/dist/composites/Chip.js +59 -0
  29. package/dist/composites/ChipGroup.d.ts +23 -0
  30. package/dist/composites/ChipGroup.d.ts.map +1 -0
  31. package/dist/composites/ChipGroup.js +27 -0
  32. package/dist/composites/CommandSearchField.d.ts +27 -0
  33. package/dist/composites/CommandSearchField.d.ts.map +1 -0
  34. package/dist/composites/CommandSearchField.js +17 -0
  35. package/dist/composites/CoverHero.d.ts +51 -0
  36. package/dist/composites/CoverHero.d.ts.map +1 -0
  37. package/dist/composites/CoverHero.js +71 -0
  38. package/dist/composites/CoverPattern.d.ts +12 -0
  39. package/dist/composites/CoverPattern.d.ts.map +1 -0
  40. package/dist/composites/CoverPattern.js +14 -0
  41. package/dist/composites/DataTableToolbar.d.ts +13 -0
  42. package/dist/composites/DataTableToolbar.d.ts.map +1 -0
  43. package/dist/composites/DataTableToolbar.js +7 -0
  44. package/dist/composites/DividerLabel.d.ts +5 -0
  45. package/dist/composites/DividerLabel.d.ts.map +1 -0
  46. package/dist/composites/DividerLabel.js +5 -0
  47. package/dist/composites/EmptyState.d.ts +16 -0
  48. package/dist/composites/EmptyState.d.ts.map +1 -0
  49. package/dist/composites/EmptyState.js +10 -0
  50. package/dist/composites/EntityCard.d.ts +31 -0
  51. package/dist/composites/EntityCard.d.ts.map +1 -0
  52. package/dist/composites/EntityCard.js +21 -0
  53. package/dist/composites/EntityMediaCard.d.ts +25 -0
  54. package/dist/composites/EntityMediaCard.d.ts.map +1 -0
  55. package/dist/composites/EntityMediaCard.js +17 -0
  56. package/dist/composites/FilterSheet.d.ts +34 -0
  57. package/dist/composites/FilterSheet.d.ts.map +1 -0
  58. package/dist/composites/FilterSheet.js +36 -0
  59. package/dist/composites/FloatingPageChrome.d.ts +90 -0
  60. package/dist/composites/FloatingPageChrome.d.ts.map +1 -0
  61. package/dist/composites/FloatingPageChrome.js +67 -0
  62. package/dist/composites/FormField.d.ts +15 -0
  63. package/dist/composites/FormField.d.ts.map +1 -0
  64. package/dist/composites/FormField.js +9 -0
  65. package/dist/composites/GlassCard.d.ts +13 -0
  66. package/dist/composites/GlassCard.d.ts.map +1 -0
  67. package/dist/composites/GlassCard.js +32 -0
  68. package/dist/composites/HeaderIconButton.d.ts +13 -0
  69. package/dist/composites/HeaderIconButton.d.ts.map +1 -0
  70. package/dist/composites/HeaderIconButton.js +12 -0
  71. package/dist/composites/ListRow.d.ts +9 -0
  72. package/dist/composites/ListRow.d.ts.map +1 -0
  73. package/dist/composites/ListRow.js +6 -0
  74. package/dist/composites/MediaEntryCard.d.ts +25 -0
  75. package/dist/composites/MediaEntryCard.d.ts.map +1 -0
  76. package/dist/composites/MediaEntryCard.js +10 -0
  77. package/dist/composites/MobileTabBar.d.ts +33 -0
  78. package/dist/composites/MobileTabBar.d.ts.map +1 -0
  79. package/dist/composites/MobileTabBar.js +19 -0
  80. package/dist/composites/NotificationBell.d.ts +28 -0
  81. package/dist/composites/NotificationBell.d.ts.map +1 -0
  82. package/dist/composites/NotificationBell.js +25 -0
  83. package/dist/composites/PageHeader.d.ts +11 -0
  84. package/dist/composites/PageHeader.d.ts.map +1 -0
  85. package/dist/composites/PageHeader.js +6 -0
  86. package/dist/composites/PageShell.d.ts +12 -0
  87. package/dist/composites/PageShell.d.ts.map +1 -0
  88. package/dist/composites/PageShell.js +8 -0
  89. package/dist/composites/PageStickyHeader.d.ts +33 -0
  90. package/dist/composites/PageStickyHeader.d.ts.map +1 -0
  91. package/dist/composites/PageStickyHeader.js +19 -0
  92. package/dist/composites/Pagination.d.ts +7 -0
  93. package/dist/composites/Pagination.d.ts.map +1 -0
  94. package/dist/composites/Pagination.js +6 -0
  95. package/dist/composites/PhotoViewer.d.ts +18 -0
  96. package/dist/composites/PhotoViewer.d.ts.map +1 -0
  97. package/dist/composites/PhotoViewer.js +37 -0
  98. package/dist/composites/PinPad.d.ts +29 -0
  99. package/dist/composites/PinPad.d.ts.map +1 -0
  100. package/dist/composites/PinPad.js +58 -0
  101. package/dist/composites/ProfileHero.d.ts +34 -0
  102. package/dist/composites/ProfileHero.d.ts.map +1 -0
  103. package/dist/composites/ProfileHero.js +21 -0
  104. package/dist/composites/QuickFilterRail.d.ts +25 -0
  105. package/dist/composites/QuickFilterRail.d.ts.map +1 -0
  106. package/dist/composites/QuickFilterRail.js +18 -0
  107. package/dist/composites/QuickSettings.d.ts +27 -0
  108. package/dist/composites/QuickSettings.d.ts.map +1 -0
  109. package/dist/composites/QuickSettings.js +18 -0
  110. package/dist/composites/RichTextEditor.d.ts +13 -0
  111. package/dist/composites/RichTextEditor.d.ts.map +1 -0
  112. package/dist/composites/RichTextEditor.js +23 -0
  113. package/dist/composites/SearchField.d.ts +8 -0
  114. package/dist/composites/SearchField.d.ts.map +1 -0
  115. package/dist/composites/SearchField.js +8 -0
  116. package/dist/composites/SectionPanel.d.ts +16 -0
  117. package/dist/composites/SectionPanel.d.ts.map +1 -0
  118. package/dist/composites/SectionPanel.js +8 -0
  119. package/dist/composites/SegmentedControl.d.ts +17 -0
  120. package/dist/composites/SegmentedControl.d.ts.map +1 -0
  121. package/dist/composites/SegmentedControl.js +11 -0
  122. package/dist/composites/StatCard.d.ts +11 -0
  123. package/dist/composites/StatCard.d.ts.map +1 -0
  124. package/dist/composites/StatCard.js +6 -0
  125. package/dist/composites/StatusDot.d.ts +11 -0
  126. package/dist/composites/StatusDot.d.ts.map +1 -0
  127. package/dist/composites/StatusDot.js +23 -0
  128. package/dist/composites/SurfaceCard.d.ts +12 -0
  129. package/dist/composites/SurfaceCard.d.ts.map +1 -0
  130. package/dist/composites/SurfaceCard.js +24 -0
  131. package/dist/composites/Timeline.d.ts +19 -0
  132. package/dist/composites/Timeline.d.ts.map +1 -0
  133. package/dist/composites/Timeline.js +12 -0
  134. package/dist/composites/Toast.d.ts +26 -0
  135. package/dist/composites/Toast.d.ts.map +1 -0
  136. package/dist/composites/Toast.js +49 -0
  137. package/dist/composites/Toolbar.d.ts +6 -0
  138. package/dist/composites/Toolbar.d.ts.map +1 -0
  139. package/dist/composites/Toolbar.js +5 -0
  140. package/dist/composites/ViewFiltersPanel.d.ts +21 -0
  141. package/dist/composites/ViewFiltersPanel.d.ts.map +1 -0
  142. package/dist/composites/ViewFiltersPanel.js +11 -0
  143. package/dist/index.d.ts +96 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +95 -0
  146. package/dist/lib/animations.d.ts +62 -0
  147. package/dist/lib/animations.d.ts.map +1 -0
  148. package/dist/lib/animations.js +37 -0
  149. package/dist/lib/avatar-utils.d.ts +10 -0
  150. package/dist/lib/avatar-utils.d.ts.map +1 -0
  151. package/dist/lib/avatar-utils.js +49 -0
  152. package/dist/lib/chips.d.ts +10 -0
  153. package/dist/lib/chips.d.ts.map +1 -0
  154. package/dist/lib/chips.js +30 -0
  155. package/dist/lib/cn.d.ts +4 -0
  156. package/dist/lib/cn.d.ts.map +1 -0
  157. package/dist/lib/cn.js +6 -0
  158. package/dist/lib/compose-refs.d.ts +6 -0
  159. package/dist/lib/compose-refs.d.ts.map +1 -0
  160. package/dist/lib/compose-refs.js +17 -0
  161. package/dist/lib/cover-chrome.d.ts +9 -0
  162. package/dist/lib/cover-chrome.d.ts.map +1 -0
  163. package/dist/lib/cover-chrome.js +23 -0
  164. package/dist/lib/cover-pattern.d.ts +75 -0
  165. package/dist/lib/cover-pattern.d.ts.map +1 -0
  166. package/dist/lib/cover-pattern.js +135 -0
  167. package/dist/lib/overlay-stack.d.ts +23 -0
  168. package/dist/lib/overlay-stack.d.ts.map +1 -0
  169. package/dist/lib/overlay-stack.js +37 -0
  170. package/dist/lib/portal.d.ts +12 -0
  171. package/dist/lib/portal.d.ts.map +1 -0
  172. package/dist/lib/portal.js +12 -0
  173. package/dist/lib/slot.d.ts +12 -0
  174. package/dist/lib/slot.d.ts.map +1 -0
  175. package/dist/lib/slot.js +55 -0
  176. package/dist/lib/surfaces.d.ts +14 -0
  177. package/dist/lib/surfaces.d.ts.map +1 -0
  178. package/dist/lib/surfaces.js +18 -0
  179. package/dist/lib/themes.d.ts +16 -0
  180. package/dist/lib/themes.d.ts.map +1 -0
  181. package/dist/lib/themes.js +53 -0
  182. package/dist/lib/typography.d.ts +17 -0
  183. package/dist/lib/typography.d.ts.map +1 -0
  184. package/dist/lib/typography.js +16 -0
  185. package/dist/lib/use-controllable-state.d.ts +12 -0
  186. package/dist/lib/use-controllable-state.d.ts.map +1 -0
  187. package/dist/lib/use-controllable-state.js +20 -0
  188. package/dist/lib/use-cover-chrome-bleed.d.ts +9 -0
  189. package/dist/lib/use-cover-chrome-bleed.d.ts.map +1 -0
  190. package/dist/lib/use-cover-chrome-bleed.js +28 -0
  191. package/dist/lib/use-dismissable.d.ts +13 -0
  192. package/dist/lib/use-dismissable.d.ts.map +1 -0
  193. package/dist/lib/use-dismissable.js +33 -0
  194. package/dist/lib/use-floating-position.d.ts +27 -0
  195. package/dist/lib/use-floating-position.d.ts.map +1 -0
  196. package/dist/lib/use-floating-position.js +115 -0
  197. package/dist/lib/use-focus-trap.d.ts +7 -0
  198. package/dist/lib/use-focus-trap.d.ts.map +1 -0
  199. package/dist/lib/use-focus-trap.js +61 -0
  200. package/dist/lib/use-media-query.d.ts +5 -0
  201. package/dist/lib/use-media-query.d.ts.map +1 -0
  202. package/dist/lib/use-media-query.js +19 -0
  203. package/dist/primitives/Accordion.d.ts +24 -0
  204. package/dist/primitives/Accordion.d.ts.map +1 -0
  205. package/dist/primitives/Accordion.js +37 -0
  206. package/dist/primitives/Alert.d.ts +10 -0
  207. package/dist/primitives/Alert.d.ts.map +1 -0
  208. package/dist/primitives/Alert.js +25 -0
  209. package/dist/primitives/AlertDialog.d.ts +33 -0
  210. package/dist/primitives/AlertDialog.d.ts.map +1 -0
  211. package/dist/primitives/AlertDialog.js +96 -0
  212. package/dist/primitives/Avatar.d.ts +15 -0
  213. package/dist/primitives/Avatar.d.ts.map +1 -0
  214. package/dist/primitives/Avatar.js +52 -0
  215. package/dist/primitives/Badge.d.ts +12 -0
  216. package/dist/primitives/Badge.d.ts.map +1 -0
  217. package/dist/primitives/Badge.js +27 -0
  218. package/dist/primitives/Button.d.ts +14 -0
  219. package/dist/primitives/Button.d.ts.map +1 -0
  220. package/dist/primitives/Button.js +37 -0
  221. package/dist/primitives/Checkbox.d.ts +9 -0
  222. package/dist/primitives/Checkbox.d.ts.map +1 -0
  223. package/dist/primitives/Checkbox.js +22 -0
  224. package/dist/primitives/Command.d.ts +17 -0
  225. package/dist/primitives/Command.d.ts.map +1 -0
  226. package/dist/primitives/Command.js +33 -0
  227. package/dist/primitives/Dialog.d.ts +34 -0
  228. package/dist/primitives/Dialog.d.ts.map +1 -0
  229. package/dist/primitives/Dialog.js +96 -0
  230. package/dist/primitives/DropdownMenu.d.ts +65 -0
  231. package/dist/primitives/DropdownMenu.d.ts.map +1 -0
  232. package/dist/primitives/DropdownMenu.js +196 -0
  233. package/dist/primitives/Input.d.ts +4 -0
  234. package/dist/primitives/Input.d.ts.map +1 -0
  235. package/dist/primitives/Input.js +6 -0
  236. package/dist/primitives/Kbd.d.ts +4 -0
  237. package/dist/primitives/Kbd.d.ts.map +1 -0
  238. package/dist/primitives/Kbd.js +6 -0
  239. package/dist/primitives/Label.d.ts +4 -0
  240. package/dist/primitives/Label.d.ts.map +1 -0
  241. package/dist/primitives/Label.js +6 -0
  242. package/dist/primitives/NativeSelect.d.ts +7 -0
  243. package/dist/primitives/NativeSelect.d.ts.map +1 -0
  244. package/dist/primitives/NativeSelect.js +10 -0
  245. package/dist/primitives/Popover.d.ts +29 -0
  246. package/dist/primitives/Popover.d.ts.map +1 -0
  247. package/dist/primitives/Popover.js +95 -0
  248. package/dist/primitives/Progress.d.ts +8 -0
  249. package/dist/primitives/Progress.d.ts.map +1 -0
  250. package/dist/primitives/Progress.js +7 -0
  251. package/dist/primitives/RadioGroup.d.ts +13 -0
  252. package/dist/primitives/RadioGroup.d.ts.map +1 -0
  253. package/dist/primitives/RadioGroup.js +33 -0
  254. package/dist/primitives/Select.d.ts +33 -0
  255. package/dist/primitives/Select.d.ts.map +1 -0
  256. package/dist/primitives/Select.js +178 -0
  257. package/dist/primitives/Separator.d.ts +7 -0
  258. package/dist/primitives/Separator.d.ts.map +1 -0
  259. package/dist/primitives/Separator.js +6 -0
  260. package/dist/primitives/Sheet.d.ts +28 -0
  261. package/dist/primitives/Sheet.d.ts.map +1 -0
  262. package/dist/primitives/Sheet.js +96 -0
  263. package/dist/primitives/Skeleton.d.ts +4 -0
  264. package/dist/primitives/Skeleton.d.ts.map +1 -0
  265. package/dist/primitives/Skeleton.js +6 -0
  266. package/dist/primitives/Slider.d.ts +12 -0
  267. package/dist/primitives/Slider.d.ts.map +1 -0
  268. package/dist/primitives/Slider.js +23 -0
  269. package/dist/primitives/Spinner.d.ts +6 -0
  270. package/dist/primitives/Spinner.d.ts.map +1 -0
  271. package/dist/primitives/Spinner.js +7 -0
  272. package/dist/primitives/StarRating.d.ts +10 -0
  273. package/dist/primitives/StarRating.d.ts.map +1 -0
  274. package/dist/primitives/StarRating.js +11 -0
  275. package/dist/primitives/Switch.d.ts +8 -0
  276. package/dist/primitives/Switch.d.ts.map +1 -0
  277. package/dist/primitives/Switch.js +20 -0
  278. package/dist/primitives/Table.d.ts +13 -0
  279. package/dist/primitives/Table.d.ts.map +1 -0
  280. package/dist/primitives/Table.js +20 -0
  281. package/dist/primitives/Tabs.d.ts +17 -0
  282. package/dist/primitives/Tabs.d.ts.map +1 -0
  283. package/dist/primitives/Tabs.js +30 -0
  284. package/dist/primitives/Textarea.d.ts +4 -0
  285. package/dist/primitives/Textarea.d.ts.map +1 -0
  286. package/dist/primitives/Textarea.js +6 -0
  287. package/dist/primitives/Tooltip.d.ts +31 -0
  288. package/dist/primitives/Tooltip.d.ts.map +1 -0
  289. package/dist/primitives/Tooltip.js +94 -0
  290. package/dist/theme/OriginThemeProvider.d.ts +31 -0
  291. package/dist/theme/OriginThemeProvider.d.ts.map +1 -0
  292. package/dist/theme/OriginThemeProvider.js +37 -0
  293. package/dist/theme/SpatikaThemeProvider.d.ts +36 -0
  294. package/dist/theme/SpatikaThemeProvider.d.ts.map +1 -0
  295. package/dist/theme/SpatikaThemeProvider.js +38 -0
  296. package/package.json +58 -0
  297. package/src/composites/ActionBar.tsx +25 -0
  298. package/src/composites/AmountInput.tsx +40 -0
  299. package/src/composites/AppHeader.tsx +88 -0
  300. package/src/composites/AppSidebar.tsx +120 -0
  301. package/src/composites/BottomSheet.tsx +179 -0
  302. package/src/composites/Breadcrumb.tsx +42 -0
  303. package/src/composites/Callout.tsx +22 -0
  304. package/src/composites/Card.tsx +119 -0
  305. package/src/composites/Chip.tsx +87 -0
  306. package/src/composites/ChipGroup.component.test.tsx +31 -0
  307. package/src/composites/ChipGroup.test.ts +16 -0
  308. package/src/composites/ChipGroup.tsx +86 -0
  309. package/src/composites/CommandSearchField.tsx +124 -0
  310. package/src/composites/CoverHero.tsx +359 -0
  311. package/src/composites/CoverPattern.tsx +90 -0
  312. package/src/composites/DataTableToolbar.tsx +48 -0
  313. package/src/composites/DividerLabel.tsx +22 -0
  314. package/src/composites/EmptyState.tsx +55 -0
  315. package/src/composites/EntityCard.tsx +100 -0
  316. package/src/composites/EntityMediaCard.tsx +118 -0
  317. package/src/composites/FilterSheet.tsx +178 -0
  318. package/src/composites/FloatingPageChrome.tsx +294 -0
  319. package/src/composites/FormField.tsx +44 -0
  320. package/src/composites/GlassCard.tsx +47 -0
  321. package/src/composites/HeaderIconButton.tsx +49 -0
  322. package/src/composites/ListRow.tsx +29 -0
  323. package/src/composites/MediaEntryCard.tsx +95 -0
  324. package/src/composites/MobileTabBar.tsx +130 -0
  325. package/src/composites/NotificationBell.tsx +164 -0
  326. package/src/composites/PageHeader.tsx +27 -0
  327. package/src/composites/PageShell.tsx +20 -0
  328. package/src/composites/PageStickyHeader.tsx +157 -0
  329. package/src/composites/Pagination.tsx +41 -0
  330. package/src/composites/PhotoViewer.tsx +142 -0
  331. package/src/composites/PinPad.tsx +163 -0
  332. package/src/composites/ProfileHero.tsx +163 -0
  333. package/src/composites/QuickFilterRail.tsx +92 -0
  334. package/src/composites/QuickSettings.tsx +120 -0
  335. package/src/composites/RichTextEditor.tsx +103 -0
  336. package/src/composites/SearchField.tsx +38 -0
  337. package/src/composites/SectionPanel.tsx +59 -0
  338. package/src/composites/SegmentedControl.tsx +62 -0
  339. package/src/composites/StatCard.tsx +26 -0
  340. package/src/composites/StatusDot.tsx +40 -0
  341. package/src/composites/SurfaceCard.tsx +44 -0
  342. package/src/composites/Timeline.tsx +70 -0
  343. package/src/composites/Toast.tsx +135 -0
  344. package/src/composites/Toolbar.tsx +19 -0
  345. package/src/composites/ViewFiltersPanel.tsx +82 -0
  346. package/src/composites/chrome.test.tsx +170 -0
  347. package/src/composites/smoke.test.tsx +49 -0
  348. package/src/index.ts +355 -0
  349. package/src/lib/animations.ts +47 -0
  350. package/src/lib/avatar-utils.ts +52 -0
  351. package/src/lib/chips.ts +58 -0
  352. package/src/lib/cn.test.ts +16 -0
  353. package/src/lib/cn.ts +7 -0
  354. package/src/lib/compose-refs.ts +21 -0
  355. package/src/lib/cover-chrome.ts +31 -0
  356. package/src/lib/cover-pattern.ts +242 -0
  357. package/src/lib/overlay-stack.ts +44 -0
  358. package/src/lib/portal.tsx +21 -0
  359. package/src/lib/slot.tsx +69 -0
  360. package/src/lib/surfaces.ts +57 -0
  361. package/src/lib/themes.test.ts +73 -0
  362. package/src/lib/themes.ts +59 -0
  363. package/src/lib/tokens.test.ts +52 -0
  364. package/src/lib/typography.ts +27 -0
  365. package/src/lib/use-controllable-state.ts +38 -0
  366. package/src/lib/use-cover-chrome-bleed.ts +33 -0
  367. package/src/lib/use-dismissable.ts +49 -0
  368. package/src/lib/use-floating-position.ts +168 -0
  369. package/src/lib/use-focus-trap.ts +73 -0
  370. package/src/lib/use-media-query.ts +22 -0
  371. package/src/primitives/Accordion.tsx +114 -0
  372. package/src/primitives/Alert.tsx +57 -0
  373. package/src/primitives/AlertDialog.tsx +270 -0
  374. package/src/primitives/Avatar.tsx +140 -0
  375. package/src/primitives/Badge.test.tsx +15 -0
  376. package/src/primitives/Badge.tsx +43 -0
  377. package/src/primitives/Button.test.tsx +37 -0
  378. package/src/primitives/Button.tsx +58 -0
  379. package/src/primitives/Checkbox.tsx +75 -0
  380. package/src/primitives/Command.tsx +175 -0
  381. package/src/primitives/Dialog.tsx +241 -0
  382. package/src/primitives/DropdownMenu.tsx +552 -0
  383. package/src/primitives/Input.test.tsx +22 -0
  384. package/src/primitives/Input.tsx +22 -0
  385. package/src/primitives/Kbd.tsx +17 -0
  386. package/src/primitives/Label.tsx +20 -0
  387. package/src/primitives/NativeSelect.tsx +22 -0
  388. package/src/primitives/Popover.tsx +209 -0
  389. package/src/primitives/Progress.tsx +31 -0
  390. package/src/primitives/RadioGroup.tsx +116 -0
  391. package/src/primitives/Select.tsx +409 -0
  392. package/src/primitives/Separator.tsx +30 -0
  393. package/src/primitives/Sheet.tsx +265 -0
  394. package/src/primitives/Skeleton.tsx +16 -0
  395. package/src/primitives/Slider.tsx +97 -0
  396. package/src/primitives/Spinner.tsx +21 -0
  397. package/src/primitives/StarRating.tsx +53 -0
  398. package/src/primitives/Switch.tsx +68 -0
  399. package/src/primitives/Table.tsx +134 -0
  400. package/src/primitives/Tabs.tsx +97 -0
  401. package/src/primitives/Textarea.tsx +20 -0
  402. package/src/primitives/Tooltip.tsx +193 -0
  403. package/src/primitives/smoke.test.tsx +34 -0
  404. package/src/test/setup.ts +1 -0
  405. package/src/theme/SpatikaThemeProvider.test.tsx +82 -0
  406. package/src/theme/SpatikaThemeProvider.tsx +112 -0
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useMemo, useState, } from "react";
3
+ import { X } from "lucide-react";
4
+ import { cn } from "../lib/cn";
5
+ const ToastContext = createContext(null);
6
+ let toastSeq = 0;
7
+ export function useToast() {
8
+ const ctx = useContext(ToastContext);
9
+ if (!ctx)
10
+ throw new Error("useToast must be used within <Toaster />");
11
+ return ctx;
12
+ }
13
+ const toneClass = {
14
+ default: "border-border/60",
15
+ success: "border-emerald-500/35 bg-emerald-500/8",
16
+ warn: "border-amber-500/35 bg-amber-500/8",
17
+ danger: "border-destructive/35 bg-destructive/8",
18
+ };
19
+ /** App-level toast host + provider. Wrap the app once and call useToast(). */
20
+ export function Toaster({ children, className, position = "bottom-right", }) {
21
+ const [toasts, setToasts] = useState([]);
22
+ const dismiss = useCallback((id) => {
23
+ setToasts((prev) => prev.filter((t) => t.id !== id));
24
+ }, []);
25
+ const toast = useCallback((item) => {
26
+ const id = item.id ?? `toast-${++toastSeq}`;
27
+ const next = {
28
+ id,
29
+ title: item.title,
30
+ description: item.description,
31
+ tone: item.tone ?? "default",
32
+ durationMs: item.durationMs ?? 4200,
33
+ };
34
+ setToasts((prev) => [...prev, next]);
35
+ if (next.durationMs && next.durationMs > 0) {
36
+ window.setTimeout(() => dismiss(id), next.durationMs);
37
+ }
38
+ return id;
39
+ }, [dismiss]);
40
+ const value = useMemo(() => ({ toasts, toast, dismiss }), [toasts, toast, dismiss]);
41
+ const positionClass = position === "top-right"
42
+ ? "top-4 right-4"
43
+ : position === "top-center"
44
+ ? "top-4 left-1/2 -translate-x-1/2"
45
+ : position === "bottom-center"
46
+ ? "bottom-4 left-1/2 -translate-x-1/2"
47
+ : "bottom-4 right-4";
48
+ return (_jsxs(ToastContext.Provider, { value: value, children: [children, _jsx("div", { "data-slot": "toaster", className: cn("pointer-events-none fixed z-[200] flex w-[min(calc(100vw-1.5rem),22rem)] flex-col gap-2", positionClass, className), children: toasts.map((t) => (_jsx("div", { "data-slot": "toast", className: cn("pointer-events-auto rounded-2xl border bg-background p-3.5 shadow-[0_22px_50px_-24px_rgba(15,23,42,0.55)] dark:bg-card", toneClass[t.tone ?? "default"]), role: "status", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "text-sm font-bold text-foreground", children: t.title }), t.description ? (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: t.description })) : null] }), _jsx("button", { type: "button", "aria-label": "Dismiss", className: "rounded-lg p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground", onClick: () => dismiss(t.id), children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }) }, t.id))) })] }));
49
+ }
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function Toolbar({ children, className, }: {
3
+ children: ReactNode;
4
+ className?: string;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=Toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/composites/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BASA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/cn";
3
+ export function Toolbar({ children, className, }) {
4
+ return (_jsx("div", { "data-slot": "toolbar", className: cn("app-toolbar flex flex-wrap items-center gap-2 px-3 py-2", className), children: children }));
5
+ }
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from "react";
2
+ export type ViewFiltersPanelProps = {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ title?: string;
6
+ description?: string;
7
+ hasActive?: boolean;
8
+ onClear?: () => void;
9
+ trigger?: ReactNode;
10
+ children: ReactNode;
11
+ topSection?: ReactNode;
12
+ className?: string;
13
+ doneLabel?: string;
14
+ clearLabel?: string;
15
+ };
16
+ /**
17
+ * View & filters panel — glass bottom sheet with clear / done chrome.
18
+ * Pass arbitrary filter fields as children for full customization.
19
+ */
20
+ export declare function ViewFiltersPanel({ open, onOpenChange, title, description, hasActive, onClear, trigger, children, topSection, className, doneLabel, clearLabel, }: ViewFiltersPanelProps): import("react").JSX.Element;
21
+ //# sourceMappingURL=ViewFiltersPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewFiltersPanel.d.ts","sourceRoot":"","sources":["../../src/composites/ViewFiltersPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,YAAY,EACZ,KAAwB,EACxB,WAAW,EACX,SAAS,EACT,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,SAAS,EACT,SAAkB,EAClB,UAAoB,GACrB,EAAE,qBAAqB,+BA2CvB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { X } from "lucide-react";
3
+ import { Button } from "../primitives/Button";
4
+ import { BottomSheet } from "./BottomSheet";
5
+ /**
6
+ * View & filters panel — glass bottom sheet with clear / done chrome.
7
+ * Pass arbitrary filter fields as children for full customization.
8
+ */
9
+ export function ViewFiltersPanel({ open, onOpenChange, title = "View & filters", description, hasActive, onClear, trigger, children, topSection, className, doneLabel = "Done", clearLabel = "Clear", }) {
10
+ return (_jsxs(_Fragment, { children: [trigger, _jsxs(BottomSheet, { open: open, onOpenChange: onOpenChange, className: className, children: [_jsxs("div", { className: "flex items-start justify-between gap-3 border-b border-border/40 px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-base font-black tracking-tight", children: title }), description ? (_jsx("p", { className: "mt-0.5 text-xs font-medium text-muted-foreground", children: description })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [hasActive && onClear ? (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onClear, children: clearLabel })) : null, _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": "Close", onClick: () => onOpenChange(false), children: _jsx(X, { className: "size-4" }) })] })] }), topSection, _jsx("div", { className: "max-h-[60vh] space-y-5 overflow-y-auto px-4 py-4", children: children }), _jsx("div", { className: "border-t border-border/40 p-4 pb-[calc(1rem+env(safe-area-inset-bottom))]", children: _jsx(Button, { type: "button", className: "h-9 w-full rounded-xl text-xs font-black uppercase tracking-widest", onClick: () => onOpenChange(false), children: doneLabel }) })] })] }));
11
+ }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @spatika/react — Spatika React package
3
+ *
4
+ * Import tokens separately:
5
+ * import "@spatika/tokens/styles.css";
6
+ */
7
+ export { cn } from "./lib/cn";
8
+ export { OVERLAY_Z_INDEX, fixedLayerStyle, createSelectEvent, } from "./lib/overlay-stack";
9
+ export { typographyEyebrow, typographyBandEyebrow, typographySectionLabel, typographyPageTitle, typographyPageSubtitle, typographyBodyDense, } from "./lib/typography";
10
+ export { surfaceRadiusCard, surfaceRadiusControl, surfaceRadiusPill, surfaceRadiusProfile, surfacePrimaryClass, surfaceSecondaryClass, surfaceDetailClass, surfaceTertiaryClass, } from "./lib/surfaces";
11
+ export { filterChipClass, preferenceChipClass, layoutToggleClass, listRowToggleClass, nativeSelectClass, } from "./lib/chips";
12
+ export { duration, transition, motionCardHover, motionCardHoverEmphasis, motionPress, pageEnter, cardEnter, } from "./lib/animations";
13
+ export { THEME_IDS, THEME_LABELS, DEFAULT_THEME, SPATIKA_THEME_STORAGE_KEY, applyTheme, isDarkTheme, isThemeId, type ThemeId, } from "./lib/themes";
14
+ export { getAvatarColor, getAvatarFallbackHue, getInitials } from "./lib/avatar-utils";
15
+ export { COVER_PATTERN_KINDS, getCoverPattern, getCoverPatternKind, getCoverPatternStyle, isCoverPatternKind, type CoverHeaderInk, type CoverPatternInput, type CoverPatternKind, type CoverScene, } from "./lib/cover-pattern";
16
+ export { coverFloatingIconClass, coverFloatingShellClass, coverMutedClass, coverPlateClass, coverTitleClass, } from "./lib/cover-chrome";
17
+ export { useCoverChromeBleed, type CoverChromeInk } from "./lib/use-cover-chrome-bleed";
18
+ export { useIsMobile, useMediaQuery } from "./lib/use-media-query";
19
+ export { SpatikaThemeProvider, useSpatikaTheme, type SpatikaThemeContextValue, type SpatikaThemeProviderProps, } from "./theme/SpatikaThemeProvider";
20
+ export { Button, buttonVariants } from "./primitives/Button";
21
+ export { Badge, badgeVariants } from "./primitives/Badge";
22
+ export { Input } from "./primitives/Input";
23
+ export { Textarea } from "./primitives/Textarea";
24
+ export { Label } from "./primitives/Label";
25
+ export { Separator } from "./primitives/Separator";
26
+ export { Skeleton } from "./primitives/Skeleton";
27
+ export { Checkbox } from "./primitives/Checkbox";
28
+ export { Switch } from "./primitives/Switch";
29
+ export { RadioGroup, RadioGroupItem } from "./primitives/RadioGroup";
30
+ export { Progress } from "./primitives/Progress";
31
+ export { Slider } from "./primitives/Slider";
32
+ export { Avatar, AvatarImage, AvatarFallback, InitialsAvatar } from "./primitives/Avatar";
33
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, } from "./primitives/Select";
34
+ export { NativeSelect } from "./primitives/NativeSelect";
35
+ export { Spinner } from "./primitives/Spinner";
36
+ export { Alert, AlertTitle, AlertDescription, alertVariants } from "./primitives/Alert";
37
+ export { Kbd } from "./primitives/Kbd";
38
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from "./primitives/Tabs";
39
+ export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption } from "./primitives/Table";
40
+ export { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, } from "./primitives/Dialog";
41
+ export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, } from "./primitives/AlertDialog";
42
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, } from "./primitives/Sheet";
43
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from "./primitives/Popover";
44
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from "./primitives/DropdownMenu";
45
+ export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, } from "./primitives/Command";
46
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "./primitives/Tooltip";
47
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "./primitives/Accordion";
48
+ export { StarRating } from "./primitives/StarRating";
49
+ export { GlassCard, glassCardVariants, type GlassCardProps } from "./composites/GlassCard";
50
+ export { SurfaceCard, surfaceCardVariants, type SurfaceCardProps } from "./composites/SurfaceCard";
51
+ export { PageStickyHeader, PageHeaderBadge, type PageStickyHeaderProps } from "./composites/PageStickyHeader";
52
+ export { PageShell, type PageShellProps } from "./composites/PageShell";
53
+ export { SectionPanel, type SectionPanelProps } from "./composites/SectionPanel";
54
+ export { Chip, chipVariants, type ChipProps } from "./composites/Chip";
55
+ export { ChipGroup, isOptionSelected, toggleOptionValue, type ChipGroupProps, type ChipOption, } from "./composites/ChipGroup";
56
+ export { EmptyState, type EmptyStateProps } from "./composites/EmptyState";
57
+ export { FormField, type FormFieldProps } from "./composites/FormField";
58
+ export { PageHeader, type PageHeaderProps } from "./composites/PageHeader";
59
+ export { StatCard, type StatCardProps } from "./composites/StatCard";
60
+ export { SearchField, type SearchFieldProps } from "./composites/SearchField";
61
+ export { Toolbar } from "./composites/Toolbar";
62
+ export { StatusDot, statusDotVariants } from "./composites/StatusDot";
63
+ export { ListRow } from "./composites/ListRow";
64
+ export { Breadcrumb, type BreadcrumbItem } from "./composites/Breadcrumb";
65
+ export { Pagination } from "./composites/Pagination";
66
+ export { Callout } from "./composites/Callout";
67
+ export { ActionBar } from "./composites/ActionBar";
68
+ export { DividerLabel } from "./composites/DividerLabel";
69
+ export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, type CardProps, } from "./composites/Card";
70
+ export { AppHeader, type AppHeaderProps } from "./composites/AppHeader";
71
+ export { ChromeAttachedCaret, FloatingPageChromeBar, FloatingPageChromeIdentity, FloatingPageChromeSearchField, FloatingPageChromeShell, FLOATING_PAGE_CHROME_HEIGHT_CLASS, FLOATING_PAGE_CHROME_POPOVER_OFFSET, appChromeActionClusterClass, appChromeClusterButtonClass, floatingPageChromeAttachedPopoverClass, floatingPageChromeClusterClass, floatingPageChromeIconPillClass, floatingPageChromeIdentityClass, floatingPageChromePillClass, floatingPageChromePrimaryClass, floatingPageChromeSearchInputClass, floatingPageChromeSearchWrapClass, floatingPageChromeShellClass, floatingPageChromeTrayClass, type FloatingPageChromeBarProps, type FloatingPageChromeIdentityProps, type FloatingPageChromeSearchFieldProps, } from "./composites/FloatingPageChrome";
72
+ export { CoverPattern, ProfileCoverPattern, type CoverPatternProps } from "./composites/CoverPattern";
73
+ export { CoverHero, type CoverHeroAvatar, type CoverHeroFact, type CoverHeroProps, } from "./composites/CoverHero";
74
+ export { AppSidebar, type AppSidebarProps, type SidebarNavItem, type SidebarNavSection, } from "./composites/AppSidebar";
75
+ export { QuickSettings, QuickSettingsGroup, QuickSettingsRow, type QuickSettingsProps, } from "./composites/QuickSettings";
76
+ export { PhotoViewer, type PhotoViewerProps, type PhotoViewerItem, } from "./composites/PhotoViewer";
77
+ export { RichTextEditor, type RichTextEditorProps } from "./composites/RichTextEditor";
78
+ export { HeaderIconButton, type HeaderIconButtonProps } from "./composites/HeaderIconButton";
79
+ export { QuickFilterRail, type QuickFilterRailProps, type QuickFilterGroup, type QuickFilterItem, } from "./composites/QuickFilterRail";
80
+ export { BottomSheet, Drawer, DrawerTrigger, DrawerClose, DrawerPortal, DrawerOverlay, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, type BottomSheetProps, } from "./composites/BottomSheet";
81
+ export { ViewFiltersPanel, type ViewFiltersPanelProps } from "./composites/ViewFiltersPanel";
82
+ export { FilterSheet, type FilterSheetProps } from "./composites/FilterSheet";
83
+ export { NotificationBell, type NotificationBellProps, type NotificationItem, } from "./composites/NotificationBell";
84
+ export { CommandSearchField, type CommandSearchFieldProps, type CommandSearchResult, } from "./composites/CommandSearchField";
85
+ export { PinPad, LockOverlay, type PinPadProps, type LockOverlayProps, } from "./composites/PinPad";
86
+ export { MediaEntryCard, type MediaEntryCardProps } from "./composites/MediaEntryCard";
87
+ export { EntityMediaCard, type EntityMediaCardProps } from "./composites/EntityMediaCard";
88
+ export { EntityCard, EntityCardTitle, EntityCardMeta, EntityCardChip, type EntityCardProps, type EntityCardTitleProps, type EntityCardMetaProps, } from "./composites/EntityCard";
89
+ export { MobileTabBar, APP_TABBAR_CLEARANCE_CLASS, type MobileTabBarProps, type MobileTabItem, } from "./composites/MobileTabBar";
90
+ export { ProfileHero, type ProfileHeroProps } from "./composites/ProfileHero";
91
+ export { AmountInput, type AmountInputProps } from "./composites/AmountInput";
92
+ export { SegmentedControl, type SegmentedControlProps, type SegmentedControlOption, } from "./composites/SegmentedControl";
93
+ export { Toaster, useToast, type ToasterProps, type ToastItem, type ToastTone, } from "./composites/Toast";
94
+ export { Timeline, TimelineItem, type TimelineProps, type TimelineItemProps, } from "./composites/Timeline";
95
+ export { DataTableToolbar, type DataTableToolbarProps, } from "./composites/DataTableToolbar";
96
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @spatika/react — Spatika React package
3
+ *
4
+ * Import tokens separately:
5
+ * import "@spatika/tokens/styles.css";
6
+ */
7
+ export { cn } from "./lib/cn";
8
+ export { OVERLAY_Z_INDEX, fixedLayerStyle, createSelectEvent, } from "./lib/overlay-stack";
9
+ export { typographyEyebrow, typographyBandEyebrow, typographySectionLabel, typographyPageTitle, typographyPageSubtitle, typographyBodyDense, } from "./lib/typography";
10
+ export { surfaceRadiusCard, surfaceRadiusControl, surfaceRadiusPill, surfaceRadiusProfile, surfacePrimaryClass, surfaceSecondaryClass, surfaceDetailClass, surfaceTertiaryClass, } from "./lib/surfaces";
11
+ export { filterChipClass, preferenceChipClass, layoutToggleClass, listRowToggleClass, nativeSelectClass, } from "./lib/chips";
12
+ export { duration, transition, motionCardHover, motionCardHoverEmphasis, motionPress, pageEnter, cardEnter, } from "./lib/animations";
13
+ export { THEME_IDS, THEME_LABELS, DEFAULT_THEME, SPATIKA_THEME_STORAGE_KEY, applyTheme, isDarkTheme, isThemeId, } from "./lib/themes";
14
+ export { getAvatarColor, getAvatarFallbackHue, getInitials } from "./lib/avatar-utils";
15
+ export { COVER_PATTERN_KINDS, getCoverPattern, getCoverPatternKind, getCoverPatternStyle, isCoverPatternKind, } from "./lib/cover-pattern";
16
+ export { coverFloatingIconClass, coverFloatingShellClass, coverMutedClass, coverPlateClass, coverTitleClass, } from "./lib/cover-chrome";
17
+ export { useCoverChromeBleed } from "./lib/use-cover-chrome-bleed";
18
+ export { useIsMobile, useMediaQuery } from "./lib/use-media-query";
19
+ export { SpatikaThemeProvider, useSpatikaTheme, } from "./theme/SpatikaThemeProvider";
20
+ export { Button, buttonVariants } from "./primitives/Button";
21
+ export { Badge, badgeVariants } from "./primitives/Badge";
22
+ export { Input } from "./primitives/Input";
23
+ export { Textarea } from "./primitives/Textarea";
24
+ export { Label } from "./primitives/Label";
25
+ export { Separator } from "./primitives/Separator";
26
+ export { Skeleton } from "./primitives/Skeleton";
27
+ export { Checkbox } from "./primitives/Checkbox";
28
+ export { Switch } from "./primitives/Switch";
29
+ export { RadioGroup, RadioGroupItem } from "./primitives/RadioGroup";
30
+ export { Progress } from "./primitives/Progress";
31
+ export { Slider } from "./primitives/Slider";
32
+ export { Avatar, AvatarImage, AvatarFallback, InitialsAvatar } from "./primitives/Avatar";
33
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, } from "./primitives/Select";
34
+ export { NativeSelect } from "./primitives/NativeSelect";
35
+ export { Spinner } from "./primitives/Spinner";
36
+ export { Alert, AlertTitle, AlertDescription, alertVariants } from "./primitives/Alert";
37
+ export { Kbd } from "./primitives/Kbd";
38
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from "./primitives/Tabs";
39
+ export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption } from "./primitives/Table";
40
+ export { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, } from "./primitives/Dialog";
41
+ export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, } from "./primitives/AlertDialog";
42
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, } from "./primitives/Sheet";
43
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from "./primitives/Popover";
44
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from "./primitives/DropdownMenu";
45
+ export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, } from "./primitives/Command";
46
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "./primitives/Tooltip";
47
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from "./primitives/Accordion";
48
+ export { StarRating } from "./primitives/StarRating";
49
+ export { GlassCard, glassCardVariants } from "./composites/GlassCard";
50
+ export { SurfaceCard, surfaceCardVariants } from "./composites/SurfaceCard";
51
+ export { PageStickyHeader, PageHeaderBadge } from "./composites/PageStickyHeader";
52
+ export { PageShell } from "./composites/PageShell";
53
+ export { SectionPanel } from "./composites/SectionPanel";
54
+ export { Chip, chipVariants } from "./composites/Chip";
55
+ export { ChipGroup, isOptionSelected, toggleOptionValue, } from "./composites/ChipGroup";
56
+ export { EmptyState } from "./composites/EmptyState";
57
+ export { FormField } from "./composites/FormField";
58
+ export { PageHeader } from "./composites/PageHeader";
59
+ export { StatCard } from "./composites/StatCard";
60
+ export { SearchField } from "./composites/SearchField";
61
+ export { Toolbar } from "./composites/Toolbar";
62
+ export { StatusDot, statusDotVariants } from "./composites/StatusDot";
63
+ export { ListRow } from "./composites/ListRow";
64
+ export { Breadcrumb } from "./composites/Breadcrumb";
65
+ export { Pagination } from "./composites/Pagination";
66
+ export { Callout } from "./composites/Callout";
67
+ export { ActionBar } from "./composites/ActionBar";
68
+ export { DividerLabel } from "./composites/DividerLabel";
69
+ export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, } from "./composites/Card";
70
+ export { AppHeader } from "./composites/AppHeader";
71
+ export { ChromeAttachedCaret, FloatingPageChromeBar, FloatingPageChromeIdentity, FloatingPageChromeSearchField, FloatingPageChromeShell, FLOATING_PAGE_CHROME_HEIGHT_CLASS, FLOATING_PAGE_CHROME_POPOVER_OFFSET, appChromeActionClusterClass, appChromeClusterButtonClass, floatingPageChromeAttachedPopoverClass, floatingPageChromeClusterClass, floatingPageChromeIconPillClass, floatingPageChromeIdentityClass, floatingPageChromePillClass, floatingPageChromePrimaryClass, floatingPageChromeSearchInputClass, floatingPageChromeSearchWrapClass, floatingPageChromeShellClass, floatingPageChromeTrayClass, } from "./composites/FloatingPageChrome";
72
+ export { CoverPattern, ProfileCoverPattern } from "./composites/CoverPattern";
73
+ export { CoverHero, } from "./composites/CoverHero";
74
+ export { AppSidebar, } from "./composites/AppSidebar";
75
+ export { QuickSettings, QuickSettingsGroup, QuickSettingsRow, } from "./composites/QuickSettings";
76
+ export { PhotoViewer, } from "./composites/PhotoViewer";
77
+ export { RichTextEditor } from "./composites/RichTextEditor";
78
+ export { HeaderIconButton } from "./composites/HeaderIconButton";
79
+ export { QuickFilterRail, } from "./composites/QuickFilterRail";
80
+ export { BottomSheet, Drawer, DrawerTrigger, DrawerClose, DrawerPortal, DrawerOverlay, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, } from "./composites/BottomSheet";
81
+ export { ViewFiltersPanel } from "./composites/ViewFiltersPanel";
82
+ export { FilterSheet } from "./composites/FilterSheet";
83
+ export { NotificationBell, } from "./composites/NotificationBell";
84
+ export { CommandSearchField, } from "./composites/CommandSearchField";
85
+ export { PinPad, LockOverlay, } from "./composites/PinPad";
86
+ export { MediaEntryCard } from "./composites/MediaEntryCard";
87
+ export { EntityMediaCard } from "./composites/EntityMediaCard";
88
+ export { EntityCard, EntityCardTitle, EntityCardMeta, EntityCardChip, } from "./composites/EntityCard";
89
+ export { MobileTabBar, APP_TABBAR_CLEARANCE_CLASS, } from "./composites/MobileTabBar";
90
+ export { ProfileHero } from "./composites/ProfileHero";
91
+ export { AmountInput } from "./composites/AmountInput";
92
+ export { SegmentedControl, } from "./composites/SegmentedControl";
93
+ export { Toaster, useToast, } from "./composites/Toast";
94
+ export { Timeline, TimelineItem, } from "./composites/Timeline";
95
+ export { DataTableToolbar, } from "./composites/DataTableToolbar";
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Animation language for Spatika.
3
+ *
4
+ * Micro — hover/focus/active (CSS only, ≤150ms)
5
+ * Meso — element entrances (200–300ms)
6
+ * Macro — page transitions / overlays (300–400ms)
7
+ *
8
+ * Never use transition-all on glass / backdrop-blur surfaces.
9
+ */
10
+ export declare const duration: {
11
+ readonly instant: 0.15;
12
+ readonly fast: 0.2;
13
+ readonly normal: 0.3;
14
+ readonly slow: 0.4;
15
+ };
16
+ export declare const transition: {
17
+ readonly fast: {
18
+ readonly duration: 0.2;
19
+ readonly ease: [number, number, number, number];
20
+ };
21
+ readonly normal: {
22
+ readonly duration: 0.3;
23
+ readonly ease: [number, number, number, number];
24
+ };
25
+ readonly slow: {
26
+ readonly duration: 0.4;
27
+ readonly ease: [number, number, number, number];
28
+ };
29
+ };
30
+ /** Standard card hover — transform + shadow only. */
31
+ export declare const motionCardHover = "transition-[transform,box-shadow,border-color] duration-200 ease-out hover:-translate-y-0.5 hover:shadow-lg hover:border-primary/20";
32
+ /** Emphasized card hover for hero / ranked cards. */
33
+ export declare const motionCardHoverEmphasis = "transition-[transform,box-shadow,border-color] duration-200 ease-out hover:-translate-y-1 hover:shadow-xl hover:border-primary/30";
34
+ /** Interactive press feedback. */
35
+ export declare const motionPress = "active:scale-[0.98]";
36
+ export declare const pageEnter: {
37
+ initial: {
38
+ opacity: number;
39
+ };
40
+ animate: {
41
+ opacity: number;
42
+ };
43
+ transition: {
44
+ readonly duration: 0.3;
45
+ readonly ease: [number, number, number, number];
46
+ };
47
+ };
48
+ export declare const cardEnter: {
49
+ initial: {
50
+ opacity: number;
51
+ y: number;
52
+ };
53
+ animate: {
54
+ opacity: number;
55
+ y: number;
56
+ };
57
+ transition: {
58
+ readonly duration: 0.3;
59
+ readonly ease: [number, number, number, number];
60
+ };
61
+ };
62
+ //# sourceMappingURL=animations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../src/lib/animations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAIb,CAAC;AAEX,qDAAqD;AACrD,eAAO,MAAM,eAAe,wIAC2G,CAAC;AAExI,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,sIACiG,CAAC;AAEtI,kCAAkC;AAClC,eAAO,MAAM,WAAW,wBAAwB,CAAC;AAEjD,eAAO,MAAM,SAAS;;;;;;;;;;;CAIrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;CAIrB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Animation language for Spatika.
3
+ *
4
+ * Micro — hover/focus/active (CSS only, ≤150ms)
5
+ * Meso — element entrances (200–300ms)
6
+ * Macro — page transitions / overlays (300–400ms)
7
+ *
8
+ * Never use transition-all on glass / backdrop-blur surfaces.
9
+ */
10
+ const easeOut = [0, 0, 0.2, 1];
11
+ export const duration = {
12
+ instant: 0.15,
13
+ fast: 0.2,
14
+ normal: 0.3,
15
+ slow: 0.4,
16
+ };
17
+ export const transition = {
18
+ fast: { duration: duration.fast, ease: easeOut },
19
+ normal: { duration: duration.normal, ease: easeOut },
20
+ slow: { duration: duration.slow, ease: easeOut },
21
+ };
22
+ /** Standard card hover — transform + shadow only. */
23
+ export const motionCardHover = "transition-[transform,box-shadow,border-color] duration-200 ease-out hover:-translate-y-0.5 hover:shadow-lg hover:border-primary/20";
24
+ /** Emphasized card hover for hero / ranked cards. */
25
+ export const motionCardHoverEmphasis = "transition-[transform,box-shadow,border-color] duration-200 ease-out hover:-translate-y-1 hover:shadow-xl hover:border-primary/30";
26
+ /** Interactive press feedback. */
27
+ export const motionPress = "active:scale-[0.98]";
28
+ export const pageEnter = {
29
+ initial: { opacity: 0 },
30
+ animate: { opacity: 1 },
31
+ transition: transition.normal,
32
+ };
33
+ export const cardEnter = {
34
+ initial: { opacity: 0, y: 8 },
35
+ animate: { opacity: 1, y: 0 },
36
+ transition: transition.normal,
37
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Stable avatar color class derived from a name hash.
3
+ * Used by InitialsAvatar for consistent tinting across renders.
4
+ */
5
+ export declare function getAvatarColor(name: string): string;
6
+ /** Stable 0–359 hue from a display name — used to tint generated covers. */
7
+ export declare function getAvatarFallbackHue(name: string): number;
8
+ /** First two initials from a display name (uppercase). */
9
+ export declare function getInitials(name: string): string;
10
+ //# sourceMappingURL=avatar-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-utils.d.ts","sourceRoot":"","sources":["../../src/lib/avatar-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BnD;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Stable avatar color class derived from a name hash.
3
+ * Used by InitialsAvatar for consistent tinting across renders.
4
+ */
5
+ export function getAvatarColor(name) {
6
+ const colors = [
7
+ "bg-rose-500",
8
+ "bg-pink-500",
9
+ "bg-fuchsia-500",
10
+ "bg-purple-500",
11
+ "bg-violet-500",
12
+ "bg-indigo-500",
13
+ "bg-blue-500",
14
+ "bg-sky-500",
15
+ "bg-cyan-500",
16
+ "bg-teal-500",
17
+ "bg-emerald-500",
18
+ "bg-green-500",
19
+ "bg-orange-500",
20
+ "bg-amber-500",
21
+ ];
22
+ let hash = 0;
23
+ const safeName = name || "User";
24
+ for (let i = 0; i < safeName.length; i++) {
25
+ hash = safeName.charCodeAt(i) + ((hash << 5) - hash);
26
+ }
27
+ const index = Math.abs(hash) % colors.length;
28
+ return colors[index];
29
+ }
30
+ /** Stable 0–359 hue from a display name — used to tint generated covers. */
31
+ export function getAvatarFallbackHue(name) {
32
+ let hash = 0;
33
+ const safeName = name || "User";
34
+ for (let i = 0; i < safeName.length; i++) {
35
+ hash = safeName.charCodeAt(i) + ((hash << 5) - hash);
36
+ }
37
+ return Math.abs(hash) % 360;
38
+ }
39
+ /** First two initials from a display name (uppercase). */
40
+ export function getInitials(name) {
41
+ if (!name)
42
+ return "";
43
+ return name
44
+ .split(" ")
45
+ .map((n) => n[0])
46
+ .join("")
47
+ .substring(0, 2)
48
+ .toUpperCase();
49
+ }
@@ -0,0 +1,10 @@
1
+ /** Soft filter pill (directory / history filters). */
2
+ export declare function filterChipClass(active: boolean, className?: string): string;
3
+ /** Uppercase preference toggle chip (admin / settings). */
4
+ export declare function preferenceChipClass(active: boolean, className?: string): string;
5
+ /** Layout mode toggle (grid / list / kanban). */
6
+ export declare function layoutToggleClass(active: boolean, className?: string): string;
7
+ /** Full-width selectable list row. */
8
+ export declare function listRowToggleClass(active: boolean, className?: string): string;
9
+ export declare const nativeSelectClass: string;
10
+ //# sourceMappingURL=chips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chips.d.ts","sourceRoot":"","sources":["../../src/lib/chips.ts"],"names":[],"mappings":"AAQA,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,UAQlE;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,UAQtE;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,UAQpE;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,UAQrE;AAED,eAAO,MAAM,iBAAiB,QAK7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Chip / toggle class recipes shared by filters and preference groups.
3
+ */
4
+ import { cn } from "./cn";
5
+ const filterChipBase = "inline-flex min-h-7 max-w-full items-center justify-center rounded-full border px-2 py-0.5 text-left text-[10px] font-bold leading-snug shadow-sm transition-colors active:scale-[0.98] sm:min-h-8 sm:px-2.5 sm:py-1 sm:text-xs";
6
+ /** Soft filter pill (directory / history filters). */
7
+ export function filterChipClass(active, className) {
8
+ return cn(filterChipBase, active
9
+ ? "border-primary/50 bg-primary/15 text-primary"
10
+ : "border-border/60 bg-background/80 text-foreground hover:bg-muted/40", className);
11
+ }
12
+ /** Uppercase preference toggle chip (admin / settings). */
13
+ export function preferenceChipClass(active, className) {
14
+ return cn("touch-manipulation rounded-xl border px-3 py-2 text-[10px] font-black uppercase tracking-widest shadow-sm transition-all active:scale-95", active
15
+ ? "scale-[1.02] border-primary bg-primary text-primary-foreground shadow-primary/20"
16
+ : "border-border/50 bg-background/40 text-muted-foreground hover:border-primary/30 hover:text-primary", className);
17
+ }
18
+ /** Layout mode toggle (grid / list / kanban). */
19
+ export function layoutToggleClass(active, className) {
20
+ return cn("flex min-h-11 items-center justify-center gap-2 rounded-xl border px-3 text-sm font-bold shadow-sm transition-colors active:scale-[0.98]", active
21
+ ? "border-primary/50 bg-primary/15 text-primary"
22
+ : "border-border/60 bg-background/80 text-foreground hover:bg-muted/40", className);
23
+ }
24
+ /** Full-width selectable list row. */
25
+ export function listRowToggleClass(active, className) {
26
+ return cn("flex min-h-11 w-full items-center justify-between gap-3 rounded-xl border px-3 py-2.5 text-left text-sm font-semibold shadow-sm transition-colors active:scale-[0.99]", active
27
+ ? "border-primary/50 bg-primary/15 text-primary"
28
+ : "border-border/60 bg-background/80 text-foreground hover:bg-muted/40", className);
29
+ }
30
+ export const nativeSelectClass = cn("mt-1 w-full min-h-11 px-3 rounded-xl border border-border/60 bg-background/80 text-sm font-semibold shadow-sm", "text-foreground transition-colors", "focus:outline-none focus:border-primary/40 focus:ring-2 focus:ring-primary/20", "disabled:cursor-not-allowed disabled:opacity-50");
@@ -0,0 +1,4 @@
1
+ import { type ClassValue } from "clsx";
2
+ /** Merge Tailwind class names without conflicts. */
3
+ export declare function cn(...inputs: ClassValue[]): string;
4
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/lib/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,oDAAoD;AACpD,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
package/dist/lib/cn.js ADDED
@@ -0,0 +1,6 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ /** Merge Tailwind class names without conflicts. */
4
+ export function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ type PossibleRef<T> = React.Ref<T> | undefined;
3
+ /** Merges multiple refs into a single callback ref. */
4
+ export declare function composeRefs<T>(...refs: PossibleRef<T>[]): (node: T) => void;
5
+ export {};
6
+ //# sourceMappingURL=compose-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-refs.d.ts","sourceRoot":"","sources":["../../src/lib/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAW/C,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAC9C,MAAM,CAAC,UAKhB"}
@@ -0,0 +1,17 @@
1
+ /** Assigns a value to a React ref (callback or object ref). */
2
+ function setRef(ref, value) {
3
+ if (typeof ref === "function") {
4
+ ref(value);
5
+ }
6
+ else if (ref != null) {
7
+ ref.current = value;
8
+ }
9
+ }
10
+ /** Merges multiple refs into a single callback ref. */
11
+ export function composeRefs(...refs) {
12
+ return (node) => {
13
+ for (const ref of refs) {
14
+ setRef(ref, node);
15
+ }
16
+ };
17
+ }
@@ -0,0 +1,9 @@
1
+ import type { CoverHeaderInk } from "./cover-pattern";
2
+ /** Floating glass pill sitting on a generated / photo cover. */
3
+ export declare function coverFloatingShellClass(_ink: CoverHeaderInk, className?: string): string;
4
+ export declare function coverFloatingIconClass(ink: CoverHeaderInk): string;
5
+ export declare function coverPlateClass(ink: CoverHeaderInk): string;
6
+ export declare function coverTitleClass(ink: CoverHeaderInk): string;
7
+ export declare function coverMutedClass(ink: CoverHeaderInk): string;
8
+ export type { CoverHeaderInk };
9
+ //# sourceMappingURL=cover-chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cover-chrome.d.ts","sourceRoot":"","sources":["../../src/lib/cover-chrome.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAIlE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAI3D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAI3D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}