@hotosm/ui 0.3.4-b2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/{chunk.LF3EJYUJ.js → chunk.3DAASGWT.js} +1 -1
  3. package/dist/chunks/chunk.5AWU5BEU.js +1 -0
  4. package/dist/chunks/{chunk.3M4SJCXS.js → chunk.6TJUNYFL.js} +49 -35
  5. package/dist/chunks/{chunk.OCJJFWT7.js → chunk.BB52VMVE.js} +55 -50
  6. package/dist/chunks/chunk.EAG35WPB.js +122 -0
  7. package/dist/chunks/chunk.EOTM323U.js +71 -0
  8. package/dist/chunks/chunk.EYNFK5TH.js +187 -0
  9. package/dist/chunks/chunk.FBYBLQYY.js +25 -0
  10. package/dist/chunks/{chunk.LET777HR.js → chunk.G3Z3BOX2.js} +2 -2
  11. package/dist/chunks/chunk.JFO3Z4VS.js +1 -0
  12. package/dist/chunks/chunk.KNTMZWRV.js +28 -0
  13. package/dist/chunks/chunk.L3MJ3UC7.js +1 -0
  14. package/dist/chunks/chunk.LR75BDGN.js +20 -0
  15. package/dist/chunks/chunk.OFDFUT7C.js +1 -0
  16. package/dist/chunks/{chunk.LFXZGORR.js → chunk.VA2JNCZO.js} +1 -1
  17. package/dist/chunks/chunk.VNFZXHID.js +1 -0
  18. package/dist/chunks/chunk.XNPNEHIJ.js +1 -0
  19. package/dist/chunks/{chunk.OKOD2JGL.js → chunk.YH5QYI7V.js} +1 -1
  20. package/dist/chunks/chunk.ZU62FSGZ.js +105 -0
  21. package/dist/components/consent/consent.component.js +1 -1
  22. package/dist/components/consent/consent.js +1 -1
  23. package/dist/components/consent/consent.styles.js +1 -1
  24. package/dist/components/file-input-dropzone/file-input-dropzone.component.d.ts +39 -0
  25. package/dist/components/file-input-dropzone/file-input-dropzone.component.js +1 -0
  26. package/dist/components/file-input-dropzone/file-input-dropzone.d.ts +8 -0
  27. package/dist/components/file-input-dropzone/file-input-dropzone.js +1 -0
  28. package/dist/components/file-input-dropzone/file-input-dropzone.styles.d.ts +2 -0
  29. package/dist/components/file-input-dropzone/file-input-dropzone.styles.js +1 -0
  30. package/dist/components/header/header.component.d.ts +0 -2
  31. package/dist/components/header/header.component.js +1 -1
  32. package/dist/components/header/header.js +1 -1
  33. package/dist/components/header/header.styles.js +1 -1
  34. package/dist/components/list-card/list-card.component.d.ts +16 -0
  35. package/dist/components/list-card/list-card.component.js +1 -0
  36. package/dist/components/list-card/list-card.d.ts +7 -0
  37. package/dist/components/list-card/list-card.js +1 -0
  38. package/dist/components/list-card/list-card.styles.d.ts +2 -0
  39. package/dist/components/list-card/list-card.styles.js +1 -0
  40. package/dist/components/logo/logo.component.js +1 -1
  41. package/dist/components/logo/logo.js +1 -1
  42. package/dist/components/logo/logo.styles.js +1 -1
  43. package/dist/components/tracking/tracking.component.js +1 -1
  44. package/dist/components/tracking/tracking.js +1 -1
  45. package/dist/hotosm-ui.d.ts +4 -2
  46. package/dist/hotosm-ui.js +1 -1
  47. package/dist/style.css +4 -3
  48. package/dist/themes/{hot-wa-override.css → hot-wa.css} +122 -323
  49. package/dist/themes/hot.css +15 -15
  50. package/dist/utils/shadow-dom-css.d.ts +3 -17
  51. package/package.json +16 -3
  52. package/dist/chunks/chunk.2NK5PHJW.js +0 -1531
  53. package/dist/chunks/chunk.6EX2DAUF.js +0 -1
  54. package/dist/chunks/chunk.6HOFUZAE.js +0 -69
  55. package/dist/chunks/chunk.C6I42VVF.js +0 -28
  56. package/dist/chunks/chunk.N7VH3RWY.js +0 -688
  57. package/dist/chunks/chunk.NXHCSWIR.js +0 -1
  58. package/dist/chunks/chunk.OHYOXYF2.js +0 -25
  59. package/dist/chunks/chunk.PSMDEZL4.js +0 -1
  60. package/dist/chunks/chunk.U4WXIJS7.js +0 -1
  61. package/dist/themes/hot-button-override.css +0 -246
@@ -1,7 +1,15 @@
1
+ /* HOT theme for WebAwesome
1
2
 
2
- /* HOT colour palette for WebAwesome */
3
+ 1. First import WebAwesome base styles
4
+ @import url("https://early.webawesome.com/webawesome@3.0.0-beta.1/dist/styles/webawesome.css");
3
5
 
4
- @import url('https://early.webawesome.com/webawesome@3.0.0-beta.3/dist/styles/color/palettes/base.css');
6
+ 2. Then import our HOT theme variables
7
+ @import "./hot.css";
8
+ @import "./hot-font-face.css";
9
+
10
+ 3. Then HOT WebAwesome overrides
11
+ @import "./hot-wa.css";
12
+ */
5
13
 
6
14
  @layer wa-color-palette {
7
15
  :where(:root),
@@ -226,83 +234,6 @@
226
234
  --wa-color-pink: var(--wa-color-pink-50);
227
235
  --wa-color-pink-key: 50;
228
236
 
229
- /*
230
- * WebAwesome Theme Override
231
- * This defines all the semantic color variants used by WebAwesome components
232
- */
233
- :where(:root), .wa-theme-default, .wa-light, .wa-dark .wa-invert, .wa-light .wa-theme-default, .wa-dark .wa-theme-default.wa-invert, .wa-dark .wa-theme-default .wa-invert {
234
- color-scheme: light;
235
- color: var(--wa-color-text-normal);
236
- --wa-color-surface-raised: white;
237
- --wa-color-surface-default: white;
238
- --wa-color-surface-lowered: var(--wa-color-neutral-95);
239
- --wa-color-surface-border: var(--wa-color-neutral-90);
240
- --wa-color-text-normal: var(--wa-color-neutral-10);
241
- --wa-color-text-quiet: var(--wa-color-neutral-40);
242
- --wa-color-text-link: var(--wa-color-brand-40);
243
- --wa-color-overlay-modal:
244
- color-mix(in oklab, var(--wa-color-neutral-05) 50%, transparent);
245
- --wa-color-overlay-inline:
246
- color-mix(in oklab, var(--wa-color-neutral-80) 25%, transparent);
247
- --wa-color-shadow:
248
- color-mix(in oklab, var(--wa-color-neutral-05) calc(var(--wa-shadow-blur-scale) * 4% + 8%), transparent);
249
- --wa-color-focus: var(--wa-color-brand-60);
250
- --wa-color-mix-hover: black 10%;
251
- --wa-color-mix-active: black 20%;
252
- --wa-color-brand-fill-quiet: var(--wa-color-brand-95);
253
- --wa-color-brand-fill-normal: var(--wa-color-brand-90);
254
- --wa-color-brand-fill-loud: var(--wa-color-brand-50);
255
- --wa-color-brand-border-quiet: var(--wa-color-brand-90);
256
- --wa-color-brand-border-normal: var(--wa-color-brand-80);
257
- --wa-color-brand-border-loud: var(--wa-color-brand-60);
258
- --wa-color-brand-on-quiet: var(--wa-color-brand-40);
259
- --wa-color-brand-on-normal: var(--wa-color-brand-30);
260
- --wa-color-brand-on-loud: white;
261
- --wa-color-success-fill-quiet: var(--wa-color-success-95);
262
- --wa-color-success-fill-normal: var(--wa-color-success-90);
263
- --wa-color-success-fill-loud: var(--wa-color-success-50);
264
- --wa-color-success-border-quiet: var(--wa-color-success-90);
265
- --wa-color-success-border-normal: var(--wa-color-success-80);
266
- --wa-color-success-border-loud: var(--wa-color-success-60);
267
- --wa-color-success-on-quiet: var(--wa-color-success-40);
268
- --wa-color-success-on-normal: var(--wa-color-success-30);
269
- --wa-color-success-on-loud: white;
270
- --wa-color-warning-fill-quiet: var(--wa-color-warning-95);
271
- --wa-color-warning-fill-normal: var(--wa-color-warning-90);
272
- --wa-color-warning-fill-loud: var(--wa-color-warning-50);
273
- --wa-color-warning-border-quiet: var(--wa-color-warning-90);
274
- --wa-color-warning-border-normal: var(--wa-color-warning-80);
275
- --wa-color-warning-border-loud: var(--wa-color-warning-60);
276
- --wa-color-warning-on-quiet: var(--wa-color-warning-40);
277
- --wa-color-warning-on-normal: var(--wa-color-warning-30);
278
- --wa-color-warning-on-loud: white;
279
- --wa-color-danger-fill-quiet: var(--wa-color-danger-95);
280
- --wa-color-danger-fill-normal: var(--wa-color-danger-90);
281
- --wa-color-danger-fill-loud: var(--wa-color-danger-50);
282
- --wa-color-danger-border-quiet: var(--wa-color-danger-90);
283
- --wa-color-danger-border-normal: var(--wa-color-danger-80);
284
- --wa-color-danger-border-loud: var(--wa-color-danger-60);
285
- --wa-color-danger-on-quiet: var(--wa-color-danger-40);
286
- --wa-color-danger-on-normal: var(--wa-color-danger-30);
287
- --wa-color-danger-on-loud: white;
288
- --wa-color-neutral-fill-quiet: var(--wa-color-neutral-95);
289
- --wa-color-neutral-fill-normal: var(--wa-color-neutral-90);
290
- --wa-color-neutral-fill-loud: var(--wa-color-neutral-20);
291
- --wa-color-neutral-border-quiet: var(--wa-color-neutral-90);
292
- --wa-color-neutral-border-normal: var(--wa-color-neutral-80);
293
- --wa-color-neutral-border-loud: var(--wa-color-neutral-60);
294
- --wa-color-neutral-on-quiet: var(--wa-color-neutral-40);
295
- --wa-color-neutral-on-normal: var(--wa-color-neutral-30);
296
- --wa-color-neutral-on-loud: white;
297
- }
298
-
299
- /*
300
- * Typography
301
- *
302
- * See https://early.webawesome.com/webawesome@3.0.0-beta.1/dist/styles/themes/default.css for all options
303
- */
304
- /* */
305
-
306
237
  /* Fonts */
307
238
  --wa-font-family-body: var(--hot-font-sans);
308
239
  --wa-font-family-heading: var(--hot-font-sans-variant);
@@ -311,11 +242,11 @@
311
242
 
312
243
  /* Font sizes */
313
244
  --wa-font-size-2xs: var(--hot-font-size-2x-small); /* 10px */
314
- --wa-font-size-xs: var(--hot-font-size-x-small); /* 12px */
315
- --wa-font-size-s: var(--hot-font-size-small); /* 14px */
316
- --wa-font-size-m: var(--hot-font-size-medium); /* 16px */
317
- --wa-font-size-l: var(--hot-font-size-large); /* 20px */
318
- --wa-font-size-xl: var(--hot-font-size-x-large); /* 24px */
245
+ --wa-font-size-xs: var(--hot-font-size-x-small); /* 12px */
246
+ --wa-font-size-s: var(--hot-font-size-small); /* 14px */
247
+ --wa-font-size-m: var(--hot-font-size-medium); /* 16px */
248
+ --wa-font-size-l: var(--hot-font-size-large); /* 20px */
249
+ --wa-font-size-xl: var(--hot-font-size-x-large); /* 24px */
319
250
  --wa-font-size-2xl: var(--hot-font-size-2x-large); /* 36px */
320
251
  --wa-font-size-3xl: var(--hot-font-size-3x-large); /* 48px */
321
252
  --wa-font-size-4xl: var(--hot-font-size-4x-large); /* 72px */
@@ -347,246 +278,114 @@
347
278
  */
348
279
  /* */
349
280
 
350
- --wa-space-3xs: var(--hot-spacing-3x-small); /* 2px */
351
- --wa-space-2xs: var(--hot-spacing-2x-small); /* 4px */
352
- --wa-space-xs: var(--hot-spacing-x-small); /* 8px */
353
- --wa-space-s: var(--hot-spacing-small); /* 12px */
354
- --wa-space-m: var(--hot-spacing-medium); /* 16px */
355
- --wa-space-l: var(--hot-spacing-large); /* 20px */
356
- --wa-space-xl: var(--hot-spacing-x-large); /* 28px */
357
- --wa-space-2xl: var(--hot-spacing-2x-large); /* 36px */
358
- --wa-space-3xl: var(--hot-spacing-3x-large); /* 48px */
359
- --wa-space-4xl: var(--hot-spacing-4x-large); /* 72px */
360
-
361
- --wa-border-radius-s: var(--hot-border-radius-small); /* 3px */
362
- --wa-border-radius-m: var(--hot-border-radius-medium); /* 4px */
363
- --wa-border-radius-l: var(--hot-border-radius-large); /* 8px */
364
- --wa-border-radius-pill: var(--hot-border-radius-pill); /* 9999px */
365
- --wa-border-radius-circle: var(--hot-border-radius-circle); /* 50% */
281
+ --wa-space-3xs: var(--hot-spacing-3x-small); /* 2px */
282
+ --wa-space-2xs: var(--hot-spacing-2x-small); /* 4px */
283
+ --wa-space-xs: var(--hot-spacing-x-small); /* 8px */
284
+ --wa-space-s: var(--hot-spacing-small); /* 12px */
285
+ --wa-space-m: var(--hot-spacing-medium); /* 16px */
286
+ --wa-space-l: var(--hot-spacing-large); /* 20px */
287
+ --wa-space-xl: var(--hot-spacing-x-large); /* 28px */
288
+ --wa-space-2xl: var(--hot-spacing-2x-large); /* 36px */
289
+ --wa-space-3xl: var(--hot-spacing-3x-large); /* 48px */
290
+ --wa-space-4xl: var(--hot-spacing-4x-large); /* 72px */
291
+
292
+ --wa-border-radius-s: var(--hot-border-radius-small); /* 3px */
293
+ --wa-border-radius-m: var(--hot-border-radius-medium); /* 4px */
294
+ --wa-border-radius-l: var(--hot-border-radius-large); /* 8px */
295
+ --wa-border-radius-pill: var(--hot-border-radius-pill); /* 9999px */
296
+ --wa-border-radius-circle: var(--hot-border-radius-circle); /* 50% */
366
297
  }
367
298
  }
368
299
 
369
- /*
370
- * Button Customizations
371
- * Based on WebAwesome documentation: https://webawesome.com/docs/customizing/
372
- */
373
-
374
- /* Custom Properties for Button Components */
375
- wa-button {
376
- /* Button sizing */
377
- --size: var(--wa-space-l); /* 20px - default button height */
378
- --padding-x: var(--wa-space-m); /* 16px horizontal padding */
379
- --padding-y: var(--wa-space-s); /* 12px vertical padding */
380
-
381
- /* Button appearance */
382
- --border-radius: var(--wa-border-radius-m); /* 4px border radius */
383
- --border-width: 1px;
384
- --font-size: var(--wa-font-size-s); /* 14px font size */
385
- --font-weight: var(--wa-font-weight-action); /* semibold */
386
-
387
- /* Button states */
388
- --transition-duration: 150ms;
389
- --transition-timing: ease-out;
390
- }
391
-
392
- /* Button size variants */
393
- wa-button[size="small"] {
394
- --size: var(--wa-space-m); /* 16px */
395
- --padding-x: var(--wa-space-s); /* 12px */
396
- --padding-y: var(--wa-space-xs); /* 8px */
397
- --font-size: var(--wa-font-size-xs); /* 12px */
398
- }
399
-
400
- wa-button[size="large"] {
401
- --size: var(--wa-space-xl); /* 28px */
402
- --padding-x: var(--wa-space-l); /* 20px */
403
- --padding-y: var(--wa-space-m); /* 16px */
404
- --font-size: var(--wa-font-size-m); /* 16px */
405
- }
406
-
407
- /* CSS Parts for advanced button styling */
408
- wa-button::part(base) {
409
- /* Base button styling */
410
- border-radius: var(--border-radius);
411
- border-width: var(--border-width);
412
- font-size: var(--font-size);
413
- font-weight: var(--font-weight);
414
- padding: var(--padding-y) var(--padding-x);
415
- min-height: var(--size);
416
- transition: all var(--transition-duration) var(--transition-timing);
417
-
418
- /* HOT-specific styling */
419
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
420
- }
421
-
422
- wa-button::part(base):hover {
423
- /* Hover state */
424
- transform: translateY(-1px);
425
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
426
- }
427
-
428
- wa-button::part(base):active {
429
- /* Active state */
430
- transform: translateY(0);
431
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
432
- }
433
-
434
- wa-button::part(base):focus-visible {
435
- /* Focus state */
436
- outline: 2px solid var(--wa-color-focus);
437
- outline-offset: 2px;
438
- }
439
-
440
- wa-button::part(label) {
441
- /* Button text styling */
442
- font-family: var(--wa-font-family-body);
443
- letter-spacing: 0.025em;
444
- }
445
-
446
- /* Button variant-specific styling */
447
- wa-button[variant="primary"]::part(base) {
448
- background: linear-gradient(135deg, var(--wa-color-brand-fill-loud), var(--wa-color-brand-fill-normal));
449
- border-color: var(--wa-color-brand-border-loud);
450
- color: var(--wa-color-brand-on-loud);
451
- }
452
-
453
- wa-button[variant="primary"]::part(base):hover {
454
- background: linear-gradient(135deg, var(--wa-color-brand-fill-normal), var(--wa-color-brand-fill-quiet));
455
- border-color: var(--wa-color-brand-border-normal);
456
- }
457
-
458
- wa-button[variant="secondary"]::part(base) {
459
- background: var(--wa-color-neutral-fill-quiet);
460
- border-color: var(--wa-color-neutral-border-normal);
461
- color: var(--wa-color-neutral-on-quiet);
462
- }
463
-
464
- wa-button[variant="secondary"]::part(base):hover {
465
- background: var(--wa-color-neutral-fill-normal);
466
- border-color: var(--wa-color-neutral-border-loud);
467
- color: var(--wa-color-neutral-on-normal);
468
- }
469
-
470
- wa-button[variant="outline"]::part(base) {
471
- background: transparent;
472
- border-color: var(--wa-color-brand-border-normal);
473
- color: var(--wa-color-brand-on-normal);
474
- }
475
-
476
- wa-button[variant="outline"]::part(base):hover {
477
- background: var(--wa-color-brand-fill-quiet);
478
- border-color: var(--wa-color-brand-border-loud);
479
- color: var(--wa-color-brand-on-quiet);
480
- }
481
-
482
- /* Success, warning, danger variants */
483
- wa-button[variant="success"]::part(base) {
484
- background: linear-gradient(135deg, var(--wa-color-success-fill-loud), var(--wa-color-success-fill-normal));
485
- border-color: var(--wa-color-success-border-loud);
486
- color: var(--wa-color-success-on-loud);
487
- }
488
-
489
- wa-button[variant="warning"]::part(base) {
490
- background: linear-gradient(135deg, var(--wa-color-warning-fill-loud), var(--wa-color-warning-fill-normal));
491
- border-color: var(--wa-color-warning-border-loud);
492
- color: var(--wa-color-warning-on-loud);
493
- }
494
-
495
- wa-button[variant="danger"]::part(base) {
496
- background: linear-gradient(135deg, var(--wa-color-danger-fill-loud), var(--wa-color-danger-fill-normal));
497
- border-color: var(--wa-color-danger-border-loud);
498
- color: var(--wa-color-danger-on-loud);
499
- }
500
-
501
- /* Custom states using :state() selector */
502
- wa-button:state(disabled)::part(base) {
503
- opacity: 0.5;
504
- cursor: not-allowed;
505
- transform: none;
506
- box-shadow: none;
507
- }
508
-
509
- wa-button:state(loading)::part(base) {
510
- cursor: wait;
511
- }
512
-
513
- /* Custom button classes for specific use cases */
514
- wa-button.hot-gradient::part(base) {
515
- background: linear-gradient(217deg, var(--wa-color-red-50), var(--wa-color-orange-50), var(--wa-color-yellow-50));
516
- border: solid 1px var(--wa-color-orange-50);
517
- color: white;
518
- text-shadow: rgba(0, 0, 0, 0.3) 0 -1px;
519
- }
520
-
521
- wa-button.hot-gradient::part(base):hover {
522
- box-shadow: var(--wa-shadow-m);
523
- transform: translateY(-3px);
524
- }
525
-
526
- wa-button.hot-gradient::part(base):active {
527
- box-shadow: inset var(--wa-shadow-s);
528
- transform: translateY(0);
529
- }
530
-
531
- /* Icon button styling */
532
- wa-button[appearance="icon"] {
533
- --padding-x: var(--wa-space-xs);
534
- --padding-y: var(--wa-space-xs);
535
- --size: var(--wa-space-xl);
536
- }
537
-
538
- wa-button[appearance="icon"]::part(base) {
539
- border-radius: var(--wa-border-radius-circle);
540
- padding: var(--padding-y);
541
- min-width: var(--size);
542
- min-height: var(--size);
543
- display: flex;
544
- align-items: center;
545
- justify-content: center;
546
- }
547
-
548
- /* Native button element support */
549
- button {
550
- /* Apply same custom properties to native buttons */
551
- --size: var(--wa-space-l);
552
- --padding-x: var(--wa-space-m);
553
- --padding-y: var(--wa-space-s);
554
- --border-radius: var(--wa-border-radius-m);
555
- --border-width: 1px;
556
- --font-size: var(--wa-font-size-s);
557
- --font-weight: var(--wa-font-weight-action);
558
- --transition-duration: 150ms;
559
- --transition-timing: ease-out;
560
-
561
- border-radius: var(--border-radius);
562
- border-width: var(--border-width);
563
- font-size: var(--font-size);
564
- font-weight: var(--font-weight);
565
- padding: var(--padding-y) var(--padding-x);
566
- min-height: var(--size);
567
- transition: all var(--transition-duration) var(--transition-timing);
568
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
569
- cursor: pointer;
570
- }
571
-
572
- button:hover {
573
- transform: translateY(-1px);
574
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
575
- }
576
-
577
- button:active {
578
- transform: translateY(0);
579
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
580
- }
581
-
582
- button:focus-visible {
583
- outline: 2px solid var(--wa-color-focus);
584
- outline-offset: 2px;
585
- }
586
-
587
- button:disabled {
588
- opacity: 0.5;
589
- cursor: not-allowed;
590
- transform: none;
591
- box-shadow: none;
300
+ /* Theme layer - semantic color mappings (must be in wa-theme layer, not wa-color-palette) */
301
+ @layer wa-theme {
302
+ :where(:root),
303
+ .wa-theme-default,
304
+ .wa-light,
305
+ .wa-dark .wa-invert,
306
+ .wa-light .wa-theme-default,
307
+ .wa-dark .wa-theme-default.wa-invert,
308
+ .wa-dark .wa-theme-default .wa-invert {
309
+ color-scheme: light;
310
+ color: var(--wa-color-text-normal);
311
+
312
+ --wa-color-surface-raised: white;
313
+ --wa-color-surface-default: white;
314
+ --wa-color-surface-lowered: var(--hot-color-neutral-50);
315
+ --wa-color-surface-border: var(--hot-color-neutral-100);
316
+
317
+ --wa-color-text-normal: var(--hot-color-neutral-900);
318
+ --wa-color-text-quiet: var(--hot-color-neutral-600);
319
+ --wa-color-text-link: var(--hot-color-primary-600);
320
+
321
+ --wa-color-overlay-modal: color-mix(
322
+ in oklab,
323
+ var(--hot-color-neutral-950) 50%,
324
+ transparent
325
+ );
326
+ --wa-color-overlay-inline: color-mix(
327
+ in oklab,
328
+ var(--hot-color-neutral-200) 25%,
329
+ transparent
330
+ );
331
+
332
+ --wa-color-shadow: color-mix(
333
+ in oklab,
334
+ var(--hot-color-neutral-950) calc(var(--wa-shadow-blur-scale) * 4% + 8%),
335
+ transparent
336
+ );
337
+ --wa-color-focus: var(--hot-color-primary-400);
338
+ --wa-color-mix-hover: black 10%;
339
+ --wa-color-mix-active: black 20%;
340
+
341
+ --wa-color-brand-fill-quiet: var(--hot-color-blue-50);
342
+ --wa-color-brand-fill-normal: var(--hot-color-blue-50);
343
+ --wa-color-brand-fill-loud: var(--hot-color-blue-600);
344
+ --wa-color-brand-border-quiet: var(--hot-color-blue-100);
345
+ --wa-color-brand-border-normal: var(--hot-color-blue-100);
346
+ --wa-color-brand-border-loud: var(--hot-color-blue-400);
347
+ --wa-color-brand-on-quiet: var(--hot-color-blue-700);
348
+ --wa-color-brand-on-normal: var(--hot-color-blue-700);
349
+ --wa-color-brand-on-loud: white;
350
+
351
+ --wa-color-success-fill-quiet: var(--hot-color-success-50);
352
+ --wa-color-success-fill-normal: var(--hot-color-success-100);
353
+ --wa-color-success-fill-loud: var(--hot-color-success-700);
354
+ --wa-color-success-border-quiet: var(--hot-color-success-100);
355
+ --wa-color-success-border-normal: var(--hot-color-success-800);
356
+ --wa-color-success-border-loud: var(--hot-color-success-700);
357
+ --wa-color-success-on-quiet: var(--hot-color-success-800);
358
+ --wa-color-success-on-normal: var(--hot-color-success-800);
359
+ --wa-color-success-on-loud: white;
360
+
361
+ --wa-color-warning-fill-quiet: var(--hot-color-warning-50);
362
+ --wa-color-warning-fill-normal: var(--hot-color-warning-100);
363
+ --wa-color-warning-fill-loud: var(--hot-color-warning-950);
364
+ --wa-color-warning-border-quiet: var(--hot-color-warning-100);
365
+ --wa-color-warning-border-normal: var(--hot-color-warning-950);
366
+ --wa-color-warning-border-loud: var(--hot-color-warning-950);
367
+ --wa-color-warning-on-quiet: var(--hot-color-warning-950);
368
+ --wa-color-warning-on-normal: var(--hot-color-warning-950);
369
+ --wa-color-warning-on-loud: white;
370
+
371
+ --wa-color-danger-fill-quiet: var(--hot-color-danger-50);
372
+ --wa-color-danger-fill-normal: var(--hot-color-danger-100);
373
+ --wa-color-danger-fill-loud: var(--hot-color-danger-500);
374
+ --wa-color-danger-border-quiet: var(--hot-color-danger-100);
375
+ --wa-color-danger-border-normal: var(--hot-color-danger-950);
376
+ --wa-color-danger-border-loud: var(--hot-color-danger-500);
377
+ --wa-color-danger-on-quiet: var(--hot-color-danger-950);
378
+ --wa-color-danger-on-normal: var(--hot-color-danger-950);
379
+ --wa-color-danger-on-loud: white;
380
+
381
+ --wa-color-neutral-fill-quiet: var(--hot-color-neutral-50);
382
+ --wa-color-neutral-fill-normal: var(--hot-color-neutral-100);
383
+ --wa-color-neutral-fill-loud: var(--hot-color-neutral-950);
384
+ --wa-color-neutral-border-quiet: var(--hot-color-neutral-950);
385
+ --wa-color-neutral-border-normal: var(--hot-color-neutral-200);
386
+ --wa-color-neutral-border-loud: var(--hot-color-neutral-400);
387
+ --wa-color-neutral-on-quiet: var(--hot-color-neutral-950);
388
+ --wa-color-neutral-on-normal: var(--hot-color-neutral-950);
389
+ --wa-color-neutral-on-loud: white;
390
+ }
592
391
  }
@@ -17,11 +17,11 @@
17
17
  --hot-color-red-800: #B83032;
18
18
  --hot-color-red-700: #C53639;
19
19
  --hot-color-red-600: #D73F3F;
20
- --hot-color-red-500: #F34D47;
20
+ --hot-color-red-500: #D43F3F;
21
21
  --hot-color-red-400: #ED5C5E;
22
22
  --hot-color-red-300: #E27A7D;
23
23
  --hot-color-red-200: #EC9EA1;
24
- --hot-color-red-100: #FDD0D6;
24
+ --hot-color-red-100: #FED1D7;
25
25
  --hot-color-red-50: #FEECEF;
26
26
 
27
27
  /* rose - persian plum */
@@ -49,7 +49,7 @@
49
49
  --hot-color-yellow-400: #FAE62E;
50
50
  --hot-color-yellow-300: #FDEB51;
51
51
  --hot-color-yellow-200: #FFF072;
52
- --hot-color-yellow-100: #FFF59B;
52
+ --hot-color-yellow-100: #FFEBCF;
53
53
  --hot-color-yellow-50: #FFF9C3;
54
54
 
55
55
  /* blue - space cadet */
@@ -138,18 +138,18 @@
138
138
  --hot-color-warning-100: var(--hot-color-yellow-100);
139
139
  --hot-color-warning-50: var(--hot-color-yellow-50);
140
140
 
141
- /* Success colors (green - using WebAwesome green values) */
142
- --hot-color-success-950: #031608;
143
- --hot-color-success-900: #052310;
144
- --hot-color-success-800: #0a3a1d;
145
- --hot-color-success-700: #0a5027;
146
- --hot-color-success-600: #036730;
147
- --hot-color-success-500: #00883c;
148
- --hot-color-success-400: #00ac49;
149
- --hot-color-success-300: #5dc36f;
150
- --hot-color-success-200: #93da98;
151
- --hot-color-success-100: #c2f2c1;
152
- --hot-color-success-50: #e3f9e3;
141
+ /* Success colors (green) */
142
+ --hot-color-success-950: #2B514F;
143
+ --hot-color-success-900: #366361;
144
+ --hot-color-success-800: #408789;
145
+ --hot-color-success-700: #459BA0;
146
+ --hot-color-success-600: #4BB1B9;
147
+ --hot-color-success-500: #50C1CB;
148
+ --hot-color-success-400: #58CBD1;
149
+ --hot-color-success-300: #6AD4D9;
150
+ --hot-color-success-200: #8FE1E3;
151
+ --hot-color-success-100: #B9EDED;
152
+ --hot-color-success-50: #E3F8F8;
153
153
 
154
154
  /* Neutral colors (gray) */
155
155
  --hot-color-neutral-1000: #ffffff;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Utility to inject CSS into shadow DOM elements
3
- * This is needed because WebAwesome components use shadow DOM and CSS variables
4
- * from the global scope are not accessible within the shadow DOM
3
+ *
4
+ * This utility is kept for potential future use with other shadow DOM components.
5
5
  */
6
6
  export interface CSSInjectionOptions {
7
7
  /** The CSS string to inject */
@@ -14,21 +14,7 @@ export interface CSSInjectionOptions {
14
14
  styleId?: string;
15
15
  }
16
16
  /**
17
- * Injects CSS into the shadow DOM of WebAwesome components
17
+ * Injects CSS into the shadow DOM of elements
18
18
  * @param options Configuration options for CSS injection
19
19
  */
20
20
  export declare function injectCSSIntoShadowDOM(options: CSSInjectionOptions): void;
21
- /**
22
- * Injects HOT theme CSS variables into wa-button shadow DOM
23
- * This makes the HOT theme variables available within the shadow DOM
24
- */
25
- export declare function injectHOTThemeIntoButtons(): void;
26
- /**
27
- * Injects CSS into all WebAwesome components that need HOT theme styling
28
- */
29
- export declare function injectHOTThemeIntoAllComponents(): void;
30
- /**
31
- * Sets up a mutation observer to automatically inject CSS into new WebAwesome elements
32
- * This ensures that dynamically added components also get the HOT theme
33
- */
34
- export declare function setupAutoInjection(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotosm/ui",
3
- "version": "0.3.4-b2",
3
+ "version": "0.4.0",
4
4
  "description": "Shared UI components with HOT theming.",
5
5
  "homepage": "https://github.com/hotosm/ui#readme",
6
6
  "author": {
@@ -48,25 +48,38 @@
48
48
  "engines": {
49
49
  "node": ">=14.17.0"
50
50
  },
51
+ "peerDependencies": {
52
+ "@awesome.me/webawesome": "3.0.0"
53
+ },
51
54
  "devDependencies": {
52
55
  "@awesome.me/webawesome": "3.0.0-beta.1",
53
56
  "@storybook/addon-docs": "^9.0.18",
54
57
  "@storybook/addon-links": "^9.0.18",
55
58
  "@storybook/web-components-vite": "^9.0.18",
56
59
  "@teamhanko/hanko-elements": "^2.1.0",
60
+ "@testing-library/dom": "^10.4.1",
61
+ "@testing-library/jest-dom": "^6.4.2",
62
+ "@vitest/browser": "^4.0.10",
63
+ "@vitest/browser-playwright": "^4.0.10",
57
64
  "@whitespace/storybook-addon-html": "^7.0.0",
58
65
  "class-variance-authority": "^0.7.1",
59
66
  "del": "^8.0.0",
60
67
  "esbuild": "^0.25.8",
61
68
  "globby": "^14.1.0",
69
+ "jsdom": "^24.0.0",
62
70
  "lit": "^3.3.1",
71
+ "playwright": "^1.56.1",
63
72
  "storybook": "^9.0.18",
64
73
  "typescript": "^5.8.3",
65
- "user-agent-data-types": "^0.4.2"
74
+ "user-agent-data-types": "^0.4.2",
75
+ "vitest": "^4.0.10"
66
76
  },
67
77
  "scripts": {
68
78
  "dev": "storybook dev -p 3001 --no-open",
69
79
  "build:docs": "storybook build --output-dir docs",
70
- "build": "node scripts/build.js"
80
+ "build": "node scripts/build.js",
81
+ "test": "vitest run",
82
+ "test:watch": "vitest",
83
+ "coverage": "vitest run --coverage"
71
84
  }
72
85
  }