@screenly/edge-apps 0.0.1 → 0.0.3

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 (143) hide show
  1. package/dist/assets/fonts/Inter-Medium.woff2 +0 -0
  2. package/dist/assets/fonts/Inter-Regular.woff2 +0 -0
  3. package/dist/assets/fonts/Inter-SemiBold.woff2 +0 -0
  4. package/dist/assets/images/icons/chancesleet.svg +4 -0
  5. package/dist/assets/images/icons/clear-night.svg +5 -0
  6. package/dist/assets/images/icons/clear.svg +11 -0
  7. package/dist/assets/images/icons/cloudy.svg +4 -0
  8. package/dist/assets/images/icons/drizzle.svg +5 -0
  9. package/dist/assets/images/icons/fewdrops.svg +4 -0
  10. package/dist/assets/images/icons/fog.svg +6 -0
  11. package/dist/assets/images/icons/haze.svg +6 -0
  12. package/dist/assets/images/icons/mostly-cloudy-night.svg +7 -0
  13. package/dist/assets/images/icons/mostly-cloudy.svg +13 -0
  14. package/dist/assets/images/icons/partially-cloudy-night.svg +6 -0
  15. package/dist/assets/images/icons/partially-cloudy.svg +12 -0
  16. package/dist/assets/images/icons/partlysunny.svg +6 -0
  17. package/dist/assets/images/icons/rain-night.svg +8 -0
  18. package/dist/assets/images/icons/rainy.svg +6 -0
  19. package/dist/assets/images/icons/sleet-night.svg +14 -0
  20. package/dist/assets/images/icons/sleet.svg +4 -0
  21. package/dist/assets/images/icons/snow.svg +19 -0
  22. package/dist/assets/images/icons/thunderstorm-night.svg +9 -0
  23. package/dist/assets/images/icons/thunderstorm.svg +7 -0
  24. package/dist/assets/images/icons/windy.svg +6 -0
  25. package/dist/assets/images/screenly.svg +10 -0
  26. package/dist/components/app-header/app-header.d.ts +43 -0
  27. package/dist/components/app-header/app-header.d.ts.map +1 -0
  28. package/dist/components/app-header/app-header.js +244 -0
  29. package/dist/components/auto-scaler/auto-scaler.d.ts +65 -0
  30. package/dist/components/auto-scaler/auto-scaler.d.ts.map +1 -0
  31. package/dist/components/auto-scaler/auto-scaler.js +304 -0
  32. package/dist/components/brand-logo/brand-logo.d.ts +42 -0
  33. package/dist/components/brand-logo/brand-logo.d.ts.map +1 -0
  34. package/dist/components/brand-logo/brand-logo.js +209 -0
  35. package/dist/components/calendar-views/calendar-view-utils.d.ts +5 -0
  36. package/dist/components/calendar-views/calendar-view-utils.d.ts.map +1 -0
  37. package/dist/components/calendar-views/calendar-view-utils.js +73 -0
  38. package/dist/components/calendar-views/calendar-window-utils.d.ts +9 -0
  39. package/dist/components/calendar-views/calendar-window-utils.d.ts.map +1 -0
  40. package/dist/components/calendar-views/calendar-window-utils.js +57 -0
  41. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view-styles.d.ts +2 -0
  42. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view-styles.d.ts.map +1 -0
  43. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view-styles.js +175 -0
  44. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view.d.ts +21 -0
  45. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view.d.ts.map +1 -0
  46. package/dist/components/calendar-views/daily-calendar-view/daily-calendar-view.js +130 -0
  47. package/dist/components/calendar-views/daily-calendar-view/index.d.ts +2 -0
  48. package/dist/components/calendar-views/daily-calendar-view/index.d.ts.map +1 -0
  49. package/dist/components/calendar-views/daily-calendar-view/index.js +1 -0
  50. package/dist/components/calendar-views/event-layout.d.ts +18 -0
  51. package/dist/components/calendar-views/event-layout.d.ts.map +1 -0
  52. package/dist/components/calendar-views/event-layout.js +139 -0
  53. package/dist/components/calendar-views/schedule-calendar-view/index.d.ts +2 -0
  54. package/dist/components/calendar-views/schedule-calendar-view/index.d.ts.map +1 -0
  55. package/dist/components/calendar-views/schedule-calendar-view/index.js +1 -0
  56. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view-styles.d.ts +2 -0
  57. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view-styles.d.ts.map +1 -0
  58. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view-styles.js +118 -0
  59. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view.d.ts +23 -0
  60. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view.d.ts.map +1 -0
  61. package/dist/components/calendar-views/schedule-calendar-view/schedule-calendar-view.js +167 -0
  62. package/dist/components/calendar-views/weekly-calendar-view/index.d.ts +3 -0
  63. package/dist/components/calendar-views/weekly-calendar-view/index.d.ts.map +1 -0
  64. package/dist/components/calendar-views/weekly-calendar-view/index.js +1 -0
  65. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-styles.d.ts +2 -0
  66. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-styles.d.ts.map +1 -0
  67. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-styles.js +234 -0
  68. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-utils.d.ts +16 -0
  69. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-utils.d.ts.map +1 -0
  70. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view-utils.js +83 -0
  71. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view.d.ts +26 -0
  72. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view.d.ts.map +1 -0
  73. package/dist/components/calendar-views/weekly-calendar-view/weekly-calendar-view.js +220 -0
  74. package/dist/components/dev-tools/dev-tools.d.ts +48 -0
  75. package/dist/components/dev-tools/dev-tools.d.ts.map +1 -0
  76. package/dist/components/dev-tools/dev-tools.js +186 -0
  77. package/dist/components/index.d.ts +14 -0
  78. package/dist/components/index.d.ts.map +1 -0
  79. package/dist/components/index.js +13 -0
  80. package/dist/components/register.d.ts +12 -0
  81. package/dist/components/register.d.ts.map +1 -0
  82. package/dist/components/register.js +11 -0
  83. package/dist/core/index.d.ts +30 -0
  84. package/dist/core/index.d.ts.map +1 -0
  85. package/dist/core/index.js +77 -0
  86. package/dist/index.d.ts +5 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +8 -0
  89. package/dist/test/index.d.ts +3 -0
  90. package/dist/test/index.d.ts.map +1 -0
  91. package/dist/test/index.js +2 -0
  92. package/dist/test/mock.d.ts +23 -0
  93. package/dist/test/mock.d.ts.map +1 -0
  94. package/dist/test/mock.js +49 -0
  95. package/dist/test/screenshots.d.ts +120 -0
  96. package/dist/test/screenshots.d.ts.map +1 -0
  97. package/dist/test/screenshots.js +127 -0
  98. package/dist/test/setup.d.ts +2 -0
  99. package/dist/test/setup.d.ts.map +1 -0
  100. package/dist/test/setup.js +13 -0
  101. package/dist/types/index.d.ts +138 -0
  102. package/dist/types/index.d.ts.map +1 -0
  103. package/dist/types/index.js +15 -0
  104. package/dist/utils/calendar.d.ts +28 -0
  105. package/dist/utils/calendar.d.ts.map +1 -0
  106. package/dist/utils/calendar.js +77 -0
  107. package/dist/utils/error-handling.d.ts +6 -0
  108. package/dist/utils/error-handling.d.ts.map +1 -0
  109. package/dist/utils/error-handling.js +16 -0
  110. package/dist/utils/html.d.ts +7 -0
  111. package/dist/utils/html.d.ts.map +1 -0
  112. package/dist/utils/html.js +13 -0
  113. package/dist/utils/index.d.ts +13 -0
  114. package/dist/utils/index.d.ts.map +1 -0
  115. package/dist/utils/index.js +12 -0
  116. package/dist/utils/locale.d.ts +68 -0
  117. package/dist/utils/locale.d.ts.map +1 -0
  118. package/dist/utils/locale.js +318 -0
  119. package/dist/utils/metadata.d.ts +39 -0
  120. package/dist/utils/metadata.d.ts.map +1 -0
  121. package/dist/utils/metadata.js +66 -0
  122. package/dist/utils/oauth.d.ts +16 -0
  123. package/dist/utils/oauth.d.ts.map +1 -0
  124. package/dist/utils/oauth.js +42 -0
  125. package/dist/utils/screen.d.ts +26 -0
  126. package/dist/utils/screen.d.ts.map +1 -0
  127. package/dist/utils/screen.js +44 -0
  128. package/dist/utils/settings.d.ts +38 -0
  129. package/dist/utils/settings.d.ts.map +1 -0
  130. package/dist/utils/settings.js +89 -0
  131. package/dist/utils/template.d.ts +2 -0
  132. package/dist/utils/template.d.ts.map +1 -0
  133. package/dist/utils/template.js +6 -0
  134. package/dist/utils/theme.d.ts +47 -0
  135. package/dist/utils/theme.d.ts.map +1 -0
  136. package/dist/utils/theme.js +183 -0
  137. package/dist/utils/utm.d.ts +23 -0
  138. package/dist/utils/utm.d.ts.map +1 -0
  139. package/dist/utils/utm.js +30 -0
  140. package/dist/utils/weather.d.ts +84 -0
  141. package/dist/utils/weather.d.ts.map +1 -0
  142. package/dist/utils/weather.js +272 -0
  143. package/package.json +8 -7
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Weather Utilities
3
+ * Functions for weather icon mapping and related utilities
4
+ */
5
+ import { getSetting } from './settings.js';
6
+ import { getMetadata } from './metadata.js';
7
+ // Import weather icons
8
+ import clearIcon from '../assets/images/icons/clear.svg';
9
+ import clearNightIcon from '../assets/images/icons/clear-night.svg';
10
+ import cloudyIcon from '../assets/images/icons/cloudy.svg';
11
+ import drizzleIcon from '../assets/images/icons/drizzle.svg';
12
+ import fewdropsIcon from '../assets/images/icons/fewdrops.svg';
13
+ import fogIcon from '../assets/images/icons/fog.svg';
14
+ import hazeIcon from '../assets/images/icons/haze.svg';
15
+ import mostlyCloudyIcon from '../assets/images/icons/mostly-cloudy.svg';
16
+ import mostlyCloudyNightIcon from '../assets/images/icons/mostly-cloudy-night.svg';
17
+ import partiallyCloudyIcon from '../assets/images/icons/partially-cloudy.svg';
18
+ import partiallyCloudyNightIcon from '../assets/images/icons/partially-cloudy-night.svg';
19
+ import partlySunnyIcon from '../assets/images/icons/partlysunny.svg';
20
+ import rainyIcon from '../assets/images/icons/rainy.svg';
21
+ import rainNightIcon from '../assets/images/icons/rain-night.svg';
22
+ import sleetIcon from '../assets/images/icons/sleet.svg';
23
+ import sleetNightIcon from '../assets/images/icons/sleet-night.svg';
24
+ import snowIcon from '../assets/images/icons/snow.svg';
25
+ import thunderstormIcon from '../assets/images/icons/thunderstorm.svg';
26
+ import thunderstormNightIcon from '../assets/images/icons/thunderstorm-night.svg';
27
+ import windyIcon from '../assets/images/icons/windy.svg';
28
+ import chancesleetIcon from '../assets/images/icons/chancesleet.svg';
29
+ // Weather icon mapping
30
+ export const WEATHER_ICONS = {
31
+ clear: clearIcon,
32
+ 'clear-night': clearNightIcon,
33
+ cloudy: cloudyIcon,
34
+ drizzle: drizzleIcon,
35
+ fewdrops: fewdropsIcon,
36
+ fog: fogIcon,
37
+ haze: hazeIcon,
38
+ 'mostly-cloudy': mostlyCloudyIcon,
39
+ 'mostly-cloudy-night': mostlyCloudyNightIcon,
40
+ 'partially-cloudy': partiallyCloudyIcon,
41
+ 'partially-cloudy-night': partiallyCloudyNightIcon,
42
+ partlysunny: partlySunnyIcon,
43
+ rain: rainyIcon,
44
+ rainy: rainyIcon,
45
+ 'rain-night': rainNightIcon,
46
+ sleet: sleetIcon,
47
+ 'sleet-night': sleetNightIcon,
48
+ snow: snowIcon,
49
+ thunderstorm: thunderstormIcon,
50
+ 'thunderstorm-night': thunderstormNightIcon,
51
+ windy: windyIcon,
52
+ chancesleet: chancesleetIcon,
53
+ };
54
+ /**
55
+ * Check if a given timestamp is during nighttime (8 PM - 5 AM) in the specified timezone
56
+ */
57
+ export function isNightForTimestamp(dt, timeZone) {
58
+ const hour = Number(new Intl.DateTimeFormat('en-US', {
59
+ hour: 'numeric',
60
+ hour12: false,
61
+ timeZone,
62
+ }).format(new Date(dt * 1000)));
63
+ return hour <= 5 || hour >= 20;
64
+ }
65
+ /**
66
+ * Get weather icon key based on OpenWeatherMap weather condition ID and time of day
67
+ * @param id - OpenWeatherMap weather condition ID (e.g., 800 for clear sky)
68
+ * @param dt - Unix timestamp in seconds
69
+ * @param timeZone - IANA timezone string (e.g., 'America/New_York')
70
+ * @returns Icon key string (e.g., 'clear', 'clear-night', 'rain', etc.)
71
+ */
72
+ export function getWeatherIconKey(id, dt, timeZone) {
73
+ let icon = 'clear';
74
+ const isNight = isNightForTimestamp(dt, timeZone);
75
+ if (id >= 200 && id <= 299) {
76
+ icon = 'thunderstorm';
77
+ }
78
+ else if (id >= 300 && id <= 399) {
79
+ icon = 'drizzle';
80
+ }
81
+ else if (id >= 500 && id <= 599) {
82
+ icon = 'rain';
83
+ }
84
+ else if (id >= 600 && id <= 699) {
85
+ icon = 'snow';
86
+ }
87
+ else if (id >= 700 && id <= 799) {
88
+ icon = 'haze';
89
+ }
90
+ else if (id === 800) {
91
+ icon = 'clear';
92
+ }
93
+ else if (id === 801) {
94
+ icon = 'partially-cloudy';
95
+ }
96
+ else if (id >= 802 && id <= 804) {
97
+ icon = 'mostly-cloudy';
98
+ }
99
+ const nightOverrides = {
100
+ clear: 'clear-night',
101
+ rain: 'rain-night',
102
+ 'mostly-cloudy': 'mostly-cloudy-night',
103
+ 'partially-cloudy': 'partially-cloudy-night',
104
+ thunderstorm: 'thunderstorm-night',
105
+ sleet: 'sleet-night',
106
+ };
107
+ return isNight && nightOverrides[icon] ? nightOverrides[icon] : icon;
108
+ }
109
+ /**
110
+ * Get the full URL path for a weather icon
111
+ * @param iconKey - Icon key from getWeatherIconKey (e.g., 'clear', 'rain-night')
112
+ * @param iconBase - Base path for weather icons (default: '/assets/images/icons')
113
+ * @returns Full URL path to the icon SVG file
114
+ */
115
+ export function getWeatherIconUrl(iconKey, iconBase = '/assets/images/icons') {
116
+ const iconMap = {
117
+ chancesleet: `${iconBase}/chancesleet.svg`,
118
+ 'clear-night': `${iconBase}/clear-night.svg`,
119
+ clear: `${iconBase}/clear.svg`,
120
+ cloudy: `${iconBase}/cloudy.svg`,
121
+ drizzle: `${iconBase}/drizzle.svg`,
122
+ fewdrops: `${iconBase}/fewdrops.svg`,
123
+ fog: `${iconBase}/fog.svg`,
124
+ haze: `${iconBase}/haze.svg`,
125
+ 'mostly-cloudy-night': `${iconBase}/mostly-cloudy-night.svg`,
126
+ 'mostly-cloudy': `${iconBase}/mostly-cloudy.svg`,
127
+ 'partially-cloudy-night': `${iconBase}/partially-cloudy-night.svg`,
128
+ 'partially-cloudy': `${iconBase}/partially-cloudy.svg`,
129
+ partlysunny: `${iconBase}/partlysunny.svg`,
130
+ 'rain-night': `${iconBase}/rain-night.svg`,
131
+ rain: `${iconBase}/rainy.svg`,
132
+ 'sleet-night': `${iconBase}/sleet-night.svg`,
133
+ sleet: `${iconBase}/sleet.svg`,
134
+ snow: `${iconBase}/snow.svg`,
135
+ thunderstorm: `${iconBase}/thunderstorm.svg`,
136
+ 'thunderstorm-night': `${iconBase}/thunderstorm-night.svg`,
137
+ windy: `${iconBase}/windy.svg`,
138
+ };
139
+ return iconMap[iconKey] || iconMap.clear;
140
+ }
141
+ /**
142
+ * Get weather icon source (imported SVG) based on weather condition ID and time
143
+ * @param weatherId - OpenWeatherMap weather condition ID (e.g., 800 for clear sky)
144
+ * @param dt - Unix timestamp in seconds
145
+ * @param timeZone - IANA timezone string (e.g., 'America/New_York')
146
+ * @returns Icon source string (Vite-imported SVG path)
147
+ */
148
+ export function getWeatherIcon(weatherId, dt, timeZone) {
149
+ const iconKey = getWeatherIconKey(weatherId, dt, timeZone);
150
+ return WEATHER_ICONS[iconKey] || WEATHER_ICONS['clear'];
151
+ }
152
+ // --- Shared weather data utilities ---
153
+ /**
154
+ * Validate OpenWeatherMap API response
155
+ * Note: `cod` can be number (200) or string ("200") depending on the endpoint
156
+ */
157
+ export function isValidWeatherResponse(data) {
158
+ const temp = data.main?.temp;
159
+ return ((data.cod === 200 || data.cod === '200') &&
160
+ typeof temp === 'number' &&
161
+ Number.isFinite(temp));
162
+ }
163
+ /**
164
+ * Fetch current weather data from OpenWeatherMap API
165
+ * Returns raw weather data that each app can map to its own interface
166
+ * @param lat - Latitude
167
+ * @param lng - Longitude
168
+ * @param tz - Timezone
169
+ * @param unit - Measurement unit ('metric' or 'imperial')
170
+ */
171
+ export async function fetchCurrentWeatherData(lat, lng, tz, unit = 'metric') {
172
+ try {
173
+ const apiKey = getSetting('openweathermap_api_key');
174
+ if (!apiKey) {
175
+ return null;
176
+ }
177
+ const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lng}&units=${unit}&appid=${apiKey}`);
178
+ if (!response.ok) {
179
+ console.warn('Failed to get weather data: OpenWeatherMap API responded with', response.status, response.statusText);
180
+ return null;
181
+ }
182
+ const data = await response.json();
183
+ if (!isValidWeatherResponse(data)) {
184
+ return null;
185
+ }
186
+ const temperature = Math.round(data.main.temp);
187
+ const tempHigh = typeof data.main.temp_max === 'number' &&
188
+ Number.isFinite(data.main.temp_max)
189
+ ? Math.round(data.main.temp_max)
190
+ : temperature;
191
+ const tempLow = typeof data.main.temp_min === 'number' &&
192
+ Number.isFinite(data.main.temp_min)
193
+ ? Math.round(data.main.temp_min)
194
+ : temperature;
195
+ const weatherId = data.weather?.[0]?.id ?? null;
196
+ if (!weatherId) {
197
+ return null;
198
+ }
199
+ const dt = Math.floor(Date.now() / 1000);
200
+ const description = data.weather?.[0]?.description || '';
201
+ const iconSrc = getWeatherIcon(weatherId, dt, tz);
202
+ const iconAlt = description || 'Weather icon';
203
+ return {
204
+ temperature,
205
+ tempHigh,
206
+ tempLow,
207
+ weatherId,
208
+ description,
209
+ iconSrc,
210
+ iconAlt,
211
+ unit,
212
+ };
213
+ }
214
+ catch (error) {
215
+ console.warn('Failed to get weather data:', error);
216
+ return null;
217
+ }
218
+ }
219
+ /**
220
+ * Get city information including name and country code from OpenWeatherMap reverse geocoding
221
+ * @param lat - Latitude
222
+ * @param lng - Longitude
223
+ * @returns Object containing cityName and countryCode
224
+ */
225
+ export async function getCityInfo(lat, lng) {
226
+ try {
227
+ const apiKey = getSetting('openweathermap_api_key');
228
+ if (!apiKey) {
229
+ // Fallback to location from metadata if no API key
230
+ return {
231
+ cityName: getMetadata().location || 'Unknown Location',
232
+ countryCode: '',
233
+ };
234
+ }
235
+ const response = await fetch(`https://api.openweathermap.org/geo/1.0/reverse?lat=${lat}&lon=${lng}&limit=1&appid=${apiKey}`);
236
+ if (!response.ok) {
237
+ console.warn('Failed to get city info: OpenWeatherMap API responded with', response.status, response.statusText);
238
+ return {
239
+ cityName: getMetadata().location || 'Unknown Location',
240
+ countryCode: '',
241
+ };
242
+ }
243
+ const data = await response.json();
244
+ if (Array.isArray(data) && data.length > 0) {
245
+ const { name, country } = data[0];
246
+ if (name && country) {
247
+ return {
248
+ cityName: `${name}, ${country}`,
249
+ countryCode: country,
250
+ };
251
+ }
252
+ }
253
+ }
254
+ catch (error) {
255
+ console.warn('Failed to get city info:', error);
256
+ }
257
+ // Fallback to location from metadata
258
+ return {
259
+ cityName: getMetadata().location || 'Unknown Location',
260
+ countryCode: '',
261
+ };
262
+ }
263
+ /**
264
+ * Get city name from coordinates using OpenWeatherMap reverse geocoding
265
+ * @param lat - Latitude
266
+ * @param lng - Longitude
267
+ * @returns City name in format "City, Country" or fallback location
268
+ */
269
+ export async function getCityName(lat, lng) {
270
+ const { cityName } = await getCityInfo(lat, lng);
271
+ return cityName;
272
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@screenly/edge-apps",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A TypeScript library for interfacing with Screenly Edge Apps API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -51,6 +51,7 @@
51
51
  "src/assets"
52
52
  ],
53
53
  "scripts": {
54
+ "prepublishOnly": "bun run build",
54
55
  "prebuild": "bun run type-check",
55
56
  "build": "bun build:types && bun run copy:assets",
56
57
  "build:types": "tsc",
@@ -76,13 +77,16 @@
76
77
  },
77
78
  "dependencies": {
78
79
  "@photostructure/tz-lookup": "^11.5.0",
79
- "dayjs": "^1.11.19",
80
80
  "@tailwindcss/vite": "^4.2.1",
81
81
  "country-locale-map": "^1.9.12",
82
+ "dayjs": "^1.11.19",
83
+ "jiti": "^2.6.1",
82
84
  "offline-geocode-city": "^1.0.2",
83
85
  "panic-overlay": "^1.0.51",
84
86
  "sharp": "^0.34.5",
85
- "tailwindcss": "^4.2.1"
87
+ "tailwindcss": "^4.2.1",
88
+ "vite": "^7.3.1",
89
+ "yaml": "^2.8.2"
86
90
  },
87
91
  "peerDependencies": {
88
92
  "@playwright/test": "^1.58.0"
@@ -100,12 +104,9 @@
100
104
  "@types/sharp": "^0.32.0",
101
105
  "bun-types": "^1.3.10",
102
106
  "eslint": "^10.0.3",
103
- "jiti": "^2.6.1",
104
107
  "jsdom": "^28.1.0",
105
108
  "prettier": "^3.8.1",
106
109
  "typescript": "^5.9.3",
107
- "typescript-eslint": "^8.57.0",
108
- "vite": "^7.3.1",
109
- "yaml": "^2.8.2"
110
+ "typescript-eslint": "^8.57.0"
110
111
  }
111
112
  }