@revikornmann/muka-ui 0.20.0 → 0.22.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 (52) hide show
  1. package/dist/cjs/components/ChatMessage/ChatMessage.css +3 -5
  2. package/dist/cjs/components/DataTable/DataTable.css +5 -0
  3. package/dist/cjs/components/DocumentViewer/DocumentToolbar.js +1 -1
  4. package/dist/cjs/components/DocumentViewer/DocumentToolbar.js.map +1 -1
  5. package/dist/cjs/components/Icon/Icon.js +17 -7
  6. package/dist/cjs/components/Icon/Icon.js.map +1 -1
  7. package/dist/cjs/components/Icon/iconRegistry.js +140 -116
  8. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  9. package/dist/cjs/components/Icon/index.js +4 -1
  10. package/dist/cjs/components/Icon/index.js.map +1 -1
  11. package/dist/cjs/components/index.js +5 -3
  12. package/dist/cjs/components/index.js.map +1 -1
  13. package/dist/esm/components/ChatMessage/ChatMessage.css +3 -5
  14. package/dist/esm/components/DataTable/DataTable.css +5 -0
  15. package/dist/esm/components/DocumentViewer/DocumentToolbar.js +1 -1
  16. package/dist/esm/components/DocumentViewer/DocumentToolbar.js.map +1 -1
  17. package/dist/esm/components/Icon/Icon.js +14 -7
  18. package/dist/esm/components/Icon/Icon.js.map +1 -1
  19. package/dist/esm/components/Icon/iconRegistry.js +138 -83
  20. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  21. package/dist/esm/components/Icon/index.js +1 -1
  22. package/dist/esm/components/Icon/index.js.map +1 -1
  23. package/dist/esm/components/index.js +1 -1
  24. package/dist/esm/components/index.js.map +1 -1
  25. package/dist/styles/components/ChatMessage.css +3 -5
  26. package/dist/styles/components/DataTable.css +5 -0
  27. package/dist/styles/index.css +39 -37
  28. package/dist/styles/muka-dark.css +39 -37
  29. package/dist/styles/muka-light.css +39 -37
  30. package/dist/styles/tokens-bouwplan-dark.css +1 -2
  31. package/dist/styles/tokens-bouwplan-light.css +1 -2
  32. package/dist/styles/tokens-fscl-dark.css +1 -2
  33. package/dist/styles/tokens-fscl-light.css +1 -2
  34. package/dist/styles/tokens-grip-dark.css +1 -2
  35. package/dist/styles/tokens-grip-light.css +1 -2
  36. package/dist/styles/tokens-muka-dark.css +1 -2
  37. package/dist/styles/tokens-muka-light.css +1 -2
  38. package/dist/styles/tokens-wireframe-dark.css +1 -2
  39. package/dist/styles/tokens-wireframe-light.css +1 -2
  40. package/dist/styles/wireframe-dark.css +39 -37
  41. package/dist/styles/wireframe-light.css +39 -37
  42. package/dist/types/components/Icon/Icon.d.ts +20 -7
  43. package/dist/types/components/Icon/Icon.d.ts.map +1 -1
  44. package/dist/types/components/Icon/iconRegistry.d.ts +109 -14
  45. package/dist/types/components/Icon/iconRegistry.d.ts.map +1 -1
  46. package/dist/types/components/Icon/index.d.ts +1 -1
  47. package/dist/types/components/Icon/index.d.ts.map +1 -1
  48. package/dist/types/components/index.d.ts +1 -1
  49. package/dist/types/components/index.d.ts.map +1 -1
  50. package/package.json +2 -1
  51. package/skills/figma-to-code/SKILL.md +17 -2
  52. package/tokens/t4-components/chatbubble.json +2 -7
@@ -1694,8 +1694,7 @@ body {
1694
1694
  --card-border-pressed: 0.125rem solid #3e63dd;
1695
1695
  --card-border-selected: 0.125rem solid #3e63dd;
1696
1696
  --chat-column-max-width: 768px;
1697
- --chatbubble-max-width: 37rem;
1698
- --chatbubble-max-width-ratio: 77%;
1697
+ --chatbubble-max-width: 600px;
1699
1698
  --chatbubble-radius: 0.75rem;
1700
1699
  --chatbubble-padding-block: 0.75rem;
1701
1700
  --chatbubble-padding-inline: 1rem;
@@ -7770,36 +7769,6 @@ body {
7770
7769
  }
7771
7770
 
7772
7771
 
7773
- /* NumberInput */
7774
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
7775
- /* Only the prefix/suffix affixes are NumberInput-specific. */
7776
-
7777
- .muka-numberinput__addon {
7778
- display: inline-flex;
7779
- align-items: center;
7780
- flex: none;
7781
- color: var(--color-text-subtle-default);
7782
- font-family: var(--text-input-md-fontFamily);
7783
- font-size: var(--text-input-md-fontSize);
7784
- line-height: var(--text-input-md-lineHeight);
7785
- user-select: none;
7786
- pointer-events: none;
7787
- white-space: nowrap;
7788
- }
7789
-
7790
- /* Hide the native number spinners — affixes/step API replace them. */
7791
- .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7792
- .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7793
- -webkit-appearance: none;
7794
- margin: 0;
7795
- }
7796
-
7797
- .muka-numberinput__field .muka-input__native {
7798
- -moz-appearance: textfield;
7799
- appearance: textfield;
7800
- }
7801
-
7802
-
7803
7772
  /* Pagination */
7804
7773
  /* Pagination Component Styles */
7805
7774
 
@@ -7902,6 +7871,36 @@ body {
7902
7871
  }
7903
7872
 
7904
7873
 
7874
+ /* NumberInput */
7875
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
7876
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
7877
+
7878
+ .muka-numberinput__addon {
7879
+ display: inline-flex;
7880
+ align-items: center;
7881
+ flex: none;
7882
+ color: var(--color-text-subtle-default);
7883
+ font-family: var(--text-input-md-fontFamily);
7884
+ font-size: var(--text-input-md-fontSize);
7885
+ line-height: var(--text-input-md-lineHeight);
7886
+ user-select: none;
7887
+ pointer-events: none;
7888
+ white-space: nowrap;
7889
+ }
7890
+
7891
+ /* Hide the native number spinners — affixes/step API replace them. */
7892
+ .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7893
+ .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7894
+ -webkit-appearance: none;
7895
+ margin: 0;
7896
+ }
7897
+
7898
+ .muka-numberinput__field .muka-input__native {
7899
+ -moz-appearance: textfield;
7900
+ appearance: textfield;
7901
+ }
7902
+
7903
+
7905
7904
  /* NavigationTransition */
7906
7905
  /* NavigationTransition Component Styles */
7907
7906
 
@@ -10797,6 +10796,11 @@ li.muka-listitem {
10797
10796
  transition: background-color 0.15s ease;
10798
10797
  }
10799
10798
 
10799
+ /* Last body row: no bottom border (matches Table; avoids a double line at the table edge). */
10800
+ .muka-data-table__body .muka-data-table__row:last-child {
10801
+ border-bottom: none;
10802
+ }
10803
+
10800
10804
  .muka-data-table__row:not(.muka-data-table__row--empty):not(.muka-data-table__row--selected):hover {
10801
10805
  background-color: var(--datatable-row-hover-background);
10802
10806
  }
@@ -12483,12 +12487,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
12483
12487
  */
12484
12488
  width: fit-content;
12485
12489
  /*
12486
- * Stops short of the far edge at every width: the fixed cap once the
12487
- * conversation column reaches its own cap, the ratio below that, where the
12488
- * column runs full-bleed. Without that gap a long `own` bubble spans the
12489
- * column and reads no differently from a `peer` one.
12490
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
12491
+ * row; above it the fixed cap leaves room for own/peer alignment.
12490
12492
  */
12491
- max-width: min(var(--chatbubble-max-width), var(--chatbubble-max-width-ratio));
12493
+ max-width: var(--chatbubble-max-width);
12492
12494
  position: relative;
12493
12495
  display: flex;
12494
12496
  flex-direction: column;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #f76b15;
1537
1537
  --card-border-selected: 0.125rem solid #f76b15;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #f76808;
1537
1537
  --card-border-selected: 0.125rem solid #f76808;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #ffca16;
1537
1537
  --card-border-selected: 0.125rem solid #ffca16;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #ab6400;
1537
1537
  --card-border-selected: 0.125rem solid #ab6400;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #0bd8b6;
1537
1537
  --card-border-selected: 0.125rem solid #0bd8b6;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #12a594;
1537
1537
  --card-border-selected: 0.125rem solid #12a594;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #9eb1ff;
1537
1537
  --card-border-selected: 0.125rem solid #9eb1ff;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #3e63dd;
1537
1537
  --card-border-selected: 0.125rem solid #3e63dd;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0.75rem;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #b4b4b4;
1537
1537
  --card-border-selected: 0.125rem solid #b4b4b4;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0px;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1536,8 +1536,7 @@
1536
1536
  --card-border-pressed: 0.125rem solid #113264;
1537
1537
  --card-border-selected: 0.125rem solid #113264;
1538
1538
  --chat-column-max-width: 768px;
1539
- --chatbubble-max-width: 37rem;
1540
- --chatbubble-max-width-ratio: 77%;
1539
+ --chatbubble-max-width: 600px;
1541
1540
  --chatbubble-radius: 0px;
1542
1541
  --chatbubble-padding-block: 0.75rem;
1543
1542
  --chatbubble-padding-inline: 1rem;
@@ -1662,8 +1662,7 @@ body {
1662
1662
  --card-border-pressed: 0.125rem solid #b4b4b4;
1663
1663
  --card-border-selected: 0.125rem solid #b4b4b4;
1664
1664
  --chat-column-max-width: 768px;
1665
- --chatbubble-max-width: 37rem;
1666
- --chatbubble-max-width-ratio: 77%;
1665
+ --chatbubble-max-width: 600px;
1667
1666
  --chatbubble-radius: 0px;
1668
1667
  --chatbubble-padding-block: 0.75rem;
1669
1668
  --chatbubble-padding-inline: 1rem;
@@ -7738,36 +7737,6 @@ body {
7738
7737
  }
7739
7738
 
7740
7739
 
7741
- /* NumberInput */
7742
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
7743
- /* Only the prefix/suffix affixes are NumberInput-specific. */
7744
-
7745
- .muka-numberinput__addon {
7746
- display: inline-flex;
7747
- align-items: center;
7748
- flex: none;
7749
- color: var(--color-text-subtle-default);
7750
- font-family: var(--text-input-md-fontFamily);
7751
- font-size: var(--text-input-md-fontSize);
7752
- line-height: var(--text-input-md-lineHeight);
7753
- user-select: none;
7754
- pointer-events: none;
7755
- white-space: nowrap;
7756
- }
7757
-
7758
- /* Hide the native number spinners — affixes/step API replace them. */
7759
- .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7760
- .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7761
- -webkit-appearance: none;
7762
- margin: 0;
7763
- }
7764
-
7765
- .muka-numberinput__field .muka-input__native {
7766
- -moz-appearance: textfield;
7767
- appearance: textfield;
7768
- }
7769
-
7770
-
7771
7740
  /* Pagination */
7772
7741
  /* Pagination Component Styles */
7773
7742
 
@@ -7870,6 +7839,36 @@ body {
7870
7839
  }
7871
7840
 
7872
7841
 
7842
+ /* NumberInput */
7843
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
7844
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
7845
+
7846
+ .muka-numberinput__addon {
7847
+ display: inline-flex;
7848
+ align-items: center;
7849
+ flex: none;
7850
+ color: var(--color-text-subtle-default);
7851
+ font-family: var(--text-input-md-fontFamily);
7852
+ font-size: var(--text-input-md-fontSize);
7853
+ line-height: var(--text-input-md-lineHeight);
7854
+ user-select: none;
7855
+ pointer-events: none;
7856
+ white-space: nowrap;
7857
+ }
7858
+
7859
+ /* Hide the native number spinners — affixes/step API replace them. */
7860
+ .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7861
+ .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7862
+ -webkit-appearance: none;
7863
+ margin: 0;
7864
+ }
7865
+
7866
+ .muka-numberinput__field .muka-input__native {
7867
+ -moz-appearance: textfield;
7868
+ appearance: textfield;
7869
+ }
7870
+
7871
+
7873
7872
  /* NavigationTransition */
7874
7873
  /* NavigationTransition Component Styles */
7875
7874
 
@@ -10765,6 +10764,11 @@ li.muka-listitem {
10765
10764
  transition: background-color 0.15s ease;
10766
10765
  }
10767
10766
 
10767
+ /* Last body row: no bottom border (matches Table; avoids a double line at the table edge). */
10768
+ .muka-data-table__body .muka-data-table__row:last-child {
10769
+ border-bottom: none;
10770
+ }
10771
+
10768
10772
  .muka-data-table__row:not(.muka-data-table__row--empty):not(.muka-data-table__row--selected):hover {
10769
10773
  background-color: var(--datatable-row-hover-background);
10770
10774
  }
@@ -12451,12 +12455,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
12451
12455
  */
12452
12456
  width: fit-content;
12453
12457
  /*
12454
- * Stops short of the far edge at every width: the fixed cap once the
12455
- * conversation column reaches its own cap, the ratio below that, where the
12456
- * column runs full-bleed. Without that gap a long `own` bubble spans the
12457
- * column and reads no differently from a `peer` one.
12458
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
12459
+ * row; above it the fixed cap leaves room for own/peer alignment.
12458
12460
  */
12459
- max-width: min(var(--chatbubble-max-width), var(--chatbubble-max-width-ratio));
12461
+ max-width: var(--chatbubble-max-width);
12460
12462
  position: relative;
12461
12463
  display: flex;
12462
12464
  flex-direction: column;
@@ -1662,8 +1662,7 @@ body {
1662
1662
  --card-border-pressed: 0.125rem solid #113264;
1663
1663
  --card-border-selected: 0.125rem solid #113264;
1664
1664
  --chat-column-max-width: 768px;
1665
- --chatbubble-max-width: 37rem;
1666
- --chatbubble-max-width-ratio: 77%;
1665
+ --chatbubble-max-width: 600px;
1667
1666
  --chatbubble-radius: 0px;
1668
1667
  --chatbubble-padding-block: 0.75rem;
1669
1668
  --chatbubble-padding-inline: 1rem;
@@ -7738,36 +7737,6 @@ body {
7738
7737
  }
7739
7738
 
7740
7739
 
7741
- /* NumberInput */
7742
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
7743
- /* Only the prefix/suffix affixes are NumberInput-specific. */
7744
-
7745
- .muka-numberinput__addon {
7746
- display: inline-flex;
7747
- align-items: center;
7748
- flex: none;
7749
- color: var(--color-text-subtle-default);
7750
- font-family: var(--text-input-md-fontFamily);
7751
- font-size: var(--text-input-md-fontSize);
7752
- line-height: var(--text-input-md-lineHeight);
7753
- user-select: none;
7754
- pointer-events: none;
7755
- white-space: nowrap;
7756
- }
7757
-
7758
- /* Hide the native number spinners — affixes/step API replace them. */
7759
- .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7760
- .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7761
- -webkit-appearance: none;
7762
- margin: 0;
7763
- }
7764
-
7765
- .muka-numberinput__field .muka-input__native {
7766
- -moz-appearance: textfield;
7767
- appearance: textfield;
7768
- }
7769
-
7770
-
7771
7740
  /* Pagination */
7772
7741
  /* Pagination Component Styles */
7773
7742
 
@@ -7870,6 +7839,36 @@ body {
7870
7839
  }
7871
7840
 
7872
7841
 
7842
+ /* NumberInput */
7843
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
7844
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
7845
+
7846
+ .muka-numberinput__addon {
7847
+ display: inline-flex;
7848
+ align-items: center;
7849
+ flex: none;
7850
+ color: var(--color-text-subtle-default);
7851
+ font-family: var(--text-input-md-fontFamily);
7852
+ font-size: var(--text-input-md-fontSize);
7853
+ line-height: var(--text-input-md-lineHeight);
7854
+ user-select: none;
7855
+ pointer-events: none;
7856
+ white-space: nowrap;
7857
+ }
7858
+
7859
+ /* Hide the native number spinners — affixes/step API replace them. */
7860
+ .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7861
+ .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7862
+ -webkit-appearance: none;
7863
+ margin: 0;
7864
+ }
7865
+
7866
+ .muka-numberinput__field .muka-input__native {
7867
+ -moz-appearance: textfield;
7868
+ appearance: textfield;
7869
+ }
7870
+
7871
+
7873
7872
  /* NavigationTransition */
7874
7873
  /* NavigationTransition Component Styles */
7875
7874
 
@@ -10765,6 +10764,11 @@ li.muka-listitem {
10765
10764
  transition: background-color 0.15s ease;
10766
10765
  }
10767
10766
 
10767
+ /* Last body row: no bottom border (matches Table; avoids a double line at the table edge). */
10768
+ .muka-data-table__body .muka-data-table__row:last-child {
10769
+ border-bottom: none;
10770
+ }
10771
+
10768
10772
  .muka-data-table__row:not(.muka-data-table__row--empty):not(.muka-data-table__row--selected):hover {
10769
10773
  background-color: var(--datatable-row-hover-background);
10770
10774
  }
@@ -12451,12 +12455,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
12451
12455
  */
12452
12456
  width: fit-content;
12453
12457
  /*
12454
- * Stops short of the far edge at every width: the fixed cap once the
12455
- * conversation column reaches its own cap, the ratio below that, where the
12456
- * column runs full-bleed. Without that gap a long `own` bubble spans the
12457
- * column and reads no differently from a `peer` one.
12458
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
12459
+ * row; above it the fixed cap leaves room for own/peer alignment.
12458
12460
  */
12459
- max-width: min(var(--chatbubble-max-width), var(--chatbubble-max-width-ratio));
12461
+ max-width: var(--chatbubble-max-width);
12460
12462
  position: relative;
12461
12463
  display: flex;
12462
12464
  flex-direction: column;
@@ -1,13 +1,23 @@
1
1
  import React from 'react';
2
2
  import './Icon.css';
3
- import { type IconName } from './iconRegistry';
4
- export type { IconName } from './iconRegistry';
3
+ import { type IconComponent, type IconName } from './iconRegistry';
4
+ export type { IconName, RegisteredIconName, ListedIcon } from './iconRegistry';
5
+ export { registerIcon, listRegisteredIcons, iconRegistry, type IconRegistryEntry, } from './iconRegistry';
5
6
  export interface IconProps {
6
- /** Registered icon name (RemixIcon). Use with variant for line/fill. */
7
+ /**
8
+ * Curated muka (or `registerIcon`) nickname.
9
+ * Prefer this for Tier 1 / Tier 2 system chrome — see Storybook Icon grids.
10
+ */
7
11
  name?: IconName;
8
- /** Icon style when using name. Default line. */
12
+ /**
13
+ * Tree-shakeable pass-through: pass a Remix (or custom) component directly.
14
+ * Use for app/Figma glyphs not in the muka registry — no muka release needed.
15
+ * Precedence: `icon` > `name` > `children`.
16
+ */
17
+ icon?: IconComponent;
18
+ /** Icon style when using `name`. Default line. */
9
19
  variant?: 'line' | 'fill';
10
- /** SVG element or custom content. Use when not using name. */
20
+ /** SVG element or custom content when not using `name` / `icon`. */
11
21
  children?: React.ReactNode;
12
22
  /** Size variant — uses icon.size tokens */
13
23
  size?: 'xs' | 'sm' | 'md' | 'lg';
@@ -24,8 +34,11 @@ export interface IconProps {
24
34
  * Icon Component
25
35
  *
26
36
  * Wrapper that enforces consistent sizing and color inheritance.
27
- * Supports two modes: name (RemixIcon from registry) or children (custom SVG).
28
- * Provide exactly one of name or children.
37
+ *
38
+ * Three ways to supply a glyph:
39
+ * 1. `name` — curated muka registry (Tier 1 / Tier 2)
40
+ * 2. `icon` — pass a Remix component (`import { RiWifiOffLine } from '@remixicon/react'`)
41
+ * 3. `children` — any custom SVG / node
29
42
  *
30
43
  * Tokens used:
31
44
  * - icon.size.{xs|sm|default|lg}
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../components/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,CAAC;AACpB,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEjE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAEjC,oEAAoE;IACpE,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAE1D,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAwCpC,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../components/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAEjC,oEAAoE;IACpE,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAE1D,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA2CpC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -1,24 +1,119 @@
1
1
  import React from 'react';
2
+ export type IconComponent = React.ComponentType<{
3
+ className?: string;
4
+ }>;
2
5
  export type IconRegistryEntry = {
3
- line: React.ComponentType<{
4
- className?: string;
5
- }>;
6
- fill: React.ComponentType<{
7
- className?: string;
8
- }>;
6
+ line: IconComponent;
7
+ fill: IconComponent;
8
+ /** 1 = required by Muka components; 2 = common consumer chrome */
9
+ tier: 1 | 2;
10
+ /** Present when this key is only an alias of another canonical name */
11
+ aliasOf?: string;
9
12
  };
10
13
  /**
11
- * Auto-generated registry of all RemixIcon components.
12
- * Icons are keyed by kebab-case name (e.g., "arrow-left", "delete-bin-2", "more-2").
14
+ * Curated RemixIcon registry (Tier 1 + Tier 2).
13
15
  *
14
- * Usage: <Icon name="arrow-left" variant="line" />
16
+ * - Tier 1: glyphs Muka production components hardcode via `name=`
17
+ * - Tier 2: shared shell chrome most consumer apps need via `name=`
15
18
  *
16
- * Note: This includes all ~2,800 RemixIcons for development convenience.
17
- * Before production release, consider trimming to only used icons for smaller bundles.
19
+ * App/domain icons: use `<Icon icon={Ri…} />` or `registerIcon` — do not expand
20
+ * this map for one-off Figma glyphs (keeps consumer bundles small).
18
21
  */
22
+ declare const canonicalRegistry: {
23
+ readonly add: IconRegistryEntry;
24
+ readonly alert: IconRegistryEntry;
25
+ readonly 'arrow-down': IconRegistryEntry;
26
+ readonly 'arrow-down-s': IconRegistryEntry;
27
+ readonly 'arrow-drop-up-down': IconRegistryEntry;
28
+ readonly 'arrow-left': IconRegistryEntry;
29
+ readonly 'arrow-left-s': IconRegistryEntry;
30
+ readonly 'arrow-return': IconRegistryEntry;
31
+ readonly 'arrow-right': IconRegistryEntry;
32
+ readonly 'arrow-right-s': IconRegistryEntry;
33
+ readonly 'arrow-up-s': IconRegistryEntry;
34
+ readonly attachment: IconRegistryEntry;
35
+ readonly check: IconRegistryEntry;
36
+ readonly 'checkbox-circle': IconRegistryEntry;
37
+ readonly close: IconRegistryEntry;
38
+ readonly 'delete-bin': IconRegistryEntry;
39
+ readonly download: IconRegistryEntry;
40
+ readonly 'emotion-happy': IconRegistryEntry;
41
+ readonly 'error-warning': IconRegistryEntry;
42
+ readonly file: IconRegistryEntry;
43
+ readonly 'file-copy': IconRegistryEntry;
44
+ readonly 'file-pdf': IconRegistryEntry;
45
+ readonly 'file-text': IconRegistryEntry;
46
+ readonly 'filter-3': IconRegistryEntry;
47
+ readonly fullscreen: IconRegistryEntry;
48
+ readonly image: IconRegistryEntry;
49
+ readonly information: IconRegistryEntry;
50
+ readonly mic: IconRegistryEntry;
51
+ readonly pause: IconRegistryEntry;
52
+ readonly 'pause-circle': IconRegistryEntry;
53
+ readonly pencil: IconRegistryEntry;
54
+ readonly play: IconRegistryEntry;
55
+ readonly printer: IconRegistryEntry;
56
+ readonly restart: IconRegistryEntry;
57
+ readonly search: IconRegistryEntry;
58
+ readonly 'send-plane2': IconRegistryEntry;
59
+ readonly 'sort-asc': IconRegistryEntry;
60
+ readonly 'sort-desc': IconRegistryEntry;
61
+ readonly 'thumb-down': IconRegistryEntry;
62
+ readonly 'thumb-up': IconRegistryEntry;
63
+ readonly 'zoom-in': IconRegistryEntry;
64
+ readonly 'zoom-out': IconRegistryEntry;
65
+ readonly bell: IconRegistryEntry;
66
+ readonly building: IconRegistryEntry;
67
+ readonly 'close-large': IconRegistryEntry;
68
+ readonly contrast: IconRegistryEntry;
69
+ readonly edit: IconRegistryEntry;
70
+ readonly eye: IconRegistryEntry;
71
+ readonly 'eye-off': IconRegistryEntry;
72
+ readonly google: IconRegistryEntry;
73
+ readonly home: IconRegistryEntry;
74
+ readonly 'home-4': IconRegistryEntry;
75
+ readonly lock: IconRegistryEntry;
76
+ readonly mail: IconRegistryEntry;
77
+ readonly moon: IconRegistryEntry;
78
+ readonly 'more-2': IconRegistryEntry;
79
+ readonly settings: IconRegistryEntry;
80
+ readonly 'settings-3': IconRegistryEntry;
81
+ readonly share: IconRegistryEntry;
82
+ readonly translate: IconRegistryEntry;
83
+ readonly 'translate-2': IconRegistryEntry;
84
+ readonly upload: IconRegistryEntry;
85
+ readonly 'upload-2': IconRegistryEntry;
86
+ readonly user: IconRegistryEntry;
87
+ readonly 'wifi-off': IconRegistryEntry;
88
+ };
89
+ export type RegisteredIconName = keyof typeof canonicalRegistry;
19
90
  export declare const iconRegistry: Record<string, IconRegistryEntry>;
91
+ /** Open string type so dynamic `name={…}` props stay valid; unknown names soft-fail. */
20
92
  export type IconName = string;
21
- export declare function getIconComponent(name: IconName, variant: 'line' | 'fill'): React.ComponentType<{
22
- className?: string;
23
- }>;
93
+ export declare function getIconComponent(name: IconName, variant: 'line' | 'fill'): IconComponent;
94
+ /**
95
+ * Register an app-local icon nickname without a muka release.
96
+ * Prefer `<Icon icon={Ri…} />` for one-offs; use this when many call sites
97
+ * need the same string `name=`.
98
+ */
99
+ export declare function registerIcon(name: string, registryEntry: Omit<IconRegistryEntry, 'tier'> & {
100
+ tier?: 1 | 2;
101
+ }): void;
102
+ export type ListedIcon = {
103
+ name: string;
104
+ tier: 1 | 2;
105
+ aliasOf?: string;
106
+ };
107
+ /**
108
+ * List icons for Storybook grids / tooling.
109
+ * By default lists only the muka curated set (not runtime `registerIcon` demos)
110
+ * and omits aliases so designers see one primary kebab name per glyph.
111
+ */
112
+ export declare function listRegisteredIcons(options?: {
113
+ tier?: 1 | 2;
114
+ includeAliases?: boolean;
115
+ /** Include icons added via registerIcon at runtime (default false). */
116
+ includeRuntime?: boolean;
117
+ }): ListedIcon[];
118
+ export {};
24
119
  //# sourceMappingURL=iconRegistry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iconRegistry.d.ts","sourceRoot":"","sources":["../../../../components/Icon/iconRegistry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD,CAAC;AAkBF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAM,CAAC;AA4ElE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,KAAK,CAAC,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAI7C"}
1
+ {"version":3,"file":"iconRegistry.d.ts","sourceRoot":"","sources":["../../../../components/Icon/iconRegistry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA8H1B,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,kEAAkE;IAClE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAcF;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE+B,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEhE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAE1D,CAAC;AAwBF,wFAAwF;AACxF,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,aAAa,CAIf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlH;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,UAAU,EAAE,CAoBf"}
@@ -1,3 +1,3 @@
1
- export { Icon, type IconProps, type IconName } from './Icon';
1
+ export { Icon, type IconProps, type IconName, type RegisteredIconName, type ListedIcon, registerIcon, listRegisteredIcons, iconRegistry, type IconRegistryEntry, } from './Icon';
2
2
  export { default } from './Icon';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/Icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/Icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"}
@@ -5,7 +5,7 @@ export { Form, type FormProps, useForm, type UseFormOptions, type UseFormReturn,
5
5
  export { NumberInput, type NumberInputProps } from './NumberInput';
6
6
  export { Card, type CardProps } from './Card';
7
7
  export { Label, type LabelProps } from './Label';
8
- export { Icon, type IconProps, type IconName } from './Icon';
8
+ export { Icon, type IconProps, type IconName, type RegisteredIconName, type ListedIcon, registerIcon, listRegisteredIcons, type IconRegistryEntry, } from './Icon';
9
9
  export { Chip, type ChipProps } from './Chip';
10
10
  export { Divider, type DividerProps } from './Divider';
11
11
  export { Select, type SelectProps, type SelectOption } from './Select';