ui-svelte 0.2.11 → 0.2.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/dist/charts/ArcChart.svelte +9 -13
- package/dist/charts/ArcChart.svelte.d.ts +3 -3
- package/dist/charts/AreaChart.svelte +347 -118
- package/dist/charts/AreaChart.svelte.d.ts +33 -4
- package/dist/charts/BarChart.svelte +288 -66
- package/dist/charts/BarChart.svelte.d.ts +26 -1
- package/dist/charts/Candlestick.svelte +53 -50
- package/dist/charts/Candlestick.svelte.d.ts +8 -8
- package/dist/charts/LineChart.svelte +391 -91
- package/dist/charts/LineChart.svelte.d.ts +26 -3
- package/dist/charts/PieChart.svelte +333 -92
- package/dist/charts/PieChart.svelte.d.ts +33 -5
- package/dist/charts/css/arc-chart.css +3 -3
- package/dist/charts/css/area-chart.css +127 -29
- package/dist/charts/css/bar-chart.css +114 -8
- package/dist/charts/css/candlestick.css +2 -0
- package/dist/charts/css/line-chart.css +111 -13
- package/dist/charts/css/pie-chart.css +92 -20
- package/dist/control/Audio.svelte +86 -44
- package/dist/control/Audio.svelte.d.ts +4 -1
- package/dist/control/Button.svelte +18 -27
- package/dist/control/Button.svelte.d.ts +3 -2
- package/dist/control/IconButton.svelte +17 -27
- package/dist/control/IconButton.svelte.d.ts +3 -3
- package/dist/control/Image.svelte +123 -0
- package/dist/control/Image.svelte.d.ts +13 -0
- package/dist/control/Record.svelte +144 -98
- package/dist/control/Record.svelte.d.ts +2 -1
- package/dist/control/ToggleGroup.svelte +22 -8
- package/dist/control/ToggleGroup.svelte.d.ts +2 -1
- package/dist/control/ToggleTheme.svelte +13 -11
- package/dist/control/ToggleTheme.svelte.d.ts +3 -2
- package/dist/control/Video.svelte +55 -29
- package/dist/control/Video.svelte.d.ts +1 -0
- package/dist/control/css/btn.css +200 -152
- package/dist/control/css/image.css +56 -0
- package/dist/control/css/media.css +95 -30
- package/dist/control/css/toggle-group.css +269 -84
- package/dist/control/css/video.css +1 -14
- package/dist/css/animations.css +5 -9
- package/dist/css/base.css +13 -347
- package/dist/css/decorations.css +402 -0
- package/dist/css/rich-text.css +485 -0
- package/dist/css/transitions.css +158 -0
- package/dist/css/typography.css +291 -0
- package/dist/display/Accordion.svelte +28 -4
- package/dist/display/Accordion.svelte.d.ts +2 -1
- package/dist/display/Alert.svelte +32 -12
- package/dist/display/Alert.svelte.d.ts +2 -3
- package/dist/display/Avatar.svelte +23 -18
- package/dist/display/Avatar.svelte.d.ts +4 -1
- package/dist/display/AvatarGroup.svelte +20 -18
- package/dist/display/AvatarGroup.svelte.d.ts +6 -3
- package/dist/display/Badge.svelte +11 -4
- package/dist/display/Badge.svelte.d.ts +2 -1
- package/dist/display/Card.svelte +15 -14
- package/dist/display/Card.svelte.d.ts +2 -3
- package/dist/display/Carousel.svelte +130 -99
- package/dist/display/Carousel.svelte.d.ts +6 -4
- package/dist/display/ChatBox.svelte +245 -106
- package/dist/display/ChatBox.svelte.d.ts +32 -5
- package/dist/display/Chip.svelte +31 -17
- package/dist/display/Chip.svelte.d.ts +3 -2
- package/dist/display/Code.svelte +6 -3
- package/dist/display/Code.svelte.d.ts +1 -0
- package/dist/display/Collapsible.svelte +30 -4
- package/dist/display/Collapsible.svelte.d.ts +2 -1
- package/dist/display/Empty.svelte +37 -3
- package/dist/display/Empty.svelte.d.ts +3 -0
- package/dist/display/Item.svelte +30 -11
- package/dist/display/Item.svelte.d.ts +2 -2
- package/dist/display/Map.svelte +488 -0
- package/dist/display/Map.svelte.d.ts +44 -0
- package/dist/display/Section.svelte +14 -12
- package/dist/display/Section.svelte.d.ts +2 -3
- package/dist/display/Skeleton.svelte +32 -0
- package/dist/display/Skeleton.svelte.d.ts +10 -0
- package/dist/display/Table.svelte +94 -132
- package/dist/display/Table.svelte.d.ts +10 -1
- package/dist/display/css/accordion.css +349 -52
- package/dist/display/css/alert.css +18 -25
- package/dist/display/css/avatar-group.css +38 -75
- package/dist/display/css/avatar.css +139 -121
- package/dist/display/css/badge.css +50 -27
- package/dist/display/css/card.css +51 -71
- package/dist/display/css/carousel.css +25 -5
- package/dist/display/css/chat-box.css +158 -26
- package/dist/display/css/chip.css +142 -68
- package/dist/display/css/code.css +2 -6
- package/dist/display/css/collapsible.css +349 -45
- package/dist/display/css/divider.css +8 -6
- package/dist/display/css/empty.css +7 -0
- package/dist/display/css/item.css +311 -89
- package/dist/display/css/map.css +164 -0
- package/dist/display/css/section.css +78 -33
- package/dist/display/css/skeleton.css +58 -0
- package/dist/display/css/table.css +320 -189
- package/dist/form/Checkbox.svelte +11 -5
- package/dist/form/Checkbox.svelte.d.ts +2 -1
- package/dist/form/ColorField.svelte +543 -0
- package/dist/form/ColorField.svelte.d.ts +29 -0
- package/dist/form/ComboBox.svelte +24 -9
- package/dist/form/ComboBox.svelte.d.ts +2 -2
- package/dist/form/CsvField.svelte +62 -136
- package/dist/form/CsvField.svelte.d.ts +2 -2
- package/dist/form/DateField.svelte +33 -15
- package/dist/form/DateField.svelte.d.ts +2 -1
- package/dist/form/DateRange.svelte +436 -0
- package/dist/form/DateRange.svelte.d.ts +24 -0
- package/dist/form/DragDrop.svelte +348 -0
- package/dist/form/DragDrop.svelte.d.ts +32 -0
- package/dist/form/Dropzone.svelte +28 -8
- package/dist/form/Dropzone.svelte.d.ts +2 -2
- package/dist/form/Editor.svelte +626 -0
- package/dist/form/Editor.svelte.d.ts +50 -0
- package/dist/form/ImageCropper.svelte +291 -61
- package/dist/form/ImageCropper.svelte.d.ts +15 -1
- package/dist/form/{PasswordStrength.svelte → PasswordField.svelte} +58 -24
- package/dist/form/{PasswordStrength.svelte.d.ts → PasswordField.svelte.d.ts} +6 -5
- package/dist/form/PhoneField.svelte +26 -14
- package/dist/form/PhoneField.svelte.d.ts +4 -3
- package/dist/form/PinField.svelte +39 -31
- package/dist/form/PinField.svelte.d.ts +3 -3
- package/dist/form/RadioGroup.svelte +4 -4
- package/dist/form/RadioGroup.svelte.d.ts +1 -1
- package/dist/form/Select.svelte +20 -19
- package/dist/form/Select.svelte.d.ts +2 -2
- package/dist/form/Slider.svelte +4 -2
- package/dist/form/Slider.svelte.d.ts +1 -0
- package/dist/form/TextField.svelte +16 -7
- package/dist/form/TextField.svelte.d.ts +2 -2
- package/dist/form/Textarea.svelte +15 -6
- package/dist/form/Textarea.svelte.d.ts +2 -2
- package/dist/form/Toggle.svelte +1 -1
- package/dist/form/css/checkbox.css +18 -2
- package/dist/form/css/color-field.css +141 -0
- package/dist/form/css/control.css +193 -82
- package/dist/form/css/csv-field.css +226 -0
- package/dist/form/css/date-range.css +122 -0
- package/dist/form/css/date.css +24 -2
- package/dist/form/css/drag-drop.css +271 -0
- package/dist/form/css/dropzone.css +153 -34
- package/dist/form/css/editor.css +367 -0
- package/dist/form/css/field.css +4 -0
- package/dist/form/css/image-cropper.css +223 -22
- package/dist/form/css/radio-group.css +1 -1
- package/dist/form/css/select.css +2 -2
- package/dist/form/css/slider.css +1 -0
- package/dist/form/css/textarea.css +178 -75
- package/dist/form/css/toggle.css +3 -3
- package/dist/hooks/use-table.svelte.d.ts +1 -0
- package/dist/hooks/use-table.svelte.js +6 -0
- package/dist/icons/index.d.ts +30 -2
- package/dist/icons/index.js +32 -4
- package/dist/index.css +16 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.js +11 -3
- package/dist/layout/AppBar.svelte +22 -14
- package/dist/layout/AppBar.svelte.d.ts +2 -1
- package/dist/layout/Footer.svelte +19 -11
- package/dist/layout/Footer.svelte.d.ts +2 -1
- package/dist/layout/Provider.svelte +27 -4
- package/dist/layout/Provider.svelte.d.ts +3 -1
- package/dist/layout/css/app-bar.css +63 -66
- package/dist/layout/css/footer.css +62 -65
- package/dist/navigation/BottomNav.svelte +41 -13
- package/dist/navigation/FooterGroup.svelte +1 -1
- package/dist/navigation/NavMenu.svelte +47 -23
- package/dist/navigation/NavMenu.svelte.d.ts +29 -0
- package/dist/navigation/Pagination.svelte +158 -0
- package/dist/navigation/Pagination.svelte.d.ts +18 -0
- package/dist/navigation/SideNav.svelte +30 -25
- package/dist/navigation/SideNav.svelte.d.ts +2 -3
- package/dist/navigation/Tabs.svelte +17 -7
- package/dist/navigation/Tabs.svelte.d.ts +2 -2
- package/dist/navigation/css/bottom-nav.css +279 -257
- package/dist/navigation/css/footer-group.css +1 -1
- package/dist/navigation/css/footer-nav.css +1 -1
- package/dist/navigation/css/nav-menu.css +332 -106
- package/dist/navigation/css/pagination.css +74 -0
- package/dist/navigation/css/side-nav.css +515 -75
- package/dist/navigation/css/tabs.css +246 -52
- package/dist/overlay/Command.svelte +340 -0
- package/dist/overlay/Command.svelte.d.ts +24 -25
- package/dist/overlay/Drawer.svelte +49 -21
- package/dist/overlay/Drawer.svelte.d.ts +2 -2
- package/dist/overlay/Dropdown.svelte +3 -3
- package/dist/overlay/Modal.svelte +51 -16
- package/dist/overlay/Modal.svelte.d.ts +3 -3
- package/dist/overlay/Toast.svelte +41 -17
- package/dist/overlay/Toast.svelte.d.ts +1 -1
- package/dist/overlay/Tooltip.svelte +40 -26
- package/dist/overlay/Tooltip.svelte.d.ts +2 -2
- package/dist/overlay/css/command.css +80 -0
- package/dist/overlay/css/drawer.css +63 -24
- package/dist/overlay/css/dropdown.css +1 -1
- package/dist/overlay/css/hovercard.css +1 -1
- package/dist/overlay/css/modal.css +27 -27
- package/dist/overlay/css/toast.css +17 -29
- package/dist/overlay/css/tooltip.css +83 -66
- package/dist/stores/theme.svelte.js +26 -1
- package/dist/stores/toast.svelte.d.ts +4 -4
- package/dist/stores/toast.svelte.js +2 -2
- package/package.json +1 -1
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
&.is-transparent {
|
|
22
|
-
@apply bg-transparent border-transparent shadow-none;
|
|
22
|
+
@apply bg-transparent! border-transparent shadow-none;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
&.is-floating-enabled {
|
|
26
|
-
@apply left-1/2 -translate-x-1/2;
|
|
26
|
+
@apply fixed top-0 left-1/2 -translate-x-1/2;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
&.is-floating {
|
|
30
|
-
@apply mt-4 w-[calc(100%-2rem)] rounded-
|
|
30
|
+
@apply mt-4 w-[calc(100%-2rem)] rounded-box shadow-md shadow-muted border border-muted;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
&.is-floating-enabled:not(.is-floating) {
|
|
@@ -35,6 +35,66 @@
|
|
|
35
35
|
@apply border-b border-muted;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
&.is-soft {
|
|
39
|
+
&.is-primary {
|
|
40
|
+
@apply bg-on-primary text-primary;
|
|
41
|
+
}
|
|
42
|
+
&.is-secondary {
|
|
43
|
+
@apply bg-on-secondary text-secondary;
|
|
44
|
+
}
|
|
45
|
+
&.is-muted {
|
|
46
|
+
@apply bg-muted text-on-muted;
|
|
47
|
+
}
|
|
48
|
+
&.is-success {
|
|
49
|
+
@apply bg-on-success text-success;
|
|
50
|
+
}
|
|
51
|
+
&.is-info {
|
|
52
|
+
@apply bg-on-info text-info;
|
|
53
|
+
}
|
|
54
|
+
&.is-warning {
|
|
55
|
+
@apply bg-on-warning text-warning;
|
|
56
|
+
}
|
|
57
|
+
&.is-danger {
|
|
58
|
+
@apply bg-on-danger text-danger;
|
|
59
|
+
}
|
|
60
|
+
&.is-default {
|
|
61
|
+
@apply bg-background text-on-background;
|
|
62
|
+
}
|
|
63
|
+
&.is-surface {
|
|
64
|
+
@apply bg-surface text-on-surface;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&.is-solid {
|
|
69
|
+
&.is-primary {
|
|
70
|
+
@apply bg-primary text-on-primary;
|
|
71
|
+
}
|
|
72
|
+
&.is-secondary {
|
|
73
|
+
@apply bg-secondary text-on-secondary;
|
|
74
|
+
}
|
|
75
|
+
&.is-muted {
|
|
76
|
+
@apply bg-on-muted text-muted;
|
|
77
|
+
}
|
|
78
|
+
&.is-success {
|
|
79
|
+
@apply bg-success text-on-success;
|
|
80
|
+
}
|
|
81
|
+
&.is-info {
|
|
82
|
+
@apply bg-info text-on-info;
|
|
83
|
+
}
|
|
84
|
+
&.is-warning {
|
|
85
|
+
@apply bg-warning text-on-warning;
|
|
86
|
+
}
|
|
87
|
+
&.is-danger {
|
|
88
|
+
@apply bg-danger text-on-danger;
|
|
89
|
+
}
|
|
90
|
+
&.is-default {
|
|
91
|
+
@apply bg-background text-on-background;
|
|
92
|
+
}
|
|
93
|
+
&.is-surface {
|
|
94
|
+
@apply bg-surface text-on-surface;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
38
98
|
.appbar-content {
|
|
39
99
|
@apply flex flex-nowrap items-center justify-between relative;
|
|
40
100
|
@apply w-full px-2 h-full min-h-12;
|
|
@@ -52,67 +112,4 @@
|
|
|
52
112
|
}
|
|
53
113
|
}
|
|
54
114
|
}
|
|
55
|
-
.appbar.is-primary {
|
|
56
|
-
@apply bg-on-primary text-primary;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.appbar.is-primary.is-solid {
|
|
60
|
-
@apply bg-primary text-on-primary;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
.appbar.is-secondary {
|
|
64
|
-
@apply bg-on-secondary text-secondary;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.appbar.is-secondary.is-solid {
|
|
68
|
-
@apply bg-secondary text-on-secondary;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.appbar.is-success {
|
|
72
|
-
@apply bg-on-success text-success;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.appbar.is-success.is-solid {
|
|
76
|
-
@apply bg-success text-on-success;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.appbar.is-info {
|
|
80
|
-
@apply bg-on-info text-info;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.appbar.is-info.is-solid {
|
|
84
|
-
@apply bg-info text-on-info;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.appbar.is-warning {
|
|
88
|
-
@apply bg-on-warning text-warning;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.appbar.is-warning.is-solid {
|
|
92
|
-
@apply bg-warning text-on-warning;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.appbar.is-danger {
|
|
96
|
-
@apply bg-on-danger text-danger;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.appbar.is-danger.is-solid {
|
|
100
|
-
@apply bg-danger text-on-danger;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.appbar.is-muted {
|
|
104
|
-
@apply bg-muted text-on-muted;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.appbar.is-muted.is-solid {
|
|
108
|
-
@apply bg-on-muted text-muted;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.appbar.is-ghost {
|
|
112
|
-
@apply bg-background text-on-background;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.appbar.is-surface {
|
|
116
|
-
@apply bg-surface text-on-surface;
|
|
117
|
-
}
|
|
118
115
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.footer {
|
|
3
|
-
@apply w-full
|
|
3
|
+
@apply w-full mt-auto;
|
|
4
4
|
@apply transition-all duration-300 ease-in-out;
|
|
5
5
|
|
|
6
6
|
&.is-blurred {
|
|
7
|
-
@apply backdrop-blur-lg
|
|
7
|
+
@apply backdrop-blur-lg;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
&.is-bordered {
|
|
@@ -15,6 +15,66 @@
|
|
|
15
15
|
@apply translate-y-full;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
&.is-soft {
|
|
19
|
+
&.is-primary {
|
|
20
|
+
@apply bg-on-primary text-primary;
|
|
21
|
+
}
|
|
22
|
+
&.is-secondary {
|
|
23
|
+
@apply bg-on-secondary text-secondary;
|
|
24
|
+
}
|
|
25
|
+
&.is-muted {
|
|
26
|
+
@apply bg-muted text-on-muted;
|
|
27
|
+
}
|
|
28
|
+
&.is-success {
|
|
29
|
+
@apply bg-on-success text-success;
|
|
30
|
+
}
|
|
31
|
+
&.is-info {
|
|
32
|
+
@apply bg-on-info text-info;
|
|
33
|
+
}
|
|
34
|
+
&.is-warning {
|
|
35
|
+
@apply bg-on-warning text-warning;
|
|
36
|
+
}
|
|
37
|
+
&.is-danger {
|
|
38
|
+
@apply bg-on-danger text-danger;
|
|
39
|
+
}
|
|
40
|
+
&.is-default {
|
|
41
|
+
@apply bg-background text-on-background;
|
|
42
|
+
}
|
|
43
|
+
&.is-surface {
|
|
44
|
+
@apply bg-surface text-on-surface;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&.is-solid {
|
|
49
|
+
&.is-primary {
|
|
50
|
+
@apply bg-primary text-on-primary;
|
|
51
|
+
}
|
|
52
|
+
&.is-secondary {
|
|
53
|
+
@apply bg-secondary text-on-secondary;
|
|
54
|
+
}
|
|
55
|
+
&.is-muted {
|
|
56
|
+
@apply bg-on-muted text-muted;
|
|
57
|
+
}
|
|
58
|
+
&.is-success {
|
|
59
|
+
@apply bg-success text-on-success;
|
|
60
|
+
}
|
|
61
|
+
&.is-info {
|
|
62
|
+
@apply bg-info text-on-info;
|
|
63
|
+
}
|
|
64
|
+
&.is-warning {
|
|
65
|
+
@apply bg-warning text-on-warning;
|
|
66
|
+
}
|
|
67
|
+
&.is-danger {
|
|
68
|
+
@apply bg-danger text-on-danger;
|
|
69
|
+
}
|
|
70
|
+
&.is-default {
|
|
71
|
+
@apply bg-background text-on-background;
|
|
72
|
+
}
|
|
73
|
+
&.is-surface {
|
|
74
|
+
@apply bg-surface text-on-surface;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
18
78
|
.footer-content {
|
|
19
79
|
@apply column md:row flex-nowrap items-center justify-between relative;
|
|
20
80
|
@apply w-full px-2 h-full min-h-12;
|
|
@@ -32,67 +92,4 @@
|
|
|
32
92
|
}
|
|
33
93
|
}
|
|
34
94
|
}
|
|
35
|
-
.footer.is-primary {
|
|
36
|
-
@apply bg-on-primary text-primary;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.footer.is-primary.is-solid {
|
|
40
|
-
@apply bg-primary text-on-primary;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.footer.is-secondary {
|
|
44
|
-
@apply bg-on-secondary text-secondary;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.footer.is-secondary.is-solid {
|
|
48
|
-
@apply bg-secondary text-on-secondary;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.footer.is-success {
|
|
52
|
-
@apply bg-on-success text-success;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.footer.is-success.is-solid {
|
|
56
|
-
@apply bg-success text-on-success;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.footer.is-info {
|
|
60
|
-
@apply bg-on-info text-info;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
.footer.is-info.is-solid {
|
|
64
|
-
@apply bg-info text-on-info;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.footer.is-warning {
|
|
68
|
-
@apply bg-on-warning text-warning;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.footer.is-warning.is-solid {
|
|
72
|
-
@apply bg-warning text-on-warning;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.footer.is-danger {
|
|
76
|
-
@apply bg-on-danger text-danger;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.footer.is-danger.is-solid {
|
|
80
|
-
@apply bg-danger text-on-danger;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.footer.is-muted {
|
|
84
|
-
@apply bg-muted text-on-muted;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.footer.is-muted.is-solid {
|
|
88
|
-
@apply bg-on-muted text-muted;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.footer.is-ghost {
|
|
92
|
-
@apply bg-background text-on-background;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.footer.is-surface {
|
|
96
|
-
@apply bg-surface text-on-surface;
|
|
97
|
-
}
|
|
98
95
|
}
|
|
@@ -16,27 +16,56 @@
|
|
|
16
16
|
|
|
17
17
|
type Props = {
|
|
18
18
|
items: BottomNavItem[];
|
|
19
|
-
|
|
19
|
+
color?:
|
|
20
|
+
| 'primary'
|
|
21
|
+
| 'secondary'
|
|
22
|
+
| 'muted'
|
|
23
|
+
| 'success'
|
|
24
|
+
| 'info'
|
|
25
|
+
| 'warning'
|
|
26
|
+
| 'danger'
|
|
27
|
+
| 'surface'
|
|
28
|
+
| 'default';
|
|
29
|
+
variant?: 'solid' | 'soft' | 'blur';
|
|
30
|
+
activeStyle?: 'line' | 'pill';
|
|
20
31
|
size?: 'sm' | 'md' | 'lg';
|
|
21
|
-
isSolid?: boolean;
|
|
22
32
|
isBlock?: boolean;
|
|
33
|
+
isBordered?: boolean;
|
|
23
34
|
class?: string;
|
|
24
35
|
};
|
|
25
36
|
|
|
26
37
|
const {
|
|
27
38
|
items = [],
|
|
28
39
|
class: className,
|
|
29
|
-
|
|
40
|
+
color = 'primary',
|
|
41
|
+
variant = 'soft',
|
|
42
|
+
activeStyle = 'line',
|
|
30
43
|
size = 'md',
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
isBlock = false,
|
|
45
|
+
isBordered = true
|
|
33
46
|
}: Props = $props();
|
|
34
47
|
|
|
35
|
-
const
|
|
48
|
+
const colors = {
|
|
36
49
|
primary: 'is-primary',
|
|
37
50
|
secondary: 'is-secondary',
|
|
38
|
-
|
|
39
|
-
|
|
51
|
+
muted: 'is-muted',
|
|
52
|
+
success: 'is-success',
|
|
53
|
+
info: 'is-info',
|
|
54
|
+
warning: 'is-warning',
|
|
55
|
+
danger: 'is-danger',
|
|
56
|
+
surface: 'is-surface',
|
|
57
|
+
default: 'is-default'
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const variants = {
|
|
61
|
+
solid: 'is-solid',
|
|
62
|
+
soft: 'is-soft',
|
|
63
|
+
blur: 'is-blur'
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const activeStyles = {
|
|
67
|
+
line: 'active-line',
|
|
68
|
+
pill: 'active-pill'
|
|
40
69
|
};
|
|
41
70
|
|
|
42
71
|
const sizeClasses = {
|
|
@@ -45,13 +74,10 @@
|
|
|
45
74
|
lg: 'is-lg'
|
|
46
75
|
};
|
|
47
76
|
|
|
48
|
-
// Determine if any item has a label
|
|
49
77
|
const hasLabels = $derived(items.some((item) => item.label));
|
|
50
78
|
|
|
51
79
|
function isItemActive(item: BottomNavItem): boolean {
|
|
52
|
-
// If item has explicit isActive, use that
|
|
53
80
|
if (item.isActive !== undefined) return item.isActive;
|
|
54
|
-
// Otherwise check against current URL
|
|
55
81
|
if (!item.href) return false;
|
|
56
82
|
return page.url.pathname === item.href || page.url.pathname.startsWith(item.href + '/');
|
|
57
83
|
}
|
|
@@ -66,11 +92,13 @@
|
|
|
66
92
|
<nav
|
|
67
93
|
class={cn(
|
|
68
94
|
'bottomnav',
|
|
69
|
-
|
|
95
|
+
colors[color],
|
|
96
|
+
variants[variant],
|
|
97
|
+
activeStyles[activeStyle],
|
|
70
98
|
sizeClasses[size],
|
|
71
|
-
isSolid && 'is-solid',
|
|
72
99
|
!hasLabels && 'is-icon-only',
|
|
73
100
|
!isBlock && 'is-fixed',
|
|
101
|
+
isBordered && 'is-bordered',
|
|
74
102
|
className
|
|
75
103
|
)}
|
|
76
104
|
>
|
|
@@ -1,33 +1,39 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import { ChevronDown24RegularIcon } from '../icons/index.js';
|
|
4
|
-
import { Icon } from '../index.js';
|
|
5
|
-
import { cn } from '../utils/class-names.js';
|
|
6
|
-
import type { Snippet } from 'svelte';
|
|
7
|
-
import { onMount } from 'svelte';
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { IconData } from '../index.js';
|
|
8
3
|
|
|
9
|
-
type
|
|
4
|
+
export type NavMenuSubItem = {
|
|
10
5
|
label: string;
|
|
11
6
|
description?: string;
|
|
12
7
|
href?: string;
|
|
13
|
-
onclick?: (item:
|
|
8
|
+
onclick?: (item: NavMenuSubItem) => void;
|
|
9
|
+
icon?: IconData;
|
|
14
10
|
};
|
|
15
11
|
|
|
16
|
-
type
|
|
12
|
+
export type NavMenuItem = {
|
|
17
13
|
label: string;
|
|
18
14
|
description?: string;
|
|
19
15
|
href?: string;
|
|
20
|
-
onclick?: (item:
|
|
21
|
-
subitems?:
|
|
16
|
+
onclick?: (item: NavMenuItem) => void;
|
|
17
|
+
subitems?: NavMenuSubItem[];
|
|
22
18
|
megamenu?: Snippet;
|
|
23
19
|
type?: 'item' | 'submenu' | 'megamenu';
|
|
20
|
+
icon?: IconData;
|
|
24
21
|
};
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<script lang="ts">
|
|
25
|
+
import { page } from '$app/state';
|
|
26
|
+
import { ChevronDown24RegularIcon } from '../icons/index.js';
|
|
27
|
+
import { Icon } from '../index.js';
|
|
28
|
+
import { cn } from '../utils/class-names.js';
|
|
29
|
+
import type { Snippet } from 'svelte';
|
|
30
|
+
import { onMount } from 'svelte';
|
|
25
31
|
|
|
26
32
|
type Props = {
|
|
27
|
-
items:
|
|
33
|
+
items: NavMenuItem[];
|
|
28
34
|
size?: 'sm' | 'md' | 'lg';
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
variant?: 'solid' | 'soft' | 'ghost';
|
|
36
|
+
color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger';
|
|
31
37
|
class?: string;
|
|
32
38
|
};
|
|
33
39
|
|
|
@@ -35,8 +41,8 @@
|
|
|
35
41
|
items = [],
|
|
36
42
|
class: className,
|
|
37
43
|
size = 'md',
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
variant = 'ghost',
|
|
45
|
+
color = 'muted'
|
|
40
46
|
}: Props = $props();
|
|
41
47
|
|
|
42
48
|
let openSubmenuIndex = $state<number | null>(null);
|
|
@@ -56,9 +62,13 @@
|
|
|
56
62
|
lg: 'is-lg'
|
|
57
63
|
};
|
|
58
64
|
|
|
59
|
-
const solidClass = $derived(isSolid ? 'is-filled' : 'is-default');
|
|
60
|
-
|
|
61
65
|
const variantClasses = {
|
|
66
|
+
solid: 'is-solid',
|
|
67
|
+
soft: 'is-soft',
|
|
68
|
+
ghost: 'is-ghost'
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const colorClasses = {
|
|
62
72
|
primary: 'is-primary',
|
|
63
73
|
secondary: 'is-secondary',
|
|
64
74
|
muted: 'is-muted',
|
|
@@ -77,7 +87,7 @@
|
|
|
77
87
|
return page.url.pathname === href || page.url.pathname.startsWith(href + '/');
|
|
78
88
|
}
|
|
79
89
|
|
|
80
|
-
function hasActiveSubmenu(subitems?:
|
|
90
|
+
function hasActiveSubmenu(subitems?: NavMenuSubItem[]): boolean {
|
|
81
91
|
if (!subitems) return false;
|
|
82
92
|
return subitems.some((item) => isItemActive(item.href));
|
|
83
93
|
}
|
|
@@ -164,7 +174,7 @@
|
|
|
164
174
|
document.removeEventListener('click', handleClickOutside);
|
|
165
175
|
}
|
|
166
176
|
|
|
167
|
-
function handleItemClick(item:
|
|
177
|
+
function handleItemClick(item: NavMenuItem, index: number) {
|
|
168
178
|
if (item.subitems || item.megamenu) {
|
|
169
179
|
toggleSubmenu(index);
|
|
170
180
|
} else if (item.onclick) {
|
|
@@ -172,7 +182,7 @@
|
|
|
172
182
|
}
|
|
173
183
|
}
|
|
174
184
|
|
|
175
|
-
function handleSubmenuItemClick(item:
|
|
185
|
+
function handleSubmenuItemClick(item: NavMenuSubItem) {
|
|
176
186
|
if (item.onclick) {
|
|
177
187
|
item.onclick(item);
|
|
178
188
|
}
|
|
@@ -185,10 +195,15 @@
|
|
|
185
195
|
});
|
|
186
196
|
</script>
|
|
187
197
|
|
|
188
|
-
<nav
|
|
198
|
+
<nav
|
|
199
|
+
class={cn('navmenu', sizeClasses[size], variantClasses[variant], colorClasses[color], className)}
|
|
200
|
+
>
|
|
189
201
|
{#each items as item, index}
|
|
190
202
|
{#if item.href && !item.subitems && !item.megamenu}
|
|
191
203
|
<a href={item.href} class={cn('navmenu-item', isItemActive(item.href) && 'is-active')}>
|
|
204
|
+
{#if item.icon}
|
|
205
|
+
<Icon icon={item.icon} class="navmenu-icon" />
|
|
206
|
+
{/if}
|
|
192
207
|
<span class="navmenu-label" data-text={item.label}>{item.label}</span>
|
|
193
208
|
</a>
|
|
194
209
|
{:else}
|
|
@@ -202,6 +217,9 @@
|
|
|
202
217
|
bind:this={triggerElements[index]}
|
|
203
218
|
onclick={() => handleItemClick(item, index)}
|
|
204
219
|
>
|
|
220
|
+
{#if item.icon}
|
|
221
|
+
<Icon icon={item.icon} class="navmenu-icon" />
|
|
222
|
+
{/if}
|
|
205
223
|
<span class="navmenu-label" data-text={item.label}>{item.label}</span>
|
|
206
224
|
{#if item.subitems || item.megamenu}
|
|
207
225
|
<Icon
|
|
@@ -240,6 +258,9 @@
|
|
|
240
258
|
stopEventListeners();
|
|
241
259
|
}}
|
|
242
260
|
>
|
|
261
|
+
{#if subitem.icon}
|
|
262
|
+
<Icon icon={subitem.icon} class="navmenu-submenu-icon" />
|
|
263
|
+
{/if}
|
|
243
264
|
<div class="navmenu-submenu-content">
|
|
244
265
|
<div class="navmenu-submenu-label">{subitem.label}</div>
|
|
245
266
|
{#if subitem.description}
|
|
@@ -253,6 +274,9 @@
|
|
|
253
274
|
class="navmenu-submenu-item"
|
|
254
275
|
onclick={() => handleSubmenuItemClick(subitem)}
|
|
255
276
|
>
|
|
277
|
+
{#if subitem.icon}
|
|
278
|
+
<Icon icon={subitem.icon} class="navmenu-submenu-icon" />
|
|
279
|
+
{/if}
|
|
256
280
|
<div class="navmenu-submenu-content">
|
|
257
281
|
<div class="navmenu-submenu-label">{subitem.label}</div>
|
|
258
282
|
{#if subitem.description}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IconData } from '../index.js';
|
|
2
|
+
export type NavMenuSubItem = {
|
|
3
|
+
label: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
href?: string;
|
|
6
|
+
onclick?: (item: NavMenuSubItem) => void;
|
|
7
|
+
icon?: IconData;
|
|
8
|
+
};
|
|
9
|
+
export type NavMenuItem = {
|
|
10
|
+
label: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
href?: string;
|
|
13
|
+
onclick?: (item: NavMenuItem) => void;
|
|
14
|
+
subitems?: NavMenuSubItem[];
|
|
15
|
+
megamenu?: Snippet;
|
|
16
|
+
type?: 'item' | 'submenu' | 'megamenu';
|
|
17
|
+
icon?: IconData;
|
|
18
|
+
};
|
|
19
|
+
import type { Snippet } from 'svelte';
|
|
20
|
+
type Props = {
|
|
21
|
+
items: NavMenuItem[];
|
|
22
|
+
size?: 'sm' | 'md' | 'lg';
|
|
23
|
+
variant?: 'solid' | 'soft' | 'ghost';
|
|
24
|
+
color?: 'primary' | 'secondary' | 'muted' | 'success' | 'info' | 'warning' | 'danger';
|
|
25
|
+
class?: string;
|
|
26
|
+
};
|
|
27
|
+
declare const NavMenu: import("svelte").Component<Props, {}, "">;
|
|
28
|
+
type NavMenu = ReturnType<typeof NavMenu>;
|
|
29
|
+
export default NavMenu;
|