@ulu/frontend 0.0.3 → 0.0.5
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/package.json +11 -10
- package/scss/_grid.scss +0 -1
- package/scss/_typography.scss +0 -1
- package/scss/helpers/_units.scss +1 -6
- package/scss/stylesheets/full.scss +1 -4
- package/trash/js-old/deprecated/doc-ready.js +0 -28
- package/trash/js-old/deprecated/jquery-prototypes.js +0 -309
- package/trash/js-old/deprecated/mini-collapsible-popper-positioning.js +0 -126
- package/trash/js-old/deprecated/mini-collapsible.js +0 -607
- package/trash/js-old/deprecated/script-loader.js +0 -60
- package/trash/js-old/events/index.js +0 -42
- package/trash/js-old/helpers/css-breakpoint.js +0 -247
- package/trash/js-old/helpers/file-save.js +0 -48
- package/trash/js-old/helpers/node-data-manager.js +0 -74
- package/trash/js-old/helpers/pause-youtube-video.js +0 -42
- package/trash/js-old/index.js +0 -15
- package/trash/js-old/polyfills/element-closest.js +0 -17
- package/trash/js-old/ui/flipcard.js +0 -202
- package/trash/js-old/ui/grid.js +0 -67
- package/trash/js-old/ui/modals.js +0 -219
- package/trash/js-old/ui/programmatic-modal.js +0 -91
- package/trash/js-old/ui/resizer.js +0 -60
- package/trash/js-old/ui/slider.js +0 -469
- package/trash/js-old/ui/tabs.js +0 -109
- package/trash/js-old/ui/tooltip.js +0 -82
- package/trash/js-old/utils/array.js +0 -28
- package/trash/js-old/utils/dom.js +0 -122
- package/trash/js-old/utils/logger.js +0 -69
- package/trash/js-old/utils/object.js +0 -22
- package/trash/js-old/utils/performance.js +0 -43
- package/trash/js-old/utils/regex.js +0 -10
- package/trash/js-old/utils/string.js +0 -107
- package/trash/js-old/waypoints/README.md +0 -3
- package/trash/js-old/waypoints/anchor-menu.js +0 -76
- package/trash/js-old/waypoints/element-waypoint.js +0 -75
- package/trash/js-old/waypoints/examples/page-link-menu.md +0 -106
- package/trash/js-old/waypoints/state-in-attribute.js +0 -32
- package/trash/js-old-230729/deprecated/doc-ready.js +0 -28
- package/trash/js-old-230729/deprecated/jquery-prototypes.js +0 -309
- package/trash/js-old-230729/deprecated/mini-collapsible-popper-positioning.js +0 -126
- package/trash/js-old-230729/deprecated/mini-collapsible.js +0 -607
- package/trash/js-old-230729/deprecated/script-loader.js +0 -60
- package/trash/js-old-230729/events/index.js +0 -42
- package/trash/js-old-230729/helpers/css-breakpoint.js +0 -247
- package/trash/js-old-230729/helpers/file-save.js +0 -48
- package/trash/js-old-230729/helpers/node-data-manager.js +0 -74
- package/trash/js-old-230729/helpers/pause-youtube-video.js +0 -42
- package/trash/js-old-230729/helpers/scrollbar-width-property.js +0 -10
- package/trash/js-old-230729/index.js +0 -15
- package/trash/js-old-230729/polyfills/element-closest.js +0 -17
- package/trash/js-old-230729/ui/flipcard.js +0 -202
- package/trash/js-old-230729/ui/grid.js +0 -67
- package/trash/js-old-230729/ui/modals.js +0 -219
- package/trash/js-old-230729/ui/overflow-scroller-pager.js +0 -58
- package/trash/js-old-230729/ui/overflow-scroller.js +0 -160
- package/trash/js-old-230729/ui/programmatic-modal.js +0 -91
- package/trash/js-old-230729/ui/resizer.js +0 -60
- package/trash/js-old-230729/ui/slider.js +0 -468
- package/trash/js-old-230729/ui/tabs.js +0 -109
- package/trash/js-old-230729/ui/tooltip.js +0 -82
- package/trash/js-old-230729/utils/array.js +0 -28
- package/trash/js-old-230729/utils/dom.js +0 -122
- package/trash/js-old-230729/utils/logger.js +0 -69
- package/trash/js-old-230729/utils/object.js +0 -22
- package/trash/js-old-230729/utils/performance.js +0 -43
- package/trash/js-old-230729/utils/regex.js +0 -10
- package/trash/js-old-230729/utils/string.js +0 -107
- package/trash/js-old-230729/waypoints/README.md +0 -3
- package/trash/js-old-230729/waypoints/anchor-menu.js +0 -76
- package/trash/js-old-230729/waypoints/element-waypoint.js +0 -75
- package/trash/js-old-230729/waypoints/examples/page-link-menu.md +0 -106
- package/trash/js-old-230729/waypoints/state-in-attribute.js +0 -32
- package/trash/logo-1.svg +0 -13
- package/trash/logo.svg +0 -16
- package/trash/scss-before-cqc-update/README.md +0 -58
- package/trash/scss-before-cqc-update/_breakpoint.scss +0 -190
- package/trash/scss-before-cqc-update/_button.scss +0 -229
- package/trash/scss-before-cqc-update/_calculate.scss +0 -65
- package/trash/scss-before-cqc-update/_color.scss +0 -211
- package/trash/scss-before-cqc-update/_cssvar.scss +0 -116
- package/trash/scss-before-cqc-update/_element.scss +0 -275
- package/trash/scss-before-cqc-update/_index.scss +0 -29
- package/trash/scss-before-cqc-update/_layout.scss +0 -247
- package/trash/scss-before-cqc-update/_path.scss +0 -59
- package/trash/scss-before-cqc-update/_selector.scss +0 -82
- package/trash/scss-before-cqc-update/_typography.scss +0 -322
- package/trash/scss-before-cqc-update/_units.scss +0 -48
- package/trash/scss-before-cqc-update/_utility.scss +0 -13
- package/trash/scss-before-cqc-update/_utils.scss +0 -211
- package/trash/scss-before-cqc-update/base/_color.scss +0 -14
- package/trash/scss-before-cqc-update/base/_elements.scss +0 -189
- package/trash/scss-before-cqc-update/base/_index.scss +0 -63
- package/trash/scss-before-cqc-update/base/_keyframes.scss +0 -74
- package/trash/scss-before-cqc-update/base/_layout.scss +0 -88
- package/trash/scss-before-cqc-update/base/_normalize.scss +0 -316
- package/trash/scss-before-cqc-update/base/_typography.scss +0 -42
- package/trash/scss-before-cqc-update/components/README.md +0 -5
- package/trash/scss-before-cqc-update/components/README.todos +0 -15
- package/trash/scss-before-cqc-update/components/_button.scss +0 -96
- package/trash/scss-before-cqc-update/components/_grid.scss +0 -671
- package/trash/scss-before-cqc-update/components/_index.scss +0 -70
- package/trash/scss-before-cqc-update/components/_links.scss +0 -35
- package/trash/scss-before-cqc-update/components/_list-lines.scss +0 -74
- package/trash/scss-before-cqc-update/components/_list-ordered.scss +0 -17
- package/trash/scss-before-cqc-update/components/_list-unordered.scss +0 -22
- package/trash/scss-before-cqc-update/components/_rule.scss +0 -94
- package/trash/scss-before-cqc-update/helpers/_color.scss +0 -15
- package/trash/scss-before-cqc-update/helpers/_display.scss +0 -73
- package/trash/scss-before-cqc-update/helpers/_index.scss +0 -68
- package/trash/scss-before-cqc-update/helpers/_print.scss +0 -59
- package/trash/scss-before-cqc-update/helpers/_typography.scss +0 -73
- package/trash/scss-before-cqc-update/helpers/_units.scss +0 -79
- package/trash/scss-before-cqc-update/helpers/_utilities.scss +0 -88
- package/trash/scss-before-cqc-update/stylesheets/README.md +0 -3
- package/trash/scss-before-cqc-update/stylesheets/full.scss +0 -17
- package/trash/scss-old/README.md +0 -58
- package/trash/scss-old/_breakpoint.scss +0 -140
- package/trash/scss-old/_button.scss +0 -223
- package/trash/scss-old/_calculate.scss +0 -64
- package/trash/scss-old/_color.scss +0 -200
- package/trash/scss-old/_element.scss +0 -262
- package/trash/scss-old/_grid.scss +0 -558
- package/trash/scss-old/_index.scss +0 -25
- package/trash/scss-old/_layout.scss +0 -170
- package/trash/scss-old/_path.scss +0 -58
- package/trash/scss-old/_selector.scss +0 -81
- package/trash/scss-old/_typography.scss +0 -320
- package/trash/scss-old/_units.scss +0 -47
- package/trash/scss-old/_utility.scss +0 -12
- package/trash/scss-old/_utils.scss +0 -186
- package/trash/scss-old/base/_color.scss +0 -13
- package/trash/scss-old/base/_elements.scss +0 -183
- package/trash/scss-old/base/_index.scss +0 -62
- package/trash/scss-old/base/_keyframes.scss +0 -74
- package/trash/scss-old/base/_layout.scss +0 -81
- package/trash/scss-old/base/_normalize.scss +0 -316
- package/trash/scss-old/base/_typography.scss +0 -42
- package/trash/scss-old/components/README.md +0 -5
- package/trash/scss-old/components/README.todos +0 -15
- package/trash/scss-old/components/_button.scss +0 -74
- package/trash/scss-old/components/_index.scss +0 -63
- package/trash/scss-old/components/_links.scss +0 -34
- package/trash/scss-old/components/_list-lines.scss +0 -73
- package/trash/scss-old/components/_list-ordered.scss +0 -16
- package/trash/scss-old/components/_list-unordered.scss +0 -21
- package/trash/scss-old/components/_rule.scss +0 -84
- package/trash/scss-old/helpers/_color.scss +0 -14
- package/trash/scss-old/helpers/_display.scss +0 -68
- package/trash/scss-old/helpers/_index.scss +0 -67
- package/trash/scss-old/helpers/_print.scss +0 -59
- package/trash/scss-old/helpers/_typography.scss +0 -73
- package/trash/scss-old/helpers/_units.scss +0 -68
- package/trash/scss-old/helpers/_utilities.scss +0 -82
- package/trash/scss-old/packages/README.md +0 -3
- package/trash/scss-old/packages/everything.scss +0 -17
- package/trash/scss-old-2/README.md +0 -58
- package/trash/scss-old-2/_breakpoint.scss +0 -139
- package/trash/scss-old-2/_button.scss +0 -223
- package/trash/scss-old-2/_calculate.scss +0 -64
- package/trash/scss-old-2/_color.scss +0 -202
- package/trash/scss-old-2/_element.scss +0 -263
- package/trash/scss-old-2/_grid.scss +0 -558
- package/trash/scss-old-2/_index.scss +0 -25
- package/trash/scss-old-2/_layout.scss +0 -170
- package/trash/scss-old-2/_path.scss +0 -58
- package/trash/scss-old-2/_selector.scss +0 -81
- package/trash/scss-old-2/_typography.scss +0 -320
- package/trash/scss-old-2/_units.scss +0 -47
- package/trash/scss-old-2/_utility.scss +0 -12
- package/trash/scss-old-2/_utils.scss +0 -186
- package/trash/scss-old-2/base/_color.scss +0 -13
- package/trash/scss-old-2/base/_elements.scss +0 -182
- package/trash/scss-old-2/base/_index.scss +0 -62
- package/trash/scss-old-2/base/_keyframes.scss +0 -73
- package/trash/scss-old-2/base/_layout.scss +0 -83
- package/trash/scss-old-2/base/_normalize.scss +0 -315
- package/trash/scss-old-2/base/_typography.scss +0 -41
- package/trash/scss-old-2/components/README.md +0 -5
- package/trash/scss-old-2/components/README.todos +0 -15
- package/trash/scss-old-2/components/_button.scss +0 -95
- package/trash/scss-old-2/components/_index.scss +0 -63
- package/trash/scss-old-2/components/_links.scss +0 -33
- package/trash/scss-old-2/components/_list-lines.scss +0 -73
- package/trash/scss-old-2/components/_list-ordered.scss +0 -16
- package/trash/scss-old-2/components/_list-unordered.scss +0 -21
- package/trash/scss-old-2/components/_rule.scss +0 -84
- package/trash/scss-old-2/helpers/_color.scss +0 -14
- package/trash/scss-old-2/helpers/_display.scss +0 -67
- package/trash/scss-old-2/helpers/_index.scss +0 -67
- package/trash/scss-old-2/helpers/_print.scss +0 -58
- package/trash/scss-old-2/helpers/_typography.scss +0 -72
- package/trash/scss-old-2/helpers/_units.scss +0 -68
- package/trash/scss-old-2/helpers/_utilities.scss +0 -81
- package/trash/scss-old-2/packages/README.md +0 -3
- package/trash/scss-old-2/packages/everything.scss +0 -17
- package/trash/scss-old-230729/README.md +0 -58
- package/trash/scss-old-230729/_breakpoint.scss +0 -139
- package/trash/scss-old-230729/_button.scss +0 -223
- package/trash/scss-old-230729/_calculate.scss +0 -64
- package/trash/scss-old-230729/_color.scss +0 -202
- package/trash/scss-old-230729/_element.scss +0 -273
- package/trash/scss-old-230729/_grid.scss +0 -694
- package/trash/scss-old-230729/_index.scss +0 -25
- package/trash/scss-old-230729/_layout.scss +0 -193
- package/trash/scss-old-230729/_path.scss +0 -58
- package/trash/scss-old-230729/_selector.scss +0 -81
- package/trash/scss-old-230729/_typography.scss +0 -320
- package/trash/scss-old-230729/_units.scss +0 -47
- package/trash/scss-old-230729/_utility.scss +0 -12
- package/trash/scss-old-230729/_utils.scss +0 -186
- package/trash/scss-old-230729/base/_color.scss +0 -13
- package/trash/scss-old-230729/base/_elements.scss +0 -188
- package/trash/scss-old-230729/base/_index.scss +0 -62
- package/trash/scss-old-230729/base/_keyframes.scss +0 -73
- package/trash/scss-old-230729/base/_layout.scss +0 -83
- package/trash/scss-old-230729/base/_normalize.scss +0 -315
- package/trash/scss-old-230729/base/_typography.scss +0 -41
- package/trash/scss-old-230729/components/README.md +0 -5
- package/trash/scss-old-230729/components/README.todos +0 -15
- package/trash/scss-old-230729/components/_button.scss +0 -95
- package/trash/scss-old-230729/components/_index.scss +0 -63
- package/trash/scss-old-230729/components/_links.scss +0 -34
- package/trash/scss-old-230729/components/_list-lines.scss +0 -73
- package/trash/scss-old-230729/components/_list-ordered.scss +0 -16
- package/trash/scss-old-230729/components/_list-unordered.scss +0 -21
- package/trash/scss-old-230729/components/_rule.scss +0 -93
- package/trash/scss-old-230729/helpers/_color.scss +0 -14
- package/trash/scss-old-230729/helpers/_display.scss +0 -73
- package/trash/scss-old-230729/helpers/_index.scss +0 -67
- package/trash/scss-old-230729/helpers/_print.scss +0 -58
- package/trash/scss-old-230729/helpers/_typography.scss +0 -72
- package/trash/scss-old-230729/helpers/_units.scss +0 -68
- package/trash/scss-old-230729/helpers/_utilities.scss +0 -87
- package/trash/scss-old-230729/packages/README.md +0 -3
- package/trash/scss-old-230729/packages/everything.scss +0 -17
- package/trash/vue/directives/background-image-url.js +0 -12
- package/trash/vue/helpers/add-required-components.js +0 -14
- package/trash/vue/ui/CollapsibleRegion/CollapsibleRegion.vue +0 -277
- package/trash/vue/ui/CollapsibleRegion/Demo.vue +0 -101
- package/trash/vue/ui/Dropdown/Dropdown.vue +0 -184
- package/trash/vue/ui/Modals/components/Modal.vue +0 -49
- package/trash/vue/ui/Modals/components/Modals.vue +0 -103
- package/trash/vue/ui/Modals/plugin.js +0 -215
- package/trash/vue/ui/Modals/readme.note +0 -10
- package/trash/vue/ui/Modals/reference/example-usage.vue +0 -27
- package/trash/vue/ui/Modals/reference/wcag-example/dialog.js +0 -324
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Reference:
|
|
3
|
-
- transitioning from auto: https://codepen.io/brundolf/pen/dvoGyw?editors=0010
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<div
|
|
7
|
-
class="CollapsibleRegion"
|
|
8
|
-
@keydown.esc="handleEscape"
|
|
9
|
-
:class="{
|
|
10
|
-
'CollapsibleRegion--open' : isOpen,
|
|
11
|
-
'CollapsibleRegion--closed' : !isOpen,
|
|
12
|
-
'CollapsibleRegion--transitioning' : isTransitioning
|
|
13
|
-
}"
|
|
14
|
-
>
|
|
15
|
-
<button
|
|
16
|
-
class="CollapsibleRegion__toggle"
|
|
17
|
-
:id="toggleId"
|
|
18
|
-
:aria-controls="contentId"
|
|
19
|
-
:aria-expanded="isOpen"
|
|
20
|
-
@click="toggle"
|
|
21
|
-
>
|
|
22
|
-
<slot name="toggle" :isOpen="isOpen" />
|
|
23
|
-
</button>
|
|
24
|
-
<div
|
|
25
|
-
class="CollapsibleRegion__content"
|
|
26
|
-
tabindex="-1"
|
|
27
|
-
ref="content"
|
|
28
|
-
:id="contentId"
|
|
29
|
-
:aria-hidden="!isOpen"
|
|
30
|
-
:aria-labelledby="toggleId"
|
|
31
|
-
:style="contentStyles"
|
|
32
|
-
v-show="!isHidden"
|
|
33
|
-
>
|
|
34
|
-
<!--
|
|
35
|
-
Using inner container to allow no styles on content container
|
|
36
|
-
as they interfere with getting accurate measurements of the content
|
|
37
|
-
when it's hidden (scrollHeight)
|
|
38
|
-
-->
|
|
39
|
-
<div class="CollapsibleRegion__content-inner">
|
|
40
|
-
<slot/>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</template>
|
|
45
|
-
|
|
46
|
-
<script>
|
|
47
|
-
|
|
48
|
-
let uid = 0;
|
|
49
|
-
|
|
50
|
-
export default {
|
|
51
|
-
name: 'CollapsibleRegion',
|
|
52
|
-
props: {
|
|
53
|
-
closeOnEscape: Boolean,
|
|
54
|
-
/**
|
|
55
|
-
* When the component is shown it should start visible or hidden
|
|
56
|
-
*/
|
|
57
|
-
startOpen: Boolean,
|
|
58
|
-
/**
|
|
59
|
-
* Whether or not to transition the show and hide
|
|
60
|
-
*/
|
|
61
|
-
transitionHeight: Boolean,
|
|
62
|
-
/**
|
|
63
|
-
* Transition should fade as it expands
|
|
64
|
-
*/
|
|
65
|
-
transitionFades: Boolean,
|
|
66
|
-
/**
|
|
67
|
-
* Transition Timing Function
|
|
68
|
-
*/
|
|
69
|
-
transitionTiming: {
|
|
70
|
-
type: String,
|
|
71
|
-
default: 'ease-out'
|
|
72
|
-
},
|
|
73
|
-
/**
|
|
74
|
-
* Transition Duration (css duration string), use comma seperation if different for opacity (fade).
|
|
75
|
-
* Note: This is used to calculate a fallback timer if transitions fail
|
|
76
|
-
*/
|
|
77
|
-
transitionDuration: {
|
|
78
|
-
type: String,
|
|
79
|
-
default: '400ms',
|
|
80
|
-
validator(value) {
|
|
81
|
-
// Make sure that it's a valid css duration (ms|s)
|
|
82
|
-
return value.includes('s')
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
data() {
|
|
87
|
-
const isOpen = this.startOpen;
|
|
88
|
-
// Calculate the duration needed for the fallback,
|
|
89
|
-
// adding 500 to allow padding for delays in transitioning
|
|
90
|
-
const transitionTimeout = Math.ceil(
|
|
91
|
-
this.getUnitlessDuration(this.transitionDuration) + 500
|
|
92
|
-
);
|
|
93
|
-
// Note (isOpen vs isHidden): 'isOpen' is the actaul state of the content,
|
|
94
|
-
// and 'isHidden' is just used for display none
|
|
95
|
-
return {
|
|
96
|
-
isOpen,
|
|
97
|
-
toggleId: this.getUid(),
|
|
98
|
-
contentId: this.getUid(),
|
|
99
|
-
contentHeight: isOpen ? 'auto' : '0px',
|
|
100
|
-
contentOpacity: this.transitionFades && !isOpen ? 0 : 1,
|
|
101
|
-
transitionsDisabled: false,
|
|
102
|
-
transitionTimeout: Math.ceil(this.getUnitlessDuration(this.transitionDuration) + 500),
|
|
103
|
-
isTransitioning: false,
|
|
104
|
-
isHidden: isOpen ? false : true,
|
|
105
|
-
onCleanupTransition: null, // Transitions add function here used if needing to cancel
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
},
|
|
109
|
-
computed: {
|
|
110
|
-
contentStyles() {
|
|
111
|
-
if (this.transitionHeight) {
|
|
112
|
-
return {
|
|
113
|
-
overflow: 'hidden',
|
|
114
|
-
height: this.contentHeight,
|
|
115
|
-
transitionDuration: this.transitionDuration,
|
|
116
|
-
transitionTiming: this.transitionTiming,
|
|
117
|
-
opacity: this.contentOpacity,
|
|
118
|
-
transitionProperty: this.transitionsDisabled ? "none" : `height${ this.transitionFades ? ",opacity" : "" }`
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
return {};
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
methods: {
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Function used to toggle the collapsible
|
|
128
|
-
*/
|
|
129
|
-
toggle() {
|
|
130
|
-
console.log('Toggle Click', this.isOpen);
|
|
131
|
-
if (this.isOpen && !this.isTransitioning) {
|
|
132
|
-
this.close();
|
|
133
|
-
} else {
|
|
134
|
-
this.open();
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
handleEscape() {
|
|
138
|
-
if (this.closeOnEscape && this.isOpen) {
|
|
139
|
-
this.close();
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
removeTransition(canceled) {
|
|
143
|
-
if (this.onCleanupTransition) this.onCleanupTransition();
|
|
144
|
-
this.isTransitioning = false;
|
|
145
|
-
this.onCleanupTransition = null;
|
|
146
|
-
},
|
|
147
|
-
/**
|
|
148
|
-
* Function that will handle setting the styles in a way that allows for
|
|
149
|
-
* transitioning from display: none to height: auto. With optional fade.
|
|
150
|
-
*/
|
|
151
|
-
open() {
|
|
152
|
-
// If there are no animations
|
|
153
|
-
if (!this.transitionHeight) {
|
|
154
|
-
this.isOpen = true;
|
|
155
|
-
this.isHidden = false;
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
this.removeTransition(true);
|
|
160
|
-
|
|
161
|
-
let tid;
|
|
162
|
-
const element = this.$refs.content;
|
|
163
|
-
// When finished clear the fallback and set the height to auto
|
|
164
|
-
// incase something else on the page changes this elements layout/height,
|
|
165
|
-
// remove the one time listener, and call the ending callback
|
|
166
|
-
// and user callbacks
|
|
167
|
-
const complete = () => {
|
|
168
|
-
this.contentHeight = 'auto';
|
|
169
|
-
this.isOpen = true;
|
|
170
|
-
this.removeTransition();
|
|
171
|
-
this.$emit('collapsible-opened');
|
|
172
|
-
};
|
|
173
|
-
this.onCleanupTransition = () => {
|
|
174
|
-
clearTimeout(tid);
|
|
175
|
-
element.removeEventListener('transitionend', complete);
|
|
176
|
-
};
|
|
177
|
-
// Listen for the end of the transition we are about to trigger on
|
|
178
|
-
element.addEventListener('transitionend', complete);
|
|
179
|
-
this.isHidden = false;
|
|
180
|
-
this.isTransitioning = true;
|
|
181
|
-
this.$emit('collapsible-opening');
|
|
182
|
-
// Waiting for vue to update the elements style.display from none
|
|
183
|
-
// so we can measure it's hidden height, set it statically,
|
|
184
|
-
// to then trigger the transition to that static height
|
|
185
|
-
this.$nextTick(() => {
|
|
186
|
-
this.contentHeight = element.scrollHeight + 'px';
|
|
187
|
-
if (this.transitionFades) this.contentOpacity = 1;
|
|
188
|
-
// Setting a fallback incase anything interupts the browsers
|
|
189
|
-
// ability to fire the 'transitionend' event, the element will
|
|
190
|
-
// still be functional
|
|
191
|
-
tid = setTimeout(complete, this.transitionTimeout);
|
|
192
|
-
});
|
|
193
|
-
},
|
|
194
|
-
/**
|
|
195
|
-
* Function that will handle setting the styles in a way that allows for
|
|
196
|
-
* transitioning from height: auto to display: none
|
|
197
|
-
*/
|
|
198
|
-
close() {
|
|
199
|
-
// If there are no animations
|
|
200
|
-
if (!this.transitionHeight) {
|
|
201
|
-
this.isOpen = false;
|
|
202
|
-
this.isHidden = true;
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
this.removeTransition(true);
|
|
207
|
-
|
|
208
|
-
let tid;
|
|
209
|
-
// Measure the elements height, to set it from auto
|
|
210
|
-
// to static so that we can transtion it
|
|
211
|
-
const element = this.$refs.content;
|
|
212
|
-
const height = element.scrollHeight;
|
|
213
|
-
// Set the elements height to a static value so we can transition it
|
|
214
|
-
// then on next tick when that value is set, start the transition
|
|
215
|
-
const setup = () => {
|
|
216
|
-
element.addEventListener('transitionend', complete);
|
|
217
|
-
this.contentHeight = height + 'px';
|
|
218
|
-
this.$nextTick(init);
|
|
219
|
-
};
|
|
220
|
-
// Enable transitions and then on next update start it
|
|
221
|
-
// by setting the height to 0
|
|
222
|
-
const init = () => {
|
|
223
|
-
this.transitionsDisabled = false;
|
|
224
|
-
this.$nextTick(() => {
|
|
225
|
-
requestAnimationFrame(transition);
|
|
226
|
-
});
|
|
227
|
-
};
|
|
228
|
-
const transition = () => {
|
|
229
|
-
this.contentHeight = '0px';
|
|
230
|
-
if (this.transitionFades) this.contentOpacity = 0;
|
|
231
|
-
};
|
|
232
|
-
const complete = () => {
|
|
233
|
-
this.isOpen = false;
|
|
234
|
-
this.isHidden = true;
|
|
235
|
-
this.removeTransition();
|
|
236
|
-
this.$emit('collapsible-closed');
|
|
237
|
-
};
|
|
238
|
-
const fallback = () => {
|
|
239
|
-
transition();
|
|
240
|
-
complete();
|
|
241
|
-
};
|
|
242
|
-
this.onCleanupTransition = () => {
|
|
243
|
-
clearTimeout(tid);
|
|
244
|
-
element.removeEventListener('transitionend', complete);
|
|
245
|
-
};
|
|
246
|
-
// Temporarily disable the transitions on the element,
|
|
247
|
-
// on next tick when transistions are disabled (removing transiton-property)
|
|
248
|
-
// attach the fallback and setup the transition
|
|
249
|
-
this.transitionsDisabled = true;
|
|
250
|
-
this.isTransitioning = true;
|
|
251
|
-
this.$emit('collapsible-closing');
|
|
252
|
-
this.$nextTick(() => {
|
|
253
|
-
requestAnimationFrame(setup);
|
|
254
|
-
tid = setTimeout(fallback, this.transitionTimeout);
|
|
255
|
-
});
|
|
256
|
-
},
|
|
257
|
-
/**
|
|
258
|
-
* Returns unitless duration
|
|
259
|
-
* @param {String} duration - Css duration string
|
|
260
|
-
*/
|
|
261
|
-
getUnitlessDuration(value) {
|
|
262
|
-
// Grab only first value in string
|
|
263
|
-
let duration = parseFloat( value.split(',')[0] );
|
|
264
|
-
// If not milliseconds we need to convert assumed if
|
|
265
|
-
// not milliseconds it's seconds (only other valid duration)
|
|
266
|
-
return value.includes('ms') ? duration : duration * 1000;
|
|
267
|
-
},
|
|
268
|
-
/**
|
|
269
|
-
* Recursive function to generate and test id uniqueness
|
|
270
|
-
*/
|
|
271
|
-
getUid() {
|
|
272
|
-
const id = `Ulu-C-${ ++uid }`;
|
|
273
|
-
return document.getElementById(id) ? this.getUid() : id;
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
}
|
|
277
|
-
</script>
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div id="app">
|
|
3
|
-
<h1>Vue Collapsibles</h1>
|
|
4
|
-
<h2>Without Transitions (closes on escape)</h2>
|
|
5
|
-
<CollapsibleRegion close-on-escape>
|
|
6
|
-
<template #toggle="{ isOpen }">
|
|
7
|
-
Click Me {{ isOpen }}
|
|
8
|
-
</template>
|
|
9
|
-
This is the hidden content
|
|
10
|
-
</CollapsibleRegion>
|
|
11
|
-
<h3>Start Visible</h3>
|
|
12
|
-
<CollapsibleRegion start-open>
|
|
13
|
-
<template #toggle>
|
|
14
|
-
Click Me
|
|
15
|
-
</template>
|
|
16
|
-
This is the hidden content
|
|
17
|
-
</CollapsibleRegion>
|
|
18
|
-
<h2>With Transitions</h2>
|
|
19
|
-
<CollapsibleRegion
|
|
20
|
-
transition-height
|
|
21
|
-
transition-fades
|
|
22
|
-
transition-duration="200ms"
|
|
23
|
-
>
|
|
24
|
-
<template #toggle>
|
|
25
|
-
Click Me
|
|
26
|
-
</template>
|
|
27
|
-
<p>
|
|
28
|
-
{{ placeholder }}
|
|
29
|
-
</p>
|
|
30
|
-
<p>
|
|
31
|
-
{{ placeholder }}
|
|
32
|
-
</p>
|
|
33
|
-
</CollapsibleRegion>
|
|
34
|
-
<CollapsibleRegion
|
|
35
|
-
transition-height
|
|
36
|
-
transition-fades
|
|
37
|
-
transition-duration="200ms"
|
|
38
|
-
>
|
|
39
|
-
<template #toggle>
|
|
40
|
-
Click Me
|
|
41
|
-
</template>
|
|
42
|
-
<p>
|
|
43
|
-
{{ placeholder }}
|
|
44
|
-
</p>
|
|
45
|
-
<p>
|
|
46
|
-
{{ placeholder }}
|
|
47
|
-
</p>
|
|
48
|
-
</CollapsibleRegion>
|
|
49
|
-
</div>
|
|
50
|
-
</template>
|
|
51
|
-
|
|
52
|
-
<script>
|
|
53
|
-
import CollapsibleRegion from '@/CollapsibleRegion.vue';
|
|
54
|
-
// import placeholder from "@/assets/text-placeholder.js";
|
|
55
|
-
export default {
|
|
56
|
-
name: 'App',
|
|
57
|
-
components: {
|
|
58
|
-
CollapsibleRegion
|
|
59
|
-
},
|
|
60
|
-
data() {
|
|
61
|
-
return {
|
|
62
|
-
placeholder: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque quam eget dui fringilla, non fringilla mi eleifend. Vivamus non ex urna. Pellentesque lacinia tortor id dapibus volutpat. Morbi et ante non tortor eleifend dapibus. Ut vitae pulvinar sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam sollicitudin, ante sed venenatis vestibulum, est elit dapibus ex, sed vulputate leo ante et ipsum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam consequat imperdiet ligula facilisis gravida."
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
</script>
|
|
67
|
-
|
|
68
|
-
<style lang="scss">
|
|
69
|
-
body, html {
|
|
70
|
-
padding: 0;
|
|
71
|
-
margin: 0;
|
|
72
|
-
background-color: rgb(23, 22, 27);
|
|
73
|
-
}
|
|
74
|
-
#app {
|
|
75
|
-
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
76
|
-
-webkit-font-smoothing: antialiased;
|
|
77
|
-
-moz-osx-font-smoothing: grayscale;
|
|
78
|
-
text-align: center;
|
|
79
|
-
color: #2c3e50;
|
|
80
|
-
margin-top: 60px;
|
|
81
|
-
color: rgba(255, 255, 255, 0.795);
|
|
82
|
-
}
|
|
83
|
-
.CollapsibleRegion {
|
|
84
|
-
margin: 3em;
|
|
85
|
-
}
|
|
86
|
-
// background-color: rgb(224, 226, 226);
|
|
87
|
-
.CollapsibleRegion__toggle {
|
|
88
|
-
padding: 1em 3em;
|
|
89
|
-
// outline: none;
|
|
90
|
-
border: none;
|
|
91
|
-
background-color: rgb(29, 103, 199);
|
|
92
|
-
|
|
93
|
-
width: 100%;
|
|
94
|
-
font-weight: bold;
|
|
95
|
-
}
|
|
96
|
-
.CollapsibleRegion__content-inner {
|
|
97
|
-
padding: 3em;
|
|
98
|
-
background-color: rgb(39, 36, 49);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
</style>
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Dependencies:
|
|
3
|
-
- vue-click-outside (npm)
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<div
|
|
7
|
-
class="dropdown"
|
|
8
|
-
:class="{
|
|
9
|
-
'dropdown--select-style' : selectStyle,
|
|
10
|
-
'dropdown--select-style-inline' : selectStyleInline
|
|
11
|
-
}"
|
|
12
|
-
:data-dropdown-state="currentState"
|
|
13
|
-
v-click-outside="hide"
|
|
14
|
-
>
|
|
15
|
-
<span
|
|
16
|
-
class="dropdown__toggle"
|
|
17
|
-
id="toggleId"
|
|
18
|
-
:data-dropdown-state="currentState"
|
|
19
|
-
:aria-controls="contentId"
|
|
20
|
-
:aria-expanded="isOpen"
|
|
21
|
-
@click="toggle"
|
|
22
|
-
>
|
|
23
|
-
<span class="dropdown__toggle-content">
|
|
24
|
-
<slot name="button" />
|
|
25
|
-
</span>
|
|
26
|
-
<span class="dropdown__toggle-icon" v-if="selectStyle">
|
|
27
|
-
<i class="dropdown__toggle-icon-glyph fas fa-caret-down"></i>
|
|
28
|
-
</span>
|
|
29
|
-
</span>
|
|
30
|
-
<div
|
|
31
|
-
class="dropdown__content"
|
|
32
|
-
:id="contentId"
|
|
33
|
-
:data-dropdown-state="currentState"
|
|
34
|
-
:data-dropdown-position-x="positionX"
|
|
35
|
-
:data-dropdown-position-y="positionY"
|
|
36
|
-
:aria-labeledby="toggleId"
|
|
37
|
-
:aria-hidden="!isOpen"
|
|
38
|
-
:style="{ width: contentWidth }"
|
|
39
|
-
>
|
|
40
|
-
<slot />
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</template>
|
|
44
|
-
|
|
45
|
-
<script>
|
|
46
|
-
import ClickOutside from 'vue-click-outside';
|
|
47
|
-
|
|
48
|
-
export default {
|
|
49
|
-
name: 'dropdown',
|
|
50
|
-
props: {
|
|
51
|
-
positionX: {
|
|
52
|
-
type: String,
|
|
53
|
-
default: 'center'
|
|
54
|
-
},
|
|
55
|
-
positionY: {
|
|
56
|
-
type: String,
|
|
57
|
-
default: 'center'
|
|
58
|
-
},
|
|
59
|
-
selectStyle: {
|
|
60
|
-
required: false,
|
|
61
|
-
type: Boolean,
|
|
62
|
-
default: false
|
|
63
|
-
},
|
|
64
|
-
selectStyleInline: {
|
|
65
|
-
required: false,
|
|
66
|
-
type: Boolean,
|
|
67
|
-
default: false
|
|
68
|
-
},
|
|
69
|
-
contentWidth: {
|
|
70
|
-
type: String,
|
|
71
|
-
required: false,
|
|
72
|
-
default: '200px'
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
directives: {
|
|
76
|
-
ClickOutside
|
|
77
|
-
},
|
|
78
|
-
data() {
|
|
79
|
-
return {
|
|
80
|
-
isOpen: false
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
computed: {
|
|
84
|
-
id() {
|
|
85
|
-
return this._uid;
|
|
86
|
-
},
|
|
87
|
-
currentState() {
|
|
88
|
-
return this.isOpen ? 'open' : 'closed';
|
|
89
|
-
},
|
|
90
|
-
toggleId() {
|
|
91
|
-
return `dropown__toggle--id-${ this.id }`;
|
|
92
|
-
},
|
|
93
|
-
contentId() {
|
|
94
|
-
return `dropown__content--id-${ this.id }`;
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
methods: {
|
|
98
|
-
toggle() {
|
|
99
|
-
this.isOpen = !this.isOpen;
|
|
100
|
-
},
|
|
101
|
-
hide() {
|
|
102
|
-
this.isOpen = false;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
</script>
|
|
107
|
-
|
|
108
|
-
<style lang="scss">
|
|
109
|
-
$dropdown--border-radius: 6px !default;
|
|
110
|
-
$dropdown--color: black !default;
|
|
111
|
-
$dropdown--font-size: 1rem !default;
|
|
112
|
-
.dropdown {
|
|
113
|
-
position: relative;
|
|
114
|
-
|
|
115
|
-
display: inline-block;
|
|
116
|
-
&--select-style {
|
|
117
|
-
padding: 0.35em 1em;
|
|
118
|
-
background-color: white;
|
|
119
|
-
border-radius: $dropdown--border-radius;
|
|
120
|
-
color: $dropdown--color;
|
|
121
|
-
margin: 0.5em 0;
|
|
122
|
-
max-width: 15em;
|
|
123
|
-
display: inline-block;
|
|
124
|
-
}
|
|
125
|
-
&--select-style-inline {
|
|
126
|
-
background-color: transparent;
|
|
127
|
-
font-size: $dropdown--font-size;
|
|
128
|
-
color: inherit;
|
|
129
|
-
}
|
|
130
|
-
&__toggle {
|
|
131
|
-
cursor: pointer;
|
|
132
|
-
.dropdown--select-style & {
|
|
133
|
-
display: flex;
|
|
134
|
-
justify-content: space-between;
|
|
135
|
-
}
|
|
136
|
-
&-content {
|
|
137
|
-
// display: block;
|
|
138
|
-
// flex: 1 1;
|
|
139
|
-
}
|
|
140
|
-
&-icon {
|
|
141
|
-
display: block;
|
|
142
|
-
margin-left: 1em;
|
|
143
|
-
.dropdown--select-style & {
|
|
144
|
-
margin-left: 0.5em;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
&__content {
|
|
149
|
-
display: none;
|
|
150
|
-
position: absolute;
|
|
151
|
-
z-index: 2;
|
|
152
|
-
top: 100%;
|
|
153
|
-
margin-top: 0.3rem;
|
|
154
|
-
background-color: white;
|
|
155
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.4);
|
|
156
|
-
border-radius: 6px;
|
|
157
|
-
// overflow: auto;
|
|
158
|
-
max-height: 300px;
|
|
159
|
-
&[data-dropdown-position-x="center"] {
|
|
160
|
-
left: 50%;
|
|
161
|
-
transform: translateX(-50%);
|
|
162
|
-
}
|
|
163
|
-
&[data-dropdown-position-x="left"] {
|
|
164
|
-
left: 0;
|
|
165
|
-
}
|
|
166
|
-
&[data-dropdown-position-x="right"] {
|
|
167
|
-
right: 0;
|
|
168
|
-
}
|
|
169
|
-
&[data-dropdown-position-y="top"] {
|
|
170
|
-
bottom: 100%;
|
|
171
|
-
top: auto;
|
|
172
|
-
margin-bottom: 0.3rem;
|
|
173
|
-
}
|
|
174
|
-
&[data-dropdown-state="open"] {
|
|
175
|
-
display: block;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Contextually style certain global styles
|
|
180
|
-
.button {
|
|
181
|
-
margin: 0;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
</style>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- Note: The top level is used for click outside -->
|
|
3
|
-
<div class="modal">
|
|
4
|
-
<div class="modal__panel">
|
|
5
|
-
<div class="modal__header" id="modal__label">
|
|
6
|
-
<span
|
|
7
|
-
v-if="icon"
|
|
8
|
-
class="modal__icon"
|
|
9
|
-
:data-icon-name="icon"
|
|
10
|
-
aria-hidden="true"
|
|
11
|
-
></span>
|
|
12
|
-
<!-- Optionally use the title (pre-templated with prop) or pass markup using slot -->
|
|
13
|
-
<span
|
|
14
|
-
class="modal__title"
|
|
15
|
-
v-if="title && title.length" key="title"
|
|
16
|
-
>
|
|
17
|
-
{{ title }}
|
|
18
|
-
</span>
|
|
19
|
-
<span
|
|
20
|
-
class="modal__title"
|
|
21
|
-
v-else key="title-slotted"
|
|
22
|
-
>
|
|
23
|
-
<slot name="title"></slot>
|
|
24
|
-
</span>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="modal__body">
|
|
27
|
-
<!-- Default Slot -->
|
|
28
|
-
<slot></slot>
|
|
29
|
-
</div>
|
|
30
|
-
<div class="modal__footer">
|
|
31
|
-
<slot name="footer"></slot>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</template>
|
|
36
|
-
|
|
37
|
-
<script>
|
|
38
|
-
|
|
39
|
-
export default {
|
|
40
|
-
name: 'modal',
|
|
41
|
-
props: {
|
|
42
|
-
title: String,
|
|
43
|
-
icon: String
|
|
44
|
-
},
|
|
45
|
-
}
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<style lang="scss">
|
|
49
|
-
</style>
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Version: 1.0.3
|
|
3
|
-
|
|
4
|
-
Changes:
|
|
5
|
-
- 1.0.1 | CSS Tweaks
|
|
6
|
-
- 1.0.3 | Optional Click Outside Close
|
|
7
|
-
-->
|
|
8
|
-
<template>
|
|
9
|
-
<div class="modals" v-if="Boolean(this.$root.active)">
|
|
10
|
-
<div class="modals__back-drop" @click.self.prevent="closeModals">
|
|
11
|
-
<div
|
|
12
|
-
class="modals__modal"
|
|
13
|
-
id="modals__modal"
|
|
14
|
-
role="dialog"
|
|
15
|
-
:aria-labelledby="labeledBy"
|
|
16
|
-
>
|
|
17
|
-
<component
|
|
18
|
-
v-if="this.$root.active"
|
|
19
|
-
:is="this.$root.active.component"
|
|
20
|
-
@hook:mounted="modalMounted"
|
|
21
|
-
@hook:destroyed="modalDestroy"
|
|
22
|
-
/>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<script>
|
|
29
|
-
export default {
|
|
30
|
-
name: 'modals',
|
|
31
|
-
data() {
|
|
32
|
-
return {
|
|
33
|
-
pageScrollY: 0
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
computed: {
|
|
37
|
-
labeledBy() {
|
|
38
|
-
return this.$root.active && this.$root.active.labeledBy;
|
|
39
|
-
},
|
|
40
|
-
// modalState() {
|
|
41
|
-
// return this.$root.active ? 'open' : 'closed'
|
|
42
|
-
// }
|
|
43
|
-
},
|
|
44
|
-
methods: {
|
|
45
|
-
modalMounted() {
|
|
46
|
-
this.pageScrollY = window.pageYOffset || document.documentElement.scrollTop;
|
|
47
|
-
window.addEventListener('scroll', this.disableScroll);
|
|
48
|
-
this.$nextTick(() => {
|
|
49
|
-
this.$root.$emit('modal-mount');
|
|
50
|
-
});
|
|
51
|
-
},
|
|
52
|
-
modalDestroy() {
|
|
53
|
-
window.removeEventListener('scroll', this.disableScroll);
|
|
54
|
-
this.$nextTick(() => {
|
|
55
|
-
this.$root.$emit('modal-destroy');
|
|
56
|
-
});
|
|
57
|
-
},
|
|
58
|
-
closeModals() {
|
|
59
|
-
if (this.$root.active.clickOutsideCloses) {
|
|
60
|
-
this.$root.close();
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
disableScroll() {
|
|
64
|
-
window.scrollTo(0, this.scrollTop);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
</script>
|
|
69
|
-
|
|
70
|
-
<style lang="scss">
|
|
71
|
-
.modals {
|
|
72
|
-
box-sizing: border-box;
|
|
73
|
-
position: fixed;
|
|
74
|
-
left: 0;
|
|
75
|
-
top: 0;
|
|
76
|
-
width: 100%;
|
|
77
|
-
height: 100vh;
|
|
78
|
-
background: rgba(black, 0.5);
|
|
79
|
-
z-index: 1000;
|
|
80
|
-
opacity: 1;
|
|
81
|
-
display: flex;
|
|
82
|
-
backdrop-filter: blur(4px);
|
|
83
|
-
}
|
|
84
|
-
.modals__back-drop {
|
|
85
|
-
flex: 1 1;
|
|
86
|
-
box-sizing: border-box;
|
|
87
|
-
// padding: 1rem;
|
|
88
|
-
display: flex;
|
|
89
|
-
align-items: center;
|
|
90
|
-
justify-content: center;
|
|
91
|
-
}
|
|
92
|
-
.modals__modal {
|
|
93
|
-
// flex: 0 0;
|
|
94
|
-
box-sizing: border-box;
|
|
95
|
-
// background: white;
|
|
96
|
-
position: relative;
|
|
97
|
-
// max-height: 75%;
|
|
98
|
-
// transform: translateY((25% / 2)); // Half of 10% left
|
|
99
|
-
// border-radius: 10px;
|
|
100
|
-
// overflow: auto;
|
|
101
|
-
// box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.45);
|
|
102
|
-
}
|
|
103
|
-
</style>
|