@tutti-os/ui-system 0.0.7 → 0.0.9

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 (35) hide show
  1. package/AGENTS.md +3 -3
  2. package/README.md +11 -11
  3. package/agent/install-skill.mjs +8 -8
  4. package/agent/{nextop-ui-system → tutti-ui-system}/SKILL.md +4 -4
  5. package/agent/{nextop-ui-system → tutti-ui-system}/scripts/create-business-preview.mjs +8 -8
  6. package/dist/{chunk-GX3U3V36.js → chunk-K57FUMQG.js} +11 -11
  7. package/dist/chunk-K57FUMQG.js.map +1 -0
  8. package/dist/{chunk-XHA7R2WC.js → chunk-RKQ4FPGY.js} +4 -4
  9. package/dist/chunk-RKQ4FPGY.js.map +1 -0
  10. package/dist/{chunk-QXXI5OBT.js → chunk-YIAY5DKS.js} +2 -2
  11. package/dist/chunk-YIAY5DKS.js.map +1 -0
  12. package/dist/components/index.js +1 -1
  13. package/dist/date-format.d.ts +5 -5
  14. package/dist/date-format.js +7 -7
  15. package/dist/dev-vite.d.ts +3 -3
  16. package/dist/dev-vite.js +6 -6
  17. package/dist/dev-vite.js.map +1 -1
  18. package/dist/icons/index.d.ts +2 -2
  19. package/dist/icons/index.js +3 -3
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +11 -11
  22. package/dist/metadata/components.json +5 -5
  23. package/dist/metadata/components.schema.json +2 -2
  24. package/dist/metadata/index.js +5 -5
  25. package/dist/metadata/index.js.map +1 -1
  26. package/dist/styles/base.css +5 -5
  27. package/package.json +3 -3
  28. package/ui-system.md +18 -18
  29. package/dist/chunk-GX3U3V36.js.map +0 -1
  30. package/dist/chunk-QXXI5OBT.js.map +0 -1
  31. package/dist/chunk-XHA7R2WC.js.map +0 -1
  32. /package/agent/{nextop-ui-system → tutti-ui-system}/references/extract-base-component.md +0 -0
  33. /package/agent/{nextop-ui-system → tutti-ui-system}/references/maintain-inventory.md +0 -0
  34. /package/agent/{nextop-ui-system → tutti-ui-system}/references/promote-business-component.md +0 -0
  35. /package/agent/{nextop-ui-system → tutti-ui-system}/references/use-existing-component.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport {\n lstat,\n mkdir,\n readdir,\n readFile,\n realpath,\n rm,\n writeFile\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport { WebSocket } from \"ws\";\n\nimport type {\n UISystemDevEvent,\n UISystemDevFile,\n UISystemDevManifest\n} from \"../dev-server/protocol.js\";\n\nexport type NextopUISystemDevOptions = {\n serverUrl?: string;\n cacheDir?: string;\n};\n\nconst defaultServerUrl = \"http://127.0.0.1:4100\";\nconst defaultCacheDir = \".nextop-ui-system-dev\";\nconst cacheMarkerFileName = \".nextop-ui-system-dev-cache\";\nconst packageName = \"@tutti-os/ui-system\";\nconst packageRequire = createRequire(import.meta.url);\nconst stableEntrypoints = [\n \".\",\n \"./components\",\n \"./icons\",\n \"./styles.css\",\n \"./utils\"\n] as const;\nconst packageDependencyAliases = [\n \"class-variance-authority\",\n \"clsx\",\n \"radix-ui\",\n \"react-resizable-panels\",\n \"tailwind-merge\"\n] as const;\nconst packageStyleDependencyAliases = [\"tw-animate-css\"] as const;\nconst packageDependencyAliasSet = new Set<string>(packageDependencyAliases);\nconst packageStyleDependencyAliasSet = new Set<string>(\n packageStyleDependencyAliases\n);\n\ntype StableEntrypoint = (typeof stableEntrypoints)[number];\ntype DevSyncState = {\n cacheRoot: string;\n realCacheRoot: string;\n serverUrl: URL;\n};\n\nexport function nextopUISystemDev(\n options: NextopUISystemDevOptions = {}\n): Plugin {\n const serverUrl = normalizeServerUrl(options.serverUrl ?? defaultServerUrl);\n const cacheDir = options.cacheDir ?? defaultCacheDir;\n let syncState: DevSyncState | null = null;\n\n return {\n name: \"nextop-ui-system-dev\",\n async config(config, env) {\n if (env.command !== \"serve\") {\n syncState = null;\n return {};\n }\n\n if (!(await probeHealth(serverUrl))) {\n syncState = null;\n return {};\n }\n\n const projectRoot = path.resolve(config.root ?? process.cwd());\n const cacheState = await prepareCacheRoot(projectRoot, cacheDir);\n const manifest = await fetchJson<UISystemDevManifest>(\n serverUrl,\n \"/manifest\"\n );\n\n validateManifest(manifest);\n await syncFiles(serverUrl, cacheState);\n await fetchComponentsMetadata(serverUrl);\n syncState = { ...cacheState, serverUrl };\n\n return {\n resolve: {\n alias: stableEntrypoints\n .map((entrypoint) => ({\n find: entrypointAlias(entrypoint),\n replacement: path.join(\n cacheState.cacheRoot,\n manifest.entrypoints[entrypoint]\n )\n }))\n .concat(\n packageStyleDependencyAliases.map((dependencyName) => ({\n find: dependencyAlias(dependencyName),\n replacement: dependencyName,\n customResolver: (\n _source: string,\n importer: string | undefined\n ) =>\n isCacheImporter(syncState, importer)\n ? resolvePackageStyleDependency(dependencyName)\n : null\n }))\n )\n }\n };\n },\n async resolveId(source, importer) {\n if (syncState === null || !isCacheImporter(syncState, importer)) {\n return null;\n }\n\n if (packageDependencyAliasSet.has(source)) {\n return packageRequire.resolve(source);\n }\n\n if (packageStyleDependencyAliasSet.has(source)) {\n const resolved = await this.resolve(source, packageContextImporter(), {\n skipSelf: true\n });\n\n return resolved?.id ?? null;\n }\n\n return null;\n },\n configureServer(server) {\n if (syncState === null) {\n return;\n }\n\n subscribeToEvents(server, syncState);\n }\n };\n}\n\nasync function probeHealth(serverUrl: URL): Promise<boolean> {\n try {\n const response = await fetch(new URL(\"/health\", serverUrl));\n\n if (!response.ok) {\n return false;\n }\n\n const payload = (await response.json()) as { packageName?: unknown };\n\n return payload.packageName === packageName;\n } catch {\n return false;\n }\n}\n\nasync function syncFiles(\n serverUrl: URL,\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">\n): Promise<void> {\n const files = await fetchJson<UISystemDevFile[]>(serverUrl, \"/files\");\n\n if (!Array.isArray(files)) {\n throw new Error(\n \"@tutti-os/ui-system dev server returned invalid files list\"\n );\n }\n\n const syncPaths = new Set<string>();\n\n await Promise.all(\n files.map(async (file) => {\n validateSyncFile(file);\n syncPaths.add(file.path);\n\n const destination = resolveCacheFile(cacheState.cacheRoot, file.path);\n await prepareCacheFileTarget(cacheState, destination);\n\n const currentHash = await readCachedHash(destination);\n\n if (currentHash === file.hash) {\n return;\n }\n\n const bytes = await fetchFile(serverUrl, file.path);\n const downloadedHash = hashBytes(bytes);\n\n if (downloadedHash !== file.hash) {\n throw new Error(\n `Hash mismatch while syncing @tutti-os/ui-system file: ${file.path}`\n );\n }\n\n await writeFile(destination, bytes);\n })\n );\n\n await removeStaleCacheFiles(cacheState, syncPaths);\n}\n\nasync function syncChangedFile(\n server: ViteDevServer,\n state: DevSyncState,\n event: Extract<UISystemDevEvent, { type: \"fileChanged\" }>\n): Promise<void> {\n validateEventPath(event.path);\n\n const destination = resolveCacheFile(state.cacheRoot, event.path);\n await prepareCacheFileTarget(state, destination);\n\n const bytes = await fetchFile(state.serverUrl, event.path);\n const downloadedHash = hashBytes(bytes);\n\n if (downloadedHash !== event.hash) {\n throw new Error(\n `Hash mismatch while syncing @tutti-os/ui-system file: ${event.path}`\n );\n }\n\n await writeFile(destination, bytes);\n invalidateFile(server, destination);\n}\n\nasync function removeDeletedFile(\n server: ViteDevServer,\n state: DevSyncState,\n event: Extract<UISystemDevEvent, { type: \"fileDeleted\" }>\n): Promise<void> {\n validateEventPath(event.path);\n\n const destination = resolveCacheFile(state.cacheRoot, event.path);\n\n invalidateFile(server, destination);\n await removeCacheFile(state, destination);\n}\n\nfunction subscribeToEvents(server: ViteDevServer, state: DevSyncState): void {\n let closed = false;\n let reconnectTimer: NodeJS.Timeout | null = null;\n let websocket: WebSocket | null = null;\n\n const close = (): void => {\n closed = true;\n\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n\n websocket?.close();\n websocket = null;\n };\n\n const reconnect = (): void => {\n if (closed || reconnectTimer !== null) {\n return;\n }\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, 1000);\n };\n\n const connect = (): void => {\n if (closed) {\n return;\n }\n\n websocket = new WebSocket(eventUrl(state.serverUrl));\n\n websocket.on(\"message\", (message) => {\n void handleEventMessage(server, state, message).catch(() => {\n // Event sync is best-effort; the initial HTTP sync remains authoritative.\n });\n });\n\n websocket.on(\"close\", reconnect);\n websocket.on(\"error\", () => {\n websocket?.close();\n });\n };\n\n connect();\n server.httpServer?.once(\"close\", close);\n}\n\nasync function handleEventMessage(\n server: ViteDevServer,\n state: DevSyncState,\n message: WebSocket.RawData\n): Promise<void> {\n const event = parseEvent(message);\n\n if (event === null) {\n return;\n }\n\n if (event.type === \"fileChanged\") {\n await syncChangedFile(server, state, event);\n return;\n }\n\n if (event.type === \"fileDeleted\") {\n await removeDeletedFile(server, state, event);\n }\n}\n\nfunction parseEvent(message: WebSocket.RawData): UISystemDevEvent | null {\n try {\n const event = JSON.parse(rawMessageToString(message)) as UISystemDevEvent;\n\n if (!isDevEvent(event)) {\n return null;\n }\n\n return event;\n } catch {\n return null;\n }\n}\n\nfunction rawMessageToString(message: WebSocket.RawData): string {\n if (Buffer.isBuffer(message)) {\n return message.toString(\"utf8\");\n }\n\n if (Array.isArray(message)) {\n return Buffer.concat(message).toString(\"utf8\");\n }\n\n return Buffer.from(message).toString(\"utf8\");\n}\n\nfunction isDevEvent(event: UISystemDevEvent): event is UISystemDevEvent {\n if (event === null || typeof event !== \"object\") {\n return false;\n }\n\n if (event.type === \"fileChanged\") {\n return typeof event.path === \"string\" && typeof event.hash === \"string\";\n }\n\n if (event.type === \"fileDeleted\") {\n return typeof event.path === \"string\";\n }\n\n return event.type === \"manifestChanged\" || event.type === \"componentsChanged\";\n}\n\nfunction invalidateFile(server: ViteDevServer, filePath: string): void {\n const modules = server.moduleGraph.getModulesByFile(filePath);\n\n if (modules === undefined) {\n return;\n }\n\n for (const moduleNode of modules) {\n server.moduleGraph.invalidateModule(moduleNode);\n }\n}\n\nasync function fetchComponentsMetadata(serverUrl: URL): Promise<void> {\n try {\n await fetchJson<unknown>(serverUrl, \"/components\");\n } catch {\n // Component diagnostics are best-effort; source sync and aliases are sufficient.\n }\n}\n\nasync function fetchJson<T>(serverUrl: URL, endpoint: string): Promise<T> {\n const response = await fetch(new URL(endpoint, serverUrl));\n\n if (!response.ok) {\n throw new Error(\n `@tutti-os/ui-system dev server ${endpoint} failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T;\n}\n\nasync function fetchFile(serverUrl: URL, syncPath: string): Promise<Buffer> {\n const response = await fetch(\n new URL(`/files/${encodeSyncPath(syncPath)}`, serverUrl)\n );\n\n if (!response.ok) {\n throw new Error(\n `@tutti-os/ui-system dev server file fetch failed for ${syncPath}`\n );\n }\n\n return Buffer.from(await response.arrayBuffer());\n}\n\nasync function readCachedHash(filePath: string): Promise<string | null> {\n try {\n return hashBytes(await readFile(filePath));\n } catch {\n return null;\n }\n}\n\nfunction validateManifest(\n manifest: UISystemDevManifest\n): asserts manifest is UISystemDevManifest & {\n entrypoints: Record<StableEntrypoint, string>;\n} {\n if (\n manifest === null ||\n typeof manifest !== \"object\" ||\n manifest.packageName !== packageName ||\n typeof manifest.entrypoints !== \"object\" ||\n manifest.entrypoints === null\n ) {\n throw new Error(\"@tutti-os/ui-system dev server returned invalid manifest\");\n }\n\n for (const entrypoint of stableEntrypoints) {\n const syncPath = manifest.entrypoints[entrypoint];\n\n if (typeof syncPath !== \"string\" || normalizeSyncPath(syncPath) === null) {\n throw new Error(\n `@tutti-os/ui-system dev server manifest is missing ${entrypoint}`\n );\n }\n }\n}\n\nfunction validateSyncFile(file: UISystemDevFile): void {\n if (\n file === null ||\n typeof file !== \"object\" ||\n typeof file.path !== \"string\" ||\n typeof file.hash !== \"string\" ||\n typeof file.size !== \"number\" ||\n normalizeSyncPath(file.path) === null\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev server returned invalid file entry\"\n );\n }\n}\n\nfunction validateEventPath(syncPath: string): void {\n if (normalizeSyncPath(syncPath) === null) {\n throw new Error(\n `Refusing unsafe @tutti-os/ui-system event path: ${syncPath}`\n );\n }\n}\n\nasync function prepareCacheRoot(\n projectRoot: string,\n cacheDir: string\n): Promise<Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">> {\n const cacheRoot = resolveCacheRoot(projectRoot, cacheDir);\n\n await ensureNoSymlinkAncestors(projectRoot, path.dirname(cacheRoot));\n await mkdir(cacheRoot, { recursive: true });\n await ensureNoSymlinkAncestors(projectRoot, cacheRoot);\n\n const cacheStat = await lstat(cacheRoot);\n\n if (!cacheStat.isDirectory() || cacheStat.isSymbolicLink()) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must be a real directory\"\n );\n }\n\n const realProjectRoot = await realpath(projectRoot);\n const realCacheRoot = await realpath(cacheRoot);\n\n if (!isPathInside(realProjectRoot, realCacheRoot)) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must resolve inside the Vite project root\"\n );\n }\n\n await ensureOwnedCacheRoot(cacheRoot);\n\n return { cacheRoot, realCacheRoot };\n}\n\nfunction resolveCacheRoot(projectRoot: string, cacheDir: string): string {\n const cacheRoot = path.resolve(projectRoot, cacheDir);\n const relative = path.relative(projectRoot, cacheRoot);\n\n if (\n relative === \"\" ||\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative)\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must resolve inside the Vite project root\"\n );\n }\n\n return cacheRoot;\n}\n\nasync function prepareCacheFileTarget(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n destination: string\n): Promise<void> {\n const parent = path.dirname(destination);\n\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n await mkdir(parent, { recursive: true });\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n\n const realParent = await realpath(parent);\n\n if (!isPathInside(cacheState.realCacheRoot, realParent)) {\n throw new Error(\n \"@tutti-os/ui-system dev cache file resolved outside cacheDir\"\n );\n }\n\n await rejectExistingSymlink(destination);\n}\n\nasync function removeCacheFile(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n destination: string\n): Promise<void> {\n const parent = path.dirname(destination);\n\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n\n const realParent = await realpath(parent).catch(() => null);\n\n if (\n realParent === null ||\n !isPathInside(cacheState.realCacheRoot, realParent)\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev cache file resolved outside cacheDir\"\n );\n }\n\n await rejectExistingSymlink(destination);\n await rm(destination, { force: true });\n}\n\nasync function removeStaleCacheFiles(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n authoritativePaths: Set<string>\n): Promise<void> {\n await ensureOwnedCacheRoot(cacheState.cacheRoot);\n\n const cachedFiles = await listCacheFiles(cacheState.cacheRoot);\n\n await Promise.all(\n cachedFiles.map(async (cachedFile) => {\n if (authoritativePaths.has(cachedFile)) {\n return;\n }\n\n await removeCacheFile(\n cacheState,\n resolveCacheFile(cacheState.cacheRoot, cachedFile)\n );\n })\n );\n}\n\nasync function listCacheFiles(\n directory: string,\n prefix = \"\"\n): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const paths = await Promise.all(\n entries.map(async (entry) => {\n const syncPath = prefix === \"\" ? entry.name : `${prefix}/${entry.name}`;\n const absolutePath = path.join(directory, entry.name);\n\n if (syncPath === cacheMarkerFileName) {\n return [];\n }\n\n if (entry.isSymbolicLink()) {\n throw new Error(\n `Refusing symlink in @tutti-os/ui-system dev cache: ${syncPath}`\n );\n }\n\n if (entry.isDirectory()) {\n return listCacheFiles(absolutePath, syncPath);\n }\n\n return entry.isFile() ? [syncPath] : [];\n })\n );\n\n return paths.flat();\n}\n\nasync function ensureOwnedCacheRoot(cacheRoot: string): Promise<void> {\n const markerPath = path.join(cacheRoot, cacheMarkerFileName);\n\n try {\n const markerStat = await lstat(markerPath);\n\n if (markerStat.isSymbolicLink() || !markerStat.isFile()) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir contains an unsafe ownership marker\"\n );\n }\n\n return;\n } catch (error) {\n if (!isNotFoundError(error)) {\n throw error;\n }\n }\n\n const entries = await readdir(cacheRoot);\n\n if (entries.length > 0) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must be empty or contain a Nextop UI cache marker before stale cleanup\"\n );\n }\n\n await writeFile(\n markerPath,\n JSON.stringify({ packageName, cache: \"ui-system-dev\" }, null, 2)\n );\n}\n\nfunction resolveCacheFile(cacheRoot: string, syncPath: string): string {\n const normalized = normalizeSyncPath(syncPath);\n\n if (normalized === null) {\n throw new Error(\n `Refusing to sync unsafe @tutti-os/ui-system path: ${syncPath}`\n );\n }\n\n const destination = path.resolve(cacheRoot, normalized);\n const relative = path.relative(cacheRoot, destination);\n\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Refusing to sync @tutti-os/ui-system path: ${syncPath}`);\n }\n\n return destination;\n}\n\nasync function ensureNoSymlinkAncestors(\n root: string,\n target: string\n): Promise<void> {\n const relative = path.relative(root, target);\n\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\"@tutti-os/ui-system dev cache path escaped cacheDir\");\n }\n\n const segments = relative === \"\" ? [] : relative.split(path.sep);\n let current = root;\n\n for (const segment of segments) {\n current = path.join(current, segment);\n\n try {\n const stat = await lstat(current);\n\n if (stat.isSymbolicLink()) {\n throw new Error(\n `Refusing symlink in @tutti-os/ui-system dev cache path: ${current}`\n );\n }\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return;\n }\n\n throw error;\n }\n }\n}\n\nasync function rejectExistingSymlink(filePath: string): Promise<void> {\n try {\n const stat = await lstat(filePath);\n\n if (stat.isSymbolicLink() || !stat.isFile()) {\n throw new Error(\n `Refusing unsafe @tutti-os/ui-system cache file: ${filePath}`\n );\n }\n } catch (error) {\n if (isNotFoundError(error)) {\n return;\n }\n\n throw error;\n }\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction isPathInside(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n\n return (\n relative === \"\" ||\n (!relative.startsWith(\"..\") && !path.isAbsolute(relative))\n );\n}\n\nfunction normalizeSyncPath(input: string): string | null {\n if (input.includes(\"\\0\")) {\n return null;\n }\n\n const slashPath = input.replaceAll(\"\\\\\", \"/\").replace(/^\\/+/, \"\");\n const normalized = path.posix.normalize(slashPath);\n\n if (\n normalized === \".\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n return null;\n }\n\n return normalized;\n}\n\nfunction encodeSyncPath(syncPath: string): string {\n return syncPath.split(\"/\").map(encodeURIComponent).join(\"/\");\n}\n\nfunction hashBytes(bytes: Buffer): string {\n return `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n}\n\nfunction normalizeServerUrl(serverUrl: string): URL {\n return new URL(serverUrl);\n}\n\nfunction eventUrl(serverUrl: URL): string {\n const url = new URL(\"/events\", serverUrl);\n\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\n return url.href;\n}\n\nfunction entrypointAlias(entrypoint: StableEntrypoint): RegExp {\n const specifier =\n entrypoint === \".\" ? packageName : `${packageName}${entrypoint.slice(1)}`;\n\n return new RegExp(`^${escapeRegExp(specifier)}$`);\n}\n\nfunction isCacheImporter(\n state: DevSyncState | null,\n importer: string | undefined\n): boolean {\n if (state === null || importer === undefined) {\n return false;\n }\n\n const importerPath = stripViteIdQuery(importer);\n\n if (!path.isAbsolute(importerPath)) {\n return false;\n }\n\n return isPathInside(state.cacheRoot, path.resolve(importerPath));\n}\n\nfunction stripViteIdQuery(id: string): string {\n const [pathWithoutQuery = \"\"] = id.split(\"?\", 1);\n\n return pathWithoutQuery;\n}\n\nfunction packageContextImporter(): string {\n return fileURLToPath(new URL(\"../styles/index.css\", import.meta.url));\n}\n\nfunction resolvePackageStyleDependency(dependencyName: string): string {\n const packageDirectory = findDependencyPackageDirectory(dependencyName);\n const manifest = JSON.parse(\n readFileSync(path.join(packageDirectory, \"package.json\"), \"utf8\")\n ) as {\n exports?: {\n \".\"?: {\n style?: unknown;\n };\n };\n };\n const styleExport = manifest.exports?.[\".\"]?.style;\n\n if (typeof styleExport !== \"string\") {\n throw new Error(`${dependencyName} does not expose a style export`);\n }\n\n return path.join(packageDirectory, styleExport);\n}\n\nfunction findDependencyPackageDirectory(dependencyName: string): string {\n const searchPaths = packageRequire.resolve.paths(dependencyName) ?? [];\n\n for (const searchPath of searchPaths) {\n const packageDirectory = path.join(searchPath, dependencyName);\n\n try {\n const manifest = JSON.parse(\n readFileSync(path.join(packageDirectory, \"package.json\"), \"utf8\")\n ) as { name?: unknown };\n\n if (manifest.name === dependencyName) {\n return packageDirectory;\n }\n } catch {\n // Try the next Node resolution search path.\n }\n }\n\n throw new Error(`Could not resolve ${dependencyName} from ${packageName}`);\n}\n\nfunction dependencyAlias(dependencyName: string): RegExp {\n return new RegExp(`^${escapeRegExp(dependencyName)}$`);\n}\n\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/plugins/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport {\n lstat,\n mkdir,\n readdir,\n readFile,\n realpath,\n rm,\n writeFile\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport { WebSocket } from \"ws\";\n\nimport type {\n UISystemDevEvent,\n UISystemDevFile,\n UISystemDevManifest\n} from \"../dev-server/protocol.js\";\n\nexport type TuttiUISystemDevOptions = {\n serverUrl?: string;\n cacheDir?: string;\n};\n\nconst defaultServerUrl = \"http://127.0.0.1:4100\";\nconst defaultCacheDir = \".tutti-ui-system-dev\";\nconst cacheMarkerFileName = \".tutti-ui-system-dev-cache\";\nconst packageName = \"@tutti-os/ui-system\";\nconst packageRequire = createRequire(import.meta.url);\nconst stableEntrypoints = [\n \".\",\n \"./components\",\n \"./icons\",\n \"./styles.css\",\n \"./utils\"\n] as const;\nconst packageDependencyAliases = [\n \"class-variance-authority\",\n \"clsx\",\n \"radix-ui\",\n \"react-resizable-panels\",\n \"tailwind-merge\"\n] as const;\nconst packageStyleDependencyAliases = [\"tw-animate-css\"] as const;\nconst packageDependencyAliasSet = new Set<string>(packageDependencyAliases);\nconst packageStyleDependencyAliasSet = new Set<string>(\n packageStyleDependencyAliases\n);\n\ntype StableEntrypoint = (typeof stableEntrypoints)[number];\ntype DevSyncState = {\n cacheRoot: string;\n realCacheRoot: string;\n serverUrl: URL;\n};\n\nexport function tuttiUISystemDev(\n options: TuttiUISystemDevOptions = {}\n): Plugin {\n const serverUrl = normalizeServerUrl(options.serverUrl ?? defaultServerUrl);\n const cacheDir = options.cacheDir ?? defaultCacheDir;\n let syncState: DevSyncState | null = null;\n\n return {\n name: \"tutti-ui-system-dev\",\n async config(config, env) {\n if (env.command !== \"serve\") {\n syncState = null;\n return {};\n }\n\n if (!(await probeHealth(serverUrl))) {\n syncState = null;\n return {};\n }\n\n const projectRoot = path.resolve(config.root ?? process.cwd());\n const cacheState = await prepareCacheRoot(projectRoot, cacheDir);\n const manifest = await fetchJson<UISystemDevManifest>(\n serverUrl,\n \"/manifest\"\n );\n\n validateManifest(manifest);\n await syncFiles(serverUrl, cacheState);\n await fetchComponentsMetadata(serverUrl);\n syncState = { ...cacheState, serverUrl };\n\n return {\n resolve: {\n alias: stableEntrypoints\n .map((entrypoint) => ({\n find: entrypointAlias(entrypoint),\n replacement: path.join(\n cacheState.cacheRoot,\n manifest.entrypoints[entrypoint]\n )\n }))\n .concat(\n packageStyleDependencyAliases.map((dependencyName) => ({\n find: dependencyAlias(dependencyName),\n replacement: dependencyName,\n customResolver: (\n _source: string,\n importer: string | undefined\n ) =>\n isCacheImporter(syncState, importer)\n ? resolvePackageStyleDependency(dependencyName)\n : null\n }))\n )\n }\n };\n },\n async resolveId(source, importer) {\n if (syncState === null || !isCacheImporter(syncState, importer)) {\n return null;\n }\n\n if (packageDependencyAliasSet.has(source)) {\n return packageRequire.resolve(source);\n }\n\n if (packageStyleDependencyAliasSet.has(source)) {\n const resolved = await this.resolve(source, packageContextImporter(), {\n skipSelf: true\n });\n\n return resolved?.id ?? null;\n }\n\n return null;\n },\n configureServer(server) {\n if (syncState === null) {\n return;\n }\n\n subscribeToEvents(server, syncState);\n }\n };\n}\n\nasync function probeHealth(serverUrl: URL): Promise<boolean> {\n try {\n const response = await fetch(new URL(\"/health\", serverUrl));\n\n if (!response.ok) {\n return false;\n }\n\n const payload = (await response.json()) as { packageName?: unknown };\n\n return payload.packageName === packageName;\n } catch {\n return false;\n }\n}\n\nasync function syncFiles(\n serverUrl: URL,\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">\n): Promise<void> {\n const files = await fetchJson<UISystemDevFile[]>(serverUrl, \"/files\");\n\n if (!Array.isArray(files)) {\n throw new Error(\n \"@tutti-os/ui-system dev server returned invalid files list\"\n );\n }\n\n const syncPaths = new Set<string>();\n\n await Promise.all(\n files.map(async (file) => {\n validateSyncFile(file);\n syncPaths.add(file.path);\n\n const destination = resolveCacheFile(cacheState.cacheRoot, file.path);\n await prepareCacheFileTarget(cacheState, destination);\n\n const currentHash = await readCachedHash(destination);\n\n if (currentHash === file.hash) {\n return;\n }\n\n const bytes = await fetchFile(serverUrl, file.path);\n const downloadedHash = hashBytes(bytes);\n\n if (downloadedHash !== file.hash) {\n throw new Error(\n `Hash mismatch while syncing @tutti-os/ui-system file: ${file.path}`\n );\n }\n\n await writeFile(destination, bytes);\n })\n );\n\n await removeStaleCacheFiles(cacheState, syncPaths);\n}\n\nasync function syncChangedFile(\n server: ViteDevServer,\n state: DevSyncState,\n event: Extract<UISystemDevEvent, { type: \"fileChanged\" }>\n): Promise<void> {\n validateEventPath(event.path);\n\n const destination = resolveCacheFile(state.cacheRoot, event.path);\n await prepareCacheFileTarget(state, destination);\n\n const bytes = await fetchFile(state.serverUrl, event.path);\n const downloadedHash = hashBytes(bytes);\n\n if (downloadedHash !== event.hash) {\n throw new Error(\n `Hash mismatch while syncing @tutti-os/ui-system file: ${event.path}`\n );\n }\n\n await writeFile(destination, bytes);\n invalidateFile(server, destination);\n}\n\nasync function removeDeletedFile(\n server: ViteDevServer,\n state: DevSyncState,\n event: Extract<UISystemDevEvent, { type: \"fileDeleted\" }>\n): Promise<void> {\n validateEventPath(event.path);\n\n const destination = resolveCacheFile(state.cacheRoot, event.path);\n\n invalidateFile(server, destination);\n await removeCacheFile(state, destination);\n}\n\nfunction subscribeToEvents(server: ViteDevServer, state: DevSyncState): void {\n let closed = false;\n let reconnectTimer: NodeJS.Timeout | null = null;\n let websocket: WebSocket | null = null;\n\n const close = (): void => {\n closed = true;\n\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n\n websocket?.close();\n websocket = null;\n };\n\n const reconnect = (): void => {\n if (closed || reconnectTimer !== null) {\n return;\n }\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, 1000);\n };\n\n const connect = (): void => {\n if (closed) {\n return;\n }\n\n websocket = new WebSocket(eventUrl(state.serverUrl));\n\n websocket.on(\"message\", (message) => {\n void handleEventMessage(server, state, message).catch(() => {\n // Event sync is best-effort; the initial HTTP sync remains authoritative.\n });\n });\n\n websocket.on(\"close\", reconnect);\n websocket.on(\"error\", () => {\n websocket?.close();\n });\n };\n\n connect();\n server.httpServer?.once(\"close\", close);\n}\n\nasync function handleEventMessage(\n server: ViteDevServer,\n state: DevSyncState,\n message: WebSocket.RawData\n): Promise<void> {\n const event = parseEvent(message);\n\n if (event === null) {\n return;\n }\n\n if (event.type === \"fileChanged\") {\n await syncChangedFile(server, state, event);\n return;\n }\n\n if (event.type === \"fileDeleted\") {\n await removeDeletedFile(server, state, event);\n }\n}\n\nfunction parseEvent(message: WebSocket.RawData): UISystemDevEvent | null {\n try {\n const event = JSON.parse(rawMessageToString(message)) as UISystemDevEvent;\n\n if (!isDevEvent(event)) {\n return null;\n }\n\n return event;\n } catch {\n return null;\n }\n}\n\nfunction rawMessageToString(message: WebSocket.RawData): string {\n if (Buffer.isBuffer(message)) {\n return message.toString(\"utf8\");\n }\n\n if (Array.isArray(message)) {\n return Buffer.concat(message).toString(\"utf8\");\n }\n\n return Buffer.from(message).toString(\"utf8\");\n}\n\nfunction isDevEvent(event: UISystemDevEvent): event is UISystemDevEvent {\n if (event === null || typeof event !== \"object\") {\n return false;\n }\n\n if (event.type === \"fileChanged\") {\n return typeof event.path === \"string\" && typeof event.hash === \"string\";\n }\n\n if (event.type === \"fileDeleted\") {\n return typeof event.path === \"string\";\n }\n\n return event.type === \"manifestChanged\" || event.type === \"componentsChanged\";\n}\n\nfunction invalidateFile(server: ViteDevServer, filePath: string): void {\n const modules = server.moduleGraph.getModulesByFile(filePath);\n\n if (modules === undefined) {\n return;\n }\n\n for (const moduleNode of modules) {\n server.moduleGraph.invalidateModule(moduleNode);\n }\n}\n\nasync function fetchComponentsMetadata(serverUrl: URL): Promise<void> {\n try {\n await fetchJson<unknown>(serverUrl, \"/components\");\n } catch {\n // Component diagnostics are best-effort; source sync and aliases are sufficient.\n }\n}\n\nasync function fetchJson<T>(serverUrl: URL, endpoint: string): Promise<T> {\n const response = await fetch(new URL(endpoint, serverUrl));\n\n if (!response.ok) {\n throw new Error(\n `@tutti-os/ui-system dev server ${endpoint} failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T;\n}\n\nasync function fetchFile(serverUrl: URL, syncPath: string): Promise<Buffer> {\n const response = await fetch(\n new URL(`/files/${encodeSyncPath(syncPath)}`, serverUrl)\n );\n\n if (!response.ok) {\n throw new Error(\n `@tutti-os/ui-system dev server file fetch failed for ${syncPath}`\n );\n }\n\n return Buffer.from(await response.arrayBuffer());\n}\n\nasync function readCachedHash(filePath: string): Promise<string | null> {\n try {\n return hashBytes(await readFile(filePath));\n } catch {\n return null;\n }\n}\n\nfunction validateManifest(\n manifest: UISystemDevManifest\n): asserts manifest is UISystemDevManifest & {\n entrypoints: Record<StableEntrypoint, string>;\n} {\n if (\n manifest === null ||\n typeof manifest !== \"object\" ||\n manifest.packageName !== packageName ||\n typeof manifest.entrypoints !== \"object\" ||\n manifest.entrypoints === null\n ) {\n throw new Error(\"@tutti-os/ui-system dev server returned invalid manifest\");\n }\n\n for (const entrypoint of stableEntrypoints) {\n const syncPath = manifest.entrypoints[entrypoint];\n\n if (typeof syncPath !== \"string\" || normalizeSyncPath(syncPath) === null) {\n throw new Error(\n `@tutti-os/ui-system dev server manifest is missing ${entrypoint}`\n );\n }\n }\n}\n\nfunction validateSyncFile(file: UISystemDevFile): void {\n if (\n file === null ||\n typeof file !== \"object\" ||\n typeof file.path !== \"string\" ||\n typeof file.hash !== \"string\" ||\n typeof file.size !== \"number\" ||\n normalizeSyncPath(file.path) === null\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev server returned invalid file entry\"\n );\n }\n}\n\nfunction validateEventPath(syncPath: string): void {\n if (normalizeSyncPath(syncPath) === null) {\n throw new Error(\n `Refusing unsafe @tutti-os/ui-system event path: ${syncPath}`\n );\n }\n}\n\nasync function prepareCacheRoot(\n projectRoot: string,\n cacheDir: string\n): Promise<Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">> {\n const cacheRoot = resolveCacheRoot(projectRoot, cacheDir);\n\n await ensureNoSymlinkAncestors(projectRoot, path.dirname(cacheRoot));\n await mkdir(cacheRoot, { recursive: true });\n await ensureNoSymlinkAncestors(projectRoot, cacheRoot);\n\n const cacheStat = await lstat(cacheRoot);\n\n if (!cacheStat.isDirectory() || cacheStat.isSymbolicLink()) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must be a real directory\"\n );\n }\n\n const realProjectRoot = await realpath(projectRoot);\n const realCacheRoot = await realpath(cacheRoot);\n\n if (!isPathInside(realProjectRoot, realCacheRoot)) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must resolve inside the Vite project root\"\n );\n }\n\n await ensureOwnedCacheRoot(cacheRoot);\n\n return { cacheRoot, realCacheRoot };\n}\n\nfunction resolveCacheRoot(projectRoot: string, cacheDir: string): string {\n const cacheRoot = path.resolve(projectRoot, cacheDir);\n const relative = path.relative(projectRoot, cacheRoot);\n\n if (\n relative === \"\" ||\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative)\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must resolve inside the Vite project root\"\n );\n }\n\n return cacheRoot;\n}\n\nasync function prepareCacheFileTarget(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n destination: string\n): Promise<void> {\n const parent = path.dirname(destination);\n\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n await mkdir(parent, { recursive: true });\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n\n const realParent = await realpath(parent);\n\n if (!isPathInside(cacheState.realCacheRoot, realParent)) {\n throw new Error(\n \"@tutti-os/ui-system dev cache file resolved outside cacheDir\"\n );\n }\n\n await rejectExistingSymlink(destination);\n}\n\nasync function removeCacheFile(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n destination: string\n): Promise<void> {\n const parent = path.dirname(destination);\n\n await ensureNoSymlinkAncestors(cacheState.cacheRoot, parent);\n\n const realParent = await realpath(parent).catch(() => null);\n\n if (\n realParent === null ||\n !isPathInside(cacheState.realCacheRoot, realParent)\n ) {\n throw new Error(\n \"@tutti-os/ui-system dev cache file resolved outside cacheDir\"\n );\n }\n\n await rejectExistingSymlink(destination);\n await rm(destination, { force: true });\n}\n\nasync function removeStaleCacheFiles(\n cacheState: Pick<DevSyncState, \"cacheRoot\" | \"realCacheRoot\">,\n authoritativePaths: Set<string>\n): Promise<void> {\n await ensureOwnedCacheRoot(cacheState.cacheRoot);\n\n const cachedFiles = await listCacheFiles(cacheState.cacheRoot);\n\n await Promise.all(\n cachedFiles.map(async (cachedFile) => {\n if (authoritativePaths.has(cachedFile)) {\n return;\n }\n\n await removeCacheFile(\n cacheState,\n resolveCacheFile(cacheState.cacheRoot, cachedFile)\n );\n })\n );\n}\n\nasync function listCacheFiles(\n directory: string,\n prefix = \"\"\n): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const paths = await Promise.all(\n entries.map(async (entry) => {\n const syncPath = prefix === \"\" ? entry.name : `${prefix}/${entry.name}`;\n const absolutePath = path.join(directory, entry.name);\n\n if (syncPath === cacheMarkerFileName) {\n return [];\n }\n\n if (entry.isSymbolicLink()) {\n throw new Error(\n `Refusing symlink in @tutti-os/ui-system dev cache: ${syncPath}`\n );\n }\n\n if (entry.isDirectory()) {\n return listCacheFiles(absolutePath, syncPath);\n }\n\n return entry.isFile() ? [syncPath] : [];\n })\n );\n\n return paths.flat();\n}\n\nasync function ensureOwnedCacheRoot(cacheRoot: string): Promise<void> {\n const markerPath = path.join(cacheRoot, cacheMarkerFileName);\n\n try {\n const markerStat = await lstat(markerPath);\n\n if (markerStat.isSymbolicLink() || !markerStat.isFile()) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir contains an unsafe ownership marker\"\n );\n }\n\n return;\n } catch (error) {\n if (!isNotFoundError(error)) {\n throw error;\n }\n }\n\n const entries = await readdir(cacheRoot);\n\n if (entries.length > 0) {\n throw new Error(\n \"@tutti-os/ui-system dev cacheDir must be empty or contain a Tutti UI cache marker before stale cleanup\"\n );\n }\n\n await writeFile(\n markerPath,\n JSON.stringify({ packageName, cache: \"ui-system-dev\" }, null, 2)\n );\n}\n\nfunction resolveCacheFile(cacheRoot: string, syncPath: string): string {\n const normalized = normalizeSyncPath(syncPath);\n\n if (normalized === null) {\n throw new Error(\n `Refusing to sync unsafe @tutti-os/ui-system path: ${syncPath}`\n );\n }\n\n const destination = path.resolve(cacheRoot, normalized);\n const relative = path.relative(cacheRoot, destination);\n\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Refusing to sync @tutti-os/ui-system path: ${syncPath}`);\n }\n\n return destination;\n}\n\nasync function ensureNoSymlinkAncestors(\n root: string,\n target: string\n): Promise<void> {\n const relative = path.relative(root, target);\n\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\"@tutti-os/ui-system dev cache path escaped cacheDir\");\n }\n\n const segments = relative === \"\" ? [] : relative.split(path.sep);\n let current = root;\n\n for (const segment of segments) {\n current = path.join(current, segment);\n\n try {\n const stat = await lstat(current);\n\n if (stat.isSymbolicLink()) {\n throw new Error(\n `Refusing symlink in @tutti-os/ui-system dev cache path: ${current}`\n );\n }\n } catch (error) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return;\n }\n\n throw error;\n }\n }\n}\n\nasync function rejectExistingSymlink(filePath: string): Promise<void> {\n try {\n const stat = await lstat(filePath);\n\n if (stat.isSymbolicLink() || !stat.isFile()) {\n throw new Error(\n `Refusing unsafe @tutti-os/ui-system cache file: ${filePath}`\n );\n }\n } catch (error) {\n if (isNotFoundError(error)) {\n return;\n }\n\n throw error;\n }\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction isPathInside(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n\n return (\n relative === \"\" ||\n (!relative.startsWith(\"..\") && !path.isAbsolute(relative))\n );\n}\n\nfunction normalizeSyncPath(input: string): string | null {\n if (input.includes(\"\\0\")) {\n return null;\n }\n\n const slashPath = input.replaceAll(\"\\\\\", \"/\").replace(/^\\/+/, \"\");\n const normalized = path.posix.normalize(slashPath);\n\n if (\n normalized === \".\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n return null;\n }\n\n return normalized;\n}\n\nfunction encodeSyncPath(syncPath: string): string {\n return syncPath.split(\"/\").map(encodeURIComponent).join(\"/\");\n}\n\nfunction hashBytes(bytes: Buffer): string {\n return `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n}\n\nfunction normalizeServerUrl(serverUrl: string): URL {\n return new URL(serverUrl);\n}\n\nfunction eventUrl(serverUrl: URL): string {\n const url = new URL(\"/events\", serverUrl);\n\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\n return url.href;\n}\n\nfunction entrypointAlias(entrypoint: StableEntrypoint): RegExp {\n const specifier =\n entrypoint === \".\" ? packageName : `${packageName}${entrypoint.slice(1)}`;\n\n return new RegExp(`^${escapeRegExp(specifier)}$`);\n}\n\nfunction isCacheImporter(\n state: DevSyncState | null,\n importer: string | undefined\n): boolean {\n if (state === null || importer === undefined) {\n return false;\n }\n\n const importerPath = stripViteIdQuery(importer);\n\n if (!path.isAbsolute(importerPath)) {\n return false;\n }\n\n return isPathInside(state.cacheRoot, path.resolve(importerPath));\n}\n\nfunction stripViteIdQuery(id: string): string {\n const [pathWithoutQuery = \"\"] = id.split(\"?\", 1);\n\n return pathWithoutQuery;\n}\n\nfunction packageContextImporter(): string {\n return fileURLToPath(new URL(\"../styles/index.css\", import.meta.url));\n}\n\nfunction resolvePackageStyleDependency(dependencyName: string): string {\n const packageDirectory = findDependencyPackageDirectory(dependencyName);\n const manifest = JSON.parse(\n readFileSync(path.join(packageDirectory, \"package.json\"), \"utf8\")\n ) as {\n exports?: {\n \".\"?: {\n style?: unknown;\n };\n };\n };\n const styleExport = manifest.exports?.[\".\"]?.style;\n\n if (typeof styleExport !== \"string\") {\n throw new Error(`${dependencyName} does not expose a style export`);\n }\n\n return path.join(packageDirectory, styleExport);\n}\n\nfunction findDependencyPackageDirectory(dependencyName: string): string {\n const searchPaths = packageRequire.resolve.paths(dependencyName) ?? [];\n\n for (const searchPath of searchPaths) {\n const packageDirectory = path.join(searchPath, dependencyName);\n\n try {\n const manifest = JSON.parse(\n readFileSync(path.join(packageDirectory, \"package.json\"), \"utf8\")\n ) as { name?: unknown };\n\n if (manifest.name === dependencyName) {\n return packageDirectory;\n }\n } catch {\n // Try the next Node resolution search path.\n }\n }\n\n throw new Error(`Could not resolve ${dependencyName} from ${packageName}`);\n}\n\nfunction dependencyAlias(dependencyName: string): RegExp {\n return new RegExp(`^${escapeRegExp(dependencyName)}$`);\n}\n\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"],"mappings":"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","names":[]}
@@ -13,7 +13,7 @@ interface LayoutPresetIconProps extends IconProps {
13
13
  }
14
14
  declare function LayoutPresetIcon({ className, selectedCount, size, title, variant, ...props }: LayoutPresetIconProps): react_jsx_runtime.JSX.Element;
15
15
 
16
- declare function NextopMark({ className, size, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
16
+ declare function TuttiMark({ className, size, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
17
17
 
18
18
  declare function LaunchIcon(props: IconProps): react_jsx_runtime.JSX.Element;
19
19
  declare function PlayIcon(props: IconProps): react_jsx_runtime.JSX.Element;
@@ -111,4 +111,4 @@ declare function AskLinedIcon(props: IconProps): react_jsx_runtime.JSX.Element;
111
111
  declare function GoogleBrandIcon(props: IconProps): react_jsx_runtime.JSX.Element;
112
112
  declare function GitHubBrandIcon(props: IconProps): react_jsx_runtime.JSX.Element;
113
113
 
114
- export { AddIcon, AgentSessionsIcon, AppWindowIcon, ArrowLeftIcon, ArrowRightIcon, AskLinedIcon, CapabilityIcon, ChatIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon, CopyIcon, CreateChatIcon, DarkModeIcon, DashboardIcon, DeleteIcon, DirectoryIcon, DownloadIcon, EditIcon, EyeIcon, FailedFilledIcon, FailedLinedIcon, FileCodeIcon, FileCreateIcon, FileIcon, FileLinedIcon, FileTextIcon, FolderFailedIcon, FolderFilledIcon, FolderIcon, GitHubBrandIcon, GoogleBrandIcon, GridBottomLinedIcon, GridHorizontalLinedIcon, GridLeftLinedIcon, GridRightLinedIcon, GridTopLinedIcon, GridVerticalLinedIcon, GuideIcon, HealthIcon, type IconProps, ImageFileIcon, ImageGenerateIcon, IssueIcon, KeyboardIcon, LaunchIcon, LayoutMenuIcon, LayoutPresetIcon, type LayoutPresetIconProps, LightModeIcon, LinkIcon, LoadingIcon, type LoadingIconProps, LocateFolderIcon, MaximizeIcon, MinimizeIcon, MoreHorizontalIcon, NavAgentsIcon, NavApplicationsFilledIcon, NavApplicationsLinedIcon, NavLaunchIcon, NewWorkspaceIcon, NewWorkspaceLinedIcon, NextopMark, NoWorkspaceLinedIcon, OpenSessionsIcon, OverviewLayoutIcon, PanelIcon, PauseIcon, PinFilledIcon, PinIcon, PlatformIcon, PlayIcon, ProductDocIcon, ProductIcon, RefreshIcon, RestoreIcon, RoomsHintIcon, SearchIcon, SettingsIcon, SuccessFilledIcon, SuccessLinedIcon, TaskIcon, ThinkingIcon, ToolsIcon, UnavailableChatIcon, UninstallIcon, UploadFolderIcon, UploadIcon, VideoFileIcon, ViewGridLinedIcon, ViewListLinedIcon, WarningFilledIcon, WarningLinedIcon, WebIcon, WebScrapeIcon };
114
+ export { AddIcon, AgentSessionsIcon, AppWindowIcon, ArrowLeftIcon, ArrowRightIcon, AskLinedIcon, CapabilityIcon, ChatIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon, CopyIcon, CreateChatIcon, DarkModeIcon, DashboardIcon, DeleteIcon, DirectoryIcon, DownloadIcon, EditIcon, EyeIcon, FailedFilledIcon, FailedLinedIcon, FileCodeIcon, FileCreateIcon, FileIcon, FileLinedIcon, FileTextIcon, FolderFailedIcon, FolderFilledIcon, FolderIcon, GitHubBrandIcon, GoogleBrandIcon, GridBottomLinedIcon, GridHorizontalLinedIcon, GridLeftLinedIcon, GridRightLinedIcon, GridTopLinedIcon, GridVerticalLinedIcon, GuideIcon, HealthIcon, type IconProps, ImageFileIcon, ImageGenerateIcon, IssueIcon, KeyboardIcon, LaunchIcon, LayoutMenuIcon, LayoutPresetIcon, type LayoutPresetIconProps, LightModeIcon, LinkIcon, LoadingIcon, type LoadingIconProps, LocateFolderIcon, MaximizeIcon, MinimizeIcon, MoreHorizontalIcon, NavAgentsIcon, NavApplicationsFilledIcon, NavApplicationsLinedIcon, NavLaunchIcon, NewWorkspaceIcon, NewWorkspaceLinedIcon, NoWorkspaceLinedIcon, OpenSessionsIcon, OverviewLayoutIcon, PanelIcon, PauseIcon, PinFilledIcon, PinIcon, PlatformIcon, PlayIcon, ProductDocIcon, ProductIcon, RefreshIcon, RestoreIcon, RoomsHintIcon, SearchIcon, SettingsIcon, SuccessFilledIcon, SuccessLinedIcon, TaskIcon, ThinkingIcon, ToolsIcon, TuttiMark, UnavailableChatIcon, UninstallIcon, UploadFolderIcon, UploadIcon, VideoFileIcon, ViewGridLinedIcon, ViewListLinedIcon, WarningFilledIcon, WarningLinedIcon, WebIcon, WebScrapeIcon };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  LayoutPresetIcon,
3
- NextopMark
4
- } from "../chunk-XHA7R2WC.js";
3
+ TuttiMark
4
+ } from "../chunk-RKQ4FPGY.js";
5
5
  import {
6
6
  AddIcon,
7
7
  AgentSessionsIcon,
@@ -158,7 +158,6 @@ export {
158
158
  NavLaunchIcon,
159
159
  NewWorkspaceIcon,
160
160
  NewWorkspaceLinedIcon,
161
- NextopMark,
162
161
  NoWorkspaceLinedIcon,
163
162
  OpenSessionsIcon,
164
163
  OverviewLayoutIcon,
@@ -180,6 +179,7 @@ export {
180
179
  TaskIcon,
181
180
  ThinkingIcon,
182
181
  ToolsIcon,
182
+ TuttiMark,
183
183
  UnavailableChatIcon,
184
184
  UninstallIcon,
185
185
  UploadFolderIcon,
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { Badge, BareIconButton, BareIconButtonProps, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ConfirmationDialog, ConfirmationDialogTone, DatePicker, DatePickerLabels, DatePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input, MentionPill, MentionPillFileKind, MentionPillKind, MentionPillProps, MenuPoint, MenuPointAlignment, MenuSize, MenuSurface, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SectionTabItem, SectionTabs, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectSplitColumn, SelectSplitColumnItems, SelectSplitColumnLabel, SelectSplitDivider, SelectSplitLayout, SelectTrigger, SelectValue, Separator, ShortcutBadge, Spinner, SpinnerProps, StatusDot, Switch, Textarea, ToastClose, ToastDescription, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, UnderlineTabItem, UnderlineTabs, ViewportMenuPlacement, ViewportMenuSurface, ViewportMenuSurfaceProps, badgeVariants, buttonVariants, menuItemClassName, menuItemIndicatorClassName, menuItemWithIndicatorClassName, menuSurfaceClassName, statusDotVariants, toastVariants } from './components/index.js';
2
- export { AddIcon, AgentSessionsIcon, AppWindowIcon, ArrowLeftIcon, ArrowRightIcon, AskLinedIcon, CapabilityIcon, ChatIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon, CopyIcon, CreateChatIcon, DarkModeIcon, DashboardIcon, DeleteIcon, DirectoryIcon, DownloadIcon, EditIcon, EyeIcon, FailedFilledIcon, FailedLinedIcon, FileCodeIcon, FileCreateIcon, FileIcon, FileLinedIcon, FileTextIcon, FolderFailedIcon, FolderFilledIcon, FolderIcon, GitHubBrandIcon, GoogleBrandIcon, GridBottomLinedIcon, GridHorizontalLinedIcon, GridLeftLinedIcon, GridRightLinedIcon, GridTopLinedIcon, GridVerticalLinedIcon, GuideIcon, HealthIcon, IconProps, ImageFileIcon, ImageGenerateIcon, IssueIcon, KeyboardIcon, LaunchIcon, LayoutMenuIcon, LayoutPresetIcon, LayoutPresetIconProps, LightModeIcon, LinkIcon, LoadingIcon, LoadingIconProps, LocateFolderIcon, MaximizeIcon, MinimizeIcon, MoreHorizontalIcon, NavAgentsIcon, NavApplicationsFilledIcon, NavApplicationsLinedIcon, NavLaunchIcon, NewWorkspaceIcon, NewWorkspaceLinedIcon, NextopMark, NoWorkspaceLinedIcon, OpenSessionsIcon, OverviewLayoutIcon, PanelIcon, PauseIcon, PinFilledIcon, PinIcon, PlatformIcon, PlayIcon, ProductDocIcon, ProductIcon, RefreshIcon, RestoreIcon, RoomsHintIcon, SearchIcon, SettingsIcon, SuccessFilledIcon, SuccessLinedIcon, TaskIcon, ThinkingIcon, ToolsIcon, UnavailableChatIcon, UninstallIcon, UploadFolderIcon, UploadIcon, VideoFileIcon, ViewGridLinedIcon, ViewListLinedIcon, WarningFilledIcon, WarningLinedIcon, WebIcon, WebScrapeIcon } from './icons/index.js';
3
- export { NextopDateLocale, formatNextopDateTime, formatNextopShortDateTime, getCurrentNextopDateLocale } from './date-format.js';
2
+ export { AddIcon, AgentSessionsIcon, AppWindowIcon, ArrowLeftIcon, ArrowRightIcon, AskLinedIcon, CapabilityIcon, ChatIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon, CopyIcon, CreateChatIcon, DarkModeIcon, DashboardIcon, DeleteIcon, DirectoryIcon, DownloadIcon, EditIcon, EyeIcon, FailedFilledIcon, FailedLinedIcon, FileCodeIcon, FileCreateIcon, FileIcon, FileLinedIcon, FileTextIcon, FolderFailedIcon, FolderFilledIcon, FolderIcon, GitHubBrandIcon, GoogleBrandIcon, GridBottomLinedIcon, GridHorizontalLinedIcon, GridLeftLinedIcon, GridRightLinedIcon, GridTopLinedIcon, GridVerticalLinedIcon, GuideIcon, HealthIcon, IconProps, ImageFileIcon, ImageGenerateIcon, IssueIcon, KeyboardIcon, LaunchIcon, LayoutMenuIcon, LayoutPresetIcon, LayoutPresetIconProps, LightModeIcon, LinkIcon, LoadingIcon, LoadingIconProps, LocateFolderIcon, MaximizeIcon, MinimizeIcon, MoreHorizontalIcon, NavAgentsIcon, NavApplicationsFilledIcon, NavApplicationsLinedIcon, NavLaunchIcon, NewWorkspaceIcon, NewWorkspaceLinedIcon, NoWorkspaceLinedIcon, OpenSessionsIcon, OverviewLayoutIcon, PanelIcon, PauseIcon, PinFilledIcon, PinIcon, PlatformIcon, PlayIcon, ProductDocIcon, ProductIcon, RefreshIcon, RestoreIcon, RoomsHintIcon, SearchIcon, SettingsIcon, SuccessFilledIcon, SuccessLinedIcon, TaskIcon, ThinkingIcon, ToolsIcon, TuttiMark, UnavailableChatIcon, UninstallIcon, UploadFolderIcon, UploadIcon, VideoFileIcon, ViewGridLinedIcon, ViewListLinedIcon, WarningFilledIcon, WarningLinedIcon, WebIcon, WebScrapeIcon } from './icons/index.js';
3
+ export { TuttiDateLocale, formatTuttiDateTime, formatTuttiShortDateTime, getCurrentTuttiDateLocale } from './date-format.js';
4
4
  export { cn } from './utils.js';
5
5
  export { ExternalToast, ToasterProps, toast } from 'sonner';
6
6
  import 'react/jsx-runtime';
package/dist/index.js CHANGED
@@ -106,16 +106,16 @@ import {
106
106
  statusDotVariants,
107
107
  toast,
108
108
  toastVariants
109
- } from "./chunk-QXXI5OBT.js";
109
+ } from "./chunk-YIAY5DKS.js";
110
110
  import {
111
- formatNextopDateTime,
112
- formatNextopShortDateTime,
113
- getCurrentNextopDateLocale
114
- } from "./chunk-GX3U3V36.js";
111
+ formatTuttiDateTime,
112
+ formatTuttiShortDateTime,
113
+ getCurrentTuttiDateLocale
114
+ } from "./chunk-K57FUMQG.js";
115
115
  import {
116
116
  LayoutPresetIcon,
117
- NextopMark
118
- } from "./chunk-XHA7R2WC.js";
117
+ TuttiMark
118
+ } from "./chunk-RKQ4FPGY.js";
119
119
  import {
120
120
  AddIcon,
121
121
  AgentSessionsIcon,
@@ -326,7 +326,6 @@ export {
326
326
  NavLaunchIcon,
327
327
  NewWorkspaceIcon,
328
328
  NewWorkspaceLinedIcon,
329
- NextopMark,
330
329
  NoWorkspaceLinedIcon,
331
330
  OpenSessionsIcon,
332
331
  OverviewLayoutIcon,
@@ -393,6 +392,7 @@ export {
393
392
  TooltipPortal,
394
393
  TooltipProvider,
395
394
  TooltipTrigger,
395
+ TuttiMark,
396
396
  UnavailableChatIcon,
397
397
  UnderlineTabs,
398
398
  UninstallIcon,
@@ -409,9 +409,9 @@ export {
409
409
  badgeVariants,
410
410
  buttonVariants,
411
411
  cn,
412
- formatNextopDateTime,
413
- formatNextopShortDateTime,
414
- getCurrentNextopDateLocale,
412
+ formatTuttiDateTime,
413
+ formatTuttiShortDateTime,
414
+ getCurrentTuttiDateLocale,
415
415
  menuItemClassName,
416
416
  menuItemIndicatorClassName,
417
417
  menuItemWithIndicatorClassName,
@@ -1494,15 +1494,15 @@
1494
1494
  "storyboard": true
1495
1495
  },
1496
1496
  {
1497
- "id": "nextop-mark-filled-icon",
1497
+ "id": "tutti-mark-filled-icon",
1498
1498
  "layer": "base",
1499
- "name": "NextopMark",
1500
- "export": "NextopMark",
1499
+ "name": "TuttiMark",
1500
+ "export": "TuttiMark",
1501
1501
  "from": "@tutti-os/ui-system/icons",
1502
1502
  "category": "icon",
1503
1503
  "status": "stable",
1504
- "source": "src/icons/nextop-mark.tsx",
1505
- "description": "Nextop brand mark SVG icon.",
1504
+ "source": "src/icons/tutti-mark.tsx",
1505
+ "description": "Tutti brand mark SVG icon.",
1506
1506
  "useCases": ["Brand marks", "Application identity"],
1507
1507
  "migrationHints": [],
1508
1508
  "iconVariant": "filled"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://nextop.dev/schemas/ui-system-components.schema.json",
4
- "title": "Nextop UI System Component Metadata",
3
+ "$id": "https://tutti.dev/schemas/ui-system-components.schema.json",
4
+ "title": "Tutti UI System Component Metadata",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
7
  "required": ["schemaVersion", "components"],
@@ -1495,15 +1495,15 @@ var components_default = {
1495
1495
  storyboard: true
1496
1496
  },
1497
1497
  {
1498
- id: "nextop-mark-filled-icon",
1498
+ id: "tutti-mark-filled-icon",
1499
1499
  layer: "base",
1500
- name: "NextopMark",
1501
- export: "NextopMark",
1500
+ name: "TuttiMark",
1501
+ export: "TuttiMark",
1502
1502
  from: "@tutti-os/ui-system/icons",
1503
1503
  category: "icon",
1504
1504
  status: "stable",
1505
- source: "src/icons/nextop-mark.tsx",
1506
- description: "Nextop brand mark SVG icon.",
1505
+ source: "src/icons/tutti-mark.tsx",
1506
+ description: "Tutti brand mark SVG icon.",
1507
1507
  useCases: ["Brand marks", "Application identity"],
1508
1508
  migrationHints: [],
1509
1509
  iconVariant: "filled"