components-svelte 0.1.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.
- package/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/components/Search.svelte +320 -0
- package/dist/components/Search.svelte.d.ts +31 -0
- package/dist/components/SearchButton.svelte +82 -0
- package/dist/components/SearchButton.svelte.d.ts +13 -0
- package/dist/components/SearchProvider.svelte +87 -0
- package/dist/components/SearchProvider.svelte.d.ts +17 -0
- package/dist/components/accordion/Accordion.svelte +150 -0
- package/dist/components/accordion/Accordion.svelte.d.ts +25 -0
- package/dist/components/accordion/AccordionCover.svelte +68 -0
- package/dist/components/accordion/AccordionCover.svelte.d.ts +13 -0
- package/dist/components/accordion/AccordionGroup.svelte +23 -0
- package/dist/components/accordion/AccordionGroup.svelte.d.ts +8 -0
- package/dist/components/accordion/accordion-url-utils.d.ts +4 -0
- package/dist/components/accordion/accordion-url-utils.js +48 -0
- package/dist/components/accordion/index.d.ts +29 -0
- package/dist/components/accordion/index.js +6 -0
- package/dist/components/badge/Badge.svelte +152 -0
- package/dist/components/badge/Badge.svelte.d.ts +23 -0
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/callout/Callout.svelte +317 -0
- package/dist/components/callout/Callout.svelte.d.ts +17 -0
- package/dist/components/callout/Check.svelte +9 -0
- package/dist/components/callout/Check.svelte.d.ts +4 -0
- package/dist/components/callout/Danger.svelte +9 -0
- package/dist/components/callout/Danger.svelte.d.ts +4 -0
- package/dist/components/callout/Info.svelte +9 -0
- package/dist/components/callout/Info.svelte.d.ts +4 -0
- package/dist/components/callout/Note.svelte +9 -0
- package/dist/components/callout/Note.svelte.d.ts +4 -0
- package/dist/components/callout/Tip.svelte +9 -0
- package/dist/components/callout/Tip.svelte.d.ts +4 -0
- package/dist/components/callout/Warning.svelte +9 -0
- package/dist/components/callout/Warning.svelte.d.ts +4 -0
- package/dist/components/callout/index.d.ts +8 -0
- package/dist/components/callout/index.js +8 -0
- package/dist/components/card/Card.svelte +172 -0
- package/dist/components/card/Card.svelte.d.ts +21 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/card/index.js +2 -0
- package/dist/components/code-block/BaseCodeBlock.svelte +249 -0
- package/dist/components/code-block/BaseCodeBlock.svelte.d.ts +10 -0
- package/dist/components/code-block/CodeBlock.svelte +185 -0
- package/dist/components/code-block/CodeBlock.svelte.d.ts +5 -0
- package/dist/components/code-block/CodeFooter.svelte +34 -0
- package/dist/components/code-block/CodeFooter.svelte.d.ts +8 -0
- package/dist/components/code-block/CodeHeader.svelte +52 -0
- package/dist/components/code-block/CodeHeader.svelte.d.ts +11 -0
- package/dist/components/code-block/CopyToClipboardButton.svelte +124 -0
- package/dist/components/code-block/CopyToClipboardButton.svelte.d.ts +4 -0
- package/dist/components/code-block/index.d.ts +10 -0
- package/dist/components/code-block/index.js +5 -0
- package/dist/components/code-block/types.d.ts +85 -0
- package/dist/components/code-block/types.js +1 -0
- package/dist/components/code-group/CodeGroup.svelte +327 -0
- package/dist/components/code-group/CodeGroup.svelte.d.ts +24 -0
- package/dist/components/code-group/CodeGroupSelect.svelte +170 -0
- package/dist/components/code-group/CodeGroupSelect.svelte.d.ts +25 -0
- package/dist/components/code-group/CodeSelectDropdown.svelte +74 -0
- package/dist/components/code-group/CodeSelectDropdown.svelte.d.ts +9 -0
- package/dist/components/code-group/LanguageDropdown.svelte +134 -0
- package/dist/components/code-group/LanguageDropdown.svelte.d.ts +11 -0
- package/dist/components/code-group/LanguageIcon.svelte +24 -0
- package/dist/components/code-group/LanguageIcon.svelte.d.ts +8 -0
- package/dist/components/code-group/context.d.ts +14 -0
- package/dist/components/code-group/context.js +2 -0
- package/dist/components/code-group/index.d.ts +8 -0
- package/dist/components/code-group/index.js +4 -0
- package/dist/components/color/Color.svelte +34 -0
- package/dist/components/color/Color.svelte.d.ts +10 -0
- package/dist/components/color/ColorItem.svelte +140 -0
- package/dist/components/color/ColorItem.svelte.d.ts +10 -0
- package/dist/components/color/ColorRow.svelte +27 -0
- package/dist/components/color/ColorRow.svelte.d.ts +8 -0
- package/dist/components/color/index.d.ts +1 -0
- package/dist/components/color/index.js +8 -0
- package/dist/components/columns/Box.svelte +15 -0
- package/dist/components/columns/Box.svelte.d.ts +7 -0
- package/dist/components/columns/Columns.svelte +31 -0
- package/dist/components/columns/Columns.svelte.d.ts +10 -0
- package/dist/components/columns/constants.d.ts +5 -0
- package/dist/components/columns/constants.js +3 -0
- package/dist/components/columns/index.d.ts +5 -0
- package/dist/components/columns/index.js +3 -0
- package/dist/components/expandable/Expandable.svelte +182 -0
- package/dist/components/expandable/Expandable.svelte.d.ts +22 -0
- package/dist/components/expandable/index.d.ts +3 -0
- package/dist/components/expandable/index.js +2 -0
- package/dist/components/frame/Frame.svelte +118 -0
- package/dist/components/frame/Frame.svelte.d.ts +15 -0
- package/dist/components/frame/index.d.ts +3 -0
- package/dist/components/frame/index.js +2 -0
- package/dist/components/icon/Icon.svelte +129 -0
- package/dist/components/icon/Icon.svelte.d.ts +18 -0
- package/dist/components/icon/index.d.ts +2 -0
- package/dist/components/icon/index.js +1 -0
- package/dist/components/index.d.ts +22 -0
- package/dist/components/index.js +22 -0
- package/dist/components/mermaid/Mermaid.svelte +181 -0
- package/dist/components/mermaid/Mermaid.svelte.d.ts +11 -0
- package/dist/components/mermaid/ZoomControls.svelte +74 -0
- package/dist/components/mermaid/ZoomControls.svelte.d.ts +12 -0
- package/dist/components/mermaid/index.d.ts +7 -0
- package/dist/components/mermaid/index.js +4 -0
- package/dist/components/mermaid/use-pan-zoom.svelte.d.ts +11 -0
- package/dist/components/mermaid/use-pan-zoom.svelte.js +41 -0
- package/dist/components/panel/Panel.svelte +27 -0
- package/dist/components/panel/Panel.svelte.d.ts +9 -0
- package/dist/components/panel/index.d.ts +3 -0
- package/dist/components/panel/index.js +2 -0
- package/dist/components/property/DeprecatedPill.svelte +16 -0
- package/dist/components/property/DeprecatedPill.svelte.d.ts +6 -0
- package/dist/components/property/InfoPill.svelte +32 -0
- package/dist/components/property/InfoPill.svelte.d.ts +10 -0
- package/dist/components/property/ParamHead.svelte +188 -0
- package/dist/components/property/ParamHead.svelte.d.ts +22 -0
- package/dist/components/property/Property.svelte +123 -0
- package/dist/components/property/Property.svelte.d.ts +24 -0
- package/dist/components/property/RequiredPill.svelte +16 -0
- package/dist/components/property/RequiredPill.svelte.d.ts +6 -0
- package/dist/components/property/index.d.ts +11 -0
- package/dist/components/property/index.js +6 -0
- package/dist/components/search/index.d.ts +7 -0
- package/dist/components/search/index.js +4 -0
- package/dist/components/search/use-search.d.ts +9 -0
- package/dist/components/search/use-search.js +6 -0
- package/dist/components/steps/Step.svelte +314 -0
- package/dist/components/steps/Step.svelte.d.ts +26 -0
- package/dist/components/steps/Steps.svelte +51 -0
- package/dist/components/steps/Steps.svelte.d.ts +11 -0
- package/dist/components/steps/constants.d.ts +4 -0
- package/dist/components/steps/constants.js +2 -0
- package/dist/components/steps/context.d.ts +10 -0
- package/dist/components/steps/context.js +2 -0
- package/dist/components/steps/index.d.ts +32 -0
- package/dist/components/steps/index.js +6 -0
- package/dist/components/tabs/Tabs.svelte +254 -0
- package/dist/components/tabs/Tabs.svelte.d.ts +16 -0
- package/dist/components/tabs/TabsItem.svelte +56 -0
- package/dist/components/tabs/TabsItem.svelte.d.ts +15 -0
- package/dist/components/tabs/context.d.ts +20 -0
- package/dist/components/tabs/context.js +2 -0
- package/dist/components/tabs/index.d.ts +27 -0
- package/dist/components/tabs/index.js +5 -0
- package/dist/components/tile/Tile.svelte +124 -0
- package/dist/components/tile/Tile.svelte.d.ts +12 -0
- package/dist/components/tile/index.d.ts +2 -0
- package/dist/components/tile/index.js +1 -0
- package/dist/components/tooltip/Tooltip.svelte +170 -0
- package/dist/components/tooltip/Tooltip.svelte.d.ts +23 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.js +1 -0
- package/dist/components/tree/Tree.svelte +226 -0
- package/dist/components/tree/Tree.svelte.d.ts +9 -0
- package/dist/components/tree/TreeFile.svelte +44 -0
- package/dist/components/tree/TreeFile.svelte.d.ts +6 -0
- package/dist/components/tree/TreeFolder.svelte +107 -0
- package/dist/components/tree/TreeFolder.svelte.d.ts +10 -0
- package/dist/components/tree/context.d.ts +3 -0
- package/dist/components/tree/context.js +7 -0
- package/dist/components/tree/index.d.ts +10 -0
- package/dist/components/tree/index.js +9 -0
- package/dist/components/tree/tree-level-context.d.ts +8 -0
- package/dist/components/tree/tree-level-context.js +7 -0
- package/dist/components/tree/use-tree-level.d.ts +3 -0
- package/dist/components/tree/use-tree-level.js +5 -0
- package/dist/components/tree/utils.d.ts +9 -0
- package/dist/components/tree/utils.js +86 -0
- package/dist/components/update/Update.svelte +210 -0
- package/dist/components/update/Update.svelte.d.ts +34 -0
- package/dist/components/update/index.d.ts +4 -0
- package/dist/components/update/index.js +3 -0
- package/dist/components/view/View.svelte +52 -0
- package/dist/components/view/View.svelte.d.ts +14 -0
- package/dist/components/view/index.d.ts +3 -0
- package/dist/components/view/index.js +2 -0
- package/dist/constants/brands.d.ts +2 -0
- package/dist/constants/brands.js +4 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.js +6 -0
- package/dist/constants/selectors.d.ts +125 -0
- package/dist/constants/selectors.js +125 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/use-expandable-memory.svelte.d.ts +6 -0
- package/dist/hooks/use-expandable-memory.svelte.js +89 -0
- package/dist/hooks/use-expandable.svelte.d.ts +15 -0
- package/dist/hooks/use-expandable.svelte.js +53 -0
- package/dist/hooks/use-get-shiki-highlighted-html.svelte.d.ts +8 -0
- package/dist/hooks/use-get-shiki-highlighted-html.svelte.js +36 -0
- package/dist/hooks/use-has-hover.d.ts +2 -0
- package/dist/hooks/use-has-hover.js +10 -0
- package/dist/hooks/use-is-dark-theme.svelte.d.ts +3 -0
- package/dist/hooks/use-is-dark-theme.svelte.js +25 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts +3 -0
- package/dist/hooks/use-isomorphic-layout-effect.js +6 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/styles.css +2 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.js +7 -0
- package/dist/utils/copy-to-clipboard.d.ts +4 -0
- package/dist/utils/copy-to-clipboard.js +50 -0
- package/dist/utils/dedent.d.ts +1 -0
- package/dist/utils/dedent.js +125 -0
- package/dist/utils/enhance-video-props.d.ts +4 -0
- package/dist/utils/enhance-video-props.js +25 -0
- package/dist/utils/get-node-text.d.ts +2 -0
- package/dist/utils/get-node-text.js +26 -0
- package/dist/utils/icon-utils.d.ts +18 -0
- package/dist/utils/icon-utils.js +30 -0
- package/dist/utils/is-absolute-url.d.ts +4 -0
- package/dist/utils/is-absolute-url.js +11 -0
- package/dist/utils/is-remote-url.d.ts +2 -0
- package/dist/utils/is-remote-url.js +12 -0
- package/dist/utils/make-marker-ids-unique.d.ts +2 -0
- package/dist/utils/make-marker-ids-unique.js +36 -0
- package/dist/utils/shiki/code-styling.d.ts +13 -0
- package/dist/utils/shiki/code-styling.js +1 -0
- package/dist/utils/shiki/constants.d.ts +21 -0
- package/dist/utils/shiki/constants.js +116 -0
- package/dist/utils/shiki/get-code-styling.d.ts +9 -0
- package/dist/utils/shiki/get-code-styling.js +38 -0
- package/dist/utils/shiki/get-shiki-background-colors.d.ts +20 -0
- package/dist/utils/shiki/get-shiki-background-colors.js +56 -0
- package/dist/utils/shiki/index.d.ts +30 -0
- package/dist/utils/shiki/index.js +209 -0
- package/dist/utils/shiki/lib.d.ts +4 -0
- package/dist/utils/shiki/lib.js +49 -0
- package/dist/utils/shiki/shiki-themes.d.ts +2 -0
- package/dist/utils/shiki/shiki-themes.js +64 -0
- package/dist/utils/shiki/snippet-presets.d.ts +27 -0
- package/dist/utils/shiki/snippet-presets.js +44 -0
- package/dist/utils/shiki/worker-client.d.ts +9 -0
- package/dist/utils/shiki/worker-client.js +22 -0
- package/dist/utils/shiki/worker.d.ts +1 -0
- package/dist/utils/shiki/worker.js +134 -0
- package/dist/utils/slugify.d.ts +2 -0
- package/dist/utils/slugify.js +9 -0
- package/package.json +100 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
// A module-local counter gives each instance a stable ID in SSR and the browser.
|
|
3
|
+
let nextExpandableId = 0;
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { onMount as onMountLifecycle } from "svelte";
|
|
8
|
+
import type { Snippet } from "svelte";
|
|
9
|
+
import { Classes } from "../../constants/selectors";
|
|
10
|
+
import Icon from "../icon/Icon.svelte";
|
|
11
|
+
import { useExpandableMemory } from "../../hooks/use-expandable-memory.svelte";
|
|
12
|
+
import { cn } from "../../utils/cn";
|
|
13
|
+
|
|
14
|
+
const EXPANDABLE_CONTENT_CLASS = "expandable-content";
|
|
15
|
+
const DEFAULT_OPENED_TEXT = "Hide";
|
|
16
|
+
const DEFAULT_CLOSED_TEXT = "Show";
|
|
17
|
+
const DEFAULT_TITLE = "child attributes";
|
|
18
|
+
|
|
19
|
+
type ExpandableProps = {
|
|
20
|
+
title?: string;
|
|
21
|
+
defaultOpen?: boolean;
|
|
22
|
+
onChange?: (open: boolean) => void;
|
|
23
|
+
lazy?: boolean;
|
|
24
|
+
class?: string;
|
|
25
|
+
children?: Snippet;
|
|
26
|
+
uniqueParamId?: string;
|
|
27
|
+
onMount?: () => void;
|
|
28
|
+
onOpen?: () => void;
|
|
29
|
+
onClose?: () => void;
|
|
30
|
+
openedText?: string;
|
|
31
|
+
closedText?: string;
|
|
32
|
+
hasScrolledToAnchorRef?: { current: boolean };
|
|
33
|
+
anchor?: string;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
let {
|
|
37
|
+
title = DEFAULT_TITLE,
|
|
38
|
+
defaultOpen = false,
|
|
39
|
+
onChange: onChangeProp,
|
|
40
|
+
lazy = false,
|
|
41
|
+
class: className,
|
|
42
|
+
children,
|
|
43
|
+
uniqueParamId,
|
|
44
|
+
onMount: onMountProp,
|
|
45
|
+
onOpen,
|
|
46
|
+
onClose,
|
|
47
|
+
openedText = DEFAULT_OPENED_TEXT,
|
|
48
|
+
closedText = DEFAULT_CLOSED_TEXT,
|
|
49
|
+
hasScrolledToAnchorRef,
|
|
50
|
+
anchor,
|
|
51
|
+
}: ExpandableProps = $props();
|
|
52
|
+
|
|
53
|
+
let expandableRef: HTMLDetailsElement | null = $state(null);
|
|
54
|
+
// Svelte state initializes once here, matching React useState semantics.
|
|
55
|
+
// svelte-ignore state_referenced_locally
|
|
56
|
+
const expandableMemory = useExpandableMemory(
|
|
57
|
+
() => uniqueParamId,
|
|
58
|
+
() => defaultOpen,
|
|
59
|
+
() => expandableRef
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// Svelte state initializes once here, matching React useState semantics.
|
|
63
|
+
// svelte-ignore state_referenced_locally
|
|
64
|
+
let localOpen = $state(defaultOpen);
|
|
65
|
+
|
|
66
|
+
let containsAnchor = $derived(
|
|
67
|
+
Boolean(uniqueParamId && anchor?.includes(uniqueParamId))
|
|
68
|
+
);
|
|
69
|
+
let shouldOverrideForAnchor = $derived(
|
|
70
|
+
containsAnchor && !hasScrolledToAnchorRef?.current
|
|
71
|
+
);
|
|
72
|
+
let shouldUseSessionStorage = $derived(!!uniqueParamId);
|
|
73
|
+
|
|
74
|
+
let open = $derived(
|
|
75
|
+
shouldUseSessionStorage
|
|
76
|
+
? shouldOverrideForAnchor
|
|
77
|
+
? true
|
|
78
|
+
: expandableMemory.isInSessionStorage
|
|
79
|
+
? expandableMemory.isExpanded
|
|
80
|
+
: defaultOpen
|
|
81
|
+
: localOpen
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
// Svelte state initializes once here, matching React useState semantics.
|
|
85
|
+
// svelte-ignore state_referenced_locally
|
|
86
|
+
let shouldRenderChildren = $state(open || !lazy);
|
|
87
|
+
|
|
88
|
+
// Svelte effect replaces React useLayoutEffect for rendering lazy children
|
|
89
|
+
// as soon as the expandable is opened.
|
|
90
|
+
$effect(() => {
|
|
91
|
+
if (open) {
|
|
92
|
+
shouldRenderChildren = true;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Svelte lifecycle replaces the one-time React useEffect mount callback.
|
|
97
|
+
onMountLifecycle(() => {
|
|
98
|
+
onMountProp?.();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Svelte has no direct equivalent of React useId; keep the generated value
|
|
102
|
+
// stable for this component instance so aria-controls remains consistent.
|
|
103
|
+
const svelteId = `expandable-${++nextExpandableId}`;
|
|
104
|
+
let contentId = $derived(
|
|
105
|
+
`${title}-${svelteId}-content`.replace(/\s+/g, "-")
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
function onChange(openState: boolean) {
|
|
109
|
+
shouldRenderChildren = true;
|
|
110
|
+
|
|
111
|
+
onChangeProp?.(openState);
|
|
112
|
+
|
|
113
|
+
if (openState) {
|
|
114
|
+
onOpen?.();
|
|
115
|
+
} else {
|
|
116
|
+
onClose?.();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function setOpenState(newOpenState: boolean) {
|
|
121
|
+
if (shouldUseSessionStorage) {
|
|
122
|
+
expandableMemory.onManualToggle(newOpenState);
|
|
123
|
+
} else {
|
|
124
|
+
localOpen = newOpenState;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
onChange(newOpenState);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function handleToggle(event: Event) {
|
|
131
|
+
const details = event.currentTarget as HTMLDetailsElement;
|
|
132
|
+
const newState = details.open;
|
|
133
|
+
if (newState !== open) {
|
|
134
|
+
setOpenState(newState);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<details
|
|
140
|
+
bind:this={expandableRef}
|
|
141
|
+
class={cn(Classes.Expandable, "mt-4 rounded-xl border-standard", className)}
|
|
142
|
+
data-component-part="expandable"
|
|
143
|
+
data-testid={uniqueParamId ? `${uniqueParamId}-children` : undefined}
|
|
144
|
+
ontoggle={handleToggle}
|
|
145
|
+
open={open}
|
|
146
|
+
>
|
|
147
|
+
<summary
|
|
148
|
+
aria-controls={contentId}
|
|
149
|
+
aria-expanded={open}
|
|
150
|
+
class={cn(
|
|
151
|
+
"not-prose flex w-full cursor-pointer flex-row content-center items-center text-sm",
|
|
152
|
+
"rounded-t-xl px-3.5 py-3 text-stone-600 hover:bg-stone-50/50 hover:text-stone-900 dark:text-stone-300 dark:hover:bg-white/5 dark:hover:text-stone-200",
|
|
153
|
+
"list-none [&::-webkit-details-marker]:hidden",
|
|
154
|
+
!open && "rounded-b-xl"
|
|
155
|
+
)}
|
|
156
|
+
data-component-part="expandable-button"
|
|
157
|
+
>
|
|
158
|
+
<Icon
|
|
159
|
+
class={cn("size-2.5 bg-stone-400 transition-transform", open && "rotate-90")}
|
|
160
|
+
icon="angle-right"
|
|
161
|
+
overrideColor={true}
|
|
162
|
+
overrideSize={true}
|
|
163
|
+
/>
|
|
164
|
+
<div class="ml-3 text-left leading-tight">
|
|
165
|
+
<p class="m-0" contenteditable="false">
|
|
166
|
+
{open ? openedText : closedText} {title}
|
|
167
|
+
</p>
|
|
168
|
+
</div>
|
|
169
|
+
</summary>
|
|
170
|
+
<div
|
|
171
|
+
class={cn(
|
|
172
|
+
EXPANDABLE_CONTENT_CLASS,
|
|
173
|
+
"mx-3 border-stone-100 border-t px-2 dark:border-white/10"
|
|
174
|
+
)}
|
|
175
|
+
data-component-part={EXPANDABLE_CONTENT_CLASS}
|
|
176
|
+
id={contentId}
|
|
177
|
+
>
|
|
178
|
+
{#if shouldRenderChildren && children}
|
|
179
|
+
{@render children()}
|
|
180
|
+
{/if}
|
|
181
|
+
</div>
|
|
182
|
+
</details>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type ExpandableProps = {
|
|
3
|
+
title?: string;
|
|
4
|
+
defaultOpen?: boolean;
|
|
5
|
+
onChange?: (open: boolean) => void;
|
|
6
|
+
lazy?: boolean;
|
|
7
|
+
class?: string;
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
uniqueParamId?: string;
|
|
10
|
+
onMount?: () => void;
|
|
11
|
+
onOpen?: () => void;
|
|
12
|
+
onClose?: () => void;
|
|
13
|
+
openedText?: string;
|
|
14
|
+
closedText?: string;
|
|
15
|
+
hasScrolledToAnchorRef?: {
|
|
16
|
+
current: boolean;
|
|
17
|
+
};
|
|
18
|
+
anchor?: string;
|
|
19
|
+
};
|
|
20
|
+
declare const Expandable: import("svelte").Component<ExpandableProps, {}, "">;
|
|
21
|
+
type Expandable = ReturnType<typeof Expandable>;
|
|
22
|
+
export default Expandable;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import { Classes } from "../../constants/selectors";
|
|
4
|
+
import Icon from "../icon/Icon.svelte";
|
|
5
|
+
import { cn } from "../../utils/cn";
|
|
6
|
+
import { enhanceVideoProps } from "../../utils/enhance-video-props";
|
|
7
|
+
|
|
8
|
+
type FrameStyle = Record<string, string | number | undefined>;
|
|
9
|
+
|
|
10
|
+
type FrameProps = {
|
|
11
|
+
as?: "div";
|
|
12
|
+
style?: FrameStyle;
|
|
13
|
+
class?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
children?: Snippet;
|
|
16
|
+
title?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
// Svelte snippet replaces React's renderDescription callback.
|
|
19
|
+
renderDescription?: Snippet<[string]>;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
as = "div",
|
|
24
|
+
style,
|
|
25
|
+
class: classAttribute,
|
|
26
|
+
className,
|
|
27
|
+
children,
|
|
28
|
+
title,
|
|
29
|
+
description,
|
|
30
|
+
renderDescription,
|
|
31
|
+
}: FrameProps = $props();
|
|
32
|
+
|
|
33
|
+
let frameClass = $derived(classAttribute ?? className);
|
|
34
|
+
|
|
35
|
+
// Svelte style strings replace React's CSSProperties object on the DOM node.
|
|
36
|
+
function styleToString(styles: FrameStyle | undefined): string | undefined {
|
|
37
|
+
if (!styles) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return Object.entries(styles)
|
|
42
|
+
.filter(([, value]) => value !== undefined)
|
|
43
|
+
.map(([property, value]) => {
|
|
44
|
+
const cssProperty = property.startsWith("--")
|
|
45
|
+
? property
|
|
46
|
+
: property.replace(/[A-Z]/g, (character) => `-${character.toLowerCase()}`);
|
|
47
|
+
return `${cssProperty}:${value}`;
|
|
48
|
+
})
|
|
49
|
+
.join(";");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<!-- `as` remains a div because FrameProps intentionally supports only div. -->
|
|
55
|
+
{#if as === "div"}
|
|
56
|
+
<div class={frameClass} data-component-part="frame-container">
|
|
57
|
+
{#if title}
|
|
58
|
+
<div class="not-prose mb-4 flex items-center space-x-2">
|
|
59
|
+
<span aria-hidden="true" class="contents">
|
|
60
|
+
<Icon
|
|
61
|
+
class="size-4 flex-none bg-stone-400 dark:bg-stone-300"
|
|
62
|
+
icon="diagram-project"
|
|
63
|
+
overrideColor={true}
|
|
64
|
+
overrideSize={true}
|
|
65
|
+
/>
|
|
66
|
+
</span>
|
|
67
|
+
<p class="font-medium text-sm text-stone-700 dark:text-stone-200">
|
|
68
|
+
{title}
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
{/if}
|
|
72
|
+
|
|
73
|
+
<div
|
|
74
|
+
class={cn(
|
|
75
|
+
Classes.Frame,
|
|
76
|
+
"not-prose relative overflow-hidden rounded-2xl bg-stone-50/50 p-2 dark:bg-stone-800/25"
|
|
77
|
+
)}
|
|
78
|
+
data-component-part="frame"
|
|
79
|
+
data-name="frame"
|
|
80
|
+
style={styleToString(style)}
|
|
81
|
+
>
|
|
82
|
+
<div
|
|
83
|
+
aria-hidden="true"
|
|
84
|
+
class="mask-[linear-gradient(0deg,#fff,rgba(255,255,255,0.6))] dark:mask-[linear-gradient(0deg,rgba(255,255,255,0.1),rgba(255,255,255,0.5))] absolute inset-0 bg-grid-stone-200/20 dark:bg-grid-white/5"
|
|
85
|
+
data-component-part="frame-background-pattern"
|
|
86
|
+
style="background-position:10px 10px"
|
|
87
|
+
></div>
|
|
88
|
+
<div
|
|
89
|
+
use:enhanceVideoProps
|
|
90
|
+
class="relative flex w-full justify-center overflow-hidden rounded-xl bg-white dark:bg-stone-800"
|
|
91
|
+
data-component-part="frame-content"
|
|
92
|
+
>
|
|
93
|
+
{#if children}
|
|
94
|
+
{@render children()}
|
|
95
|
+
{/if}
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
{#if description}
|
|
99
|
+
<div
|
|
100
|
+
class="relative mt-3 flex w-full justify-center rounded-2xl bg-white px-8 pt-0 pb-2 text-sm text-stone-700 dark:bg-stone-800 dark:text-stone-400"
|
|
101
|
+
contenteditable="false"
|
|
102
|
+
data-component-part="frame-description"
|
|
103
|
+
>
|
|
104
|
+
{#if renderDescription}
|
|
105
|
+
{@render renderDescription(description)}
|
|
106
|
+
{:else}
|
|
107
|
+
<p>{description}</p>
|
|
108
|
+
{/if}
|
|
109
|
+
</div>
|
|
110
|
+
{/if}
|
|
111
|
+
<div
|
|
112
|
+
aria-hidden="true"
|
|
113
|
+
class="pointer-events-none absolute inset-0 rounded-2xl border border-black/5 dark:border-white/5"
|
|
114
|
+
data-component-part="frame-border"
|
|
115
|
+
></div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
{/if}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type FrameStyle = Record<string, string | number | undefined>;
|
|
3
|
+
type FrameProps = {
|
|
4
|
+
as?: "div";
|
|
5
|
+
style?: FrameStyle;
|
|
6
|
+
class?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
title?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
renderDescription?: Snippet<[string]>;
|
|
12
|
+
};
|
|
13
|
+
declare const Frame: import("svelte").Component<FrameProps, {}, "">;
|
|
14
|
+
type Frame = ReturnType<typeof Frame>;
|
|
15
|
+
export default Frame;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { MINTLIFY_ICONS_CDN_URL } from "../../constants/index";
|
|
3
|
+
import { Classes } from "../../constants/selectors";
|
|
4
|
+
import { cn } from "../../utils/cn";
|
|
5
|
+
import { getIconUrl, ICON_TYPES, type IconLibrary, type IconType, isBrandsIcon, type PageType } from "../../utils/icon-utils";
|
|
6
|
+
import { isAbsoluteUrl } from "../../utils/is-absolute-url";
|
|
7
|
+
|
|
8
|
+
type IconProps = {
|
|
9
|
+
icon: string;
|
|
10
|
+
iconType?: IconType;
|
|
11
|
+
class?: string;
|
|
12
|
+
color?: string;
|
|
13
|
+
colorLight?: string;
|
|
14
|
+
colorDark?: string;
|
|
15
|
+
overrideColor?: boolean;
|
|
16
|
+
size?: number;
|
|
17
|
+
overrideSize?: boolean;
|
|
18
|
+
iconLibrary?: IconLibrary;
|
|
19
|
+
basePath?: string;
|
|
20
|
+
pageType?: PageType;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
let {
|
|
24
|
+
icon,
|
|
25
|
+
iconType,
|
|
26
|
+
color,
|
|
27
|
+
colorLight,
|
|
28
|
+
colorDark,
|
|
29
|
+
size,
|
|
30
|
+
class: className,
|
|
31
|
+
iconLibrary = "fontawesome",
|
|
32
|
+
basePath,
|
|
33
|
+
pageType,
|
|
34
|
+
overrideColor,
|
|
35
|
+
overrideSize,
|
|
36
|
+
}: IconProps = $props();
|
|
37
|
+
|
|
38
|
+
// Svelte style — replaces React CSSProperties
|
|
39
|
+
let style = $derived.by(() => {
|
|
40
|
+
const base: Record<string, string | number> = {
|
|
41
|
+
display: "inline-block",
|
|
42
|
+
verticalAlign: "middle",
|
|
43
|
+
};
|
|
44
|
+
if (!overrideSize) {
|
|
45
|
+
base.width = size || 16;
|
|
46
|
+
base.height = size || 16;
|
|
47
|
+
}
|
|
48
|
+
return base;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
let hasLightDarkColors = $derived(!!(colorLight && colorDark));
|
|
52
|
+
|
|
53
|
+
let styleWithColors = $derived.by(() => {
|
|
54
|
+
const s: Record<string, string | number> = { ...style };
|
|
55
|
+
if (hasLightDarkColors) {
|
|
56
|
+
s["--color-light"] = colorLight!;
|
|
57
|
+
s["--color-dark"] = colorDark!;
|
|
58
|
+
}
|
|
59
|
+
return s;
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
let classNames = $derived(
|
|
63
|
+
cn(
|
|
64
|
+
Classes.Icon,
|
|
65
|
+
"inline",
|
|
66
|
+
!(color || hasLightDarkColors || overrideColor) && "bg-primary dark:bg-primary-light",
|
|
67
|
+
hasLightDarkColors && "bg-(--color-light) dark:bg-(--color-dark)",
|
|
68
|
+
className
|
|
69
|
+
)
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
let isPdf = $derived(pageType === "pdf");
|
|
73
|
+
let url = $derived(getIconUrl(icon.toLowerCase(), iconType, iconLibrary));
|
|
74
|
+
|
|
75
|
+
let isInvalidIconType = $derived(iconType ? !ICON_TYPES.includes(iconType as any) : false);
|
|
76
|
+
|
|
77
|
+
// For Svelte, we need to handle style string conversion
|
|
78
|
+
function styleToString(s: Record<string, string | number>): string {
|
|
79
|
+
return Object.entries(s)
|
|
80
|
+
.map(([k, v]) => {
|
|
81
|
+
const cssKey = k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
82
|
+
// Handle CSS variables --color-light
|
|
83
|
+
const key = k.startsWith("--") ? k : cssKey;
|
|
84
|
+
return `${key}:${v}`;
|
|
85
|
+
})
|
|
86
|
+
.join(";");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
let isAbsoluteOrSlash = $derived(typeof icon === "string" && (isAbsoluteUrl(icon) || icon.startsWith("/")));
|
|
90
|
+
let isMintlifyCdn = $derived(isAbsoluteOrSlash && (icon.startsWith(MINTLIFY_ICONS_CDN_URL) || icon.startsWith("https://mintlify.b-cdn.net")));
|
|
91
|
+
</script>
|
|
92
|
+
|
|
93
|
+
{#if isInvalidIconType}
|
|
94
|
+
<!-- Svelte: log invalid iconType like React console.log -->
|
|
95
|
+
{console.log(`Invalid iconType ${iconType} expected one of: ${ICON_TYPES.join(", ")}`)}
|
|
96
|
+
{/if}
|
|
97
|
+
|
|
98
|
+
{#if isAbsoluteOrSlash}
|
|
99
|
+
{#if isMintlifyCdn}
|
|
100
|
+
<svg
|
|
101
|
+
class={classNames}
|
|
102
|
+
data-component-part="icon-svg"
|
|
103
|
+
style={`${styleToString(styleWithColors)}; -webkit-mask-image: url(${icon}); -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; mask-image: url(${icon}); mask-repeat: no-repeat; mask-position: center; mask-size: 100%; ${!hasLightDarkColors ? "background-color: currentColor;" : ""}`}
|
|
104
|
+
></svg>
|
|
105
|
+
{:else}
|
|
106
|
+
{@const iconUrl = icon.startsWith("/") && basePath ? `${basePath}${icon}` : icon}
|
|
107
|
+
<img
|
|
108
|
+
alt={icon}
|
|
109
|
+
class={cn(classNames, "bg-transparent dark:bg-transparent")}
|
|
110
|
+
data-component-part="icon-image"
|
|
111
|
+
src={iconUrl}
|
|
112
|
+
style={styleToString(styleWithColors)}
|
|
113
|
+
/>
|
|
114
|
+
{/if}
|
|
115
|
+
{:else if isPdf}
|
|
116
|
+
<img
|
|
117
|
+
alt={icon}
|
|
118
|
+
class={cn(classNames, !(color || overrideColor || hasLightDarkColors) && "bg-stone-800 dark:bg-stone-100")}
|
|
119
|
+
data-component-part="icon-image"
|
|
120
|
+
src={url}
|
|
121
|
+
style={`background-color: transparent; ${styleToString(styleWithColors)}`}
|
|
122
|
+
/>
|
|
123
|
+
{:else}
|
|
124
|
+
<svg
|
|
125
|
+
class={cn(classNames, !(color || overrideColor || hasLightDarkColors) && "bg-stone-800 dark:bg-stone-100")}
|
|
126
|
+
data-component-part="icon-svg"
|
|
127
|
+
style={`${styleToString(styleWithColors)}; -webkit-mask-image: url(${url}); -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; mask-image: url(${url}); mask-repeat: no-repeat; mask-position: center; mask-size: ${iconLibrary === "lucide" && !isBrandsIcon(icon) ? "100%" : "auto"}; ${color ? `background-color: ${color};` : ""}`}
|
|
128
|
+
></svg>
|
|
129
|
+
{/if}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type IconLibrary, type IconType, type PageType } from "../../utils/icon-utils";
|
|
2
|
+
type IconProps = {
|
|
3
|
+
icon: string;
|
|
4
|
+
iconType?: IconType;
|
|
5
|
+
class?: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
colorLight?: string;
|
|
8
|
+
colorDark?: string;
|
|
9
|
+
overrideColor?: boolean;
|
|
10
|
+
size?: number;
|
|
11
|
+
overrideSize?: boolean;
|
|
12
|
+
iconLibrary?: IconLibrary;
|
|
13
|
+
basePath?: string;
|
|
14
|
+
pageType?: PageType;
|
|
15
|
+
};
|
|
16
|
+
declare const Icon: import("svelte").Component<IconProps, {}, "">;
|
|
17
|
+
type Icon = ReturnType<typeof Icon>;
|
|
18
|
+
export default Icon;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Icon } from "./Icon.svelte";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from "./accordion";
|
|
2
|
+
export * from "./badge";
|
|
3
|
+
export * from "./callout";
|
|
4
|
+
export * from "./card";
|
|
5
|
+
export * from "./code-block";
|
|
6
|
+
export * from "./code-group";
|
|
7
|
+
export * from "./color";
|
|
8
|
+
export * from "./columns";
|
|
9
|
+
export * from "./expandable";
|
|
10
|
+
export * from "./frame";
|
|
11
|
+
export * from "./icon";
|
|
12
|
+
export * from "./mermaid";
|
|
13
|
+
export * from "./panel";
|
|
14
|
+
export * from "./property";
|
|
15
|
+
export * from "./search";
|
|
16
|
+
export * from "./steps";
|
|
17
|
+
export * from "./tabs";
|
|
18
|
+
export * from "./tile";
|
|
19
|
+
export * from "./tooltip";
|
|
20
|
+
export * from "./tree";
|
|
21
|
+
export * from "./update";
|
|
22
|
+
export * from "./view";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from "./accordion";
|
|
2
|
+
export * from "./badge";
|
|
3
|
+
export * from "./callout";
|
|
4
|
+
export * from "./card";
|
|
5
|
+
export * from "./code-block";
|
|
6
|
+
export * from "./code-group";
|
|
7
|
+
export * from "./color";
|
|
8
|
+
export * from "./columns";
|
|
9
|
+
export * from "./expandable";
|
|
10
|
+
export * from "./frame";
|
|
11
|
+
export * from "./icon";
|
|
12
|
+
export * from "./mermaid";
|
|
13
|
+
export * from "./panel";
|
|
14
|
+
export * from "./property";
|
|
15
|
+
export * from "./search";
|
|
16
|
+
export * from "./steps";
|
|
17
|
+
export * from "./tabs";
|
|
18
|
+
export * from "./tile";
|
|
19
|
+
export * from "./tooltip";
|
|
20
|
+
export * from "./tree";
|
|
21
|
+
export * from "./update";
|
|
22
|
+
export * from "./view";
|