@ojiepermana/angular 22.2.0 → 22.2.2

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 (129) hide show
  1. package/README.md +18 -7
  2. package/component/icon/README.md +40 -13
  3. package/fesm2022/ojiepermana-angular-chart-area.mjs +3 -3
  4. package/fesm2022/ojiepermana-angular-chart-bar.mjs +5 -5
  5. package/fesm2022/ojiepermana-angular-chart-core.mjs +33 -33
  6. package/fesm2022/ojiepermana-angular-chart-line.mjs +5 -5
  7. package/fesm2022/ojiepermana-angular-chart-pie.mjs +5 -5
  8. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +33 -33
  9. package/fesm2022/ojiepermana-angular-chart-radar.mjs +5 -5
  10. package/fesm2022/ojiepermana-angular-chart-radial.mjs +5 -5
  11. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +3 -3
  12. package/fesm2022/ojiepermana-angular-component-accordion.mjs +17 -17
  13. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +27 -27
  14. package/fesm2022/ojiepermana-angular-component-alert.mjs +12 -12
  15. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +3 -3
  16. package/fesm2022/ojiepermana-angular-component-avatar.mjs +18 -18
  17. package/fesm2022/ojiepermana-angular-component-badge.mjs +9 -9
  18. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +21 -21
  19. package/fesm2022/ojiepermana-angular-component-button-group.mjs +10 -10
  20. package/fesm2022/ojiepermana-angular-component-button.mjs +4 -4
  21. package/fesm2022/ojiepermana-angular-component-calendar.mjs +5 -5
  22. package/fesm2022/ojiepermana-angular-component-card.mjs +27 -24
  23. package/fesm2022/ojiepermana-angular-component-carousel.mjs +18 -18
  24. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +4 -4
  25. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +12 -12
  26. package/fesm2022/ojiepermana-angular-component-combobox.mjs +3 -3
  27. package/fesm2022/ojiepermana-angular-component-command.mjs +28 -28
  28. package/fesm2022/ojiepermana-angular-component-composer.mjs +22 -22
  29. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +3 -3
  30. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +5 -5
  31. package/fesm2022/ojiepermana-angular-component-dialog.mjs +22 -22
  32. package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -2
  33. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +39 -39
  34. package/fesm2022/ojiepermana-angular-component-editor.mjs +21 -21
  35. package/fesm2022/ojiepermana-angular-component-empty.mjs +19 -19
  36. package/fesm2022/ojiepermana-angular-component-form.mjs +36 -36
  37. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +9 -9
  38. package/fesm2022/ojiepermana-angular-component-icon.mjs +114 -105
  39. package/fesm2022/ojiepermana-angular-component-input-group.mjs +19 -19
  40. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +16 -16
  41. package/fesm2022/ojiepermana-angular-component-input.mjs +6 -6
  42. package/fesm2022/ojiepermana-angular-component-item.mjs +31 -31
  43. package/fesm2022/ojiepermana-angular-component-kanban.mjs +29 -29
  44. package/fesm2022/ojiepermana-angular-component-kbd.mjs +7 -7
  45. package/fesm2022/ojiepermana-angular-component-label.mjs +3 -3
  46. package/fesm2022/ojiepermana-angular-component-menubar.mjs +13 -13
  47. package/fesm2022/ojiepermana-angular-component-native-select.mjs +14 -14
  48. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +21 -21
  49. package/fesm2022/ojiepermana-angular-component-pagination.mjs +3 -3
  50. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +16 -16
  51. package/fesm2022/ojiepermana-angular-component-popover.mjs +6 -6
  52. package/fesm2022/ojiepermana-angular-component-progress.mjs +3 -3
  53. package/fesm2022/ojiepermana-angular-component-radio.mjs +7 -7
  54. package/fesm2022/ojiepermana-angular-component-resizable.mjs +12 -12
  55. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +3 -3
  56. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +6 -8
  57. package/fesm2022/ojiepermana-angular-component-select.mjs +8 -8
  58. package/fesm2022/ojiepermana-angular-component-separator.mjs +3 -3
  59. package/fesm2022/ojiepermana-angular-component-sheet.mjs +41 -28
  60. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +3 -3
  61. package/fesm2022/ojiepermana-angular-component-slider.mjs +10 -10
  62. package/fesm2022/ojiepermana-angular-component-spinner.mjs +3 -3
  63. package/fesm2022/ojiepermana-angular-component-switch.mjs +4 -4
  64. package/fesm2022/ojiepermana-angular-component-table.mjs +24 -24
  65. package/fesm2022/ojiepermana-angular-component-tabs.mjs +18 -18
  66. package/fesm2022/ojiepermana-angular-component-textarea.mjs +6 -6
  67. package/fesm2022/ojiepermana-angular-component-timeline.mjs +19 -19
  68. package/fesm2022/ojiepermana-angular-component-toast.mjs +5 -5
  69. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +9 -9
  70. package/fesm2022/ojiepermana-angular-component-toggle.mjs +5 -5
  71. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +15 -15
  72. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +3 -3
  73. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +3 -3
  74. package/fesm2022/{ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs → ojiepermana-angular-navigation-navigation-badge-count.component-4RIokl1C.mjs} +3 -3
  75. package/fesm2022/{ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs → ojiepermana-angular-navigation-navigation-dockbar-menu.component-CGfu2V6f.mjs} +23 -15
  76. package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-zBCXDa4c.mjs} +38 -66
  77. package/fesm2022/{ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs → ojiepermana-angular-navigation-navigation-flyout-menu.component-DYkYIIHd.mjs} +14 -13
  78. package/fesm2022/{ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs → ojiepermana-angular-navigation-navigation-horizontal.component-LNTertHr.mjs} +5 -5
  79. package/fesm2022/{ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs → ojiepermana-angular-navigation-navigation-item.component-DiGOcizS.mjs} +42 -52
  80. package/fesm2022/{ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs → ojiepermana-angular-navigation-navigation-list.component-DB22Gl-5.mjs} +22 -6
  81. package/fesm2022/ojiepermana-angular-navigation-service.mjs +16 -6
  82. package/fesm2022/ojiepermana-angular-navigation-types.mjs +113 -1
  83. package/fesm2022/ojiepermana-angular-navigation.mjs +304 -93
  84. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +137 -72
  85. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +6 -6
  86. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +265 -49
  87. package/fesm2022/ojiepermana-angular-theme-layout.mjs +30 -30
  88. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +3 -3
  89. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +7 -7
  90. package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +3 -3
  91. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +8 -6
  92. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +7 -7
  93. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +12 -12
  94. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +3 -3
  95. package/fesm2022/ojiepermana-angular-theme-shell.mjs +16 -12
  96. package/fesm2022/ojiepermana-angular-theme-styles.mjs +17 -33
  97. package/navigation/README.md +70 -19
  98. package/package.json +3 -2
  99. package/theme/README.md +4 -10
  100. package/theme/page/README.md +2 -0
  101. package/theme/shell/README.md +5 -1
  102. package/theme/styles/README.md +32 -8
  103. package/theme/styles/css/base/components.css +13 -9
  104. package/theme/styles/css/base/tailwind.css +43 -0
  105. package/theme/styles/css/base/theme.css +4 -25
  106. package/theme/styles/css/base/tokens.css +21 -0
  107. package/theme/styles/css/fonts.css +85 -0
  108. package/types/ojiepermana-angular-chart-radar.d.ts +2 -1
  109. package/types/ojiepermana-angular-component-avatar.d.ts +2 -1
  110. package/types/ojiepermana-angular-component-calendar.d.ts +2 -1
  111. package/types/ojiepermana-angular-component-card.d.ts +7 -2
  112. package/types/ojiepermana-angular-component-command.d.ts +1 -1
  113. package/types/ojiepermana-angular-component-editor.d.ts +2 -1
  114. package/types/ojiepermana-angular-component-icon.d.ts +64 -79
  115. package/types/ojiepermana-angular-component-input-otp.d.ts +2 -1
  116. package/types/ojiepermana-angular-component-pillbox.d.ts +2 -1
  117. package/types/ojiepermana-angular-component-radio.d.ts +2 -1
  118. package/types/ojiepermana-angular-component-resizable.d.ts +2 -1
  119. package/types/ojiepermana-angular-component-segmented-control.d.ts +1 -1
  120. package/types/ojiepermana-angular-component-select.d.ts +2 -1
  121. package/types/ojiepermana-angular-navigation-service.d.ts +8 -0
  122. package/types/ojiepermana-angular-navigation-types.d.ts +48 -3
  123. package/types/ojiepermana-angular-navigation.d.ts +59 -8
  124. package/types/ojiepermana-angular-theme-component-settings.d.ts +5 -3
  125. package/types/ojiepermana-angular-theme-layout-services.d.ts +2 -1
  126. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +52 -4
  127. package/types/ojiepermana-angular-theme-page-root.d.ts +1 -1
  128. package/types/ojiepermana-angular-theme-shell-services.d.ts +2 -1
  129. package/types/ojiepermana-angular-theme-styles.d.ts +0 -12
@@ -1,87 +1,91 @@
1
1
  import * as i0 from "@angular/core";
2
- import { Component, InjectionToken, PLATFORM_ID, Service, computed, inject, input, makeEnvironmentProviders, provideEnvironmentInitializer } from "@angular/core";
3
- import { DOCUMENT, isPlatformBrowser } from "@angular/common";
4
- const MATERIAL_SYMBOLS_FONT_ATTR = "data-icon-font";
5
- const MATERIAL_SYMBOLS_FONT_ID = "material-symbols";
6
- const MATERIAL_SYMBOLS_FONT_HREF = "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block";
7
- const MATERIAL_SYMBOLS_CONFIG = new InjectionToken("MATERIAL_SYMBOLS_CONFIG");
8
- var MaterialSymbolsService = class MaterialSymbolsService {
9
- documentRef = inject(DOCUMENT, { optional: true });
10
- platformId = inject(PLATFORM_ID);
11
- config = inject(MATERIAL_SYMBOLS_CONFIG, { optional: true });
12
- ensureLoaded() {
13
- if (!this.config) return;
14
- this.load(this.config);
2
+ import { Component, InjectionToken, Service, computed, effect, inject, input, isDevMode } from "@angular/core";
3
+ import { LucideDynamicIcon, isLucideIconComponent } from "@lucide/angular";
4
+ const UI_ICON_CONTRIBUTIONS = new InjectionToken("UI_ICON_CONTRIBUTIONS");
5
+ const UI_ICONS = new InjectionToken("UI_ICONS");
6
+ const WARN_PREFIX = "[Icon]";
7
+ var IconRegistry = class IconRegistry {
8
+ rootSet = inject(UI_ICONS, { optional: true }) ?? /* @__PURE__ */ new Map();
9
+ warned = /* @__PURE__ */ new Set();
10
+ resolve(name) {
11
+ return this.rootSet.get(name);
15
12
  }
16
- load(config) {
17
- const head = this.documentRef?.head;
18
- if (!isPlatformBrowser(this.platformId) || !head) return;
19
- if (head.querySelector(`link[${MATERIAL_SYMBOLS_FONT_ATTR}="${MATERIAL_SYMBOLS_FONT_ID}"]`)) return;
20
- const link = head.ownerDocument.createElement("link");
21
- link.rel = "stylesheet";
22
- link.href = config?.href ?? "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block";
23
- link.setAttribute(MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_ID);
24
- head.appendChild(link);
13
+ names() {
14
+ return [...new Set([...this.rootSet.values()].map((icon) => icon.name))].sort();
15
+ }
16
+ ɵwarnUnregistered(name) {
17
+ if (!isDevMode() || this.warned.has(name)) return;
18
+ this.warned.add(name);
19
+ console.warn(`${WARN_PREFIX} Ikon "${name}" tidak terdaftar. Daftarkan lewat provideIcons().`);
25
20
  }
26
21
  static ɵfac = i0.ɵɵngDeclareFactory({
27
22
  minVersion: "12.0.0",
28
- version: "22.2.0",
23
+ version: "22.2.3",
29
24
  ngImport: i0,
30
- type: MaterialSymbolsService,
25
+ type: IconRegistry,
31
26
  deps: [],
32
27
  target: i0.ɵɵFactoryTarget.Service
33
28
  });
34
29
  static ɵprov = i0.ɵɵngDeclareService({
35
30
  minVersion: "22.0.0",
36
- version: "22.2.0",
31
+ version: "22.2.3",
37
32
  ngImport: i0,
38
- type: MaterialSymbolsService
33
+ type: IconRegistry
39
34
  });
40
35
  };
41
36
  i0.ɵɵngDeclareClassMetadata({
42
37
  minVersion: "12.0.0",
43
- version: "22.2.0",
38
+ version: "22.2.3",
44
39
  ngImport: i0,
45
- type: MaterialSymbolsService,
40
+ type: IconRegistry,
46
41
  decorators: [{ type: Service }]
47
42
  });
48
- const DEFAULT_RENDER_SIZE = 24;
49
43
  var IconComponent = class IconComponent {
50
- materialSymbols = inject(MaterialSymbolsService);
44
+ nearest = inject(UI_ICONS, { optional: true });
45
+ registry = inject(IconRegistry);
51
46
  name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
52
47
  class = input("", {
53
48
  ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
54
49
  alias: "class"
55
50
  });
56
51
  size = input(null, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
57
- fill = input(0, ...ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []);
58
- weight = input(300, ...ngDevMode ? [{ debugName: "weight" }] : /* istanbul ignore next */ []);
59
- grade = input(200, ...ngDevMode ? [{ debugName: "grade" }] : /* istanbul ignore next */ []);
60
- opticalSize = input(48, ...ngDevMode ? [{ debugName: "opticalSize" }] : /* istanbul ignore next */ []);
61
- resolvedSize = computed(() => {
52
+ strokeWidth = input(null, ...ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []);
53
+ label = input(null, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
54
+ icon = computed(() => {
55
+ const name = this.name();
56
+ if (!name) return;
57
+ return this.nearest?.get(name) ?? this.registry.resolve(name);
58
+ }, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
59
+ sizeToken = computed(() => {
62
60
  const size = this.size();
63
- return size === "inherit" ? null : size ?? DEFAULT_RENDER_SIZE;
64
- }, ...ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []);
65
- fontVariationSettings = computed(() => `"FILL" ${this.fill()}, "wght" ${this.weight()}, "GRAD" ${this.grade()}, "opsz" ${this.opticalSize()}`, ...ngDevMode ? [{ debugName: "fontVariationSettings" }] : /* istanbul ignore next */ []);
61
+ return size === null ? null : size === "inherit" ? "1em" : `${size}px`;
62
+ }, ...ngDevMode ? [{ debugName: "sizeToken" }] : /* istanbul ignore next */ []);
63
+ strokeWidthToken = computed(() => {
64
+ const strokeWidth = this.strokeWidth();
65
+ return strokeWidth === null ? null : String(strokeWidth);
66
+ }, ...ngDevMode ? [{ debugName: "strokeWidthToken" }] : /* istanbul ignore next */ []);
66
67
  classes = computed(() => {
67
- const base = "material-symbols inline-flex items-center justify-center leading-none select-none";
68
+ const base = "inline-flex items-center justify-center leading-none select-none";
68
69
  const extra = this.class();
69
70
  return extra ? `${base} ${extra}` : base;
70
71
  }, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
71
72
  constructor() {
72
- this.materialSymbols.ensureLoaded();
73
+ effect(() => {
74
+ const name = this.name();
75
+ if (name && !this.icon()) this.registry.ɵwarnUnregistered(name);
76
+ });
73
77
  }
74
78
  static ɵfac = i0.ɵɵngDeclareFactory({
75
79
  minVersion: "12.0.0",
76
- version: "22.2.0",
80
+ version: "22.2.3",
77
81
  ngImport: i0,
78
82
  type: IconComponent,
79
83
  deps: [],
80
84
  target: i0.ɵɵFactoryTarget.Component
81
85
  });
82
86
  static ɵcmp = i0.ɵɵngDeclareComponent({
83
- minVersion: "17.1.0",
84
- version: "22.2.0",
87
+ minVersion: "17.0.0",
88
+ version: "22.2.3",
85
89
  type: IconComponent,
86
90
  isStandalone: true,
87
91
  selector: "Icon",
@@ -107,72 +111,71 @@ var IconComponent = class IconComponent {
107
111
  isRequired: false,
108
112
  transformFunction: null
109
113
  },
110
- fill: {
111
- classPropertyName: "fill",
112
- publicName: "fill",
114
+ strokeWidth: {
115
+ classPropertyName: "strokeWidth",
116
+ publicName: "strokeWidth",
113
117
  isSignal: true,
114
118
  isRequired: false,
115
119
  transformFunction: null
116
120
  },
117
- weight: {
118
- classPropertyName: "weight",
119
- publicName: "weight",
120
- isSignal: true,
121
- isRequired: false,
122
- transformFunction: null
123
- },
124
- grade: {
125
- classPropertyName: "grade",
126
- publicName: "grade",
127
- isSignal: true,
128
- isRequired: false,
129
- transformFunction: null
130
- },
131
- opticalSize: {
132
- classPropertyName: "opticalSize",
133
- publicName: "opticalSize",
121
+ label: {
122
+ classPropertyName: "label",
123
+ publicName: "label",
134
124
  isSignal: true,
135
125
  isRequired: false,
136
126
  transformFunction: null
137
127
  }
138
128
  },
139
129
  host: {
140
- attributes: {
141
- "aria-hidden": "true",
142
- "translate": "no"
143
- },
130
+ attributes: { "translate": "no" },
144
131
  properties: {
145
132
  "class": "classes()",
146
- "style.font-size.px": "resolvedSize()",
147
- "style.line-height.px": "resolvedSize()",
148
- "style.font-variation-settings": "fontVariationSettings()"
133
+ "style.--icon-size": "sizeToken()",
134
+ "style.--icon-stroke-width": "strokeWidthToken()",
135
+ "attr.role": "label() ? \"img\" : null",
136
+ "attr.aria-label": "label()"
149
137
  }
150
138
  },
151
139
  ngImport: i0,
152
- template: `{{ name() }}`,
140
+ template: `
141
+ @if (icon(); as data) {
142
+ <svg [lucideIcon]="data" [title]="label()"></svg>
143
+ }
144
+ `,
153
145
  isInline: true,
154
- styles: [":host{font-family:var(--icon-font-family, \"Material Symbols Rounded\");font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}\n"]
146
+ styles: [":host{flex-shrink:0}svg{inline-size:var(--icon-size);block-size:var(--icon-size);stroke-width:var(--icon-stroke-width)}\n"],
147
+ dependencies: [{
148
+ kind: "component",
149
+ type: LucideDynamicIcon,
150
+ selector: "svg[lucideIcon]",
151
+ inputs: ["lucideIcon"]
152
+ }]
155
153
  });
156
154
  };
157
155
  i0.ɵɵngDeclareClassMetadata({
158
156
  minVersion: "12.0.0",
159
- version: "22.2.0",
157
+ version: "22.2.3",
160
158
  ngImport: i0,
161
159
  type: IconComponent,
162
160
  decorators: [{
163
161
  type: Component,
164
162
  args: [{
165
163
  selector: "Icon",
164
+ imports: [LucideDynamicIcon],
166
165
  host: {
167
166
  "[class]": "classes()",
168
- "[style.font-size.px]": "resolvedSize()",
169
- "[style.line-height.px]": "resolvedSize()",
170
- "[style.font-variation-settings]": "fontVariationSettings()",
171
- "aria-hidden": "true",
167
+ "[style.--icon-size]": "sizeToken()",
168
+ "[style.--icon-stroke-width]": "strokeWidthToken()",
169
+ "[attr.role]": "label() ? \"img\" : null",
170
+ "[attr.aria-label]": "label()",
172
171
  translate: "no"
173
172
  },
174
- template: `{{ name() }}`,
175
- styles: [":host{font-family:var(--icon-font-family, \"Material Symbols Rounded\");font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}\n"]
173
+ template: `
174
+ @if (icon(); as data) {
175
+ <svg [lucideIcon]="data" [title]="label()"></svg>
176
+ }
177
+ `,
178
+ styles: [":host{flex-shrink:0}svg{inline-size:var(--icon-size);block-size:var(--icon-size);stroke-width:var(--icon-stroke-width)}\n"]
176
179
  }]
177
180
  }],
178
181
  ctorParameters: () => [],
@@ -201,44 +204,50 @@ i0.ɵɵngDeclareClassMetadata({
201
204
  required: false
202
205
  }]
203
206
  }],
204
- fill: [{
207
+ strokeWidth: [{
205
208
  type: i0.Input,
206
209
  args: [{
207
210
  isSignal: true,
208
- alias: "fill",
211
+ alias: "strokeWidth",
209
212
  required: false
210
213
  }]
211
214
  }],
212
- weight: [{
215
+ label: [{
213
216
  type: i0.Input,
214
217
  args: [{
215
218
  isSignal: true,
216
- alias: "weight",
217
- required: false
218
- }]
219
- }],
220
- grade: [{
221
- type: i0.Input,
222
- args: [{
223
- isSignal: true,
224
- alias: "grade",
225
- required: false
226
- }]
227
- }],
228
- opticalSize: [{
229
- type: i0.Input,
230
- args: [{
231
- isSignal: true,
232
- alias: "opticalSize",
219
+ alias: "label",
233
220
  required: false
234
221
  }]
235
222
  }]
236
223
  }
237
224
  });
238
- function provideMaterialSymbols(config = {}) {
239
- return makeEnvironmentProviders([{
240
- provide: MATERIAL_SYMBOLS_CONFIG,
241
- useValue: config
242
- }, provideEnvironmentInitializer(() => inject(MaterialSymbolsService).ensureLoaded())]);
225
+ function toIconData(icon, index) {
226
+ const data = isLucideIconComponent(icon) ? icon.icon : icon;
227
+ if (!data || typeof data !== "object" || typeof data.name !== "string" || !Array.isArray(data.node)) throw new Error(`[Icon] provideIcons() argumen ke-${index} bukan ikon Lucide.`);
228
+ return data;
229
+ }
230
+ function provideIcons(...icons) {
231
+ const own = /* @__PURE__ */ new Map();
232
+ icons.forEach((icon, index) => {
233
+ const data = toIconData(icon, index);
234
+ own.set(data.name, data);
235
+ for (const alias of data.aliases ?? []) own.set(alias, data);
236
+ });
237
+ return [{
238
+ provide: UI_ICON_CONTRIBUTIONS,
239
+ useValue: own,
240
+ multi: true
241
+ }, {
242
+ provide: UI_ICONS,
243
+ useFactory: () => {
244
+ const merged = new Map(inject(UI_ICONS, {
245
+ skipSelf: true,
246
+ optional: true
247
+ }) ?? []);
248
+ for (const contribution of inject(UI_ICON_CONTRIBUTIONS, { self: true })) for (const [name, data] of contribution) merged.set(name, data);
249
+ return merged;
250
+ }
251
+ }];
243
252
  }
244
- export { IconComponent, MATERIAL_SYMBOLS_CONFIG, MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_HREF, MATERIAL_SYMBOLS_FONT_ID, MaterialSymbolsService, provideMaterialSymbols };
253
+ export { IconComponent, IconRegistry, provideIcons };
@@ -3,7 +3,7 @@ import { Component, ElementRef, computed, inject, input } from "@angular/core";
3
3
  import { cn } from "@ojiepermana/angular/component/utils/core";
4
4
  import { buttonVariants } from "@ojiepermana/angular/component/button";
5
5
  const GROUP_BASE = [
6
- "relative flex min-w-0 flex-wrap overflow-hidden rounded-lg border border-input bg-transparent text-sm shadow-sm",
6
+ "relative flex min-w-0 flex-wrap overflow-hidden rounded-lg border border-input bg-transparent text-sm",
7
7
  "transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-1 focus-within:ring-ring",
8
8
  "[&>[data-slot=input-group-control]]:min-w-0",
9
9
  "[&>[data-slot=input-group-control]]:flex-1",
@@ -50,7 +50,7 @@ var InputGroupComponent = class InputGroupComponent {
50
50
  classes = computed(() => cn(GROUP_BASE, this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
51
51
  static ɵfac = i0.ɵɵngDeclareFactory({
52
52
  minVersion: "12.0.0",
53
- version: "22.2.0",
53
+ version: "22.2.3",
54
54
  ngImport: i0,
55
55
  type: InputGroupComponent,
56
56
  deps: [],
@@ -58,7 +58,7 @@ var InputGroupComponent = class InputGroupComponent {
58
58
  });
59
59
  static ɵcmp = i0.ɵɵngDeclareComponent({
60
60
  minVersion: "17.1.0",
61
- version: "22.2.0",
61
+ version: "22.2.3",
62
62
  type: InputGroupComponent,
63
63
  isStandalone: true,
64
64
  selector: "InputGroup",
@@ -77,7 +77,7 @@ var InputGroupComponent = class InputGroupComponent {
77
77
  };
78
78
  i0.ɵɵngDeclareClassMetadata({
79
79
  minVersion: "12.0.0",
80
- version: "22.2.0",
80
+ version: "22.2.3",
81
81
  ngImport: i0,
82
82
  type: InputGroupComponent,
83
83
  decorators: [{
@@ -103,7 +103,7 @@ var InputGroupAddonComponent = class InputGroupAddonComponent {
103
103
  classes = computed(() => cn(ADDON_BASE, addonAlignClasses[this.align()], this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
104
104
  static ɵfac = i0.ɵɵngDeclareFactory({
105
105
  minVersion: "12.0.0",
106
- version: "22.2.0",
106
+ version: "22.2.3",
107
107
  ngImport: i0,
108
108
  type: InputGroupAddonComponent,
109
109
  deps: [],
@@ -111,7 +111,7 @@ var InputGroupAddonComponent = class InputGroupAddonComponent {
111
111
  });
112
112
  static ɵcmp = i0.ɵɵngDeclareComponent({
113
113
  minVersion: "17.1.0",
114
- version: "22.2.0",
114
+ version: "22.2.3",
115
115
  type: InputGroupAddonComponent,
116
116
  isStandalone: true,
117
117
  selector: "InputGroupAddon",
@@ -142,7 +142,7 @@ var InputGroupAddonComponent = class InputGroupAddonComponent {
142
142
  };
143
143
  i0.ɵɵngDeclareClassMetadata({
144
144
  minVersion: "12.0.0",
145
- version: "22.2.0",
145
+ version: "22.2.3",
146
146
  ngImport: i0,
147
147
  type: InputGroupAddonComponent,
148
148
  decorators: [{
@@ -180,7 +180,7 @@ var InputGroupTextComponent = class InputGroupTextComponent {
180
180
  classes = computed(() => cn("inline-flex items-center gap-1.5 whitespace-nowrap text-sm leading-none text-current", this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
181
181
  static ɵfac = i0.ɵɵngDeclareFactory({
182
182
  minVersion: "12.0.0",
183
- version: "22.2.0",
183
+ version: "22.2.3",
184
184
  ngImport: i0,
185
185
  type: InputGroupTextComponent,
186
186
  deps: [],
@@ -188,7 +188,7 @@ var InputGroupTextComponent = class InputGroupTextComponent {
188
188
  });
189
189
  static ɵcmp = i0.ɵɵngDeclareComponent({
190
190
  minVersion: "17.1.0",
191
- version: "22.2.0",
191
+ version: "22.2.3",
192
192
  type: InputGroupTextComponent,
193
193
  isStandalone: true,
194
194
  selector: "InputGroupText",
@@ -207,7 +207,7 @@ var InputGroupTextComponent = class InputGroupTextComponent {
207
207
  };
208
208
  i0.ɵɵngDeclareClassMetadata({
209
209
  minVersion: "12.0.0",
210
- version: "22.2.0",
210
+ version: "22.2.3",
211
211
  ngImport: i0,
212
212
  type: InputGroupTextComponent,
213
213
  decorators: [{
@@ -237,7 +237,7 @@ var InputGroupButtonComponent = class InputGroupButtonComponent {
237
237
  }), "shrink-0 shadow-none", this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
238
238
  static ɵfac = i0.ɵɵngDeclareFactory({
239
239
  minVersion: "12.0.0",
240
- version: "22.2.0",
240
+ version: "22.2.3",
241
241
  ngImport: i0,
242
242
  type: InputGroupButtonComponent,
243
243
  deps: [],
@@ -245,7 +245,7 @@ var InputGroupButtonComponent = class InputGroupButtonComponent {
245
245
  });
246
246
  static ɵcmp = i0.ɵɵngDeclareComponent({
247
247
  minVersion: "17.1.0",
248
- version: "22.2.0",
248
+ version: "22.2.3",
249
249
  type: InputGroupButtonComponent,
250
250
  isStandalone: true,
251
251
  selector: "button[InputGroupButton], a[InputGroupButton]",
@@ -284,7 +284,7 @@ var InputGroupButtonComponent = class InputGroupButtonComponent {
284
284
  };
285
285
  i0.ɵɵngDeclareClassMetadata({
286
286
  minVersion: "12.0.0",
287
- version: "22.2.0",
287
+ version: "22.2.3",
288
288
  ngImport: i0,
289
289
  type: InputGroupButtonComponent,
290
290
  decorators: [{
@@ -335,7 +335,7 @@ var InputGroupInputComponent = class InputGroupInputComponent {
335
335
  }
336
336
  static ɵfac = i0.ɵɵngDeclareFactory({
337
337
  minVersion: "12.0.0",
338
- version: "22.2.0",
338
+ version: "22.2.3",
339
339
  ngImport: i0,
340
340
  type: InputGroupInputComponent,
341
341
  deps: [],
@@ -343,7 +343,7 @@ var InputGroupInputComponent = class InputGroupInputComponent {
343
343
  });
344
344
  static ɵcmp = i0.ɵɵngDeclareComponent({
345
345
  minVersion: "17.1.0",
346
- version: "22.2.0",
346
+ version: "22.2.3",
347
347
  type: InputGroupInputComponent,
348
348
  isStandalone: true,
349
349
  selector: "input[InputGroupInput]",
@@ -365,7 +365,7 @@ var InputGroupInputComponent = class InputGroupInputComponent {
365
365
  };
366
366
  i0.ɵɵngDeclareClassMetadata({
367
367
  minVersion: "12.0.0",
368
- version: "22.2.0",
368
+ version: "22.2.3",
369
369
  ngImport: i0,
370
370
  type: InputGroupInputComponent,
371
371
  decorators: [{
@@ -397,7 +397,7 @@ var InputGroupTextareaComponent = class InputGroupTextareaComponent {
397
397
  }
398
398
  static ɵfac = i0.ɵɵngDeclareFactory({
399
399
  minVersion: "12.0.0",
400
- version: "22.2.0",
400
+ version: "22.2.3",
401
401
  ngImport: i0,
402
402
  type: InputGroupTextareaComponent,
403
403
  deps: [],
@@ -405,7 +405,7 @@ var InputGroupTextareaComponent = class InputGroupTextareaComponent {
405
405
  });
406
406
  static ɵcmp = i0.ɵɵngDeclareComponent({
407
407
  minVersion: "17.1.0",
408
- version: "22.2.0",
408
+ version: "22.2.3",
409
409
  type: InputGroupTextareaComponent,
410
410
  isStandalone: true,
411
411
  selector: "textarea[InputGroupTextarea]",
@@ -427,7 +427,7 @@ var InputGroupTextareaComponent = class InputGroupTextareaComponent {
427
427
  };
428
428
  i0.ɵɵngDeclareClassMetadata({
429
429
  minVersion: "12.0.0",
430
- version: "22.2.0",
430
+ version: "22.2.3",
431
431
  ngImport: i0,
432
432
  type: InputGroupTextareaComponent,
433
433
  decorators: [{
@@ -8,7 +8,7 @@ const REGEXP_ONLY_DIGITS_AND_CHARS = /^[A-Za-z0-9]$/;
8
8
  var InputOtpContextBase = class InputOtpContextBase {
9
9
  static ɵfac = i0.ɵɵngDeclareFactory({
10
10
  minVersion: "12.0.0",
11
- version: "22.2.0",
11
+ version: "22.2.3",
12
12
  ngImport: i0,
13
13
  type: InputOtpContextBase,
14
14
  deps: [],
@@ -16,7 +16,7 @@ var InputOtpContextBase = class InputOtpContextBase {
16
16
  });
17
17
  static ɵdir = i0.ɵɵngDeclareDirective({
18
18
  minVersion: "14.0.0",
19
- version: "22.2.0",
19
+ version: "22.2.3",
20
20
  type: InputOtpContextBase,
21
21
  isStandalone: true,
22
22
  ngImport: i0
@@ -24,17 +24,17 @@ var InputOtpContextBase = class InputOtpContextBase {
24
24
  };
25
25
  i0.ɵɵngDeclareClassMetadata({
26
26
  minVersion: "12.0.0",
27
- version: "22.2.0",
27
+ version: "22.2.3",
28
28
  ngImport: i0,
29
29
  type: InputOtpContextBase,
30
30
  decorators: [{ type: Directive }]
31
31
  });
32
32
  var InputOtpGroupComponent = class InputOtpGroupComponent {
33
33
  class = input("", ...ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []);
34
- classes = computed(() => cn("flex items-center overflow-hidden rounded-md border border-input bg-background shadow-sm", this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
34
+ classes = computed(() => cn("flex items-center overflow-hidden rounded-md border border-input bg-background", this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
35
35
  static ɵfac = i0.ɵɵngDeclareFactory({
36
36
  minVersion: "12.0.0",
37
- version: "22.2.0",
37
+ version: "22.2.3",
38
38
  ngImport: i0,
39
39
  type: InputOtpGroupComponent,
40
40
  deps: [],
@@ -42,7 +42,7 @@ var InputOtpGroupComponent = class InputOtpGroupComponent {
42
42
  });
43
43
  static ɵcmp = i0.ɵɵngDeclareComponent({
44
44
  minVersion: "17.1.0",
45
- version: "22.2.0",
45
+ version: "22.2.3",
46
46
  type: InputOtpGroupComponent,
47
47
  isStandalone: true,
48
48
  selector: "InputOtpGroup",
@@ -64,7 +64,7 @@ var InputOtpGroupComponent = class InputOtpGroupComponent {
64
64
  };
65
65
  i0.ɵɵngDeclareClassMetadata({
66
66
  minVersion: "12.0.0",
67
- version: "22.2.0",
67
+ version: "22.2.3",
68
68
  ngImport: i0,
69
69
  type: InputOtpGroupComponent,
70
70
  decorators: [{
@@ -92,7 +92,7 @@ var InputOtpSeparatorComponent = class InputOtpSeparatorComponent {
92
92
  classes = computed(() => cn("inline-flex h-control-10 w-6 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4", this.class()), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
93
93
  static ɵfac = i0.ɵɵngDeclareFactory({
94
94
  minVersion: "12.0.0",
95
- version: "22.2.0",
95
+ version: "22.2.3",
96
96
  ngImport: i0,
97
97
  type: InputOtpSeparatorComponent,
98
98
  deps: [],
@@ -100,7 +100,7 @@ var InputOtpSeparatorComponent = class InputOtpSeparatorComponent {
100
100
  });
101
101
  static ɵcmp = i0.ɵɵngDeclareComponent({
102
102
  minVersion: "17.1.0",
103
- version: "22.2.0",
103
+ version: "22.2.3",
104
104
  type: InputOtpSeparatorComponent,
105
105
  isStandalone: true,
106
106
  selector: "InputOtpSeparator",
@@ -136,7 +136,7 @@ var InputOtpSeparatorComponent = class InputOtpSeparatorComponent {
136
136
  };
137
137
  i0.ɵɵngDeclareClassMetadata({
138
138
  minVersion: "12.0.0",
139
- version: "22.2.0",
139
+ version: "22.2.3",
140
140
  ngImport: i0,
141
141
  type: InputOtpSeparatorComponent,
142
142
  decorators: [{
@@ -224,7 +224,7 @@ var InputOtpSlotComponent = class InputOtpSlotComponent {
224
224
  }
225
225
  static ɵfac = i0.ɵɵngDeclareFactory({
226
226
  minVersion: "12.0.0",
227
- version: "22.2.0",
227
+ version: "22.2.3",
228
228
  ngImport: i0,
229
229
  type: InputOtpSlotComponent,
230
230
  deps: [],
@@ -232,7 +232,7 @@ var InputOtpSlotComponent = class InputOtpSlotComponent {
232
232
  });
233
233
  static ɵcmp = i0.ɵɵngDeclareComponent({
234
234
  minVersion: "17.2.0",
235
- version: "22.2.0",
235
+ version: "22.2.3",
236
236
  type: InputOtpSlotComponent,
237
237
  isStandalone: true,
238
238
  selector: "InputOtpSlot",
@@ -304,7 +304,7 @@ var InputOtpSlotComponent = class InputOtpSlotComponent {
304
304
  };
305
305
  i0.ɵɵngDeclareClassMetadata({
306
306
  minVersion: "12.0.0",
307
- version: "22.2.0",
307
+ version: "22.2.3",
308
308
  ngImport: i0,
309
309
  type: InputOtpSlotComponent,
310
310
  decorators: [{
@@ -660,7 +660,7 @@ var InputOtpComponent = class InputOtpComponent extends InputOtpContextBase {
660
660
  }
661
661
  static ɵfac = i0.ɵɵngDeclareFactory({
662
662
  minVersion: "12.0.0",
663
- version: "22.2.0",
663
+ version: "22.2.3",
664
664
  ngImport: i0,
665
665
  type: InputOtpComponent,
666
666
  deps: null,
@@ -668,7 +668,7 @@ var InputOtpComponent = class InputOtpComponent extends InputOtpContextBase {
668
668
  });
669
669
  static ɵcmp = i0.ɵɵngDeclareComponent({
670
670
  minVersion: "17.2.0",
671
- version: "22.2.0",
671
+ version: "22.2.3",
672
672
  type: InputOtpComponent,
673
673
  isStandalone: true,
674
674
  selector: "InputOtp",
@@ -804,7 +804,7 @@ var InputOtpComponent = class InputOtpComponent extends InputOtpContextBase {
804
804
  };
805
805
  i0.ɵɵngDeclareClassMetadata({
806
806
  minVersion: "12.0.0",
807
- version: "22.2.0",
807
+ version: "22.2.3",
808
808
  ngImport: i0,
809
809
  type: InputOtpComponent,
810
810
  decorators: [{
@@ -5,12 +5,12 @@ import * as i1 from "@ojiepermana/angular/component/utils/scale";
5
5
  import { ComponentScaleDirective } from "@ojiepermana/angular/component/utils/scale";
6
6
  const BASE = [
7
7
  "flex h-control-md w-full rounded-md border border-input bg-transparent px-3 py-1",
8
- "text-sm shadow-sm transition-colors",
8
+ "text-sm transition-colors",
9
9
  "file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
10
10
  "placeholder:text-muted-foreground",
11
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
11
+ "focus-ring",
12
12
  "disabled:cursor-not-allowed disabled:opacity-50",
13
- "aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive"
13
+ "aria-[invalid=true]:border-destructive aria-[invalid=true]:[--focus-ring-color:hsl(var(--destructive))]"
14
14
  ].join(" ");
15
15
  var InputComponent = class InputComponent {
16
16
  componentScale = inject(ComponentScaleDirective);
@@ -24,7 +24,7 @@ var InputComponent = class InputComponent {
24
24
  }
25
25
  static ɵfac = i0.ɵɵngDeclareFactory({
26
26
  minVersion: "12.0.0",
27
- version: "22.2.0",
27
+ version: "22.2.3",
28
28
  ngImport: i0,
29
29
  type: InputComponent,
30
30
  deps: [],
@@ -32,7 +32,7 @@ var InputComponent = class InputComponent {
32
32
  });
33
33
  static ɵcmp = i0.ɵɵngDeclareComponent({
34
34
  minVersion: "17.1.0",
35
- version: "22.2.0",
35
+ version: "22.2.3",
36
36
  type: InputComponent,
37
37
  isStandalone: true,
38
38
  selector: "input[Input]",
@@ -60,7 +60,7 @@ var InputComponent = class InputComponent {
60
60
  };
61
61
  i0.ɵɵngDeclareClassMetadata({
62
62
  minVersion: "12.0.0",
63
- version: "22.2.0",
63
+ version: "22.2.3",
64
64
  ngImport: i0,
65
65
  type: InputComponent,
66
66
  decorators: [{