@ojiepermana/angular 21.3.3 → 22.0.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.
- package/README.md +10 -6
- package/component/accordion/README.md +195 -0
- package/component/alert/README.md +182 -0
- package/component/alert-dialog/README.md +239 -0
- package/component/aspect-ratio/README.md +112 -0
- package/component/avatar/README.md +176 -0
- package/component/badge/README.md +133 -0
- package/component/breadcrumb/README.md +216 -0
- package/component/button/README.md +139 -0
- package/component/button-group/README.md +208 -0
- package/component/calendar/README.md +132 -0
- package/component/card/README.md +220 -0
- package/component/carousel/README.md +276 -0
- package/component/checkbox/README.md +149 -0
- package/component/collapsible/README.md +195 -0
- package/component/combobox/README.md +198 -0
- package/component/command/README.md +275 -0
- package/component/composer/README.md +235 -0
- package/component/composer/package.json +4 -0
- package/component/context-menu/README.md +267 -0
- package/component/date-picker/README.md +177 -0
- package/component/dialog/README.md +237 -0
- package/component/drawer/README.md +145 -0
- package/component/dropdown-menu/README.md +311 -0
- package/component/editor/README.md +136 -0
- package/component/editor/package.json +4 -0
- package/component/empty/README.md +183 -0
- package/component/empty/package.json +4 -0
- package/component/form/README.md +210 -0
- package/component/hover-card/README.md +146 -0
- package/component/hover-card/package.json +4 -0
- package/component/input/README.md +159 -0
- package/component/input-group/README.md +239 -0
- package/component/input-otp/README.md +278 -0
- package/component/input-otp/package.json +4 -0
- package/component/item/README.md +247 -0
- package/component/kanban/README.md +81 -0
- package/component/kanban/package.json +4 -0
- package/component/kbd/README.md +139 -0
- package/component/kbd/package.json +4 -0
- package/component/label/README.md +136 -0
- package/component/menubar/README.md +269 -0
- package/component/menubar/package.json +4 -0
- package/component/native-select/README.md +176 -0
- package/component/native-select/package.json +4 -0
- package/component/navigation-menu/README.md +160 -0
- package/component/navigation-menu/package.json +4 -0
- package/component/pagination/README.md +144 -0
- package/component/pillbox/README.md +67 -0
- package/component/pillbox/package.json +4 -0
- package/component/popover/README.md +43 -0
- package/component/progress/README.md +160 -0
- package/component/radio/README.md +209 -0
- package/component/resizable/README.md +168 -0
- package/component/resizable/package.json +4 -0
- package/component/scroll-area/README.md +143 -0
- package/component/select/README.md +174 -0
- package/component/separator/README.md +170 -0
- package/component/sheet/README.md +183 -0
- package/component/skeleton/README.md +158 -0
- package/component/slider/README.md +207 -0
- package/component/spinner/README.md +160 -0
- package/component/spinner/package.json +4 -0
- package/component/switch/README.md +166 -0
- package/component/table/README.md +291 -0
- package/component/tabs/README.md +219 -0
- package/component/textarea/README.md +154 -0
- package/component/timeline/README.md +94 -0
- package/component/timeline/package.json +4 -0
- package/component/toast/README.md +321 -0
- package/component/toggle/README.md +131 -0
- package/component/toggle/package.json +4 -0
- package/component/toggle-group/README.md +206 -0
- package/component/toggle-group/package.json +4 -0
- package/component/tooltip/README.md +211 -0
- package/fesm2022/ojiepermana-angular-component-accordion.mjs +45 -30
- package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +95 -61
- package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-alert.mjs +30 -21
- package/fesm2022/ojiepermana-angular-component-alert.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +11 -7
- package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-avatar.mjs +50 -34
- package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-badge.mjs +9 -6
- package/fesm2022/ojiepermana-angular-component-badge.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +49 -35
- package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-button-group.mjs +25 -17
- package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-button.mjs +11 -7
- package/fesm2022/ojiepermana-angular-component-button.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-calendar.mjs +23 -13
- package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-card.mjs +51 -36
- package/fesm2022/ojiepermana-angular-component-card.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-carousel.mjs +66 -42
- package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-chart.mjs +494 -283
- package/fesm2022/ojiepermana-angular-component-chart.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-checkbox.mjs +23 -13
- package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-collapsible.mjs +28 -20
- package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-combobox.mjs +27 -18
- package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-command.mjs +77 -52
- package/fesm2022/ojiepermana-angular-component-command.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-composer.mjs +352 -0
- package/fesm2022/ojiepermana-angular-component-composer.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-context-menu.mjs +9 -6
- package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-date-picker.mjs +34 -19
- package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-dialog.mjs +55 -38
- package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +108 -74
- package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-editor.mjs +717 -0
- package/fesm2022/ojiepermana-angular-component-editor.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-empty.mjs +145 -0
- package/fesm2022/ojiepermana-angular-component-empty.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-form.mjs +200 -42
- package/fesm2022/ojiepermana-angular-component-form.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-hover-card.mjs +297 -0
- package/fesm2022/ojiepermana-angular-component-hover-card.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-input-group.mjs +48 -33
- package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-input-otp.mjs +514 -0
- package/fesm2022/ojiepermana-angular-component-input-otp.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-input.mjs +7 -5
- package/fesm2022/ojiepermana-angular-component-input.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-item.mjs +76 -53
- package/fesm2022/ojiepermana-angular-component-item.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-kanban.mjs +314 -0
- package/fesm2022/ojiepermana-angular-component-kanban.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-kbd.mjs +55 -0
- package/fesm2022/ojiepermana-angular-component-kbd.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-label.mjs +9 -6
- package/fesm2022/ojiepermana-angular-component-label.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-menubar.mjs +308 -0
- package/fesm2022/ojiepermana-angular-component-menubar.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-native-select.mjs +67 -0
- package/fesm2022/ojiepermana-angular-component-native-select.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +413 -0
- package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-pagination.mjs +65 -31
- package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-pillbox.mjs +812 -0
- package/fesm2022/ojiepermana-angular-component-pillbox.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-popover.mjs +18 -12
- package/fesm2022/ojiepermana-angular-component-popover.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-progress.mjs +17 -10
- package/fesm2022/ojiepermana-angular-component-progress.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-radio.mjs +47 -17
- package/fesm2022/ojiepermana-angular-component-radio.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-resizable.mjs +481 -0
- package/fesm2022/ojiepermana-angular-component-resizable.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +15 -9
- package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-select.mjs +71 -26
- package/fesm2022/ojiepermana-angular-component-select.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-separator.mjs +11 -7
- package/fesm2022/ojiepermana-angular-component-separator.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-sheet.mjs +91 -42
- package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-skeleton.mjs +7 -5
- package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-slider.mjs +401 -7
- package/fesm2022/ojiepermana-angular-component-slider.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-spinner.mjs +60 -0
- package/fesm2022/ojiepermana-angular-component-spinner.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-switch.mjs +47 -15
- package/fesm2022/ojiepermana-angular-component-switch.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-table.mjs +56 -40
- package/fesm2022/ojiepermana-angular-component-table.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-tabs.mjs +58 -38
- package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-textarea.mjs +8 -6
- package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -0
- package/fesm2022/ojiepermana-angular-component-timeline.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-toast.mjs +28 -4
- package/fesm2022/ojiepermana-angular-component-toast.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +289 -0
- package/fesm2022/ojiepermana-angular-component-toggle-group.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-toggle.mjs +82 -0
- package/fesm2022/ojiepermana-angular-component-toggle.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component-tooltip.mjs +304 -6
- package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component-utils.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-component.mjs +45 -24
- package/fesm2022/ojiepermana-angular-layout-component.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-services.mjs +7 -5
- package/fesm2022/ojiepermana-angular-layout-services.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-shell.mjs +3 -3
- package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +9 -6
- package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout-token.mjs.map +1 -1
- package/fesm2022/{ojiepermana-angular-layout-empty.mjs → ojiepermana-angular-layout-type-empty.mjs} +4 -4
- package/fesm2022/ojiepermana-angular-layout-type-empty.mjs.map +1 -0
- package/fesm2022/{ojiepermana-angular-layout-horizontal.mjs → ojiepermana-angular-layout-type-horizontal.mjs} +26 -17
- package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs.map +1 -0
- package/fesm2022/{ojiepermana-angular-layout-vertical.mjs → ojiepermana-angular-layout-type-vertical.mjs} +28 -18
- package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-layout.mjs +74 -50
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-icon.mjs +11 -7
- package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-item.mjs +27 -16
- package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-service.mjs +29 -20
- package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +71 -43
- package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +261 -24
- package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme-services.mjs +19 -11
- package/fesm2022/ojiepermana-angular-theme-services.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme-token.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme.mjs +19 -11
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
- package/generator/api/README.md +8 -5
- package/generator/api/bin/src/emit/client.js +4 -2
- package/generator/api/bin/src/writer/index.js +47 -5
- package/generator/guide/bin/schematics/build/index.js +3 -2
- package/generator/guide/bin/src/engine/component.js +2 -2
- package/generator/guide/bin/src/engine/index.js +3 -3
- package/generator/guide/bin/src/engine/render.js +10 -5
- package/layout/type/empty/package.json +4 -0
- package/layout/type/horizontal/package.json +4 -0
- package/layout/type/vertical/package.json +4 -0
- package/navigation/topbar/README.md +196 -0
- package/package.json +89 -25
- package/theme/README.md +110 -3
- package/theme/styles/integrations/material/autocomplete.css +178 -0
- package/theme/styles/integrations/material/button.css +468 -0
- package/theme/styles/integrations/material/dialog.css +152 -0
- package/theme/styles/integrations/material/select.css +175 -0
- package/theme/styles/integrations/material/slide-toggle.css +234 -0
- package/theme/styles/integrations/material/slider.css +194 -0
- package/theme/styles/integrations/material/tabs.css +229 -0
- package/theme/styles/integrations/material.css +70 -60
- package/types/ojiepermana-angular-component-combobox.d.ts +1 -2
- package/types/ojiepermana-angular-component-composer.d.ts +90 -0
- package/types/ojiepermana-angular-component-dropdown-menu.d.ts +2 -0
- package/types/ojiepermana-angular-component-editor.d.ts +123 -0
- package/types/ojiepermana-angular-component-empty.d.ts +50 -0
- package/types/ojiepermana-angular-component-form.d.ts +52 -3
- package/types/ojiepermana-angular-component-hover-card.d.ts +74 -0
- package/types/ojiepermana-angular-component-input-otp.d.ts +136 -0
- package/types/ojiepermana-angular-component-kanban.d.ts +70 -0
- package/types/ojiepermana-angular-component-kbd.d.ts +16 -0
- package/types/ojiepermana-angular-component-menubar.d.ts +67 -0
- package/types/ojiepermana-angular-component-native-select.d.ts +26 -0
- package/types/ojiepermana-angular-component-navigation-menu.d.ts +96 -0
- package/types/ojiepermana-angular-component-pagination.d.ts +10 -4
- package/types/ojiepermana-angular-component-pillbox.d.ts +157 -0
- package/types/ojiepermana-angular-component-radio.d.ts +7 -1
- package/types/ojiepermana-angular-component-resizable.d.ts +99 -0
- package/types/ojiepermana-angular-component-select.d.ts +17 -5
- package/types/ojiepermana-angular-component-sheet.d.ts +3 -1
- package/types/ojiepermana-angular-component-slider.d.ts +59 -1
- package/types/ojiepermana-angular-component-spinner.d.ts +13 -0
- package/types/ojiepermana-angular-component-switch.d.ts +13 -3
- package/types/ojiepermana-angular-component-timeline.d.ts +63 -0
- package/types/ojiepermana-angular-component-toast.d.ts +12 -3
- package/types/ojiepermana-angular-component-toggle-group.d.ts +89 -0
- package/types/ojiepermana-angular-component-toggle.d.ts +25 -0
- package/types/ojiepermana-angular-component-tooltip.d.ts +72 -5
- package/types/{ojiepermana-angular-layout-horizontal.d.ts → ojiepermana-angular-layout-type-horizontal.d.ts} +3 -3
- package/types/{ojiepermana-angular-layout-vertical.d.ts → ojiepermana-angular-layout-type-vertical.d.ts} +3 -3
- package/types/ojiepermana-angular-layout.d.ts +5 -5
- package/types/ojiepermana-angular-navigation-item.d.ts +1 -1
- package/types/ojiepermana-angular-navigation-service.d.ts +7 -7
- package/types/ojiepermana-angular-navigation-sidebar.d.ts +8 -8
- package/types/ojiepermana-angular-navigation-topbar.d.ts +24 -4
- package/types/ojiepermana-angular-navigation-types.d.ts +14 -8
- package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +0 -1
- package/layout/empty/package.json +0 -4
- package/layout/horizontal/package.json +0 -4
- package/layout/vertical/package.json +0 -4
- /package/types/{ojiepermana-angular-layout-empty.d.ts → ojiepermana-angular-layout-type-empty.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-navigation-demo-data.mjs","sources":["../../../projects/angular/navigation/demo-data/src/lib/demo-navigation.data.ts","../../../projects/angular/navigation/demo-data/ojiepermana-angular-navigation-demo-data.ts"],"sourcesContent":["import type { NavigationItem } from '@ojiepermana/angular/navigation/types';\n\nexport const DemoNavigationData: NavigationItem[] = [\n {\n id: 'documentation',\n title: 'Documentation',\n subtitle: 'Guides and getting started resources',\n type: 'group',\n icon: 'menu_book',\n children: [\n {\n id: 'documentation-introduction',\n title: 'Introduction',\n type: 'basic',\n icon: 'menu_book',\n link: '/docs/introduction',\n },\n {\n id: 'documentation-installation',\n title: 'Installation',\n type: 'basic',\n icon: 'download',\n link: '/docs/installation',\n },\n {\n id: 'documentation-getting-started',\n title: 'Getting started',\n type: 'basic',\n icon: 'rocket_launch',\n link: '/docs/getting-started',\n },\n {\n id: 'documentation-upgrade-guide',\n title: 'Upgrade Guide',\n type: 'basic',\n icon: 'arrow_circle_up',\n link: '/docs/upgrade-guide',\n },\n {\n id: 'documentation-changelog',\n title: 'Changelog',\n type: 'basic',\n icon: 'history',\n link: '/docs/changelog',\n },\n {\n id: 'documentation-icon-lucide',\n title: 'Lucide Icons',\n type: 'basic',\n icon: 'star',\n link: '/lucide-icons',\n badge: {\n title: 'Demo',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-blue-500 text-white',\n },\n },\n ],\n },\n {\n id: 'user-interface',\n title: 'User Interface',\n subtitle: 'Components and design elements',\n type: 'group',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components',\n title: 'Material Components',\n type: 'collapsable',\n icon: 'deployed_code',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms',\n title: 'Inputs & Forms',\n type: 'collapsable',\n icon: 'input',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms-autocomplete',\n title: 'Autocomplete',\n type: 'basic',\n icon: 'search',\n link: '/ui/material/autocomplete',\n },\n {\n id: 'user-interface-material-components-inputs-forms-checkbox',\n title: 'Checkbox',\n type: 'basic',\n icon: 'check_box',\n link: '/ui/material/checkbox',\n },\n {\n id: 'user-interface-material-components-inputs-forms-datepicker',\n title: 'Datepicker',\n type: 'basic',\n icon: 'calendar_today',\n link: '/ui/material/datepicker',\n },\n {\n id: 'user-interface-material-components-inputs-forms-form-field',\n title: 'Form field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/form-field',\n },\n {\n id: 'user-interface-material-components-inputs-forms-input',\n title: 'Input',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/input',\n },\n {\n id: 'user-interface-material-components-inputs-forms-radio-button',\n title: 'Radio button',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/material/radio',\n },\n {\n id: 'user-interface-material-components-inputs-forms-select',\n title: 'Select',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/select',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slider',\n title: 'Slider',\n type: 'basic',\n icon: 'tune',\n link: '/ui/material/slider',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slide-toggle',\n title: 'Slide toggle',\n type: 'basic',\n icon: 'toggle_on',\n link: '/ui/material/slide-toggle',\n },\n ],\n },\n {\n id: 'user-interface-material-components-buttons-actions',\n title: 'Buttons & Actions',\n type: 'collapsable',\n icon: 'ads_click',\n children: [\n {\n id: 'user-interface-material-components-buttons-actions-button',\n title: 'Button',\n type: 'basic',\n icon: 'crop_square',\n link: '/ui/material/button',\n },\n {\n id: 'user-interface-material-components-buttons-actions-button-toggle',\n title: 'Button toggle',\n type: 'basic',\n icon: 'view_column',\n link: '/ui/material/button-toggle',\n },\n {\n id: 'user-interface-material-components-buttons-actions-chips',\n title: 'Chips',\n type: 'basic',\n icon: 'label',\n link: '/ui/material/chips',\n badge: {\n title: 'New',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-green-500 text-white',\n },\n },\n {\n id: 'user-interface-material-components-buttons-actions-menu',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/material/menu',\n },\n {\n id: 'user-interface-material-components-buttons-actions-ripples',\n title: 'Ripples',\n type: 'basic',\n icon: 'waves',\n link: '/ui/material/ripples',\n },\n ],\n },\n {\n id: 'user-interface-material-components-layout-containers',\n title: 'Layout & Containers',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components-layout-containers-card',\n title: 'Card',\n type: 'basic',\n icon: 'credit_card',\n link: '/ui/material/card',\n },\n {\n id: 'user-interface-material-components-layout-containers-divider',\n title: 'Divider',\n type: 'basic',\n icon: 'remove',\n link: '/ui/material/divider',\n },\n {\n id: 'user-interface-material-components-layout-containers-expansion-panel',\n title: 'Expansion Panel',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/expansion',\n },\n {\n id: 'user-interface-material-components-layout-containers-grid-list',\n title: 'Grid list',\n type: 'basic',\n icon: 'grid_view',\n link: '/ui/material/grid-list',\n },\n {\n id: 'user-interface-material-components-layout-containers-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/material/list',\n },\n {\n id: 'user-interface-material-components-layout-containers-sidenav',\n title: 'Sidenav',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/ui/material/sidenav',\n },\n {\n id: 'user-interface-material-components-layout-containers-tabs',\n title: 'Tabs',\n type: 'basic',\n icon: 'tab',\n link: '/ui/material/tabs',\n },\n {\n id: 'user-interface-material-components-layout-containers-toolbar',\n title: 'Toolbar',\n type: 'basic',\n icon: 'build',\n link: '/ui/material/toolbar',\n },\n ],\n },\n {\n id: 'user-interface-material-components-data-display',\n title: 'Data & Display',\n type: 'collapsable',\n icon: 'bar_chart',\n children: [\n {\n id: 'user-interface-material-components-data-display-badge',\n title: 'Badge',\n type: 'basic',\n icon: 'verified',\n link: '/ui/material/badge',\n },\n {\n id: 'user-interface-material-components-data-display-bottom-sheet',\n title: 'Bottom sheet',\n type: 'basic',\n icon: 'expand_less',\n link: '/ui/material/bottom-sheet',\n },\n {\n id: 'user-interface-material-components-data-display-dialog',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/material/dialog',\n },\n {\n id: 'user-interface-material-components-data-display-icon',\n title: 'Icon',\n type: 'basic',\n icon: 'star',\n link: '/ui/material/icon',\n },\n {\n id: 'user-interface-material-components-data-display-progress-spinner',\n title: 'Progress spinner',\n type: 'basic',\n icon: 'progress_activity',\n link: '/ui/material/progress-spinner',\n },\n {\n id: 'user-interface-material-components-data-display-progress-bar',\n title: 'Progress bar',\n type: 'basic',\n icon: 'hourglass_empty',\n link: '/ui/material/progress-bar',\n },\n {\n id: 'user-interface-material-components-data-display-snackbar',\n title: 'Snack bar',\n type: 'basic',\n icon: 'notifications',\n link: '/ui/material/snack-bar',\n },\n {\n id: 'user-interface-material-components-data-display-table',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/material/table',\n },\n {\n id: 'user-interface-material-components-data-display-tooltip',\n title: 'Tooltip',\n type: 'basic',\n icon: 'help',\n link: '/ui/material/tooltip',\n },\n ],\n },\n ],\n },\n ],\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-navigation-demo-data.mjs","sources":["../../../projects/angular/navigation/demo-data/demo-navigation.data.ts","../../../projects/angular/navigation/demo-data/ojiepermana-angular-navigation-demo-data.ts"],"sourcesContent":["import type { NavigationItem } from '@ojiepermana/angular/navigation/types';\n\nexport const DemoNavigationData: NavigationItem[] = [\n {\n id: 'documentation',\n title: 'Documentation',\n subtitle: 'Guides and getting started resources',\n type: 'group',\n icon: 'menu_book',\n children: [\n {\n id: 'documentation-introduction',\n title: 'Introduction',\n type: 'basic',\n icon: 'menu_book',\n link: '/docs/introduction',\n },\n {\n id: 'documentation-installation',\n title: 'Installation',\n type: 'basic',\n icon: 'download',\n link: '/docs/installation',\n },\n {\n id: 'documentation-getting-started',\n title: 'Getting started',\n type: 'basic',\n icon: 'rocket_launch',\n link: '/docs/getting-started',\n },\n {\n id: 'documentation-upgrade-guide',\n title: 'Upgrade Guide',\n type: 'basic',\n icon: 'arrow_circle_up',\n link: '/docs/upgrade-guide',\n },\n {\n id: 'documentation-changelog',\n title: 'Changelog',\n type: 'basic',\n icon: 'history',\n link: '/docs/changelog',\n },\n {\n id: 'documentation-icon-lucide',\n title: 'Lucide Icons',\n type: 'basic',\n icon: 'star',\n link: '/lucide-icons',\n badge: {\n title: 'Demo',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-blue-500 text-white',\n },\n },\n ],\n },\n {\n id: 'user-interface',\n title: 'User Interface',\n subtitle: 'Components and design elements',\n type: 'group',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components',\n title: 'Material Components',\n type: 'collapsable',\n icon: 'deployed_code',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms',\n title: 'Inputs & Forms',\n type: 'collapsable',\n icon: 'input',\n children: [\n {\n id: 'user-interface-material-components-inputs-forms-autocomplete',\n title: 'Autocomplete',\n type: 'basic',\n icon: 'search',\n link: '/ui/material/autocomplete',\n },\n {\n id: 'user-interface-material-components-inputs-forms-checkbox',\n title: 'Checkbox',\n type: 'basic',\n icon: 'check_box',\n link: '/ui/material/checkbox',\n },\n {\n id: 'user-interface-material-components-inputs-forms-datepicker',\n title: 'Datepicker',\n type: 'basic',\n icon: 'calendar_today',\n link: '/ui/material/datepicker',\n },\n {\n id: 'user-interface-material-components-inputs-forms-form-field',\n title: 'Form field',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/form-field',\n },\n {\n id: 'user-interface-material-components-inputs-forms-input',\n title: 'Input',\n type: 'basic',\n icon: 'text_fields',\n link: '/ui/material/input',\n },\n {\n id: 'user-interface-material-components-inputs-forms-radio-button',\n title: 'Radio button',\n type: 'basic',\n icon: 'radio_button_checked',\n link: '/ui/material/radio',\n },\n {\n id: 'user-interface-material-components-inputs-forms-select',\n title: 'Select',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/select',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slider',\n title: 'Slider',\n type: 'basic',\n icon: 'tune',\n link: '/ui/material/slider',\n },\n {\n id: 'user-interface-material-components-inputs-forms-slide-toggle',\n title: 'Slide toggle',\n type: 'basic',\n icon: 'toggle_on',\n link: '/ui/material/slide-toggle',\n },\n ],\n },\n {\n id: 'user-interface-material-components-buttons-actions',\n title: 'Buttons & Actions',\n type: 'collapsable',\n icon: 'ads_click',\n children: [\n {\n id: 'user-interface-material-components-buttons-actions-button',\n title: 'Button',\n type: 'basic',\n icon: 'crop_square',\n link: '/ui/material/button',\n },\n {\n id: 'user-interface-material-components-buttons-actions-button-toggle',\n title: 'Button toggle',\n type: 'basic',\n icon: 'view_column',\n link: '/ui/material/button-toggle',\n },\n {\n id: 'user-interface-material-components-buttons-actions-chips',\n title: 'Chips',\n type: 'basic',\n icon: 'label',\n link: '/ui/material/chips',\n badge: {\n title: 'New',\n classes: 'ml-2 px-2 py-0.5 rounded-full text-xs bg-green-500 text-white',\n },\n },\n {\n id: 'user-interface-material-components-buttons-actions-menu',\n title: 'Menu',\n type: 'basic',\n icon: 'menu',\n link: '/ui/material/menu',\n },\n {\n id: 'user-interface-material-components-buttons-actions-ripples',\n title: 'Ripples',\n type: 'basic',\n icon: 'waves',\n link: '/ui/material/ripples',\n },\n ],\n },\n {\n id: 'user-interface-material-components-layout-containers',\n title: 'Layout & Containers',\n type: 'collapsable',\n icon: 'dashboard',\n children: [\n {\n id: 'user-interface-material-components-layout-containers-card',\n title: 'Card',\n type: 'basic',\n icon: 'credit_card',\n link: '/ui/material/card',\n },\n {\n id: 'user-interface-material-components-layout-containers-divider',\n title: 'Divider',\n type: 'basic',\n icon: 'remove',\n link: '/ui/material/divider',\n },\n {\n id: 'user-interface-material-components-layout-containers-expansion-panel',\n title: 'Expansion Panel',\n type: 'basic',\n icon: 'expand_more',\n link: '/ui/material/expansion',\n },\n {\n id: 'user-interface-material-components-layout-containers-grid-list',\n title: 'Grid list',\n type: 'basic',\n icon: 'grid_view',\n link: '/ui/material/grid-list',\n },\n {\n id: 'user-interface-material-components-layout-containers-list',\n title: 'List',\n type: 'basic',\n icon: 'list',\n link: '/ui/material/list',\n },\n {\n id: 'user-interface-material-components-layout-containers-sidenav',\n title: 'Sidenav',\n type: 'basic',\n icon: 'view_sidebar',\n link: '/ui/material/sidenav',\n },\n {\n id: 'user-interface-material-components-layout-containers-tabs',\n title: 'Tabs',\n type: 'basic',\n icon: 'tab',\n link: '/ui/material/tabs',\n },\n {\n id: 'user-interface-material-components-layout-containers-toolbar',\n title: 'Toolbar',\n type: 'basic',\n icon: 'build',\n link: '/ui/material/toolbar',\n },\n ],\n },\n {\n id: 'user-interface-material-components-data-display',\n title: 'Data & Display',\n type: 'collapsable',\n icon: 'bar_chart',\n children: [\n {\n id: 'user-interface-material-components-data-display-badge',\n title: 'Badge',\n type: 'basic',\n icon: 'verified',\n link: '/ui/material/badge',\n },\n {\n id: 'user-interface-material-components-data-display-bottom-sheet',\n title: 'Bottom sheet',\n type: 'basic',\n icon: 'expand_less',\n link: '/ui/material/bottom-sheet',\n },\n {\n id: 'user-interface-material-components-data-display-dialog',\n title: 'Dialog',\n type: 'basic',\n icon: 'chat',\n link: '/ui/material/dialog',\n },\n {\n id: 'user-interface-material-components-data-display-icon',\n title: 'Icon',\n type: 'basic',\n icon: 'star',\n link: '/ui/material/icon',\n },\n {\n id: 'user-interface-material-components-data-display-progress-spinner',\n title: 'Progress spinner',\n type: 'basic',\n icon: 'progress_activity',\n link: '/ui/material/progress-spinner',\n },\n {\n id: 'user-interface-material-components-data-display-progress-bar',\n title: 'Progress bar',\n type: 'basic',\n icon: 'hourglass_empty',\n link: '/ui/material/progress-bar',\n },\n {\n id: 'user-interface-material-components-data-display-snackbar',\n title: 'Snack bar',\n type: 'basic',\n icon: 'notifications',\n link: '/ui/material/snack-bar',\n },\n {\n id: 'user-interface-material-components-data-display-table',\n title: 'Table',\n type: 'basic',\n icon: 'table_chart',\n link: '/ui/material/table',\n },\n {\n id: 'user-interface-material-components-data-display-tooltip',\n title: 'Tooltip',\n type: 'basic',\n icon: 'help',\n link: '/ui/material/tooltip',\n },\n ],\n },\n ],\n },\n ],\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,12 @@ const MATERIAL_SYMBOLS_FONT_HREF = 'https://fonts.googleapis.com/css2?family=Mat
|
|
|
8
8
|
class UiNavIconComponent {
|
|
9
9
|
doc = inject(DOCUMENT);
|
|
10
10
|
platformId = inject(PLATFORM_ID);
|
|
11
|
-
name = input('',
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
name = input('', /* @ts-ignore */
|
|
12
|
+
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
13
|
+
class = input('', /* @ts-ignore */
|
|
14
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
15
|
+
size = input(null, /* @ts-ignore */
|
|
16
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
14
17
|
fontVariationSettings = '"FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24';
|
|
15
18
|
constructor() {
|
|
16
19
|
this.ensureFontStylesheet();
|
|
@@ -19,7 +22,8 @@ class UiNavIconComponent {
|
|
|
19
22
|
const base = 'material-symbols-outlined inline-flex items-center justify-center leading-none select-none';
|
|
20
23
|
const extra = this.class();
|
|
21
24
|
return extra ? `${base} ${extra}` : base;
|
|
22
|
-
},
|
|
25
|
+
}, /* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
23
27
|
ensureFontStylesheet() {
|
|
24
28
|
if (!isPlatformBrowser(this.platformId) || !this.doc.head)
|
|
25
29
|
return;
|
|
@@ -32,10 +36,10 @@ class UiNavIconComponent {
|
|
|
32
36
|
link.setAttribute(MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_ID);
|
|
33
37
|
this.doc.head.appendChild(link);
|
|
34
38
|
}
|
|
35
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
36
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: UiNavIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: UiNavIconComponent, isStandalone: true, selector: "ui-nav-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true", "translate": "no" }, properties: { "class": "classes()", "style.font-size.px": "size()", "style.font-variation-settings": "fontVariationSettings" } }, ngImport: i0, template: `{{ name() }}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
37
41
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: UiNavIconComponent, decorators: [{
|
|
39
43
|
type: Component,
|
|
40
44
|
args: [{
|
|
41
45
|
selector: 'ui-nav-icon',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-navigation-icon.mjs","sources":["../../../projects/angular/navigation/icon/
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-navigation-icon.mjs","sources":["../../../projects/angular/navigation/icon/nav-icon.component.ts","../../../projects/angular/navigation/icon/ojiepermana-angular-navigation-icon.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, PLATFORM_ID, computed, inject, input } from '@angular/core';\n\nconst MATERIAL_SYMBOLS_FONT_ATTR = 'data-ui-nav-icon-font';\nconst MATERIAL_SYMBOLS_FONT_ID = 'material-symbols-outlined';\nconst MATERIAL_SYMBOLS_FONT_HREF =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0';\n\n@Component({\n selector: 'ui-nav-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[style.font-size.px]': 'size()',\n '[style.font-variation-settings]': 'fontVariationSettings',\n 'aria-hidden': 'true',\n translate: 'no',\n },\n template: `{{ name() }}`,\n})\nexport class UiNavIconComponent {\n private readonly doc = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly name = input<string>('');\n readonly class = input<string>('');\n readonly size = input<number | null>(null);\n\n protected readonly fontVariationSettings = '\"FILL\" 0, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24';\n\n constructor() {\n this.ensureFontStylesheet();\n }\n\n protected readonly classes = computed(() => {\n const base = 'material-symbols-outlined inline-flex items-center justify-center leading-none select-none';\n const extra = this.class();\n return extra ? `${base} ${extra}` : base;\n });\n\n private ensureFontStylesheet(): void {\n if (!isPlatformBrowser(this.platformId) || !this.doc.head) return;\n\n const existing = this.doc.head.querySelector(`link[${MATERIAL_SYMBOLS_FONT_ATTR}=\"${MATERIAL_SYMBOLS_FONT_ID}\"]`);\n if (existing) return;\n\n const link = this.doc.createElement('link');\n link.rel = 'stylesheet';\n link.href = MATERIAL_SYMBOLS_FONT_HREF;\n link.setAttribute(MATERIAL_SYMBOLS_FONT_ATTR, MATERIAL_SYMBOLS_FONT_ID);\n this.doc.head.appendChild(link);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAGA,MAAM,0BAA0B,GAAG,uBAAuB;AAC1D,MAAM,wBAAwB,GAAG,2BAA2B;AAC5D,MAAM,0BAA0B,GAC9B,mGAAmG;MAcxF,kBAAkB,CAAA;AACZ,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;IAExC,IAAI,GAAG,KAAK,CAAS,EAAE;6EAAC;IACxB,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;IACzB,IAAI,GAAG,KAAK,CAAgB,IAAI;6EAAC;IAEvB,qBAAqB,GAAG,2CAA2C;AAEtF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEmB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,IAAI,GAAG,4FAA4F;AACzG,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,GAAG,IAAI;IAC1C,CAAC;gFAAC;IAEM,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE;AAE3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,0BAA0B,CAAA,EAAA,EAAK,wBAAwB,CAAA,EAAA,CAAI,CAAC;AACjH,QAAA,IAAI,QAAQ;YAAE;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,0BAA0B;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,0BAA0B,EAAE,wBAAwB,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACjC;uGA/BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,ynBAFnB,CAAA,YAAA,CAAc,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEb,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;oBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,sBAAsB,EAAE,QAAQ;AAChC,wBAAA,iCAAiC,EAAE,uBAAuB;AAC1D,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,SAAS,EAAE,IAAI;AAChB,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,YAAA,CAAc;AACzB,iBAAA;;;ACnBD;;AAEG;;;;"}
|
|
@@ -21,12 +21,16 @@ function cn(...inputs) {
|
|
|
21
21
|
class UiNavItemComponent {
|
|
22
22
|
nav = inject(NavigationService);
|
|
23
23
|
cn = cn;
|
|
24
|
-
item = input.required(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
item = input.required(/* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
|
|
26
|
+
level = input(0, /* @ts-ignore */
|
|
27
|
+
...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
28
|
+
/** Compact / icon-only rendering (sidebar `docked`). */
|
|
29
|
+
compact = input(false, /* @ts-ignore */
|
|
30
|
+
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
28
31
|
/** True when this branch sits inside a collapsable rail and can draw a connector back to it. */
|
|
29
|
-
railConnector = input(false,
|
|
32
|
+
railConnector = input(false, /* @ts-ignore */
|
|
33
|
+
...(ngDevMode ? [{ debugName: "railConnector" }] : /* istanbul ignore next */ []));
|
|
30
34
|
railConnectorDotClasses = 'pointer-events-none absolute -left-[11px] top-1/2 z-10 h-1 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-foreground/80';
|
|
31
35
|
exactMatch = {
|
|
32
36
|
exact: true,
|
|
@@ -41,16 +45,23 @@ class UiNavItemComponent {
|
|
|
41
45
|
fragment: 'ignored',
|
|
42
46
|
matrixParams: 'ignored',
|
|
43
47
|
};
|
|
44
|
-
type = computed(() => this.item().type,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
type = computed(() => this.item().type, /* @ts-ignore */
|
|
49
|
+
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
50
|
+
groupItem = computed(() => this.item(), /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "groupItem" }] : /* istanbul ignore next */ []));
|
|
52
|
+
collapsableItem = computed(() => this.item(), /* @ts-ignore */
|
|
53
|
+
...(ngDevMode ? [{ debugName: "collapsableItem" }] : /* istanbul ignore next */ []));
|
|
54
|
+
megaItem = computed(() => this.item(), /* @ts-ignore */
|
|
55
|
+
...(ngDevMode ? [{ debugName: "megaItem" }] : /* istanbul ignore next */ []));
|
|
56
|
+
asideItem = computed(() => this.item(), /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "asideItem" }] : /* istanbul ignore next */ []));
|
|
58
|
+
basicItem = computed(() => this.item(), /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "basicItem" }] : /* istanbul ignore next */ []));
|
|
50
60
|
headingId = computed(() => {
|
|
51
61
|
const id = this.item().id ?? '';
|
|
52
62
|
return `nav-group-${id}`;
|
|
53
|
-
},
|
|
63
|
+
}, /* @ts-ignore */
|
|
64
|
+
...(ngDevMode ? [{ debugName: "headingId" }] : /* istanbul ignore next */ []));
|
|
54
65
|
isGroupOpen() {
|
|
55
66
|
const id = this.item().id;
|
|
56
67
|
if (!id)
|
|
@@ -83,8 +94,8 @@ class UiNavItemComponent {
|
|
|
83
94
|
item.action(item);
|
|
84
95
|
}
|
|
85
96
|
}
|
|
86
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
87
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: UiNavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: UiNavItemComponent, isStandalone: true, selector: "ui-nav-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, railConnector: { classPropertyName: "railConnector", publicName: "railConnector", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
88
99
|
@switch (type()) {
|
|
89
100
|
@case ('divider') {
|
|
90
101
|
<hr class="my-2 border-t border-border" role="separator" />
|
|
@@ -306,9 +317,9 @@ class UiNavItemComponent {
|
|
|
306
317
|
}
|
|
307
318
|
}
|
|
308
319
|
}
|
|
309
|
-
`, isInline: true, dependencies: [{ kind: "component", type: UiNavItemComponent, selector: "ui-nav-item", inputs: ["item", "level", "compact", "railConnector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: UiNavIconComponent, selector: "ui-nav-icon", inputs: ["name", "class", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
320
|
+
`, isInline: true, dependencies: [{ kind: "component", type: UiNavItemComponent, selector: "ui-nav-item", inputs: ["item", "level", "compact", "railConnector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: UiNavIconComponent, selector: "ui-nav-icon", inputs: ["name", "class", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
310
321
|
}
|
|
311
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
322
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: UiNavItemComponent, decorators: [{
|
|
312
323
|
type: Component,
|
|
313
324
|
args: [{
|
|
314
325
|
selector: 'ui-nav-item',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-navigation-item.mjs","sources":["../../../projects/angular/navigation/item/src/lib/cn.util.ts","../../../projects/angular/navigation/item/src/lib/nav-item.component.ts","../../../projects/angular/navigation/item/ojiepermana-angular-navigation-item.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Concatenate and dedupe Tailwind class names. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';\nimport { NavigationService } from '@ojiepermana/angular/navigation/service';\nimport type {\n NavigationAsideItem,\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n NavigationMegaItem,\n} from '@ojiepermana/angular/navigation/types';\nimport { cn } from './cn.util';\n\n/**\n * Recursive navigation item renderer (vertical context).\n *\n * Menerima item polymorphic dan delegasi ke template sesuai `type`.\n * Mega dirender sebagai group biasa saat muncul di konteks vertical.\n */\n@Component({\n selector: 'ui-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],\n template: `\n @switch (type()) {\n @case ('divider') {\n <hr class=\"my-2 border-t border-border\" role=\"separator\" />\n }\n @case ('spacer') {\n <div class=\"flex-1\"></div>\n }\n @case ('group') {\n <div role=\"group\" [attr.aria-labelledby]=\"headingId()\">\n @if (!compact()) {\n <div class=\"sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent\">\n <div [id]=\"headingId()\" [class]=\"cn('ui-nav-heading text-muted-foreground', item().classes?.title)\">\n {{ item().title }}\n </div>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of groupItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('collapsable') {\n @let id = collapsableItem().id ?? '';\n @let open = isGroupOpen();\n @let active = isTrailActive();\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface group/ni flex w-full items-center gap-3 rounded p-3 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n active && 'text-primary',\n railConnectorClasses(active),\n item().classes?.wrapper\n )\n \"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"id + '-panel'\"\n [disabled]=\"collapsableItem().disabled || null\"\n [matTooltip]=\"compact() ? (collapsableItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"toggleGroup()\">\n @if (showRailConnector(active)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (collapsableItem().icon) {\n <span\n [class]=\"\n cn(\n 'inline-flex shrink-0 items-center justify-center',\n open && 'h-7 w-7 rounded-full border border-brand'\n )\n \">\n <ui-nav-icon [name]=\"collapsableItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n </span>\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate text-left', item().classes?.title)\">\n {{ collapsableItem().title }}\n </span>\n @if (collapsableItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n <ui-nav-icon\n [name]=\"'chevron_right'\"\n [size]=\"18\"\n [class]=\"cn('transition-transform duration-200', open && 'rotate-90')\" />\n }\n </button>\n @if (!compact() && open) {\n <div\n [id]=\"id + '-panel'\"\n role=\"region\"\n class=\"relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-primary/30 before:content-['']\">\n @for (child of collapsableItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"false\" [railConnector]=\"true\" />\n }\n </div>\n }\n }\n @case ('mega') {\n <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->\n <div class=\"mt-4 py-3 first:mt-0\" role=\"group\">\n @if (!compact()) {\n <div class=\"ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground\">\n {{ item().title }}\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of megaItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('aside') {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [routerLink]=\"asideItem().link\"\n [queryParams]=\"asideItem().queryParams\"\n [fragment]=\"asideItem().fragment ?? undefined\"\n [target]=\"asideItem().target ?? undefined\"\n [matTooltip]=\"compact() ? (asideItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (asideItem().icon) {\n <ui-nav-icon [name]=\"asideItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ asideItem().title }}</span>\n }\n </a>\n }\n @default {\n <!-- basic -->\n @if (basicItem().link && !basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"\n basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)\n \"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.aria-disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n [routerLink]=\"basicItem().link\"\n [queryParams]=\"basicItem().queryParams\"\n [queryParamsHandling]=\"basicItem().queryParamsHandling ?? null\"\n [fragment]=\"basicItem().fragment ?? undefined\"\n [preserveFragment]=\"basicItem().preserveFragment ?? false\"\n [target]=\"basicItem().target ?? undefined\"\n (click)=\"runAction()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate', item().classes?.title)\">{{ basicItem().title }}</span>\n @if (basicItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n }\n </a>\n } @else if (basicItem().link && basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n item().classes?.wrapper\n )\n \"\n [attr.href]=\"basicItem().link\"\n [attr.target]=\"basicItem().target ?? '_blank'\"\n rel=\"noopener noreferrer\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex w-full items-center gap-3 rounded px-3 py-2 text-left text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n [disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </button>\n }\n }\n }\n `,\n})\nexport class UiNavItemComponent {\n private readonly nav = inject(NavigationService);\n protected readonly cn = cn;\n\n readonly item = input.required<NavigationItem>();\n readonly level = input<number>(0);\n /** Compact / icon-only rendering (sidebar `thin`). */\n readonly compact = input<boolean>(false);\n /** True when this branch sits inside a collapsable rail and can draw a connector back to it. */\n readonly railConnector = input<boolean>(false);\n\n protected readonly railConnectorDotClasses =\n 'pointer-events-none absolute -left-[11px] top-1/2 z-10 h-1 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-foreground/80';\n\n protected readonly exactMatch = {\n exact: true,\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n } as const;\n protected readonly inexactMatch = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n } as const;\n\n protected readonly type = computed(() => this.item().type);\n\n protected readonly groupItem = computed(() => this.item() as NavigationGroupItem);\n protected readonly collapsableItem = computed(() => this.item() as NavigationCollapsableItem);\n protected readonly megaItem = computed(() => this.item() as NavigationMegaItem);\n protected readonly asideItem = computed(() => this.item() as NavigationAsideItem);\n protected readonly basicItem = computed(() => this.item() as NavigationBasicItem);\n\n protected readonly headingId = computed(() => {\n const id = this.item().id ?? '';\n return `nav-group-${id}`;\n });\n\n protected isGroupOpen(): boolean {\n const id = this.item().id;\n if (!id) return false;\n // auto-open when any descendant is active\n if (this.nav.isActive(id) && 'children' in this.item()) return true;\n return this.nav.isGroupOpen(id);\n }\n\n protected isTrailActive(): boolean {\n return this.nav.isActive(this.item().id);\n }\n\n protected railConnectorClasses(active: boolean): string {\n if (!active || !this.railConnector()) return '';\n\n return (\n 'relative after:pointer-events-none after:absolute after:-left-3 after:top-1/2 after:z-0 after:h-px ' +\n \"after:w-3 after:-translate-y-1/2 after:rounded-full after:bg-primary/30 after:content-['']\"\n );\n }\n\n protected showRailConnector(active: boolean): boolean {\n return active && this.railConnector();\n }\n\n protected toggleGroup(): void {\n const id = this.item().id;\n if (id) this.nav.toggleGroup(id);\n }\n\n protected runAction(): void {\n const item = this.item();\n if ('action' in item && typeof item.action === 'function') {\n item.action(item);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-navigation-item.mjs","sources":["../../../projects/angular/navigation/item/cn.util.ts","../../../projects/angular/navigation/item/nav-item.component.ts","../../../projects/angular/navigation/item/ojiepermana-angular-navigation-item.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Concatenate and dedupe Tailwind class names. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';\nimport { NavigationService } from '@ojiepermana/angular/navigation/service';\nimport type {\n NavigationAsideItem,\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n NavigationMegaItem,\n} from '@ojiepermana/angular/navigation/types';\nimport { cn } from './cn.util';\n\n/**\n * Recursive navigation item renderer (vertical context).\n *\n * Menerima item polymorphic dan delegasi ke template sesuai `type`.\n * Mega dirender sebagai group biasa saat muncul di konteks vertical.\n */\n@Component({\n selector: 'ui-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],\n template: `\n @switch (type()) {\n @case ('divider') {\n <hr class=\"my-2 border-t border-border\" role=\"separator\" />\n }\n @case ('spacer') {\n <div class=\"flex-1\"></div>\n }\n @case ('group') {\n <div role=\"group\" [attr.aria-labelledby]=\"headingId()\">\n @if (!compact()) {\n <div class=\"sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent\">\n <div [id]=\"headingId()\" [class]=\"cn('ui-nav-heading text-muted-foreground', item().classes?.title)\">\n {{ item().title }}\n </div>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of groupItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('collapsable') {\n @let id = collapsableItem().id ?? '';\n @let open = isGroupOpen();\n @let active = isTrailActive();\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface group/ni flex w-full items-center gap-3 rounded p-3 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n active && 'text-primary',\n railConnectorClasses(active),\n item().classes?.wrapper\n )\n \"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"id + '-panel'\"\n [disabled]=\"collapsableItem().disabled || null\"\n [matTooltip]=\"compact() ? (collapsableItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"toggleGroup()\">\n @if (showRailConnector(active)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (collapsableItem().icon) {\n <span\n [class]=\"\n cn(\n 'inline-flex shrink-0 items-center justify-center',\n open && 'h-7 w-7 rounded-full border border-brand'\n )\n \">\n <ui-nav-icon [name]=\"collapsableItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n </span>\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate text-left', item().classes?.title)\">\n {{ collapsableItem().title }}\n </span>\n @if (collapsableItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n <ui-nav-icon\n [name]=\"'chevron_right'\"\n [size]=\"18\"\n [class]=\"cn('transition-transform duration-200', open && 'rotate-90')\" />\n }\n </button>\n @if (!compact() && open) {\n <div\n [id]=\"id + '-panel'\"\n role=\"region\"\n class=\"relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-primary/30 before:content-['']\">\n @for (child of collapsableItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"false\" [railConnector]=\"true\" />\n }\n </div>\n }\n }\n @case ('mega') {\n <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->\n <div class=\"mt-4 py-3 first:mt-0\" role=\"group\">\n @if (!compact()) {\n <div class=\"ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground\">\n {{ item().title }}\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of megaItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('aside') {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [routerLink]=\"asideItem().link\"\n [queryParams]=\"asideItem().queryParams\"\n [fragment]=\"asideItem().fragment ?? undefined\"\n [target]=\"asideItem().target ?? undefined\"\n [matTooltip]=\"compact() ? (asideItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (asideItem().icon) {\n <ui-nav-icon [name]=\"asideItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ asideItem().title }}</span>\n }\n </a>\n }\n @default {\n <!-- basic -->\n @if (basicItem().link && !basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"\n basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)\n \"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.aria-disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n [routerLink]=\"basicItem().link\"\n [queryParams]=\"basicItem().queryParams\"\n [queryParamsHandling]=\"basicItem().queryParamsHandling ?? null\"\n [fragment]=\"basicItem().fragment ?? undefined\"\n [preserveFragment]=\"basicItem().preserveFragment ?? false\"\n [target]=\"basicItem().target ?? undefined\"\n (click)=\"runAction()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate', item().classes?.title)\">{{ basicItem().title }}</span>\n @if (basicItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n }\n </a>\n } @else if (basicItem().link && basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n item().classes?.wrapper\n )\n \"\n [attr.href]=\"basicItem().link\"\n [attr.target]=\"basicItem().target ?? '_blank'\"\n rel=\"noopener noreferrer\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex w-full items-center gap-3 rounded px-3 py-2 text-left text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n [disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </button>\n }\n }\n }\n `,\n})\nexport class UiNavItemComponent {\n private readonly nav = inject(NavigationService);\n protected readonly cn = cn;\n\n readonly item = input.required<NavigationItem>();\n readonly level = input<number>(0);\n /** Compact / icon-only rendering (sidebar `docked`). */\n readonly compact = input<boolean>(false);\n /** True when this branch sits inside a collapsable rail and can draw a connector back to it. */\n readonly railConnector = input<boolean>(false);\n\n protected readonly railConnectorDotClasses =\n 'pointer-events-none absolute -left-[11px] top-1/2 z-10 h-1 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-foreground/80';\n\n protected readonly exactMatch = {\n exact: true,\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n } as const;\n protected readonly inexactMatch = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n } as const;\n\n protected readonly type = computed(() => this.item().type);\n\n protected readonly groupItem = computed(() => this.item() as NavigationGroupItem);\n protected readonly collapsableItem = computed(() => this.item() as NavigationCollapsableItem);\n protected readonly megaItem = computed(() => this.item() as NavigationMegaItem);\n protected readonly asideItem = computed(() => this.item() as NavigationAsideItem);\n protected readonly basicItem = computed(() => this.item() as NavigationBasicItem);\n\n protected readonly headingId = computed(() => {\n const id = this.item().id ?? '';\n return `nav-group-${id}`;\n });\n\n protected isGroupOpen(): boolean {\n const id = this.item().id;\n if (!id) return false;\n // auto-open when any descendant is active\n if (this.nav.isActive(id) && 'children' in this.item()) return true;\n return this.nav.isGroupOpen(id);\n }\n\n protected isTrailActive(): boolean {\n return this.nav.isActive(this.item().id);\n }\n\n protected railConnectorClasses(active: boolean): string {\n if (!active || !this.railConnector()) return '';\n\n return (\n 'relative after:pointer-events-none after:absolute after:-left-3 after:top-1/2 after:z-0 after:h-px ' +\n \"after:w-3 after:-translate-y-1/2 after:rounded-full after:bg-primary/30 after:content-['']\"\n );\n }\n\n protected showRailConnector(active: boolean): boolean {\n return active && this.railConnector();\n }\n\n protected toggleGroup(): void {\n const id = this.item().id;\n if (id) this.nav.toggleGroup(id);\n }\n\n protected runAction(): void {\n const item = this.item();\n if ('action' in item && typeof item.action === 'function') {\n item.action(item);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -28,27 +28,35 @@ class NavigationService {
|
|
|
28
28
|
destroyRef = inject(DestroyRef);
|
|
29
29
|
persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();
|
|
30
30
|
/** Internal version counter — incremented on every registry mutation. */
|
|
31
|
-
_version = signal(0,
|
|
31
|
+
_version = signal(0, /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "_version" }] : /* istanbul ignore next */ []));
|
|
32
33
|
/** Internal map of registered navigation trees. */
|
|
33
34
|
_registry = new Map();
|
|
34
|
-
_collapsed = signal(this.persistedSidebarCollapsed ?? false,
|
|
35
|
-
|
|
35
|
+
_collapsed = signal(this.persistedSidebarCollapsed ?? false, /* @ts-ignore */
|
|
36
|
+
...(ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []));
|
|
37
|
+
_hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null, /* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [{ debugName: "_hasStoredSidebarCollapse" }] : /* istanbul ignore next */ []));
|
|
36
39
|
/**
|
|
37
40
|
* Backward-compatible accessor — returns items for the default (`'main'`) key.
|
|
38
41
|
* Prefer `getItems(id)` when working with named registries.
|
|
39
42
|
*/
|
|
40
|
-
items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)(),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)(), /* @ts-ignore */
|
|
44
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
45
|
+
/** Sidebar variant preference (`default` or `docked`). */
|
|
46
|
+
sidebarVariant = computed(() => (this._collapsed() ? 'docked' : 'default'), /* @ts-ignore */
|
|
47
|
+
...(ngDevMode ? [{ debugName: "sidebarVariant" }] : /* istanbul ignore next */ []));
|
|
43
48
|
hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();
|
|
44
|
-
/** Sidebar collapsed (default ↔
|
|
49
|
+
/** Sidebar collapsed (default ↔ docked) toggle untuk desktop. */
|
|
45
50
|
collapsed = this._collapsed.asReadonly();
|
|
46
51
|
/** Sheet drawer terbuka di mobile. */
|
|
47
|
-
mobileOpen = signal(false,
|
|
52
|
+
mobileOpen = signal(false, /* @ts-ignore */
|
|
53
|
+
...(ngDevMode ? [{ debugName: "mobileOpen" }] : /* istanbul ignore next */ []));
|
|
48
54
|
/** Set id grup / collapsable yang sedang terbuka. */
|
|
49
|
-
openGroups = signal(new Set(),
|
|
55
|
+
openGroups = signal(new Set(), /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "openGroups" }] : /* istanbul ignore next */ []));
|
|
50
57
|
/** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */
|
|
51
|
-
activeUrl = signal(this.router.url,
|
|
58
|
+
activeUrl = signal(this.router.url, /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "activeUrl" }] : /* istanbul ignore next */ []));
|
|
52
60
|
/** Trail id item yang sedang match dengan URL aktif (across ALL registries). */
|
|
53
61
|
activeTrail = computed(() => {
|
|
54
62
|
this._version(); // track changes
|
|
@@ -80,7 +88,8 @@ class NavigationService {
|
|
|
80
88
|
walk(items, []);
|
|
81
89
|
}
|
|
82
90
|
return trail;
|
|
83
|
-
},
|
|
91
|
+
}, /* @ts-ignore */
|
|
92
|
+
...(ngDevMode ? [{ debugName: "activeTrail" }] : /* istanbul ignore next */ []));
|
|
84
93
|
constructor() {
|
|
85
94
|
effect(() => {
|
|
86
95
|
if (!this._hasStoredSidebarCollapse()) {
|
|
@@ -112,13 +121,13 @@ class NavigationService {
|
|
|
112
121
|
return this._registry.get(id) ?? [];
|
|
113
122
|
});
|
|
114
123
|
}
|
|
115
|
-
|
|
116
|
-
this.setCollapsed(value === '
|
|
124
|
+
setSidebarVariant(value) {
|
|
125
|
+
this.setCollapsed(value === 'docked');
|
|
117
126
|
}
|
|
118
|
-
|
|
119
|
-
this.setCollapsed(
|
|
127
|
+
toggleSidebarVariant(currentVariant = this.sidebarVariant()) {
|
|
128
|
+
this.setCollapsed(currentVariant !== 'docked');
|
|
120
129
|
}
|
|
121
|
-
/** Toggle sidebar collapsed (default ↔
|
|
130
|
+
/** Toggle sidebar collapsed (default ↔ docked). */
|
|
122
131
|
toggleCollapsed() {
|
|
123
132
|
this.setCollapsed(!this._collapsed());
|
|
124
133
|
}
|
|
@@ -166,7 +175,7 @@ class NavigationService {
|
|
|
166
175
|
return collapsed;
|
|
167
176
|
}
|
|
168
177
|
const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);
|
|
169
|
-
if (legacyAppearance === 'thin') {
|
|
178
|
+
if (legacyAppearance === 'thin' || legacyAppearance === 'docked') {
|
|
170
179
|
return true;
|
|
171
180
|
}
|
|
172
181
|
if (legacyAppearance === 'default') {
|
|
@@ -188,10 +197,10 @@ class NavigationService {
|
|
|
188
197
|
/* ignore */
|
|
189
198
|
}
|
|
190
199
|
}
|
|
191
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
192
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
201
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, providedIn: 'root' });
|
|
193
202
|
}
|
|
194
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, decorators: [{
|
|
195
204
|
type: Injectable,
|
|
196
205
|
args: [{ providedIn: 'root' }]
|
|
197
206
|
}], ctorParameters: () => [] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-navigation-service.mjs","sources":["../../../projects/angular/navigation/service/src/lib/navigation.service.ts","../../../projects/angular/navigation/service/ojiepermana-angular-navigation-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\nimport type { NavigationItem, SidebarAppearance } from '@ojiepermana/angular/navigation/types';\n\n/** Default registry key used when no id is specified. */\nexport const DEFAULT_NAVIGATION_ID = 'main';\nconst SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';\nconst LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';\n\nfunction parseSidebarCollapsed(value: string | null | undefined): boolean | null {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n}\n\n/**\n * Signal-based global state untuk navigation (sidebar/topbar).\n *\n * Items disimpan dalam registry ber-key. Key default adalah `'main'`.\n * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly doc = inject(DOCUMENT);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private readonly persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();\n\n /** Internal version counter — incremented on every registry mutation. */\n private readonly _version = signal(0);\n\n /** Internal map of registered navigation trees. */\n private readonly _registry = new Map<string, NavigationItem[]>();\n private readonly _collapsed = signal(this.persistedSidebarCollapsed ?? false);\n private readonly _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null);\n\n /**\n * Backward-compatible accessor — returns items for the default (`'main'`) key.\n * Prefer `getItems(id)` when working with named registries.\n */\n readonly items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)());\n\n /** Sidebar appearance preference (`default` or `thin`). */\n readonly sidebarAppearance = computed<SidebarAppearance>(() => (this._collapsed() ? 'thin' : 'default'));\n readonly hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();\n\n /** Sidebar collapsed (default ↔ thin) toggle untuk desktop. */\n readonly collapsed = this._collapsed.asReadonly();\n\n /** Sheet drawer terbuka di mobile. */\n readonly mobileOpen = signal<boolean>(false);\n\n /** Set id grup / collapsable yang sedang terbuka. */\n readonly openGroups = signal<ReadonlySet<string>>(new Set<string>());\n\n /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */\n readonly activeUrl = signal<string>(this.router.url);\n\n /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */\n readonly activeTrail = computed<ReadonlySet<string>>(() => {\n this._version(); // track changes\n const url = this.activeUrl();\n const trail = new Set<string>();\n const walk = (list: readonly NavigationItem[], ancestors: string[]): boolean => {\n let matched = false;\n for (const item of list) {\n const id = item.id;\n const link = 'link' in item ? item.link : undefined;\n let selfMatch = false;\n if (link) {\n selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');\n }\n const children = 'children' in item ? (item.children ?? []) : [];\n const nextAncestors = id ? [...ancestors, id] : ancestors;\n const childMatch = children.length > 0 && walk(children, nextAncestors);\n if (selfMatch || childMatch) {\n if (id) trail.add(id);\n for (const a of ancestors) trail.add(a);\n matched = true;\n }\n }\n return matched;\n };\n for (const items of this._registry.values()) {\n walk(items, []);\n }\n return trail;\n });\n\n constructor() {\n effect(() => {\n if (!this._hasStoredSidebarCollapse()) {\n return;\n }\n\n this.persistSidebarCollapsed(this._collapsed());\n });\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));\n }\n\n /**\n * Register items di registry.\n *\n * Overload:\n * - `registerItems(items)` → key `'main'`\n * - `registerItems(id, items)` → key spesifik\n */\n registerItems(items: NavigationItem[]): void;\n registerItems(id: string, items: NavigationItem[]): void;\n registerItems(idOrItems: string | NavigationItem[], maybeItems?: NavigationItem[]): void {\n const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems!] : [DEFAULT_NAVIGATION_ID, idOrItems];\n this._registry.set(id, items);\n this._version.update((v) => v + 1);\n }\n\n /** Remove a named registry entry. */\n removeItems(id: string): void {\n this._registry.delete(id);\n this._version.update((v) => v + 1);\n }\n\n /**\n * Computed yang mengembalikan items untuk key tertentu.\n * Reactive terhadap perubahan registry.\n */\n getItems(id: string): () => readonly NavigationItem[] {\n return computed(() => {\n this._version(); // track changes\n return this._registry.get(id) ?? [];\n });\n }\n\n setSidebarAppearance(value: SidebarAppearance): void {\n this.setCollapsed(value === 'thin');\n }\n\n toggleSidebarAppearance(currentAppearance: SidebarAppearance = this.sidebarAppearance()): void {\n this.setCollapsed(currentAppearance !== 'thin');\n }\n\n /** Toggle sidebar collapsed (default ↔ thin). */\n toggleCollapsed(): void {\n this.setCollapsed(!this._collapsed());\n }\n\n setCollapsed(value: boolean): void {\n this._collapsed.set(value);\n this._hasStoredSidebarCollapse.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n toggleGroup(id: string): void {\n const next = new Set(this.openGroups());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.openGroups.set(next);\n }\n\n setGroupOpen(id: string, open: boolean): void {\n const next = new Set(this.openGroups());\n if (open) next.add(id);\n else next.delete(id);\n this.openGroups.set(next);\n }\n\n /** Apakah id termasuk dalam active trail saat ini. */\n isActive(id: string | undefined): boolean {\n return !!id && this.activeTrail().has(id);\n }\n\n private readPersistedSidebarCollapsed(): boolean | null {\n try {\n const storage = this.doc.defaultView?.localStorage;\n const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));\n if (collapsed !== null) {\n return collapsed;\n }\n\n const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n if (legacyAppearance === 'thin') {\n return true;\n }\n if (legacyAppearance === 'default') {\n return false;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private persistSidebarCollapsed(value: boolean): void {\n try {\n const storage = this.doc.defaultView?.localStorage;\n storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));\n storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-navigation-service.mjs","sources":["../../../projects/angular/navigation/service/navigation.service.ts","../../../projects/angular/navigation/service/ojiepermana-angular-navigation-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\nimport type { NavigationItem, SidebarVariant } from '@ojiepermana/angular/navigation/types';\n\n/** Default registry key used when no id is specified. */\nexport const DEFAULT_NAVIGATION_ID = 'main';\nconst SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';\nconst LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';\n\nfunction parseSidebarCollapsed(value: string | null | undefined): boolean | null {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n}\n\n/**\n * Signal-based global state untuk navigation (sidebar/topbar).\n *\n * Items disimpan dalam registry ber-key. Key default adalah `'main'`.\n * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly doc = inject(DOCUMENT);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private readonly persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();\n\n /** Internal version counter — incremented on every registry mutation. */\n private readonly _version = signal(0);\n\n /** Internal map of registered navigation trees. */\n private readonly _registry = new Map<string, NavigationItem[]>();\n private readonly _collapsed = signal(this.persistedSidebarCollapsed ?? false);\n private readonly _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null);\n\n /**\n * Backward-compatible accessor — returns items for the default (`'main'`) key.\n * Prefer `getItems(id)` when working with named registries.\n */\n readonly items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)());\n\n /** Sidebar variant preference (`default` or `docked`). */\n readonly sidebarVariant = computed<SidebarVariant>(() => (this._collapsed() ? 'docked' : 'default'));\n readonly hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();\n\n /** Sidebar collapsed (default ↔ docked) toggle untuk desktop. */\n readonly collapsed = this._collapsed.asReadonly();\n\n /** Sheet drawer terbuka di mobile. */\n readonly mobileOpen = signal<boolean>(false);\n\n /** Set id grup / collapsable yang sedang terbuka. */\n readonly openGroups = signal<ReadonlySet<string>>(new Set<string>());\n\n /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */\n readonly activeUrl = signal<string>(this.router.url);\n\n /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */\n readonly activeTrail = computed<ReadonlySet<string>>(() => {\n this._version(); // track changes\n const url = this.activeUrl();\n const trail = new Set<string>();\n const walk = (list: readonly NavigationItem[], ancestors: string[]): boolean => {\n let matched = false;\n for (const item of list) {\n const id = item.id;\n const link = 'link' in item ? item.link : undefined;\n let selfMatch = false;\n if (link) {\n selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');\n }\n const children = 'children' in item ? (item.children ?? []) : [];\n const nextAncestors = id ? [...ancestors, id] : ancestors;\n const childMatch = children.length > 0 && walk(children, nextAncestors);\n if (selfMatch || childMatch) {\n if (id) trail.add(id);\n for (const a of ancestors) trail.add(a);\n matched = true;\n }\n }\n return matched;\n };\n for (const items of this._registry.values()) {\n walk(items, []);\n }\n return trail;\n });\n\n constructor() {\n effect(() => {\n if (!this._hasStoredSidebarCollapse()) {\n return;\n }\n\n this.persistSidebarCollapsed(this._collapsed());\n });\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));\n }\n\n /**\n * Register items di registry.\n *\n * Overload:\n * - `registerItems(items)` → key `'main'`\n * - `registerItems(id, items)` → key spesifik\n */\n registerItems(items: NavigationItem[]): void;\n registerItems(id: string, items: NavigationItem[]): void;\n registerItems(idOrItems: string | NavigationItem[], maybeItems?: NavigationItem[]): void {\n const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems!] : [DEFAULT_NAVIGATION_ID, idOrItems];\n this._registry.set(id, items);\n this._version.update((v) => v + 1);\n }\n\n /** Remove a named registry entry. */\n removeItems(id: string): void {\n this._registry.delete(id);\n this._version.update((v) => v + 1);\n }\n\n /**\n * Computed yang mengembalikan items untuk key tertentu.\n * Reactive terhadap perubahan registry.\n */\n getItems(id: string): () => readonly NavigationItem[] {\n return computed(() => {\n this._version(); // track changes\n return this._registry.get(id) ?? [];\n });\n }\n\n setSidebarVariant(value: SidebarVariant): void {\n this.setCollapsed(value === 'docked');\n }\n\n toggleSidebarVariant(currentVariant: SidebarVariant = this.sidebarVariant()): void {\n this.setCollapsed(currentVariant !== 'docked');\n }\n\n /** Toggle sidebar collapsed (default ↔ docked). */\n toggleCollapsed(): void {\n this.setCollapsed(!this._collapsed());\n }\n\n setCollapsed(value: boolean): void {\n this._collapsed.set(value);\n this._hasStoredSidebarCollapse.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n toggleGroup(id: string): void {\n const next = new Set(this.openGroups());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.openGroups.set(next);\n }\n\n setGroupOpen(id: string, open: boolean): void {\n const next = new Set(this.openGroups());\n if (open) next.add(id);\n else next.delete(id);\n this.openGroups.set(next);\n }\n\n /** Apakah id termasuk dalam active trail saat ini. */\n isActive(id: string | undefined): boolean {\n return !!id && this.activeTrail().has(id);\n }\n\n private readPersistedSidebarCollapsed(): boolean | null {\n try {\n const storage = this.doc.defaultView?.localStorage;\n const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));\n if (collapsed !== null) {\n return collapsed;\n }\n\n const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n if (legacyAppearance === 'thin' || legacyAppearance === 'docked') {\n return true;\n }\n if (legacyAppearance === 'default') {\n return false;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private persistSidebarCollapsed(value: boolean): void {\n try {\n const storage = this.doc.defaultView?.localStorage;\n storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));\n storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|