@fragments-sdk/ui 0.9.1 → 0.9.3

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 (70) hide show
  1. package/dist/assets/ui.css +10324 -0
  2. package/fragments.json +1 -1
  3. package/package.json +119 -98
  4. package/src/components/Loading/Loading.fragment.tsx +1 -1
  5. package/src/components/Sidebar/Sidebar.fragment.tsx +138 -109
  6. package/dist/assets/components/Accordion/Accordion.module.css +0 -107
  7. package/dist/assets/components/Alert/Alert.module.css +0 -158
  8. package/dist/assets/components/AppShell/AppShell.module.css +0 -156
  9. package/dist/assets/components/Avatar/Avatar.module.css +0 -109
  10. package/dist/assets/components/Badge/Badge.module.css +0 -117
  11. package/dist/assets/components/BentoGrid/BentoGrid.module.css +0 -113
  12. package/dist/assets/components/Box/Box.module.css +0 -341
  13. package/dist/assets/components/Breadcrumbs/Breadcrumbs.module.css +0 -108
  14. package/dist/assets/components/Button/Button.module.css +0 -153
  15. package/dist/assets/components/ButtonGroup/ButtonGroup.module.css +0 -32
  16. package/dist/assets/components/Card/Card.module.css +0 -131
  17. package/dist/assets/components/Chart/Chart.module.css +0 -122
  18. package/dist/assets/components/Checkbox/Checkbox.module.css +0 -129
  19. package/dist/assets/components/Chip/Chip.module.css +0 -248
  20. package/dist/assets/components/CodeBlock/CodeBlock.module.css +0 -309
  21. package/dist/assets/components/Collapsible/Collapsible.module.css +0 -103
  22. package/dist/assets/components/ColorPicker/ColorPicker.module.css +0 -140
  23. package/dist/assets/components/Combobox/Combobox.module.css +0 -278
  24. package/dist/assets/components/Command/Command.module.css +0 -132
  25. package/dist/assets/components/ConversationList/ConversationList.module.css +0 -138
  26. package/dist/assets/components/DatePicker/DatePicker.module.css +0 -388
  27. package/dist/assets/components/Dialog/Dialog.module.css +0 -170
  28. package/dist/assets/components/Drawer/Drawer.module.css +0 -214
  29. package/dist/assets/components/EmptyState/EmptyState.module.css +0 -100
  30. package/dist/assets/components/Field/Field.module.css +0 -30
  31. package/dist/assets/components/Fieldset/Fieldset.module.css +0 -21
  32. package/dist/assets/components/Form/Form.module.css +0 -5
  33. package/dist/assets/components/Grid/Grid.module.css +0 -249
  34. package/dist/assets/components/Header/Header.module.css +0 -332
  35. package/dist/assets/components/Icon/Icon.module.css +0 -35
  36. package/dist/assets/components/Image/Image.module.css +0 -71
  37. package/dist/assets/components/Input/Input.module.css +0 -135
  38. package/dist/assets/components/Link/Link.module.css +0 -66
  39. package/dist/assets/components/List/List.module.css +0 -66
  40. package/dist/assets/components/Listbox/Listbox.module.css +0 -99
  41. package/dist/assets/components/Loading/Loading.module.css +0 -210
  42. package/dist/assets/components/Markdown/Markdown.module.css +0 -149
  43. package/dist/assets/components/Menu/Menu.module.css +0 -182
  44. package/dist/assets/components/Message/Message.module.css +0 -175
  45. package/dist/assets/components/NavigationMenu/NavigationMenu.module.css +0 -553
  46. package/dist/assets/components/Pagination/Pagination.module.css +0 -92
  47. package/dist/assets/components/Popover/Popover.module.css +0 -168
  48. package/dist/assets/components/Progress/Progress.module.css +0 -166
  49. package/dist/assets/components/Prompt/Prompt.module.css +0 -262
  50. package/dist/assets/components/RadioGroup/RadioGroup.module.css +0 -152
  51. package/dist/assets/components/ScrollArea/ScrollArea.module.css +0 -89
  52. package/dist/assets/components/Select/Select.module.css +0 -206
  53. package/dist/assets/components/Separator/Separator.module.css +0 -71
  54. package/dist/assets/components/Sidebar/Sidebar.module.css +0 -683
  55. package/dist/assets/components/Skeleton/Skeleton.module.css +0 -134
  56. package/dist/assets/components/Slider/Slider.module.css +0 -83
  57. package/dist/assets/components/Stack/Stack.module.css +0 -132
  58. package/dist/assets/components/Table/Table.module.css +0 -230
  59. package/dist/assets/components/TableOfContents/TableOfContents.module.css +0 -53
  60. package/dist/assets/components/Tabs/Tabs.module.css +0 -142
  61. package/dist/assets/components/Text/Text.module.css +0 -85
  62. package/dist/assets/components/Textarea/Textarea.module.css +0 -96
  63. package/dist/assets/components/Theme/ThemeToggle.module.css +0 -85
  64. package/dist/assets/components/ThinkingIndicator/ThinkingIndicator.module.css +0 -201
  65. package/dist/assets/components/Toast/Toast.module.css +0 -199
  66. package/dist/assets/components/Toggle/Toggle.module.css +0 -133
  67. package/dist/assets/components/ToggleGroup/ToggleGroup.module.css +0 -122
  68. package/dist/assets/components/Tooltip/Tooltip.module.css +0 -64
  69. package/dist/assets/components/VisuallyHidden/VisuallyHidden.module.css +0 -11
  70. package/dist/assets/styles/globals.css +0 -355
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fragments-sdk/ui",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "license": "MIT",
5
5
  "description": "Customizable UI components built on Base UI headless primitives",
6
6
  "author": "Conan McNicholl",
@@ -10,97 +10,25 @@
10
10
  "url": "https://github.com/ConanMcN/fragments"
11
11
  },
12
12
  "type": "module",
13
- "main": "dist/index.cjs",
14
- "types": "dist/index.d.ts",
13
+ "main": "src/index.ts",
14
+ "types": "src/index.ts",
15
15
  "fragments": "fragments.json",
16
16
  "sideEffects": [
17
- "*.scss",
18
- "*.css"
17
+ "**/*.scss",
18
+ "**/*.css"
19
19
  ],
20
20
  "exports": {
21
- ".": {
22
- "import": {
23
- "types": "./dist/index.d.ts",
24
- "default": "./dist/index.js"
25
- },
26
- "require": {
27
- "types": "./dist/index.d.ts",
28
- "default": "./dist/index.cjs"
29
- }
30
- },
31
- "./datepicker": {
32
- "import": {
33
- "types": "./dist/components/DatePicker/index.d.ts",
34
- "default": "./dist/datepicker.js"
35
- },
36
- "require": {
37
- "types": "./dist/components/DatePicker/index.d.ts",
38
- "default": "./dist/datepicker.cjs"
39
- }
40
- },
41
- "./chart": {
42
- "import": {
43
- "types": "./dist/components/Chart/index.d.ts",
44
- "default": "./dist/chart.js"
45
- },
46
- "require": {
47
- "types": "./dist/components/Chart/index.d.ts",
48
- "default": "./dist/chart.cjs"
49
- }
50
- },
51
- "./markdown": {
52
- "import": {
53
- "types": "./dist/components/Markdown/index.d.ts",
54
- "default": "./dist/markdown.js"
55
- },
56
- "require": {
57
- "types": "./dist/components/Markdown/index.d.ts",
58
- "default": "./dist/markdown.cjs"
59
- }
60
- },
61
- "./codeblock": {
62
- "import": {
63
- "types": "./dist/components/CodeBlock/index.d.ts",
64
- "default": "./dist/codeblock.js"
65
- },
66
- "require": {
67
- "types": "./dist/components/CodeBlock/index.d.ts",
68
- "default": "./dist/codeblock.cjs"
69
- }
70
- },
71
- "./colorpicker": {
72
- "import": {
73
- "types": "./dist/components/ColorPicker/index.d.ts",
74
- "default": "./dist/colorpicker.js"
75
- },
76
- "require": {
77
- "types": "./dist/components/ColorPicker/index.d.ts",
78
- "default": "./dist/colorpicker.cjs"
79
- }
80
- },
81
- "./table": {
82
- "import": {
83
- "types": "./dist/components/Table/index.d.ts",
84
- "default": "./dist/table.js"
85
- },
86
- "require": {
87
- "types": "./dist/components/Table/index.d.ts",
88
- "default": "./dist/table.cjs"
89
- }
90
- },
21
+ ".": "./src/index.ts",
22
+ "./datepicker": "./src/components/DatePicker/index.tsx",
23
+ "./chart": "./src/components/Chart/index.tsx",
24
+ "./markdown": "./src/components/Markdown/index.tsx",
25
+ "./codeblock": "./src/components/CodeBlock/index.tsx",
26
+ "./colorpicker": "./src/components/ColorPicker/index.tsx",
27
+ "./table": "./src/components/Table/index.tsx",
91
28
  "./styles": "./src/styles/globals.scss",
92
29
  "./tokens": "./src/tokens/_variables.scss",
93
30
  "./mixins": "./src/tokens/_mixins.scss",
94
- "./brand": {
95
- "import": {
96
- "types": "./dist/brand.d.ts",
97
- "default": "./dist/brand.js"
98
- },
99
- "require": {
100
- "types": "./dist/brand.d.ts",
101
- "default": "./dist/brand.cjs"
102
- }
103
- },
31
+ "./brand": "./src/brand.ts",
104
32
  "./fragments.json": "./fragments.json",
105
33
  "./assets/*": "./src/assets/*",
106
34
  "./package.json": "./package.json"
@@ -119,7 +47,108 @@
119
47
  "react-components"
120
48
  ],
121
49
  "publishConfig": {
122
- "access": "public"
50
+ "access": "public",
51
+ "main": "dist/index.cjs",
52
+ "module": "dist/index.js",
53
+ "types": "dist/index.d.ts",
54
+ "exports": {
55
+ ".": {
56
+ "import": {
57
+ "types": "./dist/index.d.ts",
58
+ "default": "./dist/index.js"
59
+ },
60
+ "require": {
61
+ "types": "./dist/index.d.ts",
62
+ "default": "./dist/index.cjs"
63
+ }
64
+ },
65
+ "./datepicker": {
66
+ "import": {
67
+ "types": "./dist/components/DatePicker/index.d.ts",
68
+ "default": "./dist/datepicker.js"
69
+ },
70
+ "require": {
71
+ "types": "./dist/components/DatePicker/index.d.ts",
72
+ "default": "./dist/datepicker.cjs"
73
+ }
74
+ },
75
+ "./chart": {
76
+ "import": {
77
+ "types": "./dist/components/Chart/index.d.ts",
78
+ "default": "./dist/chart.js"
79
+ },
80
+ "require": {
81
+ "types": "./dist/components/Chart/index.d.ts",
82
+ "default": "./dist/chart.cjs"
83
+ }
84
+ },
85
+ "./markdown": {
86
+ "import": {
87
+ "types": "./dist/components/Markdown/index.d.ts",
88
+ "default": "./dist/markdown.js"
89
+ },
90
+ "require": {
91
+ "types": "./dist/components/Markdown/index.d.ts",
92
+ "default": "./dist/markdown.cjs"
93
+ }
94
+ },
95
+ "./codeblock": {
96
+ "import": {
97
+ "types": "./dist/components/CodeBlock/index.d.ts",
98
+ "default": "./dist/codeblock.js"
99
+ },
100
+ "require": {
101
+ "types": "./dist/components/CodeBlock/index.d.ts",
102
+ "default": "./dist/codeblock.cjs"
103
+ }
104
+ },
105
+ "./colorpicker": {
106
+ "import": {
107
+ "types": "./dist/components/ColorPicker/index.d.ts",
108
+ "default": "./dist/colorpicker.js"
109
+ },
110
+ "require": {
111
+ "types": "./dist/components/ColorPicker/index.d.ts",
112
+ "default": "./dist/colorpicker.cjs"
113
+ }
114
+ },
115
+ "./table": {
116
+ "import": {
117
+ "types": "./dist/components/Table/index.d.ts",
118
+ "default": "./dist/table.js"
119
+ },
120
+ "require": {
121
+ "types": "./dist/components/Table/index.d.ts",
122
+ "default": "./dist/table.cjs"
123
+ }
124
+ },
125
+ "./styles": {
126
+ "sass": "./src/styles/globals.scss",
127
+ "default": "./dist/assets/ui.css"
128
+ },
129
+ "./tokens": "./src/tokens/_variables.scss",
130
+ "./mixins": "./src/tokens/_mixins.scss",
131
+ "./brand": {
132
+ "import": {
133
+ "types": "./dist/brand.d.ts",
134
+ "default": "./dist/brand.js"
135
+ },
136
+ "require": {
137
+ "types": "./dist/brand.d.ts",
138
+ "default": "./dist/brand.cjs"
139
+ }
140
+ },
141
+ "./fragments.json": "./fragments.json",
142
+ "./assets/*": "./src/assets/*",
143
+ "./package.json": "./package.json"
144
+ }
145
+ },
146
+ "scripts": {
147
+ "dev": "node ../../packages/cli/dist/bin.js dev",
148
+ "build": "node ../../packages/cli/dist/bin.js build && vite build && tsc -p tsconfig.build.json",
149
+ "lint": "eslint src",
150
+ "validate": "node ../../packages/cli/dist/bin.js validate",
151
+ "test": "vitest run"
123
152
  },
124
153
  "peerDependencies": {
125
154
  "@tanstack/react-table": ">=8.0.0",
@@ -168,6 +197,7 @@
168
197
  "@scarf/scarf": "^1.4.0"
169
198
  },
170
199
  "devDependencies": {
200
+ "@fragments-sdk/cli": "workspace:*",
171
201
  "@tanstack/react-table": "^8.21.3",
172
202
  "@testing-library/jest-dom": "^6.6.0",
173
203
  "@testing-library/react": "^16.1.0",
@@ -187,20 +217,11 @@
187
217
  "typescript": "^5.7.0",
188
218
  "vite": "^6.0.0",
189
219
  "vitest": "^2.1.8",
190
- "vitest-axe": "^0.1.0",
191
- "@fragments-sdk/cli": "0.7.15"
220
+ "vitest-axe": "^0.1.0"
192
221
  },
193
222
  "files": [
194
223
  "src",
195
224
  "dist",
196
225
  "fragments.json"
197
- ],
198
- "scripts": {
199
- "dev": "node ../../packages/cli/dist/bin.js dev",
200
- "build": "node ../../packages/cli/dist/bin.js build && vite build && tsc -p tsconfig.build.json",
201
- "lint": "eslint src",
202
- "validate": "node ../../packages/cli/dist/bin.js validate",
203
- "test": "vitest run"
204
- },
205
- "module": "dist/index.js"
206
- }
226
+ ]
227
+ }
@@ -144,7 +144,7 @@ export default defineFragment({
144
144
  name: 'Screen',
145
145
  description: 'Full-screen loading state with optional label',
146
146
  render: () => (
147
- <div style={{ position: 'relative', width: '300px', height: '200px', border: '1px solid #ccc', borderRadius: '8px', overflow: 'hidden' }}>
147
+ <div style={{ position: 'relative', width: '300px', height: '200px', border: '1px solid #ccc', borderRadius: '8px', overflow: 'hidden', transform: 'scale(1)' }}>
148
148
  <Loading.Screen size="lg" label="Loading application..." showLabel />
149
149
  </div>
150
150
  ),
@@ -86,44 +86,56 @@ const demoContainerStyle: React.CSSProperties = {
86
86
  width: '100%',
87
87
  };
88
88
 
89
+ // Isolate preview sidebar state from any parent SidebarProvider (e.g., docs app's AppShell)
90
+ function PreviewIsolation({ children }: { children: React.ReactNode }) {
91
+ return (
92
+ <SidebarProvider enableKeyboardShortcut={false}>
93
+ {children}
94
+ </SidebarProvider>
95
+ );
96
+ }
97
+
89
98
  // Stateful demo for collapsed state
90
99
  function CollapsedDemo() {
91
100
  const [collapsed, setCollapsed] = useState(true);
92
101
  return (
93
- <div style={demoContainerStyle}>
94
- <Sidebar collapsed={collapsed} onCollapsedChange={setCollapsed}>
95
- <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
96
- <LogoIcon size={32} />
97
- <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
98
- </Sidebar.Header>
99
- <Sidebar.Nav>
100
- <Sidebar.Section>
101
- <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
102
- <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
103
- <Sidebar.Item icon={<UsersIcon />}>Team</Sidebar.Item>
104
- <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
105
- </Sidebar.Section>
106
- <Sidebar.Section label="Settings">
107
- <Sidebar.Item icon={<GearIcon />}>Preferences</Sidebar.Item>
108
- <Sidebar.Item icon={<HelpIcon />}>Help</Sidebar.Item>
109
- </Sidebar.Section>
110
- </Sidebar.Nav>
111
- <Sidebar.Footer>
112
- <Sidebar.CollapseToggle />
113
- </Sidebar.Footer>
114
- </Sidebar>
115
- <main style={mainContentStyle}>
116
- Hover over icons to see tooltips. Click toggle to expand.
117
- </main>
118
- </div>
102
+ <SidebarProvider collapsed={collapsed} onCollapsedChange={setCollapsed} enableKeyboardShortcut={false}>
103
+ <div style={demoContainerStyle}>
104
+ <Sidebar>
105
+ <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
106
+ <LogoIcon size={32} />
107
+ <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
108
+ </Sidebar.Header>
109
+ <Sidebar.Nav>
110
+ <Sidebar.Section>
111
+ <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
112
+ <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
113
+ <Sidebar.Item icon={<UsersIcon />}>Team</Sidebar.Item>
114
+ <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
115
+ </Sidebar.Section>
116
+ <Sidebar.Section label="Settings">
117
+ <Sidebar.Item icon={<GearIcon />}>Preferences</Sidebar.Item>
118
+ <Sidebar.Item icon={<HelpIcon />}>Help</Sidebar.Item>
119
+ </Sidebar.Section>
120
+ </Sidebar.Nav>
121
+ <Sidebar.Footer>
122
+ <Sidebar.CollapseToggle />
123
+ </Sidebar.Footer>
124
+ </Sidebar>
125
+ <main style={mainContentStyle}>
126
+ Hover over icons to see tooltips. Click toggle to expand.
127
+ </main>
128
+ </div>
129
+ </SidebarProvider>
119
130
  );
120
131
  }
121
132
 
122
133
  // Demo for submenu expansion using uncontrolled defaultExpanded
123
134
  function SubmenuDemo() {
124
135
  return (
125
- <div style={demoContainerStyle}>
126
- <Sidebar>
136
+ <PreviewIsolation>
137
+ <div style={demoContainerStyle}>
138
+ <Sidebar>
127
139
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
128
140
  <LogoIcon size={32} />
129
141
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -156,6 +168,7 @@ function SubmenuDemo() {
156
168
  Click on "Projects" or "Team" to toggle their submenus
157
169
  </main>
158
170
  </div>
171
+ </PreviewIsolation>
159
172
  );
160
173
  }
161
174
 
@@ -182,7 +195,7 @@ function ExternalTriggerContent() {
182
195
  function ProviderDemo() {
183
196
  return (
184
197
  <div style={demoContainerStyle}>
185
- <SidebarProvider>
198
+ <SidebarProvider enableKeyboardShortcut={false}>
186
199
  <Sidebar>
187
200
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
188
201
  <LogoIcon size={32} />
@@ -206,8 +219,9 @@ function ProviderDemo() {
206
219
  // Demo for asChild pattern with mock Link
207
220
  function AsChildDemo() {
208
221
  return (
209
- <div style={demoContainerStyle}>
210
- <Sidebar>
222
+ <PreviewIsolation>
223
+ <div style={demoContainerStyle}>
224
+ <Sidebar>
211
225
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
212
226
  <LogoIcon size={32} />
213
227
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -236,14 +250,16 @@ function AsChildDemo() {
236
250
  Items rendered as Link components using asChild pattern
237
251
  </main>
238
252
  </div>
253
+ </PreviewIsolation>
239
254
  );
240
255
  }
241
256
 
242
257
  // Demo for section with action button
243
258
  function SectionActionDemo() {
244
259
  return (
245
- <div style={demoContainerStyle}>
246
- <Sidebar>
260
+ <PreviewIsolation>
261
+ <div style={demoContainerStyle}>
262
+ <Sidebar>
247
263
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
248
264
  <LogoIcon size={32} />
249
265
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -274,6 +290,7 @@ function SectionActionDemo() {
274
290
  Section header has an "Add" action button
275
291
  </main>
276
292
  </div>
293
+ </PreviewIsolation>
277
294
  );
278
295
  }
279
296
 
@@ -282,8 +299,9 @@ function SkeletonDemo() {
282
299
  const [loading, setLoading] = useState(true);
283
300
 
284
301
  return (
285
- <div style={demoContainerStyle}>
286
- <Sidebar>
302
+ <PreviewIsolation>
303
+ <div style={demoContainerStyle}>
304
+ <Sidebar>
287
305
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
288
306
  <LogoIcon size={32} />
289
307
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -317,6 +335,7 @@ function SkeletonDemo() {
317
335
  </div>
318
336
  </main>
319
337
  </div>
338
+ </PreviewIsolation>
320
339
  );
321
340
  }
322
341
 
@@ -324,8 +343,9 @@ function SkeletonDemo() {
324
343
  function OffcanvasDemo() {
325
344
  const [collapsed, setCollapsed] = useState(true);
326
345
  return (
327
- <div style={demoContainerStyle}>
328
- <Sidebar collapsed={collapsed} onCollapsedChange={setCollapsed} collapsible="offcanvas">
346
+ <SidebarProvider collapsed={collapsed} onCollapsedChange={setCollapsed} collapsible="offcanvas" enableKeyboardShortcut={false}>
347
+ <div style={demoContainerStyle}>
348
+ <Sidebar>
329
349
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
330
350
  <LogoIcon size={32} />
331
351
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -346,6 +366,7 @@ function OffcanvasDemo() {
346
366
  Offcanvas mode hides sidebar completely. Toggle stays visible to re-open.
347
367
  </main>
348
368
  </div>
369
+ </SidebarProvider>
349
370
  );
350
371
  }
351
372
 
@@ -354,8 +375,9 @@ function RailDemo() {
354
375
  const [collapsed, setCollapsed] = useState(false);
355
376
 
356
377
  return (
357
- <div style={{ ...demoContainerStyle, position: 'relative' }}>
358
- <Sidebar collapsed={collapsed} onCollapsedChange={setCollapsed}>
378
+ <SidebarProvider collapsed={collapsed} onCollapsedChange={setCollapsed} enableKeyboardShortcut={false}>
379
+ <div style={{ ...demoContainerStyle, position: 'relative' }}>
380
+ <Sidebar>
359
381
  <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
360
382
  <LogoIcon size={32} />
361
383
  <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
@@ -380,6 +402,7 @@ function RailDemo() {
380
402
  </div>
381
403
  </main>
382
404
  </div>
405
+ </SidebarProvider>
383
406
  );
384
407
  }
385
408
 
@@ -544,32 +567,34 @@ export default defineFragment({
544
567
  </Sidebar.Footer>
545
568
  </Sidebar>`,
546
569
  render: () => (
547
- <div style={demoContainerStyle}>
548
- <Sidebar>
549
- <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
550
- <LogoIcon size={32} />
551
- <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
552
- </Sidebar.Header>
553
- <Sidebar.Nav>
554
- <Sidebar.Section>
555
- <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
556
- <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
557
- <Sidebar.Item icon={<UsersIcon />}>Team</Sidebar.Item>
558
- <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
559
- </Sidebar.Section>
560
- <Sidebar.Section label="Settings">
561
- <Sidebar.Item icon={<GearIcon />}>Preferences</Sidebar.Item>
562
- <Sidebar.Item icon={<HelpIcon />}>Help</Sidebar.Item>
563
- </Sidebar.Section>
564
- </Sidebar.Nav>
565
- <Sidebar.Footer>
566
- <Sidebar.CollapseToggle />
567
- </Sidebar.Footer>
568
- </Sidebar>
569
- <main style={mainContentStyle}>
570
- Dashboard content goes here
571
- </main>
572
- </div>
570
+ <PreviewIsolation>
571
+ <div style={demoContainerStyle}>
572
+ <Sidebar>
573
+ <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
574
+ <LogoIcon size={32} />
575
+ <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
576
+ </Sidebar.Header>
577
+ <Sidebar.Nav>
578
+ <Sidebar.Section>
579
+ <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
580
+ <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
581
+ <Sidebar.Item icon={<UsersIcon />}>Team</Sidebar.Item>
582
+ <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
583
+ </Sidebar.Section>
584
+ <Sidebar.Section label="Settings">
585
+ <Sidebar.Item icon={<GearIcon />}>Preferences</Sidebar.Item>
586
+ <Sidebar.Item icon={<HelpIcon />}>Help</Sidebar.Item>
587
+ </Sidebar.Section>
588
+ </Sidebar.Nav>
589
+ <Sidebar.Footer>
590
+ <Sidebar.CollapseToggle />
591
+ </Sidebar.Footer>
592
+ </Sidebar>
593
+ <main style={mainContentStyle}>
594
+ Dashboard content goes here
595
+ </main>
596
+ </div>
597
+ </PreviewIsolation>
573
598
  ),
574
599
  },
575
600
  {
@@ -612,28 +637,30 @@ export default defineFragment({
612
637
  </Sidebar.Nav>
613
638
  </Sidebar>`,
614
639
  render: () => (
615
- <div style={demoContainerStyle}>
616
- <Sidebar>
617
- <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
618
- <LogoIcon size={32} />
619
- <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
620
- </Sidebar.Header>
621
- <Sidebar.Nav>
622
- <Sidebar.Section>
623
- <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
624
- <Sidebar.Item icon={<ChartIcon />} badge="3">Analytics</Sidebar.Item>
625
- <Sidebar.Item icon={<UsersIcon />} badge="12">Team</Sidebar.Item>
626
- <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
627
- </Sidebar.Section>
628
- </Sidebar.Nav>
629
- <Sidebar.Footer>
630
- <Sidebar.CollapseToggle />
631
- </Sidebar.Footer>
632
- </Sidebar>
633
- <main style={mainContentStyle}>
634
- Badges indicate unread items or notifications
635
- </main>
636
- </div>
640
+ <PreviewIsolation>
641
+ <div style={demoContainerStyle}>
642
+ <Sidebar>
643
+ <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
644
+ <LogoIcon size={32} />
645
+ <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
646
+ </Sidebar.Header>
647
+ <Sidebar.Nav>
648
+ <Sidebar.Section>
649
+ <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
650
+ <Sidebar.Item icon={<ChartIcon />} badge="3">Analytics</Sidebar.Item>
651
+ <Sidebar.Item icon={<UsersIcon />} badge="12">Team</Sidebar.Item>
652
+ <Sidebar.Item icon={<FolderIcon />}>Projects</Sidebar.Item>
653
+ </Sidebar.Section>
654
+ </Sidebar.Nav>
655
+ <Sidebar.Footer>
656
+ <Sidebar.CollapseToggle />
657
+ </Sidebar.Footer>
658
+ </Sidebar>
659
+ <main style={mainContentStyle}>
660
+ Badges indicate unread items or notifications
661
+ </main>
662
+ </div>
663
+ </PreviewIsolation>
637
664
  ),
638
665
  },
639
666
  {
@@ -683,28 +710,30 @@ export default defineFragment({
683
710
  </Sidebar.Nav>
684
711
  </Sidebar>`,
685
712
  render: () => (
686
- <div style={demoContainerStyle}>
687
- <Sidebar>
688
- <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
689
- <LogoIcon size={32} />
690
- <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
691
- </Sidebar.Header>
692
- <Sidebar.Nav>
693
- <Sidebar.Section>
694
- <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
695
- <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
696
- <Sidebar.Item icon={<UsersIcon />} disabled>Team (Coming Soon)</Sidebar.Item>
697
- <Sidebar.Item icon={<FolderIcon />} disabled>Projects (Upgrade)</Sidebar.Item>
698
- </Sidebar.Section>
699
- </Sidebar.Nav>
700
- <Sidebar.Footer>
701
- <Sidebar.CollapseToggle />
702
- </Sidebar.Footer>
703
- </Sidebar>
704
- <main style={mainContentStyle}>
705
- Disabled items cannot be clicked
706
- </main>
707
- </div>
713
+ <PreviewIsolation>
714
+ <div style={demoContainerStyle}>
715
+ <Sidebar>
716
+ <Sidebar.Header collapsedContent={<LogoIcon size={32} />}>
717
+ <LogoIcon size={32} />
718
+ <span style={{ fontWeight: 600, fontSize: '16px' }}>Acme App</span>
719
+ </Sidebar.Header>
720
+ <Sidebar.Nav>
721
+ <Sidebar.Section>
722
+ <Sidebar.Item icon={<HomeIcon />} active>Dashboard</Sidebar.Item>
723
+ <Sidebar.Item icon={<ChartIcon />}>Analytics</Sidebar.Item>
724
+ <Sidebar.Item icon={<UsersIcon />} disabled>Team (Coming Soon)</Sidebar.Item>
725
+ <Sidebar.Item icon={<FolderIcon />} disabled>Projects (Upgrade)</Sidebar.Item>
726
+ </Sidebar.Section>
727
+ </Sidebar.Nav>
728
+ <Sidebar.Footer>
729
+ <Sidebar.CollapseToggle />
730
+ </Sidebar.Footer>
731
+ </Sidebar>
732
+ <main style={mainContentStyle}>
733
+ Disabled items cannot be clicked
734
+ </main>
735
+ </div>
736
+ </PreviewIsolation>
708
737
  ),
709
738
  },
710
739
  {