├── ui ├── dev │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── components │ │ │ └── .gitkeep │ │ ├── css │ │ │ ├── app.sass │ │ │ └── quasar.variables.sass │ │ ├── boot │ │ │ └── register.js │ │ ├── App.vue │ │ ├── router │ │ │ ├── routes.js │ │ │ ├── pages.js │ │ │ └── index.js │ │ ├── pages │ │ │ ├── Error404.vue │ │ │ ├── Index.vue │ │ │ ├── 4-QDateScroller-Locale.vue │ │ │ ├── 6-QDateTimeScroller-Locale.vue │ │ │ ├── 4-QDateScroller-Misc.vue │ │ │ ├── 2-QTimeScroller-Misc.vue │ │ │ ├── 4-QDateScroller-Borders.vue │ │ │ ├── 5-QDateRangeScroller-Borders.vue │ │ │ ├── 6-QDateTimeScroller-Borders.vue │ │ │ ├── 3-QTimeRangeScroller-Misc.vue │ │ │ ├── 2-QTimeScroller-Intervals.vue │ │ │ ├── 3-QTimeRangeScroller-Intervals.vue │ │ │ ├── 2-QTimeScroller-Borders.vue │ │ │ ├── 3-QTimeRangeScroller-Borders.vue │ │ │ ├── 2-QTimeScroller-Value-Types.vue │ │ │ ├── 4-QDateScroller-Value-Types.vue │ │ │ └── 6-QDateTimeScroller-Value-Types.vue │ │ ├── layouts │ │ │ └── MyLayout.vue │ │ └── index.template.html │ ├── .eslintignore │ ├── babel.config.js │ ├── public │ │ ├── favicon.ico │ │ └── icons │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ └── favicon-128x128.png │ ├── README.md │ ├── .editorconfig │ ├── .postcssrc.js │ ├── .gitignore │ ├── jsconfig.json │ ├── package.json │ └── .eslintrc.js ├── .env.jest ├── .eslintignore ├── build │ ├── entry │ │ ├── index.common.js │ │ ├── index.esm.js │ │ └── index.umd.js │ ├── script.open-umd.js │ ├── script.clean.js │ ├── build.api.js │ ├── config.js │ ├── index.js │ ├── script.app-ext.js │ └── script.css.js ├── src │ ├── index.sass │ ├── components │ │ ├── QScroller.sass │ │ └── QScroller.js │ ├── utils │ │ └── views.js │ ├── index.js │ ├── mixins │ │ ├── date-time-base.js │ │ ├── date-base.js │ │ └── time-base.js │ └── directives │ │ └── resize.js ├── .editorconfig ├── .gitignore ├── jsconfig.json ├── .babelrc ├── .npmignore ├── types │ └── types.d.ts ├── LICENSE └── .eslintrc.js ├── app-extension ├── .eslintignore ├── src │ ├── boot │ │ └── register.js │ └── index.js ├── jsconfig.json ├── .editorconfig ├── .npmignore ├── LICENSE ├── README.md ├── package.json └── .eslintrc.js ├── demo ├── src │ ├── store │ │ ├── common │ │ │ ├── actions.js │ │ │ ├── state.js │ │ │ ├── getters.js │ │ │ ├── mutations.js │ │ │ └── index.js │ │ ├── scroller │ │ │ ├── actions.js │ │ │ ├── index.js │ │ │ ├── state.js │ │ │ ├── getters.js │ │ │ └── mutations.js │ │ ├── store-flag.d.ts │ │ └── index.js │ ├── App.vue │ ├── boot │ │ └── qscroller.js │ ├── pages │ │ ├── Examples.vue │ │ ├── Error404.vue │ │ ├── Index.vue │ │ └── String.vue │ ├── util │ │ └── getLocale.js │ ├── examples │ │ ├── date │ │ │ ├── Slots.vue │ │ │ ├── Disabled.vue │ │ │ ├── Locale.vue │ │ │ ├── Basic.vue │ │ │ ├── Intervals.vue │ │ │ ├── Colors.vue │ │ │ └── Types.vue │ │ ├── time │ │ │ ├── Slots.vue │ │ │ ├── 12Hour.vue │ │ │ ├── Intervals.vue │ │ │ ├── Disabled.vue │ │ │ ├── Basic.vue │ │ │ ├── Colors.vue │ │ │ └── Types.vue │ │ ├── date-range │ │ │ ├── Slots.vue │ │ │ ├── Disabled.vue │ │ │ ├── Locale.vue │ │ │ ├── Basic.vue │ │ │ ├── Colors.vue │ │ │ ├── Types.vue │ │ │ └── Intervals.vue │ │ ├── date-time │ │ │ ├── Slots.vue │ │ │ ├── Locale.vue │ │ │ ├── Disabled.vue │ │ │ ├── Basic.vue │ │ │ ├── Intervals.vue │ │ │ ├── Colors.vue │ │ │ └── Types.vue │ │ └── time-range │ │ │ ├── Slots.vue │ │ │ ├── 12Hour.vue │ │ │ ├── Intervals.vue │ │ │ ├── Disabled.vue │ │ │ ├── Basic.vue │ │ │ ├── Colors.vue │ │ │ └── Types.vue │ ├── components │ │ ├── ExampleTitle.vue │ │ └── Hero.vue │ ├── css │ │ └── quasar.variables.sass │ ├── assets │ │ └── page-utils.js │ ├── router │ │ ├── index.js │ │ └── routes.js │ └── index.template.html ├── babel.config.js ├── public │ ├── favicon.ico │ ├── q-scroller.png │ ├── quasar-logo.png │ ├── q-date-scroller.png │ ├── q-time-scroller.png │ ├── icons │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ └── favicon-128x128.png │ ├── q-date-time-scroller.png │ ├── q-time-scroller-ampm.png │ ├── q-date-range-scroller.png │ ├── q-time-range-scroller.png │ ├── q-date-time-scroller-ampm.png │ ├── q-time-range-scroller-ampm.png │ └── 404.html ├── .eslintignore ├── .editorconfig ├── quasar.extensions.json ├── .postcssrc.js ├── README.md ├── src-ssr │ ├── ssr-flag.d.ts │ └── extension.js ├── .gitignore ├── jsconfig.json ├── .stylintrc ├── LICENSE └── package.json ├── docs ├── favicon.ico ├── q-scroller.png ├── quasar-logo.png ├── q-date-scroller.png ├── q-time-scroller.png ├── icons │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ └── favicon-128x128.png ├── q-date-range-scroller.png ├── q-date-time-scroller.png ├── q-time-range-scroller.png ├── q-time-scroller-ampm.png ├── q-date-time-scroller-ampm.png ├── q-time-range-scroller-ampm.png ├── fonts │ ├── fa-brands-400.329a95a9.woff │ ├── fa-solid-900.ada6e6df.woff2 │ ├── fa-solid-900.c6ec0800.woff │ ├── fa-brands-400.c1210e5e.woff2 │ ├── fa-regular-400.36722648.woff │ ├── fa-regular-400.68c5af1f.woff2 │ ├── KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff │ ├── KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff │ ├── KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff │ ├── KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff │ ├── KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff │ ├── KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff │ └── flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2 ├── js │ ├── 23.76d4dc68.js │ ├── 31.54a4adeb.js │ ├── 39.75bc41fa.js │ ├── 59.01810a62.js │ ├── 51.d58b015e.js │ ├── 35.78ac6010.js │ ├── 19.0cfa4e00.js │ ├── 53.7cb0e3e3.js │ ├── 15.717a669e.js │ ├── 45.d6132331.js │ ├── 37.97629c26.js │ ├── 21.51902507.js │ ├── 29.376c6f33.js │ ├── 27.9d2bc269.js │ ├── 57.04c9e310.js │ ├── 56.c2a52359.js │ ├── 49.6379b031.js │ ├── 48.5223e272.js │ ├── 33.f8a3b1aa.js │ ├── 54.446fda43.js │ ├── 25.27b3d7fd.js │ ├── 17.ba0a8072.js │ ├── 46.015c7163.js │ ├── 36.14da9872.js │ ├── 28.ab519fc3.js │ ├── 34.d85ba58f.js │ ├── 55.bc1b9f26.js │ ├── 26.2011a2af.js │ ├── 18.6d034beb.js │ ├── 47.f1fb5ddd.js │ ├── 60.e25941b9.js │ ├── 40.350be65d.js │ ├── 32.fe9b13ec.js │ ├── 20.8bf54514.js │ ├── 52.b2ae2680.js │ ├── 24.645c053c.js │ ├── 10.cb406126.js │ └── 14.c364f633.js ├── 404.html └── index.html ├── .gitignore ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── FUNDING.yml ├── LICENSE └── README.md /ui/dev/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/.env.jest: -------------------------------------------------------------------------------- 1 | NODE_ENV=test 2 | -------------------------------------------------------------------------------- /ui/dev/src/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app-extension/.eslintignore: -------------------------------------------------------------------------------- 1 | docs 2 | -------------------------------------------------------------------------------- /ui/.eslintignore: -------------------------------------------------------------------------------- 1 | /docs 2 | /dist 3 | 4 | -------------------------------------------------------------------------------- /demo/src/store/common/actions.js: -------------------------------------------------------------------------------- 1 | /* 2 | export function someAction (context) { 3 | } 4 | */ 5 | -------------------------------------------------------------------------------- /demo/src/store/common/state.js: -------------------------------------------------------------------------------- 1 | export default { 2 | titlebarHeight: 0, 3 | toc: [] 4 | } 5 | -------------------------------------------------------------------------------- /demo/src/store/scroller/actions.js: -------------------------------------------------------------------------------- 1 | /* 2 | export function someAction (context) { 3 | } 4 | */ 5 | -------------------------------------------------------------------------------- /ui/dev/src/css/app.sass: -------------------------------------------------------------------------------- 1 | // app global css in Sass form 2 | @import '../../../src/index.sass' 3 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /ui/build/entry/index.common.js: -------------------------------------------------------------------------------- 1 | import Plugin from '../../src/index' 2 | 3 | export default Plugin 4 | -------------------------------------------------------------------------------- /ui/src/index.sass: -------------------------------------------------------------------------------- 1 | @import 'quasar/src/css/variables.sass' 2 | @import './components/QScroller.sass' 3 | -------------------------------------------------------------------------------- /docs/q-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-scroller.png -------------------------------------------------------------------------------- /docs/quasar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/quasar-logo.png -------------------------------------------------------------------------------- /demo/babel.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | presets: [ 4 | '@quasar/babel-preset-app' 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/favicon.ico -------------------------------------------------------------------------------- /ui/dev/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /src-bex/www 3 | /src-capacitor 4 | /src-cordova 5 | /.quasar 6 | /node_modules 7 | -------------------------------------------------------------------------------- /ui/dev/babel.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | presets: [ 4 | '@quasar/babel-preset-app' 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /demo/public/q-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-scroller.png -------------------------------------------------------------------------------- /docs/q-date-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-date-scroller.png -------------------------------------------------------------------------------- /docs/q-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-time-scroller.png -------------------------------------------------------------------------------- /ui/dev/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/ui/dev/public/favicon.ico -------------------------------------------------------------------------------- /demo/public/quasar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/quasar-logo.png -------------------------------------------------------------------------------- /docs/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/icons/favicon-16x16.png -------------------------------------------------------------------------------- /docs/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/icons/favicon-32x32.png -------------------------------------------------------------------------------- /docs/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/icons/favicon-96x96.png -------------------------------------------------------------------------------- /ui/dev/README.md: -------------------------------------------------------------------------------- 1 | # Dev app (playground) 2 | 3 | Adding .vue files to src/pages/ will auto-add them to the Index page list. 4 | -------------------------------------------------------------------------------- /ui/src/components/QScroller.sass: -------------------------------------------------------------------------------- 1 | @import 'scroller.sass' 2 | // include colorize css 3 | @import 'q-colorize-mixin/dist/index' -------------------------------------------------------------------------------- /demo/public/q-date-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-date-scroller.png -------------------------------------------------------------------------------- /demo/public/q-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-time-scroller.png -------------------------------------------------------------------------------- /docs/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/icons/favicon-128x128.png -------------------------------------------------------------------------------- /docs/q-date-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-date-range-scroller.png -------------------------------------------------------------------------------- /docs/q-date-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-date-time-scroller.png -------------------------------------------------------------------------------- /docs/q-time-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-time-range-scroller.png -------------------------------------------------------------------------------- /docs/q-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-time-scroller-ampm.png -------------------------------------------------------------------------------- /demo/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /src-bex/www 3 | /src-capacitor 4 | /src-cordova 5 | /.quasar 6 | /node_modules 7 | /src/markdown 8 | 9 | -------------------------------------------------------------------------------- /ui/build/entry/index.esm.js: -------------------------------------------------------------------------------- 1 | import Plugin from '../../src/index' 2 | 3 | export default Plugin 4 | export * from '../../src/index' 5 | -------------------------------------------------------------------------------- /demo/public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /demo/public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /demo/public/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/icons/favicon-96x96.png -------------------------------------------------------------------------------- /demo/public/q-date-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-date-time-scroller.png -------------------------------------------------------------------------------- /demo/public/q-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-time-scroller-ampm.png -------------------------------------------------------------------------------- /demo/src/store/common/getters.js: -------------------------------------------------------------------------------- 1 | export const titlebarHeight = (state) => state.titlebarHeight 2 | export const toc = (state) => state.toc 3 | -------------------------------------------------------------------------------- /docs/q-date-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-date-time-scroller-ampm.png -------------------------------------------------------------------------------- /docs/q-time-range-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/q-time-range-scroller-ampm.png -------------------------------------------------------------------------------- /app-extension/src/boot/register.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VuePlugin from '@quasar/quasar-ui-qscroller' 3 | 4 | Vue.use(VuePlugin) 5 | -------------------------------------------------------------------------------- /demo/public/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/icons/favicon-128x128.png -------------------------------------------------------------------------------- /demo/public/q-date-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-date-range-scroller.png -------------------------------------------------------------------------------- /demo/public/q-time-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-time-range-scroller.png -------------------------------------------------------------------------------- /docs/fonts/fa-brands-400.329a95a9.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-brands-400.329a95a9.woff -------------------------------------------------------------------------------- /docs/fonts/fa-solid-900.ada6e6df.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-solid-900.ada6e6df.woff2 -------------------------------------------------------------------------------- /docs/fonts/fa-solid-900.c6ec0800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-solid-900.c6ec0800.woff -------------------------------------------------------------------------------- /ui/dev/public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/ui/dev/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /ui/dev/public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/ui/dev/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /ui/dev/public/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/ui/dev/public/icons/favicon-96x96.png -------------------------------------------------------------------------------- /demo/public/q-date-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-date-time-scroller-ampm.png -------------------------------------------------------------------------------- /docs/fonts/fa-brands-400.c1210e5e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-brands-400.c1210e5e.woff2 -------------------------------------------------------------------------------- /docs/fonts/fa-regular-400.36722648.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-regular-400.36722648.woff -------------------------------------------------------------------------------- /docs/fonts/fa-regular-400.68c5af1f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/fa-regular-400.68c5af1f.woff2 -------------------------------------------------------------------------------- /ui/dev/public/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/ui/dev/public/icons/favicon-128x128.png -------------------------------------------------------------------------------- /ui/dev/src/boot/register.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VuePlugin from 'ui' // "ui" is aliased in quasar.conf.js 3 | 4 | Vue.use(VuePlugin) 5 | -------------------------------------------------------------------------------- /demo/public/q-time-range-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/demo/public/q-time-range-scroller-ampm.png -------------------------------------------------------------------------------- /docs/fonts/KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff -------------------------------------------------------------------------------- /ui/build/entry/index.umd.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Plugin from '../../src/index' 3 | 4 | Vue.use(Plugin) 5 | 6 | export * from '../../src/index' 7 | -------------------------------------------------------------------------------- /docs/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff -------------------------------------------------------------------------------- /ui/build/script.open-umd.js: -------------------------------------------------------------------------------- 1 | const { resolve } = require('path') 2 | const open = require('open') 3 | 4 | open( 5 | resolve(__dirname, '../umd-test.html') 6 | ) 7 | -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff -------------------------------------------------------------------------------- /docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff -------------------------------------------------------------------------------- /ui/src/utils/views.js: -------------------------------------------------------------------------------- 1 | export function validateView (view) { 2 | return [ 3 | 'string', 'time', 'date', 'date-time', 4 | 'time-range', 'date-range', ''].includes(view) 5 | } 6 | -------------------------------------------------------------------------------- /docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/HEAD/docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2 -------------------------------------------------------------------------------- /app-extension/jsconfig.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "target": "es6" 6 | }, 7 | "exclude": ["node_modules"], 8 | "include": ["src/**/*"] 9 | } -------------------------------------------------------------------------------- /demo/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /ui/dev/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /demo/src/boot/qscroller.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VuePlugin from 'ui' // "ui" is aliased in quasar.conf.js 3 | // import '@quasar/quasar-ui-qscroller/dist/index.css' 4 | 5 | Vue.use(VuePlugin) 6 | -------------------------------------------------------------------------------- /ui/build/script.clean.js: -------------------------------------------------------------------------------- 1 | var 2 | rimraf = require('rimraf'), 3 | path = require('path') 4 | 5 | rimraf.sync(path.resolve(__dirname, '../dist/*')) 6 | console.log(' 💥 Cleaned build artifacts.\n') 7 | -------------------------------------------------------------------------------- /demo/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /demo/quasar.extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "@quasar/qmarkdown": { 3 | "import_md": true, 4 | "import_vmd": true 5 | }, 6 | "@quasar/qribbon": {}, 7 | "json-api-viewer": {}, 8 | "example-viewer": {} 9 | } -------------------------------------------------------------------------------- /ui/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /ui/.gitignore: -------------------------------------------------------------------------------- 1 | # Testing 2 | /test/jest/coverage 3 | 4 | ui/yarn.lock 5 | ui/node_modules 6 | ui/dev/yarn.lock 7 | ui/dev/node_modules 8 | 9 | demo/yarn.lock 10 | demo/node_modules 11 | 12 | ./dist 13 | -------------------------------------------------------------------------------- /ui/dev/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /ui/jsconfig.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "target": "es6" 6 | }, 7 | "exclude": ["node_modules", "dist"], 8 | "include": ["src/**/*", "build/**/*", "test/**/*"] 9 | } -------------------------------------------------------------------------------- /app-extension/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /demo/src/store/common/mutations.js: -------------------------------------------------------------------------------- 1 | export const titlebarHeight = (state, height) => { 2 | state.titlebarHeight = height 3 | } 4 | export const toc = (state, toc) => { 5 | state.toc.splice(0, state.toc.length, ...toc) 6 | } 7 | -------------------------------------------------------------------------------- /demo/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | plugins: [ 5 | // to edit target browsers: use "browserslist" field in package.json 6 | require('autoprefixer') 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /ui/build/build.api.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | global.rootDir = path.resolve(__dirname, '..') 3 | global.distDir = path.resolve(__dirname, '../dist') 4 | 5 | require('quasar-json-api')({ 6 | buildVetur: true, 7 | buildTypes: true 8 | }) 9 | -------------------------------------------------------------------------------- /ui/dev/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | plugins: [ 5 | // to edit target browsers: use "browserslist" field in package.json 6 | require('autoprefixer') 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | .history 4 | node_modules 5 | dist 6 | yarn.lock 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | 11 | # Editor directories and files 12 | .idea 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /app-extension/.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | yarn.lock 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | .editorconfig 16 | .eslintignore 17 | .eslintrc.js 18 | -------------------------------------------------------------------------------- /demo/README.md: -------------------------------------------------------------------------------- 1 | # quasar-ui-qcalendar Demo 2 | In order to build the demo, you must first build the UI. 3 | Go to the `ui` folder and `yarn build`. This will create the JSON API in the `ui/dist` folder that the demo needs in order to be built. 4 | 5 | # Building 6 | To build the demo, type `quasar dev`. 7 | -------------------------------------------------------------------------------- /demo/src/pages/Examples.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/util/getLocale.js: -------------------------------------------------------------------------------- 1 | export const getLocale = () => { 2 | if (navigator.languages && navigator.languages.length > 0) { 3 | return navigator.languages[ 0 ] 4 | } 5 | else { 6 | return navigator.userLanguages || navigator.language || navigator.browserLanguages || 'en-us' 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /demo/src/store/common/index.js: -------------------------------------------------------------------------------- 1 | import state from './state' 2 | import * as getters from './getters' 3 | import * as mutations from './mutations' 4 | import * as actions from './actions' 5 | 6 | export default { 7 | namespaced: true, 8 | state, 9 | getters, 10 | mutations, 11 | actions 12 | } 13 | -------------------------------------------------------------------------------- /demo/src/store/scroller/index.js: -------------------------------------------------------------------------------- 1 | import state from './state' 2 | import * as getters from './getters' 3 | import * as mutations from './mutations' 4 | import * as actions from './actions' 5 | 6 | export default { 7 | namespaced: true, 8 | state, 9 | getters, 10 | mutations, 11 | actions 12 | } 13 | -------------------------------------------------------------------------------- /demo/src-ssr/ssr-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | ssr: true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /demo/src/store/store-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | store: true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ui/src/index.js: -------------------------------------------------------------------------------- 1 | import { version } from '../package.json' 2 | import QScroller from './components/QScroller' 3 | 4 | export { 5 | version, 6 | QScroller 7 | } 8 | 9 | export default { 10 | version, 11 | QScroller, 12 | 13 | install (Vue) { 14 | Vue.component(QScroller.name, QScroller) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /demo/src/examples/date/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/time/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /docs/js/23.76d4dc68.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[23],{e62b:function(n,t,e){"use strict";e.r(t),t["default"]="\n\n 12 | 13 | 14 | 15 | 16 | 17 |               18 |               19 |               20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /demo/public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 404 Redirect 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 |               18 |               19 |               20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /ui/dev/src/router/routes.js: -------------------------------------------------------------------------------- 1 | import pages from './pages' 2 | 3 | const children = pages.map(page => ({ 4 | path: page.path, 5 | component: () => import('pages/' + page.file + '.vue') 6 | })) 7 | 8 | const routes = [ 9 | { 10 | path: '/', 11 | component: () => import('layouts/MyLayout.vue'), 12 | children: [ 13 | { path: '', component: () => import('pages/Index.vue') } 14 | ].concat(children) 15 | }, 16 | 17 | // Always leave this as last one, 18 | // but you can also remove it 19 | { 20 | path: '*', 21 | component: () => import('pages/Error404.vue') 22 | } 23 | ] 24 | 25 | export default routes 26 | -------------------------------------------------------------------------------- /demo/src/components/ExampleTitle.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 29 | -------------------------------------------------------------------------------- /demo/src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /ui/dev/src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /ui/src/mixins/date-time-base.js: -------------------------------------------------------------------------------- 1 | import props from '../utils/props' 2 | 3 | export default { 4 | name: 'DateTimeBase', 5 | 6 | props: { 7 | ...props.common, 8 | ...props.base, 9 | ...props.locale, 10 | ...props.verticalBar, 11 | hour12: Boolean, 12 | amPmLabels: { 13 | type: Array, 14 | default: () => ['AM', 'PM'], 15 | validator: v => Array.isArray(v) && v.length === 2 && typeof v[0] === 'string' && typeof v[1] === 'string' 16 | } 17 | }, 18 | 19 | data () { 20 | return { 21 | // 22 | } 23 | }, 24 | 25 | computed: { 26 | // 27 | }, 28 | 29 | methods: { 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /docs/js/35.78ac6010.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[35],{1597:function(n,e,t){"use strict";t.r(e),e["default"]='\n\n 33 | -------------------------------------------------------------------------------- /docs/js/19.0cfa4e00.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[19],{"8ce1":function(n,e,t){"use strict";t.r(e),e["default"]='\n\n 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /demo/src/examples/time/12Hour.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 34 | -------------------------------------------------------------------------------- /demo/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "src/*": [ 6 | "src/*" 7 | ], 8 | "app/*": [ 9 | "*" 10 | ], 11 | "components/*": [ 12 | "src/components/*" 13 | ], 14 | "layouts/*": [ 15 | "src/layouts/*" 16 | ], 17 | "pages/*": [ 18 | "src/pages/*" 19 | ], 20 | "assets/*": [ 21 | "src/assets/*" 22 | ], 23 | "boot/*": [ 24 | "src/boot/*" 25 | ], 26 | "vue$": [ 27 | "node_modules/vue/dist/vue.esm.js" 28 | ] 29 | } 30 | }, 31 | "exclude": [ 32 | "dist", 33 | ".quasar", 34 | "node_modules" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /ui/dev/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "src/*": [ 6 | "src/*" 7 | ], 8 | "app/*": [ 9 | "*" 10 | ], 11 | "components/*": [ 12 | "src/components/*" 13 | ], 14 | "layouts/*": [ 15 | "src/layouts/*" 16 | ], 17 | "pages/*": [ 18 | "src/pages/*" 19 | ], 20 | "assets/*": [ 21 | "src/assets/*" 22 | ], 23 | "boot/*": [ 24 | "src/boot/*" 25 | ], 26 | "vue$": [ 27 | "node_modules/vue/dist/vue.esm.js" 28 | ] 29 | } 30 | }, 31 | "exclude": [ 32 | "dist", 33 | ".quasar", 34 | "node_modules" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [hawkeye64, rstoenescu] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with a single custom sponsorship URL -------------------------------------------------------------------------------- /demo/src/examples/date/Locale.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | -------------------------------------------------------------------------------- /docs/js/15.717a669e.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[15],{e51e:function(t,e,n){"use strict";n.r(e);var l=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},[n("div",[n("div",{staticStyle:{"font-size":"30vh"}},[t._v("\n 404\n ")]),n("div",{staticClass:"text-h2",staticStyle:{opacity:".4"}},[t._v("\n Oops. Nothing here...\n ")]),n("q-btn",{staticClass:"q-mt-xl",attrs:{color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""}})],1)])},s=[],a={name:"Error404"},c=a,o=n("2877"),i=n("9c40"),r=n("eebe"),u=n.n(r),p=Object(o["a"])(c,l,s,!1,null,null,null);e["default"]=p.exports;u()(p,"components",{QBtn:i["a"]})}}]); -------------------------------------------------------------------------------- /docs/js/45.d6132331.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[45],{"48a6":function(n,e,t){"use strict";t.r(e),e["default"]='\n\n 32 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Locale.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | -------------------------------------------------------------------------------- /docs/js/21.51902507.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[21],{5335:function(n,e,l){"use strict";l.r(e),e["default"]="\n\n 35 | -------------------------------------------------------------------------------- /ui/dev/src/router/pages.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Export files list for /pages folder 3 | */ 4 | 5 | function kebabCase (str) { 6 | const result = str.replace( 7 | /[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, 8 | match => '-' + match.toLowerCase() 9 | ) 10 | return (str[0] === str[0].toUpperCase()) 11 | ? result.substring(1) 12 | : result 13 | } 14 | 15 | function slugify (str) { 16 | return encodeURIComponent(String(str).trim().replace(/\s+/g, '-')) 17 | } 18 | 19 | export default require.context('../pages', true, /^\.\/.*\.vue$/) 20 | .keys() 21 | .map(page => page.slice(2).replace('.vue', '')) 22 | .filter(page => page !== 'Index' && page !== 'Error404') 23 | .map(page => ({ 24 | file: page, 25 | title: page + '.vue', 26 | path: slugify(kebabCase(page)) 27 | })) 28 | -------------------------------------------------------------------------------- /ui/src/mixins/date-base.js: -------------------------------------------------------------------------------- 1 | import props from '../utils/props' 2 | import { 3 | daysInMonth 4 | } from '../utils/Timestamp' 5 | 6 | export default { 7 | name: 'DateBase', 8 | 9 | props: { 10 | ...props.common, 11 | ...props.base, 12 | ...props.locale 13 | }, 14 | 15 | methods: { 16 | isValidDate (date) { 17 | const parts = date.split('-') 18 | if (parts.length === 3) { 19 | const year = parseInt(parts[0], 10) 20 | const month = parseInt(parts[1], 10) 21 | const day = parseInt(parts[2], 10) 22 | const daysInM = daysInMonth(year, month) 23 | if (year !== 0 && month > 0 && month <= 12 && day > 0 && day <= daysInM) { 24 | return true 25 | } 26 | } 27 | return false 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ui/build/index.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = 'production' 2 | 3 | const parallel = require('os').cpus().length > 1 4 | // const runJob = parallel ? require('child_process').fork : require 5 | // const { join } = require('path') 6 | const { createFolder } = require('./utils') 7 | const { green, blue } = require('chalk') 8 | 9 | console.log() 10 | 11 | require('./script.app-ext.js').syncAppExt() 12 | require('./script.clean.js') 13 | 14 | console.log(` 📦 Building ${green('v' + require('../package.json').version)}...${parallel ? blue(' [multi-threaded]') : ''}\n`) 15 | 16 | createFolder('dist') 17 | 18 | require('./build.api.js') 19 | require('./script.javascript') 20 | require('./script.css') 21 | // runJob(join(__dirname, './script.javascript.js')) 22 | // runJob(join(__dirname, './script.css.js')) 23 | -------------------------------------------------------------------------------- /ui/types/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Timestamp { 2 | date: string; 3 | time: string; 4 | year: number; 5 | month: number; 6 | day: number; 7 | weekday: number; 8 | hour: number; 9 | minute: number; 10 | doy: number; 11 | workweek: number; 12 | hasDay: boolean; 13 | hasTime: boolean; 14 | past: boolean; 15 | current: boolean; 16 | future: boolean; 17 | disabled: boolean; 18 | } 19 | 20 | export type TimestampArray = Timestamp[] 21 | 22 | export interface YearMonthDay { 23 | year: number 24 | month: number 25 | day: number 26 | } 27 | 28 | export interface HourMinute { 29 | hour: number 30 | minute: number 31 | } 32 | 33 | export type DateArray = Date[] 34 | export type NumberArray = number[] 35 | export type StringArray = string[] 36 | export type StringOrNumber = string | number -------------------------------------------------------------------------------- /demo/src/store/scroller/state.js: -------------------------------------------------------------------------------- 1 | export default { 2 | view: 'time', 3 | locale: 'en-us', 4 | roundedBorders: true, 5 | borderColor: '#ccc', 6 | barColor: '#ccc', 7 | color: 'white', 8 | backgroundColor: 'primary', 9 | innerColor: 'white', 10 | innerBackgroundColor: 'primary', 11 | verticalBar: false, 12 | noHeader: false, 13 | noFooter: true, 14 | dense: false, 15 | disable: false, 16 | noBorder: false, 17 | noShadow: false, 18 | 19 | selectedDate: '2019-04-01', 20 | shortDayLabel: false, 21 | shortMonthLabel: false, 22 | showMonthLabel: false, 23 | shortYearLabel: false, 24 | showWeekdayLabel: false, 25 | noDays: false, 26 | noMonths: false, 27 | noYears: false, 28 | 29 | selectedTime: '11:05', 30 | hour24Format: true, 31 | noMinutes: false, 32 | noHours: false 33 | } 34 | -------------------------------------------------------------------------------- /docs/js/27.9d2bc269.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[27],{"1f90":function(e,n,t){"use strict";t.r(n),n["default"]='\n\n 41 | -------------------------------------------------------------------------------- /ui/dev/src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 33 | 34 | 39 | -------------------------------------------------------------------------------- /demo/.stylintrc: -------------------------------------------------------------------------------- 1 | { 2 | "blocks": "never", 3 | "brackets": "never", 4 | "colons": "never", 5 | "colors": "always", 6 | "commaSpace": "always", 7 | "commentSpace": "always", 8 | "cssLiteral": "never", 9 | "depthLimit": false, 10 | "duplicates": true, 11 | "efficient": "always", 12 | "extendPref": false, 13 | "globalDupe": true, 14 | "indentPref": 2, 15 | "leadingZero": "never", 16 | "maxErrors": false, 17 | "maxWarnings": false, 18 | "mixed": false, 19 | "namingConvention": false, 20 | "namingConventionStrict": false, 21 | "none": "never", 22 | "noImportant": false, 23 | "parenSpace": "never", 24 | "placeholder": false, 25 | "prefixVarsWithDollar": "always", 26 | "quotePref": "single", 27 | "semicolons": "never", 28 | "sortOrder": false, 29 | "stackedProperties": "never", 30 | "trailingWhitespace": "never", 31 | "universal": "never", 32 | "valid": true, 33 | "zeroUnits": "never", 34 | "zIndexNormalize": false 35 | } 36 | -------------------------------------------------------------------------------- /ui/dev/src/layouts/MyLayout.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 41 | -------------------------------------------------------------------------------- /docs/js/57.04c9e310.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[57],{dffe:function(n,e,t){"use strict";t.r(e),e["default"]='\n\n 39 | -------------------------------------------------------------------------------- /demo/src/examples/time/Intervals.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 46 | -------------------------------------------------------------------------------- /ui/dev/src/pages/6-QDateTimeScroller-Locale.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /ui/dev/src/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= productName %> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /demo/src/examples/time/Disabled.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 47 | -------------------------------------------------------------------------------- /docs/js/49.6379b031.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[49],{"94f7":function(n,e,t){"use strict";t.r(e),e["default"]='\n\n 50 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | For a legitimate bug, in order to process faster, please go here https://codepen.io/Hawkeye64/pen/QWWaaqd, fork the codepen, add code to reproduce the bug and submit link here (don't forget to save your codepen): 11 | 12 | **Describe the bug** 13 | A clear and concise description of what the bug is. 14 | 15 | **To Reproduce** 16 | Steps to reproduce the behavior: 17 | 1. Go to '...' 18 | 2. Click on '....' 19 | 3. Scroll down to '....' 20 | 4. See error 21 | 22 | **Expected behavior** 23 | A clear and concise description of what you expected to happen. 24 | 25 | **Screenshots** 26 | If applicable, add screenshots to help explain your problem. 27 | 28 | **Desktop (please complete the following information):** 29 | - OS: [e.g. iOS] 30 | - Browser [e.g. chrome, safari] 31 | - Version [e.g. 22] 32 | 33 | **Smartphone (please complete the following information):** 34 | - Device: [e.g. iPhone6] 35 | - OS: [e.g. iOS8.1] 36 | - Browser [e.g. stock browser, safari] 37 | - Version [e.g. 22] 38 | 39 | **Additional context** 40 | Add any other context about the problem here. 41 | -------------------------------------------------------------------------------- /demo/src/assets/page-utils.js: -------------------------------------------------------------------------------- 1 | export function copyToClipboard (text) { 2 | const textArea = document.createElement('textarea') 3 | textArea.className = 'fixed-top' 4 | textArea.value = text 5 | document.body.appendChild(textArea) 6 | textArea.focus() 7 | textArea.select() 8 | 9 | document.execCommand('copy') 10 | document.body.removeChild(textArea) 11 | } 12 | 13 | export function copyHeading (id) { 14 | const text = window.location.origin + window.location.pathname + '#' + id 15 | const el = document.getElementById(id) 16 | 17 | if (el) { 18 | el.id = '' 19 | } 20 | 21 | window.location.hash = '#' + id 22 | 23 | if (el) { 24 | setTimeout(() => { 25 | el.id = id 26 | }, 300) 27 | } 28 | 29 | copyToClipboard(text) 30 | 31 | this.$q.notify({ 32 | message: 'Anchor has been copied to clipboard.', 33 | color: 'white', 34 | textColor: 'primary', 35 | icon: 'done', 36 | position: 'top', 37 | timeout: 2000 38 | }) 39 | } 40 | 41 | export function slugify (str) { 42 | return encodeURIComponent(String(str).trim().replace(/\s+/g, '-')) 43 | } 44 | 45 | export function makeUrl (slug) { 46 | window.location = window.location.origin + window.location.pathname + '#' + slug 47 | } 48 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Disabled.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 49 | -------------------------------------------------------------------------------- /docs/js/33.f8a3b1aa.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[33],{fbb0:function(e,n,l){"use strict";l.r(n),n["default"]='\n\n
-------------------------------------------------------------------------------- /docs/js/25.27b3d7fd.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[25],{"14ae":function(e,n,t){"use strict";t.r(n),n["default"]='\n\n 59 | -------------------------------------------------------------------------------- /demo/src/examples/date/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /docs/js/26.2011a2af.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[26],{e8f5:function(e,n,l){"use strict";l.r(n),n["default"]='\n\n 28 | 29 | 30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/js/18.6d034beb.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[18],{f212:function(e,n,r){"use strict";r.r(n),n["default"]='\n\n 59 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /app-extension/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Quasar App Extension index/runner script 3 | * (runs on each dev/build) 4 | * 5 | * Docs: https://quasar.dev/app-extensions/development-guide/index-api 6 | * API: https://github.com/quasarframework/quasar/blob/master/app/lib/app-extension/IndexAPI.js 7 | */ 8 | 9 | function extendConf (conf) { 10 | // register our boot file 11 | conf.boot.push('~@quasar/quasar-app-extension-qscroller/src/boot/register.js') 12 | 13 | // make sure app extension files & ui package gets transpiled 14 | conf.build.transpileDependencies.push(/quasar-app-extension-qscroller[\\/]src/) 15 | conf.build.transpileDependencies.push(/quasar-ui-qscroller[\\/]src/) 16 | 17 | // make sure the stylesheet goes through webpack to avoid SSR issues 18 | conf.css.push('~@quasar/quasar-ui-qscroller/src/index.sass') 19 | } 20 | 21 | module.exports = function (api) { 22 | // Quasar compatibility check; you may need 23 | // hard dependencies, as in a minimum version of the "quasar" 24 | // package or a minimum version of "@quasar/app" CLI 25 | api.compatibleWith('quasar', '^1.5.0') 26 | api.compatibleWith('@quasar/app', '^1.3.0 || ^2.0.0') // needed for describe to work properly 27 | 28 | // Uncomment the line below if you provide a JSON API for your component 29 | api.registerDescribeApi('QScroller', '~@quasar/quasar-ui-qscroller/dist/api/QScroller.json') 30 | 31 | // We extend /quasar.conf.js 32 | api.extendQuasarConf(extendConf) 33 | } 34 | -------------------------------------------------------------------------------- /demo/src/examples/date/Intervals.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 63 | -------------------------------------------------------------------------------- /demo/src/examples/date/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/time/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Intervals.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 63 | -------------------------------------------------------------------------------- /docs/js/60.e25941b9.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[60],{"5e73":function(n,e,l){"use strict";l.r(e),e["default"]='\n\n 60 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /docs/js/40.350be65d.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[40],{eeb3:function(n,e,l){"use strict";l.r(e),e["default"]='\n\n 64 | -------------------------------------------------------------------------------- /docs/js/52.b2ae2680.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[52],{fa02:function(n,e,l){"use strict";l.r(e),e["default"]="\n\n 64 | -------------------------------------------------------------------------------- /docs/js/24.645c053c.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[24],{"766a":function(n,e,l){"use strict";l.r(e),e["default"]="\n\n 64 | -------------------------------------------------------------------------------- /demo/src/store/scroller/getters.js: -------------------------------------------------------------------------------- 1 | export const view = (state) => state.view 2 | export const locale = (state) => state.locale 3 | export const roundedBorders = (state) => state.roundedBorders 4 | export const borderColor = (state) => state.borderColor 5 | export const barColor = (state) => state.barColor 6 | export const color = (state) => state.color 7 | export const backgroundColor = (state) => state.backgroundColor 8 | export const innerColor = (state) => state.innerColor 9 | export const innerBackgroundColor = (state) => state.innerBackgroundColor 10 | export const verticalBar = (state) => state.verticalBar 11 | export const noHeader = (state) => state.noHeader 12 | export const noFooter = (state) => state.noFooter 13 | export const dense = (state) => state.dense 14 | export const disable = (state) => state.disable 15 | export const noBorder = (state) => state.noBorder 16 | export const noShadow = (state) => state.noShadow 17 | 18 | export const selectedDate = (state) => state.selectedDate 19 | export const shortDayLabel = (state) => state.shortDayLabel 20 | export const shortMonthLabel = (state) => state.shortMonthLabel 21 | export const showMonthLabel = (state) => state.showMonthLabel 22 | export const shortYearLabel = (state) => state.shortYearLabel 23 | export const showWeekdayLabel = (state) => state.showWeekdayLabel 24 | export const noDays = (state) => state.noDays 25 | export const noMonths = (state) => state.noMonths 26 | export const noYears = (state) => state.noYears 27 | 28 | export const selectedTime = (state) => state.selectedTime 29 | export const hour24Format = (state) => state.hour24Format 30 | export const noMinutes = (state) => state.noMinutes 31 | export const noHours = (state) => state.noHours 32 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Intervals.vue: -------------------------------------------------------------------------------- 1 | 60 | 61 | 72 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 65 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 66 | -------------------------------------------------------------------------------- /demo/src/router/routes.js: -------------------------------------------------------------------------------- 1 | 2 | const routes = [ 3 | { 4 | path: '/', 5 | redirect: '/docs' 6 | }, 7 | { 8 | path: '/docs', 9 | component: () => import('layouts/MainLayout.vue'), 10 | children: [ 11 | { path: '', component: () => import('pages/Index.vue') } 12 | ] 13 | }, 14 | { 15 | path: '/examples', 16 | component: () => import('layouts/Examples.vue'), 17 | children: [ 18 | { 19 | path: '', 20 | component: () => import('pages/Examples.vue'), 21 | children: [ 22 | { 23 | path: '', 24 | redirect: '/examples/string' 25 | }, 26 | { 27 | path: 'string', 28 | component: () => import('pages/String.vue') 29 | }, 30 | { 31 | path: 'time', 32 | component: () => import('pages/Time.vue') 33 | }, 34 | { 35 | path: 'date', 36 | component: () => import('pages/Date.vue') 37 | }, 38 | { 39 | path: 'time-range', 40 | component: () => import('pages/TimeRange.vue') 41 | }, 42 | { 43 | path: 'date-range', 44 | component: () => import('pages/DateRange.vue') 45 | }, 46 | { 47 | path: 'date-time', 48 | component: () => import('pages/DateTime.vue') 49 | } 50 | ] 51 | } 52 | ] 53 | }, 54 | { 55 | path: '/demo', 56 | component: () => import('layouts/ScrollerLayout.vue'), 57 | children: [ 58 | { path: '', component: () => import('pages/Scroller.vue') } 59 | ] 60 | }, 61 | // Always leave this as last one, 62 | // but you can also remove it 63 | { 64 | path: '*', 65 | component: () => import('pages/Error404.vue') 66 | } 67 | ] 68 | 69 | export default routes 70 | -------------------------------------------------------------------------------- /demo/src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 68 | -------------------------------------------------------------------------------- /ui/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | 4 | parserOptions: { 5 | parser: 'babel-eslint', 6 | ecmaVersion: 2018, 7 | sourceType: 'module', 8 | ecmaFeatures: { 9 | jsx: true 10 | } 11 | }, 12 | 13 | env: { 14 | browser: true, 15 | es6: true 16 | }, 17 | 18 | extends: [ 19 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 20 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 21 | 'plugin:vue/essential', 22 | '@vue/standard', 23 | 'plugin:quasar/standard' 24 | ], 25 | 26 | // required to lint *.vue files 27 | plugins: [ 28 | 'vue', 29 | 'quasar' 30 | ], 31 | 32 | globals: { 33 | ga: true, // Google Analytics 34 | cordova: true, 35 | __statics: true, 36 | process: true, 37 | Capacitor: true, 38 | chrome: true 39 | }, 40 | 41 | // add your custom rules here 42 | rules: { 43 | // allow async-await 44 | 'generator-star-spacing': 'off', 45 | // allow paren-less arrow functions 46 | 'arrow-parens': 'off', 47 | 'one-var': 'off', 48 | 49 | 'import/first': 'off', 50 | 'import/named': 'error', 51 | 'import/namespace': 'error', 52 | 'import/default': 'error', 53 | 'import/export': 'error', 54 | 'import/extensions': 'off', 55 | 'import/no-unresolved': 'off', 56 | 'import/no-extraneous-dependencies': 'off', 57 | 'prefer-promise-reject-errors': 'off', 58 | 59 | 'brace-style': [2, 'stroustrup', { allowSingleLine: false }], 60 | 61 | 'no-void': 'off', 62 | // allow console.log during development only 63 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 64 | // allow debugger during development only 65 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 68 | -------------------------------------------------------------------------------- /ui/dev/src/pages/5-QDateRangeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 67 | -------------------------------------------------------------------------------- /ui/dev/src/pages/6-QDateTimeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 68 | -------------------------------------------------------------------------------- /ui/build/script.app-ext.js: -------------------------------------------------------------------------------- 1 | const 2 | fs = require('fs'), 3 | path = require('path'), 4 | root = path.resolve(__dirname, '../..'), 5 | resolvePath = file => path.resolve(root, file), 6 | { blue } = require('chalk') 7 | 8 | const writeJson = function (file, json) { 9 | return fs.writeFileSync(file, JSON.stringify(json, null, 2) + '\n', 'utf-8') 10 | } 11 | 12 | module.exports.syncAppExt = function (both = true) { 13 | // make sure this project has an app-extension project 14 | const appExtDir = resolvePath('app-extension') 15 | if (!fs.existsSync(appExtDir)) { 16 | return 17 | } 18 | 19 | // make sure this project has an ui project 20 | const uiDir = resolvePath('ui') 21 | if (!fs.existsSync(uiDir)) { 22 | return 23 | } 24 | 25 | // get version and name from ui package.json 26 | const { name, version } = require(resolvePath(resolvePath('ui/package.json'))) 27 | 28 | // read app-ext package.json 29 | const appExtFile = resolvePath('app-extension/package.json') 30 | const appExtJson = require(appExtFile) 31 | let finished = false 32 | 33 | // sync version numbers 34 | if (both === true) { 35 | appExtJson.version = version 36 | } 37 | 38 | // check dependencies 39 | if (appExtJson.dependencies !== undefined) { 40 | if (appExtJson.dependencies[name] !== undefined) { 41 | appExtJson.dependencies[name] = '^' + version 42 | finished = true 43 | } 44 | } 45 | // check devDependencies, if not finished 46 | if (finished === false && appExtJson.devDependencies !== undefined) { 47 | if (appExtJson.devDependencies[name] !== undefined) { 48 | appExtJson.devDependencies[name] = '^' + version 49 | finished = true 50 | } 51 | } 52 | 53 | if (finished === true) { 54 | writeJson(appExtFile, appExtJson) 55 | console.log(` ⭐️ App Extension version ${blue(appExtJson.name)} synced with UI version.\n`) 56 | return 57 | } 58 | 59 | console.error(' App Extension version and dependency NOT synced.\n') 60 | } 61 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 59 | 60 | 69 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "0.0.1", 4 | "description": "QScroller docs, examples and demo site", 5 | "productName": "QScroller docs, examples and demo site", 6 | "cordovaId": "org.cordova.quasar.app", 7 | "author": "Jeff Galbraith ", 8 | "private": true, 9 | "scripts": { 10 | "dev": "quasar dev", 11 | "build-demo": "quasar build && rm -rf ../docs && cp -r ./dist/spa/. ../docs", 12 | "lint": "eslint --ext .js,.vue src", 13 | "lint-fix": "eslint --ext .js,.vue src --fix", 14 | "test": "echo \"No test specified\" && exit 0" 15 | }, 16 | "dependencies": { 17 | "@quasar/extras": "^1.10.7", 18 | "core-js": "^3.15.1", 19 | "quasar": "^1.15.21" 20 | }, 21 | "devDependencies": { 22 | "@quasar/app": "^2.2.10", 23 | "@quasar/quasar-app-extension-qmarkdown": "^1.4.3", 24 | "@quasar/quasar-app-extension-qribbon": "^1.0.0-beta.15", 25 | "@vue/eslint-config-standard": "^6.0.0", 26 | "babel-eslint": "^10.1.0", 27 | "devtron": "^1.4.0", 28 | "electron": "^13.1.4", 29 | "electron-debug": "^3.2.0", 30 | "electron-devtools-installer": "^3.2.0", 31 | "eslint": "^7.29.0", 32 | "eslint-config-standard": "^16.0.3", 33 | "eslint-loader": "^4.0.2", 34 | "eslint-plugin-import": "^2.23.4", 35 | "eslint-plugin-node": "^11.1.0", 36 | "eslint-plugin-promise": "^5.1.0", 37 | "eslint-plugin-quasar": "^1.0.0", 38 | "eslint-plugin-vue": "^7.12.1", 39 | "quasar-app-extension-example-viewer": "^1.1.1", 40 | "quasar-app-extension-json-api-viewer": "^1.3.1" 41 | }, 42 | "engines": { 43 | "node": ">= 10.18.1", 44 | "npm": ">= 6.13.4", 45 | "yarn": ">= 1.21.1" 46 | }, 47 | "browserslist": [ 48 | "last 10 Chrome versions", 49 | "last 10 Firefox versions", 50 | "last 4 Edge versions", 51 | "last 7 Safari versions", 52 | "last 8 Android versions", 53 | "last 8 ChromeAndroid versions", 54 | "last 8 FirefoxAndroid versions", 55 | "last 10 iOS versions", 56 | "last 5 Opera versions" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /demo/src/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 44 | -------------------------------------------------------------------------------- /ui/build/script.css.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable array-bracket-spacing */ 2 | const path = require('path') 3 | const sass = require('sass') 4 | const postcss = require('postcss') 5 | const cssnano = require('cssnano') 6 | const rtl = require('rtlcss') 7 | const autoprefixer = require('autoprefixer') 8 | 9 | const buildConf = require('./config') 10 | const buildUtils = require('./utils') 11 | 12 | const postCssCompiler = postcss([ autoprefixer ]) 13 | const postCssRtlCompiler = postcss([ rtl({}) ]) 14 | 15 | const nano = postcss([ 16 | cssnano({ 17 | preset: ['default', { 18 | mergeLonghand: false, 19 | convertValues: false, 20 | cssDeclarationSorter: false, 21 | reduceTransforms: false 22 | }] 23 | }) 24 | ]) 25 | 26 | Promise 27 | .all([ 28 | generate('src/index.sass', 'dist/index') 29 | ]) 30 | .catch(e => { 31 | console.error(e) 32 | process.exit(1) 33 | }) 34 | 35 | /** 36 | * Helpers 37 | */ 38 | 39 | function resolve (_path) { 40 | return path.resolve(__dirname, '..', _path) 41 | } 42 | 43 | function generate (src, dest) { 44 | src = resolve(src) 45 | dest = resolve(dest) 46 | 47 | return new Promise((resolve, reject) => { 48 | sass.render({ file: src, includePaths: ['node_modules'] }, (err, result) => { 49 | if (err) { 50 | reject(err) 51 | return 52 | } 53 | 54 | resolve(result.css) 55 | }) 56 | }) 57 | .then(code => buildConf.banner + code) 58 | .then(code => postCssCompiler.process(code, { from: undefined })) 59 | .then(code => { 60 | code.warnings().forEach(warn => { 61 | console.warn(warn.toString()) 62 | }) 63 | return code.css 64 | }) 65 | .then(code => Promise.all([ 66 | generateUMD(dest, code), 67 | postCssRtlCompiler.process(code, { from: undefined }) 68 | .then(code => generateUMD(dest, code.css, '.rtl')) 69 | ])) 70 | } 71 | 72 | function generateUMD (dest, code, ext = '') { 73 | return buildUtils.writeFile(`${dest}${ext}.css`, code, true) 74 | .then(code => nano.process(code, { from: undefined })) 75 | .then(code => buildUtils.writeFile(`${dest}${ext}.min.css`, code.css, true)) 76 | } 77 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Intervals.vue: -------------------------------------------------------------------------------- 1 | 70 | 71 | 80 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Intervals.vue: -------------------------------------------------------------------------------- 1 | 74 | 75 | 84 | -------------------------------------------------------------------------------- /demo/src/pages/String.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 77 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 85 | -------------------------------------------------------------------------------- /ui/src/components/QScroller.js: -------------------------------------------------------------------------------- 1 | // Scrollers 2 | import ScrollerBase from '../mixins/scroller-base' 3 | import QStringScroller from './QStringScroller.js' 4 | import QDateScroller from './QDateScroller.js' 5 | import QTimeScroller from './QTimeScroller.js' 6 | import QDateTimeScroller from './QDateTimeScroller.js' 7 | import QTimeRangeScroller from './QTimeRangeScroller.js' 8 | import QDateRangeScroller from './QDateRangeScroller.js' 9 | 10 | import props from '../utils/props.js' 11 | 12 | /* @vue/component */ 13 | export default { 14 | name: 'QScroller', 15 | 16 | props: { 17 | ...props.common, 18 | ...props.view, 19 | ...props.scroller, 20 | ...props.base, 21 | ...props.locale, 22 | ...props.date, 23 | ...props.time, 24 | ...props.timeRange, 25 | ...props.dateRange, 26 | ...props.verticalBar, 27 | ...props.locale, 28 | hour12: Boolean, 29 | amPmLabels: Array 30 | }, 31 | 32 | computed: { 33 | __renderProps () { 34 | let component = 'div' 35 | switch (this.view) { 36 | case 'string': 37 | component = QStringScroller 38 | if (!this.items || !Array.isArray(this.items)) { 39 | throw new Error('QScroller: items [array] prop is required when view="string" (default)') 40 | } 41 | break 42 | case 'time': 43 | component = QTimeScroller 44 | break 45 | case 'date': 46 | component = QDateScroller 47 | break 48 | case 'date-time': 49 | component = QDateTimeScroller 50 | break 51 | case 'time-range': 52 | component = QTimeRangeScroller 53 | break 54 | case 'date-range': 55 | component = QDateRangeScroller 56 | break 57 | default: 58 | component = ScrollerBase 59 | break 60 | } 61 | 62 | return { component } 63 | } 64 | }, 65 | 66 | methods: { 67 | __renderComponent (h, component, data) { 68 | return h(component, data) 69 | } 70 | }, 71 | 72 | render (h) { 73 | const { component } = this.__renderProps 74 | 75 | const data = { 76 | props: { 77 | ...this.$props 78 | }, 79 | on: { 80 | ...this.$listeners 81 | }, 82 | scopedSlots: this.$scopedSlots 83 | } 84 | 85 | return this.__renderComponent(h, component, data) 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /demo/src/store/scroller/mutations.js: -------------------------------------------------------------------------------- 1 | export const view = (state, view) => { 2 | state.view = view 3 | } 4 | export const locale = (state, locale) => { 5 | state.locale = locale 6 | } 7 | export const roundedBorders = (state, b) => { 8 | state.roundedBorders = b 9 | } 10 | export const borderColor = (state, color) => { 11 | state.borderColor = color 12 | } 13 | export const barColor = (state, color) => { 14 | state.barColor = color 15 | } 16 | export const color = (state, color) => { 17 | state.color = color 18 | } 19 | export const backgroundColor = (state, color) => { 20 | state.backgroundColor = color 21 | } 22 | export const innerColor = (state, color) => { 23 | state.innerColor = color 24 | } 25 | export const innerBackgroundColor = (state, color) => { 26 | state.innerBackgroundColor = color 27 | } 28 | export const verticalBar = (state, b) => { 29 | state.verticalBar = b 30 | } 31 | export const noHeader = (state, b) => { 32 | state.noHeader = b 33 | } 34 | export const noFooter = (state, b) => { 35 | state.noFooter = b 36 | } 37 | export const dense = (state, b) => { 38 | state.dense = b 39 | } 40 | export const disable = (state, b) => { 41 | state.disable = b 42 | } 43 | export const noBorder = (state, b) => { 44 | state.noBorder = b 45 | } 46 | export const noShadow = (state, b) => { 47 | state.noShadow = b 48 | } 49 | 50 | export const selectedDate = (state, date) => { 51 | state.selectedDate = date 52 | } 53 | export const shortDayLabel = (state, b) => { 54 | state.shortDayLabel = b 55 | } 56 | export const shortMonthLabel = (state, b) => { 57 | state.shortMonthLabel = b 58 | } 59 | export const showMonthLabel = (state, b) => { 60 | state.showMonthLabel = b 61 | } 62 | export const shortYearLabel = (state, b) => { 63 | state.shortYearLabel = b 64 | } 65 | export const showWeekdayLabel = (state, b) => { 66 | state.showWeekdayLabel = b 67 | } 68 | export const noYears = (state, b) => { 69 | state.noYears = b 70 | } 71 | export const noMonths = (state, b) => { 72 | state.noMonths = b 73 | } 74 | export const noDays = (state, b) => { 75 | state.noDays = b 76 | } 77 | 78 | export const selectedTime = (state, time) => { 79 | state.selectedTime = time 80 | } 81 | export const hour24Format = (state, b) => { 82 | state.hour24Format = b 83 | } 84 | export const noMinutes = (state, b) => { 85 | state.noMinutes = b 86 | } 87 | export const noHours = (state, b) => { 88 | state.noHours = b 89 | } 90 | -------------------------------------------------------------------------------- /ui/dev/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy 3 | // This option interrupts the configuration hierarchy at this file 4 | // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) 5 | root: true, 6 | 7 | parserOptions: { 8 | parser: 'babel-eslint', 9 | ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features 10 | sourceType: 'module' // Allows for the use of imports 11 | }, 12 | 13 | env: { 14 | browser: true 15 | }, 16 | 17 | // Rules order is important, please avoid shuffling them 18 | extends: [ 19 | // Base ESLint recommended rules 20 | // 'eslint:recommended', 21 | 22 | 23 | // Uncomment any of the lines below to choose desired strictness, 24 | // but leave only one uncommented! 25 | // See https://eslint.vuejs.org/rules/#available-rules 26 | 'plugin:vue/essential', // Priority A: Essential (Error Prevention) 27 | // 'plugin:vue/strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) 28 | // 'plugin:vue/recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) 29 | 30 | 'standard' 31 | 32 | ], 33 | 34 | plugins: [ 35 | // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file 36 | // required to lint *.vue files 37 | 'vue' 38 | 39 | ], 40 | 41 | globals: { 42 | ga: true, // Google Analytics 43 | cordova: true, 44 | __statics: true, 45 | process: true, 46 | Capacitor: true, 47 | chrome: true 48 | }, 49 | 50 | // add your custom rules here 51 | rules: { 52 | // allow async-await 53 | 'generator-star-spacing': 'off', 54 | // allow paren-less arrow functions 55 | 'arrow-parens': 'off', 56 | 'one-var': 'off', 57 | 58 | 'import/first': 'off', 59 | 'import/named': 'error', 60 | 'import/namespace': 'error', 61 | 'import/default': 'error', 62 | 'import/export': 'error', 63 | 'import/extensions': 'off', 64 | 'import/no-unresolved': 'off', 65 | 'import/no-extraneous-dependencies': 'off', 66 | 'prefer-promise-reject-errors': 'off', 67 | 68 | 'brace-style': [2, 'stroustrup', { allowSingleLine: false }], 69 | 70 | // allow debugger during development only 71 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 85 | -------------------------------------------------------------------------------- /docs/js/10.cb406126.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[10],{"0960":function(t,a,e){"use strict";e.r(a);var s=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("hero",[e("router-view")],1)},l=[],n=e("2514"),i={name:"ExamplesPage",components:{Hero:n["a"]}},r=i,o=e("2877"),c=Object(o["a"])(r,s,l,!1,null,null,null);a["default"]=c.exports},2514:function(t,a,e){"use strict";var s=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",[e("section",{staticClass:"page-header"},[e("div",{staticClass:"donate"},[e("a",{attrs:{href:t.donateUrl,target:"_blank",title:"Donate"}},[e("i",{staticClass:"fas fa-heart",staticStyle:{color:"red"}})])]),e("div",{staticClass:"text-h1 project-name"},[t._v(t._s(t.title))]),e("div",{staticClass:"text-h2 project-tagline"},[t._v(t._s(t.tagline))]),e("q-btn",{staticClass:"btn",attrs:{type:"a",href:t.locationUrl,target:"_blank",label:"View on GitHub","no-caps":"",flat:""}}),e("q-btn",{staticClass:"btn",attrs:{to:"/docs",label:"Docs","no-caps":"",flat:""}}),e("q-btn",{staticClass:"btn",attrs:{to:"/examples",label:"Examples","no-caps":"",flat:""}}),t.hasInteractiveDemo?e("q-btn",{staticClass:"btn",attrs:{to:"/demo",label:"Interactive Demo","no-caps":"",flat:""}}):t._e(),e("q-btn",{staticClass:"btn",attrs:{type:"a",href:t.donateUrl,target:"_blank",label:"Donate","no-caps":"",flat:""}}),e("div",{staticClass:"row justify-evenly items-center q-ma-sm"},[e("div",{staticClass:"quasar"},[t._v(t._s(t.quasarDesc))]),e("div",{staticClass:"byline"},[t._v(t._s(t.byline)),e("a",{attrs:{href:t.bylineTwitter,target:"_blank",title:"Twitter"}},[e("i",{staticClass:"fab fa-twitter"})])])])],1),e("main",{staticClass:"flex flex-start justify-center inset-shadow"},[e("div",{staticClass:"q-pa-md col-12-sm col-8-md col-6-lg inset-shadow",staticStyle:{width:"100%",height:"3px"}}),e("div",{staticClass:"q-pa-md col-12-sm col-8-md col-6-lg shadow-1",staticStyle:{"max-width":"800px",width:"100%"}},[t._t("default")],2)])])},l=[],n={name:"Hero",data(){return{title:"QScroller",tagline:"Embeddable Scrollers for your Quasar App",byline:"Created and maintained by Jeff Galbraith",bylineTwitter:"https://twitter.com/jgalbraith64",quasarDesc:"A Quasar Framework Component and App Extension",locationUrl:"https://github.com/quasarframework/quasar-ui-qscroller",donateUrl:"https://github.com/sponsors/hawkeye64",hasInteractiveDemo:!0}}},i=n,r=e("2877"),o=e("9c40"),c=e("eebe"),b=e.n(c),d=Object(r["a"])(i,s,l,!1,null,null,null);a["a"]=d.exports;b()(d,"components",{QBtn:o["a"]})}}]); -------------------------------------------------------------------------------- /docs/js/14.c364f633.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[14],{"78f7":function(e,t,a){"use strict";a.r(t);var r=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("q-layout",{attrs:{view:"HHh Lpr lFf"}},[a("q-header",{attrs:{elevated:""}},[a("q-resize-observer",{on:{resize:e.onTitlebarResized}}),a("q-toolbar",[a("q-btn",{attrs:{flat:"",dense:"",round:"","aria-label":"Menu"},on:{click:function(t){e.leftDrawerOpen=!e.leftDrawerOpen}}},[a("q-icon",{attrs:{name:"menu"}})],1),a("q-icon",{staticClass:"q-ml-md",attrs:{name:"far fa-calendar-alt",size:"1.5rem"}}),a("q-toolbar-title",[e._v("\n QScroller "),a("span",{staticClass:"text-subtitle2"},[e._v("v"+e._s(e.version))])]),a("q-space"),a("q-btn",{attrs:{flat:"",round:"",icon:e.$q.dark.isActive?"brightness_2":"brightness_5"},on:{click:function(t){return e.$q.dark.toggle()}}}),e.$q.screen.width>500?a("div",[e._v("Quasar v"+e._s(e.$q.version))]):e._e()],1)],1),a("q-drawer",{staticClass:"menu",attrs:{bordered:"",width:350,"aria-label":"Menu"},model:{value:e.leftDrawerOpen,callback:function(t){e.leftDrawerOpen=t},expression:"leftDrawerOpen"}},[a("div",{staticClass:"col-12"},[a("q-expansion-item",{attrs:{"expand-separator":"","default-opened":"",group:"somegroup",icon:"fas fa-cogs",label:"Playground",caption:"Play with properties"}},[a("playground")],1),a("q-expansion-item",{attrs:{"expand-separator":"",group:"somegroup",icon:"fas fa-link",label:"Essential Links"}},[a("q-separator"),a("essential-links"),a("q-separator")],1)],1)]),a("q-page-container",[a("router-view")],1)],1)},n=[],s=(a("e6cf"),a("b06b")),o=a("384e"),l={name:"ScrollerLayout",components:{playground:()=>a.e(11).then(a.bind(null,"2937")),"essential-links":()=>a.e(1).then(a.bind(null,"4bd0"))},data(){return{version:o["b"],leftDrawerOpen:this.$q.platform.is.desktop}},beforeMount(){},computed:{titlebarHeight:{get(){return this.$store.state.common.titlebarHeight},set(e){this.$store.commit("common/titlebarHeight",e)}},displayedLocale(){return void 0===this.locale||""===this.locale?"en-US":this.locale},locale:{get(){return this.$store.state.scroller.locale},set(e){this.$store.commit("scroller/locale",e)}}},watch:{},methods:{openURL:s["a"],onTitlebarResized(e){this.titlebarHeight=e.height}}},i=l,c=a("2877"),p=a("4d5a"),u=a("e359"),d=a("3980"),b=a("65c6"),h=a("9c40"),m=a("0016"),f=a("6ac5"),q=a("2c91"),g=a("9404"),v=a("3b73"),w=a("eb85"),Q=a("09e3"),k=a("eebe"),$=a.n(k),_=Object(c["a"])(i,r,n,!1,null,null,null);t["default"]=_.exports;$()(_,"components",{QLayout:p["a"],QHeader:u["a"],QResizeObserver:d["a"],QToolbar:b["a"],QBtn:h["a"],QIcon:m["a"],QToolbarTitle:f["a"],QSpace:q["a"],QDrawer:g["a"],QExpansionItem:v["a"],QSeparator:w["a"],QPageContainer:Q["a"]})}}]); -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Value-Types.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 97 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Value-Types.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 97 | -------------------------------------------------------------------------------- /ui/dev/src/pages/6-QDateTimeScroller-Value-Types.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 97 | --------------------------------------------------------------------------------