@pie-players/pie-players-shared 0.3.42 → 0.3.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/profile.d.ts +0 -1
- package/dist/config/profile.js.map +1 -1
- package/dist/i18n/index.d.ts +0 -3
- package/dist/i18n/index.js +0 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/loader.d.ts +0 -1
- package/dist/i18n/loader.js.map +1 -1
- package/dist/i18n/simple-i18n.d.ts +0 -1
- package/dist/i18n/simple-i18n.js.map +1 -1
- package/dist/i18n/types.d.ts +0 -1
- package/dist/i18n/types.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/debug-panel-stream.d.ts +0 -1
- package/dist/instrumentation/debug-panel-stream.js.map +1 -1
- package/dist/instrumentation/index.d.ts +0 -1
- package/dist/instrumentation/index.js.map +1 -1
- package/dist/instrumentation/provider-guards.d.ts +0 -1
- package/dist/instrumentation/provider-guards.js.map +1 -1
- package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts +0 -1
- package/dist/instrumentation/providers/BaseInstrumentationProvider.js.map +1 -1
- package/dist/instrumentation/providers/CompositeInstrumentationProvider.d.ts +0 -1
- package/dist/instrumentation/providers/CompositeInstrumentationProvider.js.map +1 -1
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts +0 -1
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js.map +1 -1
- package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.d.ts +0 -1
- package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js.map +1 -1
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts +0 -1
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js.map +1 -1
- package/dist/instrumentation/providers/index.d.ts +0 -1
- package/dist/instrumentation/providers/index.js.map +1 -1
- package/dist/instrumentation/types.d.ts +0 -1
- package/dist/instrumentation/types.js.map +1 -1
- package/dist/loader-config.d.ts +0 -1
- package/dist/loader-config.js.map +1 -1
- package/dist/loaders/ElementLoader.d.ts +0 -1
- package/dist/loaders/ElementLoader.js.map +1 -1
- package/dist/loaders/element-loader-types.d.ts +0 -1
- package/dist/loaders/element-loader-types.js.map +1 -1
- package/dist/loaders/element-loader.d.ts +0 -1
- package/dist/loaders/element-loader.js.map +1 -1
- package/dist/loaders/esm-adapter.d.ts +0 -1
- package/dist/loaders/esm-adapter.js.map +1 -1
- package/dist/loaders/iife-adapter.d.ts +0 -1
- package/dist/loaders/iife-adapter.js.map +1 -1
- package/dist/loaders/index.d.ts +0 -1
- package/dist/loaders/index.js.map +1 -1
- package/dist/object/index.d.ts +0 -1
- package/dist/object/index.js.map +1 -1
- package/dist/pie/asset-handler.d.ts +0 -1
- package/dist/pie/asset-handler.js.map +1 -1
- package/dist/pie/authoring.d.ts +0 -1
- package/dist/pie/authoring.js.map +1 -1
- package/dist/pie/component-context.d.ts +0 -1
- package/dist/pie/component-context.js.map +1 -1
- package/dist/pie/config.d.ts +0 -1
- package/dist/pie/config.js.map +1 -1
- package/dist/pie/configure-initialization.d.ts +0 -1
- package/dist/pie/configure-initialization.js.map +1 -1
- package/dist/pie/correct-response-env.d.ts +0 -1
- package/dist/pie/correct-response-env.js.map +1 -1
- package/dist/pie/custom-element-define.d.ts +0 -1
- package/dist/pie/custom-element-define.js.map +1 -1
- package/dist/pie/index.d.ts +4 -9
- package/dist/pie/index.js +4 -8
- package/dist/pie/index.js.map +1 -1
- package/dist/pie/initialization.d.ts +0 -1
- package/dist/pie/initialization.js.map +1 -1
- package/dist/pie/instrumentation-event-bridge.d.ts +0 -1
- package/dist/pie/instrumentation-event-bridge.js.map +1 -1
- package/dist/pie/instrumentation-event-map.d.ts +0 -1
- package/dist/pie/instrumentation-event-map.js.map +1 -1
- package/dist/pie/instrumentation-provider-resolution.d.ts +0 -1
- package/dist/pie/instrumentation-provider-resolution.js.map +1 -1
- package/dist/pie/item-controller-storage.d.ts +0 -1
- package/dist/pie/item-controller-storage.js.map +1 -1
- package/dist/pie/item-controller.d.ts +0 -1
- package/dist/pie/item-controller.js.map +1 -1
- package/dist/pie/item-session-contract.d.ts +0 -1
- package/dist/pie/item-session-contract.js.map +1 -1
- package/dist/pie/logger.d.ts +0 -1
- package/dist/pie/logger.js.map +1 -1
- package/dist/pie/math-rendering.d.ts +0 -1
- package/dist/pie/math-rendering.js.map +1 -1
- package/dist/pie/overrides.d.ts +0 -1
- package/dist/pie/overrides.js.map +1 -1
- package/dist/pie/player-initializer.d.ts +0 -1
- package/dist/pie/player-initializer.js.map +1 -1
- package/dist/pie/registry.d.ts +0 -1
- package/dist/pie/registry.js.map +1 -1
- package/dist/pie/resource-monitor.d.ts +0 -1
- package/dist/pie/resource-monitor.js.map +1 -1
- package/dist/pie/scoring.d.ts +0 -1
- package/dist/pie/scoring.js.map +1 -1
- package/dist/pie/stage-tracker.d.ts +0 -1
- package/dist/pie/stage-tracker.js.map +1 -1
- package/dist/pie/stages.d.ts +0 -1
- package/dist/pie/stages.js.map +1 -1
- package/dist/pie/tag-names.d.ts +0 -1
- package/dist/pie/tag-names.js.map +1 -1
- package/dist/pie/types.d.ts +0 -1
- package/dist/pie/types.js.map +1 -1
- package/dist/pie/updates.d.ts +0 -1
- package/dist/pie/updates.js.map +1 -1
- package/dist/pie/utils.d.ts +0 -1
- package/dist/pie/utils.js.map +1 -1
- package/dist/player-strategy.d.ts +0 -1
- package/dist/player-strategy.js.map +1 -1
- package/dist/security/index.d.ts +0 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/sanitize-item-markup.d.ts +0 -1
- package/dist/security/sanitize-item-markup.js.map +1 -1
- package/dist/security/sanitize-svg-icon.d.ts +0 -1
- package/dist/security/sanitize-svg-icon.js.map +1 -1
- package/dist/security/validate-style-url.d.ts +0 -1
- package/dist/security/validate-style-url.js.map +1 -1
- package/dist/security/wrap-overwide-images.d.ts +0 -1
- package/dist/security/wrap-overwide-images.js.map +1 -1
- package/dist/server/npm-registry.d.ts +0 -1
- package/dist/server/npm-registry.js.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/debug-panel-persistence.d.ts +0 -1
- package/dist/ui/debug-panel-persistence.js.map +1 -1
- package/dist/ui/first-focusable.d.ts +0 -1
- package/dist/ui/first-focusable.js.map +1 -1
- package/dist/ui/focus-trap.d.ts +0 -1
- package/dist/ui/focus-trap.js.map +1 -1
- package/dist/ui/safe-storage.d.ts +0 -1
- package/dist/ui/safe-storage.js.map +1 -1
- package/package.json +6 -64
- package/dist/components/PieItemPlayer.svelte +0 -951
- package/dist/components/PiePreviewLayout.svelte +0 -154
- package/dist/components/PiePreviewToggle.svelte +0 -110
- package/dist/components/PieSpinner.svelte +0 -85
- package/dist/components/ToolSettingsButton.svelte +0 -62
- package/dist/components/ToolSettingsPanel.svelte +0 -104
- package/dist/components/index.ts +0 -6
- package/dist/config/profile.d.ts.map +0 -1
- package/dist/i18n/index.d.ts.map +0 -1
- package/dist/i18n/loader.d.ts.map +0 -1
- package/dist/i18n/simple-i18n.d.ts.map +0 -1
- package/dist/i18n/types.d.ts.map +0 -1
- package/dist/i18n/use-i18n-standalone.svelte.ts +0 -185
- package/dist/i18n/use-i18n.svelte.ts +0 -164
- package/dist/index.d.ts.map +0 -1
- package/dist/instrumentation/debug-panel-stream.d.ts.map +0 -1
- package/dist/instrumentation/index.d.ts.map +0 -1
- package/dist/instrumentation/provider-guards.d.ts.map +0 -1
- package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/CompositeInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/index.d.ts.map +0 -1
- package/dist/instrumentation/types.d.ts.map +0 -1
- package/dist/loader-config.d.ts.map +0 -1
- package/dist/loaders/ElementLoader.d.ts.map +0 -1
- package/dist/loaders/element-loader-types.d.ts.map +0 -1
- package/dist/loaders/element-loader.d.ts.map +0 -1
- package/dist/loaders/esm-adapter.d.ts.map +0 -1
- package/dist/loaders/iife-adapter.d.ts.map +0 -1
- package/dist/loaders/index.d.ts.map +0 -1
- package/dist/object/index.d.ts.map +0 -1
- package/dist/pie/asset-handler.d.ts.map +0 -1
- package/dist/pie/authoring.d.ts.map +0 -1
- package/dist/pie/component-context.d.ts.map +0 -1
- package/dist/pie/config.d.ts.map +0 -1
- package/dist/pie/configure-initialization.d.ts.map +0 -1
- package/dist/pie/correct-response-env.d.ts.map +0 -1
- package/dist/pie/custom-element-define.d.ts.map +0 -1
- package/dist/pie/index.d.ts.map +0 -1
- package/dist/pie/initialization.d.ts.map +0 -1
- package/dist/pie/instrumentation-event-bridge.d.ts.map +0 -1
- package/dist/pie/instrumentation-event-map.d.ts.map +0 -1
- package/dist/pie/instrumentation-provider-resolution.d.ts.map +0 -1
- package/dist/pie/item-controller-storage.d.ts.map +0 -1
- package/dist/pie/item-controller.d.ts.map +0 -1
- package/dist/pie/item-session-contract.d.ts.map +0 -1
- package/dist/pie/logger.d.ts.map +0 -1
- package/dist/pie/math-rendering.d.ts.map +0 -1
- package/dist/pie/overrides.d.ts.map +0 -1
- package/dist/pie/player-initializer.d.ts.map +0 -1
- package/dist/pie/registry.d.ts.map +0 -1
- package/dist/pie/resource-monitor.d.ts.map +0 -1
- package/dist/pie/scoring.d.ts.map +0 -1
- package/dist/pie/stage-tracker.d.ts.map +0 -1
- package/dist/pie/stages.d.ts.map +0 -1
- package/dist/pie/tag-names.d.ts.map +0 -1
- package/dist/pie/types.d.ts.map +0 -1
- package/dist/pie/updates.d.ts.map +0 -1
- package/dist/pie/use-resource-monitor.svelte.d.ts +0 -56
- package/dist/pie/use-resource-monitor.svelte.d.ts.map +0 -1
- package/dist/pie/use-resource-monitor.svelte.js +0 -176
- package/dist/pie/use-resource-monitor.svelte.js.map +0 -1
- package/dist/pie/utils.d.ts.map +0 -1
- package/dist/player-strategy.d.ts.map +0 -1
- package/dist/security/index.d.ts.map +0 -1
- package/dist/security/sanitize-item-markup.d.ts.map +0 -1
- package/dist/security/sanitize-svg-icon.d.ts.map +0 -1
- package/dist/security/validate-style-url.d.ts.map +0 -1
- package/dist/security/wrap-overwide-images.d.ts.map +0 -1
- package/dist/server/npm-registry.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/ui/debug-panel-persistence.d.ts.map +0 -1
- package/dist/ui/first-focusable.d.ts.map +0 -1
- package/dist/ui/focus-trap.d.ts.map +0 -1
- package/dist/ui/safe-storage.d.ts.map +0 -1
- package/dist/ui/use-promise.svelte.ts +0 -109
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
PiePreviewLayout - Layout container for authoring with preview
|
|
3
|
-
|
|
4
|
-
Combines PiePreviewToggle with conditional rendering of PieItemPlayer instances.
|
|
5
|
-
Switches between authoring mode (configure elements) and preview mode (regular player elements).
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { tick } from 'svelte';
|
|
9
|
-
import type { LoaderConfig } from '../loader-config.js';
|
|
10
|
-
import { DEFAULT_LOADER_CONFIG } from '../loader-config.js';
|
|
11
|
-
import { createPieLogger, isGlobalDebugEnabled } from '../pie/logger.js';
|
|
12
|
-
import { BundleType } from '../pie/types.js';
|
|
13
|
-
import type { ConfigEntity, Env, ImageHandler, SoundHandler } from '../types/index.js';
|
|
14
|
-
import PieItemPlayer from './PieItemPlayer.svelte';
|
|
15
|
-
import PiePreviewToggle from './PiePreviewToggle.svelte';
|
|
16
|
-
|
|
17
|
-
const logger = createPieLogger('pie-preview-layout', () => isGlobalDebugEnabled());
|
|
18
|
-
|
|
19
|
-
// Props using Svelte 5 runes
|
|
20
|
-
let {
|
|
21
|
-
mode = $bindable('author' as 'author' | 'preview'),
|
|
22
|
-
itemConfig,
|
|
23
|
-
passageConfig = null,
|
|
24
|
-
configuration = {} as Record<string, any>,
|
|
25
|
-
env = { mode: 'gather', role: 'student' } as Env,
|
|
26
|
-
session = [] as any[],
|
|
27
|
-
addCorrectResponse = false,
|
|
28
|
-
customClassName = '',
|
|
29
|
-
passageContainerClass = '',
|
|
30
|
-
containerClass = '',
|
|
31
|
-
bundleTypeAuthor = BundleType.editor,
|
|
32
|
-
bundleTypePreview = BundleType.player,
|
|
33
|
-
loaderConfig = DEFAULT_LOADER_CONFIG as LoaderConfig,
|
|
34
|
-
// Asset handler callbacks
|
|
35
|
-
onInsertImage,
|
|
36
|
-
onDeleteImage,
|
|
37
|
-
onInsertSound,
|
|
38
|
-
onDeleteSound,
|
|
39
|
-
// Event callbacks
|
|
40
|
-
onLoadComplete,
|
|
41
|
-
onPlayerError,
|
|
42
|
-
onSessionChanged,
|
|
43
|
-
onModelUpdated,
|
|
44
|
-
baseHeadingLevel = undefined,
|
|
45
|
-
includeSrHeading = true,
|
|
46
|
-
}: {
|
|
47
|
-
mode?: 'author' | 'preview';
|
|
48
|
-
itemConfig: ConfigEntity;
|
|
49
|
-
passageConfig?: ConfigEntity | null;
|
|
50
|
-
configuration?: Record<string, any>;
|
|
51
|
-
env?: Env;
|
|
52
|
-
session?: any[];
|
|
53
|
-
addCorrectResponse?: boolean;
|
|
54
|
-
customClassName?: string;
|
|
55
|
-
passageContainerClass?: string;
|
|
56
|
-
containerClass?: string;
|
|
57
|
-
bundleTypeAuthor?: BundleType;
|
|
58
|
-
bundleTypePreview?: BundleType;
|
|
59
|
-
loaderConfig?: LoaderConfig;
|
|
60
|
-
// Asset handlers
|
|
61
|
-
onInsertImage?: (handler: ImageHandler) => void;
|
|
62
|
-
onDeleteImage?: (src: string, done: (err?: Error) => void) => void;
|
|
63
|
-
onInsertSound?: (handler: SoundHandler) => void;
|
|
64
|
-
onDeleteSound?: (src: string, done: (err?: Error) => void) => void;
|
|
65
|
-
// Event callbacks
|
|
66
|
-
onLoadComplete?: (detail?: any) => void;
|
|
67
|
-
onPlayerError?: (detail?: any) => void;
|
|
68
|
-
onSessionChanged?: (detail?: any) => void;
|
|
69
|
-
onModelUpdated?: (detail?: any) => void;
|
|
70
|
-
/**
|
|
71
|
-
* The level of the first heading emitted inside this player.
|
|
72
|
-
* Passed through to `PieItemPlayer` unchanged — see that component for full docs.
|
|
73
|
-
*/
|
|
74
|
-
baseHeadingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
75
|
-
/**
|
|
76
|
-
* Whether to inject a visually-hidden (screen-reader-only) heading at the
|
|
77
|
-
* top of the player's rendered content.
|
|
78
|
-
* Passed through to `PieItemPlayer` unchanged — see that component for full docs.
|
|
79
|
-
*/
|
|
80
|
-
includeSrHeading?: boolean;
|
|
81
|
-
} = $props();
|
|
82
|
-
|
|
83
|
-
// Track current mode state
|
|
84
|
-
let currentMode = $state(mode);
|
|
85
|
-
|
|
86
|
-
// Handle mode changes from toggle
|
|
87
|
-
function handleModeChange(newMode: 'author' | 'preview') {
|
|
88
|
-
logger.debug('[PiePreviewLayout] Mode changed:', newMode);
|
|
89
|
-
currentMode = newMode;
|
|
90
|
-
mode = newMode; // Update parent via bindable
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Derive player mode from current mode
|
|
94
|
-
const playerMode = $derived.by(() => {
|
|
95
|
-
return currentMode === 'preview' ? 'view' : 'author';
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// Derive bundle type from current mode (author vs preview).
|
|
99
|
-
const effectiveBundleType = $derived.by(() => {
|
|
100
|
-
if (currentMode === 'preview') return bundleTypePreview;
|
|
101
|
-
return bundleTypeAuthor;
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
// Key to force re-mount when switching modes
|
|
105
|
-
const playerKey = $derived.by(() => {
|
|
106
|
-
return `${currentMode}-${Date.now()}`;
|
|
107
|
-
});
|
|
108
|
-
</script>
|
|
109
|
-
|
|
110
|
-
<div class="pie-preview-layout">
|
|
111
|
-
<PiePreviewToggle mode={currentMode} onModeChange={handleModeChange} />
|
|
112
|
-
|
|
113
|
-
<div class="preview-content" role="tabpanel" id="{currentMode}-panel" aria-labelledby="{currentMode}-tab">
|
|
114
|
-
{#key playerKey}
|
|
115
|
-
<PieItemPlayer
|
|
116
|
-
{itemConfig}
|
|
117
|
-
{passageConfig}
|
|
118
|
-
{env}
|
|
119
|
-
{session}
|
|
120
|
-
{addCorrectResponse}
|
|
121
|
-
{customClassName}
|
|
122
|
-
{passageContainerClass}
|
|
123
|
-
{containerClass}
|
|
124
|
-
bundleType={effectiveBundleType}
|
|
125
|
-
{loaderConfig}
|
|
126
|
-
mode={playerMode}
|
|
127
|
-
{configuration}
|
|
128
|
-
{onInsertImage}
|
|
129
|
-
{onDeleteImage}
|
|
130
|
-
{onInsertSound}
|
|
131
|
-
{onDeleteSound}
|
|
132
|
-
{onLoadComplete}
|
|
133
|
-
{onPlayerError}
|
|
134
|
-
{onSessionChanged}
|
|
135
|
-
{onModelUpdated}
|
|
136
|
-
{baseHeadingLevel}
|
|
137
|
-
{includeSrHeading}
|
|
138
|
-
/>
|
|
139
|
-
{/key}
|
|
140
|
-
</div>
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
<style>
|
|
144
|
-
.pie-preview-layout {
|
|
145
|
-
display: block;
|
|
146
|
-
width: 100%;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.preview-content {
|
|
150
|
-
display: block;
|
|
151
|
-
width: 100%;
|
|
152
|
-
padding: 1rem 0;
|
|
153
|
-
}
|
|
154
|
-
</style>
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
PiePreviewToggle - Toggle between authoring and preview modes
|
|
3
|
-
|
|
4
|
-
Simple tab-based interface for switching between author and preview views.
|
|
5
|
-
Emits mode changes via callback prop.
|
|
6
|
-
-->
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import { createPieLogger, isGlobalDebugEnabled } from '../pie/logger.js';
|
|
9
|
-
|
|
10
|
-
const logger = createPieLogger('pie-preview-toggle', () => isGlobalDebugEnabled());
|
|
11
|
-
|
|
12
|
-
// Props using Svelte 5 runes
|
|
13
|
-
let {
|
|
14
|
-
mode = 'author' as 'author' | 'preview',
|
|
15
|
-
onModeChange
|
|
16
|
-
}: {
|
|
17
|
-
mode?: 'author' | 'preview';
|
|
18
|
-
onModeChange?: (mode: 'author' | 'preview') => void;
|
|
19
|
-
} = $props();
|
|
20
|
-
|
|
21
|
-
// Handle mode change
|
|
22
|
-
function handleModeChange(newMode: 'author' | 'preview') {
|
|
23
|
-
logger.debug('[PiePreviewToggle] Mode changed to:', newMode);
|
|
24
|
-
|
|
25
|
-
if (onModeChange) {
|
|
26
|
-
onModeChange(newMode);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Also dispatch DOM event for backward compatibility
|
|
30
|
-
const event = new CustomEvent('mode-changed', {
|
|
31
|
-
detail: { mode: newMode },
|
|
32
|
-
bubbles: true,
|
|
33
|
-
composed: true
|
|
34
|
-
});
|
|
35
|
-
dispatchEvent(event);
|
|
36
|
-
}
|
|
37
|
-
</script>
|
|
38
|
-
|
|
39
|
-
<div class="pie-preview-toggle">
|
|
40
|
-
<div class="toggle-tabs" role="tablist">
|
|
41
|
-
<button
|
|
42
|
-
type="button"
|
|
43
|
-
role="tab"
|
|
44
|
-
class="toggle-tab"
|
|
45
|
-
class:active={mode === 'author'}
|
|
46
|
-
aria-selected={mode === 'author'}
|
|
47
|
-
aria-controls="author-panel"
|
|
48
|
-
onclick={() => handleModeChange('author')}
|
|
49
|
-
>
|
|
50
|
-
Author
|
|
51
|
-
</button>
|
|
52
|
-
<button
|
|
53
|
-
type="button"
|
|
54
|
-
role="tab"
|
|
55
|
-
class="toggle-tab"
|
|
56
|
-
class:active={mode === 'preview'}
|
|
57
|
-
aria-selected={mode === 'preview'}
|
|
58
|
-
aria-controls="preview-panel"
|
|
59
|
-
onclick={() => handleModeChange('preview')}
|
|
60
|
-
>
|
|
61
|
-
Preview
|
|
62
|
-
</button>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
|
|
66
|
-
<style>
|
|
67
|
-
.pie-preview-toggle {
|
|
68
|
-
display: block;
|
|
69
|
-
width: 100%;
|
|
70
|
-
margin-bottom: 1rem;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.toggle-tabs {
|
|
74
|
-
display: flex;
|
|
75
|
-
border-bottom: 2px solid #e0e0e0;
|
|
76
|
-
gap: 0.5rem;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.toggle-tab {
|
|
80
|
-
padding: 0.75rem 1.5rem;
|
|
81
|
-
background: transparent;
|
|
82
|
-
border: none;
|
|
83
|
-
border-bottom: 3px solid transparent;
|
|
84
|
-
cursor: pointer;
|
|
85
|
-
font-size: 1rem;
|
|
86
|
-
font-weight: 500;
|
|
87
|
-
color: #666;
|
|
88
|
-
transition: all 0.2s ease;
|
|
89
|
-
margin-bottom: -2px;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.toggle-tab:hover {
|
|
93
|
-
color: #333;
|
|
94
|
-
background: rgba(0, 0, 0, 0.05);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.toggle-tab:focus {
|
|
98
|
-
outline: 2px solid #1976d2;
|
|
99
|
-
outline-offset: 2px;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.toggle-tab.active {
|
|
103
|
-
color: #1976d2;
|
|
104
|
-
border-bottom-color: #1976d2;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.toggle-tab:active {
|
|
108
|
-
transform: translateY(1px);
|
|
109
|
-
}
|
|
110
|
-
</style>
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
export let fixed: boolean = false;
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<div class="pie-loading {fixed ? 'fixed' : ''}"></div>
|
|
6
|
-
|
|
7
|
-
<style>
|
|
8
|
-
.pie-loading {
|
|
9
|
-
position: absolute;
|
|
10
|
-
height: 100%;
|
|
11
|
-
width: 100%;
|
|
12
|
-
background-color: #fff;
|
|
13
|
-
bottom: 0;
|
|
14
|
-
left: 0;
|
|
15
|
-
right: 0;
|
|
16
|
-
top: 0;
|
|
17
|
-
z-index: 9999;
|
|
18
|
-
opacity: 0.4;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.pie-loading.fixed {
|
|
22
|
-
position: fixed;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.pie-loading:before {
|
|
26
|
-
content: "";
|
|
27
|
-
background-color: rgba(0, 0, 0, 0);
|
|
28
|
-
border: 5px solid rgba(63, 81, 181, 0.9);
|
|
29
|
-
opacity: 0.9;
|
|
30
|
-
border-right: 5px solid rgba(0, 0, 0, 0);
|
|
31
|
-
border-left: 5px solid rgba(0, 0, 0, 0);
|
|
32
|
-
border-radius: 50px;
|
|
33
|
-
box-shadow: 0 0 35px rgba(63, 81, 181, 0.9);
|
|
34
|
-
width: 50px;
|
|
35
|
-
height: 50px;
|
|
36
|
-
animation: spinPulse 1s infinite linear;
|
|
37
|
-
margin: -25px 0 0 -25px;
|
|
38
|
-
position: absolute;
|
|
39
|
-
top: 50%;
|
|
40
|
-
left: 50%;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.pie-loading:after {
|
|
44
|
-
content: "";
|
|
45
|
-
background-color: rgba(0, 0, 0, 0);
|
|
46
|
-
border: 5px solid rgba(63, 81, 181, 0.9);
|
|
47
|
-
opacity: 0.9;
|
|
48
|
-
border-left: 5px solid rgba(0, 0, 0, 0);
|
|
49
|
-
border-right: 5px solid rgba(0, 0, 0, 0);
|
|
50
|
-
border-radius: 50px;
|
|
51
|
-
box-shadow: 0 0 15px rgba(63, 81, 181, 0.9);
|
|
52
|
-
width: 30px;
|
|
53
|
-
height: 30px;
|
|
54
|
-
animation: spinoffPulse 1s infinite linear;
|
|
55
|
-
margin: -15px 0 0 -15px;
|
|
56
|
-
position: absolute;
|
|
57
|
-
top: 50%;
|
|
58
|
-
left: 50%;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
@keyframes spinPulse {
|
|
62
|
-
0% {
|
|
63
|
-
transform: rotate(160deg);
|
|
64
|
-
opacity: 0;
|
|
65
|
-
box-shadow: 0 0 1px rgba(63, 81, 181, 0.9);
|
|
66
|
-
}
|
|
67
|
-
50% {
|
|
68
|
-
transform: rotate(145deg);
|
|
69
|
-
opacity: 1;
|
|
70
|
-
}
|
|
71
|
-
100% {
|
|
72
|
-
transform: rotate(-320deg);
|
|
73
|
-
opacity: 0;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@keyframes spinoffPulse {
|
|
78
|
-
0% {
|
|
79
|
-
transform: rotate(0deg);
|
|
80
|
-
}
|
|
81
|
-
100% {
|
|
82
|
-
transform: rotate(360deg);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
</style>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
let {
|
|
3
|
-
buttonEl = null as HTMLButtonElement | null,
|
|
4
|
-
onClick,
|
|
5
|
-
ariaLabel = 'Settings',
|
|
6
|
-
active = false
|
|
7
|
-
}: {
|
|
8
|
-
buttonEl?: HTMLButtonElement | null;
|
|
9
|
-
onClick: () => void;
|
|
10
|
-
ariaLabel?: string;
|
|
11
|
-
active?: boolean;
|
|
12
|
-
} = $props();
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<button
|
|
16
|
-
bind:this={buttonEl}
|
|
17
|
-
type="button"
|
|
18
|
-
class="tool-settings-button btn btn-ghost btn-sm btn-circle"
|
|
19
|
-
aria-label={ariaLabel}
|
|
20
|
-
aria-pressed={active}
|
|
21
|
-
onclick={onClick}
|
|
22
|
-
>
|
|
23
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5">
|
|
24
|
-
<path
|
|
25
|
-
stroke-linecap="round"
|
|
26
|
-
stroke-linejoin="round"
|
|
27
|
-
d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z"
|
|
28
|
-
/>
|
|
29
|
-
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
|
30
|
-
</svg>
|
|
31
|
-
</button>
|
|
32
|
-
|
|
33
|
-
<style>
|
|
34
|
-
.tool-settings-button {
|
|
35
|
-
display: inline-flex;
|
|
36
|
-
align-items: center;
|
|
37
|
-
justify-content: center;
|
|
38
|
-
width: 2rem;
|
|
39
|
-
height: 2rem;
|
|
40
|
-
padding: 0.25rem;
|
|
41
|
-
border: none;
|
|
42
|
-
border-radius: 9999px;
|
|
43
|
-
background: transparent;
|
|
44
|
-
color: inherit;
|
|
45
|
-
cursor: pointer;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.tool-settings-button:hover {
|
|
49
|
-
background: rgba(255, 255, 255, 0.1);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.tool-settings-button:focus-visible {
|
|
53
|
-
outline: 2px solid currentColor;
|
|
54
|
-
outline-offset: 2px;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.tool-settings-button svg {
|
|
58
|
-
width: 20px;
|
|
59
|
-
height: 20px;
|
|
60
|
-
display: block;
|
|
61
|
-
}
|
|
62
|
-
</style>
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import { onMount } from 'svelte';
|
|
4
|
-
import { createFocusTrap } from '../ui/focus-trap.js';
|
|
5
|
-
|
|
6
|
-
let {
|
|
7
|
-
open,
|
|
8
|
-
title = 'Settings',
|
|
9
|
-
onClose,
|
|
10
|
-
anchorEl = null,
|
|
11
|
-
children
|
|
12
|
-
}: {
|
|
13
|
-
open: boolean;
|
|
14
|
-
title?: string;
|
|
15
|
-
onClose: () => void;
|
|
16
|
-
anchorEl?: HTMLElement | null;
|
|
17
|
-
children?: Snippet;
|
|
18
|
-
} = $props();
|
|
19
|
-
|
|
20
|
-
let panelEl = $state<HTMLDivElement | null>(null);
|
|
21
|
-
let panelPosition = $state<{ top: number; left?: number; right?: number } | null>(null);
|
|
22
|
-
let cleanupFocusTrap: (() => void) | null = null;
|
|
23
|
-
|
|
24
|
-
$effect(() => {
|
|
25
|
-
if (!open || !panelEl) {
|
|
26
|
-
cleanupFocusTrap?.();
|
|
27
|
-
cleanupFocusTrap = null;
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
cleanupFocusTrap?.();
|
|
31
|
-
cleanupFocusTrap = createFocusTrap(panelEl, { onEscape: onClose });
|
|
32
|
-
return () => {
|
|
33
|
-
cleanupFocusTrap?.();
|
|
34
|
-
cleanupFocusTrap = null;
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// Calculate position based on anchor element
|
|
39
|
-
$effect(() => {
|
|
40
|
-
if (open && anchorEl) {
|
|
41
|
-
const anchorRect = anchorEl.getBoundingClientRect();
|
|
42
|
-
const panelWidth = 320; // w-80 = 20rem = 320px
|
|
43
|
-
const spacing = 8; // Gap from anchor
|
|
44
|
-
|
|
45
|
-
// Try to position to the right of anchor first
|
|
46
|
-
const rightPosition = anchorRect.right + spacing;
|
|
47
|
-
const hasSpaceOnRight = rightPosition + panelWidth <= window.innerWidth;
|
|
48
|
-
|
|
49
|
-
if (hasSpaceOnRight) {
|
|
50
|
-
// Position to the right of anchor
|
|
51
|
-
panelPosition = {
|
|
52
|
-
top: anchorRect.top,
|
|
53
|
-
left: rightPosition
|
|
54
|
-
};
|
|
55
|
-
} else {
|
|
56
|
-
// Position to the left of anchor
|
|
57
|
-
panelPosition = {
|
|
58
|
-
top: anchorRect.top,
|
|
59
|
-
right: window.innerWidth - anchorRect.left + spacing
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
panelPosition = null;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
onMount(() => {
|
|
68
|
-
const onDocClick = (e: MouseEvent) => {
|
|
69
|
-
if (!open) return;
|
|
70
|
-
const target = e.target as Node | null;
|
|
71
|
-
if (!target) return;
|
|
72
|
-
if (panelEl?.contains(target)) return;
|
|
73
|
-
if (anchorEl?.contains(target)) return;
|
|
74
|
-
onClose();
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
document.addEventListener('mousedown', onDocClick);
|
|
78
|
-
return () => {
|
|
79
|
-
cleanupFocusTrap?.();
|
|
80
|
-
cleanupFocusTrap = null;
|
|
81
|
-
document.removeEventListener('mousedown', onDocClick);
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
</script>
|
|
85
|
-
|
|
86
|
-
{#if open}
|
|
87
|
-
<div class="fixed inset-0" aria-hidden="true" onmousedown={onClose} style="z-index: 4000;"></div>
|
|
88
|
-
<div
|
|
89
|
-
bind:this={panelEl}
|
|
90
|
-
class="tool-settings-panel fixed w-80 rounded-box bg-base-100 shadow p-3 text-base-content"
|
|
91
|
-
role="dialog"
|
|
92
|
-
aria-label={title}
|
|
93
|
-
tabindex="-1"
|
|
94
|
-
style="z-index: 4100; {panelPosition ? `top: ${panelPosition.top}px; ${panelPosition.left !== undefined ? `left: ${panelPosition.left}px;` : `right: ${panelPosition.right}px;`}` : 'top: 4rem; right: 1rem;'}"
|
|
95
|
-
>
|
|
96
|
-
<div class="flex items-center justify-between gap-2 mb-2">
|
|
97
|
-
<h2 class="font-semibold text-sm">{title}</h2>
|
|
98
|
-
<button type="button" class="btn btn-ghost btn-xs" onclick={onClose} aria-label="Close settings">Close</button>
|
|
99
|
-
</div>
|
|
100
|
-
<div class="text-sm">
|
|
101
|
-
{@render children?.()}
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
{/if}
|
package/dist/components/index.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { default as PieItemPlayer } from "./PieItemPlayer.svelte";
|
|
2
|
-
export { default as PiePreviewLayout } from "./PiePreviewLayout.svelte";
|
|
3
|
-
export { default as PiePreviewToggle } from "./PiePreviewToggle.svelte";
|
|
4
|
-
export { default as PieSpinner } from "./PieSpinner.svelte";
|
|
5
|
-
export { default as ToolSettingsButton } from "./ToolSettingsButton.svelte";
|
|
6
|
-
export { default as ToolSettingsPanel } from "./ToolSettingsPanel.svelte";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KAChC;CACD;AAWD,eAAO,MAAM,kBAAkB,QAGJ,CAAC;AAE5B,eAAO,MAAM,kBAAkB,QAGJ,CAAC"}
|
package/dist/i18n/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACN,KAAK,uBAAuB,EAC5B,iBAAiB,GACjB,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/i18n/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAUlE,CAAC;AAuBF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAgC5B;AA0CD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simple-i18n.d.ts","sourceRoot":"","sources":["../../src/i18n/simple-i18n.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwC,MAAM,YAAY,CAAC;AAEnF;;GAEG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,GAAE,UAAe;IAcnC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAKpD;;OAEG;IACH,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAYpE;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9C;;OAEG;IACH,YAAY,IAAI,KAAK,GAAG,KAAK;IAI7B;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;YAOX,yBAAyB;IASvC,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;CAU3B"}
|
package/dist/i18n/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC;IACzD,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAElE,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAExD,0BAA0B;IAC1B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAErD,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IACrD,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IACrE,SAAS,IAAI,MAAM,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC;IAC9B,mBAAmB,IAAI,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B"}
|