@ojiepermana/angular 0.0.2
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 +237 -0
- package/fesm2022/ojiepermana-angular-internal.mjs +58 -0
- package/fesm2022/ojiepermana-angular-internal.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-layout.mjs +471 -0
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-shell.mjs +14 -0
- package/fesm2022/ojiepermana-angular-shell.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-component.mjs +249 -0
- package/fesm2022/ojiepermana-angular-theme-component.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-directive.mjs +29 -0
- package/fesm2022/ojiepermana-angular-theme-directive.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-service.mjs +243 -0
- package/fesm2022/ojiepermana-angular-theme-service.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme.mjs +6 -0
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular.mjs +6 -0
- package/fesm2022/ojiepermana-angular.mjs.map +1 -0
- package/layout/README.md +143 -0
- package/layout/styles/index.css +157 -0
- package/package.json +59 -0
- package/shell/README.md +37 -0
- package/styles/index.css +2 -0
- package/styles/resets.css +22 -0
- package/theme/README.md +382 -0
- package/theme/styles/adapters/material-ui/index.css +210 -0
- package/theme/styles/index.css +8 -0
- package/theme/styles/layout/index.css +1 -0
- package/theme/styles/modes/dark.css +84 -0
- package/theme/styles/presets/colors/blue.css +10 -0
- package/theme/styles/presets/colors/brand.css +11 -0
- package/theme/styles/presets/colors/cyan.css +10 -0
- package/theme/styles/presets/colors/green.css +10 -0
- package/theme/styles/presets/colors/index.css +7 -0
- package/theme/styles/presets/colors/orange.css +10 -0
- package/theme/styles/presets/colors/purple.css +10 -0
- package/theme/styles/presets/colors/red.css +10 -0
- package/theme/styles/presets/styles/flat.css +30 -0
- package/theme/styles/presets/styles/glass.css +34 -0
- package/theme/styles/presets/styles/index.css +2 -0
- package/theme/styles/roles/index.css +49 -0
- package/theme/styles/tokens/foundation.css +139 -0
- package/theme/styles/tokens/semantic.css +87 -0
- package/theme/styles/utilities/index.css +88 -0
- package/types/ojiepermana-angular-internal.d.ts +26 -0
- package/types/ojiepermana-angular-layout.d.ts +90 -0
- package/types/ojiepermana-angular-shell.d.ts +12 -0
- package/types/ojiepermana-angular-theme-component.d.ts +46 -0
- package/types/ojiepermana-angular-theme-directive.d.ts +10 -0
- package/types/ojiepermana-angular-theme-service.d.ts +68 -0
- package/types/ojiepermana-angular-theme.d.ts +2 -0
- package/types/ojiepermana-angular.d.ts +2 -0
package/layout/README.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Layout Library
|
|
2
|
+
|
|
3
|
+
Runtime layout state, shell components, layout controls, and shell selectors for `@ojiepermana/angular/layout`.
|
|
4
|
+
|
|
5
|
+
## Package Shape
|
|
6
|
+
|
|
7
|
+
Import the public API from:
|
|
8
|
+
|
|
9
|
+
- `@ojiepermana/angular/layout`
|
|
10
|
+
|
|
11
|
+
If you want one convenience provider that wires layout and theme together, use `@ojiepermana/angular/shell`.
|
|
12
|
+
|
|
13
|
+
For styles in consumer applications, use `@ojiepermana/angular/styles/index.css`.
|
|
14
|
+
If a consumer wants the library's optional application-level reset helpers, they can additionally import `@ojiepermana/angular/styles/resets.css`.
|
|
15
|
+
|
|
16
|
+
## What This Library Owns
|
|
17
|
+
|
|
18
|
+
- Global layout state with Angular signals through `LayoutService`
|
|
19
|
+
- Layout runtime DOM contract on `document.documentElement`
|
|
20
|
+
- Optional subtree mirroring through `LayoutHostDirective`
|
|
21
|
+
- Reusable vertical and horizontal shell components
|
|
22
|
+
- Standalone layout controls for mode and container width
|
|
23
|
+
- Layout-owned shell selectors and layout state selectors
|
|
24
|
+
|
|
25
|
+
## Runtime Contract
|
|
26
|
+
|
|
27
|
+
When `LayoutService` is active, it writes the current state to `document.documentElement`.
|
|
28
|
+
|
|
29
|
+
- `data-layout-mode` stores the active shell mode.
|
|
30
|
+
- `data-layout-container` stores the active width mode.
|
|
31
|
+
|
|
32
|
+
`LayoutHostDirective` mirrors the same contract onto any host element with `ngtLayoutHost`.
|
|
33
|
+
|
|
34
|
+
## Supported Values
|
|
35
|
+
|
|
36
|
+
- `LayoutMode`: `vertical`, `horizontal`, `empty`
|
|
37
|
+
- `LayoutContainer`: `full`, `boxed`
|
|
38
|
+
|
|
39
|
+
## Public API
|
|
40
|
+
|
|
41
|
+
Import from `@ojiepermana/angular/layout`.
|
|
42
|
+
|
|
43
|
+
- `LayoutService`
|
|
44
|
+
- `provideNgLayout`
|
|
45
|
+
- `NG_LAYOUT_CONFIG`
|
|
46
|
+
- `LayoutMode`
|
|
47
|
+
- `LayoutContainer`
|
|
48
|
+
- `NgLayoutConfig`
|
|
49
|
+
- `LayoutHostDirective`
|
|
50
|
+
- `LayoutVerticalComponent`
|
|
51
|
+
- `LayoutHorizontalComponent`
|
|
52
|
+
- `LayoutContainerSwitcherComponent`
|
|
53
|
+
- `LayoutModeSwitcherComponent`
|
|
54
|
+
|
|
55
|
+
`provideNgLayout()` currently defaults to:
|
|
56
|
+
|
|
57
|
+
- `defaultMode: 'vertical'`
|
|
58
|
+
- `defaultContainer: 'full'`
|
|
59
|
+
|
|
60
|
+
Persistence keys are fixed by the runtime. Deprecated config fields such as `storageKey` and `storageVersion` have been removed from `NgLayoutConfig`.
|
|
61
|
+
|
|
62
|
+
`LayoutService` also exposes `reset()` to clear persisted layout state and restore the configured defaults.
|
|
63
|
+
|
|
64
|
+
`LayoutModeSwitcherComponent` intentionally exposes only `vertical` and `horizontal`. The `empty` mode remains programmatic so consuming applications can opt into a content-only shell state without presenting it as a primary end-user toggle.
|
|
65
|
+
|
|
66
|
+
## Styles
|
|
67
|
+
|
|
68
|
+
The layout stylesheet source is `projects/library/layout/styles/index.css` inside this workspace.
|
|
69
|
+
|
|
70
|
+
It owns the `data-layout-*` selectors and the `horizontal` and `vertical` shell selectors.
|
|
71
|
+
|
|
72
|
+
Layout styles consume theme tokens. For application usage, prefer the aggregate stylesheet entry at `projects/library/styles/index.css` in this workspace or `@ojiepermana/angular/styles/index.css` from the published package.
|
|
73
|
+
The shared bundle now includes reduced-motion-aware transitions for shell chrome colors, shadows, and radii while keeping structural mode changes immediate to avoid layout jank.
|
|
74
|
+
|
|
75
|
+
Application-level resets are intentionally opt-in. If a consumer wants them, import `projects/library/styles/resets.css` in this workspace or `@ojiepermana/angular/styles/resets.css` from the published package in addition to the aggregate bundle.
|
|
76
|
+
|
|
77
|
+
Internally, the shell templates now prefer `<shell-content>` instead of the deprecated HTML `<content>` element name. A legacy `content` selector remains supported for compatibility inside the library's internal shell marker directives.
|
|
78
|
+
|
|
79
|
+
## SSR Notes
|
|
80
|
+
|
|
81
|
+
- Providers can be registered on the server safely.
|
|
82
|
+
- Layout DOM writes and `localStorage` persistence remain no-op until the browser runtime is available.
|
|
83
|
+
- `empty` mode can still be set programmatically on the server or client; the switcher simply does not render it as a menu choice.
|
|
84
|
+
|
|
85
|
+
## Troubleshooting
|
|
86
|
+
|
|
87
|
+
- If layout state does not appear to update, verify that the aggregate stylesheet bundle is imported and that the consuming shell actually renders `vertical` or `horizontal`.
|
|
88
|
+
- If a consuming application needs a content-only shell, set `LayoutService.setMode('empty')` or configure `defaultMode: 'empty'`; this is supported even though the switcher UI does not display that option.
|
|
89
|
+
|
|
90
|
+
## Usage
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { ApplicationConfig, provideBrowserGlobalErrorListeners } from '@angular/core';
|
|
94
|
+
import { provideRouter } from '@angular/router';
|
|
95
|
+
import { provideNgLayout } from '@ojiepermana/angular/layout';
|
|
96
|
+
import { provideNgTheme } from '@ojiepermana/angular/theme/service';
|
|
97
|
+
|
|
98
|
+
import { routes } from './app.routes';
|
|
99
|
+
|
|
100
|
+
export const appConfig: ApplicationConfig = {
|
|
101
|
+
providers: [
|
|
102
|
+
provideBrowserGlobalErrorListeners(),
|
|
103
|
+
provideRouter(routes),
|
|
104
|
+
provideNgTheme(),
|
|
105
|
+
provideNgLayout({ defaultMode: 'vertical', defaultContainer: 'boxed' }),
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
112
|
+
import {
|
|
113
|
+
LayoutContainerSwitcherComponent,
|
|
114
|
+
LayoutModeSwitcherComponent,
|
|
115
|
+
LayoutVerticalComponent,
|
|
116
|
+
} from '@ojiepermana/angular/layout';
|
|
117
|
+
|
|
118
|
+
@Component({
|
|
119
|
+
selector: 'app-shell',
|
|
120
|
+
imports: [LayoutContainerSwitcherComponent, LayoutModeSwitcherComponent, LayoutVerticalComponent],
|
|
121
|
+
template: `
|
|
122
|
+
<vertical>
|
|
123
|
+
<nav navigation class="flex h-full w-full flex-col gap-3 px-4 py-5">
|
|
124
|
+
<div class="flex items-center gap-1">
|
|
125
|
+
<layout-mode-switcher />
|
|
126
|
+
<layout-container-switcher />
|
|
127
|
+
</div>
|
|
128
|
+
</nav>
|
|
129
|
+
</vertical>
|
|
130
|
+
`,
|
|
131
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
132
|
+
})
|
|
133
|
+
export class AppShellComponent {}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Persistence
|
|
137
|
+
|
|
138
|
+
Layout state is persisted in `localStorage` using these flat keys:
|
|
139
|
+
|
|
140
|
+
- `layout-mode`
|
|
141
|
+
- `layout-container`
|
|
142
|
+
|
|
143
|
+
Legacy `ng-theme:v2:layout-mode` and `ng-theme:v2:layout-container` entries are migrated automatically when they are read.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
[data-layout-container='full'] {
|
|
2
|
+
--layout-shell-max-width: 100%;
|
|
3
|
+
--layout-shell-padding: 0rem;
|
|
4
|
+
--layout-shell-radius: 0rem;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-layout-container='boxed'] {
|
|
8
|
+
--layout-shell-max-width: 82rem;
|
|
9
|
+
--layout-shell-padding: clamp(1rem, 2vw, 2rem);
|
|
10
|
+
--layout-shell-radius: var(--radius-xl);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
[data-layout-mode='empty'] {
|
|
14
|
+
--layout-header-display: none;
|
|
15
|
+
--layout-sidebar-display: none;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
horizontal,
|
|
19
|
+
vertical {
|
|
20
|
+
display: block;
|
|
21
|
+
min-block-size: 100dvh;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
horizontal > layout,
|
|
25
|
+
vertical > layout {
|
|
26
|
+
display: block;
|
|
27
|
+
min-block-size: 100dvh;
|
|
28
|
+
padding: var(--layout-shell-padding);
|
|
29
|
+
background: var(--background);
|
|
30
|
+
color: var(--foreground);
|
|
31
|
+
transition: var(--ngt-chrome-transition);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
horizontal > layout > :is(content, shell-content),
|
|
35
|
+
vertical > layout > :is(content, shell-content) {
|
|
36
|
+
display: flex;
|
|
37
|
+
inline-size: min(100%, var(--layout-shell-max-width));
|
|
38
|
+
min-block-size: calc(100dvh - (var(--layout-shell-padding) * 2));
|
|
39
|
+
margin-inline: auto;
|
|
40
|
+
border: 1px solid var(--container-border);
|
|
41
|
+
border-radius: var(--layout-shell-radius);
|
|
42
|
+
background: var(--container-surface);
|
|
43
|
+
color: var(--container-foreground);
|
|
44
|
+
box-shadow: var(--container-shadow);
|
|
45
|
+
backdrop-filter: var(--container-backdrop);
|
|
46
|
+
-webkit-backdrop-filter: var(--container-backdrop);
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
transition: var(--ngt-shell-transition);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
horizontal > layout > :is(content, shell-content) {
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
vertical > layout > :is(content, shell-content) {
|
|
56
|
+
flex-direction: column;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
horizontal > layout > :is(content, shell-content) > header {
|
|
60
|
+
display: var(--layout-header-display);
|
|
61
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
62
|
+
align-items: center;
|
|
63
|
+
gap: 1rem;
|
|
64
|
+
min-block-size: var(--layout-header-height);
|
|
65
|
+
padding: 0.875rem 1rem;
|
|
66
|
+
border-bottom: 1px solid var(--nav-border);
|
|
67
|
+
background: var(--nav-surface);
|
|
68
|
+
color: var(--nav-foreground);
|
|
69
|
+
transition: var(--ngt-chrome-transition);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
horizontal > layout > :is(content, shell-content) > header > brand,
|
|
73
|
+
horizontal > layout > :is(content, shell-content) > header > panel {
|
|
74
|
+
display: flex;
|
|
75
|
+
min-inline-size: 0;
|
|
76
|
+
align-items: center;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
horizontal > layout > :is(content, shell-content) > header > brand {
|
|
80
|
+
justify-content: flex-start;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
horizontal > layout > :is(content, shell-content) > header > nav {
|
|
84
|
+
display: flex;
|
|
85
|
+
min-inline-size: 0;
|
|
86
|
+
align-items: center;
|
|
87
|
+
justify-content: center;
|
|
88
|
+
gap: 0.75rem;
|
|
89
|
+
flex-wrap: wrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
horizontal > layout > :is(content, shell-content) > header > panel {
|
|
93
|
+
justify-content: flex-end;
|
|
94
|
+
gap: 0.5rem;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
vertical > layout > :is(content, shell-content) > aside {
|
|
98
|
+
display: var(--layout-sidebar-display);
|
|
99
|
+
flex-direction: column;
|
|
100
|
+
inline-size: 100%;
|
|
101
|
+
border-bottom: 1px solid var(--sidebar-chrome-border);
|
|
102
|
+
background: var(--sidebar-chrome-surface);
|
|
103
|
+
color: var(--sidebar-chrome-foreground);
|
|
104
|
+
transition: var(--ngt-chrome-transition);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
horizontal > layout > :is(content, shell-content) > main,
|
|
108
|
+
vertical > layout > :is(content, shell-content) > main {
|
|
109
|
+
flex: 1 1 auto;
|
|
110
|
+
min-inline-size: 0;
|
|
111
|
+
min-block-size: 0;
|
|
112
|
+
overflow: auto;
|
|
113
|
+
background-color: var(--background);
|
|
114
|
+
background-image: linear-gradient(
|
|
115
|
+
180deg,
|
|
116
|
+
color-mix(in oklab, var(--background) 94%, white 6%),
|
|
117
|
+
var(--background)
|
|
118
|
+
);
|
|
119
|
+
color: var(--foreground);
|
|
120
|
+
transition:
|
|
121
|
+
background-color var(--ngt-motion-duration-medium) var(--ngt-motion-ease-standard),
|
|
122
|
+
color var(--ngt-motion-duration-fast) var(--ngt-motion-ease-standard);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@media (min-width: 48rem) {
|
|
126
|
+
vertical > layout > :is(content, shell-content) {
|
|
127
|
+
flex-direction: row;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
vertical > layout > :is(content, shell-content) > aside {
|
|
131
|
+
inline-size: var(--layout-sidebar-width);
|
|
132
|
+
border-bottom: 0;
|
|
133
|
+
border-right: 1px solid var(--sidebar-chrome-border);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@media (max-width: 60rem) {
|
|
138
|
+
horizontal > layout > :is(content, shell-content) > header {
|
|
139
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
140
|
+
align-items: flex-start;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
horizontal > layout > :is(content, shell-content) > header > nav {
|
|
144
|
+
grid-column: 1 / -1;
|
|
145
|
+
justify-content: flex-start;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@media (max-width: 40rem) {
|
|
150
|
+
horizontal > layout > :is(content, shell-content) > header {
|
|
151
|
+
grid-template-columns: 1fr;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
horizontal > layout > :is(content, shell-content) > header > panel {
|
|
155
|
+
justify-content: flex-start;
|
|
156
|
+
}
|
|
157
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ojiepermana/angular",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@angular/common": "^21.2.0",
|
|
9
|
+
"@angular/core": "^21.2.0",
|
|
10
|
+
"@angular/material": "^21.0.0",
|
|
11
|
+
"@angular/cdk": "^21.0.0",
|
|
12
|
+
"@lucide/angular": ">=1.0.0",
|
|
13
|
+
"tailwindcss": ">=4.0.0"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"tslib": "^2.8.1"
|
|
17
|
+
},
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"module": "fesm2022/ojiepermana-angular.mjs",
|
|
20
|
+
"typings": "types/ojiepermana-angular.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
"./package.json": {
|
|
23
|
+
"default": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./types/ojiepermana-angular.d.ts",
|
|
27
|
+
"default": "./fesm2022/ojiepermana-angular.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./internal": {
|
|
30
|
+
"types": "./types/ojiepermana-angular-internal.d.ts",
|
|
31
|
+
"default": "./fesm2022/ojiepermana-angular-internal.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./layout": {
|
|
34
|
+
"types": "./types/ojiepermana-angular-layout.d.ts",
|
|
35
|
+
"default": "./fesm2022/ojiepermana-angular-layout.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./shell": {
|
|
38
|
+
"types": "./types/ojiepermana-angular-shell.d.ts",
|
|
39
|
+
"default": "./fesm2022/ojiepermana-angular-shell.mjs"
|
|
40
|
+
},
|
|
41
|
+
"./theme": {
|
|
42
|
+
"types": "./types/ojiepermana-angular-theme.d.ts",
|
|
43
|
+
"default": "./fesm2022/ojiepermana-angular-theme.mjs"
|
|
44
|
+
},
|
|
45
|
+
"./theme/component": {
|
|
46
|
+
"types": "./types/ojiepermana-angular-theme-component.d.ts",
|
|
47
|
+
"default": "./fesm2022/ojiepermana-angular-theme-component.mjs"
|
|
48
|
+
},
|
|
49
|
+
"./theme/directive": {
|
|
50
|
+
"types": "./types/ojiepermana-angular-theme-directive.d.ts",
|
|
51
|
+
"default": "./fesm2022/ojiepermana-angular-theme-directive.mjs"
|
|
52
|
+
},
|
|
53
|
+
"./theme/service": {
|
|
54
|
+
"types": "./types/ojiepermana-angular-theme-service.d.ts",
|
|
55
|
+
"default": "./fesm2022/ojiepermana-angular-theme-service.mjs"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"type": "module"
|
|
59
|
+
}
|
package/shell/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Shell Provider
|
|
2
|
+
|
|
3
|
+
Convenience provider helpers for `@ojiepermana/angular` applications.
|
|
4
|
+
|
|
5
|
+
Import from:
|
|
6
|
+
|
|
7
|
+
- `@ojiepermana/angular/shell`
|
|
8
|
+
|
|
9
|
+
## Public API
|
|
10
|
+
|
|
11
|
+
- `provideNgShell`
|
|
12
|
+
- `NgShellConfig`
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { ApplicationConfig } from '@angular/core';
|
|
18
|
+
import { provideNgShell } from '@ojiepermana/angular/shell';
|
|
19
|
+
|
|
20
|
+
export const appConfig: ApplicationConfig = {
|
|
21
|
+
providers: [
|
|
22
|
+
provideNgShell({
|
|
23
|
+
theme: {
|
|
24
|
+
defaultScheme: 'system',
|
|
25
|
+
defaultColor: 'brand',
|
|
26
|
+
defaultStyle: 'flat',
|
|
27
|
+
},
|
|
28
|
+
layout: {
|
|
29
|
+
defaultMode: 'vertical',
|
|
30
|
+
defaultContainer: 'boxed',
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`provideNgShell()` is a convenience wrapper over `provideNgTheme()` and `provideNgLayout()`. It does not introduce a separate runtime state layer.
|
package/styles/index.css
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* Optional application-level resets. Not imported by the default library bundle. */
|
|
2
|
+
|
|
3
|
+
*,
|
|
4
|
+
*::before,
|
|
5
|
+
*::after {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
html,
|
|
10
|
+
body {
|
|
11
|
+
min-block-size: 100%;
|
|
12
|
+
background: var(--background);
|
|
13
|
+
color: var(--foreground);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
body {
|
|
17
|
+
margin: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
a {
|
|
21
|
+
color: inherit;
|
|
22
|
+
}
|