@eturnity/eturnity_reusable_components 7.8.1-EPDM-8441.1 → 7.8.1-EPDM-9696.1

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 (284) hide show
  1. package/.eslintrc +18 -0
  2. package/.prettierrc +6 -6
  3. package/.storybook/main.js +8 -8
  4. package/.storybook/preview.js +46 -46
  5. package/README.md +29 -29
  6. package/babel.config.js +4 -4
  7. package/package.json +66 -66
  8. package/postcss.config.js +6 -6
  9. package/public/index.html +17 -17
  10. package/src/App.vue +246 -247
  11. package/src/assets/icons/arrow_down.svg +3 -3
  12. package/src/assets/icons/arrow_up_red.svg +3 -3
  13. package/src/assets/icons/black_spinner.svg +35 -35
  14. package/src/assets/icons/delete_icon.svg +11 -11
  15. package/src/assets/icons/delete_icon_gray.svg +11 -11
  16. package/src/assets/icons/drag_icon.svg +8 -8
  17. package/src/assets/icons/external_icon.svg +6 -6
  18. package/src/assets/icons/language_icon.svg +6 -6
  19. package/src/assets/icons/pdf_icon.svg +6 -6
  20. package/src/assets/icons/plus_button.svg +4 -4
  21. package/src/assets/icons/search_icon_black.svg +3 -3
  22. package/src/assets/icons/subposition_icon.svg +3 -3
  23. package/src/assets/icons/subposition_marker.svg +3 -3
  24. package/src/assets/icons/warning_icon.svg +3 -3
  25. package/src/assets/svgIcons/2d_active.svg +7 -7
  26. package/src/assets/svgIcons/2d_inactive.svg +8 -8
  27. package/src/assets/svgIcons/3d_active.svg +7 -7
  28. package/src/assets/svgIcons/3d_inactive.svg +8 -8
  29. package/src/assets/svgIcons/_readme.md +7 -7
  30. package/src/assets/svgIcons/accept.svg +5 -5
  31. package/src/assets/svgIcons/activate_panels_active.svg +22 -22
  32. package/src/assets/svgIcons/activate_panels_inactive.svg +20 -20
  33. package/src/assets/svgIcons/add_icon-1.svg +3 -3
  34. package/src/assets/svgIcons/add_icon.svg +4 -4
  35. package/src/assets/svgIcons/address_book.svg +3 -3
  36. package/src/assets/svgIcons/after_sale_as_a_service.svg +6 -6
  37. package/src/assets/svgIcons/all_good.svg +3 -3
  38. package/src/assets/svgIcons/angle_active.svg +5 -5
  39. package/src/assets/svgIcons/angle_inactive.svg +4 -4
  40. package/src/assets/svgIcons/area_active.svg +11 -11
  41. package/src/assets/svgIcons/area_inactive.svg +26 -26
  42. package/src/assets/svgIcons/areas_tool.svg +14 -14
  43. package/src/assets/svgIcons/arrow_down.svg +3 -3
  44. package/src/assets/svgIcons/arrow_left.svg +4 -4
  45. package/src/assets/svgIcons/arrow_right.svg +4 -4
  46. package/src/assets/svgIcons/arrow_up.svg +3 -3
  47. package/src/assets/svgIcons/attachment.svg +3 -3
  48. package/src/assets/svgIcons/base_layer.svg +3 -3
  49. package/src/assets/svgIcons/battery.svg +3 -3
  50. package/src/assets/svgIcons/bell.svg +3 -3
  51. package/src/assets/svgIcons/bold.svg +3 -3
  52. package/src/assets/svgIcons/bom.svg +3 -3
  53. package/src/assets/svgIcons/bom_generation.svg +10 -10
  54. package/src/assets/svgIcons/bookmaker.svg +3 -3
  55. package/src/assets/svgIcons/bubble.svg +3 -3
  56. package/src/assets/svgIcons/bug.svg +5 -5
  57. package/src/assets/svgIcons/bullet_list.svg +8 -8
  58. package/src/assets/svgIcons/calendar.svg +7 -7
  59. package/src/assets/svgIcons/calendar_icon.svg +7 -7
  60. package/src/assets/svgIcons/call.svg +3 -3
  61. package/src/assets/svgIcons/camera.svg +3 -3
  62. package/src/assets/svgIcons/car.svg +3 -3
  63. package/src/assets/svgIcons/cart.svg +3 -3
  64. package/src/assets/svgIcons/checkbox.svg +3 -3
  65. package/src/assets/svgIcons/clear_formatting.svg +7 -7
  66. package/src/assets/svgIcons/clickable_info.svg +4 -4
  67. package/src/assets/svgIcons/clip.svg +3 -3
  68. package/src/assets/svgIcons/clock.svg +17 -17
  69. package/src/assets/svgIcons/close_for_modals,_tool_tips.svg +4 -4
  70. package/src/assets/svgIcons/co_branding.svg +5 -5
  71. package/src/assets/svgIcons/collapse.svg +4 -4
  72. package/src/assets/svgIcons/collections.svg +3 -3
  73. package/src/assets/svgIcons/component_library.svg +7 -7
  74. package/src/assets/svgIcons/context_menu-1.svg +6 -6
  75. package/src/assets/svgIcons/context_menu-2.svg +5 -5
  76. package/src/assets/svgIcons/context_menu.svg +5 -5
  77. package/src/assets/svgIcons/context_menu_tabs.svg +5 -5
  78. package/src/assets/svgIcons/cross.svg +4 -4
  79. package/src/assets/svgIcons/current_variant.svg +4 -4
  80. package/src/assets/svgIcons/dashboard.svg +3 -3
  81. package/src/assets/svgIcons/deadline.svg +4 -4
  82. package/src/assets/svgIcons/deal_flow.svg +5 -5
  83. package/src/assets/svgIcons/delete.svg +4 -4
  84. package/src/assets/svgIcons/delete_area_active.svg +16 -16
  85. package/src/assets/svgIcons/delete_area_inactive.svg +15 -15
  86. package/src/assets/svgIcons/direction_active-1.svg +12 -12
  87. package/src/assets/svgIcons/direction_active.svg +5 -5
  88. package/src/assets/svgIcons/direction_arrow.svg +4 -4
  89. package/src/assets/svgIcons/direction_inactive.svg +4 -4
  90. package/src/assets/svgIcons/dislike.svg +3 -3
  91. package/src/assets/svgIcons/distance_tool.svg +8 -8
  92. package/src/assets/svgIcons/distances_active.svg +9 -9
  93. package/src/assets/svgIcons/distances_inactive.svg +8 -8
  94. package/src/assets/svgIcons/distort_tool.svg +10 -10
  95. package/src/assets/svgIcons/distort_tool2.svg +16 -16
  96. package/src/assets/svgIcons/document.svg +3 -3
  97. package/src/assets/svgIcons/documents.svg +4 -4
  98. package/src/assets/svgIcons/downarrow.svg +3 -3
  99. package/src/assets/svgIcons/download.svg +4 -4
  100. package/src/assets/svgIcons/draggable_corner.svg +5 -5
  101. package/src/assets/svgIcons/draw_tool.svg +3 -3
  102. package/src/assets/svgIcons/duplicate-1.svg +8 -8
  103. package/src/assets/svgIcons/duplicate-2.svg +5 -5
  104. package/src/assets/svgIcons/duplicate.svg +4 -4
  105. package/src/assets/svgIcons/e-mobility_configurator.svg +6 -6
  106. package/src/assets/svgIcons/e_signature.svg +5 -5
  107. package/src/assets/svgIcons/edit_button.svg +3 -3
  108. package/src/assets/svgIcons/email.svg +3 -3
  109. package/src/assets/svgIcons/ems-1.svg +3 -3
  110. package/src/assets/svgIcons/ems.svg +3 -3
  111. package/src/assets/svgIcons/end_of_the_list.svg +5 -5
  112. package/src/assets/svgIcons/erase.svg +4 -4
  113. package/src/assets/svgIcons/external_icon.svg +5 -5
  114. package/src/assets/svgIcons/fav_icon.svg +4 -4
  115. package/src/assets/svgIcons/finance.svg +3 -3
  116. package/src/assets/svgIcons/financing_for_pv-1.svg +5 -5
  117. package/src/assets/svgIcons/financing_for_pv-2.svg +3 -3
  118. package/src/assets/svgIcons/financing_for_pv.svg +6 -6
  119. package/src/assets/svgIcons/finish-1.svg +4 -4
  120. package/src/assets/svgIcons/finish.svg +3 -3
  121. package/src/assets/svgIcons/flatten.svg +11 -11
  122. package/src/assets/svgIcons/folder.svg +3 -3
  123. package/src/assets/svgIcons/free_technology.svg +5 -5
  124. package/src/assets/svgIcons/heat_calc.svg +7 -7
  125. package/src/assets/svgIcons/house.svg +3 -3
  126. package/src/assets/svgIcons/info.svg +3 -3
  127. package/src/assets/svgIcons/initial_situation.svg +3 -3
  128. package/src/assets/svgIcons/integrations.svg +3 -3
  129. package/src/assets/svgIcons/intro-tour-1.svg +3 -3
  130. package/src/assets/svgIcons/intro-tour.svg +3 -3
  131. package/src/assets/svgIcons/inverter-1.svg +5 -5
  132. package/src/assets/svgIcons/inverter.svg +3 -3
  133. package/src/assets/svgIcons/italic.svg +3 -3
  134. package/src/assets/svgIcons/key.svg +3 -3
  135. package/src/assets/svgIcons/layers_close.svg +4 -4
  136. package/src/assets/svgIcons/layers_open.svg +4 -4
  137. package/src/assets/svgIcons/lead_marketplace.svg +6 -6
  138. package/src/assets/svgIcons/lead_provider.svg +4 -4
  139. package/src/assets/svgIcons/length_in_2d_active.svg +12 -12
  140. package/src/assets/svgIcons/length_in_2d_inctive.svg +13 -13
  141. package/src/assets/svgIcons/light_bulb.svg +3 -3
  142. package/src/assets/svgIcons/like.svg +3 -3
  143. package/src/assets/svgIcons/line_graph.svg +3 -3
  144. package/src/assets/svgIcons/local_subsidies.svg +18 -18
  145. package/src/assets/svgIcons/location.svg +3 -3
  146. package/src/assets/svgIcons/lock.svg +3 -3
  147. package/src/assets/svgIcons/logout.svg +3 -3
  148. package/src/assets/svgIcons/loop.svg +3 -3
  149. package/src/assets/svgIcons/lunch.svg +4 -4
  150. package/src/assets/svgIcons/magic_tool.svg +6 -6
  151. package/src/assets/svgIcons/map_icon.svg +5 -5
  152. package/src/assets/svgIcons/map_settings.svg +3 -3
  153. package/src/assets/svgIcons/margin_tool.svg +4 -4
  154. package/src/assets/svgIcons/meeting.svg +6 -6
  155. package/src/assets/svgIcons/move_copy.svg +4 -4
  156. package/src/assets/svgIcons/new_area_inactive.svg +11 -11
  157. package/src/assets/svgIcons/next.svg +4 -4
  158. package/src/assets/svgIcons/not_equal_to.svg +3 -3
  159. package/src/assets/svgIcons/numbered_list.svg +6 -6
  160. package/src/assets/svgIcons/obstacle_tool.svg +9 -9
  161. package/src/assets/svgIcons/obstacle_tool_origin.svg +3 -3
  162. package/src/assets/svgIcons/offset_tool.svg +8 -8
  163. package/src/assets/svgIcons/outline_tool.svg +11 -11
  164. package/src/assets/svgIcons/pan_tool.svg +12 -12
  165. package/src/assets/svgIcons/panels_tool.svg +8 -8
  166. package/src/assets/svgIcons/pen_tool.svg +4 -4
  167. package/src/assets/svgIcons/picker_tool.svg +4 -4
  168. package/src/assets/svgIcons/picture.svg +3 -3
  169. package/src/assets/svgIcons/pin.svg +5 -5
  170. package/src/assets/svgIcons/presentation.svg +3 -3
  171. package/src/assets/svgIcons/previous.svg +4 -4
  172. package/src/assets/svgIcons/profile-1.svg +4 -4
  173. package/src/assets/svgIcons/profile.svg +4 -4
  174. package/src/assets/svgIcons/profitability.svg +3 -3
  175. package/src/assets/svgIcons/project_analysis.svg +4 -4
  176. package/src/assets/svgIcons/project_settings.svg +4 -4
  177. package/src/assets/svgIcons/pv.svg +3 -3
  178. package/src/assets/svgIcons/quotations.svg +6 -6
  179. package/src/assets/svgIcons/redo.svg +6 -6
  180. package/src/assets/svgIcons/resizer.svg +5 -5
  181. package/src/assets/svgIcons/roof_layer.svg +3 -3
  182. package/src/assets/svgIcons/rotate_tool.svg +3 -3
  183. package/src/assets/svgIcons/rotate_view.svg +5 -5
  184. package/src/assets/svgIcons/ruler_tool.svg +3 -3
  185. package/src/assets/svgIcons/run_simulation.svg +3 -3
  186. package/src/assets/svgIcons/scaling_tool.svg +8 -8
  187. package/src/assets/svgIcons/search.svg +3 -3
  188. package/src/assets/svgIcons/security.svg +3 -3
  189. package/src/assets/svgIcons/settings.svg +3 -3
  190. package/src/assets/svgIcons/show_in_a_new_tab.svg +12 -12
  191. package/src/assets/svgIcons/smartphone.svg +4 -4
  192. package/src/assets/svgIcons/solar_calc.svg +13 -13
  193. package/src/assets/svgIcons/sorting.svg +4 -4
  194. package/src/assets/svgIcons/start_of_the_list.svg +5 -5
  195. package/src/assets/svgIcons/strikethrough.svg +4 -4
  196. package/src/assets/svgIcons/subscriptions.svg +3 -3
  197. package/src/assets/svgIcons/subsidies-1.svg +5 -5
  198. package/src/assets/svgIcons/subsidies-2.svg +3 -3
  199. package/src/assets/svgIcons/subsidies.svg +3 -3
  200. package/src/assets/svgIcons/subtract_icon.svg +3 -3
  201. package/src/assets/svgIcons/suitcase.svg +3 -3
  202. package/src/assets/svgIcons/template_icon_not_clickable.svg +6 -6
  203. package/src/assets/svgIcons/transfer.svg +4 -4
  204. package/src/assets/svgIcons/trim_tool.svg +4 -4
  205. package/src/assets/svgIcons/truck.svg +3 -3
  206. package/src/assets/svgIcons/underlined.svg +3 -3
  207. package/src/assets/svgIcons/undo.svg +6 -6
  208. package/src/assets/svgIcons/uparrow.svg +3 -3
  209. package/src/assets/svgIcons/update.svg +3 -3
  210. package/src/assets/svgIcons/upload_avatar-1.svg +12 -12
  211. package/src/assets/svgIcons/upload_avatar.svg +5 -5
  212. package/src/assets/svgIcons/upload_image.svg +8 -8
  213. package/src/assets/svgIcons/upload_image_tool.svg +7 -7
  214. package/src/assets/svgIcons/variants.svg +6 -6
  215. package/src/assets/svgIcons/vertical_tool.svg +3 -3
  216. package/src/assets/svgIcons/virtual_storage.svg +4 -4
  217. package/src/assets/svgIcons/warning.svg +4 -4
  218. package/src/assets/svgIcons/way.svg +5 -5
  219. package/src/assets/svgIcons/wifi.svg +3 -3
  220. package/src/assets/svgIcons/winter.svg +3 -3
  221. package/src/assets/svgIcons/workflow_template.svg +11 -11
  222. package/src/assets/theme.js +39 -39
  223. package/src/components/addNewButton/AddNewButton.stories.js +24 -24
  224. package/src/components/addNewButton/index.vue +62 -62
  225. package/src/components/buttons/buttonIcon/index.vue +142 -142
  226. package/src/components/buttons/closeButton/CloseButton.stories.js +29 -29
  227. package/src/components/buttons/closeButton/index.vue +61 -61
  228. package/src/components/buttons/mainButton/index.vue +107 -107
  229. package/src/components/deleteIcon/DeleteIcon.stories.js +29 -29
  230. package/src/components/deleteIcon/index.vue +61 -61
  231. package/src/components/draggableInputHandle/index.vue +47 -0
  232. package/src/components/dropdown/Dropdown.stories.js +54 -54
  233. package/src/components/dropdown/index.vue +118 -118
  234. package/src/components/errorMessage/index.vue +61 -61
  235. package/src/components/filter/filterSettings.vue +650 -650
  236. package/src/components/filter/index.vue +143 -143
  237. package/src/components/filter/parentDropdown.vue +91 -91
  238. package/src/components/icon/Icons.stories.js +41 -41
  239. package/src/components/icon/iconCollection.vue +68 -68
  240. package/src/components/icon/index.vue +116 -116
  241. package/src/components/iconWrapper/index.vue +156 -156
  242. package/src/components/infoCard/index.vue +35 -35
  243. package/src/components/infoText/index.vue +171 -171
  244. package/src/components/inputs/checkbox/Checkbox.stories.js +57 -57
  245. package/src/components/inputs/checkbox/index.vue +187 -187
  246. package/src/components/inputs/inputNumber/InputNumber.stories.js +150 -150
  247. package/src/components/inputs/inputNumber/index.vue +710 -710
  248. package/src/components/inputs/inputNumberQuestion/index.vue +215 -215
  249. package/src/components/inputs/inputText/InputText.stories.js +75 -75
  250. package/src/components/inputs/inputText/index.vue +355 -360
  251. package/src/components/inputs/radioButton/RadioButton.stories.js +58 -58
  252. package/src/components/inputs/radioButton/index.vue +267 -267
  253. package/src/components/inputs/searchInput/SearchInput.stories.js +40 -40
  254. package/src/components/inputs/searchInput/index.vue +133 -133
  255. package/src/components/inputs/select/index.vue +609 -622
  256. package/src/components/inputs/select/option/index.vue +111 -111
  257. package/src/components/inputs/select/select.stories.js +59 -59
  258. package/src/components/inputs/slider/index.vue +126 -126
  259. package/src/components/inputs/switchField/index.vue +265 -265
  260. package/src/components/inputs/textAreaInput/TextAreaInput.stories.js +135 -135
  261. package/src/components/inputs/textAreaInput/index.vue +206 -206
  262. package/src/components/inputs/toggle/Toggle.stories.js +77 -77
  263. package/src/components/inputs/toggle/index.vue +298 -298
  264. package/src/components/label/index.vue +104 -0
  265. package/src/components/modals/modal/index.vue +178 -178
  266. package/src/components/modals/modal/modal.stories.js +31 -31
  267. package/src/components/navigationTabs/index.vue +107 -107
  268. package/src/components/pageSubtitle/index.vue +68 -68
  269. package/src/components/pageTitle/index.vue +68 -68
  270. package/src/components/pagination/index.vue +144 -144
  271. package/src/components/progressBar/index.vue +125 -125
  272. package/src/components/projectMarker/index.vue +291 -291
  273. package/src/components/sideMenu/index.vue +270 -270
  274. package/src/components/spinner/index.vue +71 -71
  275. package/src/components/tableDropdown/index.vue +637 -637
  276. package/src/components/tables/mainTable/exampleNested.vue +328 -328
  277. package/src/components/tables/mainTable/index.vue +446 -446
  278. package/src/components/tables/viewTable/index.vue +195 -195
  279. package/src/components/threeDots/index.vue +389 -389
  280. package/src/components/videoThumbnail/index.vue +107 -107
  281. package/src/components/videoThumbnail/videoThumbnail.stories.js +35 -35
  282. package/src/helpers/numberConverter.js +102 -102
  283. package/src/helpers/translateLang.js +119 -119
  284. package/src/main.js +13 -13
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <label-wrapper
3
+ :labelAlign="labelAlign">
4
+ <input-label
5
+ :labelFontColor="labelFontColor"
6
+ :fontSize="fontSize"
7
+ >
8
+ <slot></slot>
9
+ <optionalLabel v-if="labelOptional"
10
+ >({{ $gettext('Optional') }})</optionalLabel
11
+ ></input-label
12
+ >
13
+ <info-text
14
+ v-if="infoTextMessage"
15
+ :text="infoTextMessage"
16
+ borderColor="#ccc"
17
+ :size="fontSize ? fontSize : '16px'"
18
+ :alignArrow="infoTextAlign"
19
+ />
20
+ </label-wrapper>
21
+ </template>
22
+
23
+ <script>
24
+ import styled from 'vue-styled-components'
25
+ import InfoText from '../infoText'
26
+
27
+
28
+ const labelAttrs = { fontSize: String, labelFontColor: String }
29
+ const InputLabel = styled('div', labelAttrs)`
30
+ color: ${(props) =>
31
+ props.theme.colors[props.labelFontColor]
32
+ ? props.theme.colors[props.labelFontColor]
33
+ : props.labelFontColor
34
+ ? props.labelFontColor
35
+ : props.theme.colors.eturnityGrey};
36
+
37
+ font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
38
+ font-weight: 700;
39
+ `
40
+ const optionalLabel = styled.span`
41
+ font-weight: 300;
42
+ `
43
+
44
+ const LabelWrapper = styled('div',{labelAlign:String})`
45
+ ${props=>props.labelAlign=='horizontal'?
46
+ 'display: inline-grid;':
47
+ 'display: grid;'
48
+ }
49
+ ${props=>props.labelAlign=='horizontal'?
50
+ 'margin-right: 10px;':
51
+ 'margin-bottom: 8px;'
52
+ }
53
+ vertical-align: center;
54
+ grid-template-columns: auto auto;
55
+ grid-gap: 12px;
56
+ align-items: center;
57
+ justify-content: start;
58
+ `
59
+ export default {
60
+ // import labelText from "@eturnity/eturnity_reusable_components/src/components/label"
61
+ // To use:
62
+ // <label-text
63
+ // infoTextAlign="right" // left by default
64
+ // infoTextMessage="My info message"
65
+ // label="Question 5"
66
+ // />
67
+ name: 'input-text',
68
+ components: {
69
+ InfoText,
70
+ InputLabel,
71
+ LabelWrapper,
72
+ optionalLabel
73
+ },
74
+ data() {
75
+ return {
76
+ inputTypeData: 'text'
77
+ }
78
+ },
79
+ props: {
80
+ infoTextMessage: {
81
+ required: false
82
+ },
83
+ infoTextAlign: {
84
+ required: false
85
+ },
86
+ labelOptional: {
87
+ required: false,
88
+ default: false
89
+ },
90
+ fontSize: {
91
+ required: false,
92
+ default: null
93
+ },
94
+ labelFontColor: {
95
+ required: false,
96
+ default: 'black'
97
+ },
98
+ labelAlign: {
99
+ required: false,
100
+ default: 'vertical'
101
+ },
102
+ },
103
+ }
104
+ </script>
@@ -1,178 +1,178 @@
1
- <template>
2
- <page-wrapper
3
- :position="position"
4
- :isOpen="isOpen"
5
- :class="{ visible: isOpen, hidden: !isOpen }"
6
- @click.native="onOutsideClose()"
7
- :backdrop="backdrop"
8
- >
9
- <modal-container @click.stop>
10
- <spinner v-if="isLoading" size="50px" :limitedToModal="true" />
11
- <content-container :visible="!isLoading">
12
- <slot />
13
- </content-container>
14
- <close-button
15
- v-if="!hideClose"
16
- @click.native="onCloseModal()"
17
- class="close"
18
- />
19
- </modal-container>
20
- </page-wrapper>
21
- </template>
22
-
23
- <script>
24
- // Rules: (as defined in https://e-turnity.atlassian.net/browse/EPDM-9694)
25
- // 1. On clicking the “escape” key, close the modal onCloseModal()
26
- // 2. Always prevent outside close
27
- // import Modal from "@eturnity/eturnity_reusable_components/src/components/modals/modal"
28
- // This is a more flexible modal box, where the parent can decide how the body of the modal looks
29
- // To use:
30
- // <modal :isOpen="isOpen" @on-close="$emit('on-close-summary')" :preventOutsideClose="true" :isLoading="true" :hideClose="true">
31
- // <div>Data....</div>
32
- // </modal>
33
-
34
- import styled from 'vue-styled-components'
35
- import CloseButton from '../../buttons/closeButton'
36
- import Spinner from '../../spinner'
37
-
38
- const contentAttrs = { visible: Boolean }
39
- const ContentContainer = styled('div', contentAttrs)`
40
- visibility: ${(props) => (props.visible ? 'inherit' : 'hidden')};
41
- `
42
-
43
- const pageAttrs = { isOpen: Boolean, backdrop: String, position: String }
44
- const PageWrapper = styled('div', pageAttrs)`
45
- position: ${(props) => props.position}
46
- display: grid;
47
- top: 0;
48
- left: 0;
49
- width: 100%;
50
- height: 100%;
51
- background-color: ${(props) =>
52
- props.backdrop == 'dark'
53
- ? 'rgba(0, 0, 0, 0.4)'
54
- : 'rgba(255, 255, 255, 0.9)'};
55
- z-index: 99999;
56
- overflow: auto;
57
-
58
- &.visible {
59
- visibility: visible;
60
- opacity: 1;
61
- transition: visibility 0s linear 0s, opacity 300ms;
62
- }
63
-
64
- &.hidden {
65
- visibility: hidden;
66
- opacity: 0;
67
- transition: visibility 0s linear 300ms, opacity 300ms;
68
- }
69
-
70
- @media (max-width: 425px) {
71
- background: white;
72
- }
73
- `
74
-
75
- const ModalContainer = styled.div`
76
- align-self: center;
77
- justify-self: center;
78
- position: relative;
79
- box-shadow: 0px 4px 4px 3px rgba(0, 0, 0, 0.1);
80
- border-radius: 4px;
81
- background: white;
82
- margin: 0 auto;
83
- overflow: auto;
84
- max-width: 95%;
85
- max-height: 95%;
86
- min-width: 100px;
87
- min-height: 100px;
88
-
89
- ::-webkit-scrollbar {
90
- width: 0.3em;
91
- height: 100%;
92
- background-color: ${(props) => props.theme.colors.grey5};
93
- }
94
-
95
- /* Make scrollbar visible when needed */
96
- ::-webkit-scrollbar-thumb {
97
- background-color: ${(props) => props.theme.colors.grey3};
98
- }
99
-
100
- /* Make scrollbar track visible when needed */
101
- ::-webkit-scrollbar-track {
102
- background-color: ${(props) => props.theme.colors.grey5};
103
- }
104
-
105
- .close {
106
- position: absolute;
107
- right: 20px;
108
- top: 20px;
109
-
110
- @media (max-width: 425px) {
111
- right: 14px;
112
- top: 12px;
113
- background: white;
114
- position: fixed;
115
- z-index: 99;
116
- }
117
- }
118
-
119
- @media (max-width: 425px) {
120
- width: 100%;
121
- height: 100%;
122
- box-shadow: none;
123
- }
124
- `
125
-
126
- export default {
127
- name: 'modal',
128
- components: {
129
- PageWrapper,
130
- ModalContainer,
131
- CloseButton,
132
- Spinner,
133
- ContentContainer
134
- },
135
- props: {
136
- isOpen: {
137
- required: true,
138
- default: false
139
- },
140
- preventOutsideClose: {
141
- required: false,
142
- default: false
143
- },
144
- isLoading: {
145
- required: false,
146
- default: false
147
- },
148
- hideClose: {
149
- required: false,
150
- default: false
151
- },
152
- backdrop: {
153
- required: false,
154
- default: 'white'
155
- },
156
- position: {
157
- required: false,
158
- default: 'fixed'
159
- }
160
- },
161
- methods: {
162
- onCloseModal() {
163
- this.$emit('on-close')
164
- },
165
- onOutsideClose() {
166
- // If true, then only allow closing to come from clicking the X or wherever the onCloseModal is called
167
- if (!this.preventOutsideClose) {
168
- this.$emit('on-close')
169
- }
170
- }
171
- },
172
- watch: {
173
- isOpen: function (newVal) {
174
- document.body.style.overflow = newVal ? 'hidden' : ''
175
- }
176
- }
177
- }
178
- </script>
1
+ <template>
2
+ <page-wrapper
3
+ :position="position"
4
+ :isOpen="isOpen"
5
+ :class="{ visible: isOpen, hidden: !isOpen }"
6
+ @click.native="onOutsideClose()"
7
+ :backdrop="backdrop"
8
+ >
9
+ <modal-container @click.stop>
10
+ <spinner v-if="isLoading" size="50px" :limitedToModal="true" />
11
+ <content-container :visible="!isLoading">
12
+ <slot />
13
+ </content-container>
14
+ <close-button
15
+ v-if="!hideClose"
16
+ @click.native="onCloseModal()"
17
+ class="close"
18
+ />
19
+ </modal-container>
20
+ </page-wrapper>
21
+ </template>
22
+
23
+ <script>
24
+ // Rules: (as defined in https://e-turnity.atlassian.net/browse/EPDM-9694)
25
+ // 1. On clicking the “escape” key, close the modal onCloseModal()
26
+ // 2. Always prevent outside close
27
+ // import Modal from "@eturnity/eturnity_reusable_components/src/components/modals/modal"
28
+ // This is a more flexible modal box, where the parent can decide how the body of the modal looks
29
+ // To use:
30
+ // <modal :isOpen="isOpen" @on-close="$emit('on-close-summary')" :preventOutsideClose="true" :isLoading="true" :hideClose="true">
31
+ // <div>Data....</div>
32
+ // </modal>
33
+
34
+ import styled from 'vue-styled-components'
35
+ import CloseButton from '../../buttons/closeButton'
36
+ import Spinner from '../../spinner'
37
+
38
+ const contentAttrs = { visible: Boolean }
39
+ const ContentContainer = styled('div', contentAttrs)`
40
+ visibility: ${(props) => (props.visible ? 'inherit' : 'hidden')};
41
+ `
42
+
43
+ const pageAttrs = { isOpen: Boolean, backdrop: String, position: String }
44
+ const PageWrapper = styled('div', pageAttrs)`
45
+ position: ${(props) => props.position}
46
+ display: grid;
47
+ top: 0;
48
+ left: 0;
49
+ width: 100%;
50
+ height: 100%;
51
+ background-color: ${(props) =>
52
+ props.backdrop == 'dark'
53
+ ? 'rgba(0, 0, 0, 0.4)'
54
+ : 'rgba(255, 255, 255, 0.9)'};
55
+ z-index: 99999;
56
+ overflow: auto;
57
+
58
+ &.visible {
59
+ visibility: visible;
60
+ opacity: 1;
61
+ transition: visibility 0s linear 0s, opacity 300ms;
62
+ }
63
+
64
+ &.hidden {
65
+ visibility: hidden;
66
+ opacity: 0;
67
+ transition: visibility 0s linear 300ms, opacity 300ms;
68
+ }
69
+
70
+ @media (max-width: 425px) {
71
+ background: white;
72
+ }
73
+ `
74
+
75
+ const ModalContainer = styled.div`
76
+ align-self: center;
77
+ justify-self: center;
78
+ position: relative;
79
+ box-shadow: 0px 4px 4px 3px rgba(0, 0, 0, 0.1);
80
+ border-radius: 4px;
81
+ background: white;
82
+ margin: 0 auto;
83
+ overflow: auto;
84
+ max-width: 95%;
85
+ max-height: 95%;
86
+ min-width: 100px;
87
+ min-height: 100px;
88
+
89
+ ::-webkit-scrollbar {
90
+ width: 0.3em;
91
+ height: 100%;
92
+ background-color: ${(props) => props.theme.colors.grey5};
93
+ }
94
+
95
+ /* Make scrollbar visible when needed */
96
+ ::-webkit-scrollbar-thumb {
97
+ background-color: ${(props) => props.theme.colors.grey3};
98
+ }
99
+
100
+ /* Make scrollbar track visible when needed */
101
+ ::-webkit-scrollbar-track {
102
+ background-color: ${(props) => props.theme.colors.grey5};
103
+ }
104
+
105
+ .close {
106
+ position: absolute;
107
+ right: 20px;
108
+ top: 20px;
109
+
110
+ @media (max-width: 425px) {
111
+ right: 14px;
112
+ top: 12px;
113
+ background: white;
114
+ position: fixed;
115
+ z-index: 99;
116
+ }
117
+ }
118
+
119
+ @media (max-width: 425px) {
120
+ width: 100%;
121
+ height: 100%;
122
+ box-shadow: none;
123
+ }
124
+ `
125
+
126
+ export default {
127
+ name: 'modal',
128
+ components: {
129
+ PageWrapper,
130
+ ModalContainer,
131
+ CloseButton,
132
+ Spinner,
133
+ ContentContainer
134
+ },
135
+ props: {
136
+ isOpen: {
137
+ required: true,
138
+ default: false
139
+ },
140
+ preventOutsideClose: {
141
+ required: false,
142
+ default: false
143
+ },
144
+ isLoading: {
145
+ required: false,
146
+ default: false
147
+ },
148
+ hideClose: {
149
+ required: false,
150
+ default: false
151
+ },
152
+ backdrop: {
153
+ required: false,
154
+ default: 'white'
155
+ },
156
+ position: {
157
+ required: false,
158
+ default: 'fixed'
159
+ }
160
+ },
161
+ methods: {
162
+ onCloseModal() {
163
+ this.$emit('on-close')
164
+ },
165
+ onOutsideClose() {
166
+ // If true, then only allow closing to come from clicking the X or wherever the onCloseModal is called
167
+ if (!this.preventOutsideClose) {
168
+ this.$emit('on-close')
169
+ }
170
+ }
171
+ },
172
+ watch: {
173
+ isOpen: function (newVal) {
174
+ document.body.style.overflow = newVal ? 'hidden' : ''
175
+ }
176
+ }
177
+ }
178
+ </script>
@@ -1,31 +1,31 @@
1
- import Modal from "./index.vue";
2
-
3
- export default {
4
- title: "Modal",
5
- component: Modal,
6
- // argTypes: {},
7
- };
8
-
9
- const Template = (args, { argTypes }) => ({
10
- // Components used in your story `template` are defined in the `components` object
11
- components: { Modal },
12
- // The story's `args` need to be mapped into the template through the `setup()` method
13
- props: Object.keys(argTypes),
14
- template: '<modal v-bind="$props" />',
15
-
16
- // import Modal from "@eturnity/eturnity_reusable_components/src/components/modals/modal"
17
- // This is a more flexible modal box, where the parent can decide how the body of the modal looks
18
- // To use:
19
- // <modal :isOpen="isOpen" @on-close="$emit('on-close-summary')" :preventOutsideClose="true" :isLoading="true" :hideClose="true">
20
- // <div>Data....</div>
21
- // </modal>
22
- });
23
-
24
- export const Default = Template.bind({
25
- isOpen: true,
26
- preventOutsideClose: true,
27
- isLoading: false,
28
- hideClose: false,
29
- backdrop: 'dark',
30
- })
31
- Default.args = {};
1
+ import Modal from "./index.vue";
2
+
3
+ export default {
4
+ title: "Modal",
5
+ component: Modal,
6
+ // argTypes: {},
7
+ };
8
+
9
+ const Template = (args, { argTypes }) => ({
10
+ // Components used in your story `template` are defined in the `components` object
11
+ components: { Modal },
12
+ // The story's `args` need to be mapped into the template through the `setup()` method
13
+ props: Object.keys(argTypes),
14
+ template: '<modal v-bind="$props" />',
15
+
16
+ // import Modal from "@eturnity/eturnity_reusable_components/src/components/modals/modal"
17
+ // This is a more flexible modal box, where the parent can decide how the body of the modal looks
18
+ // To use:
19
+ // <modal :isOpen="isOpen" @on-close="$emit('on-close-summary')" :preventOutsideClose="true" :isLoading="true" :hideClose="true">
20
+ // <div>Data....</div>
21
+ // </modal>
22
+ });
23
+
24
+ export const Default = Template.bind({
25
+ isOpen: true,
26
+ preventOutsideClose: true,
27
+ isLoading: false,
28
+ hideClose: false,
29
+ backdrop: 'dark',
30
+ })
31
+ Default.args = {};