@energysage/es-ds-components 3.0.0-alpha.8 → 3.0.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 +0 -3
- package/components/es-accordion-list.vue +29 -7
- package/components/es-breadcrumbs.vue +1 -1
- package/components/es-button.vue +13 -3
- package/components/es-carousel.vue +524 -69
- package/components/es-col.vue +5 -5
- package/components/es-collapse.vue +2 -2
- package/components/es-container.vue +10 -1
- package/components/es-cta-banner.vue +1 -1
- package/components/es-cta-card.vue +1 -1
- package/components/es-data-table-column.vue +20 -0
- package/components/es-data-table-simple.vue +1 -1
- package/components/es-data-table.vue +35 -86
- package/components/es-file-input.vue +8 -5
- package/components/es-footer.vue +33 -4
- package/components/es-modal.vue +1 -1
- package/components/es-nav-bar-account-menu.vue +4 -1
- package/components/es-nav-bar-featured-article.vue +1 -1
- package/components/es-nav-bar-link.vue +1 -1
- package/components/es-nav-bar-product-menu.vue +5 -1
- package/components/es-nav-bar-top-level-menu.vue +2 -1
- package/components/es-nav-bar-topic-menu.vue +4 -1
- package/components/es-nav-bar.vue +19 -4
- package/components/es-pagination.vue +1 -0
- package/components/es-reviews-io-card-carousel.vue +5 -1
- package/components/es-segmented-control.vue +237 -0
- package/components/es-tabs.vue +13 -3
- package/components/es-video.vue +4 -2
- package/components/es-view-more.vue +1 -0
- package/components/es-zip-code-form.vue +2 -2
- package/components/icon/arrow-clockwise.vue +1 -1
- package/components/icon/arrow-counter-clockwise.vue +1 -1
- package/components/icon/arrow-cycle.vue +1 -1
- package/components/icon/arrow-left.vue +1 -1
- package/components/icon/arrow-right.vue +1 -1
- package/components/icon/arrow-up.vue +1 -1
- package/components/icon/arrow.vue +1 -1
- package/components/icon/bank.vue +1 -1
- package/components/icon/bell.vue +1 -1
- package/components/icon/block.vue +1 -1
- package/components/icon/calculator.vue +1 -1
- package/components/icon/calendar.vue +1 -1
- package/components/icon/cart.vue +1 -1
- package/components/icon/ccpa-opt-out.vue +61 -0
- package/components/icon/chat-add.vue +1 -1
- package/components/icon/chat-approve.vue +1 -1
- package/components/icon/chat-bubble.vue +1 -1
- package/components/icon/chat-dots.vue +1 -1
- package/components/icon/check.vue +1 -1
- package/components/icon/chevron-down.vue +1 -1
- package/components/icon/chevron-horizontal.vue +1 -1
- package/components/icon/chevron-left.vue +1 -1
- package/components/icon/chevron-right.vue +1 -1
- package/components/icon/chevron-up.vue +1 -1
- package/components/icon/circle-alert.vue +1 -1
- package/components/icon/circle-check.vue +1 -1
- package/components/icon/circle-chevron-down.vue +1 -1
- package/components/icon/circle-chevron-left.vue +1 -1
- package/components/icon/circle-chevron-right.vue +1 -1
- package/components/icon/circle-chevron-up.vue +1 -1
- package/components/icon/circle-minus.vue +1 -1
- package/components/icon/circle-plus.vue +1 -1
- package/components/icon/circle-x.vue +1 -1
- package/components/icon/circle.vue +1 -1
- package/components/icon/clock.vue +1 -1
- package/components/icon/companies.vue +1 -1
- package/components/icon/contact-us.vue +1 -1
- package/components/icon/copy.vue +1 -1
- package/components/icon/credit-card.vue +1 -1
- package/components/icon/document.vue +1 -1
- package/components/icon/electricity-circle.vue +1 -1
- package/components/icon/envelope.vue +1 -1
- package/components/icon/es-leaf.vue +1 -1
- package/components/icon/eye.vue +1 -1
- package/components/icon/facebook.vue +1 -1
- package/components/icon/flag.vue +1 -1
- package/components/icon/folder.vue +1 -1
- package/components/icon/gift.vue +1 -1
- package/components/icon/hamburger.vue +1 -1
- package/components/icon/heart.vue +1 -1
- package/components/icon/image.vue +1 -1
- package/components/icon/info-blog-post.vue +1 -1
- package/components/icon/info.vue +1 -1
- package/components/icon/instagram.vue +1 -1
- package/components/icon/light-bulb.vue +1 -1
- package/components/icon/link-out.vue +1 -1
- package/components/icon/linkedin.vue +1 -1
- package/components/icon/location.vue +1 -1
- package/components/icon/lock-off.vue +1 -1
- package/components/icon/lock-on.vue +1 -1
- package/components/icon/marketplace.vue +1 -1
- package/components/icon/minus.vue +1 -1
- package/components/icon/open-envelope.vue +1 -1
- package/components/icon/paper.vue +1 -1
- package/components/icon/pencil.vue +1 -1
- package/components/icon/person-add.vue +1 -1
- package/components/icon/person-check.vue +1 -1
- package/components/icon/person-cross.vue +1 -1
- package/components/icon/person.vue +1 -1
- package/components/icon/phone.vue +1 -1
- package/components/icon/play.vue +1 -1
- package/components/icon/plus.vue +1 -1
- package/components/icon/settings-horizontal.vue +1 -1
- package/components/icon/settings-vertical.vue +1 -1
- package/components/icon/shield-with-check.vue +1 -1
- package/components/icon/shield.vue +1 -1
- package/components/icon/shopping-bag.vue +1 -1
- package/components/icon/sound-down.vue +1 -1
- package/components/icon/sound-off.vue +1 -1
- package/components/icon/sound-on.vue +1 -1
- package/components/icon/sound-up.vue +1 -1
- package/components/icon/star-empty.vue +1 -1
- package/components/icon/star-full.vue +1 -1
- package/components/icon/star-half.vue +1 -1
- package/components/icon/state-ak.vue +1 -1
- package/components/icon/state-al.vue +1 -1
- package/components/icon/state-ar.vue +1 -1
- package/components/icon/state-az.vue +1 -1
- package/components/icon/state-ca.vue +1 -1
- package/components/icon/state-co.vue +1 -1
- package/components/icon/state-ct.vue +1 -1
- package/components/icon/state-dc.vue +1 -1
- package/components/icon/state-de.vue +1 -1
- package/components/icon/state-fl.vue +1 -1
- package/components/icon/state-ga.vue +1 -1
- package/components/icon/state-hi.vue +1 -1
- package/components/icon/state-ia.vue +1 -1
- package/components/icon/state-id.vue +1 -1
- package/components/icon/state-il.vue +1 -1
- package/components/icon/state-in.vue +1 -1
- package/components/icon/state-ks.vue +1 -1
- package/components/icon/state-ky.vue +1 -1
- package/components/icon/state-la.vue +1 -1
- package/components/icon/state-ma.vue +1 -1
- package/components/icon/state-md.vue +1 -1
- package/components/icon/state-me.vue +1 -1
- package/components/icon/state-mi.vue +1 -1
- package/components/icon/state-mn.vue +1 -1
- package/components/icon/state-mo.vue +1 -1
- package/components/icon/state-ms.vue +1 -1
- package/components/icon/state-mt.vue +1 -1
- package/components/icon/state-nc.vue +1 -1
- package/components/icon/state-nd.vue +1 -1
- package/components/icon/state-ne.vue +1 -1
- package/components/icon/state-nh.vue +1 -1
- package/components/icon/state-nj.vue +1 -1
- package/components/icon/state-nm.vue +1 -1
- package/components/icon/state-nv.vue +1 -1
- package/components/icon/state-ny.vue +1 -1
- package/components/icon/state-oh.vue +1 -1
- package/components/icon/state-ok.vue +1 -1
- package/components/icon/state-or.vue +1 -1
- package/components/icon/state-pa.vue +1 -1
- package/components/icon/state-ri.vue +1 -1
- package/components/icon/state-sc.vue +1 -1
- package/components/icon/state-sd.vue +1 -1
- package/components/icon/state-tn.vue +1 -1
- package/components/icon/state-tx.vue +1 -1
- package/components/icon/state-ut.vue +1 -1
- package/components/icon/state-va.vue +1 -1
- package/components/icon/state-vt.vue +1 -1
- package/components/icon/state-wa.vue +1 -1
- package/components/icon/state-wi.vue +1 -1
- package/components/icon/state-wv.vue +1 -1
- package/components/icon/state-wy.vue +1 -1
- package/components/icon/thumbs-up.vue +1 -1
- package/components/icon/trash-can.vue +1 -1
- package/components/icon/twitter.vue +1 -1
- package/components/icon/verified.vue +1 -1
- package/components/icon/wifi.vue +1 -1
- package/components/icon/x.vue +1 -1
- package/components/icon/youtube.vue +1 -1
- package/composables/forms.ts +1 -1
- package/nuxt.config.ts +9 -0
- package/package.json +2 -1
- package/types/es-carousel.ts +12 -0
- package/types/index.ts +1 -0
- package/utils/forms.ts +120 -0
- package/utils/{get-es-footer-content.js → get-es-footer-content.ts} +1 -0
- package/{lib-utils/mime-type-finder.js → utils/mime-type-finder.ts} +2 -2
- package/utils/vuelidate-keys.ts +39 -0
- /package/utils/{get-es-nav-bar-account-content.js → get-es-nav-bar-account-content.ts} +0 -0
- /package/utils/{get-es-nav-bar-global-content.js → get-es-nav-bar-global-content.ts} +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import SelectButton from 'primevue/selectbutton';
|
|
3
|
+
|
|
4
|
+
interface SegmentedControlItem {
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
label: string;
|
|
11
|
+
options: SegmentedControlItem[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface ButtonDimensionsInterface {
|
|
15
|
+
options: Partial<CSSStyleDeclaration>[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
19
|
+
disabled: false,
|
|
20
|
+
});
|
|
21
|
+
const model = defineModel<number>();
|
|
22
|
+
const segmentedControlRef = useTemplateRef('segmentedControl');
|
|
23
|
+
let resizeObserver: ResizeObserver | null = null;
|
|
24
|
+
|
|
25
|
+
// needed to avoid Content Layout Shift (CLS)
|
|
26
|
+
// as the inkbar is positioned via left and width attributes which are not set until mount
|
|
27
|
+
// meaning the active state would be initially missing and then pop in on mount, causing CLS
|
|
28
|
+
const isMounted = ref(false);
|
|
29
|
+
|
|
30
|
+
const buttonDimensions: ButtonDimensionsInterface = reactive({
|
|
31
|
+
options: props.options?.length ? props.options.map(() => ({})) : [],
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const inkbarStyle: ComputedRef<Partial<CSSStyleDeclaration>> = computed(
|
|
35
|
+
() => buttonDimensions.options[model.value || 0],
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// assume the provided label is unique and convert to an id
|
|
39
|
+
// by lowercasing and replacing all whitespace with dashes
|
|
40
|
+
const labelId = computed(() => {
|
|
41
|
+
return props.label ? props.label.toLowerCase().replace(/\s/g, '-') : '';
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// return the left/width to use for the active state bubble, for each provided button
|
|
45
|
+
const getButtonDimensions = (buttons: HTMLCollection) => {
|
|
46
|
+
const result = [];
|
|
47
|
+
let runningLeftTotal = 0;
|
|
48
|
+
for (let i = 0; i < buttons.length; i += 1) {
|
|
49
|
+
const button = buttons[i] as unknown as HTMLElement;
|
|
50
|
+
result.push({
|
|
51
|
+
left: `${runningLeftTotal}px`,
|
|
52
|
+
width: `${button.offsetWidth}px`,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
runningLeftTotal += button.offsetWidth;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
onMounted(() => {
|
|
62
|
+
isMounted.value = true;
|
|
63
|
+
|
|
64
|
+
if (segmentedControlRef.value) {
|
|
65
|
+
// set the initial button dimensions
|
|
66
|
+
const buttons = segmentedControlRef.value.querySelectorAll(
|
|
67
|
+
'.es-segmented-control-button',
|
|
68
|
+
) as unknown as HTMLCollection;
|
|
69
|
+
buttonDimensions.options = getButtonDimensions(buttons);
|
|
70
|
+
|
|
71
|
+
// set up a resize observer for whenever the segmented control's button group changes width
|
|
72
|
+
// this will most commonly happen when changing between desktop and mobile breakpoints
|
|
73
|
+
// but could also happen if the label text of any options changes
|
|
74
|
+
resizeObserver = new ResizeObserver((groups) => {
|
|
75
|
+
groups.forEach((group) => {
|
|
76
|
+
const updatedButtons = group.target.children;
|
|
77
|
+
buttonDimensions.options = getButtonDimensions(updatedButtons);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// start the resize observer listening to the segmented control's button group
|
|
82
|
+
const group = segmentedControlRef.value.querySelector('.es-segmented-control-group');
|
|
83
|
+
if (group) {
|
|
84
|
+
resizeObserver.observe(group);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
onUnmounted(() => {
|
|
90
|
+
if (resizeObserver) {
|
|
91
|
+
resizeObserver.disconnect();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<template>
|
|
97
|
+
<div
|
|
98
|
+
v-if="options?.length"
|
|
99
|
+
ref="segmentedControl"
|
|
100
|
+
:aria-hidden="props.disabled || undefined"
|
|
101
|
+
class="es-segmented-control d-flex position-relative"
|
|
102
|
+
:class="{
|
|
103
|
+
disabled: props.disabled,
|
|
104
|
+
'before-mount': !isMounted,
|
|
105
|
+
}">
|
|
106
|
+
<label
|
|
107
|
+
:id="labelId"
|
|
108
|
+
class="sr-only">
|
|
109
|
+
{{ label }}
|
|
110
|
+
</label>
|
|
111
|
+
<span
|
|
112
|
+
class="es-segmented-control-inkbar rounded-lg position-absolute"
|
|
113
|
+
:data-left="buttonDimensions.options[model || 0]?.left || 0"
|
|
114
|
+
:style="inkbarStyle as any" />
|
|
115
|
+
<select-button
|
|
116
|
+
v-model="model"
|
|
117
|
+
:allow-empty="false"
|
|
118
|
+
:aria-labelledby="labelId"
|
|
119
|
+
data-key="label"
|
|
120
|
+
:disabled="props.disabled"
|
|
121
|
+
:option-label="(option) => option.label"
|
|
122
|
+
:option-value="(option) => props.options.findIndex((innerOption) => option.label === innerOption.label)"
|
|
123
|
+
:options="props.options"
|
|
124
|
+
:pt="{
|
|
125
|
+
root: 'es-segmented-control-group bg-gray-100 d-flex rounded-lg',
|
|
126
|
+
button: 'es-segmented-control-button font-size-sm font-weight-bold position-relative px-200 px-lg-300 rounded-lg',
|
|
127
|
+
label: 'es-segmented-control-label position-relative',
|
|
128
|
+
}"
|
|
129
|
+
:unselectable="false" />
|
|
130
|
+
</div>
|
|
131
|
+
</template>
|
|
132
|
+
|
|
133
|
+
<style lang="scss" scoped>
|
|
134
|
+
@use '@energysage/es-ds-styles/scss/variables' as variables;
|
|
135
|
+
|
|
136
|
+
/* avoid Content Layout Shift (CLS) */
|
|
137
|
+
.es-segmented-control.before-mount {
|
|
138
|
+
.es-segmented-control-inkbar {
|
|
139
|
+
/* prevent inkbar with left and width of zero from showing up between first paint and mount */
|
|
140
|
+
opacity: 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
:deep(.es-segmented-control-button) {
|
|
144
|
+
position: relative;
|
|
145
|
+
|
|
146
|
+
/* temporarily replicate the inkbar's active state until mount */
|
|
147
|
+
&[data-p-highlight='true'] {
|
|
148
|
+
&::before {
|
|
149
|
+
border-radius: variables.$border-radius-lg;
|
|
150
|
+
content: '';
|
|
151
|
+
left: 0;
|
|
152
|
+
position: absolute;
|
|
153
|
+
width: 100%;
|
|
154
|
+
z-index: 3;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* active state bubble */
|
|
161
|
+
.es-segmented-control-inkbar,
|
|
162
|
+
.es-segmented-control.before-mount :deep(.es-segmented-control-button[data-p-highlight='true']::before) {
|
|
163
|
+
/* using style for bg instead of bg-white class so it can be overridden for disabled state */
|
|
164
|
+
background-color: variables.$white;
|
|
165
|
+
border: 2px solid variables.$warm-orange;
|
|
166
|
+
bottom: 2px;
|
|
167
|
+
top: 2px;
|
|
168
|
+
/* bring it ~2px away from each side to match the top/bottom */
|
|
169
|
+
transform: scaleX(0.98);
|
|
170
|
+
|
|
171
|
+
@media not (prefers-reduced-motion) {
|
|
172
|
+
transition:
|
|
173
|
+
left 250ms cubic-bezier(0.35, 0, 0.25, 1),
|
|
174
|
+
width 250ms cubic-bezier(0.35, 0, 0.25, 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* each individual option */
|
|
179
|
+
:deep(.es-segmented-control-button) {
|
|
180
|
+
color: variables.$gray-700;
|
|
181
|
+
cursor: pointer;
|
|
182
|
+
/*
|
|
183
|
+
need a non-standard padding to cause a specific height that matches
|
|
184
|
+
better with our "lg" 14px border radius to get the rounded pill look
|
|
185
|
+
*/
|
|
186
|
+
padding-bottom: 6px;
|
|
187
|
+
padding-top: 6px;
|
|
188
|
+
/* don't transition all properties, otherwise responsive bubble width updates will be delayed */
|
|
189
|
+
transition: color 250ms ease-in-out;
|
|
190
|
+
/* prevent text from highlighting when you click a bunch of times */
|
|
191
|
+
user-select: none;
|
|
192
|
+
white-space: nowrap;
|
|
193
|
+
z-index: 4;
|
|
194
|
+
|
|
195
|
+
&:hover {
|
|
196
|
+
color: variables.$gray-900;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
&:focus-visible {
|
|
200
|
+
box-shadow: 0 0 0 3px variables.$warm-orange inset;
|
|
201
|
+
outline: none;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/* bring the label above the active state bubble */
|
|
206
|
+
:deep(.es-segmented-control-label) {
|
|
207
|
+
z-index: 4;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* disabled state */
|
|
211
|
+
.es-segmented-control.disabled,
|
|
212
|
+
.es-segmented-control.before-mount.disabled {
|
|
213
|
+
cursor: default;
|
|
214
|
+
pointer-events: none;
|
|
215
|
+
user-select: none;
|
|
216
|
+
|
|
217
|
+
/* active bubble */
|
|
218
|
+
.es-segmented-control-inkbar,
|
|
219
|
+
:deep(.es-segmented-control-button[data-p-highlight='true']::before) {
|
|
220
|
+
background-color: variables.$gray-200;
|
|
221
|
+
border-color: variables.$gray-300;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* text inside active bubble */
|
|
225
|
+
:deep(.es-segmented-control-button[data-p-highlight='true']) {
|
|
226
|
+
&,
|
|
227
|
+
&:hover {
|
|
228
|
+
color: variables.$gray-500;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* all other items */
|
|
233
|
+
:deep(.es-segmented-control-button) {
|
|
234
|
+
color: variables.$gray-500;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
</style>
|
package/components/es-tabs.vue
CHANGED
|
@@ -6,20 +6,30 @@ import TabView from 'primevue/tabview';
|
|
|
6
6
|
const model = defineModel<number>();
|
|
7
7
|
|
|
8
8
|
// get the list of elements provided as children to the default slot
|
|
9
|
-
const
|
|
9
|
+
const initialChildren = useSlots().default?.() || [];
|
|
10
|
+
const panels: any[] = [];
|
|
11
|
+
initialChildren.forEach((child) => {
|
|
12
|
+
// unless this has a v-for element and we instead need to access its children
|
|
13
|
+
if (typeof child.type === 'symbol' && Array.isArray(child.children)) {
|
|
14
|
+
panels.push(...child.children);
|
|
15
|
+
} else {
|
|
16
|
+
panels.push(child);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
10
19
|
|
|
11
20
|
// keep track of the active tab index
|
|
12
21
|
// - from above, if v-model is used
|
|
13
22
|
// - from below, if the tab component receives a click
|
|
14
|
-
const activeIndex = ref(model.value || 0);
|
|
23
|
+
const activeIndex: Ref<number> = ref(model.value || 0);
|
|
15
24
|
|
|
16
25
|
// watch the v-model for changes and update the active index if it does change
|
|
17
26
|
watch(model, (newVal) => {
|
|
27
|
+
// @ts-expect-error I don't know why
|
|
18
28
|
activeIndex.value = newVal;
|
|
19
29
|
});
|
|
20
30
|
|
|
21
31
|
// called from the TabView when the user clicks a tab to make it active
|
|
22
|
-
const updateActiveIndex = (index) => {
|
|
32
|
+
const updateActiveIndex = (index: number) => {
|
|
23
33
|
model.value = index;
|
|
24
34
|
};
|
|
25
35
|
</script>
|
package/components/es-video.vue
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
// Props
|
|
3
3
|
interface IProps {
|
|
4
4
|
altText: string;
|
|
5
|
-
coverImageUrl
|
|
5
|
+
coverImageUrl?: string;
|
|
6
6
|
embedUrl: string;
|
|
7
7
|
}
|
|
8
|
-
const props = defineProps<IProps>()
|
|
8
|
+
const props = withDefaults(defineProps<IProps>(), {
|
|
9
|
+
coverImageUrl: '',
|
|
10
|
+
});
|
|
9
11
|
const showVideo = ref(false);
|
|
10
12
|
|
|
11
13
|
// Methods
|
|
@@ -85,13 +85,13 @@ const rules = {
|
|
|
85
85
|
|
|
86
86
|
const { v$, validateState } = useEsForms(rules, state);
|
|
87
87
|
|
|
88
|
-
const ctaForm =
|
|
88
|
+
const ctaForm = useTemplateRef<HTMLFormElement>('ctaForm');
|
|
89
89
|
|
|
90
90
|
const handleSubmit = () => {
|
|
91
91
|
if (v$.value.$invalid) {
|
|
92
92
|
v$.value.$touch();
|
|
93
93
|
} else {
|
|
94
|
-
ctaForm.value
|
|
94
|
+
ctaForm.value?.submit();
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
97
|
</script>
|
package/components/icon/bank.vue
CHANGED
package/components/icon/bell.vue
CHANGED
package/components/icon/cart.vue
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export default {
|
|
3
|
+
name: 'IconCcpaOptOut',
|
|
4
|
+
props: {
|
|
5
|
+
/**
|
|
6
|
+
* Width
|
|
7
|
+
*/
|
|
8
|
+
width: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: '30px',
|
|
11
|
+
required: false,
|
|
12
|
+
},
|
|
13
|
+
/**
|
|
14
|
+
* Height
|
|
15
|
+
*/
|
|
16
|
+
height: {
|
|
17
|
+
type: String,
|
|
18
|
+
default: '14px',
|
|
19
|
+
required: false,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<svg
|
|
27
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
28
|
+
xml:space="preserve"
|
|
29
|
+
id="Layer_1"
|
|
30
|
+
:style="{
|
|
31
|
+
height: height,
|
|
32
|
+
width: width,
|
|
33
|
+
}"
|
|
34
|
+
aria-label="California Consumer Privacy Act (CCPA) Opt-Out Icon"
|
|
35
|
+
role="img"
|
|
36
|
+
x="0"
|
|
37
|
+
y="0"
|
|
38
|
+
version="1.1"
|
|
39
|
+
viewBox="0 0 30 14">
|
|
40
|
+
<g
|
|
41
|
+
id="Final-Copy-2"
|
|
42
|
+
style="display: inline">
|
|
43
|
+
<path
|
|
44
|
+
class="st0"
|
|
45
|
+
d="M7.4,12.8h6.8l3.1-11.6H7.4C4.2,1.2,1.6,3.8,1.6,7S4.2,12.8,7.4,12.8z"
|
|
46
|
+
style="fill: #fff" />
|
|
47
|
+
<path
|
|
48
|
+
id="path2"
|
|
49
|
+
d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8Z"
|
|
50
|
+
style="clip-rule: evenodd; fill: #06f; fill-rule: evenodd" />
|
|
51
|
+
<path
|
|
52
|
+
id="x"
|
|
53
|
+
d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0Z"
|
|
54
|
+
style="fill: #fff" />
|
|
55
|
+
<path
|
|
56
|
+
id="y"
|
|
57
|
+
d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z"
|
|
58
|
+
style="fill: #06f" />
|
|
59
|
+
</g>
|
|
60
|
+
</svg>
|
|
61
|
+
</template>
|