svelte-origin 1.0.0-next.15 → 1.0.0-next.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/dist/cli.js CHANGED
@@ -1919,7 +1919,7 @@ function parseObjectMembers(source) {
1919
1919
  }
1920
1920
 
1921
1921
  // src/transform/origin-transform.ts
1922
- function transformOriginCalls(s, source, neededImports) {
1922
+ function transformOriginCalls(s, source, neededImports, svelteImports) {
1923
1923
  const regex = /\$origin\s*\(/g;
1924
1924
  let match;
1925
1925
  let changed = false;
@@ -1935,14 +1935,14 @@ function transformOriginCalls(s, source, neededImports) {
1935
1935
  continue;
1936
1936
  }
1937
1937
  const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
1938
- const transformed = transformOriginDefinition(definitionContent);
1938
+ const transformed = transformOriginDefinition(definitionContent, svelteImports);
1939
1939
  s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
1940
1940
  neededImports.add("__createOrigin");
1941
1941
  changed = true;
1942
1942
  }
1943
1943
  return changed;
1944
1944
  }
1945
- function transformOriginDefinition(content) {
1945
+ function transformOriginDefinition(content, svelteImports) {
1946
1946
  let parents = [];
1947
1947
  let bodyContent = content.trim();
1948
1948
  let initCallback = null;
@@ -2007,7 +2007,7 @@ function transformOriginDefinition(content) {
2007
2007
  }
2008
2008
  }
2009
2009
  const attrDetails = parseAttrsSource(attrsContent);
2010
- const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
2010
+ const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
2011
2011
  const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
2012
2012
  let configCode = `{
2013
2013
  __attrSchema: ${attrSchemaCode},
@@ -2027,19 +2027,35 @@ ${createFnBody}
2027
2027
  }`;
2028
2028
  return configCode;
2029
2029
  }
2030
- function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
2030
+ function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
2031
2031
  let body = content.trim();
2032
2032
  const hasParents = parents.length > 0;
2033
+ const attrStateDeclarations = [];
2034
+ const attrSyncEffects = [];
2033
2035
  const attrGettersSetters = [];
2034
- for (const attr of attrDetails) {
2035
- if (attr.hasDefault) {
2036
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
2037
- } else {
2038
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
2039
- }
2040
- attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
2036
+ if (attrDetails.length > 0 && svelteImports) {
2037
+ svelteImports.add("untrack");
2041
2038
  }
2042
- const propsObjectCode = attrGettersSetters.length > 0 ? ` const __props = {
2039
+ for (const attr of attrDetails) {
2040
+ const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
2041
+ attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
2042
+ attrSyncEffects.push(`$effect(() => {
2043
+ const __parentVal = __inputAttrs.${attr.key}
2044
+ const __currentVal = untrack(() => __attr_${attr.key})
2045
+ if (__parentVal !== __currentVal) {
2046
+ __attr_${attr.key} = __parentVal${defaultExpr}
2047
+ }
2048
+ })`);
2049
+ attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
2050
+ attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
2051
+ }
2052
+ const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
2053
+ `) + `
2054
+ ` : "";
2055
+ const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
2056
+ `) + `
2057
+ ` : "";
2058
+ const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
2043
2059
  ${attrGettersSetters.join(`,
2044
2060
  `)}
2045
2061
  }` : ` const __props = __inputAttrs`;
@@ -2728,9 +2744,10 @@ function transformScript(source, options = {}) {
2728
2744
  const { isComponent = false } = options;
2729
2745
  let changed = false;
2730
2746
  const neededImports = new Set;
2747
+ const svelteImports = new Set;
2731
2748
  let propsTypeDeclaration = null;
2732
2749
  if (!isComponent) {
2733
- changed = transformOriginCalls(s, source, neededImports) || changed;
2750
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2734
2751
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2735
2752
  }
2736
2753
  if (isComponent) {
@@ -2769,10 +2786,17 @@ function transformScript(source, options = {}) {
2769
2786
  `);
2770
2787
  }
2771
2788
  }
2772
- } else if (neededImports.size > 0) {
2773
- const importStatement = generateRuntimeImport([...neededImports]);
2774
- s.prepend(importStatement + `
2789
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2790
+ if (neededImports.size > 0) {
2791
+ const importStatement = generateRuntimeImport([...neededImports]);
2792
+ s.prepend(importStatement + `
2793
+ `);
2794
+ }
2795
+ if (svelteImports.size > 0) {
2796
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2797
+ s.prepend(svelteImportStatement + `
2775
2798
  `);
2799
+ }
2776
2800
  }
2777
2801
  if (!changed) {
2778
2802
  return { code: source, changed: false };
@@ -2791,9 +2815,10 @@ async function transformScriptAsync(source, options) {
2791
2815
  const { isComponent = false, schemaResolver } = options;
2792
2816
  let changed = false;
2793
2817
  const neededImports = new Set;
2818
+ const svelteImports = new Set;
2794
2819
  let propsTypeDeclaration = null;
2795
2820
  if (!isComponent) {
2796
- changed = transformOriginCalls(s, source, neededImports) || changed;
2821
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2797
2822
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2798
2823
  }
2799
2824
  if (isComponent) {
@@ -2832,10 +2857,17 @@ async function transformScriptAsync(source, options) {
2832
2857
  `);
2833
2858
  }
2834
2859
  }
2835
- } else if (neededImports.size > 0) {
2836
- const importStatement = generateRuntimeImport([...neededImports]);
2837
- s.prepend(importStatement + `
2860
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2861
+ if (neededImports.size > 0) {
2862
+ const importStatement = generateRuntimeImport([...neededImports]);
2863
+ s.prepend(importStatement + `
2838
2864
  `);
2865
+ }
2866
+ if (svelteImports.size > 0) {
2867
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2868
+ s.prepend(svelteImportStatement + `
2869
+ `);
2870
+ }
2839
2871
  }
2840
2872
  if (!changed) {
2841
2873
  return { code: source, changed: false };
@@ -2854,9 +2886,10 @@ async function transformScriptContent(source, options) {
2854
2886
  const { isComponent = false, schemaResolver } = options;
2855
2887
  let changed = false;
2856
2888
  const neededImports = new Set;
2889
+ const svelteImports = new Set;
2857
2890
  let propsTypeDeclaration = null;
2858
2891
  if (!isComponent) {
2859
- changed = transformOriginCalls(s, source, neededImports) || changed;
2892
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2860
2893
  }
2861
2894
  if (isComponent) {
2862
2895
  const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
@@ -2869,11 +2902,22 @@ async function transformScriptContent(source, options) {
2869
2902
  if (neededImports.size > 0) {
2870
2903
  const importStatement = generateRuntimeImport([...neededImports]);
2871
2904
  s.prepend(importStatement + `
2905
+ `);
2906
+ }
2907
+ if (svelteImports.size > 0) {
2908
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2909
+ s.prepend(svelteImportStatement + `
2872
2910
  `);
2873
2911
  }
2874
2912
  if (propsTypeDeclaration) {
2875
2913
  const afterImports = findPropsInjectionPosition(source);
2876
- const offset = neededImports.size > 0 ? generateRuntimeImport([...neededImports]).length + 1 : 0;
2914
+ let offset = 0;
2915
+ if (neededImports.size > 0) {
2916
+ offset += generateRuntimeImport([...neededImports]).length + 1;
2917
+ }
2918
+ if (svelteImports.size > 0) {
2919
+ offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
2920
+ }
2877
2921
  s.appendLeft(afterImports + offset, propsTypeDeclaration + `
2878
2922
  `);
2879
2923
  }
package/dist/index.js CHANGED
@@ -5969,7 +5969,7 @@ function parseObjectMembers(source2) {
5969
5969
  }
5970
5970
 
5971
5971
  // src/transform/origin-transform.ts
5972
- function transformOriginCalls(s, source2, neededImports) {
5972
+ function transformOriginCalls(s, source2, neededImports, svelteImports) {
5973
5973
  const regex = /\$origin\s*\(/g;
5974
5974
  let match;
5975
5975
  let changed = false;
@@ -5985,14 +5985,14 @@ function transformOriginCalls(s, source2, neededImports) {
5985
5985
  continue;
5986
5986
  }
5987
5987
  const definitionContent = source2.slice(openParenIndex + 1, closeParenIndex);
5988
- const transformed = transformOriginDefinition(definitionContent);
5988
+ const transformed = transformOriginDefinition(definitionContent, svelteImports);
5989
5989
  s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
5990
5990
  neededImports.add("__createOrigin");
5991
5991
  changed = true;
5992
5992
  }
5993
5993
  return changed;
5994
5994
  }
5995
- function transformOriginDefinition(content) {
5995
+ function transformOriginDefinition(content, svelteImports) {
5996
5996
  let parents = [];
5997
5997
  let bodyContent = content.trim();
5998
5998
  let initCallback = null;
@@ -6057,7 +6057,7 @@ function transformOriginDefinition(content) {
6057
6057
  }
6058
6058
  }
6059
6059
  const attrDetails = parseAttrsSource(attrsContent);
6060
- const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
6060
+ const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
6061
6061
  const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
6062
6062
  let configCode = `{
6063
6063
  __attrSchema: ${attrSchemaCode},
@@ -6077,19 +6077,35 @@ ${createFnBody}
6077
6077
  }`;
6078
6078
  return configCode;
6079
6079
  }
6080
- function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
6080
+ function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
6081
6081
  let body = content.trim();
6082
6082
  const hasParents = parents.length > 0;
6083
+ const attrStateDeclarations = [];
6084
+ const attrSyncEffects = [];
6083
6085
  const attrGettersSetters = [];
6084
- for (const attr2 of attrDetails) {
6085
- if (attr2.hasDefault) {
6086
- attrGettersSetters.push(`get ${attr2.key}() { return __inputAttrs.${attr2.key} ?? ${attr2.defaultValue} }`);
6087
- } else {
6088
- attrGettersSetters.push(`get ${attr2.key}() { return __inputAttrs.${attr2.key} }`);
6089
- }
6090
- attrGettersSetters.push(`set ${attr2.key}(v) { __inputAttrs.${attr2.key} = v }`);
6086
+ if (attrDetails.length > 0 && svelteImports) {
6087
+ svelteImports.add("untrack");
6091
6088
  }
6092
- const propsObjectCode = attrGettersSetters.length > 0 ? ` const __props = {
6089
+ for (const attr2 of attrDetails) {
6090
+ const defaultExpr = attr2.hasDefault ? ` ?? ${attr2.defaultValue}` : "";
6091
+ attrStateDeclarations.push(`let __attr_${attr2.key} = $state(__inputAttrs.${attr2.key}${defaultExpr})`);
6092
+ attrSyncEffects.push(`$effect(() => {
6093
+ const __parentVal = __inputAttrs.${attr2.key}
6094
+ const __currentVal = untrack(() => __attr_${attr2.key})
6095
+ if (__parentVal !== __currentVal) {
6096
+ __attr_${attr2.key} = __parentVal${defaultExpr}
6097
+ }
6098
+ })`);
6099
+ attrGettersSetters.push(`get ${attr2.key}() { return __attr_${attr2.key} }`);
6100
+ attrGettersSetters.push(`set ${attr2.key}(v) { __attr_${attr2.key} = v; __inputAttrs.${attr2.key} = v }`);
6101
+ }
6102
+ const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
6103
+ `) + `
6104
+ ` : "";
6105
+ const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
6106
+ `) + `
6107
+ ` : "";
6108
+ const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
6093
6109
  ${attrGettersSetters.join(`,
6094
6110
  `)}
6095
6111
  }` : ` const __props = __inputAttrs`;
@@ -6509,9 +6525,10 @@ function transformScript(source2, options = {}) {
6509
6525
  const { isComponent = false } = options;
6510
6526
  let changed = false;
6511
6527
  const neededImports = new Set;
6528
+ const svelteImports = new Set;
6512
6529
  let propsTypeDeclaration = null;
6513
6530
  if (!isComponent) {
6514
- changed = transformOriginCalls(s, source2, neededImports) || changed;
6531
+ changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
6515
6532
  changed = transformStandaloneAttrsCalls(s, source2, neededImports) || changed;
6516
6533
  }
6517
6534
  if (isComponent) {
@@ -6550,10 +6567,17 @@ function transformScript(source2, options = {}) {
6550
6567
  `);
6551
6568
  }
6552
6569
  }
6553
- } else if (neededImports.size > 0) {
6554
- const importStatement = generateRuntimeImport([...neededImports]);
6555
- s.prepend(importStatement + `
6570
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
6571
+ if (neededImports.size > 0) {
6572
+ const importStatement = generateRuntimeImport([...neededImports]);
6573
+ s.prepend(importStatement + `
6574
+ `);
6575
+ }
6576
+ if (svelteImports.size > 0) {
6577
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
6578
+ s.prepend(svelteImportStatement + `
6556
6579
  `);
6580
+ }
6557
6581
  }
6558
6582
  if (!changed) {
6559
6583
  return { code: source2, changed: false };
@@ -6572,9 +6596,10 @@ async function transformScriptAsync(source2, options) {
6572
6596
  const { isComponent = false, schemaResolver } = options;
6573
6597
  let changed = false;
6574
6598
  const neededImports = new Set;
6599
+ const svelteImports = new Set;
6575
6600
  let propsTypeDeclaration = null;
6576
6601
  if (!isComponent) {
6577
- changed = transformOriginCalls(s, source2, neededImports) || changed;
6602
+ changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
6578
6603
  changed = transformStandaloneAttrsCalls(s, source2, neededImports) || changed;
6579
6604
  }
6580
6605
  if (isComponent) {
@@ -6613,10 +6638,17 @@ async function transformScriptAsync(source2, options) {
6613
6638
  `);
6614
6639
  }
6615
6640
  }
6616
- } else if (neededImports.size > 0) {
6617
- const importStatement = generateRuntimeImport([...neededImports]);
6618
- s.prepend(importStatement + `
6641
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
6642
+ if (neededImports.size > 0) {
6643
+ const importStatement = generateRuntimeImport([...neededImports]);
6644
+ s.prepend(importStatement + `
6619
6645
  `);
6646
+ }
6647
+ if (svelteImports.size > 0) {
6648
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
6649
+ s.prepend(svelteImportStatement + `
6650
+ `);
6651
+ }
6620
6652
  }
6621
6653
  if (!changed) {
6622
6654
  return { code: source2, changed: false };
@@ -6635,9 +6667,10 @@ async function transformScriptContent(source2, options) {
6635
6667
  const { isComponent = false, schemaResolver } = options;
6636
6668
  let changed = false;
6637
6669
  const neededImports = new Set;
6670
+ const svelteImports = new Set;
6638
6671
  let propsTypeDeclaration = null;
6639
6672
  if (!isComponent) {
6640
- changed = transformOriginCalls(s, source2, neededImports) || changed;
6673
+ changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
6641
6674
  }
6642
6675
  if (isComponent) {
6643
6676
  const result = await transformAttrsOriginCalls(s, source2, neededImports, schemaResolver);
@@ -6650,11 +6683,22 @@ async function transformScriptContent(source2, options) {
6650
6683
  if (neededImports.size > 0) {
6651
6684
  const importStatement = generateRuntimeImport([...neededImports]);
6652
6685
  s.prepend(importStatement + `
6686
+ `);
6687
+ }
6688
+ if (svelteImports.size > 0) {
6689
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
6690
+ s.prepend(svelteImportStatement + `
6653
6691
  `);
6654
6692
  }
6655
6693
  if (propsTypeDeclaration) {
6656
6694
  const afterImports = findPropsInjectionPosition(source2);
6657
- const offset = neededImports.size > 0 ? generateRuntimeImport([...neededImports]).length + 1 : 0;
6695
+ let offset = 0;
6696
+ if (neededImports.size > 0) {
6697
+ offset += generateRuntimeImport([...neededImports]).length + 1;
6698
+ }
6699
+ if (svelteImports.size > 0) {
6700
+ offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
6701
+ }
6658
6702
  s.appendLeft(afterImports + offset, propsTypeDeclaration + `
6659
6703
  `);
6660
6704
  }
package/dist/plugin.js CHANGED
@@ -1913,7 +1913,7 @@ function parseObjectMembers(source) {
1913
1913
  }
1914
1914
 
1915
1915
  // src/transform/origin-transform.ts
1916
- function transformOriginCalls(s, source, neededImports) {
1916
+ function transformOriginCalls(s, source, neededImports, svelteImports) {
1917
1917
  const regex = /\$origin\s*\(/g;
1918
1918
  let match;
1919
1919
  let changed = false;
@@ -1929,14 +1929,14 @@ function transformOriginCalls(s, source, neededImports) {
1929
1929
  continue;
1930
1930
  }
1931
1931
  const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
1932
- const transformed = transformOriginDefinition(definitionContent);
1932
+ const transformed = transformOriginDefinition(definitionContent, svelteImports);
1933
1933
  s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
1934
1934
  neededImports.add("__createOrigin");
1935
1935
  changed = true;
1936
1936
  }
1937
1937
  return changed;
1938
1938
  }
1939
- function transformOriginDefinition(content) {
1939
+ function transformOriginDefinition(content, svelteImports) {
1940
1940
  let parents = [];
1941
1941
  let bodyContent = content.trim();
1942
1942
  let initCallback = null;
@@ -2001,7 +2001,7 @@ function transformOriginDefinition(content) {
2001
2001
  }
2002
2002
  }
2003
2003
  const attrDetails = parseAttrsSource(attrsContent);
2004
- const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
2004
+ const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
2005
2005
  const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
2006
2006
  let configCode = `{
2007
2007
  __attrSchema: ${attrSchemaCode},
@@ -2021,19 +2021,35 @@ ${createFnBody}
2021
2021
  }`;
2022
2022
  return configCode;
2023
2023
  }
2024
- function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
2024
+ function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
2025
2025
  let body = content.trim();
2026
2026
  const hasParents = parents.length > 0;
2027
+ const attrStateDeclarations = [];
2028
+ const attrSyncEffects = [];
2027
2029
  const attrGettersSetters = [];
2028
- for (const attr of attrDetails) {
2029
- if (attr.hasDefault) {
2030
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
2031
- } else {
2032
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
2033
- }
2034
- attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
2030
+ if (attrDetails.length > 0 && svelteImports) {
2031
+ svelteImports.add("untrack");
2035
2032
  }
2036
- const propsObjectCode = attrGettersSetters.length > 0 ? ` const __props = {
2033
+ for (const attr of attrDetails) {
2034
+ const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
2035
+ attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
2036
+ attrSyncEffects.push(`$effect(() => {
2037
+ const __parentVal = __inputAttrs.${attr.key}
2038
+ const __currentVal = untrack(() => __attr_${attr.key})
2039
+ if (__parentVal !== __currentVal) {
2040
+ __attr_${attr.key} = __parentVal${defaultExpr}
2041
+ }
2042
+ })`);
2043
+ attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
2044
+ attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
2045
+ }
2046
+ const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
2047
+ `) + `
2048
+ ` : "";
2049
+ const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
2050
+ `) + `
2051
+ ` : "";
2052
+ const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
2037
2053
  ${attrGettersSetters.join(`,
2038
2054
  `)}
2039
2055
  }` : ` const __props = __inputAttrs`;
@@ -2722,9 +2738,10 @@ function transformScript(source, options = {}) {
2722
2738
  const { isComponent = false } = options;
2723
2739
  let changed = false;
2724
2740
  const neededImports = new Set;
2741
+ const svelteImports = new Set;
2725
2742
  let propsTypeDeclaration = null;
2726
2743
  if (!isComponent) {
2727
- changed = transformOriginCalls(s, source, neededImports) || changed;
2744
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2728
2745
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2729
2746
  }
2730
2747
  if (isComponent) {
@@ -2763,10 +2780,17 @@ function transformScript(source, options = {}) {
2763
2780
  `);
2764
2781
  }
2765
2782
  }
2766
- } else if (neededImports.size > 0) {
2767
- const importStatement = generateRuntimeImport([...neededImports]);
2768
- s.prepend(importStatement + `
2783
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2784
+ if (neededImports.size > 0) {
2785
+ const importStatement = generateRuntimeImport([...neededImports]);
2786
+ s.prepend(importStatement + `
2787
+ `);
2788
+ }
2789
+ if (svelteImports.size > 0) {
2790
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2791
+ s.prepend(svelteImportStatement + `
2769
2792
  `);
2793
+ }
2770
2794
  }
2771
2795
  if (!changed) {
2772
2796
  return { code: source, changed: false };
@@ -2785,9 +2809,10 @@ async function transformScriptAsync(source, options) {
2785
2809
  const { isComponent = false, schemaResolver } = options;
2786
2810
  let changed = false;
2787
2811
  const neededImports = new Set;
2812
+ const svelteImports = new Set;
2788
2813
  let propsTypeDeclaration = null;
2789
2814
  if (!isComponent) {
2790
- changed = transformOriginCalls(s, source, neededImports) || changed;
2815
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2791
2816
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2792
2817
  }
2793
2818
  if (isComponent) {
@@ -2826,10 +2851,17 @@ async function transformScriptAsync(source, options) {
2826
2851
  `);
2827
2852
  }
2828
2853
  }
2829
- } else if (neededImports.size > 0) {
2830
- const importStatement = generateRuntimeImport([...neededImports]);
2831
- s.prepend(importStatement + `
2854
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2855
+ if (neededImports.size > 0) {
2856
+ const importStatement = generateRuntimeImport([...neededImports]);
2857
+ s.prepend(importStatement + `
2832
2858
  `);
2859
+ }
2860
+ if (svelteImports.size > 0) {
2861
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2862
+ s.prepend(svelteImportStatement + `
2863
+ `);
2864
+ }
2833
2865
  }
2834
2866
  if (!changed) {
2835
2867
  return { code: source, changed: false };
@@ -2848,9 +2880,10 @@ async function transformScriptContent(source, options) {
2848
2880
  const { isComponent = false, schemaResolver } = options;
2849
2881
  let changed = false;
2850
2882
  const neededImports = new Set;
2883
+ const svelteImports = new Set;
2851
2884
  let propsTypeDeclaration = null;
2852
2885
  if (!isComponent) {
2853
- changed = transformOriginCalls(s, source, neededImports) || changed;
2886
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2854
2887
  }
2855
2888
  if (isComponent) {
2856
2889
  const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
@@ -2863,11 +2896,22 @@ async function transformScriptContent(source, options) {
2863
2896
  if (neededImports.size > 0) {
2864
2897
  const importStatement = generateRuntimeImport([...neededImports]);
2865
2898
  s.prepend(importStatement + `
2899
+ `);
2900
+ }
2901
+ if (svelteImports.size > 0) {
2902
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2903
+ s.prepend(svelteImportStatement + `
2866
2904
  `);
2867
2905
  }
2868
2906
  if (propsTypeDeclaration) {
2869
2907
  const afterImports = findPropsInjectionPosition(source);
2870
- const offset = neededImports.size > 0 ? generateRuntimeImport([...neededImports]).length + 1 : 0;
2908
+ let offset = 0;
2909
+ if (neededImports.size > 0) {
2910
+ offset += generateRuntimeImport([...neededImports]).length + 1;
2911
+ }
2912
+ if (svelteImports.size > 0) {
2913
+ offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
2914
+ }
2871
2915
  s.appendLeft(afterImports + offset, propsTypeDeclaration + `
2872
2916
  `);
2873
2917
  }
@@ -1917,7 +1917,7 @@ function parseObjectMembers(source) {
1917
1917
  }
1918
1918
 
1919
1919
  // src/transform/origin-transform.ts
1920
- function transformOriginCalls(s, source, neededImports) {
1920
+ function transformOriginCalls(s, source, neededImports, svelteImports) {
1921
1921
  const regex = /\$origin\s*\(/g;
1922
1922
  let match;
1923
1923
  let changed = false;
@@ -1933,14 +1933,14 @@ function transformOriginCalls(s, source, neededImports) {
1933
1933
  continue;
1934
1934
  }
1935
1935
  const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
1936
- const transformed = transformOriginDefinition(definitionContent);
1936
+ const transformed = transformOriginDefinition(definitionContent, svelteImports);
1937
1937
  s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
1938
1938
  neededImports.add("__createOrigin");
1939
1939
  changed = true;
1940
1940
  }
1941
1941
  return changed;
1942
1942
  }
1943
- function transformOriginDefinition(content) {
1943
+ function transformOriginDefinition(content, svelteImports) {
1944
1944
  let parents = [];
1945
1945
  let bodyContent = content.trim();
1946
1946
  let initCallback = null;
@@ -2005,7 +2005,7 @@ function transformOriginDefinition(content) {
2005
2005
  }
2006
2006
  }
2007
2007
  const attrDetails = parseAttrsSource(attrsContent);
2008
- const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
2008
+ const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
2009
2009
  const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
2010
2010
  let configCode = `{
2011
2011
  __attrSchema: ${attrSchemaCode},
@@ -2025,19 +2025,35 @@ ${createFnBody}
2025
2025
  }`;
2026
2026
  return configCode;
2027
2027
  }
2028
- function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
2028
+ function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
2029
2029
  let body = content.trim();
2030
2030
  const hasParents = parents.length > 0;
2031
+ const attrStateDeclarations = [];
2032
+ const attrSyncEffects = [];
2031
2033
  const attrGettersSetters = [];
2032
- for (const attr of attrDetails) {
2033
- if (attr.hasDefault) {
2034
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
2035
- } else {
2036
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
2037
- }
2038
- attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
2034
+ if (attrDetails.length > 0 && svelteImports) {
2035
+ svelteImports.add("untrack");
2039
2036
  }
2040
- const propsObjectCode = attrGettersSetters.length > 0 ? ` const __props = {
2037
+ for (const attr of attrDetails) {
2038
+ const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
2039
+ attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
2040
+ attrSyncEffects.push(`$effect(() => {
2041
+ const __parentVal = __inputAttrs.${attr.key}
2042
+ const __currentVal = untrack(() => __attr_${attr.key})
2043
+ if (__parentVal !== __currentVal) {
2044
+ __attr_${attr.key} = __parentVal${defaultExpr}
2045
+ }
2046
+ })`);
2047
+ attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
2048
+ attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
2049
+ }
2050
+ const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
2051
+ `) + `
2052
+ ` : "";
2053
+ const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
2054
+ `) + `
2055
+ ` : "";
2056
+ const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
2041
2057
  ${attrGettersSetters.join(`,
2042
2058
  `)}
2043
2059
  }` : ` const __props = __inputAttrs`;
@@ -2726,9 +2742,10 @@ function transformScript(source, options = {}) {
2726
2742
  const { isComponent = false } = options;
2727
2743
  let changed = false;
2728
2744
  const neededImports = new Set;
2745
+ const svelteImports = new Set;
2729
2746
  let propsTypeDeclaration = null;
2730
2747
  if (!isComponent) {
2731
- changed = transformOriginCalls(s, source, neededImports) || changed;
2748
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2732
2749
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2733
2750
  }
2734
2751
  if (isComponent) {
@@ -2767,10 +2784,17 @@ function transformScript(source, options = {}) {
2767
2784
  `);
2768
2785
  }
2769
2786
  }
2770
- } else if (neededImports.size > 0) {
2771
- const importStatement = generateRuntimeImport([...neededImports]);
2772
- s.prepend(importStatement + `
2787
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2788
+ if (neededImports.size > 0) {
2789
+ const importStatement = generateRuntimeImport([...neededImports]);
2790
+ s.prepend(importStatement + `
2791
+ `);
2792
+ }
2793
+ if (svelteImports.size > 0) {
2794
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2795
+ s.prepend(svelteImportStatement + `
2773
2796
  `);
2797
+ }
2774
2798
  }
2775
2799
  if (!changed) {
2776
2800
  return { code: source, changed: false };
@@ -2789,9 +2813,10 @@ async function transformScriptAsync(source, options) {
2789
2813
  const { isComponent = false, schemaResolver } = options;
2790
2814
  let changed = false;
2791
2815
  const neededImports = new Set;
2816
+ const svelteImports = new Set;
2792
2817
  let propsTypeDeclaration = null;
2793
2818
  if (!isComponent) {
2794
- changed = transformOriginCalls(s, source, neededImports) || changed;
2819
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2795
2820
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2796
2821
  }
2797
2822
  if (isComponent) {
@@ -2830,10 +2855,17 @@ async function transformScriptAsync(source, options) {
2830
2855
  `);
2831
2856
  }
2832
2857
  }
2833
- } else if (neededImports.size > 0) {
2834
- const importStatement = generateRuntimeImport([...neededImports]);
2835
- s.prepend(importStatement + `
2858
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2859
+ if (neededImports.size > 0) {
2860
+ const importStatement = generateRuntimeImport([...neededImports]);
2861
+ s.prepend(importStatement + `
2836
2862
  `);
2863
+ }
2864
+ if (svelteImports.size > 0) {
2865
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2866
+ s.prepend(svelteImportStatement + `
2867
+ `);
2868
+ }
2837
2869
  }
2838
2870
  if (!changed) {
2839
2871
  return { code: source, changed: false };
@@ -2852,9 +2884,10 @@ async function transformScriptContent(source, options) {
2852
2884
  const { isComponent = false, schemaResolver } = options;
2853
2885
  let changed = false;
2854
2886
  const neededImports = new Set;
2887
+ const svelteImports = new Set;
2855
2888
  let propsTypeDeclaration = null;
2856
2889
  if (!isComponent) {
2857
- changed = transformOriginCalls(s, source, neededImports) || changed;
2890
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2858
2891
  }
2859
2892
  if (isComponent) {
2860
2893
  const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
@@ -2867,11 +2900,22 @@ async function transformScriptContent(source, options) {
2867
2900
  if (neededImports.size > 0) {
2868
2901
  const importStatement = generateRuntimeImport([...neededImports]);
2869
2902
  s.prepend(importStatement + `
2903
+ `);
2904
+ }
2905
+ if (svelteImports.size > 0) {
2906
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2907
+ s.prepend(svelteImportStatement + `
2870
2908
  `);
2871
2909
  }
2872
2910
  if (propsTypeDeclaration) {
2873
2911
  const afterImports = findPropsInjectionPosition(source);
2874
- const offset = neededImports.size > 0 ? generateRuntimeImport([...neededImports]).length + 1 : 0;
2912
+ let offset = 0;
2913
+ if (neededImports.size > 0) {
2914
+ offset += generateRuntimeImport([...neededImports]).length + 1;
2915
+ }
2916
+ if (svelteImports.size > 0) {
2917
+ offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
2918
+ }
2875
2919
  s.appendLeft(afterImports + offset, propsTypeDeclaration + `
2876
2920
  `);
2877
2921
  }
@@ -1913,7 +1913,7 @@ function parseObjectMembers(source) {
1913
1913
  }
1914
1914
 
1915
1915
  // src/transform/origin-transform.ts
1916
- function transformOriginCalls(s, source, neededImports) {
1916
+ function transformOriginCalls(s, source, neededImports, svelteImports) {
1917
1917
  const regex = /\$origin\s*\(/g;
1918
1918
  let match;
1919
1919
  let changed = false;
@@ -1929,14 +1929,14 @@ function transformOriginCalls(s, source, neededImports) {
1929
1929
  continue;
1930
1930
  }
1931
1931
  const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
1932
- const transformed = transformOriginDefinition(definitionContent);
1932
+ const transformed = transformOriginDefinition(definitionContent, svelteImports);
1933
1933
  s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
1934
1934
  neededImports.add("__createOrigin");
1935
1935
  changed = true;
1936
1936
  }
1937
1937
  return changed;
1938
1938
  }
1939
- function transformOriginDefinition(content) {
1939
+ function transformOriginDefinition(content, svelteImports) {
1940
1940
  let parents = [];
1941
1941
  let bodyContent = content.trim();
1942
1942
  let initCallback = null;
@@ -2001,7 +2001,7 @@ function transformOriginDefinition(content) {
2001
2001
  }
2002
2002
  }
2003
2003
  const attrDetails = parseAttrsSource(attrsContent);
2004
- const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
2004
+ const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
2005
2005
  const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
2006
2006
  let configCode = `{
2007
2007
  __attrSchema: ${attrSchemaCode},
@@ -2021,19 +2021,35 @@ ${createFnBody}
2021
2021
  }`;
2022
2022
  return configCode;
2023
2023
  }
2024
- function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
2024
+ function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
2025
2025
  let body = content.trim();
2026
2026
  const hasParents = parents.length > 0;
2027
+ const attrStateDeclarations = [];
2028
+ const attrSyncEffects = [];
2027
2029
  const attrGettersSetters = [];
2028
- for (const attr of attrDetails) {
2029
- if (attr.hasDefault) {
2030
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
2031
- } else {
2032
- attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
2033
- }
2034
- attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
2030
+ if (attrDetails.length > 0 && svelteImports) {
2031
+ svelteImports.add("untrack");
2035
2032
  }
2036
- const propsObjectCode = attrGettersSetters.length > 0 ? ` const __props = {
2033
+ for (const attr of attrDetails) {
2034
+ const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
2035
+ attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
2036
+ attrSyncEffects.push(`$effect(() => {
2037
+ const __parentVal = __inputAttrs.${attr.key}
2038
+ const __currentVal = untrack(() => __attr_${attr.key})
2039
+ if (__parentVal !== __currentVal) {
2040
+ __attr_${attr.key} = __parentVal${defaultExpr}
2041
+ }
2042
+ })`);
2043
+ attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
2044
+ attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
2045
+ }
2046
+ const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
2047
+ `) + `
2048
+ ` : "";
2049
+ const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
2050
+ `) + `
2051
+ ` : "";
2052
+ const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
2037
2053
  ${attrGettersSetters.join(`,
2038
2054
  `)}
2039
2055
  }` : ` const __props = __inputAttrs`;
@@ -2722,9 +2738,10 @@ function transformScript(source, options = {}) {
2722
2738
  const { isComponent = false } = options;
2723
2739
  let changed = false;
2724
2740
  const neededImports = new Set;
2741
+ const svelteImports = new Set;
2725
2742
  let propsTypeDeclaration = null;
2726
2743
  if (!isComponent) {
2727
- changed = transformOriginCalls(s, source, neededImports) || changed;
2744
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2728
2745
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2729
2746
  }
2730
2747
  if (isComponent) {
@@ -2763,10 +2780,17 @@ function transformScript(source, options = {}) {
2763
2780
  `);
2764
2781
  }
2765
2782
  }
2766
- } else if (neededImports.size > 0) {
2767
- const importStatement = generateRuntimeImport([...neededImports]);
2768
- s.prepend(importStatement + `
2783
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2784
+ if (neededImports.size > 0) {
2785
+ const importStatement = generateRuntimeImport([...neededImports]);
2786
+ s.prepend(importStatement + `
2787
+ `);
2788
+ }
2789
+ if (svelteImports.size > 0) {
2790
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2791
+ s.prepend(svelteImportStatement + `
2769
2792
  `);
2793
+ }
2770
2794
  }
2771
2795
  if (!changed) {
2772
2796
  return { code: source, changed: false };
@@ -2785,9 +2809,10 @@ async function transformScriptAsync(source, options) {
2785
2809
  const { isComponent = false, schemaResolver } = options;
2786
2810
  let changed = false;
2787
2811
  const neededImports = new Set;
2812
+ const svelteImports = new Set;
2788
2813
  let propsTypeDeclaration = null;
2789
2814
  if (!isComponent) {
2790
- changed = transformOriginCalls(s, source, neededImports) || changed;
2815
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2791
2816
  changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
2792
2817
  }
2793
2818
  if (isComponent) {
@@ -2826,10 +2851,17 @@ async function transformScriptAsync(source, options) {
2826
2851
  `);
2827
2852
  }
2828
2853
  }
2829
- } else if (neededImports.size > 0) {
2830
- const importStatement = generateRuntimeImport([...neededImports]);
2831
- s.prepend(importStatement + `
2854
+ } else if (neededImports.size > 0 || svelteImports.size > 0) {
2855
+ if (neededImports.size > 0) {
2856
+ const importStatement = generateRuntimeImport([...neededImports]);
2857
+ s.prepend(importStatement + `
2832
2858
  `);
2859
+ }
2860
+ if (svelteImports.size > 0) {
2861
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2862
+ s.prepend(svelteImportStatement + `
2863
+ `);
2864
+ }
2833
2865
  }
2834
2866
  if (!changed) {
2835
2867
  return { code: source, changed: false };
@@ -2848,9 +2880,10 @@ async function transformScriptContent(source, options) {
2848
2880
  const { isComponent = false, schemaResolver } = options;
2849
2881
  let changed = false;
2850
2882
  const neededImports = new Set;
2883
+ const svelteImports = new Set;
2851
2884
  let propsTypeDeclaration = null;
2852
2885
  if (!isComponent) {
2853
- changed = transformOriginCalls(s, source, neededImports) || changed;
2886
+ changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
2854
2887
  }
2855
2888
  if (isComponent) {
2856
2889
  const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
@@ -2863,11 +2896,22 @@ async function transformScriptContent(source, options) {
2863
2896
  if (neededImports.size > 0) {
2864
2897
  const importStatement = generateRuntimeImport([...neededImports]);
2865
2898
  s.prepend(importStatement + `
2899
+ `);
2900
+ }
2901
+ if (svelteImports.size > 0) {
2902
+ const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
2903
+ s.prepend(svelteImportStatement + `
2866
2904
  `);
2867
2905
  }
2868
2906
  if (propsTypeDeclaration) {
2869
2907
  const afterImports = findPropsInjectionPosition(source);
2870
- const offset = neededImports.size > 0 ? generateRuntimeImport([...neededImports]).length + 1 : 0;
2908
+ let offset = 0;
2909
+ if (neededImports.size > 0) {
2910
+ offset += generateRuntimeImport([...neededImports]).length + 1;
2911
+ }
2912
+ if (svelteImports.size > 0) {
2913
+ offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
2914
+ }
2871
2915
  s.appendLeft(afterImports + offset, propsTypeDeclaration + `
2872
2916
  `);
2873
2917
  }
@@ -48,4 +48,4 @@ export interface TransformOriginBodyResult {
48
48
  * })
49
49
  * ```
50
50
  */
51
- export declare function transformOriginCalls(s: MagicString, source: string, neededImports: Set<string>): boolean;
51
+ export declare function transformOriginCalls(s: MagicString, source: string, neededImports: Set<string>, svelteImports?: Set<string>): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-origin",
3
- "version": "1.0.0-next.15",
3
+ "version": "1.0.0-next.16",
4
4
  "description": "Compiler-assisted state and prop ergonomics for Svelte 5",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",