@ojiepermana/angular 22.1.11 → 22.1.12
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 +32 -26
- package/chart/README.md +272 -0
- package/component/README.md +89 -0
- package/component/accordion/README.md +195 -0
- package/component/alert/README.md +184 -0
- package/component/alert-dialog/README.md +255 -0
- package/component/aspect-ratio/README.md +116 -0
- package/component/avatar/README.md +182 -0
- package/component/badge/README.md +143 -0
- package/component/breadcrumb/README.md +223 -0
- package/component/button/README.md +141 -0
- package/component/button-group/README.md +214 -0
- package/component/calendar/README.md +137 -0
- package/component/card/README.md +232 -0
- package/component/carousel/README.md +276 -0
- package/component/checkbox/README.md +153 -0
- package/component/collapsible/README.md +216 -0
- package/component/combobox/README.md +202 -0
- package/component/command/README.md +287 -0
- package/component/composer/README.md +241 -0
- package/component/context-menu/README.md +268 -0
- package/component/date-picker/README.md +202 -0
- package/component/dialog/README.md +276 -0
- package/component/drawer/README.md +147 -0
- package/component/dropdown-menu/README.md +336 -0
- package/component/editor/README.md +152 -0
- package/component/empty/README.md +193 -0
- package/component/form/README.md +216 -0
- package/component/hover-card/README.md +150 -0
- package/component/icon/README.md +25 -0
- package/component/input/README.md +160 -0
- package/component/input-group/README.md +245 -0
- package/component/input-otp/README.md +331 -0
- package/component/item/README.md +254 -0
- package/component/kanban/README.md +81 -0
- package/component/kbd/README.md +141 -0
- package/component/label/README.md +137 -0
- package/component/menubar/README.md +270 -0
- package/component/native-select/README.md +176 -0
- package/component/navigation-menu/README.md +165 -0
- package/component/pagination/README.md +151 -0
- package/component/pillbox/README.md +68 -0
- package/component/popover/README.md +54 -0
- package/component/progress/README.md +160 -0
- package/component/radio/README.md +212 -0
- package/component/resizable/README.md +178 -0
- package/component/scroll-area/README.md +150 -0
- package/component/select/README.md +228 -0
- package/component/separator/README.md +175 -0
- package/component/sheet/README.md +190 -0
- package/component/skeleton/README.md +158 -0
- package/component/slider/README.md +207 -0
- package/component/spinner/README.md +160 -0
- package/component/switch/README.md +170 -0
- package/component/table/README.md +292 -0
- package/component/tabs/README.md +220 -0
- package/component/textarea/README.md +169 -0
- package/component/timeline/README.md +94 -0
- package/component/toast/README.md +173 -0
- package/component/toggle/README.md +133 -0
- package/component/toggle-group/README.md +234 -0
- package/component/tooltip/README.md +230 -0
- package/fesm2022/ojiepermana-angular-chart-area.mjs +289 -3
- package/fesm2022/ojiepermana-angular-chart-bar.mjs +722 -3
- package/fesm2022/ojiepermana-angular-chart-core.mjs +1482 -3
- package/fesm2022/ojiepermana-angular-chart-line.mjs +294 -3
- package/fesm2022/ojiepermana-angular-chart-pie.mjs +291 -3
- package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1301 -3
- package/fesm2022/ojiepermana-angular-chart-radar.mjs +421 -3
- package/fesm2022/ojiepermana-angular-chart-radial.mjs +295 -3
- package/fesm2022/ojiepermana-angular-chart-scatter.mjs +306 -3
- package/fesm2022/ojiepermana-angular-chart.mjs +12 -3
- package/fesm2022/ojiepermana-angular-component-accordion.mjs +267 -3
- package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +359 -3
- package/fesm2022/ojiepermana-angular-component-alert.mjs +101 -3
- package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +31 -3
- package/fesm2022/ojiepermana-angular-component-avatar.mjs +139 -3
- package/fesm2022/ojiepermana-angular-component-badge.mjs +57 -3
- package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +192 -3
- package/fesm2022/ojiepermana-angular-component-button-group.mjs +95 -3
- package/fesm2022/ojiepermana-angular-component-button.mjs +73 -3
- package/fesm2022/ojiepermana-angular-component-calendar.mjs +718 -3
- package/fesm2022/ojiepermana-angular-component-card.mjs +167 -3
- package/fesm2022/ojiepermana-angular-component-carousel.mjs +326 -3
- package/fesm2022/ojiepermana-angular-component-checkbox.mjs +190 -3
- package/fesm2022/ojiepermana-angular-component-collapsible.mjs +117 -3
- package/fesm2022/ojiepermana-angular-component-combobox.mjs +327 -3
- package/fesm2022/ojiepermana-angular-component-command.mjs +351 -3
- package/fesm2022/ojiepermana-angular-component-composer.mjs +359 -3
- package/fesm2022/ojiepermana-angular-component-context-menu.mjs +158 -3
- package/fesm2022/ojiepermana-angular-component-date-picker.mjs +482 -3
- package/fesm2022/ojiepermana-angular-component-dialog.mjs +400 -3
- package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -3
- package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +689 -3
- package/fesm2022/ojiepermana-angular-component-editor.mjs +511 -3
- package/fesm2022/ojiepermana-angular-component-empty.mjs +134 -3
- package/fesm2022/ojiepermana-angular-component-form.mjs +438 -3
- package/fesm2022/ojiepermana-angular-component-hover-card.mjs +273 -3
- package/fesm2022/ojiepermana-angular-component-icon.mjs +139 -3
- package/fesm2022/ojiepermana-angular-component-input-group.mjs +176 -3
- package/fesm2022/ojiepermana-angular-component-input-otp.mjs +550 -3
- package/fesm2022/ojiepermana-angular-component-input.mjs +52 -3
- package/fesm2022/ojiepermana-angular-component-item.mjs +264 -3
- package/fesm2022/ojiepermana-angular-component-kanban.mjs +310 -3
- package/fesm2022/ojiepermana-angular-component-kbd.mjs +48 -3
- package/fesm2022/ojiepermana-angular-component-label.mjs +27 -3
- package/fesm2022/ojiepermana-angular-component-menubar.mjs +327 -3
- package/fesm2022/ojiepermana-angular-component-native-select.mjs +62 -3
- package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +378 -3
- package/fesm2022/ojiepermana-angular-component-pagination.mjs +238 -3
- package/fesm2022/ojiepermana-angular-component-pillbox.mjs +999 -3
- package/fesm2022/ojiepermana-angular-component-popover.mjs +201 -3
- package/fesm2022/ojiepermana-angular-component-progress.mjs +57 -3
- package/fesm2022/ojiepermana-angular-component-radio.mjs +180 -3
- package/fesm2022/ojiepermana-angular-component-resizable.mjs +493 -3
- package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +51 -3
- package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +227 -3
- package/fesm2022/ojiepermana-angular-component-select.mjs +609 -3
- package/fesm2022/ojiepermana-angular-component-separator.mjs +31 -3
- package/fesm2022/ojiepermana-angular-component-sheet.mjs +407 -3
- package/fesm2022/ojiepermana-angular-component-skeleton.mjs +25 -3
- package/fesm2022/ojiepermana-angular-component-slider.mjs +456 -3
- package/fesm2022/ojiepermana-angular-component-spinner.mjs +56 -3
- package/fesm2022/ojiepermana-angular-component-switch.mjs +145 -3
- package/fesm2022/ojiepermana-angular-component-table.mjs +155 -3
- package/fesm2022/ojiepermana-angular-component-tabs.mjs +315 -3
- package/fesm2022/ojiepermana-angular-component-textarea.mjs +46 -3
- package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -3
- package/fesm2022/ojiepermana-angular-component-toast.mjs +241 -3
- package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +290 -3
- package/fesm2022/ojiepermana-angular-component-toggle.mjs +76 -3
- package/fesm2022/ojiepermana-angular-component-tooltip.mjs +519 -3
- package/fesm2022/ojiepermana-angular-component-utils-core.mjs +310 -3
- package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +62 -3
- package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +34 -3
- package/fesm2022/ojiepermana-angular-component-utils.mjs +3 -2
- package/fesm2022/ojiepermana-angular-component.mjs +4 -4
- package/fesm2022/ojiepermana-angular-navigation-core.mjs +21 -3
- package/fesm2022/ojiepermana-angular-navigation-icon.mjs +20 -3
- package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-CDBxQ8rk.mjs +91 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DBQHdvGa.mjs +512 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-entry-grid.component-Cd-jh6tg.mjs +623 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BCGvhoYj.mjs +404 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-Dk_03e-6.mjs +466 -0
- package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-DNKU6viC.mjs +2642 -0
- package/fesm2022/ojiepermana-angular-navigation-service.mjs +725 -3
- package/fesm2022/ojiepermana-angular-navigation-types.mjs +65 -4
- package/fesm2022/ojiepermana-angular-navigation.mjs +4 -10
- package/fesm2022/ojiepermana-angular-sdk.mjs +204 -4
- package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1387 -3
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +331 -3
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +45 -4
- package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1044 -3
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +729 -3
- package/fesm2022/ojiepermana-angular-theme-page-core.mjs +381 -3
- package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +267 -3
- package/fesm2022/ojiepermana-angular-theme-page-root.mjs +361 -3
- package/fesm2022/ojiepermana-angular-theme-page-side.mjs +198 -3
- package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +110 -3
- package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -2
- package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +338 -3
- package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +160 -4
- package/fesm2022/ojiepermana-angular-theme-shell.mjs +811 -3
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +783 -3
- package/fesm2022/ojiepermana-angular-theme.mjs +4 -4
- package/fesm2022/ojiepermana-angular.mjs +6 -11
- package/navigation/README.md +374 -0
- package/package.json +81 -20
- package/sdk/README.md +212 -0
- package/sdk/schematics/collection.json +20 -0
- package/sdk/schematics/init/index.js +83 -0
- package/sdk/schematics/init/schema.json +19 -0
- package/sdk/schematics/ng-add/index.js +147 -0
- package/sdk/schematics/ng-add/schema.json +14 -0
- package/sdk/schematics/package.json +3 -0
- package/sdk/schematics/sdk/index.js +175 -0
- package/sdk/schematics/sdk/schema.json +19 -0
- package/sdk/sdk.config.example.json +24 -0
- package/sdk/src/config/loader.js +43 -0
- package/sdk/src/config/schema.js +59 -0
- package/sdk/src/emit/client.js +251 -0
- package/sdk/src/emit/metadata.js +310 -0
- package/sdk/src/emit/models.js +104 -0
- package/sdk/src/emit/navigation.js +56 -0
- package/sdk/src/emit/operations.js +118 -0
- package/sdk/src/emit/public-api.js +54 -0
- package/sdk/src/emit/services.js +110 -0
- package/sdk/src/engine.js +67 -0
- package/sdk/src/layout/per-domain.js +360 -0
- package/sdk/src/package.json +3 -0
- package/sdk/src/parser/bundle.js +25 -0
- package/sdk/src/parser/ir.js +429 -0
- package/sdk/src/parser/types.js +7 -0
- package/sdk/src/render/template.js +152 -0
- package/sdk/src/writer/index.js +286 -0
- package/theme/README.md +126 -0
- package/theme/component/settings/README.md +135 -0
- package/theme/layout/README.md +539 -0
- package/theme/page/README.md +453 -0
- package/theme/shell/README.md +340 -0
- package/theme/styles/README.md +178 -0
- package/theme/styles/css/base/components.css +553 -0
- package/theme/styles/css/base/index.css +14 -0
- package/theme/styles/css/base/package.css +9 -0
- package/theme/styles/css/base/prefers-dark.css +86 -0
- package/theme/styles/css/base/print.css +62 -0
- package/theme/styles/css/base/status.css +38 -0
- package/theme/styles/css/base/tailwind.css +165 -0
- package/theme/styles/css/base/theme.css +373 -0
- package/theme/styles/css/base/tokens.css +361 -0
- package/theme/styles/css/color/amber.css +72 -0
- package/theme/styles/css/color/blue.css +72 -0
- package/theme/styles/css/color/brand.css +38 -0
- package/theme/styles/css/color/cyan.css +72 -0
- package/theme/styles/css/color/emerald.css +72 -0
- package/theme/styles/css/color/fuchsia.css +72 -0
- package/theme/styles/css/color/green.css +72 -0
- package/theme/styles/css/color/index.css +19 -0
- package/theme/styles/css/color/indigo.css +72 -0
- package/theme/styles/css/color/lime.css +72 -0
- package/theme/styles/css/color/orange.css +72 -0
- package/theme/styles/css/color/pink.css +72 -0
- package/theme/styles/css/color/purple.css +72 -0
- package/theme/styles/css/color/red.css +72 -0
- package/theme/styles/css/color/rose.css +72 -0
- package/theme/styles/css/color/sky.css +72 -0
- package/theme/styles/css/color/teal.css +72 -0
- package/theme/styles/css/color/violet.css +72 -0
- package/theme/styles/css/color/yellow.css +72 -0
- package/theme/styles/css/index.css +18 -0
- package/theme/styles/css/neutral/gray.css +63 -0
- package/theme/styles/css/neutral/index.css +11 -0
- package/theme/styles/css/neutral/mauve.css +63 -0
- package/theme/styles/css/neutral/mist.css +63 -0
- package/theme/styles/css/neutral/neutral.css +63 -0
- package/theme/styles/css/neutral/olive.css +63 -0
- package/theme/styles/css/neutral/slate.css +63 -0
- package/theme/styles/css/neutral/stone.css +63 -0
- package/theme/styles/css/neutral/taupe.css +63 -0
- package/theme/styles/css/neutral/zinc.css +63 -0
- package/theme/styles/css/radius/index.css +30 -0
- package/theme/styles/css/space/index.css +20 -0
- package/types/ojiepermana-angular-chart-area.d.ts +76 -1
- package/types/ojiepermana-angular-chart-bar.d.ts +201 -1
- package/types/ojiepermana-angular-chart-core.d.ts +811 -1
- package/types/ojiepermana-angular-chart-line.d.ts +75 -1
- package/types/ojiepermana-angular-chart-pie.d.ts +131 -1
- package/types/ojiepermana-angular-chart-primitives.d.ts +291 -1
- package/types/ojiepermana-angular-chart-radar.d.ts +116 -1
- package/types/ojiepermana-angular-chart-radial.d.ts +116 -1
- package/types/ojiepermana-angular-chart-scatter.d.ts +125 -1
- package/types/ojiepermana-angular-chart.d.ts +2 -1
- package/types/ojiepermana-angular-component-accordion.d.ts +85 -1
- package/types/ojiepermana-angular-component-alert-dialog.d.ts +140 -1
- package/types/ojiepermana-angular-component-alert.d.ts +42 -1
- package/types/ojiepermana-angular-component-aspect-ratio.d.ts +12 -1
- package/types/ojiepermana-angular-component-avatar.d.ts +56 -1
- package/types/ojiepermana-angular-component-badge.d.ts +24 -1
- package/types/ojiepermana-angular-component-breadcrumb.d.ts +46 -1
- package/types/ojiepermana-angular-component-button-group.d.ts +26 -1
- package/types/ojiepermana-angular-component-button.d.ts +27 -1
- package/types/ojiepermana-angular-component-calendar.d.ts +111 -1
- package/types/ojiepermana-angular-component-card.d.ts +69 -1
- package/types/ojiepermana-angular-component-carousel.d.ts +86 -1
- package/types/ojiepermana-angular-component-checkbox.d.ts +42 -1
- package/types/ojiepermana-angular-component-collapsible.d.ts +42 -1
- package/types/ojiepermana-angular-component-combobox.d.ts +60 -1
- package/types/ojiepermana-angular-component-command.d.ts +130 -1
- package/types/ojiepermana-angular-component-composer.d.ts +90 -1
- package/types/ojiepermana-angular-component-context-menu.d.ts +54 -1
- package/types/ojiepermana-angular-component-date-picker.d.ts +109 -1
- package/types/ojiepermana-angular-component-dialog.d.ts +136 -1
- package/types/ojiepermana-angular-component-drawer.d.ts +1 -1
- package/types/ojiepermana-angular-component-dropdown-menu.d.ts +248 -1
- package/types/ojiepermana-angular-component-editor.d.ts +135 -1
- package/types/ojiepermana-angular-component-empty.d.ts +50 -1
- package/types/ojiepermana-angular-component-form.d.ts +159 -1
- package/types/ojiepermana-angular-component-hover-card.d.ts +75 -1
- package/types/ojiepermana-angular-component-icon.d.ts +89 -1
- package/types/ojiepermana-angular-component-input-group.d.ts +51 -1
- package/types/ojiepermana-angular-component-input-otp.d.ts +155 -1
- package/types/ojiepermana-angular-component-input.d.ts +21 -1
- package/types/ojiepermana-angular-component-item.d.ts +93 -1
- package/types/ojiepermana-angular-component-kanban.d.ts +70 -1
- package/types/ojiepermana-angular-component-kbd.d.ts +16 -1
- package/types/ojiepermana-angular-component-label.d.ts +11 -1
- package/types/ojiepermana-angular-component-menubar.d.ts +93 -1
- package/types/ojiepermana-angular-component-native-select.d.ts +26 -1
- package/types/ojiepermana-angular-component-navigation-menu.d.ts +104 -1
- package/types/ojiepermana-angular-component-pagination.d.ts +33 -1
- package/types/ojiepermana-angular-component-pillbox.d.ts +222 -1
- package/types/ojiepermana-angular-component-popover.d.ts +66 -1
- package/types/ojiepermana-angular-component-progress.d.ts +17 -1
- package/types/ojiepermana-angular-component-radio.d.ts +60 -1
- package/types/ojiepermana-angular-component-resizable.d.ts +117 -1
- package/types/ojiepermana-angular-component-scroll-area.d.ts +19 -1
- package/types/ojiepermana-angular-component-segmented-control.d.ts +58 -1
- package/types/ojiepermana-angular-component-select.d.ts +122 -1
- package/types/ojiepermana-angular-component-separator.d.ts +14 -1
- package/types/ojiepermana-angular-component-sheet.d.ts +130 -1
- package/types/ojiepermana-angular-component-skeleton.d.ts +10 -1
- package/types/ojiepermana-angular-component-slider.d.ts +83 -1
- package/types/ojiepermana-angular-component-spinner.d.ts +13 -1
- package/types/ojiepermana-angular-component-switch.d.ts +44 -1
- package/types/ojiepermana-angular-component-table.d.ts +57 -1
- package/types/ojiepermana-angular-component-tabs.d.ts +124 -1
- package/types/ojiepermana-angular-component-textarea.d.ts +17 -1
- package/types/ojiepermana-angular-component-timeline.d.ts +64 -1
- package/types/ojiepermana-angular-component-toast.d.ts +64 -1
- package/types/ojiepermana-angular-component-toggle-group.d.ts +90 -1
- package/types/ojiepermana-angular-component-toggle.d.ts +25 -1
- package/types/ojiepermana-angular-component-tooltip.d.ts +143 -1
- package/types/ojiepermana-angular-component-utils-core.d.ts +184 -1
- package/types/ojiepermana-angular-component-utils-overlay.d.ts +21 -1
- package/types/ojiepermana-angular-component-utils-scale.d.ts +19 -1
- package/types/ojiepermana-angular-component-utils.d.ts +2 -1
- package/types/ojiepermana-angular-component.d.ts +2 -1
- package/types/ojiepermana-angular-navigation-core.d.ts +59 -1
- package/types/ojiepermana-angular-navigation-icon.d.ts +12 -1
- package/types/ojiepermana-angular-navigation-service.d.ts +116 -1
- package/types/ojiepermana-angular-navigation-types.d.ts +144 -1
- package/types/ojiepermana-angular-navigation.d.ts +507 -1
- package/types/ojiepermana-angular-sdk.d.ts +89 -1
- package/types/ojiepermana-angular-theme-component-settings.d.ts +154 -1
- package/types/ojiepermana-angular-theme-layout-services.d.ts +147 -1
- package/types/ojiepermana-angular-theme-layout-types.d.ts +40 -1
- package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +299 -1
- package/types/ojiepermana-angular-theme-layout.d.ts +129 -1
- package/types/ojiepermana-angular-theme-page-core.d.ts +157 -1
- package/types/ojiepermana-angular-theme-page-filter.d.ts +77 -1
- package/types/ojiepermana-angular-theme-page-root.d.ts +88 -1
- package/types/ojiepermana-angular-theme-page-side.d.ts +50 -1
- package/types/ojiepermana-angular-theme-page-slots.d.ts +40 -1
- package/types/ojiepermana-angular-theme-page.d.ts +5 -1
- package/types/ojiepermana-angular-theme-shell-services.d.ts +193 -1
- package/types/ojiepermana-angular-theme-shell-types.d.ts +105 -1
- package/types/ojiepermana-angular-theme-shell.d.ts +100 -1
- package/types/ojiepermana-angular-theme-styles.d.ts +319 -1
- package/types/ojiepermana-angular-theme.d.ts +2 -1
- package/types/ojiepermana-angular.d.ts +5 -5
|
@@ -1,7 +1,733 @@
|
|
|
1
|
-
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, input, computed, DestroyRef, Component, effect, booleanAttribute, ElementRef } from '@angular/core';
|
|
3
|
+
import { cn } from '@ojiepermana/angular/component/utils/core';
|
|
4
|
+
import { LayoutLoadingService, LayoutService } from '@ojiepermana/angular/theme/layout/services';
|
|
5
|
+
export { LAYOUT_LOADING_HIDE_DELAY_MS, LAYOUT_LOADING_INITIAL_PROGRESS, LAYOUT_LOADING_SKIP, LAYOUT_LOADING_TRICKLE_CEILING, LAYOUT_LOADING_TRICKLE_INTERVAL_MS, LayoutLoadingService, LayoutService, layoutLoadingInterceptor } from '@ojiepermana/angular/theme/layout/services';
|
|
6
|
+
import { LAYOUT_LOCKED_WIDTH, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_WIDTH } from '@ojiepermana/angular/theme/layout/types';
|
|
7
|
+
export { LAYOUT_APPEARANCES, LAYOUT_APPEARANCE_STORAGE_KEY, LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_TYPE, LAYOUT_DEFAULT_WIDTH, LAYOUT_LOCKED_WIDTH, LAYOUT_SURFACES, LAYOUT_SURFACE_STORAGE_KEY, LAYOUT_TYPES, LAYOUT_TYPE_STORAGE_KEY, LAYOUT_WIDTHS, LAYOUT_WIDTH_STORAGE_KEY, isUiLayoutAppearance, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth } from '@ojiepermana/angular/theme/layout/types';
|
|
8
|
+
import { DOCUMENT } from '@angular/common';
|
|
9
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
2
11
|
|
|
3
|
-
|
|
12
|
+
/**
|
|
13
|
+
* A thin progress line along the top edge of the viewport, running left to right.
|
|
14
|
+
* `Layout` renders it automatically and `LayoutLoadingService` drives it, so it
|
|
15
|
+
* turns itself on while a route navigation or a data load is in flight.
|
|
16
|
+
*
|
|
17
|
+
* It can also be placed at the application root, so the bar is already up during
|
|
18
|
+
* the first navigation; any extra instance inside `Layout` goes inert on its own,
|
|
19
|
+
* and the line is never drawn twice.
|
|
20
|
+
*/
|
|
21
|
+
class LayoutLoadingComponent {
|
|
22
|
+
loading = inject(LayoutLoadingService);
|
|
23
|
+
hostId = this.loading.registerHost();
|
|
24
|
+
class = input('', /* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
26
|
+
ariaLabel = input('Loading page', /* @ts-ignore */
|
|
27
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
28
|
+
isPrimary = computed(() => this.loading.primaryHostId() === this.hostId, /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "isPrimary" }] : /* istanbul ignore next */ []));
|
|
30
|
+
state = computed(() => {
|
|
31
|
+
if (!this.isPrimary()) {
|
|
32
|
+
return 'inert';
|
|
33
|
+
}
|
|
34
|
+
return this.loading.active() ? 'active' : 'idle';
|
|
35
|
+
}, /* @ts-ignore */
|
|
36
|
+
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
37
|
+
hostClasses = computed(() => cn('pointer-events-none fixed inset-x-0 top-0 z-50 block h-0.5', this.class()), /* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
39
|
+
roundedProgress = computed(() => Math.round(this.loading.progress()), /* @ts-ignore */
|
|
40
|
+
...(ngDevMode ? [{ debugName: "roundedProgress" }] : /* istanbul ignore next */ []));
|
|
41
|
+
constructor() {
|
|
42
|
+
inject(DestroyRef).onDestroy(() => this.loading.unregisterHost(this.hostId));
|
|
43
|
+
}
|
|
44
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutLoadingComponent, isStandalone: true, selector: "LayoutLoading", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-loading": "" }, properties: { "class": "hostClasses()", "attr.data-state": "state()" } }, ngImport: i0, template: `
|
|
46
|
+
@if (isPrimary() && loading.active()) {
|
|
47
|
+
<div
|
|
48
|
+
role="progressbar"
|
|
49
|
+
data-layout-loading-track
|
|
50
|
+
class="h-full w-full"
|
|
51
|
+
[attr.aria-label]="ariaLabel()"
|
|
52
|
+
aria-valuemin="0"
|
|
53
|
+
aria-valuemax="100"
|
|
54
|
+
[attr.aria-valuenow]="roundedProgress()"
|
|
55
|
+
>
|
|
56
|
+
<div
|
|
57
|
+
data-layout-loading-bar
|
|
58
|
+
class="h-full rounded-r-full bg-primary transition-[width] duration-200 ease-out"
|
|
59
|
+
[style.width.%]="loading.progress()"
|
|
60
|
+
></div>
|
|
61
|
+
</div>
|
|
62
|
+
}
|
|
63
|
+
`, isInline: true });
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutLoadingComponent, decorators: [{
|
|
66
|
+
type: Component,
|
|
67
|
+
args: [{
|
|
68
|
+
selector: 'LayoutLoading',
|
|
69
|
+
host: {
|
|
70
|
+
'[class]': 'hostClasses()',
|
|
71
|
+
'data-layout-loading': '',
|
|
72
|
+
'[attr.data-state]': 'state()',
|
|
73
|
+
},
|
|
74
|
+
template: `
|
|
75
|
+
@if (isPrimary() && loading.active()) {
|
|
76
|
+
<div
|
|
77
|
+
role="progressbar"
|
|
78
|
+
data-layout-loading-track
|
|
79
|
+
class="h-full w-full"
|
|
80
|
+
[attr.aria-label]="ariaLabel()"
|
|
81
|
+
aria-valuemin="0"
|
|
82
|
+
aria-valuemax="100"
|
|
83
|
+
[attr.aria-valuenow]="roundedProgress()"
|
|
84
|
+
>
|
|
85
|
+
<div
|
|
86
|
+
data-layout-loading-bar
|
|
87
|
+
class="h-full rounded-r-full bg-primary transition-[width] duration-200 ease-out"
|
|
88
|
+
[style.width.%]="loading.progress()"
|
|
89
|
+
></div>
|
|
90
|
+
</div>
|
|
91
|
+
}
|
|
92
|
+
`,
|
|
93
|
+
}]
|
|
94
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
95
|
+
|
|
96
|
+
class LayoutComponent {
|
|
97
|
+
layout = inject(LayoutService);
|
|
98
|
+
surface = input(null, /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
|
|
100
|
+
appearance = input(null, /* @ts-ignore */
|
|
101
|
+
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
102
|
+
layoutAppearanceAttribute = input(null, { ...(ngDevMode ? { debugName: "layoutAppearanceAttribute" } : /* istanbul ignore next */ {}), alias: 'layout-appearance' });
|
|
103
|
+
width = input(null, /* @ts-ignore */
|
|
104
|
+
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
105
|
+
/**
|
|
106
|
+
* Layout type (`vertical` | `horizontal` | `empty` | `fluid`). When set it is the
|
|
107
|
+
* source of truth and overrides the projected `Layout*` variant; `null` leaves the
|
|
108
|
+
* variant in charge.
|
|
109
|
+
*/
|
|
110
|
+
type = input(null, { ...(ngDevMode ? { debugName: "type" } : /* istanbul ignore next */ {}), alias: 'layout-type' });
|
|
111
|
+
class = input('', /* @ts-ignore */
|
|
112
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
113
|
+
appearanceInput = computed(() => this.appearance() ?? this.layoutAppearanceAttribute(), /* @ts-ignore */
|
|
114
|
+
...(ngDevMode ? [{ debugName: "appearanceInput" }] : /* istanbul ignore next */ []));
|
|
115
|
+
resolvedSurface = computed(() => this.surface() ?? this.layout.surface(), /* @ts-ignore */
|
|
116
|
+
...(ngDevMode ? [{ debugName: "resolvedSurface" }] : /* istanbul ignore next */ []));
|
|
117
|
+
resolvedAppearance = computed(() => this.appearanceInput() ?? this.layout.appearance(), /* @ts-ignore */
|
|
118
|
+
...(ngDevMode ? [{ debugName: "resolvedAppearance" }] : /* istanbul ignore next */ []));
|
|
119
|
+
// The shell-mode lock outranks a host-declared width: on desktop, tablet, and
|
|
120
|
+
// mobile the app IS the surface, so there is no page for the frame to be inset
|
|
121
|
+
// within, whatever the consumer asked for.
|
|
122
|
+
resolvedWidth = computed(() => this.layout.widthLocked() ? LAYOUT_LOCKED_WIDTH : (this.width() ?? this.layout.width()), /* @ts-ignore */
|
|
123
|
+
...(ngDevMode ? [{ debugName: "resolvedWidth" }] : /* istanbul ignore next */ []));
|
|
124
|
+
resolvedType = computed(() => this.type() ?? this.layout.type(), /* @ts-ignore */
|
|
125
|
+
...(ngDevMode ? [{ debugName: "resolvedType" }] : /* istanbul ignore next */ []));
|
|
126
|
+
isBorderRail = computed(() => this.resolvedAppearance() === 'border-rail', /* @ts-ignore */
|
|
127
|
+
...(ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []));
|
|
128
|
+
isFluidFrame = computed(() => this.resolvedWidth() === 'fluid' && this.resolvedType() === 'fluid', /* @ts-ignore */
|
|
129
|
+
...(ngDevMode ? [{ debugName: "isFluidFrame" }] : /* istanbul ignore next */ []));
|
|
130
|
+
isFullFlat = computed(() => this.resolvedWidth() === 'full' && !this.isBorderRail(), /* @ts-ignore */
|
|
131
|
+
...(ngDevMode ? [{ debugName: "isFullFlat" }] : /* istanbul ignore next */ []));
|
|
132
|
+
// The `grid-line` surface forces square frame corners (like `border-rail`) so
|
|
133
|
+
// the mosaic grid runs cleanly to the edges instead of being clipped by the
|
|
134
|
+
// theme-radius curve.
|
|
135
|
+
isGridLineSurface = computed(() => this.resolvedSurface() === 'grid-line', /* @ts-ignore */
|
|
136
|
+
...(ngDevMode ? [{ debugName: "isGridLineSurface" }] : /* istanbul ignore next */ []));
|
|
137
|
+
showsInsetRails = computed(() => {
|
|
138
|
+
const layoutType = this.resolvedType();
|
|
139
|
+
return this.isBorderRail() && (layoutType === 'horizontal' || layoutType === 'vertical');
|
|
140
|
+
}, /* @ts-ignore */
|
|
141
|
+
...(ngDevMode ? [{ debugName: "showsInsetRails" }] : /* istanbul ignore next */ []));
|
|
142
|
+
frameStageClasses = computed(() => cn('relative grid min-h-0 min-w-0 grid-cols-1 grid-rows-1', this.frameSizeClasses()), /* @ts-ignore */
|
|
143
|
+
...(ngDevMode ? [{ debugName: "frameStageClasses" }] : /* istanbul ignore next */ []));
|
|
144
|
+
railAnchorClasses = computed(() => 'relative h-full min-h-0 w-full min-w-0', /* @ts-ignore */
|
|
145
|
+
...(ngDevMode ? [{ debugName: "railAnchorClasses" }] : /* istanbul ignore next */ []));
|
|
146
|
+
contentShellClasses = computed(() => cn('relative z-10 min-h-0 min-w-0', this.isFluidFrame() ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full', this.isBorderRail() ? 'overflow-visible' : 'overflow-hidden'), /* @ts-ignore */
|
|
147
|
+
...(ngDevMode ? [{ debugName: "contentShellClasses" }] : /* istanbul ignore next */ []));
|
|
148
|
+
hostClasses = computed(() => cn(
|
|
149
|
+
// Size comes from --layout-viewport-height / -width so the layout can be
|
|
150
|
+
// nested. Height is 100dvh by default (the layout IS the viewport) and a
|
|
151
|
+
// <Shell> retunes it to `auto` so the titlebar keeps its own slice. Width is
|
|
152
|
+
// 100% by default; `frame='modern'` retunes it to `auto` so the shell's inset
|
|
153
|
+
// margins actually shrink the panel instead of pushing it off the window.
|
|
154
|
+
// These go through variables rather than being overridden in CSS because
|
|
155
|
+
// these are Tailwind UTILITIES — a rule in @layer components could never win
|
|
156
|
+
// against them, whatever its specificity.
|
|
157
|
+
'relative isolate h-[var(--layout-viewport-height,100dvh)] w-[var(--layout-viewport-width,100%)] min-w-0 box-border overflow-hidden text-foreground', this.isFluidFrame() ? 'grid place-items-center' : 'block', this.surfaceClasses(), this.widthPaddingClasses(), this.class()), /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
159
|
+
frameClasses = computed(() => {
|
|
160
|
+
const gridLine = this.isGridLineSurface();
|
|
161
|
+
return cn(
|
|
162
|
+
// Solid frame (FluxUI-style): the panel stays --background (constant
|
|
163
|
+
// white / near-black) while the tinted --layout-canvas shows only around
|
|
164
|
+
// it. The old translucent veil (bg-background/55 + blur) is gone — the
|
|
165
|
+
// decorative host surfaces/rails no longer bleed through the frame.
|
|
166
|
+
'relative min-h-0 min-w-0 bg-background', this.frameSizeClasses(),
|
|
167
|
+
// Frame border color:
|
|
168
|
+
// • border-rail → the accent-driven rail color var (--layout-rail-color / -opacity),
|
|
169
|
+
// so the frame border (--layout-rail-width) matches the rail lines.
|
|
170
|
+
// • grid-line flat → the accent at --layout-grid-line-border-opacity (0.484).
|
|
171
|
+
// • everything else → --border.
|
|
172
|
+
this.isBorderRail()
|
|
173
|
+
? 'border-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]'
|
|
174
|
+
: gridLine
|
|
175
|
+
? 'border-[hsl(var(--accent-foreground)/var(--layout-grid-line-border-opacity))]'
|
|
176
|
+
: 'border-border',
|
|
177
|
+
// flat: the outer frame rounds with the active theme-radius
|
|
178
|
+
// (--layout-frame-radius → --radius-lg → --radius-base). border-rail keeps
|
|
179
|
+
// square corners for its grid-rail aesthetic. `grid-line` is always a clearly
|
|
180
|
+
// bordered square box (rounded-none + a visible border in every width) so the
|
|
181
|
+
// mosaic reads as a framed panel.
|
|
182
|
+
this.isBorderRail()
|
|
183
|
+
? 'overflow-visible border-[length:var(--layout-rail-width)]'
|
|
184
|
+
: gridLine
|
|
185
|
+
? 'overflow-hidden border rounded-none'
|
|
186
|
+
: this.isFullFlat()
|
|
187
|
+
? 'overflow-hidden'
|
|
188
|
+
: 'overflow-hidden border rounded-[var(--layout-frame-radius)]');
|
|
189
|
+
}, /* @ts-ignore */
|
|
190
|
+
...(ngDevMode ? [{ debugName: "frameClasses" }] : /* istanbul ignore next */ []));
|
|
191
|
+
frameLayerClasses = computed(() => cn('col-start-1 row-start-1', this.frameClasses()), /* @ts-ignore */
|
|
192
|
+
...(ngDevMode ? [{ debugName: "frameLayerClasses" }] : /* istanbul ignore next */ []));
|
|
193
|
+
constructor() {
|
|
194
|
+
effect(() => {
|
|
195
|
+
const surface = this.surface();
|
|
196
|
+
if (surface !== null) {
|
|
197
|
+
this.layout.setSurface(surface, { persist: false });
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.layout.registerSurface(LAYOUT_DEFAULT_SURFACE);
|
|
201
|
+
}
|
|
202
|
+
const appearance = this.appearanceInput();
|
|
203
|
+
if (appearance !== null) {
|
|
204
|
+
this.layout.setAppearance(appearance, { persist: false });
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.layout.registerAppearance(LAYOUT_DEFAULT_APPEARANCE);
|
|
208
|
+
}
|
|
209
|
+
// While the shell mode locks the width, the incoming value is NOT recorded.
|
|
210
|
+
// Hosts commonly feed `width` straight back from `LayoutService.width()`, which
|
|
211
|
+
// already reports the locked width — writing that back would overwrite the
|
|
212
|
+
// user's real preference with the lock and lose it for good.
|
|
213
|
+
const width = this.width();
|
|
214
|
+
if (this.layout.widthLocked()) {
|
|
215
|
+
// no-op: resolvedWidth() forces the locked width regardless
|
|
216
|
+
}
|
|
217
|
+
else if (width !== null) {
|
|
218
|
+
this.layout.setWidth(width, { persist: false });
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
this.layout.registerWidth(LAYOUT_DEFAULT_WIDTH);
|
|
222
|
+
}
|
|
223
|
+
// Type: bila consumer mendaftarkan `layout-type`, itu jadi sumber kebenaran (override
|
|
224
|
+
// variant). Bila null, dibiarkan — variant `Layout*` yang menetapkan (registerType default
|
|
225
|
+
// sengaja TIDAK dipanggil agar tidak menimpa type yang sudah di-set variant).
|
|
226
|
+
const type = this.type();
|
|
227
|
+
if (type !== null) {
|
|
228
|
+
this.layout.setType(type, { persist: false });
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
surfaceClasses() {
|
|
233
|
+
switch (this.resolvedSurface()) {
|
|
234
|
+
case 'grid':
|
|
235
|
+
// `grid`: two-axis 1px gradient. The line color is --layout-grid-color —
|
|
236
|
+
// the pattern LINE tier at --layout-grid-line-opacity (base/theme.css):
|
|
237
|
+
// the active theme-neutral's family hue (saturation-raised so it reads),
|
|
238
|
+
// or the accent at pinned lightness on theme-neutral='base'. Classic HSL
|
|
239
|
+
// triplets keep the same mapping without relative-color support.
|
|
240
|
+
return '[--layout-grid-size:2rem] bg-layout-canvas bg-[linear-gradient(var(--layout-grid-color)_1px,transparent_1px),linear-gradient(to_right,var(--layout-grid-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[var(--layout-grid-size)_var(--layout-grid-size)]';
|
|
241
|
+
case 'grid-line':
|
|
242
|
+
// `grid-line`: a richer "mosaic" cousin of `grid`, painted by the
|
|
243
|
+
// `.layout-surface-grid-line` mask layer (base/components.css). One mask
|
|
244
|
+
// carries the faint uniform grid PLUS scattered bright highlight squares
|
|
245
|
+
// and a few subtly-lit cells, so the layers stay pixel-aligned. The glow
|
|
246
|
+
// is the pattern HIGHLIGHT tier: the active neutral family's hue, or the
|
|
247
|
+
// accent on theme-neutral='base' — lightness pinned to
|
|
248
|
+
// --layout-grid-highlight-l either way so brightness stays put. (The
|
|
249
|
+
// frame border stays accent on every neutral: it is chrome, not pattern.)
|
|
250
|
+
return 'bg-layout-canvas layout-surface-grid-line';
|
|
251
|
+
case 'honeycomb':
|
|
252
|
+
// True honeycomb: tileable hexagon outline painted by the
|
|
253
|
+
// `.layout-surface-honeycomb` mask layer (base/components.css), so it
|
|
254
|
+
// stays token-colored across themes. `bg-layout-canvas` is the base.
|
|
255
|
+
return 'bg-layout-canvas layout-surface-honeycomb';
|
|
256
|
+
case 'matrix':
|
|
257
|
+
// `matrix`: a scattered binary (0/1) field painted by the
|
|
258
|
+
// `.layout-surface-matrix` mask layer (base/components.css). The glyphs
|
|
259
|
+
// are tinted with the pattern NODE tier (the active neutral family's
|
|
260
|
+
// hue; `--primary` on theme-neutral='base') and carry
|
|
261
|
+
// baked-in per-glyph opacity, so the field reads as a soft "digital"
|
|
262
|
+
// signature that recolors with the neutral/theme.
|
|
263
|
+
return 'bg-layout-canvas layout-surface-matrix';
|
|
264
|
+
case 'circuit':
|
|
265
|
+
// `circuit`: a tileable PCB / circuit-board texture — routed traces with
|
|
266
|
+
// 45° bends, via nodes, and concentric ring pads. Painted by the
|
|
267
|
+
// `.layout-surface-circuit` class (base/components.css) as TWO stacked,
|
|
268
|
+
// pixel-aligned mask layers (a single mask only carries alpha, so two
|
|
269
|
+
// colors need two layers): `::before` strokes the copper traces in the
|
|
270
|
+
// pattern LINE tier (`--layout-circuit-trace-color`) and `::after`
|
|
271
|
+
// paints the via nodes/pads in the pattern NODE tier
|
|
272
|
+
// (`--layout-circuit-node-color`) — the neutral family's hue on every
|
|
273
|
+
// neutral except 'base', where the traces tint with the accent and the
|
|
274
|
+
// nodes glow with `--primary`. Both recolor across neutrals + dark mode.
|
|
275
|
+
return 'bg-layout-canvas layout-surface-circuit';
|
|
276
|
+
case 'line-vertical':
|
|
277
|
+
// Single-axis rules: --layout-line-color is the pattern LINE tier at
|
|
278
|
+
// --layout-grid-dot-opacity (a step above the dense multi-axis tier),
|
|
279
|
+
// composed in base/theme.css like --layout-grid-color.
|
|
280
|
+
return 'bg-layout-canvas bg-[linear-gradient(to_right,var(--layout-line-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';
|
|
281
|
+
case 'line-horizontal':
|
|
282
|
+
return 'bg-layout-canvas bg-[linear-gradient(var(--layout-line-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';
|
|
283
|
+
default:
|
|
284
|
+
return 'bg-layout-canvas';
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
widthPaddingClasses() {
|
|
288
|
+
if (this.isFullFlat())
|
|
289
|
+
return '';
|
|
290
|
+
switch (this.resolvedWidth()) {
|
|
291
|
+
case 'wide':
|
|
292
|
+
return 'p-4 lg:p-12';
|
|
293
|
+
case 'container':
|
|
294
|
+
return 'p-4 lg:px-0 lg:py-16';
|
|
295
|
+
case 'fluid':
|
|
296
|
+
return 'p-4 sm:p-6 lg:p-8';
|
|
297
|
+
default:
|
|
298
|
+
return 'p-4'; // full + border-rail
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
frameSizeClasses() {
|
|
302
|
+
if (this.isFluidFrame()) {
|
|
303
|
+
return 'h-auto w-auto max-h-full max-w-full';
|
|
304
|
+
}
|
|
305
|
+
return this.resolvedWidth() === 'container'
|
|
306
|
+
? 'h-full w-full lg:container lg:mx-auto'
|
|
307
|
+
: 'h-full w-full';
|
|
308
|
+
}
|
|
309
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
310
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutComponent, isStandalone: true, selector: "Layout", inputs: { surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, layoutAppearanceAttribute: { classPropertyName: "layoutAppearanceAttribute", publicName: "layout-appearance", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "layout-type", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-root": "" }, properties: { "class": "hostClasses()", "attr.data-surface": "resolvedSurface()", "attr.data-layout-appearance": "resolvedAppearance()", "attr.data-layout-width": "resolvedWidth()", "attr.data-layout-type": "resolvedType()" } }, ngImport: i0, template: `
|
|
311
|
+
<LayoutLoading />
|
|
312
|
+
|
|
313
|
+
<div data-layout-stage [class]="frameStageClasses()">
|
|
314
|
+
@if (isBorderRail()) {
|
|
315
|
+
<div
|
|
316
|
+
aria-hidden="true"
|
|
317
|
+
data-layout-rail
|
|
318
|
+
class="pointer-events-none col-start-1 row-start-1 z-0 overflow-visible"
|
|
319
|
+
>
|
|
320
|
+
<div data-layout-rail-anchor [class]="railAnchorClasses()">
|
|
321
|
+
<div
|
|
322
|
+
data-layout-rail-top-left-horizontal
|
|
323
|
+
class="absolute top-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
324
|
+
></div>
|
|
325
|
+
<div
|
|
326
|
+
data-layout-rail-top-left-vertical
|
|
327
|
+
class="absolute bottom-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
328
|
+
></div>
|
|
329
|
+
<div
|
|
330
|
+
data-layout-rail-top-right-horizontal
|
|
331
|
+
class="absolute top-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
332
|
+
></div>
|
|
333
|
+
<div
|
|
334
|
+
data-layout-rail-top-right-vertical
|
|
335
|
+
class="absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
336
|
+
></div>
|
|
337
|
+
<div
|
|
338
|
+
data-layout-rail-bottom-left-horizontal
|
|
339
|
+
class="absolute bottom-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
340
|
+
></div>
|
|
341
|
+
<div
|
|
342
|
+
data-layout-rail-bottom-left-vertical
|
|
343
|
+
class="absolute top-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
344
|
+
></div>
|
|
345
|
+
<div
|
|
346
|
+
data-layout-rail-bottom-right-horizontal
|
|
347
|
+
class="absolute bottom-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
348
|
+
></div>
|
|
349
|
+
<div
|
|
350
|
+
data-layout-rail-bottom-right-vertical
|
|
351
|
+
class="absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
352
|
+
></div>
|
|
353
|
+
|
|
354
|
+
@if (showsInsetRails()) {
|
|
355
|
+
<div
|
|
356
|
+
data-layout-horizontal-top-rail
|
|
357
|
+
class="absolute inset-x-0 top-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
358
|
+
></div>
|
|
359
|
+
<div
|
|
360
|
+
data-layout-horizontal-top-left-extension
|
|
361
|
+
class="absolute top-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
362
|
+
></div>
|
|
363
|
+
<div
|
|
364
|
+
data-layout-horizontal-top-right-extension
|
|
365
|
+
class="absolute top-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
366
|
+
></div>
|
|
367
|
+
<div
|
|
368
|
+
data-layout-horizontal-bottom-rail
|
|
369
|
+
class="absolute inset-x-0 bottom-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
370
|
+
></div>
|
|
371
|
+
<div
|
|
372
|
+
data-layout-horizontal-bottom-left-extension
|
|
373
|
+
class="absolute bottom-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
374
|
+
></div>
|
|
375
|
+
<div
|
|
376
|
+
data-layout-horizontal-bottom-right-extension
|
|
377
|
+
class="absolute bottom-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
378
|
+
></div>
|
|
379
|
+
|
|
380
|
+
<div
|
|
381
|
+
data-layout-vertical-left-rail
|
|
382
|
+
class="absolute inset-y-0 -left-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
383
|
+
></div>
|
|
384
|
+
<div
|
|
385
|
+
data-layout-vertical-left-top-extension
|
|
386
|
+
class="absolute bottom-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
387
|
+
></div>
|
|
388
|
+
<div
|
|
389
|
+
data-layout-vertical-left-bottom-extension
|
|
390
|
+
class="absolute top-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
391
|
+
></div>
|
|
392
|
+
<div
|
|
393
|
+
data-layout-vertical-right-rail
|
|
394
|
+
class="absolute inset-y-0 -right-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
395
|
+
></div>
|
|
396
|
+
<div
|
|
397
|
+
data-layout-vertical-right-top-extension
|
|
398
|
+
class="absolute bottom-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
399
|
+
></div>
|
|
400
|
+
<div
|
|
401
|
+
data-layout-vertical-right-bottom-extension
|
|
402
|
+
class="absolute top-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
403
|
+
></div>
|
|
404
|
+
}
|
|
405
|
+
</div>
|
|
406
|
+
</div>
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
<div data-layout-frame [class]="frameLayerClasses()">
|
|
410
|
+
<div data-layout-content-shell [class]="contentShellClasses()">
|
|
411
|
+
<ng-content />
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
</div>
|
|
415
|
+
`, isInline: true, dependencies: [{ kind: "component", type: LayoutLoadingComponent, selector: "LayoutLoading", inputs: ["class", "ariaLabel"] }] });
|
|
416
|
+
}
|
|
417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
|
|
418
|
+
type: Component,
|
|
419
|
+
args: [{
|
|
420
|
+
selector: 'Layout',
|
|
421
|
+
imports: [LayoutLoadingComponent],
|
|
422
|
+
host: {
|
|
423
|
+
'[class]': 'hostClasses()',
|
|
424
|
+
'data-layout-root': '',
|
|
425
|
+
'[attr.data-surface]': 'resolvedSurface()',
|
|
426
|
+
'[attr.data-layout-appearance]': 'resolvedAppearance()',
|
|
427
|
+
'[attr.data-layout-width]': 'resolvedWidth()',
|
|
428
|
+
'[attr.data-layout-type]': 'resolvedType()',
|
|
429
|
+
},
|
|
430
|
+
template: `
|
|
431
|
+
<LayoutLoading />
|
|
432
|
+
|
|
433
|
+
<div data-layout-stage [class]="frameStageClasses()">
|
|
434
|
+
@if (isBorderRail()) {
|
|
435
|
+
<div
|
|
436
|
+
aria-hidden="true"
|
|
437
|
+
data-layout-rail
|
|
438
|
+
class="pointer-events-none col-start-1 row-start-1 z-0 overflow-visible"
|
|
439
|
+
>
|
|
440
|
+
<div data-layout-rail-anchor [class]="railAnchorClasses()">
|
|
441
|
+
<div
|
|
442
|
+
data-layout-rail-top-left-horizontal
|
|
443
|
+
class="absolute top-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
444
|
+
></div>
|
|
445
|
+
<div
|
|
446
|
+
data-layout-rail-top-left-vertical
|
|
447
|
+
class="absolute bottom-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
448
|
+
></div>
|
|
449
|
+
<div
|
|
450
|
+
data-layout-rail-top-right-horizontal
|
|
451
|
+
class="absolute top-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
452
|
+
></div>
|
|
453
|
+
<div
|
|
454
|
+
data-layout-rail-top-right-vertical
|
|
455
|
+
class="absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
456
|
+
></div>
|
|
457
|
+
<div
|
|
458
|
+
data-layout-rail-bottom-left-horizontal
|
|
459
|
+
class="absolute bottom-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
460
|
+
></div>
|
|
461
|
+
<div
|
|
462
|
+
data-layout-rail-bottom-left-vertical
|
|
463
|
+
class="absolute top-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
464
|
+
></div>
|
|
465
|
+
<div
|
|
466
|
+
data-layout-rail-bottom-right-horizontal
|
|
467
|
+
class="absolute bottom-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
468
|
+
></div>
|
|
469
|
+
<div
|
|
470
|
+
data-layout-rail-bottom-right-vertical
|
|
471
|
+
class="absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
472
|
+
></div>
|
|
473
|
+
|
|
474
|
+
@if (showsInsetRails()) {
|
|
475
|
+
<div
|
|
476
|
+
data-layout-horizontal-top-rail
|
|
477
|
+
class="absolute inset-x-0 top-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
478
|
+
></div>
|
|
479
|
+
<div
|
|
480
|
+
data-layout-horizontal-top-left-extension
|
|
481
|
+
class="absolute top-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
482
|
+
></div>
|
|
483
|
+
<div
|
|
484
|
+
data-layout-horizontal-top-right-extension
|
|
485
|
+
class="absolute top-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
486
|
+
></div>
|
|
487
|
+
<div
|
|
488
|
+
data-layout-horizontal-bottom-rail
|
|
489
|
+
class="absolute inset-x-0 bottom-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
490
|
+
></div>
|
|
491
|
+
<div
|
|
492
|
+
data-layout-horizontal-bottom-left-extension
|
|
493
|
+
class="absolute bottom-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
494
|
+
></div>
|
|
495
|
+
<div
|
|
496
|
+
data-layout-horizontal-bottom-right-extension
|
|
497
|
+
class="absolute bottom-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
498
|
+
></div>
|
|
499
|
+
|
|
500
|
+
<div
|
|
501
|
+
data-layout-vertical-left-rail
|
|
502
|
+
class="absolute inset-y-0 -left-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
503
|
+
></div>
|
|
504
|
+
<div
|
|
505
|
+
data-layout-vertical-left-top-extension
|
|
506
|
+
class="absolute bottom-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
507
|
+
></div>
|
|
508
|
+
<div
|
|
509
|
+
data-layout-vertical-left-bottom-extension
|
|
510
|
+
class="absolute top-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
511
|
+
></div>
|
|
512
|
+
<div
|
|
513
|
+
data-layout-vertical-right-rail
|
|
514
|
+
class="absolute inset-y-0 -right-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
515
|
+
></div>
|
|
516
|
+
<div
|
|
517
|
+
data-layout-vertical-right-top-extension
|
|
518
|
+
class="absolute bottom-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
519
|
+
></div>
|
|
520
|
+
<div
|
|
521
|
+
data-layout-vertical-right-bottom-extension
|
|
522
|
+
class="absolute top-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
|
|
523
|
+
></div>
|
|
524
|
+
}
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
<div data-layout-frame [class]="frameLayerClasses()">
|
|
530
|
+
<div data-layout-content-shell [class]="contentShellClasses()">
|
|
531
|
+
<ng-content />
|
|
532
|
+
</div>
|
|
533
|
+
</div>
|
|
534
|
+
</div>
|
|
535
|
+
`,
|
|
536
|
+
}]
|
|
537
|
+
}], ctorParameters: () => [], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], layoutAppearanceAttribute: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-appearance", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-type", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
538
|
+
|
|
539
|
+
class LayoutVerticalComponent {
|
|
540
|
+
layout = inject(LayoutService);
|
|
541
|
+
class = input('', /* @ts-ignore */
|
|
542
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
543
|
+
classes = computed(() => cn('grid h-full min-h-0 w-full min-w-0 grid-cols-[auto_minmax(0,1fr)]', this.layout.appearance() === 'border-rail' ? 'overflow-visible' : 'overflow-hidden', this.class()), /* @ts-ignore */
|
|
544
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
545
|
+
constructor() {
|
|
546
|
+
this.layout.setType('vertical', { persist: false });
|
|
547
|
+
}
|
|
548
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutVerticalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
549
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutVerticalComponent, isStandalone: true, selector: "LayoutVertical", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "vertical" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
|
|
550
|
+
}
|
|
551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutVerticalComponent, decorators: [{
|
|
552
|
+
type: Component,
|
|
553
|
+
args: [{
|
|
554
|
+
selector: 'LayoutVertical',
|
|
555
|
+
host: {
|
|
556
|
+
'[class]': 'classes()',
|
|
557
|
+
'data-layout-variant': '',
|
|
558
|
+
'data-layout-type': 'vertical',
|
|
559
|
+
},
|
|
560
|
+
template: `<ng-content />`,
|
|
561
|
+
}]
|
|
562
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
563
|
+
|
|
564
|
+
class LayoutHorizontalComponent {
|
|
565
|
+
layout = inject(LayoutService);
|
|
566
|
+
class = input('', /* @ts-ignore */
|
|
567
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
568
|
+
classes = computed(() => cn('flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden', this.class()), /* @ts-ignore */
|
|
569
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
570
|
+
constructor() {
|
|
571
|
+
this.layout.setType('horizontal', { persist: false });
|
|
572
|
+
}
|
|
573
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutHorizontalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
574
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutHorizontalComponent, isStandalone: true, selector: "LayoutHorizontal", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "horizontal" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
|
|
575
|
+
}
|
|
576
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutHorizontalComponent, decorators: [{
|
|
577
|
+
type: Component,
|
|
578
|
+
args: [{
|
|
579
|
+
selector: 'LayoutHorizontal',
|
|
580
|
+
host: {
|
|
581
|
+
'[class]': 'classes()',
|
|
582
|
+
'data-layout-variant': '',
|
|
583
|
+
'data-layout-type': 'horizontal',
|
|
584
|
+
},
|
|
585
|
+
template: `<ng-content />`,
|
|
586
|
+
}]
|
|
587
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
588
|
+
|
|
589
|
+
class LayoutEmptyComponent {
|
|
590
|
+
layout = inject(LayoutService);
|
|
591
|
+
class = input('', /* @ts-ignore */
|
|
592
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
593
|
+
classes = computed(() => cn('h-full min-h-0 w-full min-w-0 overflow-hidden', this.class()), /* @ts-ignore */
|
|
594
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
595
|
+
constructor() {
|
|
596
|
+
this.layout.setType('empty', { persist: false });
|
|
597
|
+
}
|
|
598
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
599
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutEmptyComponent, isStandalone: true, selector: "LayoutEmpty", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "empty" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
|
|
600
|
+
}
|
|
601
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutEmptyComponent, decorators: [{
|
|
602
|
+
type: Component,
|
|
603
|
+
args: [{
|
|
604
|
+
selector: 'LayoutEmpty',
|
|
605
|
+
host: {
|
|
606
|
+
'[class]': 'classes()',
|
|
607
|
+
'data-layout-variant': '',
|
|
608
|
+
'data-layout-type': 'empty',
|
|
609
|
+
},
|
|
610
|
+
template: `<ng-content />`,
|
|
611
|
+
}]
|
|
612
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
613
|
+
|
|
614
|
+
class LayoutFluidComponent {
|
|
615
|
+
layout = inject(LayoutService);
|
|
616
|
+
class = input('', /* @ts-ignore */
|
|
617
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
618
|
+
classes = computed(() => cn('grid min-h-0 min-w-0 place-items-center overflow-auto', this.layout.width() === 'fluid' ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full', this.class()), /* @ts-ignore */
|
|
619
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
620
|
+
constructor() {
|
|
621
|
+
this.layout.setType('fluid', { persist: false });
|
|
622
|
+
}
|
|
623
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutFluidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
624
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutFluidComponent, isStandalone: true, selector: "LayoutFluid", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "fluid" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
|
|
625
|
+
}
|
|
626
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutFluidComponent, decorators: [{
|
|
627
|
+
type: Component,
|
|
628
|
+
args: [{
|
|
629
|
+
selector: 'LayoutFluid',
|
|
630
|
+
host: {
|
|
631
|
+
'[class]': 'classes()',
|
|
632
|
+
'data-layout-variant': '',
|
|
633
|
+
'data-layout-type': 'fluid',
|
|
634
|
+
},
|
|
635
|
+
template: `<ng-content />`,
|
|
636
|
+
}]
|
|
637
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
638
|
+
|
|
639
|
+
class LayoutNavigationComponent {
|
|
640
|
+
layout = inject(LayoutService);
|
|
641
|
+
ariaLabel = input('Layout navigation', /* @ts-ignore */
|
|
642
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
643
|
+
/** Turn off when the child `<Navigation>` is already the semantic navigation landmark. */
|
|
644
|
+
landmark = input(true, { ...(ngDevMode ? { debugName: "landmark" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
645
|
+
class = input('', /* @ts-ignore */
|
|
646
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
647
|
+
classes = computed(() => {
|
|
648
|
+
const layoutType = this.layout.type();
|
|
649
|
+
return cn('relative block min-h-0 min-w-0', layoutType === 'horizontal' &&
|
|
650
|
+
'h-(--layout-topbar-height) min-h-(--layout-topbar-height) w-full shrink-0 overflow-visible',
|
|
651
|
+
// overflow-visible: clipping diatur host <Navigation>; overlay nav (aside
|
|
652
|
+
// drawer dockbar, preview rail) keluar dari kolom rail collapsed dan overflow-hidden
|
|
653
|
+
// di sini ikut ter-scroll oleh focus scroll-into-view sehingga rail hilang.
|
|
654
|
+
layoutType === 'vertical' && 'h-full w-max max-w-full shrink-0 overflow-visible',
|
|
655
|
+
// empty & fluid = layout fokus-konten: slot nav boleh tetap diproyeksikan agar struktur
|
|
656
|
+
// konsumen seragam (`LayoutNavigation` + `LayoutContent`), tapi nav-nya disembunyikan.
|
|
657
|
+
(layoutType === 'empty' || layoutType === 'fluid') && 'hidden', this.class());
|
|
658
|
+
}, /* @ts-ignore */
|
|
659
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
660
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
661
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavigationComponent, isStandalone: true, selector: "LayoutNavigation", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, landmark: { classPropertyName: "landmark", publicName: "landmark", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-navigation": "" }, properties: { "class": "classes()", "attr.role": "landmark() ? \"navigation\" : null", "attr.aria-label": "landmark() ? ariaLabel() || null : null", "attr.data-layout-type": "layout.type()", "attr.data-layout-appearance": "layout.appearance()" } }, ngImport: i0, template: ` <ng-content /> `, isInline: true });
|
|
662
|
+
}
|
|
663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavigationComponent, decorators: [{
|
|
664
|
+
type: Component,
|
|
665
|
+
args: [{
|
|
666
|
+
selector: 'LayoutNavigation',
|
|
667
|
+
host: {
|
|
668
|
+
'[class]': 'classes()',
|
|
669
|
+
'data-layout-navigation': '',
|
|
670
|
+
'[attr.role]': 'landmark() ? "navigation" : null',
|
|
671
|
+
'[attr.aria-label]': 'landmark() ? ariaLabel() || null : null',
|
|
672
|
+
'[attr.data-layout-type]': 'layout.type()',
|
|
673
|
+
'[attr.data-layout-appearance]': 'layout.appearance()',
|
|
674
|
+
},
|
|
675
|
+
template: ` <ng-content /> `,
|
|
676
|
+
}]
|
|
677
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], landmark: [{ type: i0.Input, args: [{ isSignal: true, alias: "landmark", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
678
|
+
|
|
679
|
+
class LayoutContentComponent {
|
|
680
|
+
layout = inject(LayoutService);
|
|
681
|
+
document = inject(DOCUMENT, { optional: true });
|
|
682
|
+
host = inject((ElementRef));
|
|
683
|
+
router = inject(Router, { optional: true });
|
|
684
|
+
class = input('', /* @ts-ignore */
|
|
685
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
686
|
+
/** Stable target for the skip link. */
|
|
687
|
+
contentId = input('main-content', { ...(ngDevMode ? { debugName: "contentId" } : /* istanbul ignore next */ {}), alias: 'content-id' });
|
|
688
|
+
/** Move focus to the main landmark after NavigationEnd (opt-in). */
|
|
689
|
+
focusOnNavigation = input(false, { ...(ngDevMode ? { debugName: "focusOnNavigation" } : /* istanbul ignore next */ {}), alias: 'focus-on-navigation' });
|
|
690
|
+
classes = computed(() => {
|
|
691
|
+
const layoutType = this.layout.type();
|
|
692
|
+
return cn('block min-h-0 min-w-0 overflow-auto', layoutType === 'horizontal' && 'flex-1', layoutType === 'vertical' && 'h-full', layoutType === 'empty' && 'h-full w-full',
|
|
693
|
+
// fluid: konten dipusatkan oleh LayoutFluid; batasi ke ukuran frame agar tetap scrollable.
|
|
694
|
+
layoutType === 'fluid' && 'max-h-full max-w-full', this.layout.width() === 'container' && 'w-full lg:container lg:mx-auto', this.class());
|
|
695
|
+
}, /* @ts-ignore */
|
|
696
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
697
|
+
constructor() {
|
|
698
|
+
this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {
|
|
699
|
+
if (!(event instanceof NavigationEnd) || !this.focusOnNavigation()) {
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
const view = this.document?.defaultView;
|
|
703
|
+
if (!view) {
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
view.requestAnimationFrame(() => this.host.nativeElement.focus());
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
710
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutContentComponent, isStandalone: true, selector: "LayoutContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, contentId: { classPropertyName: "contentId", publicName: "content-id", isSignal: true, isRequired: false, transformFunction: null }, focusOnNavigation: { classPropertyName: "focusOnNavigation", publicName: "focus-on-navigation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-content": "", "role": "main", "tabindex": "-1" }, properties: { "class": "classes()", "attr.id": "contentId()", "attr.data-layout-type": "layout.type()", "attr.data-layout-width": "layout.width()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
|
|
711
|
+
}
|
|
712
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutContentComponent, decorators: [{
|
|
713
|
+
type: Component,
|
|
714
|
+
args: [{
|
|
715
|
+
selector: 'LayoutContent',
|
|
716
|
+
host: {
|
|
717
|
+
'[class]': 'classes()',
|
|
718
|
+
'data-layout-content': '',
|
|
719
|
+
'[attr.id]': 'contentId()',
|
|
720
|
+
role: 'main',
|
|
721
|
+
tabindex: '-1',
|
|
722
|
+
'[attr.data-layout-type]': 'layout.type()',
|
|
723
|
+
'[attr.data-layout-width]': 'layout.width()',
|
|
724
|
+
},
|
|
725
|
+
template: `<ng-content />`,
|
|
726
|
+
}]
|
|
727
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], contentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "content-id", required: false }] }], focusOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "focus-on-navigation", required: false }] }] } });
|
|
4
728
|
|
|
5
729
|
/**
|
|
6
730
|
* Generated bundle index. Do not edit.
|
|
7
|
-
*/
|
|
731
|
+
*/
|
|
732
|
+
|
|
733
|
+
export { LayoutComponent, LayoutContentComponent, LayoutEmptyComponent, LayoutFluidComponent, LayoutHorizontalComponent, LayoutLoadingComponent, LayoutNavigationComponent, LayoutVerticalComponent };
|