multiclone 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +9 -8
  2. package/agents/section-builder.md +5 -3
  3. package/commands/multiclone.md +3 -3
  4. package/dist/adapters/cli.js +14 -0
  5. package/dist/adapters/cli.js.map +1 -1
  6. package/dist/contracts/tools/method.js +12 -1
  7. package/dist/contracts/tools/method.js.map +1 -1
  8. package/dist/contracts/tools/session.js +9 -8
  9. package/dist/contracts/tools/session.js.map +1 -1
  10. package/dist/doctor.js +9 -0
  11. package/dist/doctor.js.map +1 -1
  12. package/dist/project/assets.js +15 -13
  13. package/dist/project/assets.js.map +1 -1
  14. package/dist/project/convert/attrs.js +318 -0
  15. package/dist/project/convert/attrs.js.map +1 -0
  16. package/dist/project/convert/convert.js +304 -0
  17. package/dist/project/convert/convert.js.map +1 -0
  18. package/dist/project/convert/css.js +299 -0
  19. package/dist/project/convert/css.js.map +1 -0
  20. package/dist/project/convert/html.js +425 -0
  21. package/dist/project/convert/html.js.map +1 -0
  22. package/dist/project/convert/jsx.js +335 -0
  23. package/dist/project/convert/jsx.js.map +1 -0
  24. package/dist/project/convert/locate.js +180 -0
  25. package/dist/project/convert/locate.js.map +1 -0
  26. package/dist/project/convert/scripts.js +214 -0
  27. package/dist/project/convert/scripts.js.map +1 -0
  28. package/dist/project/convert/styles.js +228 -0
  29. package/dist/project/convert/styles.js.map +1 -0
  30. package/dist/project/convert/write.js +142 -0
  31. package/dist/project/convert/write.js.map +1 -0
  32. package/dist/project/fonts.js +131 -0
  33. package/dist/project/fonts.js.map +1 -0
  34. package/dist/project/libraries.js +28 -0
  35. package/dist/project/libraries.js.map +1 -0
  36. package/dist/project/method.js +72 -6
  37. package/dist/project/method.js.map +1 -1
  38. package/dist/project/scaffold.js +33 -6
  39. package/dist/project/scaffold.js.map +1 -1
  40. package/dist/session/proc.js +29 -1
  41. package/dist/session/proc.js.map +1 -1
  42. package/dist/session/session.js +47 -4
  43. package/dist/session/session.js.map +1 -1
  44. package/dist/version.js +1 -1
  45. package/install.sh +3 -2
  46. package/package.json +4 -2
  47. package/scripts/postinstall.mjs +21 -0
  48. package/skills/multiclone/SKILL.md +17 -5
  49. package/templates/react-vite/index.html +1 -1
  50. package/templates/react-vite/src/main.tsx +2 -2
  51. package/templates/react-vite/src/styles/index.css +0 -1
  52. package/dist/project/draft.js +0 -860
  53. package/dist/project/draft.js.map +0 -1
  54. package/templates/react-vite/src/styles/draft.css +0 -1
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Just enough CSS structure for the converter: a rule tree (brace matching that respects
3
+ * strings and comments), url() rewriting, and splitting rules between a shared sheet and
4
+ * per-section sheets by the class and id names each selector needs.
5
+ */
6
+ const GROUPING = /^@(media|supports|layer|container|document|scope|starting-style)\b/i;
7
+ /** Parses a stylesheet into rules. Unbalanced input ends the current block instead of throwing. */
8
+ export function parseCss(source) {
9
+ const text = stripComments(source);
10
+ let index = 0;
11
+ const parseBlock = () => {
12
+ const rules = [];
13
+ let start = index;
14
+ while (index < text.length) {
15
+ const ch = text[index];
16
+ if (ch === '"' || ch === "'") {
17
+ index = skipString(text, index);
18
+ continue;
19
+ }
20
+ if (ch === '}') {
21
+ index++;
22
+ return rules;
23
+ }
24
+ if (ch === ';') {
25
+ const statement = text.slice(start, index).trim();
26
+ if (statement.startsWith('@'))
27
+ rules.push({ prelude: statement, body: '', children: null });
28
+ index++;
29
+ start = index;
30
+ continue;
31
+ }
32
+ if (ch === '{') {
33
+ const prelude = text.slice(start, index).trim();
34
+ index++;
35
+ if (GROUPING.test(prelude)) {
36
+ rules.push({ prelude, body: '', children: parseBlock() });
37
+ }
38
+ else {
39
+ const bodyStart = index;
40
+ index = matchBrace(text, index);
41
+ rules.push({ prelude, body: text.slice(bodyStart, index).trim(), children: null });
42
+ index++;
43
+ }
44
+ start = index;
45
+ continue;
46
+ }
47
+ index++;
48
+ }
49
+ return rules;
50
+ };
51
+ return parseBlock();
52
+ }
53
+ export function printCss(rules, indent = '') {
54
+ const out = [];
55
+ for (const rule of rules) {
56
+ if (rule.children) {
57
+ const inner = printCss(rule.children, `${indent} `);
58
+ if (inner.trim())
59
+ out.push(`${indent}${rule.prelude} {\n${inner}\n${indent}}`);
60
+ }
61
+ else if (!rule.body && rule.prelude.startsWith('@') && !rule.prelude.includes('{')) {
62
+ out.push(`${indent}${rule.prelude};`);
63
+ }
64
+ else {
65
+ const decls = splitDeclarations(rule.body);
66
+ const body = decls.length
67
+ ? decls.map((decl) => `${indent} ${decl};`).join('\n')
68
+ : `${indent} ${rule.body}`;
69
+ out.push(`${indent}${rule.prelude.replace(/\s+/g, ' ')} {\n${body}\n${indent}}`);
70
+ }
71
+ }
72
+ return out.join('\n\n');
73
+ }
74
+ /** Declarations of a rule body; nested blocks (keyframe steps, CSS nesting) stay whole. */
75
+ function splitDeclarations(body) {
76
+ if (body.includes('{'))
77
+ return [];
78
+ const out = [];
79
+ let start = 0;
80
+ let depth = 0;
81
+ for (let i = 0; i < body.length; i++) {
82
+ const ch = body[i];
83
+ if (ch === '"' || ch === "'") {
84
+ i = skipString(body, i) - 1;
85
+ continue;
86
+ }
87
+ if (ch === '(')
88
+ depth++;
89
+ else if (ch === ')')
90
+ depth = Math.max(0, depth - 1);
91
+ else if (ch === ';' && depth === 0) {
92
+ const decl = body.slice(start, i).trim();
93
+ if (decl)
94
+ out.push(decl);
95
+ start = i + 1;
96
+ }
97
+ }
98
+ const last = body.slice(start).trim();
99
+ if (last)
100
+ out.push(last);
101
+ return out;
102
+ }
103
+ function stripComments(source) {
104
+ let out = '';
105
+ let i = 0;
106
+ while (i < source.length) {
107
+ const ch = source[i];
108
+ if (ch === '"' || ch === "'") {
109
+ const end = skipString(source, i);
110
+ out += source.slice(i, end);
111
+ i = end;
112
+ continue;
113
+ }
114
+ if (ch === '/' && source[i + 1] === '*') {
115
+ const end = source.indexOf('*/', i + 2);
116
+ i = end === -1 ? source.length : end + 2;
117
+ continue;
118
+ }
119
+ out += ch ?? '';
120
+ i++;
121
+ }
122
+ return out;
123
+ }
124
+ function skipString(text, start) {
125
+ const quote = text[start];
126
+ let i = start + 1;
127
+ while (i < text.length) {
128
+ const ch = text[i];
129
+ if (ch === '\\')
130
+ i += 2;
131
+ else if (ch === quote || ch === '\n')
132
+ return i + 1;
133
+ else
134
+ i++;
135
+ }
136
+ return text.length;
137
+ }
138
+ /** Index of the `}` closing a block that starts at `start` (just after its `{`). */
139
+ function matchBrace(text, start) {
140
+ let depth = 1;
141
+ let i = start;
142
+ while (i < text.length) {
143
+ const ch = text[i];
144
+ if (ch === '"' || ch === "'") {
145
+ i = skipString(text, i);
146
+ continue;
147
+ }
148
+ if (ch === '{')
149
+ depth++;
150
+ else if (ch === '}' && --depth === 0)
151
+ return i;
152
+ i++;
153
+ }
154
+ return text.length;
155
+ }
156
+ /** Rewrites every url(...) (and @import "...") through `map`; unmapped URLs stay as they were. */
157
+ export function rewriteCssUrls(source, map) {
158
+ const swap = (raw) => {
159
+ const url = raw.trim();
160
+ if (!url || url.startsWith('data:') || url.startsWith('#'))
161
+ return null;
162
+ return map(url);
163
+ };
164
+ return source
165
+ .replace(/url\(\s*(["']?)([^"')]*)\1\s*\)/gi, (match, _quote, url) => {
166
+ const local = swap(url);
167
+ return local === null ? match : `url('${local}')`;
168
+ })
169
+ .replace(/@import\s+(["'])([^"']+)\1/gi, (match, _quote, url) => {
170
+ const local = swap(url);
171
+ return local === null ? match : `@import '${local}'`;
172
+ });
173
+ }
174
+ /** Class and id names a selector needs, ignoring functional pseudo-classes and attributes. */
175
+ export function selectorTokens(selector) {
176
+ let text = selector;
177
+ for (let guard = 0; guard < 6 && /:[\w-]+\(/.test(text); guard++) {
178
+ text = text.replace(/:[\w-]+\((?:[^()]|\([^()]*\))*\)/g, '');
179
+ }
180
+ text = text.replace(/\[[^\]]*\]/g, '').replace(/::?[\w-]+/g, '');
181
+ const tokens = [];
182
+ for (const match of text.matchAll(/([.#])((?:[\w-]|\\.)+)/g)) {
183
+ const name = (match[2] ?? '').replace(/\\(.)/g, '$1');
184
+ if (name)
185
+ tokens.push(`${match[1] ?? ''}${name}`);
186
+ }
187
+ return tokens;
188
+ }
189
+ /** Splits a selector list at top-level commas. */
190
+ export function splitSelectors(prelude) {
191
+ const out = [];
192
+ let depth = 0;
193
+ let start = 0;
194
+ for (let i = 0; i < prelude.length; i++) {
195
+ const ch = prelude[i];
196
+ if (ch === '(' || ch === '[')
197
+ depth++;
198
+ else if (ch === ')' || ch === ']')
199
+ depth = Math.max(0, depth - 1);
200
+ else if (ch === ',' && depth === 0) {
201
+ out.push(prelude.slice(start, i).trim());
202
+ start = i + 1;
203
+ }
204
+ }
205
+ out.push(prelude.slice(start).trim());
206
+ return out.filter(Boolean);
207
+ }
208
+ export const SHARED = -1;
209
+ /**
210
+ * Splits rules into a shared sheet and one sheet per section. `owners` maps `.class`/`#id` to
211
+ * the sections whose elements carry it (SHARED when page-level elements carry it too). A rule
212
+ * moves into a section only when every selector in it belongs to that one section, so shared
213
+ * styling and cascade order between sections never change.
214
+ */
215
+ export function splitRules(rules, owners) {
216
+ const shared = [];
217
+ const sections = new Map();
218
+ const push = (owner, rule, into) => {
219
+ if (owner === SHARED) {
220
+ (into ?? shared).push(rule);
221
+ return;
222
+ }
223
+ const list = sections.get(owner) ?? [];
224
+ sections.set(owner, list);
225
+ list.push(rule);
226
+ };
227
+ for (const rule of rules) {
228
+ if (rule.children && /^@(media|supports|container)\b/i.test(rule.prelude)) {
229
+ const inner = splitRules(rule.children, owners);
230
+ if (inner.shared.length)
231
+ shared.push({ ...rule, children: inner.shared });
232
+ for (const [owner, list] of inner.sections) {
233
+ push(owner, { ...rule, children: list }, null);
234
+ }
235
+ continue;
236
+ }
237
+ push(rule.children || rule.prelude.startsWith('@') ? SHARED : ruleOwner(rule.prelude, owners), rule, null);
238
+ }
239
+ return { shared, sections };
240
+ }
241
+ export function ruleOwner(prelude, owners) {
242
+ let result = null;
243
+ for (const selector of splitSelectors(prelude)) {
244
+ const owner = selectorOwner(selector, owners);
245
+ if (owner === SHARED || (result !== null && owner !== result))
246
+ return SHARED;
247
+ result = owner;
248
+ }
249
+ return result ?? SHARED;
250
+ }
251
+ function selectorOwner(selector, owners) {
252
+ const tokens = selectorTokens(selector);
253
+ if (!tokens.length)
254
+ return SHARED;
255
+ let candidates = null;
256
+ let narrowest = null;
257
+ for (const token of tokens) {
258
+ const set = owners.get(token);
259
+ if (!set)
260
+ continue;
261
+ if (set.has(SHARED))
262
+ return SHARED;
263
+ if (!narrowest || set.size < narrowest.size)
264
+ narrowest = set;
265
+ const next = new Set();
266
+ for (const owner of candidates ?? set)
267
+ if (set.has(owner))
268
+ next.add(owner);
269
+ candidates = next;
270
+ }
271
+ if (candidates?.size === 1)
272
+ return [...candidates][0] ?? SHARED;
273
+ // Class combinations that only appear once scripts run (`.menu.is-open`): follow the rarest name.
274
+ if (candidates?.size === 0 && narrowest?.size === 1)
275
+ return [...narrowest][0] ?? SHARED;
276
+ return SHARED;
277
+ }
278
+ /** Font families declared by @font-face rules. */
279
+ export function declaredFamilies(rules) {
280
+ const families = new Set();
281
+ for (const rule of rules) {
282
+ if (rule.children)
283
+ for (const family of declaredFamilies(rule.children))
284
+ families.add(family);
285
+ else if (/^@font-face/i.test(rule.prelude)) {
286
+ const match = /font-family\s*:\s*([^;]+)/i.exec(rule.body);
287
+ if (match?.[1])
288
+ families.add(unquote(match[1]));
289
+ }
290
+ }
291
+ return families;
292
+ }
293
+ export function unquote(value) {
294
+ return value
295
+ .trim()
296
+ .replace(/^["']|["']$/g, '')
297
+ .trim();
298
+ }
299
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/project/convert/css.ts"],"names":[],"mappings":"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"}