henry-search 1.0.13 → 1.0.15

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 (39) hide show
  1. package/dist/HenrySearch.css +1 -1
  2. package/dist/HenrySearch.js +6960 -6963
  3. package/dist/HenrySearch.umd.cjs +79 -79
  4. package/package.json +7 -1
  5. package/src/components/AudioLinks.vue +6 -6
  6. package/src/components/EventLinks.vue +12 -12
  7. package/src/components/Search.vue +88 -86
  8. package/src/components/SearchDetail.vue +35 -33
  9. package/src/components/SearchTab.vue +78 -86
  10. package/src/main.js +1 -0
  11. package/src/styles/atoms/audioLinks/index.scss +46 -0
  12. package/src/styles/atoms/breadCrumb/index.scss +12 -0
  13. package/src/styles/atoms/checkBoxes/index.scss +34 -0
  14. package/src/styles/atoms/clearRefinements/index.scss +2 -0
  15. package/src/styles/atoms/eventLinks/index.scss +22 -0
  16. package/src/styles/atoms/index.scss +7 -0
  17. package/src/styles/atoms/label/index.scss +6 -0
  18. package/src/styles/atoms/menuSelect/index.scss +28 -0
  19. package/src/styles/config/index.scss +180 -0
  20. package/src/styles/index.scss +8 -0
  21. package/src/styles/molecules/accordion/accordion.html +97 -0
  22. package/src/styles/molecules/accordion/index.scss +76 -0
  23. package/src/styles/molecules/currentRefinements/index.scss +22 -0
  24. package/src/styles/molecules/dateRange/index.scss +184 -0
  25. package/src/styles/molecules/headerLinks/index.scss +40 -0
  26. package/src/styles/molecules/index.scss +7 -0
  27. package/src/styles/molecules/pagination/index.scss +44 -0
  28. package/src/styles/molecules/resultActions/index.scss +42 -0
  29. package/src/styles/molecules/searchBox/index.scss +69 -0
  30. package/src/styles/organisms/activeFilters/index.scss +49 -0
  31. package/src/styles/organisms/filters/index.scss +241 -0
  32. package/src/styles/organisms/index.scss +4 -0
  33. package/src/styles/organisms/performanceGrid/index.scss +121 -0
  34. package/src/styles/organisms/resultsGrid/index.scss +157 -0
  35. package/src/styles/templates/eventsSearch/index.scss +381 -0
  36. package/src/styles/templates/history/index.scss +32 -0
  37. package/src/styles/templates/index.scss +3 -0
  38. package/src/styles/templates/performance/index.scss +74 -0
  39. package/src/components/HelloWorld.vue +0 -43
@@ -50,7 +50,7 @@ onMounted(() => {
50
50
  })
51
51
 
52
52
  document.addEventListener("click", function(){
53
- document.querySelectorAll(".audioLinkBox").forEach((el) => {
53
+ document.querySelectorAll(".audioLinks__box").forEach((el) => {
54
54
  el.classList.remove("-open")
55
55
  })
56
56
  })
@@ -95,13 +95,15 @@ const formatLocation = (venue, location) => {
95
95
  const formatWorkAttribute = (works, attributeName) => {
96
96
  let returnString = ""
97
97
  const attributeArray = []
98
- works.forEach((w) => {
99
- w[attributeName].forEach((attr) => {
100
- if (!attributeArray.includes(attr)) {
101
- attributeArray.push(attr)
102
- }
98
+ if (works) {
99
+ works.forEach((w) => {
100
+ w[attributeName].forEach((attr) => {
101
+ if (!attributeArray.includes(attr)) {
102
+ attributeArray.push(attr)
103
+ }
104
+ })
103
105
  })
104
- })
106
+ }
105
107
  attributeArray.forEach((attr, index) => {
106
108
  returnString += `<a href="${ createURL(`works.${ attributeName }`, attr) }">${ attr }${ index < attributeArray.length - 1 ? ";&nbsp;" : ""}</a>`
107
109
  })
@@ -118,13 +120,13 @@ const createURL = (facet, value) => {
118
120
 
119
121
  <template>
120
122
  <template v-if="performance">
121
- <div class="performance__breadCrumb"><a :href="searchHistory[searchHistory.length - 1].link">Back to Search Results</a></div>
123
+ <div class="breadCrumb"><a :href="searchHistory && searchHistory.length ? searchHistory[searchHistory.length - 1].link : '/'">Back to Search Results</a></div>
122
124
  <div class="performance__details">
123
125
  <div class="performance__header">
124
126
  <h1>{{ formatDate(performance.performance_date) }} Performance Detail</h1>
125
127
  <h2>{{ formatTime(performance.performance_date) }} | {{ formatLocation(performance.venue, performance.location) }}</h2>
126
128
  </div>
127
- <div class="performance__headerLinks">
129
+ <div class="headerLinks">
128
130
  <event-links :detail="true" :item="performance" />
129
131
  </div>
130
132
  <div class="performance__headerData">
@@ -153,59 +155,59 @@ const createURL = (facet, value) => {
153
155
  <div><span class="performance__dataTitle">Notes:</span><br/>{{ performance.notes ?? '---' }}</div>
154
156
  </div>
155
157
  <h4>Program</h4>
156
- <div class="performance__grid">
158
+ <div class="performanceGrid">
157
159
  <template v-for="work, index in performance.works">
158
160
  <template v-if="index == 0">
159
- <div class="performance__cell -header -first">Composer</div>
160
- <div class="performance__cell -header">Works</div>
161
- <div class="performance__cell -header">Additional Creator</div>
162
- <div class="performance__cell -header">Artist</div>
163
- <div class="performance__cell -header">Role</div>
161
+ <div class="performanceGrid__cell -header -first">Composer</div>
162
+ <div class="performanceGrid__cell -header">Works</div>
163
+ <div class="performanceGrid__cell -header">Additional Creator</div>
164
+ <div class="performanceGrid__cell -header">Artist</div>
165
+ <div class="performanceGrid__cell -header">Role</div>
164
166
  </template>
165
167
 
166
- <div :class="`performance__cell -first -composers
168
+ <div :class="`performanceGrid__cell -first -composers
167
169
  ${ index == 0 ? '-top' : ''}
168
170
  ${ index % 2 == 0 ? '-even' : '-odd' }
169
171
  ${ index + 1 == performance.works.length ? '-last' : ''}`">
170
- <span class="mobileHeader">Composer</span>
172
+ <span class="performanceGrid__mobileHeader">Composer</span>
171
173
  <span v-for="composer, index in work.composers">
172
174
  <a :href="createURL('works.composers', composer)">{{ composer + (index < work.composers.length - 1 ? ",&nbsp;" : "") }}</a>
173
175
  </span>
174
176
  </div>
175
- <div :class="`performance__cell ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
176
- <span class="mobileHeader">Work</span>
177
- <div class="workItem">
178
- <span class="infoItem">
177
+ <div :class="`performanceGrid__cell ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
178
+ <span class="performanceGrid__mobileHeader">Work</span>
179
+ <div class="performanceGrid__workItem">
180
+ <span class="performanceGrid__infoItem">
179
181
  <a :href="createURL('works.title', work.title)">{{ work.title }}</a>
180
182
  <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" v-if="work.has_recording">
181
183
  <path d="M9.81086 5L6.92983 7.30483H4.625V10.7621H6.92983L9.81086 13.0669V5Z" stroke="#01ABE6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
182
184
  <path d="M12.4268 6.99365C12.9669 7.53393 13.2703 8.2666 13.2703 9.03054C13.2703 9.79449 12.9669 10.5272 12.4268 11.0674" stroke="#01ABE6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
183
185
  </svg>
184
186
  </span>
185
- <span v-if="work.premiere" class="infoItem -small">Work Premiere:<br/>
187
+ <span v-if="work.premiere" class="performanceGrid__infoItem -small">Work Premiere:<br/>
186
188
  <a :href="createURL('works.premiere', work.premier)">{{ work.premiere }}</a>
187
189
  </span>
188
- <span v-if="work.commission" class="infoItem -small">Commission:<br/>
190
+ <span v-if="work.commission" class="performanceGrid__infoItem -small">Commission:<br/>
189
191
  <a :href="createURL('works.commission', work.commission)">
190
192
  {{ work.commission }}
191
193
  </a>
192
194
  </span>
193
- <span v-if="work.encore" class="infoItem -small"><a :href="createURL('works.encore', work.encore)">Encore</a></span>
195
+ <span v-if="work.encore" class="performanceGrid__infoItem -small"><a :href="createURL('works.encore', work.encore)">Encore</a></span>
194
196
  </div>
195
197
  </div>
196
- <div :class="`performance__cell ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
197
- <span class="mobileHeader">Additional Creator</span>
198
- <span v-for="c in work.additional_creators" class="infoItem">
198
+ <div :class="`performanceGrid__cell ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
199
+ <span class="performanceGrid__mobileHeader">Additional Creator</span>
200
+ <span v-for="c in work.additional_creators" class="performanceGrid__infoItem">
199
201
  <a :href="createURL('works.additional_creators.name', c.name)">{{ c.name }}, {{ c.role }}</a>
200
202
  </span>
201
203
  </div>
202
- <div :class="`performance__cell -artist ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
203
- <span class="mobileHeader">Artist</span>
204
- <span v-for="a in work.artists" class="infoItem"><a :href="createURL('works.artists.name', a.name)">{{ a.name }}</a></span>
204
+ <div :class="`performanceGrid__cell -artist ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
205
+ <span class="performanceGrid__mobileHeader">Artist</span>
206
+ <span v-for="a in work.artists" class="performanceGrid__infoItem"><a :href="createURL('works.artists.name', a.name)">{{ a.name }}</a></span>
205
207
  </div>
206
- <div :class="`performance__cell -role ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
207
- <span class="mobileHeader">Role</span>
208
- <span v-for="a in work.artists" class="infoItem"><a :href="createURL('works.artists.role', a.role)">{{ a.role }}</a></span>
208
+ <div :class="`performanceGrid__cell -role ${index % 2 == 0 ? '-even' : '-odd'} ${ index + 1 == performance.works.length ? '-last' : ''}`">
209
+ <span class="performanceGrid__mobileHeader">Role</span>
210
+ <span v-for="a in work.artists" class="performanceGrid__infoItem"><a :href="createURL('works.artists.role', a.role)">{{ a.role }}</a></span>
209
211
  </div>
210
212
  </template>
211
213
  </div>
@@ -73,6 +73,7 @@
73
73
  const showByWorks = ref(false)
74
74
  const workFilters = ref(null)
75
75
  const currentQuery = ref(null)
76
+ const filtersClosed = ref(false)
76
77
 
77
78
  const updateNow = ref(0)
78
79
 
@@ -117,18 +118,9 @@
117
118
  const searchClient = adapter.searchClient
118
119
 
119
120
  const toggleFilters = () => {
121
+ filtersClosed.value = !filtersClosed.value
120
122
  const wrapper = document.getElementById(`${props.indexName}_filterRail`)
121
- const tabContent = document.getElementById(`${props.indexName}_tabs__content`)
122
- const leftPane = document.getElementById(`${props.indexName}_eventsSearch__results`)
123
- const toggleOnButton = document.getElementById(`${props.indexName}_filterToggleOn`)
124
- if (toggleOnButton) {
125
- toggleOnButton.classList.toggle('closed')
126
- }
127
- wrapper.classList.toggle('closed')
128
- leftPane.classList.toggle('closed')
129
- console.log("wrapper.classList.contains('closed')", wrapper.classList.contains('closed'), wrapper.classList)
130
123
  const allNestedElements = wrapper.querySelectorAll("*")
131
- console.log('allNestedElements', allNestedElements)
132
124
  if (wrapper && wrapper.classList.contains('closed')) {
133
125
  allNestedElements.forEach((el) => {
134
126
  el.setAttribute("tabindex", -1)
@@ -139,8 +131,6 @@
139
131
  })
140
132
  }
141
133
 
142
- tabContent.classList.toggle('open')
143
- tabContent.classList.toggle('closed')
144
134
  }
145
135
 
146
136
  const toggleFiltersMobile = () => {
@@ -165,9 +155,9 @@
165
155
  el.style.setProperty('--accordion-height-closed', `${summaryHeight}px`)
166
156
 
167
157
  setTimeout(() => {
168
- el.open = false
169
- el.classList.remove('-closing')
170
- el.style.setProperty('--accordion-height-closed', 'auto')
158
+ el.open = false
159
+ el.classList.remove('-closing')
160
+ el.style.setProperty('--accordion-height-closed', 'auto')
171
161
  }, 0)
172
162
  })
173
163
  }
@@ -368,7 +358,7 @@
368
358
  let itemIndex = 0
369
359
  returnItems.forEach((item) => {
370
360
  let shownWorks = []
371
- item?.works.forEach((work) => {
361
+ item?.works?.forEach((work) => {
372
362
  let workAdded = false
373
363
  if (intersect(workFilters.value, work)?.length) {
374
364
  shownWorks.push(work)
@@ -415,40 +405,38 @@
415
405
  :on-state-change="onStateChange"
416
406
 
417
407
  >
418
- <div class="tabs__content open" :id="`${props.indexName}_tabs__content`">
408
+ <div :class="`tabs__content ${ filtersClosed ? 'closed' : 'open'}`" :id="`${props.indexName}_tabs__content`">
419
409
  <!-- Header and Search Section -->
420
410
  <div class="eventsSearch__topSection">
421
411
  <!-- Search Filters Section -->
422
- <section class="eventsSearch__filters">
423
- <div class="eventsSearch__filtersRow">
412
+ <section class="filters">
413
+ <div class="filters__row">
424
414
  <!-- Search Box -->
425
- <div class="eventsSearch__filterGroup eventsSearch__filterGroup--search">
415
+ <div class="filters__filterGroup filters__search">
426
416
  <ais-search-box
427
417
 
428
- class="eventsSearch__searchBox"
418
+ class="searchBox"
429
419
  >
430
420
  <template v-slot="{ currentRefinement, isSearchStalled, refine }">
431
- <form class="ais-SearchBox-form" novalidate>
432
- <label for="searchbox" class="hiddenLabel">{{ props.searchPlaceholder }}</label>
433
- <input
434
- class="ais-SearchBox-input"
435
- id="searchbox"
436
- type="search"
437
- :value="currentRefinement"
438
- @input="refine($event.currentTarget.value)"
439
- :placeholder="props.searchPlaceholder"
440
- >
441
- <button type="submit" title="Submit the search query" class="ais-SearchBox-submit"><svg aria-hidden="true" width="10" height="10" viewBox="0 0 40 40" class="ais-SearchBox-submitIcon"><path d="M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z"></path></svg>
442
- </button>
443
- </form>
421
+ <label for="searchbox" class="label__hidden">{{ props.searchPlaceholder }}</label>
422
+ <input
423
+ class="ais-SearchBox-input"
424
+ id="searchbox"
425
+ type="search"
426
+ :value="currentRefinement"
427
+ @input="refine($event.currentTarget.value)"
428
+ :placeholder="props.searchPlaceholder"
429
+ >
430
+ <button type="submit" title="Submit the search query" class="ais-SearchBox-submit"><svg aria-hidden="true" width="10" height="10" viewBox="0 0 40 40" class="ais-SearchBox-submitIcon"><path d="M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z"></path></svg>
431
+ </button>
444
432
  <span :hidden="!isSearchStalled">Loading...</span>
445
433
  </template>
446
434
  </ais-search-box>
447
435
  </div>
448
- <div class="eventsSearch__filterGroup eventsSearch__filterGroup--date">
436
+ <div class="filters__filterGroup dateRange">
449
437
  <ais-range-input :attribute="props.sortField">
450
438
  <template v-slot="{ currentRefinement, range, refine }" >
451
- <label for="start" class="hiddenLabel">Start Date</label>
439
+ <label for="start" class="label__hidden">Start Date</label>
452
440
  <vue-date-picker
453
441
  :aria-labels="{ input: 'Start Date'}"
454
442
  :model-value="toMinValue(currentRefinement, range)"
@@ -467,10 +455,9 @@
467
455
  :tab-submit="true"
468
456
  :text-input="true"
469
457
  placeholder="Start"
470
- class="eventsSearch__datePicker"
471
458
  id="start"
472
459
  />
473
- <label for="end" class="hiddenLabel">End Date</label>
460
+ <label for="end" class="label__hidden">End Date</label>
474
461
  <vue-date-picker
475
462
  :aria-labels="{ input: 'End Date'}"
476
463
  :model-value="toMaxValue(currentRefinement, range)"
@@ -485,19 +472,18 @@
485
472
  :multi-calendars="false"
486
473
  :enable-time-picker="false"
487
474
  placeholder="End"
488
- class="eventsSearch__datePicker"
489
475
  id="end"
490
476
  />
491
477
  </template>
492
478
  </ais-range-input>
493
479
  </div>
494
- <div class="eventsSearch__filterGroup--button">
480
+ <div class="filters__button">
495
481
  <button class="button info">
496
482
  <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" class="mobileSearch">
497
483
  <path d="M6.00037 11.2504C8.90007 11.2504 11.2507 8.89978 11.2507 6.00018C11.2507 3.10059 8.90007 0.75 6.00037 0.75C3.10067 0.75 0.75 3.10059 0.75 6.00018C0.75 8.89978 3.10067 11.2504 6.00037 11.2504Z" stroke="#14284E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
498
484
  <path d="M9.7124 9.71265L12.7502 12.7503" stroke="#14284E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
499
485
  </svg>
500
- <span class="searchButton">Search</span>
486
+ <span class="filters__searchButton">Search</span>
501
487
  </button>
502
488
  </div>
503
489
  </div>
@@ -505,12 +491,12 @@
505
491
  </div>
506
492
 
507
493
  <!-- View Toggle and Active Filters -->
508
- <section class="eventsSearch__filterRail" :id="`${props.indexName}_filterRail`">
494
+ <section :class="`filters__filterRail ${filtersClosed ? 'closed' : ''}`" :id="`${props.indexName}_filterRail`">
509
495
 
510
- <div class="eventsSearch__filterWrapper">
511
- <div class="eventsSearch__filterHeader">
512
- <div class="eventsSearch__filterToggle">
513
- <svg width="24" height="24" viewBox="0 0 24 24" class="filterIcon">
496
+ <div class="filters__wrapper">
497
+ <div class="filters__header">
498
+ <div class="filters__toggle">
499
+ <svg width="24" height="24" viewBox="0 0 24 24" class="filters__icon">
514
500
  <rect width="24" height="24" rx="4" fill="#01ABE6"/>
515
501
  <path d="M6 7.25H18.8864" stroke="white" stroke-linecap="round"/>
516
502
  <path d="M6 12.5681H18.8864" stroke="white" stroke-linecap="round"/>
@@ -543,12 +529,12 @@
543
529
  </div>
544
530
  </summary>
545
531
  <div class="accordion__content" v-if="items.length || isFromSearch">
546
- <div class="ais-SearchBox eventsSearch__searchBox -filter">
547
- <label class="hiddenLabel" :for="refinement.attribute">{{ refinement.placeholder }}</label>
532
+ <div class="ais-SearchBox searchBox -filter">
533
+ <label class="label__hidden" :for="refinement.attribute">{{ refinement.placeholder }}</label>
548
534
  <input :id="refinement.attribute" @input="searchForItems($event.currentTarget.value)" :placeholder="refinement.placeholder" class="ais-SearchBox-input -filter" v-if="!refinement.hideSearch">
549
535
  </div>
550
- <div class="eventsSearch__checkBoxes">
551
- <label v-for="item in items" class="eventsSearch__boxLabel" :for="slugify(refinement.title + ' ' + item.value)">
536
+ <div class="checkBoxes">
537
+ <label v-for="item in items" class="checkBoxes__boxLabel" :for="slugify(refinement.title + ' ' + item.value)">
552
538
  <div class="eventSearch__checkBox">
553
539
  <input :class="`checkbox ${item.isRefined ? '-boxChecked' : ''}`" type="checkbox" :id="slugify(refinement.title + ' ' + item.value)" :value="item.value" :checked="item.isRefined" @click="refine(item.value)">
554
540
  </div>
@@ -578,12 +564,12 @@
578
564
  </div>
579
565
  </summary>
580
566
  <div class="accordion__content" v-if="items.length || isFromSearch">
581
- <div class="ais-SearchBox eventsSearch__searchBox -filter" v-if="!refinement.hideSearch">
582
- <label class="hiddenLabel" :for="refinement.attribute">{{ refinement.placeholder }}</label>
567
+ <div class="ais-SearchBox searchBox -filter" v-if="!refinement.hideSearch">
568
+ <label class="label__hidden" :for="refinement.attribute">{{ refinement.placeholder }}</label>
583
569
  <input :id="refinement.attribute" @input="searchForItems($event.currentTarget.value)" :placeholder="refinement.placeholder" class="ais-SearchBox-input -filter">
584
570
  </div>
585
- <div class="eventsSearch__checkBoxes">
586
- <label v-for="item in items" class="eventsSearch__boxLabel" :for="slugify(refinement.title + ' ' + item.value)">
571
+ <div class="checkBoxes">
572
+ <label v-for="item in items" class="checkBoxes__boxLabel" :for="slugify(refinement.title + ' ' + item.value)">
587
573
  <div class="eventSearch__checkBox">
588
574
  <input :class="`checkbox ${item.isRefined ? '-boxChecked' : ''}`" type="checkbox" :id="slugify(refinement.title + ' ' + item.value)" :value="item.value" :checked="item.isRefined" @click="refine(item.value)">
589
575
  </div>
@@ -632,16 +618,16 @@
632
618
  </div>
633
619
  </p-accordion>
634
620
  </div>
635
- <div class="actionBar">
621
+ <div class="clearRefinements">
636
622
  <ais-clear-refinements :excluded-attributes="[]">
637
623
  <template v-slot="{ refine, createURL }">
638
- <a
639
- :href="createURL()"
640
- @click.prevent="refine"
641
- >
642
- <button>Clear</button>
643
- <button @click="toggleFiltersMobile()" class="filterApply">Apply</button>
644
- </a>
624
+ <a
625
+ :href="createURL()"
626
+ @click.prevent="refine"
627
+ >
628
+ <button>Clear</button>
629
+ <button @click="toggleFiltersMobile()" class="filterApply">Apply</button>
630
+ </a>
645
631
  </template>
646
632
  </ais-clear-refinements>
647
633
 
@@ -649,12 +635,12 @@
649
635
  </section>
650
636
 
651
637
  <!-- Search Results Section -->
652
- <section class="eventsSearch__results" :id="`${props.indexName}_eventsSearch__results`">
638
+ <section :class="`eventsSearch__results ${ filtersClosed ? 'closed' : ''}`" :id="`${props.indexName}_eventsSearch__results`">
653
639
 
654
640
  <ais-hits :key="updateNow" class="eventsSearch__hits" :transform-items="filterItems">
655
641
  <template v-slot="{ items }">
656
642
  <div class="eventsSearch__resultsHeader -mobile">
657
- <div class="eventsSearch__filterToggle">
643
+ <div class="filters__toggle">
658
644
  <button class="filterButton" @click="toggleFiltersMobile()">
659
645
  <svg width="24" height="24" viewBox="0 0 24 24" >
660
646
  <rect width="24" height="24" rx="4" fill="#01ABE6"/>
@@ -668,7 +654,7 @@
668
654
  Filters
669
655
  </button>
670
656
  <div class="eventsSearch__resultsSort">Sort by:
671
- <select v-model="sortView" @change="setView">
657
+ <select name="Sort Order" v-model="sortView" @change="setView">
672
658
  <option value="Most Recent">Most Recent</option>
673
659
  <option value="Most Relevant">Most Relevant</option>
674
660
  <option value="Oldest First">Oldest First</option>
@@ -678,7 +664,7 @@
678
664
  </div>
679
665
  <div class="eventsSearch__resultsHeader">
680
666
  <div class="eventsSearch__resultsTitle">
681
- <svg width="24" height="24" viewBox="0 0 24 24" :id="`${props.indexName}_filterToggleOn`" class="eventsSearch__filterToggleOn" @click="toggleFilters()">
667
+ <svg width="24" height="24" viewBox="0 0 24 24" :id="`${props.indexName}_filterToggleOn`" :class="`filters__toggleOn ${filtersClosed ? 'closed' : ''}`" @click="toggleFilters()">
682
668
  <rect width="24" height="24" rx="4" fill="#01ABE6"/>
683
669
  <path d="M6 7.25H18.8864" stroke="white" stroke-linecap="round"/>
684
670
  <path d="M6 12.5681H18.8864" stroke="white" stroke-linecap="round"/>
@@ -697,22 +683,23 @@
697
683
  <h2 v-else>{{ props.resultsTitle }}</h2>
698
684
 
699
685
  </div>
700
- <div class="eventsSearch__actions">
701
- <div class="eventsSearch__resultsSort">Sort by:
702
- <select v-model="sortView" @change="setView">
686
+ <div class="resultActions">
687
+ <div class="resultActions__sort">
688
+ <label class="resultActions__sortText">Sort by: </label>
689
+ <select name="sort_order" v-model="sortView" @change="setView">
703
690
  <option value="Most Recent">Most Recent</option>
704
691
  <option value="Most Relevant">Most Relevant</option>
705
692
  <option value="Oldest First">Oldest First</option>
706
693
  </select>
707
694
  </div>
708
- <div v-if="showNumHits" class="eventsSearch__actionButtons">
709
- <a onclick="navigator.clipboard.writeText(window.location.href);" class="eventsSearch__actionIcon">
695
+ <div v-if="showNumHits" class="resultActions__buttons">
696
+ <a onclick="navigator.clipboard.writeText(window.location.href);" class="resultActions__icon">
710
697
  <svg width="9" height="9" viewBox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg">
711
698
  <path d="M3.8335 5.00683C4.00129 5.24348 4.21538 5.4393 4.46122 5.581C4.70706 5.72269 4.97891 5.80696 5.25834 5.82807C5.53776 5.84918 5.81823 5.80665 6.0807 5.70336C6.34317 5.60006 6.58152 5.43843 6.77957 5.22941L7.95175 3.99281C8.30762 3.6041 8.50454 3.08349 8.50009 2.5431C8.49564 2.00271 8.29018 1.48578 7.92796 1.10365C7.56574 0.721528 7.07574 0.504774 6.5635 0.500078C6.05127 0.495382 5.55778 0.70312 5.18932 1.07855L4.51727 1.78341" stroke="#01ABE6" stroke-linecap="round" stroke-linejoin="round"/>
712
699
  <path d="M5.83333 3.99326C5.64156 3.7566 5.3969 3.56078 5.11594 3.41908C4.83497 3.27739 4.52428 3.19313 4.20494 3.17201C3.8856 3.1509 3.56507 3.19343 3.2651 3.29673C2.96513 3.40002 2.69273 3.56165 2.46639 3.77067L1.12675 5.00727C0.720043 5.39598 0.494997 5.9166 0.500084 6.45698C0.505171 6.99737 0.739985 7.5143 1.15395 7.89643C1.56791 8.27855 2.12791 8.49531 2.71332 8.5C3.29874 8.5047 3.86273 8.29696 4.28382 7.92153L5.04741 7.21667" stroke="#01ABE6" stroke-linecap="round" stroke-linejoin="round"/>
713
700
  </svg>
714
701
  </a>
715
- <a :href="`/actions/csvexport/csv-export${ routing.router.getLocation().search }`" class="eventsSearch__actionIcon">
702
+ <a :href="`/actions/csvexport/csv-export${ routing.router.getLocation().search }`" class="resultActions__icon">
716
703
  <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
717
704
  <path d="M7.47805 10.9099L0.5 10.9099" stroke="#01ABE6" stroke-linecap="round" stroke-linejoin="round"/>
718
705
  <path d="M0.75293 4.94067L3.92477 8.11252L7.09662 4.94067" stroke="#01ABE6" stroke-linecap="round" stroke-linejoin="round"/>
@@ -724,24 +711,24 @@
724
711
  </div>
725
712
  <ais-current-refinements :excluded-attributes="[]">
726
713
  <template v-slot="{ items, createURL }">
727
- <div class="eventsSearch__activeFilters">
728
- <div class="eventsSearch__activeTitle" v-if="items.length">Applied Filters</div>
714
+ <div class="activeFilters">
715
+ <div class="activeFilters__title" v-if="items.length">Applied Filters</div>
729
716
  <ais-clear-refinements v-if="items.length" :excluded-attributes="[]">
730
717
  <template v-slot="{ canRefine, refine, createURL }">
731
718
  <a
732
719
  :href="createURL()"
733
720
  @click.prevent="refine"
734
721
  v-if="canRefine"
735
- class="eventsSearch__clearFilters"
722
+ class="activeFilters__clearFilters"
736
723
  >
737
724
  Clear
738
725
  </a>
739
726
  <span v-else></span>
740
727
  </template>
741
728
  </ais-clear-refinements>
742
- <ul class="eventsSearch__activeFiltersList">
743
- <li v-for="item in items" :key="item.attribute" class="eventsSearch__activeFiltersGroup">
744
- <ul class="eventsSearch__activeFiltersItems">
729
+ <ul class="activeFilters__filtersList">
730
+ <li v-for="item in items" :key="item.attribute">
731
+ <ul class="activeFilters__items">
745
732
  <li
746
733
  v-for="refinement in item.refinements"
747
734
  :key="[
@@ -750,13 +737,13 @@
750
737
  refinement.value,
751
738
  refinement.operator
752
739
  ].join(':')"
753
- class="eventsSearch__activeFilterItem"
740
+ class="activeFilters__item"
754
741
  >
755
742
  <a
756
743
  :href="createURL(refinement)"
757
744
  @click.prevent="item.refine(refinement)"
758
745
  v-html="formatRefinement(refinement)"
759
- class="eventsSearch__activeFilterRemove"
746
+ class="activeFilters__remove"
760
747
  ></a>
761
748
  </li>
762
749
  </ul>
@@ -776,7 +763,7 @@
776
763
 
777
764
 
778
765
  <!-- Pagination -->
779
- <nav class="eventsSearch__pagination">
766
+ <nav class="resultsPagination">
780
767
  <ais-stats>
781
768
  <template v-slot="{ hitsPerPage, nbHits, page }">
782
769
  {{ nbHits == 0 ? nbHits : page * hitsPerPage + 1 }} - {{ (((page + 1) * hitsPerPage)) < nbHits ? (((page + 1) * hitsPerPage)) : nbHits }} of {{ nbHits }} Results
@@ -794,13 +781,13 @@
794
781
  createURL
795
782
  }"
796
783
  >
797
- <ul class="eventsSearch__paginationComponent" v-if="pages.length > 1">
798
- <li v-if="!isFirstPage && nbPages > 4" class="arrow">
784
+ <ul class="resultsPagination__paginationComponent" v-if="pages.length > 1">
785
+ <li v-if="!isFirstPage && nbPages > 5" class="arrow">
799
786
  <a :href="createURL(0)" @click.prevent="refine(0)">
800
787
  ‹‹
801
788
  </a>
802
789
  </li>
803
- <li v-if="!isFirstPage && nbPages > 4" class="arrow">
790
+ <li v-if="!isFirstPage && nbPages > 5" class="arrow">
804
791
  <a
805
792
  :href="createURL(currentRefinement - 1)"
806
793
  @click.prevent="refine(currentRefinement - 1)"
@@ -837,8 +824,13 @@
837
824
  {{ nbPages - (5 - page) }}
838
825
  </a>
839
826
  </li>
827
+ <li v-for="page in nbPages - 1" v-if="nbPages <= 5">
828
+ <a :href="createURL(page)" :style="{ fontWeight: page === currentRefinement ? 'bold' : '' }">
829
+ {{ page + 1 }}
830
+ </a>
831
+ </li>
840
832
  </template>
841
- <li v-if="!isLastPage && nbPages > 4" class="arrow">
833
+ <li v-if="!isLastPage && nbPages > 5" class="arrow">
842
834
  <a
843
835
  :href="createURL(currentRefinement + 1)"
844
836
  @click.prevent="refine(currentRefinement + 1)"
@@ -846,7 +838,7 @@
846
838
 
847
839
  </a>
848
840
  </li>
849
- <li v-if="!isLastPage && nbPages > 4" class="arrow">
841
+ <li v-if="!isLastPage && nbPages > 5" class="arrow">
850
842
  <a :href="createURL(nbPages)" @click.prevent="refine(nbPages)">
851
843
  ››
852
844
  </a>
package/src/main.js CHANGED
@@ -7,6 +7,7 @@ import { createApp } from 'vue'
7
7
  import Search from './components/Search.vue'
8
8
  import SearchDetail from './components/SearchDetail.vue'
9
9
  import SearchHistory from './components/SearchHistory.vue'
10
+ import './styles/index.scss'
10
11
 
11
12
  export default {
12
13
 
@@ -0,0 +1,46 @@
1
+ .audioLinks {
2
+
3
+ &__box {
4
+ display:none;
5
+ &.-open {
6
+ position:absolute;
7
+ right: 5rem;
8
+ margin-top: 2rem;
9
+ z-index: 100;
10
+ display:block;
11
+ }
12
+ }
13
+
14
+ &__label {
15
+ white-space:nowrap;
16
+ font-weight: 100;
17
+ font-size: 1rem;
18
+ padding: .75rem;
19
+ &.-first {
20
+ border-bottom: thin solid var(--color-gray-100);
21
+ }
22
+ }
23
+
24
+ &__link {
25
+ justify-content: end;
26
+ white-space:nowrap;
27
+ width: 100%;
28
+ font-size: 1rem;
29
+ padding: .75rem;
30
+ color: var(--color-turquoise);
31
+
32
+ &.-first {
33
+ border-bottom: thin solid var(--color-gray-100);
34
+ }
35
+ }
36
+
37
+ &__links {
38
+ background-color: white;
39
+ display: grid;
40
+ grid-template-columns: auto auto;
41
+ border: 1px solid var(--color-gray-100);
42
+ border-radius: 5px;
43
+ box-shadow: 0 0 10px var(--color-gray-100);
44
+ }
45
+
46
+ }
@@ -0,0 +1,12 @@
1
+ @use "@imarc/pronto/resources/styles/imported" as *;
2
+
3
+ .breadCrumb {
4
+ background-color: var(--color-light-gold);
5
+ padding: 0.5rem 1.5rem;
6
+ @include at(md) {
7
+ padding: 0.5rem 2rem 0.5rem 4rem;
8
+ }
9
+ @include at(lg) {
10
+ padding: 0.5rem 4rem 0.5rem 8rem;
11
+ }
12
+ }