radtools 0.1.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 (133) hide show
  1. package/README.md +108 -0
  2. package/bin/radtools.js +5 -0
  3. package/dist/cli/index.js +427 -0
  4. package/package.json +55 -0
  5. package/templates/api-routes/assets/optimize/route.ts +94 -0
  6. package/templates/api-routes/assets/route.ts +159 -0
  7. package/templates/api-routes/components/create-folder/route.ts +55 -0
  8. package/templates/api-routes/components/route.ts +156 -0
  9. package/templates/api-routes/fonts/route.ts +96 -0
  10. package/templates/api-routes/fonts/upload/route.ts +79 -0
  11. package/templates/api-routes/read-css/route.ts +29 -0
  12. package/templates/api-routes/write-css/route.ts +423 -0
  13. package/templates/components/Rad_os/AppWindow.tsx +423 -0
  14. package/templates/components/Rad_os/MobileAppModal.tsx +76 -0
  15. package/templates/components/Rad_os/WindowTitleBar.tsx +290 -0
  16. package/templates/components/icons/Icon.tsx +224 -0
  17. package/templates/components/icons/README.md +85 -0
  18. package/templates/components/icons/index.ts +20 -0
  19. package/templates/components/icons.tsx +164 -0
  20. package/templates/components/ui/Accordion.tsx +268 -0
  21. package/templates/components/ui/Alert.tsx +111 -0
  22. package/templates/components/ui/Badge.tsx +87 -0
  23. package/templates/components/ui/Breadcrumbs.tsx +88 -0
  24. package/templates/components/ui/Button.tsx +249 -0
  25. package/templates/components/ui/Card.tsx +137 -0
  26. package/templates/components/ui/Checkbox.tsx +137 -0
  27. package/templates/components/ui/ContextMenu.tsx +220 -0
  28. package/templates/components/ui/Dialog.tsx +264 -0
  29. package/templates/components/ui/Divider.tsx +70 -0
  30. package/templates/components/ui/DropdownMenu.tsx +301 -0
  31. package/templates/components/ui/HelpPanel.tsx +119 -0
  32. package/templates/components/ui/Input.tsx +176 -0
  33. package/templates/components/ui/Popover.tsx +211 -0
  34. package/templates/components/ui/Progress.tsx +158 -0
  35. package/templates/components/ui/Select.tsx +134 -0
  36. package/templates/components/ui/Sheet.tsx +316 -0
  37. package/templates/components/ui/Slider.tsx +223 -0
  38. package/templates/components/ui/Switch.tsx +155 -0
  39. package/templates/components/ui/Tabs.tsx +253 -0
  40. package/templates/components/ui/Toast.tsx +192 -0
  41. package/templates/components/ui/Tooltip.tsx +129 -0
  42. package/templates/components/ui/hooks/useModalBehavior.ts +66 -0
  43. package/templates/components/ui/index.ts +84 -0
  44. package/templates/devtools/DevToolsPanel.tsx +261 -0
  45. package/templates/devtools/DevToolsProvider.tsx +43 -0
  46. package/templates/devtools/components/BreakpointIndicator.tsx +49 -0
  47. package/templates/devtools/components/ColorPicker.tsx +33 -0
  48. package/templates/devtools/components/ComponentsSecondaryNav.tsx +44 -0
  49. package/templates/devtools/components/ContextualFooter.tsx +56 -0
  50. package/templates/devtools/components/DraggablePanel.tsx +43 -0
  51. package/templates/devtools/components/PrimaryNavigationFooter.tsx +254 -0
  52. package/templates/devtools/components/SearchableColorDropdown.tsx +253 -0
  53. package/templates/devtools/components/SecondaryNavigation.tsx +36 -0
  54. package/templates/devtools/components/TokenDropdown.tsx +47 -0
  55. package/templates/devtools/components/TypographyFooter.tsx +145 -0
  56. package/templates/devtools/hooks/useMockState.ts +16 -0
  57. package/templates/devtools/index.ts +17 -0
  58. package/templates/devtools/lib/componentScanner.ts +78 -0
  59. package/templates/devtools/lib/cssParser.ts +465 -0
  60. package/templates/devtools/lib/searchIndexes.ts +45 -0
  61. package/templates/devtools/lib/selectorGenerator.ts +86 -0
  62. package/templates/devtools/store/index.ts +66 -0
  63. package/templates/devtools/store/slices/assetsSlice.ts +106 -0
  64. package/templates/devtools/store/slices/componentsSlice.ts +59 -0
  65. package/templates/devtools/store/slices/mockStatesSlice.ts +77 -0
  66. package/templates/devtools/store/slices/panelSlice.ts +17 -0
  67. package/templates/devtools/store/slices/typographySlice.ts +538 -0
  68. package/templates/devtools/store/slices/variablesSlice.ts +167 -0
  69. package/templates/devtools/tabs/AssetsTab/AssetGrid.tsx +76 -0
  70. package/templates/devtools/tabs/AssetsTab/FolderTree.tsx +53 -0
  71. package/templates/devtools/tabs/AssetsTab/UploadDropzone.tsx +76 -0
  72. package/templates/devtools/tabs/AssetsTab/index.tsx +182 -0
  73. package/templates/devtools/tabs/ComponentsTab/AddTabButton.tsx +63 -0
  74. package/templates/devtools/tabs/ComponentsTab/ComponentList.tsx +153 -0
  75. package/templates/devtools/tabs/ComponentsTab/DesignSystemTab.tsx +1515 -0
  76. package/templates/devtools/tabs/ComponentsTab/DynamicFolderTab.tsx +113 -0
  77. package/templates/devtools/tabs/ComponentsTab/PropDisplay.tsx +55 -0
  78. package/templates/devtools/tabs/ComponentsTab/index.tsx +167 -0
  79. package/templates/devtools/tabs/ComponentsTab/previews/.gitkeep +4 -0
  80. package/templates/devtools/tabs/ComponentsTab/previews/Rad_os.tsx +262 -0
  81. package/templates/devtools/tabs/ComponentsTab/tabConfig.ts +53 -0
  82. package/templates/devtools/tabs/MockStatesTab/index.tsx +29 -0
  83. package/templates/devtools/tabs/TypographyTab/FontManager.tsx +421 -0
  84. package/templates/devtools/tabs/TypographyTab/TypographyStylesDisplay.tsx +290 -0
  85. package/templates/devtools/tabs/TypographyTab/index.tsx +98 -0
  86. package/templates/devtools/tabs/VariablesTab/BaseColorEditor.tsx +267 -0
  87. package/templates/devtools/tabs/VariablesTab/BorderRadiusEditor.tsx +37 -0
  88. package/templates/devtools/tabs/VariablesTab/ColorModeSelector.tsx +235 -0
  89. package/templates/devtools/tabs/VariablesTab/index.tsx +100 -0
  90. package/templates/devtools/types/index.ts +99 -0
  91. package/templates/globals.css +574 -0
  92. package/templates/hooks/index.ts +1 -0
  93. package/templates/hooks/useWindowManager.ts +212 -0
  94. package/templates/public/assets/icons/avatar.svg +18 -0
  95. package/templates/public/assets/icons/checkmark-filled.svg +14 -0
  96. package/templates/public/assets/icons/checkmark.svg +14 -0
  97. package/templates/public/assets/icons/chevron-down.svg +14 -0
  98. package/templates/public/assets/icons/close.svg +14 -0
  99. package/templates/public/assets/icons/copy.svg +14 -0
  100. package/templates/public/assets/icons/download.svg +14 -0
  101. package/templates/public/assets/icons/expand.svg +31 -0
  102. package/templates/public/assets/icons/file-blank.svg +17 -0
  103. package/templates/public/assets/icons/file-image.svg +19 -0
  104. package/templates/public/assets/icons/file-written.svg +17 -0
  105. package/templates/public/assets/icons/folder-closed.svg +17 -0
  106. package/templates/public/assets/icons/folder-open.svg +17 -0
  107. package/templates/public/assets/icons/hamburger.svg +18 -0
  108. package/templates/public/assets/icons/home-outline.svg +28 -0
  109. package/templates/public/assets/icons/home.svg +30 -0
  110. package/templates/public/assets/icons/hourglass.svg +25 -0
  111. package/templates/public/assets/icons/information-circle.svg +14 -0
  112. package/templates/public/assets/icons/information.svg +17 -0
  113. package/templates/public/assets/icons/lightning.svg +14 -0
  114. package/templates/public/assets/icons/locked.svg +17 -0
  115. package/templates/public/assets/icons/not-allowed.svg +14 -0
  116. package/templates/public/assets/icons/plus.svg +5 -0
  117. package/templates/public/assets/icons/power-thin.svg +17 -0
  118. package/templates/public/assets/icons/power.svg +17 -0
  119. package/templates/public/assets/icons/question-block.svg +14 -0
  120. package/templates/public/assets/icons/question.svg +17 -0
  121. package/templates/public/assets/icons/refresh-block.svg +14 -0
  122. package/templates/public/assets/icons/refresh.svg +17 -0
  123. package/templates/public/assets/icons/save.svg +14 -0
  124. package/templates/public/assets/icons/search.svg +25 -0
  125. package/templates/public/assets/icons/settings.svg +14 -0
  126. package/templates/public/assets/icons/trash-full.svg +21 -0
  127. package/templates/public/assets/icons/trash-open.svg +23 -0
  128. package/templates/public/assets/icons/trash.svg +18 -0
  129. package/templates/public/assets/icons/unlocked.svg +17 -0
  130. package/templates/public/assets/icons/waring-triangle-filled.svg +17 -0
  131. package/templates/public/assets/icons/warning-triangle-filled-2.svg +30 -0
  132. package/templates/public/assets/icons/warning-triangle-lines.svg +29 -0
  133. package/templates/public/assets/icons/wrench.svg +17 -0
@@ -0,0 +1,212 @@
1
+ 'use client';
2
+
3
+ import { useState, useCallback, useMemo } from 'react';
4
+
5
+ // ============================================================================
6
+ // Types
7
+ // ============================================================================
8
+
9
+ interface WindowPosition {
10
+ x: number;
11
+ y: number;
12
+ }
13
+
14
+ interface WindowSize {
15
+ width: string;
16
+ height: string;
17
+ }
18
+
19
+ interface WindowState {
20
+ id: string;
21
+ isOpen: boolean;
22
+ isMinimized: boolean;
23
+ position: WindowPosition;
24
+ size: WindowSize;
25
+ zIndex: number;
26
+ }
27
+
28
+ interface WindowManagerState {
29
+ windows: Map<string, WindowState>;
30
+ topZIndex: number;
31
+ }
32
+
33
+ // ============================================================================
34
+ // Hook
35
+ // ============================================================================
36
+
37
+ /**
38
+ * Hook for managing window state in a desktop-like interface
39
+ *
40
+ * Provides:
41
+ * - Window open/close state
42
+ * - Position tracking
43
+ * - Size tracking
44
+ * - Z-index management for focus
45
+ *
46
+ * @example
47
+ * const { openWindow, closeWindow, focusWindow, getWindowState } = useWindowManager();
48
+ */
49
+ export function useWindowManager() {
50
+ const [state, setState] = useState<WindowManagerState>({
51
+ windows: new Map(),
52
+ topZIndex: 100,
53
+ });
54
+
55
+ // Get window state by ID
56
+ const getWindowState = useCallback((id: string): WindowState | undefined => {
57
+ return state.windows.get(id);
58
+ }, [state.windows]);
59
+
60
+ // Open a window
61
+ const openWindow = useCallback((
62
+ id: string,
63
+ options?: {
64
+ position?: WindowPosition;
65
+ size?: WindowSize;
66
+ }
67
+ ) => {
68
+ setState(prev => {
69
+ const newWindows = new Map(prev.windows);
70
+ const newZIndex = prev.topZIndex + 1;
71
+
72
+ newWindows.set(id, {
73
+ id,
74
+ isOpen: true,
75
+ isMinimized: false,
76
+ position: options?.position || { x: 100, y: 50 },
77
+ size: options?.size || { width: '900px', height: '700px' },
78
+ zIndex: newZIndex,
79
+ });
80
+
81
+ return {
82
+ windows: newWindows,
83
+ topZIndex: newZIndex,
84
+ };
85
+ });
86
+ }, []);
87
+
88
+ // Close a window
89
+ const closeWindow = useCallback((id: string) => {
90
+ setState(prev => {
91
+ const newWindows = new Map(prev.windows);
92
+ const windowState = newWindows.get(id);
93
+
94
+ if (windowState) {
95
+ newWindows.set(id, { ...windowState, isOpen: false });
96
+ }
97
+
98
+ return { ...prev, windows: newWindows };
99
+ });
100
+ }, []);
101
+
102
+ // Focus a window (bring to front)
103
+ const focusWindow = useCallback((id: string) => {
104
+ setState(prev => {
105
+ const newWindows = new Map(prev.windows);
106
+ const windowState = newWindows.get(id);
107
+
108
+ if (windowState) {
109
+ const newZIndex = prev.topZIndex + 1;
110
+ newWindows.set(id, { ...windowState, zIndex: newZIndex });
111
+ return { windows: newWindows, topZIndex: newZIndex };
112
+ }
113
+
114
+ return prev;
115
+ });
116
+ }, []);
117
+
118
+ // Update window position
119
+ const updateWindowPosition = useCallback((id: string, position: WindowPosition) => {
120
+ setState(prev => {
121
+ const newWindows = new Map(prev.windows);
122
+ const windowState = newWindows.get(id);
123
+
124
+ if (windowState) {
125
+ newWindows.set(id, { ...windowState, position });
126
+ } else {
127
+ // Auto-create window state if it doesn't exist
128
+ newWindows.set(id, {
129
+ id,
130
+ isOpen: true,
131
+ isMinimized: false,
132
+ position,
133
+ size: { width: '900px', height: '700px' },
134
+ zIndex: prev.topZIndex + 1,
135
+ });
136
+ return { windows: newWindows, topZIndex: prev.topZIndex + 1 };
137
+ }
138
+
139
+ return { ...prev, windows: newWindows };
140
+ });
141
+ }, []);
142
+
143
+ // Update window size
144
+ const updateWindowSize = useCallback((id: string, size: WindowSize) => {
145
+ setState(prev => {
146
+ const newWindows = new Map(prev.windows);
147
+ const windowState = newWindows.get(id);
148
+
149
+ if (windowState) {
150
+ newWindows.set(id, { ...windowState, size });
151
+ }
152
+
153
+ return { ...prev, windows: newWindows };
154
+ });
155
+ }, []);
156
+
157
+ // Minimize a window
158
+ const minimizeWindow = useCallback((id: string) => {
159
+ setState(prev => {
160
+ const newWindows = new Map(prev.windows);
161
+ const windowState = newWindows.get(id);
162
+
163
+ if (windowState) {
164
+ newWindows.set(id, { ...windowState, isMinimized: true });
165
+ }
166
+
167
+ return { ...prev, windows: newWindows };
168
+ });
169
+ }, []);
170
+
171
+ // Restore a minimized window
172
+ const restoreWindow = useCallback((id: string) => {
173
+ setState(prev => {
174
+ const newWindows = new Map(prev.windows);
175
+ const windowState = newWindows.get(id);
176
+
177
+ if (windowState) {
178
+ const newZIndex = prev.topZIndex + 1;
179
+ newWindows.set(id, { ...windowState, isMinimized: false, zIndex: newZIndex });
180
+ return { windows: newWindows, topZIndex: newZIndex };
181
+ }
182
+
183
+ return prev;
184
+ });
185
+ }, []);
186
+
187
+ // Check if window is open
188
+ const isWindowOpen = useCallback((id: string): boolean => {
189
+ const windowState = state.windows.get(id);
190
+ return windowState?.isOpen ?? false;
191
+ }, [state.windows]);
192
+
193
+ // Get all open windows
194
+ const openWindows = useMemo(() => {
195
+ return Array.from(state.windows.values()).filter(w => w.isOpen);
196
+ }, [state.windows]);
197
+
198
+ return {
199
+ getWindowState,
200
+ openWindow,
201
+ closeWindow,
202
+ focusWindow,
203
+ minimizeWindow,
204
+ restoreWindow,
205
+ updateWindowPosition,
206
+ updateWindowSize,
207
+ isWindowOpen,
208
+ openWindows,
209
+ };
210
+ }
211
+
212
+ export default useWindowManager;
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M13,3v-1H3v1h-1v10h1v1h3v-3h1v-1h-1v-2h-1v-4h1v-1h5v1h1v5h-1v2h-4v1h2v2h4v-1h1V3h-1Z"/>
14
+ <rect class="st0" x="8" y="6" width="1" height="1"/>
15
+ <rect class="st0" x="10" y="6" width="1" height="1"/>
16
+ </g>
17
+ </g>
18
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M14,6v-2h-1v-1h-1v-1h-2v-1h-4v1h-2v1h-1v1h-1v2h-1v4h1v2h1v1h1v1h2v1h4v-1h2v-1h1v-1h1v-2h1v-4h-1ZM3,9v-1h2v1h2v-1h1v-1h1v-1h1v-1h2v2h-1v1h-1v1h-1v1h-1v1h-1v1h-2v-1h-1v-1h-1v-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M13,4h-1v1h-1v1h-1v1h-1v1h-1v1h-1v1h-2v-1h-1v-1h-2v2h1v1h1v1h1v1h2v-1h1v-1h1v-1h1v-1h1v-1h1v-1h1v-1h1v-2h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M14,6h-1v1h-1v1h-1v1h-1v1h-1v1h-2v-1h-1v-1h-1v-1h-1v-1h-1v-1H1v2h1v1h1v1h1v1h1v1h1v1h1v1h2v-1h1v-1h1v-1h1v-1h1v-1h1v-1h1v-2h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M12,3h-1v1h-1v1h-1v1h-2v-1h-1v-1h-1v-1h-2v2h1v1h1v1h1v2h-1v1h-1v1h-1v2h2v-1h1v-1h1v-1h2v1h1v1h1v1h2v-2h-1v-1h-1v-1h-1v-2h1v-1h1v-1h1v-2h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M13,3H5v4h-3v7h9v-4h3V3h-1ZM10,11v2H3v-4h7v2ZM13,6v3h-2v-2h-5v-2h7v1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 20 24">
3
+ <defs>
4
+ <style>
5
+ .st0 {
6
+ fill: currentColor;
7
+ }
8
+ </style>
9
+ </defs>
10
+ <g id="Layer_1" shape-rendering="crispEdges">
11
+ <path class="st0" d="M11 0H9V2V4V6V8V10H7H5H3V12H5V14H7V16H9V18H11V16H13V14H15V12H17V10H15H13H11V8V6V4V2V0ZM0 24V22V20V18V16H2V18V20V22H4H6H8H10H12H14H16H18V20V18V16H20V18V20V22V24H18H16H14H12H10H8H6H4H2H0Z"/>
12
+ </g>
13
+ </svg>
14
+
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M13,2h-4v2h2v1h1v2h2V2h-1Z"/>
14
+ <rect class="st0" x="3" y="3" width="1" height="1"/>
15
+ <rect class="st0" x="5" y="3" width="1" height="1"/>
16
+ <rect class="st0" x="7" y="3" width="1" height="1"/>
17
+ <rect class="st0" x="3" y="5" width="1" height="1"/>
18
+ <rect class="st0" x="10" y="5" width="1" height="1"/>
19
+ <rect class="st0" x="9" y="6" width="1" height="1"/>
20
+ <rect class="st0" x="3" y="7" width="1" height="1"/>
21
+ <rect class="st0" x="12" y="8" width="1" height="1"/>
22
+ <rect class="st0" x="6" y="9" width="1" height="1"/>
23
+ <path class="st0" d="M4,10v-1h-2v5h5v-2h-2v-1h-1v-1Z"/>
24
+ <rect class="st0" x="5" y="10" width="1" height="1"/>
25
+ <rect class="st0" x="12" y="10" width="1" height="1"/>
26
+ <rect class="st0" x="8" y="12" width="1" height="1"/>
27
+ <rect class="st0" x="10" y="12" width="1" height="1"/>
28
+ <rect class="st0" x="12" y="12" width="1" height="1"/>
29
+ </g>
30
+ </g>
31
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <rect class="st0" x="11" y="3" width="1" height="1"/>
14
+ <path class="st0" d="M12,4v1h-2v-2h1v-1H3v12h10V4h-1ZM12,7v6H4V3h5v3h3v1Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M12,4v-1h-1v-1h-1v3h3v-1h-1Z"/>
14
+ <path class="st0" d="M11,6h-2V2H3v12h10V6h-2ZM5,5v-1h2v2h-2v-1ZM12,11v1H4v-3h1v-1h1v-1h1v1h1v1h1v-1h1v1h1v1h1v1Z"/>
15
+ <rect class="st0" x="7" y="9" width="1" height="1"/>
16
+ <rect class="st0" x="6" y="10" width="1" height="1"/>
17
+ </g>
18
+ </g>
19
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M12,4v-1h-1v-1h-1v3h3v-1h-1Z"/>
14
+ <path class="st0" d="M11,6h-2V2H3v12h10V6h-2ZM10,7h1v1h-6v-1h5ZM11,10h-6v-1h6v1ZM11,12h-6v-1h6v1ZM8,6h-3v-1h3v1Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M4,5h9v-1h-5v-1H2v3h1v-1h1Z"/>
14
+ <path class="st0" d="M13,6H3v1h-1v6h12v-7h-1Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M14,6H5v2h-1v2h-1v2h-1v1h10v-2h1v-2h1v-2h1v-1h-1Z"/>
14
+ <path class="st0" d="M2,10h1v-2h1v-2h1v-1h7v-1h-5v-1H1v9h1v-2Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M13,3H2v2h12v-2h-1Z"/>
14
+ <path class="st0" d="M12,7H2v2h12v-2h-2Z"/>
15
+ <path class="st0" d="M12,11H2v2h12v-2h-2Z"/>
16
+ </g>
17
+ </g>
18
+ </svg>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M5,4v1h1v-2h3v-1h-5v1h1v1Z"/>
14
+ <path class="st0" d="M12,4V1h-2v3h2Z"/>
15
+ <path class="st0" d="M4,4v-1h-1v2h1v-1Z"/>
16
+ <path class="st0" d="M14,5h-1v2h1v-2Z"/>
17
+ <path class="st0" d="M3,6v-1h-1v2h1v-1Z"/>
18
+ <path class="st0" d="M6,7h1v-2h-1v2Z"/>
19
+ <path class="st0" d="M2,7h-1v2h1v-2Z"/>
20
+ <path class="st0" d="M14,7v1h-6v-1h-1v2h8v-2h-1Z"/>
21
+ <path class="st0" d="M6,8v-1h-1v-2h-1v2h-1v2h-1v3h2v-3h1v3h2v-3h-1v-1Z"/>
22
+ <rect class="st0" x="8" y="10" width="1" height="1"/>
23
+ <rect class="st0" x="11" y="10" width="1" height="1"/>
24
+ <path class="st0" d="M14,11v-1h-1v2h1v-1Z"/>
25
+ <path class="st0" d="M13,13H1v1h14v-1h-2Z"/>
26
+ </g>
27
+ </g>
28
+ </svg>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M9,4v-1h-2v1h2Z"/>
14
+ <path class="st0" d="M5,5v-2h-2v3h1v-1h1Z"/>
15
+ <rect class="st0" x="6" y="4" width="1" height="1"/>
16
+ <rect class="st0" x="9" y="4" width="1" height="1"/>
17
+ <rect class="st0" x="5" y="5" width="1" height="1"/>
18
+ <rect class="st0" x="10" y="5" width="1" height="1"/>
19
+ <rect class="st0" x="4" y="6" width="1" height="1"/>
20
+ <rect class="st0" x="11" y="6" width="1" height="1"/>
21
+ <rect class="st0" x="3" y="7" width="1" height="1"/>
22
+ <rect class="st0" x="12" y="7" width="1" height="1"/>
23
+ <rect class="st0" x="2" y="8" width="1" height="1"/>
24
+ <path class="st0" d="M12,8h-1v-1h-1v-1h-1v-1h-2v1h-1v1h-1v1h-1v1h-1v5h4v-4h2v4h4v-5h-1v-1ZM6,12v1h-2v-2h2v1ZM12,12v1h-2v-2h2v1Z"/>
25
+ <rect class="st0" x="13" y="8" width="1" height="1"/>
26
+ <rect class="st0" x="1" y="9" width="1" height="1"/>
27
+ <rect class="st0" x="14" y="9" width="1" height="1"/>
28
+ </g>
29
+ </g>
30
+ </svg>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M11,2h-7v1h8v-1h-1Z"/>
14
+ <path class="st0" d="M7,6v-1h-1v-1h-1v3h1v-1h1Z"/>
15
+ <rect class="st0" x="7" y="6" width="1" height="1"/>
16
+ <rect class="st0" x="6" y="7" width="1" height="1"/>
17
+ <path class="st0" d="M8,9h1v-1h1v-1h1v-3h-1v1h-2v1h1v1h-1v1h-1v1h1Z"/>
18
+ <rect class="st0" x="6" y="9" width="1" height="1"/>
19
+ <rect class="st0" x="9" y="9" width="1" height="1"/>
20
+ <path class="st0" d="M5,11v2h1v-3h-1v1Z"/>
21
+ <path class="st0" d="M10,12v1h1v-3h-1v2Z"/>
22
+ <path class="st0" d="M10,14h-6v1h8v-1h-2Z"/>
23
+ </g>
24
+ </g>
25
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M13,6v-2h-1v-1h-2v-1h-4v1h-2v1h-1v2h-1v4h1v2h1v1h2v1h4v-1h2v-1h1v-2h1v-4h-1ZM7,5v-1h2v2h-2v-1ZM9,12h-2v-4h-1v-1h3v4h1v1h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M9,3v-1h-2v1h-1v1h1v1h2v-1h1v-1h-1Z"/>
14
+ <path class="st0" d="M9,12v-5h-3v1h1v6h3v-1h-1v-1Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M11,2h-4v1h-1v2h-1v2h-1v2h4v1h-1v2h-1v2h1v-1h1v-1h1v-1h1v-1h1v-1h1v-2h-3v-1h1v-1h1v-1h1v-2h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <g>
13
+ <path class="st0" d="M6,6v-2h1v-1h2v1h1v3h1V3h-1v-1h-4v1h-1v4h1v-1Z"/>
14
+ <path class="st0" d="M12,8H3v5h1v1h8v-1h1v-5h-1ZM8,13v-1h-1v-2h2v3h-1Z"/>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16">
3
+ <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: currentColor;
8
+ }
9
+ </style>
10
+ </defs>
11
+ <g id="Layer_1" shape-rendering="crispEdges">
12
+ <path class="st0" d="M14,6v-2h-1v-1h-1v-1h-2v-1h-4v1h-2v1h-1v1h-1v2h-1v4h1v2h1v1h1v1h2v1h4v-1h2v-1h1v-1h1v-2h1v-4h-1ZM11,12h-1v-1h-1v-1h-2v1h-1v1h-2v-2h1v-1h1v-2h-1v-1h-1v-2h2v1h1v1h2v-1h1v-1h2v2h-1v1h-1v2h1v1h1v2h-1Z"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2
+ <line x1="12" y1="5" x2="12" y2="19"></line>
3
+ <line x1="5" y1="12" x2="19" y2="12"></line>
4
+ </svg>
5
+