@heyramzi/ui 2.9.0 → 2.10.1

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 (313) hide show
  1. package/dist/agents/helpers.js +52 -0
  2. package/dist/agents/index.js +3 -0
  3. package/dist/agents/page-state.js +65 -0
  4. package/dist/agents/types.js +1 -0
  5. package/dist/agents/vendor/color.js +149 -0
  6. package/dist/agents/vendor/draw.js +548 -0
  7. package/dist/agents/vendor/engine.js +632 -0
  8. package/dist/agents/vendor/mesh.js +727 -0
  9. package/dist/agents/vendor/plastic.js +3273 -0
  10. package/dist/agents/vendor/presets.js +171 -0
  11. package/dist/agents/vendor/shapes.js +24 -0
  12. package/dist/agents/vendor/ticker.js +56 -0
  13. package/dist/agents/vendor/types.js +0 -0
  14. package/dist/agents/vendor/wear.js +1525 -0
  15. package/dist/ai/ai-button/index.js +2 -0
  16. package/dist/ai/confirmation/confirmation-context.svelte.js +12 -0
  17. package/dist/ai/confirmation/index.js +9 -0
  18. package/dist/ai/generation-progress/index.js +2 -0
  19. package/dist/ai/index.js +11 -0
  20. package/dist/ai/loading-state/index.js +3 -0
  21. package/dist/ai/prompt-input/index.js +6 -0
  22. package/dist/ai/reasoning/index.js +4 -0
  23. package/dist/ai/reasoning/reasoning-context.svelte.js +12 -0
  24. package/dist/ai/response/index.js +3 -0
  25. package/dist/ai/suggestion/index.js +3 -0
  26. package/dist/ai/thinking-dots/index.js +3 -0
  27. package/dist/ai/typing-dots/index.js +2 -0
  28. package/dist/ai/voice-waveform/index.js +3 -0
  29. package/dist/animations/text-swap.js +30 -0
  30. package/dist/brand/index.js +65 -0
  31. package/dist/canvas/card/resize.js +10 -0
  32. package/dist/canvas/edges/edge-path.js +284 -0
  33. package/dist/canvas/editor/context-menu.js +42 -0
  34. package/dist/canvas/editor/dispatch.svelte.js +157 -0
  35. package/dist/canvas/editor/editor-context.js +8 -0
  36. package/dist/canvas/editor/editor-mode.js +0 -0
  37. package/dist/canvas/editor/frame.js +87 -0
  38. package/dist/canvas/editor/hand-context.js +8 -0
  39. package/dist/canvas/editor/history-core.js +221 -0
  40. package/dist/canvas/editor/keymap.js +193 -0
  41. package/dist/canvas/editor/layout-actions.js +170 -0
  42. package/dist/canvas/editor/lock.js +65 -0
  43. package/dist/canvas/editor/rebase.js +279 -0
  44. package/dist/canvas/editor/style.js +174 -0
  45. package/dist/canvas/editor/text-field-context.js +8 -0
  46. package/dist/canvas/editor/z-order.js +82 -0
  47. package/dist/canvas/headless/alignment.js +20 -0
  48. package/dist/canvas/headless/break-apart-find.js +324 -0
  49. package/dist/canvas/headless/break-apart-pieces.js +74 -0
  50. package/dist/canvas/headless/break-apart-plan.js +378 -0
  51. package/dist/canvas/headless/break-apart-style.js +93 -0
  52. package/dist/canvas/headless/break-apart.js +206 -0
  53. package/dist/canvas/headless/canvas-cleanup.js +70 -0
  54. package/dist/canvas/headless/edge-anchors.js +134 -0
  55. package/dist/canvas/headless/edge-memo.js +28 -0
  56. package/dist/canvas/headless/edge-serialization.js +31 -0
  57. package/dist/canvas/headless/figure-geometry.js +331 -0
  58. package/dist/canvas/headless/fit-viewport.js +82 -0
  59. package/dist/canvas/headless/grid.js +96 -0
  60. package/dist/canvas/headless/icon-node.js +45 -0
  61. package/dist/canvas/headless/index.js +1 -0
  62. package/dist/canvas/headless/linkify.js +25 -0
  63. package/dist/canvas/headless/pen-marks.js +115 -0
  64. package/dist/canvas/headless/sketch.js +250 -0
  65. package/dist/canvas/headless/snap-guides.js +100 -0
  66. package/dist/canvas/headless/svg-figure.js +137 -0
  67. package/dist/canvas/headless/table-layout.js +161 -0
  68. package/dist/canvas/index.js +25 -0
  69. package/dist/canvas/lod/lod-mode.svelte.js +22 -0
  70. package/dist/canvas/lod/render-all.svelte.js +45 -0
  71. package/dist/canvas/ops/arrange.js +83 -0
  72. package/dist/canvas/ops/ops.js +318 -0
  73. package/dist/canvas/pen/colors.js +41 -0
  74. package/dist/canvas/pen/eraser.js +35 -0
  75. package/dist/canvas/pen/geometry.js +143 -0
  76. package/dist/canvas/pen/index.js +9 -0
  77. package/dist/canvas/pen/ops.js +15 -0
  78. package/dist/canvas/pen/pen-session.js +171 -0
  79. package/dist/canvas/pen/plugin.js +129 -0
  80. package/dist/canvas/pen/shapes.js +80 -0
  81. package/dist/canvas/pen/stroke-path.js +37 -0
  82. package/dist/canvas/pen/types.js +30 -0
  83. package/dist/canvas/pen/ui.js +20 -0
  84. package/dist/canvas/plugin.js +51 -0
  85. package/dist/canvas/screen/glyphs.js +24 -0
  86. package/dist/canvas/screen/labels.js +24 -0
  87. package/dist/canvas/screen/parts.js +140 -0
  88. package/dist/canvas/screen/plugin.js +71 -0
  89. package/dist/canvas/screen/types.js +44 -0
  90. package/dist/canvas/screen/ui.js +13 -0
  91. package/dist/canvas/test-utils.js +18 -0
  92. package/dist/canvas/types.js +0 -0
  93. package/dist/canvas/ui/forward-wheel.js +27 -0
  94. package/dist/canvas/ui/icons.js +133 -0
  95. package/dist/canvas/ui/place-panel.js +57 -0
  96. package/dist/canvas/ui/shortcut-tip.js +18 -0
  97. package/dist/canvas/ui/tools.js +411 -0
  98. package/dist/charts/dashboard/chart.js +1 -0
  99. package/dist/charts/dashboard/data-table.js +7 -0
  100. package/dist/charts/dashboard/index.js +13 -0
  101. package/dist/charts/dashboard/windows.js +5 -0
  102. package/dist/charts/edge-fade.js +7 -0
  103. package/dist/charts/hover-band.js +13 -0
  104. package/dist/charts/index.js +19 -0
  105. package/dist/charts/motion.js +15 -0
  106. package/dist/charts/primitives/chart-utils.js +22 -0
  107. package/dist/charts/primitives/index.js +4 -0
  108. package/dist/components/copy/clipboard.js +38 -0
  109. package/dist/components/copy/copied.svelte.js +26 -0
  110. package/dist/components/copy/index.js +3 -0
  111. package/dist/components/data-table/data-table.js +55 -0
  112. package/dist/components/data-table/index.js +7 -0
  113. package/dist/components/docs/index.js +3 -0
  114. package/dist/components/docs/scroll-spy.svelte.js +71 -0
  115. package/dist/components/field-row/index.js +1 -0
  116. package/dist/components/hold-to-confirm/index.js +1 -0
  117. package/dist/components/icon/index.js +1 -0
  118. package/dist/components/language-flag/index.js +1 -0
  119. package/dist/components/list-page/filter-section.js +4 -0
  120. package/dist/components/list-page/index.js +25 -0
  121. package/dist/components/list-page/list-table.js +5 -0
  122. package/dist/components/list-page/queue-rail.js +3 -0
  123. package/dist/components/list-page/section-host.js +8 -0
  124. package/dist/components/list-page/step.js +5 -0
  125. package/dist/components/list-page/types.js +0 -0
  126. package/dist/components/locale-switch/index.js +1 -0
  127. package/dist/components/mark/index.js +1 -0
  128. package/dist/components/open-in/index.js +1 -0
  129. package/dist/components/picker/index.js +3 -0
  130. package/dist/components/picker/trigger.js +33 -0
  131. package/dist/components/picker/types.js +0 -0
  132. package/dist/components/section-card/index.js +1 -0
  133. package/dist/components/section-header/index.js +2 -0
  134. package/dist/components/segmented/collapse.js +32 -0
  135. package/dist/components/segmented/index.js +8 -0
  136. package/dist/components/segmented/segmented.js +50 -0
  137. package/dist/components/star-rating-input/index.js +2 -0
  138. package/dist/components/svg/index.js +1 -0
  139. package/dist/components/table-view/index.js +1 -0
  140. package/dist/components/table-view/types.js +0 -0
  141. package/dist/components/tags-input/index.js +2 -0
  142. package/dist/components/tags-input/tags.js +90 -0
  143. package/dist/components/theme/index.js +3 -0
  144. package/dist/components/toolbar/index.js +3 -0
  145. package/dist/components/toolbar/toolbar-trigger.js +4 -0
  146. package/dist/editor/anchors.js +17 -0
  147. package/dist/editor/block-id.js +62 -0
  148. package/dist/editor/block-ops.js +105 -0
  149. package/dist/editor/doc-blocks.js +181 -0
  150. package/dist/editor/extensions.js +200 -0
  151. package/dist/editor/index.js +4 -0
  152. package/dist/editor/markdown-test-helpers.js +6 -0
  153. package/dist/editor/markdown.js +486 -0
  154. package/dist/editor/serializer.js +268 -0
  155. package/dist/editor/slash-items.js +104 -0
  156. package/dist/editor/youtube-url.js +27 -0
  157. package/dist/effects/animated-beam/index.js +1 -0
  158. package/dist/effects/animated-beam/path-calculator.svelte.js +42 -0
  159. package/dist/effects/animated-beam/types.js +0 -0
  160. package/dist/effects/border-beam/css.js +420 -0
  161. package/dist/effects/border-beam/presets.js +1792 -0
  162. package/dist/effects/border-beam/register-properties.js +39 -0
  163. package/dist/effects/border-beam/types.js +0 -0
  164. package/dist/effects/image-comparison/compare.js +4 -0
  165. package/dist/effects/image-reveal/index.js +1 -0
  166. package/dist/effects/image-reveal/types.js +0 -0
  167. package/dist/effects/magnetic/magnetic.js +54 -0
  168. package/dist/effects/reveal/index.js +4 -0
  169. package/dist/effects/reveal/observe.js +43 -0
  170. package/dist/effects/reveal/types.js +0 -0
  171. package/dist/effects/shader-gradient/color.js +34 -0
  172. package/dist/effects/shader-gradient/index.js +1 -0
  173. package/dist/effects/shader-gradient/renderer.js +320 -0
  174. package/dist/effects/shader-gradient/shaders.js +280 -0
  175. package/dist/effects/shader-gradient/types.js +0 -0
  176. package/dist/icons/apple-symbol-exports.js +126 -0
  177. package/dist/icons/sf-symbols.js +465 -0
  178. package/dist/icons/trades.js +34 -0
  179. package/dist/inbox/index.js +4 -0
  180. package/dist/inbox/logic.js +156 -0
  181. package/dist/inbox/types.js +46 -0
  182. package/dist/index.js +18 -0
  183. package/dist/lib/arrive.js +13 -0
  184. package/dist/lib/icon-types.js +0 -0
  185. package/dist/lib/initials.js +17 -0
  186. package/dist/lib/layout.js +1 -0
  187. package/dist/lib/panel.js +3 -0
  188. package/dist/lib/result.js +26 -0
  189. package/dist/lib/sliding-pill.js +45 -0
  190. package/dist/lib/theme-transition.js +53 -0
  191. package/dist/lib/tone.js +32 -0
  192. package/dist/lib/utils.js +5 -0
  193. package/dist/onboarding/define-tours.js +28 -0
  194. package/dist/onboarding/index.js +4 -0
  195. package/dist/onboarding/onboarding.svelte.js +15 -0
  196. package/dist/onboarding/pick.js +16 -0
  197. package/dist/onboarding/stores.js +50 -0
  198. package/dist/onboarding/types.js +1 -0
  199. package/dist/onboarding/wait.js +25 -0
  200. package/dist/panel/index.js +1 -0
  201. package/dist/panel/side-panel-types.js +0 -0
  202. package/dist/record/demo-data.js +512 -0
  203. package/dist/record/fields.js +148 -0
  204. package/dist/record/format.js +97 -0
  205. package/dist/record/gutter.js +1 -0
  206. package/dist/record/index.js +15 -0
  207. package/dist/record/kinds.js +110 -0
  208. package/dist/record/logic.js +255 -0
  209. package/dist/record/types.js +52 -0
  210. package/dist/shadcn/accordion/index.js +5 -0
  211. package/dist/shadcn/alert/index.js +5 -0
  212. package/dist/shadcn/alert-dialog/index.js +12 -0
  213. package/dist/shadcn/attachment/index.js +10 -0
  214. package/dist/shadcn/avatar/index.js +7 -0
  215. package/dist/shadcn/badge/index.js +2 -0
  216. package/dist/shadcn/breadcrumb/index.js +8 -0
  217. package/dist/shadcn/bubble/index.js +5 -0
  218. package/dist/shadcn/button/index.js +2 -0
  219. package/dist/shadcn/calendar/index.js +19 -0
  220. package/dist/shadcn/card/index.js +8 -0
  221. package/dist/shadcn/checkbox/index.js +2 -0
  222. package/dist/shadcn/code-block/index.js +9 -0
  223. package/dist/shadcn/collapsible/index.js +4 -0
  224. package/dist/shadcn/command/index.js +13 -0
  225. package/dist/shadcn/context-menu/index.js +17 -0
  226. package/dist/shadcn/dialog/index.js +11 -0
  227. package/dist/shadcn/dropdown-menu/index.js +19 -0
  228. package/dist/shadcn/dropdown-menu/menu-item.js +23 -0
  229. package/dist/shadcn/empty/index.js +7 -0
  230. package/dist/shadcn/field/index.js +12 -0
  231. package/dist/shadcn/hooks/highlighter.js +92 -0
  232. package/dist/shadcn/hooks/is-mobile.svelte.js +7 -0
  233. package/dist/shadcn/hooks/use-highlighted-code.svelte.js +65 -0
  234. package/dist/shadcn/hover-card/index.js +5 -0
  235. package/dist/shadcn/input/index.js +3 -0
  236. package/dist/shadcn/input-otp/index.js +5 -0
  237. package/dist/shadcn/kbd/index.js +3 -0
  238. package/dist/shadcn/label/index.js +2 -0
  239. package/dist/shadcn/marker/index.js +4 -0
  240. package/dist/shadcn/message/index.js +7 -0
  241. package/dist/shadcn/message-scroller/index.js +8 -0
  242. package/dist/shadcn/popover/index.js +9 -0
  243. package/dist/shadcn/progress/index.js +2 -0
  244. package/dist/shadcn/progress/tone.js +11 -0
  245. package/dist/shadcn/radio-group/index.js +3 -0
  246. package/dist/shadcn/scroll-area/index.js +3 -0
  247. package/dist/shadcn/select/index.js +12 -0
  248. package/dist/shadcn/separator/index.js +2 -0
  249. package/dist/shadcn/sheet/index.js +11 -0
  250. package/dist/shadcn/sidebar/constants.js +6 -0
  251. package/dist/shadcn/sidebar/context.svelte.js +38 -0
  252. package/dist/shadcn/sidebar/index.js +25 -0
  253. package/dist/shadcn/skeleton/index.js +2 -0
  254. package/dist/shadcn/slider/index.js +2 -0
  255. package/dist/shadcn/sonner/index.js +1 -0
  256. package/dist/shadcn/spinner/index.js +1 -0
  257. package/dist/shadcn/switch/index.js +2 -0
  258. package/dist/shadcn/table/index.js +9 -0
  259. package/dist/shadcn/tabs/index.js +5 -0
  260. package/dist/shadcn/textarea/index.js +2 -0
  261. package/dist/shadcn/toggle/index.js +3 -0
  262. package/dist/shadcn/toggle-group/index.js +3 -0
  263. package/dist/shadcn/tooltip/context.js +8 -0
  264. package/dist/shadcn/tooltip/index.js +6 -0
  265. package/dist/shadcn/trace/index.js +9 -0
  266. package/dist/slides/bridges.js +66 -0
  267. package/dist/slides/deck-controller.svelte.js +221 -0
  268. package/dist/slides/export/capture.js +81 -0
  269. package/dist/slides/export/ffmpeg.js +85 -0
  270. package/dist/slides/export/index.js +4 -0
  271. package/dist/slides/export/launch.js +8 -0
  272. package/dist/slides/export/pdf.js +78 -0
  273. package/dist/slides/export/types.js +0 -0
  274. package/dist/slides/index.js +7 -0
  275. package/dist/slides/labels.js +26 -0
  276. package/dist/slides/layout.js +47 -0
  277. package/dist/slides/model.js +9 -0
  278. package/dist/slides/navigation.js +89 -0
  279. package/dist/slides/types.js +6 -0
  280. package/dist/status/define-statuses.js +16 -0
  281. package/dist/status/index.js +4 -0
  282. package/dist/status/status-types.js +0 -0
  283. package/dist/test-setup.js +26 -0
  284. package/dist/thread/index.js +3 -0
  285. package/dist/thread/logic.js +94 -0
  286. package/dist/thread/types.js +23 -0
  287. package/dist/work/board-order.js +109 -0
  288. package/dist/work/dates.js +19 -0
  289. package/dist/work/detail/detail-types.js +20 -0
  290. package/dist/work/docs/edited.js +39 -0
  291. package/dist/work/docs/index.js +7 -0
  292. package/dist/work/docs/labels.js +38 -0
  293. package/dist/work/docs/menu.js +121 -0
  294. package/dist/work/docs/outline.js +39 -0
  295. package/dist/work/gantt/logic.js +260 -0
  296. package/dist/work/inbox/inbox-logic.js +94 -0
  297. package/dist/work/inbox/inbox-statuses.js +86 -0
  298. package/dist/work/inbox/inbox-types.js +0 -0
  299. package/dist/work/inbox/index.js +1 -0
  300. package/dist/work/index.js +21 -0
  301. package/dist/work/kanban-drag.js +25 -0
  302. package/dist/work/kanban-types.js +0 -0
  303. package/dist/work/presets/sales.js +35 -0
  304. package/dist/work/reorder.js +10 -0
  305. package/dist/work/task-types.js +0 -0
  306. package/dist/work/time/duration.js +60 -0
  307. package/dist/work/time/time-types.js +25 -0
  308. package/dist/work/use-kanban-dnd.svelte.js +128 -0
  309. package/package.json +45 -3
  310. package/src/components/toolbar/toolbar-trigger.ts +8 -2
  311. package/src/record/demo-data.ts +4 -4
  312. package/src/record/record-demo.svelte +2 -2
  313. package/src/status/status-dot.svelte +0 -2
@@ -0,0 +1,1792 @@
1
+ export const sizePresets = {
2
+ sm: {
3
+ borderRadius: 18,
4
+ borderWidth: 1,
5
+ width: 70,
6
+ height: 36
7
+ },
8
+ md: {
9
+ borderRadius: 16,
10
+ borderWidth: 1
11
+ },
12
+ line: {
13
+ borderRadius: 16,
14
+ borderWidth: 1
15
+ }
16
+ };
17
+ export const sizeThemePresets = {
18
+ sm: {
19
+ dark: {
20
+ strokeOpacity: 0.48,
21
+ innerOpacity: 0.7,
22
+ bloomOpacity: 0.8,
23
+ innerShadow: "rgba(255, 255, 255, 0.3)",
24
+ saturation: 1.2
25
+ },
26
+ light: {
27
+ strokeOpacity: 0.33,
28
+ innerOpacity: 0.46,
29
+ bloomOpacity: 0.54,
30
+ innerShadow: "rgba(0, 0, 0, 0.14)",
31
+ saturation: 0.96
32
+ }
33
+ },
34
+ md: {
35
+ dark: {
36
+ strokeOpacity: 0.48,
37
+ innerOpacity: 0.7,
38
+ bloomOpacity: 0.8,
39
+ innerShadow: "rgba(255, 255, 255, 0.27)",
40
+ saturation: 1.2
41
+ },
42
+ light: {
43
+ strokeOpacity: 0.33,
44
+ innerOpacity: 0.46,
45
+ bloomOpacity: 0.54,
46
+ innerShadow: "rgba(0, 0, 0, 0.14)",
47
+ saturation: 0.96
48
+ }
49
+ },
50
+ line: {
51
+ dark: {
52
+ strokeOpacity: 0.72,
53
+ innerOpacity: 0.7,
54
+ bloomOpacity: 0.8,
55
+ innerShadow: "rgba(255, 255, 255, 0.1)",
56
+ saturation: 1.2
57
+ },
58
+ light: {
59
+ strokeOpacity: 0.72,
60
+ innerOpacity: 0.7,
61
+ bloomOpacity: 0.8,
62
+ innerShadow: "rgba(0, 0, 0, 0.14)",
63
+ saturation: 1.2
64
+ }
65
+ }
66
+ };
67
+ export const themeColors = {
68
+ dark: {
69
+ ...sizeThemePresets.md.dark
70
+ },
71
+ light: {
72
+ ...sizeThemePresets.md.light
73
+ }
74
+ };
75
+ const borderColors = {
76
+ colorful: {
77
+ border: [
78
+ {
79
+ color: "rgb(255, 50, 100)",
80
+ pos: "33% -7.4%",
81
+ size: "70px 40px"
82
+ },
83
+ {
84
+ color: "rgb(40, 140, 255)",
85
+ pos: "12% -5%",
86
+ size: "60px 35px"
87
+ },
88
+ {
89
+ color: "rgb(50, 200, 80)",
90
+ pos: "2.1% 68.3%",
91
+ size: "40px 70px"
92
+ },
93
+ {
94
+ color: "rgb(30, 185, 170)",
95
+ pos: "2.1% 68.3%",
96
+ size: "20px 35px"
97
+ },
98
+ {
99
+ color: "rgb(100, 70, 255)",
100
+ pos: "74.4% 100%",
101
+ size: "180px 32px"
102
+ },
103
+ {
104
+ color: "rgb(40, 140, 255)",
105
+ pos: "55% 100%",
106
+ size: "85px 26px"
107
+ },
108
+ {
109
+ color: "rgb(255, 120, 40)",
110
+ pos: "93.9% 0%",
111
+ size: "74px 32px"
112
+ },
113
+ {
114
+ color: "rgb(240, 50, 180)",
115
+ pos: "100% 27.1%",
116
+ size: "26px 42px"
117
+ },
118
+ {
119
+ color: "rgb(180, 40, 240)",
120
+ pos: "100% 27.1%",
121
+ size: "52px 48px"
122
+ }
123
+ ],
124
+ spike: {
125
+ primary: "rgb(255, 60, 80)",
126
+ secondary: "rgba(40, 190, 180, 0.98)"
127
+ },
128
+ spikeLt: {
129
+ primary: "rgb(200, 30, 60)",
130
+ secondary: "rgb(20, 150, 140)"
131
+ }
132
+ },
133
+ mono: {
134
+ border: [
135
+ {
136
+ color: "rgb(180, 180, 180)",
137
+ pos: "33% -7.4%",
138
+ size: "70px 40px"
139
+ },
140
+ {
141
+ color: "rgb(140, 140, 140)",
142
+ pos: "12% -5%",
143
+ size: "60px 35px"
144
+ },
145
+ {
146
+ color: "rgb(160, 160, 160)",
147
+ pos: "2.1% 68.3%",
148
+ size: "40px 70px"
149
+ },
150
+ {
151
+ color: "rgb(130, 130, 130)",
152
+ pos: "2.1% 68.3%",
153
+ size: "20px 35px"
154
+ },
155
+ {
156
+ color: "rgb(170, 170, 170)",
157
+ pos: "74.4% 100%",
158
+ size: "180px 32px"
159
+ },
160
+ {
161
+ color: "rgb(150, 150, 150)",
162
+ pos: "55% 100%",
163
+ size: "85px 26px"
164
+ },
165
+ {
166
+ color: "rgb(190, 190, 190)",
167
+ pos: "93.9% 0%",
168
+ size: "74px 32px"
169
+ },
170
+ {
171
+ color: "rgb(145, 145, 145)",
172
+ pos: "100% 27.1%",
173
+ size: "26px 42px"
174
+ },
175
+ {
176
+ color: "rgb(165, 165, 165)",
177
+ pos: "100% 27.1%",
178
+ size: "52px 48px"
179
+ }
180
+ ],
181
+ spike: {
182
+ primary: "rgb(200, 200, 200)",
183
+ secondary: "rgb(170, 170, 170)"
184
+ },
185
+ spikeLt: {
186
+ primary: "rgb(80, 80, 80)",
187
+ secondary: "rgb(120, 120, 120)"
188
+ }
189
+ },
190
+ ocean: {
191
+ border: [
192
+ {
193
+ color: "rgb(100, 80, 220)",
194
+ pos: "33% -7.4%",
195
+ size: "70px 40px"
196
+ },
197
+ {
198
+ color: "rgb(60, 120, 255)",
199
+ pos: "12% -5%",
200
+ size: "60px 35px"
201
+ },
202
+ {
203
+ color: "rgb(80, 100, 200)",
204
+ pos: "2.1% 68.3%",
205
+ size: "40px 70px"
206
+ },
207
+ {
208
+ color: "rgb(50, 140, 220)",
209
+ pos: "2.1% 68.3%",
210
+ size: "20px 35px"
211
+ },
212
+ {
213
+ color: "rgb(120, 80, 255)",
214
+ pos: "74.4% 100%",
215
+ size: "180px 32px"
216
+ },
217
+ {
218
+ color: "rgb(70, 130, 255)",
219
+ pos: "55% 100%",
220
+ size: "85px 26px"
221
+ },
222
+ {
223
+ color: "rgb(140, 100, 240)",
224
+ pos: "93.9% 0%",
225
+ size: "74px 32px"
226
+ },
227
+ {
228
+ color: "rgb(90, 110, 230)",
229
+ pos: "100% 27.1%",
230
+ size: "26px 42px"
231
+ },
232
+ {
233
+ color: "rgb(130, 70, 255)",
234
+ pos: "100% 27.1%",
235
+ size: "52px 48px"
236
+ }
237
+ ],
238
+ spike: {
239
+ primary: "rgb(100, 120, 255)",
240
+ secondary: "rgba(130, 100, 220, 0.98)"
241
+ },
242
+ spikeLt: {
243
+ primary: "rgb(60, 60, 180)",
244
+ secondary: "rgb(80, 100, 200)"
245
+ }
246
+ },
247
+ sunset: {
248
+ border: [
249
+ {
250
+ color: "rgb(255, 80, 50)",
251
+ pos: "33% -7.4%",
252
+ size: "70px 40px"
253
+ },
254
+ {
255
+ color: "rgb(255, 160, 40)",
256
+ pos: "12% -5%",
257
+ size: "60px 35px"
258
+ },
259
+ {
260
+ color: "rgb(255, 120, 60)",
261
+ pos: "2.1% 68.3%",
262
+ size: "40px 70px"
263
+ },
264
+ {
265
+ color: "rgb(255, 200, 50)",
266
+ pos: "2.1% 68.3%",
267
+ size: "20px 35px"
268
+ },
269
+ {
270
+ color: "rgb(255, 100, 80)",
271
+ pos: "74.4% 100%",
272
+ size: "180px 32px"
273
+ },
274
+ {
275
+ color: "rgb(255, 180, 60)",
276
+ pos: "55% 100%",
277
+ size: "85px 26px"
278
+ },
279
+ {
280
+ color: "rgb(255, 60, 60)",
281
+ pos: "93.9% 0%",
282
+ size: "74px 32px"
283
+ },
284
+ {
285
+ color: "rgb(255, 140, 50)",
286
+ pos: "100% 27.1%",
287
+ size: "26px 42px"
288
+ },
289
+ {
290
+ color: "rgb(255, 90, 70)",
291
+ pos: "100% 27.1%",
292
+ size: "52px 48px"
293
+ }
294
+ ],
295
+ spike: {
296
+ primary: "rgb(255, 140, 80)",
297
+ secondary: "rgba(255, 100, 60, 0.98)"
298
+ },
299
+ spikeLt: {
300
+ primary: "rgb(200, 80, 40)",
301
+ secondary: "rgb(220, 120, 30)"
302
+ }
303
+ }
304
+ };
305
+ const smGradients = {
306
+ colorful: {
307
+ border: [
308
+ {
309
+ color: "rgb(50, 200, 80)",
310
+ pos: "2% 68%",
311
+ size: "9px 18px"
312
+ },
313
+ {
314
+ color: "rgb(30, 185, 170)",
315
+ pos: "2% 68%",
316
+ size: "4px 8px"
317
+ },
318
+ {
319
+ color: "rgb(255, 120, 40)",
320
+ pos: "72% -3%",
321
+ size: "59px 9px"
322
+ },
323
+ {
324
+ color: "rgb(100, 70, 255)",
325
+ pos: "74% 100%",
326
+ size: "42px 7px"
327
+ },
328
+ {
329
+ color: "rgb(240, 50, 180)",
330
+ pos: "100% 27%",
331
+ size: "10px 17px"
332
+ },
333
+ {
334
+ color: "rgb(180, 40, 240)",
335
+ pos: "100% 27%",
336
+ size: "10px 18px"
337
+ },
338
+ {
339
+ color: "rgb(40, 140, 255)",
340
+ pos: "100% 27%",
341
+ size: "5px 10px"
342
+ },
343
+ {
344
+ color: "rgb(255, 50, 100)",
345
+ pos: "100% 27%",
346
+ size: "11px 12px"
347
+ }
348
+ ],
349
+ inner: [
350
+ {
351
+ color: "rgba(50, 200, 80, 0.5)",
352
+ pos: "2% 68%",
353
+ size: "9px 18px"
354
+ },
355
+ {
356
+ color: "rgba(30, 185, 170, 0.45)",
357
+ pos: "2% 68%",
358
+ size: "4px 8px"
359
+ },
360
+ {
361
+ color: "rgba(255, 120, 40, 0.35)",
362
+ pos: "72% -3%",
363
+ size: "59px 9px"
364
+ },
365
+ {
366
+ color: "rgba(100, 70, 255, 0.35)",
367
+ pos: "74% 100%",
368
+ size: "42px 7px"
369
+ },
370
+ {
371
+ color: "rgba(240, 50, 180, 0.3)",
372
+ pos: "100% 27%",
373
+ size: "10px 17px"
374
+ },
375
+ {
376
+ color: "rgba(180, 40, 240, 0.4)",
377
+ pos: "100% 27%",
378
+ size: "10px 18px"
379
+ },
380
+ {
381
+ color: "rgba(40, 140, 255, 0.3)",
382
+ pos: "100% 27%",
383
+ size: "5px 10px"
384
+ },
385
+ {
386
+ color: "rgba(255, 50, 100, 0.3)",
387
+ pos: "100% 27%",
388
+ size: "11px 12px"
389
+ }
390
+ ]
391
+ },
392
+ mono: {
393
+ border: [
394
+ {
395
+ color: "rgb(160, 160, 160)",
396
+ pos: "2% 68%",
397
+ size: "9px 18px"
398
+ },
399
+ {
400
+ color: "rgb(140, 140, 140)",
401
+ pos: "2% 68%",
402
+ size: "4px 8px"
403
+ },
404
+ {
405
+ color: "rgb(180, 180, 180)",
406
+ pos: "72% -3%",
407
+ size: "59px 9px"
408
+ },
409
+ {
410
+ color: "rgb(150, 150, 150)",
411
+ pos: "74% 100%",
412
+ size: "42px 7px"
413
+ },
414
+ {
415
+ color: "rgb(170, 170, 170)",
416
+ pos: "100% 27%",
417
+ size: "10px 17px"
418
+ },
419
+ {
420
+ color: "rgb(155, 155, 155)",
421
+ pos: "100% 27%",
422
+ size: "10px 18px"
423
+ },
424
+ {
425
+ color: "rgb(145, 145, 145)",
426
+ pos: "100% 27%",
427
+ size: "5px 10px"
428
+ },
429
+ {
430
+ color: "rgb(165, 165, 165)",
431
+ pos: "100% 27%",
432
+ size: "11px 12px"
433
+ }
434
+ ],
435
+ inner: [
436
+ {
437
+ color: "rgba(160, 160, 160, 0.25)",
438
+ pos: "2% 68%",
439
+ size: "9px 18px"
440
+ },
441
+ {
442
+ color: "rgba(140, 140, 140, 0.22)",
443
+ pos: "2% 68%",
444
+ size: "4px 8px"
445
+ },
446
+ {
447
+ color: "rgba(180, 180, 180, 0.17)",
448
+ pos: "72% -3%",
449
+ size: "59px 9px"
450
+ },
451
+ {
452
+ color: "rgba(150, 150, 150, 0.17)",
453
+ pos: "74% 100%",
454
+ size: "42px 7px"
455
+ },
456
+ {
457
+ color: "rgba(170, 170, 170, 0.15)",
458
+ pos: "100% 27%",
459
+ size: "10px 17px"
460
+ },
461
+ {
462
+ color: "rgba(155, 155, 155, 0.20)",
463
+ pos: "100% 27%",
464
+ size: "10px 18px"
465
+ },
466
+ {
467
+ color: "rgba(145, 145, 145, 0.15)",
468
+ pos: "100% 27%",
469
+ size: "5px 10px"
470
+ },
471
+ {
472
+ color: "rgba(165, 165, 165, 0.15)",
473
+ pos: "100% 27%",
474
+ size: "11px 12px"
475
+ }
476
+ ]
477
+ },
478
+ ocean: {
479
+ border: [
480
+ {
481
+ color: "rgb(60, 140, 200)",
482
+ pos: "2% 68%",
483
+ size: "9px 18px"
484
+ },
485
+ {
486
+ color: "rgb(50, 120, 180)",
487
+ pos: "2% 68%",
488
+ size: "4px 8px"
489
+ },
490
+ {
491
+ color: "rgb(100, 80, 220)",
492
+ pos: "72% -3%",
493
+ size: "59px 9px"
494
+ },
495
+ {
496
+ color: "rgb(80, 100, 255)",
497
+ pos: "74% 100%",
498
+ size: "42px 7px"
499
+ },
500
+ {
501
+ color: "rgb(120, 70, 240)",
502
+ pos: "100% 27%",
503
+ size: "10px 17px"
504
+ },
505
+ {
506
+ color: "rgb(90, 80, 220)",
507
+ pos: "100% 27%",
508
+ size: "10px 18px"
509
+ },
510
+ {
511
+ color: "rgb(70, 110, 255)",
512
+ pos: "100% 27%",
513
+ size: "5px 10px"
514
+ },
515
+ {
516
+ color: "rgb(110, 90, 230)",
517
+ pos: "100% 27%",
518
+ size: "11px 12px"
519
+ }
520
+ ],
521
+ inner: [
522
+ {
523
+ color: "rgba(60, 140, 200, 0.5)",
524
+ pos: "2% 68%",
525
+ size: "9px 18px"
526
+ },
527
+ {
528
+ color: "rgba(50, 120, 180, 0.45)",
529
+ pos: "2% 68%",
530
+ size: "4px 8px"
531
+ },
532
+ {
533
+ color: "rgba(100, 80, 220, 0.35)",
534
+ pos: "72% -3%",
535
+ size: "59px 9px"
536
+ },
537
+ {
538
+ color: "rgba(80, 100, 255, 0.35)",
539
+ pos: "74% 100%",
540
+ size: "42px 7px"
541
+ },
542
+ {
543
+ color: "rgba(120, 70, 240, 0.3)",
544
+ pos: "100% 27%",
545
+ size: "10px 17px"
546
+ },
547
+ {
548
+ color: "rgba(90, 80, 220, 0.4)",
549
+ pos: "100% 27%",
550
+ size: "10px 18px"
551
+ },
552
+ {
553
+ color: "rgba(70, 110, 255, 0.3)",
554
+ pos: "100% 27%",
555
+ size: "5px 10px"
556
+ },
557
+ {
558
+ color: "rgba(110, 90, 230, 0.3)",
559
+ pos: "100% 27%",
560
+ size: "11px 12px"
561
+ }
562
+ ]
563
+ },
564
+ sunset: {
565
+ border: [
566
+ {
567
+ color: "rgb(255, 180, 50)",
568
+ pos: "2% 68%",
569
+ size: "9px 18px"
570
+ },
571
+ {
572
+ color: "rgb(255, 150, 40)",
573
+ pos: "2% 68%",
574
+ size: "4px 8px"
575
+ },
576
+ {
577
+ color: "rgb(255, 80, 60)",
578
+ pos: "72% -3%",
579
+ size: "59px 9px"
580
+ },
581
+ {
582
+ color: "rgb(255, 100, 80)",
583
+ pos: "74% 100%",
584
+ size: "42px 7px"
585
+ },
586
+ {
587
+ color: "rgb(255, 60, 80)",
588
+ pos: "100% 27%",
589
+ size: "10px 17px"
590
+ },
591
+ {
592
+ color: "rgb(255, 120, 60)",
593
+ pos: "100% 27%",
594
+ size: "10px 18px"
595
+ },
596
+ {
597
+ color: "rgb(255, 200, 50)",
598
+ pos: "100% 27%",
599
+ size: "5px 10px"
600
+ },
601
+ {
602
+ color: "rgb(255, 90, 70)",
603
+ pos: "100% 27%",
604
+ size: "11px 12px"
605
+ }
606
+ ],
607
+ inner: [
608
+ {
609
+ color: "rgba(255, 180, 50, 0.5)",
610
+ pos: "2% 68%",
611
+ size: "9px 18px"
612
+ },
613
+ {
614
+ color: "rgba(255, 150, 40, 0.45)",
615
+ pos: "2% 68%",
616
+ size: "4px 8px"
617
+ },
618
+ {
619
+ color: "rgba(255, 80, 60, 0.35)",
620
+ pos: "72% -3%",
621
+ size: "59px 9px"
622
+ },
623
+ {
624
+ color: "rgba(255, 100, 80, 0.35)",
625
+ pos: "74% 100%",
626
+ size: "42px 7px"
627
+ },
628
+ {
629
+ color: "rgba(255, 60, 80, 0.3)",
630
+ pos: "100% 27%",
631
+ size: "10px 17px"
632
+ },
633
+ {
634
+ color: "rgba(255, 120, 60, 0.4)",
635
+ pos: "100% 27%",
636
+ size: "10px 18px"
637
+ },
638
+ {
639
+ color: "rgba(255, 200, 50, 0.3)",
640
+ pos: "100% 27%",
641
+ size: "5px 10px"
642
+ },
643
+ {
644
+ color: "rgba(255, 90, 70, 0.3)",
645
+ pos: "100% 27%",
646
+ size: "11px 12px"
647
+ }
648
+ ]
649
+ }
650
+ };
651
+ function toRgba(input, alpha) {
652
+ const hex = input.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
653
+ if (hex) {
654
+ const h = hex[1];
655
+ const r = parseInt(h.length === 3 ? h[0] + h[0] : h.slice(0, 2), 16);
656
+ const g = parseInt(h.length === 3 ? h[1] + h[1] : h.slice(2, 4), 16);
657
+ const b = parseInt(h.length === 3 ? h[2] + h[2] : h.slice(4, 6), 16);
658
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
659
+ }
660
+ const rgba = input.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/);
661
+ if (rgba) return `rgba(${rgba[1]}, ${rgba[2]}, ${rgba[3]}, ${alpha})`;
662
+ return input;
663
+ }
664
+ function pickColor(customColors, presetColor, index) {
665
+ if (!customColors || customColors.length === 0) return presetColor;
666
+ return customColors[index % customColors.length];
667
+ }
668
+ function pickColorAtAlpha(customColors, presetColor, index, alpha) {
669
+ if (!customColors || customColors.length === 0) {
670
+ return presetColor.replace("rgb(", "rgba(").replace(")", `, ${alpha})`);
671
+ }
672
+ return toRgba(customColors[index % customColors.length], alpha);
673
+ }
674
+ export function smBorderGradient(variant, customColors) {
675
+ return smGradients[variant].border.map((s, i)=>`radial-gradient(ellipse ${s.size} at ${s.pos}, ${pickColor(customColors, s.color, i)}, transparent)`).join(",\n ");
676
+ }
677
+ export function smInnerGradient(variant, customColors) {
678
+ return smGradients[variant].inner.map((s, i)=>{
679
+ if (!customColors || customColors.length === 0) {
680
+ return `radial-gradient(ellipse ${s.size} at ${s.pos}, ${s.color}, transparent)`;
681
+ }
682
+ const alphaMatch = s.color.match(/[\d.]+\s*\)$/);
683
+ const alpha = alphaMatch ? parseFloat(alphaMatch[0]) : 0.4;
684
+ return `radial-gradient(ellipse ${s.size} at ${s.pos}, ${toRgba(customColors[i % customColors.length], alpha)}, transparent)`;
685
+ }).join(",\n ");
686
+ }
687
+ export function mdBorderGradient(variant, customColors) {
688
+ return borderColors[variant].border.map((s, i)=>`radial-gradient(ellipse ${s.size} at ${s.pos}, ${pickColor(customColors, s.color, i)}, transparent)`).join(",\n ");
689
+ }
690
+ export function mdInnerGradient(variant, customColors) {
691
+ const cfg = borderColors[variant];
692
+ const alpha = variant === "mono" ? 0.225 : 0.45;
693
+ return cfg.border.map((s, i)=>{
694
+ const color = pickColorAtAlpha(customColors, s.color, i, alpha);
695
+ const size = s.size.split(" ").map((v)=>`${Math.round(parseInt(v) * 0.9)}px`).join(" ");
696
+ return `radial-gradient(ellipse ${size} at ${s.pos}, ${color}, transparent)`;
697
+ }).join(",\n ");
698
+ }
699
+ export function spikeColors(variant, dark, customColors) {
700
+ if (customColors && customColors.length > 0) {
701
+ const primary = customColors[0];
702
+ const secondary = customColors[customColors.length - 1] ?? customColors[0];
703
+ return {
704
+ primary,
705
+ secondary
706
+ };
707
+ }
708
+ const cfg = borderColors[variant];
709
+ return dark ? cfg.spike : cfg.spikeLt;
710
+ }
711
+ const lineBorderGradients = {
712
+ colorful: {
713
+ dark: [
714
+ {
715
+ color: "rgb(255, 50, 100)",
716
+ sizeW: 36,
717
+ sizeH: 36,
718
+ offsetX: 0,
719
+ offsetY: 2
720
+ },
721
+ {
722
+ color: "rgb(40, 180, 220)",
723
+ sizeW: 30,
724
+ sizeH: 32,
725
+ offsetX: 39,
726
+ offsetY: 0
727
+ },
728
+ {
729
+ color: "rgb(50, 200, 80)",
730
+ sizeW: 33,
731
+ sizeH: 28,
732
+ offsetX: -36,
733
+ offsetY: 2
734
+ },
735
+ {
736
+ color: "rgb(180, 40, 240)",
737
+ sizeW: 29,
738
+ sizeH: 34,
739
+ offsetX: -54,
740
+ offsetY: 0
741
+ },
742
+ {
743
+ color: "rgb(255, 160, 30)",
744
+ sizeW: 27,
745
+ sizeH: 30,
746
+ offsetX: 51,
747
+ offsetY: -1
748
+ },
749
+ {
750
+ color: "rgb(100, 70, 255)",
751
+ sizeW: 36,
752
+ sizeH: 24,
753
+ offsetX: 21,
754
+ offsetY: 1
755
+ },
756
+ {
757
+ color: "rgb(40, 140, 255)",
758
+ sizeW: 30,
759
+ sizeH: 22,
760
+ offsetX: -21,
761
+ offsetY: 0
762
+ },
763
+ {
764
+ color: "rgb(240, 50, 180)",
765
+ sizeW: 25,
766
+ sizeH: 28,
767
+ offsetX: 66,
768
+ offsetY: 1
769
+ },
770
+ {
771
+ color: "rgb(30, 185, 170)",
772
+ sizeW: 23,
773
+ sizeH: 30,
774
+ offsetX: -66,
775
+ offsetY: -1
776
+ }
777
+ ],
778
+ light: [
779
+ {
780
+ color: "rgb(255, 50, 100)",
781
+ sizeW: 45,
782
+ sizeH: 36,
783
+ offsetX: 0,
784
+ offsetY: 2
785
+ },
786
+ {
787
+ color: "rgb(40, 140, 255)",
788
+ sizeW: 35,
789
+ sizeH: 32,
790
+ offsetX: 65,
791
+ offsetY: 0
792
+ },
793
+ {
794
+ color: "rgb(50, 200, 80)",
795
+ sizeW: 40,
796
+ sizeH: 28,
797
+ offsetX: -60,
798
+ offsetY: 2
799
+ },
800
+ {
801
+ color: "rgb(180, 40, 240)",
802
+ sizeW: 35,
803
+ sizeH: 34,
804
+ offsetX: -90,
805
+ offsetY: 0
806
+ },
807
+ {
808
+ color: "rgb(30, 185, 170)",
809
+ sizeW: 38,
810
+ sizeH: 30,
811
+ offsetX: 85,
812
+ offsetY: -1
813
+ },
814
+ {
815
+ color: "rgb(100, 70, 255)",
816
+ sizeW: 50,
817
+ sizeH: 24,
818
+ offsetX: 35,
819
+ offsetY: 1
820
+ },
821
+ {
822
+ color: "rgb(40, 140, 255)",
823
+ sizeW: 40,
824
+ sizeH: 22,
825
+ offsetX: -35,
826
+ offsetY: 0
827
+ },
828
+ {
829
+ color: "rgb(255, 120, 40)",
830
+ sizeW: 35,
831
+ sizeH: 28,
832
+ offsetX: 110,
833
+ offsetY: 1
834
+ },
835
+ {
836
+ color: "rgb(240, 50, 180)",
837
+ sizeW: 30,
838
+ sizeH: 30,
839
+ offsetX: -110,
840
+ offsetY: -1
841
+ }
842
+ ]
843
+ },
844
+ mono: {
845
+ dark: [
846
+ {
847
+ color: "rgb(200, 200, 200)",
848
+ sizeW: 36,
849
+ sizeH: 36,
850
+ offsetX: 0,
851
+ offsetY: 2
852
+ },
853
+ {
854
+ color: "rgb(170, 170, 170)",
855
+ sizeW: 30,
856
+ sizeH: 32,
857
+ offsetX: 39,
858
+ offsetY: 0
859
+ },
860
+ {
861
+ color: "rgb(155, 155, 155)",
862
+ sizeW: 33,
863
+ sizeH: 28,
864
+ offsetX: -36,
865
+ offsetY: 2
866
+ },
867
+ {
868
+ color: "rgb(185, 185, 185)",
869
+ sizeW: 29,
870
+ sizeH: 34,
871
+ offsetX: -54,
872
+ offsetY: 0
873
+ },
874
+ {
875
+ color: "rgb(165, 165, 165)",
876
+ sizeW: 27,
877
+ sizeH: 30,
878
+ offsetX: 51,
879
+ offsetY: -1
880
+ },
881
+ {
882
+ color: "rgb(180, 180, 180)",
883
+ sizeW: 36,
884
+ sizeH: 24,
885
+ offsetX: 21,
886
+ offsetY: 1
887
+ },
888
+ {
889
+ color: "rgb(160, 160, 160)",
890
+ sizeW: 30,
891
+ sizeH: 22,
892
+ offsetX: -21,
893
+ offsetY: 0
894
+ },
895
+ {
896
+ color: "rgb(175, 175, 175)",
897
+ sizeW: 25,
898
+ sizeH: 28,
899
+ offsetX: 66,
900
+ offsetY: 1
901
+ },
902
+ {
903
+ color: "rgb(190, 190, 190)",
904
+ sizeW: 23,
905
+ sizeH: 30,
906
+ offsetX: -66,
907
+ offsetY: -1
908
+ }
909
+ ],
910
+ light: [
911
+ {
912
+ color: "rgb(100, 100, 100)",
913
+ sizeW: 45,
914
+ sizeH: 36,
915
+ offsetX: 0,
916
+ offsetY: 2
917
+ },
918
+ {
919
+ color: "rgb(80, 80, 80)",
920
+ sizeW: 35,
921
+ sizeH: 32,
922
+ offsetX: 65,
923
+ offsetY: 0
924
+ },
925
+ {
926
+ color: "rgb(90, 90, 90)",
927
+ sizeW: 40,
928
+ sizeH: 28,
929
+ offsetX: -60,
930
+ offsetY: 2
931
+ },
932
+ {
933
+ color: "rgb(70, 70, 70)",
934
+ sizeW: 35,
935
+ sizeH: 34,
936
+ offsetX: -90,
937
+ offsetY: 0
938
+ },
939
+ {
940
+ color: "rgb(85, 85, 85)",
941
+ sizeW: 38,
942
+ sizeH: 30,
943
+ offsetX: 85,
944
+ offsetY: -1
945
+ },
946
+ {
947
+ color: "rgb(95, 95, 95)",
948
+ sizeW: 50,
949
+ sizeH: 24,
950
+ offsetX: 35,
951
+ offsetY: 1
952
+ },
953
+ {
954
+ color: "rgb(75, 75, 75)",
955
+ sizeW: 40,
956
+ sizeH: 22,
957
+ offsetX: -35,
958
+ offsetY: 0
959
+ },
960
+ {
961
+ color: "rgb(105, 105, 105)",
962
+ sizeW: 35,
963
+ sizeH: 28,
964
+ offsetX: 110,
965
+ offsetY: 1
966
+ },
967
+ {
968
+ color: "rgb(65, 65, 65)",
969
+ sizeW: 30,
970
+ sizeH: 30,
971
+ offsetX: -110,
972
+ offsetY: -1
973
+ }
974
+ ]
975
+ },
976
+ ocean: {
977
+ dark: [
978
+ {
979
+ color: "rgb(100, 80, 220)",
980
+ sizeW: 36,
981
+ sizeH: 36,
982
+ offsetX: 0,
983
+ offsetY: 2
984
+ },
985
+ {
986
+ color: "rgb(60, 120, 255)",
987
+ sizeW: 30,
988
+ sizeH: 32,
989
+ offsetX: 39,
990
+ offsetY: 0
991
+ },
992
+ {
993
+ color: "rgb(80, 100, 200)",
994
+ sizeW: 33,
995
+ sizeH: 28,
996
+ offsetX: -36,
997
+ offsetY: 2
998
+ },
999
+ {
1000
+ color: "rgb(130, 70, 255)",
1001
+ sizeW: 29,
1002
+ sizeH: 34,
1003
+ offsetX: -54,
1004
+ offsetY: 0
1005
+ },
1006
+ {
1007
+ color: "rgb(70, 130, 255)",
1008
+ sizeW: 27,
1009
+ sizeH: 30,
1010
+ offsetX: 51,
1011
+ offsetY: -1
1012
+ },
1013
+ {
1014
+ color: "rgb(120, 80, 255)",
1015
+ sizeW: 36,
1016
+ sizeH: 24,
1017
+ offsetX: 21,
1018
+ offsetY: 1
1019
+ },
1020
+ {
1021
+ color: "rgb(90, 110, 230)",
1022
+ sizeW: 30,
1023
+ sizeH: 22,
1024
+ offsetX: -21,
1025
+ offsetY: 0
1026
+ },
1027
+ {
1028
+ color: "rgb(110, 90, 240)",
1029
+ sizeW: 25,
1030
+ sizeH: 28,
1031
+ offsetX: 66,
1032
+ offsetY: 1
1033
+ },
1034
+ {
1035
+ color: "rgb(140, 100, 255)",
1036
+ sizeW: 23,
1037
+ sizeH: 30,
1038
+ offsetX: -66,
1039
+ offsetY: -1
1040
+ }
1041
+ ],
1042
+ light: [
1043
+ {
1044
+ color: "rgb(80, 60, 200)",
1045
+ sizeW: 45,
1046
+ sizeH: 36,
1047
+ offsetX: 0,
1048
+ offsetY: 2
1049
+ },
1050
+ {
1051
+ color: "rgb(50, 100, 220)",
1052
+ sizeW: 35,
1053
+ sizeH: 32,
1054
+ offsetX: 65,
1055
+ offsetY: 0
1056
+ },
1057
+ {
1058
+ color: "rgb(70, 90, 190)",
1059
+ sizeW: 40,
1060
+ sizeH: 28,
1061
+ offsetX: -60,
1062
+ offsetY: 2
1063
+ },
1064
+ {
1065
+ color: "rgb(110, 60, 220)",
1066
+ sizeW: 35,
1067
+ sizeH: 34,
1068
+ offsetX: -90,
1069
+ offsetY: 0
1070
+ },
1071
+ {
1072
+ color: "rgb(60, 110, 230)",
1073
+ sizeW: 38,
1074
+ sizeH: 30,
1075
+ offsetX: 85,
1076
+ offsetY: -1
1077
+ },
1078
+ {
1079
+ color: "rgb(100, 70, 240)",
1080
+ sizeW: 50,
1081
+ sizeH: 24,
1082
+ offsetX: 35,
1083
+ offsetY: 1
1084
+ },
1085
+ {
1086
+ color: "rgb(80, 100, 210)",
1087
+ sizeW: 40,
1088
+ sizeH: 22,
1089
+ offsetX: -35,
1090
+ offsetY: 0
1091
+ },
1092
+ {
1093
+ color: "rgb(90, 80, 225)",
1094
+ sizeW: 35,
1095
+ sizeH: 28,
1096
+ offsetX: 110,
1097
+ offsetY: 1
1098
+ },
1099
+ {
1100
+ color: "rgb(120, 90, 245)",
1101
+ sizeW: 30,
1102
+ sizeH: 30,
1103
+ offsetX: -110,
1104
+ offsetY: -1
1105
+ }
1106
+ ]
1107
+ },
1108
+ sunset: {
1109
+ dark: [
1110
+ {
1111
+ color: "rgb(255, 100, 60)",
1112
+ sizeW: 36,
1113
+ sizeH: 36,
1114
+ offsetX: 0,
1115
+ offsetY: 2
1116
+ },
1117
+ {
1118
+ color: "rgb(255, 180, 50)",
1119
+ sizeW: 30,
1120
+ sizeH: 32,
1121
+ offsetX: 39,
1122
+ offsetY: 0
1123
+ },
1124
+ {
1125
+ color: "rgb(255, 140, 70)",
1126
+ sizeW: 33,
1127
+ sizeH: 28,
1128
+ offsetX: -36,
1129
+ offsetY: 2
1130
+ },
1131
+ {
1132
+ color: "rgb(255, 80, 80)",
1133
+ sizeW: 29,
1134
+ sizeH: 34,
1135
+ offsetX: -54,
1136
+ offsetY: 0
1137
+ },
1138
+ {
1139
+ color: "rgb(255, 200, 60)",
1140
+ sizeW: 27,
1141
+ sizeH: 30,
1142
+ offsetX: 51,
1143
+ offsetY: -1
1144
+ },
1145
+ {
1146
+ color: "rgb(255, 120, 50)",
1147
+ sizeW: 36,
1148
+ sizeH: 24,
1149
+ offsetX: 21,
1150
+ offsetY: 1
1151
+ },
1152
+ {
1153
+ color: "rgb(255, 160, 80)",
1154
+ sizeW: 30,
1155
+ sizeH: 22,
1156
+ offsetX: -21,
1157
+ offsetY: 0
1158
+ },
1159
+ {
1160
+ color: "rgb(255, 90, 60)",
1161
+ sizeW: 25,
1162
+ sizeH: 28,
1163
+ offsetX: 66,
1164
+ offsetY: 1
1165
+ },
1166
+ {
1167
+ color: "rgb(255, 70, 70)",
1168
+ sizeW: 23,
1169
+ sizeH: 30,
1170
+ offsetX: -66,
1171
+ offsetY: -1
1172
+ }
1173
+ ],
1174
+ light: [
1175
+ {
1176
+ color: "rgb(220, 80, 40)",
1177
+ sizeW: 45,
1178
+ sizeH: 36,
1179
+ offsetX: 0,
1180
+ offsetY: 2
1181
+ },
1182
+ {
1183
+ color: "rgb(230, 150, 30)",
1184
+ sizeW: 35,
1185
+ sizeH: 32,
1186
+ offsetX: 65,
1187
+ offsetY: 0
1188
+ },
1189
+ {
1190
+ color: "rgb(210, 110, 50)",
1191
+ sizeW: 40,
1192
+ sizeH: 28,
1193
+ offsetX: -60,
1194
+ offsetY: 2
1195
+ },
1196
+ {
1197
+ color: "rgb(200, 60, 60)",
1198
+ sizeW: 35,
1199
+ sizeH: 34,
1200
+ offsetX: -90,
1201
+ offsetY: 0
1202
+ },
1203
+ {
1204
+ color: "rgb(220, 170, 40)",
1205
+ sizeW: 38,
1206
+ sizeH: 30,
1207
+ offsetX: 85,
1208
+ offsetY: -1
1209
+ },
1210
+ {
1211
+ color: "rgb(210, 100, 30)",
1212
+ sizeW: 50,
1213
+ sizeH: 24,
1214
+ offsetX: 35,
1215
+ offsetY: 1
1216
+ },
1217
+ {
1218
+ color: "rgb(230, 130, 60)",
1219
+ sizeW: 40,
1220
+ sizeH: 22,
1221
+ offsetX: -35,
1222
+ offsetY: 0
1223
+ },
1224
+ {
1225
+ color: "rgb(190, 70, 50)",
1226
+ sizeW: 35,
1227
+ sizeH: 28,
1228
+ offsetX: 110,
1229
+ offsetY: 1
1230
+ },
1231
+ {
1232
+ color: "rgb(180, 50, 50)",
1233
+ sizeW: 30,
1234
+ sizeH: 30,
1235
+ offsetX: -110,
1236
+ offsetY: -1
1237
+ }
1238
+ ]
1239
+ }
1240
+ };
1241
+ export function lineBorderGradient(variant, dark, id, customColors) {
1242
+ return lineBorderGradients[variant][dark ? "dark" : "light"].map((s, i)=>{
1243
+ const ox = s.offsetX === 0 ? "" : s.offsetX > 0 ? ` + ${s.offsetX}px` : ` - ${Math.abs(s.offsetX)}px`;
1244
+ const oy = s.offsetY === 0 ? "" : s.offsetY > 0 ? ` + ${s.offsetY}px` : ` - ${Math.abs(s.offsetY)}px`;
1245
+ const color = pickColor(customColors, s.color, i);
1246
+ return `radial-gradient(ellipse calc(${s.sizeW}px * var(--beam-w-${id})) calc(${s.sizeH}px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%${ox}) calc(100%${oy}), ${color}, transparent)`;
1247
+ }).join(",\n ");
1248
+ }
1249
+ const lineInnerGradients = {
1250
+ colorful: [
1251
+ {
1252
+ color: "rgba(255, 50, 100, 0.48)",
1253
+ sizeW: 33,
1254
+ sizeH: 30,
1255
+ offsetX: 0,
1256
+ offsetY: 0
1257
+ },
1258
+ {
1259
+ color: "rgba(40, 180, 220, 0.42)",
1260
+ sizeW: 24,
1261
+ sizeH: 26,
1262
+ offsetX: 39,
1263
+ offsetY: -3
1264
+ },
1265
+ {
1266
+ color: "rgba(50, 200, 80, 0.48)",
1267
+ sizeW: 27,
1268
+ sizeH: 24,
1269
+ offsetX: -36,
1270
+ offsetY: 0
1271
+ },
1272
+ {
1273
+ color: "rgba(180, 40, 240, 0.42)",
1274
+ sizeW: 23,
1275
+ sizeH: 28,
1276
+ offsetX: -54,
1277
+ offsetY: -2
1278
+ },
1279
+ {
1280
+ color: "rgba(255, 160, 30, 0.50)",
1281
+ sizeW: 24,
1282
+ sizeH: 24,
1283
+ offsetX: 51,
1284
+ offsetY: -1
1285
+ },
1286
+ {
1287
+ color: "rgba(100, 70, 255, 0.45)",
1288
+ sizeW: 30,
1289
+ sizeH: 20,
1290
+ offsetX: 21,
1291
+ offsetY: 0
1292
+ },
1293
+ {
1294
+ color: "rgba(40, 140, 255, 0.40)",
1295
+ sizeW: 25,
1296
+ sizeH: 18,
1297
+ offsetX: -21,
1298
+ offsetY: -2
1299
+ },
1300
+ {
1301
+ color: "rgba(240, 50, 180, 0.45)",
1302
+ sizeW: 21,
1303
+ sizeH: 24,
1304
+ offsetX: 66,
1305
+ offsetY: 0
1306
+ },
1307
+ {
1308
+ color: "rgba(30, 185, 170, 0.52)",
1309
+ sizeW: 18,
1310
+ sizeH: 26,
1311
+ offsetX: -66,
1312
+ offsetY: -1
1313
+ }
1314
+ ],
1315
+ mono: [
1316
+ {
1317
+ color: "rgba(200, 200, 200, 0.48)",
1318
+ sizeW: 33,
1319
+ sizeH: 30,
1320
+ offsetX: 0,
1321
+ offsetY: 0
1322
+ },
1323
+ {
1324
+ color: "rgba(170, 170, 170, 0.42)",
1325
+ sizeW: 24,
1326
+ sizeH: 26,
1327
+ offsetX: 39,
1328
+ offsetY: -3
1329
+ },
1330
+ {
1331
+ color: "rgba(155, 155, 155, 0.48)",
1332
+ sizeW: 27,
1333
+ sizeH: 24,
1334
+ offsetX: -36,
1335
+ offsetY: 0
1336
+ },
1337
+ {
1338
+ color: "rgba(185, 185, 185, 0.42)",
1339
+ sizeW: 23,
1340
+ sizeH: 28,
1341
+ offsetX: -54,
1342
+ offsetY: -2
1343
+ },
1344
+ {
1345
+ color: "rgba(165, 165, 165, 0.50)",
1346
+ sizeW: 24,
1347
+ sizeH: 24,
1348
+ offsetX: 51,
1349
+ offsetY: -1
1350
+ },
1351
+ {
1352
+ color: "rgba(180, 180, 180, 0.45)",
1353
+ sizeW: 30,
1354
+ sizeH: 20,
1355
+ offsetX: 21,
1356
+ offsetY: 0
1357
+ },
1358
+ {
1359
+ color: "rgba(160, 160, 160, 0.40)",
1360
+ sizeW: 25,
1361
+ sizeH: 18,
1362
+ offsetX: -21,
1363
+ offsetY: -2
1364
+ },
1365
+ {
1366
+ color: "rgba(175, 175, 175, 0.45)",
1367
+ sizeW: 21,
1368
+ sizeH: 24,
1369
+ offsetX: 66,
1370
+ offsetY: 0
1371
+ },
1372
+ {
1373
+ color: "rgba(190, 190, 190, 0.52)",
1374
+ sizeW: 18,
1375
+ sizeH: 26,
1376
+ offsetX: -66,
1377
+ offsetY: -1
1378
+ }
1379
+ ],
1380
+ ocean: [
1381
+ {
1382
+ color: "rgba(100, 80, 220, 0.48)",
1383
+ sizeW: 33,
1384
+ sizeH: 30,
1385
+ offsetX: 0,
1386
+ offsetY: 0
1387
+ },
1388
+ {
1389
+ color: "rgba(60, 120, 255, 0.42)",
1390
+ sizeW: 24,
1391
+ sizeH: 26,
1392
+ offsetX: 39,
1393
+ offsetY: -3
1394
+ },
1395
+ {
1396
+ color: "rgba(80, 100, 200, 0.48)",
1397
+ sizeW: 27,
1398
+ sizeH: 24,
1399
+ offsetX: -36,
1400
+ offsetY: 0
1401
+ },
1402
+ {
1403
+ color: "rgba(130, 70, 255, 0.42)",
1404
+ sizeW: 23,
1405
+ sizeH: 28,
1406
+ offsetX: -54,
1407
+ offsetY: -2
1408
+ },
1409
+ {
1410
+ color: "rgba(70, 130, 255, 0.50)",
1411
+ sizeW: 24,
1412
+ sizeH: 24,
1413
+ offsetX: 51,
1414
+ offsetY: -1
1415
+ },
1416
+ {
1417
+ color: "rgba(120, 80, 255, 0.45)",
1418
+ sizeW: 30,
1419
+ sizeH: 20,
1420
+ offsetX: 21,
1421
+ offsetY: 0
1422
+ },
1423
+ {
1424
+ color: "rgba(90, 110, 230, 0.40)",
1425
+ sizeW: 25,
1426
+ sizeH: 18,
1427
+ offsetX: -21,
1428
+ offsetY: -2
1429
+ },
1430
+ {
1431
+ color: "rgba(110, 90, 240, 0.45)",
1432
+ sizeW: 21,
1433
+ sizeH: 24,
1434
+ offsetX: 66,
1435
+ offsetY: 0
1436
+ },
1437
+ {
1438
+ color: "rgba(140, 100, 255, 0.52)",
1439
+ sizeW: 18,
1440
+ sizeH: 26,
1441
+ offsetX: -66,
1442
+ offsetY: -1
1443
+ }
1444
+ ],
1445
+ sunset: [
1446
+ {
1447
+ color: "rgba(255, 100, 60, 0.48)",
1448
+ sizeW: 33,
1449
+ sizeH: 30,
1450
+ offsetX: 0,
1451
+ offsetY: 0
1452
+ },
1453
+ {
1454
+ color: "rgba(255, 180, 50, 0.42)",
1455
+ sizeW: 24,
1456
+ sizeH: 26,
1457
+ offsetX: 39,
1458
+ offsetY: -3
1459
+ },
1460
+ {
1461
+ color: "rgba(255, 140, 70, 0.48)",
1462
+ sizeW: 27,
1463
+ sizeH: 24,
1464
+ offsetX: -36,
1465
+ offsetY: 0
1466
+ },
1467
+ {
1468
+ color: "rgba(255, 80, 80, 0.42)",
1469
+ sizeW: 23,
1470
+ sizeH: 28,
1471
+ offsetX: -54,
1472
+ offsetY: -2
1473
+ },
1474
+ {
1475
+ color: "rgba(255, 200, 60, 0.50)",
1476
+ sizeW: 24,
1477
+ sizeH: 24,
1478
+ offsetX: 51,
1479
+ offsetY: -1
1480
+ },
1481
+ {
1482
+ color: "rgba(255, 120, 50, 0.45)",
1483
+ sizeW: 30,
1484
+ sizeH: 20,
1485
+ offsetX: 21,
1486
+ offsetY: 0
1487
+ },
1488
+ {
1489
+ color: "rgba(255, 160, 80, 0.40)",
1490
+ sizeW: 25,
1491
+ sizeH: 18,
1492
+ offsetX: -21,
1493
+ offsetY: -2
1494
+ },
1495
+ {
1496
+ color: "rgba(255, 90, 60, 0.45)",
1497
+ sizeW: 21,
1498
+ sizeH: 24,
1499
+ offsetX: 66,
1500
+ offsetY: 0
1501
+ },
1502
+ {
1503
+ color: "rgba(255, 70, 70, 0.52)",
1504
+ sizeW: 18,
1505
+ sizeH: 26,
1506
+ offsetX: -66,
1507
+ offsetY: -1
1508
+ }
1509
+ ]
1510
+ };
1511
+ export function lineInnerGradient(variant, id, customColors) {
1512
+ return lineInnerGradients[variant].map((s, i)=>{
1513
+ const ox = s.offsetX === 0 ? "" : s.offsetX > 0 ? ` + ${s.offsetX}px` : ` - ${Math.abs(s.offsetX)}px`;
1514
+ const oy = s.offsetY === 0 ? "" : ` - ${Math.abs(s.offsetY)}px`;
1515
+ let color = s.color;
1516
+ if (customColors && customColors.length > 0) {
1517
+ const alphaMatch = s.color.match(/[\d.]+\s*\)$/);
1518
+ const alpha = alphaMatch ? parseFloat(alphaMatch[0]) : 0.45;
1519
+ color = toRgba(customColors[i % customColors.length], alpha);
1520
+ }
1521
+ return `radial-gradient(ellipse calc(${s.sizeW}px * var(--beam-w-${id})) calc(${s.sizeH}px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%${ox}) calc(100%${oy}), ${color}, transparent)`;
1522
+ }).join(",\n ");
1523
+ }
1524
+ const lineSpikeColors = {
1525
+ colorful: {
1526
+ dark: {
1527
+ spikes: [
1528
+ {
1529
+ color1: "rgb(100, 70, 255)",
1530
+ color2: "rgba(100, 70, 255, 1)"
1531
+ },
1532
+ {
1533
+ color1: "rgba(255, 170, 40, 0.59)",
1534
+ color2: "rgba(255, 170, 40, 0.29)"
1535
+ },
1536
+ {
1537
+ color1: "rgb(50, 200, 100)",
1538
+ color2: "rgba(50, 200, 100, 1)"
1539
+ },
1540
+ {
1541
+ color1: "rgba(200, 50, 240, 0.91)",
1542
+ color2: "rgba(200, 50, 240, 0.45)"
1543
+ },
1544
+ {
1545
+ color1: "rgb(40, 140, 255)",
1546
+ color2: "rgba(40, 140, 255, 1)"
1547
+ }
1548
+ ]
1549
+ },
1550
+ light: {
1551
+ spikes: [
1552
+ {
1553
+ color1: "rgb(80, 50, 200)",
1554
+ color2: "rgba(80, 50, 200, 0.8)"
1555
+ },
1556
+ {
1557
+ color1: "rgba(210, 130, 0, 0.7)",
1558
+ color2: "rgba(210, 130, 0, 0.46)"
1559
+ },
1560
+ {
1561
+ color1: "rgb(30, 160, 70)",
1562
+ color2: "rgba(30, 160, 70, 0.82)"
1563
+ },
1564
+ {
1565
+ color1: "rgb(160, 30, 190)",
1566
+ color2: "rgba(160, 30, 190, 0.7)"
1567
+ },
1568
+ {
1569
+ color1: "rgb(30, 100, 200)",
1570
+ color2: "rgba(30, 100, 200, 0.78)"
1571
+ }
1572
+ ]
1573
+ }
1574
+ },
1575
+ mono: {
1576
+ dark: {
1577
+ spikes: [
1578
+ {
1579
+ color1: "rgb(200, 200, 200)",
1580
+ color2: "rgba(200, 200, 200, 1)"
1581
+ },
1582
+ {
1583
+ color1: "rgba(180, 180, 180, 0.59)",
1584
+ color2: "rgba(180, 180, 180, 0.29)"
1585
+ },
1586
+ {
1587
+ color1: "rgb(190, 190, 190)",
1588
+ color2: "rgba(190, 190, 190, 1)"
1589
+ },
1590
+ {
1591
+ color1: "rgba(170, 170, 170, 0.91)",
1592
+ color2: "rgba(170, 170, 170, 0.45)"
1593
+ },
1594
+ {
1595
+ color1: "rgb(185, 185, 185)",
1596
+ color2: "rgba(185, 185, 185, 1)"
1597
+ }
1598
+ ]
1599
+ },
1600
+ light: {
1601
+ spikes: [
1602
+ {
1603
+ color1: "rgb(80, 80, 80)",
1604
+ color2: "rgba(80, 80, 80, 0.8)"
1605
+ },
1606
+ {
1607
+ color1: "rgba(100, 100, 100, 0.7)",
1608
+ color2: "rgba(100, 100, 100, 0.46)"
1609
+ },
1610
+ {
1611
+ color1: "rgb(70, 70, 70)",
1612
+ color2: "rgba(70, 70, 70, 0.82)"
1613
+ },
1614
+ {
1615
+ color1: "rgb(90, 90, 90)",
1616
+ color2: "rgba(90, 90, 90, 0.7)"
1617
+ },
1618
+ {
1619
+ color1: "rgb(85, 85, 85)",
1620
+ color2: "rgba(85, 85, 85, 0.78)"
1621
+ }
1622
+ ]
1623
+ }
1624
+ },
1625
+ ocean: {
1626
+ dark: {
1627
+ spikes: [
1628
+ {
1629
+ color1: "rgb(100, 80, 255)",
1630
+ color2: "rgb(100, 80, 255)"
1631
+ },
1632
+ {
1633
+ color1: "rgba(80, 130, 220, 0.59)",
1634
+ color2: "rgba(80, 130, 220, 0.29)"
1635
+ },
1636
+ {
1637
+ color1: "rgb(60, 100, 255)",
1638
+ color2: "rgb(60, 100, 255)"
1639
+ },
1640
+ {
1641
+ color1: "rgba(90, 120, 200, 0.91)",
1642
+ color2: "rgba(90, 120, 200, 0.45)"
1643
+ },
1644
+ {
1645
+ color1: "rgb(120, 90, 255)",
1646
+ color2: "rgb(120, 90, 255)"
1647
+ }
1648
+ ]
1649
+ },
1650
+ light: {
1651
+ spikes: [
1652
+ {
1653
+ color1: "rgb(50, 40, 180)",
1654
+ color2: "rgba(50, 40, 180, 0.8)"
1655
+ },
1656
+ {
1657
+ color1: "rgba(40, 80, 200, 0.7)",
1658
+ color2: "rgba(40, 80, 200, 0.46)"
1659
+ },
1660
+ {
1661
+ color1: "rgb(30, 50, 190)",
1662
+ color2: "rgba(30, 50, 190, 0.82)"
1663
+ },
1664
+ {
1665
+ color1: "rgb(60, 90, 180)",
1666
+ color2: "rgba(60, 90, 180, 0.7)"
1667
+ },
1668
+ {
1669
+ color1: "rgb(70, 60, 200)",
1670
+ color2: "rgba(70, 60, 200, 0.78)"
1671
+ }
1672
+ ]
1673
+ }
1674
+ },
1675
+ sunset: {
1676
+ dark: {
1677
+ spikes: [
1678
+ {
1679
+ color1: "rgb(255, 100, 80)",
1680
+ color2: "rgb(255, 100, 80)"
1681
+ },
1682
+ {
1683
+ color1: "rgba(255, 150, 80, 0.59)",
1684
+ color2: "rgba(255, 150, 80, 0.29)"
1685
+ },
1686
+ {
1687
+ color1: "rgb(255, 80, 60)",
1688
+ color2: "rgb(255, 80, 60)"
1689
+ },
1690
+ {
1691
+ color1: "rgba(255, 120, 50, 0.91)",
1692
+ color2: "rgba(255, 120, 50, 0.45)"
1693
+ },
1694
+ {
1695
+ color1: "rgb(255, 140, 70)",
1696
+ color2: "rgb(255, 140, 70)"
1697
+ }
1698
+ ]
1699
+ },
1700
+ light: {
1701
+ spikes: [
1702
+ {
1703
+ color1: "rgb(200, 60, 30)",
1704
+ color2: "rgba(200, 60, 30, 0.8)"
1705
+ },
1706
+ {
1707
+ color1: "rgba(220, 100, 20, 0.7)",
1708
+ color2: "rgba(220, 100, 20, 0.46)"
1709
+ },
1710
+ {
1711
+ color1: "rgb(180, 40, 20)",
1712
+ color2: "rgba(180, 40, 20, 0.82)"
1713
+ },
1714
+ {
1715
+ color1: "rgb(210, 80, 10)",
1716
+ color2: "rgba(210, 80, 10, 0.7)"
1717
+ },
1718
+ {
1719
+ color1: "rgb(190, 70, 30)",
1720
+ color2: "rgba(190, 70, 30, 0.78)"
1721
+ }
1722
+ ]
1723
+ }
1724
+ }
1725
+ };
1726
+ function colorWithAlpha(color, alpha) {
1727
+ const rgba = color.match(/^rgba\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*[\d.]+\s*\)$/);
1728
+ if (rgba) return `rgba(${rgba[1]}, ${rgba[2]}, ${rgba[3]}, ${alpha})`;
1729
+ const rgb = color.match(/^rgb\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)$/);
1730
+ return rgb ? `rgba(${rgb[1]}, ${rgb[2]}, ${rgb[3]}, ${alpha})` : color;
1731
+ }
1732
+ function monoLineBloom(dark, id) {
1733
+ return dark ? `radial-gradient(ellipse calc(18px * var(--beam-spike-${id})) calc(30px * var(--beam-h-${id})) at 8% calc(100% - 2px), rgba(200, 200, 200, 0.35), rgba(200, 200, 200, 0.12) 50%, transparent 100%),
1734
+ radial-gradient(ellipse calc(14px * var(--beam-spike2-${id})) calc(28px * var(--beam-h-${id})) at 22% calc(100% - 4px), rgba(170, 170, 170, 0.3), rgba(170, 170, 170, 0.1) 50%, transparent 100%),
1735
+ radial-gradient(ellipse calc(16px * var(--beam-spike-${id})) calc(32px * var(--beam-h-${id})) at 36% calc(100% - 3px), rgba(190, 190, 190, 0.35), rgba(190, 190, 190, 0.12) 50%, transparent 100%),
1736
+ radial-gradient(ellipse calc(20px * var(--beam-spike2-${id})) calc(25px * var(--beam-h-${id})) at 50% calc(100% - 2px), rgba(180, 180, 180, 0.25), rgba(180, 180, 180, 0.08) 55%, transparent 100%),
1737
+ radial-gradient(ellipse calc(15px * var(--beam-spike2-${id})) calc(30px * var(--beam-h-${id})) at 64% calc(100% - 4px), rgba(185, 185, 185, 0.32), rgba(185, 185, 185, 0.1) 50%, transparent 100%),
1738
+ radial-gradient(ellipse calc(12px * var(--beam-spike-${id})) calc(28px * var(--beam-h-${id})) at 78% calc(100% - 2px), rgba(175, 175, 175, 0.28), rgba(175, 175, 175, 0.09) 50%, transparent 100%),
1739
+ radial-gradient(ellipse calc(17px * var(--beam-spike-${id})) calc(26px * var(--beam-h-${id})) at 92% calc(100% - 3px), rgba(195, 195, 195, 0.3), rgba(195, 195, 195, 0.1) 50%, transparent 100%),
1740
+ radial-gradient(ellipse calc(21px * var(--beam-spike-${id})) calc(15px * var(--beam-spike2-${id})) at calc(var(--beam-x-${id}) * 100%) calc(100% + 1px), rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.9) 20%, rgba(255, 255, 255, 0.5) 50%, transparent 100%),
1741
+ radial-gradient(ellipse calc(42px * var(--beam-w-${id})) calc(40px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%) 100%, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.12) 25%, rgba(255, 255, 255, 0.03) 55%, transparent 80%)` : `radial-gradient(ellipse calc(18px * var(--beam-spike-${id})) calc(30px * var(--beam-h-${id})) at 8% calc(100% - 2px), rgba(80, 80, 80, 0.3), rgba(80, 80, 80, 0.1) 50%, transparent 100%),
1742
+ radial-gradient(ellipse calc(14px * var(--beam-spike2-${id})) calc(28px * var(--beam-h-${id})) at 22% calc(100% - 4px), rgba(100, 100, 100, 0.25), rgba(100, 100, 100, 0.08) 50%, transparent 100%),
1743
+ radial-gradient(ellipse calc(16px * var(--beam-spike-${id})) calc(32px * var(--beam-h-${id})) at 36% calc(100% - 3px), rgba(70, 70, 70, 0.3), rgba(70, 70, 70, 0.1) 50%, transparent 100%),
1744
+ radial-gradient(ellipse calc(20px * var(--beam-spike2-${id})) calc(25px * var(--beam-h-${id})) at 50% calc(100% - 2px), rgba(90, 90, 90, 0.22), rgba(90, 90, 90, 0.07) 55%, transparent 100%),
1745
+ radial-gradient(ellipse calc(15px * var(--beam-spike2-${id})) calc(30px * var(--beam-h-${id})) at 64% calc(100% - 4px), rgba(85, 85, 85, 0.28), rgba(85, 85, 85, 0.09) 50%, transparent 100%),
1746
+ radial-gradient(ellipse calc(12px * var(--beam-spike-${id})) calc(28px * var(--beam-h-${id})) at 78% calc(100% - 2px), rgba(95, 95, 95, 0.24), rgba(95, 95, 95, 0.08) 50%, transparent 100%),
1747
+ radial-gradient(ellipse calc(17px * var(--beam-spike-${id})) calc(26px * var(--beam-h-${id})) at 92% calc(100% - 3px), rgba(75, 75, 75, 0.26), rgba(75, 75, 75, 0.08) 50%, transparent 100%),
1748
+ radial-gradient(ellipse calc(50px * var(--beam-w-${id})) calc(32px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%) calc(100%), rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.18) 30%, rgba(0, 0, 0, 0.03) 60%, transparent 85%)`;
1749
+ }
1750
+ export function lineBloomGradient(variant, dark, id, customColors) {
1751
+ const spike = spikeColors(variant, dark, customColors);
1752
+ const primary = spike.primary;
1753
+ const secondary = spike.secondary;
1754
+ const presetSpikes = lineSpikeColors[variant][dark ? "dark" : "light"].spikes;
1755
+ const spikes = customColors && customColors.length > 0 ? presetSpikes.map((s, i)=>{
1756
+ const c = customColors[i % customColors.length];
1757
+ const a1 = parseFloat(s.color1.match(/[\d.]+\s*\)$/)?.[0] ?? "1");
1758
+ const a2 = parseFloat(s.color2.match(/[\d.]+\s*\)$/)?.[0] ?? "1");
1759
+ return {
1760
+ color1: toRgba(c, a1),
1761
+ color2: toRgba(c, a2)
1762
+ };
1763
+ }) : presetSpikes;
1764
+ if (variant === "mono" && (!customColors || customColors.length === 0)) return monoLineBloom(dark, id);
1765
+ if (dark) {
1766
+ const c = primary;
1767
+ const f = primary;
1768
+ const i = secondary;
1769
+ const n = colorWithAlpha(secondary, 0.49);
1770
+ return `radial-gradient(ellipse calc(0.8px * var(--beam-spike-${id})) calc(92px * var(--beam-h-${id})) at 8% calc(100% - 2px), ${c}, ${f} 30%, transparent 88%),
1771
+ radial-gradient(ellipse calc(10px * var(--beam-spike2-${id})) calc(35px * var(--beam-h-${id})) at 22% calc(100% - 4px), ${i}, ${n} 50%, transparent 95%),
1772
+ radial-gradient(ellipse calc(2px * (2 - var(--beam-spike-${id}))) calc(72px * var(--beam-h-${id})) at 36% calc(100% - 3px), ${spikes[0].color1}, ${spikes[0].color2} 40%, transparent 90%),
1773
+ radial-gradient(ellipse calc(14px * var(--beam-spike2-${id})) calc(28px * var(--beam-h-${id})) at 50% calc(100% - 2px), ${spikes[1].color1}, ${spikes[1].color2} 55%, transparent 96%),
1774
+ radial-gradient(ellipse calc(1.2px * (2 - var(--beam-spike2-${id}))) calc(85px * var(--beam-h-${id})) at 64% calc(100% - 4px), ${spikes[2].color1}, ${spikes[2].color2} 35%, transparent 89%),
1775
+ radial-gradient(ellipse calc(7px * var(--beam-spike-${id})) calc(45px * var(--beam-h-${id})) at 78% calc(100% - 2px), ${spikes[3].color1}, ${spikes[3].color2} 48%, transparent 94%),
1776
+ radial-gradient(ellipse calc(0.6px * (2 - var(--beam-spike-${id}))) calc(60px * var(--beam-h-${id})) at 92% calc(100% - 3px), ${spikes[4].color1}, ${spikes[4].color2} 42%, transparent 91%),
1777
+ radial-gradient(ellipse calc(21px * var(--beam-spike-${id})) calc(15px * var(--beam-spike2-${id})) at calc(var(--beam-x-${id}) * 100%) calc(100% + 1px), rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.9) 20%, rgba(255, 255, 255, 0.5) 50%, transparent 100%),
1778
+ radial-gradient(ellipse calc(42px * var(--beam-w-${id})) calc(40px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%) 100%, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.12) 25%, rgba(255, 255, 255, 0.03) 55%, transparent 80%)`;
1779
+ }
1780
+ const c = primary;
1781
+ const f = colorWithAlpha(primary, 0.85);
1782
+ const i = secondary;
1783
+ const n = colorWithAlpha(secondary, 0.7);
1784
+ return `radial-gradient(ellipse calc(0.8px * var(--beam-spike-${id})) calc(92px * var(--beam-h-${id})) at 8% calc(100% - 2px), ${c}, ${f} 30%, transparent 88%),
1785
+ radial-gradient(ellipse calc(10px * var(--beam-spike2-${id})) calc(35px * var(--beam-h-${id})) at 22% calc(100% - 4px), ${i}, ${n} 50%, transparent 95%),
1786
+ radial-gradient(ellipse calc(2px * (2 - var(--beam-spike-${id}))) calc(72px * var(--beam-h-${id})) at 36% calc(100% - 3px), ${spikes[0].color1}, ${spikes[0].color2} 40%, transparent 90%),
1787
+ radial-gradient(ellipse calc(14px * var(--beam-spike2-${id})) calc(28px * var(--beam-h-${id})) at 50% calc(100% - 2px), ${spikes[1].color1}, ${spikes[1].color2} 55%, transparent 96%),
1788
+ radial-gradient(ellipse calc(1.2px * (2 - var(--beam-spike2-${id}))) calc(85px * var(--beam-h-${id})) at 64% calc(100% - 4px), ${spikes[2].color1}, ${spikes[2].color2} 35%, transparent 89%),
1789
+ radial-gradient(ellipse calc(7px * var(--beam-spike-${id})) calc(45px * var(--beam-h-${id})) at 78% calc(100% - 2px), ${spikes[3].color1}, ${spikes[3].color2} 48%, transparent 94%),
1790
+ radial-gradient(ellipse calc(1px * (2 - var(--beam-spike-${id}))) calc(60px * var(--beam-h-${id})) at 92% calc(100% - 3px), ${spikes[4].color1}, ${spikes[4].color2} 42%, transparent 91%),
1791
+ radial-gradient(ellipse calc(50px * var(--beam-w-${id})) calc(32px * var(--beam-h-${id})) at calc(var(--beam-x-${id}) * 100%) calc(100%), rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.18) 30%, rgba(0, 0, 0, 0.03) 60%, transparent 85%)`;
1792
+ }