@mythpe/quasar-app-extension-qui 0.0.5 → 0.0.6-dev

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/README.md CHANGED
@@ -6,30 +6,39 @@
6
6
  [![npm](https://img.shields.io/npm/dt/@mythpe/quasar-app-extension-qui.svg)](https://www.npmjs.com/package/@mythpe/quasar-app-extension-qui)
7
7
 
8
8
  # Install
9
+
9
10
  ```bash
10
11
  quasar ext add @mythpe/qui
11
- quasar ext invoke @mythpe/qui
12
12
  ```
13
13
  Quasar CLI will retrieve it from NPM and install the extension.
14
14
 
15
+ # Invoke
16
+
17
+ ```bash
18
+ quasar ext invoke @mythpe/qui
19
+ ```
20
+
21
+
15
22
  ## Prompts
16
23
 
17
24
  > If your app extension uses prompts, explain them here, otherwise remove this section and remove prompts.js file.
18
25
 
19
26
  # Uninstall
27
+
20
28
  ```bash
21
29
  quasar ext remove @mythpe/qui
30
+ ```
31
+
32
+ # Uninvoke
33
+
34
+ ```bash
22
35
  quasar ext uninvoke @mythpe/qui
23
36
  ```
24
37
 
25
38
  # Info
26
- > Add longer information here that will help the user of your app extension.
27
-
28
- # Other Info
29
- > Add other information that's not as important to know
30
39
 
31
- # Donate
32
- If you appreciate the work that went into this App Extension, please consider [donating to Quasar](https://donate.quasar.dev).
40
+ > Add longer information here that will help the user of your app extension.
33
41
 
34
42
  # License
43
+
35
44
  MIT (c) MyTh <mythpe@gmail.com>
package/jsconfig.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": "."
4
+ }
5
+ }
package/package.json CHANGED
@@ -1,18 +1,64 @@
1
1
  {
2
2
  "name": "@mythpe/quasar-app-extension-qui",
3
- "version": "0.0.5",
3
+ "version": "0.0.6-dev",
4
4
  "description": "MyTh Quasar UI Kit App Extension",
5
5
  "author": "MyTh Ahmed Faiz <mythpe@gmail.com>",
6
- "mobile": "+966590470092",
7
6
  "email": "mythpe@gmail.com",
7
+ "mobile": "+966590470092",
8
8
  "license": "MIT",
9
9
  "type": "module",
10
+ "module": "src/index.js",
11
+ "main": "src/index.js",
10
12
  "scripts": {
11
13
  "lint": "eslint --ext .js,.ts,.vue ./",
12
- "lint:fix": "eslint --ext .js,.ts,.vue ./ --fix"
14
+ "lint:fix": "eslint --ext .js,.ts,.vue ./ --fix",
15
+ "build": "node build/index.cjs",
16
+ "build:js": "node build/script.javascript.cjs",
17
+ "build:css": "node build/script.css.cjs"
13
18
  },
14
19
  "dependencies": {
15
- "@mythpe/quasar-ui-qui": "^0.0.5"
20
+ "typed.js": "^2.1.0",
21
+ "vee-validate": "^4.14.0",
22
+ "@vee-validate/i18n": "^4.14.0",
23
+ "@vee-validate/rules": "^4.14.0",
24
+ "vue-i18n": "^10.0.0"
25
+ },
26
+ "devDependencies": {
27
+ "lodash": "^4.17.21",
28
+ "@quasar/app-webpack": "^3.13.0",
29
+ "@quasar/extras": "^1.16.4",
30
+ "@rollup/plugin-buble": "^0.21.3",
31
+ "@rollup/plugin-json": "^4.0.0",
32
+ "@rollup/plugin-node-resolve": "^11.2.1",
33
+ "@rollup/plugin-replace": "^2.4.2",
34
+ "@types/express": "^5.0.0",
35
+ "@types/lodash": "^4.17.13",
36
+ "@types/node": "^22.9.1",
37
+ "@typescript-eslint/eslint-plugin": "^7.16.0",
38
+ "@typescript-eslint/parser": "^7.16.0",
39
+ "autoprefixer": "^10.0.2",
40
+ "chalk": "^4.1.0",
41
+ "core-js": "^3.0.0",
42
+ "cssnano": "^7.0.6",
43
+ "eslint": "^8.57.0",
44
+ "eslint-config-standard": "^17.0.0",
45
+ "eslint-plugin-import": "^2.19.1",
46
+ "eslint-plugin-n": "^15.0.0",
47
+ "eslint-plugin-promise": "^6.0.0",
48
+ "eslint-plugin-vue": "^9.0.0",
49
+ "fs-extra": "^8.1.0",
50
+ "open": "^7.3.0",
51
+ "postcss": "^8.1.9",
52
+ "quasar": "^2.16.0",
53
+ "rimraf": "^3.0.0",
54
+ "rollup": "^2.45.0",
55
+ "rtlcss": "^4.3.0",
56
+ "sass": "^1.33.0",
57
+ "typescript": "~5.5.3",
58
+ "uglify-js": "^3.13.3",
59
+ "vue": "^3.0.0",
60
+ "vue-router": "^4.0.0",
61
+ "zlib": "^1.0.5"
16
62
  },
17
63
  "engines": {
18
64
  "node": "^24 || ^22 || ^20 || ^18",
@@ -1,6 +1,6 @@
1
1
  import { boot } from 'quasar/wrappers'
2
- import VuePlugin from '@mythpe/quasar-ui-qui'
2
+ import Plugin from '../utils/vue-plugin'
3
3
 
4
4
  export default boot(({ app }) => {
5
- app.use(VuePlugin)
5
+ app.use(Plugin)
6
6
  })
@@ -0,0 +1,171 @@
1
+ <script
2
+ lang="ts"
3
+ setup
4
+ >
5
+ import type { MBtnProps } from '../../types'
6
+ import { useI18n } from 'vue-i18n'
7
+ import { computed } from 'vue'
8
+ import { extend } from 'quasar'
9
+ import { myth } from '../../utils/myth'
10
+
11
+ const props = defineProps<MBtnProps>()
12
+ const options = computed(() => myth.options.value.btn ?? {})
13
+ const { t, te } = useI18n({ useScope: 'global' })
14
+ const getLabel = computed(() => {
15
+ if (props.label !== undefined) {
16
+ if (te(`attributes.${props.label}`)) {
17
+ return t(`attributes.${props.label}`)
18
+ }
19
+ if (te(`${props.label}`)) {
20
+ return t(`${props.label}`)
21
+ }
22
+ }
23
+ return props.label
24
+ })
25
+ defineOptions({
26
+ name: 'MBtn',
27
+ inheritAttrs: !1
28
+ })
29
+ </script>
30
+
31
+ <template>
32
+ <q-btn v-bind="extend(!0,{...$attrs},options.props,{...$props},{label: getLabel})">
33
+ <template
34
+ v-if="!!options.loading && !$slots.loading"
35
+ #loading
36
+ >
37
+ <q-spinner-audio
38
+ v-if="options.loading.type === 'audio'"
39
+ :color="options.loading.color"
40
+ :size="options.loading.size"
41
+ class="on-left"
42
+ />
43
+ <q-spinner-ball
44
+ v-if="options.loading.type === 'ball'"
45
+ :color="options.loading.color"
46
+ :size="options.loading.size"
47
+ class="on-left"
48
+ />
49
+ <q-spinner-bars
50
+ v-if="options.loading.type === 'bars'"
51
+ :color="options.loading.color"
52
+ class="on-left"
53
+ />
54
+ <q-spinner-box
55
+ v-if="options.loading.type === 'box'"
56
+ :color="options.loading.color"
57
+ class="on-left"
58
+ />
59
+ <q-spinner-clock
60
+ v-if="options.loading.type === 'clock'"
61
+ :color="options.loading.color"
62
+ class="on-left"
63
+ />
64
+ <q-spinner-comment
65
+ v-if="options.loading.type === 'comment'"
66
+ :color="options.loading.color"
67
+ class="on-left"
68
+ />
69
+ <q-spinner-cube
70
+ v-if="options.loading.type === 'cube'"
71
+ :color="options.loading.color"
72
+ class="on-left"
73
+ />
74
+ <q-spinner-dots
75
+ v-if="options.loading.type === 'dots'"
76
+ :color="options.loading.color"
77
+ class="on-left"
78
+ />
79
+ <q-spinner-facebook
80
+ v-if="options.loading.type === 'facebook'"
81
+ :color="options.loading.color"
82
+ class="on-left"
83
+ />
84
+ <q-spinner-gears
85
+ v-if="options.loading.type === 'gears'"
86
+ :color="options.loading.color"
87
+ class="on-left"
88
+ />
89
+ <q-spinner-grid
90
+ v-if="options.loading.type === 'grid'"
91
+ :color="options.loading.color"
92
+ class="on-left"
93
+ />
94
+ <q-spinner-hearts
95
+ v-if="options.loading.type === 'hearts'"
96
+ :color="options.loading.color"
97
+ class="on-left"
98
+ />
99
+ <q-spinner-hearts
100
+ v-if="options.loading.type === 'hearts'"
101
+ :color="options.loading.color"
102
+ class="on-left"
103
+ />
104
+ <q-spinner-hourglass
105
+ v-if="options.loading.type === 'hourglass'"
106
+ :color="options.loading.color"
107
+ class="on-left"
108
+ />
109
+ <q-spinner-infinity
110
+ v-if="options.loading.type === 'infinity'"
111
+ :color="options.loading.color"
112
+ class="on-left"
113
+ />
114
+ <q-spinner-ios
115
+ v-if="options.loading.type === 'ios'"
116
+ :color="options.loading.color"
117
+ class="on-left"
118
+ />
119
+ <q-spinner-orbit
120
+ v-if="options.loading.type === 'orbit'"
121
+ :color="options.loading.color"
122
+ class="on-left"
123
+ />
124
+ <q-spinner-oval
125
+ v-if="options.loading.type === 'oval'"
126
+ :color="options.loading.color"
127
+ class="on-left"
128
+ />
129
+ <q-spinner-pie
130
+ v-if="options.loading.type === 'pie'"
131
+ :color="options.loading.color"
132
+ class="on-left"
133
+ />
134
+ <q-spinner-puff
135
+ v-if="options.loading.type === 'puff'"
136
+ :color="options.loading.color"
137
+ class="on-left"
138
+ />
139
+ <q-spinner-radio
140
+ v-if="options.loading.type === 'radio'"
141
+ :color="options.loading.color"
142
+ class="on-left"
143
+ />
144
+ <q-spinner-rings
145
+ v-if="options.loading.type === 'rings'"
146
+ :color="options.loading.color"
147
+ class="on-left"
148
+ />
149
+ <q-spinner-tail
150
+ v-if="options.loading.type === 'tail'"
151
+ :color="options.loading.color"
152
+ class="on-left"
153
+ />
154
+ <template v-if="options.loading.label === !0">
155
+ {{ getLabel }}
156
+ </template>
157
+ </template>
158
+ <template
159
+ v-else-if="!!$slots.loading"
160
+ #loading
161
+ >
162
+ <slot name="loading" />
163
+ </template>
164
+ <template
165
+ v-if="!!$slots.default"
166
+ #default
167
+ >
168
+ <slot name="default" />
169
+ </template>
170
+ </q-btn>
171
+ </template>
@@ -0,0 +1,38 @@
1
+ <script lang="ts" setup>
2
+ import type { MBlockProps } from '../../types'
3
+ import { computed } from 'vue'
4
+ import MythOptions from '../../utils/myth'
5
+ import { extend } from 'quasar'
6
+
7
+ interface Props {
8
+ size?: MBlockProps['size'];
9
+ rounded?: MBlockProps['rounded'];
10
+ shadow?: MBlockProps['shadow'];
11
+ }
12
+
13
+ const props = withDefaults(defineProps<Props>(), {
14
+ size: 'md',
15
+ rounded: !1,
16
+ shadow: 'none'
17
+ })
18
+ const block = computed(() => MythOptions.options.value.block ?? {})
19
+ const options = computed<Props>(() => extend(!0, { ...props }, block.value))
20
+ defineOptions({
21
+ name: 'MBlock',
22
+ inheritAttrs: !1
23
+ })
24
+ </script>
25
+
26
+ <template>
27
+ <div
28
+ :class="{
29
+ 'm---block' : !0,
30
+ [`q-pa-${options.size}`] : options.size && options.size !== 'none',
31
+ 'rounded-borders' : options.rounded === !0,
32
+ [`shadow-${options.shadow}`] : options.shadow && options.shadow !== 'none'
33
+ }"
34
+ v-bind="$attrs"
35
+ >
36
+ <slot />
37
+ </div>
38
+ </template>
@@ -0,0 +1,64 @@
1
+ <script
2
+ lang="ts"
3
+ setup
4
+ >
5
+ import { computed } from 'vue'
6
+ import { uniq } from 'lodash'
7
+ import type { MColProps } from '../../types'
8
+
9
+ interface Props {
10
+ name?: MColProps['name']
11
+ auto?: MColProps['auto']
12
+ col?: MColProps['col']
13
+ xs?: MColProps['xs']
14
+ sm?: MColProps['sm']
15
+ md?: MColProps['md']
16
+ lg?: MColProps['lg']
17
+ xl?: MColProps['xl']
18
+ }
19
+
20
+ const props = defineProps<Props>()
21
+ const classes = computed(() => {
22
+ const list: string[] = ['m--col']
23
+ if (props.auto === !0) {
24
+ list.push('col-auto')
25
+ }
26
+ if (props.col === 'grow') {
27
+ list.push('col-grow')
28
+ } else if (props.col === 'shrink') {
29
+ list.push('col-shrink')
30
+ } else if (typeof props.col === 'string') {
31
+ if (props.col?.toString()?.trim()?.length > 0 && !list.includes(`col-${props.col}`)) {
32
+ list.push(`col-${props.col}`)
33
+ }
34
+ }
35
+
36
+ for (const k of (['xs', 'sm', 'md', 'lg', 'xl'] as (keyof Props)[])) {
37
+ if (props[k] && typeof props[k] !== 'boolean') {
38
+ if (!list.includes(`col-${k}-${props[k]}`)) {
39
+ list.push(`col-${k}-${props[k]}`)
40
+ }
41
+ }
42
+ }
43
+
44
+ if (list.length === 1 && props.col !== !1) {
45
+ list.push('col')
46
+ }
47
+ return uniq(list)
48
+ // return list
49
+ })
50
+ defineOptions({
51
+ name: 'MCol',
52
+ inheritAttrs: !1
53
+ })
54
+ </script>
55
+
56
+ <template>
57
+ <div
58
+ :class="classes"
59
+ :data-input-name="name??undefined"
60
+ v-bind="$attrs"
61
+ >
62
+ <slot />
63
+ </div>
64
+ </template>
@@ -0,0 +1,15 @@
1
+ <script lang="ts" setup>
2
+ defineOptions({
3
+ name: 'MColumn',
4
+ inheritAttrs: !1
5
+ })
6
+ </script>
7
+
8
+ <template>
9
+ <div
10
+ class="m--column column"
11
+ v-bind="$attrs"
12
+ >
13
+ <slot />
14
+ </div>
15
+ </template>
@@ -0,0 +1,46 @@
1
+ <!--
2
+ - MyTh Ahmed Faiz Copyright © 2016-2024 All rights reserved.
3
+ - Email: mythpe@gmail.com
4
+ - Mobile: +966590470092
5
+ - Website: https://www.4myth.com
6
+ - Github: https://github.com/mythpe
7
+ -->
8
+
9
+ <script lang="ts" setup>
10
+ import type { MContainerProps } from '../../types'
11
+ import MythOptions from '../../utils/myth'
12
+ import { computed } from 'vue'
13
+
14
+ interface Props {
15
+ size?: MContainerProps['size'];
16
+ fluid?: MContainerProps['fluid'];
17
+ dense?: MContainerProps['dense'];
18
+ }
19
+
20
+ const props = defineProps<Props>()
21
+ const styles = computed(() => MythOptions.options.value?.style ?? {})
22
+ const sizeProp = computed(() => {
23
+ if (props.size !== undefined) {
24
+ return props.size
25
+ }
26
+ return styles.value.gutters
27
+ })
28
+ defineOptions({
29
+ name: 'MContainer',
30
+ inheritAttrs: !1
31
+ })
32
+ </script>
33
+
34
+ <template>
35
+ <div
36
+ :class="{
37
+ 'm--container' : !0,
38
+ 'm--container__fluid' : (fluid !== !1 && fluid !== undefined) || (styles.fluid === !0 && (fluid !== !1 && fluid !== undefined)),
39
+ 'm--container__dense' : dense !== !1 && dense !== undefined,
40
+ [`q-pa-${sizeProp||''}`]: sizeProp && sizeProp !== 'none'
41
+ }"
42
+ v-bind="$attrs"
43
+ >
44
+ <slot />
45
+ </div>
46
+ </template>
@@ -0,0 +1,62 @@
1
+ <!--
2
+ - MyTh Ahmed Faiz Copyright © 2016-2024 All rights reserved.
3
+ - Email: mythpe@gmail.com
4
+ - Mobile: +966590470092
5
+ - Website: https://www.4myth.com
6
+ - Github: https://github.com/mythpe
7
+ -->
8
+
9
+ <script
10
+ lang="ts"
11
+ setup
12
+ >
13
+ import { useI18n } from 'vue-i18n'
14
+
15
+ interface Props {
16
+ text?: string | undefined;
17
+ icon?: string | undefined;
18
+ tooltip?: boolean | undefined;
19
+ }
20
+
21
+ defineProps<Props>()
22
+ const { t, te } = useI18n({ useScope: 'global' })
23
+ const __ = (s: any) => !s ? '' : te(`attributes.${s}`) ? t(`attributes.${s}`) : te(s) ? t(s) : s
24
+ defineOptions({
25
+ name: 'MHelpRow',
26
+ inheritAttrs: !1
27
+ })
28
+ </script>
29
+
30
+ <template>
31
+ <div class="row">
32
+ <div class="col-auto">
33
+ <q-icon
34
+ :left="!!text && !tooltip"
35
+ class="cursor-pointer"
36
+ name="ion-ios-information-circle-outline"
37
+ size="19px"
38
+ >
39
+ <q-tooltip
40
+ v-if="!!tooltip"
41
+ anchor="center end"
42
+ class="bg-transparent text-black text-justify"
43
+ self="center start"
44
+ transition-hide="jump-right"
45
+ transition-show="jump-left"
46
+ >
47
+ <q-card style="max-width: 280px">
48
+ <q-card-section style="font-size: 13px">
49
+ {{ __(text) }}
50
+ </q-card-section>
51
+ </q-card>
52
+ </q-tooltip>
53
+ </q-icon>
54
+ </div>
55
+ <div
56
+ v-if="!tooltip && !!text"
57
+ class="col"
58
+ >
59
+ <div v-text="__(text)" />
60
+ </div>
61
+ </div>
62
+ </template>
@@ -0,0 +1,35 @@
1
+ <script
2
+ lang="ts"
3
+ setup
4
+ >
5
+ import type { MRowProps } from '../../types'
6
+ import { computed } from 'vue'
7
+ import MythOptions from '../../utils/myth'
8
+
9
+ interface Props {
10
+ gutter?: MRowProps['gutter'];
11
+ col?: MRowProps['col'];
12
+ }
13
+
14
+ const props = defineProps<Props>()
15
+ const defSize = computed<string>(() => MythOptions.options.value.style?.gutters || '')
16
+ const gutterSize = computed<string>(() => props.gutter === !0 ? defSize.value : (props.gutter || defSize.value))
17
+ const colSize = computed<string>(() => props.gutter === !0 ? defSize.value : (props.gutter || defSize.value))
18
+ defineOptions({
19
+ name: 'MRow',
20
+ inheritAttrs: !1
21
+ })
22
+ </script>
23
+
24
+ <template>
25
+ <div
26
+ :class="{
27
+ 'm--row row': !0,
28
+ [`q-gutter-${gutterSize}`]: gutter !== !1 && gutter !== undefined,
29
+ [`q-col-gutter-${colSize}`]: col !== !1 && col !== undefined,
30
+ }"
31
+ v-bind="$attrs"
32
+ >
33
+ <slot />
34
+ </div>
35
+ </template>
@@ -0,0 +1,78 @@
1
+ <script
2
+ lang="ts"
3
+ setup
4
+ >
5
+
6
+ import Typed, { type TypedOptions } from 'typed.js'
7
+ import { computed, onBeforeUnmount, onMounted, watch } from 'vue'
8
+ import type { MTypingStringProps } from '../../types'
9
+
10
+ interface Props {
11
+ name: MTypingStringProps['name'];
12
+ tag?: MTypingStringProps['tag'];
13
+ string: MTypingStringProps['string'];
14
+ loop?: MTypingStringProps['loop'];
15
+ typeSpeed?: MTypingStringProps['typeSpeed'];
16
+ backDelay?: MTypingStringProps['backDelay'];
17
+ fadeOut?: MTypingStringProps['fadeOut'];
18
+ options?: MTypingStringProps['options'];
19
+ }
20
+
21
+ const props = defineProps<Props>()
22
+
23
+ const elmId = computed(() => `typed-content-${props.name}`)
24
+ const computedOptions = computed(() => ({
25
+ loop: props.loop === undefined ? !1 : props.loop,
26
+ typeSpeed: props.typeSpeed === undefined ? 300 : props.typeSpeed,
27
+ backDelay: props.backDelay,
28
+ fadeOut: props.fadeOut,
29
+ strings: typeof props.string === 'string' ? [props.string] : props.string,
30
+ ...props.options
31
+ } as TypedOptions))
32
+ let typed: Typed | undefined
33
+ const iniTyped = () => {
34
+ try {
35
+ typed = new Typed(`#${elmId.value}`, computedOptions.value)
36
+ } catch (e) {
37
+ console.log(e)
38
+ }
39
+ }
40
+ const destroy = () => {
41
+ if (typed) {
42
+ try {
43
+ typed.destroy()
44
+ } catch (e) {
45
+
46
+ }
47
+ }
48
+ }
49
+ watch(() => props.string, () => {
50
+ destroy()
51
+ iniTyped()
52
+ })
53
+ onMounted(() => {
54
+ if (props.string) {
55
+ try {
56
+ iniTyped()
57
+ } catch (e) {
58
+ console.log(e)
59
+ const a = document.getElementById(elmId.value)
60
+ a && (a.innerHTML = typeof props.string === 'string' ? props.string : props.string.join('<br />'))
61
+ }
62
+ }
63
+ })
64
+ onBeforeUnmount(() => destroy())
65
+ defineExpose({ typed })
66
+ defineOptions({
67
+ name: 'MTypingString',
68
+ inheritAttrs: !1
69
+ })
70
+ </script>
71
+
72
+ <template>
73
+ <component
74
+ :is="tag || 'span'"
75
+ :id="elmId"
76
+ v-bind="$attrs"
77
+ />
78
+ </template>
package/src/index.js CHANGED
@@ -9,17 +9,14 @@ function extendConf (conf, api) {
9
9
  // register our boot file
10
10
  conf.boot.push('~@mythpe/quasar-app-extension-qui/src/boot/register.js')
11
11
 
12
- if (api.hasWebpack) {
13
- // make sure app extension files & ui package gets transpiled
14
- const transpileTarget = (
15
- conf.build.webpackTranspileDependencies || // q/app-webpack >= v4
16
- conf.build.transpileDependencies // q/app-webpack v3
17
- )
18
- transpileTarget.push(/@mythpe\/quasar-app-extension-qui[\\/]src/)
12
+ // @quasar/app-vite does not need this
13
+ if (api.hasVite !== true) {
14
+ // make sure boot & component files get transpiled
15
+ conf.build.transpileDependencies.push(/@mythpe\/quasar-app-extension-qui[\\/]src/)
19
16
  }
20
17
 
21
18
  // make sure the stylesheet goes through webpack to avoid SSR issues
22
- conf.css.push('~@mythpe/quasar-ui-qui/src/index.sass')
19
+ conf.css.push('~@mythpe/quasar-app-extension-qui/src/index.sass')
23
20
  }
24
21
 
25
22
  export default function (api) {
package/src/index.sass ADDED
@@ -0,0 +1,27 @@
1
+ @import 'quasar/src/css/variables.sass'
2
+ $m--container-padding: $space-base !default
3
+ $m--container-fluid-width: 1440px !default
4
+ $m--row-margin-top: $m--container-padding !default
5
+
6
+ .flex-break
7
+ flex: 1 0 100% !important
8
+
9
+ .row
10
+ .flex-break
11
+ height: 0 !important
12
+
13
+ .column
14
+ .flex-break
15
+ width: 0 !important
16
+
17
+ .m--container
18
+ &__dense
19
+ padding: 0 !important
20
+
21
+ &__fluid
22
+ max-width: $m--container-fluid-width
23
+ margin-left: auto
24
+ margin-right: auto
25
+
26
+ .m--row + .m--row
27
+ margin-top: $m--row-margin-top
@@ -0,0 +1,163 @@
1
+ import type { GlobalComponentConstructor, QBtnProps, QBtnSlots, QItemProps } from 'quasar'
2
+ import type { VNode } from 'vue'
3
+ import { TypedOptions } from 'typed.js'
4
+
5
+ export type StyleSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'none';
6
+
7
+ export interface MBtnProps extends QBtnProps {
8
+ //
9
+ }
10
+
11
+ export interface MBtnSlots extends QBtnSlots {
12
+ /**
13
+ * Use for custom content, instead of relying on 'icon' and 'label' props
14
+ */
15
+ default: () => VNode[];
16
+ /**
17
+ * Override the default QSpinner when in 'loading' state
18
+ */
19
+ loading: () => VNode[];
20
+ }
21
+
22
+ export interface MBlockProps {
23
+ /**
24
+ * Size of the padding block.
25
+ * Default: 'md'
26
+ */
27
+ readonly size?: StyleSize | undefined;
28
+ /**
29
+ * Rounded block
30
+ */
31
+ readonly rounded?: boolean | undefined;
32
+ /**
33
+ * Shadow level
34
+ */
35
+ readonly shadow?: string | number | 'transition' | 'none' | undefined;
36
+ }
37
+
38
+ export interface MBlockSlots {
39
+ default: () => VNode[];
40
+ }
41
+
42
+ export type ColStyleType =
43
+ boolean
44
+ | undefined
45
+ | string
46
+ | number
47
+ | 'auto'
48
+ | 'grow'
49
+ | 'shrink'
50
+ | '1'
51
+ | '2'
52
+ | '3'
53
+ | '4'
54
+ | '5'
55
+ | '6'
56
+ | '7'
57
+ | '8'
58
+ | '9'
59
+ | '10'
60
+ | '11'
61
+ | '12'
62
+ | 1
63
+ | 2
64
+ | 3
65
+ | 4
66
+ | 5
67
+ | 6
68
+ | 7
69
+ | 8
70
+ | 9
71
+ | 10
72
+ | 11
73
+ | 12
74
+
75
+ export interface MColProps {
76
+ readonly auto?: boolean | undefined;
77
+ readonly col?: ColStyleType;
78
+ readonly xs?: ColStyleType;
79
+ readonly sm?: ColStyleType;
80
+ readonly md?: ColStyleType;
81
+ readonly lg?: ColStyleType;
82
+ readonly xl?: ColStyleType;
83
+ readonly name?: string;
84
+ }
85
+
86
+ export interface MColSlots {
87
+ default: () => VNode[];
88
+ }
89
+
90
+ export interface MColumnProps {
91
+ [key: string]: any;
92
+ }
93
+
94
+ export interface MColumnSlots {
95
+ default: () => VNode[];
96
+ }
97
+
98
+ export interface MContainerProps {
99
+ readonly size?: StyleSize | string | undefined;
100
+ readonly dense?: boolean | undefined;
101
+ readonly fluid?: boolean | undefined;
102
+ }
103
+
104
+ export interface MContainerSlots {
105
+ default: () => VNode[];
106
+ }
107
+
108
+ export interface MRowProps {
109
+ /**
110
+ * Default: false.
111
+ */
112
+ gutter?: boolean | StyleSize | undefined;
113
+ /**
114
+ * Default: false.
115
+ */
116
+ col?: boolean | StyleSize | undefined;
117
+ }
118
+
119
+ export interface MRowSlots {
120
+ default: () => VNode[];
121
+ }
122
+
123
+ export interface MHelpRowProps extends Partial<QItemProps> {
124
+ text?: string | undefined;
125
+ icon?: string | undefined;
126
+ tooltip?: boolean | undefined;
127
+ }
128
+
129
+ export interface MHelpRowSlots {
130
+ default: () => VNode[];
131
+ }
132
+
133
+ export interface MTypingStringProps {
134
+ name: number | string;
135
+ tag?: string;
136
+ string: string | string[];
137
+ loop?: TypedOptions['loop'];
138
+ typeSpeed?: TypedOptions['typeSpeed'];
139
+ backDelay?: TypedOptions['backDelay'];
140
+ fadeOut?: TypedOptions['fadeOut'];
141
+ options?: Omit<TypedOptions, 'loop' | 'typeSpeed' | 'backDelay' | 'fadeOut'>;
142
+ }
143
+
144
+ export interface MTypingStringSlots {
145
+ default: () => VNode[];
146
+ }
147
+
148
+ declare module '@vue/runtime-core' {
149
+ interface GlobalComponents {
150
+ // Form.
151
+ MBtn: GlobalComponentConstructor<MBtnProps, MBtnSlots>;
152
+
153
+ // Grid.
154
+ MBlock: GlobalComponentConstructor<MBlockProps, MBlockSlots>;
155
+ MCol: GlobalComponentConstructor<MColProps, MColSlots>;
156
+ MColumn: GlobalComponentConstructor<MColumnProps, MColumnSlots>;
157
+ MContainer: GlobalComponentConstructor<MContainerProps, MContainerSlots>;
158
+ MHelpRow: GlobalComponentConstructor<MHelpRowProps, MHelpRowSlots>;
159
+ MRow: GlobalComponentConstructor<MRowProps, MRowSlots>;
160
+ // Typography.
161
+ MTypingString: GlobalComponentConstructor<MTypingStringProps, MTypingStringSlots>;
162
+ }
163
+ }
@@ -0,0 +1,2 @@
1
+ export * from './components'
2
+ export * from './myth'
@@ -0,0 +1,42 @@
1
+ import type { QBtnProps } from 'quasar'
2
+ import type { Ref } from 'vue'
3
+ import type { MBlockProps, StyleSize } from './components'
4
+
5
+ export interface UiOptionsContext {
6
+ /**
7
+ * Style of the components.
8
+ */
9
+ style?: {
10
+ /**
11
+ * Apply Padding on all sides of components.
12
+ */
13
+ gutters?: StyleSize | undefined;
14
+ /**
15
+ * Apply Fluid on all sides of containers.
16
+ */
17
+ fluid?: boolean | undefined;
18
+ };
19
+ /**
20
+ * MBtn component.
21
+ */
22
+ btn?: {
23
+ props?: Partial<QBtnProps>;
24
+ loading?: {
25
+ type: 'audio' | 'ball' | 'bars' | 'box' | 'clock' | 'comment' | 'cube' | 'dots' | 'facebook' | 'gears' | 'grid' | 'hearts' | 'hourglass' | 'infinity' | 'ios' | 'orbit' | 'oval' | 'pie' | 'puff' | 'radio' | 'rings' | 'tail';
26
+ color?: string | undefined;
27
+ size?: string | undefined;
28
+ label?: boolean | undefined;
29
+ }
30
+ };
31
+ /**
32
+ * MBlock component.
33
+ */
34
+ block?: Partial<MBlockProps>;
35
+ }
36
+
37
+ export interface MythContext {
38
+ options: Ref<UiOptionsContext>;
39
+ setOptions: (values: Partial<UiOptionsContext>) => void;
40
+ withOptions: (values: Partial<UiOptionsContext>) => void;
41
+ withBtnOptions: (values: Partial<QBtnProps>) => void;
42
+ }
@@ -0,0 +1,28 @@
1
+ import { ref } from 'vue'
2
+ import { extend } from 'quasar'
3
+
4
+ const defGutters = 'md'
5
+ const defaultOptions = {
6
+ style: {
7
+ gutters: defGutters
8
+ }
9
+ }
10
+ const optionsRef = ref({ ...defaultOptions })
11
+
12
+ export const myth = {
13
+ options: optionsRef,
14
+ setOptions (values) {
15
+ optionsRef.value = extend(!0, defaultOptions, values)
16
+ },
17
+ withOptions (values) {
18
+ optionsRef.value = extend(!0, defaultOptions, optionsRef.value, values)
19
+ },
20
+ withBtnOptions (values) {
21
+ this.withOptions({
22
+ btn: {
23
+ props: values
24
+ }
25
+ })
26
+ }
27
+ }
28
+ export default myth
@@ -0,0 +1,40 @@
1
+ import js from '../../package.json'
2
+ import myth from './myth.js'
3
+ import MBtn from '../components/form/MBtn.vue'
4
+ import MBlock from '../components/grid/MBlock.vue'
5
+ import MCol from '../components/grid/MCol.vue'
6
+ import MColumn from '../components/grid/MColumn.vue'
7
+ import MContainer from '../components/grid/MContainer.vue'
8
+ import MHelpRow from '../components/grid/MHelpRow.vue'
9
+ import MRow from '../components/grid/MRow.vue'
10
+ import MTypingString from '../components/typography/MTypingString.vue'
11
+
12
+ const name = js.name
13
+ const version = js.version
14
+
15
+ function install (app, options = {}) {
16
+ myth.withOptions(options)
17
+
18
+ // Form.
19
+ app.component('MBtn', MBtn)
20
+
21
+ // Grid.
22
+ app.component('MBlock', MBlock)
23
+ app.component('MCol', MCol)
24
+ app.component('MColumn', MColumn)
25
+ app.component('MContainer', MContainer)
26
+ app.component('MHelpRow', MHelpRow)
27
+ app.component('MRow', MRow)
28
+
29
+ // Typography.
30
+ app.component('MTypingString', MTypingString)
31
+ }
32
+
33
+ export const e = {
34
+ name,
35
+ version,
36
+ install,
37
+ myth
38
+ }
39
+
40
+ export default e
package/tsconfig.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": "./src",
4
+ "rootDir": "./src",
5
+ "outDir": "dist",
6
+ "esModuleInterop": true,
7
+ "skipLibCheck": true,
8
+ "target": "esnext",
9
+ "allowJs": true,
10
+ "resolveJsonModule": true,
11
+ "moduleDetection": "force",
12
+ "isolatedModules": true,
13
+ "verbatimModuleSyntax": true,
14
+ "module": "preserve",
15
+ "noEmit": true,
16
+ "lib": [
17
+ "esnext",
18
+ "dom",
19
+ "dom.iterable"
20
+ ],
21
+ "strict": true,
22
+ "allowUnreachableCode": false,
23
+ "allowUnusedLabels": false,
24
+ "noImplicitOverride": true,
25
+ "exactOptionalPropertyTypes": true,
26
+ "noUncheckedIndexedAccess": true
27
+ },
28
+ "exclude": [
29
+ "./build"
30
+ ],
31
+ "include": [
32
+ "src/**/*"
33
+ ]
34
+ }
package/types.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './src/utils/vue-plugin'
2
+ export * from './src/types'
package/src/types.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from '@mythpe/quasar-ui-qui/types'