@ojiepermana/angular 22.1.14 → 22.2.1

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 (252) hide show
  1. package/README.md +8 -6
  2. package/SUPPORT.md +3 -3
  3. package/chart/README.md +1 -1
  4. package/component/README.md +2 -2
  5. package/component/calendar/README.md +3 -15
  6. package/component/drawer/README.md +1 -2
  7. package/fesm2022/ojiepermana-angular-chart-area.mjs +352 -137
  8. package/fesm2022/ojiepermana-angular-chart-bar.mjs +744 -524
  9. package/fesm2022/ojiepermana-angular-chart-core.mjs +1140 -1344
  10. package/fesm2022/ojiepermana-angular-chart-line.mjs +393 -147
  11. package/fesm2022/ojiepermana-angular-chart-pie.mjs +408 -179
  12. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1262 -920
  13. package/fesm2022/ojiepermana-angular-chart-radar.mjs +473 -205
  14. package/fesm2022/ojiepermana-angular-chart-radial.mjs +425 -182
  15. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +386 -210
  16. package/fesm2022/ojiepermana-angular-chart.mjs +3 -19
  17. package/fesm2022/ojiepermana-angular-component-accordion.mjs +485 -243
  18. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +963 -325
  19. package/fesm2022/ojiepermana-angular-component-alert.mjs +266 -103
  20. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +80 -35
  21. package/fesm2022/ojiepermana-angular-component-avatar.mjs +402 -135
  22. package/fesm2022/ojiepermana-angular-component-badge.mjs +109 -59
  23. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +410 -142
  24. package/fesm2022/ojiepermana-angular-component-button-group.mjs +249 -96
  25. package/fesm2022/ojiepermana-angular-component-button.mjs +153 -75
  26. package/fesm2022/ojiepermana-angular-component-calendar.mjs +531 -418
  27. package/fesm2022/ojiepermana-angular-component-card.mjs +457 -171
  28. package/fesm2022/ojiepermana-angular-component-carousel.mjs +642 -272
  29. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +312 -108
  30. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +299 -115
  31. package/fesm2022/ojiepermana-angular-component-combobox.mjs +396 -183
  32. package/fesm2022/ojiepermana-angular-component-command.mjs +807 -347
  33. package/fesm2022/ojiepermana-angular-component-composer.mjs +807 -330
  34. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +196 -161
  35. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +650 -338
  36. package/fesm2022/ojiepermana-angular-component-dialog.mjs +710 -316
  37. package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -5
  38. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +1212 -646
  39. package/fesm2022/ojiepermana-angular-component-editor.mjs +987 -502
  40. package/fesm2022/ojiepermana-angular-component-empty.mjs +350 -137
  41. package/fesm2022/ojiepermana-angular-component-form.mjs +813 -434
  42. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +486 -277
  43. package/fesm2022/ojiepermana-angular-component-icon.mjs +241 -140
  44. package/fesm2022/ojiepermana-angular-component-input-group.mjs +449 -176
  45. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +891 -488
  46. package/fesm2022/ojiepermana-angular-component-input.mjs +86 -55
  47. package/fesm2022/ojiepermana-angular-component-item.mjs +713 -261
  48. package/fesm2022/ojiepermana-angular-component-kanban.mjs +714 -216
  49. package/fesm2022/ojiepermana-angular-component-kbd.mjs +124 -52
  50. package/fesm2022/ojiepermana-angular-component-label.mjs +82 -31
  51. package/fesm2022/ojiepermana-angular-component-menubar.mjs +479 -329
  52. package/fesm2022/ojiepermana-angular-component-native-select.mjs +167 -65
  53. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +683 -380
  54. package/fesm2022/ojiepermana-angular-component-pagination.mjs +277 -94
  55. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +1283 -607
  56. package/fesm2022/ojiepermana-angular-component-popover.mjs +291 -204
  57. package/fesm2022/ojiepermana-angular-component-progress.mjs +176 -53
  58. package/fesm2022/ojiepermana-angular-component-radio.mjs +449 -142
  59. package/fesm2022/ojiepermana-angular-component-resizable.mjs +659 -453
  60. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +117 -39
  61. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +351 -172
  62. package/fesm2022/ojiepermana-angular-component-select.mjs +475 -345
  63. package/fesm2022/ojiepermana-angular-component-separator.mjs +102 -35
  64. package/fesm2022/ojiepermana-angular-component-sheet.mjs +797 -347
  65. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +62 -29
  66. package/fesm2022/ojiepermana-angular-component-slider.mjs +592 -376
  67. package/fesm2022/ojiepermana-angular-component-spinner.mjs +135 -38
  68. package/fesm2022/ojiepermana-angular-component-switch.mjs +315 -103
  69. package/fesm2022/ojiepermana-angular-component-table.mjs +440 -153
  70. package/fesm2022/ojiepermana-angular-component-tabs.mjs +590 -317
  71. package/fesm2022/ojiepermana-angular-component-textarea.mjs +85 -50
  72. package/fesm2022/ojiepermana-angular-component-timeline.mjs +609 -231
  73. package/fesm2022/ojiepermana-angular-component-toast.mjs +229 -243
  74. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +573 -288
  75. package/fesm2022/ojiepermana-angular-component-toggle.mjs +187 -78
  76. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +798 -517
  77. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +159 -292
  78. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +46 -58
  79. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +76 -38
  80. package/fesm2022/ojiepermana-angular-component-utils.mjs +2 -8
  81. package/fesm2022/ojiepermana-angular-component.mjs +0 -10
  82. package/fesm2022/ojiepermana-angular-navigation-core.mjs +13 -23
  83. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +35 -24
  84. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-DYuysKVf.mjs +129 -0
  85. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-COiTaw34.mjs +812 -0
  86. package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-COQ-60DS.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-YIz0IsIb.mjs} +392 -207
  87. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-D2vwEwBY.mjs +650 -0
  88. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-B5D7yXfb.mjs +662 -0
  89. package/fesm2022/ojiepermana-angular-navigation-navigation-item.component-CUb68MZH.mjs +1219 -0
  90. package/fesm2022/ojiepermana-angular-navigation-navigation-list.component-CrK16trj.mjs +327 -0
  91. package/fesm2022/ojiepermana-angular-navigation-service.mjs +544 -724
  92. package/fesm2022/ojiepermana-angular-navigation-types.mjs +139 -56
  93. package/fesm2022/ojiepermana-angular-navigation.mjs +3256 -4
  94. package/fesm2022/ojiepermana-angular-sdk.mjs +91 -201
  95. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1125 -737
  96. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +245 -328
  97. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +35 -38
  98. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1928 -553
  99. package/fesm2022/ojiepermana-angular-theme-layout.mjs +847 -496
  100. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +288 -358
  101. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +362 -224
  102. package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +88 -0
  103. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +576 -254
  104. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +317 -177
  105. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +256 -112
  106. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -12
  107. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +215 -326
  108. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +68 -129
  109. package/fesm2022/ojiepermana-angular-theme-shell.mjs +907 -378
  110. package/fesm2022/ojiepermana-angular-theme-styles.mjs +521 -720
  111. package/fesm2022/ojiepermana-angular-theme.mjs +0 -10
  112. package/fesm2022/ojiepermana-angular.mjs +5 -24
  113. package/navigation/README.md +69 -18
  114. package/package.json +16 -12
  115. package/sdk/README.md +1 -1
  116. package/sdk/src/writer/index.js +2 -2
  117. package/theme/README.md +1 -1
  118. package/theme/layout/README.md +2 -4
  119. package/theme/page/README.md +50 -0
  120. package/theme/styles/README.md +10 -10
  121. package/theme/styles/css/base/prefers-dark.css +1 -1
  122. package/theme/styles/css/base/status.css +1 -1
  123. package/theme/styles/css/color/amber.css +1 -1
  124. package/theme/styles/css/color/blue.css +1 -1
  125. package/theme/styles/css/color/cyan.css +1 -1
  126. package/theme/styles/css/color/emerald.css +1 -1
  127. package/theme/styles/css/color/fuchsia.css +1 -1
  128. package/theme/styles/css/color/green.css +1 -1
  129. package/theme/styles/css/color/indigo.css +1 -1
  130. package/theme/styles/css/color/lime.css +1 -1
  131. package/theme/styles/css/color/orange.css +1 -1
  132. package/theme/styles/css/color/pink.css +1 -1
  133. package/theme/styles/css/color/purple.css +1 -1
  134. package/theme/styles/css/color/red.css +1 -1
  135. package/theme/styles/css/color/rose.css +1 -1
  136. package/theme/styles/css/color/sky.css +1 -1
  137. package/theme/styles/css/color/teal.css +1 -1
  138. package/theme/styles/css/color/violet.css +1 -1
  139. package/theme/styles/css/color/yellow.css +1 -1
  140. package/theme/styles/css/neutral/gray.css +1 -1
  141. package/theme/styles/css/neutral/mauve.css +1 -1
  142. package/theme/styles/css/neutral/mist.css +1 -1
  143. package/theme/styles/css/neutral/neutral.css +1 -1
  144. package/theme/styles/css/neutral/olive.css +1 -1
  145. package/theme/styles/css/neutral/slate.css +1 -1
  146. package/theme/styles/css/neutral/stone.css +1 -1
  147. package/theme/styles/css/neutral/taupe.css +1 -1
  148. package/theme/styles/css/neutral/zinc.css +1 -1
  149. package/types/ojiepermana-angular-chart-area.d.ts +126 -63
  150. package/types/ojiepermana-angular-chart-bar.d.ts +244 -154
  151. package/types/ojiepermana-angular-chart-core.d.ts +409 -398
  152. package/types/ojiepermana-angular-chart-line.d.ts +141 -68
  153. package/types/ojiepermana-angular-chart-pie.d.ts +192 -121
  154. package/types/ojiepermana-angular-chart-primitives.d.ts +283 -214
  155. package/types/ojiepermana-angular-chart-radar.d.ts +189 -108
  156. package/types/ojiepermana-angular-chart-radial.d.ts +177 -106
  157. package/types/ojiepermana-angular-chart-scatter.d.ts +166 -110
  158. package/types/ojiepermana-angular-chart.d.ts +3 -2
  159. package/types/ojiepermana-angular-component-accordion.d.ts +135 -81
  160. package/types/ojiepermana-angular-component-alert-dialog.d.ts +271 -123
  161. package/types/ojiepermana-angular-component-alert.d.ts +69 -39
  162. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +20 -12
  163. package/types/ojiepermana-angular-component-avatar.d.ts +103 -49
  164. package/types/ojiepermana-angular-component-badge.d.ts +36 -24
  165. package/types/ojiepermana-angular-component-breadcrumb.d.ts +79 -40
  166. package/types/ojiepermana-angular-component-button-group.d.ts +48 -24
  167. package/types/ojiepermana-angular-component-button.d.ts +44 -27
  168. package/types/ojiepermana-angular-component-calendar.d.ts +145 -107
  169. package/types/ojiepermana-angular-component-card.d.ts +112 -63
  170. package/types/ojiepermana-angular-component-carousel.d.ts +150 -81
  171. package/types/ojiepermana-angular-component-checkbox.d.ts +96 -38
  172. package/types/ojiepermana-angular-component-collapsible.d.ts +65 -39
  173. package/types/ojiepermana-angular-component-combobox.d.ts +100 -55
  174. package/types/ojiepermana-angular-component-command.d.ts +206 -121
  175. package/types/ojiepermana-angular-component-composer.d.ts +184 -84
  176. package/types/ojiepermana-angular-component-context-menu.d.ts +51 -41
  177. package/types/ojiepermana-angular-component-date-picker.d.ts +199 -109
  178. package/types/ojiepermana-angular-component-dialog.d.ts +200 -105
  179. package/types/ojiepermana-angular-component-drawer.d.ts +2 -1
  180. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +324 -202
  181. package/types/ojiepermana-angular-component-editor.d.ts +215 -117
  182. package/types/ojiepermana-angular-component-empty.d.ts +80 -45
  183. package/types/ojiepermana-angular-component-form.d.ts +185 -121
  184. package/types/ojiepermana-angular-component-hover-card.d.ts +130 -72
  185. package/types/ojiepermana-angular-component-icon.d.ts +87 -57
  186. package/types/ojiepermana-angular-component-input-group.d.ts +93 -46
  187. package/types/ojiepermana-angular-component-input-otp.d.ts +243 -150
  188. package/types/ojiepermana-angular-component-input.d.ts +27 -17
  189. package/types/ojiepermana-angular-component-item.d.ts +160 -84
  190. package/types/ojiepermana-angular-component-kanban.d.ts +157 -62
  191. package/types/ojiepermana-angular-component-kbd.d.ts +24 -15
  192. package/types/ojiepermana-angular-component-label.d.ts +19 -11
  193. package/types/ojiepermana-angular-component-menubar.d.ts +120 -90
  194. package/types/ojiepermana-angular-component-native-select.d.ts +37 -24
  195. package/types/ojiepermana-angular-component-navigation-menu.d.ts +157 -98
  196. package/types/ojiepermana-angular-component-pagination.d.ts +78 -28
  197. package/types/ojiepermana-angular-component-pillbox.d.ts +361 -204
  198. package/types/ojiepermana-angular-component-popover.d.ts +94 -64
  199. package/types/ojiepermana-angular-component-progress.d.ts +45 -17
  200. package/types/ojiepermana-angular-component-radio.d.ts +129 -53
  201. package/types/ojiepermana-angular-component-resizable.d.ts +160 -112
  202. package/types/ojiepermana-angular-component-scroll-area.d.ts +33 -15
  203. package/types/ojiepermana-angular-component-segmented-control.d.ts +94 -50
  204. package/types/ojiepermana-angular-component-select.d.ts +94 -77
  205. package/types/ojiepermana-angular-component-separator.d.ts +26 -14
  206. package/types/ojiepermana-angular-component-sheet.d.ts +226 -116
  207. package/types/ojiepermana-angular-component-skeleton.d.ts +13 -10
  208. package/types/ojiepermana-angular-component-slider.d.ts +140 -75
  209. package/types/ojiepermana-angular-component-spinner.d.ts +31 -13
  210. package/types/ojiepermana-angular-component-switch.d.ts +97 -40
  211. package/types/ojiepermana-angular-component-table.d.ts +102 -50
  212. package/types/ojiepermana-angular-component-tabs.d.ts +174 -115
  213. package/types/ojiepermana-angular-component-textarea.d.ts +27 -17
  214. package/types/ojiepermana-angular-component-timeline.d.ts +141 -59
  215. package/types/ojiepermana-angular-component-toast.d.ts +51 -55
  216. package/types/ojiepermana-angular-component-toggle-group.d.ts +159 -88
  217. package/types/ojiepermana-angular-component-toggle.d.ts +47 -25
  218. package/types/ojiepermana-angular-component-tooltip.d.ts +222 -132
  219. package/types/ojiepermana-angular-component-utils-core.d.ts +81 -90
  220. package/types/ojiepermana-angular-component-utils-overlay.d.ts +7 -11
  221. package/types/ojiepermana-angular-component-utils-scale.d.ts +20 -12
  222. package/types/ojiepermana-angular-component-utils.d.ts +2 -2
  223. package/types/ojiepermana-angular-component.d.ts +1 -2
  224. package/types/ojiepermana-angular-navigation-core.d.ts +46 -50
  225. package/types/ojiepermana-angular-navigation-icon.d.ts +9 -12
  226. package/types/ojiepermana-angular-navigation-service.d.ts +112 -115
  227. package/types/ojiepermana-angular-navigation-types.d.ts +166 -125
  228. package/types/ojiepermana-angular-navigation.d.ts +708 -375
  229. package/types/ojiepermana-angular-sdk.d.ts +69 -71
  230. package/types/ojiepermana-angular-theme-component-settings.d.ts +120 -86
  231. package/types/ojiepermana-angular-theme-layout-services.d.ts +119 -124
  232. package/types/ojiepermana-angular-theme-layout-types.d.ts +27 -31
  233. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +446 -187
  234. package/types/ojiepermana-angular-theme-layout.d.ts +201 -113
  235. package/types/ojiepermana-angular-theme-page-core.d.ts +136 -142
  236. package/types/ojiepermana-angular-theme-page-filter.d.ts +112 -62
  237. package/types/ojiepermana-angular-theme-page-overview.d.ts +28 -0
  238. package/types/ojiepermana-angular-theme-page-root.d.ts +172 -88
  239. package/types/ojiepermana-angular-theme-page-side.d.ts +89 -49
  240. package/types/ojiepermana-angular-theme-page-slots.d.ts +58 -37
  241. package/types/ojiepermana-angular-theme-page.d.ts +7 -5
  242. package/types/ojiepermana-angular-theme-shell-services.d.ts +119 -125
  243. package/types/ojiepermana-angular-theme-shell-types.d.ts +38 -41
  244. package/types/ojiepermana-angular-theme-shell.d.ts +139 -61
  245. package/types/ojiepermana-angular-theme-styles.d.ts +184 -196
  246. package/types/ojiepermana-angular-theme.d.ts +1 -2
  247. package/types/ojiepermana-angular.d.ts +5 -5
  248. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-Be3IqzG4.mjs +0 -91
  249. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-Bc7DWK3R.mjs +0 -522
  250. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-DA8VPEn7.mjs +0 -404
  251. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-U2TJTzlW.mjs +0 -466
  252. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-CIUhmytH.mjs +0 -2668
@@ -1,208 +1,321 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, ElementRef, input, booleanAttribute, computed, effect, untracked, Component, output } from '@angular/core';
4
- import { cn } from '@ojiepermana/angular/component/utils/core';
5
- import { PageStateService, PAGE_DEFAULT_FILTER_PLACEMENT, PAGE_DEFAULT_FILTER_MODE, PAGE_DEFAULT_FILTER_WIDTH, PAGE_DEFAULT_SCROLL, ɵsetupOverlayFocusManagement as _setupOverlayFocusManagement } from '@ojiepermana/angular/theme/page/core';
6
-
1
+ import { DOCUMENT } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, ElementRef, booleanAttribute, computed, effect, inject, input, output, untracked } from "@angular/core";
4
+ import { cn } from "@ojiepermana/angular/component/utils/core";
5
+ import { PAGE_DEFAULT_FILTER_MODE, PAGE_DEFAULT_FILTER_PLACEMENT, PAGE_DEFAULT_FILTER_WIDTH, PAGE_DEFAULT_SCROLL, PageStateService, ɵsetupOverlayFocusManagement } from "@ojiepermana/angular/theme/page/core";
7
6
  let nextPageFilterId = 0;
8
- /**
9
- * `PageFilter` — the filter slot between `PageHeader` and `PageContent`
10
- * (`placement="stacked"`) or beside `PageContent` (`placement="side"`). Stacked, the
11
- * filter pushes content down and content takes the remaining height. Side, it pushes
12
- * content across, in `sticky | drawer | overlay` mode, following the `PageSide` pattern.
13
- *
14
- * `placement="stacked"` always behaves as `sticky` — `drawer` and `overlay` apply to
15
- * `side` only.
16
- */
17
- class PageFilterComponent {
18
- document = inject(DOCUMENT, { optional: true });
19
- host = inject((ElementRef));
20
- page = inject(PageStateService);
21
- resolvedId = `page-filter-${++nextPageFilterId}`;
22
- placement = input(PAGE_DEFAULT_FILTER_PLACEMENT, /* @ts-ignore */
23
- ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
24
- mode = input(PAGE_DEFAULT_FILTER_MODE, /* @ts-ignore */
25
- ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
26
- position = input(null, /* @ts-ignore */
27
- ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
28
- width = input(null, /* @ts-ignore */
29
- ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
30
- closeOnEsc = input(true, /* @ts-ignore */
31
- ...(ngDevMode ? [{ debugName: "closeOnEsc" }] : /* istanbul ignore next */ []));
32
- /**
33
- * `placement="stacked"` only: let `PageFilterToggle` open and close the bar (closed by
34
- * default). Closed, the bar is hidden and content reclaims its space. Ignored under
35
- * `placement="side"` — use `mode="drawer"` or `mode="overlay"` for a dismissible side.
36
- */
37
- collapsible = input(false, { ...(ngDevMode ? { debugName: "collapsible" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
38
- /** Accessible name for the panel in `drawer`/`overlay` mode (set as the dialog's `aria-label`). */
39
- ariaLabel = input('Filters', /* @ts-ignore */
40
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
41
- class = input('', /* @ts-ignore */
42
- ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
43
- resolvedPlacement = computed(() => this.placement(), /* @ts-ignore */
44
- ...(ngDevMode ? [{ debugName: "resolvedPlacement" }] : /* istanbul ignore next */ []));
45
- /** `stacked` adalah bar horizontal — tidak punya drawer/overlay, jadi mode efektifnya selalu `sticky`. */
46
- effectiveMode = computed(() => this.resolvedPlacement() === 'stacked' ? 'sticky' : this.mode(), /* @ts-ignore */
47
- ...(ngDevMode ? [{ debugName: "effectiveMode" }] : /* istanbul ignore next */ []));
48
- resolvedPosition = computed(() => this.position() ?? this.page.filterPosition(), /* @ts-ignore */
49
- ...(ngDevMode ? [{ debugName: "resolvedPosition" }] : /* istanbul ignore next */ []));
50
- resolvedWidth = computed(() => this.width() ?? this.page.filterWidth() ?? PAGE_DEFAULT_FILTER_WIDTH, /* @ts-ignore */
51
- ...(ngDevMode ? [{ debugName: "resolvedWidth" }] : /* istanbul ignore next */ []));
52
- resolvedScroll = computed(() => this.page.scroll() ?? PAGE_DEFAULT_SCROLL, /* @ts-ignore */
53
- ...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
54
- isStacked = computed(() => this.resolvedPlacement() === 'stacked', /* @ts-ignore */
55
- ...(ngDevMode ? [{ debugName: "isStacked" }] : /* istanbul ignore next */ []));
56
- /** Bar stacked yang dapat ditutup dan sedang tertutup → disembunyikan dari layout. */
57
- isCollapsedStacked = computed(() => this.isStacked() && this.collapsible() && !this.page.filterOpen(), /* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "isCollapsedStacked" }] : /* istanbul ignore next */ []));
59
- isSticky = computed(() => this.effectiveMode() === 'sticky', /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "isSticky" }] : /* istanbul ignore next */ []));
61
- isDrawer = computed(() => this.effectiveMode() === 'drawer', /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "isDrawer" }] : /* istanbul ignore next */ []));
63
- isOverlay = computed(() => this.effectiveMode() === 'overlay', /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "isOverlay" }] : /* istanbul ignore next */ []));
65
- /** Mode mengambang (drawer/overlay) — bersifat dialog dan butuh manajemen fokus + `inert` saat tertutup. */
66
- isInteractive = computed(() => this.isDrawer() || this.isOverlay(), /* @ts-ignore */
67
- ...(ngDevMode ? [{ debugName: "isInteractive" }] : /* istanbul ignore next */ []));
68
- /** Drawer/overlay yang tertutup disembunyikan dari pohon aksesibilitas. */
69
- ariaHidden = computed(() => !this.isSticky() && !this.page.filterOpen() ? 'true' : null, /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "ariaHidden" }] : /* istanbul ignore next */ []));
71
- /** Saat panel mengambang tertutup, `inert` mengeluarkan isinya dari tab order & pohon aksesibilitas (AXE). */
72
- inertWhenClosed = computed(() => this.isInteractive() && !this.page.filterOpen() ? '' : null, /* @ts-ignore */
73
- ...(ngDevMode ? [{ debugName: "inertWhenClosed" }] : /* istanbul ignore next */ []));
74
- dialogRole = computed(() => (this.isInteractive() ? 'dialog' : null), /* @ts-ignore */
75
- ...(ngDevMode ? [{ debugName: "dialogRole" }] : /* istanbul ignore next */ []));
76
- ariaModal = computed(() => (this.isOverlay() ? 'true' : null), /* @ts-ignore */
77
- ...(ngDevMode ? [{ debugName: "ariaModal" }] : /* istanbul ignore next */ []));
78
- dialogLabel = computed(() => (this.isInteractive() ? this.ariaLabel() : null), /* @ts-ignore */
79
- ...(ngDevMode ? [{ debugName: "dialogLabel" }] : /* istanbul ignore next */ []));
80
- dialogTabindex = computed(() => (this.isInteractive() ? '-1' : null), /* @ts-ignore */
81
- ...(ngDevMode ? [{ debugName: "dialogTabindex" }] : /* istanbul ignore next */ []));
82
- classes = computed(() => {
83
- const position = this.resolvedPosition();
84
- const scroll = this.resolvedScroll();
85
- const open = this.page.filterOpen();
86
- // STACKED: bar selebar content yang mendorong content ke bawah (shrink-0 = tinggi mengikuti isi).
87
- if (this.isStacked()) {
88
- return cn('block shrink-0 border-b border-border bg-background',
89
- // Saat seluruh page yang scroll, filter dipin ke atas area scroll agar tetap terjangkau.
90
- scroll === 'page' && 'sticky top-0 z-10', this.class(),
91
- // Collapsible & tertutup → `hidden` (menang atas `block`); content mengisi ruangnya kembali.
92
- this.isCollapsedStacked() && 'hidden');
93
- }
94
- // SIDE: kolom di samping content.
95
- return cn('block min-h-0 border-border bg-background', scroll === 'content' && 'h-full overflow-auto', scroll === 'page' && 'overflow-visible',
96
- // sticky → mendorong content (push); urutan kolom di-handle oleh `order-last` saat di kanan.
97
- this.isSticky() && 'shrink-0 w-[var(--page-filter-width)]', this.isSticky() && position === 'left' && 'border-r', this.isSticky() && position === 'right' && 'order-last border-l',
98
- // drawer → meluncur dari tepi content region, mengambang di atas content.
99
- this.isDrawer() &&
100
- 'absolute inset-y-0 z-20 w-[var(--page-filter-width)] border shadow-sm transition-transform duration-200 ease-out motion-reduce:transition-none', this.isDrawer() &&
101
- position === 'left' &&
102
- (open ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'), this.isDrawer() &&
103
- position === 'right' &&
104
- (open ? 'right-0 translate-x-0' : 'right-0 translate-x-full'),
105
- // overlay → seperti drawer, tapi di atas drawer (z lebih tinggi) dengan backdrop.
106
- this.isOverlay() &&
107
- 'absolute inset-y-0 z-30 w-[var(--page-filter-width)] border shadow-md transition-transform duration-200 ease-out motion-reduce:transition-none', this.isOverlay() &&
108
- position === 'left' &&
109
- (open ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'), this.isOverlay() &&
110
- position === 'right' &&
111
- (open ? 'right-0 translate-x-0' : 'right-0 translate-x-full'), this.class());
112
- }, /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
114
- constructor() {
115
- _setupOverlayFocusManagement({
116
- document: this.document,
117
- host: this.host.nativeElement,
118
- isOpen: this.page.filterOpen,
119
- isInteractive: this.isInteractive,
120
- isModal: this.isOverlay,
121
- takeReturnFocus: () => this.page.takeFilterReturnFocus(),
122
- });
123
- effect(() => {
124
- this.page.registerFilter({
125
- placement: this.resolvedPlacement(),
126
- mode: this.effectiveMode(),
127
- position: this.resolvedPosition(),
128
- width: this.resolvedWidth(),
129
- id: this.resolvedId,
130
- });
131
- });
132
- effect((onCleanup) => {
133
- if (!this.closeOnEsc() || this.isSticky()) {
134
- return;
135
- }
136
- const defaultView = this.document?.defaultView;
137
- if (!defaultView) {
138
- return;
139
- }
140
- const handler = (event) => {
141
- if (event.key !== 'Escape') {
142
- return;
143
- }
144
- if (!untracked(() => this.page.filterOpen())) {
145
- return;
146
- }
147
- untracked(() => {
148
- this.page.closeFilter();
149
- });
150
- };
151
- defaultView.addEventListener('keydown', handler);
152
- onCleanup(() => defaultView.removeEventListener('keydown', handler));
153
- });
154
- }
155
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
156
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: PageFilterComponent, isStandalone: true, selector: "PageFilter", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, closeOnEsc: { classPropertyName: "closeOnEsc", publicName: "closeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "resolvedId", "attr.data-page-slot": "\"filter\"", "attr.data-page-filter-placement": "resolvedPlacement()", "attr.data-page-filter-mode": "effectiveMode()", "attr.data-page-filter-open": "page.filterOpen()", "attr.data-page-position": "resolvedPosition()", "attr.aria-hidden": "ariaHidden()", "attr.inert": "inertWhenClosed()", "attr.role": "dialogRole()", "attr.aria-modal": "ariaModal()", "attr.aria-label": "dialogLabel()", "attr.tabindex": "dialogTabindex()", "style.--page-filter-width": "resolvedWidth()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
157
- }
158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageFilterComponent, decorators: [{
159
- type: Component,
160
- args: [{
161
- selector: 'PageFilter',
162
- host: {
163
- '[class]': 'classes()',
164
- '[attr.id]': 'resolvedId',
165
- '[attr.data-page-slot]': '"filter"',
166
- '[attr.data-page-filter-placement]': 'resolvedPlacement()',
167
- '[attr.data-page-filter-mode]': 'effectiveMode()',
168
- '[attr.data-page-filter-open]': 'page.filterOpen()',
169
- '[attr.data-page-position]': 'resolvedPosition()',
170
- '[attr.aria-hidden]': 'ariaHidden()',
171
- '[attr.inert]': 'inertWhenClosed()',
172
- '[attr.role]': 'dialogRole()',
173
- '[attr.aria-modal]': 'ariaModal()',
174
- '[attr.aria-label]': 'dialogLabel()',
175
- '[attr.tabindex]': 'dialogTabindex()',
176
- '[style.--page-filter-width]': 'resolvedWidth()',
177
- },
178
- template: `<ng-content />`,
179
- }]
180
- }], ctorParameters: () => [], propDecorators: { placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], closeOnEsc: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEsc", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
181
-
182
- /**
183
- * `PageFilterToggle` — the button that opens and closes a `PageFilter` in `drawer` or
184
- * `overlay` mode. Projected content replaces the label or icon; the fallback is the
185
- * built-in funnel icon.
186
- */
187
- class PageFilterToggleComponent {
188
- page = inject(PageStateService);
189
- ariaLabel = input('Toggle page filter', /* @ts-ignore */
190
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
191
- class = input('', /* @ts-ignore */
192
- ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
193
- toggled = output();
194
- hostClasses = computed(() => cn('inline-flex shrink-0', this.class()), /* @ts-ignore */
195
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
196
- buttonClasses = computed(() => cn('inline-flex h-9 min-w-9 items-center justify-center rounded-base border border-border bg-background px-3 text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2'), /* @ts-ignore */
197
- ...(ngDevMode ? [{ debugName: "buttonClasses" }] : /* istanbul ignore next */ []));
198
- handleClick(event) {
199
- if (!this.page.filterOpen() && event.currentTarget instanceof HTMLElement) {
200
- this.page.setFilterReturnFocus(event.currentTarget);
201
- }
202
- this.toggled.emit(this.page.toggleFilter());
203
- }
204
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageFilterToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
205
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: PageFilterToggleComponent, isStandalone: true, selector: "PageFilterToggle", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggled: "toggled" }, host: { attributes: { "data-page-control": "filter-toggle" }, properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
7
+ const FILTER_BG = "bg-surface/50";
8
+ const FILTER_BG_OPAQUE = "bg-[color-mix(in_srgb,var(--color-surface)_50%,var(--color-background))]";
9
+ var PageFilterComponent = class PageFilterComponent {
10
+ document = inject(DOCUMENT, { optional: true });
11
+ host = inject(ElementRef);
12
+ page = inject(PageStateService);
13
+ resolvedId = `page-filter-${++nextPageFilterId}`;
14
+ placement = input(PAGE_DEFAULT_FILTER_PLACEMENT, ...ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []);
15
+ mode = input(PAGE_DEFAULT_FILTER_MODE, ...ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []);
16
+ position = input(null, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
17
+ width = input(null, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
18
+ closeOnEsc = input(true, ...ngDevMode ? [{ debugName: "closeOnEsc" }] : /* istanbul ignore next */ []);
19
+ collapsible = input(false, {
20
+ ...ngDevMode ? { debugName: "collapsible" } : /* istanbul ignore next */ {},
21
+ transform: booleanAttribute
22
+ });
23
+ ariaLabel = input("Filters", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
24
+ class = input("", ...ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []);
25
+ resolvedPlacement = computed(() => this.placement(), ...ngDevMode ? [{ debugName: "resolvedPlacement" }] : /* istanbul ignore next */ []);
26
+ effectiveMode = computed(() => this.resolvedPlacement() === "stacked" ? "sticky" : this.mode(), ...ngDevMode ? [{ debugName: "effectiveMode" }] : /* istanbul ignore next */ []);
27
+ resolvedPosition = computed(() => this.position() ?? this.page.filterPosition(), ...ngDevMode ? [{ debugName: "resolvedPosition" }] : /* istanbul ignore next */ []);
28
+ resolvedWidth = computed(() => this.width() ?? this.page.filterWidth() ?? PAGE_DEFAULT_FILTER_WIDTH, ...ngDevMode ? [{ debugName: "resolvedWidth" }] : /* istanbul ignore next */ []);
29
+ resolvedScroll = computed(() => this.page.scroll() ?? PAGE_DEFAULT_SCROLL, ...ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []);
30
+ isStacked = computed(() => this.resolvedPlacement() === "stacked", ...ngDevMode ? [{ debugName: "isStacked" }] : /* istanbul ignore next */ []);
31
+ isCollapsedStacked = computed(() => this.isStacked() && this.collapsible() && !this.page.filterOpen(), ...ngDevMode ? [{ debugName: "isCollapsedStacked" }] : /* istanbul ignore next */ []);
32
+ isSticky = computed(() => this.effectiveMode() === "sticky", ...ngDevMode ? [{ debugName: "isSticky" }] : /* istanbul ignore next */ []);
33
+ isDrawer = computed(() => this.effectiveMode() === "drawer", ...ngDevMode ? [{ debugName: "isDrawer" }] : /* istanbul ignore next */ []);
34
+ isOverlay = computed(() => this.effectiveMode() === "overlay", ...ngDevMode ? [{ debugName: "isOverlay" }] : /* istanbul ignore next */ []);
35
+ isInteractive = computed(() => this.isDrawer() || this.isOverlay(), ...ngDevMode ? [{ debugName: "isInteractive" }] : /* istanbul ignore next */ []);
36
+ ariaHidden = computed(() => !this.isSticky() && !this.page.filterOpen() ? "true" : null, ...ngDevMode ? [{ debugName: "ariaHidden" }] : /* istanbul ignore next */ []);
37
+ inertWhenClosed = computed(() => this.isInteractive() && !this.page.filterOpen() ? "" : null, ...ngDevMode ? [{ debugName: "inertWhenClosed" }] : /* istanbul ignore next */ []);
38
+ dialogRole = computed(() => this.isInteractive() ? "dialog" : null, ...ngDevMode ? [{ debugName: "dialogRole" }] : /* istanbul ignore next */ []);
39
+ ariaModal = computed(() => this.isOverlay() ? "true" : null, ...ngDevMode ? [{ debugName: "ariaModal" }] : /* istanbul ignore next */ []);
40
+ dialogLabel = computed(() => this.isInteractive() ? this.ariaLabel() : null, ...ngDevMode ? [{ debugName: "dialogLabel" }] : /* istanbul ignore next */ []);
41
+ dialogTabindex = computed(() => this.isInteractive() ? "-1" : null, ...ngDevMode ? [{ debugName: "dialogTabindex" }] : /* istanbul ignore next */ []);
42
+ classes = computed(() => {
43
+ const position = this.resolvedPosition();
44
+ const scroll = this.resolvedScroll();
45
+ const open = this.page.filterOpen();
46
+ if (this.isStacked()) return cn("block shrink-0 border-b border-border text-surface-foreground", scroll === "page" ? `sticky top-0 z-10 ${FILTER_BG_OPAQUE}` : FILTER_BG, this.class(), this.isCollapsedStacked() && "hidden");
47
+ return cn("block min-h-0 border-border text-surface-foreground", this.isSticky() ? FILTER_BG : FILTER_BG_OPAQUE, scroll === "content" && "h-full overflow-auto", scroll === "page" && "overflow-visible", this.isSticky() && "shrink-0 w-[var(--page-filter-width)]", this.isSticky() && position === "left" && "border-r", this.isSticky() && position === "right" && "order-last border-l", this.isDrawer() && "absolute inset-y-0 z-20 w-[var(--page-filter-width)] border shadow-sm transition-transform duration-200 ease-out motion-reduce:transition-none", this.isDrawer() && position === "left" && (open ? "left-0 translate-x-0" : "left-0 -translate-x-full"), this.isDrawer() && position === "right" && (open ? "right-0 translate-x-0" : "right-0 translate-x-full"), this.isOverlay() && "absolute inset-y-0 z-30 w-[var(--page-filter-width)] border shadow-md transition-transform duration-200 ease-out motion-reduce:transition-none", this.isOverlay() && position === "left" && (open ? "left-0 translate-x-0" : "left-0 -translate-x-full"), this.isOverlay() && position === "right" && (open ? "right-0 translate-x-0" : "right-0 translate-x-full"), this.class());
48
+ }, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
49
+ constructor() {
50
+ ɵsetupOverlayFocusManagement({
51
+ document: this.document,
52
+ host: this.host.nativeElement,
53
+ isOpen: this.page.filterOpen,
54
+ isInteractive: this.isInteractive,
55
+ isModal: this.isOverlay,
56
+ takeReturnFocus: () => this.page.takeFilterReturnFocus()
57
+ });
58
+ effect(() => {
59
+ this.page.registerFilter({
60
+ placement: this.resolvedPlacement(),
61
+ mode: this.effectiveMode(),
62
+ position: this.resolvedPosition(),
63
+ width: this.resolvedWidth(),
64
+ id: this.resolvedId
65
+ });
66
+ });
67
+ effect((onCleanup) => {
68
+ if (!this.closeOnEsc() || this.isSticky()) return;
69
+ const defaultView = this.document?.defaultView;
70
+ if (!defaultView) return;
71
+ const handler = (event) => {
72
+ if (event.key !== "Escape") return;
73
+ if (!untracked(() => this.page.filterOpen())) return;
74
+ untracked(() => {
75
+ this.page.closeFilter();
76
+ });
77
+ };
78
+ defaultView.addEventListener("keydown", handler);
79
+ onCleanup(() => defaultView.removeEventListener("keydown", handler));
80
+ });
81
+ }
82
+ static ɵfac = i0.ɵɵngDeclareFactory({
83
+ minVersion: "12.0.0",
84
+ version: "22.2.2",
85
+ ngImport: i0,
86
+ type: PageFilterComponent,
87
+ deps: [],
88
+ target: i0.ɵɵFactoryTarget.Component
89
+ });
90
+ static ɵcmp = i0.ɵɵngDeclareComponent({
91
+ minVersion: "17.1.0",
92
+ version: "22.2.2",
93
+ type: PageFilterComponent,
94
+ isStandalone: true,
95
+ selector: "PageFilter",
96
+ inputs: {
97
+ placement: {
98
+ classPropertyName: "placement",
99
+ publicName: "placement",
100
+ isSignal: true,
101
+ isRequired: false,
102
+ transformFunction: null
103
+ },
104
+ mode: {
105
+ classPropertyName: "mode",
106
+ publicName: "mode",
107
+ isSignal: true,
108
+ isRequired: false,
109
+ transformFunction: null
110
+ },
111
+ position: {
112
+ classPropertyName: "position",
113
+ publicName: "position",
114
+ isSignal: true,
115
+ isRequired: false,
116
+ transformFunction: null
117
+ },
118
+ width: {
119
+ classPropertyName: "width",
120
+ publicName: "width",
121
+ isSignal: true,
122
+ isRequired: false,
123
+ transformFunction: null
124
+ },
125
+ closeOnEsc: {
126
+ classPropertyName: "closeOnEsc",
127
+ publicName: "closeOnEsc",
128
+ isSignal: true,
129
+ isRequired: false,
130
+ transformFunction: null
131
+ },
132
+ collapsible: {
133
+ classPropertyName: "collapsible",
134
+ publicName: "collapsible",
135
+ isSignal: true,
136
+ isRequired: false,
137
+ transformFunction: null
138
+ },
139
+ ariaLabel: {
140
+ classPropertyName: "ariaLabel",
141
+ publicName: "ariaLabel",
142
+ isSignal: true,
143
+ isRequired: false,
144
+ transformFunction: null
145
+ },
146
+ class: {
147
+ classPropertyName: "class",
148
+ publicName: "class",
149
+ isSignal: true,
150
+ isRequired: false,
151
+ transformFunction: null
152
+ }
153
+ },
154
+ host: { properties: {
155
+ "class": "classes()",
156
+ "attr.id": "resolvedId",
157
+ "attr.data-page-slot": "\"filter\"",
158
+ "attr.data-page-filter-placement": "resolvedPlacement()",
159
+ "attr.data-page-filter-mode": "effectiveMode()",
160
+ "attr.data-page-filter-open": "page.filterOpen()",
161
+ "attr.data-page-position": "resolvedPosition()",
162
+ "attr.aria-hidden": "ariaHidden()",
163
+ "attr.inert": "inertWhenClosed()",
164
+ "attr.role": "dialogRole()",
165
+ "attr.aria-modal": "ariaModal()",
166
+ "attr.aria-label": "dialogLabel()",
167
+ "attr.tabindex": "dialogTabindex()",
168
+ "style.--page-filter-width": "resolvedWidth()"
169
+ } },
170
+ ngImport: i0,
171
+ template: `<ng-content />`,
172
+ isInline: true
173
+ });
174
+ };
175
+ i0.ɵɵngDeclareClassMetadata({
176
+ minVersion: "12.0.0",
177
+ version: "22.2.2",
178
+ ngImport: i0,
179
+ type: PageFilterComponent,
180
+ decorators: [{
181
+ type: Component,
182
+ args: [{
183
+ selector: "PageFilter",
184
+ host: {
185
+ "[class]": "classes()",
186
+ "[attr.id]": "resolvedId",
187
+ "[attr.data-page-slot]": "\"filter\"",
188
+ "[attr.data-page-filter-placement]": "resolvedPlacement()",
189
+ "[attr.data-page-filter-mode]": "effectiveMode()",
190
+ "[attr.data-page-filter-open]": "page.filterOpen()",
191
+ "[attr.data-page-position]": "resolvedPosition()",
192
+ "[attr.aria-hidden]": "ariaHidden()",
193
+ "[attr.inert]": "inertWhenClosed()",
194
+ "[attr.role]": "dialogRole()",
195
+ "[attr.aria-modal]": "ariaModal()",
196
+ "[attr.aria-label]": "dialogLabel()",
197
+ "[attr.tabindex]": "dialogTabindex()",
198
+ "[style.--page-filter-width]": "resolvedWidth()"
199
+ },
200
+ template: `<ng-content />`
201
+ }]
202
+ }],
203
+ ctorParameters: () => [],
204
+ propDecorators: {
205
+ placement: [{
206
+ type: i0.Input,
207
+ args: [{
208
+ isSignal: true,
209
+ alias: "placement",
210
+ required: false
211
+ }]
212
+ }],
213
+ mode: [{
214
+ type: i0.Input,
215
+ args: [{
216
+ isSignal: true,
217
+ alias: "mode",
218
+ required: false
219
+ }]
220
+ }],
221
+ position: [{
222
+ type: i0.Input,
223
+ args: [{
224
+ isSignal: true,
225
+ alias: "position",
226
+ required: false
227
+ }]
228
+ }],
229
+ width: [{
230
+ type: i0.Input,
231
+ args: [{
232
+ isSignal: true,
233
+ alias: "width",
234
+ required: false
235
+ }]
236
+ }],
237
+ closeOnEsc: [{
238
+ type: i0.Input,
239
+ args: [{
240
+ isSignal: true,
241
+ alias: "closeOnEsc",
242
+ required: false
243
+ }]
244
+ }],
245
+ collapsible: [{
246
+ type: i0.Input,
247
+ args: [{
248
+ isSignal: true,
249
+ alias: "collapsible",
250
+ required: false
251
+ }]
252
+ }],
253
+ ariaLabel: [{
254
+ type: i0.Input,
255
+ args: [{
256
+ isSignal: true,
257
+ alias: "ariaLabel",
258
+ required: false
259
+ }]
260
+ }],
261
+ class: [{
262
+ type: i0.Input,
263
+ args: [{
264
+ isSignal: true,
265
+ alias: "class",
266
+ required: false
267
+ }]
268
+ }]
269
+ }
270
+ });
271
+ var PageFilterToggleComponent = class PageFilterToggleComponent {
272
+ page = inject(PageStateService);
273
+ ariaLabel = input("Toggle page filter", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
274
+ class = input("", ...ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []);
275
+ toggled = output();
276
+ hostClasses = computed(() => cn("inline-flex shrink-0", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
277
+ buttonClasses = computed(() => cn("inline-flex h-9 min-w-9 items-center justify-center rounded-base border border-border bg-background px-3 text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"), ...ngDevMode ? [{ debugName: "buttonClasses" }] : /* istanbul ignore next */ []);
278
+ handleClick(event) {
279
+ if (!this.page.filterOpen() && event.currentTarget instanceof HTMLElement) this.page.setFilterReturnFocus(event.currentTarget);
280
+ this.toggled.emit(this.page.toggleFilter());
281
+ }
282
+ static ɵfac = i0.ɵɵngDeclareFactory({
283
+ minVersion: "12.0.0",
284
+ version: "22.2.2",
285
+ ngImport: i0,
286
+ type: PageFilterToggleComponent,
287
+ deps: [],
288
+ target: i0.ɵɵFactoryTarget.Component
289
+ });
290
+ static ɵcmp = i0.ɵɵngDeclareComponent({
291
+ minVersion: "17.1.0",
292
+ version: "22.2.2",
293
+ type: PageFilterToggleComponent,
294
+ isStandalone: true,
295
+ selector: "PageFilterToggle",
296
+ inputs: {
297
+ ariaLabel: {
298
+ classPropertyName: "ariaLabel",
299
+ publicName: "ariaLabel",
300
+ isSignal: true,
301
+ isRequired: false,
302
+ transformFunction: null
303
+ },
304
+ class: {
305
+ classPropertyName: "class",
306
+ publicName: "class",
307
+ isSignal: true,
308
+ isRequired: false,
309
+ transformFunction: null
310
+ }
311
+ },
312
+ outputs: { toggled: "toggled" },
313
+ host: {
314
+ attributes: { "data-page-control": "filter-toggle" },
315
+ properties: { "class": "hostClasses()" }
316
+ },
317
+ ngImport: i0,
318
+ template: `
206
319
  <button
207
320
  type="button"
208
321
  [class]="buttonClasses()"
@@ -226,17 +339,24 @@ class PageFilterToggleComponent {
226
339
  </svg>
227
340
  </ng-content>
228
341
  </button>
229
- `, isInline: true });
230
- }
231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageFilterToggleComponent, decorators: [{
232
- type: Component,
233
- args: [{
234
- selector: 'PageFilterToggle',
235
- host: {
236
- '[class]': 'hostClasses()',
237
- 'data-page-control': 'filter-toggle',
238
- },
239
- template: `
342
+ `,
343
+ isInline: true
344
+ });
345
+ };
346
+ i0.ɵɵngDeclareClassMetadata({
347
+ minVersion: "12.0.0",
348
+ version: "22.2.2",
349
+ ngImport: i0,
350
+ type: PageFilterToggleComponent,
351
+ decorators: [{
352
+ type: Component,
353
+ args: [{
354
+ selector: "PageFilterToggle",
355
+ host: {
356
+ "[class]": "hostClasses()",
357
+ "data-page-control": "filter-toggle"
358
+ },
359
+ template: `
240
360
  <button
241
361
  type="button"
242
362
  [class]="buttonClasses()"
@@ -260,12 +380,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
260
380
  </svg>
261
381
  </ng-content>
262
382
  </button>
263
- `,
264
- }]
265
- }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], toggled: [{ type: i0.Output, args: ["toggled"] }] } });
266
-
267
- /**
268
- * Generated bundle index. Do not edit.
269
- */
270
-
271
- export { PageFilterComponent, PageFilterToggleComponent };
383
+ `
384
+ }]
385
+ }],
386
+ propDecorators: {
387
+ ariaLabel: [{
388
+ type: i0.Input,
389
+ args: [{
390
+ isSignal: true,
391
+ alias: "ariaLabel",
392
+ required: false
393
+ }]
394
+ }],
395
+ class: [{
396
+ type: i0.Input,
397
+ args: [{
398
+ isSignal: true,
399
+ alias: "class",
400
+ required: false
401
+ }]
402
+ }],
403
+ toggled: [{
404
+ type: i0.Output,
405
+ args: ["toggled"]
406
+ }]
407
+ }
408
+ });
409
+ export { PageFilterComponent, PageFilterToggleComponent };