svelte-intlayer 7.1.8 → 7.1.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 (144) hide show
  1. package/dist/IntlayerNodeWrapper.svelte +10 -0
  2. package/dist/IntlayerNodeWrapper.svelte.d.ts +22 -0
  3. package/dist/client/IntlayerProvider.svelte +24 -0
  4. package/dist/client/IntlayerProvider.svelte.d.ts +30 -0
  5. package/dist/{types/client → client}/getBrowserLocale.d.ts +1 -1
  6. package/dist/client/getBrowserLocale.js +17 -0
  7. package/dist/client/index.js +12 -0
  8. package/dist/{types/client → client}/intlayerContext.d.ts +1 -1
  9. package/dist/client/intlayerContext.js +8 -0
  10. package/dist/client/intlayerStore.d.ts +11 -0
  11. package/dist/client/intlayerStore.js +19 -0
  12. package/dist/{types/client → client}/useDictionary.d.ts +3 -3
  13. package/dist/client/useDictionary.js +18 -0
  14. package/dist/{types/client → client}/useDictionaryAsync.d.ts +2 -2
  15. package/dist/client/useDictionaryAsync.js +38 -0
  16. package/dist/{types/client → client}/useDictionaryDynamic.d.ts +2 -2
  17. package/dist/client/useDictionaryDynamic.js +38 -0
  18. package/dist/{types/client → client}/useIntlayer.d.ts +3 -3
  19. package/dist/client/useIntlayer.js +18 -0
  20. package/dist/{types/client → client}/useLocale.d.ts +4 -4
  21. package/dist/client/useLocale.js +33 -0
  22. package/dist/client/useLocaleStorage.d.ts +39 -0
  23. package/dist/client/useLocaleStorage.js +52 -0
  24. package/dist/editor/ContentSelector.svelte +125 -0
  25. package/dist/editor/ContentSelector.svelte.d.ts +35 -0
  26. package/dist/editor/ContentSelectorWrapper.svelte +69 -0
  27. package/dist/editor/ContentSelectorWrapper.svelte.d.ts +31 -0
  28. package/dist/{types/editor → editor}/communicator.d.ts +1 -1
  29. package/dist/editor/communicator.js +54 -0
  30. package/dist/{types/editor → editor}/dictionariesRecord.d.ts +2 -2
  31. package/dist/editor/dictionariesRecord.js +16 -0
  32. package/dist/{types/editor → editor}/editorEnabled.d.ts +1 -1
  33. package/dist/editor/editorEnabled.js +41 -0
  34. package/dist/{types/editor → editor}/focusDictionary.d.ts +2 -2
  35. package/dist/editor/focusDictionary.js +22 -0
  36. package/dist/editor/index.js +9 -0
  37. package/dist/{types/editor → editor}/useCrossFrameMessageListener.d.ts +1 -1
  38. package/dist/editor/useCrossFrameMessageListener.js +65 -0
  39. package/dist/{types/editor → editor}/useCrossFrameState.d.ts +2 -2
  40. package/dist/editor/useCrossFrameState.js +82 -0
  41. package/dist/editor/useEditor.js +46 -0
  42. package/dist/editor/useIframeClickInterceptor.js +29 -0
  43. package/dist/{types/getDictionary.d.ts → getDictionary.d.ts} +3 -3
  44. package/dist/getDictionary.js +18 -0
  45. package/dist/{types/getIntlayer.d.ts → getIntlayer.d.ts} +3 -3
  46. package/dist/getIntlayer.js +18 -0
  47. package/dist/{types/index.d.ts → index.d.ts} +3 -3
  48. package/dist/index.js +7 -0
  49. package/dist/index.test.d.ts +1 -0
  50. package/dist/index.test.js +6 -0
  51. package/dist/markdown/MarkdownMetadataRenderer.svelte +21 -0
  52. package/dist/markdown/MarkdownMetadataRenderer.svelte.d.ts +25 -0
  53. package/dist/markdown/MarkdownMetadataWithSelector.svelte +21 -0
  54. package/dist/markdown/MarkdownMetadataWithSelector.svelte.d.ts +24 -0
  55. package/dist/markdown/MarkdownProvider.svelte +9 -0
  56. package/dist/markdown/MarkdownProvider.svelte.d.ts +29 -0
  57. package/dist/markdown/MarkdownRenderer.svelte +11 -0
  58. package/dist/markdown/MarkdownRenderer.svelte.d.ts +20 -0
  59. package/dist/markdown/MarkdownWithSelector.svelte +15 -0
  60. package/dist/markdown/MarkdownWithSelector.svelte.d.ts +23 -0
  61. package/dist/markdown/context.js +10 -0
  62. package/dist/markdown/index.js +4 -0
  63. package/dist/{types/plugins.d.ts → plugins.d.ts} +3 -3
  64. package/dist/plugins.js +87 -0
  65. package/dist/renderIntlayerNode.js +44 -0
  66. package/dist/setIntlayerMarkdown.d.ts +1 -0
  67. package/dist/setIntlayerMarkdown.js +2 -0
  68. package/package.json +22 -30
  69. package/dist/ContentSelectorWrapper-Ct4vOl_g.js +0 -163
  70. package/dist/ContentSelectorWrapper-DMEqv3vE.cjs +0 -10
  71. package/dist/MarkdownRenderer-BFrmuaFN.js +0 -47
  72. package/dist/MarkdownRenderer-DyK7SeHa.cjs +0 -1
  73. package/dist/cjs/client/getBrowserLocale.cjs +0 -1
  74. package/dist/cjs/client/index.cjs +0 -1
  75. package/dist/cjs/client/intlayerContext.cjs +0 -1
  76. package/dist/cjs/client/intlayerStore.cjs +0 -1
  77. package/dist/cjs/client/useDictionary.cjs +0 -1
  78. package/dist/cjs/client/useDictionaryAsync.cjs +0 -1
  79. package/dist/cjs/client/useDictionaryDynamic.cjs +0 -1
  80. package/dist/cjs/client/useIntlayer.cjs +0 -1
  81. package/dist/cjs/client/useLocale.cjs +0 -1
  82. package/dist/cjs/client/useLocaleStorage.cjs +0 -1
  83. package/dist/cjs/editor/communicator.cjs +0 -1
  84. package/dist/cjs/editor/dictionariesRecord.cjs +0 -1
  85. package/dist/cjs/editor/editorEnabled.cjs +0 -1
  86. package/dist/cjs/editor/focusDictionary.cjs +0 -1
  87. package/dist/cjs/editor/index.cjs +0 -1
  88. package/dist/cjs/editor/useCrossFrameMessageListener.cjs +0 -1
  89. package/dist/cjs/editor/useCrossFrameState.cjs +0 -1
  90. package/dist/cjs/editor/useEditor.cjs +0 -1
  91. package/dist/cjs/editor/useIframeClickInterceptor.cjs +0 -1
  92. package/dist/cjs/getDictionary.cjs +0 -1
  93. package/dist/cjs/getIntlayer.cjs +0 -1
  94. package/dist/cjs/index.cjs +0 -1
  95. package/dist/cjs/markdown/context.cjs +0 -1
  96. package/dist/cjs/markdown/index.cjs +0 -1
  97. package/dist/cjs/plugins.cjs +0 -1
  98. package/dist/cjs/renderIntlayerNode.cjs +0 -1
  99. package/dist/cjs/setIntlayerMarkdown.cjs +0 -1
  100. package/dist/esm/client/getBrowserLocale.mjs +0 -9
  101. package/dist/esm/client/index.mjs +0 -19
  102. package/dist/esm/client/intlayerContext.mjs +0 -8
  103. package/dist/esm/client/intlayerStore.mjs +0 -16
  104. package/dist/esm/client/useDictionary.mjs +0 -14
  105. package/dist/esm/client/useDictionaryAsync.mjs +0 -27
  106. package/dist/esm/client/useDictionaryDynamic.mjs +0 -27
  107. package/dist/esm/client/useIntlayer.mjs +0 -14
  108. package/dist/esm/client/useLocale.mjs +0 -33
  109. package/dist/esm/client/useLocaleStorage.mjs +0 -29
  110. package/dist/esm/editor/communicator.mjs +0 -31
  111. package/dist/esm/editor/dictionariesRecord.mjs +0 -20
  112. package/dist/esm/editor/editorEnabled.mjs +0 -28
  113. package/dist/esm/editor/focusDictionary.mjs +0 -21
  114. package/dist/esm/editor/index.mjs +0 -23
  115. package/dist/esm/editor/useCrossFrameMessageListener.mjs +0 -37
  116. package/dist/esm/editor/useCrossFrameState.mjs +0 -53
  117. package/dist/esm/editor/useEditor.mjs +0 -38
  118. package/dist/esm/editor/useIframeClickInterceptor.mjs +0 -26
  119. package/dist/esm/getDictionary.mjs +0 -18
  120. package/dist/esm/getIntlayer.mjs +0 -14
  121. package/dist/esm/index.mjs +0 -37
  122. package/dist/esm/markdown/context.mjs +0 -11
  123. package/dist/esm/markdown/index.mjs +0 -21
  124. package/dist/esm/plugins.mjs +0 -133
  125. package/dist/esm/renderIntlayerNode.mjs +0 -51
  126. package/dist/esm/setIntlayerMarkdown.mjs +0 -5
  127. package/dist/types/IntlayerNodeWrapper.svelte.d.ts +0 -1
  128. package/dist/types/client/intlayerStore.d.ts +0 -11
  129. package/dist/types/client/useLocaleStorage.d.ts +0 -39
  130. package/dist/types/editor/ContentSelector.svelte.d.ts +0 -1
  131. package/dist/types/editor/ContentSelectorWrapper.svelte.d.ts +0 -1
  132. package/dist/types/markdown/MarkdownMetadataRenderer.svelte.d.ts +0 -1
  133. package/dist/types/markdown/MarkdownMetadataWithSelector.svelte.d.ts +0 -1
  134. package/dist/types/markdown/MarkdownProvider.svelte.d.ts +0 -1
  135. package/dist/types/markdown/MarkdownRenderer.svelte.d.ts +0 -1
  136. package/dist/types/markdown/MarkdownWithSelector.svelte.d.ts +0 -1
  137. package/dist/types/setIntlayerMarkdown.d.ts +0 -1
  138. /package/dist/{types/client → client}/index.d.ts +0 -0
  139. /package/dist/{types/editor → editor}/index.d.ts +0 -0
  140. /package/dist/{types/editor → editor}/useEditor.d.ts +0 -0
  141. /package/dist/{types/editor → editor}/useIframeClickInterceptor.d.ts +0 -0
  142. /package/dist/{types/markdown → markdown}/context.d.ts +0 -0
  143. /package/dist/{types/markdown → markdown}/index.d.ts +0 -0
  144. /package/dist/{types/renderIntlayerNode.d.ts → renderIntlayerNode.d.ts} +0 -0
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { getContentNodeByKeyPath, getMarkdownMetadata } from '@intlayer/core';
3
+ import type { ContentNode, KeyPath, Locale } from '@intlayer/types';
4
+ import { useLocale } from '../client/useLocale';
5
+
6
+ export const locale: Locale | undefined = undefined;
7
+ export let value: string;
8
+ export let metadataKeyPath: KeyPath[];
9
+
10
+ const { locale: contextLocale } = useLocale();
11
+
12
+ $: metadata = getMarkdownMetadata(value);
13
+ $: currentLocale = locale ?? $contextLocale;
14
+ $: metadataEl = getContentNodeByKeyPath(
15
+ metadata as ContentNode,
16
+ metadataKeyPath,
17
+ currentLocale
18
+ );
19
+ </script>
20
+
21
+ {metadataEl}
@@ -0,0 +1,25 @@
1
+ import type { KeyPath, Locale } from '@intlayer/types';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const MarkdownMetadataRenderer: $$__sveltets_2_IsomorphicComponent<{
16
+ locale?: Locale | undefined;
17
+ value: string;
18
+ metadataKeyPath: KeyPath[];
19
+ }, {
20
+ [evt: string]: CustomEvent<any>;
21
+ }, {}, {
22
+ locale: Locale | undefined;
23
+ }, string>;
24
+ type MarkdownMetadataRenderer = InstanceType<typeof MarkdownMetadataRenderer>;
25
+ export default MarkdownMetadataRenderer;
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import type { KeyPath } from '@intlayer/types';
3
+ import ContentSelectorWrapper from '../editor/ContentSelectorWrapper.svelte';
4
+ import MarkdownMetadataRenderer from './MarkdownMetadataRenderer.svelte';
5
+
6
+ export let dictionaryKey: string;
7
+ export let keyPath: KeyPath[];
8
+ export let value: string;
9
+ export let metadataKeyPath: KeyPath[];
10
+ </script>
11
+
12
+ <ContentSelectorWrapper {dictionaryKey} {keyPath}>
13
+ <MarkdownMetadataRenderer
14
+ {dictionaryKey}
15
+ {keyPath}
16
+ {value}
17
+ {metadataKeyPath}
18
+ />
19
+ </ContentSelectorWrapper>
20
+
21
+
@@ -0,0 +1,24 @@
1
+ import type { KeyPath } from '@intlayer/types';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const MarkdownMetadataWithSelector: $$__sveltets_2_IsomorphicComponent<{
16
+ dictionaryKey: string;
17
+ keyPath: KeyPath[];
18
+ value: string;
19
+ metadataKeyPath: KeyPath[];
20
+ }, {
21
+ [evt: string]: CustomEvent<any>;
22
+ }, {}, {}, string>;
23
+ type MarkdownMetadataWithSelector = InstanceType<typeof MarkdownMetadataWithSelector>;
24
+ export default MarkdownMetadataWithSelector;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ import { setMarkdownContext } from './context';
3
+
4
+ export let renderMarkdown: (markdown: string) => string = (markdown) => markdown;
5
+
6
+ setMarkdownContext({ renderMarkdown });
7
+ </script>
8
+
9
+ <slot />
@@ -0,0 +1,29 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
+ default: any;
16
+ } ? Props extends Record<string, never> ? any : {
17
+ children?: any;
18
+ } : {});
19
+ declare const MarkdownProvider: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
+ renderMarkdown?: (markdown: string) => string;
21
+ }, {
22
+ default: {};
23
+ }>, {
24
+ [evt: string]: CustomEvent<any>;
25
+ }, {
26
+ default: {};
27
+ }, {}, string>;
28
+ type MarkdownProvider = InstanceType<typeof MarkdownProvider>;
29
+ export default MarkdownProvider;
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import { getMarkdownContext } from './context';
3
+
4
+ export let value: string;
5
+
6
+ const { renderMarkdown } = getMarkdownContext();
7
+
8
+ $: htmlContent = renderMarkdown(value);
9
+ </script>
10
+
11
+ {@html htmlContent}
@@ -0,0 +1,20 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const MarkdownRenderer: $$__sveltets_2_IsomorphicComponent<{
15
+ value: string;
16
+ }, {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {}, {}, string>;
19
+ type MarkdownRenderer = InstanceType<typeof MarkdownRenderer>;
20
+ export default MarkdownRenderer;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import type { KeyPath } from '@intlayer/types';
3
+ import ContentSelectorWrapper from '../editor/ContentSelectorWrapper.svelte';
4
+ import MarkdownRenderer from './MarkdownRenderer.svelte';
5
+
6
+ export let dictionaryKey: string;
7
+ export let keyPath: KeyPath[];
8
+ export let value: string;
9
+ </script>
10
+
11
+ <ContentSelectorWrapper {dictionaryKey} {keyPath}>
12
+ <MarkdownRenderer {dictionaryKey} {keyPath} {value} />
13
+ </ContentSelectorWrapper>
14
+
15
+
@@ -0,0 +1,23 @@
1
+ import type { KeyPath } from '@intlayer/types';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const MarkdownWithSelector: $$__sveltets_2_IsomorphicComponent<{
16
+ dictionaryKey: string;
17
+ keyPath: KeyPath[];
18
+ value: string;
19
+ }, {
20
+ [evt: string]: CustomEvent<any>;
21
+ }, {}, {}, string>;
22
+ type MarkdownWithSelector = InstanceType<typeof MarkdownWithSelector>;
23
+ export default MarkdownWithSelector;
@@ -0,0 +1,10 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ export const MARKDOWN_CONTEXT_KEY = Symbol('INTLAYER_MARKDOWN_CONTEXT');
3
+ export const getMarkdownContext = () => {
4
+ return (getContext(MARKDOWN_CONTEXT_KEY) || {
5
+ renderMarkdown: (md) => md,
6
+ });
7
+ };
8
+ export const setMarkdownContext = (context) => {
9
+ setContext(MARKDOWN_CONTEXT_KEY, context);
10
+ };
@@ -0,0 +1,4 @@
1
+ export * from './context';
2
+ export { default as MarkdownMetadataRenderer } from './MarkdownMetadataRenderer.svelte';
3
+ export { default as MarkdownProvider } from './MarkdownProvider.svelte';
4
+ export { default as MarkdownRenderer } from './MarkdownRenderer.svelte';
@@ -1,6 +1,6 @@
1
- import { DeepTransformContent as DeepTransformContentCore, IInterpreterPluginState as IInterpreterPluginStateCore, Plugins } from '@intlayer/core';
2
- import { DeclaredLocales, LocalesValues, NodeType } from '@intlayer/types';
3
- import { IntlayerNode } from './renderIntlayerNode';
1
+ import { type DeepTransformContent as DeepTransformContentCore, type IInterpreterPluginState as IInterpreterPluginStateCore, type Plugins } from '@intlayer/core';
2
+ import { type DeclaredLocales, type LocalesValues, NodeType } from '@intlayer/types';
3
+ import { type IntlayerNode } from './renderIntlayerNode';
4
4
  /**
5
5
  * Interface for Svelte-specific plugin functionality
6
6
  * This interface can be augmented to add more Svelte-specific transformations
@@ -0,0 +1,87 @@
1
+ import { getMarkdownMetadata, } from '@intlayer/core';
2
+ import { NodeType, } from '@intlayer/types';
3
+ import { ContentSelectorWrapper } from './editor';
4
+ import MarkdownMetadataWithSelector from './markdown/MarkdownMetadataWithSelector.svelte';
5
+ import MarkdownWithSelector from './markdown/MarkdownWithSelector.svelte';
6
+ import { renderIntlayerNode } from './renderIntlayerNode';
7
+ /**
8
+ * Basic Intlayer node plugins for content handling
9
+ * These handle the core content transformation logic
10
+ */
11
+ export const intlayerNodePlugins = {
12
+ id: 'intlayer-node-plugin',
13
+ canHandle: (node) => typeof node === 'bigint' ||
14
+ typeof node === 'string' ||
15
+ typeof node === 'number',
16
+ transform: (node, { children, ...rest }) => renderIntlayerNode({
17
+ value: children ?? node,
18
+ component: ContentSelectorWrapper,
19
+ props: rest,
20
+ }),
21
+ };
22
+ /**
23
+ * Svelte-specific node plugins for handling basic content types
24
+ * These plugins handle strings, numbers, and bigints in Svelte applications
25
+ */
26
+ export const svelteNodePlugins = intlayerNodePlugins;
27
+ /** Markdown string plugin. Replaces string node with a component that render the markdown. */
28
+ export const markdownStringPlugin = {
29
+ id: 'markdown-string-plugin',
30
+ canHandle: (node) => typeof node === 'string',
31
+ transform: (node, props, deepTransformNode) => {
32
+ const { ...rest } = props;
33
+ const metadata = getMarkdownMetadata(node) ?? {};
34
+ const metadataPlugins = {
35
+ id: 'markdown-metadata-plugin',
36
+ canHandle: (metadataNode) => typeof metadataNode === 'string' ||
37
+ typeof metadataNode === 'number' ||
38
+ typeof metadataNode === 'boolean' ||
39
+ !metadataNode,
40
+ transform: (metadataNode, props) => renderIntlayerNode({
41
+ value: metadataNode,
42
+ component: MarkdownMetadataWithSelector,
43
+ props: {
44
+ ...rest,
45
+ value: node, // The full markdown string
46
+ metadataKeyPath: props.keyPath,
47
+ },
48
+ }),
49
+ };
50
+ // Transform metadata while keeping the same structure
51
+ const metadataNodes = deepTransformNode(metadata, {
52
+ plugins: [metadataPlugins],
53
+ dictionaryKey: rest.dictionaryKey,
54
+ keyPath: [],
55
+ }) ?? {};
56
+ return renderIntlayerNode({
57
+ value: node,
58
+ component: MarkdownWithSelector,
59
+ props: {
60
+ ...rest,
61
+ value: node,
62
+ },
63
+ additionalProps: {
64
+ metadata: metadataNodes,
65
+ },
66
+ });
67
+ },
68
+ };
69
+ export const markdownPlugin = {
70
+ id: 'markdown-plugin',
71
+ canHandle: (node) => typeof node === 'object' && node?.nodeType === NodeType.Markdown,
72
+ transform: (node, props, deepTransformNode) => {
73
+ const newKeyPath = [
74
+ ...props.keyPath,
75
+ {
76
+ type: NodeType.Markdown,
77
+ },
78
+ ];
79
+ const children = node[NodeType.Markdown];
80
+ return deepTransformNode(children, {
81
+ ...props,
82
+ children,
83
+ keyPath: newKeyPath,
84
+ plugins: [markdownStringPlugin, ...(props.plugins ?? [])],
85
+ });
86
+ },
87
+ };
@@ -0,0 +1,44 @@
1
+ import IntlayerNodeWrapper from './IntlayerNodeWrapper.svelte';
2
+ export const renderIntlayerNode = (args) => {
3
+ const isClassComponent = Boolean(IntlayerNodeWrapper.prototype?.$destroy);
4
+ let Node;
5
+ if (isClassComponent) {
6
+ Node = class extends IntlayerNodeWrapper {
7
+ constructor(options) {
8
+ super({
9
+ ...options,
10
+ props: {
11
+ ...options.props,
12
+ Renderer: args.component,
13
+ rendererProps: args.props,
14
+ value: args.value,
15
+ },
16
+ });
17
+ }
18
+ };
19
+ }
20
+ else {
21
+ // Functional component (Svelte 5)
22
+ Node = (anchor, props) => {
23
+ const mergedProps = {
24
+ ...props,
25
+ Renderer: args.component,
26
+ rendererProps: args.props,
27
+ value: args.value,
28
+ };
29
+ return IntlayerNodeWrapper(anchor, mergedProps);
30
+ };
31
+ }
32
+ Object.defineProperty(Node, 'value', {
33
+ value: args.value,
34
+ writable: false,
35
+ });
36
+ Object.defineProperty(Node, 'toString', {
37
+ value: () => args.value?.toString() ?? '',
38
+ writable: false,
39
+ });
40
+ if (args.additionalProps) {
41
+ Object.assign(Node, args.additionalProps);
42
+ }
43
+ return Node;
44
+ };
@@ -0,0 +1 @@
1
+ export declare const setIntlayerMarkdown: (context: import("./markdown").MarkdownContext) => void;
@@ -0,0 +1,2 @@
1
+ import { setMarkdownContext } from './markdown/context';
2
+ export const setIntlayerMarkdown = setMarkdownContext;
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "svelte-intlayer",
3
- "version": "7.1.8",
4
- "private": false,
3
+ "version": "7.1.9",
5
4
  "description": "Easily internationalize i18n your Svelte applications with type-safe multilingual content management.",
6
5
  "keywords": [
7
6
  "intlayer",
@@ -36,31 +35,25 @@
36
35
  "type": "module",
37
36
  "exports": {
38
37
  ".": {
39
- "types": "./dist/types/index.d.ts",
40
- "require": "./dist/cjs/index.cjs",
41
- "import": "./dist/esm/index.mjs"
38
+ "types": "./dist/index.d.ts",
39
+ "svelte": "./dist/index.js",
40
+ "default": "./dist/index.js"
42
41
  },
43
42
  "./package.json": "./package.json"
44
43
  },
45
- "main": "dist/cjs/index.cjs",
46
- "module": "dist/esm/index.mjs",
47
- "types": "dist/types/index.d.ts",
48
- "typesVersions": {
49
- "*": {
50
- "package.json": [
51
- "./package.json"
52
- ]
53
- }
54
- },
44
+ "main": "dist/index.js",
45
+ "module": "dist/index.js",
46
+ "types": "dist/index.d.ts",
55
47
  "files": [
56
48
  "./dist",
57
49
  "./package.json"
58
50
  ],
59
51
  "scripts": {
60
- "build": "vite build",
61
- "build:ci": "vite build",
52
+ "build": "svelte-package -i src -o dist",
53
+ "build:ci": "svelte-package -i src -o dist",
54
+ "check": "svelte-check --tsconfig ./tsconfig.types.json",
62
55
  "clean": "rimraf ./dist .turbo",
63
- "dev": "vite build --watch",
56
+ "dev": "svelte-package -i src -o dist --watch",
64
57
  "format": "biome format . --check",
65
58
  "format:fix": "biome format --write .",
66
59
  "lint": "biome lint .",
@@ -74,24 +67,26 @@
74
67
  "typecheck": "tsc --noEmit --project tsconfig.types.json"
75
68
  },
76
69
  "dependencies": {
77
- "@intlayer/api": "7.1.8",
78
- "@intlayer/config": "7.1.8",
79
- "@intlayer/core": "7.1.8",
80
- "@intlayer/editor": "7.1.8",
81
- "@intlayer/types": "7.1.8",
82
- "@intlayer/unmerged-dictionaries-entry": "7.1.8"
70
+ "@intlayer/api": "7.1.9",
71
+ "@intlayer/config": "7.1.9",
72
+ "@intlayer/core": "7.1.9",
73
+ "@intlayer/editor": "7.1.9",
74
+ "@intlayer/types": "7.1.9",
75
+ "@intlayer/unmerged-dictionaries-entry": "7.1.9"
83
76
  },
84
77
  "devDependencies": {
85
- "@sveltejs/vite-plugin-svelte": "6.1.4",
78
+ "@sveltejs/package": "^2.5.4",
79
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
86
80
  "@types/node": "24.10.1",
87
81
  "@utils/ts-config": "1.0.4",
88
82
  "@utils/ts-config-types": "1.0.4",
89
83
  "@utils/tsdown-config": "1.0.4",
90
84
  "rimraf": "6.1.0",
85
+ "svelte": "^5.0.0",
86
+ "svelte-check": "^4.0.0",
91
87
  "tsdown": "0.16.5",
92
88
  "typescript": "5.9.3",
93
- "vite": "7.2.2",
94
- "vite-plugin-dts": "4.5.4",
89
+ "vite": "^5.0.0",
95
90
  "vitest": "4.0.10"
96
91
  },
97
92
  "peerDependencies": {
@@ -99,8 +94,5 @@
99
94
  },
100
95
  "engines": {
101
96
  "node": ">=14.18"
102
- },
103
- "bug": {
104
- "url": "https://github.com/aymericzip/intlayer/issues"
105
97
  }
106
98
  }
@@ -1,163 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import "svelte/internal/flags/legacy";
3
- import * as e from "svelte/internal/client";
4
- import { isSameKeyPath as M } from "@intlayer/core";
5
- import { MessageKey as D } from "@intlayer/editor";
6
- import { NodeType as w } from "@intlayer/types";
7
- import { get as N } from "svelte/store";
8
- import { onMount as L, onDestroy as R } from "svelte";
9
- import { useCommunicator as I } from "./esm/editor/communicator.mjs";
10
- import { useEditorEnabled as U } from "./esm/editor/editorEnabled.mjs";
11
- import { useFocusDictionary as x } from "./esm/editor/focusDictionary.mjs";
12
- import { useEditor as A } from "./esm/editor/useEditor.mjs";
13
- const H = (a, t, o) => {
14
- t(), o();
15
- }, K = (a, t, o, u) => {
16
- e.get(t) && (e.set(t, !1), o()?.()), u();
17
- }, F = (a, t, o) => {
18
- e.get(t) ? (a.preventDefault(), a.stopPropagation()) : o()?.(a);
19
- };
20
- var G = () => {
21
- }, V = e.template('<span role="button" tabindex="0"><!></span>');
22
- function Y(a, t) {
23
- e.push(t, !1);
24
- const o = e.mutable_state();
25
- let u = e.prop(t, "onClickOutside", 8, void 0), f = e.prop(t, "pressDuration", 8, 250), h = e.prop(t, "isSelecting", 8, !1), c = e.prop(t, "onPress", 8, void 0), m = e.prop(t, "onUnhover", 8, void 0), p = e.prop(t, "onHover", 8, void 0), k = e.prop(t, "onClick", 8, void 0), _ = e.mutable_state(null), r = e.mutable_state(!1), g = e.mutable_state(h()), d = null;
26
- const E = () => {
27
- e.set(g, !0), c()?.();
28
- }, C = () => {
29
- d = setTimeout(
30
- () => {
31
- E();
32
- },
33
- f()
34
- );
35
- }, l = () => {
36
- d && (clearTimeout(d), d = null);
37
- }, b = () => {
38
- e.get(r) && (e.set(r, !1), m()?.()), l();
39
- }, y = (v) => {
40
- e.get(_) && !e.get(_).contains(v.target) && (e.set(g, !1), u() && u()());
41
- };
42
- L(() => {
43
- document.addEventListener("mousedown", y);
44
- }), R(() => {
45
- typeof document < "u" && document.removeEventListener("mousedown", y), l();
46
- }), e.legacy_pre_effect(
47
- () => (e.deep_read_state(h()), e.get(g)),
48
- () => {
49
- e.set(o, h() || e.get(g));
50
- }
51
- ), e.legacy_pre_effect_reset(), e.init();
52
- var n = V();
53
- n.__click = [F, o, k], n.__keydown = [G], n.__mousedown = [
54
- H,
55
- l,
56
- C
57
- ], n.__mouseup = [
58
- K,
59
- r,
60
- m,
61
- l
62
- ], n.__touchstart = [
63
- H,
64
- l,
65
- C
66
- ], n.__touchend = [
67
- K,
68
- r,
69
- m,
70
- l
71
- ];
72
- var P = e.child(n);
73
- e.slot(P, t, "default", {}, null), e.reset(n), e.bind_this(n, (v) => e.set(_, v), () => e.get(_)), e.template_effect(() => e.set_style(n, `display: inline-block;
74
- cursor: pointer;
75
- user-select: none;
76
- border-radius: 0.375rem;
77
- outline-width: 2px;
78
- outline-offset: 4px;
79
- outline-style: solid;
80
- outline-color: ${e.get(o) || e.get(r) ? "inherit" : "transparent"};
81
- transition: all 100ms 50ms ease-in-out;
82
- `)), e.event("mouseleave", n, b), e.event("touchcancel", n, b), e.event("mouseenter", n, () => {
83
- e.set(r, !0), p()?.();
84
- }), e.append(a, n), e.pop();
85
- }
86
- e.delegate([
87
- "click",
88
- "keydown",
89
- "mousedown",
90
- "mouseup",
91
- "touchstart",
92
- "touchend"
93
- ]);
94
- function te(a, t) {
95
- e.push(t, !1);
96
- const [o, u] = e.setup_stores(), f = () => e.store_get(_, "$focusedContent", o), h = () => e.store_get(E, "$enabled", o), c = e.mutable_state(), m = e.mutable_state();
97
- let p = e.prop(t, "dictionaryKey", 8), k = e.prop(t, "keyPath", 8);
98
- const { focusedContent: _, setFocusedContent: r } = x(), g = U(), d = I(), { enabled: E } = g;
99
- A();
100
- const C = () => {
101
- r({
102
- dictionaryKey: p(),
103
- keyPath: e.get(c)
104
- });
105
- }, l = () => {
106
- const { postMessage: s, senderId: i } = N(d);
107
- s({
108
- type: `${D.INTLAYER_HOVERED_CONTENT_CHANGED}/post`,
109
- data: {
110
- dictionaryKey: p(),
111
- keyPath: e.get(c)
112
- },
113
- senderId: i
114
- });
115
- }, b = () => {
116
- const { postMessage: s, senderId: i } = N(d);
117
- s({
118
- type: `${D.INTLAYER_HOVERED_CONTENT_CHANGED}/post`,
119
- data: null,
120
- senderId: i
121
- });
122
- };
123
- e.legacy_pre_effect(
124
- () => (e.deep_read_state(k()), w),
125
- () => {
126
- e.set(c, k().filter((s) => s.type !== w.Translation));
127
- }
128
- ), e.legacy_pre_effect(
129
- () => (f(), e.deep_read_state(p()), e.get(c)),
130
- () => {
131
- e.set(m, f()?.dictionaryKey === p() && (f()?.keyPath?.length ?? 0) > 0 && M(f()?.keyPath ?? [], e.get(c)));
132
- }
133
- ), e.legacy_pre_effect_reset(), e.init();
134
- var y = e.comment(), n = e.first_child(y);
135
- {
136
- var P = (s) => {
137
- Y(s, {
138
- onPress: C,
139
- get isSelecting() {
140
- return e.get(m);
141
- },
142
- onHover: l,
143
- onUnhover: b,
144
- children: (i, T) => {
145
- var S = e.comment(), O = e.first_child(S);
146
- e.slot(O, t, "default", {}, null), e.append(i, S);
147
- },
148
- $$slots: { default: !0 }
149
- });
150
- }, v = (s) => {
151
- var i = e.comment(), T = e.first_child(i);
152
- e.slot(T, t, "default", {}, null), e.append(s, i);
153
- };
154
- e.if(n, (s) => {
155
- h() ? s(P) : s(v, !1);
156
- });
157
- }
158
- e.append(a, y), e.pop(), u();
159
- }
160
- export {
161
- Y as C,
162
- te as a
163
- };
@@ -1,10 +0,0 @@
1
- "use strict";require("svelte/internal/disclose-version");require("svelte/internal/flags/legacy");const L=require("svelte/internal/client"),R=require("@intlayer/core"),D=require("@intlayer/editor"),O=require("@intlayer/types"),q=require("svelte/store"),N=require("svelte"),I=require("./cjs/editor/communicator.cjs"),U=require("./cjs/editor/editorEnabled.cjs"),j=require("./cjs/editor/focusDictionary.cjs"),A=require("./cjs/editor/useEditor.cjs");function x(s){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const n in s)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(s,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>s[n]})}}return t.default=s,Object.freeze(t)}const e=x(L),w=(s,t,n)=>{t(),n()},K=(s,t,n,a)=>{e.get(t)&&(e.set(t,!1),n()?.()),a()},F=(s,t,n)=>{e.get(t)?(s.preventDefault(),s.stopPropagation()):n()?.(s)};var G=()=>{},V=e.template('<span role="button" tabindex="0"><!></span>');function M(s,t){e.push(t,!1);const n=e.mutable_state();let a=e.prop(t,"onClickOutside",8,void 0),f=e.prop(t,"pressDuration",8,250),y=e.prop(t,"isSelecting",8,!1),u=e.prop(t,"onPress",8,void 0),_=e.prop(t,"onUnhover",8,void 0),p=e.prop(t,"onHover",8,void 0),b=e.prop(t,"onClick",8,void 0),m=e.mutable_state(null),l=e.mutable_state(!1),g=e.mutable_state(y()),d=null;const E=()=>{e.set(g,!0),u()?.()},k=()=>{d=setTimeout(()=>{E()},f())},i=()=>{d&&(clearTimeout(d),d=null)},C=()=>{e.get(l)&&(e.set(l,!1),_()?.()),i()},h=v=>{e.get(m)&&!e.get(m).contains(v.target)&&(e.set(g,!1),a()&&a()())};N.onMount(()=>{document.addEventListener("mousedown",h)}),N.onDestroy(()=>{typeof document<"u"&&document.removeEventListener("mousedown",h),i()}),e.legacy_pre_effect(()=>(e.deep_read_state(y()),e.get(g)),()=>{e.set(n,y()||e.get(g))}),e.legacy_pre_effect_reset(),e.init();var o=V();o.__click=[F,n,b],o.__keydown=[G],o.__mousedown=[w,i,k],o.__mouseup=[K,l,_,i],o.__touchstart=[w,i,k],o.__touchend=[K,l,_,i];var P=e.child(o);e.slot(P,t,"default",{},null),e.reset(o),e.bind_this(o,v=>e.set(m,v),()=>e.get(m)),e.template_effect(()=>e.set_style(o,`display: inline-block;
2
- cursor: pointer;
3
- user-select: none;
4
- border-radius: 0.375rem;
5
- outline-width: 2px;
6
- outline-offset: 4px;
7
- outline-style: solid;
8
- outline-color: ${e.get(n)||e.get(l)?"inherit":"transparent"};
9
- transition: all 100ms 50ms ease-in-out;
10
- `)),e.event("mouseleave",o,C),e.event("touchcancel",o,C),e.event("mouseenter",o,()=>{e.set(l,!0),p()?.()}),e.append(s,o),e.pop()}e.delegate(["click","keydown","mousedown","mouseup","touchstart","touchend"]);function W(s,t){e.push(t,!1);const[n,a]=e.setup_stores(),f=()=>e.store_get(m,"$focusedContent",n),y=()=>e.store_get(E,"$enabled",n),u=e.mutable_state(),_=e.mutable_state();let p=e.prop(t,"dictionaryKey",8),b=e.prop(t,"keyPath",8);const{focusedContent:m,setFocusedContent:l}=j.useFocusDictionary(),g=U.useEditorEnabled(),d=I.useCommunicator(),{enabled:E}=g;A.useEditor();const k=()=>{l({dictionaryKey:p(),keyPath:e.get(u)})},i=()=>{const{postMessage:r,senderId:c}=q.get(d);r({type:`${D.MessageKey.INTLAYER_HOVERED_CONTENT_CHANGED}/post`,data:{dictionaryKey:p(),keyPath:e.get(u)},senderId:c})},C=()=>{const{postMessage:r,senderId:c}=q.get(d);r({type:`${D.MessageKey.INTLAYER_HOVERED_CONTENT_CHANGED}/post`,data:null,senderId:c})};e.legacy_pre_effect(()=>(e.deep_read_state(b()),O.NodeType),()=>{e.set(u,b().filter(r=>r.type!==O.NodeType.Translation))}),e.legacy_pre_effect(()=>(f(),e.deep_read_state(p()),e.get(u)),()=>{e.set(_,f()?.dictionaryKey===p()&&(f()?.keyPath?.length??0)>0&&R.isSameKeyPath(f()?.keyPath??[],e.get(u)))}),e.legacy_pre_effect_reset(),e.init();var h=e.comment(),o=e.first_child(h);{var P=r=>{M(r,{onPress:k,get isSelecting(){return e.get(_)},onHover:i,onUnhover:C,children:(c,S)=>{var T=e.comment(),H=e.first_child(T);e.slot(H,t,"default",{},null),e.append(c,T)},$$slots:{default:!0}})},v=r=>{var c=e.comment(),S=e.first_child(c);e.slot(S,t,"default",{},null),e.append(r,c)};e.if(o,r=>{y()?r(P):r(v,!1)})}e.append(s,h),e.pop(),a()}exports.ContentSelector=M;exports.ContentSelectorWrapper=W;