@12-apps/ui 1.4.1 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/package.json +17 -8
  2. package/src/button/index.ts +1 -0
  3. package/src/social-login-button/index.ts +1 -0
  4. package/src/{social-login-button.tsx → social-login-button/social-login-button.tsx} +5 -5
  5. package/src/user-avatar/index.ts +1 -0
  6. package/src/{user-avatar.tsx → user-avatar/user-avatar.tsx} +4 -4
  7. package/eslint.config.js +0 -77
  8. package/src/__tests__/data-grid.test.tsx +0 -125
  9. package/src/__tests__/package-wiring.test.ts +0 -41
  10. package/src/__tests__/setup.ts +0 -1
  11. package/src/__tests__/social-login-button.test.tsx +0 -186
  12. package/src/__tests__/user-avatar.test.tsx +0 -195
  13. package/src/__tests__/viewport.test.ts +0 -50
  14. package/src/components/command/__tests__/command.test.tsx +0 -112
  15. package/src/components/data-display/Alert/Alert.stories.tsx +0 -559
  16. package/src/components/data-display/Alert/Alert.test.stories.tsx +0 -707
  17. package/src/components/data-display/AlertDialog/AlertDialog.stories.tsx +0 -362
  18. package/src/components/data-display/AlertDialog/AlertDialog.test.stories.tsx +0 -753
  19. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.stories.tsx +0 -230
  20. package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.test.stories.tsx +0 -270
  21. package/src/components/data-display/Avatar/Avatar.stories.tsx +0 -721
  22. package/src/components/data-display/Avatar/Avatar.test.stories.tsx +0 -822
  23. package/src/components/data-display/Badge/Badge.stories.tsx +0 -1134
  24. package/src/components/data-display/Badge/Badge.test.stories.tsx +0 -1194
  25. package/src/components/data-display/Banner/Banner.stories.tsx +0 -528
  26. package/src/components/data-display/Banner/Banner.test.stories.tsx +0 -503
  27. package/src/components/data-display/Carousel/Carousel.stories.tsx +0 -607
  28. package/src/components/data-display/Carousel/Carousel.test.stories.tsx +0 -691
  29. package/src/components/data-display/Chart/Chart.stories.tsx +0 -568
  30. package/src/components/data-display/Chart/Chart.test.stories.tsx +0 -174
  31. package/src/components/data-display/Chart/SpecChart.stories.tsx +0 -150
  32. package/src/components/data-display/Chart/SpecChart.test.stories.tsx +0 -56
  33. package/src/components/data-display/Chart/__tests__/SpecChart.test.tsx +0 -60
  34. package/src/components/data-display/Chart/__tests__/chart-format.test.ts +0 -43
  35. package/src/components/data-display/Chart/__tests__/chart-spec.test.ts +0 -119
  36. package/src/components/data-display/Chip/Chip.stories.tsx +0 -252
  37. package/src/components/data-display/Chip/Chip.test.stories.tsx +0 -266
  38. package/src/components/data-display/DataGrid/DataGrid.stories.tsx +0 -515
  39. package/src/components/data-display/DataGrid/DataGrid.test.stories.tsx +0 -653
  40. package/src/components/data-display/DataViews/__tests__/DataViewsGrid.test.tsx +0 -271
  41. package/src/components/data-display/DataViews/__tests__/DataViewsTableBase.test.tsx +0 -134
  42. package/src/components/data-display/DataViews/__tests__/SaveViewModal.test.tsx +0 -83
  43. package/src/components/data-display/DataViews/__tests__/data-views-filter.test.ts +0 -115
  44. package/src/components/data-display/DataViews/__tests__/data-views-preview.test.ts +0 -53
  45. package/src/components/data-display/DataViews/__tests__/range-pill.test.tsx +0 -114
  46. package/src/components/data-display/DataViews/base-card.stories.tsx +0 -136
  47. package/src/components/data-display/DescriptionItem/DescriptionItem.stories.tsx +0 -254
  48. package/src/components/data-display/EmptyState/EmptyState.stories.tsx +0 -282
  49. package/src/components/data-display/EmptyState/EmptyState.test.stories.tsx +0 -441
  50. package/src/components/data-display/ErrorState/ErrorState.stories.tsx +0 -110
  51. package/src/components/data-display/ErrorState/ErrorState.test.stories.tsx +0 -133
  52. package/src/components/data-display/HoverCard/HoverCard.stories.tsx +0 -650
  53. package/src/components/data-display/HoverCard/HoverCard.test.stories.tsx +0 -929
  54. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.stories.tsx +0 -411
  55. package/src/components/data-display/LazyImage/LazyImage.stories.tsx +0 -387
  56. package/src/components/data-display/Lightbox/Lightbox.stories.tsx +0 -315
  57. package/src/components/data-display/Lightbox/Lightbox.test.stories.tsx +0 -598
  58. package/src/components/data-display/LoadingState/LoadingState.stories.tsx +0 -124
  59. package/src/components/data-display/LoadingState/LoadingState.test.stories.tsx +0 -99
  60. package/src/components/data-display/MapPreview/MapPreview.stories.tsx +0 -458
  61. package/src/components/data-display/MapPreview/MapPreview.test.stories.tsx +0 -394
  62. package/src/components/data-display/Popover/Popover.stories.tsx +0 -295
  63. package/src/components/data-display/Popover/Popover.test.stories.tsx +0 -1162
  64. package/src/components/data-display/Progress/Progress.stories.tsx +0 -481
  65. package/src/components/data-display/Progress/Progress.test.stories.tsx +0 -2070
  66. package/src/components/data-display/SectionOnboarding/SectionOnboarding.stories.tsx +0 -160
  67. package/src/components/data-display/SectionOnboarding/SectionOnboarding.test.stories.tsx +0 -190
  68. package/src/components/data-display/Sheet/Sheet.stories.tsx +0 -883
  69. package/src/components/data-display/Sheet/Sheet.test.stories.tsx +0 -1101
  70. package/src/components/data-display/StatCard/StatCard.stories.tsx +0 -167
  71. package/src/components/data-display/StatCard/StatCard.test.stories.tsx +0 -240
  72. package/src/components/data-display/Stepper/Stepper.stories.tsx +0 -540
  73. package/src/components/data-display/Stepper/Stepper.test.stories.tsx +0 -600
  74. package/src/components/data-display/Table/Table.stories.tsx +0 -803
  75. package/src/components/data-display/Table/Table.test.stories.tsx +0 -369
  76. package/src/components/data-display/Timeline/Timeline.stories.tsx +0 -442
  77. package/src/components/data-display/Timeline/Timeline.test.stories.tsx +0 -930
  78. package/src/components/data-display/TimingDiagram/TimingDiagram.stories.tsx +0 -475
  79. package/src/components/data-display/TimingDiagram/TimingDiagram.test.stories.tsx +0 -734
  80. package/src/components/data-display/Tooltip/Tooltip.stories.tsx +0 -468
  81. package/src/components/data-display/Tooltip/Tooltip.test.stories.tsx +0 -1154
  82. package/src/components/feedback/ConfirmAction/ConfirmAction.stories.tsx +0 -146
  83. package/src/components/feedback/ConfirmAction/ConfirmAction.test.stories.tsx +0 -114
  84. package/src/components/feedback/ConfirmAction/__tests__/confirm-action.test.tsx +0 -288
  85. package/src/components/feedback/Dialog/Dialog.stories.tsx +0 -833
  86. package/src/components/feedback/Dialog/Dialog.test.stories.tsx +0 -955
  87. package/src/components/feedback/Dialog/__tests__/dialog-content-spacing.test.tsx +0 -66
  88. package/src/components/feedback/Modal/Modal.stories.tsx +0 -765
  89. package/src/components/feedback/Modal/Modal.test.stories.tsx +0 -251
  90. package/src/components/feedback/Sonner/Sonner.stories.tsx +0 -698
  91. package/src/components/feedback/Sonner/Sonner.test.stories.tsx +0 -896
  92. package/src/components/feedback/StackedModal/StackedModal.stories.tsx +0 -1783
  93. package/src/components/feedback/StackedModal/StackedModal.test.stories.tsx +0 -975
  94. package/src/components/feedback/StackedModal/__tests__/stacked-modal-viewport.test.tsx +0 -104
  95. package/src/components/feedback/Toast/Toast.stories.tsx +0 -548
  96. package/src/components/feedback/Toast/Toast.test.stories.tsx +0 -834
  97. package/src/components/feedback/TutorialOverlay/TutorialOverlay.stories.tsx +0 -691
  98. package/src/components/feedback/TutorialOverlay/TutorialOverlay.test.stories.tsx +0 -634
  99. package/src/components/form/AddressAutocomplete/AddressAutocomplete.stories.tsx +0 -665
  100. package/src/components/form/AddressAutocomplete/AddressAutocomplete.test.stories.tsx +0 -727
  101. package/src/components/form/Autocomplete/Autocomplete.stories.tsx +0 -715
  102. package/src/components/form/Autocomplete/Autocomplete.test.stories.tsx +0 -825
  103. package/src/components/form/Button/Button.stories.tsx +0 -365
  104. package/src/components/form/Button/Button.test.stories.tsx +0 -607
  105. package/src/components/form/Calendar/Calendar.stories.tsx +0 -349
  106. package/src/components/form/Calendar/Calendar.test.stories.tsx +0 -464
  107. package/src/components/form/CepField/CepField.stories.tsx +0 -138
  108. package/src/components/form/CepField/CepField.test.stories.tsx +0 -281
  109. package/src/components/form/Checkbox/Checkbox.stories.tsx +0 -265
  110. package/src/components/form/Checkbox/Checkbox.test.stories.tsx +0 -181
  111. package/src/components/form/CodeEditor/CodeEditor.stories.tsx +0 -871
  112. package/src/components/form/CodeEditor/CodeEditor.test.stories.tsx +0 -574
  113. package/src/components/form/Command/Command.stories.tsx +0 -580
  114. package/src/components/form/Command/Command.test.stories.tsx +0 -215
  115. package/src/components/form/CreatableSelect/CreatableSelect.stories.tsx +0 -112
  116. package/src/components/form/CreatableSelect/CreatableSelect.test.stories.tsx +0 -134
  117. package/src/components/form/Form/Form.stories.tsx +0 -687
  118. package/src/components/form/Form/Form.test.stories.tsx +0 -601
  119. package/src/components/form/Input/Input.stories.tsx +0 -260
  120. package/src/components/form/Input/Input.test.stories.tsx +0 -1191
  121. package/src/components/form/InputOTP/InputOTP.stories.tsx +0 -774
  122. package/src/components/form/InputOTP/InputOTP.test.stories.tsx +0 -588
  123. package/src/components/form/Label/Label.stories.tsx +0 -473
  124. package/src/components/form/Label/Label.test.stories.tsx +0 -909
  125. package/src/components/form/Menubar/Menubar.stories.tsx +0 -472
  126. package/src/components/form/Menubar/Menubar.test.stories.tsx +0 -584
  127. package/src/components/form/PasswordStrength/PasswordStrength.stories.tsx +0 -562
  128. package/src/components/form/PasswordStrength/PasswordStrength.test.stories.tsx +0 -327
  129. package/src/components/form/PhoneInput/PhoneInput.stories.tsx +0 -495
  130. package/src/components/form/PhoneInput/PhoneInput.test.stories.tsx +0 -666
  131. package/src/components/form/RadioGroup/RadioGroup.stories.tsx +0 -518
  132. package/src/components/form/RadioGroup/RadioGroup.test.stories.tsx +0 -685
  133. package/src/components/form/RichTextEditor/RichTextEditor.stories.tsx +0 -261
  134. package/src/components/form/RichTextEditor/RichTextEditor.test.stories.tsx +0 -491
  135. package/src/components/form/SearchPalette/SearchPalette.stories.tsx +0 -135
  136. package/src/components/form/Select/Select.stories.tsx +0 -364
  137. package/src/components/form/Select/Select.test.stories.tsx +0 -985
  138. package/src/components/form/Slider/Slider.stories.tsx +0 -418
  139. package/src/components/form/Slider/Slider.test.stories.tsx +0 -1042
  140. package/src/components/form/Switch/Switch.stories.tsx +0 -697
  141. package/src/components/form/Switch/Switch.test.stories.tsx +0 -597
  142. package/src/components/form/Textarea/Textarea.stories.tsx +0 -473
  143. package/src/components/form/Textarea/Textarea.test.stories.tsx +0 -702
  144. package/src/components/form/Toggle/Toggle.stories.tsx +0 -638
  145. package/src/components/form/Toggle/Toggle.test.stories.tsx +0 -1159
  146. package/src/components/form/ToggleGroup/ToggleGroup.stories.tsx +0 -617
  147. package/src/components/form/ToggleGroup/ToggleGroup.test.stories.tsx +0 -918
  148. package/src/components/form/UploadButton/UploadButton.stories.tsx +0 -367
  149. package/src/components/form/UploadButton/UploadButton.test.stories.tsx +0 -573
  150. package/src/components/form/total-form/total-form.test.tsx +0 -214
  151. package/src/components/layout/Accordion/Accordion.stories.tsx +0 -694
  152. package/src/components/layout/Accordion/Accordion.test.stories.tsx +0 -1344
  153. package/src/components/layout/Card/Card.stories.tsx +0 -591
  154. package/src/components/layout/Card/Card.test.stories.tsx +0 -1134
  155. package/src/components/layout/CardGrid/__tests__/CardGrid.test.tsx +0 -92
  156. package/src/components/layout/Collapsible/Collapsible.stories.tsx +0 -180
  157. package/src/components/layout/Collapsible/Collapsible.test.stories.tsx +0 -308
  158. package/src/components/layout/Container/Container.stories.tsx +0 -557
  159. package/src/components/layout/Container/Container.test.stories.tsx +0 -745
  160. package/src/components/layout/ContentToolbar/ContentToolbar.stories.tsx +0 -129
  161. package/src/components/layout/ContentToolbar/ContentToolbar.test.stories.tsx +0 -251
  162. package/src/components/layout/ContentToolbar/__tests__/ColumnsMenu.test.tsx +0 -39
  163. package/src/components/layout/ContentToolbar/__tests__/MultiSelectDropdown.test.tsx +0 -131
  164. package/src/components/layout/ContentToolbar/__tests__/SavedViewsMenu.test.tsx +0 -99
  165. package/src/components/layout/Dashboard/Dashboard.stories.tsx +0 -104
  166. package/src/components/layout/Dashboard/Dashboard.test.stories.tsx +0 -190
  167. package/src/components/layout/Drawer/Drawer.stories.tsx +0 -658
  168. package/src/components/layout/Drawer/Drawer.test.stories.tsx +0 -1343
  169. package/src/components/layout/Resizable/Resizable.stories.tsx +0 -1039
  170. package/src/components/layout/Resizable/Resizable.test.stories.tsx +0 -750
  171. package/src/components/layout/ScrollArea/ScrollArea.stories.tsx +0 -651
  172. package/src/components/layout/ScrollArea/ScrollArea.test.stories.tsx +0 -619
  173. package/src/components/layout/Separator/Separator.stories.tsx +0 -563
  174. package/src/components/layout/Separator/Separator.test.stories.tsx +0 -518
  175. package/src/components/layout/SettingsLayout/SettingsLayout.stories.tsx +0 -192
  176. package/src/components/layout/SettingsLayout/SettingsLayout.test.stories.tsx +0 -175
  177. package/src/components/layout/Sidebar/Sidebar.stories.tsx +0 -609
  178. package/src/components/layout/Sidebar/Sidebar.test.stories.tsx +0 -1324
  179. package/src/components/layout/Skeleton/Skeleton.stories.tsx +0 -689
  180. package/src/components/layout/Skeleton/Skeleton.test.stories.tsx +0 -521
  181. package/src/components/layout/Spacer/Spacer.stories.tsx +0 -502
  182. package/src/components/layout/Spacer/Spacer.test.stories.tsx +0 -472
  183. package/src/components/layout/TableFilter/TableFilter.stories.tsx +0 -82
  184. package/src/components/layout/TableFilter/TableFilter.test.stories.tsx +0 -87
  185. package/src/components/navigation/Breadcrumbs/Breadcrumbs.stories.tsx +0 -638
  186. package/src/components/navigation/Breadcrumbs/Breadcrumbs.test.stories.tsx +0 -1008
  187. package/src/components/navigation/CommandPalette/CommandPalette.stories.tsx +0 -386
  188. package/src/components/navigation/CommandPalette/CommandPalette.test.stories.tsx +0 -435
  189. package/src/components/navigation/ContextMenu/ContextMenu.stories.tsx +0 -614
  190. package/src/components/navigation/ContextMenu/ContextMenu.test.stories.tsx +0 -845
  191. package/src/components/navigation/DropdownMenu/DropdownMenu.stories.tsx +0 -578
  192. package/src/components/navigation/DropdownMenu/DropdownMenu.test.stories.tsx +0 -660
  193. package/src/components/navigation/NavigationMenu/stories/NavigationMenu.stories.tsx +0 -516
  194. package/src/components/navigation/NavigationMenu/stories/NavigationMenu.test.stories.tsx +0 -935
  195. package/src/components/navigation/NavigationMenu/stories/NavigationMenuHorizontal.stories.tsx +0 -501
  196. package/src/components/navigation/NavigationMenu/stories/NavigationMenuVertical.stories.tsx +0 -453
  197. package/src/components/navigation/Pagination/Pagination.stories.tsx +0 -602
  198. package/src/components/navigation/Pagination/Pagination.test.stories.tsx +0 -520
  199. package/src/components/navigation/Tabs/Tabs.stories.tsx +0 -1004
  200. package/src/components/navigation/Tabs/Tabs.test.stories.tsx +0 -1225
  201. package/src/components/typography/Blockquote/Blockquote.stories.tsx +0 -359
  202. package/src/components/typography/Blockquote/Blockquote.test.stories.tsx +0 -432
  203. package/src/components/typography/Code/Code.stories.tsx +0 -686
  204. package/src/components/typography/Code/Code.test.stories.tsx +0 -703
  205. package/src/components/typography/Heading/Heading.stories.tsx +0 -451
  206. package/src/components/typography/Heading/Heading.test.stories.tsx +0 -830
  207. package/src/components/typography/Paragraph/Paragraph.stories.tsx +0 -280
  208. package/src/components/typography/Paragraph/Paragraph.test.stories.tsx +0 -231
  209. package/src/components/typography/Text/Text.stories.tsx +0 -359
  210. package/src/components/typography/Text/Text.test.stories.tsx +0 -762
  211. package/src/components/utility/AnimatedIcon/AnimatedIcon.stories.tsx +0 -945
  212. package/src/components/utility/AnimatedIcon/AnimatedIcon.test.stories.tsx +0 -603
  213. package/src/components/utility/AspectRatio/AspectRatio.stories.tsx +0 -414
  214. package/src/components/utility/AspectRatio/AspectRatio.test.stories.tsx +0 -859
  215. package/src/components/utility/InfiniteScroll/InfiniteScroll.stories.tsx +0 -620
  216. package/src/components/utility/InfiniteScroll/InfiniteScroll.test.stories.tsx +0 -361
  217. package/src/components/utility/InstallPrompt/InstallPrompt.stories.tsx +0 -118
  218. package/src/components/utility/InstallPrompt/InstallPrompt.test.stories.tsx +0 -83
  219. package/src/components/utility/InstallPrompt/__tests__/InstallPrompt.ios.test.tsx +0 -65
  220. package/src/components/utility/InstallPrompt/__tests__/usePwaInstall.test.tsx +0 -271
  221. package/src/components/utility/Portal/Portal.stories.tsx +0 -340
  222. package/src/components/utility/Portal/Portal.test.stories.tsx +0 -2086
  223. package/src/components/utility/Transition/Transition.stories.tsx +0 -493
  224. package/src/components/utility/Transition/Transition.test.stories.tsx +0 -854
  225. package/src/components/utility/VirtualList/VirtualList.stories.tsx +0 -1073
  226. package/src/components/utility/VirtualList/VirtualList.test.stories.tsx +0 -1085
  227. package/src/components/utility/WorkflowStep/WorkflowStep.stories.tsx +0 -431
  228. package/src/components/utility/WorkflowStep/WorkflowStep.test.stories.tsx +0 -364
  229. /package/src/{button.tsx → button/button.tsx} +0 -0
@@ -1,871 +0,0 @@
1
- import { Alert,Box, Button, Paper, Stack, Typography } from '@mui/material';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import React from 'react';
4
-
5
- import { CodeEditor } from './CodeEditor';
6
- import type { EditorLanguage } from './CodeEditor.types';
7
-
8
- const meta: Meta<typeof CodeEditor> = {
9
- title: 'Enhanced/CodeEditor',
10
- component: CodeEditor,
11
- parameters: {
12
- layout: 'padded',
13
- docs: {
14
- description: {
15
- component:
16
- 'A powerful Monaco-based code editor with syntax highlighting, themes, and advanced features like auto-formatting, fullscreen mode, and live editing.',
17
- },
18
- },
19
- },
20
- tags: ['autodocs', 'component:CodeEditor'],
21
- argTypes: {
22
- language: {
23
- control: { type: 'select' },
24
- options: [
25
- 'javascript',
26
- 'typescript',
27
- 'json',
28
- 'css',
29
- 'html',
30
- 'yaml',
31
- 'markdown',
32
- 'sql',
33
- 'python',
34
- ],
35
- description: 'Programming language for syntax highlighting',
36
- },
37
- theme: {
38
- control: { type: 'select' },
39
- options: ['light', 'dark', 'auto'],
40
- description: 'Editor color theme',
41
- },
42
- height: {
43
- control: 'text',
44
- description: 'Height of the editor',
45
- },
46
- readOnly: {
47
- control: 'boolean',
48
- description: 'Makes editor read-only',
49
- },
50
- lineNumbers: {
51
- control: 'boolean',
52
- description: 'Show line numbers',
53
- },
54
- minimap: {
55
- control: 'boolean',
56
- description: 'Show minimap navigation',
57
- },
58
- fontSize: {
59
- control: { type: 'number', min: 10, max: 24 },
60
- description: 'Font size in pixels',
61
- },
62
- wordWrap: {
63
- control: 'boolean',
64
- description: 'Enable word wrapping',
65
- },
66
- showToolbar: {
67
- control: 'boolean',
68
- description: 'Show editor toolbar',
69
- },
70
- autoFormat: {
71
- control: 'boolean',
72
- description: 'Auto-format code on load',
73
- },
74
- },
75
- };
76
-
77
- export default meta;
78
- type Story = StoryObj<typeof meta>;
79
-
80
- // Sample code snippets for different languages
81
- const sampleCode = {
82
- javascript: `// JavaScript Example
83
- function fibonacci(n) {
84
- if (n <= 1) return n;
85
-
86
- const memo = [0, 1];
87
-
88
- for (let i = 2; i <= n; i++) {
89
- memo[i] = memo[i - 1] + memo[i - 2];
90
- }
91
-
92
- return memo[n];
93
- }
94
-
95
- // Test the function
96
-
97
-
98
- // ES6 Arrow Function
99
- const greet = (name = 'World') => {
100
- return \`Hello, \${name}!\`;
101
- };
102
-
103
- // Array methods
104
- const numbers = [1, 2, 3, 4, 5];
105
- const doubled = numbers.map(n => n * 2);
106
- const sum = numbers.reduce((acc, n) => acc + n, 0);`,
107
-
108
- typescript: `// TypeScript Example
109
- interface User {
110
- id: number;
111
- name: string;
112
- email: string;
113
- role: 'admin' | 'user' | 'guest';
114
- metadata?: Record<string, any>;
115
- }
116
-
117
- class UserService {
118
- private users: Map<number, User> = new Map();
119
-
120
- constructor(private apiUrl: string) {}
121
-
122
- async getUser(id: number): Promise<User | undefined> {
123
- if (this.users.has(id)) {
124
- return this.users.get(id);
125
- }
126
-
127
- const response = await fetch(\`\${this.apiUrl}/users/\${id}\`);
128
- const user = await response.json() as User;
129
-
130
- this.users.set(id, user);
131
- return user;
132
- }
133
-
134
- updateUser(id: number, updates: Partial<User>): void {
135
- const existing = this.users.get(id);
136
- if (existing) {
137
- this.users.set(id, { ...existing, ...updates });
138
- }
139
- }
140
- }
141
-
142
- // Generic function
143
- function reverseArray<T>(arr: T[]): T[] {
144
- return [...arr].reverse();
145
- }`,
146
-
147
- json: `{
148
- "name": "procurement-ui",
149
- "version": "1.0.0",
150
- "description": "Modern UI component library",
151
- "main": "dist/index.js",
152
- "scripts": {
153
- "dev": "vite dev",
154
- "build": "tsc && vite build",
155
- "test": "jest",
156
- "lint": "eslint src --ext ts,tsx"
157
- },
158
- "dependencies": {
159
- "@mui/material": "^5.14.0",
160
- "react": "^18.2.0",
161
- "react-dom": "^18.2.0"
162
- },
163
- "devDependencies": {
164
- "@types/react": "^18.2.0",
165
- "typescript": "^5.0.0",
166
- "vite": "^4.0.0"
167
- },
168
- "repository": {
169
- "type": "git",
170
- "url": "https://github.com/example/procurement-ui"
171
- },
172
- "keywords": ["ui", "components", "react", "typescript"],
173
- "author": "Development Team",
174
- "license": "MIT"
175
- }`,
176
-
177
- css: `/* Modern CSS with Variables and Animations */
178
- :root {
179
- --primary-color: #667eea;
180
- --secondary-color: #764ba2;
181
- --text-color: #2d3748;
182
- --bg-color: #f7fafc;
183
- --border-radius: 8px;
184
- --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
185
- }
186
-
187
- .card {
188
- background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%);
189
- border-radius: var(--border-radius);
190
- padding: 2rem;
191
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
192
- transition: var(--transition);
193
- }
194
-
195
- .card:hover {
196
- transform: translateY(-4px);
197
- box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
198
- }
199
-
200
- @keyframes fadeIn {
201
- from {
202
- opacity: 0;
203
- transform: translateY(20px);
204
- }
205
- to {
206
- opacity: 1;
207
- transform: translateY(0);
208
- }
209
- }
210
-
211
- .animated {
212
- animation: fadeIn 0.5s ease-out forwards;
213
- }
214
-
215
- @media (max-width: 768px) {
216
- .card {
217
- padding: 1rem;
218
- }
219
- }`,
220
-
221
- html: `<!DOCTYPE html>
222
- <html lang="en">
223
- <head>
224
- <meta charset="UTF-8">
225
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
226
- <title>Modern Web App</title>
227
- <link rel="stylesheet" href="styles.css">
228
- </head>
229
- <body>
230
- <header class="navbar">
231
- <nav>
232
- <div class="logo">
233
- <img src="logo.svg" alt="Logo">
234
- </div>
235
- <ul class="nav-links">
236
- <li><a href="#home">Home</a></li>
237
- <li><a href="#features">Features</a></li>
238
- <li><a href="#about">About</a></li>
239
- <li><a href="#contact">Contact</a></li>
240
- </ul>
241
- </nav>
242
- </header>
243
-
244
- <main>
245
- <section id="hero" class="hero-section">
246
- <div class="container">
247
- <h1>Welcome to Our Platform</h1>
248
- <p>Build amazing things with modern tools</p>
249
- <button class="cta-button">Get Started</button>
250
- </div>
251
- </section>
252
-
253
- <section id="features">
254
- <div class="feature-grid">
255
- <article class="feature-card">
256
- <h3>Fast Performance</h3>
257
- <p>Lightning-fast load times and smooth interactions</p>
258
- </article>
259
- </div>
260
- </section>
261
- </main>
262
-
263
- <script src="app.js"></script>
264
- </body>
265
- </html>`,
266
-
267
- python: `# Python Example with Classes and Decorators
268
- import time
269
- from typing import List, Dict, Optional
270
- from functools import wraps
271
-
272
- def timer(func):
273
- """Decorator to measure function execution time"""
274
- @wraps(func)
275
- def wrapper(*args, **kwargs):
276
- start = time.time()
277
- result = func(*args, **kwargs)
278
- end = time.time()
279
- print(f"{func.__name__} took {end - start:.4f} seconds")
280
- return result
281
- return wrapper
282
-
283
- class DataProcessor:
284
- """Process and analyze data with various algorithms"""
285
-
286
- def __init__(self, data: List[int]):
287
- self.data = data
288
- self._cache: Dict[str, any] = {}
289
-
290
- @timer
291
- def calculate_statistics(self) -> Dict[str, float]:
292
- """Calculate basic statistics for the dataset"""
293
- if 'stats' in self._cache:
294
- return self._cache['stats']
295
-
296
- stats = {
297
- 'mean': sum(self.data) / len(self.data),
298
- 'min': min(self.data),
299
- 'max': max(self.data),
300
- 'median': self._calculate_median(),
301
- }
302
-
303
- self._cache['stats'] = stats
304
- return stats
305
-
306
- def _calculate_median(self) -> float:
307
- """Calculate median value"""
308
- sorted_data = sorted(self.data)
309
- n = len(sorted_data)
310
-
311
- if n % 2 == 0:
312
- return (sorted_data[n//2 - 1] + sorted_data[n//2]) / 2
313
- return sorted_data[n//2]
314
-
315
- # Example usage
316
- if __name__ == "__main__":
317
- processor = DataProcessor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
318
- stats = processor.calculate_statistics()
319
- print(f"Statistics: {stats}")`,
320
-
321
- sql: `-- SQL Example with Complex Queries
322
- -- Create tables for an e-commerce system
323
-
324
- CREATE TABLE users (
325
- id SERIAL PRIMARY KEY,
326
- username VARCHAR(50) UNIQUE NOT NULL,
327
- email VARCHAR(100) UNIQUE NOT NULL,
328
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
329
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
330
- );
331
-
332
- CREATE TABLE products (
333
- id SERIAL PRIMARY KEY,
334
- name VARCHAR(200) NOT NULL,
335
- description TEXT,
336
- price DECIMAL(10, 2) NOT NULL,
337
- stock_quantity INTEGER DEFAULT 0,
338
- category_id INTEGER REFERENCES categories(id),
339
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
340
- );
341
-
342
- CREATE TABLE orders (
343
- id SERIAL PRIMARY KEY,
344
- user_id INTEGER REFERENCES users(id),
345
- total_amount DECIMAL(10, 2) NOT NULL,
346
- status VARCHAR(20) DEFAULT 'pending',
347
- order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
348
- );
349
-
350
- -- Complex query with JOIN and aggregation
351
- WITH monthly_sales AS (
352
- SELECT
353
- DATE_TRUNC('month', o.order_date) as month,
354
- p.category_id,
355
- SUM(oi.quantity * oi.price) as revenue,
356
- COUNT(DISTINCT o.user_id) as unique_customers
357
- FROM orders o
358
- JOIN order_items oi ON o.id = oi.order_id
359
- JOIN products p ON oi.product_id = p.id
360
- WHERE o.status = 'completed'
361
- GROUP BY DATE_TRUNC('month', o.order_date), p.category_id
362
- )
363
- SELECT
364
- month,
365
- c.name as category,
366
- revenue,
367
- unique_customers,
368
- RANK() OVER (PARTITION BY month ORDER BY revenue DESC) as revenue_rank
369
- FROM monthly_sales ms
370
- JOIN categories c ON ms.category_id = c.id
371
- ORDER BY month DESC, revenue DESC;`,
372
-
373
- yaml: `# YAML Configuration Example
374
- apiVersion: v1
375
- kind: Service
376
- metadata:
377
- name: procurement-api
378
- namespace: production
379
- labels:
380
- app: procurement
381
- tier: backend
382
- version: v1.0.0
383
-
384
- spec:
385
- type: LoadBalancer
386
- selector:
387
- app: procurement
388
- tier: backend
389
- ports:
390
- - name: http
391
- port: 80
392
- targetPort: 8080
393
- protocol: TCP
394
- - name: https
395
- port: 443
396
- targetPort: 8443
397
- protocol: TCP
398
-
399
- ---
400
-
401
- apiVersion: apps/v1
402
- kind: Deployment
403
- metadata:
404
- name: procurement-api
405
- namespace: production
406
-
407
- spec:
408
- replicas: 3
409
- strategy:
410
- type: RollingUpdate
411
- rollingUpdate:
412
- maxSurge: 1
413
- maxUnavailable: 0
414
-
415
- selector:
416
- matchLabels:
417
- app: procurement
418
- tier: backend
419
-
420
- template:
421
- metadata:
422
- labels:
423
- app: procurement
424
- tier: backend
425
- spec:
426
- containers:
427
- - name: api
428
- image: procurement/api:1.0.0
429
- ports:
430
- - containerPort: 8080
431
- env:
432
- - name: DATABASE_URL
433
- valueFrom:
434
- secretKeyRef:
435
- name: db-secret
436
- key: url
437
- resources:
438
- requests:
439
- memory: "256Mi"
440
- cpu: "250m"
441
- limits:
442
- memory: "512Mi"
443
- cpu: "500m"`,
444
-
445
- markdown: `# Project Documentation
446
-
447
- ## Overview
448
-
449
- This is a **comprehensive guide** to our component library featuring:
450
-
451
- - 🚀 **Fast Performance** - Optimized for speed
452
- - 🎨 **Beautiful Design** - Modern and clean UI
453
- - 📱 **Responsive** - Works on all devices
454
- - ♿ **Accessible** - WCAG 2.1 compliant
455
-
456
- ## Installation
457
-
458
- \`\`\`bash
459
- npm install @company/ui-components
460
- # or
461
- yarn add @company/ui-components
462
- \`\`\`
463
-
464
- ## Quick Start
465
-
466
- Import and use components in your React application:
467
-
468
- \`\`\`jsx
469
- import { Button, Card, Dialog } from '@company/ui-components';
470
-
471
- function App() {
472
- return (
473
- <Card>
474
- <h1>Welcome</h1>
475
- <Button variant="primary">Get Started</Button>
476
- </Card>
477
- );
478
- }
479
- \`\`\`
480
-
481
- ## Features
482
-
483
- ### Component Library
484
-
485
- | Component | Status | Description |
486
- |-----------|--------|-------------|
487
- | Button | ✅ Stable | Interactive button with variants |
488
- | Card | ✅ Stable | Container for content |
489
- | Dialog | 🚧 Beta | Modal dialog component |
490
- | Table | 📋 Planned | Data table with sorting |
491
-
492
- ### Advanced Features
493
-
494
- 1. **Theming Support**
495
- - Light/Dark modes
496
- - Custom color schemes
497
- - Typography system
498
-
499
- 2. **Accessibility**
500
- - Keyboard navigation
501
- - Screen reader support
502
- - ARIA attributes
503
-
504
- > **Note:** All components are tested across modern browsers.
505
-
506
- ## API Reference
507
-
508
- ### Button Props
509
-
510
- - \`variant\`: 'primary' | 'secondary' | 'danger'
511
- - \`size\`: 'small' | 'medium' | 'large'
512
- - \`disabled\`: boolean
513
- - \`onClick\`: () => void
514
-
515
- ## Contributing
516
-
517
- Please read our [contributing guidelines](./CONTRIBUTING.md) before submitting PRs.
518
-
519
- ---
520
-
521
- *Last updated: January 2024*`,
522
- };
523
-
524
- export const Default: Story = {
525
- args: {
526
- language: 'javascript',
527
- value: sampleCode.javascript,
528
- height: '400px',
529
- showToolbar: true,
530
- lineNumbers: true,
531
- },
532
- };
533
-
534
- const AllLanguagesComponent = () => {
535
- const [activeLanguage, setActiveLanguage] = React.useState<EditorLanguage>('javascript');
536
-
537
- return (
538
- <Stack spacing={3}>
539
- <Stack direction="row" spacing={1} flexWrap="wrap">
540
- {Object.keys(sampleCode).map((lang) => (
541
- <Button
542
- key={lang}
543
- variant={activeLanguage === lang ? 'contained' : 'outlined'}
544
- size="small"
545
- onClick={() => setActiveLanguage(lang as EditorLanguage)}
546
- >
547
- {lang}
548
- </Button>
549
- ))}
550
- </Stack>
551
-
552
- <CodeEditor
553
- language={activeLanguage}
554
- value={sampleCode[activeLanguage as keyof typeof sampleCode]}
555
- height="500px"
556
- showToolbar={true}
557
- onChange={() => {
558
- /** do nothing */
559
- }}
560
- />
561
- </Stack>
562
- );
563
- };
564
-
565
- export const AllLanguages: Story = {
566
- render: () => <AllLanguagesComponent />,
567
- };
568
-
569
- export const DarkTheme: Story = {
570
- args: {
571
- language: 'typescript',
572
- value: sampleCode.typescript,
573
- theme: 'dark',
574
- height: '400px',
575
- showToolbar: true,
576
- },
577
- decorators: [
578
- (Story) => (
579
- <Box sx={{ bgcolor: '#1a1a1a', p: 3, borderRadius: 2 }}>
580
- <Story />
581
- </Box>
582
- ),
583
- ],
584
- };
585
-
586
- export const LightTheme: Story = {
587
- args: {
588
- language: 'css',
589
- value: sampleCode.css,
590
- theme: 'light',
591
- height: '400px',
592
- showToolbar: true,
593
- },
594
- };
595
-
596
- export const ReadOnlyMode: Story = {
597
- args: {
598
- language: 'json',
599
- value: sampleCode.json,
600
- readOnly: true,
601
- height: '400px',
602
- showToolbar: true,
603
- },
604
- render: (args) => (
605
- <Stack spacing={2}>
606
- <Alert severity="info">
607
- This editor is in read-only mode. Users can view and copy but cannot edit.
608
- </Alert>
609
- <CodeEditor {...args} />
610
- </Stack>
611
- ),
612
- };
613
-
614
- const LiveEditorComponent = () => {
615
- const [code, setCode] = React.useState(sampleCode.javascript);
616
- const [saved, setSaved] = React.useState(false);
617
-
618
- const handleSave = (value: string) => {
619
- setCode(value);
620
- setSaved(true);
621
- window.setTimeout(() => setSaved(false), 2000);
622
- };
623
-
624
- return (
625
- <Stack spacing={3}>
626
- <Typography variant="h6">Live Code Editor with Save</Typography>
627
- <Typography variant="body2" color="text.secondary">
628
- Edit the code below and press Ctrl+S (or Cmd+S) to save
629
- </Typography>
630
-
631
- {saved && <Alert severity="success">Code saved successfully!</Alert>}
632
-
633
- <CodeEditor
634
- language="javascript"
635
- value={code}
636
- onChange={setCode}
637
- onSave={handleSave}
638
- height="400px"
639
- showToolbar={true}
640
- autoFormat={false}
641
- />
642
-
643
- <Paper sx={{ p: 2, bgcolor: 'grey.50' }}>
644
- <Typography variant="subtitle2" gutterBottom>
645
- Code Length: {code.length} characters
646
- </Typography>
647
- <Typography variant="caption" color="text.secondary">
648
- Last modified: {new Date().toLocaleTimeString()}
649
- </Typography>
650
- </Paper>
651
- </Stack>
652
- );
653
- };
654
-
655
- export const LiveEditor: Story = {
656
- render: () => <LiveEditorComponent />,
657
- };
658
-
659
- export const WithMinimap: Story = {
660
- args: {
661
- language: 'typescript',
662
- value: sampleCode.typescript,
663
- height: '500px',
664
- minimap: true,
665
- showToolbar: true,
666
- },
667
- };
668
-
669
- const CustomFontSizeComponent = () => {
670
- const [fontSize, setFontSize] = React.useState(14);
671
-
672
- return (
673
- <Stack spacing={3}>
674
- <Stack direction="row" spacing={2} alignItems="center">
675
- <Typography>Font Size:</Typography>
676
- {[12, 14, 16, 18, 20].map((size) => (
677
- <Button
678
- key={size}
679
- variant={fontSize === size ? 'contained' : 'outlined'}
680
- size="small"
681
- onClick={() => setFontSize(size)}
682
- >
683
- {size}px
684
- </Button>
685
- ))}
686
- </Stack>
687
-
688
- <CodeEditor
689
- language="python"
690
- value={sampleCode.python}
691
- fontSize={fontSize}
692
- height="400px"
693
- showToolbar={true}
694
- />
695
- </Stack>
696
- );
697
- };
698
-
699
- export const CustomFontSize: Story = {
700
- render: () => <CustomFontSizeComponent />,
701
- };
702
-
703
- export const WithWordWrap: Story = {
704
- args: {
705
- language: 'html',
706
- value: sampleCode.html,
707
- wordWrap: true,
708
- height: '400px',
709
- showToolbar: true,
710
- },
711
- };
712
-
713
- export const NoToolbar: Story = {
714
- args: {
715
- language: 'sql',
716
- value: sampleCode.sql,
717
- showToolbar: false,
718
- height: '400px',
719
- },
720
- };
721
-
722
- export const WithPlaceholder: Story = {
723
- args: {
724
- language: 'javascript',
725
- value: '',
726
- placeholder: '// Start typing your JavaScript code here...',
727
- height: '300px',
728
- showToolbar: true,
729
- },
730
- };
731
-
732
- export const AutoFormat: Story = {
733
- render: () => {
734
- const unformattedCode = `function messy(a,b,c){if(a>b){return c}else{return a+b}}const x={name:"test",value:123,items:[1,2,3,4,5]};`;
735
-
736
- return (
737
- <Stack spacing={3}>
738
- <Alert severity="info">This editor will automatically format the code when it loads</Alert>
739
-
740
- <CodeEditor
741
- language="javascript"
742
- value={unformattedCode}
743
- autoFormat={true}
744
- height="300px"
745
- showToolbar={true}
746
- />
747
- </Stack>
748
- );
749
- },
750
- };
751
-
752
- export const ComparisonView: Story = {
753
- render: () => {
754
- const originalCode = sampleCode.javascript;
755
- const modifiedCode = sampleCode.typescript;
756
-
757
- return (
758
- <Stack spacing={3}>
759
- <Typography variant="h6">Code Comparison</Typography>
760
-
761
- <Box display="grid" gridTemplateColumns="1fr 1fr" gap={2}>
762
- <Stack spacing={1}>
763
- <Typography variant="subtitle2">Original (JavaScript)</Typography>
764
- <CodeEditor
765
- language="javascript"
766
- value={originalCode}
767
- height="400px"
768
- readOnly={true}
769
- showToolbar={false}
770
- />
771
- </Stack>
772
-
773
- <Stack spacing={1}>
774
- <Typography variant="subtitle2">Modified (TypeScript)</Typography>
775
- <CodeEditor
776
- language="typescript"
777
- value={modifiedCode}
778
- height="400px"
779
- readOnly={false}
780
- showToolbar={false}
781
- />
782
- </Stack>
783
- </Box>
784
- </Stack>
785
- );
786
- },
787
- };
788
-
789
- // Required story exports for validation
790
- export const AllVariants: Story = {
791
- render: () => (
792
- <Stack spacing={4}>
793
- <CodeEditor language="javascript" value="console.log('Default variant');" />
794
- <CodeEditor
795
- language="typescript"
796
- value="const message: string = 'TypeScript variant';"
797
- theme="dark"
798
- />
799
- <CodeEditor language="json" value='{"variant": "JSON with minimap"}' minimap />
800
- </Stack>
801
- ),
802
- };
803
-
804
- export const AllSizes: Story = {
805
- render: () => (
806
- <Stack spacing={4}>
807
- <CodeEditor language="javascript" value="// Small size" height="200px" fontSize={12} />
808
- <CodeEditor
809
- language="javascript"
810
- value="// Medium size (default)"
811
- height="400px"
812
- fontSize={14}
813
- />
814
- <CodeEditor language="javascript" value="// Large size" height="600px" fontSize={16} />
815
- </Stack>
816
- ),
817
- };
818
-
819
- export const AllStates: Story = {
820
- render: () => (
821
- <Stack spacing={4}>
822
- <CodeEditor language="javascript" value="// Normal state" />
823
- <CodeEditor language="javascript" value="// Read-only state" readOnly />
824
- <CodeEditor language="javascript" value="" placeholder="Empty state with placeholder" />
825
- </Stack>
826
- ),
827
- };
828
-
829
- const InteractiveComponent = () => {
830
- const [code1, setCode1] = React.useState('// Interactive editor 1');
831
- const [code2, setCode2] = React.useState('// Interactive editor 2');
832
-
833
- const handleSave = (value: string) => {
834
- // Handle save action
835
- setCode1(value);
836
- };
837
-
838
- return (
839
- <Stack spacing={4}>
840
- <CodeEditor language="javascript" value={code1} onChange={setCode1} onSave={handleSave} />
841
- <CodeEditor language="typescript" value={code2} onChange={setCode2} wordWrap autoFormat />
842
- </Stack>
843
- );
844
- };
845
-
846
- export const InteractiveStates: Story = {
847
- render: () => <InteractiveComponent />,
848
- };
849
-
850
- export const Responsive: Story = {
851
- parameters: {
852
- viewport: {
853
- viewports: {
854
- mobile: { name: 'Mobile', styles: { width: '375px', height: '667px' } },
855
- tablet: { name: 'Tablet', styles: { width: '768px', height: '1024px' } },
856
- desktop: { name: 'Desktop', styles: { width: '1200px', height: '800px' } },
857
- },
858
- },
859
- },
860
- render: () => (
861
- <CodeEditor
862
- language="javascript"
863
- value={`// Responsive code editor
864
- // This editor adapts to different screen sizes
865
- function responsiveFunction() {
866
- return 'Works on mobile, tablet, and desktop';
867
- }`}
868
- height="300px"
869
- />
870
- ),
871
- };