poe-svelte-ui-lib 1.28.3 → 1.28.5

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.
@@ -17,12 +17,30 @@
17
17
  }: IMapProps = $props()
18
18
 
19
19
  /* Мастер-цвет (тот же bg-* из optionsStore.COLOR_OPTIONS, что и у остальных примитивов) —
20
- проявляется как акцентная рамка карты, т.к. заливать фон самой карты цветом нет смысла. */
21
- const roleBorderClass = $derived.by(() => {
20
+ красить саму карту цветом смысла нет (это базовая карта MapLibre), поэтому проявляется на
21
+ ФОНЕ наших собственных оверлеев поверх неё: панели управления (CustomControl) и карточки
22
+ устройства (Popup) — см. roleBgClass/roleBgPaint ниже, применяются прямо в разметке. */
23
+ const roleBgClass = $derived.by(() => {
22
24
  const role = wrapperClass.match(/bg-(\w+)/)?.[1]
23
- /* border-(--border-color) — реальная utility, красящая рамку; border-{role} лишь задаёт
24
- переменную --border-color (см. app.css), как и bg-* для --bg-color (см. Button.svelte). */
25
- return role && role !== "max" ? `border-2 border-(--border-color) border-${role}` : ""
25
+ /* bg-{role} лишь задаёт переменную --bg-color (см. app.css); text-(--on-accent) — иначе
26
+ тёмный текст (задуман под белую подложку control'ов MapLibre по умолчанию) нечитаем на
27
+ цветной заливке. Красящая bg-(--bg-color) — НЕ здесь, см. roleBgPaint: если оставить обе
28
+ bg-* утилиты в одной строке, twMerge видит конфликт одной группы и вырезает одну из них
29
+ (та же ловушка, что и в Button.svelte, см. его комментарий про roleBg/roleClass). */
30
+ return role && role !== "max" ? `bg-${role} text-(--on-accent)` : ""
31
+ })
32
+ /* Приклеивается к className СНАРУЖИ twMerge — иначе конфликтует с bg-{role} внутри roleBgClass. */
33
+ const roleBgPaint = $derived(roleBgClass ? "bg-(--bg-color)" : "")
34
+
35
+ /* Акцентное кольцо вокруг самой карты. Намеренно ring, а не border: border меняет content-box
36
+ контейнера MapLibre уже ПОСЛЕ монтажа, а сама MapLibre не переотрисовывает canvas при таком
37
+ ресайзе без явного вызова map.resize() — итог был обрезанный/съехавший рендер при смене
38
+ цвета. ring — box-shadow, размеры контейнера не меняет, поэтому безопасен. */
39
+ const roleRingClass = $derived.by(() => {
40
+ const role = wrapperClass.match(/bg-(\w+)/)?.[1]
41
+ /* ring-(--border-color) — реальная utility, красящая кольцо; border-{role} лишь задаёт
42
+ переменную --border-color (см. app.css). */
43
+ return role && role !== "max" ? `ring-2 ring-inset ring-(--border-color) border-${role}` : ""
26
44
  })
27
45
 
28
46
  interface MapDevice extends IDeviceGNSS {
@@ -146,7 +164,7 @@
146
164
  <h5 class={twMerge(` w-full px-4 text-center`, label.class)}>{label.name}</h5>
147
165
  {/if}
148
166
  <MapLibre
149
- class={twMerge("h-[calc(100%-2rem)] min-h-50 overflow-hidden rounded-xl shadow-sm transition duration-200 hover:shadow-md", roleBorderClass)}
167
+ class={twMerge("h-[calc(100%-2rem)] min-h-50 overflow-hidden rounded-xl shadow-sm transition duration-200 hover:shadow-md", roleRingClass)}
150
168
  style={isDarkMode ? "https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json" : "https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json"}
151
169
  zoom={1.5}
152
170
  center={{ lat: 30, lng: 0 }}
@@ -157,7 +175,7 @@
157
175
  <FullScreenControl />
158
176
 
159
177
  <CustomControl position="top-left">
160
- <div class="flex flex-wrap items-center gap-3 px-2 py-1 text-black">
178
+ <div class={`${twMerge("flex flex-wrap items-center gap-3 rounded-lg px-2 py-1 text-black", roleBgClass)} ${roleBgPaint}`}>
161
179
  <label class="flex items-center gap-1.5 text-sm font-medium">
162
180
  <input type="checkbox" bind:checked={trackEnabled} />
163
181
  {$T("constructor.props.map.track")}
@@ -240,7 +258,9 @@
240
258
  <h6 class="text-sm leading-none font-bold">{device.DevName}</h6>
241
259
  </div>
242
260
 
243
- <div class="grid grid-cols-2 gap-x-3 gap-y-1 rounded-lg bg-(--container-color) p-2 text-xs">
261
+ <div
262
+ class={`${twMerge("grid grid-cols-2 gap-x-3 gap-y-1 rounded-lg bg-(--container-color) p-2 text-xs", roleBgClass)} ${roleBgPaint}`}
263
+ >
244
264
  <div>
245
265
  <p class="text-[0.6rem] font-semibold tracking-wide uppercase opacity-60">Lat / Lon</p>
246
266
  <p class="font-medium">{device.NavLat.toFixed(5)}, {device.NavLon.toFixed(5)}</p>
@@ -20,10 +20,13 @@
20
20
  const isRemote = $derived(source === "remote")
21
21
 
22
22
  /* Мастер-цвет (тот же bg-* из optionsStore.COLOR_OPTIONS, что и у остальных примитивов) —
23
- проявляется как акцентная рамка кадра, см. Map.svelte для того же приёма. */
23
+ проявляется как акцентное кольцо вокруг кадра. Namеренно ring, а не border — border меняет
24
+ content-box контейнера (см. Map.svelte, где это ломало рендер MapLibre при смене цвета);
25
+ ring (box-shadow) размеры не меняет, тот же приём здесь для единообразия и на случай
26
+ будущей смены video/img на что-то более чувствительное к ресайзу контейнера. */
24
27
  const roleBorderClass = $derived.by(() => {
25
28
  const role = wrapperClass?.match(/bg-(\w+)/)?.[1]
26
- return role && role !== "max" ? `border-2 border-(--border-color) border-${role}` : ""
29
+ return role && role !== "max" ? `ring-2 ring-inset ring-(--border-color) border-${role}` : ""
27
30
  })
28
31
 
29
32
  let videoElement = $state<HTMLVideoElement | null>(null)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-svelte-ui-lib",
3
- "version": "1.28.3",
3
+ "version": "1.28.5",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {