@incursa/ui-kit 1.6.1 → 1.8.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 (47) hide show
  1. package/NOTICE +8 -0
  2. package/README.md +16 -0
  3. package/dist/icons/index.js +371 -0
  4. package/dist/icons/package.json +3 -0
  5. package/dist/inc-design-language.css +144 -51
  6. package/dist/inc-design-language.css.map +1 -1
  7. package/dist/inc-design-language.js +1627 -1206
  8. package/dist/inc-design-language.min.css +1 -1
  9. package/dist/inc-design-language.min.css.map +1 -1
  10. package/dist/mcp/components/buttons.json +3 -3
  11. package/dist/mcp/components/cards.json +3 -3
  12. package/dist/mcp/components/metrics.json +3 -3
  13. package/dist/mcp/components/states.json +3 -3
  14. package/dist/mcp/components/status.json +3 -3
  15. package/dist/mcp/examples/data-grid-advanced.json +2 -2
  16. package/dist/mcp/examples/demo.json +2 -2
  17. package/dist/mcp/examples/overlay-workflows.json +2 -2
  18. package/dist/mcp/examples/reference.json +2 -2
  19. package/dist/mcp/examples/states.json +2 -2
  20. package/dist/mcp/examples/web-components.json +2 -2
  21. package/dist/mcp/guides/latest.json +2 -2
  22. package/dist/mcp/guides/package-metadata.json +2 -2
  23. package/dist/mcp/guides/update.json +2 -2
  24. package/dist/mcp/install.json +1 -1
  25. package/dist/mcp/patterns/data-grid-advanced.json +2 -2
  26. package/dist/mcp/patterns/demo.json +2 -2
  27. package/dist/mcp/patterns/overlay-workflows.json +2 -2
  28. package/dist/mcp/patterns/reference.json +2 -2
  29. package/dist/mcp/patterns/states.json +2 -2
  30. package/dist/mcp/patterns/web-components.json +2 -2
  31. package/dist/mcp/resources.json +83 -80
  32. package/dist/mcp/search-index.json +25 -25
  33. package/dist/mcp/update.json +2 -2
  34. package/dist/mcp/worker.mjs +394 -391
  35. package/dist/mcp/worker.mjs.map +2 -2
  36. package/dist/web-components/README.md +4 -0
  37. package/dist/web-components/components/actions.js +237 -14
  38. package/dist/web-components/components/feedback.js +71 -7
  39. package/dist/web-components/index.js +583 -21
  40. package/package.json +10 -3
  41. package/src/icons/index.js +229 -0
  42. package/src/icons/package.json +3 -0
  43. package/src/inc-design-language.js +327 -1
  44. package/src/inc-design-language.scss +178 -55
  45. package/src/web-components/README.md +4 -0
  46. package/src/web-components/components/actions.js +237 -14
  47. package/src/web-components/components/feedback.js +71 -7
@@ -23,10 +23,10 @@
23
23
  --inc-control-surface-border: var(--inc-border-default);
24
24
  --inc-surface-contrast: var(--bs-secondary);
25
25
  --inc-surface-contrast-rgb: var(--bs-secondary-rgb);
26
- --inc-surface-contrast-hover: #31384a;
27
- --inc-surface-contrast-hover-rgb: 49, 56, 74;
28
- --inc-surface-contrast-active: #2e3542;
29
- --inc-surface-contrast-active-rgb: 46, 53, 66;
26
+ --inc-surface-contrast-hover: #273042;
27
+ --inc-surface-contrast-hover-rgb: 39, 48, 66;
28
+ --inc-surface-contrast-active: #1f2737;
29
+ --inc-surface-contrast-active-rgb: 31, 39, 55;
30
30
  --inc-surface-contrast-text: var(--inc-text-inverse);
31
31
  --inc-surface-contrast-text-rgb: var(--inc-text-inverse-rgb);
32
32
  --inc-surface-contrast-border: var(--bs-secondary);
@@ -49,10 +49,10 @@
49
49
  --inc-control-surface-border: var(--inc-border-default);
50
50
  --inc-surface-contrast: var(--bs-gray-100);
51
51
  --inc-surface-contrast-rgb: 253, 253, 253;
52
- --inc-surface-contrast-hover: var(--bs-gray-200);
53
- --inc-surface-contrast-hover-rgb: 246, 246, 246;
54
- --inc-surface-contrast-active: var(--bs-gray-300);
55
- --inc-surface-contrast-active-rgb: 241, 241, 241;
52
+ --inc-surface-contrast-hover: #dfe3e8;
53
+ --inc-surface-contrast-hover-rgb: 223, 227, 232;
54
+ --inc-surface-contrast-active: #c8d0d9;
55
+ --inc-surface-contrast-active-rgb: 200, 208, 217;
56
56
  --inc-surface-contrast-text: var(--bs-dark);
57
57
  --inc-surface-contrast-text-rgb: 18, 19, 22;
58
58
  --inc-surface-contrast-border: var(--bs-gray-400);
@@ -448,6 +448,12 @@
448
448
  // Buttons, badges, alerts, and form primitives
449
449
  // -----------------------------------------------------------------------------
450
450
 
451
+ .inc-icon {
452
+ display: block;
453
+ flex: 0 0 auto;
454
+ stroke: currentColor;
455
+ }
456
+
451
457
  .inc-btn {
452
458
  @extend .btn;
453
459
  display: inline-flex;
@@ -455,6 +461,16 @@
455
461
  justify-content: center;
456
462
  gap: 0.375rem;
457
463
  vertical-align: middle;
464
+ transition: color 0.18s ease, background-color 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
465
+
466
+ &__icon {
467
+ display: inline-flex;
468
+ align-items: center;
469
+ justify-content: center;
470
+ width: 1rem;
471
+ height: 1rem;
472
+ flex: 0 0 auto;
473
+ }
458
474
 
459
475
  &--primary {
460
476
  @extend .btn-primary;
@@ -467,7 +483,7 @@
467
483
  --bs-btn-border-color: var(--inc-surface-contrast-border);
468
484
  --bs-btn-hover-color: var(--inc-surface-contrast-text);
469
485
  --bs-btn-hover-bg: var(--inc-surface-contrast-hover);
470
- --bs-btn-hover-border-color: var(--inc-surface-contrast-border);
486
+ --bs-btn-hover-border-color: var(--inc-surface-contrast-hover);
471
487
  --bs-btn-focus-shadow-rgb: var(--inc-surface-contrast-rgb);
472
488
  --bs-btn-active-color: var(--inc-surface-contrast-text);
473
489
  --bs-btn-active-bg: var(--inc-surface-contrast-active);
@@ -475,6 +491,20 @@
475
491
  --bs-btn-disabled-color: var(--inc-surface-contrast-text);
476
492
  --bs-btn-disabled-bg: var(--inc-surface-contrast);
477
493
  --bs-btn-disabled-border-color: var(--inc-surface-contrast-border);
494
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.1);
495
+
496
+ &:hover,
497
+ &:focus-visible {
498
+ --bs-btn-hover-bg: var(--inc-surface-contrast-hover);
499
+ --bs-btn-hover-border-color: var(--inc-surface-contrast-hover);
500
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.1);
501
+ }
502
+
503
+ &:active,
504
+ &.active,
505
+ &:focus:active {
506
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.14), inset 0 1px 0 rgba(255, 255, 255, 0.12);
507
+ }
478
508
  }
479
509
 
480
510
  &--success {
@@ -518,14 +548,14 @@
518
548
  &--outline-secondary {
519
549
  @extend .btn-outline-secondary;
520
550
  --bs-btn-color: var(--inc-text-primary);
521
- --bs-btn-border-color: var(--inc-border-default);
551
+ --bs-btn-border-color: var(--inc-border-subtle);
522
552
  --bs-btn-hover-color: var(--inc-text-primary);
523
- --bs-btn-hover-bg: var(--inc-surface-secondary);
524
- --bs-btn-hover-border-color: var(--inc-border-default);
553
+ --bs-btn-hover-bg: rgba(var(--inc-surface-strong-rgb), 0.12);
554
+ --bs-btn-hover-border-color: rgba(var(--inc-surface-strong-rgb), 0.32);
525
555
  --bs-btn-focus-shadow-rgb: var(--inc-surface-strong-rgb);
526
556
  --bs-btn-active-color: var(--inc-text-primary);
527
- --bs-btn-active-bg: var(--inc-surface-muted);
528
- --bs-btn-active-border-color: var(--inc-border-default);
557
+ --bs-btn-active-bg: rgba(var(--inc-surface-strong-rgb), 0.18);
558
+ --bs-btn-active-border-color: rgba(var(--inc-surface-strong-rgb), 0.4);
529
559
  --bs-btn-disabled-color: var(--inc-text-muted);
530
560
  --bs-btn-disabled-border-color: var(--inc-border-subtle);
531
561
  }
@@ -555,6 +585,17 @@
555
585
  --bs-btn-bg: rgba(var(--inc-surface-secondary-rgb), 0.74);
556
586
  --bs-btn-disabled-bg: rgba(var(--inc-surface-secondary-rgb), 0.54);
557
587
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.06);
588
+
589
+ &:hover,
590
+ &:focus-visible {
591
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.06);
592
+ }
593
+
594
+ &:active,
595
+ &.active,
596
+ &:focus:active {
597
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.18);
598
+ }
558
599
  }
559
600
 
560
601
  &--sm {
@@ -653,9 +694,10 @@
653
694
  }
654
695
 
655
696
  &--warning {
656
- background-color: $inc-warning-50;
657
- color: $inc-warning-700;
658
- border: 1px solid $inc-warning-700;
697
+ background-color: #fff8df;
698
+ color: #765000;
699
+ border: 1px solid #b67b00;
700
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58), 0 1px 2px rgba(182, 123, 0, 0.12);
659
701
  }
660
702
 
661
703
  &--info {
@@ -671,6 +713,8 @@
671
713
 
672
714
  .inc-alert {
673
715
  @extend .alert;
716
+ position: relative;
717
+ overflow: hidden;
674
718
  border-radius: $inc-radius-md;
675
719
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.42), 0 0.375rem 1rem rgba(var(--inc-shadow-rgb), 0.05);
676
720
  background-clip: padding-box;
@@ -707,9 +751,32 @@
707
751
  @extend .alert-dismissible;
708
752
  }
709
753
 
754
+ &__icon {
755
+ display: inline-flex;
756
+ align-items: center;
757
+ justify-content: center;
758
+ width: 1.125rem;
759
+ height: 1.125rem;
760
+ margin-inline-end: 0.5rem;
761
+ vertical-align: -0.2em;
762
+ color: currentColor;
763
+ }
764
+
710
765
  &__heading {
711
766
  @extend .alert-heading;
712
767
  }
768
+
769
+ &__progress {
770
+ position: absolute;
771
+ inset-inline: 0;
772
+ inset-block-end: 0;
773
+ height: 0.1875rem;
774
+ background: currentColor;
775
+ opacity: 0.2;
776
+ transform-origin: left center;
777
+ transform: scaleX(1);
778
+ pointer-events: none;
779
+ }
713
780
  }
714
781
 
715
782
  .alert:empty {
@@ -1134,6 +1201,12 @@
1134
1201
  display: inline-flex;
1135
1202
  align-items: center;
1136
1203
  justify-content: center;
1204
+
1205
+ svg {
1206
+ display: block;
1207
+ width: 2.125rem;
1208
+ height: 2.125rem;
1209
+ }
1137
1210
  }
1138
1211
 
1139
1212
  &__form {
@@ -2422,7 +2495,7 @@
2422
2495
  border: 1px solid var(--inc-border-subtle);
2423
2496
  cursor: pointer;
2424
2497
  appearance: none;
2425
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.06);
2498
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
2426
2499
  transition: color 0.18s ease, background-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
2427
2500
 
2428
2501
  .inc-tab-icon {
@@ -2433,7 +2506,7 @@
2433
2506
  color: var(--inc-text-primary);
2434
2507
  background: linear-gradient(180deg, rgba(var(--inc-surface-secondary-rgb), 1), rgba(var(--inc-surface-muted-rgb), 0.9));
2435
2508
  border-color: var(--inc-border-default);
2436
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.46), 0 2px 4px rgba(var(--inc-shadow-rgb), 0.07);
2509
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.46);
2437
2510
 
2438
2511
  .inc-tab-icon {
2439
2512
  color: var(--bs-primary);
@@ -2448,7 +2521,7 @@
2448
2521
  border-bottom-color: var(--inc-surface-panel);
2449
2522
  position: relative;
2450
2523
  z-index: 1;
2451
- box-shadow: var(--inc-surface-panel-shadow-raised);
2524
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.62);
2452
2525
  transform: translateY(-1px);
2453
2526
  }
2454
2527
  }
@@ -2462,7 +2535,7 @@
2462
2535
  border-top-left-radius: 0;
2463
2536
  border-top-right-radius: $inc-radius-panel;
2464
2537
  margin-top: -1px;
2465
- box-shadow: var(--inc-surface-panel-shadow-raised);
2538
+ box-shadow: 0 0.125rem 0.25rem rgba(var(--inc-shadow-rgb), 0.06), 0 0.875rem 2rem rgba(var(--inc-shadow-rgb), 0.06);
2466
2539
  }
2467
2540
  }
2468
2541
 
@@ -3099,6 +3172,8 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3099
3172
  display: inline-flex;
3100
3173
  align-items: center;
3101
3174
  gap: 0.625rem;
3175
+ width: max-content;
3176
+ max-width: calc(100vw - 2rem);
3102
3177
  padding: 0.5rem 0.75rem;
3103
3178
  border: 1px solid var(--inc-border-subtle);
3104
3179
  border-radius: 999px;
@@ -3116,6 +3191,7 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3116
3191
  bottom: auto;
3117
3192
  z-index: auto;
3118
3193
  vertical-align: middle;
3194
+ max-width: 100%;
3119
3195
  }
3120
3196
 
3121
3197
  &__countdown,
@@ -3146,6 +3222,10 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3146
3222
  }
3147
3223
 
3148
3224
  &__toggle {
3225
+ --bs-btn-color: var(--inc-text-primary);
3226
+ --bs-btn-hover-color: var(--inc-text-primary);
3227
+ --bs-btn-active-color: var(--inc-text-primary);
3228
+ order: -1;
3149
3229
  flex: 0 0 auto;
3150
3230
  width: 1.875rem;
3151
3231
  height: 1.875rem;
@@ -3164,31 +3244,32 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3164
3244
  font-size: 0.6875rem;
3165
3245
  line-height: 1;
3166
3246
  }
3247
+
3248
+ &:hover,
3249
+ &:focus-visible,
3250
+ &:active {
3251
+ color: var(--inc-text-primary);
3252
+ }
3167
3253
  }
3168
3254
 
3169
3255
  &__toggle-icon {
3170
- position: relative;
3171
3256
  display: inline-flex;
3172
- width: 0.75rem;
3173
- height: 0.75rem;
3174
- color: currentColor;
3175
-
3176
- &::before,
3177
- &::after {
3178
- content: "";
3179
- position: absolute;
3180
- inset-block: 0.0625rem;
3181
- width: 0.1875rem;
3182
- border-radius: 999px;
3183
- background: currentColor;
3184
- }
3257
+ align-items: center;
3258
+ justify-content: center;
3259
+ width: 1rem;
3260
+ height: 1rem;
3261
+ color: var(--inc-text-primary);
3185
3262
 
3186
- &::before {
3187
- left: 0.125rem;
3263
+ .inc-auto-refresh__toggle:hover &,
3264
+ .inc-auto-refresh__toggle:focus-visible &,
3265
+ .inc-auto-refresh__toggle:active & {
3266
+ color: var(--inc-text-primary);
3188
3267
  }
3189
3268
 
3190
- &::after {
3191
- right: 0.125rem;
3269
+ svg {
3270
+ display: block;
3271
+ width: 1rem;
3272
+ height: 1rem;
3192
3273
  }
3193
3274
  }
3194
3275
 
@@ -3202,21 +3283,18 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3202
3283
 
3203
3284
  .inc-auto-refresh__toggle {
3204
3285
  color: var(--bs-warning-text-emphasis);
3205
- }
3206
3286
 
3207
- .inc-auto-refresh__toggle-icon {
3208
- width: 0.7rem;
3209
- height: 0.7rem;
3210
-
3211
- &::before {
3212
- inset: 0;
3213
- width: 100%;
3214
- background: currentColor;
3215
- clip-path: polygon(14% 8%, 14% 92%, 86% 50%);
3287
+ &:hover,
3288
+ &:focus-visible,
3289
+ &:active {
3290
+ color: var(--bs-warning-text-emphasis);
3216
3291
  }
3292
+ }
3217
3293
 
3218
- &::after {
3219
- display: none;
3294
+ .inc-auto-refresh__toggle-icon {
3295
+ color: var(--inc-text-primary);
3296
+ svg {
3297
+ transform: translateX(0.03125rem);
3220
3298
  }
3221
3299
  }
3222
3300
  }
@@ -3224,6 +3302,16 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
3224
3302
  &.is-loading {
3225
3303
  border-color: var(--bs-primary-border-subtle);
3226
3304
  box-shadow: 0 0.9rem 1.75rem rgba(var(--bs-primary-rgb), 0.14);
3305
+
3306
+ .inc-auto-refresh__toggle {
3307
+ color: var(--inc-text-primary);
3308
+
3309
+ &:hover,
3310
+ &:focus-visible,
3311
+ &:active {
3312
+ color: var(--inc-text-primary);
3313
+ }
3314
+ }
3227
3315
  }
3228
3316
  }
3229
3317
 
@@ -4543,6 +4631,22 @@ body.inc-offcanvas-open {
4543
4631
  }
4544
4632
  }
4545
4633
 
4634
+ [data-bs-theme="dark"] {
4635
+ .inc-filter-chip {
4636
+ &--accent {
4637
+ border-color: rgba(var(--bs-primary-rgb), 0.5);
4638
+ background: rgba(var(--bs-primary-rgb), 0.4);
4639
+ color: var(--bs-white);
4640
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 1px 2px rgba(var(--inc-shadow-rgb), 0.12);
4641
+ }
4642
+
4643
+ &--accent .inc-filter-chip__remove {
4644
+ color: currentColor;
4645
+ opacity: 0.88;
4646
+ }
4647
+ }
4648
+ }
4649
+
4546
4650
  .inc-state-panel {
4547
4651
  display: flex;
4548
4652
  flex-direction: column;
@@ -4571,6 +4675,12 @@ body.inc-offcanvas-open {
4571
4675
  font-size: 1.25rem;
4572
4676
  font-weight: 700;
4573
4677
  flex: 0 0 auto;
4678
+
4679
+ svg {
4680
+ display: block;
4681
+ width: 1.375rem;
4682
+ height: 1.375rem;
4683
+ }
4574
4684
  }
4575
4685
 
4576
4686
  &__title {
@@ -4969,20 +5079,20 @@ body.inc-offcanvas-open {
4969
5079
  .inc-table__row--selected > *,
4970
5080
  .inc-table__row--warning > *,
4971
5081
  .inc-table__row--danger > * {
4972
- background: rgba(var(--bs-primary-rgb), 0.14) !important;
5082
+ background: rgba(var(--bs-primary-rgb), 0.26) !important;
4973
5083
  color: var(--inc-text-primary);
4974
5084
  }
4975
5085
 
4976
5086
  .inc-table__row--warning > * {
4977
- background: rgba(var(--bs-warning-rgb), 0.14) !important;
5087
+ background: rgba(var(--bs-warning-rgb), 0.24) !important;
4978
5088
  }
4979
5089
 
4980
5090
  .inc-table__row--danger > * {
4981
- background: rgba(var(--bs-danger-rgb), 0.14) !important;
5091
+ background: rgba(var(--bs-danger-rgb), 0.24) !important;
4982
5092
  }
4983
5093
 
4984
5094
  .inc-table__row--locked > * {
4985
- background: rgba(var(--bs-secondary-rgb), 0.22) !important;
5095
+ background: rgba(var(--bs-secondary-rgb), 0.32) !important;
4986
5096
  color: var(--inc-text-secondary);
4987
5097
  }
4988
5098
  }
@@ -5175,6 +5285,11 @@ body.inc-offcanvas-open {
5175
5285
  border: 1.5px dashed $inc-border-strong;
5176
5286
  border-radius: $inc-radius-md;
5177
5287
  background: linear-gradient(180deg, var(--inc-surface-secondary), var(--inc-surface-primary));
5288
+ transition: border-color 160ms ease, background 160ms ease, box-shadow 160ms ease;
5289
+
5290
+ &[role="button"] {
5291
+ cursor: pointer;
5292
+ }
5178
5293
 
5179
5294
  &__content {
5180
5295
  display: flex;
@@ -5199,6 +5314,14 @@ body.inc-offcanvas-open {
5199
5314
  background: linear-gradient(180deg, var(--bs-primary-bg-subtle), var(--inc-surface-primary));
5200
5315
  }
5201
5316
 
5317
+ &.is-drag-over,
5318
+ &:focus-visible {
5319
+ border-color: var(--bs-primary);
5320
+ background: linear-gradient(180deg, var(--bs-primary-bg-subtle), var(--inc-surface-primary));
5321
+ box-shadow: 0 0 0 3px rgba(var(--bs-primary-rgb), 0.14);
5322
+ outline: 0;
5323
+ }
5324
+
5202
5325
  @media (max-width: 767.98px) {
5203
5326
  flex-direction: column;
5204
5327
  align-items: stretch;
@@ -8,9 +8,11 @@ The CSS-first [`inc-*`](../../reference.html) class surface remains the canonica
8
8
 
9
9
  - Package entrypoint: `@incursa/ui-kit/web-components`
10
10
  - Style entrypoint: `@incursa/ui-kit/web-components/style.css`
11
+ - Icon entrypoint: `@incursa/ui-kit/icons`
11
12
  - Built output: `dist/web-components/`
12
13
  - Package export: `./web-components` resolves to `dist/web-components/index.js`
13
14
  - Package export: `./web-components/style.css` resolves to `dist/web-components/style.css`
15
+ - Package export: `./icons` resolves to `dist/icons/index.js`
14
16
  - Module boundary: `src/web-components/package.json` sets this subtree to `type: module`
15
17
 
16
18
  Load these entrypoints only when the consuming app wants the custom elements and their default look. CSS-only consumers should not pay for the runtime.
@@ -45,6 +47,8 @@ The runtime auto-defines the shipped elements on load. If a consumer needs expli
45
47
  The `IncElement` base class, including reflected attribute/property wiring and slot helpers.
46
48
  - [`registry.js`](registry.js)
47
49
  Idempotent registration helpers and the `IncWebComponents.registry` namespace.
50
+ - [`../icons/index.js`](../icons/index.js)
51
+ Semantic Incursa icon names, default Lucide-backed rendering, and the global renderer override used by component fallbacks.
48
52
  - [`components/dom-helpers.js`](components/dom-helpers.js)
49
53
  Shared DOM helpers used by the action and collection modules.
50
54
  - [`controllers/focus.js`](controllers/focus.js)