xertica-ui 1.9.5 → 2.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 (229) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +48 -3
  3. package/components/assistant/index.ts +5 -0
  4. package/components/brand/index.ts +6 -0
  5. package/components/hooks/index.ts +6 -0
  6. package/components/layout/index.ts +2 -0
  7. package/components/media/index.ts +3 -0
  8. package/components/ui/index.ts +4 -1
  9. package/dist/AudioPlayer-BZ7bibzU.cjs +982 -0
  10. package/dist/AudioPlayer-e8LfNoqO.js +983 -0
  11. package/dist/CodeBlock-CuPtUM-7.cjs +2094 -0
  12. package/dist/CodeBlock-D6ffWXgc.js +2078 -0
  13. package/dist/ImageWithFallback-CGtidP6B.cjs +4542 -0
  14. package/dist/ImageWithFallback-lsg3pdFg.js +4508 -0
  15. package/dist/LanguageSelector-B5YfbHra.js +231 -0
  16. package/dist/LanguageSelector-D6uacAIM.cjs +230 -0
  17. package/dist/LayoutContext-BAql6ZRY.js +97 -0
  18. package/dist/LayoutContext-BvK-ggDa.cjs +96 -0
  19. package/dist/XerticaOrbe-KL1RBHzw.cjs +1354 -0
  20. package/dist/XerticaOrbe-zwS1p2a8.js +1355 -0
  21. package/dist/XerticaProvider-6btlAlzc.js +17 -0
  22. package/dist/XerticaProvider-BNoNOxQ5.cjs +16 -0
  23. package/dist/assistant.cjs.js +8 -0
  24. package/dist/assistant.es.js +8 -0
  25. package/dist/brand.cjs.js +11 -0
  26. package/dist/brand.es.js +11 -0
  27. package/dist/breadcrumb-CqJ7bHY5.js +161 -0
  28. package/dist/breadcrumb-m9Hb2_XN.cjs +177 -0
  29. package/dist/components/assistant/index.d.ts +5 -0
  30. package/dist/components/brand/index.d.ts +6 -0
  31. package/dist/components/hooks/index.d.ts +6 -0
  32. package/dist/components/layout/index.d.ts +2 -0
  33. package/dist/components/media/index.d.ts +3 -0
  34. package/dist/components/ui/index.d.ts +1 -0
  35. package/dist/contexts/ApiKeyContext.d.ts +17 -0
  36. package/dist/contexts/BrandColorsContext.d.ts +20 -0
  37. package/dist/contexts/LanguageContext.d.ts +11 -0
  38. package/dist/contexts/ThemeContext.d.ts +19 -0
  39. package/dist/contexts/index.d.ts +7 -0
  40. package/dist/contexts/theme-data.d.ts +81 -0
  41. package/dist/dropdown-menu-BDB5CmQs.cjs +247 -0
  42. package/dist/dropdown-menu-DQidbKBD.js +231 -0
  43. package/dist/google-maps-loader-BFWp6VPd.js +287 -0
  44. package/dist/google-maps-loader-eS3uQ5TA.cjs +287 -0
  45. package/dist/header-Dux00SI4.cjs +731 -0
  46. package/dist/header-EkGKXPsD.js +715 -0
  47. package/dist/hooks/useTheme.d.ts +1 -0
  48. package/dist/hooks.cjs.js +688 -0
  49. package/dist/hooks.es.js +688 -0
  50. package/dist/index-BhapVLVj.js +8 -0
  51. package/dist/index-D6fxYEY8.cjs +7 -0
  52. package/dist/index.cjs.js +2338 -0
  53. package/dist/index.es.js +2148 -14087
  54. package/dist/input-2R4loU86.js +127 -0
  55. package/dist/input-DWANSKGb.cjs +145 -0
  56. package/dist/layout.cjs.js +5 -0
  57. package/dist/layout.es.js +5 -0
  58. package/dist/media.cjs.js +6 -0
  59. package/dist/media.es.js +6 -0
  60. package/dist/rich-text-editor-B9UbSXNb.js +1203 -0
  61. package/dist/rich-text-editor-D6H84OcX.cjs +1220 -0
  62. package/dist/select-Bkbr0f-Z.cjs +162 -0
  63. package/dist/select-CvIVdX2n.js +145 -0
  64. package/dist/slider-Bc5Hd0y1.js +56 -0
  65. package/dist/slider-N7hFFj6X.cjs +73 -0
  66. package/dist/sonner-DeUIj0Zg.cjs +63 -0
  67. package/dist/sonner-g9RIfi35.js +47 -0
  68. package/dist/tooltip-Ded96neP.cjs +137 -0
  69. package/dist/tooltip-HDOoD2-0.js +120 -0
  70. package/dist/ui.cjs.js +269 -0
  71. package/dist/ui.es.js +269 -0
  72. package/docs/ai-usage.md +1 -1
  73. package/docs/architecture.md +21 -1
  74. package/docs/components/accordion.md +1 -1
  75. package/docs/components/alert-dialog.md +1 -1
  76. package/docs/components/alert.md +1 -1
  77. package/docs/components/aspect-ratio.md +1 -1
  78. package/docs/components/assistant-chart.md +1 -1
  79. package/docs/components/assistant.md +2 -2
  80. package/docs/components/audio-player.md +1 -1
  81. package/docs/components/avatar.md +1 -1
  82. package/docs/components/badge.md +1 -1
  83. package/docs/components/breadcrumb.md +1 -1
  84. package/docs/components/button.md +1 -1
  85. package/docs/components/calendar.md +1 -1
  86. package/docs/components/card.md +2 -2
  87. package/docs/components/carousel.md +1 -1
  88. package/docs/components/chart.md +2 -2
  89. package/docs/components/checkbox.md +1 -1
  90. package/docs/components/collapsible.md +1 -1
  91. package/docs/components/command.md +1 -1
  92. package/docs/components/context-menu.md +1 -1
  93. package/docs/components/dialog.md +2 -2
  94. package/docs/components/drawer.md +1 -1
  95. package/docs/components/dropdown-menu.md +1 -1
  96. package/docs/components/empty.md +1 -1
  97. package/docs/components/file-upload.md +1 -1
  98. package/docs/components/floating-media-wrapper.md +1 -1
  99. package/docs/components/form.md +1 -1
  100. package/docs/components/header.md +1 -1
  101. package/docs/components/hover-card.md +1 -1
  102. package/docs/components/input-otp.md +1 -1
  103. package/docs/components/input.md +2 -2
  104. package/docs/components/label.md +2 -2
  105. package/docs/components/language-selector.md +1 -1
  106. package/docs/components/markdown-message.md +1 -1
  107. package/docs/components/menubar.md +1 -1
  108. package/docs/components/navigation-menu.md +1 -1
  109. package/docs/components/notification-badge.md +1 -1
  110. package/docs/components/page-header.md +3 -3
  111. package/docs/components/pagination.md +1 -1
  112. package/docs/components/popover.md +1 -1
  113. package/docs/components/progress.md +1 -1
  114. package/docs/components/radio-group.md +1 -1
  115. package/docs/components/rating.md +1 -1
  116. package/docs/components/resizable.md +1 -1
  117. package/docs/components/scroll-area.md +1 -1
  118. package/docs/components/search.md +2 -2
  119. package/docs/components/select.md +1 -1
  120. package/docs/components/separator.md +1 -1
  121. package/docs/components/sheet.md +1 -1
  122. package/docs/components/sidebar.md +2 -1
  123. package/docs/components/skeleton.md +1 -1
  124. package/docs/components/slider.md +1 -1
  125. package/docs/components/stats-card.md +1 -1
  126. package/docs/components/stepper.md +1 -1
  127. package/docs/components/switch.md +1 -1
  128. package/docs/components/table.md +1 -1
  129. package/docs/components/tabs.md +1 -1
  130. package/docs/components/textarea.md +1 -1
  131. package/docs/components/theme-toggle.md +1 -1
  132. package/docs/components/timeline.md +1 -1
  133. package/docs/components/toggle-group.md +1 -1
  134. package/docs/components/toggle.md +1 -1
  135. package/docs/components/tooltip.md +1 -1
  136. package/docs/components/tree-view.md +1 -1
  137. package/docs/components/use-mobile.md +1 -1
  138. package/docs/components/video-player.md +1 -1
  139. package/docs/components/xertica-logo.md +1 -1
  140. package/docs/components/xertica-orbe.md +1 -1
  141. package/docs/components/xertica-provider.md +2 -2
  142. package/docs/components/xertica-xlogo.md +1 -1
  143. package/docs/getting-started.md +23 -6
  144. package/docs/installation.md +23 -10
  145. package/docs/layout.md +4 -3
  146. package/docs/llms.md +17 -5
  147. package/docs/patterns/analytics.md +1 -1
  148. package/docs/patterns/crud.md +1 -1
  149. package/docs/patterns/dashboard.md +1 -1
  150. package/docs/patterns/form.md +1 -1
  151. package/docs/patterns/login.md +2 -2
  152. package/llms-full.txt +44 -0
  153. package/llms.txt +16 -1
  154. package/package.json +35 -3
  155. package/templates/guidelines/Guidelines.md +163 -76
  156. package/templates/package.json +2 -2
  157. package/templates/src/app/App.tsx +30 -155
  158. package/templates/src/app/components/AppLayout.tsx +40 -0
  159. package/templates/src/app/components/AuthGuard.tsx +76 -0
  160. package/templates/src/features/auth/index.ts +4 -0
  161. package/templates/src/features/auth/ui/AuthPageShell.tsx +34 -0
  162. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -0
  163. package/templates/src/features/auth/ui/LoginContent.tsx +90 -0
  164. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -0
  165. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +59 -0
  166. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -0
  167. package/templates/src/features/home/index.ts +1 -0
  168. package/templates/src/{app/pages/Home → features/home/ui}/HomeContent.tsx +100 -100
  169. package/templates/src/features/template/index.ts +5 -0
  170. package/templates/src/features/template/ui/FormTemplate.tsx +120 -0
  171. package/templates/src/{app/pages/Template → features/template/ui}/TemplateContent.tsx +3 -4
  172. package/templates/src/{app/pages → pages}/ForgotPasswordPage.tsx +6 -6
  173. package/templates/src/pages/HomePage.tsx +57 -0
  174. package/templates/src/{app/pages → pages}/LoginPage.tsx +10 -10
  175. package/templates/src/{app/pages → pages}/ResetPasswordPage.tsx +6 -6
  176. package/templates/src/pages/TemplatePage.tsx +30 -0
  177. package/templates/src/{app/pages → pages}/VerifyEmailPage.tsx +6 -6
  178. package/templates/src/shared/config/navigation.ts +20 -0
  179. package/templates/src/shared/lib/auth.ts +20 -0
  180. package/templates/src/shared/types/auth.ts +3 -0
  181. package/templates/src/app/App.d.ts +0 -1
  182. package/templates/src/app/App.js +0 -70
  183. package/templates/src/app/pages/CrudTemplate.d.ts +0 -1
  184. package/templates/src/app/pages/CrudTemplate.js +0 -6
  185. package/templates/src/app/pages/DashboardTemplate.d.ts +0 -1
  186. package/templates/src/app/pages/DashboardTemplate.js +0 -9
  187. package/templates/src/app/pages/ForgotPassword/ForgotPasswordContent.d.ts +0 -1
  188. package/templates/src/app/pages/ForgotPassword/ForgotPasswordContent.js +0 -21
  189. package/templates/src/app/pages/ForgotPassword/ForgotPasswordContent.tsx +0 -148
  190. package/templates/src/app/pages/ForgotPasswordPage.d.ts +0 -1
  191. package/templates/src/app/pages/ForgotPasswordPage.js +0 -5
  192. package/templates/src/app/pages/FormTemplate.d.ts +0 -1
  193. package/templates/src/app/pages/FormTemplate.js +0 -23
  194. package/templates/src/app/pages/FormTemplate.tsx +0 -109
  195. package/templates/src/app/pages/Home/HomeContent.d.ts +0 -1
  196. package/templates/src/app/pages/Home/HomeContent.js +0 -24
  197. package/templates/src/app/pages/HomePage.d.ts +0 -8
  198. package/templates/src/app/pages/HomePage.js +0 -24
  199. package/templates/src/app/pages/HomePage.tsx +0 -67
  200. package/templates/src/app/pages/Login/LoginContent.d.ts +0 -5
  201. package/templates/src/app/pages/Login/LoginContent.js +0 -28
  202. package/templates/src/app/pages/Login/LoginContent.tsx +0 -183
  203. package/templates/src/app/pages/LoginPage.d.ts +0 -5
  204. package/templates/src/app/pages/LoginPage.js +0 -5
  205. package/templates/src/app/pages/LoginTemplate.d.ts +0 -1
  206. package/templates/src/app/pages/LoginTemplate.js +0 -6
  207. package/templates/src/app/pages/ResetPassword/ResetPasswordContent.d.ts +0 -1
  208. package/templates/src/app/pages/ResetPassword/ResetPasswordContent.js +0 -73
  209. package/templates/src/app/pages/ResetPassword/ResetPasswordContent.tsx +0 -199
  210. package/templates/src/app/pages/ResetPasswordPage.d.ts +0 -1
  211. package/templates/src/app/pages/ResetPasswordPage.js +0 -5
  212. package/templates/src/app/pages/Template/TemplateContent.d.ts +0 -1
  213. package/templates/src/app/pages/Template/TemplateContent.js +0 -75
  214. package/templates/src/app/pages/TemplatePage.d.ts +0 -8
  215. package/templates/src/app/pages/TemplatePage.js +0 -11
  216. package/templates/src/app/pages/TemplatePage.tsx +0 -46
  217. package/templates/src/app/pages/VerifyEmail/VerifyEmailContent.d.ts +0 -1
  218. package/templates/src/app/pages/VerifyEmail/VerifyEmailContent.js +0 -24
  219. package/templates/src/app/pages/VerifyEmail/VerifyEmailContent.tsx +0 -166
  220. package/templates/src/app/pages/VerifyEmailPage.d.ts +0 -1
  221. package/templates/src/app/pages/VerifyEmailPage.js +0 -5
  222. package/templates/src/app/routes.d.ts +0 -10
  223. package/templates/src/app/routes.js +0 -22
  224. package/templates/src/app/routes.tsx +0 -33
  225. package/templates/src/main.d.ts +0 -1
  226. package/templates/src/main.js +0 -6
  227. /package/templates/src/{app/pages → features/template/ui}/CrudTemplate.tsx +0 -0
  228. /package/templates/src/{app/pages → features/template/ui}/DashboardTemplate.tsx +0 -0
  229. /package/templates/src/{app/pages → features/template/ui}/LoginTemplate.tsx +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,42 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ---
9
9
 
10
+ ## [2.0.0] — 2026-05-11
11
+
12
+ ### Added
13
+
14
+ - **Subpath exports** — The package now exposes 6 granular entry points alongside the full root barrel:
15
+ - `xertica-ui/ui` — all UI primitives (Button, Card, Input, Table, Dialog, etc.)
16
+ - `xertica-ui/layout` — Sidebar and Header
17
+ - `xertica-ui/brand` — XerticaProvider, XerticaLogo, XerticaXLogo, XerticaOrbe, ThemeToggle, LanguageSelector
18
+ - `xertica-ui/assistant` — XerticaAssistant, MarkdownMessage, CodeBlock, FormattedDocument, ModernChatInput
19
+ - `xertica-ui/media` — VideoPlayer, AudioPlayer, FloatingMediaWrapper
20
+ - `xertica-ui/hooks` — useLayout, useTheme, useLanguage, useBrandColors, useAssistente, useApiKey
21
+ - Root `from 'xertica-ui'` remains fully supported for backward compatibility.
22
+ - **`ImageWithFallback` added to `xertica-ui/ui`** — previously only in the root barrel; now accessible via the `/ui` subpath.
23
+ - **Multi-entry Vite build** — `vite.config.ts` now uses `lib.entry` as an object (7 entry points). Output filenames follow `[entryName].[format].js` pattern.
24
+ - **CLI template — FSD/FDA architecture** — The scaffolded template was restructured to follow Feature-Sliced Design + Feature-Driven Architecture:
25
+ - `src/app/` — BrowserRouter, XerticaProvider, AuthGuard (auth state + route definitions), AppLayout (Sidebar + children shell)
26
+ - `src/shared/` — `config/navigation.ts` (route registry), `lib/auth.ts` (localStorage helpers), `types/auth.ts` (User interface)
27
+ - `src/features/auth/ui/` — LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent; with shared `AuthPageShell` and `SocialLoginButtons` DRY extractions
28
+ - `src/features/home/ui/` — HomeContent
29
+ - `src/features/template/ui/` — TemplateContent, FormTemplate
30
+ - `src/pages/` — thin page wrappers (LoginPage, HomePage, TemplatePage, ForgotPasswordPage, VerifyEmailPage, ResetPasswordPage)
31
+ - **`templates/guidelines/Guidelines.md`** — new architecture guide documenting FSD/FDA layers, layer responsibilities, and "Adding New Routes" step-by-step.
32
+
33
+ ### Changed
34
+
35
+ - **Template imports** — All template source files updated to use subpath imports (`xertica-ui/ui`, `xertica-ui/brand`, `xertica-ui/layout`, `xertica-ui/assistant`, `xertica-ui/hooks`) instead of the root barrel.
36
+ - **`FormTemplate.tsx` rewritten** — Removed dependency on `@hookform/resolvers/zod`, `react-hook-form`, and `zod` (packages not included in the CLI template's `package.json`). Now uses plain React `useState` + inline validation with only `xertica-ui/ui` primitives.
37
+ - **`tsconfig.build.json`** — `include` array updated to cover all new barrel source directories (`components/**/*`, `contexts/**/*`, `hooks/**/*`).
38
+ - **Documentation** (`llms.txt`, `llms-full.txt`) — Added subpath import reference table and FSD/FDA layer mapping.
39
+
40
+ ### Fixed
41
+
42
+ - **Stale compiled artifacts** — Removed `App.js`, `App.d.ts`, `main.js`, `main.d.ts` from `templates/src/app/` that were being resolved by Vite's extension priority (`.js` before `.tsx`), causing `Failed to fetch dynamically imported module` errors after the FSD restructure.
43
+
44
+ ---
45
+
10
46
  ## [1.10.0] — 2026-05-08
11
47
 
12
48
  ### Added
package/README.md CHANGED
@@ -50,7 +50,7 @@ import 'xertica-ui/style.css';
50
50
  **2. Wrap your app** with `XerticaProvider`:
51
51
 
52
52
  ```tsx
53
- import { XerticaProvider } from 'xertica-ui';
53
+ import { XerticaProvider } from 'xertica-ui/brand';
54
54
 
55
55
  function App() {
56
56
  return (
@@ -63,6 +63,26 @@ function App() {
63
63
 
64
64
  ---
65
65
 
66
+ ## 📂 Subpath Imports (FSD/FDA)
67
+
68
+ Xertica UI v2 exposes **granular subpath entries** — import only what your layer needs without loading the entire library:
69
+
70
+ ```tsx
71
+ import { Button, Card, Input } from 'xertica-ui/ui'; // shared/ui — primitives
72
+ import { Sidebar, Header } from 'xertica-ui/layout'; // layout shell
73
+ import { XerticaProvider } from 'xertica-ui/brand'; // app-level — providers & brand
74
+ import { XerticaAssistant } from 'xertica-ui/assistant'; // feature — AI assistant
75
+ import { VideoPlayer, AudioPlayer } from 'xertica-ui/media'; // feature — media players
76
+ import { useLayout, useTheme } from 'xertica-ui/hooks'; // shared/lib — hooks & contexts
77
+ import 'xertica-ui/style.css'; // styles — import once at root
78
+ ```
79
+
80
+ The root `from 'xertica-ui'` barrel remains available for full backward compatibility.
81
+
82
+ > **TypeScript**: requires `"moduleResolution": "bundler"` (or `"node16"` / `"nodenext"`) in `tsconfig.json` to resolve subpath exports.
83
+
84
+ ---
85
+
66
86
  ## 🛠️ The Layout System
67
87
 
68
88
  Xertica UI features an autonomous layout system managed by `LayoutContext`.
@@ -71,7 +91,7 @@ Xertica UI features an autonomous layout system managed by `LayoutContext`.
71
91
  Every page **must** use the `<PageHeader>` component for its title and primary actions. Never use raw `h1` or `div` for headers.
72
92
 
73
93
  ```tsx
74
- import { PageHeader, PageHeaderHeading, Button } from 'xertica-ui';
94
+ import { PageHeader, PageHeaderHeading, Button } from 'xertica-ui/ui';
75
95
 
76
96
  export function MyPage() {
77
97
  return (
@@ -91,12 +111,37 @@ export function MyPage() {
91
111
  ### `useLayout()` Hook
92
112
  Access the sidebar state, width, and toggle functions anywhere in the component tree:
93
113
  ```tsx
114
+ import { useLayout } from 'xertica-ui/hooks';
115
+
94
116
  const { sidebarWidth, isSidebarOpen, toggleSidebar } = useLayout();
95
117
  ```
96
118
 
97
119
  ---
98
120
 
99
- ## 🧩 Component Catalog (96 Components)
121
+ ## 🏗️ CLI Template FSD/FDA Architecture
122
+
123
+ Projects scaffolded with `npx xertica-ui@latest init` follow **Feature-Sliced Design (FSD) + Feature-Driven Architecture (FDA)**:
124
+
125
+ ```
126
+ src/
127
+ app/ ← BrowserRouter, XerticaProvider, AuthGuard, AppLayout
128
+ shared/
129
+ config/ ← navigation.ts (route definitions)
130
+ lib/ ← auth.ts (localStorage helpers)
131
+ types/ ← auth.ts (User interface)
132
+ features/
133
+ auth/ui/ ← LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent
134
+ home/ui/ ← HomeContent
135
+ template/ui/ ← TemplateContent, FormTemplate
136
+ pages/ ← thin wrappers: LoginPage, HomePage, TemplatePage, …
137
+ styles/ ← index.css, xertica/tokens.css
138
+ ```
139
+
140
+ Each feature only imports from `shared/` or its own domain. Pages only compose features. See `templates/guidelines/Guidelines.md` for the full architecture guide.
141
+
142
+ ---
143
+
144
+ ## 🧩 Component Catalog (97 Components)
100
145
 
101
146
  ### Layout & Navigation
102
147
  `Header` · `Sidebar` · `PageHeader` · `Breadcrumb` · `NavigationMenu` · `Tabs` · `Pagination` · `Accordion` · `Collapsible`
@@ -0,0 +1,5 @@
1
+ export * from './xertica-assistant';
2
+ export { CodeBlock } from './code-block';
3
+ export { MarkdownMessage } from './markdown-message';
4
+ export { ModernChatInput } from './modern-chat-input';
5
+ export { FormattedDocument } from './formatted-document';
@@ -0,0 +1,6 @@
1
+ export * from './xertica-provider';
2
+ export * from './xertica-logo';
3
+ export * from './xertica-xlogo';
4
+ export * from './xertica-orbe';
5
+ export * from './theme-toggle';
6
+ export * from './language-selector';
@@ -0,0 +1,6 @@
1
+ export * from '../../contexts/LayoutContext';
2
+ export * from '../../contexts/ThemeContext';
3
+ export * from '../../contexts/LanguageContext';
4
+ export * from '../../contexts/BrandColorsContext';
5
+ export * from '../../contexts/AssistenteContext';
6
+ export * from '../../contexts/ApiKeyContext';
@@ -0,0 +1,2 @@
1
+ export * from './sidebar';
2
+ export * from './header';
@@ -0,0 +1,3 @@
1
+ export * from './video-player';
2
+ export * from './audio-player';
3
+ export { FloatingMediaWrapper } from './FloatingMediaWrapper';
@@ -216,4 +216,7 @@ export type { PageHeaderProps } from "./page-header";
216
216
  export type { ChartConfig } from "./chart";
217
217
 
218
218
  // Hooks
219
- export { useMobile, useIsMobile } from "../shared/use-mobile";
219
+ export { useMobile, useIsMobile } from "../shared/use-mobile";
220
+
221
+ // Image Utilities
222
+ export { ImageWithFallback } from "../figma/ImageWithFallback";