@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
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# @ojiepermana/angular/theme/page
|
|
2
|
+
|
|
3
|
+
Primitive page shell untuk layout halaman dengan pendekatan nested component.
|
|
4
|
+
|
|
5
|
+
Dokumentasi ini mengikuti API publik terbaru dari `@ojiepermana/angular/theme/page`, termasuk mode `height`, slot `PageDashboard`, controlled side state, dan override untuk side rail.
|
|
6
|
+
|
|
7
|
+
## Entry points
|
|
8
|
+
|
|
9
|
+
Barrel kompatibilitas `@ojiepermana/angular/theme/page` tetap mengekspor seluruh API lama.
|
|
10
|
+
Untuk bundle yang lebih terarah, gunakan secondary entrypoint berikut:
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { PageStateService, type PageVariant } from '@ojiepermana/angular/theme/page/core';
|
|
14
|
+
import { PageComponent } from '@ojiepermana/angular/theme/page/root';
|
|
15
|
+
import { PageHeaderComponent, PageContentComponent } from '@ojiepermana/angular/theme/page/slots';
|
|
16
|
+
import {
|
|
17
|
+
PageFilterComponent,
|
|
18
|
+
PageFilterToggleComponent,
|
|
19
|
+
} from '@ojiepermana/angular/theme/page/filter';
|
|
20
|
+
import { PageSideComponent, PageSideToggleComponent } from '@ojiepermana/angular/theme/page/side';
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Semua entrypoint bersifat additive; import lama dari `/page` tetap valid.
|
|
24
|
+
|
|
25
|
+
## Components
|
|
26
|
+
|
|
27
|
+
- `Page`
|
|
28
|
+
- `PageHeader`
|
|
29
|
+
- `PageContent`
|
|
30
|
+
- `PageDashboard`
|
|
31
|
+
- `PageFooter`
|
|
32
|
+
- `PageSide`
|
|
33
|
+
- `PageSideToggle`
|
|
34
|
+
- `PageFilter`
|
|
35
|
+
- `PageFilterToggle`
|
|
36
|
+
|
|
37
|
+
`PageSideToggle` menerima projected content untuk label atau ikon kustom. Jika tidak ada projected content, komponen akan memakai ikon fallback bawaan.
|
|
38
|
+
`PageHeader` dan `PageFooter` memakai `--section-border-opacity`, token separator yang sama dengan header/footer Navigation, sehingga garis section konsisten tanpa mengubah border frame utama Layout.
|
|
39
|
+
`PageDashboard` mengikuti perilaku layout dan scroll yang sama dengan `PageContent`, tetapi disediakan sebagai slot semantik untuk dashboard, board, dan surface analitik.
|
|
40
|
+
`PageFilter` adalah slot filter yang bisa diletakkan **stacked** (bar di antara `PageHeader` dan `PageContent`) atau **side** (kolom di samping `PageContent`). `PageFilterToggle` mengontrol `PageFilter` saat memakai mode `drawer`/`overlay`.
|
|
41
|
+
|
|
42
|
+
## Root API
|
|
43
|
+
|
|
44
|
+
### `Page`
|
|
45
|
+
|
|
46
|
+
| Input | Type | Default | Keterangan |
|
|
47
|
+
| ------------------- | ----------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
48
|
+
| `variant` | `'stacked' \| 'side'` | `'stacked'` | Menentukan struktur utama page shell. |
|
|
49
|
+
| `scroll` | `'content' \| 'page'` | `'content'` | Menentukan apakah body slot scroll sendiri atau seluruh root `Page` scroll bersama. |
|
|
50
|
+
| `height` | `'auto' \| 'fix'` | `'auto'` | Mengontrol tinggi `PageHeader` dan `PageFooter`. |
|
|
51
|
+
| `appearance` | `'flat' \| 'border-rail'` | `'flat'` | Appearance visual yang dibagi dengan layout/navigation; menyeragamkan border header/footer (`border-b`/`border-t`). |
|
|
52
|
+
| `position` | `'left' \| 'right'` | `'left'` | Posisi default untuk `PageSide` jika side tidak memberi override sendiri. |
|
|
53
|
+
| `sideMode` | `'sticky' \| 'drawer' \| 'overlay'` | `'sticky'` | Mode default untuk `PageSide` jika side tidak memberi override sendiri. |
|
|
54
|
+
| `sideWidth` | `string` | `'16rem'` | Lebar default side rail; dipakai juga untuk drawer dan overlay. |
|
|
55
|
+
| `sideOpen` | `boolean \| null` | `null` | Saat `null`, state side tidak dikontrol dari parent. Saat `true/false`, komponen masuk controlled mode. |
|
|
56
|
+
| `filterOpen` | `boolean \| null` | `null` | Controlled state untuk `PageFilter` drawer/overlay. `null` = uncontrolled (dikelola toggle/backdrop/Esc). |
|
|
57
|
+
| `overlayCloseLabel` | `string` | `'Close overlay panel'` | Accessible name for the backdrop button that dismisses an open overlay panel. |
|
|
58
|
+
| `class` | `string` | `''` | Class tambahan pada host `Page`. |
|
|
59
|
+
|
|
60
|
+
| Output | Payload | Keterangan |
|
|
61
|
+
| ------------------ | --------- | ------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `sideOpenChange` | `boolean` | Emit setiap ada permintaan buka/tutup side, baik dari toggle, backdrop, maupun tombol `Esc`. |
|
|
63
|
+
| `filterOpenChange` | `boolean` | Emit setiap ada permintaan buka/tutup filter (drawer/overlay), baik dari toggle, backdrop, `Esc`. |
|
|
64
|
+
|
|
65
|
+
`Page` juga menambahkan atribut host `data-page-variant`, `data-page-height`, `data-page-scroll`, `data-page-appearance`, `data-page-position`, `data-page-side-mode`, dan `data-page-side-open` untuk styling atau inspeksi. Saat `PageFilter` aktif, ditambahkan pula `data-page-filter-placement`, `data-page-filter-mode`, dan `data-page-filter-open`.
|
|
66
|
+
|
|
67
|
+
### Apps launcher (layout `empty`)
|
|
68
|
+
|
|
69
|
+
Saat `Page` dirender di dalam layout `empty`, sebuah tombol icon-only tanpa border (ikon `apps`) muncul **otomatis** di pojok kanan-atas dan membuka **main navigation** (`id="main"`) sebagai flyout. Penempatannya menyesuaikan struktur `Page`:
|
|
70
|
+
|
|
71
|
+
- Ada `PageHeader` → tombol menyatu di kanan header.
|
|
72
|
+
- Tanpa `PageHeader` (mis. hanya `PageDashboard`) → tombol mengambang di atas konten.
|
|
73
|
+
|
|
74
|
+
Tombol hanya muncul ketika layout aktif `empty` dan nav target punya data. Di layout lain (`vertical`/`horizontal`/`fluid`) tombol tidak dirender karena navigasi utama sudah terlihat.
|
|
75
|
+
|
|
76
|
+
| Input | Type | Default | Keterangan |
|
|
77
|
+
| -------------- | --------- | ------------------- | ------------------------------------------------------------ |
|
|
78
|
+
| `appsLauncher` | `boolean` | `true` | Aktif/nonaktifkan apps-launcher pada layout `empty`. |
|
|
79
|
+
| `appsNavId` | `string` | `'main'` | Id navigasi yang disurface oleh apps-launcher. |
|
|
80
|
+
| `appsIcon` | `string` | `'apps'` | Nama ikon Material untuk tombol. |
|
|
81
|
+
| `appsLabel` | `string` | `'Open navigation'` | Label/aria-label tombol icon-only (untuk aksesibilitas AXE). |
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<!-- Dashboard tanpa header: tombol apps mengambang di kanan-atas saat layout empty. -->
|
|
85
|
+
<Page variant="stacked">
|
|
86
|
+
<PageDashboard>
|
|
87
|
+
<p>Konten dashboard.</p>
|
|
88
|
+
</PageDashboard>
|
|
89
|
+
</Page>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Slot API
|
|
93
|
+
|
|
94
|
+
### Body slots
|
|
95
|
+
|
|
96
|
+
| Component | Input | Default | Keterangan |
|
|
97
|
+
| --------------- | --------------- | ------- | -------------------------------------------------------------------------------------- |
|
|
98
|
+
| `PageHeader` | `class: string` | `''` | Slot header dengan border bawah. Saat `height="fix"`, tinggi dipaksa `h-12`. |
|
|
99
|
+
| `PageContent` | `class: string` | `''` | Body slot utama. Mengikuti mode `scroll` dari root `Page`. |
|
|
100
|
+
| `PageDashboard` | `class: string` | `''` | Setara dengan `PageContent`, tetapi untuk kebutuhan dashboard/board/analytics surface. |
|
|
101
|
+
| `PageFooter` | `class: string` | `''` | Slot footer dengan border atas. Saat `height="fix"`, tinggi dipaksa `h-12`. |
|
|
102
|
+
|
|
103
|
+
### `PageSide`
|
|
104
|
+
|
|
105
|
+
| Input | Type | Default | Keterangan |
|
|
106
|
+
| ------------ | ------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------ |
|
|
107
|
+
| `mode` | `'sticky' \| 'drawer' \| 'overlay' \| null` | `null` | Override mode side untuk instance tersebut. Jika `null`, memakai `sideMode` dari root `Page`. |
|
|
108
|
+
| `position` | `'left' \| 'right' \| null` | `null` | Override posisi side untuk instance tersebut. Jika `null`, memakai nilai dari root `Page`. |
|
|
109
|
+
| `width` | `string \| null` | `null` | Override lebar side untuk instance tersebut. Jika `null`, memakai `sideWidth` dari root `Page`. |
|
|
110
|
+
| `closeOnEsc` | `boolean` | `true` | Berlaku untuk `drawer` dan `overlay`; menutup side ketika tombol `Esc` ditekan. |
|
|
111
|
+
| `ariaLabel` | `string` | `'Side panel'` | Nama aksesibilitas panel saat `drawer`/`overlay` (dipasang sebagai `aria-label` pada `role="dialog"`). |
|
|
112
|
+
| `class` | `string` | `''` | Class tambahan pada host `PageSide`. |
|
|
113
|
+
|
|
114
|
+
### `PageSideToggle`
|
|
115
|
+
|
|
116
|
+
| Input / Output | Type | Default | Keterangan |
|
|
117
|
+
| -------------- | --------- | -------------------- | ----------------------------------------------------------- |
|
|
118
|
+
| `ariaLabel` | `string` | `'Toggle page side'` | Label aksesibilitas untuk tombol toggle. |
|
|
119
|
+
| `class` | `string` | `''` | Class tambahan pada host toggle. |
|
|
120
|
+
| `toggled` | `boolean` | - | Emit nilai open state terbaru setelah tombol toggle diklik. |
|
|
121
|
+
|
|
122
|
+
### `PageFilter`
|
|
123
|
+
|
|
124
|
+
| Input | Type | Default | Keterangan |
|
|
125
|
+
| ------------- | ----------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
126
|
+
| `placement` | `'stacked' \| 'side'` | `'stacked'` | `stacked` = bar di antara `PageHeader` dan `PageContent`; `side` = kolom di samping `PageContent`. |
|
|
127
|
+
| `mode` | `'sticky' \| 'drawer' \| 'overlay'` | `'sticky'` | Hanya berlaku untuk `placement="side"`. `placement="stacked"` selalu `sticky`. |
|
|
128
|
+
| `position` | `'left' \| 'right' \| null` | `null` | Posisi kolom saat `side`. Jika `null`, memakai default (`left`). |
|
|
129
|
+
| `width` | `string \| null` | `null` | Lebar kolom saat `side`. Jika `null`, memakai `18rem`. |
|
|
130
|
+
| `closeOnEsc` | `boolean` | `true` | Berlaku untuk `drawer`/`overlay`; menutup filter ketika tombol `Esc` ditekan. |
|
|
131
|
+
| `collapsible` | `boolean` | `false` | Khusus `placement="stacked"`: bar bisa dibuka/tutup lewat `PageFilterToggle`, default tertutup. Diabaikan untuk `side`. |
|
|
132
|
+
| `ariaLabel` | `string` | `'Filters'` | Nama aksesibilitas panel saat `drawer`/`overlay` (dipasang sebagai `aria-label` pada `role="dialog"`). |
|
|
133
|
+
| `class` | `string` | `''` | Class tambahan pada host `PageFilter`. |
|
|
134
|
+
|
|
135
|
+
`PageFilter` menambahkan atribut host `data-page-slot="filter"`, `data-page-filter-placement`, `data-page-filter-mode`, `data-page-filter-open`, dan `data-page-position`.
|
|
136
|
+
|
|
137
|
+
Aksesibilitas: pada mode `drawer`/`overlay`, panel menjadi `role="dialog"` (dengan `aria-modal`
|
|
138
|
+
khusus `overlay`), fokus dipindahkan ke panel saat terbuka dan dikembalikan ke pemicu saat
|
|
139
|
+
tertutup, dan saat tertutup panel diberi `inert` sehingga isinya keluar dari tab order.
|
|
140
|
+
`overlay` juga men-trap fokus, membuat background Page inert, dan mengunci scroll document;
|
|
141
|
+
`drawer` sengaja tetap non-modal. `PageSide` memakai pola yang sama. Menekan `Esc` (atau
|
|
142
|
+
mengklik backdrop overlay) menutup panel mengambang yang sedang terbuka.
|
|
143
|
+
|
|
144
|
+
### `PageFilterToggle`
|
|
145
|
+
|
|
146
|
+
| Input / Output | Type | Default | Keterangan |
|
|
147
|
+
| -------------- | --------- | ---------------------- | ----------------------------------------------------------- |
|
|
148
|
+
| `ariaLabel` | `string` | `'Toggle page filter'` | Label aksesibilitas untuk tombol toggle filter. |
|
|
149
|
+
| `class` | `string` | `''` | Class tambahan pada host toggle. |
|
|
150
|
+
| `toggled` | `boolean` | - | Emit nilai open state terbaru setelah tombol toggle diklik. |
|
|
151
|
+
|
|
152
|
+
## Variants
|
|
153
|
+
|
|
154
|
+
- `stacked`
|
|
155
|
+
- `side`
|
|
156
|
+
|
|
157
|
+
## Scroll Modes
|
|
158
|
+
|
|
159
|
+
- `content` (default): `PageContent` atau `PageDashboard` menjadi area scroll. Pada variant `side`, `PageSide` dan body slot yang dipakai sama-sama stretch ke parent dan masing-masing punya scroll sendiri.
|
|
160
|
+
- `page`: seluruh isi `Page` menjadi area scroll. Header, content, footer, dan pada variant `side` juga `PageSide` akan mengikuti tinggi content induk tanpa scroll internal.
|
|
161
|
+
|
|
162
|
+
## Height Modes
|
|
163
|
+
|
|
164
|
+
- `auto` (default): tinggi `PageHeader` dan `PageFooter` mengikuti isi.
|
|
165
|
+
- `fix`: `PageHeader` dan `PageFooter` dipaksa `h-12` dan `overflow-hidden`, sehingga isi yang melebihi tinggi tersebut akan terpotong.
|
|
166
|
+
|
|
167
|
+
Dalam mode `fix`, pastikan isi header/footer memang dirancang sebagai rail ringkas. Konten yang lebih tinggi dari `h-12` tidak akan ikut menambah tinggi slot.
|
|
168
|
+
|
|
169
|
+
## Behavior Summary
|
|
170
|
+
|
|
171
|
+
| Variant | `scroll="content"` | `scroll="page"` |
|
|
172
|
+
| --------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
173
|
+
| `stacked` | `PageContent` atau `PageDashboard` stretch ke tinggi yang tersedia dan menjadi area scroll | seluruh `Page` scroll bersama; header, content, footer ikut satu kanvas |
|
|
174
|
+
| `side` | `PageSide` dan body slot (`PageContent`/`PageDashboard`) sama-sama stretch ke parent dan punya scroll sendiri | `PageSide` dan body slot mengikuti tinggi content induk tanpa scroll internal |
|
|
175
|
+
|
|
176
|
+
## Header And Footer Height
|
|
177
|
+
|
|
178
|
+
Saat memakai `height="fix"`, slot berikut tidak boleh melebihi tinggi tetap yang disediakan:
|
|
179
|
+
|
|
180
|
+
- `PageHeader`: `h-12` dengan `overflow-hidden`
|
|
181
|
+
- `PageFooter`: `h-12` dengan `overflow-hidden`
|
|
182
|
+
|
|
183
|
+
## Side Modes
|
|
184
|
+
|
|
185
|
+
- `sticky`
|
|
186
|
+
- `drawer`
|
|
187
|
+
- `overlay`
|
|
188
|
+
|
|
189
|
+
## Filter Placement
|
|
190
|
+
|
|
191
|
+
`PageFilter` punya dua placement yang orthogonal terhadap `variant` `Page`:
|
|
192
|
+
|
|
193
|
+
- `stacked` (default): filter menjadi bar selebar content di antara `PageHeader` dan `PageContent`. Filter mendorong content ke bawah; pada `scroll="content"`, content mengisi tinggi sisa dan scroll sendiri (filter `shrink-0`). Pada `scroll="page"`, bar dipin (`sticky top-0`) agar tetap terjangkau saat page scroll.
|
|
194
|
+
- `side`: filter menjadi kolom di samping content. Mode `sticky` mendorong content ke samping (push); mode `drawer`/`overlay` mengambang di atas content dan dikontrol via `PageFilterToggle`, backdrop, atau tombol `Esc`.
|
|
195
|
+
|
|
196
|
+
Karena independen dari `variant`, side filter bisa hidup berdampingan dengan `PageSide` — `PageSide` tetap menjadi rail terluar dan `PageFilter` menjadi kolom yang lebih dekat ke content (`[PageSide | PageFilter | PageContent]`).
|
|
197
|
+
|
|
198
|
+
## Examples
|
|
199
|
+
|
|
200
|
+
### Stacked with content scroll
|
|
201
|
+
|
|
202
|
+
```html
|
|
203
|
+
<Page variant="stacked">
|
|
204
|
+
<PageHeader>
|
|
205
|
+
<h1>Executive summary</h1>
|
|
206
|
+
</PageHeader>
|
|
207
|
+
|
|
208
|
+
<PageContent>
|
|
209
|
+
<p>Secara default, slot content yang menjadi area scroll.</p>
|
|
210
|
+
</PageContent>
|
|
211
|
+
|
|
212
|
+
<PageFooter>
|
|
213
|
+
<button type="button">Save</button>
|
|
214
|
+
</PageFooter>
|
|
215
|
+
</Page>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Stacked dashboard surface
|
|
219
|
+
|
|
220
|
+
`PageDashboard` berdiri sendiri — tidak memerlukan `PageHeader` maupun `PageFooter`. Gunakan slot ini ketika area utama secara semantik adalah dashboard atau board analitik.
|
|
221
|
+
|
|
222
|
+
```html
|
|
223
|
+
<Page variant="stacked">
|
|
224
|
+
<PageDashboard>
|
|
225
|
+
<p>Gunakan slot ini ketika area utama secara semantik adalah dashboard atau board analitik.</p>
|
|
226
|
+
</PageDashboard>
|
|
227
|
+
</Page>
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`PageHeader` dan `PageFooter` tetap opsional bila memang dibutuhkan:
|
|
231
|
+
|
|
232
|
+
```html
|
|
233
|
+
<Page variant="stacked">
|
|
234
|
+
<PageHeader>
|
|
235
|
+
<h1>Executive dashboard</h1>
|
|
236
|
+
</PageHeader>
|
|
237
|
+
|
|
238
|
+
<PageDashboard>
|
|
239
|
+
<p>Dashboard dengan header dan footer eksplisit.</p>
|
|
240
|
+
</PageDashboard>
|
|
241
|
+
|
|
242
|
+
<PageFooter>
|
|
243
|
+
<button type="button">Open insight</button>
|
|
244
|
+
</PageFooter>
|
|
245
|
+
</Page>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Stacked with fixed header and footer height
|
|
249
|
+
|
|
250
|
+
```html
|
|
251
|
+
<Page variant="stacked" height="fix">
|
|
252
|
+
<PageHeader>
|
|
253
|
+
<div class="h-20">Bagian ini akan terpotong ke tinggi h-12.</div>
|
|
254
|
+
</PageHeader>
|
|
255
|
+
|
|
256
|
+
<PageContent>
|
|
257
|
+
<p>Content tetap mengikuti mode scroll yang aktif.</p>
|
|
258
|
+
</PageContent>
|
|
259
|
+
|
|
260
|
+
<PageFooter>
|
|
261
|
+
<div class="h-20">Footer juga tidak boleh melebihi h-12.</div>
|
|
262
|
+
</PageFooter>
|
|
263
|
+
</Page>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Stacked with page scroll
|
|
267
|
+
|
|
268
|
+
```html
|
|
269
|
+
<Page variant="stacked" scroll="page">
|
|
270
|
+
<PageHeader>
|
|
271
|
+
<h1>Executive summary</h1>
|
|
272
|
+
</PageHeader>
|
|
273
|
+
|
|
274
|
+
<PageContent>
|
|
275
|
+
<p>Semua area di dalam page ikut scroll bersama.</p>
|
|
276
|
+
</PageContent>
|
|
277
|
+
|
|
278
|
+
<PageFooter>
|
|
279
|
+
<button type="button">Save</button>
|
|
280
|
+
</PageFooter>
|
|
281
|
+
</Page>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Side with content scroll
|
|
285
|
+
|
|
286
|
+
```html
|
|
287
|
+
<Page variant="side" position="left" scroll="content">
|
|
288
|
+
<PageHeader>
|
|
289
|
+
<PageSideToggle ariaLabel="Toggle side">
|
|
290
|
+
<span>Open filters</span>
|
|
291
|
+
</PageSideToggle>
|
|
292
|
+
<h1>Page title</h1>
|
|
293
|
+
</PageHeader>
|
|
294
|
+
|
|
295
|
+
<PageSide mode="sticky">
|
|
296
|
+
<p>Side rail scroll sendiri.</p>
|
|
297
|
+
</PageSide>
|
|
298
|
+
|
|
299
|
+
<PageContent>
|
|
300
|
+
<p>Main content juga scroll sendiri.</p>
|
|
301
|
+
</PageContent>
|
|
302
|
+
</Page>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Side with page scroll
|
|
306
|
+
|
|
307
|
+
```html
|
|
308
|
+
<Page variant="side" position="left" scroll="page">
|
|
309
|
+
<PageHeader>
|
|
310
|
+
<h1>Executive detail</h1>
|
|
311
|
+
</PageHeader>
|
|
312
|
+
|
|
313
|
+
<PageSide mode="sticky">
|
|
314
|
+
<p>Side mengikuti tinggi content induk.</p>
|
|
315
|
+
</PageSide>
|
|
316
|
+
|
|
317
|
+
<PageContent>
|
|
318
|
+
<p>Root `Page` yang menjadi area scroll tunggal.</p>
|
|
319
|
+
</PageContent>
|
|
320
|
+
</Page>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Controlled side state
|
|
324
|
+
|
|
325
|
+
```html
|
|
326
|
+
<Page
|
|
327
|
+
variant="side"
|
|
328
|
+
sideMode="drawer"
|
|
329
|
+
[sideOpen]="filtersOpen()"
|
|
330
|
+
(sideOpenChange)="filtersOpen.set($event)"
|
|
331
|
+
>
|
|
332
|
+
<PageHeader>
|
|
333
|
+
<PageSideToggle ariaLabel="Toggle filters">
|
|
334
|
+
<span>Filters</span>
|
|
335
|
+
</PageSideToggle>
|
|
336
|
+
<h1>Pipeline board</h1>
|
|
337
|
+
</PageHeader>
|
|
338
|
+
|
|
339
|
+
<PageSide>
|
|
340
|
+
<p>Drawer ini mengikuti state dari parent.</p>
|
|
341
|
+
</PageSide>
|
|
342
|
+
|
|
343
|
+
<PageDashboard>
|
|
344
|
+
<p>Dashboard tetap memakai body behavior yang sama seperti page-content.</p>
|
|
345
|
+
</PageDashboard>
|
|
346
|
+
</Page>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Stacked filter (bar antara header dan content)
|
|
350
|
+
|
|
351
|
+
```html
|
|
352
|
+
<Page variant="stacked">
|
|
353
|
+
<PageHeader>
|
|
354
|
+
<h1>Orders</h1>
|
|
355
|
+
</PageHeader>
|
|
356
|
+
|
|
357
|
+
<PageFilter placement="stacked">
|
|
358
|
+
<input type="search" aria-label="Cari order" placeholder="Cari…" />
|
|
359
|
+
<button type="button">Status</button>
|
|
360
|
+
<button type="button">Tanggal</button>
|
|
361
|
+
</PageFilter>
|
|
362
|
+
|
|
363
|
+
<PageContent>
|
|
364
|
+
<p>Content mengisi tinggi sisa dan scroll sendiri di bawah bar filter.</p>
|
|
365
|
+
</PageContent>
|
|
366
|
+
</Page>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Collapsible stacked filter
|
|
370
|
+
|
|
371
|
+
```html
|
|
372
|
+
<Page variant="stacked">
|
|
373
|
+
<PageHeader>
|
|
374
|
+
<PageFilterToggle ariaLabel="Toggle filters">
|
|
375
|
+
<span>Filters</span>
|
|
376
|
+
</PageFilterToggle>
|
|
377
|
+
<h1>Orders</h1>
|
|
378
|
+
</PageHeader>
|
|
379
|
+
|
|
380
|
+
<!-- Default tertutup; toggle membuka/menutup bar. -->
|
|
381
|
+
<PageFilter placement="stacked" collapsible>
|
|
382
|
+
<input type="search" aria-label="Cari order" placeholder="Cari…" />
|
|
383
|
+
<button type="button">Status</button>
|
|
384
|
+
</PageFilter>
|
|
385
|
+
|
|
386
|
+
<PageContent>
|
|
387
|
+
<p>Saat filter tertutup, content mengisi kembali ruang bar.</p>
|
|
388
|
+
</PageContent>
|
|
389
|
+
</Page>
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Side filter (sticky push)
|
|
393
|
+
|
|
394
|
+
```html
|
|
395
|
+
<Page variant="stacked">
|
|
396
|
+
<PageHeader>
|
|
397
|
+
<h1>Catalog</h1>
|
|
398
|
+
</PageHeader>
|
|
399
|
+
|
|
400
|
+
<PageFilter placement="side" mode="sticky" position="left" width="18rem">
|
|
401
|
+
<p>Facet filter; mendorong content ke samping.</p>
|
|
402
|
+
</PageFilter>
|
|
403
|
+
|
|
404
|
+
<PageContent>
|
|
405
|
+
<p>Hasil produk.</p>
|
|
406
|
+
</PageContent>
|
|
407
|
+
</Page>
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Side filter (controlled drawer)
|
|
411
|
+
|
|
412
|
+
```html
|
|
413
|
+
<Page [filterOpen]="filterOpen()" (filterOpenChange)="filterOpen.set($event)">
|
|
414
|
+
<PageHeader>
|
|
415
|
+
<PageFilterToggle ariaLabel="Toggle filter">
|
|
416
|
+
<span>Filter</span>
|
|
417
|
+
</PageFilterToggle>
|
|
418
|
+
<h1>Catalog</h1>
|
|
419
|
+
</PageHeader>
|
|
420
|
+
|
|
421
|
+
<PageFilter placement="side" mode="drawer" position="right">
|
|
422
|
+
<p>Drawer filter mengikuti state dari parent.</p>
|
|
423
|
+
</PageFilter>
|
|
424
|
+
|
|
425
|
+
<PageContent>
|
|
426
|
+
<p>Hasil produk.</p>
|
|
427
|
+
</PageContent>
|
|
428
|
+
</Page>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Filter dan side rail berdampingan
|
|
432
|
+
|
|
433
|
+
`PageSide` (rail terluar) dan `PageFilter` (`placement="side"`) bisa aktif bersamaan: `[PageSide | PageFilter | PageContent]`.
|
|
434
|
+
|
|
435
|
+
```html
|
|
436
|
+
<Page variant="side" position="left">
|
|
437
|
+
<PageHeader>
|
|
438
|
+
<h1>Workspace</h1>
|
|
439
|
+
</PageHeader>
|
|
440
|
+
|
|
441
|
+
<PageSide mode="sticky">
|
|
442
|
+
<p>Navigasi.</p>
|
|
443
|
+
</PageSide>
|
|
444
|
+
|
|
445
|
+
<PageFilter placement="side" position="left">
|
|
446
|
+
<p>Filter.</p>
|
|
447
|
+
</PageFilter>
|
|
448
|
+
|
|
449
|
+
<PageContent>
|
|
450
|
+
<p>Content.</p>
|
|
451
|
+
</PageContent>
|
|
452
|
+
</Page>
|
|
453
|
+
```
|