@ojiepermana/angular 22.2.0 → 22.2.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 +18 -7
- package/component/icon/README.md +40 -13
- package/fesm2022/ojiepermana-angular-chart-area.mjs +3 -3
- package/fesm2022/ojiepermana-angular-chart-bar.mjs +5 -5
- package/fesm2022/ojiepermana-angular-chart-core.mjs +33 -33
- package/fesm2022/ojiepermana-angular-chart-line.mjs +5 -5
- package/fesm2022/ojiepermana-angular-chart-pie.mjs +5 -5
- package/fesm2022/ojiepermana-angular-chart-primitives.mjs +33 -33
- package/fesm2022/ojiepermana-angular-chart-radar.mjs +5 -5
- package/fesm2022/ojiepermana-angular-chart-radial.mjs +5 -5
- package/fesm2022/ojiepermana-angular-chart-scatter.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-accordion.mjs +17 -17
- package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +27 -27
- package/fesm2022/ojiepermana-angular-component-alert.mjs +12 -12
- package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-avatar.mjs +18 -18
- package/fesm2022/ojiepermana-angular-component-badge.mjs +9 -9
- package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +21 -21
- package/fesm2022/ojiepermana-angular-component-button-group.mjs +10 -10
- package/fesm2022/ojiepermana-angular-component-button.mjs +4 -4
- package/fesm2022/ojiepermana-angular-component-calendar.mjs +5 -5
- package/fesm2022/ojiepermana-angular-component-card.mjs +27 -24
- package/fesm2022/ojiepermana-angular-component-carousel.mjs +18 -18
- package/fesm2022/ojiepermana-angular-component-checkbox.mjs +4 -4
- package/fesm2022/ojiepermana-angular-component-collapsible.mjs +12 -12
- package/fesm2022/ojiepermana-angular-component-combobox.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-command.mjs +28 -28
- package/fesm2022/ojiepermana-angular-component-composer.mjs +22 -22
- package/fesm2022/ojiepermana-angular-component-context-menu.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-date-picker.mjs +5 -5
- package/fesm2022/ojiepermana-angular-component-dialog.mjs +22 -22
- package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -2
- package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +39 -39
- package/fesm2022/ojiepermana-angular-component-editor.mjs +21 -21
- package/fesm2022/ojiepermana-angular-component-empty.mjs +19 -19
- package/fesm2022/ojiepermana-angular-component-form.mjs +36 -36
- package/fesm2022/ojiepermana-angular-component-hover-card.mjs +9 -9
- package/fesm2022/ojiepermana-angular-component-icon.mjs +114 -105
- package/fesm2022/ojiepermana-angular-component-input-group.mjs +19 -19
- package/fesm2022/ojiepermana-angular-component-input-otp.mjs +16 -16
- package/fesm2022/ojiepermana-angular-component-input.mjs +6 -6
- package/fesm2022/ojiepermana-angular-component-item.mjs +31 -31
- package/fesm2022/ojiepermana-angular-component-kanban.mjs +29 -29
- package/fesm2022/ojiepermana-angular-component-kbd.mjs +7 -7
- package/fesm2022/ojiepermana-angular-component-label.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-menubar.mjs +13 -13
- package/fesm2022/ojiepermana-angular-component-native-select.mjs +14 -14
- package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +21 -21
- package/fesm2022/ojiepermana-angular-component-pagination.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-pillbox.mjs +16 -16
- package/fesm2022/ojiepermana-angular-component-popover.mjs +6 -6
- package/fesm2022/ojiepermana-angular-component-progress.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-radio.mjs +7 -7
- package/fesm2022/ojiepermana-angular-component-resizable.mjs +12 -12
- package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +6 -8
- package/fesm2022/ojiepermana-angular-component-select.mjs +8 -8
- package/fesm2022/ojiepermana-angular-component-separator.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-sheet.mjs +41 -28
- package/fesm2022/ojiepermana-angular-component-skeleton.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-slider.mjs +10 -10
- package/fesm2022/ojiepermana-angular-component-spinner.mjs +3 -3
- package/fesm2022/ojiepermana-angular-component-switch.mjs +4 -4
- package/fesm2022/ojiepermana-angular-component-table.mjs +24 -24
- package/fesm2022/ojiepermana-angular-component-tabs.mjs +18 -18
- package/fesm2022/ojiepermana-angular-component-textarea.mjs +6 -6
- package/fesm2022/ojiepermana-angular-component-timeline.mjs +19 -19
- package/fesm2022/ojiepermana-angular-component-toast.mjs +5 -5
- package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +9 -9
- package/fesm2022/ojiepermana-angular-component-toggle.mjs +5 -5
- package/fesm2022/ojiepermana-angular-component-tooltip.mjs +15 -15
- package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +3 -3
- package/fesm2022/ojiepermana-angular-navigation-icon.mjs +3 -3
- package/fesm2022/{ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs → ojiepermana-angular-navigation-navigation-badge-count.component-4RIokl1C.mjs} +3 -3
- package/fesm2022/{ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs → ojiepermana-angular-navigation-navigation-dockbar-menu.component-CGfu2V6f.mjs} +23 -15
- package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-zBCXDa4c.mjs} +38 -66
- package/fesm2022/{ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs → ojiepermana-angular-navigation-navigation-flyout-menu.component-DYkYIIHd.mjs} +14 -13
- package/fesm2022/{ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs → ojiepermana-angular-navigation-navigation-horizontal.component-LNTertHr.mjs} +5 -5
- package/fesm2022/{ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs → ojiepermana-angular-navigation-navigation-item.component-DiGOcizS.mjs} +42 -52
- package/fesm2022/{ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs → ojiepermana-angular-navigation-navigation-list.component-DB22Gl-5.mjs} +22 -6
- package/fesm2022/ojiepermana-angular-navigation-service.mjs +16 -6
- package/fesm2022/ojiepermana-angular-navigation-types.mjs +113 -1
- package/fesm2022/ojiepermana-angular-navigation.mjs +304 -93
- package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +137 -72
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +6 -6
- package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +265 -49
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +30 -30
- package/fesm2022/ojiepermana-angular-theme-page-core.mjs +3 -3
- package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +7 -7
- package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +3 -3
- package/fesm2022/ojiepermana-angular-theme-page-root.mjs +8 -6
- package/fesm2022/ojiepermana-angular-theme-page-side.mjs +7 -7
- package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +12 -12
- package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +3 -3
- package/fesm2022/ojiepermana-angular-theme-shell.mjs +16 -12
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +17 -33
- package/navigation/README.md +70 -19
- package/package.json +3 -2
- package/theme/README.md +4 -10
- package/theme/page/README.md +2 -0
- package/theme/shell/README.md +5 -1
- package/theme/styles/README.md +32 -8
- package/theme/styles/css/base/components.css +13 -9
- package/theme/styles/css/base/tailwind.css +43 -0
- package/theme/styles/css/base/theme.css +4 -25
- package/theme/styles/css/base/tokens.css +21 -0
- package/theme/styles/css/fonts.css +85 -0
- package/types/ojiepermana-angular-chart-radar.d.ts +2 -1
- package/types/ojiepermana-angular-component-avatar.d.ts +2 -1
- package/types/ojiepermana-angular-component-calendar.d.ts +2 -1
- package/types/ojiepermana-angular-component-card.d.ts +7 -2
- package/types/ojiepermana-angular-component-command.d.ts +1 -1
- package/types/ojiepermana-angular-component-editor.d.ts +2 -1
- package/types/ojiepermana-angular-component-icon.d.ts +64 -79
- package/types/ojiepermana-angular-component-input-otp.d.ts +2 -1
- package/types/ojiepermana-angular-component-pillbox.d.ts +2 -1
- package/types/ojiepermana-angular-component-radio.d.ts +2 -1
- package/types/ojiepermana-angular-component-resizable.d.ts +2 -1
- package/types/ojiepermana-angular-component-segmented-control.d.ts +1 -1
- package/types/ojiepermana-angular-component-select.d.ts +2 -1
- package/types/ojiepermana-angular-navigation-service.d.ts +8 -0
- package/types/ojiepermana-angular-navigation-types.d.ts +48 -3
- package/types/ojiepermana-angular-navigation.d.ts +59 -8
- package/types/ojiepermana-angular-theme-component-settings.d.ts +5 -3
- package/types/ojiepermana-angular-theme-layout-services.d.ts +2 -1
- package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +52 -4
- package/types/ojiepermana-angular-theme-page-root.d.ts +1 -1
- package/types/ojiepermana-angular-theme-shell-services.d.ts +2 -1
- package/types/ojiepermana-angular-theme-styles.d.ts +0 -12
|
@@ -90,6 +90,30 @@
|
|
|
90
90
|
--shadow-lg: var(--theme-shadow-lg);
|
|
91
91
|
--shadow-xl: var(--theme-shadow-xl);
|
|
92
92
|
|
|
93
|
+
/* Motion. Every transition utility reads the motion tokens, so one
|
|
94
|
+
* --duration-base / --ease-base change retimes the whole kit. The Tailwind
|
|
95
|
+
* names differ from the token names on purpose: re-emitting a token under
|
|
96
|
+
* its own name would be a var() cycle (see the shadow note in tokens.css). */
|
|
97
|
+
--default-transition-duration: var(--duration-normal);
|
|
98
|
+
--default-transition-timing-function: var(--ease-standard);
|
|
99
|
+
--transition-duration-fast: var(--duration-fast);
|
|
100
|
+
--transition-duration-normal: var(--duration-normal);
|
|
101
|
+
--transition-duration-slow: var(--duration-slow);
|
|
102
|
+
--ease-in: var(--ease-exit);
|
|
103
|
+
--ease-out: var(--ease-enter);
|
|
104
|
+
--ease-in-out: var(--ease-standard);
|
|
105
|
+
|
|
106
|
+
/* Stacking layers: z-dropdown, z-sticky, z-overlay, z-modal, z-popover,
|
|
107
|
+
* z-tooltip, z-toast. Local z-10/z-20 inside a component's own stacking
|
|
108
|
+
* context stay allowed. */
|
|
109
|
+
--z-index-dropdown: var(--z-dropdown);
|
|
110
|
+
--z-index-sticky: var(--z-sticky);
|
|
111
|
+
--z-index-overlay: var(--z-overlay);
|
|
112
|
+
--z-index-modal: var(--z-modal);
|
|
113
|
+
--z-index-popover: var(--z-popover);
|
|
114
|
+
--z-index-tooltip: var(--z-tooltip);
|
|
115
|
+
--z-index-toast: var(--z-toast);
|
|
116
|
+
|
|
93
117
|
--text-2xs: var(--font-size-2xs);
|
|
94
118
|
--text-2xs--line-height: var(--line-height-2xs);
|
|
95
119
|
--text-2xs-plus: var(--font-size-2xs-plus);
|
|
@@ -163,3 +187,22 @@
|
|
|
163
187
|
@utility rounded-base {
|
|
164
188
|
border-radius: var(--radius-base);
|
|
165
189
|
}
|
|
190
|
+
|
|
191
|
+
/* One keyboard focus indicator for every interactive primitive: an outline,
|
|
192
|
+
* so it never moves layout and survives forced-colors mode. Mouse focus
|
|
193
|
+
* draws nothing (:focus-visible only). */
|
|
194
|
+
@utility focus-ring {
|
|
195
|
+
&:focus-visible {
|
|
196
|
+
outline: var(--focus-ring-width) solid var(--focus-ring-color);
|
|
197
|
+
outline-offset: var(--focus-ring-offset);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* The same indicator on a composite's container while its inner input has
|
|
202
|
+
* keyboard focus (Command, Combobox). */
|
|
203
|
+
@utility focus-ring-within {
|
|
204
|
+
&:has(:focus-visible) {
|
|
205
|
+
outline: var(--focus-ring-width) solid var(--focus-ring-color);
|
|
206
|
+
outline-offset: var(--focus-ring-offset);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -20,8 +20,6 @@
|
|
|
20
20
|
|
|
21
21
|
--border-width-base: 1px;
|
|
22
22
|
|
|
23
|
-
--shadow-base: 0 1px 2px hsl(0 0% 3.9% / 0.08);
|
|
24
|
-
|
|
25
23
|
--duration-base: 200ms;
|
|
26
24
|
--ease-base: cubic-bezier(0.4, 0, 0.2, 1);
|
|
27
25
|
|
|
@@ -85,19 +83,7 @@
|
|
|
85
83
|
--border-width-medium: calc(var(--border-width-base) * 2);
|
|
86
84
|
--border-width-thick: calc(var(--border-width-base) * 3);
|
|
87
85
|
|
|
88
|
-
/*
|
|
89
|
-
* re-emitted by the Tailwind @theme mapping as var(--theme-shadow-*) in the
|
|
90
|
-
* later `theme` layer, so pointing either alias back at --shadow-* would
|
|
91
|
-
* create a var() cycle that invalidates the whole chain. */
|
|
92
|
-
--shadow-xs-base: 0 1px 1px hsl(0 0% 3.9% / 0.05);
|
|
93
|
-
--shadow-md-base: 0 4px 6px hsl(0 0% 3.9% / 0.08);
|
|
94
|
-
--shadow-lg-base: 0 10px 15px hsl(0 0% 3.9% / 0.1);
|
|
95
|
-
--shadow-xl-base: 0 20px 25px hsl(0 0% 3.9% / 0.12);
|
|
96
|
-
--shadow-xs: var(--shadow-xs-base);
|
|
97
|
-
--shadow-sm: var(--shadow-base);
|
|
98
|
-
--shadow-md: var(--shadow-md-base);
|
|
99
|
-
--shadow-lg: var(--shadow-lg-base);
|
|
100
|
-
--shadow-xl: var(--shadow-xl-base);
|
|
86
|
+
/* Shadow and elevation tokens are defined once, in tokens.css. */
|
|
101
87
|
|
|
102
88
|
--duration-fast: calc(var(--duration-base) * 0.5);
|
|
103
89
|
--duration-normal: var(--duration-base);
|
|
@@ -304,17 +290,10 @@
|
|
|
304
290
|
--font-size-2xs-plus: 0.6875rem;
|
|
305
291
|
--line-height-2xs-plus: 1rem;
|
|
306
292
|
|
|
307
|
-
/* Deprecated: use
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
* back to --shadow-* forms a var() cycle. */
|
|
311
|
-
--theme-shadow-xs: var(--shadow-xs-base);
|
|
293
|
+
/* Deprecated: use --border-width-base instead. The deprecated
|
|
294
|
+
* --theme-shadow-* aliases now live beside the shadow primitives in
|
|
295
|
+
* tokens.css. */
|
|
312
296
|
--border-width: var(--border-width-base);
|
|
313
|
-
--theme-shadow-sm: var(--shadow-base);
|
|
314
|
-
--theme-shadow: var(--shadow-base);
|
|
315
|
-
--theme-shadow-md: var(--shadow-md-base);
|
|
316
|
-
--theme-shadow-lg: var(--shadow-lg-base);
|
|
317
|
-
--theme-shadow-xl: var(--shadow-xl-base);
|
|
318
297
|
}
|
|
319
298
|
|
|
320
299
|
:root,
|
|
@@ -77,15 +77,18 @@
|
|
|
77
77
|
* --shadow-* — the Tailwind @theme mapping re-emits
|
|
78
78
|
* --shadow-*: var(--theme-shadow-*) in the later `theme` layer, which
|
|
79
79
|
* turns that into a var() cycle and invalidates both tokens. */
|
|
80
|
+
--shadow-xs-base: 0 1px 1px hsl(0 0% 12% / 0.05);
|
|
80
81
|
--shadow-base: 0 1px 0 0 hsl(0 0% 12% / 0.08);
|
|
81
82
|
--shadow-md-base: 0 8px 18px -14px hsl(0 0% 12% / 0.24);
|
|
82
83
|
--shadow-lg-base: 0 18px 36px -28px hsl(0 0% 12% / 0.34);
|
|
83
84
|
--shadow-xl-base: 0 24px 48px -36px hsl(0 0% 12% / 0.4);
|
|
85
|
+
--shadow-xs: var(--shadow-xs-base);
|
|
84
86
|
--shadow-sm: var(--shadow-base);
|
|
85
87
|
--shadow-md: var(--shadow-md-base);
|
|
86
88
|
--shadow-lg: var(--shadow-lg-base);
|
|
87
89
|
--shadow-xl: var(--shadow-xl-base);
|
|
88
90
|
|
|
91
|
+
--theme-shadow-xs: var(--shadow-xs-base);
|
|
89
92
|
--theme-shadow-sm: var(--shadow-base);
|
|
90
93
|
--theme-shadow: 0 2px 4px -2px hsl(0 0% 12% / 0.14);
|
|
91
94
|
--theme-shadow-md: var(--shadow-md-base);
|
|
@@ -93,6 +96,19 @@
|
|
|
93
96
|
--theme-shadow-xl: var(--shadow-xl-base);
|
|
94
97
|
--shadow: var(--theme-shadow);
|
|
95
98
|
|
|
99
|
+
/* Keyboard focus indicator, drawn by the focus-ring utility. */
|
|
100
|
+
--focus-ring-width: 2px;
|
|
101
|
+
--focus-ring-offset: 2px;
|
|
102
|
+
--focus-ring-color: hsl(var(--ring));
|
|
103
|
+
|
|
104
|
+
/* Elevation tiers. Resting surfaces (cards, fields, checkboxes, switches)
|
|
105
|
+
* sit at tier 0 and separate by a border; only floating layers carry a
|
|
106
|
+
* shadow: tier 1 for menus, popovers, select panels and tooltips, tier 2
|
|
107
|
+
* for dialogs, sheets, drawers and toasts. */
|
|
108
|
+
--elevation-0: none;
|
|
109
|
+
--elevation-1: var(--shadow-md-base);
|
|
110
|
+
--elevation-2: var(--shadow-lg-base);
|
|
111
|
+
|
|
96
112
|
--theme-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
97
113
|
--theme-font-mono: 'JetBrains Mono', 'Fira Code', monospace;
|
|
98
114
|
|
|
@@ -138,6 +154,11 @@
|
|
|
138
154
|
* flyout/panel frames, entry borders, and tree rails. */
|
|
139
155
|
--section-border-opacity: 0.666;
|
|
140
156
|
|
|
157
|
+
/* Icon geometry — read by the <Icon> primitive (Lucide SVG). The component's
|
|
158
|
+
* `size` and `strokeWidth` inputs only override these two tokens on the host. */
|
|
159
|
+
--icon-size: 1.5rem;
|
|
160
|
+
--icon-stroke-width: 2;
|
|
161
|
+
|
|
141
162
|
/* Navigation geometry — ONE proportional system for every nav surface
|
|
142
163
|
* (sidebar, dockbar, navbar, flyout, entry grid). Icons are naked glyphs;
|
|
143
164
|
* derived tokens keep alignment exact: --nav-indent places a child's icon
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional font faces for the theme's type roles.
|
|
3
|
+
*
|
|
4
|
+
* The theme declares `--theme-font-sans: 'Inter', …` and
|
|
5
|
+
* `--theme-font-mono: 'JetBrains Mono', …` but never loads a font: the package
|
|
6
|
+
* ships no binaries and makes no network request. Import this file to load
|
|
7
|
+
* them from your own origin:
|
|
8
|
+
*
|
|
9
|
+
* @import '@ojiepermana/angular/theme/theme.css';
|
|
10
|
+
* @import '@ojiepermana/angular/theme/styles/css/fonts.css';
|
|
11
|
+
*
|
|
12
|
+
* and serve the files at these paths (both families are SIL OFL 1.1):
|
|
13
|
+
*
|
|
14
|
+
* /fonts/inter/InterVariable.woff2 Inter 4.x, github.com/rsms/inter
|
|
15
|
+
* /fonts/inter/InterVariable-Italic.woff2
|
|
16
|
+
* /fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 JetBrains Mono 2.x,
|
|
17
|
+
* /fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 github.com/JetBrains/JetBrainsMono
|
|
18
|
+
* /fonts/jetbrains-mono/JetBrainsMono-Bold.woff2
|
|
19
|
+
*
|
|
20
|
+
* Hosting them elsewhere? Copy this file and change the urls. Preload only the
|
|
21
|
+
* upright Inter file; the browser fetches the other faces only when a page
|
|
22
|
+
* renders that style or weight.
|
|
23
|
+
*
|
|
24
|
+
* `Inter Fallback` is local Arial with Inter's metrics, so swapping in Inter
|
|
25
|
+
* once it loads (`font-display: swap`) does not shift the layout.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
@font-face {
|
|
29
|
+
font-family: 'Inter';
|
|
30
|
+
font-style: normal;
|
|
31
|
+
font-weight: 100 900;
|
|
32
|
+
font-display: swap;
|
|
33
|
+
src: url('/fonts/inter/InterVariable.woff2') format('woff2');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@font-face {
|
|
37
|
+
font-family: 'Inter';
|
|
38
|
+
font-style: italic;
|
|
39
|
+
font-weight: 100 900;
|
|
40
|
+
font-display: swap;
|
|
41
|
+
src: url('/fonts/inter/InterVariable-Italic.woff2') format('woff2');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@font-face {
|
|
45
|
+
font-family: 'Inter Fallback';
|
|
46
|
+
src: local('Arial'), local('ArialMT');
|
|
47
|
+
ascent-override: 90.49%;
|
|
48
|
+
descent-override: 22.56%;
|
|
49
|
+
line-gap-override: 0%;
|
|
50
|
+
size-adjust: 107.06%;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@font-face {
|
|
54
|
+
font-family: 'JetBrains Mono';
|
|
55
|
+
font-style: normal;
|
|
56
|
+
font-weight: 400;
|
|
57
|
+
font-display: swap;
|
|
58
|
+
src: url('/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2') format('woff2');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@font-face {
|
|
62
|
+
font-family: 'JetBrains Mono';
|
|
63
|
+
font-style: normal;
|
|
64
|
+
font-weight: 500;
|
|
65
|
+
font-display: swap;
|
|
66
|
+
src: url('/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2') format('woff2');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@font-face {
|
|
70
|
+
font-family: 'JetBrains Mono';
|
|
71
|
+
font-style: normal;
|
|
72
|
+
font-weight: 700;
|
|
73
|
+
font-display: swap;
|
|
74
|
+
src: url('/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2') format('woff2');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* The metric-matched fallback only makes sense once the faces are loaded, so
|
|
78
|
+
* it joins the stack here rather than in base/tokens.css. Same layer as the
|
|
79
|
+
* tokens, imported after them, so it wins without !important. */
|
|
80
|
+
@layer tokens {
|
|
81
|
+
:root {
|
|
82
|
+
--theme-font-sans:
|
|
83
|
+
'Inter', 'Inter Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export type CardSize = 'default' | 'sm';
|
|
5
5
|
export declare class CardComponent {
|
|
6
6
|
protected readonly componentScale: ComponentScaleDirective;
|
|
7
|
-
readonly radius: import("@angular/core").InputSignal<"
|
|
7
|
+
readonly radius: import("@angular/core").InputSignal<"sm" | "inherit" | "none" | "xs" | "md" | "xl" | "full">;
|
|
8
8
|
readonly density: import("@angular/core").InputSignal<"inherit" | "compact" | "normal" | "relaxed" | "spacious">;
|
|
9
9
|
readonly size: import("@angular/core").InputSignal<CardSize>;
|
|
10
10
|
readonly class: import("@angular/core").InputSignal<string>;
|
|
@@ -46,8 +46,13 @@ export declare class CardHeaderComponent {
|
|
|
46
46
|
export declare class CardTitleComponent {
|
|
47
47
|
private readonly card;
|
|
48
48
|
private readonly element;
|
|
49
|
+
/** A static `aria-level` the author wrote; the host binding would otherwise overwrite it. */
|
|
50
|
+
private readonly staticAriaLevel;
|
|
49
51
|
readonly class: import("@angular/core").InputSignal<string>;
|
|
50
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Heading level for custom `<CardTitle>` hosts; native h1-h6 infer their own level.
|
|
54
|
+
* Unset, a static `aria-level` attribute is honoured, then the default of 3.
|
|
55
|
+
*/
|
|
51
56
|
readonly level: import("@angular/core").InputSignalWithTransform<number | null, string | number | null | undefined>;
|
|
52
57
|
protected readonly resolvedLevel: import("@angular/core").Signal<number>;
|
|
53
58
|
protected readonly classes: import("@angular/core").Signal<string>;
|
|
@@ -165,7 +165,7 @@ export declare class CommandItemComponent {
|
|
|
165
165
|
* on the input instead, which is the listbox pattern.
|
|
166
166
|
*/
|
|
167
167
|
readonly selectedState: import("@angular/core").InputSignal<boolean>;
|
|
168
|
-
readonly selected: import("@angular/core").OutputEmitterRef<
|
|
168
|
+
readonly selected: import("@angular/core").OutputEmitterRef<KeyboardEvent | MouseEvent>;
|
|
169
169
|
/** The highlighted row. Drives styling and `aria-activedescendant`, not `aria-selected`. */
|
|
170
170
|
readonly active: import("@angular/core").WritableSignal<boolean>;
|
|
171
171
|
readonly visible: import("@angular/core").Signal<boolean>;
|
|
@@ -230,4 +230,5 @@ export type EditorHtmlSanitizer = (html: string) => string;
|
|
|
230
230
|
* Override this token when an application needs a stricter allow-list than
|
|
231
231
|
* Angular's platform HTML sanitizer.
|
|
232
232
|
*/
|
|
233
|
-
export declare const EDITOR_HTML_SANITIZER: InjectionToken<EditorHtmlSanitizer>;
|
|
233
|
+
export declare const EDITOR_HTML_SANITIZER: InjectionToken<EditorHtmlSanitizer>;
|
|
234
|
+
export {};
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
+
import { LucideIcon, LucideIconData } from "@lucide/angular";
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
|
-
import {
|
|
3
|
+
import { InjectionToken, Provider } from "@angular/core";
|
|
3
4
|
export declare class IconComponent {
|
|
4
|
-
private readonly
|
|
5
|
+
private readonly nearest;
|
|
6
|
+
private readonly registry;
|
|
7
|
+
/** Lucide kebab name, e.g. `layout-dashboard`. Must be registered with `provideIcons()`. */
|
|
5
8
|
readonly name: import("@angular/core").InputSignal<string>;
|
|
6
9
|
readonly class: import("@angular/core").InputSignal<string>;
|
|
7
|
-
/** Glyph size in px, or 'inherit' to
|
|
8
|
-
*
|
|
10
|
+
/** Glyph size in px, or 'inherit' to follow the surrounding font-size (1em).
|
|
11
|
+
* Writes `--icon-size` on the host; leave unset to use the theme token. */
|
|
9
12
|
readonly size: import("@angular/core").InputSignal<number | "inherit" | null>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
readonly
|
|
14
|
-
readonly
|
|
15
|
-
readonly
|
|
16
|
-
protected readonly
|
|
17
|
-
protected readonly fontVariationSettings: import("@angular/core").Signal<string>;
|
|
13
|
+
/** Stroke width. Writes `--icon-stroke-width` on the host; unset uses the theme token. */
|
|
14
|
+
readonly strokeWidth: import("@angular/core").InputSignal<number | null>;
|
|
15
|
+
/** Accessible name for a functional icon. Without it the icon is decorative and hidden from assistive tech. */
|
|
16
|
+
readonly label: import("@angular/core").InputSignal<string | null>;
|
|
17
|
+
protected readonly icon: import("@angular/core").Signal<LucideIconData | undefined>;
|
|
18
|
+
protected readonly sizeToken: import("@angular/core").Signal<string | null>;
|
|
19
|
+
protected readonly strokeWidthToken: import("@angular/core").Signal<string | null>;
|
|
18
20
|
protected readonly classes: import("@angular/core").Signal<string>;
|
|
19
21
|
constructor();
|
|
20
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
|
|
@@ -34,86 +36,69 @@ export declare class IconComponent {
|
|
|
34
36
|
"required": false;
|
|
35
37
|
"isSignal": true;
|
|
36
38
|
};
|
|
37
|
-
"
|
|
38
|
-
"alias": "
|
|
39
|
+
"strokeWidth": {
|
|
40
|
+
"alias": "strokeWidth";
|
|
39
41
|
"required": false;
|
|
40
42
|
"isSignal": true;
|
|
41
43
|
};
|
|
42
|
-
"
|
|
43
|
-
"alias": "
|
|
44
|
-
"required": false;
|
|
45
|
-
"isSignal": true;
|
|
46
|
-
};
|
|
47
|
-
"grade": {
|
|
48
|
-
"alias": "grade";
|
|
49
|
-
"required": false;
|
|
50
|
-
"isSignal": true;
|
|
51
|
-
};
|
|
52
|
-
"opticalSize": {
|
|
53
|
-
"alias": "opticalSize";
|
|
44
|
+
"label": {
|
|
45
|
+
"alias": "label";
|
|
54
46
|
"required": false;
|
|
55
47
|
"isSignal": true;
|
|
56
48
|
};
|
|
57
49
|
}, {}, never, never, true, never>;
|
|
58
50
|
}
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
/** An icon as `provideIcons()` takes it: a Lucide component class or its raw data. */
|
|
52
|
+
type IconInput = LucideIcon | LucideIconData;
|
|
61
53
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* `
|
|
54
|
+
* Register the Lucide icons `<Icon name="...">` may render. Pass the Lucide
|
|
55
|
+
* components (`LucideHouse`) or their `LucideIconData`; only what you register
|
|
56
|
+
* ends up in your bundle.
|
|
57
|
+
*
|
|
58
|
+
* Works at the application root, in a route's `providers`, and in a
|
|
59
|
+
* component's `providers`. Every level adds to the levels above it and the
|
|
60
|
+
* nearest registration wins on a name clash. Keys are the kebab Lucide name
|
|
61
|
+
* plus its aliases.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* bootstrapApplication(App, { providers: [provideIcons(LucideHouse, LucideSettings)] });
|
|
67
65
|
*/
|
|
68
|
-
export declare
|
|
69
|
-
/**
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Stylesheet URL to load the Material Symbols font from. Defaults to the
|
|
73
|
-
* Google Fonts URL ({@link MATERIAL_SYMBOLS_FONT_HREF}). Point this at a
|
|
74
|
-
* self-hosted stylesheet for offline / CSP / privacy-safe setups.
|
|
75
|
-
*/
|
|
76
|
-
readonly href?: string;
|
|
77
|
-
}
|
|
66
|
+
export declare function provideIcons(...icons: IconInput[]): Provider;
|
|
67
|
+
/** The icons visible from one injector level: own icons merged over every parent level. */
|
|
68
|
+
type IconSet = ReadonlyMap<string, LucideIconData>;
|
|
78
69
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
70
|
+
* What one `provideIcons()` call contributes at its own injector level. Several
|
|
71
|
+
* calls on the same level add up (multi), so `providers: [provideIcons(a), provideIcons(b)]`
|
|
72
|
+
* keeps both. Internal: not exported from the entry point.
|
|
82
73
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
74
|
+
declare const UI_ICON_CONTRIBUTIONS: InjectionToken<readonly IconSet[]>;
|
|
75
|
+
/**
|
|
76
|
+
* The merged set visible at one injector level. Every `provideIcons()` call also
|
|
77
|
+
* provides this token with `own + parent`, so a child level never hides an icon
|
|
78
|
+
* registered above it (route, app root). Nearest wins on a name clash. Internal.
|
|
79
|
+
*/
|
|
80
|
+
declare const UI_ICONS: InjectionToken<IconSet>;
|
|
81
|
+
/**
|
|
82
|
+
* Root view of the registered icons. The `<Icon>` component resolves from the set
|
|
83
|
+
* of its nearest injector first, then falls back here, so icons registered with
|
|
84
|
+
* `provideIcons()` at the application root are always found.
|
|
85
|
+
*
|
|
86
|
+
* Also feeds the catalog gallery (`names()`) and de-duplicates the dev mode
|
|
87
|
+
* warning for unregistered names.
|
|
88
|
+
*/
|
|
89
|
+
export declare class IconRegistry {
|
|
90
|
+
private readonly rootSet;
|
|
91
|
+
private readonly warned;
|
|
92
|
+
/** Look up an icon by its Lucide kebab name or one of its aliases. */
|
|
93
|
+
resolve(name: string): LucideIconData | undefined;
|
|
94
|
+
/** Canonical Lucide names of every icon registered at the root, sorted. */
|
|
95
|
+
names(): string[];
|
|
94
96
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* their own option surface (e.g. `provideUiTheme({ icons: { materialSymbols: true } })`).
|
|
97
|
+
* Dev mode only: one `console.warn` per unregistered name. Production logs nothing.
|
|
98
|
+
* @internal
|
|
98
99
|
*/
|
|
99
|
-
|
|
100
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
100
|
+
ɵwarnUnregistered(name: string): void;
|
|
101
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<IconRegistry, never>;
|
|
101
102
|
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
102
103
|
}
|
|
103
|
-
|
|
104
|
-
* Opt in to loading the Material Symbols icon font that `<Icon>` renders with.
|
|
105
|
-
*
|
|
106
|
-
* By default `IconComponent` makes **no** network request — better for privacy,
|
|
107
|
-
* offline, and strict CSP. Add this provider to your bootstrap to fetch the font
|
|
108
|
-
* stylesheet once at startup. Pass `{ href }` to load from a self-hosted source
|
|
109
|
-
* instead of Google Fonts.
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* // Google Fonts (default source):
|
|
113
|
-
* bootstrapApplication(App, { providers: [provideMaterialSymbols()] });
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* // Self-hosted / offline:
|
|
117
|
-
* provideMaterialSymbols({ href: '/assets/material-symbols.css' });
|
|
118
|
-
*/
|
|
119
|
-
export declare function provideMaterialSymbols(config?: MaterialSymbolsConfig): EnvironmentProviders;
|
|
104
|
+
export type { IconInput };
|
|
@@ -6,7 +6,7 @@ export interface SegmentedControlOption {
|
|
|
6
6
|
readonly value: string;
|
|
7
7
|
/** Visible text, or the accessible fallback for an icon-only option. */
|
|
8
8
|
readonly label: string;
|
|
9
|
-
/**
|
|
9
|
+
/** Lucide icon name (kebab case, registered with `provideIcons()`), used by the `icon-text` and `icon` appearances. */
|
|
10
10
|
readonly icon?: string;
|
|
11
11
|
readonly disabled?: boolean;
|
|
12
12
|
/** Overrides `label` as the accessible name for an icon-only option. */
|
|
@@ -136,4 +136,5 @@ export declare class SelectComponent extends SelectMaterialBridge implements Aft
|
|
|
136
136
|
export declare class OptionComponent extends MatOption {
|
|
137
137
|
static ɵfac: i0.ɵɵFactoryDeclaration<OptionComponent, never>;
|
|
138
138
|
static ɵcmp: i0.ɵɵComponentDeclaration<OptionComponent, "SelectItem", ["matOption"], {}, {}, never, ["mat-icon", "*"], true, never>;
|
|
139
|
-
}
|
|
139
|
+
}
|
|
140
|
+
export {};
|
|
@@ -7,6 +7,7 @@ export declare class NavigationService {
|
|
|
7
7
|
private readonly persistence;
|
|
8
8
|
private readonly router;
|
|
9
9
|
private readonly urlResolver;
|
|
10
|
+
private readonly location;
|
|
10
11
|
private readonly routerUrl;
|
|
11
12
|
private readonly states;
|
|
12
13
|
private readonly openPanelKeys;
|
|
@@ -35,6 +36,13 @@ export declare class NavigationService {
|
|
|
35
36
|
* state yang ditulis ke query params).
|
|
36
37
|
*/
|
|
37
38
|
private releasePanelsAfterNavigation;
|
|
39
|
+
/**
|
|
40
|
+
* Until the first navigation commits, `router.url` is still `/`, so a deep link
|
|
41
|
+
* resolved as home until its lazy route loaded, and the route-aware dockbar then
|
|
42
|
+
* opened late and shifted the content. The address bar already holds the
|
|
43
|
+
* target; `NavigationEnd` replaces this guess with the router's own URL.
|
|
44
|
+
*/
|
|
45
|
+
private initialUrl;
|
|
38
46
|
private urlPath;
|
|
39
47
|
private readRouteContext;
|
|
40
48
|
private optionalString;
|
|
@@ -2,7 +2,7 @@ import { Signal } from "@angular/core";
|
|
|
2
2
|
import { IsActiveMatchOptions, Params, QueryParamsHandling, UrlTree } from "@angular/router";
|
|
3
3
|
import { Observable } from "rxjs";
|
|
4
4
|
export type NavigationOrientation = 'vertical' | 'horizontal';
|
|
5
|
-
export type NavigationVerticalType = 'sidebar' | 'dockbar';
|
|
5
|
+
export type NavigationVerticalType = 'sidebar' | 'dockbar' | 'minidock';
|
|
6
6
|
export type NavigationHorizontalType = 'navbar' | 'flyout';
|
|
7
7
|
export type NavigationType = NavigationVerticalType | NavigationHorizontalType;
|
|
8
8
|
export type NavigationCollapseTree = 'stairs' | 'straight';
|
|
@@ -14,7 +14,7 @@ export type NavigationFlyoutIconPosition = 'start' | 'end';
|
|
|
14
14
|
/** Bentuk visual tombol trigger flyout: `button` (pil), `link` (gaya tautan), `plain` (ghost). */
|
|
15
15
|
export type NavigationFlyoutTriggerVariant = 'button' | 'link' | 'plain';
|
|
16
16
|
export type NavigationDockbarMode = 'drawer' | 'sticky';
|
|
17
|
-
/**
|
|
17
|
+
/** Nama ikon Lucide bawaan ketika route aktif tidak menyediakan icon lain. */
|
|
18
18
|
export declare const NAVIGATION_DOCKBAR_FALLBACK_ICON = "route";
|
|
19
19
|
export type NavigationBadgeCount = number | null | undefined;
|
|
20
20
|
export type NavigationBadgeValueSource = NavigationBadgeCount | Signal<NavigationBadgeCount> | Observable<NavigationBadgeCount> | (() => NavigationBadgeCount);
|
|
@@ -137,4 +137,49 @@ export interface NavigationIconContext {
|
|
|
137
137
|
}
|
|
138
138
|
export declare function normalizeUiNavItems(items: readonly NavigationItem[]): readonly NavigationNormalizedItem[];
|
|
139
139
|
/** Format visual count badge dockbar. Count nol atau invalid tidak dirender. */
|
|
140
|
-
export declare function formatNavigationBadgeCount(value: NavigationBadgeCount): string | null;
|
|
140
|
+
export declare function formatNavigationBadgeCount(value: NavigationBadgeCount): string | null;
|
|
141
|
+
/**
|
|
142
|
+
* Memadatkan divider: yang di awal, di akhir, dan yang berurutan dibuang. Dari
|
|
143
|
+
* satu deret divider berurutan, divider pertama tanpa `isHidden` yang dipertahankan
|
|
144
|
+
* (atau divider pertama bila semuanya punya `isHidden`), supaya pemisah yang selalu
|
|
145
|
+
* terlihat tidak kalah oleh pemisah yang bisa tersembunyi saat runtime.
|
|
146
|
+
*
|
|
147
|
+
* Dipakai dua kali: oleh `toMinidockItems` atas data mentah, dan oleh jalur render
|
|
148
|
+
* minidock atas item yang sudah dinormalisasi (item tersembunyi sudah hilang).
|
|
149
|
+
*
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
152
|
+
export declare function ɵcompactNavigationDividers<T extends {
|
|
153
|
+
readonly type?: string;
|
|
154
|
+
readonly isHidden?: unknown;
|
|
155
|
+
}>(items: readonly T[]): T[];
|
|
156
|
+
/**
|
|
157
|
+
* Melempar `Error` pertama yang ditemukan bila data minidock berisi item di luar
|
|
158
|
+
* `basic`, `item`, tanpa type, `divider`, dan `spacer`, atau item mana pun dengan
|
|
159
|
+
* `children` yang tidak kosong. Berjalan atas data mentah, termasuk item yang
|
|
160
|
+
* `isHidden`, dan tanpa `isDevMode()`: aturannya sama di dev dan production.
|
|
161
|
+
*
|
|
162
|
+
* Cukup memeriksa level atas: item apa pun yang punya children sudah ditolak,
|
|
163
|
+
* jadi item bersarang tidak pernah bisa lolos.
|
|
164
|
+
*
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
167
|
+
export declare function ɵassertMinidockItems(items: readonly NavigationItem[]): void;
|
|
168
|
+
/**
|
|
169
|
+
* Meratakan data navigasi bergroup menjadi data yang selalu valid untuk
|
|
170
|
+
* `<NavigationMinidock>`:
|
|
171
|
+
*
|
|
172
|
+
* - daun (`basic`, `item`, atau tanpa type, tanpa children) dipertahankan;
|
|
173
|
+
* - `group` dan `mega` di level mana pun diganti batas divider lalu isinya
|
|
174
|
+
* diratakan; group yang isinya kosong tidak menghasilkan divider;
|
|
175
|
+
* - `collapsible`, `collapsable`, `aside`, dan item lain yang punya children
|
|
176
|
+
* dibuang sebagai induk, anak anaknya diratakan rekursif;
|
|
177
|
+
* - divider di awal, di akhir, atau berurutan dipadatkan; `spacer` hanya
|
|
178
|
+
* dipertahankan di level atas;
|
|
179
|
+
* - daun dengan `id` yang sama hanya muncul sekali (kemunculan pertama).
|
|
180
|
+
*
|
|
181
|
+
* Daun dan divider yang diangkat ikut tersembunyi bila salah satu induknya
|
|
182
|
+
* tersembunyi, dan divider pengganti group ikut tersembunyi bersama group itu. Daun dikembalikan
|
|
183
|
+
* sebagai objek yang sama kecuali `isHidden` nya perlu digabung. Tidak pernah throw.
|
|
184
|
+
*/
|
|
185
|
+
export declare function toMinidockItems(items: readonly NavigationItem[]): NavigationItem[];
|