@campminder/components 0.6.1 → 0.7.1

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.
@@ -85,14 +85,12 @@ export declare class SideNav extends LitElement {
85
85
  * `MenuTree` (`../menu-tree`, generic — see that file's move note) instead. Icon binding is the only
86
86
  * piece of that pipeline still intrinsic to rendering; see `icon-map.ts`.
87
87
  *
88
- * Not sorted here. core-js's `sortCategoriesData` sorted by `sort_order` then
89
- * name at every level because the base64 fixture arrived unsorted; verified
90
- * 2026-09-02 that the committed `campminder.json` categories are already in
91
- * `sortOrder` order on disk, and `drift.test.ts` pins that order — so imposing a
92
- * second sort here would just be a no-op that could silently start doing
93
- * something the day the JSON stops being pre-sorted. If that's ever untrue, the
94
- * fix belongs where the JSON is authored, not in a render-time sort this
95
- * component would then always pay for.
88
+ * Not sorted here: the tree arrives in display order. System sorts by `sortOrder`
89
+ * then name, at every level, on the label the camp actually sees, so the order
90
+ * depends on each camp's terminology and cannot be fixed in the committed JSON.
91
+ * The server does it in `getFilteredMenu`, after terms resolve (AB#29742). The
92
+ * raw tree exported for client use (`CAMPMINDER_TREE`, `loadCampminderTree`) is
93
+ * neither resolved nor sorted; a host rendering it directly gets on-disk order.
96
94
  */
97
95
  tree: MenuTree;
98
96
  /**
package/dist/side-nav.js CHANGED
@@ -1,11 +1,11 @@
1
- import { A, b as n, S as C, i as b, n as h, a as w, t as y } from "./shell-tokens-BjECzZvL.js";
1
+ import { A as R, b as n, S as b, i as C, n as h, a as w, t as y } from "./shell-tokens-BjECzZvL.js";
2
2
  import { r as m } from "./state-BvQoY71J.js";
3
3
  /**
4
4
  * @license
5
5
  * Copyright 2018 Google LLC
6
6
  * SPDX-License-Identifier: BSD-3-Clause
7
7
  */
8
- const v = (e) => e ?? A, R = n` <svg
8
+ const v = (e) => e ?? R, D = n` <svg
9
9
  width="20"
10
10
  height="20"
11
11
  viewBox="0 0 20 20"
@@ -16,7 +16,7 @@ const v = (e) => e ?? A, R = n` <svg
16
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
17
  fill="white"
18
18
  />
19
- </svg>`, D = n`<svg
19
+ </svg>`, _ = n`<svg
20
20
  width="20"
21
21
  height="20"
22
22
  viewBox="0 0 20 20"
@@ -27,7 +27,7 @@ const v = (e) => e ?? A, R = n` <svg
27
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
28
  fill="white"
29
29
  />
30
- </svg> `, _ = n`<svg
30
+ </svg> `, F = n`<svg
31
31
  width="20"
32
32
  height="20"
33
33
  viewBox="0 0 20 20"
@@ -38,7 +38,7 @@ const v = (e) => e ?? A, R = n` <svg
38
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
39
  fill="white"
40
40
  />
41
- </svg> `, F = n`<svg
41
+ </svg> `, P = n`<svg
42
42
  width="20"
43
43
  height="20"
44
44
  viewBox="0 0 20 20"
@@ -49,7 +49,7 @@ const v = (e) => e ?? A, R = n` <svg
49
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
50
  fill="white"
51
51
  />
52
- </svg>`, P = n`<svg
52
+ </svg>`, z = n`<svg
53
53
  width="20"
54
54
  height="20"
55
55
  viewBox="0 0 20 20"
@@ -71,7 +71,7 @@ const v = (e) => e ?? A, R = n` <svg
71
71
  d="M1.70687 0L0.296875 1.41L4.87687 6L0.296875 10.59L1.70687 12L7.70687 6L1.70687 0Z"
72
72
  fill="white"
73
73
  />
74
- </svg>`, z = (e = "#505050") => n`<svg
74
+ </svg>`, Z = (e = "#505050") => n`<svg
75
75
  width="14"
76
76
  height="14"
77
77
  viewBox="0 0 14 14"
@@ -104,7 +104,7 @@ const v = (e) => e ?? A, R = n` <svg
104
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
105
  fill="white"
106
106
  />
107
- </svg> `, U = n`<svg
107
+ </svg> `, j = n`<svg
108
108
  width="20"
109
109
  height="20"
110
110
  viewBox="0 0 20 20"
@@ -115,7 +115,7 @@ const v = (e) => e ?? A, R = n` <svg
115
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
116
  fill="white"
117
117
  />
118
- </svg>`, Z = n`<svg
118
+ </svg>`, E = n`<svg
119
119
  width="20"
120
120
  height="20"
121
121
  viewBox="0 0 20 20"
@@ -126,7 +126,7 @@ const v = (e) => e ?? A, R = n` <svg
126
126
  d="M8.33332 17.0832V12.0832H11.6667V17.0832H15.8333V10.4165H18.3333L9.99999 2.9165L1.66666 10.4165H4.16666V17.0832H8.33332Z"
127
127
  fill="white"
128
128
  />
129
- </svg>`, K = n`<svg
129
+ </svg>`, U = n`<svg
130
130
  width="20"
131
131
  height="20"
132
132
  viewBox="0 0 20 20"
@@ -137,7 +137,7 @@ const v = (e) => e ?? A, R = n` <svg
137
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
138
  fill="white"
139
139
  />
140
- </svg> `, j = n` <svg
140
+ </svg> `, K = n` <svg
141
141
  width="24"
142
142
  height="24"
143
143
  viewBox="0 0 24 24"
@@ -200,7 +200,7 @@ const v = (e) => e ?? A, R = n` <svg
200
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
201
  fill="white"
202
202
  />
203
- </svg> `, E = 248, T = 16, f = 530, X = b`
203
+ </svg> `, T = 248, O = 16, f = 530, X = C`
204
204
  /* ===== HOST-LEVEL CUSTOM PROPERTIES ===== */
205
205
  :host {
206
206
  /* '--cm-side-nav-width' is set on 'campminder-app-shell''s ':host'
@@ -227,7 +227,7 @@ const v = (e) => e ?? A, R = n` <svg
227
227
  * nav's value because both resolve the one 'SHELL_FONT_FAMILY' constant;
228
228
  * an inherited-only version would quietly start differing the moment either
229
229
  * file stopped doing that. Rationale for the chain: '../shell-tokens.ts'. */
230
- --font-family: ${C};
230
+ --font-family: ${b};
231
231
  }
232
232
 
233
233
  /* ===== CSS RESET ===== */
@@ -326,8 +326,8 @@ const v = (e) => e ?? A, R = n` <svg
326
326
 
327
327
  /* ===== MENU ITEM ===== */
328
328
  .menu-item {
329
- width: ${E}px;
330
- margin-left: ${T}px;
329
+ width: ${T}px;
330
+ margin-left: ${O}px;
331
331
  margin-bottom: 12px;
332
332
  font-family: var(--font-family);
333
333
  font-size: 14px;
@@ -530,7 +530,7 @@ const v = (e) => e ?? A, R = n` <svg
530
530
  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"
531
531
  fill="#505050"
532
532
  />
533
- </svg>`, O = {
533
+ </svg>`, B = {
534
534
  AccountsSvgIcon: J,
535
535
  AdminSvgIcon: ee,
536
536
  AlumniSvgIcon: te,
@@ -545,10 +545,10 @@ const v = (e) => e ?? A, R = n` <svg
545
545
  TravelSvgIcon: he
546
546
  };
547
547
  function de(e) {
548
- return e ? e.id === "home" ? Z : O[`${e.label}SvgIcon`] ?? V : V;
548
+ return e ? e.id === "home" ? E : B[`${e.label}SvgIcon`] ?? V : V;
549
549
  }
550
550
  function Le(e) {
551
- return e ? e.id === "home" ? !0 : `${e.label}SvgIcon` in O : !1;
551
+ return e ? e.id === "home" ? !0 : `${e.label}SvgIcon` in B : !1;
552
552
  }
553
553
  function p(e) {
554
554
  return e.startsWith("http") ? new URL(e).pathname + new URL(e).search : e;
@@ -575,7 +575,7 @@ function S(e, t) {
575
575
  function pe(e, t) {
576
576
  return t === "/" ? "home" : ge(e, t) ?? "";
577
577
  }
578
- function B(e) {
578
+ function A(e) {
579
579
  return e.popup ? n`
580
580
  <a
581
581
  class="menu-url"
@@ -668,7 +668,7 @@ let g = class extends w {
668
668
  for (const s of e.children)
669
669
  o + s.getBoundingClientRect().height + 12 > // 12 for bottom margin on item
670
670
  t && (i += 1, o = 0), o += s.getBoundingClientRect().height + 12;
671
- e.style.width = `${i * E + (i + 1) * T}px`;
671
+ e.style.width = `${i * T + (i + 1) * O}px`;
672
672
  }
673
673
  updated(e) {
674
674
  super.updated(e), this.setMenuItemsContainerWidth();
@@ -683,7 +683,7 @@ let g = class extends w {
683
683
  <p class="header-title title-text">${e.label}</p>
684
684
  </div>
685
685
  <p class="close-button" @click=${() => this.handleCloseMegaMenu(!0)}>
686
- ${z()}
686
+ ${Z()}
687
687
  </p>
688
688
  </div>
689
689
  <div class="menu-items">
@@ -700,7 +700,7 @@ let g = class extends w {
700
700
  // produce one: an `href`-bearing sub-category whose every leaf is
701
701
  // gated off for the viewer.
702
702
  i.href ? n`<a class="title-text menu-title" href="${i.href}">${i.label}</a>` : n`<p class="title-text menu-title">${i.label}</p>`}
703
- ${i.items.map((o) => B(o))}
703
+ ${i.items.map((o) => A(o))}
704
704
  </div>
705
705
  `
706
706
  )}
@@ -719,14 +719,14 @@ x([
719
719
  g = x([
720
720
  y("cm-mega-menu")
721
721
  ], g);
722
- const fe = b`
722
+ const fe = C`
723
723
  :host {
724
724
  /* The mobile drill-down is rendered inside '<cm-side-nav>'s shadow root, so
725
725
  * it would inherit this anyway. Declaring it keeps the panel's typeface a
726
726
  * property of the panel — it survives being reparented or slotted later —
727
727
  * and cannot drift from the side nav's value, because both resolve the one
728
728
  * 'SHELL_FONT_FAMILY' constant. Rationale: '../shell-tokens.ts'. */
729
- --font-family: ${C};
729
+ --font-family: ${b};
730
730
  }
731
731
 
732
732
  * {
@@ -739,15 +739,16 @@ const fe = b`
739
739
  height: 100%;
740
740
  display: flex;
741
741
  flex-direction: column;
742
- background: #fff;
742
+ /* AB#29739: sits on '<cm-side-nav>''s overlay gradient, like the first level. */
743
+ background: transparent;
743
744
  }
744
745
 
745
746
  .header {
746
747
  display: flex;
747
748
  align-items: center;
748
749
  gap: 8px;
749
- color: #505050;
750
- border-bottom: 1px solid rgba(160, 160, 160, 1);
750
+ color: var(--color-text);
751
+ border-bottom: 1px solid var(--color-border);
751
752
  padding: 0 16px;
752
753
  height: 56px;
753
754
  flex-shrink: 0;
@@ -761,6 +762,7 @@ const fe = b`
761
762
  align-items: center;
762
763
  border: none;
763
764
  background: transparent;
765
+ color: var(--color-text);
764
766
  border-radius: 4px;
765
767
  cursor: pointer;
766
768
  transition: background 0.2s ease;
@@ -782,7 +784,7 @@ const fe = b`
782
784
  }
783
785
 
784
786
  .title-text {
785
- color: #505050;
787
+ color: var(--color-text);
786
788
  font-family: var(--font-family);
787
789
  font-size: 16px;
788
790
  font-weight: 600;
@@ -824,13 +826,13 @@ const fe = b`
824
826
  padding: 6px 12px;
825
827
  border-radius: 4px;
826
828
  text-decoration: none;
827
- color: #380f8c;
829
+ color: var(--color-text);
828
830
  transition: background 0.2s ease;
829
831
  }
830
832
 
831
833
  .menu-url:hover,
832
834
  .menu-url:focus {
833
- background: rgba(119, 61, 189, 0.12);
835
+ background: var(--color-hover);
834
836
  outline: none;
835
837
  cursor: pointer;
836
838
  }
@@ -840,11 +842,16 @@ const fe = b`
840
842
  display: grid;
841
843
  place-content: center;
842
844
  }
845
+
846
+ /* The shared OpenInNewIcon is filled dark for the desktop flyout's white panel. */
847
+ .new-tab-icon path {
848
+ fill: currentColor;
849
+ }
843
850
  `;
844
- var Ce = Object.defineProperty, be = Object.getOwnPropertyDescriptor, M = (e, t, i, o) => {
845
- for (var a = o > 1 ? void 0 : o ? be(t, i) : t, s = e.length - 1, r; s >= 0; s--)
851
+ var be = Object.defineProperty, Ce = Object.getOwnPropertyDescriptor, M = (e, t, i, o) => {
852
+ for (var a = o > 1 ? void 0 : o ? Ce(t, i) : t, s = e.length - 1, r; s >= 0; s--)
846
853
  (r = e[s]) && (a = (o ? r(t, i, a) : r(a)) || a);
847
- return o && a && Ce(t, i, a), a;
854
+ return o && a && be(t, i, a), a;
848
855
  };
849
856
  let u = class extends w {
850
857
  constructor() {
@@ -906,7 +913,7 @@ let u = class extends w {
906
913
  (i) => n`
907
914
  <div class="menu-item">
908
915
  ${i.href ? n`<a class="title-text menu-title" href="${i.href}">${i.label}</a>` : n`<p class="title-text menu-title">${i.label}</p>`}
909
- ${i.items.map((o) => B(o))}
916
+ ${i.items.map((o) => A(o))}
910
917
  </div>
911
918
  `
912
919
  )}
@@ -925,7 +932,7 @@ M([
925
932
  u = M([
926
933
  y("cm-mega-menu-mobile")
927
934
  ], u);
928
- const we = b`
935
+ const we = C`
929
936
  /* ===== CSS CUSTOM PROPERTIES (DESIGN TOKENS) ===== */
930
937
  :host {
931
938
  display: block;
@@ -964,7 +971,7 @@ const we = b`
964
971
  * silently rendered in the browser's default sans-serif next to a host
965
972
  * showing General Sans. The fallback chain and why it must stay a read-only
966
973
  * var() live on 'SHELL_FONT_FAMILY' in '../shell-tokens.ts'. */
967
- --font-family: ${C};
974
+ --font-family: ${b};
968
975
  --font-size-base: 14px;
969
976
  --font-size-medium: 15px;
970
977
  --font-size-large: 16px;
@@ -1042,6 +1049,20 @@ const we = b`
1042
1049
  overflow: auto;
1043
1050
  }
1044
1051
 
1052
+ /* AB#29739: the first level's top bar, after core-js 18c4e250's '.menu-close'. */
1053
+ .menu-close {
1054
+ width: 100%;
1055
+ height: var(--sidebar-header-height);
1056
+ display: none;
1057
+ align-items: center;
1058
+ justify-content: flex-end;
1059
+ padding: 0 var(--spacing-lg);
1060
+ background: transparent;
1061
+ border: none;
1062
+ border-bottom: 1px solid var(--color-border-light);
1063
+ cursor: pointer;
1064
+ }
1065
+
1045
1066
  .mobile-categories-container,
1046
1067
  .mobile-categories-list {
1047
1068
  list-style: none;
@@ -1053,26 +1074,37 @@ const we = b`
1053
1074
  display: contents;
1054
1075
  }
1055
1076
 
1077
+ /* Row spacing matches core-js 18c4e250's open mobile menu (AB#29739). */
1056
1078
  .mobile-category {
1057
1079
  width: 100%;
1058
- height: var(--category-height);
1080
+ height: var(--sidebar-header-height);
1059
1081
  display: flex;
1060
1082
  align-items: center;
1061
1083
  border: none;
1062
- border-bottom: 1px solid var(--color-border);
1084
+ border-bottom: 1px solid var(--color-border-light);
1063
1085
  background: transparent;
1064
1086
  text-decoration: none;
1065
- padding: var(--spacing-md);
1087
+ padding: var(--spacing-md) var(--spacing-lg);
1066
1088
  color: var(--color-text);
1067
1089
  cursor: pointer;
1068
1090
  font-family: var(--font-family);
1069
- font-size: var(--font-size-base);
1091
+ font-size: var(--font-size-large);
1070
1092
  font-weight: 400;
1071
1093
  line-height: var(--line-height-base);
1072
1094
  letter-spacing: -0.001em;
1073
1095
  text-align: left;
1074
1096
  }
1075
1097
 
1098
+ .mobile-category .category-icon {
1099
+ margin-right: var(--spacing-md);
1100
+ min-width: var(--spacing-2xl);
1101
+ flex-shrink: 0;
1102
+ }
1103
+
1104
+ .mobile-category .category-name {
1105
+ font-weight: 500;
1106
+ }
1107
+
1076
1108
  .mobile-category.selected {
1077
1109
  background: var(--color-selected);
1078
1110
  }
@@ -1319,17 +1351,21 @@ const we = b`
1319
1351
  .menu-toggle {
1320
1352
  display: flex;
1321
1353
  }
1354
+
1355
+ .menu-close {
1356
+ display: flex;
1357
+ }
1322
1358
  }
1323
1359
  `, N = {
1324
- AccountsSvgIcon: R,
1325
- AdminSvgIcon: D,
1326
- AlumniSvgIcon: _,
1327
- CamperSvgIcon: F,
1360
+ AccountsSvgIcon: D,
1361
+ AdminSvgIcon: _,
1362
+ AlumniSvgIcon: F,
1363
+ CamperSvgIcon: P,
1328
1364
  CommunicationSvgIcon: G,
1329
- CampInTouchSvgIcon: P,
1330
- FinancialSvgIcon: U,
1331
- HomeSvgIcon: Z,
1332
- MedicalSvgIcon: K,
1365
+ CampInTouchSvgIcon: z,
1366
+ FinancialSvgIcon: j,
1367
+ HomeSvgIcon: E,
1368
+ MedicalSvgIcon: U,
1333
1369
  ReportingSvgIcon: q,
1334
1370
  SchedulingSvgIcon: Y,
1335
1371
  StaffSvgIcon: Q,
@@ -1456,7 +1492,7 @@ let l = class extends w {
1456
1492
  }
1457
1493
  // Utility Methods
1458
1494
  get hamburgerIcon() {
1459
- return this.collapsed ? L : j;
1495
+ return this.collapsed ? L : K;
1460
1496
  }
1461
1497
  /**
1462
1498
  * The category the mega-menu flyout is open for, or `undefined` when none
@@ -1560,6 +1596,13 @@ let l = class extends w {
1560
1596
  }
1561
1597
  renderMobileMainMenu() {
1562
1598
  return n`
1599
+ <button
1600
+ class="menu-close"
1601
+ @click=${() => this.dismissMobileMenu(!0)}
1602
+ aria-label="Close menu"
1603
+ >
1604
+ ${Z("white")}
1605
+ </button>
1563
1606
  <nav class="mobile-categories-container" role="navigation" aria-label="Main categories">
1564
1607
  <ul class="mobile-categories-list" role="list">
1565
1608
  ${this.tree.map(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@campminder/components",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"