@nextop-os/ui-system 0.0.15 → 0.0.16

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.
package/README.md CHANGED
@@ -12,3 +12,81 @@ import "@nextop-os/ui-system/styles.css";
12
12
 
13
13
  Application code should prefer the root package export and the documented stable
14
14
  subpaths over deep imports from internal files.
15
+
16
+ ## External Development
17
+
18
+ External consumers should install the package normally:
19
+
20
+ ```bash
21
+ pnpm add @nextop-os/ui-system
22
+ ```
23
+
24
+ For local source sync from a Nextop checkout, start the UI system dev server:
25
+
26
+ ```bash
27
+ pnpm --filter @nextop-os/ui-system dev:server
28
+ ```
29
+
30
+ Then add the Vite plugin in the external app:
31
+
32
+ ```ts
33
+ import { nextopUISystemDev } from "@nextop-os/ui-system/dev-vite";
34
+
35
+ export default defineConfig({
36
+ plugins: [nextopUISystemDev()]
37
+ });
38
+ ```
39
+
40
+ When the dev server is reachable, the plugin mirrors the allowed UI-system
41
+ source files into `.nextop-ui-system-dev/` and aliases the stable package
42
+ entrypoints to that cache. When the dev server is unavailable, resolution falls
43
+ back to the installed package in `node_modules`.
44
+
45
+ Add the generated cache to the external app's `.gitignore`:
46
+
47
+ ```text
48
+ .nextop-ui-system-dev/
49
+ ```
50
+
51
+ If the external app uses Tailwind CSS, include both the installed package output
52
+ and the generated dev cache in the app's Tailwind source scan:
53
+
54
+ ```css
55
+ @source "../node_modules/@nextop-os/ui-system/dist";
56
+ @source "../.nextop-ui-system-dev";
57
+ ```
58
+
59
+ ## Agent Usage
60
+
61
+ Coding agents should read component metadata before creating or promoting UI:
62
+
63
+ ```ts
64
+ import { uiSystemMetadata } from "@nextop-os/ui-system/metadata";
65
+ ```
66
+
67
+ When promoting business UI into this package, use the bundled
68
+ `agent/nextop-ui-system/SKILL.md` skill when it is available. The durable rules
69
+ are:
70
+
71
+ 1. prefer existing metadata entries before creating a component
72
+ 2. classify the component as `base` or `business`
73
+ 3. keep business components host-agnostic and side-effect-free
74
+ 4. compose business components from base primitives
75
+ 5. add metadata, stable exports, and storyboard examples for public UI
76
+ 6. run metadata and boundary validation before shipping
77
+
78
+ External repositories can install the bundled skill into their local Codex
79
+ skill directory with one command:
80
+
81
+ ```bash
82
+ pnpm exec nextop-ui-system-install-skill
83
+ ```
84
+
85
+ This copies the package skill into:
86
+
87
+ ```text
88
+ .codex/skills/nextop-ui-system/SKILL.md
89
+ ```
90
+
91
+ The installer does not overwrite a locally modified skill unless `--force` is
92
+ provided.
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { constants } from "node:fs";
4
+ import {
5
+ access,
6
+ cp,
7
+ mkdir,
8
+ readdir,
9
+ readFile,
10
+ rm,
11
+ stat
12
+ } from "node:fs/promises";
13
+ import { dirname, join, relative, resolve } from "node:path";
14
+ import { fileURLToPath } from "node:url";
15
+
16
+ const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
17
+ const sourceDirectory = join(packageRoot, "agent", "nextop-ui-system");
18
+ const skillName = "nextop-ui-system";
19
+
20
+ const options = parseArgs(process.argv.slice(2));
21
+
22
+ if (options.help) {
23
+ printHelp();
24
+ process.exit(0);
25
+ }
26
+
27
+ const targetRoot = resolve(options.cwd, ".codex", "skills");
28
+ const targetDirectory = join(targetRoot, skillName);
29
+
30
+ await assertReadableDirectory(sourceDirectory);
31
+ await mkdir(targetRoot, { recursive: true });
32
+
33
+ if (await pathExists(targetDirectory)) {
34
+ const targetStats = await stat(targetDirectory);
35
+
36
+ if (!targetStats.isDirectory()) {
37
+ throw new Error(`Target exists and is not a directory: ${targetDirectory}`);
38
+ }
39
+
40
+ if (!options.force) {
41
+ if (await directoriesMatch(sourceDirectory, targetDirectory)) {
42
+ console.log(
43
+ `nextop-ui-system skill already configured at ${targetDirectory}`
44
+ );
45
+ process.exit(0);
46
+ }
47
+
48
+ throw new Error(
49
+ `Target skill already exists with local changes: ${targetDirectory}\n` +
50
+ "Run with --force to replace it."
51
+ );
52
+ }
53
+
54
+ await rm(targetDirectory, { recursive: true, force: true });
55
+ }
56
+
57
+ await cp(sourceDirectory, targetDirectory, {
58
+ errorOnExist: false,
59
+ force: true,
60
+ recursive: true
61
+ });
62
+
63
+ console.log(`Installed nextop-ui-system skill to ${targetDirectory}`);
64
+ console.log(
65
+ "Agents can now load it from .codex/skills/nextop-ui-system/SKILL.md"
66
+ );
67
+
68
+ function parseArgs(args) {
69
+ const parsed = {
70
+ cwd: process.cwd(),
71
+ force: false,
72
+ help: false
73
+ };
74
+
75
+ for (let index = 0; index < args.length; index += 1) {
76
+ const arg = args[index];
77
+
78
+ if (arg === "--force") {
79
+ parsed.force = true;
80
+ continue;
81
+ }
82
+
83
+ if (arg === "--help" || arg === "-h") {
84
+ parsed.help = true;
85
+ continue;
86
+ }
87
+
88
+ if (arg === "--cwd") {
89
+ const cwd = args[index + 1];
90
+ if (!cwd) {
91
+ throw new Error("--cwd requires a directory path");
92
+ }
93
+ parsed.cwd = resolve(cwd);
94
+ index += 1;
95
+ continue;
96
+ }
97
+
98
+ throw new Error(`Unknown option: ${arg}`);
99
+ }
100
+
101
+ return parsed;
102
+ }
103
+
104
+ function printHelp() {
105
+ console.log(`Usage: nextop-ui-system-install-skill [options]
106
+
107
+ Copies the bundled Nextop UI System skill into the current repository.
108
+
109
+ Options:
110
+ --cwd <path> Repository root to configure. Defaults to the current directory.
111
+ --force Replace an existing .codex/skills/nextop-ui-system directory.
112
+ -h, --help Show this help message.`);
113
+ }
114
+
115
+ async function assertReadableDirectory(path) {
116
+ await access(path, constants.R_OK);
117
+ const pathStats = await stat(path);
118
+
119
+ if (!pathStats.isDirectory()) {
120
+ throw new Error(`Expected directory: ${path}`);
121
+ }
122
+ }
123
+
124
+ async function pathExists(path) {
125
+ try {
126
+ await access(path, constants.F_OK);
127
+ return true;
128
+ } catch {
129
+ return false;
130
+ }
131
+ }
132
+
133
+ async function directoriesMatch(leftDirectory, rightDirectory) {
134
+ const leftEntries = await listFiles(leftDirectory, leftDirectory);
135
+ const rightEntries = await listFiles(rightDirectory, rightDirectory);
136
+
137
+ if (leftEntries.length !== rightEntries.length) {
138
+ return false;
139
+ }
140
+
141
+ for (let index = 0; index < leftEntries.length; index += 1) {
142
+ if (leftEntries[index] !== rightEntries[index]) {
143
+ return false;
144
+ }
145
+
146
+ const leftFile = join(leftDirectory, leftEntries[index]);
147
+ const rightFile = join(rightDirectory, rightEntries[index]);
148
+
149
+ const [leftContent, rightContent] = await Promise.all([
150
+ readFile(leftFile),
151
+ readFile(rightFile)
152
+ ]);
153
+
154
+ if (!leftContent.equals(rightContent)) {
155
+ return false;
156
+ }
157
+ }
158
+
159
+ return true;
160
+ }
161
+
162
+ async function listFiles(rootDirectory, directory) {
163
+ const entries = await readdir(directory, { withFileTypes: true });
164
+ const files = await Promise.all(
165
+ entries.map(async (entry) => {
166
+ const absolutePath = join(directory, entry.name);
167
+
168
+ if (entry.isDirectory()) {
169
+ return listFiles(rootDirectory, absolutePath);
170
+ }
171
+
172
+ if (!entry.isFile()) {
173
+ return [];
174
+ }
175
+
176
+ return relative(rootDirectory, absolutePath);
177
+ })
178
+ );
179
+
180
+ return files.flat().sort((left, right) => left.localeCompare(right));
181
+ }
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: nextop-ui-system
3
+ description: Use when working with @nextop-os/ui-system components, replacing local UI with shared components, querying component ids or metadata, promoting business UI into shared base or business components, or maintaining UI-system storyboard inventory.
4
+ ---
5
+
6
+ # Nextop UI System
7
+
8
+ Use this skill as the single entrypoint for `@nextop-os/ui-system` use,
9
+ promotion, metadata, and storyboard work.
10
+
11
+ ## Source Of Truth
12
+
13
+ Read these before editing:
14
+
15
+ 1. nearest `AGENTS.md` for the target code
16
+ 2. `packages/ui/AGENTS.md`
17
+ 3. `docs/conventions/ui-system.md`
18
+ 4. component metadata from the first available source:
19
+ - `GET http://127.0.0.1:4100/components`
20
+ - `packages/ui/system/src/metadata/components.json`
21
+ - `@nextop-os/ui-system/metadata` from the installed package
22
+
23
+ Use stable public imports only:
24
+
25
+ - `@nextop-os/ui-system`
26
+ - `@nextop-os/ui-system/components`
27
+ - `@nextop-os/ui-system/icons`
28
+ - `@nextop-os/ui-system/metadata`
29
+ - `@nextop-os/ui-system/styles.css`
30
+ - `@nextop-os/ui-system/utils`
31
+
32
+ Never deep import `@nextop-os/ui-system/src/*` or per-file component paths.
33
+
34
+ ## Route The Task
35
+
36
+ ### Use Existing Component
37
+
38
+ Use when replacing local UI or answering what components exist.
39
+
40
+ 1. Check metadata first by `id`, `name`, `export`, `layer`, and `useCases`.
41
+ 2. Prefer existing components before creating or extracting new ones.
42
+ 3. Read the source and props type for the selected export.
43
+ 4. Keep host state, data loading, routing, daemon calls, i18n keys, and business
44
+ transforms in the caller.
45
+ 5. Replace only the visual surface with stable UI-system imports.
46
+
47
+ ### Extract Base Component
48
+
49
+ Use when the target is a low-level visual primitive.
50
+
51
+ Proceed only if the public API has no domain noun and props describe
52
+ presentation, interaction, accessibility, variants, refs, slots, class names, or
53
+ children.
54
+
55
+ 1. If the primitive exists in shadcn, acquire it through shadcn CLI targeted at
56
+ `packages/ui/system`.
57
+ 2. Adapt only package aliases, icons, tokens, exports, and boundary issues.
58
+ 3. Add stable exports, metadata with `layer: "base"`, and storyboard coverage.
59
+ 4. Replace duplicated local UI with the shared component.
60
+
61
+ ### Extract Business Component
62
+
63
+ Use when business-side UI should become a reusable display component.
64
+
65
+ Proceed only if the component can render from props with no host side effects.
66
+ Business components may expose domain display props such as workspace, file,
67
+ task, agent, run, status, permission, labels, and callbacks.
68
+
69
+ Before editing, state:
70
+
71
+ - component `id` and `layer`
72
+ - source usage being replaced
73
+ - intended reuse surfaces
74
+ - public props and callbacks
75
+ - host-owned state and side effects that remain outside the component
76
+ - export path, metadata entry, storyboard states, and validation commands
77
+
78
+ Keep these outside the component:
79
+
80
+ - daemon, Electron, filesystem, router, or host adapter calls
81
+ - data fetching, cache mutation, persistence, polling, and global store
82
+ ownership
83
+ - workflow orchestration such as onboarding, workspace registration, or
84
+ navigation
85
+
86
+ Implement the business component by composing `base` primitives. Add metadata
87
+ with `layer: "business"` and storyboard examples for normal, empty, disabled,
88
+ loading, and error-like states when those states exist in the public contract.
89
+
90
+ ### Maintain Inventory
91
+
92
+ Use when changing component ids, metadata, exports, or storyboard.
93
+
94
+ 1. Keep each public entry's `id` stable, readable, globally unique, and
95
+ kebab-case.
96
+ 2. Keep `layer` as `base` or `business`.
97
+ 3. Ensure `source` points under `packages/ui/system/src`.
98
+ 4. Ensure `from` is a stable public entrypoint.
99
+ 5. Keep storyboard grouped by `Foundation`, `Base Components`, and
100
+ `Business Components`; visible component stories should support copying the
101
+ component id.
102
+
103
+ ## Validation
104
+
105
+ Run the smallest relevant checks, then report exact commands and results:
106
+
107
+ ```bash
108
+ node tools/scripts/check-ui-metadata.mjs
109
+ pnpm check:ui-boundaries
110
+ pnpm --filter @nextop-os/ui-storyboard typecheck
111
+ ```
112
+
113
+ If runtime component code changed, also run the relevant package typecheck or
114
+ build for the consumer that was migrated.
@@ -4,7 +4,7 @@ import {
4
4
  ChevronRightIcon,
5
5
  ChevronUpIcon,
6
6
  CloseIcon
7
- } from "./chunk-OBW6ALOJ.js";
7
+ } from "./chunk-TT7B6HKG.js";
8
8
  import {
9
9
  cn
10
10
  } from "./chunk-DGPY4WP3.js";
@@ -1156,4 +1156,4 @@ export {
1156
1156
  ToastClose,
1157
1157
  ToastViewport
1158
1158
  };
1159
- //# sourceMappingURL=chunk-G6KJIFD2.js.map
1159
+ //# sourceMappingURL=chunk-5COFORA5.js.map
@@ -1,6 +1,7 @@
1
1
  // src/icons/system-icons.tsx
2
2
  import {
3
3
  AlertCircleIcon,
4
+ AppWindowIcon as LucideAppWindowIcon,
4
5
  ArrowLeftIcon as LucideArrowLeftIcon,
5
6
  ArrowRightIcon as LucideArrowRightIcon,
6
7
  ArrowUpRightIcon,
@@ -19,6 +20,7 @@ import {
19
20
  FolderIcon as LucideFolderIcon,
20
21
  HomeIcon,
21
22
  ImageIcon as LucideImageIcon,
23
+ LayoutGridIcon as LucideLayoutGridIcon,
22
24
  XIcon,
23
25
  Maximize2Icon,
24
26
  Minimize2Icon,
@@ -33,6 +35,7 @@ import {
33
35
  PanelRight,
34
36
  PanelTop,
35
37
  PanelsTopLeft,
38
+ PencilIcon as LucidePencilIcon,
36
39
  RefreshCwIcon,
37
40
  SearchIcon as LucideSearchIcon,
38
41
  SettingsIcon as LucideSettingsIcon,
@@ -41,7 +44,7 @@ import {
41
44
  UploadIcon as LucideUploadIcon,
42
45
  VideoIcon
43
46
  } from "lucide-react";
44
- import { jsx } from "react/jsx-runtime";
47
+ import { jsx, jsxs } from "react/jsx-runtime";
45
48
  function createLucideIcon(Icon) {
46
49
  return function WrappedIcon({ size = 18, title, ...props }) {
47
50
  return /* @__PURE__ */ jsx(Icon, { "aria-hidden": title ? void 0 : true, size, ...props, children: title ? /* @__PURE__ */ jsx("title", { children: title }) : null });
@@ -66,6 +69,7 @@ var QuickLayoutLeftIcon = createLucideIcon(PanelLeft);
66
69
  var QuickLayoutRightIcon = createLucideIcon(PanelRight);
67
70
  var QuickLayoutTopIcon = createLucideIcon(PanelTop);
68
71
  var QuickLayoutBottomIcon = createLucideIcon(PanelBottom);
72
+ var AppWindowIcon = createLucideIcon(LucideAppWindowIcon);
69
73
  var ArrowLeftIcon = createLucideIcon(LucideArrowLeftIcon);
70
74
  var ArrowRightIcon = createLucideIcon(LucideArrowRightIcon);
71
75
  var CheckIcon = createLucideIcon(LucideCheckIcon);
@@ -82,11 +86,74 @@ var FileSearchIcon = createLucideIcon(LucideFileSearchIcon);
82
86
  var FileSpreadsheetIcon = createLucideIcon(LucideFileSpreadsheetIcon);
83
87
  var FileTextIcon = createLucideIcon(LucideFileTextIcon);
84
88
  var ImageFileIcon = createLucideIcon(LucideImageIcon);
89
+ var EditIcon = createLucideIcon(LucidePencilIcon);
90
+ var LayoutGridIcon = createLucideIcon(LucideLayoutGridIcon);
85
91
  var RefreshIcon = createLucideIcon(RefreshCwIcon);
86
92
  var SearchIcon = createLucideIcon(LucideSearchIcon);
87
93
  var DeleteIcon = createLucideIcon(LucideTrashIcon);
88
94
  var UploadIcon = createLucideIcon(LucideUploadIcon);
89
95
  var VideoFileIcon = createLucideIcon(VideoIcon);
96
+ function GoogleBrandIcon({ size = 22, title, ...props }) {
97
+ return /* @__PURE__ */ jsxs(
98
+ "svg",
99
+ {
100
+ "aria-hidden": title ? void 0 : true,
101
+ fill: "none",
102
+ height: size,
103
+ viewBox: "0 0 24 24",
104
+ width: size,
105
+ ...props,
106
+ children: [
107
+ title ? /* @__PURE__ */ jsx("title", { children: title }) : null,
108
+ /* @__PURE__ */ jsx(
109
+ "path",
110
+ {
111
+ d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.27-4.74 3.27-8.1Z",
112
+ fill: "#4285F4"
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx(
116
+ "path",
117
+ {
118
+ d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z",
119
+ fill: "#34A853"
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx(
123
+ "path",
124
+ {
125
+ d: "M5.84 14.1A6.6 6.6 0 0 1 5.5 12c0-.73.12-1.43.34-2.1V7.08H2.18A11 11 0 0 0 1 12c0 1.78.43 3.45 1.18 4.93l3.66-2.83Z",
126
+ fill: "#FBBC05"
127
+ }
128
+ ),
129
+ /* @__PURE__ */ jsx(
130
+ "path",
131
+ {
132
+ d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15A10.6 10.6 0 0 0 12 1a11 11 0 0 0-9.82 6.08l3.66 2.83A6.58 6.58 0 0 1 12 5.38Z",
133
+ fill: "#EA4335"
134
+ }
135
+ )
136
+ ]
137
+ }
138
+ );
139
+ }
140
+ function GitHubBrandIcon({ size = 22, title, ...props }) {
141
+ return /* @__PURE__ */ jsxs(
142
+ "svg",
143
+ {
144
+ "aria-hidden": title ? void 0 : true,
145
+ fill: "currentColor",
146
+ height: size,
147
+ viewBox: "0 0 24 24",
148
+ width: size,
149
+ ...props,
150
+ children: [
151
+ title ? /* @__PURE__ */ jsx("title", { children: title }) : null,
152
+ /* @__PURE__ */ jsx("path", { d: "M12 0C5.37 0 0 5.37 0 12c0 5.3 3.44 9.8 8.21 11.39.6.11.79-.26.79-.58v-2.23c-3.34.73-4.03-1.42-4.03-1.42-.55-1.39-1.33-1.76-1.33-1.76-1.09-.74.08-.73.08-.73 1.2.08 1.84 1.24 1.84 1.24 1.07 1.83 2.81 1.3 3.49 1 .11-.78.42-1.3.76-1.6-2.66-.31-5.47-1.34-5.47-5.94 0-1.31.47-2.38 1.24-3.22-.12-.3-.54-1.52.12-3.18 0 0 1.01-.32 3.3 1.23A11.5 11.5 0 0 1 12 5.8c1.02.01 2.05.14 3.01.4 2.29-1.55 3.3-1.23 3.3-1.23.65 1.65.24 2.87.12 3.18.77.84 1.23 1.91 1.23 3.22 0 4.61-2.81 5.62-5.48 5.92.43.37.82 1.1.82 2.22v3.3c0 .32.19.69.8.58A12.01 12.01 0 0 0 24 12c0-6.63-5.37-12-12-12Z" })
153
+ ]
154
+ }
155
+ );
156
+ }
90
157
 
91
158
  export {
92
159
  LaunchIcon,
@@ -108,6 +175,7 @@ export {
108
175
  QuickLayoutRightIcon,
109
176
  QuickLayoutTopIcon,
110
177
  QuickLayoutBottomIcon,
178
+ AppWindowIcon,
111
179
  ArrowLeftIcon,
112
180
  ArrowRightIcon,
113
181
  CheckIcon,
@@ -124,10 +192,14 @@ export {
124
192
  FileSpreadsheetIcon,
125
193
  FileTextIcon,
126
194
  ImageFileIcon,
195
+ EditIcon,
196
+ LayoutGridIcon,
127
197
  RefreshIcon,
128
198
  SearchIcon,
129
199
  DeleteIcon,
130
200
  UploadIcon,
131
- VideoFileIcon
201
+ VideoFileIcon,
202
+ GoogleBrandIcon,
203
+ GitHubBrandIcon
132
204
  };
133
- //# sourceMappingURL=chunk-OBW6ALOJ.js.map
205
+ //# sourceMappingURL=chunk-TT7B6HKG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icons/system-icons.tsx"],"sourcesContent":["import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertCircleIcon,\n AppWindowIcon as LucideAppWindowIcon,\n ArrowLeftIcon as LucideArrowLeftIcon,\n ArrowRightIcon as LucideArrowRightIcon,\n ArrowUpRightIcon,\n CheckIcon as LucideCheckIcon,\n ChevronDownIcon as LucideChevronDownIcon,\n ChevronRightIcon as LucideChevronRightIcon,\n ChevronUpIcon as LucideChevronUpIcon,\n CopyIcon as LucideCopyIcon,\n EyeIcon as LucideEyeIcon,\n FileCode2Icon,\n FileIcon as LucideFileIcon,\n FilePlus2Icon,\n FileSearchIcon as LucideFileSearchIcon,\n FileSpreadsheetIcon as LucideFileSpreadsheetIcon,\n FileTextIcon as LucideFileTextIcon,\n FolderIcon as LucideFolderIcon,\n HomeIcon,\n ImageIcon as LucideImageIcon,\n LayoutGridIcon as LucideLayoutGridIcon,\n XIcon,\n Maximize2Icon,\n Minimize2Icon,\n MinusIcon,\n FolderOpenIcon,\n FolderPlusIcon,\n HardDriveIcon,\n LoaderCircleIcon,\n MonitorCogIcon,\n PanelBottom,\n PanelLeft,\n PanelRight,\n PanelTop,\n PanelsTopLeft,\n PencilIcon as LucidePencilIcon,\n RefreshCwIcon,\n SearchIcon as LucideSearchIcon,\n SettingsIcon as LucideSettingsIcon,\n SparklesIcon,\n Trash2Icon as LucideTrashIcon,\n UploadIcon as LucideUploadIcon,\n VideoIcon\n} from \"lucide-react\";\nimport type { IconProps } from \"./types\";\n\nfunction createLucideIcon(Icon: LucideIcon) {\n return function WrappedIcon({ size = 18, title, ...props }: IconProps) {\n return (\n <Icon aria-hidden={title ? undefined : true} size={size} {...props}>\n {title ? <title>{title}</title> : null}\n </Icon>\n );\n };\n}\n\nexport const LaunchIcon = createLucideIcon(ArrowUpRightIcon);\nexport const FolderIcon = createLucideIcon(FolderOpenIcon);\nexport const DashboardIcon = createLucideIcon(HomeIcon);\nexport const NewWorkspaceIcon = createLucideIcon(FolderPlusIcon);\nexport const HealthIcon = createLucideIcon(HardDriveIcon);\nexport const AlertIcon = createLucideIcon(AlertCircleIcon);\nexport const LoadingIcon = createLucideIcon(LoaderCircleIcon);\nexport const PlatformIcon = createLucideIcon(MonitorCogIcon);\nexport const SparkIcon = createLucideIcon(SparklesIcon);\nexport const SettingsIcon = createLucideIcon(LucideSettingsIcon);\nexport const CloseIcon = createLucideIcon(XIcon);\nexport const MinimizeIcon = createLucideIcon(MinusIcon);\nexport const MaximizeIcon = createLucideIcon(Maximize2Icon);\nexport const RestoreIcon = createLucideIcon(Minimize2Icon);\nexport const LayoutMenuIcon = createLucideIcon(PanelsTopLeft);\nexport const QuickLayoutLeftIcon = createLucideIcon(PanelLeft);\nexport const QuickLayoutRightIcon = createLucideIcon(PanelRight);\nexport const QuickLayoutTopIcon = createLucideIcon(PanelTop);\nexport const QuickLayoutBottomIcon = createLucideIcon(PanelBottom);\nexport const AppWindowIcon = createLucideIcon(LucideAppWindowIcon);\nexport const ArrowLeftIcon = createLucideIcon(LucideArrowLeftIcon);\nexport const ArrowRightIcon = createLucideIcon(LucideArrowRightIcon);\nexport const CheckIcon = createLucideIcon(LucideCheckIcon);\nexport const ChevronDownIcon = createLucideIcon(LucideChevronDownIcon);\nexport const ChevronRightIcon = createLucideIcon(LucideChevronRightIcon);\nexport const ChevronUpIcon = createLucideIcon(LucideChevronUpIcon);\nexport const CopyIcon = createLucideIcon(LucideCopyIcon);\nexport const DirectoryIcon = createLucideIcon(LucideFolderIcon);\nexport const EyeIcon = createLucideIcon(LucideEyeIcon);\nexport const FileIcon = createLucideIcon(LucideFileIcon);\nexport const FileCodeIcon = createLucideIcon(FileCode2Icon);\nexport const FileCreateIcon = createLucideIcon(FilePlus2Icon);\nexport const FileSearchIcon = createLucideIcon(LucideFileSearchIcon);\nexport const FileSpreadsheetIcon = createLucideIcon(LucideFileSpreadsheetIcon);\nexport const FileTextIcon = createLucideIcon(LucideFileTextIcon);\nexport const ImageFileIcon = createLucideIcon(LucideImageIcon);\nexport const EditIcon = createLucideIcon(LucidePencilIcon);\nexport const LayoutGridIcon = createLucideIcon(LucideLayoutGridIcon);\nexport const RefreshIcon = createLucideIcon(RefreshCwIcon);\nexport const SearchIcon = createLucideIcon(LucideSearchIcon);\nexport const DeleteIcon = createLucideIcon(LucideTrashIcon);\nexport const UploadIcon = createLucideIcon(LucideUploadIcon);\nexport const VideoFileIcon = createLucideIcon(VideoIcon);\n\nexport function GoogleBrandIcon({ size = 22, title, ...props }: IconProps) {\n return (\n <svg\n aria-hidden={title ? undefined : true}\n fill=\"none\"\n height={size}\n viewBox=\"0 0 24 24\"\n width={size}\n {...props}\n >\n {title ? <title>{title}</title> : null}\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.27-4.74 3.27-8.1Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.1A6.6 6.6 0 0 1 5.5 12c0-.73.12-1.43.34-2.1V7.08H2.18A11 11 0 0 0 1 12c0 1.78.43 3.45 1.18 4.93l3.66-2.83Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15A10.6 10.6 0 0 0 12 1a11 11 0 0 0-9.82 6.08l3.66 2.83A6.58 6.58 0 0 1 12 5.38Z\"\n fill=\"#EA4335\"\n />\n </svg>\n );\n}\n\nexport function GitHubBrandIcon({ size = 22, title, ...props }: IconProps) {\n return (\n <svg\n aria-hidden={title ? undefined : true}\n fill=\"currentColor\"\n height={size}\n viewBox=\"0 0 24 24\"\n width={size}\n {...props}\n >\n {title ? <title>{title}</title> : null}\n <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.3 3.44 9.8 8.21 11.39.6.11.79-.26.79-.58v-2.23c-3.34.73-4.03-1.42-4.03-1.42-.55-1.39-1.33-1.76-1.33-1.76-1.09-.74.08-.73.08-.73 1.2.08 1.84 1.24 1.84 1.24 1.07 1.83 2.81 1.3 3.49 1 .11-.78.42-1.3.76-1.6-2.66-.31-5.47-1.34-5.47-5.94 0-1.31.47-2.38 1.24-3.22-.12-.3-.54-1.52.12-3.18 0 0 1.01-.32 3.3 1.23A11.5 11.5 0 0 1 12 5.8c1.02.01 2.05.14 3.01.4 2.29-1.55 3.3-1.23 3.3-1.23.65 1.65.24 2.87.12 3.18.77.84 1.23 1.91 1.23 3.22 0 4.61-2.81 5.62-5.48 5.92.43.37.82 1.1.82 2.22v3.3c0 .32.19.69.8.58A12.01 12.01 0 0 0 24 12c0-6.63-5.37-12-12-12Z\" />\n </svg>\n );\n}\n"],"mappings":"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","names":[]}