@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,385 +1,315 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, computed, Service, effect } from '@angular/core';
3
-
4
- const PAGE_VARIANTS = ['stacked', 'side'];
5
- const PAGE_SIDE_POSITIONS = ['left', 'right'];
6
- const PAGE_SIDE_MODES = ['sticky', 'drawer', 'overlay'];
7
- const PAGE_SCROLL_VALUES = ['content', 'page'];
8
- const PAGE_HEIGHT_VALUES = ['auto', 'fix'];
9
- /** Visual appearance shared with the layout/navigation axes — unifies borders. */
10
- const PAGE_APPEARANCES = ['flat', 'border-rail'];
11
- /** `PageFilter` placement: `stacked` = a bar between header and content; `side` = a column beside content. */
12
- const PAGE_FILTER_PLACEMENTS = ['stacked', 'side'];
13
- const PAGE_DEFAULT_VARIANT = 'stacked';
14
- const PAGE_DEFAULT_SIDE_POSITION = 'left';
15
- const PAGE_DEFAULT_SIDE_MODE = 'sticky';
16
- const PAGE_DEFAULT_SCROLL = 'content';
17
- const PAGE_DEFAULT_HEIGHT = 'auto';
18
- const PAGE_DEFAULT_APPEARANCE = 'flat';
19
- const PAGE_DEFAULT_SIDE_WIDTH = '16rem';
20
- /** Placement default `PageFilter`. */
21
- const PAGE_DEFAULT_FILTER_PLACEMENT = 'stacked';
22
- /** Default `PageFilter` mode under `placement="side"`; `stacked` always behaves as `sticky`. */
23
- const PAGE_DEFAULT_FILTER_MODE = 'sticky';
24
- /** Default position of the `PageFilter` column under `placement="side"`. */
25
- const PAGE_DEFAULT_FILTER_POSITION = 'left';
26
- /** Default width of the `PageFilter` column under `placement="side"` (sticky/drawer/overlay). */
27
- const PAGE_DEFAULT_FILTER_WIDTH = '18rem';
1
+ import * as i0 from "@angular/core";
2
+ import { Service, computed, effect, signal } from "@angular/core";
3
+ const PAGE_VARIANTS = ["stacked", "side"];
4
+ const PAGE_SIDE_POSITIONS = ["left", "right"];
5
+ const PAGE_SIDE_MODES = [
6
+ "sticky",
7
+ "drawer",
8
+ "overlay"
9
+ ];
10
+ const PAGE_SCROLL_VALUES = ["content", "page"];
11
+ const PAGE_HEIGHT_VALUES = ["auto", "fix"];
12
+ const PAGE_APPEARANCES = ["flat", "border-rail"];
13
+ const PAGE_FILTER_PLACEMENTS = ["stacked", "side"];
14
+ const PAGE_DEFAULT_VARIANT = "stacked";
15
+ const PAGE_DEFAULT_SIDE_POSITION = "left";
16
+ const PAGE_DEFAULT_SIDE_MODE = "sticky";
17
+ const PAGE_DEFAULT_SCROLL = "content";
18
+ const PAGE_DEFAULT_HEIGHT = "auto";
19
+ const PAGE_DEFAULT_APPEARANCE = "flat";
20
+ const PAGE_DEFAULT_SIDE_WIDTH = "16rem";
21
+ const PAGE_DEFAULT_FILTER_PLACEMENT = "stacked";
22
+ const PAGE_DEFAULT_FILTER_MODE = "sticky";
23
+ const PAGE_DEFAULT_FILTER_POSITION = "left";
24
+ const PAGE_DEFAULT_FILTER_WIDTH = "18rem";
28
25
  function isUiPageVariant(value) {
29
- return value !== null && PAGE_VARIANTS.includes(value);
26
+ return value !== null && PAGE_VARIANTS.includes(value);
30
27
  }
31
28
  function isUiPageSidePosition(value) {
32
- return value !== null && PAGE_SIDE_POSITIONS.includes(value);
29
+ return value !== null && PAGE_SIDE_POSITIONS.includes(value);
33
30
  }
34
31
  function isUiPageSideMode(value) {
35
- return value !== null && PAGE_SIDE_MODES.includes(value);
32
+ return value !== null && PAGE_SIDE_MODES.includes(value);
36
33
  }
37
34
  function isUiPageScroll(value) {
38
- return value !== null && PAGE_SCROLL_VALUES.includes(value);
35
+ return value !== null && PAGE_SCROLL_VALUES.includes(value);
39
36
  }
40
37
  function isUiPageHeight(value) {
41
- return value !== null && PAGE_HEIGHT_VALUES.includes(value);
38
+ return value !== null && PAGE_HEIGHT_VALUES.includes(value);
42
39
  }
43
40
  function isUiPageAppearance(value) {
44
- return value !== null && PAGE_APPEARANCES.includes(value);
41
+ return value !== null && PAGE_APPEARANCES.includes(value);
45
42
  }
46
43
  function isUiPageFilterPlacement(value) {
47
- return value !== null && PAGE_FILTER_PLACEMENTS.includes(value);
44
+ return value !== null && PAGE_FILTER_PLACEMENTS.includes(value);
48
45
  }
49
-
50
- class PageStateService {
51
- variantState = signal(PAGE_DEFAULT_VARIANT, /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "variantState" }] : /* istanbul ignore next */ []));
53
- heightState = signal(PAGE_DEFAULT_HEIGHT, /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "heightState" }] : /* istanbul ignore next */ []));
55
- scrollState = signal(PAGE_DEFAULT_SCROLL, /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "scrollState" }] : /* istanbul ignore next */ []));
57
- appearanceState = signal(PAGE_DEFAULT_APPEARANCE, /* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "appearanceState" }] : /* istanbul ignore next */ []));
59
- positionState = signal(PAGE_DEFAULT_SIDE_POSITION, /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "positionState" }] : /* istanbul ignore next */ []));
61
- sideModeState = signal(PAGE_DEFAULT_SIDE_MODE, /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "sideModeState" }] : /* istanbul ignore next */ []));
63
- internalSideOpenState = signal(false, /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "internalSideOpenState" }] : /* istanbul ignore next */ []));
65
- controlledSideOpenState = signal(null, /* @ts-ignore */
66
- ...(ngDevMode ? [{ debugName: "controlledSideOpenState" }] : /* istanbul ignore next */ []));
67
- sideWidthState = signal(PAGE_DEFAULT_SIDE_WIDTH, /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "sideWidthState" }] : /* istanbul ignore next */ []));
69
- sideIdState = signal(null, /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "sideIdState" }] : /* istanbul ignore next */ []));
71
- sideOpenRequestState = signal(null, /* @ts-ignore */
72
- ...(ngDevMode ? [{ debugName: "sideOpenRequestState" }] : /* istanbul ignore next */ []));
73
- sideOpenRequestVersionState = signal(0, /* @ts-ignore */
74
- ...(ngDevMode ? [{ debugName: "sideOpenRequestVersionState" }] : /* istanbul ignore next */ []));
75
- sideReturnFocus = null;
76
- /** Aktif saat apps-launcher mengambang di atas `PageHeader`; header memesan ruang kanan agar isinya tidak tertimpa. */
77
- appsLauncherReserveState = signal(false, /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "appsLauncherReserveState" }] : /* istanbul ignore next */ []));
79
- // Filter state — paralel dengan side state agar `PageFilter` punya open/close sendiri yang independen.
80
- filterPlacementState = signal(PAGE_DEFAULT_FILTER_PLACEMENT, /* @ts-ignore */
81
- ...(ngDevMode ? [{ debugName: "filterPlacementState" }] : /* istanbul ignore next */ []));
82
- filterModeState = signal(PAGE_DEFAULT_FILTER_MODE, /* @ts-ignore */
83
- ...(ngDevMode ? [{ debugName: "filterModeState" }] : /* istanbul ignore next */ []));
84
- filterPositionState = signal(PAGE_DEFAULT_FILTER_POSITION, /* @ts-ignore */
85
- ...(ngDevMode ? [{ debugName: "filterPositionState" }] : /* istanbul ignore next */ []));
86
- filterWidthState = signal(PAGE_DEFAULT_FILTER_WIDTH, /* @ts-ignore */
87
- ...(ngDevMode ? [{ debugName: "filterWidthState" }] : /* istanbul ignore next */ []));
88
- filterIdState = signal(null, /* @ts-ignore */
89
- ...(ngDevMode ? [{ debugName: "filterIdState" }] : /* istanbul ignore next */ []));
90
- internalFilterOpenState = signal(false, /* @ts-ignore */
91
- ...(ngDevMode ? [{ debugName: "internalFilterOpenState" }] : /* istanbul ignore next */ []));
92
- controlledFilterOpenState = signal(null, /* @ts-ignore */
93
- ...(ngDevMode ? [{ debugName: "controlledFilterOpenState" }] : /* istanbul ignore next */ []));
94
- filterOpenRequestState = signal(null, /* @ts-ignore */
95
- ...(ngDevMode ? [{ debugName: "filterOpenRequestState" }] : /* istanbul ignore next */ []));
96
- filterOpenRequestVersionState = signal(0, /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "filterOpenRequestVersionState" }] : /* istanbul ignore next */ []));
98
- filterReturnFocus = null;
99
- variant = this.variantState.asReadonly();
100
- height = this.heightState.asReadonly();
101
- scroll = this.scrollState.asReadonly();
102
- appearance = this.appearanceState.asReadonly();
103
- position = this.positionState.asReadonly();
104
- sideMode = this.sideModeState.asReadonly();
105
- sideWidth = this.sideWidthState.asReadonly();
106
- sideId = this.sideIdState.asReadonly();
107
- sideOpenRequest = this.sideOpenRequestState.asReadonly();
108
- sideOpenRequestVersion = this.sideOpenRequestVersionState.asReadonly();
109
- appsLauncherReserve = this.appsLauncherReserveState.asReadonly();
110
- sideOpen = computed(() => this.controlledSideOpenState() ?? this.internalSideOpenState(), /* @ts-ignore */
111
- ...(ngDevMode ? [{ debugName: "sideOpen" }] : /* istanbul ignore next */ []));
112
- isSideInteractive = computed(() => this.sideMode() === 'drawer' || this.sideMode() === 'overlay', /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "isSideInteractive" }] : /* istanbul ignore next */ []));
114
- isSideVisible = computed(() => this.sideMode() === 'sticky' || this.sideOpen(), /* @ts-ignore */
115
- ...(ngDevMode ? [{ debugName: "isSideVisible" }] : /* istanbul ignore next */ []));
116
- filterPlacement = this.filterPlacementState.asReadonly();
117
- filterMode = this.filterModeState.asReadonly();
118
- filterPosition = this.filterPositionState.asReadonly();
119
- filterWidth = this.filterWidthState.asReadonly();
120
- filterId = this.filterIdState.asReadonly();
121
- filterOpenRequest = this.filterOpenRequestState.asReadonly();
122
- filterOpenRequestVersion = this.filterOpenRequestVersionState.asReadonly();
123
- filterOpen = computed(() => this.controlledFilterOpenState() ?? this.internalFilterOpenState(), /* @ts-ignore */
124
- ...(ngDevMode ? [{ debugName: "filterOpen" }] : /* istanbul ignore next */ []));
125
- isFilterInteractive = computed(() => this.filterMode() === 'drawer' || this.filterMode() === 'overlay', /* @ts-ignore */
126
- ...(ngDevMode ? [{ debugName: "isFilterInteractive" }] : /* istanbul ignore next */ []));
127
- isFilterVisible = computed(() => this.filterMode() === 'sticky' || this.filterOpen(), /* @ts-ignore */
128
- ...(ngDevMode ? [{ debugName: "isFilterVisible" }] : /* istanbul ignore next */ []));
129
- registerRoot(config) {
130
- this.variantState.set(config.variant);
131
- this.heightState.set(config.height);
132
- this.scrollState.set(config.scroll);
133
- this.appearanceState.set(config.appearance);
134
- this.positionState.set(config.position);
135
- this.sideModeState.set(config.sideMode);
136
- this.sideWidthState.set(config.sideWidth);
137
- }
138
- registerSide(config) {
139
- this.sideModeState.set(config.mode);
140
- this.positionState.set(config.position);
141
- this.sideWidthState.set(config.width);
142
- this.sideIdState.set(config.id);
143
- }
144
- setAppsLauncherReserve(reserve) {
145
- this.appsLauncherReserveState.set(reserve);
146
- }
147
- setControlledSideOpen(open) {
148
- this.controlledSideOpenState.set(open);
149
- if (open !== null) {
150
- this.internalSideOpenState.set(open);
151
- }
152
- }
153
- setSideOpen(open) {
154
- this.internalSideOpenState.set(open);
155
- }
156
- openSide() {
157
- return this.requestSideOpenChange(true);
158
- }
159
- closeSide() {
160
- return this.requestSideOpenChange(false);
161
- }
162
- toggleSide() {
163
- return this.requestSideOpenChange(!this.sideOpen());
164
- }
165
- /** Stores the concrete trigger before opening so restoration is not browser-timing dependent. */
166
- setSideReturnFocus(element) {
167
- this.sideReturnFocus = element;
168
- }
169
- takeSideReturnFocus() {
170
- const element = this.sideReturnFocus;
171
- this.sideReturnFocus = null;
172
- return element;
173
- }
174
- requestSideOpenChange(open) {
175
- if (this.controlledSideOpenState() === null) {
176
- this.internalSideOpenState.set(open);
177
- }
178
- this.sideOpenRequestState.set(open);
179
- this.sideOpenRequestVersionState.update((version) => version + 1);
180
- return open;
181
- }
182
- registerFilter(config) {
183
- this.filterPlacementState.set(config.placement);
184
- this.filterModeState.set(config.mode);
185
- this.filterPositionState.set(config.position);
186
- this.filterWidthState.set(config.width);
187
- this.filterIdState.set(config.id);
188
- }
189
- setControlledFilterOpen(open) {
190
- this.controlledFilterOpenState.set(open);
191
- if (open !== null) {
192
- this.internalFilterOpenState.set(open);
193
- }
194
- }
195
- setFilterOpen(open) {
196
- this.internalFilterOpenState.set(open);
197
- }
198
- openFilter() {
199
- return this.requestFilterOpenChange(true);
200
- }
201
- closeFilter() {
202
- return this.requestFilterOpenChange(false);
203
- }
204
- toggleFilter() {
205
- return this.requestFilterOpenChange(!this.filterOpen());
206
- }
207
- /** Mirrors side focus ownership for filter drawer/overlay triggers. */
208
- setFilterReturnFocus(element) {
209
- this.filterReturnFocus = element;
210
- }
211
- takeFilterReturnFocus() {
212
- const element = this.filterReturnFocus;
213
- this.filterReturnFocus = null;
214
- return element;
215
- }
216
- requestFilterOpenChange(open) {
217
- if (this.controlledFilterOpenState() === null) {
218
- this.internalFilterOpenState.set(open);
219
- }
220
- this.filterOpenRequestState.set(open);
221
- this.filterOpenRequestVersionState.update((version) => version + 1);
222
- return open;
223
- }
224
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
225
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: PageStateService, autoProvided: false });
226
- }
227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: PageStateService, decorators: [{
228
- type: Service,
229
- args: [{ autoProvided: false }]
230
- }] });
231
-
46
+ var PageStateService = class PageStateService {
47
+ variantState = signal(PAGE_DEFAULT_VARIANT, ...ngDevMode ? [{ debugName: "variantState" }] : /* istanbul ignore next */ []);
48
+ heightState = signal(PAGE_DEFAULT_HEIGHT, ...ngDevMode ? [{ debugName: "heightState" }] : /* istanbul ignore next */ []);
49
+ scrollState = signal(PAGE_DEFAULT_SCROLL, ...ngDevMode ? [{ debugName: "scrollState" }] : /* istanbul ignore next */ []);
50
+ appearanceState = signal(PAGE_DEFAULT_APPEARANCE, ...ngDevMode ? [{ debugName: "appearanceState" }] : /* istanbul ignore next */ []);
51
+ positionState = signal(PAGE_DEFAULT_SIDE_POSITION, ...ngDevMode ? [{ debugName: "positionState" }] : /* istanbul ignore next */ []);
52
+ sideModeState = signal(PAGE_DEFAULT_SIDE_MODE, ...ngDevMode ? [{ debugName: "sideModeState" }] : /* istanbul ignore next */ []);
53
+ internalSideOpenState = signal(false, ...ngDevMode ? [{ debugName: "internalSideOpenState" }] : /* istanbul ignore next */ []);
54
+ controlledSideOpenState = signal(null, ...ngDevMode ? [{ debugName: "controlledSideOpenState" }] : /* istanbul ignore next */ []);
55
+ sideWidthState = signal(PAGE_DEFAULT_SIDE_WIDTH, ...ngDevMode ? [{ debugName: "sideWidthState" }] : /* istanbul ignore next */ []);
56
+ sideIdState = signal(null, ...ngDevMode ? [{ debugName: "sideIdState" }] : /* istanbul ignore next */ []);
57
+ sideOpenRequestState = signal(null, ...ngDevMode ? [{ debugName: "sideOpenRequestState" }] : /* istanbul ignore next */ []);
58
+ sideOpenRequestVersionState = signal(0, ...ngDevMode ? [{ debugName: "sideOpenRequestVersionState" }] : /* istanbul ignore next */ []);
59
+ sideReturnFocus = null;
60
+ appsLauncherReserveState = signal(false, ...ngDevMode ? [{ debugName: "appsLauncherReserveState" }] : /* istanbul ignore next */ []);
61
+ filterPlacementState = signal(PAGE_DEFAULT_FILTER_PLACEMENT, ...ngDevMode ? [{ debugName: "filterPlacementState" }] : /* istanbul ignore next */ []);
62
+ filterModeState = signal(PAGE_DEFAULT_FILTER_MODE, ...ngDevMode ? [{ debugName: "filterModeState" }] : /* istanbul ignore next */ []);
63
+ filterPositionState = signal(PAGE_DEFAULT_FILTER_POSITION, ...ngDevMode ? [{ debugName: "filterPositionState" }] : /* istanbul ignore next */ []);
64
+ filterWidthState = signal(PAGE_DEFAULT_FILTER_WIDTH, ...ngDevMode ? [{ debugName: "filterWidthState" }] : /* istanbul ignore next */ []);
65
+ filterIdState = signal(null, ...ngDevMode ? [{ debugName: "filterIdState" }] : /* istanbul ignore next */ []);
66
+ internalFilterOpenState = signal(false, ...ngDevMode ? [{ debugName: "internalFilterOpenState" }] : /* istanbul ignore next */ []);
67
+ controlledFilterOpenState = signal(null, ...ngDevMode ? [{ debugName: "controlledFilterOpenState" }] : /* istanbul ignore next */ []);
68
+ filterOpenRequestState = signal(null, ...ngDevMode ? [{ debugName: "filterOpenRequestState" }] : /* istanbul ignore next */ []);
69
+ filterOpenRequestVersionState = signal(0, ...ngDevMode ? [{ debugName: "filterOpenRequestVersionState" }] : /* istanbul ignore next */ []);
70
+ filterReturnFocus = null;
71
+ variant = this.variantState.asReadonly();
72
+ height = this.heightState.asReadonly();
73
+ scroll = this.scrollState.asReadonly();
74
+ appearance = this.appearanceState.asReadonly();
75
+ position = this.positionState.asReadonly();
76
+ sideMode = this.sideModeState.asReadonly();
77
+ sideWidth = this.sideWidthState.asReadonly();
78
+ sideId = this.sideIdState.asReadonly();
79
+ sideOpenRequest = this.sideOpenRequestState.asReadonly();
80
+ sideOpenRequestVersion = this.sideOpenRequestVersionState.asReadonly();
81
+ appsLauncherReserve = this.appsLauncherReserveState.asReadonly();
82
+ sideOpen = computed(() => this.controlledSideOpenState() ?? this.internalSideOpenState(), ...ngDevMode ? [{ debugName: "sideOpen" }] : /* istanbul ignore next */ []);
83
+ isSideInteractive = computed(() => this.sideMode() === "drawer" || this.sideMode() === "overlay", ...ngDevMode ? [{ debugName: "isSideInteractive" }] : /* istanbul ignore next */ []);
84
+ isSideVisible = computed(() => this.sideMode() === "sticky" || this.sideOpen(), ...ngDevMode ? [{ debugName: "isSideVisible" }] : /* istanbul ignore next */ []);
85
+ filterPlacement = this.filterPlacementState.asReadonly();
86
+ filterMode = this.filterModeState.asReadonly();
87
+ filterPosition = this.filterPositionState.asReadonly();
88
+ filterWidth = this.filterWidthState.asReadonly();
89
+ filterId = this.filterIdState.asReadonly();
90
+ filterOpenRequest = this.filterOpenRequestState.asReadonly();
91
+ filterOpenRequestVersion = this.filterOpenRequestVersionState.asReadonly();
92
+ filterOpen = computed(() => this.controlledFilterOpenState() ?? this.internalFilterOpenState(), ...ngDevMode ? [{ debugName: "filterOpen" }] : /* istanbul ignore next */ []);
93
+ isFilterInteractive = computed(() => this.filterMode() === "drawer" || this.filterMode() === "overlay", ...ngDevMode ? [{ debugName: "isFilterInteractive" }] : /* istanbul ignore next */ []);
94
+ isFilterVisible = computed(() => this.filterMode() === "sticky" || this.filterOpen(), ...ngDevMode ? [{ debugName: "isFilterVisible" }] : /* istanbul ignore next */ []);
95
+ registerRoot(config) {
96
+ this.variantState.set(config.variant);
97
+ this.heightState.set(config.height);
98
+ this.scrollState.set(config.scroll);
99
+ this.appearanceState.set(config.appearance);
100
+ this.positionState.set(config.position);
101
+ this.sideModeState.set(config.sideMode);
102
+ this.sideWidthState.set(config.sideWidth);
103
+ }
104
+ registerSide(config) {
105
+ this.sideModeState.set(config.mode);
106
+ this.positionState.set(config.position);
107
+ this.sideWidthState.set(config.width);
108
+ this.sideIdState.set(config.id);
109
+ }
110
+ setAppsLauncherReserve(reserve) {
111
+ this.appsLauncherReserveState.set(reserve);
112
+ }
113
+ setControlledSideOpen(open) {
114
+ this.controlledSideOpenState.set(open);
115
+ if (open !== null) this.internalSideOpenState.set(open);
116
+ }
117
+ setSideOpen(open) {
118
+ this.internalSideOpenState.set(open);
119
+ }
120
+ openSide() {
121
+ return this.requestSideOpenChange(true);
122
+ }
123
+ closeSide() {
124
+ return this.requestSideOpenChange(false);
125
+ }
126
+ toggleSide() {
127
+ return this.requestSideOpenChange(!this.sideOpen());
128
+ }
129
+ setSideReturnFocus(element) {
130
+ this.sideReturnFocus = element;
131
+ }
132
+ takeSideReturnFocus() {
133
+ const element = this.sideReturnFocus;
134
+ this.sideReturnFocus = null;
135
+ return element;
136
+ }
137
+ requestSideOpenChange(open) {
138
+ if (this.controlledSideOpenState() === null) this.internalSideOpenState.set(open);
139
+ this.sideOpenRequestState.set(open);
140
+ this.sideOpenRequestVersionState.update((version) => version + 1);
141
+ return open;
142
+ }
143
+ registerFilter(config) {
144
+ this.filterPlacementState.set(config.placement);
145
+ this.filterModeState.set(config.mode);
146
+ this.filterPositionState.set(config.position);
147
+ this.filterWidthState.set(config.width);
148
+ this.filterIdState.set(config.id);
149
+ }
150
+ setControlledFilterOpen(open) {
151
+ this.controlledFilterOpenState.set(open);
152
+ if (open !== null) this.internalFilterOpenState.set(open);
153
+ }
154
+ setFilterOpen(open) {
155
+ this.internalFilterOpenState.set(open);
156
+ }
157
+ openFilter() {
158
+ return this.requestFilterOpenChange(true);
159
+ }
160
+ closeFilter() {
161
+ return this.requestFilterOpenChange(false);
162
+ }
163
+ toggleFilter() {
164
+ return this.requestFilterOpenChange(!this.filterOpen());
165
+ }
166
+ setFilterReturnFocus(element) {
167
+ this.filterReturnFocus = element;
168
+ }
169
+ takeFilterReturnFocus() {
170
+ const element = this.filterReturnFocus;
171
+ this.filterReturnFocus = null;
172
+ return element;
173
+ }
174
+ requestFilterOpenChange(open) {
175
+ if (this.controlledFilterOpenState() === null) this.internalFilterOpenState.set(open);
176
+ this.filterOpenRequestState.set(open);
177
+ this.filterOpenRequestVersionState.update((version) => version + 1);
178
+ return open;
179
+ }
180
+ static ɵfac = i0.ɵɵngDeclareFactory({
181
+ minVersion: "12.0.0",
182
+ version: "22.2.2",
183
+ ngImport: i0,
184
+ type: PageStateService,
185
+ deps: [],
186
+ target: i0.ɵɵFactoryTarget.Service
187
+ });
188
+ static ɵprov = i0.ɵɵngDeclareService({
189
+ minVersion: "22.0.0",
190
+ version: "22.2.2",
191
+ ngImport: i0,
192
+ type: PageStateService,
193
+ autoProvided: false
194
+ });
195
+ };
196
+ i0.ɵɵngDeclareClassMetadata({
197
+ minVersion: "12.0.0",
198
+ version: "22.2.2",
199
+ ngImport: i0,
200
+ type: PageStateService,
201
+ decorators: [{
202
+ type: Service,
203
+ args: [{ autoProvided: false }]
204
+ }]
205
+ });
232
206
  const FOCUSABLE_SELECTOR = [
233
- 'a[href]',
234
- 'button:not([disabled])',
235
- 'input:not([disabled])',
236
- 'select:not([disabled])',
237
- 'textarea:not([disabled])',
238
- '[tabindex]:not([tabindex="-1"])',
239
- ].join(',');
240
- const inertLocks = new WeakMap();
241
- const scrollLocks = new WeakMap();
242
- /**
243
- * Accessibility management for the Page panels.
244
- *
245
- * A drawer only gets initial focus and focus restoration. An overlay is a modal dialog:
246
- * focus is trapped, the background is made inert, and document scrolling is locked until
247
- * the panel closes. Must be called from an injection context, because it uses `effect`.
248
- */
249
- /** @internal */
207
+ "a[href]",
208
+ "button:not([disabled])",
209
+ "input:not([disabled])",
210
+ "select:not([disabled])",
211
+ "textarea:not([disabled])",
212
+ "[tabindex]:not([tabindex=\"-1\"])"
213
+ ].join(",");
214
+ const inertLocks = /* @__PURE__ */ new WeakMap();
215
+ const scrollLocks = /* @__PURE__ */ new WeakMap();
250
216
  function ɵsetupOverlayFocusManagement(config) {
251
- effect((onCleanup) => {
252
- if (!config.isInteractive() || !config.isOpen()) {
253
- return;
254
- }
255
- const document = config.document;
256
- const view = document?.defaultView;
257
- if (!document || !view) {
258
- return;
259
- }
260
- const returnFocus = config.takeReturnFocus?.() ?? document.activeElement;
261
- const modal = config.isModal();
262
- const inertSnapshots = modal ? makeBackgroundInert(config.host) : [];
263
- if (modal) {
264
- lockDocumentScroll(document);
265
- }
266
- const handleKeydown = (event) => {
267
- if (!modal || event.key !== 'Tab') {
268
- return;
269
- }
270
- const focusable = getFocusableElements(config.host);
271
- if (focusable.length === 0) {
272
- event.preventDefault();
273
- config.host.focus();
274
- return;
275
- }
276
- const active = document.activeElement;
277
- const first = focusable[0];
278
- const last = focusable.at(-1);
279
- const activeIndex = focusable.indexOf(active);
280
- if (event.shiftKey && activeIndex <= 0) {
281
- event.preventDefault();
282
- last.focus();
283
- }
284
- else if (!event.shiftKey && (activeIndex === -1 || active === last)) {
285
- event.preventDefault();
286
- first.focus();
287
- }
288
- };
289
- config.host.addEventListener('keydown', handleKeydown);
290
- const animationFrame = view.requestAnimationFrame(() => {
291
- const initial = config.host.querySelector('[data-page-initial-focus], [autofocus]') ??
292
- getFocusableElements(config.host)[0] ??
293
- config.host;
294
- initial.focus();
295
- });
296
- onCleanup(() => {
297
- view.cancelAnimationFrame(animationFrame);
298
- config.host.removeEventListener('keydown', handleKeydown);
299
- restoreBackground(inertSnapshots);
300
- if (modal) {
301
- unlockDocumentScroll(document);
302
- }
303
- if (returnFocus?.isConnected && typeof returnFocus.focus === 'function') {
304
- view.requestAnimationFrame(() => returnFocus.focus());
305
- }
306
- });
307
- });
217
+ effect((onCleanup) => {
218
+ if (!config.isInteractive() || !config.isOpen()) return;
219
+ const document = config.document;
220
+ const view = document?.defaultView;
221
+ if (!document || !view) return;
222
+ const returnFocus = config.takeReturnFocus?.() ?? document.activeElement;
223
+ const modal = config.isModal();
224
+ const inertSnapshots = modal ? makeBackgroundInert(config.host) : [];
225
+ if (modal) lockDocumentScroll(document);
226
+ const handleKeydown = (event) => {
227
+ if (!modal || event.key !== "Tab") return;
228
+ const focusable = getFocusableElements(config.host);
229
+ if (focusable.length === 0) {
230
+ event.preventDefault();
231
+ config.host.focus();
232
+ return;
233
+ }
234
+ const active = document.activeElement;
235
+ const first = focusable[0];
236
+ const last = focusable.at(-1);
237
+ const activeIndex = focusable.indexOf(active);
238
+ if (event.shiftKey && activeIndex <= 0) {
239
+ event.preventDefault();
240
+ last.focus();
241
+ } else if (!event.shiftKey && (activeIndex === -1 || active === last)) {
242
+ event.preventDefault();
243
+ first.focus();
244
+ }
245
+ };
246
+ config.host.addEventListener("keydown", handleKeydown);
247
+ const animationFrame = view.requestAnimationFrame(() => {
248
+ (config.host.querySelector("[data-page-initial-focus], [autofocus]") ?? getFocusableElements(config.host)[0] ?? config.host).focus();
249
+ });
250
+ onCleanup(() => {
251
+ view.cancelAnimationFrame(animationFrame);
252
+ config.host.removeEventListener("keydown", handleKeydown);
253
+ restoreBackground(inertSnapshots);
254
+ if (modal) unlockDocumentScroll(document);
255
+ if (returnFocus?.isConnected && typeof returnFocus.focus === "function") view.requestAnimationFrame(() => returnFocus.focus());
256
+ });
257
+ });
308
258
  }
309
259
  function getFocusableElements(host) {
310
- return Array.from(host.querySelectorAll(FOCUSABLE_SELECTOR)).filter((element) => !element.hidden && !element.inert && element.getAttribute('aria-hidden') !== 'true');
260
+ return Array.from(host.querySelectorAll(FOCUSABLE_SELECTOR)).filter((element) => !element.hidden && !element.inert && element.getAttribute("aria-hidden") !== "true");
311
261
  }
312
- /** Make every sibling along the panel → Page host path inert, without killing backdrop dismiss. */
313
262
  function makeBackgroundInert(host) {
314
- const snapshots = [];
315
- const pageRoot = host.closest('Page');
316
- if (!pageRoot) {
317
- return snapshots;
318
- }
319
- let branch = host;
320
- let parent = branch.parentElement;
321
- while (parent) {
322
- for (const sibling of Array.from(parent.children)) {
323
- if (sibling === branch ||
324
- !(sibling instanceof HTMLElement) ||
325
- sibling.hasAttribute('data-page-overlay-backdrop')) {
326
- continue;
327
- }
328
- const lock = inertLocks.get(sibling);
329
- if (lock) {
330
- lock.count += 1;
331
- }
332
- else {
333
- inertLocks.set(sibling, { count: 1, initial: sibling.inert === true });
334
- }
335
- snapshots.push({ element: sibling });
336
- sibling.inert = true;
337
- }
338
- if (parent === pageRoot) {
339
- break;
340
- }
341
- branch = parent;
342
- parent = parent.parentElement;
343
- }
344
- return snapshots;
263
+ const snapshots = [];
264
+ const pageRoot = host.closest("Page");
265
+ if (!pageRoot) return snapshots;
266
+ let branch = host;
267
+ let parent = branch.parentElement;
268
+ while (parent) {
269
+ for (const sibling of Array.from(parent.children)) {
270
+ if (sibling === branch || !(sibling instanceof HTMLElement) || sibling.hasAttribute("data-page-overlay-backdrop")) continue;
271
+ const lock = inertLocks.get(sibling);
272
+ if (lock) lock.count += 1;
273
+ else inertLocks.set(sibling, {
274
+ count: 1,
275
+ initial: sibling.inert === true
276
+ });
277
+ snapshots.push({ element: sibling });
278
+ sibling.inert = true;
279
+ }
280
+ if (parent === pageRoot) break;
281
+ branch = parent;
282
+ parent = parent.parentElement;
283
+ }
284
+ return snapshots;
345
285
  }
346
286
  function restoreBackground(snapshots) {
347
- for (const snapshot of snapshots) {
348
- const lock = inertLocks.get(snapshot.element);
349
- if (!lock) {
350
- continue;
351
- }
352
- lock.count -= 1;
353
- if (lock.count === 0) {
354
- snapshot.element.inert = lock.initial;
355
- inertLocks.delete(snapshot.element);
356
- }
357
- }
287
+ for (const snapshot of snapshots) {
288
+ const lock = inertLocks.get(snapshot.element);
289
+ if (!lock) continue;
290
+ lock.count -= 1;
291
+ if (lock.count === 0) {
292
+ snapshot.element.inert = lock.initial;
293
+ inertLocks.delete(snapshot.element);
294
+ }
295
+ }
358
296
  }
359
297
  function lockDocumentScroll(document) {
360
- const lock = scrollLocks.get(document);
361
- if (lock) {
362
- lock.count += 1;
363
- }
364
- else {
365
- scrollLocks.set(document, { count: 1, initialOverflow: document.body.style.overflow });
366
- }
367
- document.body.style.overflow = 'hidden';
298
+ const lock = scrollLocks.get(document);
299
+ if (lock) lock.count += 1;
300
+ else scrollLocks.set(document, {
301
+ count: 1,
302
+ initialOverflow: document.body.style.overflow
303
+ });
304
+ document.body.style.overflow = "hidden";
368
305
  }
369
306
  function unlockDocumentScroll(document) {
370
- const lock = scrollLocks.get(document);
371
- if (!lock) {
372
- return;
373
- }
374
- lock.count -= 1;
375
- if (lock.count === 0) {
376
- document.body.style.overflow = lock.initialOverflow;
377
- scrollLocks.delete(document);
378
- }
307
+ const lock = scrollLocks.get(document);
308
+ if (!lock) return;
309
+ lock.count -= 1;
310
+ if (lock.count === 0) {
311
+ document.body.style.overflow = lock.initialOverflow;
312
+ scrollLocks.delete(document);
313
+ }
379
314
  }
380
-
381
- /**
382
- * Generated bundle index. Do not edit.
383
- */
384
-
385
- export { PAGE_APPEARANCES, PAGE_DEFAULT_APPEARANCE, PAGE_DEFAULT_FILTER_MODE, PAGE_DEFAULT_FILTER_PLACEMENT, PAGE_DEFAULT_FILTER_POSITION, PAGE_DEFAULT_FILTER_WIDTH, PAGE_DEFAULT_HEIGHT, PAGE_DEFAULT_SCROLL, PAGE_DEFAULT_SIDE_MODE, PAGE_DEFAULT_SIDE_POSITION, PAGE_DEFAULT_SIDE_WIDTH, PAGE_DEFAULT_VARIANT, PAGE_FILTER_PLACEMENTS, PAGE_HEIGHT_VALUES, PAGE_SCROLL_VALUES, PAGE_SIDE_MODES, PAGE_SIDE_POSITIONS, PAGE_VARIANTS, PageStateService, isUiPageAppearance, isUiPageFilterPlacement, isUiPageHeight, isUiPageScroll, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant, ɵsetupOverlayFocusManagement };
315
+ export { PAGE_APPEARANCES, PAGE_DEFAULT_APPEARANCE, PAGE_DEFAULT_FILTER_MODE, PAGE_DEFAULT_FILTER_PLACEMENT, PAGE_DEFAULT_FILTER_POSITION, PAGE_DEFAULT_FILTER_WIDTH, PAGE_DEFAULT_HEIGHT, PAGE_DEFAULT_SCROLL, PAGE_DEFAULT_SIDE_MODE, PAGE_DEFAULT_SIDE_POSITION, PAGE_DEFAULT_SIDE_WIDTH, PAGE_DEFAULT_VARIANT, PAGE_FILTER_PLACEMENTS, PAGE_HEIGHT_VALUES, PAGE_SCROLL_VALUES, PAGE_SIDE_MODES, PAGE_SIDE_POSITIONS, PAGE_VARIANTS, PageStateService, isUiPageAppearance, isUiPageFilterPlacement, isUiPageHeight, isUiPageScroll, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant, ɵsetupOverlayFocusManagement };