@energysage/es-ds-components 3.0.0-alpha.6 → 3.0.0-alpha.7

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.
Files changed (224) hide show
  1. package/.eslintignore +9 -0
  2. package/.eslintrc.json +3 -0
  3. package/.prettierrc.json +10 -0
  4. package/components/es-accordion-list.vue +112 -0
  5. package/components/es-accordion.vue +7 -0
  6. package/components/es-badge.vue +20 -0
  7. package/components/es-breadcrumbs.vue +43 -32
  8. package/components/es-button.vue +112 -0
  9. package/components/es-card.vue +64 -0
  10. package/components/es-carousel.vue +160 -0
  11. package/components/{b-col.vue → es-col.vue} +11 -11
  12. package/components/es-collapse.vue +38 -36
  13. package/components/es-cta-banner.vue +95 -0
  14. package/components/es-cta-card.vue +60 -0
  15. package/components/es-data-table-simple.vue +73 -0
  16. package/components/es-data-table.vue +126 -0
  17. package/components/es-error-page.vue +120 -0
  18. package/components/es-file-input.vue +331 -0
  19. package/components/es-file-preview-modal.vue +61 -0
  20. package/components/es-footer.vue +163 -0
  21. package/components/es-form-checkbox.vue +40 -0
  22. package/components/es-form-input.vue +130 -0
  23. package/components/es-form-msg.vue +81 -0
  24. package/components/es-form-radio-card.vue +57 -0
  25. package/components/es-form-radio-cards.vue +78 -0
  26. package/components/es-form-textarea.vue +124 -0
  27. package/components/es-form.vue +16 -0
  28. package/components/es-modal.vue +103 -0
  29. package/components/es-nav-bar-account-menu.vue +67 -0
  30. package/components/es-nav-bar-featured-article.vue +60 -0
  31. package/components/es-nav-bar-link.vue +27 -0
  32. package/components/es-nav-bar-product-menu.vue +215 -0
  33. package/components/es-nav-bar-top-level-menu.vue +193 -0
  34. package/components/es-nav-bar-topic-menu.vue +194 -0
  35. package/components/es-nav-bar.vue +396 -0
  36. package/components/es-pagination.vue +66 -0
  37. package/components/es-popover.vue +113 -0
  38. package/components/es-progress-circle.vue +81 -0
  39. package/components/es-progress.vue +36 -0
  40. package/components/es-radio-button-group.vue +53 -0
  41. package/components/es-radio-button.vue +50 -57
  42. package/components/es-rating.vue +120 -0
  43. package/components/es-reviews-io-card-carousel.vue +275 -0
  44. package/components/es-slider.vue +147 -0
  45. package/components/es-spinner.vue +22 -0
  46. package/components/es-support-card.vue +150 -0
  47. package/components/es-support.vue +66 -0
  48. package/components/es-tab.vue +7 -0
  49. package/components/es-tabs.vue +67 -0
  50. package/components/es-verification-code.vue +94 -0
  51. package/components/es-view-more.vue +63 -0
  52. package/components/es-zip-code-form.vue +204 -0
  53. package/components/icon/arrow-clockwise.vue +51 -0
  54. package/components/icon/arrow-counter-clockwise.vue +37 -0
  55. package/components/icon/arrow-cycle.vue +43 -0
  56. package/components/icon/arrow-left.vue +39 -0
  57. package/components/icon/arrow-right.vue +39 -0
  58. package/components/icon/arrow-up.vue +39 -0
  59. package/components/icon/arrow.vue +68 -0
  60. package/components/icon/bank.vue +38 -0
  61. package/components/icon/battery.vue +40 -0
  62. package/components/icon/bell.vue +42 -0
  63. package/components/icon/block.vue +46 -0
  64. package/components/icon/bolt.vue +38 -0
  65. package/components/icon/business.vue +42 -0
  66. package/components/icon/calculator.vue +37 -0
  67. package/components/icon/calendar.vue +46 -0
  68. package/components/icon/cart.vue +46 -0
  69. package/components/icon/chat-add.vue +44 -0
  70. package/components/icon/chat-approve.vue +42 -0
  71. package/components/icon/chat-bubble.vue +40 -0
  72. package/components/icon/chat-dots.vue +42 -0
  73. package/components/icon/check.vue +39 -0
  74. package/components/{icon-chevron-down.vue → icon/chevron-down.vue} +16 -16
  75. package/components/icon/chevron-horizontal.vue +39 -0
  76. package/components/icon/chevron-left.vue +39 -0
  77. package/components/{icon-chevron-right.vue → icon/chevron-right.vue} +16 -16
  78. package/components/icon/chevron-up.vue +39 -0
  79. package/components/icon/circle-alert.vue +46 -0
  80. package/components/icon/circle-check.vue +46 -0
  81. package/components/icon/circle-chevron-down.vue +47 -0
  82. package/components/icon/circle-chevron-left.vue +46 -0
  83. package/components/icon/circle-chevron-right.vue +46 -0
  84. package/components/icon/circle-chevron-up.vue +46 -0
  85. package/components/icon/circle-minus.vue +46 -0
  86. package/components/icon/circle-plus.vue +46 -0
  87. package/components/icon/circle-x.vue +46 -0
  88. package/components/icon/circle.vue +42 -0
  89. package/components/icon/clock.vue +46 -0
  90. package/components/icon/community-solar.vue +37 -0
  91. package/components/icon/companies.vue +43 -0
  92. package/components/icon/contact-us.vue +37 -0
  93. package/components/icon/copy.vue +45 -0
  94. package/components/icon/credit-card.vue +37 -0
  95. package/components/icon/document.vue +45 -0
  96. package/components/icon/electric-vehicle.vue +37 -0
  97. package/components/icon/electricity-circle.vue +39 -0
  98. package/components/icon/envelope.vue +45 -0
  99. package/components/icon/es-leaf.vue +39 -0
  100. package/components/icon/eye.vue +41 -0
  101. package/components/icon/facebook.vue +41 -0
  102. package/components/icon/file-doc.vue +72 -0
  103. package/components/icon/file-docx.vue +72 -0
  104. package/components/icon/file-pdf.vue +72 -0
  105. package/components/icon/flag.vue +37 -0
  106. package/components/icon/folder.vue +41 -0
  107. package/components/icon/gear.vue +37 -0
  108. package/components/icon/gift.vue +37 -0
  109. package/components/icon/hamburger.vue +38 -0
  110. package/components/icon/heart.vue +39 -0
  111. package/components/icon/heat-pump.vue +41 -0
  112. package/components/icon/image.vue +45 -0
  113. package/components/icon/info-blog-post.vue +47 -0
  114. package/components/icon/info.vue +45 -0
  115. package/components/icon/instagram.vue +49 -0
  116. package/components/icon/light-bulb.vue +36 -0
  117. package/components/icon/link-out.vue +38 -0
  118. package/components/icon/linkedin.vue +41 -0
  119. package/components/icon/location.vue +45 -0
  120. package/components/icon/lock-off.vue +45 -0
  121. package/components/icon/lock-on.vue +48 -0
  122. package/components/icon/marketplace.vue +43 -0
  123. package/components/icon/minus.vue +38 -0
  124. package/components/icon/money-bag.vue +37 -0
  125. package/components/icon/money.vue +35 -0
  126. package/components/icon/open-envelope.vue +45 -0
  127. package/components/icon/paper.vue +45 -0
  128. package/components/icon/payback.vue +37 -0
  129. package/components/icon/pencil.vue +45 -0
  130. package/components/icon/person-add.vue +41 -0
  131. package/components/icon/person-check.vue +41 -0
  132. package/components/icon/person-cross.vue +41 -0
  133. package/components/icon/person.vue +41 -0
  134. package/components/icon/phone.vue +41 -0
  135. package/components/icon/play.vue +41 -0
  136. package/components/icon/plus.vue +38 -0
  137. package/components/icon/roof.vue +37 -0
  138. package/components/icon/rooftop-solar.vue +37 -0
  139. package/components/icon/saving.vue +37 -0
  140. package/components/icon/search.vue +43 -0
  141. package/components/icon/settings-horizontal.vue +57 -0
  142. package/components/icon/settings-vertical.vue +57 -0
  143. package/components/icon/shield-with-check.vue +38 -0
  144. package/components/icon/shield.vue +41 -0
  145. package/components/icon/shopping-bag.vue +39 -0
  146. package/components/icon/solar.vue +37 -0
  147. package/components/icon/sound-down.vue +45 -0
  148. package/components/icon/sound-off.vue +41 -0
  149. package/components/icon/sound-on.vue +41 -0
  150. package/components/icon/sound-up.vue +41 -0
  151. package/components/icon/star-empty.vue +38 -0
  152. package/components/icon/star-full.vue +36 -0
  153. package/components/icon/star-half.vue +55 -0
  154. package/components/icon/state-ak.vue +53 -0
  155. package/components/icon/state-al.vue +38 -0
  156. package/components/icon/state-ar.vue +38 -0
  157. package/components/icon/state-az.vue +38 -0
  158. package/components/icon/state-ca.vue +38 -0
  159. package/components/icon/state-co.vue +38 -0
  160. package/components/icon/state-ct.vue +38 -0
  161. package/components/icon/state-dc.vue +52 -0
  162. package/components/icon/state-de.vue +38 -0
  163. package/components/icon/state-fl.vue +38 -0
  164. package/components/icon/state-ga.vue +38 -0
  165. package/components/icon/state-hi.vue +59 -0
  166. package/components/icon/state-ia.vue +38 -0
  167. package/components/icon/state-id.vue +38 -0
  168. package/components/icon/state-il.vue +38 -0
  169. package/components/icon/state-in.vue +38 -0
  170. package/components/icon/state-ks.vue +38 -0
  171. package/components/icon/state-ky.vue +38 -0
  172. package/components/icon/state-la.vue +38 -0
  173. package/components/icon/state-ma.vue +38 -0
  174. package/components/icon/state-md.vue +39 -0
  175. package/components/icon/state-me.vue +38 -0
  176. package/components/icon/state-mi.vue +38 -0
  177. package/components/icon/state-mn.vue +38 -0
  178. package/components/icon/state-mo.vue +38 -0
  179. package/components/icon/state-ms.vue +38 -0
  180. package/components/icon/state-mt.vue +38 -0
  181. package/components/icon/state-nc.vue +38 -0
  182. package/components/icon/state-nd.vue +38 -0
  183. package/components/icon/state-ne.vue +38 -0
  184. package/components/icon/state-nh.vue +38 -0
  185. package/components/icon/state-nj.vue +37 -0
  186. package/components/icon/state-nm.vue +38 -0
  187. package/components/icon/state-nv.vue +38 -0
  188. package/components/icon/state-ny.vue +41 -0
  189. package/components/icon/state-oh.vue +38 -0
  190. package/components/icon/state-ok.vue +38 -0
  191. package/components/icon/state-or.vue +38 -0
  192. package/components/icon/state-pa.vue +38 -0
  193. package/components/icon/state-ri.vue +38 -0
  194. package/components/icon/state-sc.vue +38 -0
  195. package/components/icon/state-sd.vue +38 -0
  196. package/components/icon/state-tn.vue +38 -0
  197. package/components/icon/state-tx.vue +38 -0
  198. package/components/icon/state-ut.vue +38 -0
  199. package/components/icon/state-va.vue +38 -0
  200. package/components/icon/state-vt.vue +38 -0
  201. package/components/icon/state-wa.vue +38 -0
  202. package/components/icon/state-wi.vue +38 -0
  203. package/components/icon/state-wv.vue +38 -0
  204. package/components/icon/state-wy.vue +38 -0
  205. package/components/icon/thumbs-up.vue +39 -0
  206. package/components/icon/trash-can.vue +41 -0
  207. package/components/icon/tree.vue +37 -0
  208. package/components/icon/twitter.vue +43 -0
  209. package/components/icon/upload.vue +41 -0
  210. package/components/icon/verified.vue +40 -0
  211. package/components/icon/video-play.vue +41 -0
  212. package/components/icon/wifi.vue +38 -0
  213. package/components/icon/x.vue +38 -0
  214. package/components/icon/youtube.vue +45 -0
  215. package/composables/forms.ts +124 -0
  216. package/lib-utils/mime-type-finder.js +48 -0
  217. package/nuxt.config.ts +40 -9
  218. package/package.json +29 -5
  219. package/tsconfig.json +2 -2
  220. package/utils/get-es-footer-content.js +90 -0
  221. package/utils/get-es-nav-bar-account-content.js +55 -0
  222. package/utils/get-es-nav-bar-global-content.js +474 -0
  223. /package/components/{b-container.vue → es-container.vue} +0 -0
  224. /package/components/{b-row.vue → es-row.vue} +0 -0
@@ -0,0 +1,60 @@
1
+ <script lang="js">
2
+ export default {
3
+ name: 'EsNavBarFeaturedArticle',
4
+ props: {
5
+ eyebrow: {
6
+ type: String,
7
+ required: true,
8
+ },
9
+ link: {
10
+ type: String,
11
+ required: true,
12
+ },
13
+ newTab: {
14
+ type: Boolean,
15
+ default: false,
16
+ },
17
+ name: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ image500: {
22
+ type: String,
23
+ required: true,
24
+ },
25
+ imageAlt: {
26
+ type: String,
27
+ default: '',
28
+ },
29
+ },
30
+ computed: {
31
+ graphicId() {
32
+ return this.name.replace(/\s/g, '-').replace(/[^a-zA-Z]/g, '');
33
+ },
34
+ },
35
+ };
36
+ </script>
37
+
38
+ <template>
39
+ <div class="dropdown-cta-right">
40
+ <es-nav-bar-link
41
+ class="d-block cta-link text-gray-900 text-decoration-none"
42
+ :href="link"
43
+ :target="newTab ? '_blank' : null"
44
+ :title="name">
45
+ <nuxt-img
46
+ :id="graphicId"
47
+ class="featured-article-image mb-100 w-100 rounded"
48
+ :alt="imageAlt"
49
+ loading="lazy"
50
+ :src="image500" />
51
+ <div class="eyebrow mb-50 link-name">
52
+ {{ eyebrow }}
53
+ </div>
54
+
55
+ <p class="font-weight-bold link-subheading">
56
+ {{ name }}
57
+ </p>
58
+ </es-nav-bar-link>
59
+ </div>
60
+ </template>
@@ -0,0 +1,27 @@
1
+ <script setup>
2
+ // specific workaround for getting a reference to an auto-imported but not globally registered
3
+ // component like NuxtLink, so that it can be used in a <component :is=""> context.
4
+ // this resolves to an import statement, according to:
5
+ // https://github.com/nuxt/nuxt/issues/13659#issuecomment-1573568006
6
+ const NuxtLink = resolveComponent('NuxtLink');
7
+
8
+ const props = defineProps({
9
+ href: {
10
+ type: String,
11
+ default: '',
12
+ },
13
+ tag: {
14
+ type: String,
15
+ default: 'nuxt-link',
16
+ },
17
+ });
18
+ </script>
19
+
20
+ <template>
21
+ <component
22
+ :is="props.tag === 'nuxt-link' ? NuxtLink : props.tag"
23
+ :href="props.href"
24
+ v-bind="$attrs">
25
+ <slot />
26
+ </component>
27
+ </template>
@@ -0,0 +1,215 @@
1
+ <script lang="js">
2
+ export default {
3
+ name: 'EsNavBarProductMenu',
4
+ props: {
5
+ homeName: {
6
+ type: String,
7
+ required: true,
8
+ },
9
+ homeLink: {
10
+ type: String,
11
+ required: true,
12
+ },
13
+ closeButtonText: {
14
+ type: String,
15
+ required: true,
16
+ },
17
+ featuredArticle: {
18
+ type: Object,
19
+ default: () => ({}),
20
+ },
21
+ items: {
22
+ type: Array,
23
+ default: () => [],
24
+ },
25
+ link: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ mainMenuText: {
30
+ type: String,
31
+ required: true,
32
+ },
33
+ newTab: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ name: {
38
+ type: String,
39
+ required: true,
40
+ },
41
+ seeAllText: {
42
+ type: String,
43
+ required: true,
44
+ },
45
+ topics: {
46
+ type: Array,
47
+ default: () => [],
48
+ },
49
+ },
50
+ computed: {
51
+ checkboxId() {
52
+ return `productMenu-${this.name}`;
53
+ },
54
+ },
55
+ };
56
+ </script>
57
+
58
+ <template>
59
+ <div class="dropdown nav-item nav-item-border-mobile">
60
+ <!-- desktop product link / hover menu trigger -->
61
+ <es-nav-bar-link
62
+ class="product-menu-header-link dropdown-toggle d-none d-lg-block px-lg-100 px-xl-200 py-lg-0 text-decoration-none"
63
+ :href="link"
64
+ :target="newTab ? '_blank' : null"
65
+ aria-haspopup="true"
66
+ aria-expanded="false">
67
+ <span class="product-menu-header-text d-block position-relative pb-lg-50">
68
+ {{ name }}
69
+ </span>
70
+ </es-nav-bar-link>
71
+ <!-- mobile flyout menu trigger -->
72
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
73
+ <label
74
+ :for="checkboxId"
75
+ class="dropdown-label nav-link d-flex d-lg-none align-items-center justify-content-between w-100 h-100 px-100 font-weight-bold">
76
+ {{ name }}
77
+ <icon-chevron-right
78
+ class="expand-icon"
79
+ style="height: 24px" />
80
+ </label>
81
+ <input
82
+ :id="checkboxId"
83
+ :name="checkboxId"
84
+ type="checkbox"
85
+ class="menu-checkbox" />
86
+ <div class="menu">
87
+ <div class="menu-header d-flex d-lg-none">
88
+ <div class="col-3" />
89
+ <div class="col-6 align-self-center text-center py-100">
90
+ <div class="nav-es-logo-mobile align-items-center d-flex">
91
+ <slot name="logo" />
92
+ </div>
93
+ <span class="sr-only">
94
+ {{ homeName }}
95
+ </span>
96
+ </div>
97
+ <!-- closes the entire mobile nav menu -->
98
+ <div class="d-flex col-3 justify-content-end">
99
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
100
+ <label
101
+ for="data--main-menu"
102
+ class="mb-0">
103
+ <icon-x class="menu-toggle align-self-center" />
104
+ <span class="sr-only">
105
+ {{ closeButtonText }}
106
+ </span>
107
+ </label>
108
+ </div>
109
+ </div>
110
+ <!-- mobile+desktop flyout menu -->
111
+ <!-- TODO: does anything match this aria-labelledby id? -->
112
+ <ul
113
+ v-if="items && items.length"
114
+ class="product-menu-flyout dropdown-menu row border-0 mt-0 py-lg-100">
115
+ <!-- mobile subnav header -->
116
+ <li class="nav-link col-lg-12 d-lg-none mb-50">
117
+ <div class="col-2">
118
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
119
+ <label
120
+ :for="checkboxId"
121
+ class="menu-toggle nav-link align-items-center d-flex font-size-sm h-100 mb-0 px-0 text-uppercase w-100">
122
+ <icon-arrow-left
123
+ class="expand-icon"
124
+ style="height: 24px" />
125
+ </label>
126
+ </div>
127
+ <div class="col-8 align-self-center text-center py-100">
128
+ <!--
129
+ <es-nav-bar-link
130
+ class="font-weight-boldest text-gray-900"
131
+ :href="link">
132
+ {{ name }}
133
+ </es-nav-bar-link>
134
+ <span class="font-weight-boldest text-gray-900">{{ name }}</span>
135
+ -->
136
+ <span
137
+ class="nav-link justify-content-center align-items-center d-flex font-weight-boldest w-100 h-100"
138
+ >{{ name }}</span
139
+ >
140
+ </div>
141
+ <div class="col-2" />
142
+ </li>
143
+ <!-- subnav items -->
144
+ <li
145
+ v-for="item in items"
146
+ :key="item.name">
147
+ <es-nav-bar-link
148
+ class="dropdown-item nav-item nav-item-border-mobile nav-link align-items-center d-flex px-lg-100 py-lg-50 product-menu-link"
149
+ :class="{ 'font-weight-bold': item.emphasize }"
150
+ :href="item.link"
151
+ :target="item.newTab ? '_blank' : null">
152
+ {{ item.name }}
153
+ </es-nav-bar-link>
154
+ </li>
155
+ </ul>
156
+ <div
157
+ v-if="topics && topics.length"
158
+ class="product-menu-flyout product-menu-flyout--large dropdown-menu border-0 flex-wrap mt-0 p-lg-150">
159
+ <div class="nav-item d-lg-none mb-50">
160
+ <!-- mobile subnav header -->
161
+ <div class="col-2">
162
+ <!-- closes this menu level -->
163
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
164
+ <label
165
+ :for="checkboxId"
166
+ class="menu-toggle nav-link align-items-center d-flex font-size-sm h-100 mb-0 px-0 text-uppercase w-100">
167
+ <icon-arrow-left
168
+ class="expand-icon"
169
+ style="height: 24px" />
170
+ </label>
171
+ </div>
172
+ <div class="col-8 align-self-center text-center py-100">
173
+ <p
174
+ class="align-items-center d-flex d-lg-none font-weight-bold justify-content-between mb-0 text-decoration-none w-100">
175
+ <span
176
+ class="nav-link justify-content-center align-items-center d-flex font-weight-boldest w-100 h-100"
177
+ >{{ name }}</span
178
+ >
179
+ </p>
180
+ </div>
181
+ <div class="col-2" />
182
+ </div>
183
+ <es-row
184
+ tag="ul"
185
+ class="d-block d-lg-flex list-unstyled">
186
+ <es-nav-bar-topic-menu
187
+ v-for="topic in topics"
188
+ :key="topic.name"
189
+ class="col-lg-4 d-block"
190
+ :home-name="homeName"
191
+ :home-link="homeLink"
192
+ :close-button-text="closeButtonText"
193
+ :items="topic.subtopics"
194
+ :link="topic.link"
195
+ :new-tab="topic.newTab"
196
+ :name="topic.name"
197
+ :show-items-on-mobile="topic.showItemsOnMobile"
198
+ :sub-heading="topic.subHeading">
199
+ <template #logo>
200
+ <slot name="logo" />
201
+ </template>
202
+ </es-nav-bar-topic-menu>
203
+ <li class="nav-item col-lg-4 d-block h-auto my-100 my-lg-0">
204
+ <es-nav-bar-featured-article
205
+ :eyebrow="featuredArticle.eyebrow"
206
+ :link="featuredArticle.link"
207
+ :name="featuredArticle.name"
208
+ :image500="featuredArticle.image500"
209
+ :image-alt="featuredArticle.imageAlt" />
210
+ </li>
211
+ </es-row>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ </template>
@@ -0,0 +1,193 @@
1
+ <script lang="js">
2
+ export default {
3
+ name: 'EsNavBarTopLevelMenu',
4
+ props: {
5
+ homeName: {
6
+ type: String,
7
+ required: true,
8
+ },
9
+ homeLink: {
10
+ type: String,
11
+ required: true,
12
+ },
13
+ closeButtonText: {
14
+ type: String,
15
+ required: true,
16
+ },
17
+ featuredArticle: {
18
+ type: Object,
19
+ default: () => ({}),
20
+ },
21
+ icon: {
22
+ type: String,
23
+ default: '',
24
+ },
25
+ topics: {
26
+ type: Array,
27
+ default: () => [],
28
+ },
29
+ link: {
30
+ type: String,
31
+ default: '',
32
+ },
33
+ mainMenuText: {
34
+ type: String,
35
+ required: true,
36
+ },
37
+ newTab: {
38
+ type: Boolean,
39
+ default: false,
40
+ },
41
+ name: {
42
+ type: String,
43
+ required: true,
44
+ },
45
+ subHeading: {
46
+ type: String,
47
+ default: '',
48
+ },
49
+ },
50
+ computed: {
51
+ checkboxId() {
52
+ return `menu-${this.name}`;
53
+ },
54
+ },
55
+ };
56
+ </script>
57
+
58
+ <template>
59
+ <div
60
+ class="nav-item top-header mx-0"
61
+ :class="{ 'has-dropdown': !link }">
62
+ <div class="top-header-inner w-100">
63
+ <!-- desktop link and fly-out menu trigger -->
64
+ <es-nav-bar-link
65
+ class="nav-link d-none d-lg-block py-100 font-weight-bolder"
66
+ :class="{ 'dropdown-toggle': !link }"
67
+ :href="link || '#'"
68
+ :data-toggle="link ? undefined : 'dropdown'"
69
+ :aria-haspopup="link ? undefined : true"
70
+ :aria-expanded="link ? undefined : false"
71
+ :target="link && newTab ? '_blank' : undefined">
72
+ <div class="d-lg-flex align-items-center">
73
+ {{ name }}
74
+ </div>
75
+ </es-nav-bar-link>
76
+ <!-- mobile link and fly-out menu trigger -->
77
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
78
+ <component
79
+ :is="link ? 'es-nav-bar-link' : 'label'"
80
+ class="nav-link d-flex d-lg-none align-items-center w-100 h-100 px-0 py-lg-100 px-100 font-weight-bold justify-content-between"
81
+ :class="{ 'dropdown-label': !link }"
82
+ :for="link ? undefined : checkboxId"
83
+ :href="link || undefined"
84
+ :target="newTab ? '_blank' : undefined">
85
+ <div class="align-items-center d-flex">
86
+ {{ name }}
87
+ </div>
88
+ <icon-arrow-right
89
+ v-if="!link"
90
+ class="expand-icon"
91
+ style="height: 24px" />
92
+ </component>
93
+ <input
94
+ v-if="!link"
95
+ :id="checkboxId"
96
+ :name="checkboxId"
97
+ type="checkbox"
98
+ class="menu-checkbox" />
99
+ <!-- fly-out menu -->
100
+ <div
101
+ v-if="!link"
102
+ class="menu">
103
+ <!-- mobile menu header -->
104
+ <div class="menu-header">
105
+ <div class="col-3" />
106
+ <div class="col-6 align-self-center text-center py-100">
107
+ <div class="nav-es-logo-mobile align-items-center d-flex">
108
+ <slot name="logo" />
109
+ </div>
110
+ <span class="sr-only">
111
+ {{ homeName }}
112
+ </span>
113
+ </div>
114
+ <div class="d-flex col-3 justify-content-end">
115
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
116
+ <label
117
+ for="data--main-menu"
118
+ class="mb-0">
119
+ <icon-x class="menu-toggle align-self-center" />
120
+ <span class="sr-only">
121
+ {{ closeButtonText }}
122
+ </span>
123
+ </label>
124
+ </div>
125
+ </div>
126
+ <div class="dropdown-menu dropdown-menu-full-page">
127
+ <es-container class="dropdown-menu-primary justify-content-lg-center py-lg-100">
128
+ <es-row class="flex-grow-1 justify-content-lg-center">
129
+ <div
130
+ class="mb-3 mb-lg-0"
131
+ :class="{
132
+ 'col-lg-9': topics.length >= 3,
133
+ 'col-lg-9 col-xl-6 col-xxl-5': topics.length == 2,
134
+ 'col-lg-4': topics.length == 1,
135
+ }">
136
+ <ul class="dropdown-list row w-auto">
137
+ <!-- name of top-level menu (won't ever be a link) -->
138
+ <li class="nav-item col-lg-12 d-lg-none mb-50 topic-menu-back">
139
+ <div class="col-2">
140
+ <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->
141
+ <label
142
+ :for="checkboxId"
143
+ class="menu-toggle nav-link align-items-center d-flex font-size-sm h-100 mb-0 px-0 text-uppercase w-100">
144
+ <icon-arrow-left
145
+ class="expand-icon"
146
+ style="height: 24px" />
147
+ </label>
148
+ </div>
149
+ <div class="col-8 align-self-center text-center py-100">
150
+ <span
151
+ class="nav-link justify-content-center align-items-center d-flex font-weight-boldest w-100 h-100"
152
+ >{{ name }}</span
153
+ >
154
+ </div>
155
+ <div class="col-2" />
156
+ </li>
157
+ <es-nav-bar-topic-menu
158
+ v-for="topic in topics"
159
+ :key="topic.name"
160
+ :class="{
161
+ 'col-xl-4': topics.length >= 3,
162
+ 'col-lg-6': topics.length >= 2,
163
+ 'col-lg-12': topics.length == 1,
164
+ }"
165
+ :home-name="homeName"
166
+ :home-link="homeLink"
167
+ :close-button-text="closeButtonText"
168
+ :items="topic.subtopics"
169
+ :link="topic.link"
170
+ :new-tab="topic.newTab"
171
+ :name="topic.name">
172
+ <template #logo>
173
+ <slot name="logo" />
174
+ </template>
175
+ </es-nav-bar-topic-menu>
176
+ </ul>
177
+ </div>
178
+ <!-- article link with image within menu -->
179
+ <es-nav-bar-featured-article
180
+ class="col-lg-3"
181
+ :eyebrow="featuredArticle.linkName"
182
+ :link="featuredArticle.linkUrl"
183
+ :new-tab="featuredArticle.newTab"
184
+ :name="featuredArticle.lede"
185
+ :image500="featuredArticle.image500"
186
+ :image-alt="featuredArticle.imageAlt" />
187
+ </es-row>
188
+ </es-container>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </template>