svelte-intlayer 7.1.8-canary.0 → 7.1.9-canary.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 (107) 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 +2 -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 +4 -3
  19. package/dist/client/useIntlayer.js +18 -0
  20. package/dist/client/useLocale.d.ts +16 -0
  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/editor/communicator.d.ts +9 -0
  29. package/dist/editor/communicator.js +54 -0
  30. package/dist/editor/dictionariesRecord.d.ts +5 -0
  31. package/dist/editor/dictionariesRecord.js +16 -0
  32. package/dist/editor/editorEnabled.d.ts +14 -0
  33. package/dist/editor/editorEnabled.js +41 -0
  34. package/dist/editor/focusDictionary.d.ts +15 -0
  35. package/dist/editor/focusDictionary.js +22 -0
  36. package/dist/editor/index.d.ts +9 -0
  37. package/dist/editor/index.js +9 -0
  38. package/dist/editor/useCrossFrameMessageListener.d.ts +2 -0
  39. package/dist/editor/useCrossFrameMessageListener.js +65 -0
  40. package/dist/editor/useCrossFrameState.d.ts +7 -0
  41. package/dist/editor/useCrossFrameState.js +82 -0
  42. package/dist/editor/useEditor.d.ts +1 -0
  43. package/dist/editor/useEditor.js +46 -0
  44. package/dist/editor/useIframeClickInterceptor.d.ts +2 -0
  45. package/dist/editor/useIframeClickInterceptor.js +29 -0
  46. package/dist/{types/getDictionary.d.ts → getDictionary.d.ts} +3 -3
  47. package/dist/getDictionary.js +18 -0
  48. package/dist/{types/getIntlayer.d.ts → getIntlayer.d.ts} +3 -3
  49. package/dist/getIntlayer.js +18 -0
  50. package/dist/{types/index.d.ts → index.d.ts} +4 -2
  51. package/dist/index.js +7 -0
  52. package/dist/index.test.d.ts +1 -0
  53. package/dist/index.test.js +6 -0
  54. package/dist/markdown/MarkdownMetadataRenderer.svelte +21 -0
  55. package/dist/markdown/MarkdownMetadataRenderer.svelte.d.ts +25 -0
  56. package/dist/markdown/MarkdownMetadataWithSelector.svelte +21 -0
  57. package/dist/markdown/MarkdownMetadataWithSelector.svelte.d.ts +24 -0
  58. package/dist/markdown/MarkdownProvider.svelte +9 -0
  59. package/dist/markdown/MarkdownProvider.svelte.d.ts +29 -0
  60. package/dist/markdown/MarkdownRenderer.svelte +11 -0
  61. package/dist/markdown/MarkdownRenderer.svelte.d.ts +20 -0
  62. package/dist/markdown/MarkdownWithSelector.svelte +15 -0
  63. package/dist/markdown/MarkdownWithSelector.svelte.d.ts +23 -0
  64. package/dist/markdown/context.d.ts +6 -0
  65. package/dist/markdown/context.js +10 -0
  66. package/dist/markdown/index.d.ts +4 -0
  67. package/dist/markdown/index.js +4 -0
  68. package/dist/plugins.d.ts +42 -0
  69. package/dist/plugins.js +87 -0
  70. package/dist/renderIntlayerNode.d.ts +13 -0
  71. package/dist/renderIntlayerNode.js +44 -0
  72. package/dist/setIntlayerMarkdown.d.ts +1 -0
  73. package/dist/setIntlayerMarkdown.js +2 -0
  74. package/package.json +22 -29
  75. package/dist/cjs/client/getBrowserLocale.cjs +0 -1
  76. package/dist/cjs/client/index.cjs +0 -1
  77. package/dist/cjs/client/intlayerContext.cjs +0 -1
  78. package/dist/cjs/client/intlayerStore.cjs +0 -1
  79. package/dist/cjs/client/useDictionary.cjs +0 -1
  80. package/dist/cjs/client/useDictionaryAsync.cjs +0 -1
  81. package/dist/cjs/client/useDictionaryDynamic.cjs +0 -1
  82. package/dist/cjs/client/useIntlayer.cjs +0 -1
  83. package/dist/cjs/client/useLocale.cjs +0 -1
  84. package/dist/cjs/getDictionary.cjs +0 -1
  85. package/dist/cjs/getIntlayer.cjs +0 -1
  86. package/dist/cjs/index.cjs +0 -1
  87. package/dist/cjs/markdown/index.cjs +0 -1
  88. package/dist/cjs/plugins.cjs +0 -1
  89. package/dist/esm/client/getBrowserLocale.mjs +0 -9
  90. package/dist/esm/client/index.mjs +0 -19
  91. package/dist/esm/client/intlayerContext.mjs +0 -8
  92. package/dist/esm/client/intlayerStore.mjs +0 -16
  93. package/dist/esm/client/useDictionary.mjs +0 -14
  94. package/dist/esm/client/useDictionaryAsync.mjs +0 -27
  95. package/dist/esm/client/useDictionaryDynamic.mjs +0 -27
  96. package/dist/esm/client/useIntlayer.mjs +0 -14
  97. package/dist/esm/client/useLocale.mjs +0 -22
  98. package/dist/esm/getDictionary.mjs +0 -18
  99. package/dist/esm/getIntlayer.mjs +0 -14
  100. package/dist/esm/index.mjs +0 -30
  101. package/dist/esm/markdown/index.mjs +0 -10
  102. package/dist/esm/plugins.mjs +0 -18
  103. package/dist/types/client/intlayerStore.d.ts +0 -11
  104. package/dist/types/client/useLocale.d.ts +0 -15
  105. package/dist/types/markdown/index.d.ts +0 -27
  106. package/dist/types/plugins.d.ts +0 -27
  107. /package/dist/{types/client → client}/index.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { IInterpreterPluginSvelte } from './plugins';
1
+ import type { IInterpreterPluginSvelte } from './plugins';
2
2
  declare module '@intlayer/core' {
3
3
  interface IInterpreterPlugin<T, S, L> extends IInterpreterPluginSvelte<T> {
4
4
  }
@@ -6,5 +6,7 @@ declare module '@intlayer/core' {
6
6
  export * from './client';
7
7
  export * from './getDictionary';
8
8
  export * from './getIntlayer';
9
- export * from './markdown';
10
9
  export * from './plugins';
10
+ import { useEditor } from './editor';
11
+ import { setMarkdownContext } from './markdown';
12
+ export { useEditor as useIntlayerEditor, setMarkdownContext as setIntlayerMarkdown, };
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './client';
2
+ export * from './getDictionary';
3
+ export * from './getIntlayer';
4
+ export * from './plugins';
5
+ import { useEditor } from './editor';
6
+ import { setMarkdownContext } from './markdown';
7
+ export { useEditor as useIntlayerEditor, setMarkdownContext as setIntlayerMarkdown, };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ describe('svelte-intlayer', () => {
3
+ it('should be defined', () => {
4
+ expect(true).toBe(true);
5
+ });
6
+ });
@@ -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,6 @@
1
+ export declare const MARKDOWN_CONTEXT_KEY: unique symbol;
2
+ export interface MarkdownContext {
3
+ renderMarkdown: (markdown: string) => string;
4
+ }
5
+ export declare const getMarkdownContext: () => MarkdownContext;
6
+ export declare const setMarkdownContext: (context: MarkdownContext) => void;
@@ -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';
@@ -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';
@@ -0,0 +1,42 @@
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
+ /**
5
+ * Interface for Svelte-specific plugin functionality
6
+ * This interface can be augmented to add more Svelte-specific transformations
7
+ */
8
+ export type IInterpreterPluginState = IInterpreterPluginStateCore & {
9
+ /** Any Svelte-specific properties can be added here */
10
+ intlayerNode: true;
11
+ markdown: true;
12
+ };
13
+ /**
14
+ * Type that represents the deep transformation of content for Svelte
15
+ * This applies Svelte-specific transformations recursively to all content
16
+ */
17
+ export type DeepTransformContent<T, L extends LocalesValues = DeclaredLocales> = DeepTransformContentCore<T, IInterpreterPluginState, L>;
18
+ /**
19
+ * Basic Intlayer node plugins for content handling
20
+ * These handle the core content transformation logic
21
+ */
22
+ export declare const intlayerNodePlugins: Plugins;
23
+ /**
24
+ * Svelte-specific node plugins for handling basic content types
25
+ * These plugins handle strings, numbers, and bigints in Svelte applications
26
+ */
27
+ export declare const svelteNodePlugins: Plugins;
28
+ export type MarkdownStringCond<T> = T extends string ? IntlayerNode<string> : never;
29
+ /** Markdown string plugin. Replaces string node with a component that render the markdown. */
30
+ export declare const markdownStringPlugin: Plugins;
31
+ export type MarkdownCond<T> = T extends {
32
+ nodeType: NodeType | string;
33
+ [NodeType.Markdown]: infer M;
34
+ metadata?: infer U;
35
+ } ? IntlayerNode<DeepTransformContent<M>, {
36
+ metadata: DeepTransformContent<U>;
37
+ }> : never;
38
+ export declare const markdownPlugin: Plugins;
39
+ export interface IInterpreterPluginSvelte<T> {
40
+ intlayerNode: T extends string | number ? IntlayerNode<T> : never;
41
+ markdown: MarkdownCond<T>;
42
+ }
@@ -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,13 @@
1
+ type IntlayerNodeProps = {
2
+ value: any;
3
+ component: any;
4
+ props: Record<string, any>;
5
+ additionalProps?: Record<string, any>;
6
+ };
7
+ export type IntlayerNode<T = any, P = Record<string, any>> = {
8
+ new (...args: any[]): any;
9
+ (anchor: any, props: any): any;
10
+ value: T;
11
+ } & P;
12
+ export declare const renderIntlayerNode: <T = any, P = Record<string, any>>(args: IntlayerNodeProps) => IntlayerNode<T, P>;
13
+ export {};
@@ -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-canary.0",
4
- "private": false,
3
+ "version": "7.1.9-canary.0",
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,23 +67,26 @@
74
67
  "typecheck": "tsc --noEmit --project tsconfig.types.json"
75
68
  },
76
69
  "dependencies": {
77
- "@intlayer/api": "7.1.8-canary.0",
78
- "@intlayer/config": "7.1.8-canary.0",
79
- "@intlayer/core": "7.1.8-canary.0",
80
- "@intlayer/editor": "7.1.8-canary.0",
81
- "@intlayer/types": "7.1.8-canary.0"
70
+ "@intlayer/api": "7.1.8",
71
+ "@intlayer/config": "7.1.8",
72
+ "@intlayer/core": "7.1.8",
73
+ "@intlayer/editor": "7.1.8",
74
+ "@intlayer/types": "7.1.8",
75
+ "@intlayer/unmerged-dictionaries-entry": "7.1.8"
82
76
  },
83
77
  "devDependencies": {
84
- "@sveltejs/vite-plugin-svelte": "6.1.4",
78
+ "@sveltejs/package": "^2.5.4",
79
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
85
80
  "@types/node": "24.10.1",
86
81
  "@utils/ts-config": "1.0.4",
87
82
  "@utils/ts-config-types": "1.0.4",
88
83
  "@utils/tsdown-config": "1.0.4",
89
84
  "rimraf": "6.1.0",
85
+ "svelte": "^5.0.0",
86
+ "svelte-check": "^4.0.0",
90
87
  "tsdown": "0.16.5",
91
88
  "typescript": "5.9.3",
92
- "vite": "7.2.2",
93
- "vite-plugin-dts": "4.5.4",
89
+ "vite": "^5.0.0",
94
90
  "vitest": "4.0.10"
95
91
  },
96
92
  "peerDependencies": {
@@ -98,8 +94,5 @@
98
94
  },
99
95
  "engines": {
100
96
  "node": ">=14.18"
101
- },
102
- "bug": {
103
- "url": "https://github.com/aymericzip/intlayer/issues"
104
97
  }
105
98
  }
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=()=>{if(typeof navigator>"u")return"en";const e=navigator.language||navigator.languages?.[0];return e&&e.split("-")[0]||"en"};exports.getBrowserLocale=n;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./getBrowserLocale.cjs"),e=require("./intlayerContext.cjs"),n=require("./intlayerStore.cjs"),r=require("./useDictionary.cjs"),i=require("./useDictionaryAsync.cjs"),c=require("./useDictionaryDynamic.cjs"),o=require("./useIntlayer.cjs"),s=require("./useLocale.cjs");exports.getBrowserLocale=t.getBrowserLocale;exports.getIntlayerContext=e.getIntlayerContext;exports.setIntlayerContext=e.setIntlayerContext;exports.intlayerStore=n.intlayerStore;exports.useDictionary=r.useDictionary;exports.useDictionaryAsync=i.useDictionaryAsync;exports.useDictionaryDynamic=c.useDictionaryDynamic;exports.useIntlayer=o.useIntlayer;exports.useLocale=s.useLocale;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("svelte"),e=Symbol("intlayer"),o=n=>{t.setContext(e,n)},r=()=>t.getContext(e);exports.getIntlayerContext=r;exports.setIntlayerContext=o;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("svelte/store"),c=()=>{const{subscribe:t,set:o,update:l}=r.writable({locale:"en"});return{subscribe:t,setLocale:e=>l(a=>({...a,locale:e})),getLocale:()=>r.derived({subscribe:t},e=>e.locale),reset:()=>o({locale:"en"})}},n=c();exports.intlayerStore=n;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("svelte/store"),c=require("../getDictionary.cjs"),a=require("./intlayerContext.cjs"),l=require("./intlayerStore.cjs"),s=(e,t)=>{const r=a.getIntlayerContext();return i.derived([l.intlayerStore],([n])=>{const o=t??r?.locale??n.locale;return c.getDictionary(e,o)})};exports.useDictionary=s;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("svelte/store"),s=require("./intlayerContext.cjs"),y=require("./intlayerStore.cjs"),d=async(n,c)=>{const i=s.getIntlayerContext(),e=r.writable(null);return r.derived([y.intlayerStore],([a])=>{const o=c??i?.locale??a.locale;return(async()=>{try{const t=n[o];if(t){const l=await t();e.set(l)}else e.set(null)}catch(t){console.error(`Failed to load dictionary for key: ${String(o)}`,t),e.set(null)}})(),null})};exports.useDictionaryAsync=d;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("svelte/store"),y=require("./intlayerContext.cjs"),d=require("./intlayerStore.cjs"),u=(r,n,i)=>{const c=y.getIntlayerContext(),e=o.writable(null);return o.derived([d.intlayerStore],([a])=>{const l=i??c?.locale??a.locale;return(async()=>{try{const t=r[l];if(t){const s=await t();e.set(s)}else e.set(null)}catch(t){console.error(`Failed to load dictionary for key: ${String(n)}`,t),e.set(null)}})(),null})};exports.useDictionaryDynamic=u;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("svelte/store"),c=require("../getIntlayer.cjs"),a=require("./intlayerContext.cjs"),i=require("./intlayerStore.cjs"),s=(e,t)=>{const r=a.getIntlayerContext();return l.derived([i.intlayerStore],([n])=>{const o=t??r?.locale??n.locale;return c.getIntlayer(e,o)})};exports.useIntlayer=s;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@intlayer/config/built"),n=require("svelte/store"),c=require("./intlayerContext.cjs"),t=require("./intlayerStore.cjs"),i=()=>{const e=c.getIntlayerContext(),{defaultLocale:o,locales:l}=r?.internationalization??{};return e?{locale:n.derived([t.intlayerStore],([a])=>e.locale||a.locale),setLocale:e.setLocale}:{locale:t.intlayerStore.getLocale(),setLocale:t.intlayerStore.setLocale,defaultLocale:o,availableLocales:l}};exports.useLocale=i;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@intlayer/core"),e=require("./plugins.cjs"),s=(t,i,n)=>{const r=[e.intlayerNodePlugins,e.svelteNodePlugins,e.markdownPlugin,...n??[]];return o.getDictionary(t,i,r)};exports.getDictionary=s;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@intlayer/core"),e=require("./plugins.cjs"),i=(t,n,r)=>{const l=[e.intlayerNodePlugins,e.svelteNodePlugins,e.markdownPlugin,...r??[]];return o.getIntlayer(t,n,l)};exports.getIntlayer=i;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./client/getBrowserLocale.cjs"),t=require("./client/intlayerContext.cjs"),i=require("./client/intlayerStore.cjs"),o=require("./client/useDictionary.cjs"),a=require("./client/useDictionaryAsync.cjs"),c=require("./client/useDictionaryDynamic.cjs"),s=require("./client/useIntlayer.cjs"),l=require("./client/useLocale.cjs"),u=require("./getDictionary.cjs"),y=require("./getIntlayer.cjs"),n=require("./markdown/index.cjs"),e=require("./plugins.cjs");exports.getBrowserLocale=r.getBrowserLocale;exports.getIntlayerContext=t.getIntlayerContext;exports.setIntlayerContext=t.setIntlayerContext;exports.intlayerStore=i.intlayerStore;exports.useDictionary=o.useDictionary;exports.useDictionaryAsync=a.useDictionaryAsync;exports.useDictionaryDynamic=c.useDictionaryDynamic;exports.useIntlayer=s.useIntlayer;exports.useLocale=l.useLocale;exports.getDictionary=u.getDictionary;exports.getIntlayer=y.getIntlayer;exports.defaultMarkdownRenderer=n.defaultMarkdownRenderer;exports.processMarkdown=n.processMarkdown;exports.intlayerNodePlugins=e.intlayerNodePlugins;exports.markdownPlugin=e.markdownPlugin;exports.svelteNodePlugins=e.svelteNodePlugins;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=e=>e,o={render:r,configure:e=>{console.log("Configuring markdown renderer with options:",e)}};exports.defaultMarkdownRenderer=o;exports.processMarkdown=r;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r={id:"svelte-node-plugin",canHandle:n=>typeof n=="bigint"||typeof n=="string"||typeof n=="number",transform:(n,{children:e,...t})=>e??n},i={id:"intlayer-node-plugin",canHandle:n=>typeof n=="bigint"||typeof n=="string"||typeof n=="number",transform:(n,{children:e,...t})=>e??n},o={id:"markdown-plugin",canHandle:n=>typeof n=="string",transform:(n,e)=>n};exports.intlayerNodePlugins=i;exports.markdownPlugin=o;exports.svelteNodePlugins=r;
@@ -1,9 +0,0 @@
1
- const a = () => {
2
- if (typeof navigator > "u")
3
- return "en";
4
- const e = navigator.language || navigator.languages?.[0];
5
- return e && e.split("-")[0] || "en";
6
- };
7
- export {
8
- a as getBrowserLocale
9
- };