@qikdev/vue-ui 0.0.1 → 0.0.2

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 (72) hide show
  1. package/package.json +6 -2
  2. package/src/components.js +209 -6
  3. package/src/content/browser.vue +477 -0
  4. package/src/content/item.vue +48 -0
  5. package/src/content/render/field.vue +423 -0
  6. package/src/content/render/group.vue +65 -0
  7. package/src/content/render/render-mixin.js +101 -0
  8. package/src/content/render/render.vue +86 -0
  9. package/src/filter/FilterBuilder.vue +147 -0
  10. package/src/filter/FilterCondition.vue +335 -0
  11. package/src/filter/FilterRule.vue +257 -0
  12. package/src/form/expressions/index.js +83 -0
  13. package/src/form/field.vue +624 -0
  14. package/src/form/form.vue +280 -0
  15. package/src/form/getDefaultValue.js +224 -0
  16. package/src/form/inputs/button-select.vue +208 -0
  17. package/src/form/inputs/checkbox.vue +91 -0
  18. package/src/form/inputs/content-select.vue +187 -0
  19. package/src/form/inputs/currency.vue +205 -0
  20. package/src/form/inputs/datefield.vue +132 -0
  21. package/src/form/inputs/group.vue +155 -0
  22. package/src/form/inputs/input-mixin.js +440 -0
  23. package/src/form/inputs/native-select-old.vue +43 -0
  24. package/src/form/inputs/object-field.vue +50 -0
  25. package/src/form/inputs/option.vue +19 -0
  26. package/src/form/inputs/options-manager.vue +244 -0
  27. package/src/form/inputs/phone-number-input.vue +235 -0
  28. package/src/form/inputs/search.vue +117 -0
  29. package/src/form/inputs/select.vue +211 -0
  30. package/src/form/inputs/switch.vue +87 -0
  31. package/src/form/inputs/textarea.vue +80 -0
  32. package/src/form/inputs/textfield.vue +165 -0
  33. package/src/form/inputs/timezone.vue +642 -0
  34. package/src/form/inputs/upload/filedrop.vue +72 -0
  35. package/src/form/inputs/upload/upload.vue +323 -0
  36. package/src/form/parseBoolean.js +24 -0
  37. package/src/layout/flex-body.vue +3 -2
  38. package/src/layout/flex-cell.vue +45 -0
  39. package/src/layout/flex-column.vue +1 -1
  40. package/src/layout/flex-footer.vue +3 -2
  41. package/src/layout/flex-header.vue +3 -2
  42. package/src/layout/flex-row.vue +35 -0
  43. package/src/layout/flex-spacer.vue +17 -0
  44. package/src/layout/panel-body.vue +13 -0
  45. package/src/layout/panel-footer.vue +20 -0
  46. package/src/layout/panel-header.vue +20 -0
  47. package/src/layout/panel.vue +23 -0
  48. package/src/modal/ConfirmModal.vue +50 -0
  49. package/src/modal/ContentModal.vue +99 -0
  50. package/src/modal/Modal.vue +85 -0
  51. package/src/modal/ModalMixin.js +21 -0
  52. package/src/modal/OptionsModal.vue +31 -0
  53. package/src/modal/PromptModal.vue +31 -0
  54. package/src/services/selection.js +140 -0
  55. package/src/table/Table.vue +269 -0
  56. package/src/table/TableCell.vue +64 -0
  57. package/src/table/TableRow.vue +94 -0
  58. package/src/table/cells/TableCellMixin.js +15 -0
  59. package/src/table/cells/Thumbnail.vue +38 -0
  60. package/src/ui/button.vue +254 -0
  61. package/src/ui/checkbox.vue +79 -0
  62. package/src/ui/icon.vue +57 -0
  63. package/src/ui/image.vue +158 -0
  64. package/src/ui/link.vue +62 -0
  65. package/src/ui/list-item.vue +16 -0
  66. package/src/ui/list.vue +26 -0
  67. package/src/ui/menu.vue +135 -0
  68. package/src/ui/progressbar.vue +77 -0
  69. package/src/ui/spinner.vue +26 -0
  70. package/src/ui/switch.vue +89 -0
  71. package/yarn-error.log +2923 -0
  72. package/index.js +0 -14
@@ -0,0 +1,135 @@
1
+ <template>
2
+ <div class="ux-menu">
3
+ <span>
4
+ <slot name="activator" :on="on" />
5
+ </span>
6
+ <div class="ux-menu-panel" ref="menu" v-if="expanded" :style="contentStyle">
7
+ <slot />
8
+ </div>
9
+ </div>
10
+ </template>
11
+ <script>
12
+ export default {
13
+ props: {
14
+ closeOnClick: {
15
+ type: Boolean,
16
+ default () {
17
+ return true;
18
+ }
19
+ }
20
+ },
21
+ data() {
22
+ return {
23
+ contentStyle: {},
24
+ collapsed: true,
25
+ triggerEvent: null,
26
+ refMenu: null,
27
+ mounted: false,
28
+ }
29
+ },
30
+ mounted() {
31
+ this.refMenu = this.$refs.menu;
32
+ this.mounted = true;
33
+ },
34
+ beforeUnmount() {
35
+ this.removeListeners();
36
+ this.refMenu = null;
37
+ this.mounted = false;
38
+ },
39
+ methods: {
40
+ removeListeners() {
41
+ document.removeEventListener('click', this.globalClick);
42
+ if (this.refMenu) {
43
+ this.refMenu.removeEventListener('click', this.immediateClick);
44
+ }
45
+ },
46
+ addEventListeners() {
47
+ document.addEventListener('click', this.globalClick);
48
+ if (this.refMenu) {
49
+ this.refMenu.addEventListener('click', this.immediateClick);
50
+ }
51
+ },
52
+ immediateClick(event) {
53
+ if (this.expanded) {
54
+ if (this.closeOnClick) {
55
+ event.stopImmediatePropagation();
56
+ this.expanded = false;
57
+
58
+ }
59
+ }
60
+ },
61
+ globalClick(event) {
62
+ console.log('GLOBAL', event);
63
+
64
+
65
+ if (this.triggerEvent === event) {
66
+ return;
67
+ }
68
+
69
+ var parentElement = this.$refs.menu;
70
+ var childElement = event.srcElement;
71
+
72
+ if (parentElement.contains(childElement)) {
73
+ //Do nothing
74
+ if (this.closeOnClick) {
75
+ this.expanded = false;
76
+ // event.stopImmediatePropagation();
77
+ }
78
+ } else {
79
+ this.expanded = false;
80
+ }
81
+ },
82
+ position() {
83
+ const rect = this.$el.getBoundingClientRect();
84
+
85
+ var parentPosition = {
86
+ left: rect.left + window.scrollX,
87
+ top: rect.top + window.scrollY
88
+ }
89
+
90
+ this.contentStyle.left = parentPosition.left;
91
+ this.contentStyle.top = parentPosition.top;
92
+
93
+ },
94
+ },
95
+ computed: {
96
+ expanded: {
97
+ get() {
98
+ return !this.collapsed;
99
+ },
100
+ set(v) {
101
+ this.collapsed = !v;
102
+
103
+ if (this.collapsed) {
104
+ this.removeListeners();
105
+ } else {
106
+ this.position();
107
+ this.addEventListeners();
108
+
109
+ }
110
+ }
111
+ },
112
+ on() {
113
+
114
+ var self = this;
115
+
116
+ return {
117
+ click(event) {
118
+ self.triggerEvent = event;
119
+ self.expanded = !self.expanded;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ </script>
126
+ <style lang="scss" scoped>
127
+ .ux-menu {
128
+ position: relative;
129
+
130
+ .ux-menu-panel {
131
+ position: fixed;
132
+ z-index: 1;
133
+ }
134
+ }
135
+ </style>
@@ -0,0 +1,77 @@
1
+ <template>
2
+ <div class="ux-progress">
3
+ <div class="ux-progress-bg" />
4
+ <div class="ux-progress-fg" :style="barStyle" />
5
+ </div>
6
+ </template>
7
+ <script>
8
+ export default {
9
+ props: {
10
+ value: {
11
+ type: Number
12
+ }
13
+ },
14
+ computed: {
15
+ classes() {
16
+
17
+ var array = [];
18
+
19
+ array.push(this.icon);
20
+
21
+ if (this.spin) {
22
+ array.push(`fa-spin`);
23
+ }
24
+
25
+ if (this.left) {
26
+ array.push('ux-icon-left')
27
+ }
28
+ if (this.right) {
29
+ array.push('ux-icon-right')
30
+ }
31
+ return array;
32
+ },
33
+ percent() {
34
+ return this.value;
35
+ },
36
+ barStyle() {
37
+ return {
38
+ width: `${this.percent}%`,
39
+ }
40
+ },
41
+ element() {
42
+ return 'i'
43
+ },
44
+ },
45
+ }
46
+ </script>
47
+ <style lang="scss" scoped>
48
+ .ux-progress {
49
+ margin: 1em 0;
50
+ position: relative;
51
+ height: 1em;
52
+ }
53
+
54
+ .ux-progress-bg {
55
+ position: absolute;
56
+ top: 0;
57
+ left: 0;
58
+ bottom: 0;
59
+ right: 0;
60
+ height: 100%;
61
+ width: 100%;
62
+ background: rgba(#000, 0.03);
63
+ border-radius: 0.5em;
64
+ box-shadow: inset 0px 0.3em 0.3em rgba(#000, 0.1);
65
+ }
66
+
67
+ .ux-progress-fg {
68
+ background: $primary;
69
+ position: absolute;
70
+ top: 0;
71
+ left: 0;
72
+ bottom: 0;
73
+ height: 100%;
74
+ border-radius: 0.5em;
75
+ opacity: 1;
76
+ }
77
+ </style>
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <div class="ux-spinner" :class="{large:large}"><i class="fa fa-spin fa-spinner"/></div>
3
+ </template>
4
+ <script>
5
+
6
+ export default {
7
+ props:{
8
+ large:{
9
+ type:Boolean,
10
+ }
11
+ }
12
+ }
13
+ </script>
14
+ <style lang="scss" scoped>
15
+
16
+ .ux-spinner {
17
+ &.large {
18
+ position:absolute;
19
+ left:50%;
20
+ top:50%;
21
+ transform: translate3d(-50%, -50%, 0);
22
+ font-size: clamp(50px, 10vw, 500px);
23
+ opacity: 0.5;;
24
+ }
25
+ }
26
+ </style>
@@ -0,0 +1,89 @@
1
+ <template>
2
+ <button class="ux-switch" :class="classes">
3
+ </button>
4
+ </template>
5
+ <script>
6
+ export default {
7
+ props: {
8
+ value: {
9
+ type: Boolean,
10
+ default () {
11
+ return false;
12
+ }
13
+ },
14
+ },
15
+ computed: {
16
+ classes() {
17
+ var array = [];
18
+ if (this.value) {
19
+ array.push(`ux-switch-true`);
20
+ } else {
21
+ array.push(`ux-switch-false`);
22
+ }
23
+ return array;
24
+ },
25
+ },
26
+ }
27
+ </script>
28
+ <style lang="scss" scoped>
29
+ .ux-switch {
30
+
31
+ $size: 1.8em;
32
+ border-radius: 1em;
33
+ display: inline-block;
34
+ position: relative;
35
+ cursor: pointer;
36
+ overflow: hidden;
37
+ border: 1px solid rgba(#000, 0.1);
38
+ height: 0;
39
+ width: $size;
40
+ padding: 0 $size $size;
41
+ text-align: center;
42
+ line-height: 2em;
43
+ appearance: none;
44
+ font-size: inherit;
45
+ background: rgba(#000, 0.05);
46
+ box-sizing: border-box;
47
+ box-shadow: inset 0.1em 0.1em 0.3em rgba(#000, 0.2);
48
+ vertical-align: top;
49
+
50
+
51
+ &:after {
52
+ content: '';
53
+ display: block;
54
+ background: #fff;
55
+ height: 100%;
56
+ width: 50%;
57
+ top: 0;
58
+ left: 0;
59
+ bottom: 0;
60
+ right: 0;
61
+ position: absolute;
62
+ border-radius: 1em;
63
+ border: 1px solid rgba(#000, 0.3);
64
+ box-sizing: border-box;
65
+ box-shadow: 0 0 2em rgba(#000, 0.3);
66
+ transition: transform 0.3s;
67
+ transform: scale(0.8);
68
+ }
69
+
70
+ &:hover {
71
+ border: 1px solid $primary;
72
+
73
+ &:after {
74
+ transform: scale(1);
75
+ }
76
+ }
77
+
78
+ &.ux-switch-true {
79
+ background: $primary;
80
+ // border-color: #fff;
81
+
82
+ &:after {
83
+ transform: translateX(100%);
84
+ }
85
+ }
86
+
87
+
88
+ }
89
+ </style>