@coyalabs/bts-style 1.0.8 → 1.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.
Files changed (60) hide show
  1. package/dist/Base/BaseContainer.svelte +85 -0
  2. package/dist/{BaseContainer.svelte.d.ts → Base/BaseContainer.svelte.d.ts} +12 -2
  3. package/dist/Base/BaseIcon.svelte +42 -0
  4. package/dist/Base/BaseIcon.svelte.d.ts +30 -0
  5. package/dist/Base/BasePage.svelte +73 -0
  6. package/dist/Base/BasePage.svelte.d.ts +37 -0
  7. package/dist/{Text.svelte → Base/BaseText.svelte} +9 -11
  8. package/dist/{Text.svelte.d.ts → Base/BaseText.svelte.d.ts} +5 -3
  9. package/dist/Components/Button.svelte +151 -0
  10. package/dist/Components/Button.svelte.d.ts +65 -0
  11. package/dist/Components/Dropdown.svelte +191 -0
  12. package/dist/Components/Dropdown.svelte.d.ts +54 -0
  13. package/dist/Components/IconButton.svelte +44 -0
  14. package/dist/Components/IconButton.svelte.d.ts +34 -0
  15. package/dist/Components/InputBox.svelte +103 -0
  16. package/dist/Components/InputBox.svelte.d.ts +56 -0
  17. package/dist/Components/Popup/AlertPopup.svelte +27 -0
  18. package/dist/Components/Popup/AlertPopup.svelte.d.ts +28 -0
  19. package/dist/Components/Popup/ConfirmPopup.svelte +39 -0
  20. package/dist/Components/Popup/ConfirmPopup.svelte.d.ts +32 -0
  21. package/dist/Components/Popup/Popup.svelte +67 -0
  22. package/dist/{BasePage.svelte.d.ts → Components/Popup/Popup.svelte.d.ts} +15 -9
  23. package/dist/Components/Popup/PromptPopup.svelte +61 -0
  24. package/dist/Components/Popup/PromptPopup.svelte.d.ts +36 -0
  25. package/dist/Components/Separator.svelte +63 -0
  26. package/dist/Components/Separator.svelte.d.ts +30 -0
  27. package/dist/Components/Special/SpecialAction.svelte +46 -0
  28. package/dist/Components/Special/SpecialAction.svelte.d.ts +32 -0
  29. package/dist/Components/Special/SpecialParagraph.svelte +159 -0
  30. package/dist/Components/Special/SpecialParagraph.svelte.d.ts +52 -0
  31. package/dist/Components/TabBar.svelte +128 -0
  32. package/dist/Components/TabBar.svelte.d.ts +40 -0
  33. package/dist/Components/Toggle.svelte +59 -0
  34. package/dist/{Testing.svelte.d.ts → Components/Toggle.svelte.d.ts} +5 -9
  35. package/dist/Components/Tooltip.svelte +132 -0
  36. package/dist/Components/Tooltip.svelte.d.ts +28 -0
  37. package/dist/Components/TreeDirectory.svelte +148 -0
  38. package/dist/Components/TreeDirectory.svelte.d.ts +58 -0
  39. package/dist/Components/popupStore.d.ts +31 -0
  40. package/dist/Components/popupStore.js +99 -0
  41. package/dist/Structure/BG/AssetGear.d.ts +2 -0
  42. package/dist/Structure/BG/AssetGear.js +2 -0
  43. package/dist/Structure/BG/BGChain.svelte +188 -0
  44. package/dist/Structure/BG/BGChain.svelte.d.ts +36 -0
  45. package/dist/Structure/BG/BGDetails.svelte +130 -0
  46. package/dist/Structure/BG/BGDetails.svelte.d.ts +36 -0
  47. package/dist/Structure/BG/BGGears.svelte +188 -0
  48. package/dist/Structure/BG/BGGears.svelte.d.ts +38 -0
  49. package/dist/Structure/TextHeader.svelte +32 -0
  50. package/dist/Structure/TextHeader.svelte.d.ts +28 -0
  51. package/dist/icons.d.ts +11 -0
  52. package/dist/icons.js +11 -0
  53. package/dist/index.d.ts +25 -3
  54. package/dist/index.js +30 -3
  55. package/package.json +2 -1
  56. package/public/favicon.png +0 -0
  57. package/README.md +0 -35
  58. package/dist/BaseContainer.svelte +0 -43
  59. package/dist/BasePage.svelte +0 -30
  60. package/dist/Testing.svelte +0 -26
@@ -0,0 +1,188 @@
1
+ <script>
2
+ import { onMount, onDestroy } from 'svelte';
3
+
4
+ /**
5
+ * @type {string}
6
+ */
7
+ export let chainColor = "#130F15";
8
+
9
+ /**
10
+ * @type {number}
11
+ */
12
+ export let linkCount = 8;
13
+
14
+ /**
15
+ * @type {number}
16
+ */
17
+ export let offset = 30;
18
+
19
+ /**
20
+ * @type {number}
21
+ */
22
+ export let windStrength = 0.04;
23
+
24
+ /**
25
+ * @type {number}
26
+ */
27
+ export let damping = 50;
28
+
29
+ /**
30
+ * @type {number}
31
+ */
32
+ export let stiffness = 100;
33
+
34
+ /** @type {Array<{x: number, y: number, rotation: number}>} */
35
+ let links = [];
36
+
37
+ /** @type {Array<{vx: number, vy: number}>} */
38
+ let velocities = [];
39
+
40
+ /** @type {number | null} */
41
+ let animationFrameId = null;
42
+
43
+ /** @type {number} */
44
+ let startTime = 0;
45
+
46
+ function initializeLinks() {
47
+ links = Array.from({ length: linkCount }, (_, i) => ({
48
+ x: 0,
49
+ y: i * offset,
50
+ rotation: 0,
51
+ }));
52
+ velocities = Array.from({ length: linkCount }, () => ({
53
+ vx: 0,
54
+ vy: 0,
55
+ }));
56
+ }
57
+
58
+ function animate() {
59
+ const elapsed = (Date.now() - startTime) / 1000;
60
+
61
+ const nextLinks = links.map((link, i) => {
62
+ if (i === 0) {
63
+ velocities[i] = { vx: 0, vy: 0 };
64
+ return { ...link, x: 0, y: 0, rotation: 0 };
65
+ }
66
+
67
+ // Wind simulation
68
+ const time = elapsed;
69
+ const wave =
70
+ Math.sin(time * 2 + i * 0.3) +
71
+ Math.sin(time * 1.5 + i * 0.1) * 0.5;
72
+
73
+ // Force decreases down the chain (strongest at bottom, weakest at top)
74
+ const windForce =
75
+ wave *
76
+ windStrength *
77
+ ((linkCount - i) / linkCount) *
78
+ 40;
79
+
80
+ // Get previous link position
81
+ const prevLink = links[i - 1];
82
+
83
+ // Calculate target position based on constraint
84
+ const targetY = prevLink.y + offset;
85
+ const targetX = prevLink.x + windForce;
86
+
87
+ // Apply forces
88
+ const dampingFactor = damping / 100;
89
+ velocities[i].vx += (targetX - link.x) * (stiffness / 1000);
90
+ velocities[i].vy += (targetY - link.y) * (stiffness / 1000);
91
+
92
+ // Apply damping
93
+ velocities[i].vx *= 1 - dampingFactor;
94
+ velocities[i].vy *= 1 - dampingFactor;
95
+
96
+ // Update position
97
+ const newX = link.x + velocities[i].vx;
98
+ const newY = link.y + velocities[i].vy;
99
+
100
+ return {
101
+ x: newX,
102
+ y: newY,
103
+ rotation: 0,
104
+ };
105
+ });
106
+
107
+ // Calculate rotations
108
+ for (let i = 1; i < nextLinks.length; i++) {
109
+ const prev = nextLinks[i - 1];
110
+ const curr = nextLinks[i];
111
+ const dx = curr.x - prev.x;
112
+ const dy = curr.y - prev.y;
113
+ const angle = -Math.atan2(dx, dy) * (180 / Math.PI);
114
+ // Constrain rotation to max 3 degrees
115
+ curr.rotation = Math.max(-3, Math.min(3, angle));
116
+ }
117
+
118
+ links = nextLinks;
119
+ animationFrameId = requestAnimationFrame(animate);
120
+ }
121
+
122
+ onMount(() => {
123
+ initializeLinks();
124
+ startTime = Date.now();
125
+ animationFrameId = requestAnimationFrame(animate);
126
+ });
127
+
128
+ onDestroy(() => {
129
+ if (animationFrameId !== null) {
130
+ cancelAnimationFrame(animationFrameId);
131
+ }
132
+ });
133
+
134
+ // Reinitialize when props change
135
+ $: if (linkCount || offset) {
136
+ initializeLinks();
137
+ }
138
+
139
+ $: viewBoxHeight = linkCount * offset;
140
+ </script>
141
+
142
+ <div class="chain-container">
143
+ <svg
144
+ width="100%"
145
+ height="100%"
146
+ viewBox="0 0 60 {viewBoxHeight}"
147
+ style="overflow: visible;"
148
+ >
149
+ {#each links as link, i}
150
+ <g
151
+ transform="translate({30 + link.x}, {link.y}) rotate({link.rotation})"
152
+ style="transform-origin: 30px 0;"
153
+ >
154
+ <g transform="translate(-10, 0)">
155
+ {#if i === linkCount - 1}
156
+ <!-- End link (decorative bottom piece) -->
157
+ <path
158
+ fill-rule="evenodd"
159
+ clip-rule="evenodd"
160
+ d="M10.0646 37.4537C5.79507 37.4632 2.10983 34.8721 0.626751 30.8898C-0.137261 28.8554 -0.227146 15.5559 0.491925 13.4749C0.806518 12.651 1.48065 11.3932 2.06489 10.6121C3.08802 9.32346 3.14248 7.91558 3.14348 2.36149L8.49965 3.01461C8.49965 6.09044 9.61514 6.56641 10.6488 6.56411C11.0982 6.56311 12.233 4.76726 12.233 2.34125L17.8844 2.32867C17.8844 8.74026 17.9294 10.4035 18.9181 12.3941C19.9068 14.428 19.9967 15.0776 19.9967 22.1391C19.9967 29.2871 19.9518 29.8504 18.9181 31.6722C16.8058 35.5759 13.9745 37.445 10.0646 37.4537ZM12.6712 18.1265C10.8735 18.607 8.62641 18.3954 7.36804 17.6184L6.28943 16.971L6.28943 23.0793V29.1877L7.59275 30.4411C9.07583 31.8674 10.1095 31.9951 11.6375 30.9953C13.3903 29.7784 13.9296 27.8277 13.9296 22.5858V17.8204L12.6712 18.1265Z"
161
+ fill={chainColor}
162
+ />
163
+ {:else}
164
+ <!-- Regular chain link -->
165
+ <path
166
+ fill-rule="evenodd"
167
+ clip-rule="evenodd"
168
+ d="M-9.31873e-07 21.3396C-6.35866e-07 14.5677 0.0898832 13.8569 1.03366 11.932C1.96876 10.0247 2.0656 9.26831 2.11102 3.31844L7.76383 3.30585C7.76759 5.99271 8.86971 6.2713 9.66251 6.26954C10.4715 6.26774 11.5613 5.9727 11.5613 3.4228L11.5612 3.2974L16.8532 3.28562C16.8532 7.08956 17.033 9.22103 17.3476 9.42934C17.6172 9.55414 18.3363 10.6812 18.9205 11.8503C19.9093 13.8546 19.9992 14.4814 19.9992 21.2951C19.9992 28.1087 19.9093 28.7359 18.9205 30.7446C18.3363 31.9164 17.6172 33.0466 17.3476 33.1726C17.033 33.3823 16.8532 35.7654 16.8532 39.4021L11.5612 39.4139C11.5613 39.3727 11.5613 39.3309 11.5613 39.2885C11.5613 36.655 10.4715 36.3648 9.66251 36.3666C8.85356 36.3684 7.76372 36.6635 7.76371 39.297C7.76371 39.3394 7.76374 39.3812 7.76379 39.4224L2.11227 39.435C2.11227 33.3319 2.02239 32.6633 1.0786 30.7425C0.0898826 28.7801 -1.22971e-06 28.1532 -9.31873e-07 21.3396ZM6.87611 25.2536C8.3592 24.5815 11.7748 24.8247 12.7635 25.6585L13.7073 26.4507L13.7073 21.7689L13.7073 17.0871L12.359 17.759C10.8759 18.4729 8.17943 18.6043 6.92106 17.9801C6.1121 17.5639 6.06716 17.6894 6.06716 21.5769C6.06716 25.2554 6.1121 25.5479 6.87611 25.2536Z"
169
+ fill={chainColor}
170
+ />
171
+ {/if}
172
+ </g>
173
+ </g>
174
+ {/each}
175
+ </svg>
176
+ </div>
177
+
178
+ <style>
179
+ .chain-container {
180
+ position: relative;
181
+ width: 100%;
182
+ height: 100%;
183
+ display: flex;
184
+ justify-content: center;
185
+ align-items: flex-start;
186
+ overflow: visible;
187
+ }
188
+ </style>
@@ -0,0 +1,36 @@
1
+ export default BGChain;
2
+ type BGChain = SvelteComponent<{
3
+ chainColor?: string | undefined;
4
+ linkCount?: number | undefined;
5
+ offset?: number | undefined;
6
+ windStrength?: number | undefined;
7
+ damping?: number | undefined;
8
+ stiffness?: number | undefined;
9
+ }, {
10
+ [evt: string]: CustomEvent<any>;
11
+ }, {}> & {
12
+ $$bindings?: string | undefined;
13
+ };
14
+ declare const BGChain: $$__sveltets_2_IsomorphicComponent<{
15
+ chainColor?: string | undefined;
16
+ linkCount?: number | undefined;
17
+ offset?: number | undefined;
18
+ windStrength?: number | undefined;
19
+ damping?: number | undefined;
20
+ stiffness?: number | undefined;
21
+ }, {
22
+ [evt: string]: CustomEvent<any>;
23
+ }, {}, {}, string>;
24
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
25
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
26
+ $$bindings?: Bindings;
27
+ } & Exports;
28
+ (internal: unknown, props: Props & {
29
+ $$events?: Events;
30
+ $$slots?: Slots;
31
+ }): Exports & {
32
+ $set?: any;
33
+ $on?: any;
34
+ };
35
+ z_$$bindings?: Bindings;
36
+ }
@@ -0,0 +1,130 @@
1
+ <script>
2
+ import BGChain from './BGChain.svelte';
3
+ import BGGears from './BGGears.svelte';
4
+ import { gearSVGDark } from './AssetGear.js';
5
+
6
+ /**
7
+ * @type {string}
8
+ */
9
+ export let chainColor = "#130F15";
10
+
11
+ /**
12
+ * @type {number}
13
+ */
14
+ export let linkCount = 8;
15
+
16
+ /**
17
+ * @type {number}
18
+ */
19
+ export let offset = 36;
20
+
21
+ /**
22
+ * @type {number}
23
+ */
24
+ export let windStrength = 0.04;
25
+
26
+ /**
27
+ * Show gears
28
+ * @type {boolean}
29
+ */
30
+ export let showGears = true;
31
+
32
+ /**
33
+ * Show chain
34
+ * @type {boolean}
35
+ */
36
+ export let showChain = true;
37
+ </script>
38
+
39
+ <div class="bg-details">
40
+ {#if showChain}
41
+ <div class="chain-wrapper top-left">
42
+ <BGChain
43
+ {chainColor}
44
+ {linkCount}
45
+ {offset}
46
+ {windStrength}
47
+ />
48
+ </div>
49
+ {/if}
50
+
51
+ {#if showGears}
52
+ <div class="gears-wrapper top-right">
53
+ <BGGears
54
+ primarySize={255}
55
+ secondaryRatio={0.7}
56
+ speed={-3}
57
+ meshOffsetX={50}
58
+ meshOffsetY={-100}
59
+ opacity={1}
60
+ secondaryRotationOffset={45}
61
+ />
62
+ </div>
63
+ <div class="single-gear-wrapper bottom-left">
64
+ <div class="single-gear">
65
+ {@html gearSVGDark}
66
+ </div>
67
+ </div> {/if}
68
+ </div>
69
+
70
+ <style>
71
+ .bg-details {
72
+ position: absolute;
73
+ top: 0;
74
+ left: 0;
75
+ width: 100%;
76
+ height: 100%;
77
+ pointer-events: none;
78
+ z-index: 0;
79
+ overflow: hidden;
80
+ }
81
+
82
+ .chain-wrapper {
83
+ position: absolute;
84
+ width: 80px;
85
+ height: fit-content;
86
+ }
87
+
88
+ .chain-wrapper.top-left {
89
+ top: -50px;
90
+ left: 30px;
91
+ }
92
+
93
+ .gears-wrapper {
94
+ position: absolute;
95
+ }
96
+
97
+ .gears-wrapper.top-right {
98
+ top: 15px;
99
+ right: -150px;
100
+ }
101
+ .single-gear-wrapper {
102
+ position: absolute;
103
+ width: 220px;
104
+ height: 215px;
105
+ }
106
+
107
+ .single-gear-wrapper.bottom-left {
108
+ bottom: -100px;
109
+ left: -120px;
110
+ }
111
+
112
+ .single-gear {
113
+ width: 100%;
114
+ height: 100%;
115
+ animation: rotateSingleGear 100s linear infinite;
116
+ }
117
+
118
+ .single-gear :global(svg) {
119
+ width: 100%;
120
+ height: 100%;
121
+ }
122
+
123
+ @keyframes rotateSingleGear {
124
+ from {
125
+ transform: rotate(0deg);
126
+ }
127
+ to {
128
+ transform: rotate(360deg);
129
+ }
130
+ }</style>
@@ -0,0 +1,36 @@
1
+ export default BGDetails;
2
+ type BGDetails = SvelteComponent<{
3
+ chainColor?: string | undefined;
4
+ linkCount?: number | undefined;
5
+ offset?: number | undefined;
6
+ windStrength?: number | undefined;
7
+ showGears?: boolean | undefined;
8
+ showChain?: boolean | undefined;
9
+ }, {
10
+ [evt: string]: CustomEvent<any>;
11
+ }, {}> & {
12
+ $$bindings?: string | undefined;
13
+ };
14
+ declare const BGDetails: $$__sveltets_2_IsomorphicComponent<{
15
+ chainColor?: string | undefined;
16
+ linkCount?: number | undefined;
17
+ offset?: number | undefined;
18
+ windStrength?: number | undefined;
19
+ showGears?: boolean | undefined;
20
+ showChain?: boolean | undefined;
21
+ }, {
22
+ [evt: string]: CustomEvent<any>;
23
+ }, {}, {}, string>;
24
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
25
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
26
+ $$bindings?: Bindings;
27
+ } & Exports;
28
+ (internal: unknown, props: Props & {
29
+ $$events?: Events;
30
+ $$slots?: Slots;
31
+ }): Exports & {
32
+ $set?: any;
33
+ $on?: any;
34
+ };
35
+ z_$$bindings?: Bindings;
36
+ }
@@ -0,0 +1,188 @@
1
+ <script>
2
+ import { onMount, onDestroy } from 'svelte';
3
+ import { gearSVGDark, gearSVGLight } from './AssetGear.js';
4
+
5
+ /**
6
+ * Primary gear size in pixels
7
+ * @type {number}
8
+ */
9
+ export let primarySize = 255;
10
+
11
+ /**
12
+ * Secondary gear size ratio relative to primary (0.0 - 1.0)
13
+ * @type {number}
14
+ */
15
+ export let secondaryRatio = 0.45;
16
+
17
+ /**
18
+ * Rotation speed in degrees per second
19
+ * @type {number}
20
+ */
21
+ export let speed = 10;
22
+
23
+ /**
24
+ * X offset adjustment for gear teeth meshing (in pixels)
25
+ * @type {number}
26
+ */
27
+ export let meshOffsetX = 15;
28
+
29
+ /**
30
+ * Y offset adjustment for gear teeth meshing (in pixels)
31
+ * @type {number}
32
+ */
33
+ export let meshOffsetY = 15;
34
+
35
+ /**
36
+ * Initial rotation offset for secondary gear (in degrees)
37
+ * Use this to align teeth when gears start
38
+ * @type {number}
39
+ */
40
+ export let secondaryRotationOffset = 0;
41
+
42
+
43
+ /**
44
+ * Opacity
45
+ * @type {number}
46
+ */
47
+ export let opacity = 0.3;
48
+
49
+ let primaryRotation = 0;
50
+ let secondaryRotation = secondaryRotationOffset;
51
+
52
+ /** @type {number | null} */
53
+ let animationFrameId = null;
54
+ let lastTime = 0;
55
+
56
+ $: secondarySize = primarySize * secondaryRatio;
57
+
58
+ // Position secondary gear at top-left of primary, with mesh offset
59
+ // The gears should appear to mesh together
60
+ $: secondaryX = -(secondarySize * 0.35) + meshOffsetX;
61
+ $: secondaryY = -(secondarySize * 0.35) + meshOffsetY;
62
+
63
+ // Calculate container size to fit both gears
64
+ $: minX = Math.min(0, secondaryX);
65
+ $: minY = Math.min(0, secondaryY);
66
+ $: maxX = Math.max(primarySize, secondaryX + secondarySize);
67
+ $: maxY = Math.max(primarySize, secondaryY + secondarySize);
68
+ $: containerWidth = maxX - minX;
69
+ $: containerHeight = maxY - minY;
70
+ $: offsetX = -minX;
71
+ $: offsetY = -minY;
72
+
73
+ // Secondary gear needs to spin faster inversely proportional to size ratio
74
+ // to simulate proper gear meshing
75
+ $: secondarySpeedMultiplier = 1 / secondaryRatio;
76
+
77
+ /**
78
+ * @param {number} currentTime
79
+ */
80
+ function animate(currentTime) {
81
+ if (lastTime === 0) {
82
+ lastTime = currentTime;
83
+ }
84
+
85
+ const deltaTime = (currentTime - lastTime) / 1000;
86
+ lastTime = currentTime;
87
+
88
+ // Primary gear rotates clockwise
89
+ primaryRotation += speed * deltaTime;
90
+
91
+ // Secondary gear rotates counter-clockwise at proportional speed
92
+ secondaryRotation -= speed * secondarySpeedMultiplier * deltaTime;
93
+
94
+ // Keep rotations in reasonable range
95
+ if (primaryRotation >= 360) primaryRotation -= 360;
96
+ if (secondaryRotation <= -360) secondaryRotation += 360;
97
+
98
+ animationFrameId = requestAnimationFrame(animate);
99
+ }
100
+
101
+ onMount(() => {
102
+ animationFrameId = requestAnimationFrame(animate);
103
+ });
104
+
105
+ onDestroy(() => {
106
+ if (animationFrameId !== null) {
107
+ cancelAnimationFrame(animationFrameId);
108
+ }
109
+ });
110
+
111
+ // Calculate shaft positions (centers of gears)
112
+ $: primaryCenterX = offsetX + primarySize / 2;
113
+ $: primaryCenterY = offsetY + primarySize / 2;
114
+ $: secondaryCenterX = offsetX + secondaryX + secondarySize / 2;
115
+ $: secondaryCenterY = offsetY + secondaryY + secondarySize / 2;
116
+ </script>
117
+
118
+ <div class="gears-container" style="--container-width: {containerWidth}px; --container-height: {containerHeight}px;">
119
+ <!-- Shaft connecting the gears -->
120
+ <svg class="shaft" width="100%" height="100%" style="position: absolute; top: 0; left: 0;">
121
+ <line
122
+ x1={primaryCenterX}
123
+ y1={primaryCenterY}
124
+ x2={secondaryCenterX}
125
+ y2={secondaryCenterY}
126
+ stroke="#0f0a10"
127
+ stroke-width="44"
128
+ stroke-linecap="round"
129
+ />
130
+ </svg>
131
+
132
+ <!-- Primary Gear (255x255) -->
133
+ <div
134
+ class="gear primary-gear"
135
+ style="transform: translate({offsetX}px, {offsetY}px) rotate({primaryRotation}deg); opacity: {opacity}; width: {primarySize}px; height: {primarySize}px;"
136
+ >
137
+ {@html gearSVGLight}
138
+ </div>
139
+
140
+ <!-- Secondary Gear (smaller, top-left) -->
141
+ <div
142
+ class="gear secondary-gear"
143
+ style="
144
+ transform: translate({offsetX + secondaryX}px, {offsetY + secondaryY}px) rotate({secondaryRotation}deg);
145
+ opacity: {opacity};
146
+ width: {secondarySize}px;
147
+ height: {secondarySize}px;
148
+ "
149
+ >
150
+ {@html gearSVGDark}
151
+ </div>
152
+ </div>
153
+
154
+ <style>
155
+ .gears-container {
156
+ position: relative;
157
+ width: var(--container-width);
158
+ height: var(--container-height);
159
+ }
160
+
161
+ .shaft {
162
+ z-index: 0;
163
+ pointer-events: none;
164
+ }
165
+
166
+ .gear {
167
+ position: absolute;
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+ z-index: 1;
172
+ }
173
+
174
+ .gear :global(svg) {
175
+ width: 100%;
176
+ height: 100%;
177
+ }
178
+
179
+ .primary-gear {
180
+ top: 0;
181
+ left: 0;
182
+ }
183
+
184
+ .secondary-gear {
185
+ top: 0;
186
+ left: 0;
187
+ }
188
+ </style>
@@ -0,0 +1,38 @@
1
+ export default BGGears;
2
+ type BGGears = SvelteComponent<{
3
+ primarySize?: number | undefined;
4
+ secondaryRatio?: number | undefined;
5
+ speed?: number | undefined;
6
+ meshOffsetX?: number | undefined;
7
+ meshOffsetY?: number | undefined;
8
+ secondaryRotationOffset?: number | undefined;
9
+ opacity?: number | undefined;
10
+ }, {
11
+ [evt: string]: CustomEvent<any>;
12
+ }, {}> & {
13
+ $$bindings?: string | undefined;
14
+ };
15
+ declare const BGGears: $$__sveltets_2_IsomorphicComponent<{
16
+ primarySize?: number | undefined;
17
+ secondaryRatio?: number | undefined;
18
+ speed?: number | undefined;
19
+ meshOffsetX?: number | undefined;
20
+ meshOffsetY?: number | undefined;
21
+ secondaryRotationOffset?: number | undefined;
22
+ opacity?: number | undefined;
23
+ }, {
24
+ [evt: string]: CustomEvent<any>;
25
+ }, {}, {}, string>;
26
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
27
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
28
+ $$bindings?: Bindings;
29
+ } & Exports;
30
+ (internal: unknown, props: Props & {
31
+ $$events?: Events;
32
+ $$slots?: Slots;
33
+ }): Exports & {
34
+ $set?: any;
35
+ $on?: any;
36
+ };
37
+ z_$$bindings?: Bindings;
38
+ }
@@ -0,0 +1,32 @@
1
+ <script>
2
+ import BaseText from '../Base/BaseText.svelte';
3
+
4
+ export let title = '';
5
+ export let subtitle = '';
6
+ </script>
7
+
8
+ <div class="text-header">
9
+ {#if title}
10
+ <div class="title">
11
+ <BaseText variant="title">{title}</BaseText>
12
+ </div>
13
+ {/if}
14
+ {#if subtitle}
15
+ <div class="subtitle">
16
+ <BaseText variant="content">{subtitle}</BaseText>
17
+ </div>
18
+ {/if}
19
+ </div>
20
+
21
+ <style>
22
+ .text-header {
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: 10px;
26
+ }
27
+
28
+ .title,
29
+ .subtitle {
30
+ margin: 0;
31
+ }
32
+ </style>
@@ -0,0 +1,28 @@
1
+ export default TextHeader;
2
+ type TextHeader = SvelteComponent<{
3
+ title?: string | undefined;
4
+ subtitle?: string | undefined;
5
+ }, {
6
+ [evt: string]: CustomEvent<any>;
7
+ }, {}> & {
8
+ $$bindings?: string | undefined;
9
+ };
10
+ declare const TextHeader: $$__sveltets_2_IsomorphicComponent<{
11
+ title?: string | undefined;
12
+ subtitle?: string | undefined;
13
+ }, {
14
+ [evt: string]: CustomEvent<any>;
15
+ }, {}, {}, string>;
16
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
17
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
18
+ $$bindings?: Bindings;
19
+ } & Exports;
20
+ (internal: unknown, props: Props & {
21
+ $$events?: Events;
22
+ $$slots?: Slots;
23
+ }): Exports & {
24
+ $set?: any;
25
+ $on?: any;
26
+ };
27
+ z_$$bindings?: Bindings;
28
+ }
@@ -0,0 +1,11 @@
1
+ export namespace icons {
2
+ let arrow: string;
3
+ let folder: string;
4
+ let icon_expand: string;
5
+ let cross: string;
6
+ let pen: string;
7
+ let check: string;
8
+ let crossb: string;
9
+ let help: string;
10
+ let any_ai: string;
11
+ }