@devsantara/head 0.2.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.
- package/LICENSE +21 -0
- package/README.md +330 -0
- package/dist/adapters/index.d.ts +39 -0
- package/dist/adapters/index.js +72 -0
- package/dist/index.d.ts +293 -0
- package/dist/index.js +484 -0
- package/dist/types-Cvpk_Zha.d.ts +455 -0
- package/package.json +62 -0
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Meta element attributes with full React HTML type support.
|
|
4
|
+
*/
|
|
5
|
+
type HeadMetaAttributes = React.DetailedHTMLProps<React.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
|
|
6
|
+
/**
|
|
7
|
+
* Link element attributes with full React HTML type support.
|
|
8
|
+
*/
|
|
9
|
+
type HeadLinkAttributes = React.DetailedHTMLProps<React.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
|
|
10
|
+
/**
|
|
11
|
+
* Script element attributes with full React HTML type support.
|
|
12
|
+
*/
|
|
13
|
+
type HeadScriptAttributes = React.DetailedHTMLProps<React.ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>;
|
|
14
|
+
/**
|
|
15
|
+
* Style element attributes with full React HTML type support.
|
|
16
|
+
*/
|
|
17
|
+
type HeadStyleAttributes = React.DetailedHTMLProps<React.StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>;
|
|
18
|
+
/**
|
|
19
|
+
* Title element attributes with full React HTML type support.
|
|
20
|
+
*/
|
|
21
|
+
type HeadTitleAttributes = React.DetailedHTMLProps<React.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
|
|
22
|
+
/**
|
|
23
|
+
* Mapping of HTML head element types to their respective attribute types.
|
|
24
|
+
*/
|
|
25
|
+
interface HeadAttributeTypeMap {
|
|
26
|
+
meta: HeadMetaAttributes;
|
|
27
|
+
link: HeadLinkAttributes;
|
|
28
|
+
script: HeadScriptAttributes;
|
|
29
|
+
style: HeadStyleAttributes;
|
|
30
|
+
title: HeadTitleAttributes;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Represents a single HTML head element with its type and attributes.
|
|
34
|
+
*
|
|
35
|
+
* @template T - The element type (meta, link, script, style, or title)
|
|
36
|
+
*/
|
|
37
|
+
type HeadElement<T extends keyof HeadAttributeTypeMap = keyof HeadAttributeTypeMap> = {
|
|
38
|
+
type: T;
|
|
39
|
+
attributes: HeadAttributeTypeMap[T];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Adapter interface for transforming head elements into framework-specific formats.
|
|
43
|
+
*
|
|
44
|
+
* @template T - The output type returned by the adapter
|
|
45
|
+
*/
|
|
46
|
+
interface HeadAdapter<T> {
|
|
47
|
+
transform(elements: HeadElement[]): T;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Character encoding type with autocomplete for common charsets while allowing any string value.
|
|
51
|
+
*/
|
|
52
|
+
type CharSet = 'utf-8' | (string & {});
|
|
53
|
+
/**
|
|
54
|
+
* Color scheme preference indicating which color schemes the document supports.
|
|
55
|
+
*/
|
|
56
|
+
type ColorScheme = 'light' | 'dark' | 'light dark' | 'dark light' | 'only light' | 'only dark' | 'normal' | (string & {});
|
|
57
|
+
/**
|
|
58
|
+
* Viewport configuration for responsive web design and mobile optimization.
|
|
59
|
+
*/
|
|
60
|
+
interface ViewportOptions {
|
|
61
|
+
width?: 'device-width' | number | (string & {});
|
|
62
|
+
height?: 'device-height' | number | (string & {});
|
|
63
|
+
initialScale?: number;
|
|
64
|
+
minimumScale?: number;
|
|
65
|
+
maximumScale?: number;
|
|
66
|
+
userScalable?: boolean;
|
|
67
|
+
viewportFit?: 'auto' | 'cover' | 'contain';
|
|
68
|
+
interactiveWidget?: 'resizes-visual' | 'resizes-content' | 'overlays-content';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Robots directives for controlling search engine crawling and indexing behavior.
|
|
72
|
+
*/
|
|
73
|
+
interface RobotsOptions {
|
|
74
|
+
index?: boolean;
|
|
75
|
+
follow?: boolean;
|
|
76
|
+
[key: string]: boolean | string | number | undefined;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Open Graph article metadata properties for news articles, blog posts, and written content.
|
|
80
|
+
*/
|
|
81
|
+
type ArticleMetadataProperty = {
|
|
82
|
+
name: 'article:published_time';
|
|
83
|
+
content: string;
|
|
84
|
+
} | {
|
|
85
|
+
name: 'article:modified_time';
|
|
86
|
+
content: string;
|
|
87
|
+
} | {
|
|
88
|
+
name: 'article:expiration_time';
|
|
89
|
+
content: string;
|
|
90
|
+
} | {
|
|
91
|
+
name: 'article:author';
|
|
92
|
+
content: string;
|
|
93
|
+
} | {
|
|
94
|
+
name: 'article:section';
|
|
95
|
+
content: string;
|
|
96
|
+
} | {
|
|
97
|
+
name: 'article:tag';
|
|
98
|
+
content: string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Open Graph book metadata properties for books and publications.
|
|
102
|
+
*/
|
|
103
|
+
type BookMetadataProperty = {
|
|
104
|
+
name: 'book:isbn';
|
|
105
|
+
content: string;
|
|
106
|
+
} | {
|
|
107
|
+
name: 'book:release_date';
|
|
108
|
+
content: string;
|
|
109
|
+
} | {
|
|
110
|
+
name: 'book:author';
|
|
111
|
+
content: string;
|
|
112
|
+
} | {
|
|
113
|
+
name: 'book:tag';
|
|
114
|
+
content: string;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Open Graph profile metadata properties for user profiles and personal pages.
|
|
118
|
+
*/
|
|
119
|
+
type ProfileMetadataProperty = {
|
|
120
|
+
name: 'profile:first_name';
|
|
121
|
+
content: string;
|
|
122
|
+
} | {
|
|
123
|
+
name: 'profile:last_name';
|
|
124
|
+
content: string;
|
|
125
|
+
} | {
|
|
126
|
+
name: 'profile:username';
|
|
127
|
+
content: string;
|
|
128
|
+
} | {
|
|
129
|
+
name: 'profile:gender';
|
|
130
|
+
content: string;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Open Graph music.song metadata properties for individual music tracks.
|
|
134
|
+
*/
|
|
135
|
+
type MusicSongMetadataProperty = {
|
|
136
|
+
name: 'music:duration';
|
|
137
|
+
content: string;
|
|
138
|
+
} | {
|
|
139
|
+
name: 'music:album';
|
|
140
|
+
content: string;
|
|
141
|
+
} | {
|
|
142
|
+
name: 'music:album:disc';
|
|
143
|
+
content: string;
|
|
144
|
+
} | {
|
|
145
|
+
name: 'music:album:track';
|
|
146
|
+
content: string;
|
|
147
|
+
} | {
|
|
148
|
+
name: 'music:musician';
|
|
149
|
+
content: string;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Open Graph music.album metadata properties for music albums.
|
|
153
|
+
*/
|
|
154
|
+
type MusicAlbumMetadataProperty = {
|
|
155
|
+
name: 'music:song';
|
|
156
|
+
content: string;
|
|
157
|
+
} | {
|
|
158
|
+
name: 'music:song:disc';
|
|
159
|
+
content: string;
|
|
160
|
+
} | {
|
|
161
|
+
name: 'music:song:track';
|
|
162
|
+
content: string;
|
|
163
|
+
} | {
|
|
164
|
+
name: 'music:musician';
|
|
165
|
+
content: string;
|
|
166
|
+
} | {
|
|
167
|
+
name: 'music:release_date';
|
|
168
|
+
content: string;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Open Graph music.playlist metadata properties for music playlists.
|
|
172
|
+
*/
|
|
173
|
+
type MusicPlaylistMetadataProperty = {
|
|
174
|
+
name: 'music:song';
|
|
175
|
+
content: string;
|
|
176
|
+
} | {
|
|
177
|
+
name: 'music:song:disc';
|
|
178
|
+
content: string;
|
|
179
|
+
} | {
|
|
180
|
+
name: 'music:song:track';
|
|
181
|
+
content: string;
|
|
182
|
+
} | {
|
|
183
|
+
name: 'music:creator';
|
|
184
|
+
content: string;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Open Graph music.radio_station metadata properties for radio stations.
|
|
188
|
+
*/
|
|
189
|
+
interface MusicRadioStationMetadataProperty {
|
|
190
|
+
name: 'music:creator';
|
|
191
|
+
content: string;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Open Graph video.movie metadata properties for movies.
|
|
195
|
+
*/
|
|
196
|
+
type VideoMovieProperty = {
|
|
197
|
+
name: 'video:actor';
|
|
198
|
+
content: string;
|
|
199
|
+
} | {
|
|
200
|
+
name: 'video:actor:role';
|
|
201
|
+
content: string;
|
|
202
|
+
} | {
|
|
203
|
+
name: 'video:director';
|
|
204
|
+
content: string;
|
|
205
|
+
} | {
|
|
206
|
+
name: 'video:writer';
|
|
207
|
+
content: string;
|
|
208
|
+
} | {
|
|
209
|
+
name: 'video:duration';
|
|
210
|
+
content: string;
|
|
211
|
+
} | {
|
|
212
|
+
name: 'video:release_date';
|
|
213
|
+
content: string;
|
|
214
|
+
} | {
|
|
215
|
+
name: 'video:tag';
|
|
216
|
+
content: string;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Open Graph video.episode metadata properties for TV show episodes.
|
|
220
|
+
*/
|
|
221
|
+
type VideoEpisodeMetadataProperty = {
|
|
222
|
+
name: 'video:actor';
|
|
223
|
+
content: string;
|
|
224
|
+
} | {
|
|
225
|
+
name: 'video:actor:role';
|
|
226
|
+
content: string;
|
|
227
|
+
} | {
|
|
228
|
+
name: 'video:director';
|
|
229
|
+
content: string;
|
|
230
|
+
} | {
|
|
231
|
+
name: 'video:writer';
|
|
232
|
+
content: string;
|
|
233
|
+
} | {
|
|
234
|
+
name: 'video:duration';
|
|
235
|
+
content: string;
|
|
236
|
+
} | {
|
|
237
|
+
name: 'video:release_date';
|
|
238
|
+
content: string;
|
|
239
|
+
} | {
|
|
240
|
+
name: 'video:tag';
|
|
241
|
+
content: string;
|
|
242
|
+
} | {
|
|
243
|
+
name: 'video:series';
|
|
244
|
+
content: string;
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Open Graph video.tv_show metadata properties for TV shows.
|
|
248
|
+
*/
|
|
249
|
+
type VideoTvShowMetadataProperty = {
|
|
250
|
+
name: 'video:actor';
|
|
251
|
+
content: string;
|
|
252
|
+
} | {
|
|
253
|
+
name: 'video:actor:role';
|
|
254
|
+
content: string;
|
|
255
|
+
} | {
|
|
256
|
+
name: 'video:director';
|
|
257
|
+
content: string;
|
|
258
|
+
} | {
|
|
259
|
+
name: 'video:writer';
|
|
260
|
+
content: string;
|
|
261
|
+
} | {
|
|
262
|
+
name: 'video:duration';
|
|
263
|
+
content: string;
|
|
264
|
+
} | {
|
|
265
|
+
name: 'video:release_date';
|
|
266
|
+
content: string;
|
|
267
|
+
} | {
|
|
268
|
+
name: 'video:tag';
|
|
269
|
+
content: string;
|
|
270
|
+
};
|
|
271
|
+
/**
|
|
272
|
+
* Open Graph video.other metadata properties for video content not categorized as movie, episode, or TV show.
|
|
273
|
+
*/
|
|
274
|
+
type VideoOtherMetadataProperty = {
|
|
275
|
+
name: 'video:actor';
|
|
276
|
+
content: string;
|
|
277
|
+
} | {
|
|
278
|
+
name: 'video:actor:role';
|
|
279
|
+
content: string;
|
|
280
|
+
} | {
|
|
281
|
+
name: 'video:director';
|
|
282
|
+
content: string;
|
|
283
|
+
} | {
|
|
284
|
+
name: 'video:writer';
|
|
285
|
+
content: string;
|
|
286
|
+
} | {
|
|
287
|
+
name: 'video:duration';
|
|
288
|
+
content: string;
|
|
289
|
+
} | {
|
|
290
|
+
name: 'video:release_date';
|
|
291
|
+
content: string;
|
|
292
|
+
} | {
|
|
293
|
+
name: 'video:tag';
|
|
294
|
+
content: string;
|
|
295
|
+
};
|
|
296
|
+
/**
|
|
297
|
+
* Open Graph content type with optional type-specific metadata properties.
|
|
298
|
+
*/
|
|
299
|
+
type OpenGraphType = {
|
|
300
|
+
name: 'article';
|
|
301
|
+
properties: ArticleMetadataProperty[];
|
|
302
|
+
} | {
|
|
303
|
+
name: 'book';
|
|
304
|
+
properties: BookMetadataProperty[];
|
|
305
|
+
} | {
|
|
306
|
+
name: 'music.song';
|
|
307
|
+
properties: MusicSongMetadataProperty[];
|
|
308
|
+
} | {
|
|
309
|
+
name: 'music.album';
|
|
310
|
+
properties: MusicAlbumMetadataProperty[];
|
|
311
|
+
} | {
|
|
312
|
+
name: 'music.playlist';
|
|
313
|
+
properties: MusicPlaylistMetadataProperty[];
|
|
314
|
+
} | {
|
|
315
|
+
name: 'music.radio_station';
|
|
316
|
+
properties: MusicRadioStationMetadataProperty[];
|
|
317
|
+
} | {
|
|
318
|
+
name: 'profile';
|
|
319
|
+
properties: ProfileMetadataProperty[];
|
|
320
|
+
} | {
|
|
321
|
+
name: 'video.tv_show';
|
|
322
|
+
properties: VideoTvShowMetadataProperty[];
|
|
323
|
+
} | {
|
|
324
|
+
name: 'video.other';
|
|
325
|
+
properties: VideoOtherMetadataProperty[];
|
|
326
|
+
} | {
|
|
327
|
+
name: 'video.movie';
|
|
328
|
+
properties: VideoMovieProperty[];
|
|
329
|
+
} | {
|
|
330
|
+
name: 'video.episode';
|
|
331
|
+
properties: VideoEpisodeMetadataProperty[];
|
|
332
|
+
} | {
|
|
333
|
+
name: 'website';
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
* Open Graph metadata configuration for rich social media previews.
|
|
337
|
+
*/
|
|
338
|
+
interface OpenGraphOptions {
|
|
339
|
+
title?: string;
|
|
340
|
+
description?: string;
|
|
341
|
+
url?: string | URL;
|
|
342
|
+
locale?: string;
|
|
343
|
+
image?: {
|
|
344
|
+
url: string | URL;
|
|
345
|
+
alt?: string;
|
|
346
|
+
type?: string;
|
|
347
|
+
width?: number;
|
|
348
|
+
height?: number;
|
|
349
|
+
};
|
|
350
|
+
type?: OpenGraphType;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Twitter player card metadata properties for video and audio content.
|
|
354
|
+
*/
|
|
355
|
+
type TwitterPlayerProperty = {
|
|
356
|
+
name: 'twitter:player';
|
|
357
|
+
content: string | URL;
|
|
358
|
+
} | {
|
|
359
|
+
name: 'twitter:player:width';
|
|
360
|
+
content: number;
|
|
361
|
+
} | {
|
|
362
|
+
name: 'twitter:player:height';
|
|
363
|
+
content: number;
|
|
364
|
+
} | {
|
|
365
|
+
name: 'twitter:player:stream';
|
|
366
|
+
content: string | URL;
|
|
367
|
+
};
|
|
368
|
+
/**
|
|
369
|
+
* Twitter app card metadata properties for mobile app installations.
|
|
370
|
+
*/
|
|
371
|
+
type TwitterAppProperty = {
|
|
372
|
+
name: 'twitter:app:id:iphone';
|
|
373
|
+
content: string | number;
|
|
374
|
+
} | {
|
|
375
|
+
name: 'twitter:app:id:ipad';
|
|
376
|
+
content: string | number;
|
|
377
|
+
} | {
|
|
378
|
+
name: 'twitter:app:id:googleplay';
|
|
379
|
+
content: string;
|
|
380
|
+
} | {
|
|
381
|
+
name: 'twitter:app:url:iphone';
|
|
382
|
+
content: string | URL;
|
|
383
|
+
} | {
|
|
384
|
+
name: 'twitter:app:url:ipad';
|
|
385
|
+
content: string | URL;
|
|
386
|
+
} | {
|
|
387
|
+
name: 'twitter:app:url:googleplay';
|
|
388
|
+
content: string | URL;
|
|
389
|
+
} | {
|
|
390
|
+
name: 'twitter:app:name:iphone';
|
|
391
|
+
content: string;
|
|
392
|
+
} | {
|
|
393
|
+
name: 'twitter:app:name:ipad';
|
|
394
|
+
content: string;
|
|
395
|
+
} | {
|
|
396
|
+
name: 'twitter:app:name:googleplay';
|
|
397
|
+
content: string;
|
|
398
|
+
} | {
|
|
399
|
+
name: 'twitter:app:country';
|
|
400
|
+
content: string;
|
|
401
|
+
};
|
|
402
|
+
/**
|
|
403
|
+
* Twitter Card type with optional card-specific metadata.
|
|
404
|
+
*/
|
|
405
|
+
type TwitterCard = {
|
|
406
|
+
name: 'summary';
|
|
407
|
+
} | {
|
|
408
|
+
name: 'summary_large_image';
|
|
409
|
+
} | {
|
|
410
|
+
name: 'player';
|
|
411
|
+
properties: TwitterPlayerProperty[];
|
|
412
|
+
} | {
|
|
413
|
+
name: 'app';
|
|
414
|
+
properties: TwitterAppProperty[];
|
|
415
|
+
};
|
|
416
|
+
/**
|
|
417
|
+
* Twitter Card metadata configuration for rich previews on Twitter/X.
|
|
418
|
+
*/
|
|
419
|
+
interface TwitterOptions {
|
|
420
|
+
title?: string;
|
|
421
|
+
description?: string;
|
|
422
|
+
site?: string;
|
|
423
|
+
siteId?: string;
|
|
424
|
+
creator?: string;
|
|
425
|
+
creatorId?: string;
|
|
426
|
+
image?: {
|
|
427
|
+
url: string | URL;
|
|
428
|
+
alt?: string;
|
|
429
|
+
};
|
|
430
|
+
card?: TwitterCard;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Locale key type supporting 'x-default', specific locale strings, or custom values.
|
|
434
|
+
*/
|
|
435
|
+
type AlternateLocaleKey<TLocale extends string> = ('x-default' | TLocale) | (string & {});
|
|
436
|
+
/**
|
|
437
|
+
* Alternate locale/language mapping for internationalization, linking language codes to their corresponding URLs.
|
|
438
|
+
*/
|
|
439
|
+
type AlternateLocaleOptions<TLocale extends string> = Record<AlternateLocaleKey<TLocale>, string | URL>;
|
|
440
|
+
/**
|
|
441
|
+
* Icon preset type with autocomplete for common icon types while allowing custom values.
|
|
442
|
+
*/
|
|
443
|
+
type IconPreset = 'icon' | 'apple' | 'shortcut' | (string & {});
|
|
444
|
+
/**
|
|
445
|
+
* Icon configuration with href required and rel determined by the preset parameter.
|
|
446
|
+
*/
|
|
447
|
+
type IconOptions = Omit<HeadAttributeTypeMap['link'], 'rel' | 'href'> & {
|
|
448
|
+
href: string | URL;
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* Stylesheet configuration with additional link attributes, excluding rel and href which are set automatically.
|
|
452
|
+
*/
|
|
453
|
+
type StylesheetOptions = Omit<HeadLinkAttributes, 'rel' | 'href'>;
|
|
454
|
+
//#endregion
|
|
455
|
+
export { TwitterOptions as _, HeadAttributeTypeMap as a, HeadMetaAttributes as c, HeadTitleAttributes as d, IconOptions as f, StylesheetOptions as g, RobotsOptions as h, HeadAdapter as i, HeadScriptAttributes as l, OpenGraphOptions as m, CharSet as n, HeadElement as o, IconPreset as p, ColorScheme as r, HeadLinkAttributes as s, AlternateLocaleOptions as t, HeadStyleAttributes as u, ViewportOptions as v };
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devsantara/head",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "A type-safe HTML head builder",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"devsantara",
|
|
7
|
+
"head"
|
|
8
|
+
],
|
|
9
|
+
"homepage": "https://github.com/devsantara/head#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/devsantara/head/issues"
|
|
12
|
+
},
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"author": "edwintantawi",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/devsantara/head.git"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "./dist/index.js",
|
|
26
|
+
"module": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": "./dist/index.js",
|
|
30
|
+
"./adapters": "./dist/adapters/index.js",
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@changesets/cli": "^2.29.8",
|
|
38
|
+
"oxfmt": "^0.27.0",
|
|
39
|
+
"oxlint": "^1.42.0",
|
|
40
|
+
"oxlint-tsgolint": "^0.11.4",
|
|
41
|
+
"tsdown": "^0.20.1",
|
|
42
|
+
"typescript": "^5.9.3",
|
|
43
|
+
"vitest": "^4.0.18"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@types/react": ">=18.0.0 || >=19.0.0",
|
|
47
|
+
"react": ">=18.0.0 || >=19.0.0"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsdown",
|
|
51
|
+
"dev": "tsdown --watch",
|
|
52
|
+
"test": "vitest",
|
|
53
|
+
"lint": "oxlint --type-aware",
|
|
54
|
+
"lint:fix": "oxlint --type-aware --fix",
|
|
55
|
+
"lint:ts": "tsc --noEmit",
|
|
56
|
+
"format": "oxfmt",
|
|
57
|
+
"format:check": "oxfmt --check",
|
|
58
|
+
"changeset": "changeset",
|
|
59
|
+
"changeset:version": "changeset version",
|
|
60
|
+
"changeset:publish": "changeset publish"
|
|
61
|
+
}
|
|
62
|
+
}
|