@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.
Files changed (210) hide show
  1. package/dist/config/profile.d.ts +0 -1
  2. package/dist/config/profile.js.map +1 -1
  3. package/dist/i18n/index.d.ts +0 -3
  4. package/dist/i18n/index.js +0 -2
  5. package/dist/i18n/index.js.map +1 -1
  6. package/dist/i18n/loader.d.ts +0 -1
  7. package/dist/i18n/loader.js.map +1 -1
  8. package/dist/i18n/simple-i18n.d.ts +0 -1
  9. package/dist/i18n/simple-i18n.js.map +1 -1
  10. package/dist/i18n/types.d.ts +0 -1
  11. package/dist/i18n/types.js.map +1 -1
  12. package/dist/index.d.ts +0 -1
  13. package/dist/index.js +0 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/instrumentation/debug-panel-stream.d.ts +0 -1
  16. package/dist/instrumentation/debug-panel-stream.js.map +1 -1
  17. package/dist/instrumentation/index.d.ts +0 -1
  18. package/dist/instrumentation/index.js.map +1 -1
  19. package/dist/instrumentation/provider-guards.d.ts +0 -1
  20. package/dist/instrumentation/provider-guards.js.map +1 -1
  21. package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts +0 -1
  22. package/dist/instrumentation/providers/BaseInstrumentationProvider.js.map +1 -1
  23. package/dist/instrumentation/providers/CompositeInstrumentationProvider.d.ts +0 -1
  24. package/dist/instrumentation/providers/CompositeInstrumentationProvider.js.map +1 -1
  25. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts +0 -1
  26. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js.map +1 -1
  27. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.d.ts +0 -1
  28. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js.map +1 -1
  29. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts +0 -1
  30. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js.map +1 -1
  31. package/dist/instrumentation/providers/index.d.ts +0 -1
  32. package/dist/instrumentation/providers/index.js.map +1 -1
  33. package/dist/instrumentation/types.d.ts +0 -1
  34. package/dist/instrumentation/types.js.map +1 -1
  35. package/dist/loader-config.d.ts +0 -1
  36. package/dist/loader-config.js.map +1 -1
  37. package/dist/loaders/ElementLoader.d.ts +0 -1
  38. package/dist/loaders/ElementLoader.js.map +1 -1
  39. package/dist/loaders/element-loader-types.d.ts +0 -1
  40. package/dist/loaders/element-loader-types.js.map +1 -1
  41. package/dist/loaders/element-loader.d.ts +0 -1
  42. package/dist/loaders/element-loader.js.map +1 -1
  43. package/dist/loaders/esm-adapter.d.ts +0 -1
  44. package/dist/loaders/esm-adapter.js.map +1 -1
  45. package/dist/loaders/iife-adapter.d.ts +0 -1
  46. package/dist/loaders/iife-adapter.js.map +1 -1
  47. package/dist/loaders/index.d.ts +0 -1
  48. package/dist/loaders/index.js.map +1 -1
  49. package/dist/object/index.d.ts +0 -1
  50. package/dist/object/index.js.map +1 -1
  51. package/dist/pie/asset-handler.d.ts +0 -1
  52. package/dist/pie/asset-handler.js.map +1 -1
  53. package/dist/pie/authoring.d.ts +0 -1
  54. package/dist/pie/authoring.js.map +1 -1
  55. package/dist/pie/component-context.d.ts +0 -1
  56. package/dist/pie/component-context.js.map +1 -1
  57. package/dist/pie/config.d.ts +0 -1
  58. package/dist/pie/config.js.map +1 -1
  59. package/dist/pie/configure-initialization.d.ts +0 -1
  60. package/dist/pie/configure-initialization.js.map +1 -1
  61. package/dist/pie/correct-response-env.d.ts +0 -1
  62. package/dist/pie/correct-response-env.js.map +1 -1
  63. package/dist/pie/custom-element-define.d.ts +0 -1
  64. package/dist/pie/custom-element-define.js.map +1 -1
  65. package/dist/pie/index.d.ts +4 -9
  66. package/dist/pie/index.js +4 -8
  67. package/dist/pie/index.js.map +1 -1
  68. package/dist/pie/initialization.d.ts +0 -1
  69. package/dist/pie/initialization.js.map +1 -1
  70. package/dist/pie/instrumentation-event-bridge.d.ts +0 -1
  71. package/dist/pie/instrumentation-event-bridge.js.map +1 -1
  72. package/dist/pie/instrumentation-event-map.d.ts +0 -1
  73. package/dist/pie/instrumentation-event-map.js.map +1 -1
  74. package/dist/pie/instrumentation-provider-resolution.d.ts +0 -1
  75. package/dist/pie/instrumentation-provider-resolution.js.map +1 -1
  76. package/dist/pie/item-controller-storage.d.ts +0 -1
  77. package/dist/pie/item-controller-storage.js.map +1 -1
  78. package/dist/pie/item-controller.d.ts +0 -1
  79. package/dist/pie/item-controller.js.map +1 -1
  80. package/dist/pie/item-session-contract.d.ts +0 -1
  81. package/dist/pie/item-session-contract.js.map +1 -1
  82. package/dist/pie/logger.d.ts +0 -1
  83. package/dist/pie/logger.js.map +1 -1
  84. package/dist/pie/math-rendering.d.ts +0 -1
  85. package/dist/pie/math-rendering.js.map +1 -1
  86. package/dist/pie/overrides.d.ts +0 -1
  87. package/dist/pie/overrides.js.map +1 -1
  88. package/dist/pie/player-initializer.d.ts +0 -1
  89. package/dist/pie/player-initializer.js.map +1 -1
  90. package/dist/pie/registry.d.ts +0 -1
  91. package/dist/pie/registry.js.map +1 -1
  92. package/dist/pie/resource-monitor.d.ts +0 -1
  93. package/dist/pie/resource-monitor.js.map +1 -1
  94. package/dist/pie/scoring.d.ts +0 -1
  95. package/dist/pie/scoring.js.map +1 -1
  96. package/dist/pie/stage-tracker.d.ts +0 -1
  97. package/dist/pie/stage-tracker.js.map +1 -1
  98. package/dist/pie/stages.d.ts +0 -1
  99. package/dist/pie/stages.js.map +1 -1
  100. package/dist/pie/tag-names.d.ts +0 -1
  101. package/dist/pie/tag-names.js.map +1 -1
  102. package/dist/pie/types.d.ts +0 -1
  103. package/dist/pie/types.js.map +1 -1
  104. package/dist/pie/updates.d.ts +0 -1
  105. package/dist/pie/updates.js.map +1 -1
  106. package/dist/pie/utils.d.ts +0 -1
  107. package/dist/pie/utils.js.map +1 -1
  108. package/dist/player-strategy.d.ts +0 -1
  109. package/dist/player-strategy.js.map +1 -1
  110. package/dist/security/index.d.ts +0 -1
  111. package/dist/security/index.js.map +1 -1
  112. package/dist/security/sanitize-item-markup.d.ts +0 -1
  113. package/dist/security/sanitize-item-markup.js.map +1 -1
  114. package/dist/security/sanitize-svg-icon.d.ts +0 -1
  115. package/dist/security/sanitize-svg-icon.js.map +1 -1
  116. package/dist/security/validate-style-url.d.ts +0 -1
  117. package/dist/security/validate-style-url.js.map +1 -1
  118. package/dist/security/wrap-overwide-images.d.ts +0 -1
  119. package/dist/security/wrap-overwide-images.js.map +1 -1
  120. package/dist/server/npm-registry.d.ts +0 -1
  121. package/dist/server/npm-registry.js.map +1 -1
  122. package/dist/types/index.d.ts +0 -1
  123. package/dist/types/index.js.map +1 -1
  124. package/dist/ui/debug-panel-persistence.d.ts +0 -1
  125. package/dist/ui/debug-panel-persistence.js.map +1 -1
  126. package/dist/ui/first-focusable.d.ts +0 -1
  127. package/dist/ui/first-focusable.js.map +1 -1
  128. package/dist/ui/focus-trap.d.ts +0 -1
  129. package/dist/ui/focus-trap.js.map +1 -1
  130. package/dist/ui/safe-storage.d.ts +0 -1
  131. package/dist/ui/safe-storage.js.map +1 -1
  132. package/package.json +6 -64
  133. package/dist/components/PieItemPlayer.svelte +0 -951
  134. package/dist/components/PiePreviewLayout.svelte +0 -154
  135. package/dist/components/PiePreviewToggle.svelte +0 -110
  136. package/dist/components/PieSpinner.svelte +0 -85
  137. package/dist/components/ToolSettingsButton.svelte +0 -62
  138. package/dist/components/ToolSettingsPanel.svelte +0 -104
  139. package/dist/components/index.ts +0 -6
  140. package/dist/config/profile.d.ts.map +0 -1
  141. package/dist/i18n/index.d.ts.map +0 -1
  142. package/dist/i18n/loader.d.ts.map +0 -1
  143. package/dist/i18n/simple-i18n.d.ts.map +0 -1
  144. package/dist/i18n/types.d.ts.map +0 -1
  145. package/dist/i18n/use-i18n-standalone.svelte.ts +0 -185
  146. package/dist/i18n/use-i18n.svelte.ts +0 -164
  147. package/dist/index.d.ts.map +0 -1
  148. package/dist/instrumentation/debug-panel-stream.d.ts.map +0 -1
  149. package/dist/instrumentation/index.d.ts.map +0 -1
  150. package/dist/instrumentation/provider-guards.d.ts.map +0 -1
  151. package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts.map +0 -1
  152. package/dist/instrumentation/providers/CompositeInstrumentationProvider.d.ts.map +0 -1
  153. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts.map +0 -1
  154. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.d.ts.map +0 -1
  155. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts.map +0 -1
  156. package/dist/instrumentation/providers/index.d.ts.map +0 -1
  157. package/dist/instrumentation/types.d.ts.map +0 -1
  158. package/dist/loader-config.d.ts.map +0 -1
  159. package/dist/loaders/ElementLoader.d.ts.map +0 -1
  160. package/dist/loaders/element-loader-types.d.ts.map +0 -1
  161. package/dist/loaders/element-loader.d.ts.map +0 -1
  162. package/dist/loaders/esm-adapter.d.ts.map +0 -1
  163. package/dist/loaders/iife-adapter.d.ts.map +0 -1
  164. package/dist/loaders/index.d.ts.map +0 -1
  165. package/dist/object/index.d.ts.map +0 -1
  166. package/dist/pie/asset-handler.d.ts.map +0 -1
  167. package/dist/pie/authoring.d.ts.map +0 -1
  168. package/dist/pie/component-context.d.ts.map +0 -1
  169. package/dist/pie/config.d.ts.map +0 -1
  170. package/dist/pie/configure-initialization.d.ts.map +0 -1
  171. package/dist/pie/correct-response-env.d.ts.map +0 -1
  172. package/dist/pie/custom-element-define.d.ts.map +0 -1
  173. package/dist/pie/index.d.ts.map +0 -1
  174. package/dist/pie/initialization.d.ts.map +0 -1
  175. package/dist/pie/instrumentation-event-bridge.d.ts.map +0 -1
  176. package/dist/pie/instrumentation-event-map.d.ts.map +0 -1
  177. package/dist/pie/instrumentation-provider-resolution.d.ts.map +0 -1
  178. package/dist/pie/item-controller-storage.d.ts.map +0 -1
  179. package/dist/pie/item-controller.d.ts.map +0 -1
  180. package/dist/pie/item-session-contract.d.ts.map +0 -1
  181. package/dist/pie/logger.d.ts.map +0 -1
  182. package/dist/pie/math-rendering.d.ts.map +0 -1
  183. package/dist/pie/overrides.d.ts.map +0 -1
  184. package/dist/pie/player-initializer.d.ts.map +0 -1
  185. package/dist/pie/registry.d.ts.map +0 -1
  186. package/dist/pie/resource-monitor.d.ts.map +0 -1
  187. package/dist/pie/scoring.d.ts.map +0 -1
  188. package/dist/pie/stage-tracker.d.ts.map +0 -1
  189. package/dist/pie/stages.d.ts.map +0 -1
  190. package/dist/pie/tag-names.d.ts.map +0 -1
  191. package/dist/pie/types.d.ts.map +0 -1
  192. package/dist/pie/updates.d.ts.map +0 -1
  193. package/dist/pie/use-resource-monitor.svelte.d.ts +0 -56
  194. package/dist/pie/use-resource-monitor.svelte.d.ts.map +0 -1
  195. package/dist/pie/use-resource-monitor.svelte.js +0 -176
  196. package/dist/pie/use-resource-monitor.svelte.js.map +0 -1
  197. package/dist/pie/utils.d.ts.map +0 -1
  198. package/dist/player-strategy.d.ts.map +0 -1
  199. package/dist/security/index.d.ts.map +0 -1
  200. package/dist/security/sanitize-item-markup.d.ts.map +0 -1
  201. package/dist/security/sanitize-svg-icon.d.ts.map +0 -1
  202. package/dist/security/validate-style-url.d.ts.map +0 -1
  203. package/dist/security/wrap-overwide-images.d.ts.map +0 -1
  204. package/dist/server/npm-registry.d.ts.map +0 -1
  205. package/dist/types/index.d.ts.map +0 -1
  206. package/dist/ui/debug-panel-persistence.d.ts.map +0 -1
  207. package/dist/ui/first-focusable.d.ts.map +0 -1
  208. package/dist/ui/focus-trap.d.ts.map +0 -1
  209. package/dist/ui/safe-storage.d.ts.map +0 -1
  210. 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}
@@ -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"}
@@ -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"}
@@ -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"}