@icvdeveloper/common-module 1.4.13 → 2.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.
Files changed (109) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +10 -0
  4. package/dist/runtime/@types/components.d.ts +22 -0
  5. package/dist/runtime/@types/configVariables.d.ts +6 -0
  6. package/dist/runtime/analytics.d.ts +1 -1
  7. package/dist/runtime/assets/scss/index.css +0 -705
  8. package/dist/runtime/assets/svg/icon-minus.svg +6 -0
  9. package/dist/runtime/assets/svg/icon-video.svg +6 -0
  10. package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
  11. package/dist/runtime/components/affiliates/AffiliatePage.vue +337 -132
  12. package/dist/runtime/components/agenda/AgendaTabbed.vue +43 -34
  13. package/dist/runtime/components/agenda/components/Calendar.vue +8 -3
  14. package/dist/runtime/components/agenda/components/Favorite.vue +44 -0
  15. package/dist/runtime/components/agenda/components/PlayIcon.vue +1 -1
  16. package/dist/runtime/components/agenda/components/PresentationLink.vue +26 -15
  17. package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
  18. package/dist/runtime/components/chat/ChatCreateConversation.vue +205 -0
  19. package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +159 -0
  20. package/dist/runtime/components/chat/ChatHeader.vue +98 -0
  21. package/dist/runtime/components/chat/ChatMessage.vue +40 -0
  22. package/dist/runtime/components/chat/ChatShowConversation.vue +77 -0
  23. package/dist/runtime/components/chat/ChatWidget.vue +65 -0
  24. package/dist/runtime/components/chat/ChatWindow.vue +211 -0
  25. package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
  26. package/dist/runtime/components/chat/MessageInput.vue +30 -0
  27. package/dist/runtime/components/chat/SearchInput.vue +32 -0
  28. package/dist/runtime/components/core/Accordion.vue +1 -1
  29. package/dist/runtime/components/core/AttendeeList.vue +25 -16
  30. package/dist/runtime/components/core/CountdownTimer.vue +1 -1
  31. package/dist/runtime/components/core/Modal.vue +21 -13
  32. package/dist/runtime/components/core/ModalButton.vue +43 -0
  33. package/dist/runtime/components/core/Navbar.vue +3 -3
  34. package/dist/runtime/components/core/Navigation.vue +293 -0
  35. package/dist/runtime/components/core/SvgIcon.vue +31 -1
  36. package/dist/runtime/components/core/VButton.vue +41 -0
  37. package/dist/runtime/components/core/ZoomModal.vue +1 -1
  38. package/dist/runtime/components/events/ListEvents.vue +3 -4
  39. package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
  40. package/dist/runtime/components/forms/ErrorField.vue +11 -2
  41. package/dist/runtime/components/forms/RadioGroup.vue +50 -0
  42. package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
  43. package/dist/runtime/components/forms/SupportForm.vue +6 -6
  44. package/dist/runtime/components/layouts/Accordion.vue +2 -2
  45. package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +20 -4
  46. package/dist/runtime/components/media/ArchiveVideoPlayer.vue +14 -6
  47. package/dist/runtime/components/media/WebcastVideoPlayer.vue +1 -1
  48. package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +8 -8
  49. package/dist/runtime/components/media/components/CeCreditNotification.vue +2 -2
  50. package/dist/runtime/components/media/components/ContentArea.vue +51 -14
  51. package/dist/runtime/components/media/components/ContentTabs.vue +2 -2
  52. package/dist/runtime/components/media/components/DocumentsPanel.vue +2 -2
  53. package/dist/runtime/components/media/components/MediaContainer.vue +3 -7
  54. package/dist/runtime/components/media/components/PresentersPanel.vue +69 -50
  55. package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
  56. package/dist/runtime/components/media/components/SponsorsPanel.vue +3 -3
  57. package/dist/runtime/components/presenters/PresenterListing.vue +30 -20
  58. package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
  59. package/dist/runtime/components/presenters/Presenters.vue +139 -0
  60. package/dist/runtime/components/profile/Profile.vue +10 -6
  61. package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
  62. package/dist/runtime/components/profile/components/SidebarNavItem.vue +1 -1
  63. package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
  64. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
  65. package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +99 -0
  66. package/dist/runtime/components/registration/PaymentForm.vue +136 -0
  67. package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
  68. package/dist/runtime/components/registration/RegistrationGroupSelect.vue +142 -0
  69. package/dist/runtime/components/registration/StripePaymentForm.vue +141 -0
  70. package/dist/runtime/composables/useAgenda.d.ts +12 -0
  71. package/dist/runtime/composables/useAgenda.mjs +101 -10
  72. package/dist/runtime/composables/useAuth.mjs +1 -1
  73. package/dist/runtime/composables/useConferenceHelpers.d.ts +5 -1
  74. package/dist/runtime/composables/useConferenceHelpers.mjs +15 -1
  75. package/dist/runtime/composables/useEventHooks.d.ts +26 -0
  76. package/dist/runtime/composables/useEventHooks.mjs +21 -0
  77. package/dist/runtime/composables/useEvents.d.ts +17 -1
  78. package/dist/runtime/composables/useEvents.mjs +29 -1
  79. package/dist/runtime/composables/useLogin.mjs +7 -3
  80. package/dist/runtime/composables/usePresentation.mjs +1 -1
  81. package/dist/runtime/composables/usePusher.d.ts +4 -0
  82. package/dist/runtime/composables/usePusher.mjs +38 -26
  83. package/dist/runtime/composables/useStream.mjs +7 -1
  84. package/dist/runtime/enums/general.d.ts +4 -1
  85. package/dist/runtime/enums/general.mjs +4 -1
  86. package/dist/runtime/models/authUser.d.ts +1 -0
  87. package/dist/runtime/models/conference.d.ts +14 -0
  88. package/dist/runtime/models/conversation.d.ts +2 -4
  89. package/dist/runtime/models/globalConfig.d.ts +6 -2
  90. package/dist/runtime/models/group.d.ts +32 -2
  91. package/dist/runtime/models/icons.d.ts +7 -0
  92. package/dist/runtime/models/templateConfig.d.ts +6 -0
  93. package/dist/runtime/models/user.d.ts +1 -0
  94. package/dist/runtime/models/virtualPagesConfig.d.ts +335 -0
  95. package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
  96. package/dist/runtime/plugin.mjs +11 -1
  97. package/dist/runtime/store/affiliates.d.ts +3 -0
  98. package/dist/runtime/store/affiliates.mjs +38 -0
  99. package/dist/runtime/store/auth.mjs +6 -0
  100. package/dist/runtime/store/conferences.d.ts +3 -1
  101. package/dist/runtime/store/conferences.mjs +7 -2
  102. package/dist/runtime/store/conversations.d.ts +4040 -10
  103. package/dist/runtime/store/conversations.mjs +255 -22
  104. package/dist/runtime/store/modalPlayerConfig.d.ts +498 -0
  105. package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
  106. package/dist/runtime/store/templateConfigs.d.ts +3 -2
  107. package/dist/runtime/store/templateConfigs.mjs +2 -1
  108. package/package.json +5 -2
  109. package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
@@ -0,0 +1,293 @@
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, computed } from "vue";
3
+ import { storeToRefs } from "pinia";
4
+ import { useRoute } from "vue-router";
5
+ import { usePresenters } from '../../composables';
6
+ import { useNavigation } from "../../composables/useNavigation";
7
+ import { useAuth } from "../../composables";
8
+ import { useConferenceHelpers } from "../../composables";
9
+ import { useClassBinding } from "../../composables/useClassBinding";
10
+ import {
11
+ useTemplateConfigsStore,
12
+ useNavigationConfigStore,
13
+ useConferencesStore,
14
+ useAuthStore
15
+ } from "../../store";
16
+ import {
17
+ modalContentEventHook,
18
+ setIsPlayerVisibleEventHook,
19
+ setIsProfileVisibleEventHook,
20
+ setPlayerConferenceEventHook,
21
+ setPlayerPresentationEventHook
22
+ } from "../../composables/useEventHooks";
23
+ import type { Ref } from 'vue';
24
+ import type { PlayerPresentation } from "../../store/modalPlayerConfig";
25
+ import type { NavigationClassObj } from '../../@types/components';
26
+ import type { Conference } from "../../models/conference";
27
+ import type { ContentData } from "./VButton.vue";
28
+
29
+
30
+ type Props = {
31
+ classObject?: NavigationClassObj;
32
+ isVirtual?: boolean;
33
+ }
34
+
35
+ const props = withDefaults(defineProps<Props>(), {
36
+ classObject: () => {
37
+ return {
38
+ container: '',
39
+ headerToggleContainer: '',
40
+ toggleContainer: '',
41
+ toggleButton: '',
42
+ svgElement: '',
43
+ menuContainer: '',
44
+ navElement: '',
45
+ listElement: '',
46
+ liveEventLink: '',
47
+ eventOverviewLink: '',
48
+ agendaAnchorLink: '',
49
+ presentersAnchorLink: '',
50
+ navigationItemLink: '',
51
+ attendeeListListItem: '',
52
+ attendeeListLink: '',
53
+ logOutListItem: '',
54
+ logOutLink: '',
55
+ profileLink: '',
56
+ profileImg: '',
57
+ loginListItem: '',
58
+ }
59
+ },
60
+ isVirtual: false
61
+ });
62
+
63
+ const { classObject, isVirtual } = toRefs(props);
64
+ const { user, isLoggedIn } = storeToRefs(useAuthStore());
65
+ const { currentConference } = storeToRefs(useConferencesStore());
66
+
67
+ // data
68
+ const showAttendeeList = ref<boolean>(false);
69
+ const showMenu = ref<boolean>(false);
70
+ const profileImg = 'https://v3plus-production.s3.us-west-2.amazonaws.com/users/profile.png';
71
+
72
+ // methods
73
+ const { formatLink, isExternalLink } = useNavigation();
74
+ const { isLoginDisabled } = useAuth();
75
+ const { classBinding } = useClassBinding();
76
+
77
+ const { logout } = useAuthStore();
78
+ const { globalConfigValue } = useTemplateConfigsStore();
79
+ const { getEnabled } = useNavigationConfigStore();
80
+
81
+ const { getPresentersLabel } = usePresenters(currentConference as Ref<Conference>);
82
+
83
+ const route = useRoute();
84
+
85
+ const toggleMenu = () => {
86
+ showMenu.value = !showMenu.value;
87
+ };
88
+
89
+ // computed
90
+ const navigationItems = computed(() => {
91
+ return getEnabled();
92
+ });
93
+
94
+ const htmlHeader = computed(() => {
95
+ return globalConfigValue("html_header");
96
+ });
97
+
98
+ const isVideoEnabled = computed(() => {
99
+ return globalConfigValue("enable_video_chat");
100
+ });
101
+
102
+ const hideUserProfile = computed(() => {
103
+ return globalConfigValue("hide_user_profile");
104
+ });
105
+
106
+ // methods
107
+ const emitLoginModal = (): void => {
108
+ const modalContent: ContentData = {};
109
+ modalContent.contentType = 'registration';
110
+ modalContentEventHook.trigger(modalContent);
111
+ };
112
+
113
+ const emitStreamTest = (): void => {
114
+ const streamPres: PlayerPresentation = {
115
+ player_type: 'live',
116
+ data: {
117
+ id: 0,
118
+ access: true,
119
+ name: 'Stream Test',
120
+ description: 'This is a test stream. Please confirm you can see the video and can hear the audio clearly prior to the event.',
121
+ is_live: true,
122
+ video_url: '',
123
+ track: {
124
+ channel: 'stream-test'
125
+ }
126
+ }};
127
+ setPlayerPresentationEventHook.trigger(streamPres);
128
+ setPlayerConferenceEventHook.trigger(currentConference);
129
+ setIsPlayerVisibleEventHook.trigger(true);
130
+ };
131
+ </script>
132
+
133
+ <template>
134
+ <div
135
+ :class="
136
+ classBinding(
137
+ classObject,
138
+ 'container',
139
+ 'flex-1 md:items-end lg:flex flex-row justify-between max-w-screen-xl mx-auto bg-white'
140
+ )
141
+ "
142
+ >
143
+ <div :class="classBinding(classObject, 'headerToggleContainer', 'flex-1 flex flex-row justify-between')">
144
+ <!-- adjust -->
145
+ <span
146
+ v-if="htmlHeader && htmlHeader.length"
147
+ v-html="htmlHeader"
148
+ />
149
+ <div :class="classBinding(classObject, 'toggleContainer', 'md:hidden shrink items-center self-center p-2')">
150
+ <button
151
+ :class="classBinding(classObject, 'toggleButton', 'flex items-center px-3 py-2')"
152
+ @click="toggleMenu"
153
+ >
154
+ <svg
155
+ :class="classBinding(classObject, 'svgElement', 'fill-current h-6 w-6')"
156
+ viewBox="0 0 20 20"
157
+ xmlns="http://www.w3.org/2000/svg"
158
+ >
159
+ <title>Menu</title>
160
+ <path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" />
161
+ </svg>
162
+ </button>
163
+ </div>
164
+ </div>
165
+
166
+ <div :class="classBinding(classObject, 'menuContainer', 'flex-1 flex md:flex-initial')">
167
+ <nav
168
+ :class="[showMenu ? 'flex' : 'hidden', classBinding(classObject, 'navElement', 'header w-full md:block md:w-auto md:flex-1')]"
169
+ >
170
+ <ul
171
+ :class="classBinding(classObject, 'listElement', 'self-center mx-auto allsmallcaps text-xs leading-tight text-center md:max-h-min md:h-full md:float-right')"
172
+ >
173
+ <li
174
+ v-if="
175
+ currentConference &&
176
+ currentConference.agenda_enabled &&
177
+ route.name === 'events-id'
178
+ "
179
+ >
180
+ <a
181
+ href="#agenda"
182
+ :class="classBinding(classObject, 'agendaAnchorLink', 'nav-link')"
183
+ >Agenda</a>
184
+ </li>
185
+ <li v-if="currentConference && route.name === 'events-id'">
186
+ <a
187
+ href="#presenters"
188
+ :class="classBinding(classObject, 'presentersAnchorLink', 'nav-link')"
189
+ >
190
+ {{ getPresentersLabel(2) }}
191
+ </a>
192
+ </li>
193
+ <template
194
+ v-for="(item, index) in navigationItems"
195
+ :key="index"
196
+ >
197
+ <li>
198
+ <template v-if="!isExternalLink(item)">
199
+ <nuxt-link
200
+ v-if="isVirtual && item.slug == 'stream-test'"
201
+ :class="['cursor-pointer', classBinding(classObject, 'navigationItemLink', 'nav-link')]"
202
+ @click.enter="emitStreamTest"
203
+ >
204
+ {{ item.label }}
205
+ </nuxt-link>
206
+ <nuxt-link
207
+ v-else
208
+ :to="formatLink(item)"
209
+ exact
210
+ :class="classBinding(classObject, 'navigationItemLink', 'nav-link')"
211
+ @click.enter="toggleMenu"
212
+ >
213
+ {{ item.label }}
214
+ </nuxt-link>
215
+ </template>
216
+ <a
217
+ v-else
218
+ :href="formatLink(item)"
219
+ :target="isExternalLink(item) ? '_blank' : ''"
220
+ @click.enter="toggleMenu"
221
+ >
222
+ {{ item.label }}
223
+ </a>
224
+ </li>
225
+ </template>
226
+ <template v-if="!isLoginDisabled">
227
+ <template v-if="isLoggedIn">
228
+ <li :class="classBinding(classObject, 'logOutListItem', 'md:inline-block')">
229
+ <a
230
+ :class="classBinding(classObject, 'logOutLink', 'block md:inline-block w-auto md:w-full text-center cursor-pointer')"
231
+ @click="logout"
232
+ >Log Out</a>
233
+ </li>
234
+ <li
235
+ v-if="user != null && user.token && !hideUserProfile"
236
+ :class="classBinding(classObject, 'profileLink', 'inline-block')"
237
+ >
238
+ <a @click="setIsProfileVisibleEventHook.trigger(true)">
239
+ <img
240
+ :class="classBinding(classObject, 'profileImg', 'cursor-pointer rounded-full')"
241
+ height="30"
242
+ width="30"
243
+ :src="user?.profile_image as string ?? profileImg"
244
+ alt=""
245
+ >
246
+ </a>
247
+ </li>
248
+ </template>
249
+ <template v-if="!isLoggedIn">
250
+ <li :class="classBinding(classObject, 'loginListItem', 'block md:inline-block')">
251
+ <template v-if="!isVirtual">
252
+ <nuxt-link
253
+ to="/login"
254
+ exact
255
+ >
256
+ Log In
257
+ </nuxt-link>
258
+ </template>
259
+ <template v-else>
260
+ <a @click="emitLoginModal()" class="cursor-pointer">Log In</a>
261
+ </template>
262
+ </li>
263
+ </template>
264
+ </template>
265
+ </ul>
266
+ </nav>
267
+ </div>
268
+ </div>
269
+ </template>
270
+
271
+ <style>
272
+ nav.header ul li {
273
+ @apply border-2 border-transparent text-black cursor-pointer py-1 md:inline-block md:ml-8;
274
+ }
275
+
276
+ nav.header ul li:hover {
277
+ @apply border-b-black;
278
+ }
279
+
280
+ nav.header ul li a.nav-link,
281
+ nav.header ul li a.nav-link:hover {
282
+ @apply cursor-pointer text-black;
283
+ }
284
+
285
+ nav.header ul li.nav-li-color {
286
+ @apply text-red-500;
287
+ }
288
+
289
+ nav.header ul li.nav-li-color a.nav-link,
290
+ nav.header ul li.nav-li-color a.nav-link:hover {
291
+ @apply text-red-500;
292
+ }
293
+ </style>
@@ -8,12 +8,24 @@ import { useClassBinding } from "../../composables/useClassBinding";
8
8
  * Delay importing only the icon file that we need
9
9
  */
10
10
  const icons: Icons = {
11
+ bell: {
12
+ color: "#000",
13
+ component: defineAsyncComponent(
14
+ () => import("../../assets/svg/bell-icon.svg")
15
+ ),
16
+ },
11
17
  caret: {
12
18
  color: "#000",
13
19
  component: defineAsyncComponent(
14
20
  () => import("../../assets/svg/icon-caret.svg")
15
21
  ),
16
22
  },
23
+ chat: {
24
+ color: "#000",
25
+ component: defineAsyncComponent(
26
+ () => import("../../assets/svg/chat-icon.svg")
27
+ ),
28
+ },
17
29
  check: {
18
30
  color: "#000",
19
31
  component: defineAsyncComponent(
@@ -80,12 +92,24 @@ const icons: Icons = {
80
92
  () => import("../../assets/svg/icon-linkedin.svg")
81
93
  ),
82
94
  },
95
+ minus: {
96
+ color: "#000",
97
+ component: defineAsyncComponent(
98
+ () => import("../../assets/svg/icon-minus.svg")
99
+ ),
100
+ },
83
101
  newwindow: {
84
102
  color: "#333",
85
103
  component: defineAsyncComponent(
86
104
  () => import("../../assets/svg/icon-new-window.svg")
87
105
  ),
88
106
  },
107
+ notification: {
108
+ color: "#22c55e",
109
+ component: defineAsyncComponent(
110
+ () => import("../../assets/svg/notification-icon.svg")
111
+ ),
112
+ },
89
113
  offline: {
90
114
  color: "#696665",
91
115
  component: defineAsyncComponent(
@@ -116,6 +140,12 @@ const icons: Icons = {
116
140
  () => import("../../assets/svg/icon-twitter.svg")
117
141
  ),
118
142
  },
143
+ video: {
144
+ color: "#FFF",
145
+ component: defineAsyncComponent(
146
+ () => import("../../assets/svg/icon-video.svg")
147
+ ),
148
+ },
119
149
  website: {
120
150
  color: "#4286f4",
121
151
  component: defineAsyncComponent(
@@ -188,7 +218,7 @@ const iconComponent = computed(() => {
188
218
  </script>
189
219
 
190
220
  <template>
191
- <div :style="iconDims">
221
+ <div :style="iconDims" :class="classBinding(classObject, 'container', '')">
192
222
  <component
193
223
  :is="iconComponent"
194
224
  :style="iconStyle"
@@ -0,0 +1,41 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from "vue";
3
+ import { modalContentEventHook } from "../../composables/useEventHooks";
4
+ export type ContentData = {
5
+ contentObj?: {};
6
+ contentArray?: [];
7
+ contentString?: string;
8
+ contentType?: string;
9
+ modalSize?: number;
10
+ };
11
+
12
+ const props = withDefaults(defineProps<ContentData>(), {
13
+ contentObj: () => { return {} },
14
+ contentArray: () => { return [] },
15
+ contentString: '',
16
+ contentType: '',
17
+ modalSize: 50
18
+ });
19
+
20
+ const { contentObj, contentArray, contentString, contentType, modalSize } = toRefs(props);
21
+
22
+ // methods
23
+ const emitContent = (): void => {
24
+ // only emit if there's something to emit
25
+ if (contentType.value.length > 0) {
26
+ modalContentEventHook.trigger({
27
+ contentObj: contentObj.value,
28
+ contentArray: contentArray.value,
29
+ contentString: contentString.value,
30
+ contentType: contentType.value,
31
+ modalSize: modalSize.value,
32
+ });
33
+ }
34
+ };
35
+ </script>
36
+
37
+ <template>
38
+ <a @click="emitContent">
39
+ <slot />
40
+ </a>
41
+ </template>
@@ -30,7 +30,7 @@ const zoomUrl = computed(() => {
30
30
  <iframe :src="zoomUrl" class="w-full h-full"></iframe>
31
31
  </template>
32
32
  </CommonModal>
33
- <a class="no-underline" href="javascript:null" @click="showModal = true">
33
+ <a href="javascript:null" @click="showModal = true">
34
34
  <slot name="modal-link"></slot>
35
35
  </a>
36
36
  </span>
@@ -259,7 +259,7 @@ const showLoginButton = computed((): boolean => {
259
259
  >
260
260
  <!-- event details -->
261
261
  <div
262
- :class="classBinding(classObject, 'eventDetails', 'flex-grow')"
262
+ :class="classBinding(classObject, 'eventDetails', 'grow')"
263
263
  >
264
264
  <template v-if="showBrand && getBrand(conference.affiliates)">
265
265
  <a
@@ -274,7 +274,7 @@ const showLoginButton = computed((): boolean => {
274
274
  classBinding(
275
275
  classObject,
276
276
  'eventBrand',
277
- 'text-base font-bold leading-tight tracking-wide mb-3'
277
+ 'text-base font-bold leading-tight tracking-wider mb-3'
278
278
  )
279
279
  "
280
280
  >
@@ -290,7 +290,6 @@ const showLoginButton = computed((): boolean => {
290
290
  conference.id
291
291
  }`
292
292
  "
293
- class="no-underline"
294
293
  >
295
294
  <h2
296
295
  :class="
@@ -309,7 +308,7 @@ const showLoginButton = computed((): boolean => {
309
308
  classBinding(
310
309
  classObject,
311
310
  'eventDate',
312
- 'text-base leading-normal tracking-wide font-light uppercase md:text-md lg:text-lg'
311
+ 'text-base leading-normal tracking-wider font-light uppercase md:text-md lg:text-lg'
313
312
  )
314
313
  "
315
314
  >
@@ -0,0 +1,46 @@
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs } from 'vue';
3
+
4
+ type Props = {
5
+ options: any,
6
+ }
7
+
8
+ const props = defineProps<Props>();
9
+
10
+ const { options } = toRefs(props);
11
+
12
+ // data
13
+ // TODO - set type
14
+ const currentValueArray = ref<any[]>([]);
15
+
16
+ // emits
17
+ // TODO - set value type
18
+ const emit = defineEmits<{
19
+ (event: 'input', value: any): void;
20
+ }>();
21
+
22
+ // methods
23
+ const onChange = (): void => {
24
+ emit('input', currentValueArray.value);
25
+ };
26
+ </script>
27
+
28
+
29
+ <template>
30
+ <span>
31
+ <div
32
+ v-for="(option, index) in options"
33
+ :key="index"
34
+ class="mb-2 ml-4"
35
+ >
36
+ <p-check
37
+ v-model="currentValueArray"
38
+ :value="option.value"
39
+ @change="onChange"
40
+ >
41
+ {{ option.name }}
42
+ </p-check>
43
+ </div>
44
+ </span>
45
+ </template>
46
+
@@ -1,4 +1,5 @@
1
1
  <script lang="ts" setup>
2
+ import { toRefs } from 'vue';
2
3
  type Props = {
3
4
  errors: Array<string>;
4
5
  };
@@ -10,8 +11,16 @@ const { errors } = toRefs(props);
10
11
 
11
12
  <template>
12
13
  <div>
13
- <div v-if="errors" class="my-1 text-red-500">
14
- <div v-for="error in errors">{{ error }}</div>
14
+ <div
15
+ v-if="errors"
16
+ class="my-1 text-red-500"
17
+ >
18
+ <div
19
+ v-for="(error, index) in errors"
20
+ :key="index"
21
+ >
22
+ {{ error }}
23
+ </div>
15
24
  </div>
16
25
  </div>
17
26
  </template>
@@ -0,0 +1,50 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from 'vue';
3
+
4
+ type Props = {
5
+ value: any,
6
+ options: any
7
+ }
8
+
9
+ const props = defineProps<Props>();
10
+
11
+ const { value, options } = toRefs(props);
12
+
13
+ // emits
14
+ // TODO - set value type
15
+ const emit = defineEmits<{
16
+ (event: 'input', value: any): void;
17
+ }>();
18
+
19
+ // computed
20
+ // TODO - what's this for?
21
+ // what is <p-radio> ?
22
+ const guid = () => {
23
+ return crypto.getRandomValues(new Uint32Array(2)).join('-');
24
+ }
25
+
26
+ // methods
27
+ const onChange = (e: any): void => {
28
+ emit('input', e.target.value);
29
+ };
30
+ </script>
31
+
32
+
33
+ <template>
34
+ <span>
35
+ <div
36
+ v-for="(option, index) in options"
37
+ :key="index"
38
+ class="mb-2 ml-4"
39
+ >
40
+ <p-radio
41
+ v-model="value"
42
+ color="default"
43
+ :value="option.value"
44
+ @change="onChange"
45
+ >
46
+ {{ option.name }}
47
+ </p-radio>
48
+ </div>
49
+ </span>
50
+ </template>
@@ -0,0 +1,47 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from 'vue';
3
+
4
+ type Props = {
5
+ value: any,
6
+ options: any,
7
+ firstDisabled?: boolean
8
+ }
9
+
10
+ const props = withDefaults(defineProps<Props>(), {
11
+ firstDisabled: false
12
+ });
13
+
14
+ const { value, options, firstDisabled } = toRefs(props);
15
+
16
+ // emits
17
+ // TODO - set value type
18
+ const emit = defineEmits<{
19
+ (event: 'input', value: any): void;
20
+ }>();
21
+
22
+ // methods
23
+ const onInput = (e: any): void => {
24
+ emit('input', e.target.value);
25
+ };
26
+ </script>
27
+
28
+ <template>
29
+ <span>
30
+ <select
31
+ class="form-input"
32
+ :value="value"
33
+ @change="onInput"
34
+ >
35
+ <option
36
+ v-for="(option, index) in options"
37
+ :key="index"
38
+ :value="option.value"
39
+ :disabled="index==0 && firstDisabled"
40
+ >
41
+ {{ option.name}}
42
+ </option>
43
+ </select>
44
+ </span>
45
+ </template>
46
+
47
+
@@ -49,7 +49,7 @@ const acceptNumber = () => {
49
49
  </div>
50
50
 
51
51
  <div class="mb-3">
52
- <label class="block font-semibold text-grey-darkest mb-1">Name</label>
52
+ <label class="block font-semibold text-gray-800 mb-1">Name</label>
53
53
 
54
54
  <CommonTextInput
55
55
  v-model="form.name"
@@ -62,7 +62,7 @@ const acceptNumber = () => {
62
62
  </div>
63
63
 
64
64
  <div class="mb-3">
65
- <label class="block font-semibold text-grey-darkest mb-1">Email</label>
65
+ <label class="block font-semibold text-gray-800 mb-1">Email</label>
66
66
 
67
67
  <CommonTextInput
68
68
  v-model="form.email"
@@ -75,7 +75,7 @@ const acceptNumber = () => {
75
75
  </div>
76
76
 
77
77
  <div class="mb-3">
78
- <label class="block font-semibold text-grey-darkest mb-1">Phone</label>
78
+ <label class="block font-semibold text-gray-800 mb-1">Phone</label>
79
79
 
80
80
  <CommonTextInput
81
81
  v-model="form.phone"
@@ -87,7 +87,7 @@ const acceptNumber = () => {
87
87
  </div>
88
88
 
89
89
  <div class="mb-3">
90
- <label class="block font-semibold text-grey-darkest mb-1"
90
+ <label class="block font-semibold text-gray-800 mb-1"
91
91
  >Message</label
92
92
  >
93
93
 
@@ -104,8 +104,8 @@ const acceptNumber = () => {
104
104
 
105
105
  <!-- Submitted Message -->
106
106
  <div v-if="submitted" class="text-center my-12">
107
- <div class="text-2xl font-bold text-grey-darkest mb-2">Thank you.</div>
108
- <div class="text-lg font-semibold text-grey-darker">
107
+ <div class="text-2xl font-bold text-gray-800 mb-2">Thank you.</div>
108
+ <div class="text-lg font-semibold text-gray-700">
109
109
  Your message has been received.
110
110
  </div>
111
111
  </div>
@@ -43,7 +43,7 @@ const tabTitleValues = computed(() => {
43
43
  v-if="tabContent.type === 'url'"
44
44
  :href="tabContent.content"
45
45
  target="_blank"
46
- class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
46
+ class="py-3 block w-full font-extralight inline-flex items-center text-md my-1"
47
47
  :class="tabTitleValues.classes"
48
48
  >
49
49
  <span class="flex-initial">
@@ -53,7 +53,7 @@ const tabTitleValues = computed(() => {
53
53
  <a
54
54
  v-else
55
55
  href="#"
56
- class="py-3 block no-underline w-full font-hairline inline-flex items-center text-md my-1"
56
+ class="py-3 block w-full font-extralight inline-flex items-center text-md my-1"
57
57
  :class="tabTitleValues.classes"
58
58
  @click.prevent="active = !active"
59
59
  >