@fuzdev/fuz_ui 0.203.1 → 0.205.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 (137) hide show
  1. package/dist/Alert.svelte +31 -17
  2. package/dist/Alert.svelte.d.ts +8 -2
  3. package/dist/Alert.svelte.d.ts.map +1 -1
  4. package/dist/ApiModule.svelte +14 -1
  5. package/dist/ApiModule.svelte.d.ts.map +1 -1
  6. package/dist/Card.svelte +28 -10
  7. package/dist/Card.svelte.d.ts +7 -2
  8. package/dist/Card.svelte.d.ts.map +1 -1
  9. package/dist/CopyToClipboard.svelte +5 -1
  10. package/dist/CopyToClipboard.svelte.d.ts.map +1 -1
  11. package/dist/DeclarationDetail.svelte +15 -4
  12. package/dist/DeclarationDetail.svelte.d.ts.map +1 -1
  13. package/dist/DocsLink.svelte +15 -4
  14. package/dist/DocsLink.svelte.d.ts +8 -1
  15. package/dist/DocsLink.svelte.d.ts.map +1 -1
  16. package/dist/DocsMenu.svelte +1 -1
  17. package/dist/DocsPageLinks.svelte +1 -1
  18. package/dist/EcosystemLinks.svelte +5 -2
  19. package/dist/EcosystemLinks.svelte.d.ts +2 -1
  20. package/dist/EcosystemLinks.svelte.d.ts.map +1 -1
  21. package/dist/EcosystemLinksPanel.svelte +4 -2
  22. package/dist/EcosystemLinksPanel.svelte.d.ts +2 -1
  23. package/dist/EcosystemLinksPanel.svelte.d.ts.map +1 -1
  24. package/dist/Hashlink.svelte +1 -1
  25. package/dist/ImgOrSvg.svelte +6 -5
  26. package/dist/ImgOrSvg.svelte.d.ts +2 -1
  27. package/dist/ImgOrSvg.svelte.d.ts.map +1 -1
  28. package/dist/LibraryDetail.svelte +5 -2
  29. package/dist/LibraryDetail.svelte.d.ts +3 -1
  30. package/dist/LibraryDetail.svelte.d.ts.map +1 -1
  31. package/dist/LibrarySummary.svelte +4 -2
  32. package/dist/LibrarySummary.svelte.d.ts +2 -1
  33. package/dist/LibrarySummary.svelte.d.ts.map +1 -1
  34. package/dist/PasteFromClipboard.svelte +3 -1
  35. package/dist/PasteFromClipboard.svelte.d.ts.map +1 -1
  36. package/dist/PendingButton.svelte +0 -2
  37. package/dist/PendingButton.svelte.d.ts.map +1 -1
  38. package/dist/StyleVariableButton.svelte +5 -1
  39. package/dist/StyleVariableButton.svelte.d.ts.map +1 -1
  40. package/dist/Svg.svelte +1 -1
  41. package/dist/TomeContent.svelte +5 -2
  42. package/dist/TomeContent.svelte.d.ts +2 -1
  43. package/dist/TomeContent.svelte.d.ts.map +1 -1
  44. package/dist/TypeLink.svelte +13 -4
  45. package/dist/TypeLink.svelte.d.ts +7 -1
  46. package/dist/TypeLink.svelte.d.ts.map +1 -1
  47. package/package.json +12 -36
  48. package/dist/Mdz.svelte +0 -34
  49. package/dist/Mdz.svelte.d.ts +0 -11
  50. package/dist/Mdz.svelte.d.ts.map +0 -1
  51. package/dist/MdzNodeView.svelte +0 -107
  52. package/dist/MdzNodeView.svelte.d.ts +0 -9
  53. package/dist/MdzNodeView.svelte.d.ts.map +0 -1
  54. package/dist/MdzPrecompiled.svelte +0 -30
  55. package/dist/MdzPrecompiled.svelte.d.ts +0 -11
  56. package/dist/MdzPrecompiled.svelte.d.ts.map +0 -1
  57. package/dist/MdzRoot.svelte +0 -30
  58. package/dist/MdzRoot.svelte.d.ts +0 -12
  59. package/dist/MdzRoot.svelte.d.ts.map +0 -1
  60. package/dist/MdzStream.svelte +0 -32
  61. package/dist/MdzStream.svelte.d.ts +0 -12
  62. package/dist/MdzStream.svelte.d.ts.map +0 -1
  63. package/dist/MdzStreamNodeView.svelte +0 -106
  64. package/dist/MdzStreamNodeView.svelte.d.ts +0 -9
  65. package/dist/MdzStreamNodeView.svelte.d.ts.map +0 -1
  66. package/dist/mdz.d.ts +0 -112
  67. package/dist/mdz.d.ts.map +0 -1
  68. package/dist/mdz.js +0 -1186
  69. package/dist/mdz_components.d.ts +0 -63
  70. package/dist/mdz_components.d.ts.map +0 -1
  71. package/dist/mdz_components.js +0 -32
  72. package/dist/mdz_helpers.d.ts +0 -164
  73. package/dist/mdz_helpers.d.ts.map +0 -1
  74. package/dist/mdz_helpers.js +0 -424
  75. package/dist/mdz_lexer.d.ts +0 -93
  76. package/dist/mdz_lexer.d.ts.map +0 -1
  77. package/dist/mdz_lexer.js +0 -732
  78. package/dist/mdz_opcodes.d.ts +0 -174
  79. package/dist/mdz_opcodes.d.ts.map +0 -1
  80. package/dist/mdz_opcodes.js +0 -14
  81. package/dist/mdz_opcodes_to_nodes.d.ts +0 -20
  82. package/dist/mdz_opcodes_to_nodes.d.ts.map +0 -1
  83. package/dist/mdz_opcodes_to_nodes.js +0 -332
  84. package/dist/mdz_stream_parser.d.ts +0 -80
  85. package/dist/mdz_stream_parser.d.ts.map +0 -1
  86. package/dist/mdz_stream_parser.js +0 -354
  87. package/dist/mdz_stream_parser_block.d.ts +0 -76
  88. package/dist/mdz_stream_parser_block.d.ts.map +0 -1
  89. package/dist/mdz_stream_parser_block.js +0 -458
  90. package/dist/mdz_stream_parser_inline.d.ts +0 -52
  91. package/dist/mdz_stream_parser_inline.d.ts.map +0 -1
  92. package/dist/mdz_stream_parser_inline.js +0 -378
  93. package/dist/mdz_stream_parser_link.d.ts +0 -22
  94. package/dist/mdz_stream_parser_link.d.ts.map +0 -1
  95. package/dist/mdz_stream_parser_link.js +0 -215
  96. package/dist/mdz_stream_parser_state.d.ts +0 -187
  97. package/dist/mdz_stream_parser_state.d.ts.map +0 -1
  98. package/dist/mdz_stream_parser_state.js +0 -398
  99. package/dist/mdz_stream_parser_text.d.ts +0 -14
  100. package/dist/mdz_stream_parser_text.d.ts.map +0 -1
  101. package/dist/mdz_stream_parser_text.js +0 -50
  102. package/dist/mdz_stream_parser_url.d.ts +0 -60
  103. package/dist/mdz_stream_parser_url.d.ts.map +0 -1
  104. package/dist/mdz_stream_parser_url.js +0 -307
  105. package/dist/mdz_stream_state.svelte.d.ts +0 -44
  106. package/dist/mdz_stream_state.svelte.d.ts.map +0 -1
  107. package/dist/mdz_stream_state.svelte.js +0 -357
  108. package/dist/mdz_to_svelte.d.ts +0 -41
  109. package/dist/mdz_to_svelte.d.ts.map +0 -1
  110. package/dist/mdz_to_svelte.js +0 -100
  111. package/dist/mdz_token_parser.d.ts +0 -14
  112. package/dist/mdz_token_parser.d.ts.map +0 -1
  113. package/dist/mdz_token_parser.js +0 -344
  114. package/dist/svelte_preprocess_mdz.d.ts +0 -65
  115. package/dist/svelte_preprocess_mdz.d.ts.map +0 -1
  116. package/dist/svelte_preprocess_mdz.js +0 -529
  117. package/dist/tsdoc_mdz.d.ts +0 -45
  118. package/dist/tsdoc_mdz.d.ts.map +0 -1
  119. package/dist/tsdoc_mdz.js +0 -88
  120. package/src/lib/mdz.ts +0 -1532
  121. package/src/lib/mdz_components.ts +0 -64
  122. package/src/lib/mdz_helpers.ts +0 -449
  123. package/src/lib/mdz_lexer.ts +0 -1012
  124. package/src/lib/mdz_opcodes.ts +0 -205
  125. package/src/lib/mdz_opcodes_to_nodes.ts +0 -375
  126. package/src/lib/mdz_stream_parser.ts +0 -415
  127. package/src/lib/mdz_stream_parser_block.ts +0 -532
  128. package/src/lib/mdz_stream_parser_inline.ts +0 -414
  129. package/src/lib/mdz_stream_parser_link.ts +0 -271
  130. package/src/lib/mdz_stream_parser_state.ts +0 -539
  131. package/src/lib/mdz_stream_parser_text.ts +0 -77
  132. package/src/lib/mdz_stream_parser_url.ts +0 -365
  133. package/src/lib/mdz_stream_state.svelte.ts +0 -387
  134. package/src/lib/mdz_to_svelte.ts +0 -141
  135. package/src/lib/mdz_token_parser.ts +0 -434
  136. package/src/lib/svelte_preprocess_mdz.ts +0 -742
  137. package/src/lib/tsdoc_mdz.ts +0 -97
@@ -1,106 +0,0 @@
1
- <script lang="ts">
2
- import Code from '@fuzdev/fuz_code/Code.svelte';
3
- import {resolve} from '$app/paths';
4
-
5
- import {resolve_relative_path, mdz_is_safe_reference} from './mdz_helpers.js';
6
- import DocsLink from './DocsLink.svelte';
7
- import MdzStreamNodeView from './MdzStreamNodeView.svelte';
8
- import {
9
- mdz_components_context,
10
- mdz_elements_context,
11
- mdz_base_context,
12
- } from './mdz_components.js';
13
- import type {MdzStreamNode} from './mdz_stream_state.svelte.js';
14
-
15
- const {
16
- node,
17
- }: {
18
- node: MdzStreamNode;
19
- } = $props();
20
-
21
- const get_components = mdz_components_context.get_maybe();
22
- const get_elements = mdz_elements_context.get_maybe();
23
- const get_mdz_base = mdz_base_context.get_maybe();
24
- </script>
25
-
26
- {#if node.type === 'Element'}
27
- {@const element_config = get_elements?.()?.get(node.name ?? '')}
28
- {#if element_config !== undefined}
29
- <svelte:element this={node.name}>
30
- {#if node.children.length > 0}
31
- {@render render_children(node.children)}
32
- {/if}
33
- </svelte:element>
34
- {:else}
35
- {@render render_unregistered_tag(node.name ?? '', node.children)}
36
- {/if}
37
- {:else if node.type === 'Component'}
38
- {@const Component = get_components?.()?.get(node.name ?? '')}
39
- {#if Component}
40
- <Component>
41
- {#if node.children.length > 0}
42
- {@render render_children(node.children)}
43
- {/if}
44
- </Component>
45
- {:else}
46
- {@render render_unregistered_tag(node.name ?? '', node.children)}
47
- {/if}
48
- {:else if node.type === 'Text'}
49
- {node.content}
50
- {:else if node.type === 'Code'}
51
- <DocsLink reference={node.content} />
52
- {:else if node.type === 'Bold'}
53
- <strong>{@render render_children(node.children)}</strong>
54
- {:else if node.type === 'Italic'}
55
- <em>{@render render_children(node.children)}</em>
56
- {:else if node.type === 'Strikethrough'}
57
- <s>{@render render_children(node.children)}</s>
58
- {:else if node.type === 'Link'}
59
- {@const reference = node.reference ?? ''}
60
- {#if !mdz_is_safe_reference(reference)}
61
- {@render render_children(node.children)}
62
- {:else if node.link_type === 'internal'}
63
- {@const skip_resolve = reference.startsWith('#') || reference.startsWith('?')}
64
- {@const mdz_base = get_mdz_base?.()}
65
- {#if reference.startsWith('.') && mdz_base}
66
- {@const resolved = resolve_relative_path(reference, mdz_base)}
67
- <a href={resolve(resolved as any)}>{@render render_children(node.children)}</a>
68
- {:else if skip_resolve || reference.startsWith('.')}
69
- <!-- Fragment, query, and relative links without base skip resolve() -->
70
- <!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
71
- <a href={reference}>{@render render_children(node.children)}</a>
72
- {:else}
73
- <a href={resolve(reference as any)}>{@render render_children(node.children)}</a>
74
- {/if}
75
- {:else}
76
- <!-- external link -->
77
- <!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
78
- <a href={reference} target="_blank" rel="noopener">{@render render_children(node.children)}</a>
79
- {/if}
80
- {:else if node.type === 'Paragraph'}
81
- <p>{@render render_children(node.children)}</p>
82
- {:else if node.type === 'Hr'}
83
- <hr />
84
- {:else if node.type === 'Heading'}
85
- <svelte:element this={`h${node.level}`} id={node.heading_id}>
86
- {@render render_children(node.children)}
87
- </svelte:element>
88
- {:else if node.type === 'Codeblock'}
89
- <Code lang={node.lang} content={node.content} />
90
- {/if}
91
-
92
- {#snippet render_children(nodes: Array<MdzStreamNode>)}
93
- {#each nodes as node (node.id)}
94
- <MdzStreamNodeView {node} />
95
- {/each}
96
- {/snippet}
97
-
98
- {#snippet render_unregistered_tag(name: string, children: Array<MdzStreamNode>)}
99
- {#if children.length > 0}
100
- <code class="color_c_50">&lt;{name}&gt;</code>{@render render_children(children)}<code
101
- class="color_c_50">&lt;/{name}&gt;</code
102
- >
103
- {:else}
104
- <code class="color_c_50">&lt;{name} /&gt;</code>
105
- {/if}
106
- {/snippet}
@@ -1,9 +0,0 @@
1
- import MdzStreamNodeView from './MdzStreamNodeView.svelte';
2
- import type { MdzStreamNode } from './mdz_stream_state.svelte.js';
3
- type $$ComponentProps = {
4
- node: MdzStreamNode;
5
- };
6
- declare const MdzStreamNodeView: import("svelte").Component<$$ComponentProps, {}, "">;
7
- type MdzStreamNodeView = ReturnType<typeof MdzStreamNodeView>;
8
- export default MdzStreamNodeView;
9
- //# sourceMappingURL=MdzStreamNodeView.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MdzStreamNodeView.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/MdzStreamNodeView.svelte"],"names":[],"mappings":"AAQA,OAAO,iBAAiB,MAAM,4BAA4B,CAAC;AAM3D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAE/D,KAAK,gBAAgB,GAAI;IACxB,IAAI,EAAE,aAAa,CAAC;CACpB,CAAC;AAsGH,QAAA,MAAM,iBAAiB,sDAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
package/dist/mdz.d.ts DELETED
@@ -1,112 +0,0 @@
1
- /**
2
- * mdz - minimal markdown dialect for Fuz documentation.
3
- *
4
- * Parses an enhanced markdown dialect with:
5
- * - inline formatting: `code`, **bold**, _italic_, ~strikethrough~
6
- * - auto-detected links: external URLs (`https://...`) and internal paths (`/path`)
7
- * - markdown links: `[text](url)` with custom display text
8
- * - inline code in backticks (creates `Code` nodes; auto-linking to identifiers/modules
9
- * is handled by the rendering layer via `MdzNodeView.svelte`)
10
- * - paragraph breaks (double newline)
11
- * - block elements: headings, horizontal rules, code blocks
12
- * - HTML elements and Svelte components (opt-in via context)
13
- *
14
- * Key constraint: preserves ALL whitespace exactly as authored,
15
- * and is rendered with white-space pre or pre-wrap.
16
- *
17
- * ## Design philosophy
18
- *
19
- * - **False negatives over false positives**: When in doubt, treat as plain text.
20
- * Block elements can interrupt paragraphs without blank lines; inline formatting is strict.
21
- * - **One way to do things**: Single unambiguous syntax per feature. No alternatives.
22
- * - **Explicit over implicit**: Clear delimiters and column-0 requirements avoid ambiguity.
23
- * - **Simple over complete**: Prefer simple parsing rules over complex edge case handling.
24
- *
25
- * ## Status
26
- *
27
- * This is an early proof of concept with missing features and edge cases.
28
- *
29
- * @module
30
- */
31
- /**
32
- * Parses text to an array of `MdzNode`.
33
- */
34
- export declare const mdz_parse: (text: string) => Array<MdzNode>;
35
- export type MdzNode = MdzTextNode | MdzCodeNode | MdzCodeblockNode | MdzBoldNode | MdzItalicNode | MdzStrikethroughNode | MdzLinkNode | MdzParagraphNode | MdzHrNode | MdzHeadingNode | MdzElementNode | MdzComponentNode;
36
- export interface MdzBaseNode {
37
- type: string;
38
- start: number;
39
- end: number;
40
- }
41
- export interface MdzTextNode extends MdzBaseNode {
42
- type: 'Text';
43
- content: string;
44
- }
45
- export interface MdzCodeNode extends MdzBaseNode {
46
- type: 'Code';
47
- content: string;
48
- }
49
- export interface MdzCodeblockNode extends MdzBaseNode {
50
- type: 'Codeblock';
51
- lang: string | null;
52
- content: string;
53
- }
54
- export interface MdzBoldNode extends MdzBaseNode {
55
- type: 'Bold';
56
- children: Array<MdzNode>;
57
- }
58
- export interface MdzItalicNode extends MdzBaseNode {
59
- type: 'Italic';
60
- children: Array<MdzNode>;
61
- }
62
- export interface MdzStrikethroughNode extends MdzBaseNode {
63
- type: 'Strikethrough';
64
- children: Array<MdzNode>;
65
- }
66
- export interface MdzLinkNode extends MdzBaseNode {
67
- type: 'Link';
68
- reference: string;
69
- children: Array<MdzNode>;
70
- link_type: 'external' | 'internal';
71
- }
72
- export interface MdzParagraphNode extends MdzBaseNode {
73
- type: 'Paragraph';
74
- children: Array<MdzNode>;
75
- }
76
- export interface MdzHrNode extends MdzBaseNode {
77
- type: 'Hr';
78
- }
79
- export interface MdzHeadingNode extends MdzBaseNode {
80
- type: 'Heading';
81
- level: 1 | 2 | 3 | 4 | 5 | 6;
82
- id: string;
83
- children: Array<MdzNode>;
84
- }
85
- export interface MdzElementNode extends MdzBaseNode {
86
- type: 'Element';
87
- name: string;
88
- children: Array<MdzNode>;
89
- }
90
- export interface MdzComponentNode extends MdzBaseNode {
91
- type: 'Component';
92
- name: string;
93
- children: Array<MdzNode>;
94
- }
95
- /**
96
- * Parser for mdz format.
97
- * Single-pass lexer/parser with text accumulation for efficiency.
98
- * Used by `mdz_parse`, which should be preferred for simple usage.
99
- */
100
- export declare class MdzParser {
101
- #private;
102
- constructor(template: string);
103
- /**
104
- * Main parse method. Returns flat array of nodes,
105
- * with paragraph nodes wrapping content between double newlines.
106
- *
107
- * Block elements (headings, HR, codeblocks) are detected at every column-0
108
- * position — they can interrupt paragraphs without requiring blank lines.
109
- */
110
- parse(): Array<MdzNode>;
111
- }
112
- //# sourceMappingURL=mdz.d.ts.map
package/dist/mdz.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mdz.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AA0CH;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,KAAK,CAAC,OAAO,CAAgC,CAAC;AAEvF,MAAM,MAAM,OAAO,GAChB,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,cAAc,GACd,gBAAgB,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACxD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;CACnC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC7C,IAAI,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAClD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAClD,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,SAAS;;gBAQT,QAAQ,EAAE,MAAM;IAI5B;;;;;;OAMG;IACH,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;CAi0CvB"}