├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── LICENSE ├── README.md ├── app-extension ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .npmignore ├── LICENSE ├── README.md ├── jsconfig.json ├── package.json └── src │ ├── boot │ └── register.js │ └── index.js ├── demo ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── .stylintrc ├── LICENSE ├── README.md ├── babel.config.js ├── jsconfig.json ├── package.json ├── public │ ├── 404.html │ ├── favicon.ico │ ├── icons │ │ ├── favicon-128x128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ └── favicon-96x96.png │ ├── q-date-range-scroller.png │ ├── q-date-scroller.png │ ├── q-date-time-scroller-ampm.png │ ├── q-date-time-scroller.png │ ├── q-scroller.png │ ├── q-time-range-scroller-ampm.png │ ├── q-time-range-scroller.png │ ├── q-time-scroller-ampm.png │ ├── q-time-scroller.png │ └── quasar-logo.png ├── quasar.conf.js ├── quasar.extensions.json ├── src-ssr │ ├── extension.js │ ├── index.js │ └── ssr-flag.d.ts └── src │ ├── App.vue │ ├── assets │ ├── page-utils.js │ ├── quasar-logo-full.svg │ └── sad.svg │ ├── boot │ ├── components.js │ └── qscroller.js │ ├── components │ ├── EssentialLinks.vue │ ├── ExampleTitle.vue │ ├── Hero.vue │ └── Playground.vue │ ├── css │ ├── app.sass │ └── quasar.variables.sass │ ├── examples │ ├── date-range │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ ├── Intervals.vue │ │ ├── Locale.vue │ │ ├── QInput.vue │ │ ├── Slots.vue │ │ └── Types.vue │ ├── date-time │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ ├── Intervals.vue │ │ ├── Locale.vue │ │ ├── QInput.vue │ │ ├── Slots.vue │ │ └── Types.vue │ ├── date │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ ├── Intervals.vue │ │ ├── Locale.vue │ │ ├── QInput.vue │ │ ├── Slots.vue │ │ └── Types.vue │ ├── string │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ └── QInput.vue │ ├── time-range │ │ ├── 12Hour.vue │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ ├── Intervals.vue │ │ ├── QInput.vue │ │ ├── Slots.vue │ │ └── Types.vue │ └── time │ │ ├── 12Hour.vue │ │ ├── Basic.vue │ │ ├── Colors.vue │ │ ├── Disabled.vue │ │ ├── Intervals.vue │ │ ├── QInput.vue │ │ ├── Slots.vue │ │ └── Types.vue │ ├── index.template.html │ ├── layouts │ ├── Examples.vue │ ├── MainLayout.vue │ └── ScrollerLayout.vue │ ├── markdown │ └── scroller.md │ ├── pages │ ├── Date.vue │ ├── DateRange.vue │ ├── DateTime.vue │ ├── Error404.vue │ ├── Examples.vue │ ├── Index.vue │ ├── Scroller.vue │ ├── String.vue │ ├── Time.vue │ └── TimeRange.vue │ ├── router │ ├── index.js │ └── routes.js │ ├── store │ ├── common │ │ ├── actions.js │ │ ├── getters.js │ │ ├── index.js │ │ ├── mutations.js │ │ └── state.js │ ├── index.js │ ├── scroller │ │ ├── actions.js │ │ ├── getters.js │ │ ├── index.js │ │ ├── mutations.js │ │ └── state.js │ └── store-flag.d.ts │ └── util │ └── getLocale.js ├── docs ├── 404.html ├── css │ ├── app.9829af0d.css │ └── vendor.a69c8fad.css ├── favicon.ico ├── fonts │ ├── KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff │ ├── KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff │ ├── KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff │ ├── KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff │ ├── KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff │ ├── KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff │ ├── fa-brands-400.329a95a9.woff │ ├── fa-brands-400.c1210e5e.woff2 │ ├── fa-regular-400.36722648.woff │ ├── fa-regular-400.68c5af1f.woff2 │ ├── fa-solid-900.ada6e6df.woff2 │ ├── fa-solid-900.c6ec0800.woff │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff │ └── flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2 ├── icons │ ├── favicon-128x128.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ └── favicon-96x96.png ├── index.html ├── js │ ├── 1.d11de2b3.js │ ├── 10.cb406126.js │ ├── 11.4d6fdeb2.js │ ├── 12.54fb4195.js │ ├── 13.8f33e729.js │ ├── 14.c364f633.js │ ├── 15.717a669e.js │ ├── 16.e128bd9a.js │ ├── 17.ba0a8072.js │ ├── 18.6d034beb.js │ ├── 19.0cfa4e00.js │ ├── 20.8bf54514.js │ ├── 21.51902507.js │ ├── 22.3f4bd2b4.js │ ├── 23.76d4dc68.js │ ├── 24.645c053c.js │ ├── 25.27b3d7fd.js │ ├── 26.2011a2af.js │ ├── 27.9d2bc269.js │ ├── 28.ab519fc3.js │ ├── 29.376c6f33.js │ ├── 3.4b52e644.js │ ├── 30.8d1cdaac.js │ ├── 31.54a4adeb.js │ ├── 32.fe9b13ec.js │ ├── 33.f8a3b1aa.js │ ├── 34.d85ba58f.js │ ├── 35.78ac6010.js │ ├── 36.14da9872.js │ ├── 37.97629c26.js │ ├── 38.e08f802b.js │ ├── 39.75bc41fa.js │ ├── 4.fc2fdad5.js │ ├── 40.350be65d.js │ ├── 41.99816793.js │ ├── 42.f82e68b7.js │ ├── 43.6ab00dbb.js │ ├── 44.51314dff.js │ ├── 45.d6132331.js │ ├── 46.015c7163.js │ ├── 47.f1fb5ddd.js │ ├── 48.5223e272.js │ ├── 49.6379b031.js │ ├── 5.42e34e79.js │ ├── 50.b0e35421.js │ ├── 51.d58b015e.js │ ├── 52.b2ae2680.js │ ├── 53.7cb0e3e3.js │ ├── 54.446fda43.js │ ├── 55.bc1b9f26.js │ ├── 56.c2a52359.js │ ├── 57.04c9e310.js │ ├── 58.d1ddabfa.js │ ├── 59.01810a62.js │ ├── 6.d1ee5993.js │ ├── 60.e25941b9.js │ ├── 7.0e802087.js │ ├── 8.f309c3f2.js │ ├── 9.57f910c5.js │ ├── app.36d15d11.js │ └── vendor.15ee6f70.js ├── q-date-range-scroller.png ├── q-date-scroller.png ├── q-date-time-scroller-ampm.png ├── q-date-time-scroller.png ├── q-scroller.png ├── q-time-range-scroller-ampm.png ├── q-time-range-scroller.png ├── q-time-scroller-ampm.png ├── q-time-scroller.png └── quasar-logo.png └── ui ├── .babelrc ├── .editorconfig ├── .env.jest ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── build ├── build.api.js ├── config.js ├── entry │ ├── index.common.js │ ├── index.esm.js │ └── index.umd.js ├── index.js ├── script.app-ext.js ├── script.clean.js ├── script.css.js ├── script.javascript.js ├── script.open-umd.js └── utils.js ├── dev ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── README.md ├── babel.config.js ├── jsconfig.json ├── package.json ├── public │ ├── favicon.ico │ └── icons │ │ ├── favicon-128x128.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ └── favicon-96x96.png ├── quasar.conf.js └── src │ ├── App.vue │ ├── assets │ └── .gitkeep │ ├── boot │ └── register.js │ ├── components │ └── .gitkeep │ ├── css │ ├── app.sass │ └── quasar.variables.sass │ ├── index.template.html │ ├── layouts │ └── MyLayout.vue │ ├── pages │ ├── 1-QStringScroller.vue │ ├── 2-QTimeScroller-Basic.vue │ ├── 2-QTimeScroller-Borders.vue │ ├── 2-QTimeScroller-Color.vue │ ├── 2-QTimeScroller-Intervals.vue │ ├── 2-QTimeScroller-Misc.vue │ ├── 2-QTimeScroller-QInput.vue │ ├── 2-QTimeScroller-Value-Types.vue │ ├── 3-QTimeRangeScroller-Basic.vue │ ├── 3-QTimeRangeScroller-Borders.vue │ ├── 3-QTimeRangeScroller-Color.vue │ ├── 3-QTimeRangeScroller-Intervals.vue │ ├── 3-QTimeRangeScroller-Misc.vue │ ├── 3-QTimeRangeScroller-QInput.vue │ ├── 3-QTimeRangeScroller-Value-Types.vue │ ├── 4-QDateScroller-Basic.vue │ ├── 4-QDateScroller-Borders.vue │ ├── 4-QDateScroller-Color.vue │ ├── 4-QDateScroller-Intervals.vue │ ├── 4-QDateScroller-Locale.vue │ ├── 4-QDateScroller-Misc.vue │ ├── 4-QDateScroller-QInput.vue │ ├── 4-QDateScroller-Value-Types.vue │ ├── 5-QDateRangeScroller-Basic.vue │ ├── 5-QDateRangeScroller-Borders.vue │ ├── 5-QDateRangeScroller-Color.vue │ ├── 5-QDateRangeScroller-Intervals.vue │ ├── 5-QDateRangeScroller-QInput.vue │ ├── 5-QDateRangeScroller-Value-Types.vue │ ├── 6-QDateTimeScroller-Basic.vue │ ├── 6-QDateTimeScroller-Borders.vue │ ├── 6-QDateTimeScroller-Color.vue │ ├── 6-QDateTimeScroller-Intervals.vue │ ├── 6-QDateTimeScroller-Locale.vue │ ├── 6-QDateTimeScroller-Misc.vue │ ├── 6-QDateTimeScroller-QInput.vue │ ├── 6-QDateTimeScroller-Value-Types.vue │ ├── Error404.vue │ ├── Index.vue │ └── Test3.vue │ └── router │ ├── index.js │ ├── pages.js │ └── routes.js ├── jsconfig.json ├── package.json ├── src ├── components │ ├── QDateRangeScroller.js │ ├── QDateScroller.js │ ├── QDateTimeScroller.js │ ├── QScroller.js │ ├── QScroller.json │ ├── QScroller.sass │ ├── QStringScroller.js │ ├── QTimeRangeScroller.js │ ├── QTimeScroller.js │ └── scroller.sass ├── directives │ └── resize.js ├── index.js ├── index.sass ├── mixins │ ├── common.js │ ├── date-base.js │ ├── date-time-base.js │ ├── scroller-base.js │ └── time-base.js └── utils │ ├── Timestamp.js │ ├── props.js │ └── views.js ├── types └── types.d.ts └── umd-test.html /.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 -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Jeff Galbraith 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > It's likely this App Extension will be deprecated (no support for Quasar v2/Vue 3) unless it gets a strong representation from developers using it. 2 | 3 | QScroller (Vue Plugin, UMD and Quasar App Extension) 4 | === 5 | 6 | ![@quasar/quasar-ui-qscroller](https://img.shields.io/npm/v/@quasar/quasar-ui-qscroller.svg?label=@quasar/quasar-ui-qscroller) 7 | ![@quasar/quasar-app-extension-qscroller](https://img.shields.io/npm/v/@quasar/quasar-app-extension-qscroller.svg?label=@quasar/quasar-app-extension-qscroller) 8 | [![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/quasarframework/quasar-ui-qscroller.svg)]() 9 | [![GitHub repo size in bytes](https://img.shields.io/github/repo-size/quasarframework/quasar-ui-qscroller.svg)]() 10 | 11 | # Structure 12 | 13 | * [/ui](ui) - standalone npm package (go here for more information) 14 | * [/app-extension](app-extension) - Quasar app extension 15 | * [/demo](demo) - docs, demo and examples project 16 | * [live demo](https://quasarframework.github.io/quasar-ui-qscroller/docs) - live docs, demo and examples 17 | 18 | # Demo Workflow 19 | If you fork or download this project, make sure you have the Quasar CLI globally installed: 20 | 21 | ``` 22 | $ npm i -g @quasar/cli 23 | ``` 24 | 25 | The workflow to build the demo, on a fresh project, is as follows: 26 | ``` 27 | $ cd ui 28 | $ yarn 29 | $ yarn build 30 | $ cd ../demo 31 | $ yarn 32 | $ quasar dev 33 | ``` 34 | 35 | # Donate 36 | If you appreciate the work that went into this, please consider donating to [Quasar](https://donate.quasar.dev) or [Jeff](https://github.com/sponsors/hawkeye64). 37 | 38 | # License 39 | MIT (c) Jeff Galbraith 40 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /app-extension/.eslintignore: -------------------------------------------------------------------------------- 1 | docs 2 | -------------------------------------------------------------------------------- /app-extension/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | 4 | parserOptions: { 5 | parser: 'babel-eslint', 6 | sourceType: 'module' 7 | }, 8 | 9 | env: { 10 | browser: true 11 | }, 12 | 13 | extends: [ 14 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 15 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 16 | 'plugin:vue/essential', 17 | '@vue/standard' 18 | ], 19 | 20 | // required to lint *.vue files 21 | plugins: [ 22 | 'vue' 23 | ], 24 | 25 | globals: { 26 | 'ga': true, // Google Analytics 27 | 'cordova': true, 28 | '__statics': true, 29 | 'process': true 30 | }, 31 | 32 | // add your custom rules here 33 | rules: { 34 | // allow async-await 35 | 'generator-star-spacing': 'off', 36 | // allow paren-less arrow functions 37 | 'arrow-parens': 'off', 38 | 'one-var': 'off', 39 | 40 | 'import/first': 'off', 41 | 'import/named': 'error', 42 | 'import/namespace': 'error', 43 | 'import/default': 'error', 44 | 'import/export': 'error', 45 | 'import/extensions': 'off', 46 | 'import/no-unresolved': 'off', 47 | 'import/no-extraneous-dependencies': 'off', 48 | 'prefer-promise-reject-errors': 'off', 49 | 50 | // allow console.log during development only 51 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 52 | // allow debugger during development only 53 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /app-extension/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Jeff Galbraith 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /app-extension/README.md: -------------------------------------------------------------------------------- 1 | # Quasar App Extension QScroller 2 | 3 | The **QScroller App Extension** allows you to seamlessly add the [QScroller](../ui) component into your Quasar application. It manages the boot file file and all other configuration for you. 4 | 5 | [![npm](https://img.shields.io/npm/v/@quasar/quasar-app-extension-qscroller.svg?label=quasar-app-extension-qscroller)](https://www.npmjs.com/package/@quasar/quasar-app-extension-qscroller) 6 | [![npm](https://img.shields.io/npm/dt/@quasar/quasar-app-extension-qscroller.svg)](https://www.npmjs.com/package/@quasar/quasar-app-extension-qscroller) 7 | 8 | # Examples and Documentation for QScroller UI Component 9 | Can be found [here](https://quasarframework.github.io/quasar-ui-qscroller) 10 | 11 | 12 | # Install 13 | ```bash 14 | quasar ext add @quasar/qscroller 15 | ``` 16 | Quasar CLI will retrieve it from NPM and install the extension. 17 | 18 | # Uninstall 19 | ```bash 20 | quasar ext remove @quasar/qscroller 21 | ``` 22 | 23 | # Donate 24 | If you appreciate the work that went into this, please consider donating to [Quasar](https://donate.quasar.dev) or [Jeff](https://github.com/sponsors/hawkeye64). 25 | 26 | # License 27 | MIT (c) Jeff Galbraith 28 | -------------------------------------------------------------------------------- /app-extension/jsconfig.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "target": "es6" 6 | }, 7 | "exclude": ["node_modules"], 8 | "include": ["src/**/*"] 9 | } -------------------------------------------------------------------------------- /app-extension/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@quasar/quasar-app-extension-qscroller", 3 | "version": "1.1.3", 4 | "description": "QScroller - Embed string, time, date and range scrollers in your Quasar Apps", 5 | "author": "Jeff Galbraith ", 6 | "license": "MIT", 7 | "main": "src/index.js", 8 | "scripts": { 9 | "lint": "eslint --ext .js,.vue src", 10 | "lint-fix": "eslint --ext .js,.vue src --fix" 11 | }, 12 | "funding": { 13 | "type": "github", 14 | "url": "https://github.com/sponsors/hawkeye64" 15 | }, 16 | "publishConfig": { 17 | "access": "public" 18 | }, 19 | "bugs": "https://github.com/quasarframework/quasar-ui-qscroller/issues", 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/quasarframework/quasar-ui-qscroller.git" 23 | }, 24 | "homepage": "https://github.com/quasarframework/quasar-ui-qscroller", 25 | "keywords": [ 26 | "quasar", 27 | "quasarframework", 28 | "app", 29 | "app extension", 30 | "extension", 31 | "date", 32 | "time", 33 | "range", 34 | "date-time" 35 | ], 36 | "engines": { 37 | "node": ">= 8.9.0", 38 | "npm": ">= 5.6.0", 39 | "yarn": ">= 1.6.0" 40 | }, 41 | "dependencies": { 42 | "@quasar/quasar-ui-qscroller": "^1.1.3" 43 | }, 44 | "devDependencies": { 45 | "@vue/eslint-config-standard": "^6.0.0", 46 | "babel-eslint": "^10.1.0", 47 | "eslint": "^7.29.0", 48 | "eslint-loader": "^4.0.2", 49 | "eslint-plugin-vue": "^7.12.1" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/.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/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /src-bex/www 3 | /src-capacitor 4 | /src-cordova 5 | /.quasar 6 | /node_modules 7 | /src/markdown 8 | 9 | -------------------------------------------------------------------------------- /demo/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | node_modules 4 | 5 | # Quasar core related directories 6 | .quasar 7 | /dist 8 | 9 | # Cordova related directories and files 10 | /src-cordova/node_modules 11 | /src-cordova/platforms 12 | /src-cordova/plugins 13 | /src-cordova/www 14 | 15 | # Capacitor related directories and files 16 | /src-capacitor/www 17 | /src-capacitor/node_modules 18 | 19 | # BEX related directories and files 20 | /src-bex/www 21 | /src-bex/js/core 22 | 23 | # Log files 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | yarn.lock 28 | 29 | # Editor directories and files 30 | .idea 31 | .vscode 32 | *.suo 33 | *.ntvs* 34 | *.njsproj 35 | *.sln 36 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /demo/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Jeff Galbraith 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /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/babel.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | presets: [ 4 | '@quasar/babel-preset-app' 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/favicon.ico -------------------------------------------------------------------------------- /demo/public/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/icons/favicon-128x128.png -------------------------------------------------------------------------------- /demo/public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /demo/public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /demo/public/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/icons/favicon-96x96.png -------------------------------------------------------------------------------- /demo/public/q-date-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-date-range-scroller.png -------------------------------------------------------------------------------- /demo/public/q-date-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-date-scroller.png -------------------------------------------------------------------------------- /demo/public/q-date-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-date-time-scroller-ampm.png -------------------------------------------------------------------------------- /demo/public/q-date-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-date-time-scroller.png -------------------------------------------------------------------------------- /demo/public/q-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-scroller.png -------------------------------------------------------------------------------- /demo/public/q-time-range-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-time-range-scroller-ampm.png -------------------------------------------------------------------------------- /demo/public/q-time-range-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-time-range-scroller.png -------------------------------------------------------------------------------- /demo/public/q-time-scroller-ampm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-time-scroller-ampm.png -------------------------------------------------------------------------------- /demo/public/q-time-scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/q-time-scroller.png -------------------------------------------------------------------------------- /demo/public/quasar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/demo/public/quasar-logo.png -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /demo/src-ssr/extension.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file runs in a Node context (it's NOT transpiled by Babel), so use only 3 | * the ES6 features that are supported by your Node version. https://node.green/ 4 | * 5 | * WARNING! 6 | * If you import anything from node_modules, then make sure that the package is specified 7 | * in package.json > dependencies and NOT in devDependencies 8 | * 9 | * Note: This file is used for both PRODUCTION & DEVELOPMENT. 10 | * Note: Changes to this file (but not any file it imports!) are picked up by the 11 | * development server, but such updates are costly since the dev-server needs a reboot. 12 | */ 13 | 14 | module.exports.extendApp = function ({ app, ssr }) { 15 | /* 16 | Extend the parts of the express app that you 17 | want to use with development server too. 18 | 19 | Example: app.use(), app.get() etc 20 | */ 21 | } 22 | -------------------------------------------------------------------------------- /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/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /demo/src/components/ExampleTitle.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 29 | -------------------------------------------------------------------------------- /demo/src/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 44 | -------------------------------------------------------------------------------- /demo/src/css/quasar.variables.sass: -------------------------------------------------------------------------------- 1 | // Quasar Sass (& SCSS) Variables 2 | // -------------------------------------------------- 3 | // To customize the look and feel of this app, you can override 4 | // the Sass/SCSS variables found in Quasar's source Sass/SCSS files. 5 | 6 | // Check documentation for full list of Quasar variables 7 | 8 | // Your own variables (that are declared here) and Quasar's own 9 | // ones will be available out of the box in your .vue/.scss/.sass files 10 | 11 | // It's highly recommended to change the default colors 12 | // to match your app's branding. 13 | // Tip: Use the "Theme Builder" on Quasar's documentation website. 14 | 15 | $primary : #1976D2 16 | $secondary : #26A69A 17 | $accent : #9C27B0 18 | 19 | $dark : #1D1D1D 20 | 21 | $positive : #21BA45 22 | $negative : #C10015 23 | $info : #31CCEC 24 | $warning : #F2C037 25 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Disabled.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 33 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Intervals.vue: -------------------------------------------------------------------------------- 1 | 60 | 61 | 72 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Locale.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/date-range/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Disabled.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 41 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Intervals.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 63 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Locale.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/date-time/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/date/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/date/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/date/Disabled.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 33 | -------------------------------------------------------------------------------- /demo/src/examples/date/Intervals.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 63 | -------------------------------------------------------------------------------- /demo/src/examples/date/Locale.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | -------------------------------------------------------------------------------- /demo/src/examples/date/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/date/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/12Hour.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 35 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Disabled.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 49 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Intervals.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 50 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/time-range/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/examples/time/12Hour.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 34 | -------------------------------------------------------------------------------- /demo/src/examples/time/Basic.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 59 | -------------------------------------------------------------------------------- /demo/src/examples/time/Colors.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 60 | -------------------------------------------------------------------------------- /demo/src/examples/time/Disabled.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 47 | -------------------------------------------------------------------------------- /demo/src/examples/time/Intervals.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 46 | -------------------------------------------------------------------------------- /demo/src/examples/time/Slots.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/examples/time/Types.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 64 | -------------------------------------------------------------------------------- /demo/src/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= productName %> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /demo/src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /demo/src/pages/Examples.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /demo/src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 68 | -------------------------------------------------------------------------------- /demo/src/pages/String.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 77 | -------------------------------------------------------------------------------- /demo/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | import routes from './routes' 5 | 6 | Vue.use(VueRouter) 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Router instantiation; 11 | * 12 | * The function below can be async too; either use 13 | * async/await or return a Promise which resolves 14 | * with the Router instance. 15 | */ 16 | 17 | export default function (/* { store, ssrContext } */) { 18 | const Router = new VueRouter({ 19 | scrollBehavior (to, _, savedPosition) { 20 | return new Promise(resolve => { 21 | setTimeout(() => { 22 | if (to.hash !== undefined && to.hash !== '') { 23 | const el = document.getElementById(to.hash.substring(1)) 24 | 25 | if (el !== null) { 26 | resolve({ x: 0, y: el.offsetTop - el.scrollHeight }) 27 | return 28 | } 29 | } 30 | 31 | resolve(savedPosition || { x: 0, y: 0 }) 32 | }, 100) 33 | }) 34 | }, 35 | routes, 36 | 37 | // Leave these as they are and change in quasar.conf.js instead! 38 | // quasar.conf.js -> build -> vueRouterMode 39 | // quasar.conf.js -> build -> publicPath 40 | mode: process.env.VUE_ROUTER_MODE, 41 | base: process.env.VUE_ROUTER_BASE 42 | }) 43 | 44 | return Router 45 | } 46 | -------------------------------------------------------------------------------- /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/store/common/actions.js: -------------------------------------------------------------------------------- 1 | /* 2 | export function someAction (context) { 3 | } 4 | */ 5 | -------------------------------------------------------------------------------- /demo/src/store/common/getters.js: -------------------------------------------------------------------------------- 1 | export const titlebarHeight = (state) => state.titlebarHeight 2 | export const toc = (state) => state.toc 3 | -------------------------------------------------------------------------------- /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/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/src/store/common/state.js: -------------------------------------------------------------------------------- 1 | export default { 2 | titlebarHeight: 0, 3 | toc: [] 4 | } 5 | -------------------------------------------------------------------------------- /demo/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | import scroller from './scroller' 5 | import common from './common' 6 | 7 | Vue.use(Vuex) 8 | 9 | /* 10 | * If not building with SSR mode, you can 11 | * directly export the Store instantiation 12 | */ 13 | 14 | export default function (/* { ssrContext } */) { 15 | const Store = new Vuex.Store({ 16 | modules: { 17 | scroller, 18 | common 19 | }, 20 | 21 | // enable strict mode (adds overhead!) 22 | // for dev mode only 23 | strict: process.env.DEV 24 | }) 25 | 26 | return Store 27 | } 28 | -------------------------------------------------------------------------------- /demo/src/store/scroller/actions.js: -------------------------------------------------------------------------------- 1 | /* 2 | export function someAction (context) { 3 | } 4 | */ 5 | -------------------------------------------------------------------------------- /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/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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /docs/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 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/favicon.ico -------------------------------------------------------------------------------- /docs/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.9391e6e2.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.ddd11dab.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.877b9231.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.0344cc3c.woff -------------------------------------------------------------------------------- /docs/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.b555d228.woff -------------------------------------------------------------------------------- /docs/fonts/KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/KFOmCnqEu92Fr1Mu4mxM.9b78ea3b.woff -------------------------------------------------------------------------------- /docs/fonts/fa-brands-400.329a95a9.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-brands-400.329a95a9.woff -------------------------------------------------------------------------------- /docs/fonts/fa-brands-400.c1210e5e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-brands-400.c1210e5e.woff2 -------------------------------------------------------------------------------- /docs/fonts/fa-regular-400.36722648.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-regular-400.36722648.woff -------------------------------------------------------------------------------- /docs/fonts/fa-regular-400.68c5af1f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-regular-400.68c5af1f.woff2 -------------------------------------------------------------------------------- /docs/fonts/fa-solid-900.ada6e6df.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-solid-900.ada6e6df.woff2 -------------------------------------------------------------------------------- /docs/fonts/fa-solid-900.c6ec0800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/fa-solid-900.c6ec0800.woff -------------------------------------------------------------------------------- /docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.ed0c933c.woff -------------------------------------------------------------------------------- /docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.044abb9e.woff2 -------------------------------------------------------------------------------- /docs/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/icons/favicon-128x128.png -------------------------------------------------------------------------------- /docs/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/icons/favicon-16x16.png -------------------------------------------------------------------------------- /docs/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/icons/favicon-32x32.png -------------------------------------------------------------------------------- /docs/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/docs/icons/favicon-96x96.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | QScroller docs, examples and demo site
-------------------------------------------------------------------------------- /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"]})}}]); -------------------------------------------------------------------------------- /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/17.ba0a8072.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[17],{9571:function(e,n,r){"use strict";r.r(n),n["default"]='\n\n 12 | -------------------------------------------------------------------------------- /ui/dev/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/ui/dev/src/assets/.gitkeep -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/dev/src/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quasarframework/quasar-ui-qscroller/b7355e337981af6989d596500359053fc993b30c/ui/dev/src/components/.gitkeep -------------------------------------------------------------------------------- /ui/dev/src/css/app.sass: -------------------------------------------------------------------------------- 1 | // app global css in Sass form 2 | @import '../../../src/index.sass' 3 | -------------------------------------------------------------------------------- /ui/dev/src/css/quasar.variables.sass: -------------------------------------------------------------------------------- 1 | // Quasar Sass (& SCSS) Variables 2 | // -------------------------------------------------- 3 | // To customize the look and feel of this app, you can override 4 | // the Sass/SCSS variables found in Quasar's source Sass/SCSS files. 5 | 6 | // Check documentation for full list of Quasar variables 7 | 8 | // Your own variables (that are declared here) and Quasar's own 9 | // ones will be available out of the box in your .vue/.scss/.sass files 10 | 11 | // It's highly recommended to change the default colors 12 | // to match your app's branding. 13 | // Tip: Use the "Theme Builder" on Quasar's documentation website. 14 | 15 | $primary : #1976D2 16 | $secondary : #26A69A 17 | $accent : #9C27B0 18 | 19 | $dark : #1D1D1D 20 | 21 | $positive : #21BA45 22 | $negative : #C10015 23 | $info : #31CCEC 24 | $warning : #F2C037 25 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/dev/src/layouts/MyLayout.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 41 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 85 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Intervals.vue: -------------------------------------------------------------------------------- 1 | 70 | 71 | 80 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 66 | -------------------------------------------------------------------------------- /ui/dev/src/pages/2-QTimeScroller-Value-Types.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 97 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 85 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Intervals.vue: -------------------------------------------------------------------------------- 1 | 74 | 75 | 84 | -------------------------------------------------------------------------------- /ui/dev/src/pages/3-QTimeRangeScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 59 | 60 | 69 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Borders.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 68 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Locale.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Misc.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 65 | -------------------------------------------------------------------------------- /ui/dev/src/pages/4-QDateScroller-Value-Types.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 97 | -------------------------------------------------------------------------------- /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/dev/src/pages/6-QDateTimeScroller-Locale.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /ui/dev/src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /ui/dev/src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 33 | 34 | 39 | -------------------------------------------------------------------------------- /ui/dev/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | import routes from './routes' 5 | 6 | Vue.use(VueRouter) 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Router instantiation; 11 | * 12 | * The function below can be async too; either use 13 | * async/await or return a Promise which resolves 14 | * with the Router instance. 15 | */ 16 | 17 | export default function (/* { store, ssrContext } */) { 18 | const Router = new VueRouter({ 19 | scrollBehavior (to, _, savedPosition) { 20 | return new Promise(resolve => { 21 | setTimeout(() => { 22 | if (to.hash !== undefined && to.hash !== '') { 23 | const el = document.getElementById(to.hash.substring(1)) 24 | 25 | if (el !== null) { 26 | resolve({ x: 0, y: el.offsetTop - el.scrollHeight }) 27 | return 28 | } 29 | } 30 | 31 | resolve(savedPosition || { x: 0, y: 0 }) 32 | }, 100) 33 | }) 34 | }, 35 | routes, 36 | 37 | // Leave these as they are and change in quasar.conf.js instead! 38 | // quasar.conf.js -> build -> vueRouterMode 39 | // quasar.conf.js -> build -> publicPath 40 | mode: process.env.VUE_ROUTER_MODE, 41 | base: process.env.VUE_ROUTER_BASE 42 | }) 43 | 44 | return Router 45 | } 46 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/src/components/QScroller.sass: -------------------------------------------------------------------------------- 1 | @import 'scroller.sass' 2 | // include colorize css 3 | @import 'q-colorize-mixin/dist/index' -------------------------------------------------------------------------------- /ui/src/directives/resize.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'resize', 3 | 4 | inserted (el, binding) { 5 | const callback = binding.value 6 | const options = binding.options || { passive: true } 7 | 8 | window.addEventListener('resize', callback, options) 9 | el._onResize = { 10 | callback, 11 | options 12 | } 13 | 14 | if (!binding.modifiers || !binding.modifiers.quiet) { 15 | callback() 16 | } 17 | }, 18 | 19 | unbind (el) { 20 | if (!el._onResize) return 21 | 22 | const { callback, options } = el._onResize 23 | window.removeEventListener('resize', callback, options) 24 | delete el._onResize 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/src/index.sass: -------------------------------------------------------------------------------- 1 | @import 'quasar/src/css/variables.sass' 2 | @import './components/QScroller.sass' 3 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /ui/src/mixins/time-base.js: -------------------------------------------------------------------------------- 1 | import props from '../utils/props' 2 | 3 | export default { 4 | name: 'TimeBase', 5 | 6 | props: { 7 | ...props.common, 8 | ...props.base, 9 | ...props.locale, 10 | // height: [Number, String], 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 | methods: { 20 | isValidTime (time) { 21 | const parts = time.split(':') 22 | if (parts.length === 2) { 23 | const hour = parseInt(parts[0], 10) 24 | const minute = parseInt(parts[1], 10) 25 | if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60) { 26 | return true 27 | } 28 | } 29 | return false 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 --------------------------------------------------------------------------------