@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,139 @@
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 TableComponent {
6
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
7
+ classes = computed(() => cn('w-full caption-bottom text-sm', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableComponent, isStandalone: true, selector: "ui-table", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "relative block w-full overflow-x-auto" }, ngImport: i0, template: `
10
+ <table [class]="classes()">
11
+ <ng-content />
12
+ </table>
13
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableComponent, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: 'ui-table',
19
+ changeDetection: ChangeDetectionStrategy.OnPush,
20
+ host: { class: 'relative block w-full overflow-x-auto' },
21
+ template: `
22
+ <table [class]="classes()">
23
+ <ng-content />
24
+ </table>
25
+ `,
26
+ }]
27
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
28
+ class TableHeaderComponent {
29
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
30
+ classes = computed(() => cn('[&_tr]:border-b [&_tr]:border-border', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableHeaderComponent, isStandalone: true, selector: "thead[ui-table-header]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableHeaderComponent, decorators: [{
35
+ type: Component,
36
+ args: [{
37
+ selector: 'thead[ui-table-header]',
38
+ changeDetection: ChangeDetectionStrategy.OnPush,
39
+ host: { '[class]': 'classes()' },
40
+ template: `<ng-content />`,
41
+ }]
42
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
43
+ class TableBodyComponent {
44
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
45
+ classes = computed(() => cn('[&_tr:last-child]:border-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
46
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableBodyComponent, isStandalone: true, selector: "tbody[ui-table-body]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableBodyComponent, decorators: [{
50
+ type: Component,
51
+ args: [{
52
+ selector: 'tbody[ui-table-body]',
53
+ changeDetection: ChangeDetectionStrategy.OnPush,
54
+ host: { '[class]': 'classes()' },
55
+ template: `<ng-content />`,
56
+ }]
57
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
58
+ class TableFooterComponent {
59
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
60
+ classes = computed(() => cn('border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
61
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
62
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableFooterComponent, isStandalone: true, selector: "tfoot[ui-table-footer]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableFooterComponent, decorators: [{
65
+ type: Component,
66
+ args: [{
67
+ selector: 'tfoot[ui-table-footer]',
68
+ changeDetection: ChangeDetectionStrategy.OnPush,
69
+ host: { '[class]': 'classes()' },
70
+ template: `<ng-content />`,
71
+ }]
72
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
73
+ class TableRowComponent {
74
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
75
+ classes = computed(() => cn('border-b border-border transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableRowComponent, isStandalone: true, selector: "tr[ui-table-row]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableRowComponent, decorators: [{
80
+ type: Component,
81
+ args: [{
82
+ selector: 'tr[ui-table-row]',
83
+ changeDetection: ChangeDetectionStrategy.OnPush,
84
+ host: { '[class]': 'classes()' },
85
+ template: `<ng-content />`,
86
+ }]
87
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
88
+ class TableHeadComponent {
89
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
90
+ classes = computed(() => cn('h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-muted-foreground', '[&:has([role=checkbox])]:pr-0', '[&>[role=checkbox]]:translate-y-[2px]', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableHeadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
92
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableHeadComponent, isStandalone: true, selector: "th[ui-table-head]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableHeadComponent, decorators: [{
95
+ type: Component,
96
+ args: [{
97
+ selector: 'th[ui-table-head]',
98
+ changeDetection: ChangeDetectionStrategy.OnPush,
99
+ host: { '[class]': 'classes()' },
100
+ template: `<ng-content />`,
101
+ }]
102
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
103
+ class TableCellComponent {
104
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
105
+ classes = computed(() => cn('whitespace-nowrap p-2 align-middle', '[&:has([role=checkbox])]:pr-0', '[&>[role=checkbox]]:translate-y-[2px]', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
107
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableCellComponent, isStandalone: true, selector: "td[ui-table-cell]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
108
+ }
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableCellComponent, decorators: [{
110
+ type: Component,
111
+ args: [{
112
+ selector: 'td[ui-table-cell]',
113
+ changeDetection: ChangeDetectionStrategy.OnPush,
114
+ host: { '[class]': 'classes()' },
115
+ template: `<ng-content />`,
116
+ }]
117
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
118
+ class TableCaptionComponent {
119
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
120
+ classes = computed(() => cn('mt-4 text-sm text-muted-foreground', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableCaptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TableCaptionComponent, isStandalone: true, selector: "caption[ui-table-caption]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TableCaptionComponent, decorators: [{
125
+ type: Component,
126
+ args: [{
127
+ selector: 'caption[ui-table-caption]',
128
+ changeDetection: ChangeDetectionStrategy.OnPush,
129
+ host: { '[class]': 'classes()' },
130
+ template: `<ng-content />`,
131
+ }]
132
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
133
+
134
+ /**
135
+ * Generated bundle index. Do not edit.
136
+ */
137
+
138
+ export { TableBodyComponent, TableCaptionComponent, TableCellComponent, TableComponent, TableFooterComponent, TableHeadComponent, TableHeaderComponent, TableRowComponent };
139
+ //# sourceMappingURL=ojiepermana-angular-ui-component-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-table.mjs","sources":["../../../projects/angular/ui/component/table/src/lib/table.component.ts","../../../projects/angular/ui/component/table/ojiepermana-angular-ui-component-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\n@Component({\n selector: 'ui-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'relative block w-full overflow-x-auto' },\n template: `\n <table [class]=\"classes()\">\n <ng-content />\n </table>\n `,\n})\nexport class TableComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() => cn('w-full caption-bottom text-sm', this.class()));\n}\n\n@Component({\n selector: 'thead[ui-table-header]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableHeaderComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() => cn('[&_tr]:border-b [&_tr]:border-border', this.class()));\n}\n\n@Component({\n selector: 'tbody[ui-table-body]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableBodyComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() => cn('[&_tr:last-child]:border-0', this.class()));\n}\n\n@Component({\n selector: 'tfoot[ui-table-footer]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableFooterComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() =>\n cn('border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0', this.class()),\n );\n}\n\n@Component({\n selector: 'tr[ui-table-row]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableRowComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() =>\n cn('border-b border-border transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', this.class()),\n );\n}\n\n@Component({\n selector: 'th[ui-table-head]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableHeadComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() =>\n cn(\n 'h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-muted-foreground',\n '[&:has([role=checkbox])]:pr-0',\n '[&>[role=checkbox]]:translate-y-[2px]',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'td[ui-table-cell]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableCellComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() =>\n cn(\n 'whitespace-nowrap p-2 align-middle',\n '[&:has([role=checkbox])]:pr-0',\n '[&>[role=checkbox]]:translate-y-[2px]',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'caption[ui-table-caption]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: `<ng-content />`,\n})\nexport class TableCaptionComponent {\n readonly class = input<string>('');\n protected readonly classes = computed(() => cn('mt-4 text-sm text-muted-foreground', 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,252 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, model, input, computed, forwardRef, ChangeDetectionStrategy, Component, inject, ElementRef } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils';
4
+
5
+ let nextTabsId = 0;
6
+ /**
7
+ * Shared state for a tabs group. Children read the active value and register
8
+ * themselves so the group can drive roving-tabindex keyboard navigation.
9
+ */
10
+ class TabsContextBase {
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsContextBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: TabsContextBase, isStandalone: true, ngImport: i0 });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsContextBase, decorators: [{
15
+ type: Directive
16
+ }] });
17
+ class TabsListContextBase {
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsListContextBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
19
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: TabsListContextBase, isStandalone: true, ngImport: i0 });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsListContextBase, decorators: [{
22
+ type: Directive
23
+ }] });
24
+ class TabsComponent extends TabsContextBase {
25
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
26
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
27
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
28
+ idPrefix = `ui-tabs-${nextTabsId++}`;
29
+ triggers = new Map();
30
+ classes = computed(() => cn(this.orientation() === 'vertical' ? 'flex items-start gap-4' : 'block', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
31
+ register(element, value, disabled) {
32
+ this.triggers.set(element, { element, value, disabled });
33
+ if (this.value() == null && !disabled()) {
34
+ this.value.set(value());
35
+ }
36
+ }
37
+ unregister(element) {
38
+ this.triggers.delete(element);
39
+ }
40
+ activate(value, focus = false) {
41
+ const trigger = this.triggerForValue(value);
42
+ if (!trigger || trigger.disabled())
43
+ return;
44
+ this.value.set(value);
45
+ if (focus) {
46
+ trigger.element.focus();
47
+ }
48
+ }
49
+ focusNext(from, offset) {
50
+ const enabledTriggers = this.enabledTriggers();
51
+ const currentIndex = enabledTriggers.findIndex((trigger) => trigger.element === from);
52
+ if (currentIndex < 0 || enabledTriggers.length === 0)
53
+ return;
54
+ const nextTrigger = enabledTriggers[(currentIndex + offset + enabledTriggers.length) % enabledTriggers.length];
55
+ this.activate(nextTrigger.value(), true);
56
+ }
57
+ focusFirst() {
58
+ const firstTrigger = this.enabledTriggers()[0];
59
+ if (firstTrigger)
60
+ this.activate(firstTrigger.value(), true);
61
+ }
62
+ focusLast() {
63
+ const enabledTriggers = this.enabledTriggers();
64
+ const lastTrigger = enabledTriggers[enabledTriggers.length - 1];
65
+ if (lastTrigger)
66
+ this.activate(lastTrigger.value(), true);
67
+ }
68
+ triggerId(value) {
69
+ return `${this.idPrefix}-trigger-${this.normalizeValue(value)}`;
70
+ }
71
+ contentId(value) {
72
+ return `${this.idPrefix}-content-${this.normalizeValue(value)}`;
73
+ }
74
+ enabledTriggers() {
75
+ return [...this.triggers.values()].filter((trigger) => !trigger.disabled());
76
+ }
77
+ triggerForValue(value) {
78
+ return [...this.triggers.values()].find((trigger) => trigger.value() === value);
79
+ }
80
+ normalizeValue(value) {
81
+ const normalized = value
82
+ .toLowerCase()
83
+ .replace(/[^a-z0-9_-]+/g, '-')
84
+ .replace(/^-+|-+$/g, '');
85
+ return normalized || 'tab';
86
+ }
87
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
88
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TabsComponent, isStandalone: true, selector: "ui-tabs", inputs: { value: { classPropertyName: "value", publicName: "value", 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: { value: "valueChange" }, host: { properties: { "class": "classes()", "attr.data-orientation": "orientation()" } }, providers: [{ provide: TabsContextBase, useExisting: forwardRef(() => TabsComponent) }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsComponent, decorators: [{
91
+ type: Component,
92
+ args: [{
93
+ selector: 'ui-tabs',
94
+ changeDetection: ChangeDetectionStrategy.OnPush,
95
+ providers: [{ provide: TabsContextBase, useExisting: forwardRef(() => TabsComponent) }],
96
+ host: {
97
+ '[class]': 'classes()',
98
+ '[attr.data-orientation]': 'orientation()',
99
+ },
100
+ template: `<ng-content />`,
101
+ }]
102
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
103
+ class TabsListComponent extends TabsListContextBase {
104
+ ctx = inject(TabsComponent);
105
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
106
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
107
+ classes = computed(() => cn(this.variantClasses(), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
108
+ listVariant() {
109
+ return this.variant();
110
+ }
111
+ variantClasses() {
112
+ if (this.variant() === 'line') {
113
+ return this.ctx.orientation() === 'vertical'
114
+ ? 'inline-flex flex-col items-stretch justify-start gap-1 border-e border-border bg-transparent p-0 pe-3 text-muted-foreground'
115
+ : 'inline-flex h-9 items-center justify-start gap-4 border-b border-border bg-transparent p-0 text-muted-foreground';
116
+ }
117
+ return this.ctx.orientation() === 'vertical'
118
+ ? 'inline-flex flex-col items-stretch justify-start rounded-md bg-muted p-1 text-muted-foreground'
119
+ : 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground';
120
+ }
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TabsListComponent, isStandalone: true, selector: "ui-tabs-list", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.role": "\"tablist\"", "attr.aria-orientation": "ctx.orientation()", "attr.data-variant": "variant()" } }, providers: [{ provide: TabsListContextBase, useExisting: forwardRef(() => TabsListComponent) }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsListComponent, decorators: [{
125
+ type: Component,
126
+ args: [{
127
+ selector: 'ui-tabs-list',
128
+ changeDetection: ChangeDetectionStrategy.OnPush,
129
+ providers: [{ provide: TabsListContextBase, useExisting: forwardRef(() => TabsListComponent) }],
130
+ host: {
131
+ '[class]': 'classes()',
132
+ '[attr.role]': '"tablist"',
133
+ '[attr.aria-orientation]': 'ctx.orientation()',
134
+ '[attr.data-variant]': 'variant()',
135
+ },
136
+ template: `<ng-content />`,
137
+ }]
138
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
139
+ class TabsTriggerComponent {
140
+ ctx = inject(TabsComponent);
141
+ list = inject(TabsListContextBase, { optional: true });
142
+ el = inject(ElementRef);
143
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
144
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
145
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
146
+ selected = computed(() => this.ctx.value() === this.value(), ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
147
+ triggerId = computed(() => this.ctx.triggerId(this.value()), ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
148
+ contentId = computed(() => this.ctx.contentId(this.value()), ...(ngDevMode ? [{ debugName: "contentId" }] : /* istanbul ignore next */ []));
149
+ classes = computed(() => cn('inline-flex items-center justify-center gap-1.5 whitespace-nowrap text-sm font-medium', 'ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', this.variantClasses(), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
150
+ ngOnInit() {
151
+ this.ctx.register(this.el.nativeElement, this.value, this.disabled);
152
+ }
153
+ ngOnDestroy() {
154
+ this.ctx.unregister(this.el.nativeElement);
155
+ }
156
+ onClick() {
157
+ if (this.disabled())
158
+ return;
159
+ this.ctx.activate(this.value());
160
+ }
161
+ onArrow(e, delta, axis) {
162
+ if (this.ctx.orientation() !== axis)
163
+ return;
164
+ e.preventDefault();
165
+ this.ctx.focusNext(this.el.nativeElement, delta);
166
+ }
167
+ onHome(e) {
168
+ e.preventDefault();
169
+ this.ctx.focusFirst();
170
+ }
171
+ onEnd(e) {
172
+ e.preventDefault();
173
+ this.ctx.focusLast();
174
+ }
175
+ variantClasses() {
176
+ const variant = this.list?.listVariant() ?? 'default';
177
+ if (variant === 'line') {
178
+ return this.ctx.orientation() === 'vertical'
179
+ ? 'w-full justify-start rounded-none border-e-2 border-transparent px-3 py-2 data-[state=active]:border-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none'
180
+ : 'rounded-none border-b-2 border-transparent px-2 py-2 data-[state=active]:border-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none';
181
+ }
182
+ return cn('rounded-sm px-3 py-1.5 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm', this.ctx.orientation() === 'vertical' && 'w-full justify-start');
183
+ }
184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TabsTriggerComponent, isStandalone: true, selector: "button[ui-tabs-trigger]", 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: { attributes: { "type": "button" }, listeners: { "click": "onClick()", "keydown.arrowRight": "onArrow($any($event), 1, \"horizontal\")", "keydown.arrowLeft": "onArrow($any($event), -1, \"horizontal\")", "keydown.arrowDown": "onArrow($any($event), 1, \"vertical\")", "keydown.arrowUp": "onArrow($any($event), -1, \"vertical\")", "keydown.home": "onHome($any($event))", "keydown.end": "onEnd($any($event))" }, properties: { "class": "classes()", "id": "triggerId()", "attr.role": "\"tab\"", "attr.aria-selected": "selected()", "attr.aria-controls": "contentId()", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.tabindex": "selected() ? 0 : -1", "attr.data-state": "selected() ? \"active\" : \"inactive\"", "disabled": "disabled() || null" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
186
+ }
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsTriggerComponent, decorators: [{
188
+ type: Component,
189
+ args: [{
190
+ selector: 'button[ui-tabs-trigger]',
191
+ changeDetection: ChangeDetectionStrategy.OnPush,
192
+ host: {
193
+ '[class]': 'classes()',
194
+ '[id]': 'triggerId()',
195
+ type: 'button',
196
+ '[attr.role]': '"tab"',
197
+ '[attr.aria-selected]': 'selected()',
198
+ '[attr.aria-controls]': 'contentId()',
199
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
200
+ '[attr.tabindex]': 'selected() ? 0 : -1',
201
+ '[attr.data-state]': 'selected() ? "active" : "inactive"',
202
+ '[disabled]': 'disabled() || null',
203
+ '(click)': 'onClick()',
204
+ '(keydown.arrowRight)': 'onArrow($any($event), 1, "horizontal")',
205
+ '(keydown.arrowLeft)': 'onArrow($any($event), -1, "horizontal")',
206
+ '(keydown.arrowDown)': 'onArrow($any($event), 1, "vertical")',
207
+ '(keydown.arrowUp)': 'onArrow($any($event), -1, "vertical")',
208
+ '(keydown.home)': 'onHome($any($event))',
209
+ '(keydown.end)': 'onEnd($any($event))',
210
+ },
211
+ template: `<ng-content />`,
212
+ }]
213
+ }], 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 }] }] } });
214
+ class TabsContentComponent {
215
+ ctx = inject(TabsComponent);
216
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
217
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
218
+ active = computed(() => this.ctx.value() === this.value(), ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
219
+ triggerId = computed(() => this.ctx.triggerId(this.value()), ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
220
+ contentId = computed(() => this.ctx.contentId(this.value()), ...(ngDevMode ? [{ debugName: "contentId" }] : /* istanbul ignore next */ []));
221
+ classes = computed(() => cn('mt-2 block ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
222
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
223
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: TabsContentComponent, isStandalone: true, selector: "ui-tabs-content", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0" }, properties: { "class": "classes()", "id": "contentId()", "attr.role": "\"tabpanel\"", "attr.aria-labelledby": "triggerId()", "attr.data-state": "active() ? \"active\" : \"inactive\"", "hidden": "!active()" } }, ngImport: i0, template: `@if (active()) {
224
+ <ng-content />
225
+ }`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
226
+ }
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TabsContentComponent, decorators: [{
228
+ type: Component,
229
+ args: [{
230
+ selector: 'ui-tabs-content',
231
+ changeDetection: ChangeDetectionStrategy.OnPush,
232
+ host: {
233
+ '[class]': 'classes()',
234
+ '[id]': 'contentId()',
235
+ '[attr.role]': '"tabpanel"',
236
+ '[attr.aria-labelledby]': 'triggerId()',
237
+ '[attr.data-state]': 'active() ? "active" : "inactive"',
238
+ '[hidden]': '!active()',
239
+ tabindex: '0',
240
+ },
241
+ template: `@if (active()) {
242
+ <ng-content />
243
+ }`,
244
+ }]
245
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
246
+
247
+ /**
248
+ * Generated bundle index. Do not edit.
249
+ */
250
+
251
+ export { TabsComponent, TabsContentComponent, TabsContextBase, TabsListComponent, TabsListContextBase, TabsTriggerComponent };
252
+ //# sourceMappingURL=ojiepermana-angular-ui-component-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-tabs.mjs","sources":["../../../projects/angular/ui/component/tabs/src/lib/tabs.component.ts","../../../projects/angular/ui/component/tabs/ojiepermana-angular-ui-component-tabs.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\nexport type TabsListVariant = 'default' | 'line';\n\ninterface TabsTriggerRegistration {\n readonly element: HTMLElement;\n readonly value: () => string;\n readonly disabled: () => boolean;\n}\n\nlet nextTabsId = 0;\n\n/**\n * Shared state for a tabs group. Children read the active value and register\n * themselves so the group can drive roving-tabindex keyboard navigation.\n */\n@Directive()\nexport abstract class TabsContextBase {\n abstract value: ReturnType<typeof model<string | null>>;\n abstract register(element: HTMLElement, value: () => string, disabled: () => boolean): void;\n abstract unregister(element: HTMLElement): void;\n abstract activate(value: string, focus?: boolean): void;\n abstract focusNext(from: HTMLElement, offset: number): void;\n abstract focusFirst(): void;\n abstract focusLast(): void;\n abstract triggerId(value: string): string;\n abstract contentId(value: string): string;\n}\n\n@Directive()\nexport abstract class TabsListContextBase {\n abstract listVariant(): TabsListVariant;\n}\n\n@Component({\n selector: 'ui-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TabsContextBase, useExisting: forwardRef(() => TabsComponent) }],\n host: {\n '[class]': 'classes()',\n '[attr.data-orientation]': 'orientation()',\n },\n template: `<ng-content />`,\n})\nexport class TabsComponent extends TabsContextBase {\n readonly value = model<string | null>(null);\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n readonly class = input<string>('');\n\n private readonly idPrefix = `ui-tabs-${nextTabsId++}`;\n private readonly triggers = new Map<HTMLElement, TabsTriggerRegistration>();\n\n protected readonly classes = computed(() =>\n cn(this.orientation() === 'vertical' ? 'flex items-start gap-4' : 'block', this.class()),\n );\n\n override register(element: HTMLElement, value: () => string, disabled: () => boolean): void {\n this.triggers.set(element, { element, value, disabled });\n\n if (this.value() == null && !disabled()) {\n this.value.set(value());\n }\n }\n\n override unregister(element: HTMLElement): void {\n this.triggers.delete(element);\n }\n\n override activate(value: string, focus = false): void {\n const trigger = this.triggerForValue(value);\n if (!trigger || trigger.disabled()) return;\n\n this.value.set(value);\n if (focus) {\n trigger.element.focus();\n }\n }\n\n override focusNext(from: HTMLElement, offset: number): void {\n const enabledTriggers = this.enabledTriggers();\n const currentIndex = enabledTriggers.findIndex((trigger) => trigger.element === from);\n if (currentIndex < 0 || enabledTriggers.length === 0) return;\n\n const nextTrigger = enabledTriggers[(currentIndex + offset + enabledTriggers.length) % enabledTriggers.length];\n this.activate(nextTrigger.value(), true);\n }\n\n override focusFirst(): void {\n const firstTrigger = this.enabledTriggers()[0];\n if (firstTrigger) this.activate(firstTrigger.value(), true);\n }\n\n override focusLast(): void {\n const enabledTriggers = this.enabledTriggers();\n const lastTrigger = enabledTriggers[enabledTriggers.length - 1];\n if (lastTrigger) this.activate(lastTrigger.value(), true);\n }\n\n override triggerId(value: string): string {\n return `${this.idPrefix}-trigger-${this.normalizeValue(value)}`;\n }\n\n override contentId(value: string): string {\n return `${this.idPrefix}-content-${this.normalizeValue(value)}`;\n }\n\n private enabledTriggers(): TabsTriggerRegistration[] {\n return [...this.triggers.values()].filter((trigger) => !trigger.disabled());\n }\n\n private triggerForValue(value: string): TabsTriggerRegistration | undefined {\n return [...this.triggers.values()].find((trigger) => trigger.value() === value);\n }\n\n private normalizeValue(value: string): string {\n const normalized = value\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\n return normalized || 'tab';\n }\n}\n\n@Component({\n selector: 'ui-tabs-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TabsListContextBase, useExisting: forwardRef(() => TabsListComponent) }],\n host: {\n '[class]': 'classes()',\n '[attr.role]': '\"tablist\"',\n '[attr.aria-orientation]': 'ctx.orientation()',\n '[attr.data-variant]': 'variant()',\n },\n template: `<ng-content />`,\n})\nexport class TabsListComponent extends TabsListContextBase {\n protected readonly ctx = inject(TabsComponent);\n readonly variant = input<TabsListVariant>('default');\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => cn(this.variantClasses(), this.class()));\n\n override listVariant(): TabsListVariant {\n return this.variant();\n }\n\n private variantClasses(): string {\n if (this.variant() === 'line') {\n return this.ctx.orientation() === 'vertical'\n ? 'inline-flex flex-col items-stretch justify-start gap-1 border-e border-border bg-transparent p-0 pe-3 text-muted-foreground'\n : 'inline-flex h-9 items-center justify-start gap-4 border-b border-border bg-transparent p-0 text-muted-foreground';\n }\n\n return this.ctx.orientation() === 'vertical'\n ? 'inline-flex flex-col items-stretch justify-start rounded-md bg-muted p-1 text-muted-foreground'\n : 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground';\n }\n}\n\n@Component({\n selector: 'button[ui-tabs-trigger]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[id]': 'triggerId()',\n type: 'button',\n '[attr.role]': '\"tab\"',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'contentId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.tabindex]': 'selected() ? 0 : -1',\n '[attr.data-state]': 'selected() ? \"active\" : \"inactive\"',\n '[disabled]': 'disabled() || null',\n '(click)': 'onClick()',\n '(keydown.arrowRight)': 'onArrow($any($event), 1, \"horizontal\")',\n '(keydown.arrowLeft)': 'onArrow($any($event), -1, \"horizontal\")',\n '(keydown.arrowDown)': 'onArrow($any($event), 1, \"vertical\")',\n '(keydown.arrowUp)': 'onArrow($any($event), -1, \"vertical\")',\n '(keydown.home)': 'onHome($any($event))',\n '(keydown.end)': 'onEnd($any($event))',\n },\n template: `<ng-content />`,\n})\nexport class TabsTriggerComponent {\n protected readonly ctx = inject(TabsComponent);\n private readonly list = inject(TabsListContextBase, { optional: true });\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly value = input.required<string>();\n readonly disabled = input<boolean>(false);\n readonly class = input<string>('');\n\n protected readonly selected = computed(() => this.ctx.value() === this.value());\n protected readonly triggerId = computed(() => this.ctx.triggerId(this.value()));\n protected readonly contentId = computed(() => this.ctx.contentId(this.value()));\n\n protected readonly classes = computed(() =>\n cn(\n 'inline-flex items-center justify-center gap-1.5 whitespace-nowrap text-sm font-medium',\n 'ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n this.variantClasses(),\n this.class(),\n ),\n );\n\n ngOnInit(): void {\n this.ctx.register(this.el.nativeElement, this.value, this.disabled);\n }\n\n ngOnDestroy(): void {\n this.ctx.unregister(this.el.nativeElement);\n }\n\n protected onClick(): void {\n if (this.disabled()) return;\n this.ctx.activate(this.value());\n }\n\n protected onArrow(e: KeyboardEvent, delta: number, axis: 'horizontal' | 'vertical'): void {\n if (this.ctx.orientation() !== axis) return;\n e.preventDefault();\n this.ctx.focusNext(this.el.nativeElement, delta);\n }\n\n protected onHome(e: KeyboardEvent): void {\n e.preventDefault();\n this.ctx.focusFirst();\n }\n\n protected onEnd(e: KeyboardEvent): void {\n e.preventDefault();\n this.ctx.focusLast();\n }\n\n private variantClasses(): string {\n const variant = this.list?.listVariant() ?? 'default';\n\n if (variant === 'line') {\n return this.ctx.orientation() === 'vertical'\n ? 'w-full justify-start rounded-none border-e-2 border-transparent px-3 py-2 data-[state=active]:border-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none'\n : 'rounded-none border-b-2 border-transparent px-2 py-2 data-[state=active]:border-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none';\n }\n\n return cn(\n 'rounded-sm px-3 py-1.5 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n this.ctx.orientation() === 'vertical' && 'w-full justify-start',\n );\n }\n}\n\n@Component({\n selector: 'ui-tabs-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[id]': 'contentId()',\n '[attr.role]': '\"tabpanel\"',\n '[attr.aria-labelledby]': 'triggerId()',\n '[attr.data-state]': 'active() ? \"active\" : \"inactive\"',\n '[hidden]': '!active()',\n tabindex: '0',\n },\n template: `@if (active()) {\n <ng-content />\n }`,\n})\nexport class TabsContentComponent {\n private readonly ctx = inject(TabsComponent);\n readonly value = input.required<string>();\n readonly class = input<string>('');\n protected readonly active = computed(() => this.ctx.value() === this.value());\n protected readonly triggerId = computed(() => this.ctx.triggerId(this.value()));\n protected readonly contentId = computed(() => this.ctx.contentId(this.value()));\n protected readonly classes = computed(() =>\n cn(\n 'mt-2 block ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n this.class(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAqBA,IAAI,UAAU,GAAG,CAAC;AAElB;;;AAGG;MAEmB,eAAe,CAAA;wGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;;MAcqB,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC;;AAeK,MAAO,aAAc,SAAQ,eAAe,CAAA;AACvC,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,4EAAC;AAClC,IAAA,WAAW,GAAG,KAAK,CAA4B,YAAY,kFAAC;AAC5D,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEjB,IAAA,QAAQ,GAAG,CAAA,QAAA,EAAW,UAAU,EAAE,EAAE;AACpC,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAwC;AAExD,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,GAAG,wBAAwB,GAAG,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,8EACzF;AAEQ,IAAA,QAAQ,CAAC,OAAoB,EAAE,KAAmB,EAAE,QAAuB,EAAA;AAClF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAExD,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACzB;IACF;AAES,IAAA,UAAU,CAAC,OAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B;AAES,IAAA,QAAQ,CAAC,KAAa,EAAE,KAAK,GAAG,KAAK,EAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;YAAE;AAEpC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;QACzB;IACF;IAES,SAAS,CAAC,IAAiB,EAAE,MAAc,EAAA;AAClD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QACrF,IAAI,YAAY,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE;AAEtD,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,YAAY,GAAG,MAAM,GAAG,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC;QAC9G,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;IAC1C;IAES,UAAU,GAAA;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,YAAY;YAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;IAC7D;IAES,SAAS,GAAA;AAChB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,WAAW,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/D,QAAA,IAAI,WAAW;YAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;IAC3D;AAES,IAAA,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,SAAA,EAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA,CAAE;IACjE;AAES,IAAA,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,SAAA,EAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA,CAAE;IACjE;IAEQ,eAAe,GAAA;QACrB,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC7E;AAEQ,IAAA,eAAe,CAAC,KAAa,EAAA;QACnC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC;IACjF;AAEQ,IAAA,cAAc,CAAC,KAAa,EAAA;QAClC,MAAM,UAAU,GAAG;AAChB,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,eAAe,EAAE,GAAG;AAC5B,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAE1B,OAAO,UAAU,IAAI,KAAK;IAC5B;wGA7EW,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,yjBAPb,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,iDAK7E,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEf,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;oBACnB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,aAAc,CAAC,EAAE,CAAC;AACvF,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,yBAAyB,EAAE,eAAe;AAC3C,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;AAC3B,iBAAA;;AA6FK,MAAO,iBAAkB,SAAQ,mBAAmB,CAAA;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,OAAO,GAAG,KAAK,CAAkB,SAAS,8EAAC;AAC3C,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEf,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,8EAAC;IAE3E,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK;AAChC,kBAAE;kBACA,kHAAkH;QACxH;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK;AAChC,cAAE;cACA,4FAA4F;IAClG;wGArBW,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,ydATjB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC,EAAE,CAAC,iDAOrF,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,iBAAkB,CAAC,EAAE,CAAC;AAC/F,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,aAAa,EAAE,WAAW;AAC1B,wBAAA,yBAAyB,EAAE,mBAAmB;AAC9C,wBAAA,qBAAqB,EAAE,WAAW;AACnC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;AAC3B,iBAAA;;MAiDY,oBAAoB,CAAA;AACZ,IAAA,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC;IAC7B,IAAI,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtD,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAExD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEf,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,+EAAC;AAC5D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gFAAC;AAC5D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gFAAC;IAE5D,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CACA,uFAAuF,EACvF,2IAA2I,EAC3I,kDAAkD,EAClD,IAAI,CAAC,cAAc,EAAE,EACrB,IAAI,CAAC,KAAK,EAAE,CACb,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;IACrE;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IAC5C;IAEU,OAAO,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjC;AAEU,IAAA,OAAO,CAAC,CAAgB,EAAE,KAAa,EAAE,IAA+B,EAAA;AAChF,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE;QACrC,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC;IAClD;AAEU,IAAA,MAAM,CAAC,CAAgB,EAAA;QAC/B,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;IACvB;AAEU,IAAA,KAAK,CAAC,CAAgB,EAAA;QAC9B,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;IACtB;IAEQ,cAAc,GAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,SAAS;AAErD,QAAA,IAAI,OAAO,KAAK,MAAM,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK;AAChC,kBAAE;kBACA,mMAAmM;QACzM;AAEA,QAAA,OAAO,EAAE,CACP,4HAA4H,EAC5H,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,IAAI,sBAAsB,CAChE;IACH;wGAjEW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,wsCAFrB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,aAAa,EAAE,OAAO;AACtB,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,sBAAsB,EAAE,aAAa;AACrC,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,iBAAiB,EAAE,qBAAqB;AACxC,wBAAA,mBAAmB,EAAE,oCAAoC;AACzD,wBAAA,YAAY,EAAE,oBAAoB;AAClC,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,sBAAsB,EAAE,wCAAwC;AAChE,wBAAA,qBAAqB,EAAE,yCAAyC;AAChE,wBAAA,qBAAqB,EAAE,sCAAsC;AAC7D,wBAAA,mBAAmB,EAAE,uCAAuC;AAC5D,wBAAA,gBAAgB,EAAE,sBAAsB;AACxC,wBAAA,eAAe,EAAE,qBAAqB;AACvC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;AAC3B,iBAAA;;MAqFY,oBAAoB,CAAA;AACd,IAAA,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC;AACnC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACf,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,6EAAC;AAC1D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gFAAC;AAC5D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gFAAC;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CACA,2GAA2G,EAC3G,IAAI,CAAC,KAAK,EAAE,CACb,8EACF;wGAZU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,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,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,sCAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJrB,CAAA;;AAER,GAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAES,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,wBAAwB,EAAE,aAAa;AACvC,wBAAA,mBAAmB,EAAE,kCAAkC;AACvD,wBAAA,UAAU,EAAE,WAAW;AACvB,wBAAA,QAAQ,EAAE,GAAG;AACd,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;AAER,GAAA,CAAA;AACH,iBAAA;;;ACtRD;;AAEG;;;;"}
@@ -0,0 +1,37 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils';
4
+
5
+ class TextareaComponent {
6
+ el = inject(ElementRef);
7
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
8
+ classes = computed(() => cn([
9
+ 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2',
10
+ 'text-sm shadow-sm transition-colors',
11
+ 'placeholder:text-muted-foreground',
12
+ 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',
13
+ 'disabled:cursor-not-allowed disabled:opacity-50',
14
+ 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive',
15
+ ].join(' '), this.class()), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
16
+ focus() {
17
+ this.el.nativeElement.focus();
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: TextareaComponent, isStandalone: true, selector: "textarea[ui-textarea]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TextareaComponent, decorators: [{
23
+ type: Component,
24
+ args: [{
25
+ selector: 'textarea[ui-textarea]',
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ host: { '[class]': 'classes()' },
28
+ template: '',
29
+ }]
30
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
31
+
32
+ /**
33
+ * Generated bundle index. Do not edit.
34
+ */
35
+
36
+ export { TextareaComponent };
37
+ //# sourceMappingURL=ojiepermana-angular-ui-component-textarea.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-textarea.mjs","sources":["../../../projects/angular/ui/component/textarea/src/lib/textarea.component.ts","../../../projects/angular/ui/component/textarea/ojiepermana-angular-ui-component-textarea.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\n@Component({\n selector: 'textarea[ui-textarea]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'classes()' },\n template: '',\n})\nexport class TextareaComponent {\n private readonly el = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n [\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2',\n 'text-sm shadow-sm transition-colors',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive',\n ].join(' '),\n this.class(),\n ),\n );\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MASa,iBAAiB,CAAA;AACX,IAAA,EAAE,GAAG,MAAM,CAAkC,UAAU,CAAC;AAChE,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEf,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CACA;QACE,kFAAkF;QAClF,qCAAqC;QACrC,mCAAmC;QACnC,yEAAyE;QACzE,iDAAiD;QACjD,2FAA2F;KAC5F,CAAC,IAAI,CAAC,GAAG,CAAC,EACX,IAAI,CAAC,KAAK,EAAE,CACb,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACF;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IAC/B;wGApBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,qQAFlB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAED,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AAChC,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;;;ACRD;;AAEG;;;;"}
@@ -0,0 +1,47 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { MatSnackBar } from '@angular/material/snack-bar';
4
+
5
+ /**
6
+ * Thin, opinionated wrapper over MatSnackBar that applies shadcn styling
7
+ * via `panelClass: ui-toast-panel` and variant data attributes.
8
+ */
9
+ class ToastService {
10
+ snack = inject(MatSnackBar);
11
+ show(options) {
12
+ const message = options.title
13
+ ? options.description
14
+ ? `${options.title}\n${options.description}`
15
+ : options.title
16
+ : (options.description ?? '');
17
+ const variant = options.variant ?? 'default';
18
+ return this.snack.open(message, options.action ?? '', {
19
+ duration: options.durationMs ?? 5000,
20
+ horizontalPosition: options.horizontalPosition ?? 'end',
21
+ verticalPosition: options.verticalPosition ?? 'bottom',
22
+ panelClass: ['ui-toast-panel', `ui-toast-${variant}`],
23
+ });
24
+ }
25
+ success(opts) {
26
+ return this.show({ ...opts, variant: 'success' });
27
+ }
28
+ error(opts) {
29
+ return this.show({ ...opts, variant: 'destructive' });
30
+ }
31
+ dismiss() {
32
+ this.snack.dismiss();
33
+ }
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
35
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ToastService, providedIn: 'root' });
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ToastService, decorators: [{
38
+ type: Injectable,
39
+ args: [{ providedIn: 'root' }]
40
+ }] });
41
+
42
+ /**
43
+ * Generated bundle index. Do not edit.
44
+ */
45
+
46
+ export { ToastService };
47
+ //# sourceMappingURL=ojiepermana-angular-ui-component-toast.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-ui-component-toast.mjs","sources":["../../../projects/angular/ui/component/toast/src/lib/toast.service.ts","../../../projects/angular/ui/component/toast/ojiepermana-angular-ui-component-toast.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarRef } from '@angular/material/snack-bar';\n\nexport type ToastVariant = 'default' | 'destructive' | 'success';\n\nexport interface ToastOptions {\n readonly title?: string;\n readonly description?: string;\n readonly action?: string;\n readonly variant?: ToastVariant;\n readonly durationMs?: number;\n readonly horizontalPosition?: MatSnackBarConfig['horizontalPosition'];\n readonly verticalPosition?: MatSnackBarConfig['verticalPosition'];\n}\n\n/**\n * Thin, opinionated wrapper over MatSnackBar that applies shadcn styling\n * via `panelClass: ui-toast-panel` and variant data attributes.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private readonly snack = inject(MatSnackBar);\n\n show(options: ToastOptions): MatSnackBarRef<unknown> {\n const message = options.title\n ? options.description\n ? `${options.title}\\n${options.description}`\n : options.title\n : (options.description ?? '');\n\n const variant = options.variant ?? 'default';\n\n return this.snack.open(message, options.action ?? '', {\n duration: options.durationMs ?? 5000,\n horizontalPosition: options.horizontalPosition ?? 'end',\n verticalPosition: options.verticalPosition ?? 'bottom',\n panelClass: ['ui-toast-panel', `ui-toast-${variant}`],\n });\n }\n\n success(opts: Omit<ToastOptions, 'variant'>): MatSnackBarRef<unknown> {\n return this.show({ ...opts, variant: 'success' });\n }\n\n error(opts: Omit<ToastOptions, 'variant'>): MatSnackBarRef<unknown> {\n return this.show({ ...opts, variant: 'destructive' });\n }\n\n dismiss(): void {\n this.snack.dismiss();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAeA;;;AAGG;MAEU,YAAY,CAAA;AACN,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AAE5C,IAAA,IAAI,CAAC,OAAqB,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC;cACpB,OAAO,CAAC;kBACN,GAAG,OAAO,CAAC,KAAK,CAAA,EAAA,EAAK,OAAO,CAAC,WAAW,CAAA;kBACxC,OAAO,CAAC;eACT,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAE/B,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS;AAE5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE;AACpD,YAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;AACpC,YAAA,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,KAAK;AACvD,YAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,QAAQ;AACtD,YAAA,UAAU,EAAE,CAAC,gBAAgB,EAAE,CAAA,SAAA,EAAY,OAAO,EAAE,CAAC;AACtD,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,IAAmC,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACnD;AAEA,IAAA,KAAK,CAAC,IAAmC,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACvD;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;IACtB;wGA9BW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;4FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACnBlC;;AAEG;;;;"}