@sky.ui/core 0.0.28 → 0.0.30

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sky.ui/core",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "description": "Sky UI web components built with Lit — 70+ components, bundler plugins, and custom elements.",
5
5
  "keywords": [
6
6
  "sky-ui",
@@ -29,6 +29,10 @@
29
29
  "plugins/webpack-plugin.d.ts",
30
30
  "plugins/rollup-plugin.js",
31
31
  "plugins/rollup-plugin.d.ts",
32
+ "plugins/ce-auto-import.js",
33
+ "plugins/ce-auto-import.d.ts",
34
+ "plugins/stack-resolvers.js",
35
+ "plugins/stack-resolvers.d.ts",
32
36
  "README.md",
33
37
  "LICENSE.md",
34
38
  "CHANGELOG.md"
@@ -41,6 +45,16 @@
41
45
  },
42
46
  "./auto-import": "./auto-import.js",
43
47
  "./auto-import-loader": "./auto-import-loader.js",
48
+ "./ce-auto-import": {
49
+ "types": "./plugins/ce-auto-import.d.ts",
50
+ "import": "./plugins/ce-auto-import.js",
51
+ "default": "./plugins/ce-auto-import.js"
52
+ },
53
+ "./stack-resolvers": {
54
+ "types": "./plugins/stack-resolvers.d.ts",
55
+ "import": "./plugins/stack-resolvers.js",
56
+ "default": "./plugins/stack-resolvers.js"
57
+ },
44
58
  "./custom-elements.json": "./dist/custom-elements.json",
45
59
  "./all": {
46
60
  "import": "./dist/index.js",
@@ -0,0 +1,18 @@
1
+ import type { Plugin } from "vite";
2
+ export type SkyCeAutoImportTier = "free" | "pro" | "ultra";
3
+ export interface SkyCeAutoImportOptions {
4
+ /** Highest paid tier available — includes lower-tier tags. Default: free */
5
+ tier?: SkyCeAutoImportTier;
6
+ /** Project root used for node_modules lookups. Default: process.cwd() */
7
+ root?: string;
8
+ /** Extra path substrings to skip. */
9
+ exclude?: string[];
10
+ }
11
+ /** @deprecated Prefer SkyCeAutoImportOptions */
12
+ export type SkyVueCeAutoImportOptions = SkyCeAutoImportOptions;
13
+ /**
14
+ * Vite plugin: scan modules for <sky-*> and inject `@sky.ui(.pro|.ultra)/core/<tag>` imports.
15
+ */
16
+ export declare function createSkyCeAutoImportPlugin(options?: SkyCeAutoImportOptions): Plugin;
17
+ /** @deprecated Prefer createSkyCeAutoImportPlugin */
18
+ export declare const createSkyVueCeAutoImportPlugin: typeof createSkyCeAutoImportPlugin;
@@ -0,0 +1,160 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // plugins/ce-auto-import.ts
5
+ import { existsSync } from "fs";
6
+ import { createRequire } from "module";
7
+ import { join } from "path";
8
+ var require2 = createRequire(import.meta.url);
9
+ var VIRTUAL_ID = "\0sky-ui-ce-auto-import";
10
+ var VIRTUAL_QUERY = "virtual:sky-ui-ce-auto-import";
11
+ var TAG_RE = /<(sky-[a-z][a-z0-9]*(?:-[a-z0-9]+)*)/gi;
12
+ var TRANSFORM_EXT_RE = /\.(vue|tsx|jsx|ts|js|mjs|html)$/i;
13
+ function pascalToKebabSky(name) {
14
+ return name.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/^Sky-?/, "sky-").toLowerCase();
15
+ }
16
+ __name(pascalToKebabSky, "pascalToKebabSky");
17
+ function tryLoadTagSet(specifier) {
18
+ try {
19
+ const mod = require2(specifier);
20
+ if (mod.SKY_UI_TAG_NAMES instanceof Set) return new Set(mod.SKY_UI_TAG_NAMES);
21
+ if (Array.isArray(mod.SKY_UI_COMPONENTS)) {
22
+ return new Set(mod.SKY_UI_COMPONENTS.map(pascalToKebabSky));
23
+ }
24
+ } catch {
25
+ }
26
+ return /* @__PURE__ */ new Set();
27
+ }
28
+ __name(tryLoadTagSet, "tryLoadTagSet");
29
+ function loadTierSets(tier) {
30
+ const free = tryLoadTagSet("@sky.ui/core/auto-import");
31
+ const pro = tier === "pro" || tier === "ultra" ? tryLoadTagSet("@sky.ui.pro/core/auto-import") : /* @__PURE__ */ new Set();
32
+ const ultra = tier === "ultra" ? tryLoadTagSet("@sky.ui.ultra/core/auto-import") : /* @__PURE__ */ new Set();
33
+ return {
34
+ free,
35
+ pro,
36
+ ultra
37
+ };
38
+ }
39
+ __name(loadTierSets, "loadTierSets");
40
+ function coreImportPath(tag, sets) {
41
+ if (sets.ultra.has(tag)) return `@sky.ui.ultra/core/${tag}`;
42
+ if (sets.pro.has(tag)) return `@sky.ui.pro/core/${tag}`;
43
+ if (sets.free.has(tag)) return `@sky.ui/core/${tag}`;
44
+ return null;
45
+ }
46
+ __name(coreImportPath, "coreImportPath");
47
+ function coreModuleExists(pkg, root) {
48
+ const match = pkg.match(/^(@sky\.ui(?:\.pro|\.ultra)?\/core)\/(.+)$/);
49
+ if (!match) return false;
50
+ const packageRoot = join(root, "node_modules", ...match[1].split("/"));
51
+ const distDir = join(packageRoot, "dist", match[2]);
52
+ return existsSync(join(distDir, "index.js")) || existsSync(join(distDir, `${match[2]}.js`));
53
+ }
54
+ __name(coreModuleExists, "coreModuleExists");
55
+ function extractTags(content) {
56
+ const tags = /* @__PURE__ */ new Set();
57
+ let match;
58
+ TAG_RE.lastIndex = 0;
59
+ while ((match = TAG_RE.exec(content)) !== null) {
60
+ tags.add(match[1].toLowerCase());
61
+ }
62
+ return tags;
63
+ }
64
+ __name(extractTags, "extractTags");
65
+ function shouldTransform(id, exclude) {
66
+ if (!id || id.startsWith("\0") || id.includes("\0")) return false;
67
+ const clean = id.split("?")[0].replace(/\\/g, "/");
68
+ if (clean.includes("/node_modules/")) return false;
69
+ if (!TRANSFORM_EXT_RE.test(clean)) return false;
70
+ for (const part of exclude) {
71
+ if (clean.includes(part.replace(/\\/g, "/"))) return false;
72
+ }
73
+ return true;
74
+ }
75
+ __name(shouldTransform, "shouldTransform");
76
+ function injectImportLines(code, importLines, fileId) {
77
+ if (!importLines.length) return null;
78
+ const block = `${importLines.join("\n")}
79
+ `;
80
+ const clean = fileId.split("?")[0].replace(/\\/g, "/");
81
+ if (clean.endsWith(".vue")) {
82
+ const setupOpen = code.match(/<script\b[^>]*\bsetup\b[^>]*>/i);
83
+ if (setupOpen && setupOpen.index != null) {
84
+ const idx = setupOpen.index + setupOpen[0].length;
85
+ return {
86
+ code: code.slice(0, idx) + "\n" + block + code.slice(idx),
87
+ map: null
88
+ };
89
+ }
90
+ const scriptOpen = code.match(/<script\b[^>]*>/i);
91
+ if (scriptOpen && scriptOpen.index != null) {
92
+ const idx = scriptOpen.index + scriptOpen[0].length;
93
+ return {
94
+ code: code.slice(0, idx) + "\n" + block + code.slice(idx),
95
+ map: null
96
+ };
97
+ }
98
+ return {
99
+ code: `${code}
100
+ <script setup>
101
+ ${block}</script>
102
+ `,
103
+ map: null
104
+ };
105
+ }
106
+ return {
107
+ code: block + code,
108
+ map: null
109
+ };
110
+ }
111
+ __name(injectImportLines, "injectImportLines");
112
+ function createSkyCeAutoImportPlugin(options = {}) {
113
+ const tier = options.tier ?? "free";
114
+ const root = options.root ?? process.cwd();
115
+ const exclude = [
116
+ "/scripts/sky-vue-ce-auto-import",
117
+ "/plugins/ce-auto-import",
118
+ "/frameworks/",
119
+ ...options.exclude ?? []
120
+ ];
121
+ let sets = loadTierSets(tier);
122
+ return {
123
+ name: "sky-ui-ce-auto-import",
124
+ enforce: "pre",
125
+ buildStart() {
126
+ sets = loadTierSets(tier);
127
+ },
128
+ resolveId(id) {
129
+ if (id === VIRTUAL_QUERY || id === VIRTUAL_ID) return VIRTUAL_ID;
130
+ return null;
131
+ },
132
+ load(id) {
133
+ if (id !== VIRTUAL_ID) return null;
134
+ return "/** Per-file sky-* CE imports \u2014 virtual entry is intentionally empty. */\n";
135
+ },
136
+ transform(code, id) {
137
+ if (typeof code !== "string" || !shouldTransform(id, exclude)) return null;
138
+ const tags = extractTags(code);
139
+ if (!tags.size) return null;
140
+ const pkgs = [
141
+ ...tags
142
+ ].sort().map((tag) => coreImportPath(tag, sets)).filter((pkg) => Boolean(pkg) && coreModuleExists(pkg, root));
143
+ const toInject = pkgs.filter((pkg) => {
144
+ if (code.includes(`'${pkg}'`) || code.includes(`"${pkg}"`) || code.includes(`\`${pkg}\``)) {
145
+ return false;
146
+ }
147
+ const escaped = pkg.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
148
+ return !new RegExp(`import\\(\\s*['"\`]${escaped}['"\`]\\s*\\)`).test(code);
149
+ });
150
+ if (!toInject.length) return null;
151
+ return injectImportLines(code, toInject.map((pkg) => `import '${pkg}';`), id);
152
+ }
153
+ };
154
+ }
155
+ __name(createSkyCeAutoImportPlugin, "createSkyCeAutoImportPlugin");
156
+ var createSkyVueCeAutoImportPlugin = createSkyCeAutoImportPlugin;
157
+ export {
158
+ createSkyCeAutoImportPlugin,
159
+ createSkyVueCeAutoImportPlugin
160
+ };
@@ -0,0 +1,10 @@
1
+ export type SkyMainResolverFn = (componentName: string) => {
2
+ name: string;
3
+ from: string;
4
+ } | undefined;
5
+ /** Free-only Main resolvers. */
6
+ export declare function skyUiFreeMainResolvers(options?: Record<string, unknown>): SkyMainResolverFn[];
7
+ /** Pro includes free. */
8
+ export declare function skyUiProMainResolvers(options?: Record<string, unknown>): SkyMainResolverFn[];
9
+ /** Ultra includes free + pro. */
10
+ export declare function skyUiUltraMainResolvers(options?: Record<string, unknown>): SkyMainResolverFn[];
@@ -0,0 +1,43 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // plugins/stack-resolvers.ts
5
+ import { createRequire } from "module";
6
+ var require2 = createRequire(import.meta.url);
7
+ function tryResolver(specifier, exportName, options) {
8
+ try {
9
+ const mod = require2(specifier);
10
+ const factory = mod[exportName];
11
+ if (typeof factory !== "function") return null;
12
+ return factory(options);
13
+ } catch {
14
+ return null;
15
+ }
16
+ }
17
+ __name(tryResolver, "tryResolver");
18
+ function skyUiFreeMainResolvers(options = {}) {
19
+ const free = tryResolver("@sky.ui/core/auto-import", "SkyUIMainResolver", options);
20
+ return free ? [
21
+ free
22
+ ] : [];
23
+ }
24
+ __name(skyUiFreeMainResolvers, "skyUiFreeMainResolvers");
25
+ function skyUiProMainResolvers(options = {}) {
26
+ const list = skyUiFreeMainResolvers(options);
27
+ const pro = tryResolver("@sky.ui.pro/core/auto-import", "SkyUIProMainResolver", options);
28
+ if (pro) list.push(pro);
29
+ return list;
30
+ }
31
+ __name(skyUiProMainResolvers, "skyUiProMainResolvers");
32
+ function skyUiUltraMainResolvers(options = {}) {
33
+ const list = skyUiProMainResolvers(options);
34
+ const ultra = tryResolver("@sky.ui.ultra/core/auto-import", "SkyUIUltraMainResolver", options);
35
+ if (ultra) list.push(ultra);
36
+ return list;
37
+ }
38
+ __name(skyUiUltraMainResolvers, "skyUiUltraMainResolvers");
39
+ export {
40
+ skyUiFreeMainResolvers,
41
+ skyUiProMainResolvers,
42
+ skyUiUltraMainResolvers
43
+ };
@@ -15,5 +15,10 @@ export interface SkyUIMainVitePluginOptions extends SkyUIMainAutoImportPluginOpt
15
15
  resolverOptions?: Record<string, unknown>;
16
16
  dts?: boolean;
17
17
  componentsOptions?: Record<string, unknown>;
18
+ /** Per-file <sky-*> CE imports. Default: true. */
19
+ ceAutoImport?: boolean;
20
+ root?: string;
18
21
  }
19
- export declare function SkyUIMainVitePlugin(options?: SkyUIMainVitePluginOptions): Plugin | Plugin[];
22
+ export declare function SkyUIMainVitePlugin(options?: SkyUIMainVitePluginOptions): Plugin[];
23
+ export { createSkyCeAutoImportPlugin, createSkyVueCeAutoImportPlugin } from "./ce-auto-import.js";
24
+ export { skyUiFreeMainResolvers, skyUiProMainResolvers, skyUiUltraMainResolvers, } from "./stack-resolvers.js";
@@ -7,6 +7,10 @@ import path from "path";
7
7
  import { fileURLToPath } from "url";
8
8
  import Components from "unplugin-vue-components/vite";
9
9
  import { SKY_UI_TAG_NAMES, getCoreImportPath, SkyUIMainResolver } from "../auto-import.js";
10
+ import { createSkyCeAutoImportPlugin } from "./ce-auto-import.js";
11
+ import { skyUiFreeMainResolvers } from "./stack-resolvers.js";
12
+ import { createSkyCeAutoImportPlugin as createSkyCeAutoImportPlugin2, createSkyVueCeAutoImportPlugin } from "./ce-auto-import.js";
13
+ import { skyUiFreeMainResolvers as skyUiFreeMainResolvers2, skyUiProMainResolvers, skyUiUltraMainResolvers } from "./stack-resolvers.js";
10
14
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
11
15
  var CORE_DIST = path.resolve(__dirname, "..", "dist");
12
16
  var VIRTUAL_ID = "\0sky-ui-core-auto-import";
@@ -94,23 +98,40 @@ ${code}`,
94
98
  }
95
99
  __name(coreAutoImportVitePlugin, "coreAutoImportVitePlugin");
96
100
  function coreVueComponentsVitePlugin(options = {}) {
101
+ const resolverOptions = options.resolverOptions ?? {};
102
+ const resolvers = skyUiFreeMainResolvers(resolverOptions);
103
+ if (!resolvers.length) {
104
+ resolvers.push(SkyUIMainResolver(resolverOptions));
105
+ }
97
106
  return Components({
98
- resolvers: [
99
- SkyUIMainResolver(options.resolverOptions ?? {})
100
- ],
107
+ resolvers,
101
108
  dts: options.dts !== false,
102
109
  ...options.componentsOptions
103
110
  });
104
111
  }
105
112
  __name(coreVueComponentsVitePlugin, "coreVueComponentsVitePlugin");
106
113
  function SkyUIMainVitePlugin(options = {}) {
107
- const { mode = "vue", ...rest } = options;
114
+ const { mode = "vue", ceAutoImport = true, root, ...rest } = options;
115
+ const plugins = [];
116
+ if (ceAutoImport !== false) {
117
+ plugins.push(createSkyCeAutoImportPlugin({
118
+ tier: "free",
119
+ root
120
+ }));
121
+ }
108
122
  if (mode === "auto-import") {
109
- return coreAutoImportVitePlugin(rest);
123
+ plugins.push(coreAutoImportVitePlugin(rest));
124
+ return plugins;
110
125
  }
111
- return coreVueComponentsVitePlugin(rest);
126
+ plugins.push(coreVueComponentsVitePlugin(rest));
127
+ return plugins;
112
128
  }
113
129
  __name(SkyUIMainVitePlugin, "SkyUIMainVitePlugin");
114
130
  export {
115
- SkyUIMainVitePlugin
131
+ SkyUIMainVitePlugin,
132
+ createSkyCeAutoImportPlugin2 as createSkyCeAutoImportPlugin,
133
+ createSkyVueCeAutoImportPlugin,
134
+ skyUiFreeMainResolvers2 as skyUiFreeMainResolvers,
135
+ skyUiProMainResolvers,
136
+ skyUiUltraMainResolvers
116
137
  };