@icomponents/react 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 (117) hide show
  1. package/README.md +40 -0
  2. package/package.json +165 -0
  3. package/src/assets/custom/icon-dir.tsx +105 -0
  4. package/src/assets/custom/icon-layout-compact.tsx +84 -0
  5. package/src/assets/custom/icon-layout-default.tsx +48 -0
  6. package/src/assets/custom/icon-layout-full.tsx +68 -0
  7. package/src/assets/custom/icon-sidebar-floating.tsx +62 -0
  8. package/src/assets/custom/icon-sidebar-inset.tsx +53 -0
  9. package/src/assets/custom/icon-sidebar-sidebar.tsx +48 -0
  10. package/src/assets/custom/icon-theme-dark.tsx +36 -0
  11. package/src/assets/custom/icon-theme-light.tsx +35 -0
  12. package/src/assets/custom/icon-theme-system.tsx +113 -0
  13. package/src/components/admin-page-header.tsx +29 -0
  14. package/src/components/color-theme-switch.tsx +93 -0
  15. package/src/components/coming-soon.tsx +16 -0
  16. package/src/components/command-menu.tsx +98 -0
  17. package/src/components/config-drawer.tsx +401 -0
  18. package/src/components/confirm-dialog.dom.test.tsx +60 -0
  19. package/src/components/confirm-dialog.tsx +75 -0
  20. package/src/components/data-table/bulk-actions.tsx +193 -0
  21. package/src/components/data-table/column-header.tsx +66 -0
  22. package/src/components/data-table/data-table.dom.test.tsx +54 -0
  23. package/src/components/data-table/data-table.tsx +189 -0
  24. package/src/components/data-table/faceted-filter.tsx +156 -0
  25. package/src/components/data-table/index.ts +5 -0
  26. package/src/components/data-table/pagination.tsx +127 -0
  27. package/src/components/data-table/tanstack-table.d.ts +12 -0
  28. package/src/components/data-table/toolbar.tsx +88 -0
  29. package/src/components/data-table/view-options.tsx +49 -0
  30. package/src/components/date-picker.tsx +39 -0
  31. package/src/components/detail-card.tsx +63 -0
  32. package/src/components/language-switch.tsx +38 -0
  33. package/src/components/layout/app-sidebar.tsx +59 -0
  34. package/src/components/layout/app-title.tsx +62 -0
  35. package/src/components/layout/header.tsx +61 -0
  36. package/src/components/layout/main.tsx +34 -0
  37. package/src/components/layout/nav-group.tsx +185 -0
  38. package/src/components/layout/nav-user.tsx +115 -0
  39. package/src/components/layout/screen-header.tsx +119 -0
  40. package/src/components/layout/team-switcher.tsx +84 -0
  41. package/src/components/layout/top-nav.tsx +68 -0
  42. package/src/components/layout/types.ts +44 -0
  43. package/src/components/learn-more.tsx +35 -0
  44. package/src/components/long-text.tsx +80 -0
  45. package/src/components/navigation-progress.tsx +18 -0
  46. package/src/components/password-input.tsx +36 -0
  47. package/src/components/profile-dropdown.tsx +106 -0
  48. package/src/components/search.tsx +38 -0
  49. package/src/components/select-dropdown.tsx +62 -0
  50. package/src/components/sign-out-dialog.tsx +31 -0
  51. package/src/components/skip-to-main.tsx +10 -0
  52. package/src/components/stat-tile.tsx +56 -0
  53. package/src/components/status-badge.test.ts +23 -0
  54. package/src/components/status-badge.tsx +49 -0
  55. package/src/components/theme-switch.tsx +61 -0
  56. package/src/components/ui/alert-dialog.tsx +134 -0
  57. package/src/components/ui/alert.tsx +59 -0
  58. package/src/components/ui/avatar.tsx +38 -0
  59. package/src/components/ui/badge.tsx +39 -0
  60. package/src/components/ui/base-ui-state-attrs.dom.test.tsx +80 -0
  61. package/src/components/ui/button.tsx +51 -0
  62. package/src/components/ui/calendar.tsx +174 -0
  63. package/src/components/ui/card.tsx +74 -0
  64. package/src/components/ui/checkbox.tsx +26 -0
  65. package/src/components/ui/collapsible.tsx +18 -0
  66. package/src/components/ui/command.tsx +160 -0
  67. package/src/components/ui/dialog.tsx +129 -0
  68. package/src/components/ui/dropdown-menu.tsx +254 -0
  69. package/src/components/ui/form.tsx +155 -0
  70. package/src/components/ui/input-otp.tsx +67 -0
  71. package/src/components/ui/input.tsx +20 -0
  72. package/src/components/ui/label.tsx +21 -0
  73. package/src/components/ui/popover.tsx +54 -0
  74. package/src/components/ui/radio-group.tsx +37 -0
  75. package/src/components/ui/scroll-area.tsx +57 -0
  76. package/src/components/ui/select.tsx +213 -0
  77. package/src/components/ui/separator.tsx +23 -0
  78. package/src/components/ui/sheet.tsx +128 -0
  79. package/src/components/ui/sidebar.tsx +702 -0
  80. package/src/components/ui/skeleton.tsx +13 -0
  81. package/src/components/ui/sonner.tsx +26 -0
  82. package/src/components/ui/switch.tsx +25 -0
  83. package/src/components/ui/table.tsx +89 -0
  84. package/src/components/ui/tabs.tsx +51 -0
  85. package/src/components/ui/textarea.tsx +17 -0
  86. package/src/components/ui/tooltip.tsx +65 -0
  87. package/src/config/fonts.ts +2 -0
  88. package/src/context/direction-provider.tsx +61 -0
  89. package/src/context/font-provider.tsx +70 -0
  90. package/src/context/language-provider.tsx +73 -0
  91. package/src/context/layout-provider.tsx +81 -0
  92. package/src/context/search-provider.tsx +48 -0
  93. package/src/context/theme-provider.tsx +108 -0
  94. package/src/hooks/sort-url.test.ts +16 -0
  95. package/src/hooks/use-dialog-state.tsx +15 -0
  96. package/src/hooks/use-mobile.tsx +16 -0
  97. package/src/hooks/use-table-url-state.ts +243 -0
  98. package/src/i18n/common.ts +164 -0
  99. package/src/i18n/create-i18n.test.ts +50 -0
  100. package/src/i18n/create-i18n.ts +67 -0
  101. package/src/i18n/types.ts +22 -0
  102. package/src/i18n/use-translation.ts +6 -0
  103. package/src/lib/clipboard.test.ts +46 -0
  104. package/src/lib/clipboard.ts +29 -0
  105. package/src/lib/cookies.ts +39 -0
  106. package/src/lib/format-cell.test.ts +57 -0
  107. package/src/lib/format-cell.ts +63 -0
  108. package/src/lib/handle-server-error.test.ts +85 -0
  109. package/src/lib/handle-server-error.ts +39 -0
  110. package/src/lib/random-id.ts +13 -0
  111. package/src/lib/show-submitted-data.tsx +14 -0
  112. package/src/lib/utils.test.ts +35 -0
  113. package/src/lib/utils.ts +78 -0
  114. package/src/secure-context.contract.test.ts +63 -0
  115. package/src/testids.contract.test.ts +113 -0
  116. package/src/testids.ts +8 -0
  117. package/src/theme-contract.test.ts +72 -0
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ > ⚠️ **Ядро шаблона.** В продукте этот пакет **перезаписывается целиком** (`scripts/sync-core.sh`):
2
+ > локальная правка здесь будет затёрта следующим синком. Расширяй через **швы** (каталог прав, список
3
+ > шрифтов, резолвер), а полезное — портируй в шаблон, чтобы это получили все продукты. Политика и
4
+ > процедура: [`docs/engineering/core-modules.md`](../../docs/engineering/core-modules.md).
5
+
6
+ # @stack/ui
7
+
8
+ The design system: shared shadcn-based primitives plus the admin ("Evoca") theme components and the app shell, consumed by every UI slice and `apps/web`.
9
+
10
+ ## What it is / responsibility
11
+
12
+ An infra/presentation package. It holds the shadcn/Radix UI primitives, the higher-level admin components (status pill / detail card / KPI tile) built on semantic theme tokens, the layout shell (sidebar / header / nav), React context providers (theme/font/layout/direction/search), hooks, and low-level utils. No feature domain and no server code — pure client building blocks. Shape: `exports: "./*"` maps directly onto `src/*`, so there is no barrel; each module is imported by its subpath.
13
+
14
+ ## Public surface (`package.json` `exports` = `./*` → `src/*`)
15
+
16
+ Imported by path, e.g.:
17
+
18
+ - `@stack/ui/lib/utils` — `cn`, `sleep`, `getPageNumbers`, `getDisplayNameInitials`.
19
+ - `@stack/ui/components/status-badge` — `StatusBadge` + `StatusTone` (semantic tones: success/info/neutral/warning/danger/muted).
20
+ - `@stack/ui/components/detail-card` — `DetailCard`, `DetailRow`.
21
+ - `@stack/ui/components/stat-tile` — `StatTile`.
22
+ - `@stack/ui/components/ui/*` — shadcn primitives (`button`, `dialog`, `table`, `form`, `select`, `sidebar`, `sonner`, …).
23
+ - `@stack/ui/components/layout/*` — `header`, `main`, `app-sidebar`, `nav-*`.
24
+ - `@stack/ui/context/*` — `theme-provider`, `font-provider`, `layout-provider`, `direction-provider`, `search-provider`.
25
+ - `@stack/ui/components/data-table/*`, `@stack/ui/hooks/*`.
26
+
27
+ ## Structure (`src/`)
28
+
29
+ - `components/ui/` — shadcn/Radix primitives.
30
+ - `components/` — admin composites (`status-badge`, `detail-card`, `stat-tile`, `data-table/`, `command-menu`, `confirm-dialog`, `password-input`, …).
31
+ - `components/layout/` — the app shell (sidebar/header/nav).
32
+ - `context/`, `hooks/`, `config/fonts`, `assets/custom/` (layout/theme icons), `lib/` (`utils`, `cookies`, `format-cell`, `handle-server-error`).
33
+
34
+ ## Depends on
35
+
36
+ `@radix-ui/*`, `class-variance-authority`, `clsx`, `tailwind-merge`, `cmdk`, `lucide-react`, `date-fns`, `sonner`, `react-hook-form`, `input-otp`, `react-day-picker`, `react-top-loading-bar`, `tw-animate-css`; peer: `react`, `react-dom`, `@tanstack/react-router`, `@tanstack/react-table`.
37
+
38
+ ## Consumed by / how to use
39
+
40
+ Imported as `@stack/ui/<path>` by every UI-bearing slice (`account`, `audit`, `roles-matrix`, `tenants`, `tenant-users`, `token-inspector`) and by `apps/web`. Tailwind theme tokens (success/warning/destructive/primary/…) are defined by the consuming app; these components only reference them.
package/package.json ADDED
@@ -0,0 +1,165 @@
1
+ {
2
+ "name": "@icomponents/react",
3
+ "version": "0.1.0",
4
+ "description": "Кит компонентов для веба: shadcn по форме на Base UI, оболочка, темизация, контракт testid",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "src"
12
+ ],
13
+ "exports": {
14
+ "./assets/custom/icon-dir": "./src/assets/custom/icon-dir.tsx",
15
+ "./assets/custom/icon-layout-compact": "./src/assets/custom/icon-layout-compact.tsx",
16
+ "./assets/custom/icon-layout-default": "./src/assets/custom/icon-layout-default.tsx",
17
+ "./assets/custom/icon-layout-full": "./src/assets/custom/icon-layout-full.tsx",
18
+ "./assets/custom/icon-sidebar-floating": "./src/assets/custom/icon-sidebar-floating.tsx",
19
+ "./assets/custom/icon-sidebar-inset": "./src/assets/custom/icon-sidebar-inset.tsx",
20
+ "./assets/custom/icon-sidebar-sidebar": "./src/assets/custom/icon-sidebar-sidebar.tsx",
21
+ "./assets/custom/icon-theme-dark": "./src/assets/custom/icon-theme-dark.tsx",
22
+ "./assets/custom/icon-theme-light": "./src/assets/custom/icon-theme-light.tsx",
23
+ "./assets/custom/icon-theme-system": "./src/assets/custom/icon-theme-system.tsx",
24
+ "./components/admin-page-header": "./src/components/admin-page-header.tsx",
25
+ "./components/color-theme-switch": "./src/components/color-theme-switch.tsx",
26
+ "./components/coming-soon": "./src/components/coming-soon.tsx",
27
+ "./components/command-menu": "./src/components/command-menu.tsx",
28
+ "./components/config-drawer": "./src/components/config-drawer.tsx",
29
+ "./components/confirm-dialog": "./src/components/confirm-dialog.tsx",
30
+ "./components/data-table/bulk-actions": "./src/components/data-table/bulk-actions.tsx",
31
+ "./components/data-table/column-header": "./src/components/data-table/column-header.tsx",
32
+ "./components/data-table/data-table": "./src/components/data-table/data-table.tsx",
33
+ "./components/data-table/faceted-filter": "./src/components/data-table/faceted-filter.tsx",
34
+ "./components/data-table/index": "./src/components/data-table/index.ts",
35
+ "./components/data-table/pagination": "./src/components/data-table/pagination.tsx",
36
+ "./components/data-table/tanstack-table.d": "./src/components/data-table/tanstack-table.d.ts",
37
+ "./components/data-table/toolbar": "./src/components/data-table/toolbar.tsx",
38
+ "./components/data-table/view-options": "./src/components/data-table/view-options.tsx",
39
+ "./components/date-picker": "./src/components/date-picker.tsx",
40
+ "./components/detail-card": "./src/components/detail-card.tsx",
41
+ "./components/language-switch": "./src/components/language-switch.tsx",
42
+ "./components/layout/app-sidebar": "./src/components/layout/app-sidebar.tsx",
43
+ "./components/layout/app-title": "./src/components/layout/app-title.tsx",
44
+ "./components/layout/header": "./src/components/layout/header.tsx",
45
+ "./components/layout/main": "./src/components/layout/main.tsx",
46
+ "./components/layout/nav-group": "./src/components/layout/nav-group.tsx",
47
+ "./components/layout/nav-user": "./src/components/layout/nav-user.tsx",
48
+ "./components/layout/screen-header": "./src/components/layout/screen-header.tsx",
49
+ "./components/layout/team-switcher": "./src/components/layout/team-switcher.tsx",
50
+ "./components/layout/top-nav": "./src/components/layout/top-nav.tsx",
51
+ "./components/layout/types": "./src/components/layout/types.ts",
52
+ "./components/learn-more": "./src/components/learn-more.tsx",
53
+ "./components/long-text": "./src/components/long-text.tsx",
54
+ "./components/navigation-progress": "./src/components/navigation-progress.tsx",
55
+ "./components/password-input": "./src/components/password-input.tsx",
56
+ "./components/profile-dropdown": "./src/components/profile-dropdown.tsx",
57
+ "./components/search": "./src/components/search.tsx",
58
+ "./components/select-dropdown": "./src/components/select-dropdown.tsx",
59
+ "./components/sign-out-dialog": "./src/components/sign-out-dialog.tsx",
60
+ "./components/skip-to-main": "./src/components/skip-to-main.tsx",
61
+ "./components/stat-tile": "./src/components/stat-tile.tsx",
62
+ "./components/status-badge": "./src/components/status-badge.tsx",
63
+ "./components/theme-switch": "./src/components/theme-switch.tsx",
64
+ "./components/ui/alert-dialog": "./src/components/ui/alert-dialog.tsx",
65
+ "./components/ui/alert": "./src/components/ui/alert.tsx",
66
+ "./components/ui/avatar": "./src/components/ui/avatar.tsx",
67
+ "./components/ui/badge": "./src/components/ui/badge.tsx",
68
+ "./components/ui/button": "./src/components/ui/button.tsx",
69
+ "./components/ui/calendar": "./src/components/ui/calendar.tsx",
70
+ "./components/ui/card": "./src/components/ui/card.tsx",
71
+ "./components/ui/checkbox": "./src/components/ui/checkbox.tsx",
72
+ "./components/ui/collapsible": "./src/components/ui/collapsible.tsx",
73
+ "./components/ui/command": "./src/components/ui/command.tsx",
74
+ "./components/ui/dialog": "./src/components/ui/dialog.tsx",
75
+ "./components/ui/dropdown-menu": "./src/components/ui/dropdown-menu.tsx",
76
+ "./components/ui/form": "./src/components/ui/form.tsx",
77
+ "./components/ui/input-otp": "./src/components/ui/input-otp.tsx",
78
+ "./components/ui/input": "./src/components/ui/input.tsx",
79
+ "./components/ui/label": "./src/components/ui/label.tsx",
80
+ "./components/ui/popover": "./src/components/ui/popover.tsx",
81
+ "./components/ui/radio-group": "./src/components/ui/radio-group.tsx",
82
+ "./components/ui/scroll-area": "./src/components/ui/scroll-area.tsx",
83
+ "./components/ui/select": "./src/components/ui/select.tsx",
84
+ "./components/ui/separator": "./src/components/ui/separator.tsx",
85
+ "./components/ui/sheet": "./src/components/ui/sheet.tsx",
86
+ "./components/ui/sidebar": "./src/components/ui/sidebar.tsx",
87
+ "./components/ui/skeleton": "./src/components/ui/skeleton.tsx",
88
+ "./components/ui/sonner": "./src/components/ui/sonner.tsx",
89
+ "./components/ui/switch": "./src/components/ui/switch.tsx",
90
+ "./components/ui/table": "./src/components/ui/table.tsx",
91
+ "./components/ui/tabs": "./src/components/ui/tabs.tsx",
92
+ "./components/ui/textarea": "./src/components/ui/textarea.tsx",
93
+ "./components/ui/tooltip": "./src/components/ui/tooltip.tsx",
94
+ "./config/fonts": "./src/config/fonts.ts",
95
+ "./context/direction-provider": "./src/context/direction-provider.tsx",
96
+ "./context/font-provider": "./src/context/font-provider.tsx",
97
+ "./context/language-provider": "./src/context/language-provider.tsx",
98
+ "./context/layout-provider": "./src/context/layout-provider.tsx",
99
+ "./context/search-provider": "./src/context/search-provider.tsx",
100
+ "./context/theme-provider": "./src/context/theme-provider.tsx",
101
+ "./hooks/use-dialog-state": "./src/hooks/use-dialog-state.tsx",
102
+ "./hooks/use-mobile": "./src/hooks/use-mobile.tsx",
103
+ "./hooks/use-table-url-state": "./src/hooks/use-table-url-state.ts",
104
+ "./i18n/common": "./src/i18n/common.ts",
105
+ "./i18n/create-i18n": "./src/i18n/create-i18n.ts",
106
+ "./i18n/types": "./src/i18n/types.ts",
107
+ "./i18n/use-translation": "./src/i18n/use-translation.ts",
108
+ "./lib/clipboard": "./src/lib/clipboard.ts",
109
+ "./lib/cookies": "./src/lib/cookies.ts",
110
+ "./lib/format-cell": "./src/lib/format-cell.ts",
111
+ "./lib/handle-server-error": "./src/lib/handle-server-error.ts",
112
+ "./lib/random-id": "./src/lib/random-id.ts",
113
+ "./lib/show-submitted-data": "./src/lib/show-submitted-data.tsx",
114
+ "./lib/utils": "./src/lib/utils.ts",
115
+ "./testids": "./src/testids.ts",
116
+ "./assets/*": "./src/assets/*"
117
+ },
118
+ "scripts": {
119
+ "type-check": "bunx tsc --noEmit",
120
+ "test": "bun test",
121
+ "prepack": "bun scripts/gen-exports.mjs"
122
+ },
123
+ "dependencies": {
124
+ "@base-ui/react": "^1.6.0",
125
+ "@icomponents/tokens": "workspace:*",
126
+ "@radix-ui/react-icons": "^1.3.2",
127
+ "class-variance-authority": "^0.7.1",
128
+ "clsx": "^2.1.1",
129
+ "cmdk": "^1.1.1",
130
+ "date-fns": "^4.4.0",
131
+ "i18next": "^26.3.6",
132
+ "input-otp": "^1.4.2",
133
+ "lucide-react": "^1.28.0",
134
+ "react-day-picker": "^9.14.0",
135
+ "react-hook-form": "^7.83.0",
136
+ "react-i18next": "^17.0.10",
137
+ "react-top-loading-bar": "^3.0.2",
138
+ "sonner": "^2.0.7",
139
+ "tailwind-merge": "^3.6.0",
140
+ "tw-animate-css": "^1.4.0"
141
+ },
142
+ "peerDependencies": {
143
+ "@tanstack/react-router": ">=1.170.0",
144
+ "@tanstack/react-table": ">=8.21.0",
145
+ "react": ">=19",
146
+ "react-dom": ">=19"
147
+ },
148
+ "devDependencies": {
149
+ "@happy-dom/global-registrator": "^20.10.6",
150
+ "@icomponents/typescript-config": "workspace:*",
151
+ "@tanstack/react-router": "^1.170.18",
152
+ "@tanstack/react-table": "^8.21.3",
153
+ "@testing-library/dom": "^10.4.1",
154
+ "@testing-library/react": "^16.3.2",
155
+ "@testing-library/user-event": "^14.6.1",
156
+ "@types/bun": "latest",
157
+ "@types/node": "latest",
158
+ "@types/react": "^19.2.0",
159
+ "@types/react-dom": "^19.2.0",
160
+ "happy-dom": "^20.10.6",
161
+ "react": "^19.2.7",
162
+ "react-dom": "^19.2.7",
163
+ "typescript": "latest"
164
+ }
165
+ }
@@ -0,0 +1,105 @@
1
+ import { type Direction } from "@icomponents/react/context/direction-provider";
2
+ import { cn } from "@icomponents/react/lib/utils";
3
+ import { type SVGProps } from "react";
4
+
5
+ type IconDirProps = SVGProps<SVGSVGElement> & {
6
+ dir: Direction;
7
+ };
8
+
9
+ export function IconDir({ dir, className, ...props }: IconDirProps) {
10
+ return (
11
+ <svg
12
+ data-name={`icon-dir-${dir}`}
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ viewBox="0 0 79.86 51.14"
15
+ className={cn(dir === "rtl" && "rotate-y-180", className)}
16
+ {...props}
17
+ >
18
+ <path
19
+ d="M23.42.51h51.92c2.21 0 4 1.79 4 4v42.18c0 2.21-1.79 4-4 4H23.42s-.04-.02-.04-.04V.55s.02-.04.04-.04z"
20
+ opacity={0.15}
21
+ />
22
+ <path
23
+ fill="none"
24
+ opacity={0.72}
25
+ strokeLinecap="round"
26
+ strokeMiterlimit={10}
27
+ strokeWidth="2px"
28
+ d="M5.56 14.88L17.78 14.88"
29
+ />
30
+ <path
31
+ fill="none"
32
+ opacity={0.48}
33
+ strokeLinecap="round"
34
+ strokeMiterlimit={10}
35
+ strokeWidth="2px"
36
+ d="M5.56 22.09L16.08 22.09"
37
+ />
38
+ <path
39
+ fill="none"
40
+ opacity={0.55}
41
+ strokeLinecap="round"
42
+ strokeMiterlimit={10}
43
+ strokeWidth="2px"
44
+ d="M5.56 18.38L14.93 18.38"
45
+ />
46
+ <g strokeLinecap="round" strokeMiterlimit={10}>
47
+ <circle cx={7.51} cy={7.4} r={2.54} opacity={0.8} />
48
+ <path fill="none" opacity={0.8} strokeWidth="2px" d="M12.06 6.14L17.78 6.14" />
49
+ <path fill="none" opacity={0.6} d="M11.85 8.79L16.91 8.79" />
50
+ </g>
51
+ <path
52
+ fill="none"
53
+ opacity={0.62}
54
+ strokeLinecap="round"
55
+ strokeMiterlimit={10}
56
+ strokeWidth="3px"
57
+ d="M29.41 7.4L34.67 7.4"
58
+ />
59
+ <rect
60
+ x={28.76}
61
+ y={11.21}
62
+ width={26.03}
63
+ height={2.73}
64
+ rx={0.64}
65
+ ry={0.64}
66
+ opacity={0.44}
67
+ strokeLinecap="round"
68
+ strokeMiterlimit={10}
69
+ />
70
+ <rect
71
+ x={28.76}
72
+ y={17.01}
73
+ width={44.25}
74
+ height={13.48}
75
+ rx={0.64}
76
+ ry={0.64}
77
+ opacity={0.3}
78
+ strokeLinecap="round"
79
+ strokeMiterlimit={10}
80
+ />
81
+ <rect
82
+ x={28.76}
83
+ y={33.57}
84
+ width={44.25}
85
+ height={4.67}
86
+ rx={0.64}
87
+ ry={0.64}
88
+ opacity={0.21}
89
+ strokeLinecap="round"
90
+ strokeMiterlimit={10}
91
+ />
92
+ <rect
93
+ x={28.76}
94
+ y={41.32}
95
+ width={36.21}
96
+ height={4.67}
97
+ rx={0.64}
98
+ ry={0.64}
99
+ opacity={0.3}
100
+ strokeLinecap="round"
101
+ strokeMiterlimit={10}
102
+ />
103
+ </svg>
104
+ );
105
+ }
@@ -0,0 +1,84 @@
1
+ import { type SVGProps } from "react";
2
+
3
+ export function IconLayoutCompact(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ data-name="icon-layout-compact"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 79.86 51.14"
9
+ {...props}
10
+ >
11
+ <rect
12
+ x={5.84}
13
+ y={5.2}
14
+ width={4}
15
+ height={40}
16
+ rx={2}
17
+ ry={2}
18
+ strokeLinecap="round"
19
+ strokeMiterlimit={10}
20
+ />
21
+ <g stroke="#fff" strokeLinecap="round" strokeMiterlimit={10}>
22
+ <path fill="none" opacity={0.66} strokeWidth="2px" d="M7.26 11.56L8.37 11.56" />
23
+ <path fill="none" opacity={0.51} strokeWidth="2px" d="M7.26 14.49L8.37 14.49" />
24
+ <path fill="none" opacity={0.52} strokeWidth="2px" d="M7.26 17.39L8.37 17.39" />
25
+ <circle cx={7.81} cy={7.25} r={1.16} fill="#fff" opacity={0.8} />
26
+ </g>
27
+ <path
28
+ fill="none"
29
+ opacity={0.75}
30
+ strokeLinecap="round"
31
+ strokeMiterlimit={10}
32
+ strokeWidth="3px"
33
+ d="M15.81 14.49L22.89 14.49"
34
+ />
35
+ <rect
36
+ x={14.93}
37
+ y={18.39}
38
+ width={22.19}
39
+ height={2.73}
40
+ rx={0.64}
41
+ ry={0.64}
42
+ opacity={0.5}
43
+ strokeLinecap="round"
44
+ strokeMiterlimit={10}
45
+ />
46
+ <rect
47
+ x={14.93}
48
+ y={5.89}
49
+ width={59.16}
50
+ height={2.73}
51
+ rx={0.64}
52
+ ry={0.64}
53
+ opacity={0.9}
54
+ strokeLinecap="round"
55
+ strokeMiterlimit={10}
56
+ />
57
+ <rect
58
+ x={14.93}
59
+ y={24.22}
60
+ width={32.68}
61
+ height={19.95}
62
+ rx={2.11}
63
+ ry={2.11}
64
+ opacity={0.4}
65
+ strokeLinecap="round"
66
+ strokeMiterlimit={10}
67
+ />
68
+ <g strokeLinecap="round" strokeMiterlimit={10}>
69
+ <rect x={59.05} y={38.15} width={2.01} height={3.42} rx={0.33} ry={0.33} opacity={0.32} />
70
+ <rect x={54.78} y={34.99} width={2.01} height={6.58} rx={0.33} ry={0.33} opacity={0.44} />
71
+ <rect x={63.17} y={32.86} width={2.01} height={8.7} rx={0.33} ry={0.33} opacity={0.53} />
72
+ <rect x={67.54} y={29.17} width={2.01} height={12.4} rx={0.33} ry={0.33} opacity={0.66} />
73
+ </g>
74
+ <g opacity={0.5}>
75
+ <circle cx={62.16} cy={18.63} r={7.5} />
76
+ <path d="M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z" />
77
+ </g>
78
+ <g opacity={0.74}>
79
+ <path d="M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z" />
80
+ <path d="M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z" />
81
+ </g>
82
+ </svg>
83
+ );
84
+ }
@@ -0,0 +1,48 @@
1
+ import { type SVGProps } from "react";
2
+
3
+ export function IconLayoutDefault(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ data-name="con-layout-default"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 79.86 51.14"
9
+ {...props}
10
+ >
11
+ <path
12
+ d="M39.22 15.99h-8.16c-.79 0-1.43-.67-1.43-1.5s.64-1.5 1.43-1.5h8.16c.79 0 1.43.67 1.43 1.5s-.64 1.5-1.43 1.5z"
13
+ opacity={0.75}
14
+ />
15
+ <rect x={29.63} y={18.39} width={16.72} height={2.73} rx={1.36} ry={1.36} opacity={0.5} />
16
+ <path
17
+ d="M75.1 6.68v1.45c0 .63-.49 1.14-1.09 1.14H30.72c-.6 0-1.09-.51-1.09-1.14V6.68c0-.62.49-1.14 1.09-1.14h43.29c.6 0 1.09.52 1.09 1.14z"
18
+ opacity={0.9}
19
+ />
20
+ <rect x={29.63} y={24.22} width={21.8} height={19.95} rx={2.11} ry={2.11} opacity={0.4} />
21
+ <g strokeLinecap="round" strokeMiterlimit={10}>
22
+ <rect x={61.06} y={38.15} width={2.01} height={3.42} rx={0.33} ry={0.33} opacity={0.32} />
23
+ <rect x={56.78} y={34.99} width={2.01} height={6.58} rx={0.33} ry={0.33} opacity={0.44} />
24
+ <rect x={65.17} y={32.86} width={2.01} height={8.7} rx={0.33} ry={0.33} opacity={0.53} />
25
+ <rect x={69.55} y={29.17} width={2.01} height={12.4} rx={0.33} ry={0.33} opacity={0.66} />
26
+ </g>
27
+ <g opacity={0.5}>
28
+ <circle cx={63.17} cy={18.63} r={7.5} />
29
+ <path d="M63.17 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z" />
30
+ </g>
31
+ <g opacity={0.74}>
32
+ <path d="M64.05 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z" />
33
+ <path d="M67.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z" />
34
+ </g>
35
+ <g strokeLinecap="round" strokeMiterlimit={10}>
36
+ <rect x={5.84} y={5.02} width={19.14} height={40} rx={2} ry={2} opacity={0.8} />
37
+ <g stroke="#fff">
38
+ <path fill="none" opacity={0.72} strokeWidth="2px" d="M9.02 17.39L21.25 17.39" />
39
+ <path fill="none" opacity={0.48} strokeWidth="2px" d="M9.02 24.6L19.54 24.6" />
40
+ <path fill="none" opacity={0.55} strokeWidth="2px" d="M9.02 20.88L18.4 20.88" />
41
+ <circle cx={10.98} cy={9.91} r={2.54} fill="#fff" opacity={0.8} />
42
+ <path fill="none" opacity={0.8} strokeWidth="2px" d="M15.53 8.65L21.25 8.65" />
43
+ <path fill="none" opacity={0.6} d="M15.32 11.3L20.38 11.3" />
44
+ </g>
45
+ </g>
46
+ </svg>
47
+ );
48
+ }
@@ -0,0 +1,68 @@
1
+ import { type SVGProps } from "react";
2
+
3
+ export function IconLayoutFull(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ data-name="icon-layout-full"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 79.86 51.14"
9
+ {...props}
10
+ >
11
+ <path
12
+ fill="none"
13
+ opacity={0.75}
14
+ strokeLinecap="round"
15
+ strokeMiterlimit={10}
16
+ strokeWidth="3px"
17
+ d="M6.85 14.49L15.02 14.49"
18
+ />
19
+ <rect
20
+ x={5.84}
21
+ y={18.39}
22
+ width={25.6}
23
+ height={2.73}
24
+ rx={0.64}
25
+ ry={0.64}
26
+ opacity={0.5}
27
+ strokeLinecap="round"
28
+ strokeMiterlimit={10}
29
+ />
30
+ <rect
31
+ x={5.84}
32
+ y={5.89}
33
+ width={68.26}
34
+ height={2.73}
35
+ rx={0.64}
36
+ ry={0.64}
37
+ opacity={0.9}
38
+ strokeLinecap="round"
39
+ strokeMiterlimit={10}
40
+ />
41
+ <rect
42
+ x={5.84}
43
+ y={24.22}
44
+ width={37.71}
45
+ height={19.95}
46
+ rx={2.11}
47
+ ry={2.11}
48
+ opacity={0.4}
49
+ strokeLinecap="round"
50
+ strokeMiterlimit={10}
51
+ />
52
+ <g strokeLinecap="round" strokeMiterlimit={10}>
53
+ <rect x={59.05} y={38.15} width={2.01} height={3.42} rx={0.33} ry={0.33} opacity={0.32} />
54
+ <rect x={54.78} y={34.99} width={2.01} height={6.58} rx={0.33} ry={0.33} opacity={0.44} />
55
+ <rect x={63.17} y={32.86} width={2.01} height={8.7} rx={0.33} ry={0.33} opacity={0.53} />
56
+ <rect x={67.54} y={29.17} width={2.01} height={12.4} rx={0.33} ry={0.33} opacity={0.66} />
57
+ </g>
58
+ <g opacity={0.5}>
59
+ <circle cx={62.16} cy={18.63} r={7.5} />
60
+ <path d="M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z" />
61
+ </g>
62
+ <g opacity={0.74}>
63
+ <path d="M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z" />
64
+ <path d="M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z" />
65
+ </g>
66
+ </svg>
67
+ );
68
+ }
@@ -0,0 +1,62 @@
1
+ import { type SVGProps } from "react";
2
+
3
+ export function IconSidebarFloating(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ data-name="icon-sidebar-floating"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 79.86 51.14"
9
+ {...props}
10
+ >
11
+ <rect
12
+ x={5.89}
13
+ y={5.15}
14
+ width={19.74}
15
+ height={40}
16
+ rx={2}
17
+ ry={2}
18
+ opacity={0.8}
19
+ strokeLinecap="round"
20
+ strokeMiterlimit={10}
21
+ />
22
+ <g stroke="#fff" strokeLinecap="round" strokeMiterlimit={10}>
23
+ <path fill="none" opacity={0.72} strokeWidth="2px" d="M9.81 18.36L22.04 18.36" />
24
+ <path fill="none" opacity={0.48} strokeWidth="2px" d="M9.81 25.57L20.33 25.57" />
25
+ <path fill="none" opacity={0.55} strokeWidth="2px" d="M9.81 21.85L19.18 21.85" />
26
+ <circle cx={11.76} cy={10.88} r={2.54} fill="#fff" opacity={0.8} />
27
+ <path fill="none" opacity={0.8} strokeWidth="2px" d="M16.31 9.62L22.04 9.62" />
28
+ <path fill="none" opacity={0.6} d="M16.1 12.27L21.16 12.27" />
29
+ </g>
30
+ <path
31
+ fill="none"
32
+ opacity={0.62}
33
+ strokeLinecap="round"
34
+ strokeMiterlimit={10}
35
+ strokeWidth="3px"
36
+ d="M30.59 9.62L35.85 9.62"
37
+ />
38
+ <rect
39
+ x={29.94}
40
+ y={13.42}
41
+ width={26.03}
42
+ height={2.73}
43
+ rx={0.64}
44
+ ry={0.64}
45
+ opacity={0.44}
46
+ strokeLinecap="round"
47
+ strokeMiterlimit={10}
48
+ />
49
+ <rect
50
+ x={29.94}
51
+ y={19.28}
52
+ width={43.11}
53
+ height={25.87}
54
+ rx={2}
55
+ ry={2}
56
+ opacity={0.3}
57
+ strokeLinecap="round"
58
+ strokeMiterlimit={10}
59
+ />
60
+ </svg>
61
+ );
62
+ }
@@ -0,0 +1,53 @@
1
+ import { type SVGProps } from "react";
2
+
3
+ export function IconSidebarInset(props: SVGProps<SVGSVGElement>) {
4
+ return (
5
+ <svg
6
+ data-name="icon-sidebar-inset"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 79.86 51.14"
9
+ {...props}
10
+ >
11
+ <rect
12
+ x={23.39}
13
+ y={5.57}
14
+ width={50.22}
15
+ height={40}
16
+ rx={2}
17
+ ry={2}
18
+ opacity={0.2}
19
+ strokeLinecap="round"
20
+ strokeMiterlimit={10}
21
+ />
22
+ <path
23
+ fill="none"
24
+ opacity={0.72}
25
+ strokeLinecap="round"
26
+ strokeMiterlimit={10}
27
+ strokeWidth="2px"
28
+ d="M5.08 17.05L17.31 17.05"
29
+ />
30
+ <path
31
+ fill="none"
32
+ opacity={0.48}
33
+ strokeLinecap="round"
34
+ strokeMiterlimit={10}
35
+ strokeWidth="2px"
36
+ d="M5.08 24.25L15.6 24.25"
37
+ />
38
+ <path
39
+ fill="none"
40
+ opacity={0.55}
41
+ strokeLinecap="round"
42
+ strokeMiterlimit={10}
43
+ strokeWidth="2px"
44
+ d="M5.08 20.54L14.46 20.54"
45
+ />
46
+ <g strokeLinecap="round" strokeMiterlimit={10}>
47
+ <circle cx={7.04} cy={9.57} r={2.54} opacity={0.8} />
48
+ <path fill="none" opacity={0.8} strokeWidth="2px" d="M11.59 8.3L17.31 8.3" />
49
+ <path fill="none" opacity={0.6} d="M11.38 10.95L16.44 10.95" />
50
+ </g>
51
+ </svg>
52
+ );
53
+ }