@foxeltech/angular-ui 0.3.1 → 0.7.44
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/archivo/archivo-400-latin-ext.woff2 +0 -0
- package/archivo/archivo-400-latin.woff2 +0 -0
- package/archivo/archivo-400-vietnamese.woff2 +0 -0
- package/archivo/archivo-500-latin-ext.woff2 +0 -0
- package/archivo/archivo-500-latin.woff2 +0 -0
- package/archivo/archivo-500-vietnamese.woff2 +0 -0
- package/archivo/archivo-600-latin-ext.woff2 +0 -0
- package/archivo/archivo-600-latin.woff2 +0 -0
- package/archivo/archivo-600-vietnamese.woff2 +0 -0
- package/archivo/archivo-700-latin-ext.woff2 +0 -0
- package/archivo/archivo-700-latin.woff2 +0 -0
- package/archivo/archivo-700-vietnamese.woff2 +0 -0
- package/components.css +12 -12
- package/dialogs.css +2 -2
- package/fesm2022/foxeltech-angular-ui-chart.mjs +560 -0
- package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui-flow.mjs +211 -0
- package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs +156 -0
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs.map +1 -0
- package/fesm2022/foxeltech-angular-ui.mjs +1580 -1409
- package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
- package/fonts.css +462 -138
- package/fx-icons.svg +97 -0
- package/ibm-plex-mono/ibm-plex-mono-400-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-vietnamese.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-vietnamese.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-400-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-400-latin.woff2 +0 -0
- package/newsreader/newsreader-400-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-500-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-500-latin.woff2 +0 -0
- package/newsreader/newsreader-500-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-600-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-600-latin.woff2 +0 -0
- package/newsreader/newsreader-600-vietnamese.woff2 +0 -0
- package/package.json +18 -9
- package/source-serif-4/source-serif-4-400-cyrillic-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-cyrillic.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-greek.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-latin-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-latin.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-vietnamese.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-cyrillic-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-cyrillic.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-greek.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-latin-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-latin.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-vietnamese.woff2 +0 -0
- package/src/lib/styles/components.css +12 -12
- package/src/lib/styles/dialogs.css +2 -2
- package/src/lib/styles/fonts.css +462 -138
- package/src/lib/styles/tailwind.css +1 -2
- package/src/lib/styles/theme.css +596 -69
- package/src/lib/styles/tokens.css +56 -19
- package/src/lib/styles/utilities.css +4 -1
- package/src/lib/ui/components/bar-list/bar-list.component.html +29 -0
- package/src/lib/ui/components/button/button.component.html +20 -18
- package/src/lib/ui/components/checkbox/checkbox.component.html +3 -3
- package/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html +2 -2
- package/src/lib/ui/components/code-block/code-block.component.html +8 -0
- package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +49 -27
- package/src/lib/ui/components/datetime-picker/datetime-picker.component.scss +25 -137
- package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +3 -3
- package/src/lib/ui/components/drawer/drawer.component.html +36 -13
- package/src/lib/ui/components/drawer/drawer.component.scss +104 -18
- package/src/lib/ui/components/empty-state/empty-state.component.html +2 -2
- package/src/lib/ui/components/facets-rail/facets-rail.component.html +42 -0
- package/src/lib/ui/components/filter-pills/filter-pills.component.html +16 -0
- package/src/lib/ui/components/hero-icon/hero-icon.component.html +10 -9
- package/src/lib/ui/components/info-field/info-field.component.html +1 -1
- package/src/lib/ui/components/input/input.component.html +6 -6
- package/src/lib/ui/components/kanban-board/kanban-board.component.html +1 -1
- package/src/lib/ui/components/kanban-board/kanban-board.component.scss +9 -9
- package/src/lib/ui/components/list-row/list-row.component.html +20 -0
- package/src/lib/ui/components/loading-panel/loading-panel.component.html +1 -1
- package/src/lib/ui/components/master-detail/master-detail.component.css +22 -0
- package/src/lib/ui/components/master-detail/master-detail.component.html +42 -10
- package/src/lib/ui/components/menu/menu.component.html +27 -0
- package/src/lib/ui/components/pending-badge/pending-badge.component.html +15 -0
- package/src/lib/ui/components/pipeline-stepper/pipeline-stepper.component.html +45 -0
- package/src/lib/ui/components/project-card/project-card.component.html +102 -0
- package/src/lib/ui/components/radio-button/radio-button.component.html +4 -4
- package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +4 -4
- package/src/lib/ui/components/sample-frame/sample-frame.component.html +18 -0
- package/src/lib/ui/components/score-badge/score-badge.component.html +7 -0
- package/src/lib/ui/components/screenshot-frame/screenshot-frame.component.html +40 -0
- package/src/lib/ui/components/search-bar/search-bar.component.html +1 -1
- package/src/lib/ui/components/section-card/section-card.component.html +19 -6
- package/src/lib/ui/components/segmented/segmented.component.html +42 -0
- package/src/lib/ui/components/segmented/segmented.component.scss +12 -0
- package/src/lib/ui/components/select/select.component.html +6 -6
- package/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html +2 -2
- package/src/lib/ui/components/skeleton-list/skeleton-list.component.html +1 -1
- package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +5 -5
- package/src/lib/ui/components/slider/slider.component.html +8 -8
- package/src/lib/ui/components/sparkbar/sparkbar.component.html +14 -0
- package/src/lib/ui/components/stage-dots/stage-dots.component.html +13 -0
- package/src/lib/ui/components/stat-cards/stat-cards.component.html +45 -12
- package/src/lib/ui/components/status-dot/status-dot.component.html +13 -0
- package/src/lib/ui/components/switch/switch.component.html +1 -1
- package/src/lib/ui/components/tab-group/tab-group.component.html +41 -12
- package/src/lib/ui/components/tab-group/tab-group.component.scss +41 -1
- package/src/lib/ui/components/table-cell/table-cell.component.html +2 -2
- package/src/lib/ui/components/tag/tag.component.html +4 -4
- package/src/lib/ui/components/theme-picker/theme-picker.component.html +44 -0
- package/src/lib/ui/components/toast/toast.component.html +7 -7
- package/src/lib/ui/components/toast-container/toast-container.component.html +1 -0
- package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +5 -5
- package/tailwind.css +1 -2
- package/theme.css +596 -69
- package/tokens.css +56 -19
- package/types/foxeltech-angular-ui-chart.d.ts +65 -0
- package/types/foxeltech-angular-ui-flow.d.ts +96 -0
- package/types/foxeltech-angular-ui-rich-text.d.ts +35 -0
- package/types/foxeltech-angular-ui.d.ts +1018 -395
- package/utilities.css +4 -1
- package/BeVietnamPro/BeVietnamPro-Bold.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-ExtraLight.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Light.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Medium.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Regular.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-SemiBold.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Thin.woff2 +0 -0
- package/SpaceMono-Regular.woff2 +0 -0
- package/dm-sans/DMSans-Bold.woff2 +0 -0
- package/dm-sans/DMSans-Light.woff2 +0 -0
- package/dm-sans/DMSans-Medium.woff2 +0 -0
- package/dm-sans/DMSans-Regular.woff2 +0 -0
- package/dm-sans/DMSans-SemiBold.woff2 +0 -0
- package/dm-sans/DMSans-Thin.woff2 +0 -0
- package/orbitron/Orbitron-Bold.woff2 +0 -0
- package/orbitron/Orbitron-Medium.woff2 +0 -0
- package/orbitron/Orbitron-Regular.woff2 +0 -0
- package/orbitron/Orbitron-SemiBold.woff2 +0 -0
- package/roboto/Roboto-Black.woff2 +0 -0
- package/roboto/Roboto-BlackItalic.woff2 +0 -0
- package/roboto/Roboto-Bold.woff2 +0 -0
- package/roboto/Roboto-BoldCondensed.woff2 +0 -0
- package/roboto/Roboto-BoldCondensedItalic.woff2 +0 -0
- package/roboto/Roboto-BoldItalic.woff2 +0 -0
- package/roboto/Roboto-Condensed.woff2 +0 -0
- package/roboto/Roboto-CondensedItalic.woff2 +0 -0
- package/roboto/Roboto-Italic.woff2 +0 -0
- package/roboto/Roboto-Light.woff2 +0 -0
- package/roboto/Roboto-LightItalic.woff2 +0 -0
- package/roboto/Roboto-Medium.woff2 +0 -0
- package/roboto/Roboto-MediumItalic.woff2 +0 -0
- package/roboto/Roboto-Regular.woff2 +0 -0
- package/roboto/Roboto-Thin.woff2 +0 -0
- package/roboto/Roboto-ThinItalic.woff2 +0 -0
- package/src/lib/ui/components/chart/chart.component.html +0 -20
- package/src/lib/ui/components/chart/chart.component.scss +0 -49
- package/src/lib/ui/components/flow-connection/flow-connection.component.html +0 -10
- package/src/lib/ui/components/flow-connection/flow-connection.component.scss +0 -0
- package/src/lib/ui/components/rich-text-area/rich-text-area.component.html +0 -3
- package/src/lib/ui/components/rich-text-area/rich-text-area.component.scss +0 -18
|
@@ -26,9 +26,15 @@
|
|
|
26
26
|
#tabList
|
|
27
27
|
role="tablist"
|
|
28
28
|
class="relative flex overflow-x-auto no-scrollbar scroll-smooth"
|
|
29
|
+
[class.fx-tabs-frame]="variant() === 'page'"
|
|
29
30
|
(scroll)="onScroll()"
|
|
30
31
|
>
|
|
31
|
-
|
|
32
|
+
<!-- 'page' variant: one raised pill that SLIDES to the active tab
|
|
33
|
+
(anh Tú 29/08 — same motion as fx-ui-segmented) -->
|
|
34
|
+
@if (variant() === 'page') {
|
|
35
|
+
<span #pagePill aria-hidden="true" class="fx-tabs-pill"></span>
|
|
36
|
+
}
|
|
37
|
+
@for (tab of tabs(); track tab; let i = $index) {
|
|
32
38
|
<button
|
|
33
39
|
type="button"
|
|
34
40
|
role="tab"
|
|
@@ -37,31 +43,54 @@
|
|
|
37
43
|
(click)="selectTab(i)"
|
|
38
44
|
(keydown)="onTabKeydown($event, i)"
|
|
39
45
|
class="tab-btn tab-bar-btn"
|
|
46
|
+
[class.tab-bar-btn-page]="variant() === 'page'"
|
|
40
47
|
>
|
|
41
|
-
<div class="flex flex-row items-center justify-center">
|
|
48
|
+
<div class="flex flex-row items-center justify-center gap-xs">
|
|
42
49
|
@if (tab.icon) {
|
|
43
50
|
<fx-ui-hero-icon
|
|
44
51
|
[icon]="tab.icon"
|
|
45
|
-
[size]="20"
|
|
52
|
+
[size]="variant() === 'page' ? 14 : 20"
|
|
46
53
|
class="flex mr-[2px]"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
[ngClass]="
|
|
55
|
+
variant() === 'page'
|
|
56
|
+
? i === activeIndex
|
|
57
|
+
? 'text-strong'
|
|
58
|
+
: 'text-text-placeholder'
|
|
59
|
+
: i === activeIndex
|
|
60
|
+
? 'text-accent-fg mb-small'
|
|
61
|
+
: 'text-text-placeholder'
|
|
62
|
+
"
|
|
51
63
|
></fx-ui-hero-icon>
|
|
52
64
|
}
|
|
53
65
|
<div
|
|
54
66
|
[ngClass]="
|
|
55
|
-
|
|
67
|
+
variant() === 'page'
|
|
68
|
+
? i === activeIndex
|
|
69
|
+
? 'text-[13px] leading-none font-semibold text-strong [text-box:trim-both_cap_alphabetic]'
|
|
70
|
+
: 'text-[13px] leading-none font-medium text-muted [text-box:trim-both_cap_alphabetic]'
|
|
71
|
+
: i === activeIndex
|
|
72
|
+
? 'txt-field-label text-accent-fg'
|
|
73
|
+
: 'txt-placeholder'
|
|
56
74
|
"
|
|
57
75
|
>
|
|
58
|
-
{{ tab.label }}
|
|
76
|
+
{{ tab.label() }}
|
|
59
77
|
</div>
|
|
78
|
+
@if (tab.count() !== null) {
|
|
79
|
+
<span
|
|
80
|
+
class="txt-tag-label px-normal py-[1px] rounded-pill"
|
|
81
|
+
[ngClass]="badgeClass(tab)"
|
|
82
|
+
style="font-family: var(--og-font-figure)"
|
|
83
|
+
>
|
|
84
|
+
{{ tab.count() }}
|
|
85
|
+
</span>
|
|
86
|
+
}
|
|
60
87
|
</div>
|
|
61
88
|
</button>
|
|
62
89
|
}
|
|
63
90
|
|
|
64
|
-
|
|
91
|
+
@if (variant() !== 'page') {
|
|
92
|
+
<span #underline class="underline" style="width: 0; transform: translateX(0)"></span>
|
|
93
|
+
}
|
|
65
94
|
</div>
|
|
66
95
|
|
|
67
96
|
<button
|
|
@@ -89,10 +118,10 @@
|
|
|
89
118
|
|
|
90
119
|
<!-- Tab content -->
|
|
91
120
|
<div class="transition-all duration-300 ease-in-out mt-4">
|
|
92
|
-
@for (tab of tabs
|
|
121
|
+
@for (tab of tabs(); track tab; let i = $index) {
|
|
93
122
|
@if (i === activeIndex) {
|
|
94
123
|
<div role="tabpanel" class="animate-fadeIn">
|
|
95
|
-
<ng-container *ngTemplateOutlet="tab.content"></ng-container>
|
|
124
|
+
<ng-container *ngTemplateOutlet="tab.content()"></ng-container>
|
|
96
125
|
</div>
|
|
97
126
|
}
|
|
98
127
|
}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
position: absolute;
|
|
29
29
|
bottom: 0;
|
|
30
30
|
height: 2px;
|
|
31
|
-
background-color: rgb(var(--
|
|
31
|
+
background-color: rgb(var(--og-accent));
|
|
32
32
|
transition: transform 0.25s cubic-bezier(0.2, 0.9, 0.2, 1),
|
|
33
33
|
width 0.25s cubic-bezier(0.2, 0.9, 0.2, 1);
|
|
34
34
|
will-change: transform, width;
|
|
@@ -49,3 +49,43 @@
|
|
|
49
49
|
.tab-bar-btn {
|
|
50
50
|
@apply relative px-large py-normal text-sm whitespace-nowrap transition-colors duration-200;
|
|
51
51
|
}
|
|
52
|
+
|
|
53
|
+
/* V2 'page' variant: workspace tab strip — pills inside a rounded frame
|
|
54
|
+
(design refs 02..04), active pill lifted on the raised surface. */
|
|
55
|
+
.fx-tabs-frame {
|
|
56
|
+
/* w-fit: the frame hugs its tabs (design refs 02..04) instead of spanning the
|
|
57
|
+
page; max-w-full keeps the inner scroll working when tabs overflow.
|
|
58
|
+
rounded-full: the design strip is a capsule in every theme, not the
|
|
59
|
+
theme control radius (refs 02..04 — anh Tú 28/08). */
|
|
60
|
+
@apply gap-xs p-[3px] w-fit max-w-full bg-surface-sunken border border-border rounded-full;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.tab-bar-btn-page {
|
|
64
|
+
/* py 5px: the design strip is slim (~36px capsule) — anh Tú 28/08.
|
|
65
|
+
The active background lives on .fx-tabs-pill (sliding thumb), so the
|
|
66
|
+
button itself only switches text colour. z-index keeps it above the pill. */
|
|
67
|
+
@apply px-semi py-[5px] rounded-full border border-transparent text-muted z-[1];
|
|
68
|
+
|
|
69
|
+
&[aria-selected='false']:hover {
|
|
70
|
+
@apply text-strong;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Sliding active pill for the 'page' variant — positioned from the active
|
|
75
|
+
tab's offsetLeft/offsetWidth (tabs hug content, widths differ), so it
|
|
76
|
+
scrolls with the strip and needs no scroll-time recompute. */
|
|
77
|
+
.fx-tabs-pill {
|
|
78
|
+
@apply absolute rounded-full bg-surface-raised border border-border shadow-sm pointer-events-none;
|
|
79
|
+
top: 3px; /* frame p-[3px] inset */
|
|
80
|
+
bottom: 3px;
|
|
81
|
+
left: 0;
|
|
82
|
+
width: 0;
|
|
83
|
+
transform: translateX(0);
|
|
84
|
+
transition:
|
|
85
|
+
transform 0.25s cubic-bezier(0.2, 0.9, 0.2, 1),
|
|
86
|
+
width 0.25s cubic-bezier(0.2, 0.9, 0.2, 1);
|
|
87
|
+
will-change: transform, width;
|
|
88
|
+
@media (prefers-reduced-motion: reduce) {
|
|
89
|
+
transition: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
@if (!loading) {
|
|
1
|
+
@if (!loading()) {
|
|
2
2
|
<div animate.enter="fade-in-animation" class="inline-block my-normal">
|
|
3
3
|
<ng-content />
|
|
4
4
|
</div>
|
|
5
5
|
} @else {
|
|
6
|
-
<div animate.enter="fade-in-animation" class="skeleton-load my-semi" [class]="skeletonClass"></div>
|
|
6
|
+
<div animate.enter="fade-in-animation" class="skeleton-load my-semi" [class]="skeletonClass()"></div>
|
|
7
7
|
}
|
|
@@ -6,18 +6,18 @@
|
|
|
6
6
|
[attr.role]="clicked.observed ? 'button' : null"
|
|
7
7
|
[attr.tabindex]="clicked.observed ? 0 : null"
|
|
8
8
|
[class]="
|
|
9
|
-
`flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`
|
|
9
|
+
`flex flex-row gap-small ${rounded() ? 'tag-round' : 'tag-square'} tag-${type()}${solid() ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`
|
|
10
10
|
"
|
|
11
11
|
>
|
|
12
12
|
@if (icon) {
|
|
13
13
|
<fx-ui-hero-icon
|
|
14
|
-
[class]="`flex txt-tag-${type} ${solid && type !== 'default' ? 'text-
|
|
14
|
+
[class]="`flex txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-surface' : ''}`"
|
|
15
15
|
[icon]="icon"
|
|
16
16
|
[size]="18"
|
|
17
17
|
></fx-ui-hero-icon>
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
<div [class]="`txt-tag-${type} ${solid && type !== 'default' ? 'text-
|
|
21
|
-
{{ label }}
|
|
20
|
+
<div [class]="`txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-surface font-medium' : ''}`">
|
|
21
|
+
{{ label() }}
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<button
|
|
2
|
+
type="button"
|
|
3
|
+
[matMenuTriggerFor]="themeMenu"
|
|
4
|
+
class="flex items-center gap-small px-normal py-small rounded-control border border-border-default bg-transparent cursor-pointer hover:bg-bg-hover transition-colors"
|
|
5
|
+
aria-label="Change theme"
|
|
6
|
+
>
|
|
7
|
+
<span
|
|
8
|
+
class="w-4 h-4 rounded-full border border-border-strong/30 shrink-0"
|
|
9
|
+
[style.background]="
|
|
10
|
+
'linear-gradient(135deg, ' +
|
|
11
|
+
currentMeta().accent +
|
|
12
|
+
' 50%, ' +
|
|
13
|
+
currentMeta().pageBg +
|
|
14
|
+
' 50%)'
|
|
15
|
+
"
|
|
16
|
+
></span>
|
|
17
|
+
<span class="txt-body-01 hidden md:inline">{{ currentMeta().label }}</span>
|
|
18
|
+
<fx-ui-hero-icon icon="chevron-down" [size]="14" class="flex text-text-secondary" />
|
|
19
|
+
</button>
|
|
20
|
+
|
|
21
|
+
<mat-menu #themeMenu="matMenu">
|
|
22
|
+
@for (theme of themes; track theme.name) {
|
|
23
|
+
<button
|
|
24
|
+
mat-menu-item
|
|
25
|
+
type="button"
|
|
26
|
+
(click)="select(theme.name)"
|
|
27
|
+
[attr.aria-current]="theme.name === current() ? 'true' : null"
|
|
28
|
+
>
|
|
29
|
+
<div class="flex items-center gap-normal min-w-40">
|
|
30
|
+
<span
|
|
31
|
+
class="w-5 h-5 rounded-full border border-border-strong/30 shrink-0"
|
|
32
|
+
[style.background]="
|
|
33
|
+
'linear-gradient(135deg, ' + theme.accent + ' 50%, ' + theme.pageBg + ' 50%)'
|
|
34
|
+
"
|
|
35
|
+
></span>
|
|
36
|
+
<span class="txt-body-01 flex-1">{{ theme.label }}</span>
|
|
37
|
+
<span class="txt-utility-description">{{ theme.dark ? 'Dark' : 'Light' }}</span>
|
|
38
|
+
@if (theme.name === current()) {
|
|
39
|
+
<fx-ui-hero-icon icon="check" [size]="16" class="flex text-text-selected" />
|
|
40
|
+
}
|
|
41
|
+
</div>
|
|
42
|
+
</button>
|
|
43
|
+
}
|
|
44
|
+
</mat-menu>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<div
|
|
2
2
|
animate.enter="horizontal-fade-in-animation"
|
|
3
3
|
animate.leave="horizontal-fade-out-animation"
|
|
4
|
-
[attr.role]="type === 'error' ? 'alert' : 'status'"
|
|
4
|
+
[attr.role]="type() === 'error' ? 'alert' : 'status'"
|
|
5
5
|
class="flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[400px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0"
|
|
6
6
|
[ngClass]="{
|
|
7
|
-
'border-success': type === 'success',
|
|
8
|
-
'border-critical': type === 'error',
|
|
9
|
-
'border-warning': type === 'warning',
|
|
10
|
-
'border-information': type === 'info'
|
|
7
|
+
'border-success': type() === 'success',
|
|
8
|
+
'border-critical': type() === 'error',
|
|
9
|
+
'border-warning': type() === 'warning',
|
|
10
|
+
'border-information': type() === 'info'
|
|
11
11
|
}"
|
|
12
12
|
>
|
|
13
13
|
<div class="" aria-hidden="true">
|
|
14
|
-
@switch (type) { @case('success') {
|
|
14
|
+
@switch (type()) { @case('success') {
|
|
15
15
|
<fx-ui-hero-icon
|
|
16
16
|
icon="check-circle"
|
|
17
17
|
[solid]="true"
|
|
@@ -46,6 +46,6 @@
|
|
|
46
46
|
@if (title) {
|
|
47
47
|
<strong class="txt-field-label">{{ title }}</strong>
|
|
48
48
|
}
|
|
49
|
-
<p class="txt-default">{{ message }}</p>
|
|
49
|
+
<p class="txt-default">{{ message() }}</p>
|
|
50
50
|
</div>
|
|
51
51
|
</div>
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
<!-- ROOT -->
|
|
4
4
|
<div
|
|
5
5
|
#root
|
|
6
|
-
class="mx-auto w-fit bg-
|
|
6
|
+
class="mx-auto w-fit bg-accent text-accent-contrast px-7 py-3 rounded-md font-semibold text-center"
|
|
7
7
|
>
|
|
8
|
-
{{ data.label }}
|
|
8
|
+
{{ data().label }}
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<!-- CHILDREN -->
|
|
12
12
|
<div class="mt-16 flex justify-center gap-16">
|
|
13
|
-
@for (child of data.children; track child) {
|
|
13
|
+
@for (child of data().children; track child) {
|
|
14
14
|
<div
|
|
15
15
|
#child
|
|
16
|
-
class="w-48 bg-
|
|
16
|
+
class="w-48 bg-surface-raised text-strong border border-border px-4 py-4 rounded-lg text-center"
|
|
17
17
|
>
|
|
18
18
|
<div class="font-semibold text-lg">{{ child.label }}</div>
|
|
19
19
|
<div class="mt-1 text-sm opacity-90">{{ child.status }}</div>
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
[attr.y1]="line.y1"
|
|
34
34
|
[attr.x2]="line.x2"
|
|
35
35
|
[attr.y2]="line.y2"
|
|
36
|
-
stroke="
|
|
36
|
+
stroke="rgb(var(--og-border-strong))"
|
|
37
37
|
stroke-width="2"
|
|
38
38
|
/>
|
|
39
39
|
}
|
package/tailwind.css
CHANGED
|
@@ -8,11 +8,10 @@
|
|
|
8
8
|
@import './components.css' layer(components);
|
|
9
9
|
@import './dialogs.css' layer(components);
|
|
10
10
|
@import './animations.css';
|
|
11
|
-
@import '@danielmoncada/angular-datetime-picker/assets/style/picker.min.css';
|
|
12
11
|
|
|
13
12
|
html,
|
|
14
13
|
body {
|
|
15
|
-
font-family:
|
|
14
|
+
font-family: var(--og-font-body);
|
|
16
15
|
margin: 0;
|
|
17
16
|
padding: 0;
|
|
18
17
|
height: 100%;
|