@ojiepermana/angular 21.2.2 → 21.3.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 (232) hide show
  1. package/README.md +119 -23
  2. package/fesm2022/ojiepermana-angular-layout-theme.mjs +581 -0
  3. package/fesm2022/ojiepermana-angular-layout-theme.mjs.map +1 -0
  4. package/fesm2022/ojiepermana-angular-layout.mjs +2 -1
  5. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  6. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +59 -0
  7. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -0
  8. package/fesm2022/ojiepermana-angular-navigation.mjs +6 -58
  9. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
  10. package/fesm2022/ojiepermana-angular-theme.mjs +1 -1
  11. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  12. package/fesm2022/ojiepermana-angular-ui-component-accordion.mjs +174 -0
  13. package/fesm2022/ojiepermana-angular-ui-component-accordion.mjs.map +1 -0
  14. package/fesm2022/ojiepermana-angular-ui-component-alert-dialog.mjs +242 -0
  15. package/fesm2022/ojiepermana-angular-ui-component-alert-dialog.mjs.map +1 -0
  16. package/fesm2022/ojiepermana-angular-ui-component-alert.mjs +90 -0
  17. package/fesm2022/ojiepermana-angular-ui-component-alert.mjs.map +1 -0
  18. package/fesm2022/ojiepermana-angular-ui-component-aspect-ratio.mjs +33 -0
  19. package/fesm2022/ojiepermana-angular-ui-component-aspect-ratio.mjs.map +1 -0
  20. package/fesm2022/ojiepermana-angular-ui-component-avatar.mjs +123 -0
  21. package/fesm2022/ojiepermana-angular-ui-component-avatar.mjs.map +1 -0
  22. package/fesm2022/ojiepermana-angular-ui-component-badge.mjs +47 -0
  23. package/fesm2022/ojiepermana-angular-ui-component-badge.mjs.map +1 -0
  24. package/fesm2022/ojiepermana-angular-ui-component-breadcrumb.mjs +186 -0
  25. package/fesm2022/ojiepermana-angular-ui-component-breadcrumb.mjs.map +1 -0
  26. package/fesm2022/ojiepermana-angular-ui-component-button-group.mjs +95 -0
  27. package/fesm2022/ojiepermana-angular-ui-component-button-group.mjs.map +1 -0
  28. package/fesm2022/ojiepermana-angular-ui-component-button.mjs +64 -0
  29. package/fesm2022/ojiepermana-angular-ui-component-button.mjs.map +1 -0
  30. package/fesm2022/ojiepermana-angular-ui-component-calendar.mjs +78 -0
  31. package/fesm2022/ojiepermana-angular-ui-component-calendar.mjs.map +1 -0
  32. package/fesm2022/ojiepermana-angular-ui-component-card.mjs +137 -0
  33. package/fesm2022/ojiepermana-angular-ui-component-card.mjs.map +1 -0
  34. package/fesm2022/ojiepermana-angular-ui-component-carousel.mjs +310 -0
  35. package/fesm2022/ojiepermana-angular-ui-component-carousel.mjs.map +1 -0
  36. package/fesm2022/ojiepermana-angular-ui-component-chart-area.mjs +6 -0
  37. package/fesm2022/ojiepermana-angular-ui-component-chart-area.mjs.map +1 -0
  38. package/fesm2022/ojiepermana-angular-ui-component-chart-bar.mjs +6 -0
  39. package/fesm2022/ojiepermana-angular-ui-component-chart-bar.mjs.map +1 -0
  40. package/fesm2022/ojiepermana-angular-ui-component-chart-line.mjs +6 -0
  41. package/fesm2022/ojiepermana-angular-ui-component-chart-line.mjs.map +1 -0
  42. package/fesm2022/ojiepermana-angular-ui-component-chart-pie.mjs +6 -0
  43. package/fesm2022/ojiepermana-angular-ui-component-chart-pie.mjs.map +1 -0
  44. package/fesm2022/ojiepermana-angular-ui-component-chart-radar.mjs +6 -0
  45. package/fesm2022/ojiepermana-angular-ui-component-chart-radar.mjs.map +1 -0
  46. package/fesm2022/ojiepermana-angular-ui-component-chart-radial.mjs +6 -0
  47. package/fesm2022/ojiepermana-angular-ui-component-chart-radial.mjs.map +1 -0
  48. package/fesm2022/ojiepermana-angular-ui-component-chart-scatter.mjs +6 -0
  49. package/fesm2022/ojiepermana-angular-ui-component-chart-scatter.mjs.map +1 -0
  50. package/fesm2022/{ojiepermana-angular-chart.mjs → ojiepermana-angular-ui-component-chart.mjs} +2 -2
  51. package/fesm2022/ojiepermana-angular-ui-component-chart.mjs.map +1 -0
  52. package/fesm2022/ojiepermana-angular-ui-component-checkbox.mjs +104 -0
  53. package/fesm2022/ojiepermana-angular-ui-component-checkbox.mjs.map +1 -0
  54. package/fesm2022/ojiepermana-angular-ui-component-collapsible.mjs +116 -0
  55. package/fesm2022/ojiepermana-angular-ui-component-collapsible.mjs.map +1 -0
  56. package/fesm2022/ojiepermana-angular-ui-component-combobox.mjs +263 -0
  57. package/fesm2022/ojiepermana-angular-ui-component-combobox.mjs.map +1 -0
  58. package/fesm2022/ojiepermana-angular-ui-component-command.mjs +268 -0
  59. package/fesm2022/ojiepermana-angular-ui-component-command.mjs.map +1 -0
  60. package/fesm2022/ojiepermana-angular-ui-component-context-menu.mjs +100 -0
  61. package/fesm2022/ojiepermana-angular-ui-component-context-menu.mjs.map +1 -0
  62. package/fesm2022/ojiepermana-angular-ui-component-date-picker.mjs +155 -0
  63. package/fesm2022/ojiepermana-angular-ui-component-date-picker.mjs.map +1 -0
  64. package/fesm2022/ojiepermana-angular-ui-component-dialog.mjs +262 -0
  65. package/fesm2022/ojiepermana-angular-ui-component-dialog.mjs.map +1 -0
  66. package/fesm2022/ojiepermana-angular-ui-component-drawer.mjs +6 -0
  67. package/fesm2022/ojiepermana-angular-ui-component-drawer.mjs.map +1 -0
  68. package/fesm2022/ojiepermana-angular-ui-component-dropdown-menu.mjs +458 -0
  69. package/fesm2022/ojiepermana-angular-ui-component-dropdown-menu.mjs.map +1 -0
  70. package/fesm2022/ojiepermana-angular-ui-component-form.mjs +208 -0
  71. package/fesm2022/ojiepermana-angular-ui-component-form.mjs.map +1 -0
  72. package/fesm2022/ojiepermana-angular-ui-component-input-group.mjs +164 -0
  73. package/fesm2022/ojiepermana-angular-ui-component-input-group.mjs.map +1 -0
  74. package/fesm2022/ojiepermana-angular-ui-component-input.mjs +43 -0
  75. package/fesm2022/ojiepermana-angular-ui-component-input.mjs.map +1 -0
  76. package/fesm2022/ojiepermana-angular-ui-component-item.mjs +241 -0
  77. package/fesm2022/ojiepermana-angular-ui-component-item.mjs.map +1 -0
  78. package/fesm2022/ojiepermana-angular-ui-component-label.mjs +30 -0
  79. package/fesm2022/ojiepermana-angular-ui-component-label.mjs.map +1 -0
  80. package/fesm2022/ojiepermana-angular-ui-component-pagination.mjs +192 -0
  81. package/fesm2022/ojiepermana-angular-ui-component-pagination.mjs.map +1 -0
  82. package/fesm2022/ojiepermana-angular-ui-component-popover.mjs +163 -0
  83. package/fesm2022/ojiepermana-angular-ui-component-popover.mjs.map +1 -0
  84. package/fesm2022/ojiepermana-angular-ui-component-progress.mjs +53 -0
  85. package/fesm2022/ojiepermana-angular-ui-component-progress.mjs.map +1 -0
  86. package/fesm2022/ojiepermana-angular-ui-component-radio.mjs +92 -0
  87. package/fesm2022/ojiepermana-angular-ui-component-radio.mjs.map +1 -0
  88. package/fesm2022/ojiepermana-angular-ui-component-scroll-area.mjs +48 -0
  89. package/fesm2022/ojiepermana-angular-ui-component-scroll-area.mjs.map +1 -0
  90. package/fesm2022/ojiepermana-angular-ui-component-select.mjs +131 -0
  91. package/fesm2022/ojiepermana-angular-ui-component-select.mjs.map +1 -0
  92. package/fesm2022/ojiepermana-angular-ui-component-separator.mjs +33 -0
  93. package/fesm2022/ojiepermana-angular-ui-component-separator.mjs.map +1 -0
  94. package/fesm2022/ojiepermana-angular-ui-component-sheet.mjs +235 -0
  95. package/fesm2022/ojiepermana-angular-ui-component-sheet.mjs.map +1 -0
  96. package/fesm2022/ojiepermana-angular-ui-component-skeleton.mjs +29 -0
  97. package/fesm2022/ojiepermana-angular-ui-component-skeleton.mjs.map +1 -0
  98. package/fesm2022/ojiepermana-angular-ui-component-slider.mjs +29 -0
  99. package/fesm2022/ojiepermana-angular-ui-component-slider.mjs.map +1 -0
  100. package/fesm2022/ojiepermana-angular-ui-component-switch.mjs +84 -0
  101. package/fesm2022/ojiepermana-angular-ui-component-switch.mjs.map +1 -0
  102. package/fesm2022/ojiepermana-angular-ui-component-table.mjs +139 -0
  103. package/fesm2022/ojiepermana-angular-ui-component-table.mjs.map +1 -0
  104. package/fesm2022/ojiepermana-angular-ui-component-tabs.mjs +252 -0
  105. package/fesm2022/ojiepermana-angular-ui-component-tabs.mjs.map +1 -0
  106. package/fesm2022/ojiepermana-angular-ui-component-textarea.mjs +37 -0
  107. package/fesm2022/ojiepermana-angular-ui-component-textarea.mjs.map +1 -0
  108. package/fesm2022/ojiepermana-angular-ui-component-toast.mjs +47 -0
  109. package/fesm2022/ojiepermana-angular-ui-component-toast.mjs.map +1 -0
  110. package/fesm2022/ojiepermana-angular-ui-component-tooltip.mjs +56 -0
  111. package/fesm2022/ojiepermana-angular-ui-component-tooltip.mjs.map +1 -0
  112. package/fesm2022/ojiepermana-angular-ui-component-utils.mjs +13 -0
  113. package/fesm2022/ojiepermana-angular-ui-component-utils.mjs.map +1 -0
  114. package/fesm2022/ojiepermana-angular.mjs +5 -3
  115. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  116. package/layout/theme/package.json +4 -0
  117. package/navigation-icon/package.json +4 -0
  118. package/package.json +212 -12
  119. package/types/ojiepermana-angular-layout-theme.d.ts +205 -0
  120. package/types/ojiepermana-angular-layout.d.ts +1 -1
  121. package/types/ojiepermana-angular-navigation-icon.d.ts +17 -0
  122. package/types/ojiepermana-angular-navigation.d.ts +2 -20
  123. package/types/ojiepermana-angular-ui-component-accordion.d.ts +51 -0
  124. package/types/ojiepermana-angular-ui-component-alert-dialog.d.ts +93 -0
  125. package/types/ojiepermana-angular-ui-component-alert.d.ts +37 -0
  126. package/types/ojiepermana-angular-ui-component-aspect-ratio.d.ts +12 -0
  127. package/types/ojiepermana-angular-ui-component-avatar.d.ts +51 -0
  128. package/types/ojiepermana-angular-ui-component-badge.d.ts +19 -0
  129. package/types/ojiepermana-angular-ui-component-breadcrumb.d.ts +46 -0
  130. package/types/ojiepermana-angular-ui-component-button-group.d.ts +26 -0
  131. package/types/ojiepermana-angular-ui-component-button.d.ts +22 -0
  132. package/types/ojiepermana-angular-ui-component-calendar.d.ts +33 -0
  133. package/types/ojiepermana-angular-ui-component-card.d.ts +60 -0
  134. package/types/ojiepermana-angular-ui-component-carousel.d.ts +86 -0
  135. package/types/ojiepermana-angular-ui-component-chart-area.d.ts +1 -0
  136. package/types/ojiepermana-angular-ui-component-chart-bar.d.ts +1 -0
  137. package/types/ojiepermana-angular-ui-component-chart-line.d.ts +1 -0
  138. package/types/ojiepermana-angular-ui-component-chart-pie.d.ts +1 -0
  139. package/types/ojiepermana-angular-ui-component-chart-radar.d.ts +1 -0
  140. package/types/ojiepermana-angular-ui-component-chart-radial.d.ts +1 -0
  141. package/types/ojiepermana-angular-ui-component-chart-scatter.d.ts +1 -0
  142. package/types/{ojiepermana-angular-chart.d.ts → ojiepermana-angular-ui-component-chart.d.ts} +15 -15
  143. package/types/ojiepermana-angular-ui-component-checkbox.d.ts +35 -0
  144. package/types/ojiepermana-angular-ui-component-collapsible.d.ts +42 -0
  145. package/types/ojiepermana-angular-ui-component-combobox.d.ts +51 -0
  146. package/types/ojiepermana-angular-ui-component-command.d.ts +99 -0
  147. package/types/ojiepermana-angular-ui-component-context-menu.d.ts +35 -0
  148. package/types/ojiepermana-angular-ui-component-date-picker.d.ts +41 -0
  149. package/types/ojiepermana-angular-ui-component-dialog.d.ts +87 -0
  150. package/types/ojiepermana-angular-ui-component-drawer.d.ts +1 -0
  151. package/types/ojiepermana-angular-ui-component-dropdown-menu.d.ts +135 -0
  152. package/types/ojiepermana-angular-ui-component-form.d.ts +92 -0
  153. package/types/ojiepermana-angular-ui-component-input-group.d.ts +51 -0
  154. package/types/ojiepermana-angular-ui-component-input.d.ts +16 -0
  155. package/types/ojiepermana-angular-ui-component-item.d.ts +88 -0
  156. package/types/ojiepermana-angular-ui-component-label.d.ts +11 -0
  157. package/types/ojiepermana-angular-ui-component-pagination.d.ts +27 -0
  158. package/types/ojiepermana-angular-ui-component-popover.d.ts +43 -0
  159. package/types/ojiepermana-angular-ui-component-progress.d.ts +17 -0
  160. package/types/ojiepermana-angular-ui-component-radio.d.ts +34 -0
  161. package/types/ojiepermana-angular-ui-component-scroll-area.d.ts +19 -0
  162. package/types/ojiepermana-angular-ui-component-select.d.ts +45 -0
  163. package/types/ojiepermana-angular-ui-component-separator.d.ts +14 -0
  164. package/types/ojiepermana-angular-ui-component-sheet.d.ts +74 -0
  165. package/types/ojiepermana-angular-ui-component-skeleton.d.ts +10 -0
  166. package/types/ojiepermana-angular-ui-component-slider.d.ts +16 -0
  167. package/types/ojiepermana-angular-ui-component-switch.d.ts +30 -0
  168. package/types/ojiepermana-angular-ui-component-table.d.ts +52 -0
  169. package/types/ojiepermana-angular-ui-component-tabs.d.ts +92 -0
  170. package/types/ojiepermana-angular-ui-component-textarea.d.ts +12 -0
  171. package/types/ojiepermana-angular-ui-component-toast.d.ts +29 -0
  172. package/types/ojiepermana-angular-ui-component-tooltip.d.ts +22 -0
  173. package/types/ojiepermana-angular-ui-component-utils.d.ts +5 -0
  174. package/ui/component/accordion/package.json +4 -0
  175. package/ui/component/alert/package.json +4 -0
  176. package/ui/component/alert-dialog/package.json +4 -0
  177. package/ui/component/aspect-ratio/package.json +4 -0
  178. package/ui/component/avatar/package.json +4 -0
  179. package/ui/component/badge/package.json +4 -0
  180. package/ui/component/breadcrumb/package.json +4 -0
  181. package/ui/component/button/package.json +4 -0
  182. package/ui/component/button-group/package.json +4 -0
  183. package/ui/component/calendar/package.json +4 -0
  184. package/ui/component/card/package.json +4 -0
  185. package/ui/component/carousel/package.json +4 -0
  186. package/ui/component/chart/README.md +249 -0
  187. package/ui/component/chart/area/package.json +4 -0
  188. package/ui/component/chart/bar/package.json +4 -0
  189. package/ui/component/chart/line/package.json +4 -0
  190. package/ui/component/chart/package.json +4 -0
  191. package/ui/component/chart/pie/package.json +4 -0
  192. package/ui/component/chart/radar/package.json +4 -0
  193. package/ui/component/chart/radial/package.json +4 -0
  194. package/ui/component/chart/scatter/package.json +4 -0
  195. package/ui/component/checkbox/package.json +4 -0
  196. package/ui/component/collapsible/package.json +4 -0
  197. package/ui/component/combobox/package.json +4 -0
  198. package/ui/component/command/package.json +4 -0
  199. package/ui/component/context-menu/package.json +4 -0
  200. package/ui/component/date-picker/package.json +4 -0
  201. package/ui/component/dialog/package.json +4 -0
  202. package/ui/component/drawer/package.json +4 -0
  203. package/ui/component/dropdown-menu/package.json +4 -0
  204. package/ui/component/form/package.json +4 -0
  205. package/ui/component/input/package.json +4 -0
  206. package/ui/component/input-group/package.json +4 -0
  207. package/ui/component/item/package.json +4 -0
  208. package/ui/component/label/package.json +4 -0
  209. package/ui/component/pagination/package.json +4 -0
  210. package/ui/component/popover/package.json +4 -0
  211. package/ui/component/progress/package.json +4 -0
  212. package/ui/component/radio/package.json +4 -0
  213. package/ui/component/scroll-area/package.json +4 -0
  214. package/ui/component/select/package.json +4 -0
  215. package/ui/component/separator/package.json +4 -0
  216. package/ui/component/sheet/package.json +4 -0
  217. package/ui/component/skeleton/package.json +4 -0
  218. package/ui/component/slider/package.json +4 -0
  219. package/ui/component/switch/package.json +4 -0
  220. package/ui/component/table/package.json +4 -0
  221. package/ui/component/tabs/package.json +4 -0
  222. package/ui/component/textarea/package.json +4 -0
  223. package/ui/component/toast/package.json +4 -0
  224. package/ui/component/tooltip/package.json +4 -0
  225. package/ui/component/utils/package.json +4 -0
  226. package/chart/README.md +0 -0
  227. package/chart/package.json +0 -4
  228. package/component/package.json +0 -4
  229. package/fesm2022/ojiepermana-angular-chart.mjs.map +0 -1
  230. package/fesm2022/ojiepermana-angular-component.mjs +0 -5774
  231. package/fesm2022/ojiepermana-angular-component.mjs.map +0 -1
  232. package/types/ojiepermana-angular-component.d.ts +0 -1927
@@ -0,0 +1,163 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, TemplateRef, Directive, InjectionToken, ViewContainerRef, ElementRef, DestroyRef, input, output, signal } from '@angular/core';
3
+ import { Overlay } from '@angular/cdk/overlay';
4
+ import { TemplatePortal } from '@angular/cdk/portal';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { merge } from 'rxjs';
7
+ import { filter } from 'rxjs/operators';
8
+
9
+ class PopoverContentDirective {
10
+ template = inject(TemplateRef);
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: PopoverContentDirective, isStandalone: true, selector: "ng-template[uiPopoverContent]", exportAs: ["uiPopoverContent"], ngImport: i0 });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PopoverContentDirective, decorators: [{
15
+ type: Directive,
16
+ args: [{
17
+ selector: 'ng-template[uiPopoverContent]',
18
+ exportAs: 'uiPopoverContent',
19
+ }]
20
+ }] });
21
+
22
+ const POPOVER_TRIGGER_DEFAULTS = new InjectionToken('POPOVER_TRIGGER_DEFAULTS');
23
+ const POSITION_ANCHORS = {
24
+ top: (align) => ({
25
+ originX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',
26
+ originY: 'top',
27
+ overlayX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',
28
+ overlayY: 'bottom',
29
+ }),
30
+ bottom: (align) => ({
31
+ originX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',
32
+ originY: 'bottom',
33
+ overlayX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',
34
+ overlayY: 'top',
35
+ }),
36
+ left: (align) => ({
37
+ originX: 'start',
38
+ originY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',
39
+ overlayX: 'end',
40
+ overlayY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',
41
+ }),
42
+ right: (align) => ({
43
+ originX: 'end',
44
+ originY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',
45
+ overlayX: 'start',
46
+ overlayY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',
47
+ }),
48
+ };
49
+ function positionFor(side, align, sideOffset) {
50
+ const anchor = POSITION_ANCHORS[side](align);
51
+ if (side === 'top') {
52
+ return { ...anchor, offsetY: -sideOffset };
53
+ }
54
+ if (side === 'bottom') {
55
+ return { ...anchor, offsetY: sideOffset };
56
+ }
57
+ if (side === 'left') {
58
+ return { ...anchor, offsetX: -sideOffset };
59
+ }
60
+ return { ...anchor, offsetX: sideOffset };
61
+ }
62
+ class PopoverTriggerDirective {
63
+ overlay = inject(Overlay);
64
+ vcr = inject(ViewContainerRef);
65
+ el = inject(ElementRef);
66
+ destroyRef = inject(DestroyRef);
67
+ defaults = inject(POPOVER_TRIGGER_DEFAULTS, { optional: true });
68
+ uiPopoverTrigger = input.required(...(ngDevMode ? [{ debugName: "uiPopoverTrigger" }] : /* istanbul ignore next */ []));
69
+ side = input(undefined, ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
70
+ align = input(undefined, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
71
+ sideOffset = input(undefined, ...(ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []));
72
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
73
+ openedChange = output();
74
+ overlayRef = null;
75
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
76
+ toggle() {
77
+ if (this.disabled())
78
+ return;
79
+ this.isOpen() ? this.close() : this.open();
80
+ }
81
+ onKeyboardToggle(event) {
82
+ if (this.disabled() || this.usesNativeKeyboardActivation()) {
83
+ return;
84
+ }
85
+ event.preventDefault();
86
+ this.toggle();
87
+ }
88
+ open() {
89
+ if (this.isOpen() || this.disabled())
90
+ return;
91
+ const side = this.side() ?? this.defaults?.side?.() ?? 'bottom';
92
+ const align = this.align() ?? this.defaults?.align?.() ?? 'center';
93
+ const sideOffset = this.sideOffset() ?? this.defaults?.sideOffset?.() ?? 8;
94
+ const primary = positionFor(side, align, sideOffset);
95
+ const fallback = positionFor(this.oppositeSide(side), align, sideOffset);
96
+ const positionStrategy = this.overlay
97
+ .position()
98
+ .flexibleConnectedTo(this.el)
99
+ .withPositions([primary, fallback])
100
+ .withPush(false)
101
+ .withFlexibleDimensions(false);
102
+ this.overlayRef = this.overlay.create({
103
+ positionStrategy,
104
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
105
+ hasBackdrop: false,
106
+ panelClass: 'ui-popover-panel',
107
+ });
108
+ const portal = new TemplatePortal(this.uiPopoverTrigger().template, this.vcr);
109
+ this.overlayRef.attach(portal);
110
+ merge(this.overlayRef
111
+ .outsidePointerEvents()
112
+ .pipe(filter((event) => !this.el.nativeElement.contains(event.target))), this.overlayRef.keydownEvents().pipe(filter((event) => event.key === 'Escape')), this.overlayRef.detachments())
113
+ .pipe(takeUntilDestroyed(this.destroyRef))
114
+ .subscribe(() => this.close());
115
+ this.isOpen.set(true);
116
+ this.openedChange.emit(true);
117
+ }
118
+ close() {
119
+ if (!this.isOpen())
120
+ return;
121
+ this.overlayRef?.dispose();
122
+ this.overlayRef = null;
123
+ this.isOpen.set(false);
124
+ this.openedChange.emit(false);
125
+ }
126
+ oppositeSide(side) {
127
+ return side === 'top' ? 'bottom' : side === 'bottom' ? 'top' : side === 'left' ? 'right' : 'left';
128
+ }
129
+ usesNativeKeyboardActivation() {
130
+ const host = this.el.nativeElement;
131
+ const tagName = host.tagName;
132
+ return (tagName === 'BUTTON' ||
133
+ tagName === 'INPUT' ||
134
+ tagName === 'SELECT' ||
135
+ tagName === 'TEXTAREA' ||
136
+ tagName === 'SUMMARY' ||
137
+ (tagName === 'A' && host.hasAttribute('href')));
138
+ }
139
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PopoverTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
140
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: PopoverTriggerDirective, isStandalone: true, selector: "[uiPopoverTrigger]", inputs: { uiPopoverTrigger: { classPropertyName: "uiPopoverTrigger", publicName: "uiPopoverTrigger", isSignal: true, isRequired: true, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, host: { listeners: { "click": "toggle()", "keydown.enter": "onKeyboardToggle($event)", "keydown.space": "onKeyboardToggle($event)", "keydown.escape": "close()" }, properties: { "attr.aria-expanded": "isOpen()", "attr.aria-haspopup": "\"dialog\"" } }, exportAs: ["uiPopoverTrigger"], ngImport: i0 });
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PopoverTriggerDirective, decorators: [{
143
+ type: Directive,
144
+ args: [{
145
+ selector: '[uiPopoverTrigger]',
146
+ exportAs: 'uiPopoverTrigger',
147
+ host: {
148
+ '[attr.aria-expanded]': 'isOpen()',
149
+ '[attr.aria-haspopup]': '"dialog"',
150
+ '(click)': 'toggle()',
151
+ '(keydown.enter)': 'onKeyboardToggle($event)',
152
+ '(keydown.space)': 'onKeyboardToggle($event)',
153
+ '(keydown.escape)': 'close()',
154
+ },
155
+ }]
156
+ }], propDecorators: { uiPopoverTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "uiPopoverTrigger", required: true }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }] } });
157
+
158
+ /**
159
+ * Generated bundle index. Do not edit.
160
+ */
161
+
162
+ export { POPOVER_TRIGGER_DEFAULTS, PopoverContentDirective, PopoverTriggerDirective };
163
+ //# sourceMappingURL=ojiepermana-angular-ui-component-popover.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-popover.mjs","sources":["../../../projects/angular/ui/component/popover/src/lib/popover-content.directive.ts","../../../projects/angular/ui/component/popover/src/lib/popover-trigger.directive.ts","../../../projects/angular/ui/component/popover/ojiepermana-angular-ui-component-popover.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'ng-template[uiPopoverContent]',\n exportAs: 'uiPopoverContent',\n})\nexport class PopoverContentDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { Overlay, OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n InjectionToken,\n ViewContainerRef,\n inject,\n input,\n output,\n signal,\n type Signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport type { PopoverContentDirective } from './popover-content.directive';\n\nexport type PopoverSide = 'top' | 'right' | 'bottom' | 'left';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\nexport interface PopoverTriggerDefaults {\n readonly side?: Signal<PopoverSide>;\n readonly align?: Signal<PopoverAlign>;\n readonly sideOffset?: Signal<number>;\n}\n\nexport const POPOVER_TRIGGER_DEFAULTS = new InjectionToken<PopoverTriggerDefaults>('POPOVER_TRIGGER_DEFAULTS');\n\nconst POSITION_ANCHORS: Record<PopoverSide, (align: PopoverAlign) => ConnectedPosition> = {\n top: (align) => ({\n originX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',\n originY: 'top',\n overlayX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',\n overlayY: 'bottom',\n }),\n bottom: (align) => ({\n originX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',\n originY: 'bottom',\n overlayX: align === 'start' ? 'start' : align === 'end' ? 'end' : 'center',\n overlayY: 'top',\n }),\n left: (align) => ({\n originX: 'start',\n originY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',\n overlayX: 'end',\n overlayY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',\n }),\n right: (align) => ({\n originX: 'end',\n originY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',\n overlayX: 'start',\n overlayY: align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center',\n }),\n};\n\nfunction positionFor(side: PopoverSide, align: PopoverAlign, sideOffset: number): ConnectedPosition {\n const anchor = POSITION_ANCHORS[side](align);\n\n if (side === 'top') {\n return { ...anchor, offsetY: -sideOffset };\n }\n\n if (side === 'bottom') {\n return { ...anchor, offsetY: sideOffset };\n }\n\n if (side === 'left') {\n return { ...anchor, offsetX: -sideOffset };\n }\n\n return { ...anchor, offsetX: sideOffset };\n}\n\n@Directive({\n selector: '[uiPopoverTrigger]',\n exportAs: 'uiPopoverTrigger',\n host: {\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"dialog\"',\n '(click)': 'toggle()',\n '(keydown.enter)': 'onKeyboardToggle($event)',\n '(keydown.space)': 'onKeyboardToggle($event)',\n '(keydown.escape)': 'close()',\n },\n})\nexport class PopoverTriggerDirective {\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly defaults = inject(POPOVER_TRIGGER_DEFAULTS, { optional: true });\n\n readonly uiPopoverTrigger = input.required<PopoverContentDirective>();\n readonly side = input<PopoverSide | undefined>(undefined);\n readonly align = input<PopoverAlign | undefined>(undefined);\n readonly sideOffset = input<number | undefined>(undefined);\n readonly disabled = input<boolean>(false);\n\n readonly openedChange = output<boolean>();\n\n private overlayRef: OverlayRef | null = null;\n readonly isOpen = signal(false);\n\n toggle(): void {\n if (this.disabled()) return;\n this.isOpen() ? this.close() : this.open();\n }\n\n onKeyboardToggle(event: Event): void {\n if (this.disabled() || this.usesNativeKeyboardActivation()) {\n return;\n }\n\n event.preventDefault();\n this.toggle();\n }\n\n open(): void {\n if (this.isOpen() || this.disabled()) return;\n\n const side = this.side() ?? this.defaults?.side?.() ?? 'bottom';\n const align = this.align() ?? this.defaults?.align?.() ?? 'center';\n const sideOffset = this.sideOffset() ?? this.defaults?.sideOffset?.() ?? 8;\n\n const primary = positionFor(side, align, sideOffset);\n const fallback = positionFor(this.oppositeSide(side), align, sideOffset);\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.el)\n .withPositions([primary, fallback])\n .withPush(false)\n .withFlexibleDimensions(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: 'ui-popover-panel',\n });\n\n const portal = new TemplatePortal(this.uiPopoverTrigger().template, this.vcr);\n this.overlayRef.attach(portal);\n\n merge(\n this.overlayRef\n .outsidePointerEvents()\n .pipe(filter((event) => !this.el.nativeElement.contains(event.target as Node))),\n this.overlayRef.keydownEvents().pipe(filter((event) => event.key === 'Escape')),\n this.overlayRef.detachments(),\n )\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n this.isOpen.set(true);\n this.openedChange.emit(true);\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.isOpen.set(false);\n this.openedChange.emit(false);\n }\n\n private oppositeSide(side: PopoverSide): PopoverSide {\n return side === 'top' ? 'bottom' : side === 'bottom' ? 'top' : side === 'left' ? 'right' : 'left';\n }\n\n private usesNativeKeyboardActivation(): boolean {\n const host = this.el.nativeElement;\n const tagName = host.tagName;\n\n return (\n tagName === 'BUTTON' ||\n tagName === 'INPUT' ||\n tagName === 'SELECT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SUMMARY' ||\n (tagName === 'A' && host.hasAttribute('href'))\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils';
4
+
5
+ class ProgressComponent {
6
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
7
+ max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
8
+ indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
9
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
10
+ ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
11
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
12
+ clamped = computed(() => {
13
+ const v = this.value() ?? 0;
14
+ return Math.max(0, Math.min(this.max(), v));
15
+ }, ...(ngDevMode ? [{ debugName: "clamped" }] : /* istanbul ignore next */ []));
16
+ indicatorTransform = computed(() => {
17
+ if (this.indeterminate())
18
+ return 'translateX(-100%)';
19
+ const pct = (this.clamped() / this.max()) * 100;
20
+ return `translateX(-${100 - pct}%)`;
21
+ }, ...(ngDevMode ? [{ debugName: "indicatorTransform" }] : /* istanbul ignore next */ []));
22
+ classes = computed(() => cn('relative h-2 w-full overflow-hidden rounded-full bg-secondary', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: ProgressComponent, isStandalone: true, selector: "ui-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.role": "\"progressbar\"", "attr.aria-valuemin": "0", "attr.aria-valuemax": "max()", "attr.aria-valuenow": "indeterminate() ? null : clamped()", "attr.aria-label": "ariaLabel()", "attr.aria-labelledby": "ariaLabelledby()", "attr.data-state": "indeterminate() ? \"indeterminate\" : \"determinate\"" } }, ngImport: i0, template: `
25
+ <div
26
+ class="ui-progress-indicator h-full w-full flex-1 bg-primary transition-transform"
27
+ [style.transform]="indicatorTransform()"></div>
28
+ `, isInline: true, styles: [":host{display:block}:host[data-state=indeterminate] .ui-progress-indicator{animation:ui-progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}@keyframes ui-progress-indeterminate{0%{transform:translate(-100%)}to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){:host[data-state=indeterminate] .ui-progress-indicator{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ProgressComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'ui-progress', changeDetection: ChangeDetectionStrategy.OnPush, host: {
33
+ '[class]': 'classes()',
34
+ '[attr.role]': '"progressbar"',
35
+ '[attr.aria-valuemin]': '0',
36
+ '[attr.aria-valuemax]': 'max()',
37
+ '[attr.aria-valuenow]': 'indeterminate() ? null : clamped()',
38
+ '[attr.aria-label]': 'ariaLabel()',
39
+ '[attr.aria-labelledby]': 'ariaLabelledby()',
40
+ '[attr.data-state]': 'indeterminate() ? "indeterminate" : "determinate"',
41
+ }, template: `
42
+ <div
43
+ class="ui-progress-indicator h-full w-full flex-1 bg-primary transition-transform"
44
+ [style.transform]="indicatorTransform()"></div>
45
+ `, styles: [":host{display:block}:host[data-state=indeterminate] .ui-progress-indicator{animation:ui-progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}@keyframes ui-progress-indeterminate{0%{transform:translate(-100%)}to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){:host[data-state=indeterminate] .ui-progress-indicator{animation:none}}\n"] }]
46
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
47
+
48
+ /**
49
+ * Generated bundle index. Do not edit.
50
+ */
51
+
52
+ export { ProgressComponent };
53
+ //# sourceMappingURL=ojiepermana-angular-ui-component-progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-progress.mjs","sources":["../../../projects/angular/ui/component/progress/src/lib/progress.component.ts","../../../projects/angular/ui/component/progress/ojiepermana-angular-ui-component-progress.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\n@Component({\n selector: 'ui-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.role]': '\"progressbar\"',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuenow]': 'indeterminate() ? null : clamped()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[attr.data-state]': 'indeterminate() ? \"indeterminate\" : \"determinate\"',\n },\n template: `\n <div\n class=\"ui-progress-indicator h-full w-full flex-1 bg-primary transition-transform\"\n [style.transform]=\"indicatorTransform()\"></div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n :host[data-state='indeterminate'] .ui-progress-indicator {\n animation: ui-progress-indeterminate 1.5s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n }\n @keyframes ui-progress-indeterminate {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n :host[data-state='indeterminate'] .ui-progress-indicator {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class ProgressComponent {\n readonly value = input<number | null>(0);\n readonly max = input<number>(100);\n readonly indeterminate = input<boolean>(false);\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly class = input<string>('');\n\n protected readonly clamped = computed(() => {\n const v = this.value() ?? 0;\n return Math.max(0, Math.min(this.max(), v));\n });\n\n protected readonly indicatorTransform = computed(() => {\n if (this.indeterminate()) return 'translateX(-100%)';\n const pct = (this.clamped() / this.max()) * 100;\n return `translateX(-${100 - pct}%)`;\n });\n\n protected readonly classes = computed(() =>\n cn('relative h-2 w-full overflow-hidden rounded-full bg-secondary', this.class()),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, output, viewChild, signal, computed, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { MatRadioGroup, MatRadioButton } from '@angular/material/radio';
5
+ import { cn } from '@ojiepermana/angular/component/utils';
6
+
7
+ class RadioGroupComponent {
8
+ name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
9
+ orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
10
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
11
+ valueChange = output();
12
+ ref = viewChild.required('ref');
13
+ value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
14
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
15
+ classes = computed(() => cn('ui-radio-group grid gap-2', this.orientation() === 'horizontal' ? 'grid-flow-col auto-cols-max' : '', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
16
+ onChange = () => { };
17
+ onTouched = () => { };
18
+ handleChange(e) {
19
+ this.value.set(e.value);
20
+ this.onChange(e.value);
21
+ this.onTouched();
22
+ this.valueChange.emit(e.value);
23
+ }
24
+ focus() {
25
+ this.ref()._radios?.first?.focus();
26
+ }
27
+ writeValue(v) {
28
+ this.value.set(v ?? null);
29
+ }
30
+ registerOnChange(fn) {
31
+ this.onChange = fn;
32
+ }
33
+ registerOnTouched(fn) {
34
+ this.onTouched = fn;
35
+ }
36
+ setDisabledState(d) {
37
+ this.disabled.set(d);
38
+ }
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.14", type: RadioGroupComponent, isStandalone: true, selector: "ui-radio-group", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroupComponent), multi: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, isSignal: true }], ngImport: i0, template: `
41
+ <mat-radio-group
42
+ #ref
43
+ [class]="classes()"
44
+ [value]="value()"
45
+ [disabled]="disabled()"
46
+ [name]="name()"
47
+ (change)="handleChange($event)">
48
+ <ng-content />
49
+ </mat-radio-group>
50
+ `, isInline: true, styles: [":host{display:block}:host ::ng-deep .mat-mdc-radio-button{--mdc-radio-state-layer-size: 1rem;--mdc-radio-selected-icon-color: hsl(var(--primary));--mdc-radio-selected-focus-icon-color: hsl(var(--primary));--mdc-radio-selected-hover-icon-color: hsl(var(--primary));--mdc-radio-selected-pressed-icon-color: hsl(var(--primary));--mdc-radio-unselected-icon-color: hsl(var(--input));--mdc-radio-unselected-focus-icon-color: hsl(var(--input));--mdc-radio-unselected-hover-icon-color: hsl(var(--input));--mdc-radio-unselected-pressed-icon-color: hsl(var(--input));--mat-radio-ripple-color: transparent;--mat-radio-checked-ripple-color: transparent}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background:before,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-ripple,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-focus-indicator,:host ::ng-deep .mat-mdc-radio-button .mat-ripple{display:none}:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-touch-target{display:none}:host ::ng-deep .mat-mdc-radio-button .mdc-radio{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__native-control{width:1rem;height:1rem;top:0;left:0}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background{width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-radio-button .mdc-label{padding:0;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RadioGroupComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'ui-radio-group', imports: [MatRadioGroup], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroupComponent), multi: true }], template: `
55
+ <mat-radio-group
56
+ #ref
57
+ [class]="classes()"
58
+ [value]="value()"
59
+ [disabled]="disabled()"
60
+ [name]="name()"
61
+ (change)="handleChange($event)">
62
+ <ng-content />
63
+ </mat-radio-group>
64
+ `, styles: [":host{display:block}:host ::ng-deep .mat-mdc-radio-button{--mdc-radio-state-layer-size: 1rem;--mdc-radio-selected-icon-color: hsl(var(--primary));--mdc-radio-selected-focus-icon-color: hsl(var(--primary));--mdc-radio-selected-hover-icon-color: hsl(var(--primary));--mdc-radio-selected-pressed-icon-color: hsl(var(--primary));--mdc-radio-unselected-icon-color: hsl(var(--input));--mdc-radio-unselected-focus-icon-color: hsl(var(--input));--mdc-radio-unselected-hover-icon-color: hsl(var(--input));--mdc-radio-unselected-pressed-icon-color: hsl(var(--input));--mat-radio-ripple-color: transparent;--mat-radio-checked-ripple-color: transparent}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background:before,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-ripple,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-focus-indicator,:host ::ng-deep .mat-mdc-radio-button .mat-ripple{display:none}:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-touch-target{display:none}:host ::ng-deep .mat-mdc-radio-button .mdc-radio{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__native-control{width:1rem;height:1rem;top:0;left:0}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background{width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-radio-button .mdc-label{padding:0;cursor:pointer}\n"] }]
65
+ }], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], ref: [{ type: i0.ViewChild, args: ['ref', { isSignal: true }] }] } });
66
+ class RadioComponent {
67
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
68
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
69
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
70
+ classes = computed(() => cn('ui-radio', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: RadioComponent, isStandalone: true, selector: "ui-radio", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
73
+ <mat-radio-button disableRipple [class]="classes()" [value]="value()" [disabled]="disabled()">
74
+ <ng-content />
75
+ </mat-radio-button>
76
+ `, isInline: true, styles: [":host{display:block}:host ::ng-deep .mat-mdc-radio-button{--mdc-radio-state-layer-size: 1rem;--mdc-radio-selected-icon-color: hsl(var(--primary));--mdc-radio-selected-focus-icon-color: hsl(var(--primary));--mdc-radio-selected-hover-icon-color: hsl(var(--primary));--mdc-radio-selected-pressed-icon-color: hsl(var(--primary));--mdc-radio-unselected-icon-color: hsl(var(--input));--mdc-radio-unselected-focus-icon-color: hsl(var(--input));--mdc-radio-unselected-hover-icon-color: hsl(var(--input));--mdc-radio-unselected-pressed-icon-color: hsl(var(--input));--mat-radio-ripple-color: transparent;--mat-radio-checked-ripple-color: transparent}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background:before,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-ripple,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-focus-indicator,:host ::ng-deep .mat-mdc-radio-button .mat-ripple{display:none}:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-touch-target{display:none}:host ::ng-deep .mat-mdc-radio-button .mdc-radio{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__native-control{width:1rem;height:1rem;top:0;left:0}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background{width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-radio-button .mdc-label{padding:0;cursor:pointer}\n"], dependencies: [{ kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RadioComponent, decorators: [{
79
+ type: Component,
80
+ args: [{ selector: 'ui-radio', imports: [MatRadioButton], changeDetection: ChangeDetectionStrategy.OnPush, template: `
81
+ <mat-radio-button disableRipple [class]="classes()" [value]="value()" [disabled]="disabled()">
82
+ <ng-content />
83
+ </mat-radio-button>
84
+ `, styles: [":host{display:block}:host ::ng-deep .mat-mdc-radio-button{--mdc-radio-state-layer-size: 1rem;--mdc-radio-selected-icon-color: hsl(var(--primary));--mdc-radio-selected-focus-icon-color: hsl(var(--primary));--mdc-radio-selected-hover-icon-color: hsl(var(--primary));--mdc-radio-selected-pressed-icon-color: hsl(var(--primary));--mdc-radio-unselected-icon-color: hsl(var(--input));--mdc-radio-unselected-focus-icon-color: hsl(var(--input));--mdc-radio-unselected-hover-icon-color: hsl(var(--input));--mdc-radio-unselected-pressed-icon-color: hsl(var(--input));--mat-radio-ripple-color: transparent;--mat-radio-checked-ripple-color: transparent}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background:before,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-ripple,:host ::ng-deep .mat-mdc-radio-button .mat-mdc-focus-indicator,:host ::ng-deep .mat-mdc-radio-button .mat-ripple{display:none}:host ::ng-deep .mat-mdc-radio-button .mat-mdc-radio-touch-target{display:none}:host ::ng-deep .mat-mdc-radio-button .mdc-radio{padding:0;margin:0;flex:0 0 1rem;width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__native-control{width:1rem;height:1rem;top:0;left:0}:host ::ng-deep .mat-mdc-radio-button .mdc-radio__background{width:1rem;height:1rem}:host ::ng-deep .mat-mdc-radio-button .mdc-form-field{gap:.5rem;color:hsl(var(--foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}:host ::ng-deep .mat-mdc-radio-button .mdc-label{padding:0;cursor:pointer}\n"] }]
85
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
86
+
87
+ /**
88
+ * Generated bundle index. Do not edit.
89
+ */
90
+
91
+ export { RadioComponent, RadioGroupComponent };
92
+ //# sourceMappingURL=ojiepermana-angular-ui-component-radio.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-radio.mjs","sources":["../../../projects/angular/ui/component/radio/src/lib/radio.component.ts","../../../projects/angular/ui/component/radio/ojiepermana-angular-ui-component-radio.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioButton, MatRadioChange, MatRadioGroup } from '@angular/material/radio';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\n@Component({\n selector: 'ui-radio-group',\n imports: [MatRadioGroup],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroupComponent), multi: true }],\n template: `\n <mat-radio-group\n #ref\n [class]=\"classes()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [name]=\"name()\"\n (change)=\"handleChange($event)\">\n <ng-content />\n </mat-radio-group>\n `,\n styleUrl: './radio.component.css',\n})\nexport class RadioGroupComponent implements ControlValueAccessor {\n readonly name = input<string>('');\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n readonly class = input<string>('');\n\n readonly valueChange = output<string>();\n\n private readonly ref = viewChild.required<MatRadioGroup>('ref');\n\n protected readonly value = signal<string | null>(null);\n protected readonly disabled = signal<boolean>(false);\n protected readonly classes = computed(() =>\n cn(\n 'ui-radio-group grid gap-2',\n this.orientation() === 'horizontal' ? 'grid-flow-col auto-cols-max' : '',\n this.class(),\n ),\n );\n\n private onChange: (v: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected handleChange(e: MatRadioChange): void {\n this.value.set(e.value);\n this.onChange(e.value);\n this.onTouched();\n this.valueChange.emit(e.value);\n }\n\n focus(): void {\n this.ref()._radios?.first?.focus();\n }\n\n writeValue(v: string | null): void {\n this.value.set(v ?? null);\n }\n registerOnChange(fn: (v: string | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(d: boolean): void {\n this.disabled.set(d);\n }\n}\n\n@Component({\n selector: 'ui-radio',\n imports: [MatRadioButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <mat-radio-button disableRipple [class]=\"classes()\" [value]=\"value()\" [disabled]=\"disabled()\">\n <ng-content />\n </mat-radio-button>\n `,\n styleUrl: './radio.component.css',\n})\nexport class RadioComponent {\n readonly value = input.required<string>();\n readonly disabled = input<boolean>(false);\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => cn('ui-radio', this.class()));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, numberAttribute, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils';
4
+
5
+ /**
6
+ * Lightweight scroll area using native scrollbars styled via CSS.
7
+ * Fully accessible — real scrolling, keyboard, wheel, momentum.
8
+ */
9
+ class ScrollAreaComponent {
10
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
11
+ viewportClass = input('', ...(ngDevMode ? [{ debugName: "viewportClass" }] : /* istanbul ignore next */ []));
12
+ viewportAriaLabel = input(null, ...(ngDevMode ? [{ debugName: "viewportAriaLabel" }] : /* istanbul ignore next */ []));
13
+ viewportTabIndex = input(0, { ...(ngDevMode ? { debugName: "viewportTabIndex" } : /* istanbul ignore next */ {}), transform: numberAttribute });
14
+ classes = computed(() => cn('relative overflow-hidden', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
15
+ viewportRole = computed(() => (this.viewportAriaLabel() ? 'region' : null), ...(ngDevMode ? [{ debugName: "viewportRole" }] : /* istanbul ignore next */ []));
16
+ viewportClasses = computed(() => cn('ui-scroll-area-viewport h-full w-full rounded-[inherit]', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring', this.viewportClass()), ...(ngDevMode ? [{ debugName: "viewportClasses" }] : /* istanbul ignore next */ []));
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: ScrollAreaComponent, isStandalone: true, selector: "ui-scroll-area", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, viewportClass: { classPropertyName: "viewportClass", publicName: "viewportClass", isSignal: true, isRequired: false, transformFunction: null }, viewportAriaLabel: { classPropertyName: "viewportAriaLabel", publicName: "viewportAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, viewportTabIndex: { classPropertyName: "viewportTabIndex", publicName: "viewportTabIndex", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
19
+ <div
20
+ [class]="viewportClasses()"
21
+ [attr.aria-label]="viewportAriaLabel()"
22
+ [attr.role]="viewportRole()"
23
+ [attr.tabindex]="viewportTabIndex()">
24
+ <ng-content />
25
+ </div>
26
+ `, isInline: true, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar{width:10px;height:10px}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--border)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--radius-lg)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollAreaComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'ui-scroll-area', changeDetection: ChangeDetectionStrategy.OnPush, host: {
31
+ '[class]': 'classes()',
32
+ }, template: `
33
+ <div
34
+ [class]="viewportClasses()"
35
+ [attr.aria-label]="viewportAriaLabel()"
36
+ [attr.role]="viewportRole()"
37
+ [attr.tabindex]="viewportTabIndex()">
38
+ <ng-content />
39
+ </div>
40
+ `, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar{width:10px;height:10px}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--border)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--radius-lg)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"] }]
41
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], viewportClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportClass", required: false }] }], viewportAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportAriaLabel", required: false }] }], viewportTabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportTabIndex", required: false }] }] } });
42
+
43
+ /**
44
+ * Generated bundle index. Do not edit.
45
+ */
46
+
47
+ export { ScrollAreaComponent };
48
+ //# sourceMappingURL=ojiepermana-angular-ui-component-scroll-area.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-scroll-area.mjs","sources":["../../../projects/angular/ui/component/scroll-area/src/lib/scroll-area.component.ts","../../../projects/angular/ui/component/scroll-area/ojiepermana-angular-ui-component-scroll-area.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from '@angular/core';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\n/**\n * Lightweight scroll area using native scrollbars styled via CSS.\n * Fully accessible — real scrolling, keyboard, wheel, momentum.\n */\n@Component({\n selector: 'ui-scroll-area',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n },\n template: `\n <div\n [class]=\"viewportClasses()\"\n [attr.aria-label]=\"viewportAriaLabel()\"\n [attr.role]=\"viewportRole()\"\n [attr.tabindex]=\"viewportTabIndex()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n overflow: hidden;\n position: relative;\n }\n .ui-scroll-area-viewport {\n overflow: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-track {\n background: var(--tw-scrollbar-track, transparent);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: var(--tw-scrollbar-thumb, hsl(var(--border)));\n border: var(--border-width) solid transparent;\n background-clip: padding-box;\n border-radius: var(--radius-lg);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover {\n background: var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));\n background-clip: padding-box;\n }\n @media (forced-colors: active) {\n .ui-scroll-area-viewport {\n scrollbar-width: auto;\n scrollbar-color: auto;\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: CanvasText;\n border-color: transparent;\n }\n }\n `,\n ],\n})\nexport class ScrollAreaComponent {\n readonly class = input<string>('');\n readonly viewportClass = input<string>('');\n readonly viewportAriaLabel = input<string | null>(null);\n readonly viewportTabIndex = input(0, { transform: numberAttribute });\n protected readonly classes = computed(() => cn('relative overflow-hidden', this.class()));\n protected readonly viewportRole = computed(() => (this.viewportAriaLabel() ? 'region' : null));\n protected readonly viewportClasses = computed(() =>\n cn(\n 'ui-scroll-area-viewport h-full w-full rounded-[inherit]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n this.viewportClass(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAGA;;;AAGG;MA0DU,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,oFAAC;AACjC,IAAA,iBAAiB,GAAG,KAAK,CAAgB,IAAI,wFAAC;IAC9C,gBAAgB,GAAG,KAAK,CAAC,CAAC,wFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,8EAAC;IACtE,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,eAAe,GAAG,QAAQ,CAAC,MAC5C,EAAE,CACA,yDAAyD,EACzD,kGAAkG,EAClG,IAAI,CAAC,aAAa,EAAE,CACrB,sFACF;wGAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnDpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+8BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA2CU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzD/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,WAAW;qBACvB,EAAA,QAAA,EACS;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+8BAAA,CAAA,EAAA;;;ACrBH;;AAEG;;;;"}
@@ -0,0 +1,131 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, output, viewChild, signal, computed, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { MatFormField } from '@angular/material/form-field';
5
+ import { MatSelect } from '@angular/material/select';
6
+ import { cn } from '@ojiepermana/angular/component/utils';
7
+ import { MatOption } from '@angular/material/core';
8
+
9
+ class SelectComponent {
10
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
11
+ multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
12
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
13
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
14
+ ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
15
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
16
+ valueChange = output();
17
+ openedChange = output();
18
+ ref = viewChild.required('ref');
19
+ value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
20
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
21
+ classes = computed(() => cn('ui-select-field w-full', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
22
+ onChange = () => { };
23
+ onTouched = () => { };
24
+ handleChange(e) {
25
+ this.value.set(e.value);
26
+ this.onChange(e.value);
27
+ this.onTouched();
28
+ this.valueChange.emit(e.value);
29
+ }
30
+ open() {
31
+ this.ref().open();
32
+ }
33
+ close() {
34
+ this.ref().close();
35
+ }
36
+ focus() {
37
+ this.ref().focus();
38
+ }
39
+ writeValue(v) {
40
+ this.value.set(v);
41
+ }
42
+ registerOnChange(fn) {
43
+ this.onChange = fn;
44
+ }
45
+ registerOnTouched(fn) {
46
+ this.onTouched = fn;
47
+ }
48
+ setDisabledState(d) {
49
+ this.disabled.set(d);
50
+ }
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.14", type: SelectComponent, isStandalone: true, selector: "ui-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", openedChange: "openedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectComponent), multi: true }], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, isSignal: true }], ngImport: i0, template: `
53
+ <mat-form-field [class]="classes()" subscriptSizing="dynamic">
54
+ <mat-select
55
+ #ref
56
+ disableRipple
57
+ panelClass="ui-select-panel"
58
+ [value]="value()"
59
+ [disabled]="disabled()"
60
+ [multiple]="multiple()"
61
+ [placeholder]="placeholder()"
62
+ [required]="required()"
63
+ [attr.aria-label]="ariaLabel()"
64
+ [attr.aria-labelledby]="ariaLabelledby()"
65
+ (selectionChange)="handleChange($event)"
66
+ (openedChange)="openedChange.emit($event)">
67
+ <ng-content />
68
+ </mat-select>
69
+ </mat-form-field>
70
+ `, isInline: true, styles: [":host{display:block;width:100%}:host ::ng-deep .mat-mdc-form-field{--mat-form-field-container-height: 2.25rem;--mat-form-field-container-vertical-padding: 0;--mat-form-field-filled-with-label-container-padding-top: 0;--mat-form-field-filled-with-label-container-padding-bottom: 0;--mdc-outlined-text-field-container-shape: calc(var(--radius) - .125rem);--mdc-outlined-text-field-outline-color: hsl(var(--input));--mdc-outlined-text-field-hover-outline-color: hsl(var(--input));--mdc-outlined-text-field-focus-outline-color: hsl(var(--ring));--mdc-outlined-text-field-input-text-color: hsl(var(--foreground));--mdc-outlined-text-field-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-hover-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-focus-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-disabled-outline-color: hsl(var(--input) / .5);--mdc-outlined-text-field-disabled-input-text-color: hsl(var(--muted-foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height);width:100%}:host ::ng-deep .mat-mdc-text-field-wrapper{background:transparent;padding:0 .75rem}:host ::ng-deep .mat-mdc-form-field-infix{min-height:2.25rem;padding:.5rem 0;width:auto}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label,:host ::ng-deep .mat-mdc-floating-label,:host ::ng-deep .mdc-notched-outline__notch .mdc-floating-label{display:none}:host ::ng-deep .mdc-notched-outline__notch{padding:0;border-left:none;border-right:none}:host ::ng-deep .mat-mdc-select-value{color:hsl(var(--foreground))}:host ::ng-deep .mat-mdc-select-placeholder{color:hsl(var(--muted-foreground))}:host ::ng-deep .mat-mdc-select-arrow{color:hsl(var(--muted-foreground))}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SelectComponent, decorators: [{
73
+ type: Component,
74
+ args: [{ selector: 'ui-select', imports: [MatFormField, MatSelect], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectComponent), multi: true }], template: `
75
+ <mat-form-field [class]="classes()" subscriptSizing="dynamic">
76
+ <mat-select
77
+ #ref
78
+ disableRipple
79
+ panelClass="ui-select-panel"
80
+ [value]="value()"
81
+ [disabled]="disabled()"
82
+ [multiple]="multiple()"
83
+ [placeholder]="placeholder()"
84
+ [required]="required()"
85
+ [attr.aria-label]="ariaLabel()"
86
+ [attr.aria-labelledby]="ariaLabelledby()"
87
+ (selectionChange)="handleChange($event)"
88
+ (openedChange)="openedChange.emit($event)">
89
+ <ng-content />
90
+ </mat-select>
91
+ </mat-form-field>
92
+ `, styles: [":host{display:block;width:100%}:host ::ng-deep .mat-mdc-form-field{--mat-form-field-container-height: 2.25rem;--mat-form-field-container-vertical-padding: 0;--mat-form-field-filled-with-label-container-padding-top: 0;--mat-form-field-filled-with-label-container-padding-bottom: 0;--mdc-outlined-text-field-container-shape: calc(var(--radius) - .125rem);--mdc-outlined-text-field-outline-color: hsl(var(--input));--mdc-outlined-text-field-hover-outline-color: hsl(var(--input));--mdc-outlined-text-field-focus-outline-color: hsl(var(--ring));--mdc-outlined-text-field-input-text-color: hsl(var(--foreground));--mdc-outlined-text-field-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-hover-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-focus-label-text-color: hsl(var(--muted-foreground));--mdc-outlined-text-field-disabled-outline-color: hsl(var(--input) / .5);--mdc-outlined-text-field-disabled-input-text-color: hsl(var(--muted-foreground));font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height);width:100%}:host ::ng-deep .mat-mdc-text-field-wrapper{background:transparent;padding:0 .75rem}:host ::ng-deep .mat-mdc-form-field-infix{min-height:2.25rem;padding:.5rem 0;width:auto}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label,:host ::ng-deep .mat-mdc-floating-label,:host ::ng-deep .mdc-notched-outline__notch .mdc-floating-label{display:none}:host ::ng-deep .mdc-notched-outline__notch{padding:0;border-left:none;border-right:none}:host ::ng-deep .mat-mdc-select-value{color:hsl(var(--foreground))}:host ::ng-deep .mat-mdc-select-placeholder{color:hsl(var(--muted-foreground))}:host ::ng-deep .mat-mdc-select-arrow{color:hsl(var(--muted-foreground))}\n"] }]
93
+ }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }], ref: [{ type: i0.ViewChild, args: ['ref', { isSignal: true }] }] } });
94
+
95
+ /**
96
+ * Option for `<ui-select>`. Wraps `mat-option` so the underlying `mat-select`
97
+ * can still discover it via `@ContentChildren(MatOption, { descendants: true })`.
98
+ */
99
+ class OptionComponent {
100
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
101
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
102
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
103
+ classes = computed(() => cn('contents', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
104
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: OptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
105
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: OptionComponent, isStandalone: true, selector: "ui-option", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
106
+ <mat-option [value]="value()" [disabled]="disabled()">
107
+ <ng-content />
108
+ </mat-option>
109
+ `, isInline: true, dependencies: [{ kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: OptionComponent, decorators: [{
112
+ type: Component,
113
+ args: [{
114
+ selector: 'ui-option',
115
+ imports: [MatOption],
116
+ changeDetection: ChangeDetectionStrategy.OnPush,
117
+ host: { '[class]': 'classes()' },
118
+ template: `
119
+ <mat-option [value]="value()" [disabled]="disabled()">
120
+ <ng-content />
121
+ </mat-option>
122
+ `,
123
+ }]
124
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
125
+
126
+ /**
127
+ * Generated bundle index. Do not edit.
128
+ */
129
+
130
+ export { OptionComponent, SelectComponent };
131
+ //# sourceMappingURL=ojiepermana-angular-ui-component-select.mjs.map