@campminder/components 0.1.0
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 +198 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +11 -0
- package/dist/menu-tree.upstream.test.d.ts +1 -0
- package/dist/property-B5JHHBCF.js +603 -0
- package/dist/side-nav/MegaMenu.d.ts +50 -0
- package/dist/side-nav/MegaMenu.styles.d.ts +33 -0
- package/dist/side-nav/SideNav.d.ts +89 -0
- package/dist/side-nav/SideNav.styles.d.ts +42 -0
- package/dist/side-nav/Utils/helpers.d.ts +57 -0
- package/dist/side-nav/assets/MegaMenuIcons/AccountsGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/AdminGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/AlumniGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/CampInTouchGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/CamperGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/CommunicationGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/DefaultMMIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/FinancialGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/MedicalGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/OpenInNewIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/ReportsGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/SchedulingGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/StaffGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/TravelGrayIcon.d.ts +2 -0
- package/dist/side-nav/assets/MegaMenuIcons/index.d.ts +16 -0
- package/dist/side-nav/assets/SideNavIcons/AccountsIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/AdminIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/AlumniIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/CampInTouch.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/CamperIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/ChevronRightIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/CloseIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/CommunicationIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/DefaultNavIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/FinancialIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/HomeIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/MedicalIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/MenuCollapseIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/MenuIcon.d.ts +10 -0
- package/dist/side-nav/assets/SideNavIcons/ReportsIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/SchedulingIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/StaffIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/TravelIcon.d.ts +2 -0
- package/dist/side-nav/assets/SideNavIcons/index.d.ts +20 -0
- package/dist/side-nav/icon-map.d.ts +17 -0
- package/dist/side-nav/index.d.ts +5 -0
- package/dist/side-nav/mega-menu-icon-map.d.ts +20 -0
- package/dist/side-nav/mega-menu-layout.d.ts +9 -0
- package/dist/side-nav/mega-menu.test.d.ts +1 -0
- package/dist/side-nav/side-nav.test.d.ts +1 -0
- package/dist/side-nav.d.ts +1 -0
- package/dist/side-nav.js +1198 -0
- package/dist/state-Ns9O6R8g.js +12 -0
- package/dist/super-user-banner/SuperUserBanner.d.ts +43 -0
- package/dist/super-user-banner/SuperUserBanner.styles.d.ts +21 -0
- package/dist/super-user-banner/index.d.ts +2 -0
- package/dist/super-user-banner/super-user-banner.test.d.ts +1 -0
- package/dist/super-user-banner.d.ts +1 -0
- package/dist/super-user-banner.js +178 -0
- package/dist/top-bar/TopBar.d.ts +39 -0
- package/dist/top-bar/TopBar.styles.d.ts +1 -0
- package/dist/top-bar/Utils/helpers.d.ts +3 -0
- package/dist/top-bar/Utils/safe-url.d.ts +56 -0
- package/dist/top-bar/Utils/safe-url.test.d.ts +1 -0
- package/dist/top-bar/Utils/types.d.ts +50 -0
- package/dist/top-bar/assets/TopBarIcons/CheckIcon.d.ts +2 -0
- package/dist/top-bar/assets/TopBarIcons/CrossIcon.d.ts +2 -0
- package/dist/top-bar/assets/TopBarIcons/DropDownIcon.d.ts +2 -0
- package/dist/top-bar/assets/TopBarIcons/InfoIcon.d.ts +2 -0
- package/dist/top-bar/assets/TopBarIcons/OpenInNewIcon.d.ts +2 -0
- package/dist/top-bar/assets/TopBarIcons/index.d.ts +7 -0
- package/dist/top-bar/index.d.ts +3 -0
- package/dist/top-bar/top-bar.test.d.ts +1 -0
- package/dist/top-bar.d.ts +1 -0
- package/dist/top-bar.js +615 -0
- package/package.json +52 -0
package/dist/side-nav.js
ADDED
|
@@ -0,0 +1,1198 @@
|
|
|
1
|
+
import { A as I, b as t, i as f, n as c, a as m, t as x } from "./property-B5JHHBCF.js";
|
|
2
|
+
import { r as Z } from "./state-Ns9O6R8g.js";
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright 2018 Google LLC
|
|
6
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
const b = (e) => e ?? I, S = t` <svg
|
|
9
|
+
width="20"
|
|
10
|
+
height="20"
|
|
11
|
+
viewBox="0 0 20 20"
|
|
12
|
+
fill="none"
|
|
13
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
d="M15 1.6665H5.00001C4.08334 1.6665 3.33334 2.4165 3.33334 3.33317V16.6665C3.33334 17.5832 4.08334 18.3332 5.00001 18.3332H15C15.9167 18.3332 16.6667 17.5832 16.6667 16.6665V3.33317C16.6667 2.4165 15.9167 1.6665 15 1.6665ZM5.00001 3.33317H9.16668V9.99984L7.08334 8.74984L5.00001 9.99984V3.33317Z"
|
|
17
|
+
fill="white"
|
|
18
|
+
/>
|
|
19
|
+
</svg>`, E = t`<svg
|
|
20
|
+
width="20"
|
|
21
|
+
height="20"
|
|
22
|
+
viewBox="0 0 20 20"
|
|
23
|
+
fill="none"
|
|
24
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
25
|
+
>
|
|
26
|
+
<path
|
|
27
|
+
d="M15.95 10.7833C15.9833 10.5333 16 10.275 16 10C16 9.73333 15.9833 9.46667 15.9417 9.21667L17.6333 7.9C17.7833 7.78333 17.825 7.55833 17.7333 7.39167L16.1333 4.625C16.0333 4.44167 15.825 4.38333 15.6417 4.44167L13.65 5.24167C13.2333 4.925 12.7917 4.65833 12.3 4.45833L12 2.34167C11.9667 2.14167 11.8 2 11.6 2H8.39999C8.19999 2 8.04166 2.14167 8.00832 2.34167L7.70832 4.45833C7.21666 4.65833 6.76666 4.93333 6.35832 5.24167L4.36666 4.44167C4.18332 4.375 3.97499 4.44167 3.87499 4.625L2.28332 7.39167C2.18332 7.56667 2.21666 7.78333 2.38332 7.9L4.07499 9.21667C4.03332 9.46667 3.99999 9.74167 3.99999 10C3.99999 10.2583 4.01666 10.5333 4.05832 10.7833L2.36666 12.1C2.21666 12.2167 2.17499 12.4417 2.26666 12.6083L3.86666 15.375C3.96666 15.5583 4.17499 15.6167 4.35832 15.5583L6.34999 14.7583C6.76666 15.075 7.20832 15.3417 7.69999 15.5417L7.99999 17.6583C8.04166 17.8583 8.19999 18 8.39999 18H11.6C11.8 18 11.9667 17.8583 11.9917 17.6583L12.2917 15.5417C12.7833 15.3417 13.2333 15.075 13.6417 14.7583L15.6333 15.5583C15.8167 15.625 16.025 15.5583 16.125 15.375L17.725 12.6083C17.825 12.425 17.7833 12.2167 17.625 12.1L15.95 10.7833ZM9.99999 13C8.34999 13 6.99999 11.65 6.99999 10C6.99999 8.35 8.34999 7 9.99999 7C11.65 7 13 8.35 13 10C13 11.65 11.65 13 9.99999 13Z"
|
|
28
|
+
fill="white"
|
|
29
|
+
/>
|
|
30
|
+
</svg> `, T = t`<svg
|
|
31
|
+
width="20"
|
|
32
|
+
height="20"
|
|
33
|
+
viewBox="0 0 20 20"
|
|
34
|
+
fill="none"
|
|
35
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
36
|
+
>
|
|
37
|
+
<path
|
|
38
|
+
d="M4.16668 10.9833V14.3167L10 17.5L15.8333 14.3167V10.9833L10 14.1667L4.16668 10.9833ZM10 2.5L0.833344 7.5L10 12.5L17.5 8.40833V14.1667H19.1667V7.5L10 2.5Z"
|
|
39
|
+
fill="white"
|
|
40
|
+
/>
|
|
41
|
+
</svg> `, $ = t`<svg
|
|
42
|
+
width="20"
|
|
43
|
+
height="20"
|
|
44
|
+
viewBox="0 0 20 20"
|
|
45
|
+
fill="none"
|
|
46
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
47
|
+
>
|
|
48
|
+
<path
|
|
49
|
+
d="M9.99999 1.6665C5.39999 1.6665 1.66666 5.39984 1.66666 9.99984C1.66666 14.5998 5.39999 18.3332 9.99999 18.3332C14.6 18.3332 18.3333 14.5998 18.3333 9.99984C18.3333 5.39984 14.6 1.6665 9.99999 1.6665ZM9.99999 4.1665C11.3833 4.1665 12.5 5.28317 12.5 6.6665C12.5 8.04984 11.3833 9.1665 9.99999 9.1665C8.61666 9.1665 7.49999 8.04984 7.49999 6.6665C7.49999 5.28317 8.61666 4.1665 9.99999 4.1665ZM9.99999 15.9998C7.91666 15.9998 6.07499 14.9332 4.99999 13.3165C5.02499 11.6582 8.33332 10.7498 9.99999 10.7498C11.6583 10.7498 14.975 11.6582 15 13.3165C13.925 14.9332 12.0833 15.9998 9.99999 15.9998Z"
|
|
50
|
+
fill="white"
|
|
51
|
+
/>
|
|
52
|
+
</svg>`, B = t`<svg
|
|
53
|
+
width="20"
|
|
54
|
+
height="20"
|
|
55
|
+
viewBox="0 0 20 20"
|
|
56
|
+
fill="none"
|
|
57
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
58
|
+
>
|
|
59
|
+
<path
|
|
60
|
+
d="M16.6667 15.4167C17.5833 15.4167 18.325 14.6667 18.325 13.7501L18.3333 4.58341C18.3333 3.66675 17.5833 2.91675 16.6667 2.91675H3.33333C2.41667 2.91675 1.66667 3.66675 1.66667 4.58341V13.7501C1.66667 14.6667 2.41667 15.4167 3.33333 15.4167H0C0 16.3334 0.75 17.0834 1.66667 17.0834H18.3333C19.25 17.0834 20 16.3334 20 15.4167H16.6667ZM3.33333 4.58341H16.6667V13.7501H3.33333V4.58341ZM10 16.2501C9.54167 16.2501 9.16667 15.8751 9.16667 15.4167C9.16667 14.9584 9.54167 14.5834 10 14.5834C10.4583 14.5834 10.8333 14.9584 10.8333 15.4167C10.8333 15.8751 10.4583 16.2501 10 16.2501Z"
|
|
61
|
+
fill="white"
|
|
62
|
+
/>
|
|
63
|
+
</svg>`, N = t`<svg
|
|
64
|
+
width="8"
|
|
65
|
+
height="12"
|
|
66
|
+
viewBox="0 0 8 12"
|
|
67
|
+
fill="none"
|
|
68
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
69
|
+
>
|
|
70
|
+
<path
|
|
71
|
+
d="M1.70687 0L0.296875 1.41L4.87687 6L0.296875 10.59L1.70687 12L7.70687 6L1.70687 0Z"
|
|
72
|
+
fill="white"
|
|
73
|
+
/>
|
|
74
|
+
</svg>`, k = (e = "#505050") => t`<svg
|
|
75
|
+
width="14"
|
|
76
|
+
height="14"
|
|
77
|
+
viewBox="0 0 14 14"
|
|
78
|
+
fill="none"
|
|
79
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
80
|
+
>
|
|
81
|
+
<path
|
|
82
|
+
d="M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z"
|
|
83
|
+
fill="${e}"
|
|
84
|
+
/>
|
|
85
|
+
</svg>`, A = t`<svg
|
|
86
|
+
width="20"
|
|
87
|
+
height="20"
|
|
88
|
+
viewBox="0 0 20 20"
|
|
89
|
+
fill="none"
|
|
90
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
91
|
+
>
|
|
92
|
+
<path
|
|
93
|
+
d="M15 9.16683V10.8335H18.3333V9.16683H15ZM13.3333 14.6752C14.1333 15.2668 15.175 16.0502 16 16.6668C16.3333 16.2252 16.6667 15.7752 17 15.3335C16.175 14.7168 15.1333 13.9335 14.3333 13.3335C14 13.7835 13.6667 14.2335 13.3333 14.6752ZM17 4.66683C16.6667 4.22516 16.3333 3.77516 16 3.3335C15.175 3.95016 14.1333 4.7335 13.3333 5.3335C13.6667 5.77516 14 6.22516 14.3333 6.66683C15.1333 6.06683 16.175 5.29183 17 4.66683ZM3.33332 7.50016C2.41666 7.50016 1.66666 8.25016 1.66666 9.16683V10.8335C1.66666 11.7502 2.41666 12.5002 3.33332 12.5002H4.16666V15.8335H5.83332V12.5002H6.66666L10.8333 15.0002V5.00016L6.66666 7.50016H3.33332ZM12.9167 10.0002C12.9167 8.89183 12.4333 7.89183 11.6667 7.2085V12.7835C12.4333 12.1085 12.9167 11.1085 12.9167 10.0002Z"
|
|
94
|
+
fill="white"
|
|
95
|
+
/>
|
|
96
|
+
</svg> `, p = t`<svg
|
|
97
|
+
width="20"
|
|
98
|
+
height="20"
|
|
99
|
+
viewBox="0 0 20 20"
|
|
100
|
+
fill="none"
|
|
101
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
102
|
+
>
|
|
103
|
+
<path
|
|
104
|
+
d="M15.95 10.7833C15.9833 10.5333 16 10.275 16 10C16 9.73333 15.9833 9.46667 15.9417 9.21667L17.6333 7.9C17.7833 7.78333 17.825 7.55833 17.7333 7.39167L16.1333 4.625C16.0333 4.44167 15.825 4.38333 15.6417 4.44167L13.65 5.24167C13.2333 4.925 12.7917 4.65833 12.3 4.45833L12 2.34167C11.9667 2.14167 11.8 2 11.6 2H8.39999C8.19999 2 8.04166 2.14167 8.00832 2.34167L7.70832 4.45833C7.21666 4.65833 6.76666 4.93333 6.35832 5.24167L4.36666 4.44167C4.18332 4.375 3.97499 4.44167 3.87499 4.625L2.28332 7.39167C2.18332 7.56667 2.21666 7.78333 2.38332 7.9L4.07499 9.21667C4.03332 9.46667 3.99999 9.74167 3.99999 10C3.99999 10.2583 4.01666 10.5333 4.05832 10.7833L2.36666 12.1C2.21666 12.2167 2.17499 12.4417 2.26666 12.6083L3.86666 15.375C3.96666 15.5583 4.17499 15.6167 4.35832 15.5583L6.34999 14.7583C6.76666 15.075 7.20832 15.3417 7.69999 15.5417L7.99999 17.6583C8.04166 17.8583 8.19999 18 8.39999 18H11.6C11.8 18 11.9667 17.8583 11.9917 17.6583L12.2917 15.5417C12.7833 15.3417 13.2333 15.075 13.6417 14.7583L15.6333 15.5583C15.8167 15.625 16.025 15.5583 16.125 15.375L17.725 12.6083C17.825 12.425 17.7833 12.2167 17.625 12.1L15.95 10.7833ZM9.99999 13C8.34999 13 6.99999 11.65 6.99999 10C6.99999 8.35 8.34999 7 9.99999 7C11.65 7 13 8.35 13 10C13 11.65 11.65 13 9.99999 13Z"
|
|
105
|
+
fill="white"
|
|
106
|
+
/>
|
|
107
|
+
</svg> `, O = t`<svg
|
|
108
|
+
width="20"
|
|
109
|
+
height="20"
|
|
110
|
+
viewBox="0 0 20 20"
|
|
111
|
+
fill="none"
|
|
112
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
113
|
+
>
|
|
114
|
+
<path
|
|
115
|
+
d="M9.99999 1.6665C5.39999 1.6665 1.66666 5.39984 1.66666 9.99984C1.66666 14.5998 5.39999 18.3332 9.99999 18.3332C14.6 18.3332 18.3333 14.5998 18.3333 9.99984C18.3333 5.39984 14.6 1.6665 9.99999 1.6665ZM10.7333 14.7998V15.8332H9.27499V14.7582C8.65832 14.6082 7.28332 14.1165 6.75832 12.2915L8.13332 11.7332C8.18332 11.9165 8.61666 13.4748 10.1333 13.4748C10.9083 13.4748 11.7833 13.0748 11.7833 12.1332C11.7833 11.3332 11.2 10.9165 9.88332 10.4415C8.96666 10.1165 7.09166 9.58317 7.09166 7.68317C7.09166 7.59984 7.09999 5.68317 9.27499 5.2165V4.1665H10.7333V5.19984C12.2667 5.4665 12.825 6.6915 12.95 7.05817L11.6333 7.6165C11.5417 7.32484 11.1417 6.49984 10.05 6.49984C9.46666 6.49984 8.54166 6.80817 8.54166 7.65817C8.54166 8.44984 9.25832 8.74984 10.7417 9.2415C12.7417 9.93317 13.25 10.9498 13.25 12.1165C13.25 14.3082 11.1667 14.7248 10.7333 14.7998Z"
|
|
116
|
+
fill="white"
|
|
117
|
+
/>
|
|
118
|
+
</svg>`, H = t`<svg
|
|
119
|
+
width="20"
|
|
120
|
+
height="20"
|
|
121
|
+
viewBox="0 0 20 20"
|
|
122
|
+
fill="none"
|
|
123
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
124
|
+
>
|
|
125
|
+
<path
|
|
126
|
+
d="M8.33332 17.0832V12.0832H11.6667V17.0832H15.8333V10.4165H18.3333L9.99999 2.9165L1.66666 10.4165H4.16666V17.0832H8.33332Z"
|
|
127
|
+
fill="white"
|
|
128
|
+
/>
|
|
129
|
+
</svg>`, R = t`<svg
|
|
130
|
+
width="20"
|
|
131
|
+
height="20"
|
|
132
|
+
viewBox="0 0 20 20"
|
|
133
|
+
fill="none"
|
|
134
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
135
|
+
>
|
|
136
|
+
<path
|
|
137
|
+
d="M16.6667 4.99984H13.3333V3.33317C13.3333 2.4165 12.5833 1.6665 11.6667 1.6665H8.33332C7.41666 1.6665 6.66666 2.4165 6.66666 3.33317V4.99984H3.33332C2.41666 4.99984 1.66666 5.74984 1.66666 6.6665V16.6665C1.66666 17.5832 2.41666 18.3332 3.33332 18.3332H16.6667C17.5833 18.3332 18.3333 17.5832 18.3333 16.6665V6.6665C18.3333 5.74984 17.5833 4.99984 16.6667 4.99984ZM8.33332 3.33317H11.6667V4.99984H8.33332V3.33317ZM13.3333 12.4998H10.8333V14.9998H9.16666V12.4998H6.66666V10.8332H9.16666V8.33317H10.8333V10.8332H13.3333V12.4998Z"
|
|
138
|
+
fill="white"
|
|
139
|
+
/>
|
|
140
|
+
</svg> `, z = t` <svg
|
|
141
|
+
width="24"
|
|
142
|
+
height="24"
|
|
143
|
+
viewBox="0 0 24 24"
|
|
144
|
+
fill="none"
|
|
145
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
146
|
+
>
|
|
147
|
+
<path
|
|
148
|
+
d="M3 18H16V16H3V18ZM3 13H13V11H3V13ZM3 6V8H16V6H3ZM21 15.59L17.42 12L21 8.41L19.59 7L14.59 12L19.59 17L21 15.59Z"
|
|
149
|
+
fill="white"
|
|
150
|
+
/>
|
|
151
|
+
</svg>`, _ = t`<svg
|
|
152
|
+
width="24"
|
|
153
|
+
height="24"
|
|
154
|
+
viewBox="0 0 24 24"
|
|
155
|
+
fill="none"
|
|
156
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
157
|
+
>
|
|
158
|
+
<path d="M3 18H21V16H3V18ZM3 13H21V11H3V13ZM3 6V8H21V6H3Z" fill="white" />
|
|
159
|
+
</svg>`, G = t`<svg
|
|
160
|
+
width="20"
|
|
161
|
+
height="20"
|
|
162
|
+
viewBox="0 0 20 20"
|
|
163
|
+
fill="none"
|
|
164
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
165
|
+
>
|
|
166
|
+
<path
|
|
167
|
+
d="M12.5 2.5H4.16667C3.25 2.5 2.50833 3.25 2.50833 4.16667L2.5 15.8333C2.5 16.75 3.24167 17.5 4.15833 17.5H15.8333C16.75 17.5 17.5 16.75 17.5 15.8333V7.5L12.5 2.5ZM6.66667 14.1667C6.20833 14.1667 5.83333 13.7917 5.83333 13.3333C5.83333 12.875 6.20833 12.5 6.66667 12.5C7.125 12.5 7.5 12.875 7.5 13.3333C7.5 13.7917 7.125 14.1667 6.66667 14.1667ZM6.66667 10.8333C6.20833 10.8333 5.83333 10.4583 5.83333 10C5.83333 9.54167 6.20833 9.16667 6.66667 9.16667C7.125 9.16667 7.5 9.54167 7.5 10C7.5 10.4583 7.125 10.8333 6.66667 10.8333ZM6.66667 7.5C6.20833 7.5 5.83333 7.125 5.83333 6.66667C5.83333 6.20833 6.20833 5.83333 6.66667 5.83333C7.125 5.83333 7.5 6.20833 7.5 6.66667C7.5 7.125 7.125 7.5 6.66667 7.5ZM11.6667 8.33333V3.75L16.25 8.33333H11.6667Z"
|
|
168
|
+
fill="white"
|
|
169
|
+
/>
|
|
170
|
+
</svg>`, P = t`<svg
|
|
171
|
+
width="20"
|
|
172
|
+
height="20"
|
|
173
|
+
viewBox="0 0 20 20"
|
|
174
|
+
fill="none"
|
|
175
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
176
|
+
>
|
|
177
|
+
<path
|
|
178
|
+
d="M14.1667 10.8332H10V14.9998H14.1667V10.8332ZM13.3333 1.6665V3.33317H6.66667V1.6665H5V3.33317H4.16667C3.24167 3.33317 2.50833 4.08317 2.50833 4.99984L2.5 16.6665C2.5 17.5832 3.24167 18.3332 4.16667 18.3332H15.8333C16.75 18.3332 17.5 17.5832 17.5 16.6665V4.99984C17.5 4.08317 16.75 3.33317 15.8333 3.33317H15V1.6665H13.3333ZM15.8333 16.6665H4.16667V7.49984H15.8333V16.6665Z"
|
|
179
|
+
fill="white"
|
|
180
|
+
/>
|
|
181
|
+
</svg> `, D = t`<svg
|
|
182
|
+
width="20"
|
|
183
|
+
height="20"
|
|
184
|
+
viewBox="0 0 20 20"
|
|
185
|
+
fill="none"
|
|
186
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
187
|
+
>
|
|
188
|
+
<path
|
|
189
|
+
d="M16.6667 5.83317H12.5V3.33317C12.5 2.4165 11.75 1.6665 10.8333 1.6665H9.16666C8.24999 1.6665 7.49999 2.4165 7.49999 3.33317V5.83317H3.33332C2.41666 5.83317 1.66666 6.58317 1.66666 7.49984V16.6665C1.66666 17.5832 2.41666 18.3332 3.33332 18.3332H16.6667C17.5833 18.3332 18.3333 17.5832 18.3333 16.6665V7.49984C18.3333 6.58317 17.5833 5.83317 16.6667 5.83317ZM7.49999 9.99984C8.19166 9.99984 8.74999 10.5582 8.74999 11.2498C8.74999 11.9415 8.19166 12.4998 7.49999 12.4998C6.80832 12.4998 6.24999 11.9415 6.24999 11.2498C6.24999 10.5582 6.80832 9.99984 7.49999 9.99984ZM9.99999 14.9998H4.99999V14.3748C4.99999 13.5415 6.66666 13.1248 7.49999 13.1248C8.33332 13.1248 9.99999 13.5415 9.99999 14.3748V14.9998ZM10.8333 7.49984H9.16666V3.33317H10.8333V7.49984ZM15 13.7498H11.6667V12.4998H15V13.7498ZM15 11.2498H11.6667V9.99984H15V11.2498Z"
|
|
190
|
+
fill="white"
|
|
191
|
+
/>
|
|
192
|
+
</svg> `, U = t`<svg
|
|
193
|
+
width="20"
|
|
194
|
+
height="20"
|
|
195
|
+
viewBox="0 0 20 20"
|
|
196
|
+
fill="none"
|
|
197
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
198
|
+
>
|
|
199
|
+
<path
|
|
200
|
+
d="M10 2.0835C6.66668 2.0835 3.33334 2.50016 3.33334 5.41683V13.3335C3.33334 14.1252 3.65001 14.8418 4.16668 15.3668V17.0835C4.16668 17.5418 4.54168 17.9168 5.00001 17.9168H5.83334C6.29168 17.9168 6.66668 17.5418 6.66668 17.0835V16.2502H13.3333V17.0835C13.3333 17.5418 13.7083 17.9168 14.1667 17.9168H15C15.4583 17.9168 15.8333 17.5418 15.8333 17.0835V15.3668C16.35 14.8418 16.6667 14.1252 16.6667 13.3335V5.41683C16.6667 2.50016 13.6833 2.0835 10 2.0835ZM7.08334 13.7502C6.39168 13.7502 5.83334 13.1918 5.83334 12.5002C5.83334 11.8085 6.39168 11.2502 7.08334 11.2502C7.77501 11.2502 8.33334 11.8085 8.33334 12.5002C8.33334 13.1918 7.77501 13.7502 7.08334 13.7502ZM12.9167 13.7502C12.225 13.7502 11.6667 13.1918 11.6667 12.5002C11.6667 11.8085 12.225 11.2502 12.9167 11.2502C13.6083 11.2502 14.1667 11.8085 14.1667 12.5002C14.1667 13.1918 13.6083 13.7502 12.9167 13.7502ZM15 8.75016H5.00001V6.25016H15V8.75016Z"
|
|
201
|
+
fill="white"
|
|
202
|
+
/>
|
|
203
|
+
</svg> `, j = t`<svg
|
|
204
|
+
width="24"
|
|
205
|
+
height="24"
|
|
206
|
+
viewBox="0 0 24 24"
|
|
207
|
+
fill="none"
|
|
208
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
209
|
+
>
|
|
210
|
+
<path
|
|
211
|
+
d="M18 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V4C20 2.9 19.1 2 18 2ZM6 4H11V12L8.5 10.5L6 12V4Z"
|
|
212
|
+
fill="#505050"
|
|
213
|
+
/>
|
|
214
|
+
</svg>`, F = t`<svg
|
|
215
|
+
width="24"
|
|
216
|
+
height="24"
|
|
217
|
+
viewBox="0 0 24 24"
|
|
218
|
+
fill="none"
|
|
219
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
220
|
+
>
|
|
221
|
+
<path
|
|
222
|
+
d="M19.1401 12.9399C19.1801 12.6399 19.2001 12.3299 19.2001 11.9999C19.2001 11.6799 19.1801 11.3599 19.1301 11.0599L21.1601 9.4799C21.3401 9.3399 21.3901 9.0699 21.2801 8.8699L19.3601 5.5499C19.2401 5.3299 18.9901 5.2599 18.7701 5.3299L16.3801 6.2899C15.8801 5.9099 15.3501 5.5899 14.7601 5.3499L14.4001 2.8099C14.3601 2.5699 14.1601 2.3999 13.9201 2.3999H10.0801C9.84011 2.3999 9.65011 2.5699 9.61011 2.8099L9.25011 5.3499C8.66011 5.5899 8.12011 5.9199 7.63011 6.2899L5.24011 5.3299C5.02011 5.2499 4.77011 5.3299 4.65011 5.5499L2.74011 8.8699C2.62011 9.0799 2.66011 9.3399 2.86011 9.4799L4.89011 11.0599C4.84011 11.3599 4.80011 11.6899 4.80011 11.9999C4.80011 12.3099 4.82011 12.6399 4.87011 12.9399L2.84011 14.5199C2.66011 14.6599 2.61011 14.9299 2.72011 15.1299L4.64011 18.4499C4.76011 18.6699 5.01011 18.7399 5.23011 18.6699L7.62011 17.7099C8.12011 18.0899 8.65011 18.4099 9.24011 18.6499L9.60011 21.1899C9.65011 21.4299 9.84011 21.5999 10.0801 21.5999H13.9201C14.1601 21.5999 14.3601 21.4299 14.3901 21.1899L14.7501 18.6499C15.3401 18.4099 15.8801 18.0899 16.3701 17.7099L18.7601 18.6699C18.9801 18.7499 19.2301 18.6699 19.3501 18.4499L21.2701 15.1299C21.3901 14.9099 21.3401 14.6599 21.1501 14.5199L19.1401 12.9399ZM12.0001 15.5999C10.0201 15.5999 8.40011 13.9799 8.40011 11.9999C8.40011 10.0199 10.0201 8.3999 12.0001 8.3999C13.9801 8.3999 15.6001 10.0199 15.6001 11.9999C15.6001 13.9799 13.9801 15.5999 12.0001 15.5999Z"
|
|
223
|
+
fill="#505050"
|
|
224
|
+
/>
|
|
225
|
+
</svg>`, K = t`<svg
|
|
226
|
+
width="24"
|
|
227
|
+
height="24"
|
|
228
|
+
viewBox="0 0 24 24"
|
|
229
|
+
fill="none"
|
|
230
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
231
|
+
>
|
|
232
|
+
<path
|
|
233
|
+
d="M5 13.18V17.18L12 21L19 17.18V13.18L12 17L5 13.18ZM12 3L1 9L12 15L21 10.09V17H23V9L12 3Z"
|
|
234
|
+
fill="#505050"
|
|
235
|
+
/>
|
|
236
|
+
</svg>`, Y = t`<svg
|
|
237
|
+
width="24"
|
|
238
|
+
height="24"
|
|
239
|
+
viewBox="0 0 24 24"
|
|
240
|
+
fill="none"
|
|
241
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
242
|
+
>
|
|
243
|
+
<path
|
|
244
|
+
d="M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 5C13.66 5 15 6.34 15 8C15 9.66 13.66 11 12 11C10.34 11 9 9.66 9 8C9 6.34 10.34 5 12 5ZM12 19.2C9.5 19.2 7.29 17.92 6 15.98C6.03 13.99 10 12.9 12 12.9C13.99 12.9 17.97 13.99 18 15.98C16.71 17.92 14.5 19.2 12 19.2Z"
|
|
245
|
+
fill="#505050"
|
|
246
|
+
/>
|
|
247
|
+
</svg>`, W = t`<svg
|
|
248
|
+
width="20"
|
|
249
|
+
height="20"
|
|
250
|
+
viewBox="0 0 20 20"
|
|
251
|
+
fill="none"
|
|
252
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
253
|
+
>
|
|
254
|
+
<path
|
|
255
|
+
d="M16.6667 15.4167C17.5833 15.4167 18.325 14.6667 18.325 13.7501L18.3333 4.58341C18.3333 3.66675 17.5833 2.91675 16.6667 2.91675H3.33333C2.41667 2.91675 1.66667 3.66675 1.66667 4.58341V13.7501C1.66667 14.6667 2.41667 15.4167 3.33333 15.4167H0C0 16.3334 0.75 17.0834 1.66667 17.0834H18.3333C19.25 17.0834 20 16.3334 20 15.4167H16.6667ZM3.33333 4.58341H16.6667V13.7501H3.33333V4.58341ZM10 16.2501C9.54167 16.2501 9.16667 15.8751 9.16667 15.4167C9.16667 14.9584 9.54167 14.5834 10 14.5834C10.4583 14.5834 10.8333 14.9584 10.8333 15.4167C10.8333 15.8751 10.4583 16.2501 10 16.2501Z"
|
|
256
|
+
fill="#505050"
|
|
257
|
+
/>
|
|
258
|
+
</svg>`, q = t`<svg
|
|
259
|
+
width="24"
|
|
260
|
+
height="24"
|
|
261
|
+
viewBox="0 0 24 24"
|
|
262
|
+
fill="none"
|
|
263
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
264
|
+
>
|
|
265
|
+
<path
|
|
266
|
+
d="M18 11V13H22V11H18ZM16 17.61C16.96 18.32 18.21 19.26 19.2 20C19.6 19.47 20 18.93 20.4 18.4C19.41 17.66 18.16 16.72 17.2 16C16.8 16.54 16.4 17.08 16 17.61ZM20.4 5.6C20 5.07 19.6 4.53 19.2 4C18.21 4.74 16.96 5.68 16 6.4C16.4 6.93 16.8 7.47 17.2 8C18.16 7.28 19.41 6.35 20.4 5.6ZM4 9C2.9 9 2 9.9 2 11V13C2 14.1 2.9 15 4 15H5V19H7V15H8L13 18V6L8 9H4ZM15.5 12C15.5 10.67 14.92 9.47 14 8.65V15.34C14.92 14.53 15.5 13.33 15.5 12Z"
|
|
267
|
+
fill="#505050"
|
|
268
|
+
/>
|
|
269
|
+
</svg> `, u = t`<svg
|
|
270
|
+
width="24"
|
|
271
|
+
height="24"
|
|
272
|
+
viewBox="0 0 24 24"
|
|
273
|
+
fill="none"
|
|
274
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
275
|
+
>
|
|
276
|
+
<path
|
|
277
|
+
d="M19.1401 12.9399C19.1801 12.6399 19.2001 12.3299 19.2001 11.9999C19.2001 11.6799 19.1801 11.3599 19.1301 11.0599L21.1601 9.4799C21.3401 9.3399 21.3901 9.0699 21.2801 8.8699L19.3601 5.5499C19.2401 5.3299 18.9901 5.2599 18.7701 5.3299L16.3801 6.2899C15.8801 5.9099 15.3501 5.5899 14.7601 5.3499L14.4001 2.8099C14.3601 2.5699 14.1601 2.3999 13.9201 2.3999H10.0801C9.84011 2.3999 9.65011 2.5699 9.61011 2.8099L9.25011 5.3499C8.66011 5.5899 8.12011 5.9199 7.63011 6.2899L5.24011 5.3299C5.02011 5.2499 4.77011 5.3299 4.65011 5.5499L2.74011 8.8699C2.62011 9.0799 2.66011 9.3399 2.86011 9.4799L4.89011 11.0599C4.84011 11.3599 4.80011 11.6899 4.80011 11.9999C4.80011 12.3099 4.82011 12.6399 4.87011 12.9399L2.84011 14.5199C2.66011 14.6599 2.61011 14.9299 2.72011 15.1299L4.64011 18.4499C4.76011 18.6699 5.01011 18.7399 5.23011 18.6699L7.62011 17.7099C8.12011 18.0899 8.65011 18.4099 9.24011 18.6499L9.60011 21.1899C9.65011 21.4299 9.84011 21.5999 10.0801 21.5999H13.9201C14.1601 21.5999 14.3601 21.4299 14.3901 21.1899L14.7501 18.6499C15.3401 18.4099 15.8801 18.0899 16.3701 17.7099L18.7601 18.6699C18.9801 18.7499 19.2301 18.6699 19.3501 18.4499L21.2701 15.1299C21.3901 14.9099 21.3401 14.6599 21.1501 14.5199L19.1401 12.9399ZM12.0001 15.5999C10.0201 15.5999 8.40011 13.9799 8.40011 11.9999C8.40011 10.0199 10.0201 8.3999 12.0001 8.3999C13.9801 8.3999 15.6001 10.0199 15.6001 11.9999C15.6001 13.9799 13.9801 15.5999 12.0001 15.5999Z"
|
|
278
|
+
fill="#505050"
|
|
279
|
+
/>
|
|
280
|
+
</svg>`, X = t`<svg
|
|
281
|
+
width="24"
|
|
282
|
+
height="24"
|
|
283
|
+
viewBox="0 0 24 24"
|
|
284
|
+
fill="none"
|
|
285
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
286
|
+
>
|
|
287
|
+
<path
|
|
288
|
+
d="M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12.88 17.76V19H11.13V17.71C10.39 17.53 8.74 16.94 8.11 14.75L9.76 14.08C9.82 14.3 10.34 16.17 12.16 16.17C13.09 16.17 14.14 15.69 14.14 14.56C14.14 13.6 13.44 13.1 11.86 12.53C10.76 12.14 8.51 11.5 8.51 9.22C8.51 9.12 8.52 6.82 11.13 6.26V5H12.88V6.24C14.72 6.56 15.39 8.03 15.54 8.47L13.96 9.14C13.85 8.79 13.37 7.8 12.06 7.8C11.36 7.8 10.25 8.17 10.25 9.19C10.25 10.14 11.11 10.5 12.89 11.09C15.29 11.92 15.9 13.14 15.9 14.54C15.9 17.17 13.4 17.67 12.88 17.76Z"
|
|
289
|
+
fill="#505050"
|
|
290
|
+
/>
|
|
291
|
+
</svg> `, J = t`<svg
|
|
292
|
+
width="24"
|
|
293
|
+
height="24"
|
|
294
|
+
viewBox="0 0 24 24"
|
|
295
|
+
fill="none"
|
|
296
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
297
|
+
>
|
|
298
|
+
<path
|
|
299
|
+
d="M20 6H16V4C16 2.9 15.1 2 14 2H10C8.9 2 8 2.9 8 4V6H4C2.9 6 2 6.9 2 8V20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20V8C22 6.9 21.1 6 20 6ZM10 4H14V6H10V4ZM16 15H13V18H11V15H8V13H11V10H13V13H16V15Z"
|
|
300
|
+
fill="#505050"
|
|
301
|
+
/>
|
|
302
|
+
</svg> `, w = t`<svg
|
|
303
|
+
width="16"
|
|
304
|
+
height="16"
|
|
305
|
+
viewBox="0 0 16 16"
|
|
306
|
+
fill="none"
|
|
307
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
308
|
+
>
|
|
309
|
+
<path
|
|
310
|
+
d="M12.6667 12.6667H3.33333V3.33333H8V2H3.33333C2.59333 2 2 2.6 2 3.33333V12.6667C2 13.4 2.59333 14 3.33333 14H12.6667C13.4 14 14 13.4 14 12.6667V8H12.6667V12.6667ZM9.33333 2V3.33333H11.7267L5.17333 9.88667L6.11333 10.8267L12.6667 4.27333V6.66667H14V2H9.33333Z"
|
|
311
|
+
fill="#282828"
|
|
312
|
+
/>
|
|
313
|
+
</svg> `, Q = t`<svg
|
|
314
|
+
width="24"
|
|
315
|
+
height="24"
|
|
316
|
+
viewBox="0 0 24 24"
|
|
317
|
+
fill="none"
|
|
318
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
319
|
+
>
|
|
320
|
+
<path
|
|
321
|
+
d="M15 3H5C3.9 3 3.01 3.9 3.01 5L3 19C3 20.1 3.89 21 4.99 21H19C20.1 21 21 20.1 21 19V9L15 3ZM8 17C7.45 17 7 16.55 7 16C7 15.45 7.45 15 8 15C8.55 15 9 15.45 9 16C9 16.55 8.55 17 8 17ZM8 13C7.45 13 7 12.55 7 12C7 11.45 7.45 11 8 11C8.55 11 9 11.45 9 12C9 12.55 8.55 13 8 13ZM8 9C7.45 9 7 8.55 7 8C7 7.45 7.45 7 8 7C8.55 7 9 7.45 9 8C9 8.55 8.55 9 8 9ZM14 10V4.5L19.5 10H14Z"
|
|
322
|
+
fill="#505050"
|
|
323
|
+
/>
|
|
324
|
+
</svg> `, e1 = t`<svg
|
|
325
|
+
width="24"
|
|
326
|
+
height="24"
|
|
327
|
+
viewBox="0 0 24 24"
|
|
328
|
+
fill="none"
|
|
329
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
330
|
+
>
|
|
331
|
+
<path
|
|
332
|
+
d="M17 13H12V18H17V13ZM16 2V4H8V2H6V4H5C3.89 4 3.01 4.9 3.01 6L3 20C3 21.1 3.89 22 5 22H19C20.1 22 21 21.1 21 20V6C21 4.9 20.1 4 19 4H18V2H16ZM19 20H5V9H19V20Z"
|
|
333
|
+
fill="#505050"
|
|
334
|
+
/>
|
|
335
|
+
</svg> `, t1 = t`<svg
|
|
336
|
+
width="24"
|
|
337
|
+
height="24"
|
|
338
|
+
viewBox="0 0 24 24"
|
|
339
|
+
fill="none"
|
|
340
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
341
|
+
>
|
|
342
|
+
<path
|
|
343
|
+
d="M20 7H15V4C15 2.9 14.1 2 13 2H11C9.9 2 9 2.9 9 4V7H4C2.9 7 2 7.9 2 9V20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20V9C22 7.9 21.1 7 20 7ZM9 12C9.83 12 10.5 12.67 10.5 13.5C10.5 14.33 9.83 15 9 15C8.17 15 7.5 14.33 7.5 13.5C7.5 12.67 8.17 12 9 12ZM12 18H6V17.25C6 16.25 8 15.75 9 15.75C10 15.75 12 16.25 12 17.25V18ZM13 9H11V4H13V9ZM18 16.5H14V15H18V16.5ZM18 13.5H14V12H18V13.5Z"
|
|
344
|
+
fill="#505050"
|
|
345
|
+
/>
|
|
346
|
+
</svg> `, o1 = t`<svg
|
|
347
|
+
width="24"
|
|
348
|
+
height="24"
|
|
349
|
+
viewBox="0 0 24 24"
|
|
350
|
+
fill="none"
|
|
351
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
352
|
+
>
|
|
353
|
+
<path
|
|
354
|
+
d="M12 2.5C8 2.5 4 3 4 6.5V16C4 16.95 4.38 17.81 5 18.44V20.5C5 21.05 5.45 21.5 6 21.5H7C7.55 21.5 8 21.05 8 20.5V19.5H16V20.5C16 21.05 16.45 21.5 17 21.5H18C18.55 21.5 19 21.05 19 20.5V18.44C19.62 17.81 20 16.95 20 16V6.5C20 3 16.42 2.5 12 2.5ZM8.5 16.5C7.67 16.5 7 15.83 7 15C7 14.17 7.67 13.5 8.5 13.5C9.33 13.5 10 14.17 10 15C10 15.83 9.33 16.5 8.5 16.5ZM15.5 16.5C14.67 16.5 14 15.83 14 15C14 14.17 14.67 13.5 15.5 13.5C16.33 13.5 17 14.17 17 15C17 15.83 16.33 16.5 15.5 16.5ZM18 10.5H6V7.5H18V10.5Z"
|
|
355
|
+
fill="#505050"
|
|
356
|
+
/>
|
|
357
|
+
</svg>`, M = 248, V = 16, i1 = f`
|
|
358
|
+
/* ===== HOST-LEVEL CUSTOM PROPERTIES ===== */
|
|
359
|
+
:host {
|
|
360
|
+
/* '--cm-side-nav-width' is set on 'campminder-app-shell''s ':host'
|
|
361
|
+
* (packages/campminder/src/layout.ts is the source of truth) and
|
|
362
|
+
* pierces the shadow boundary, so it's readable here even though this
|
|
363
|
+
* package is portal-agnostic. It also switches to the collapsed
|
|
364
|
+
* width, which a literal '168px' can't — the fallback below is only
|
|
365
|
+
* for standalone rendering with no shell present.
|
|
366
|
+
* '100vw' is correct for production, where the shell fills the
|
|
367
|
+
* viewport and the nav starts at x=0; it reads over-wide in this
|
|
368
|
+
* harness only because the harness page has a 24px inset the shell
|
|
369
|
+
* doesn't have — a harness-geometry artifact, not a formula bug. */
|
|
370
|
+
--cm-mega-menu-max-width: calc(100vw - var(--cm-side-nav-width, 168px));
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/* ===== CSS RESET ===== */
|
|
374
|
+
* {
|
|
375
|
+
margin: 0;
|
|
376
|
+
padding: 0;
|
|
377
|
+
box-sizing: border-box;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* ===== ANIMATIONS ===== */
|
|
381
|
+
@keyframes fadeIn {
|
|
382
|
+
from {
|
|
383
|
+
opacity: 0;
|
|
384
|
+
}
|
|
385
|
+
to {
|
|
386
|
+
opacity: 1;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/* ===== MEGA MENU CONTAINER ===== */
|
|
391
|
+
.mega-menu {
|
|
392
|
+
position: absolute;
|
|
393
|
+
left: 100%;
|
|
394
|
+
top: 0;
|
|
395
|
+
max-width: var(--cm-mega-menu-max-width);
|
|
396
|
+
height: 100%;
|
|
397
|
+
border-radius: 4px;
|
|
398
|
+
background: #fff;
|
|
399
|
+
box-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.12);
|
|
400
|
+
animation: fadeIn 0.5s ease;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* ===== HEADER SECTION ===== */
|
|
404
|
+
.header {
|
|
405
|
+
display: flex;
|
|
406
|
+
align-items: center;
|
|
407
|
+
justify-content: space-between;
|
|
408
|
+
color: #505050;
|
|
409
|
+
border-bottom: 1px solid rgba(160, 160, 160, 1);
|
|
410
|
+
margin: 0 16px;
|
|
411
|
+
height: 56px;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.header-left {
|
|
415
|
+
display: flex;
|
|
416
|
+
align-items: center;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.header-title {
|
|
420
|
+
display: grid;
|
|
421
|
+
place-content: center;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.header-icon {
|
|
425
|
+
margin-right: 8px;
|
|
426
|
+
display: flex;
|
|
427
|
+
justify-content: center;
|
|
428
|
+
align-items: center;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* ===== CLOSE BUTTON ===== */
|
|
432
|
+
.close-button {
|
|
433
|
+
display: flex;
|
|
434
|
+
width: 24px;
|
|
435
|
+
height: 24px;
|
|
436
|
+
justify-content: center;
|
|
437
|
+
align-items: center;
|
|
438
|
+
border-radius: 4px;
|
|
439
|
+
cursor: pointer;
|
|
440
|
+
transition: background 0.2s ease;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.close-button:hover {
|
|
444
|
+
background: rgba(119, 61, 189, 0.12);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/* ===== TYPOGRAPHY ===== */
|
|
448
|
+
.title-text {
|
|
449
|
+
color: #505050;
|
|
450
|
+
font-family: 'Inter', sans-serif;
|
|
451
|
+
font-size: 16px;
|
|
452
|
+
font-weight: 600;
|
|
453
|
+
line-height: 24px;
|
|
454
|
+
letter-spacing: 0.0025em;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/* ===== MENU ITEMS CONTAINER ===== */
|
|
458
|
+
.menu-items {
|
|
459
|
+
height: calc(100% - 56px);
|
|
460
|
+
max-width: var(--cm-mega-menu-max-width);
|
|
461
|
+
display: flex;
|
|
462
|
+
flex-flow: column wrap;
|
|
463
|
+
padding: 10px 16px 10px 0px;
|
|
464
|
+
overflow: auto;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* ===== MENU ITEM ===== */
|
|
468
|
+
.menu-item {
|
|
469
|
+
width: ${M}px;
|
|
470
|
+
margin-left: ${V}px;
|
|
471
|
+
margin-bottom: 12px;
|
|
472
|
+
font-family: 'Inter', sans-serif;
|
|
473
|
+
font-size: 14px;
|
|
474
|
+
font-weight: 400;
|
|
475
|
+
line-height: 20px;
|
|
476
|
+
letter-spacing: -0.001em;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.menu-title {
|
|
480
|
+
display: flex;
|
|
481
|
+
width: 248px;
|
|
482
|
+
padding: 4px 12px;
|
|
483
|
+
align-items: center;
|
|
484
|
+
gap: 8px;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/* ===== MENU LINKS ===== */
|
|
488
|
+
.menu-url {
|
|
489
|
+
display: flex;
|
|
490
|
+
align-items: center;
|
|
491
|
+
width: 248px;
|
|
492
|
+
min-height: 32px;
|
|
493
|
+
padding: 6px 12px;
|
|
494
|
+
border-radius: 4px;
|
|
495
|
+
text-decoration: none;
|
|
496
|
+
color: #380f8c;
|
|
497
|
+
transition: background 0.2s ease;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
.menu-url:hover,
|
|
501
|
+
.menu-url:focus {
|
|
502
|
+
background: rgba(119, 61, 189, 0.12);
|
|
503
|
+
outline: none;
|
|
504
|
+
cursor: pointer;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.new-tab-icon {
|
|
508
|
+
margin-left: 4px;
|
|
509
|
+
display: grid;
|
|
510
|
+
place-content: center;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
/* ===== RESPONSIVE ===== */
|
|
514
|
+
@media (max-width: 1150px) {
|
|
515
|
+
.menu-items {
|
|
516
|
+
flex-wrap: nowrap;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
`, y = {
|
|
520
|
+
AccountsSvgIcon: j,
|
|
521
|
+
AdminSvgIcon: F,
|
|
522
|
+
AlumniSvgIcon: K,
|
|
523
|
+
CamperSvgIcon: Y,
|
|
524
|
+
CommunicationSvgIcon: q,
|
|
525
|
+
CampInTouchSvgIcon: W,
|
|
526
|
+
FinancialSvgIcon: X,
|
|
527
|
+
MedicalSvgIcon: J,
|
|
528
|
+
ReportingSvgIcon: Q,
|
|
529
|
+
SchedulingSvgIcon: e1,
|
|
530
|
+
StaffSvgIcon: t1,
|
|
531
|
+
TravelSvgIcon: o1
|
|
532
|
+
};
|
|
533
|
+
function n1(e) {
|
|
534
|
+
return e ? e.id === "home" ? H : y[`${e.label}SvgIcon`] ?? u : u;
|
|
535
|
+
}
|
|
536
|
+
function w1(e) {
|
|
537
|
+
return e ? e.id === "home" ? !0 : `${e.label}SvgIcon` in y : !1;
|
|
538
|
+
}
|
|
539
|
+
function d(e) {
|
|
540
|
+
return e.startsWith("http") ? new URL(e).pathname + new URL(e).search : e;
|
|
541
|
+
}
|
|
542
|
+
function s1(e, o) {
|
|
543
|
+
const n = d(o);
|
|
544
|
+
for (const i of e) {
|
|
545
|
+
if (i.href && d(i.href) === n)
|
|
546
|
+
return i.id;
|
|
547
|
+
for (const s of i.subCategories)
|
|
548
|
+
if (s.href && d(s.href) === n || s.items.find((a) => d(a.href) === n)) return i.id;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
function r1(e) {
|
|
552
|
+
return e.items.length > 0 || !!e.href;
|
|
553
|
+
}
|
|
554
|
+
function C(e) {
|
|
555
|
+
return e.subCategories.filter(r1);
|
|
556
|
+
}
|
|
557
|
+
function a1(e, o) {
|
|
558
|
+
const n = e.find((i) => i.id === o);
|
|
559
|
+
return !!n && C(n).length > 0;
|
|
560
|
+
}
|
|
561
|
+
function l1(e, o) {
|
|
562
|
+
return o === "/" ? "home" : s1(e, o) ?? "";
|
|
563
|
+
}
|
|
564
|
+
var h1 = Object.defineProperty, c1 = Object.getOwnPropertyDescriptor, v = (e, o, n, i) => {
|
|
565
|
+
for (var s = i > 1 ? void 0 : i ? c1(o, n) : o, r = e.length - 1, a; r >= 0; r--)
|
|
566
|
+
(a = e[r]) && (s = (i ? a(o, n, s) : a(s)) || s);
|
|
567
|
+
return i && s && h1(o, n, s), s;
|
|
568
|
+
};
|
|
569
|
+
let h = class extends m {
|
|
570
|
+
constructor() {
|
|
571
|
+
super(...arguments), this.tree = [], this.categoryId = "", this.handleKeyDown = (e) => {
|
|
572
|
+
var o, n;
|
|
573
|
+
if (e.key === "Escape")
|
|
574
|
+
this.handleCloseMegaMenu();
|
|
575
|
+
else if (e.key === "Tab") {
|
|
576
|
+
const i = (o = this.shadowRoot) == null ? void 0 : o.querySelectorAll("a.menu-title, .menu-url");
|
|
577
|
+
if (!i || i.length === 0) return;
|
|
578
|
+
const s = (n = this.shadowRoot) == null ? void 0 : n.activeElement;
|
|
579
|
+
e.shiftKey && s === i[0] ? (e.preventDefault(), this.handleCloseMegaMenu()) : !e.shiftKey && s === i[i.length - 1] && (e.preventDefault(), i[0].focus());
|
|
580
|
+
}
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
connectedCallback() {
|
|
584
|
+
super.connectedCallback(), this.addEventListener("keydown", this.handleKeyDown);
|
|
585
|
+
}
|
|
586
|
+
disconnectedCallback() {
|
|
587
|
+
super.disconnectedCallback(), this.removeEventListener("keydown", this.handleKeyDown);
|
|
588
|
+
}
|
|
589
|
+
get categoryData() {
|
|
590
|
+
return this.tree.find((e) => e.id === this.categoryId);
|
|
591
|
+
}
|
|
592
|
+
handleCloseMegaMenu() {
|
|
593
|
+
this.dispatchEvent(
|
|
594
|
+
new CustomEvent("cm-mega-menu-close", {
|
|
595
|
+
bubbles: !0,
|
|
596
|
+
composed: !0,
|
|
597
|
+
cancelable: !0
|
|
598
|
+
})
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Packs menu items into as many 248px columns as the container's own
|
|
603
|
+
* measured height allows. The `getBoundingClientRect()` calls below are
|
|
604
|
+
* this component measuring its own shadow root, not a sibling, so they
|
|
605
|
+
* don't trip the one rule. The `window.innerWidth <= 1150` gate is a
|
|
606
|
+
* different thing and does not get the same pass: it's a page-viewport
|
|
607
|
+
* read uncorrelated with this component's actual available width, kept
|
|
608
|
+
* only because it's what upstream gated on. `window.innerWidth` is 1024
|
|
609
|
+
* under jsdom, so this early return fires on every test run and the
|
|
610
|
+
* packing logic below it was, until the test added for this floor,
|
|
611
|
+
* unexercised by the suite.
|
|
612
|
+
*/
|
|
613
|
+
setMenuItemsContainerWidth() {
|
|
614
|
+
var s;
|
|
615
|
+
const e = (s = this.shadowRoot) == null ? void 0 : s.querySelector(".menu-items");
|
|
616
|
+
if (!e || window.innerWidth <= 1150) return;
|
|
617
|
+
const o = e.getBoundingClientRect().height - 20;
|
|
618
|
+
let n = 1, i = 0;
|
|
619
|
+
for (const r of e.children)
|
|
620
|
+
i + r.getBoundingClientRect().height + 12 > // 12 for bottom margin on item
|
|
621
|
+
o && (n += 1, i = 0), i += r.getBoundingClientRect().height + 12;
|
|
622
|
+
e.style.width = `${n * M + (n + 1) * V}px`;
|
|
623
|
+
}
|
|
624
|
+
updated(e) {
|
|
625
|
+
super.updated(e), this.setMenuItemsContainerWidth();
|
|
626
|
+
}
|
|
627
|
+
// 2026-09-04: `label` may carry an unresolved `{{Bunk:Proper:Default}}`-style
|
|
628
|
+
// terminology token, on both a sub-category header and a leaf. Rendered
|
|
629
|
+
// verbatim below on purpose — see AGENTS.md's "Never resolve a terminology
|
|
630
|
+
// token."
|
|
631
|
+
renderLeaf(e) {
|
|
632
|
+
return e.popup ? t`
|
|
633
|
+
<a
|
|
634
|
+
class="menu-url"
|
|
635
|
+
href="#nowhere"
|
|
636
|
+
@click=${() => {
|
|
637
|
+
const o = window.open(e.href, "", e.popupProperties);
|
|
638
|
+
return o && (o.opener = null), !1;
|
|
639
|
+
}}
|
|
640
|
+
target="_top"
|
|
641
|
+
>
|
|
642
|
+
${e.label}
|
|
643
|
+
<span class="new-tab-icon">${w}</span>
|
|
644
|
+
</a>
|
|
645
|
+
` : t`
|
|
646
|
+
<a
|
|
647
|
+
class="menu-url"
|
|
648
|
+
href="${e.href}"
|
|
649
|
+
target=${e.newTab ? "_blank" : "_self"}
|
|
650
|
+
rel=${b(e.newTab ? "noopener noreferrer" : void 0)}
|
|
651
|
+
>
|
|
652
|
+
${e.label}
|
|
653
|
+
${e.newTab ? t`<span class="new-tab-icon">${w}</span>` : null}
|
|
654
|
+
</a>
|
|
655
|
+
`;
|
|
656
|
+
}
|
|
657
|
+
render() {
|
|
658
|
+
const e = this.categoryData, o = e ? C(e) : [];
|
|
659
|
+
return !e || o.length === 0 ? null : t`
|
|
660
|
+
<section class="mega-menu">
|
|
661
|
+
<div class="header">
|
|
662
|
+
<div class="header-left">
|
|
663
|
+
<div class="header-icon">${n1(e)}</div>
|
|
664
|
+
<p class="header-title title-text">${e.label}</p>
|
|
665
|
+
</div>
|
|
666
|
+
<p class="close-button" @click=${this.handleCloseMegaMenu}>${k()}</p>
|
|
667
|
+
</div>
|
|
668
|
+
<div class="menu-items">
|
|
669
|
+
${o.map(
|
|
670
|
+
(n) => t`
|
|
671
|
+
<div class="menu-item">
|
|
672
|
+
${// Deliberate addition, not upstream parity — core-js's
|
|
673
|
+
// `sub_categories[]` never carried a `url`, so there's no parity to
|
|
674
|
+
// break. `MenuSubCategory.href?` lets a sub-category be a direct
|
|
675
|
+
// link, and `isRenderableSubCategory` (`Utils/helpers.ts`) already
|
|
676
|
+
// keeps such a node alive when it has no items. Rendering only
|
|
677
|
+
// `sub.items` left that node's header going nowhere — no live case
|
|
678
|
+
// in `campminder.json` today, but Floor 6's visibility filter can
|
|
679
|
+
// produce one: an `href`-bearing sub-category whose every leaf is
|
|
680
|
+
// gated off for the viewer.
|
|
681
|
+
n.href ? t`<a class="title-text menu-title" href="${n.href}">${n.label}</a>` : t`<p class="title-text menu-title">${n.label}</p>`}
|
|
682
|
+
${n.items.map((i) => this.renderLeaf(i))}
|
|
683
|
+
</div>
|
|
684
|
+
`
|
|
685
|
+
)}
|
|
686
|
+
</div>
|
|
687
|
+
</section>
|
|
688
|
+
`;
|
|
689
|
+
}
|
|
690
|
+
};
|
|
691
|
+
h.styles = [i1];
|
|
692
|
+
v([
|
|
693
|
+
c({ attribute: !1 })
|
|
694
|
+
], h.prototype, "tree", 2);
|
|
695
|
+
v([
|
|
696
|
+
c({ type: String, attribute: "category-id" })
|
|
697
|
+
], h.prototype, "categoryId", 2);
|
|
698
|
+
h = v([
|
|
699
|
+
x("cm-mega-menu")
|
|
700
|
+
], h);
|
|
701
|
+
const g1 = f`
|
|
702
|
+
/* ===== CSS CUSTOM PROPERTIES (DESIGN TOKENS) ===== */
|
|
703
|
+
:host {
|
|
704
|
+
display: block;
|
|
705
|
+
height: 100%;
|
|
706
|
+
|
|
707
|
+
--sidebar-header-height: 56px;
|
|
708
|
+
--category-height: 48px;
|
|
709
|
+
--overlay-menu-width: 90vw;
|
|
710
|
+
--overlay-menu-max-width: 400px;
|
|
711
|
+
--menu-item-min-height: 52px;
|
|
712
|
+
|
|
713
|
+
/* Color tokens */
|
|
714
|
+
--color-bg-gradient: linear-gradient(152.45deg, #851936 -26.73%, #590e39 5.17%, #25023d 42.09%);
|
|
715
|
+
--color-border: #ffffff29;
|
|
716
|
+
--color-border-gray: rgb(160, 160, 160);
|
|
717
|
+
--color-border-light: rgba(255, 255, 255, 0.05);
|
|
718
|
+
--color-border-medium: rgba(255, 255, 255, 0.2);
|
|
719
|
+
--color-text: white;
|
|
720
|
+
--color-hover: #773dbd3d;
|
|
721
|
+
--color-selected: #ffffff52;
|
|
722
|
+
--color-focus: #2266cc;
|
|
723
|
+
--color-backdrop: rgba(0, 0, 0, 0.5);
|
|
724
|
+
--color-section-bg: rgba(255, 255, 255, 0.08);
|
|
725
|
+
|
|
726
|
+
/* Animation tokens */
|
|
727
|
+
--duration-fast: 0.2s;
|
|
728
|
+
--duration-normal: 0.3s;
|
|
729
|
+
--duration-slow: 0.45s;
|
|
730
|
+
--easing-standard: cubic-bezier(0.2, 0, 0.38, 0.9);
|
|
731
|
+
--easing-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
732
|
+
--easing-exit: cubic-bezier(0.4, 0, 0.2, 1);
|
|
733
|
+
|
|
734
|
+
/* Typography tokens */
|
|
735
|
+
--font-family: 'Inter', sans-serif;
|
|
736
|
+
--font-size-base: 14px;
|
|
737
|
+
--font-size-medium: 15px;
|
|
738
|
+
--font-size-large: 16px;
|
|
739
|
+
--font-size-xl: 20px;
|
|
740
|
+
--line-height-base: 20px;
|
|
741
|
+
|
|
742
|
+
/* Spacing tokens */
|
|
743
|
+
--spacing-xs: 8px;
|
|
744
|
+
--spacing-sm: 12px;
|
|
745
|
+
--spacing-md: 16px;
|
|
746
|
+
--spacing-lg: 20px;
|
|
747
|
+
--spacing-xl: 24px;
|
|
748
|
+
--spacing-2xl: 28px;
|
|
749
|
+
|
|
750
|
+
/* Icon sizes */
|
|
751
|
+
--icon-size-small: 16px;
|
|
752
|
+
--icon-size-base: 24px;
|
|
753
|
+
--icon-size-large: 40px;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
/* ===== RESET & BASE STYLES ===== */
|
|
757
|
+
:focus-visible {
|
|
758
|
+
outline: none !important;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
* {
|
|
762
|
+
margin: 0;
|
|
763
|
+
padding: 0;
|
|
764
|
+
box-sizing: border-box;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/* ===== MENU TOGGLE BUTTON (mobile; unused until Floor 5D, kept for parity) ===== */
|
|
768
|
+
.menu-toggle {
|
|
769
|
+
width: var(--sidebar-header-height);
|
|
770
|
+
height: var(--sidebar-header-height);
|
|
771
|
+
cursor: pointer;
|
|
772
|
+
display: none;
|
|
773
|
+
background: white;
|
|
774
|
+
border: none;
|
|
775
|
+
border-bottom: 1px solid var(--color-border-gray);
|
|
776
|
+
justify-content: center;
|
|
777
|
+
align-items: center;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
.toggle-mobile-btn {
|
|
781
|
+
width: var(--icon-size-base);
|
|
782
|
+
height: var(--icon-size-base);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
/* ===== NAVIGATION CONTAINER ===== */
|
|
786
|
+
.nav-container {
|
|
787
|
+
display: flex;
|
|
788
|
+
height: 100%;
|
|
789
|
+
/* 2026-09-04, Floor 5: the positioning context for the mega-menu flyout,
|
|
790
|
+
* which is 'position: absolute; left: 100%' inside its own shadow root
|
|
791
|
+
* (MegaMenu.styles.ts). '.side-nav' below is already 'width: 100%' of
|
|
792
|
+
* this container, so 'left: 100%' lands the flyout at the column's right
|
|
793
|
+
* edge without widening the column itself. */
|
|
794
|
+
position: relative;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/* ===== SIDEBAR BASE STYLES ===== */
|
|
798
|
+
.side-nav {
|
|
799
|
+
width: 100%;
|
|
800
|
+
height: 100%;
|
|
801
|
+
color: var(--color-text);
|
|
802
|
+
background: var(--color-bg-gradient);
|
|
803
|
+
display: flex;
|
|
804
|
+
flex-direction: column;
|
|
805
|
+
position: relative;
|
|
806
|
+
will-change: transform;
|
|
807
|
+
-webkit-overflow-scrolling: touch;
|
|
808
|
+
transition:
|
|
809
|
+
width var(--duration-fast) var(--easing-standard),
|
|
810
|
+
transform var(--duration-fast) var(--easing-standard);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.collapsed-sidebar .category-name {
|
|
814
|
+
opacity: 0;
|
|
815
|
+
pointer-events: none;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
/* ===== HEADER BUTTONS ===== */
|
|
819
|
+
.menu-close,
|
|
820
|
+
.sidebar-toggle {
|
|
821
|
+
width: 100%;
|
|
822
|
+
height: var(--sidebar-header-height);
|
|
823
|
+
background: transparent;
|
|
824
|
+
border: none;
|
|
825
|
+
cursor: pointer;
|
|
826
|
+
display: flex;
|
|
827
|
+
align-items: center;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.menu-close {
|
|
831
|
+
border-bottom: 1px solid var(--color-border-light);
|
|
832
|
+
justify-content: flex-end;
|
|
833
|
+
padding: 0 var(--spacing-lg);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.sidebar-toggle {
|
|
837
|
+
border-bottom: 1px solid var(--color-border);
|
|
838
|
+
justify-content: right;
|
|
839
|
+
color: var(--color-text);
|
|
840
|
+
padding: 14px 18px;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
.sidebar-toggle:hover {
|
|
844
|
+
background: var(--color-hover);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
.sidebar-toggle:focus {
|
|
848
|
+
border: 1px solid var(--color-focus);
|
|
849
|
+
background: var(--color-hover);
|
|
850
|
+
border-right: none;
|
|
851
|
+
outline: none;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
.toggle-btn {
|
|
855
|
+
display: flex;
|
|
856
|
+
align-items: center;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/* ===== MAIN NAVIGATION CONTENT ===== */
|
|
860
|
+
.nav-main-content {
|
|
861
|
+
flex: 1;
|
|
862
|
+
display: flex;
|
|
863
|
+
flex-direction: column;
|
|
864
|
+
/* 2026-09-04, Floor 5: the shell's '[part=nav]' did drop its own
|
|
865
|
+
* 'overflow: hidden' so the flyout can escape the nav column
|
|
866
|
+
* (app-shell.ts), but that does not make this element the scroll
|
|
867
|
+
* boundary — '.categories-container' / '.categories-list' below has
|
|
868
|
+
* been that boundary since Floor 4 and this diff didn't touch it.
|
|
869
|
+
* Measured: '.nav-main-content' has zero overflow (scrollHeight ===
|
|
870
|
+
* clientHeight) in all three compositions; '.categories-container' is
|
|
871
|
+
* the one that actually scrolls. Leave this 'hidden' — an 'auto' on
|
|
872
|
+
* only the y-axis leaves the x-axis at its default 'visible', which
|
|
873
|
+
* per spec computes to 'auto' too (one axis 'auto' forces the other
|
|
874
|
+
* off 'visible'), opening a horizontal scrollbar in this 168px column
|
|
875
|
+
* that 'hidden' correctly suppresses on both axes. Don't "improve"
|
|
876
|
+
* this to 'overflow-y: auto' later. */
|
|
877
|
+
overflow: hidden;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/* ===== CATEGORIES CONTAINER ===== */
|
|
881
|
+
.categories-container,
|
|
882
|
+
.categories-list {
|
|
883
|
+
flex: 1;
|
|
884
|
+
overflow: auto;
|
|
885
|
+
scroll-behavior: smooth;
|
|
886
|
+
-webkit-overflow-scrolling: touch;
|
|
887
|
+
scrollbar-width: none;
|
|
888
|
+
-ms-overflow-style: none;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.categories-container::-webkit-scrollbar,
|
|
892
|
+
.categories-list::-webkit-scrollbar {
|
|
893
|
+
display: none;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.categories-list {
|
|
897
|
+
list-style: none;
|
|
898
|
+
margin: 0;
|
|
899
|
+
padding: 0;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
.categories-list li {
|
|
903
|
+
display: contents;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
.categories-list li:focus-within .category {
|
|
907
|
+
outline: 2px solid var(--color-focus);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/* ===== CATEGORY ITEMS ===== */
|
|
911
|
+
.category {
|
|
912
|
+
width: 100%;
|
|
913
|
+
height: var(--category-height);
|
|
914
|
+
display: flex;
|
|
915
|
+
align-items: center;
|
|
916
|
+
border: none;
|
|
917
|
+
border-bottom: 1px solid var(--color-border);
|
|
918
|
+
background: transparent;
|
|
919
|
+
text-decoration: none;
|
|
920
|
+
padding: var(--spacing-md);
|
|
921
|
+
color: var(--color-text);
|
|
922
|
+
cursor: pointer;
|
|
923
|
+
position: relative;
|
|
924
|
+
|
|
925
|
+
/* Typography */
|
|
926
|
+
font-family: var(--font-family);
|
|
927
|
+
font-size: var(--font-size-base);
|
|
928
|
+
font-weight: 400;
|
|
929
|
+
line-height: var(--line-height-base);
|
|
930
|
+
letter-spacing: -0.001em;
|
|
931
|
+
text-align: left;
|
|
932
|
+
overflow: hidden;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
.category:focus {
|
|
936
|
+
border: 1px solid var(--color-focus);
|
|
937
|
+
background: var(--color-hover);
|
|
938
|
+
border-right: none;
|
|
939
|
+
outline: none;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
.category.selected {
|
|
943
|
+
background: var(--color-selected);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
/* Sidebar hover effects for categories */
|
|
947
|
+
.category-hovered,
|
|
948
|
+
.category:hover {
|
|
949
|
+
background: var(--color-hover);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
.category-hovered::after {
|
|
953
|
+
content: '';
|
|
954
|
+
width: var(--icon-size-small);
|
|
955
|
+
height: var(--icon-size-small);
|
|
956
|
+
transform: rotate(-45deg);
|
|
957
|
+
border-radius: 2px;
|
|
958
|
+
background: #fff;
|
|
959
|
+
position: absolute;
|
|
960
|
+
top: calc(50% - var(--spacing-xs));
|
|
961
|
+
right: -10px;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
.category-icon {
|
|
965
|
+
margin-right: var(--spacing-sm);
|
|
966
|
+
display: flex;
|
|
967
|
+
justify-content: center;
|
|
968
|
+
align-items: center;
|
|
969
|
+
min-width: var(--icon-size-base);
|
|
970
|
+
height: var(--icon-size-base);
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
.category-name {
|
|
974
|
+
flex: 1;
|
|
975
|
+
opacity: 1;
|
|
976
|
+
text-align: left;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
.chevron-right {
|
|
980
|
+
margin-left: auto;
|
|
981
|
+
display: flex;
|
|
982
|
+
align-items: center;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
/* ===== ACCESSIBILITY ===== */
|
|
986
|
+
@media (prefers-reduced-motion: reduce) {
|
|
987
|
+
*,
|
|
988
|
+
*::before,
|
|
989
|
+
*::after {
|
|
990
|
+
animation-duration: 0.01ms !important;
|
|
991
|
+
animation-iteration-count: 1 !important;
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
`, L = {
|
|
995
|
+
AccountsSvgIcon: S,
|
|
996
|
+
AdminSvgIcon: E,
|
|
997
|
+
AlumniSvgIcon: T,
|
|
998
|
+
CamperSvgIcon: $,
|
|
999
|
+
CommunicationSvgIcon: A,
|
|
1000
|
+
CampInTouchSvgIcon: B,
|
|
1001
|
+
FinancialSvgIcon: O,
|
|
1002
|
+
HomeSvgIcon: H,
|
|
1003
|
+
MedicalSvgIcon: R,
|
|
1004
|
+
ReportingSvgIcon: G,
|
|
1005
|
+
SchedulingSvgIcon: P,
|
|
1006
|
+
StaffSvgIcon: D,
|
|
1007
|
+
TravelSvgIcon: U
|
|
1008
|
+
};
|
|
1009
|
+
function d1(e) {
|
|
1010
|
+
return e ? L[`${e}SvgIcon`] ?? p : p;
|
|
1011
|
+
}
|
|
1012
|
+
function f1(e) {
|
|
1013
|
+
return !!e && `${e}SvgIcon` in L;
|
|
1014
|
+
}
|
|
1015
|
+
var C1 = Object.defineProperty, v1 = Object.getOwnPropertyDescriptor, g = (e, o, n, i) => {
|
|
1016
|
+
for (var s = i > 1 ? void 0 : i ? v1(o, n) : o, r = e.length - 1, a; r >= 0; r--)
|
|
1017
|
+
(a = e[r]) && (s = (i ? a(o, n, s) : a(s)) || s);
|
|
1018
|
+
return i && s && C1(o, n, s), s;
|
|
1019
|
+
};
|
|
1020
|
+
let l = class extends m {
|
|
1021
|
+
constructor() {
|
|
1022
|
+
super(...arguments), this.hoveredCategory = "", this.collapsed = !1, this.currentPath = "", this.tree = [], this.toggleSidenav = () => {
|
|
1023
|
+
this.dispatchEvent(
|
|
1024
|
+
new CustomEvent("cm-side-nav-toggle", {
|
|
1025
|
+
detail: { collapsed: !this.collapsed },
|
|
1026
|
+
bubbles: !0,
|
|
1027
|
+
composed: !0
|
|
1028
|
+
})
|
|
1029
|
+
);
|
|
1030
|
+
};
|
|
1031
|
+
}
|
|
1032
|
+
/**
|
|
1033
|
+
* Computed on render rather than cached in `@state` and refreshed from
|
|
1034
|
+
* `updated()` — core-js's shape. That pattern writes state from inside the
|
|
1035
|
+
* `updated()` lifecycle hook, which schedules a second update on top of the one
|
|
1036
|
+
* already in flight (Lit warns: "scheduled an update ... after an update
|
|
1037
|
+
* completed"). `selectedCategory` is a pure function of `tree` and
|
|
1038
|
+
* `currentPath`, both already reactive properties, so there is nothing this
|
|
1039
|
+
* getter needs to cache.
|
|
1040
|
+
*/
|
|
1041
|
+
get selectedCategory() {
|
|
1042
|
+
return l1(this.tree, this.currentPath);
|
|
1043
|
+
}
|
|
1044
|
+
disconnectedCallback() {
|
|
1045
|
+
super.disconnectedCallback(), this.clearHoverTimeout();
|
|
1046
|
+
}
|
|
1047
|
+
setSelectedCategory(e) {
|
|
1048
|
+
this.handleMenuItemHover(e);
|
|
1049
|
+
}
|
|
1050
|
+
handleMenuItemHover(e) {
|
|
1051
|
+
this.hoveredCategory = e;
|
|
1052
|
+
}
|
|
1053
|
+
clearHoverTimeout() {
|
|
1054
|
+
this.hoverTimeout !== void 0 && (clearTimeout(this.hoverTimeout), this.hoverTimeout = void 0);
|
|
1055
|
+
}
|
|
1056
|
+
handleMouseEnter(e) {
|
|
1057
|
+
this.clearHoverTimeout(), this.hoverTimeout = window.setTimeout(() => {
|
|
1058
|
+
this.handleMenuItemHover(e);
|
|
1059
|
+
}, 300);
|
|
1060
|
+
}
|
|
1061
|
+
handleMouseLeave() {
|
|
1062
|
+
this.clearHoverTimeout();
|
|
1063
|
+
}
|
|
1064
|
+
// Utility Methods
|
|
1065
|
+
get hamburgerIcon() {
|
|
1066
|
+
return this.collapsed ? _ : z;
|
|
1067
|
+
}
|
|
1068
|
+
/**
|
|
1069
|
+
* The category the mega-menu flyout is open for, or `undefined` when none
|
|
1070
|
+
* is. Guards on `renderableSubCategories(category).length > 0` (the same
|
|
1071
|
+
* predicate `hasSubmenus` uses for the chevron above) rather than on
|
|
1072
|
+
* `hoveredCategory` alone — `hoveredCategory` can also be the literal
|
|
1073
|
+
* string `'sidebar-toggle'` (see `handleMouseEnter` call sites), and a
|
|
1074
|
+
* category with no renderable sub-categories must not open onto nothing.
|
|
1075
|
+
*/
|
|
1076
|
+
get openCategory() {
|
|
1077
|
+
const e = this.tree.find((o) => o.id === this.hoveredCategory);
|
|
1078
|
+
if (!(!e || C(e).length === 0))
|
|
1079
|
+
return e;
|
|
1080
|
+
}
|
|
1081
|
+
buildCategoryClass(e) {
|
|
1082
|
+
const o = ["category"];
|
|
1083
|
+
return e.id === this.selectedCategory && o.push("selected"), e.id === this.hoveredCategory && o.push("category-hovered"), o.join(" ");
|
|
1084
|
+
}
|
|
1085
|
+
// 2026-09-02: `category.label` may still carry an unresolved `{{Bunk:Proper:Default}}`-style
|
|
1086
|
+
// terminology token — per-client substitution is a host concern, deferred by the plan (see
|
|
1087
|
+
// AGENTS.md's "Never resolve a terminology token"). Rendered verbatim below on purpose. A
|
|
1088
|
+
// future truncation, tooltip reformat, or `.trim()`/regex touch-up to `category.label` must
|
|
1089
|
+
// not assume it is plain text.
|
|
1090
|
+
getCategoryHtml(e) {
|
|
1091
|
+
const o = this.buildCategoryClass(e), n = a1(this.tree, e.id), i = d1(e.label);
|
|
1092
|
+
return n ? t`
|
|
1093
|
+
<button
|
|
1094
|
+
class="${o}"
|
|
1095
|
+
@mouseenter=${() => this.handleMouseEnter(e.id)}
|
|
1096
|
+
@mouseleave=${() => this.handleMouseLeave()}
|
|
1097
|
+
@click=${() => this.handleMenuItemHover(e.id)}
|
|
1098
|
+
>
|
|
1099
|
+
<div class="category-icon">${i}</div>
|
|
1100
|
+
<div class="category-name">${e.label}</div>
|
|
1101
|
+
<div class="chevron-right">${N}</div>
|
|
1102
|
+
</button>
|
|
1103
|
+
` : t`
|
|
1104
|
+
<a
|
|
1105
|
+
class="${o}"
|
|
1106
|
+
@mouseenter=${() => this.handleMouseEnter(e.id)}
|
|
1107
|
+
@mouseleave=${() => this.handleMouseLeave()}
|
|
1108
|
+
@click=${() => this.setSelectedCategory(e.id)}
|
|
1109
|
+
href="${b(e.href)}"
|
|
1110
|
+
>
|
|
1111
|
+
<div class="category-icon">${i}</div>
|
|
1112
|
+
<div class="category-name">${e.label}</div>
|
|
1113
|
+
</a>
|
|
1114
|
+
`;
|
|
1115
|
+
}
|
|
1116
|
+
renderMainMenu() {
|
|
1117
|
+
return t`
|
|
1118
|
+
<nav class="categories-container" role="navigation" aria-label="Main categories">
|
|
1119
|
+
<ul class="categories-list" role="list">
|
|
1120
|
+
${this.tree.map(
|
|
1121
|
+
(e) => t` <li role="listitem">${this.getCategoryHtml(e)}</li> `
|
|
1122
|
+
)}
|
|
1123
|
+
</ul>
|
|
1124
|
+
</nav>
|
|
1125
|
+
`;
|
|
1126
|
+
}
|
|
1127
|
+
render() {
|
|
1128
|
+
const e = this.openCategory;
|
|
1129
|
+
return t`
|
|
1130
|
+
<nav
|
|
1131
|
+
class="nav-container"
|
|
1132
|
+
role="navigation"
|
|
1133
|
+
aria-label="Main navigation"
|
|
1134
|
+
@mouseleave=${() => this.hoveredCategory = ""}
|
|
1135
|
+
>
|
|
1136
|
+
<aside
|
|
1137
|
+
class=${`side-nav ${this.collapsed ? "collapsed-sidebar" : ""}`}
|
|
1138
|
+
role="complementary"
|
|
1139
|
+
aria-label="Sidebar navigation"
|
|
1140
|
+
>
|
|
1141
|
+
<button
|
|
1142
|
+
@mouseenter=${() => this.handleMouseEnter("sidebar-toggle")}
|
|
1143
|
+
@mouseleave=${() => this.handleMouseLeave()}
|
|
1144
|
+
class="sidebar-toggle"
|
|
1145
|
+
@click=${this.toggleSidenav}
|
|
1146
|
+
aria-label="Toggle sidebar"
|
|
1147
|
+
aria-expanded=${this.collapsed ? "false" : "true"}
|
|
1148
|
+
>
|
|
1149
|
+
<span class="toggle-btn">${this.hamburgerIcon}</span>
|
|
1150
|
+
</button>
|
|
1151
|
+
|
|
1152
|
+
<main class="nav-main-content" role="main">${this.renderMainMenu()}</main>
|
|
1153
|
+
</aside>
|
|
1154
|
+
|
|
1155
|
+
<!--
|
|
1156
|
+
The flyout renders here, inside this component's own shadow root —
|
|
1157
|
+
as core-js did — rather than through a slot. A named flyout slot
|
|
1158
|
+
lived here through Floor 4; Floor 5 found it unpayable: filling it
|
|
1159
|
+
from light DOM would have forced hoveredCategory into public API
|
|
1160
|
+
and crossed the component's own encapsulation. cm-mega-menu gets
|
|
1161
|
+
the whole tree plus the open category's id (never a resolved node —
|
|
1162
|
+
see MegaMenu.ts's doc comment). Its close event resets
|
|
1163
|
+
hoveredCategory back to '' — it is the derived openCategory getter
|
|
1164
|
+
above, not hoveredCategory itself, that becomes undefined.
|
|
1165
|
+
-->
|
|
1166
|
+
${e ? t`
|
|
1167
|
+
<cm-mega-menu
|
|
1168
|
+
.tree=${this.tree}
|
|
1169
|
+
category-id=${e.id}
|
|
1170
|
+
@cm-mega-menu-close=${() => this.hoveredCategory = ""}
|
|
1171
|
+
></cm-mega-menu>
|
|
1172
|
+
` : null}
|
|
1173
|
+
</nav>
|
|
1174
|
+
`;
|
|
1175
|
+
}
|
|
1176
|
+
};
|
|
1177
|
+
l.styles = [g1];
|
|
1178
|
+
g([
|
|
1179
|
+
Z()
|
|
1180
|
+
], l.prototype, "hoveredCategory", 2);
|
|
1181
|
+
g([
|
|
1182
|
+
c({ type: Boolean, reflect: !0 })
|
|
1183
|
+
], l.prototype, "collapsed", 2);
|
|
1184
|
+
g([
|
|
1185
|
+
c({ type: String, attribute: "current-path" })
|
|
1186
|
+
], l.prototype, "currentPath", 2);
|
|
1187
|
+
g([
|
|
1188
|
+
c({ attribute: !1 })
|
|
1189
|
+
], l.prototype, "tree", 2);
|
|
1190
|
+
l = g([
|
|
1191
|
+
x("cm-side-nav")
|
|
1192
|
+
], l);
|
|
1193
|
+
export {
|
|
1194
|
+
h as MegaMenu,
|
|
1195
|
+
l as SideNav,
|
|
1196
|
+
f1 as hasIconFor,
|
|
1197
|
+
w1 as hasMegaMenuIconFor
|
|
1198
|
+
};
|