@kizmann/nano-ui 0.9.10 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/.github/workflows/compile-deploy-publish.yml +65 -0
  2. package/README.md +1 -1
  3. package/assets/nano-ui-dark.svg +19 -0
  4. package/assets/nano-ui-light.svg +19 -0
  5. package/assets/pico-js-dark.svg +19 -0
  6. package/assets/pico-js-light.svg +19 -0
  7. package/demos/form.html +462 -0
  8. package/demos/overview.html +97 -45
  9. package/docs/_sidebar.md +11 -10
  10. package/docs/files/form/button.md +10 -1
  11. package/docs/files/form/switch.md +6 -0
  12. package/docs/files/others/config.md +261 -8
  13. package/docs/files/others/drawer.md +32 -0
  14. package/docs/files/others/map.md +32 -0
  15. package/docs/index.template.html +76 -0
  16. package/docs/src/js/backup.js +128 -0
  17. package/docs/src/js/helper/item-helper.js +0 -0
  18. package/docs/src/js/index.js +21 -0
  19. package/docs/src/js/plugin/title-plugin.js +0 -0
  20. package/docs/src/js/plugin/vue-demo-plugin.js +97 -0
  21. package/docs/src/js/theme/basic.js +31 -0
  22. package/docs/src/js/theme/docsify.js +11 -0
  23. package/docs/src/scss/index-dark.scss +3 -0
  24. package/docs/src/scss/index-light.scss +3 -0
  25. package/docs/src/scss/index.scss +10 -443
  26. package/docs/src/scss/mixins/grid.scss +12 -11
  27. package/docs/src/scss/mixins/media.scss +2 -1
  28. package/docs/src/scss/root/vars-dark.scss +15 -0
  29. package/docs/src/scss/root/vars-light.scss +15 -0
  30. package/docs/src/scss/root/vars.scss +110 -0
  31. package/docs/src/scss/theme/default.scss +123 -0
  32. package/docs/src/scss/theme/header.scss +147 -0
  33. package/docs/src/scss/theme/layout.scss +186 -0
  34. package/docs/src/scss/theme/loader.scss +63 -0
  35. package/docs/src/scss/theme/markdown.scss +79 -0
  36. package/docs/src/scss/theme/navigation.scss +58 -0
  37. package/docs/src/scss/theme/progress.scss +9 -0
  38. package/docs/src/scss/theme/search.scss +119 -0
  39. package/docs/src/scss/{docsify → theme}/syntax.scss +18 -15
  40. package/docs/src/scss/theme/table.scss +63 -0
  41. package/favicon/apple-touch-icon.png +0 -0
  42. package/favicon/favicon-96x96.png +0 -0
  43. package/favicon/favicon.ico +0 -0
  44. package/favicon/favicon.svg +3 -0
  45. package/favicon/site.webmanifest +21 -0
  46. package/favicon/web-app-manifest-192x192.png +0 -0
  47. package/favicon/web-app-manifest-512x512.png +0 -0
  48. package/package.json +19 -12
  49. package/postcss.config.js +1 -1
  50. package/src/alert/src/alert/alert.scss +5 -4
  51. package/src/button/src/button/button.scss +5 -5
  52. package/src/button/src/button-group/button-group.scss +5 -4
  53. package/src/cascader/src/cascader/cascader.scss +5 -4
  54. package/src/cascader/src/cascader-panel/cascader-panel.scss +5 -4
  55. package/src/checkbox/src/checkbox/checkbox.scss +5 -4
  56. package/src/checkbox/src/checkbox-group/checkbox-group.scss +5 -4
  57. package/src/collapse/src/collapse/collapse.scss +5 -4
  58. package/src/collapse/src/collapse-item/collapse-item.scss +5 -4
  59. package/src/config/src/builder/builder.scss +17 -13
  60. package/src/config/src/reference-panel/reference-panel.scss +7 -4
  61. package/src/confirm/src/confirm/confirm.scss +5 -4
  62. package/src/datepicker/src/datepicker/datepicker.scss +5 -4
  63. package/src/datepicker/src/datepicker-panel/datepicker-panel.scss +5 -4
  64. package/src/datetimepicker/src/datetimepicker/datetimepicker.js +0 -4
  65. package/src/datetimepicker/src/datetimepicker/datetimepicker.scss +5 -4
  66. package/src/draggable/src/draggrid/draggrid.scss +5 -4
  67. package/src/draggable/src/draggrid-item/draggrid-item.scss +5 -4
  68. package/src/draggable/src/draglist/draglist.scss +5 -4
  69. package/src/draggable/src/draglist-item/draglist-item.scss +5 -4
  70. package/src/draggable/src/dropzone/dropzone.scss +5 -4
  71. package/src/drawer/index.js +5 -0
  72. package/src/drawer/index.scss +1 -0
  73. package/src/drawer/src/drawer/drawer.js +431 -0
  74. package/src/drawer/src/drawer/drawer.scss +136 -0
  75. package/src/durationpicker/src/durationpicker/durationpicker.scss +5 -4
  76. package/src/empty/src/empty-icon/empty-icon.scss +5 -4
  77. package/src/form/index.js +6 -0
  78. package/src/form/index.scss +2 -0
  79. package/src/form/src/form/form.js +11 -1
  80. package/src/form/src/form-frame/form-frame.js +42 -0
  81. package/src/form/src/form-frame/form-frame.scss +28 -0
  82. package/src/form/src/form-frame-item/form-frame-item.js +114 -0
  83. package/src/form/src/form-group/form-group.js +33 -1
  84. package/src/form/src/form-group/form-group.scss +5 -4
  85. package/src/form/src/form-item/form-item.scss +5 -4
  86. package/src/form/src/form-menu/form-menu.js +89 -0
  87. package/src/form/src/form-menu/form-menu.scss +9 -0
  88. package/src/index.js +1 -0
  89. package/src/index.scss +1 -0
  90. package/src/info/src/info/info.scss +5 -4
  91. package/src/info/src/info-column/info-column.scss +7 -4
  92. package/src/input/src/input/input.scss +5 -4
  93. package/src/input-number/src/input-number/input-number.scss +5 -4
  94. package/src/loader/src/loader/loader.scss +5 -4
  95. package/src/modal/src/modal/modal.scss +5 -4
  96. package/src/notification/src/notification/notification.scss +5 -4
  97. package/src/paginator/src/paginator/paginator.scss +5 -4
  98. package/src/popover/src/popover/popover.scss +5 -4
  99. package/src/radio/src/radio/radio.scss +5 -4
  100. package/src/radio/src/radio-group/radio-group.scss +5 -4
  101. package/src/rating/src/rating/rating.scss +5 -4
  102. package/src/root/vars.scss +84 -81
  103. package/src/select/src/select/select.scss +5 -4
  104. package/src/slider/src/slider/slider.scss +5 -4
  105. package/src/switch/src/switch/switch.scss +6 -4
  106. package/src/table/src/table/table.scss +15 -0
  107. package/src/table/src/table-cell/table-cell.scss +5 -4
  108. package/src/tabs/src/tabs/tabs.scss +5 -4
  109. package/src/tabs/src/tabs-item/tabs-item.scss +5 -4
  110. package/src/tags/src/tags-item/tags-item.scss +5 -4
  111. package/src/textarea/src/textarea/textarea.scss +5 -4
  112. package/src/timepicker/src/timepicker/timepicker.scss +5 -4
  113. package/src/timepicker/src/timepicker-panel/timepicker-panel.scss +5 -4
  114. package/src/transfer/src/transfer/transfer.scss +5 -4
  115. package/themes/macos/alert/src/alert/alert.scss +4 -3
  116. package/themes/macos/button/src/button/button.scss +8 -3
  117. package/themes/macos/cascader/src/cascader/cascader.scss +5 -4
  118. package/themes/macos/checkbox/src/checkbox/checkbox.scss +5 -4
  119. package/themes/macos/collapse/src/collapse/collapse.scss +4 -3
  120. package/themes/macos/collapse/src/collapse-item/collapse-item.scss +4 -3
  121. package/themes/macos/confirm/src/confirm/confirm.scss +4 -3
  122. package/themes/macos/datepicker/src/datepicker/datepicker.scss +5 -4
  123. package/themes/macos/datepicker/src/datepicker-panel/datepicker-panel.scss +4 -3
  124. package/themes/macos/datetimepicker/src/datetimepicker/datetimepicker.scss +14 -12
  125. package/themes/macos/draggable/src/draggrid/draggrid.scss +4 -3
  126. package/themes/macos/draggable/src/draggrid-item/draggrid-item.scss +4 -3
  127. package/themes/macos/draggable/src/draglist/draglist.scss +4 -3
  128. package/themes/macos/draggable/src/draglist-item/draglist-item.scss +6 -5
  129. package/themes/macos/draggable/src/dropzone/dropzone.scss +4 -3
  130. package/themes/macos/drawer/index.scss +1 -0
  131. package/themes/macos/drawer/src/drawer/drawer.scss +35 -0
  132. package/themes/macos/durationpicker/src/durationpicker/durationpicker.scss +5 -4
  133. package/themes/macos/file/src/file/file.scss +4 -3
  134. package/themes/macos/form/src/form-group/form-group.scss +4 -3
  135. package/themes/macos/index-dark.scss +1 -39
  136. package/themes/macos/index-light.scss +1 -39
  137. package/themes/macos/index.scss +1 -2
  138. package/themes/macos/input/src/input/input.scss +6 -5
  139. package/themes/macos/input-number/src/input-number/input-number.scss +6 -5
  140. package/themes/macos/loader/src/loader/loader.scss +4 -3
  141. package/themes/macos/modal/src/modal/modal.scss +6 -5
  142. package/themes/macos/notification/src/notification/notification.scss +4 -3
  143. package/themes/macos/popover/src/popover/popover.scss +9 -8
  144. package/themes/macos/radio/src/radio/radio.scss +5 -4
  145. package/themes/macos/rating/src/rating/rating.scss +4 -3
  146. package/themes/macos/root/vars-dark.scss +87 -74
  147. package/themes/macos/root/vars-light.scss +87 -74
  148. package/themes/macos/root/vars.scss +88 -74
  149. package/themes/macos/select/src/select/select.scss +5 -4
  150. package/themes/macos/switch/src/switch/switch.scss +6 -4
  151. package/themes/macos/table/src/table/table.scss +3 -3
  152. package/themes/macos/table/src/table-cell/table-cell.scss +5 -4
  153. package/themes/macos/tabs/src/tabs/tabs.scss +4 -3
  154. package/themes/macos/tabs/src/tabs-item/tabs-item.scss +4 -3
  155. package/themes/macos/tags/src/tags-item/tags-item.scss +6 -4
  156. package/themes/macos/textarea/src/textarea/textarea.scss +5 -4
  157. package/themes/macos/timepicker/src/timepicker/timepicker.scss +5 -4
  158. package/themes/macos/timepicker/src/timepicker-panel/timepicker-panel.scss +4 -3
  159. package/webpack.config.js +81 -13
  160. package/bun.lockb +0 -0
  161. package/dist/nano-ui.css +0 -2
  162. package/dist/nano-ui.js +0 -4
  163. package/dist/nano-ui.js.map +0 -1
  164. package/dist/themes/dark.css +0 -2
  165. package/dist/themes/light.css +0 -2
  166. package/docs/dist/docs.css +0 -2
  167. package/docs/index.html +0 -176
  168. package/docs/src/scss/docsify/basic/_coverpage.sass +0 -95
  169. package/docs/src/scss/docsify/basic/_layout.sass +0 -472
  170. package/docs/src/scss/docsify/vue.sass +0 -250
  171. package/nano.svg +0 -52
  172. package/themes/light/alert/index.scss +0 -1
  173. package/themes/light/alert/src/alert/alert.scss +0 -26
  174. package/themes/light/button/index.scss +0 -2
  175. package/themes/light/button/src/button/button.scss +0 -46
  176. package/themes/light/button/src/button-group/button-group.scss +0 -1
  177. package/themes/light/cascader/index.scss +0 -2
  178. package/themes/light/cascader/src/cascader/cascader.scss +0 -45
  179. package/themes/light/cascader/src/cascader-panel/cascader-panel.scss +0 -13
  180. package/themes/light/checkbox/index.scss +0 -2
  181. package/themes/light/checkbox/src/checkbox/checkbox.scss +0 -44
  182. package/themes/light/checkbox/src/checkbox-group/checkbox-group.scss +0 -1
  183. package/themes/light/collapse/index.scss +0 -2
  184. package/themes/light/collapse/src/collapse/collapse.scss +0 -21
  185. package/themes/light/collapse/src/collapse-item/collapse-item.scss +0 -21
  186. package/themes/light/confirm/index.scss +0 -1
  187. package/themes/light/confirm/src/confirm/confirm.scss +0 -13
  188. package/themes/light/datepicker/index.scss +0 -2
  189. package/themes/light/datepicker/src/datepicker/datepicker.scss +0 -49
  190. package/themes/light/datepicker/src/datepicker-panel/datepicker-panel.scss +0 -43
  191. package/themes/light/datetimepicker/index.scss +0 -1
  192. package/themes/light/datetimepicker/src/datetimepicker/datetimepicker.scss +0 -49
  193. package/themes/light/demo/index.scss +0 -1
  194. package/themes/light/demo/src/demo/demo.scss +0 -11
  195. package/themes/light/draggable/index.scss +0 -9
  196. package/themes/light/draggable/src/draggrid/draggrid.scss +0 -13
  197. package/themes/light/draggable/src/draggrid-item/draggrid-item.scss +0 -65
  198. package/themes/light/draggable/src/draghandler/draghandler.scss +0 -15
  199. package/themes/light/draggable/src/draglist/draglist.scss +0 -13
  200. package/themes/light/draggable/src/draglist-item/draglist-item.scss +0 -72
  201. package/themes/light/draggable/src/dropzone/dropzone.scss +0 -13
  202. package/themes/light/durationpicker/index.scss +0 -1
  203. package/themes/light/durationpicker/src/durationpicker/durationpicker.scss +0 -49
  204. package/themes/light/empty/index.scss +0 -1
  205. package/themes/light/empty/src/empty-icon/empty-icon.scss +0 -13
  206. package/themes/light/file/index.scss +0 -1
  207. package/themes/light/file/src/file/file.scss +0 -38
  208. package/themes/light/form/index.scss +0 -3
  209. package/themes/light/form/src/form/form.scss +0 -1
  210. package/themes/light/form/src/form-group/form-group.scss +0 -17
  211. package/themes/light/form/src/form-item/form-item.scss +0 -29
  212. package/themes/light/index.scss +0 -38
  213. package/themes/light/info/index.scss +0 -3
  214. package/themes/light/info/src/info/info.scss +0 -5
  215. package/themes/light/info/src/info-column/info-column.scss +0 -5
  216. package/themes/light/info/src/info-field/info-field.scss +0 -5
  217. package/themes/light/input/index.scss +0 -1
  218. package/themes/light/input/src/input/input.scss +0 -37
  219. package/themes/light/input-number/index.scss +0 -1
  220. package/themes/light/input-number/src/input-number/input-number.scss +0 -46
  221. package/themes/light/loader/index.scss +0 -1
  222. package/themes/light/loader/src/loader/loader.scss +0 -21
  223. package/themes/light/map/index.scss +0 -1
  224. package/themes/light/map/src/map/map.scss +0 -1
  225. package/themes/light/modal/index.scss +0 -1
  226. package/themes/light/modal/src/modal/modal.scss +0 -51
  227. package/themes/light/notification/index.scss +0 -1
  228. package/themes/light/notification/src/notification/notification.scss +0 -24
  229. package/themes/light/paginator/index.scss +0 -1
  230. package/themes/light/paginator/src/paginator/paginator.scss +0 -5
  231. package/themes/light/popover/index.scss +0 -1
  232. package/themes/light/popover/src/popover/popover.scss +0 -100
  233. package/themes/light/radio/index.scss +0 -2
  234. package/themes/light/radio/src/radio/radio.scss +0 -44
  235. package/themes/light/radio/src/radio-group/radio-group.scss +0 -1
  236. package/themes/light/rating/index.scss +0 -1
  237. package/themes/light/rating/src/rating/rating.scss +0 -18
  238. package/themes/light/resizer/index.scss +0 -1
  239. package/themes/light/resizer/src/resizer/resizer.scss +0 -5
  240. package/themes/light/root/vars.scss +0 -183
  241. package/themes/light/scrollbar/index.scss +0 -1
  242. package/themes/light/scrollbar/src/scrollbar/scrollbar.scss +0 -6
  243. package/themes/light/select/index.scss +0 -2
  244. package/themes/light/select/src/select/select.scss +0 -46
  245. package/themes/light/select/src/select-option/select-option.scss +0 -1
  246. package/themes/light/switch/index.scss +0 -1
  247. package/themes/light/switch/src/switch/switch.scss +0 -28
  248. package/themes/light/table/index.scss +0 -4
  249. package/themes/light/table/src/table/table.scss +0 -14
  250. package/themes/light/table/src/table-cell/table-cell.scss +0 -50
  251. package/themes/light/table/src/table-column/table-column.scss +0 -32
  252. package/themes/light/table/src/table-filter/table-filter.scss +0 -1
  253. package/themes/light/tabs/index.scss +0 -2
  254. package/themes/light/tabs/src/tabs/tabs.scss +0 -21
  255. package/themes/light/tabs/src/tabs-item/tabs-item.scss +0 -18
  256. package/themes/light/tags/index.scss +0 -2
  257. package/themes/light/tags/src/tags/tags.scss +0 -1
  258. package/themes/light/tags/src/tags-item/tags-item.scss +0 -28
  259. package/themes/light/textarea/index.scss +0 -1
  260. package/themes/light/textarea/src/textarea/textarea.scss +0 -29
  261. package/themes/light/timepicker/index.scss +0 -2
  262. package/themes/light/timepicker/src/timepicker/timepicker.scss +0 -49
  263. package/themes/light/timepicker/src/timepicker-panel/timepicker-panel.scss +0 -26
  264. package/themes/light/transfer/index.scss +0 -1
  265. package/themes/light/transfer/src/transfer/transfer.scss +0 -17
  266. package/themes/light/virtualscroller/index.scss +0 -1
  267. package/themes/light/virtualscroller/src/virtualscroller/virtualscroller.scss +0 -1
  268. /package/{themes/light → src}/root/image/empty-default.svg +0 -0
  269. /package/{themes/light → src}/root/image/empty-space.svg +0 -0
  270. /package/{themes/light → src}/root/image/star-default.svg +0 -0
@@ -0,0 +1,431 @@
1
+ import { UUID, Num, Arr, Obj, Any, Dom, Locale } from "@kizmann/pico-js";
2
+
3
+ export default {
4
+
5
+ name: 'NDrawer',
6
+
7
+ inject: {
8
+
9
+ NScrollbar: {
10
+ default: undefined
11
+ }
12
+
13
+ },
14
+
15
+ props: {
16
+
17
+ modelValue: {
18
+ default()
19
+ {
20
+ return false;
21
+ },
22
+ type: [Boolean]
23
+ },
24
+
25
+ listen: {
26
+ default()
27
+ {
28
+ return true;
29
+ },
30
+ type: [Boolean]
31
+ },
32
+
33
+ update: {
34
+ default()
35
+ {
36
+ return true;
37
+ },
38
+ type: [Boolean]
39
+ },
40
+
41
+ selector: {
42
+ default()
43
+ {
44
+ return null;
45
+ },
46
+ },
47
+
48
+ disabled: {
49
+ default()
50
+ {
51
+ return false;
52
+ },
53
+ type: [Boolean]
54
+ },
55
+
56
+ width: {
57
+ default()
58
+ {
59
+ return '30%';
60
+ },
61
+ type: [String]
62
+ },
63
+
64
+ title: {
65
+ default()
66
+ {
67
+ return '';
68
+ },
69
+ type: [String]
70
+ },
71
+
72
+ type: {
73
+ default()
74
+ {
75
+ return 'default';
76
+ },
77
+ type: [String]
78
+ },
79
+
80
+ size: {
81
+ default()
82
+ {
83
+ return 'md';
84
+ },
85
+ type: [String]
86
+ },
87
+
88
+ position: {
89
+ default()
90
+ {
91
+ return 'right';
92
+ },
93
+ type: [String]
94
+ },
95
+
96
+ closable: {
97
+ default()
98
+ {
99
+ return true;
100
+ },
101
+ type: [Boolean]
102
+ },
103
+
104
+ renderClose: {
105
+ default()
106
+ {
107
+ return true;
108
+ },
109
+ type: [Boolean]
110
+ }
111
+
112
+ },
113
+
114
+ watch: {
115
+
116
+ modelValue(value)
117
+ {
118
+ if ( value !== this.tempValue ) {
119
+ this.tempValue = value;
120
+ }
121
+ },
122
+
123
+ tempValue()
124
+ {
125
+ this.startRefreshTimeout();
126
+ }
127
+
128
+ },
129
+
130
+ provide()
131
+ {
132
+ return {
133
+ NDrawer: this
134
+ };
135
+ },
136
+
137
+ data()
138
+ {
139
+ return {
140
+ target: null, tempValue: false
141
+ };
142
+ },
143
+
144
+ mounted()
145
+ {
146
+ this.target = Dom.find(this.selector || this.$el)
147
+ .previous().get(0);
148
+
149
+ Dom.find(document.body).on('mousedown',
150
+ this.eventClick, this._.uid);
151
+
152
+ Dom.find(document.body).on('keydown',
153
+ this.eventKeydown, this._.uid);
154
+
155
+ let showDrawer = () => {
156
+ this.tempValue = true;
157
+ };
158
+
159
+ if ( this.modelValue ) {
160
+ Any.delay(showDrawer, 100);
161
+ }
162
+
163
+ Dom.find(document.body).append(this.$el);
164
+ },
165
+
166
+ beforeUnmount()
167
+ {
168
+ this.$el.remove();
169
+ },
170
+
171
+ unmounted()
172
+ {
173
+ Dom.find(document.body).off('mousedown',
174
+ null, this._.uid);
175
+
176
+ Dom.find(document.body).off('keydown',
177
+ null, this._.uid);
178
+ },
179
+
180
+ methods: {
181
+
182
+ openModal(force = false, source = null)
183
+ {
184
+ if ( this.tempValue ) {
185
+ return;
186
+ }
187
+
188
+ if ( this.closable || force ) {
189
+ this.tempValue = true;
190
+ }
191
+
192
+ this.$emit('update:modelValue', true, source);
193
+ },
194
+
195
+ closeModal(force = false, source = null)
196
+ {
197
+ if ( ! this.tempValue ) {
198
+ return;
199
+ }
200
+
201
+ if ( ! this.update ) {
202
+ return this.$emit('close', source);
203
+ }
204
+
205
+ if ( this.closable || force ) {
206
+ this.tempValue = false;
207
+ }
208
+
209
+ this.$emit('update:modelValue', false, source);
210
+ },
211
+
212
+ stopRefreshTimeout()
213
+ {
214
+ clearTimeout(this.refresh);
215
+
216
+ Dom.find(this.$el).removeClass('n-ready');
217
+ },
218
+
219
+ startRefreshTimeout()
220
+ {
221
+ if ( ! this.tempValue ) {
222
+ return this.stopRefreshTimeout();
223
+ }
224
+
225
+ window.zIndex += 1;
226
+
227
+ Dom.find(this.$el).attr('data-drawer',
228
+ window.zIndex);
229
+
230
+ Dom.find(this.$el).css({
231
+ 'z-index': window.zIndex
232
+ });
233
+
234
+ this.queueRefreshTimeout();
235
+ },
236
+
237
+ queueRefreshTimeout()
238
+ {
239
+ if ( ! this.tempValue ) {
240
+ return this.stopRefreshTimeout();
241
+ }
242
+
243
+ this.refresh = setTimeout(() => {
244
+ Dom.find(this.$el).addClass('n-ready');
245
+ }, 100);
246
+ },
247
+
248
+ eventClick(event, el)
249
+ {
250
+ if ( this.disabled || event.which !== 1 ) {
251
+ return;
252
+ }
253
+
254
+ let result = !! Dom.find(el).closest(this.target);
255
+
256
+ if ( ! result && ! this.tempValue ) {
257
+ return;
258
+ }
259
+
260
+ if ( this.tempValue && this.closable ) {
261
+ result = ! Dom.find(el).closest(this.$refs.backdrop);
262
+ }
263
+
264
+ if ( result === this.tempValue ) {
265
+ return;
266
+ }
267
+
268
+ if ( ! result ) {
269
+ return this.closeModal(false, 'escape');
270
+ }
271
+
272
+ if ( this.listen ) {
273
+ this.openModal(true, 'selector');
274
+ }
275
+ },
276
+
277
+ eventKeydown(event, el)
278
+ {
279
+ if ( ! this.tempValue || event.which !== 27 ) {
280
+ return;
281
+ }
282
+
283
+ let extractIndex = (modal) => {
284
+ return Dom.find(modal).attr('data-drawer');
285
+ };
286
+
287
+ let indexes = Dom.find('.n-drawer:not(.n-hidden)')
288
+ .each(extractIndex);
289
+
290
+ let index = Dom.find(this.$el).attr('data-drawer');
291
+
292
+ if ( Arr.last(indexes.sort()) !== index ) {
293
+ return;
294
+ }
295
+
296
+ this.closeModal(false, 'escape');
297
+ },
298
+
299
+ },
300
+
301
+ renderClose()
302
+ {
303
+ if ( ! this.renderClose || ! this.closable ) {
304
+ return null;
305
+ }
306
+
307
+ let props = {
308
+ onClick: () => this.closeModal(false, 'escape')
309
+ };
310
+
311
+ return (
312
+ <div class="n-drawer__close" {...props}>
313
+ <span class={nano.Icons.times}></span>
314
+ </div>
315
+ );
316
+ },
317
+
318
+ renderHeader()
319
+ {
320
+ if ( ! this.$slots.header && ! this.title ) {
321
+ return null;
322
+ }
323
+
324
+ return (
325
+ <div class="n-drawer__header">
326
+ { [this.$slots.header && this.$slots.header({ closeModal: this.closeModal }) || this.title, this.ctor('renderClose')()] }
327
+ </div>
328
+ );
329
+ },
330
+
331
+ renderFooter()
332
+ {
333
+ if ( ! this.$slots.footer ) {
334
+ return null;
335
+ }
336
+
337
+ return (
338
+ <div class="n-drawer__footer">
339
+ { this.$slots.footer({ closeModal: this.closeModal }) }
340
+ </div>
341
+ );
342
+ },
343
+
344
+ renderBody()
345
+ {
346
+ let bodyHtml = (
347
+ <NScrollbar ref="scrollbar" relative={true} wrapClass="n-drawer__wrap">
348
+ { this.$slots.default && this.$slots.default({ closeModal: this.closeModal }) }
349
+ </NScrollbar>
350
+ );
351
+
352
+ if ( this.$slots.body ) {
353
+ bodyHtml = this.$slots.body({ closeModal: this.closeModal });
354
+ }
355
+
356
+ return (
357
+ <div class="n-drawer__body">
358
+ { bodyHtml }
359
+ </div>
360
+ );
361
+ },
362
+
363
+ renderFrame()
364
+ {
365
+ if ( ! this.tempValue ) {
366
+ return null;
367
+ }
368
+
369
+ let style = {
370
+ width: this.width
371
+ };
372
+
373
+ let innerHtml = [
374
+ this.ctor('renderHeader')(),
375
+ this.ctor('renderBody')(),
376
+ this.ctor('renderFooter')(),
377
+ ]
378
+
379
+ return (
380
+ <div class="n-drawer__frame" style={style}>
381
+ { this.$slots.raw ? this.$slots.raw() : innerHtml }
382
+ </div>
383
+ );
384
+ },
385
+
386
+ renderBackdrop()
387
+ {
388
+ return (
389
+ <div ref="backdrop" class="n-drawer__backdrop"></div>
390
+ );
391
+ },
392
+
393
+ render()
394
+ {
395
+ if ( ! window.zIndex ) {
396
+ window.zIndex = 9000;
397
+ }
398
+
399
+ let classList = [
400
+ 'n-drawer',
401
+ 'n-drawer--' + this.size,
402
+ 'n-drawer--' + this.type,
403
+ 'n-drawer--' + this.position
404
+ ];
405
+
406
+ if ( this.tempValue ) {
407
+ this.queueRefreshTimeout();
408
+ }
409
+
410
+ if ( this.renderClose ) {
411
+ classList.push('n-closable');
412
+ }
413
+
414
+ if ( ! this.tempValue ) {
415
+ classList.push('n-hidden');
416
+ }
417
+
418
+ let innerHtml = null;
419
+
420
+ if ( this.tempValue ) {
421
+ innerHtml = this.ctor('renderFrame')();
422
+ }
423
+
424
+ return (
425
+ <div class={classList}>
426
+ { [innerHtml, this.ctor('renderBackdrop')()] }
427
+ </div>
428
+ );
429
+ }
430
+
431
+ }
@@ -0,0 +1,136 @@
1
+ @use 'sass:map';
2
+ @import "../../../root/vars";
3
+
4
+ .n-drawer {
5
+ position: fixed;
6
+ top: 0;
7
+ bottom: 0;
8
+ left: 0;
9
+ right: 0;
10
+ display: flex;
11
+ flex-direction: row;
12
+ align-items: center;
13
+ }
14
+
15
+ .n-drawer.n-hidden {
16
+ display: none;
17
+ }
18
+
19
+ .n-drawer__backdrop {
20
+ z-index: 10;
21
+ position: absolute;
22
+ top: 0;
23
+ bottom: 0;
24
+ left: 0;
25
+ right: 0;
26
+ transition: opacity 0.5s ease-in-out;
27
+ }
28
+
29
+ .n-drawer:not(.n-ready) .n-drawer__backdrop {
30
+ opacity: 0;
31
+ }
32
+
33
+ .n-drawer__frame {
34
+ z-index: 20;
35
+ overflow: hidden;
36
+ position: relative;
37
+ flex: 0 1 auto;
38
+ display: flex;
39
+ flex-direction: column;
40
+ min-width: 300px;
41
+ max-width: 100%;
42
+ min-height: 0;
43
+ max-height: 100%;
44
+ margin: auto;
45
+ transform: translateX(0);
46
+ transition: opacity 0.2s 0.1s ease-out, transform 0.2s 0.1s ease-out;
47
+ }
48
+
49
+ .n-drawer:not(.n-ready) .n-drawer__frame {
50
+ opacity: 0;
51
+ transform: translateX(20px);
52
+ }
53
+
54
+ .n-drawer--right > .n-drawer__frame {
55
+ margin: 0 0 0 auto;
56
+ }
57
+
58
+ .n-drawer--left > .n-drawer__frame {
59
+ margin: 0 auto 0 0;
60
+ }
61
+
62
+ .n-drawer__header {
63
+ position: relative;
64
+ flex: 0 0 auto;
65
+ }
66
+
67
+ .n-drawer__body {
68
+ overflow: hidden;
69
+ flex: 1 1 auto;
70
+ display: flex;
71
+ flex-direction: column;
72
+ align-items: stretch;
73
+ justify-content: stretch;
74
+ }
75
+
76
+ .n-drawer .n-drawer__wrap {
77
+ flex: 1 1 auto;
78
+ }
79
+
80
+ .n-drawer__footer {
81
+ flex: 0 0 auto;
82
+ }
83
+
84
+ .n-drawer__close {
85
+ cursor: default;
86
+ position: absolute;
87
+ top: 50%;
88
+ right: 0;
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ transform: translateY(-50%);
93
+ opacity: 0.3;
94
+ transition: opacity 0.15s;
95
+ }
96
+
97
+ .n-drawer__close:hover {
98
+ opacity: 0.6;
99
+ }
100
+
101
+ @each $suffix, $values in $form {
102
+
103
+ $-drawer-font: map.get($values, 'font');
104
+ $-drawer-size: map.get($values, 'size');
105
+ $-drawer-radius: map.get($values, 'radius');
106
+ $-drawer-ratio: map.get($values, 'ratio');
107
+
108
+ .n-drawer--#{$suffix} {
109
+ font-size: $-drawer-font;
110
+ }
111
+
112
+ $-drawer-padding: $-drawer-size * $-drawer-ratio;
113
+
114
+ .n-drawer--#{$suffix} .n-drawer__header {
115
+ padding: $-drawer-padding * 1.5 $-drawer-padding * 2;
116
+ }
117
+
118
+ .n-drawer--#{$suffix}.n-closable .n-drawer__header {
119
+ padding-right: $-drawer-size + ($-drawer-padding * 2);
120
+ }
121
+
122
+ .n-drawer--#{$suffix}:not(.n-raw) .n-drawer__wrap {
123
+ padding: $-drawer-padding * 1.5 $-drawer-padding * 2;
124
+ }
125
+
126
+ .n-drawer--#{$suffix} .n-drawer__footer {
127
+ padding: $-drawer-padding * 1.5 $-drawer-padding * 2;
128
+ }
129
+
130
+ .n-drawer__close {
131
+ width: $-drawer-size;
132
+ height: $-drawer-size;
133
+ right: $-drawer-padding * 0.8;
134
+ }
135
+
136
+ }
@@ -1,3 +1,4 @@
1
+ @use 'sass:map';
1
2
  @import "../../../root/vars";
2
3
 
3
4
  .n-durationpicker {
@@ -112,10 +113,10 @@
112
113
 
113
114
  @each $suffix, $values in $form {
114
115
 
115
- $-duration-font: map-get($values, 'font');
116
- $-duration-size: map-get($values, 'size');
117
- $-duration-radius: map-get($values, 'radius');
118
- $-duration-ratio: map-get($values, 'ratio');
116
+ $-duration-font: map.get($values, 'font');
117
+ $-duration-size: map.get($values, 'size');
118
+ $-duration-radius: map.get($values, 'radius');
119
+ $-duration-ratio: map.get($values, 'ratio');
119
120
 
120
121
  .n-durationpicker--#{$suffix} {
121
122
  min-height: $-duration-size;
@@ -1,3 +1,4 @@
1
+ @use 'sass:map';
1
2
  @import "../../../root/vars";
2
3
 
3
4
  .n-empty-icon {
@@ -42,10 +43,10 @@
42
43
 
43
44
  @each $suffix, $values in $form {
44
45
 
45
- $-empty-icon-font: map-get($values, 'font');
46
- $-empty-icon-size: map-get($values, 'size');
47
- $-empty-icon-radius: map-get($values, 'radius');
48
- $-empty-icon-ratio: map-get($values, 'ratio');
46
+ $-empty-icon-font: map.get($values, 'font');
47
+ $-empty-icon-size: map.get($values, 'size');
48
+ $-empty-icon-radius: map.get($values, 'radius');
49
+ $-empty-icon-ratio: map.get($values, 'ratio');
49
50
 
50
51
  .n-empty-icon--#{$suffix} {
51
52
  font-size: $-empty-icon-font;
package/src/form/index.js CHANGED
@@ -1,9 +1,15 @@
1
1
  import Form from './src/form/form';
2
2
  import FormGroup from './src/form-group/form-group';
3
3
  import FormItem from './src/form-item/form-item';
4
+ import FormMenu from './src/form-menu/form-menu';
5
+ import FormFrame from './src/form-frame/form-frame';
6
+ import FormFrameItem from './src/form-frame-item/form-frame-item';
4
7
 
5
8
  export default function (App) {
6
9
  App.component(Form.name, Form);
7
10
  App.component(FormGroup.name, FormGroup);
8
11
  App.component(FormItem.name, FormItem);
12
+ App.component(FormFrame.name, FormFrame);
13
+ App.component(FormFrameItem.name, FormFrameItem);
14
+ App.component(FormMenu.name, FormMenu);
9
15
  }
@@ -1,3 +1,5 @@
1
1
  @import "./src/form/form";
2
2
  @import "./src/form-group/form-group";
3
3
  @import "./src/form-item/form-item";
4
+ @import "./src/form-menu/form-menu";
5
+ @import "./src/form-frame/form-frame";
@@ -104,7 +104,7 @@ export default {
104
104
  data()
105
105
  {
106
106
  return {
107
- uid: UUID(), elements: [], blocked: true,
107
+ uid: UUID(), elements: [], groups: {}, blocked: true,
108
108
  };
109
109
  },
110
110
 
@@ -130,6 +130,16 @@ export default {
130
130
 
131
131
  methods: {
132
132
 
133
+ registerGroup(group)
134
+ {
135
+ this.groups[group.key] = group;
136
+ },
137
+
138
+ unregisterGroup(group)
139
+ {
140
+ delete this.groups[group.key];
141
+ },
142
+
133
143
  onSubmit(event)
134
144
  {
135
145
  if ( this.prevent ) {
@@ -0,0 +1,42 @@
1
+ import { Arr, Obj, Any, Dom, UUID, Locale } from "@kizmann/pico-js";
2
+
3
+ export default {
4
+
5
+ name: 'NFrame',
6
+
7
+ provide()
8
+ {
9
+ return { NFrame: this };
10
+ },
11
+
12
+ props: {
13
+
14
+ resize: {
15
+ default() {
16
+ return false;
17
+ },
18
+ type: [Boolean]
19
+ },
20
+
21
+ scrollbar: {
22
+ default() {
23
+ return false;
24
+ },
25
+ type: [Boolean]
26
+ }
27
+
28
+ },
29
+
30
+ render()
31
+ {
32
+ let classList = [
33
+ 'n-frame'
34
+ ];
35
+
36
+ return (
37
+ <div class={classList}>
38
+ {this.$slots.default && this.$slots.default()}
39
+ </div>
40
+ );
41
+ }
42
+ }