├── .github └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .npmignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MANUAL_CONFIG.md ├── README.md ├── TROUBLESHOOTING.md ├── commitlint.config.js ├── dashboard ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── package.json ├── public │ ├── background.jpg │ ├── buttons.png │ ├── favicon.ico │ ├── favicon.png │ ├── fonts │ │ ├── fontawesome │ │ │ ├── fa-brands-400.eot │ │ │ ├── fa-brands-400.svg │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.eot │ │ │ ├── fa-regular-400.svg │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.eot │ │ │ ├── fa-solid-900.svg │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-solid-900.woff │ │ │ └── fa-solid-900.woff2 │ │ └── simple-line-icons │ │ │ ├── Simple-Line-Icons.eot │ │ │ ├── Simple-Line-Icons.svg │ │ │ ├── Simple-Line-Icons.ttf │ │ │ ├── Simple-Line-Icons.woff │ │ │ └── Simple-Line-Icons.woff2 │ ├── index.html │ ├── jf-top.png │ ├── logo-big.png │ ├── rr-icon.png │ └── rr-top.png ├── src │ ├── App.vue │ ├── assets │ │ ├── .gitignore │ │ ├── _es6 │ │ │ ├── main │ │ │ │ ├── app.js │ │ │ │ ├── bootstrap.js │ │ │ │ └── modules │ │ │ │ │ ├── helpers.js │ │ │ │ │ ├── template.js │ │ │ │ │ └── tools.js │ │ │ └── pages │ │ │ │ ├── be_comp_calendar.js │ │ │ │ ├── be_comp_charts.js │ │ │ │ ├── be_comp_dialogs.js │ │ │ │ ├── be_comp_image_cropper.js │ │ │ │ ├── be_comp_maps_google.js │ │ │ │ ├── be_comp_maps_vector.js │ │ │ │ ├── be_comp_rating.js │ │ │ │ ├── be_forms_validation.js │ │ │ │ ├── be_forms_wizard.js │ │ │ │ ├── be_pages_dashboard.js │ │ │ │ ├── be_tables_datatables.js │ │ │ │ ├── be_ui_animations.js │ │ │ │ ├── be_ui_icons.js │ │ │ │ ├── be_ui_progress.js │ │ │ │ ├── op_auth_lock.js │ │ │ │ ├── op_auth_reminder.js │ │ │ │ ├── op_auth_signin.js │ │ │ │ ├── op_auth_signup.js │ │ │ │ └── op_coming_soon.js │ │ ├── _scss │ │ │ ├── bootstrap │ │ │ │ ├── _alert.scss │ │ │ │ ├── _badge.scss │ │ │ │ ├── _breadcrumb.scss │ │ │ │ ├── _button-group.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _card.scss │ │ │ │ ├── _carousel.scss │ │ │ │ ├── _close.scss │ │ │ │ ├── _code.scss │ │ │ │ ├── _custom-forms.scss │ │ │ │ ├── _dropdown.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _functions.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _images.scss │ │ │ │ ├── _input-group.scss │ │ │ │ ├── _jumbotron.scss │ │ │ │ ├── _list-group.scss │ │ │ │ ├── _media.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _modal.scss │ │ │ │ ├── _nav.scss │ │ │ │ ├── _navbar.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _popover.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _progress.scss │ │ │ │ ├── _reboot.scss │ │ │ │ ├── _root.scss │ │ │ │ ├── _tables.scss │ │ │ │ ├── _tooltip.scss │ │ │ │ ├── _transitions.scss │ │ │ │ ├── _type.scss │ │ │ │ ├── _utilities.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── bootstrap-grid.scss │ │ │ │ ├── bootstrap-reboot.scss │ │ │ │ ├── bootstrap.scss │ │ │ │ ├── mixins │ │ │ │ │ ├── _alert.scss │ │ │ │ │ ├── _background-variant.scss │ │ │ │ │ ├── _badge.scss │ │ │ │ │ ├── _border-radius.scss │ │ │ │ │ ├── _box-shadow.scss │ │ │ │ │ ├── _breakpoints.scss │ │ │ │ │ ├── _buttons.scss │ │ │ │ │ ├── _caret.scss │ │ │ │ │ ├── _clearfix.scss │ │ │ │ │ ├── _float.scss │ │ │ │ │ ├── _forms.scss │ │ │ │ │ ├── _gradients.scss │ │ │ │ │ ├── _grid-framework.scss │ │ │ │ │ ├── _grid.scss │ │ │ │ │ ├── _hover.scss │ │ │ │ │ ├── _image.scss │ │ │ │ │ ├── _list-group.scss │ │ │ │ │ ├── _lists.scss │ │ │ │ │ ├── _nav-divider.scss │ │ │ │ │ ├── _pagination.scss │ │ │ │ │ ├── _reset-text.scss │ │ │ │ │ ├── _resize.scss │ │ │ │ │ ├── _screen-reader.scss │ │ │ │ │ ├── _size.scss │ │ │ │ │ ├── _table-row.scss │ │ │ │ │ ├── _text-emphasis.scss │ │ │ │ │ ├── _text-hide.scss │ │ │ │ │ ├── _text-truncate.scss │ │ │ │ │ ├── _transition.scss │ │ │ │ │ └── _visibility.scss │ │ │ │ └── utilities │ │ │ │ │ ├── _align.scss │ │ │ │ │ ├── _background.scss │ │ │ │ │ ├── _borders.scss │ │ │ │ │ ├── _clearfix.scss │ │ │ │ │ ├── _display.scss │ │ │ │ │ ├── _embed.scss │ │ │ │ │ ├── _flex.scss │ │ │ │ │ ├── _float.scss │ │ │ │ │ ├── _position.scss │ │ │ │ │ ├── _screenreaders.scss │ │ │ │ │ ├── _shadows.scss │ │ │ │ │ ├── _sizing.scss │ │ │ │ │ ├── _spacing.scss │ │ │ │ │ ├── _text.scss │ │ │ │ │ └── _visibility.scss │ │ │ ├── custom │ │ │ │ ├── _main.scss │ │ │ │ └── _variables.scss │ │ │ ├── main.scss │ │ │ ├── oneui │ │ │ │ ├── _badge.scss │ │ │ │ ├── _block.scss │ │ │ │ ├── _breadcrumb.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _custom-forms.scss │ │ │ │ ├── _dropdown.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _header.scss │ │ │ │ ├── _hero.scss │ │ │ │ ├── _images.scss │ │ │ │ ├── _input-group.scss │ │ │ │ ├── _item.scss │ │ │ │ ├── _layout-variations.scss │ │ │ │ ├── _layout.scss │ │ │ │ ├── _lists.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _modal.scss │ │ │ │ ├── _nav-main.scss │ │ │ │ ├── _nav.scss │ │ │ │ ├── _overlay.scss │ │ │ │ ├── _page-loader.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _reboot.scss │ │ │ │ ├── _side-overlay.scss │ │ │ │ ├── _sidebar.scss │ │ │ │ ├── _tables.scss │ │ │ │ ├── _timeline.scss │ │ │ │ ├── _transitions.scss │ │ │ │ ├── _type.scss │ │ │ │ ├── _utilities.scss │ │ │ │ ├── _variables-bootstrap.scss │ │ │ │ ├── _variables-themes.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── mixins │ │ │ │ │ ├── _alert.scss │ │ │ │ │ ├── _buttons.scss │ │ │ │ │ ├── _content.scss │ │ │ │ │ ├── _custom-forms.scss │ │ │ │ │ ├── _text-emphasis.scss │ │ │ │ │ └── _theme.scss │ │ │ │ ├── themes │ │ │ │ │ ├── _base.scss │ │ │ │ │ ├── amethyst.scss │ │ │ │ │ ├── city.scss │ │ │ │ │ ├── flat.scss │ │ │ │ │ ├── modern.scss │ │ │ │ │ └── smooth.scss │ │ │ │ └── utilities │ │ │ │ │ ├── _background.scss │ │ │ │ │ ├── _borders.scss │ │ │ │ │ ├── _display.scss │ │ │ │ │ ├── _effects.scss │ │ │ │ │ ├── _flex.scss │ │ │ │ │ └── _text.scss │ │ │ └── vendor │ │ │ │ ├── _animate.scss │ │ │ │ ├── _bootstrap-colorpicker.scss │ │ │ │ ├── _bootstrap-datepicker.scss │ │ │ │ ├── _ckeditor.scss │ │ │ │ ├── _datatables.scss │ │ │ │ ├── _dropzone.scss │ │ │ │ ├── _easy-pie-chart.scss │ │ │ │ ├── _fullcalendar.scss │ │ │ │ ├── _ion-range-slider.scss │ │ │ │ ├── _jquery-sparkline.scss │ │ │ │ ├── _jvector-map.scss │ │ │ │ ├── _select2.scss │ │ │ │ ├── _simple-line-icons.scss │ │ │ │ ├── _simplebar.scss │ │ │ │ ├── _simplemde.scss │ │ │ │ ├── _slick.scss │ │ │ │ ├── _summernote.scss │ │ │ │ └── fontawesome │ │ │ │ ├── _animated.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _shims.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── brands.scss │ │ │ │ ├── fontawesome.scss │ │ │ │ ├── regular.scss │ │ │ │ ├── solid.scss │ │ │ │ └── v4-shims.scss │ │ ├── battery_outline.svg │ │ ├── colors.scss │ │ ├── logo-w-text.png │ │ ├── logo-w-text.psd │ │ ├── logo.png │ │ ├── tyres_green.png │ │ ├── tyres_red.png │ │ ├── tyres_yellow.png │ │ └── vehicle-top.png │ ├── components │ │ ├── AssetConfiguration.vue │ │ ├── AssetMap.vue │ │ ├── AssetOverview.vue │ │ ├── BarChart.vue │ │ ├── BatteryLevel.vue │ │ ├── Dashboard.vue │ │ ├── DoughnutChart.vue │ │ ├── FleetMap.vue │ │ ├── FleetMapMenu.vue │ │ ├── Footer.vue │ │ ├── Form.vue │ │ ├── Framework.vue │ │ ├── LandingPage.vue │ │ ├── LineChart.vue │ │ ├── Login.vue │ │ ├── SensorHistory.vue │ │ ├── SensorOverview.vue │ │ ├── TyrePressure.vue │ │ └── VehicleStatus.vue │ ├── main.ts │ ├── router │ │ └── index.ts │ └── services │ │ ├── AssetService.js │ │ ├── AuthService.js │ │ ├── ConfigurationService.js │ │ ├── DdbService.js │ │ ├── FrameworkService.js │ │ └── IotService.js ├── tests │ ├── e2e │ │ ├── .eslintrc.js │ │ ├── custom-assertions │ │ │ └── elementCount.js │ │ ├── custom-commands │ │ │ ├── customExecute.js │ │ │ ├── openHomepage.js │ │ │ └── openHomepageClass.js │ │ ├── globals.js │ │ ├── page-objects │ │ │ └── homepage.js │ │ └── specs │ │ │ ├── test-with-pageobjects.js │ │ │ └── test.js │ └── unit │ │ └── example.spec.ts ├── tsconfig.json └── vue.config.js ├── infra ├── .gitignore ├── config-model.ts ├── config.sample.ts ├── core │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── bin │ │ └── core.ts │ ├── cdk.json │ ├── lib │ │ └── core-stack.ts │ ├── package.json │ └── tsconfig.json ├── dns │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── bin │ │ └── dns.ts │ ├── cdk.json │ ├── lib │ │ └── dns-stack.ts │ ├── package.json │ └── tsconfig.json └── packages │ ├── auth │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── lib │ │ └── index.ts │ ├── package.json │ └── tsconfig.json │ ├── dns │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── lib │ │ └── index.ts │ ├── package.json │ └── tsconfig.json │ ├── inventory │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── lib │ │ └── index.ts │ ├── package.json │ └── tsconfig.json │ └── webui │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── lib │ └── index.ts │ ├── package.json │ └── tsconfig.json ├── package.json ├── scripts ├── .gitignore ├── config.sample.sh ├── configure-infra.sh ├── configure-ui.sh ├── configure-user.sh ├── dashboard.sh ├── deploy-ui.sh ├── get-ui-entry-point.sh ├── post-deployment-tasks.sh └── prepare-infra.sh ├── static ├── acm-request.png ├── acm-verify.png ├── add-asset-menu.png ├── add-asset-sample-attrs.png ├── add-asset-sample-result.png ├── add-asset-sample.png ├── arch-dashboard.png ├── asset-connectivity-stats-empty.png ├── asset-connectivity-stats.png ├── cloudfront-oai.png ├── cognito-client-settings.png ├── cognito-domain-alias-setup.png ├── cognito-domain-setup.png ├── cognito-role-mapping.png ├── customize-asset-overview.png ├── dashboard-overview.png ├── deployment-flow.png ├── landing-page.png ├── main-architecture-overview.png └── map-with-assets.png └── tutorials └── README.md /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | *Issue #, if available:* 2 | 3 | *Description of changes:* 4 | 5 | 6 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.d.ts 2 | .DS_Store 3 | **/.DS_Store 4 | node_modules/ 5 | dashboard/src/assets/config.json -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 4 | software and associated documentation files (the "Software"), to deal in the Software 5 | without restriction, including without limitation the rights to use, copy, modify, 6 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 7 | permit persons to whom the Software is furnished to do so. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 10 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 11 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 12 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 13 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 14 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | -------------------------------------------------------------------------------- /TROUBLESHOOTING.md: -------------------------------------------------------------------------------- 1 | # Troubleshooting 2 | 3 | This section will help you solve common issues related to the usage of this project. Take a look at the section you're experiencing errors with. 4 | 5 | ## Failed during infrastructure spin up 6 | 7 | TODO 8 | 9 | ## Failed during UI deployment 10 | 11 | TODO 12 | 13 | ## Failed during UI usage 14 | 15 | TODO 16 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {extends: ['@commitlint/config-conventional']}; 2 | -------------------------------------------------------------------------------- /dashboard/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /dashboard/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended', 9 | '@vue/typescript/recommended' 10 | ], 11 | parserOptions: { 12 | ecmaVersion: 2020 13 | }, 14 | rules: { 15 | 'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off', 16 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 17 | }, 18 | overrides: [ 19 | { 20 | files: [ 21 | '**/__tests__/*.{j,t}s?(x)', 22 | '**/tests/unit/**/*.spec.{j,t}s?(x)' 23 | ], 24 | env: { 25 | mocha: true 26 | } 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | /tests/e2e/reports/ 6 | selenium-debug.log 7 | chromedriver.log 8 | geckodriver.log 9 | 10 | # local env files 11 | .env.local 12 | .env.*.local 13 | 14 | # Log files 15 | npm-debug.log* 16 | yarn-debug.log* 17 | yarn-error.log* 18 | 19 | # Editor directories and files 20 | .idea 21 | .vscode 22 | *.suo 23 | *.ntvs* 24 | *.njsproj 25 | *.sln 26 | *.sw? 27 | -------------------------------------------------------------------------------- /dashboard/README.md: -------------------------------------------------------------------------------- 1 | # ui 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Run your end-to-end tests 24 | ``` 25 | npm run test:e2e 26 | ``` 27 | 28 | ### Lints and fixes files 29 | ``` 30 | npm run lint 31 | ``` 32 | 33 | ### Customize configuration 34 | See [Configuration Reference](https://cli.vuejs.org/config/). 35 | -------------------------------------------------------------------------------- /dashboard/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /dashboard/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "test:unit": "vue-cli-service test:unit", 9 | "test:e2e": "vue-cli-service test:e2e", 10 | "lint": "vue-cli-service lint" 11 | }, 12 | "dependencies": { 13 | "@types/chart.js": "^2.9.18", 14 | "async": "^2.6.2", 15 | "aws-iot-device-sdk": "^2.2.1", 16 | "aws-sdk": "^2.406.0", 17 | "chart.js": "^2.7.2", 18 | "core-js": "^3.6.4", 19 | "jwt-decode": "^2.2.0", 20 | "moment": "^2.22.2", 21 | "project-name-generator": "^2.1.5", 22 | "random-location": "^1.0.12", 23 | "randomcolor": "^0.5.3", 24 | "shortid": "^2.2.13", 25 | "uuid": "^3.3.2", 26 | "vin-generator": "^1.0.1", 27 | "vue": "^2.6.11", 28 | "vue-chartjs": "^3.5.0", 29 | "vue-class-component": "^7.2.2", 30 | "vue-property-decorator": "^8.3.0", 31 | "vue-router": "^3.1.5", 32 | "vue2-google-maps": "^0.10.7", 33 | "vuex": "^3.1.2" 34 | }, 35 | "devDependencies": { 36 | "@types/chai": "^4.2.8", 37 | "@types/mocha": "^5.2.4", 38 | "@typescript-eslint/eslint-plugin": "^2.18.0", 39 | "@typescript-eslint/parser": "^2.18.0", 40 | "@vue/cli-plugin-babel": "^4.2.0", 41 | "@vue/cli-plugin-e2e-nightwatch": "^4.2.0", 42 | "@vue/cli-plugin-eslint": "^4.2.0", 43 | "@vue/cli-plugin-router": "^4.2.0", 44 | "@vue/cli-plugin-typescript": "^4.2.0", 45 | "@vue/cli-plugin-unit-mocha": "^4.2.0", 46 | "@vue/cli-plugin-vuex": "^4.2.0", 47 | "@vue/cli-service": "^4.2.0", 48 | "@vue/eslint-config-typescript": "^5.0.1", 49 | "@vue/test-utils": "1.0.0-beta.31", 50 | "chai": "^4.1.2", 51 | "chromedriver": "80", 52 | "eslint": "^6.7.2", 53 | "eslint-plugin-vue": "^6.1.2", 54 | "geckodriver": "^1.19.1", 55 | "node-sass": "^4.12.0", 56 | "sass-loader": "^8.0.2", 57 | "typescript": "~3.7.5", 58 | "vue-template-compiler": "^2.6.11" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /dashboard/public/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/background.jpg -------------------------------------------------------------------------------- /dashboard/public/buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/buttons.png -------------------------------------------------------------------------------- /dashboard/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/favicon.ico -------------------------------------------------------------------------------- /dashboard/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/favicon.png -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-brands-400.eot -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-brands-400.ttf -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-brands-400.woff -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-brands-400.woff2 -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-regular-400.eot -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-regular-400.ttf -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-regular-400.woff -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-regular-400.woff2 -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-solid-900.eot -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-solid-900.ttf -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-solid-900.woff -------------------------------------------------------------------------------- /dashboard/public/fonts/fontawesome/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/fontawesome/fa-solid-900.woff2 -------------------------------------------------------------------------------- /dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.eot -------------------------------------------------------------------------------- /dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.ttf -------------------------------------------------------------------------------- /dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.woff -------------------------------------------------------------------------------- /dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/fonts/simple-line-icons/Simple-Line-Icons.woff2 -------------------------------------------------------------------------------- /dashboard/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | AWS Fleet Management sample system 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /dashboard/public/jf-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/jf-top.png -------------------------------------------------------------------------------- /dashboard/public/logo-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/logo-big.png -------------------------------------------------------------------------------- /dashboard/public/rr-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/rr-icon.png -------------------------------------------------------------------------------- /dashboard/public/rr-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/aws-track-and-trace/4cf0cd0e926fed436636d833671ca4f65c6c437b/dashboard/public/rr-top.png -------------------------------------------------------------------------------- /dashboard/src/assets/.gitignore: -------------------------------------------------------------------------------- 1 | config.json 2 | !config.sample.json 3 | config.*.json 4 | colors.scss -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/main/app.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : app.js 3 | * Author : pixelcave 4 | * Description: Main entry point 5 | * 6 | */ 7 | 8 | // Import global dependencies 9 | import './bootstrap.js'; 10 | 11 | // Import required modules 12 | import Tools from './modules/tools'; 13 | import Helpers from './modules/helpers'; 14 | import Template from './modules/template'; 15 | 16 | // App extends Template 17 | export default class App extends Template { 18 | /* 19 | * Auto called when creating a new instance 20 | * 21 | */ 22 | constructor() { 23 | super(); 24 | } 25 | 26 | /* 27 | * Here you can override or extend any function you want from Template class 28 | * if you would like to change/extend/remove the default functionality. 29 | * 30 | * This way it will be easier for you to update the module files if a new update 31 | * is released since all your changes will be in here overriding the original ones. 32 | * 33 | * Let's have a look at the _uiInit() function, the one that runs the first time 34 | * we create an instance of Template class or App class which extends it. This function 35 | * inits all vital functionality but you can change it to fit your own needs. 36 | * 37 | */ 38 | 39 | /* 40 | * EXAMPLE #1 - Removing default functionality by making it empty 41 | * 42 | */ 43 | 44 | // _uiInit() {} 45 | 46 | 47 | /* 48 | * EXAMPLE #2 - Extending default functionality with additional code 49 | * 50 | */ 51 | 52 | // _uiInit() { 53 | // // Call original function 54 | // super._uiInit(); 55 | // 56 | // // Your extra JS code afterwards 57 | // } 58 | 59 | /* 60 | * EXAMPLE #3 - Replacing default functionality by writing your own code 61 | * 62 | */ 63 | 64 | // _uiInit() { 65 | // // Your own JS code without ever calling the original function's code 66 | // } 67 | } 68 | 69 | // Once everything is loaded 70 | jQuery(() => { 71 | // Create a new instance of App 72 | window.One = new App(); 73 | }); 74 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/main/bootstrap.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : bootstrap.js 3 | * Author : pixelcave 4 | * Description: Import global dependencies 5 | * 6 | */ 7 | 8 | /* 9 | ******************************************************************************************** 10 | * 11 | * If you would like to use webpack to handle all required core JS files, you can uncomment 12 | * the following imports and window assignments to have them included in the compiled 13 | * oneui.app.min.js as well. 14 | * 15 | * After that change, you won't have to include oneui.core.min.js in your pages any more 16 | * 17 | ********************************************************************************************* 18 | */ 19 | 20 | // Import all vital core JS files.. 21 | //import jQuery from 'jquery'; 22 | //import SimpleBar from 'simplebar'; 23 | //import Cookies from 'js-cookie'; 24 | //import 'bootstrap'; 25 | //import 'popper.js'; 26 | //import 'jquery.appear'; 27 | //import 'jquery-scroll-lock'; 28 | 29 | // ..and assign to window the ones that need it 30 | //window.jQuery = jQuery; 31 | //window.SimpleBar = SimpleBar; 32 | //window.Cookies = Cookies; 33 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/main/modules/tools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : tools.js 3 | * Author : pixelcave 4 | * Description: Various small tools 5 | * 6 | */ 7 | 8 | // Import global dependencies 9 | import './../bootstrap.js'; 10 | 11 | // Tools 12 | export default class Tools { 13 | /* 14 | * Updates the color theme 15 | * 16 | */ 17 | static updateTheme(themeEl, themeName) { 18 | if (themeName === 'default') { 19 | if (themeEl.length) { 20 | themeEl.remove(); 21 | } 22 | } else { 23 | if (themeEl.length) { 24 | themeEl.attr('href', themeName); 25 | } else { 26 | jQuery('#css-main') 27 | .after(''); 28 | } 29 | } 30 | } 31 | 32 | /* 33 | * Returns current browser's window width 34 | * 35 | */ 36 | static getWidth() { 37 | return window.innerWidth 38 | || document.documentElement.clientWidth 39 | || document.body.clientWidth; 40 | } 41 | } -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/be_comp_rating.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : be_comp_rating.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Rating Page 5 | */ 6 | 7 | // jQuery Raty, for more examples you can check out https://github.com/wbotelhos/raty 8 | class pageCompRating { 9 | /* 10 | * Init demo rating functionality 11 | * 12 | */ 13 | static initRating() { 14 | // Set Default options 15 | jQuery.fn.raty.defaults.starType = 'i'; 16 | jQuery.fn.raty.defaults.hints = ['Just Bad!', 'Almost There!', 'It’s ok!', 'That’s nice!', 'Incredible!']; 17 | 18 | // Init Raty on .js-rating class 19 | jQuery('.js-rating').each((index, element) => { 20 | let el = jQuery(element); 21 | 22 | el.raty({ 23 | score: el.data('score') || 0, 24 | number: el.data('number') || 5, 25 | cancel: el.data('cancel') || false, 26 | target: el.data('target') || false, 27 | targetScore: el.data('target-score') || false, 28 | precision: el.data('precision') || false, 29 | cancelOff: el.data('cancel-off') || 'fa fa-fw fa-times-circle text-danger', 30 | cancelOn: el.data('cancel-on') || 'fa fa-fw fa-times-circle', 31 | starHalf: el.data('star-half') || 'fa fa-fw fa-star-half text-warning', 32 | starOff: el.data('star-off') || 'fa fa-fw fa-star text-muted', 33 | starOn: el.data('star-on') || 'fa fa-fw fa-star text-warning', 34 | click: function(score, evt) { 35 | // Here you could add your logic on rating click 36 | // console.log('ID: ' + this.id + "\nscore: " + score + "\nevent: " + evt); 37 | } 38 | }); 39 | }); 40 | } 41 | 42 | /* 43 | * Init functionality 44 | * 45 | */ 46 | static init() { 47 | this.initRating(); 48 | } 49 | } 50 | 51 | // Initialize when page loads 52 | jQuery(() => { pageCompRating.init(); }); 53 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/be_ui_animations.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : be_ui_animations.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Animations Page 5 | */ 6 | 7 | class pageAnimations { 8 | /* 9 | * Animation toggle functionality 10 | * 11 | */ 12 | static animationsToggle() { 13 | let animationClass, animationButton, currentSection; 14 | 15 | // On button click 16 | jQuery('.js-animation-section button').on('click', (e) => { 17 | animationButton = jQuery(e.currentTarget); 18 | animationClass = animationButton.data('animation-class'); 19 | currentSection = animationButton.parents('.js-animation-section'); 20 | 21 | // Update class preview 22 | jQuery('.js-animation-preview', currentSection).html(animationClass); 23 | 24 | // Update animation object classes 25 | jQuery('.js-animation-object', currentSection) 26 | .removeClass() 27 | .addClass('js-animation-object animated ' + animationClass); 28 | }); 29 | } 30 | 31 | /* 32 | * Init functionality 33 | * 34 | */ 35 | static init() { 36 | this.animationsToggle(); 37 | } 38 | } 39 | 40 | // Initialize when page loads 41 | jQuery(() => { pageAnimations.init(); }); 42 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/be_ui_icons.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : be_ui_icons.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Icons Page 5 | */ 6 | 7 | class pageIcons { 8 | /* 9 | * Icon Search functionality 10 | * 11 | */ 12 | static iconSearch() { 13 | let searchItems = jQuery('.js-icon-list > div'); 14 | let searchValue = '', el; 15 | 16 | // Disable form submission 17 | jQuery('.js-form-icon-search').on('submit', () => false); 18 | 19 | // When user types 20 | jQuery('.js-icon-search').on('keyup', (e) => { 21 | searchValue = jQuery(e.currentTarget).val().toLowerCase(); 22 | 23 | if (searchValue.length > 2) { // If ore than 2 characters, search the icons 24 | searchItems.hide(); 25 | 26 | jQuery('code', searchItems).each((index, element) => { 27 | el = jQuery(element); 28 | 29 | if (el.text().match(searchValue)) { 30 | el.parent('div').fadeIn(250); 31 | } 32 | }); 33 | } else if (searchValue.length === 0) { // If text was deleted, show all icons 34 | searchItems.show(); 35 | } 36 | }); 37 | } 38 | 39 | /* 40 | * Init functionality 41 | * 42 | */ 43 | static init() { 44 | this.iconSearch(); 45 | } 46 | } 47 | 48 | // Initialize when page loads 49 | jQuery(() => { pageIcons.init(); }); 50 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/be_ui_progress.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : be_ui_progress.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Progress Page 5 | */ 6 | 7 | class pageProgress { 8 | /* 9 | * Bars randomize functionality 10 | * 11 | */ 12 | static barsRandomize() { 13 | jQuery('.js-bar-randomize').on('click', (e) => { 14 | jQuery(e.currentTarget) 15 | .parents('.block') 16 | .find('.progress-bar') 17 | .each((index, element) => { 18 | let el = jQuery(element); 19 | let random = Math.floor((Math.random() * 91) + 10); 20 | 21 | // Update progress width 22 | el.css('width', random + '%'); 23 | 24 | // Update progress label 25 | jQuery('span', el).html(random + '%'); 26 | }); 27 | }); 28 | } 29 | 30 | /* 31 | * Init functionality 32 | * 33 | */ 34 | static init() { 35 | this.barsRandomize(); 36 | } 37 | } 38 | 39 | // Initialize when page loads 40 | jQuery(() => { pageProgress.init(); }); 41 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/op_auth_lock.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : op_auth_lock.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Lock Page 5 | */ 6 | 7 | class pageAuthLock { 8 | /* 9 | * Init Lock Form Validation, for more examples you can check out https://github.com/jzaefferer/jquery-validation 10 | * 11 | */ 12 | static initValidation() { 13 | jQuery('.js-validation-lock').validate({ 14 | errorClass: 'invalid-feedback animated fadeIn', 15 | errorElement: 'div', 16 | errorPlacement: (error, el) => { 17 | jQuery(el).addClass('is-invalid'); 18 | jQuery(el).parents('.form-group').append(error); 19 | }, 20 | highlight: (el) => { 21 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid').addClass('is-invalid'); 22 | }, 23 | success: (el) => { 24 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid'); 25 | jQuery(el).remove(); 26 | }, 27 | rules: { 28 | 'lock-password': { 29 | required: true, 30 | minlength: 3 31 | } 32 | }, 33 | messages: { 34 | 'lock-password': { 35 | required: 'Please enter your valid password' 36 | } 37 | } 38 | }); 39 | } 40 | 41 | /* 42 | * Init functionality 43 | * 44 | */ 45 | static init() { 46 | this.initValidation(); 47 | } 48 | } 49 | 50 | // Initialize when page loads 51 | jQuery(() => { pageAuthLock.init(); }); -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/op_auth_reminder.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : op_auth_reminder.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Password Reminder Page 5 | */ 6 | 7 | class pageAuthReminder { 8 | /* 9 | * Init Password Reminder Form Validation, for more examples you can check out https://github.com/jzaefferer/jquery-validation 10 | * 11 | */ 12 | static initValidation() { 13 | jQuery('.js-validation-reminder').validate({ 14 | errorClass: 'invalid-feedback animated fadeIn', 15 | errorElement: 'div', 16 | errorPlacement: (error, el) => { 17 | jQuery(el).addClass('is-invalid'); 18 | jQuery(el).parents('.form-group').append(error); 19 | }, 20 | highlight: (el) => { 21 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid').addClass('is-invalid'); 22 | }, 23 | success: (el) => { 24 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid'); 25 | jQuery(el).remove(); 26 | }, 27 | rules: { 28 | 'reminder-credential': { 29 | required: true, 30 | minlength: 3 31 | } 32 | }, 33 | messages: { 34 | 'reminder-credential': { 35 | required: 'Please enter a valid credential' 36 | } 37 | } 38 | }); 39 | } 40 | 41 | /* 42 | * Init functionality 43 | * 44 | */ 45 | static init() { 46 | this.initValidation(); 47 | } 48 | } 49 | 50 | // Initialize when page loads 51 | jQuery(() => { pageAuthReminder.init(); }); 52 | -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/op_auth_signin.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : op_auth_signin.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Sign In Page 5 | */ 6 | 7 | class pageAuthSignIn { 8 | /* 9 | * Init Sign In Form Validation, for more examples you can check out https://github.com/jzaefferer/jquery-validation 10 | * 11 | */ 12 | static initValidation() { 13 | jQuery('.js-validation-signin').validate({ 14 | errorClass: 'invalid-feedback animated fadeIn', 15 | errorElement: 'div', 16 | errorPlacement: (error, el) => { 17 | jQuery(el).addClass('is-invalid'); 18 | jQuery(el).parents('.form-group').append(error); 19 | }, 20 | highlight: (el) => { 21 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid').addClass('is-invalid'); 22 | }, 23 | success: (el) => { 24 | jQuery(el).parents('.form-group').find('.is-invalid').removeClass('is-invalid'); 25 | jQuery(el).remove(); 26 | }, 27 | rules: { 28 | 'login-username': { 29 | required: true, 30 | minlength: 3 31 | }, 32 | 'login-password': { 33 | required: true, 34 | minlength: 5 35 | } 36 | }, 37 | messages: { 38 | 'login-username': { 39 | required: 'Please enter a username', 40 | minlength: 'Your username must consist of at least 3 characters' 41 | }, 42 | 'login-password': { 43 | required: 'Please provide a password', 44 | minlength: 'Your password must be at least 5 characters long' 45 | } 46 | } 47 | }); 48 | } 49 | 50 | /* 51 | * Init functionality 52 | * 53 | */ 54 | static init() { 55 | this.initValidation(); 56 | } 57 | } 58 | 59 | // Initialize when page loads 60 | jQuery(() => { pageAuthSignIn.init(); }); -------------------------------------------------------------------------------- /dashboard/src/assets/_es6/pages/op_coming_soon.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Document : op_coming_soon.js 3 | * Author : pixelcave 4 | * Description: Custom JS code used in Coming Soon Page 5 | */ 6 | 7 | class pageComingSoon { 8 | /* 9 | * Init Countdown.js, for more examples you can check out https://github.com/hilios/jQuery.countdown 10 | * 11 | */ 12 | static countdown() { 13 | jQuery('.js-countdown').countdown((new Date().getFullYear() + 2) + '/01/15', (e) => { 14 | jQuery(e.currentTarget).html(e.strftime('
' 15 | + '
%-D
DAYS
' 16 | + '
%H
HOURS
' 17 | + '
%M
MINUTES
' 18 | + '
%S
SECONDS
' 19 | + '
' 20 | )); 21 | }); 22 | } 23 | 24 | /* 25 | * Init functionality 26 | * 27 | */ 28 | static init() { 29 | this.countdown(); 30 | } 31 | } 32 | 33 | // Initialize when page loads 34 | jQuery(() => { pageComingSoon.init(); }); 35 | -------------------------------------------------------------------------------- /dashboard/src/assets/_scss/bootstrap/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: ($close-font-size + $alert-padding-x * 2); 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /dashboard/src/assets/_scss/bootstrap/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | font-size: $badge-font-size; 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | 17 | // Empty badges collapse automatically 18 | &:empty { 19 | display: none; 20 | } 21 | } 22 | 23 | // Quick fix for badges in buttons 24 | .btn .badge { 25 | position: relative; 26 | top: -1px; 27 | } 28 | 29 | // Pill badges 30 | // 31 | // Make them extra rounded with a modifier to replace v3's badges. 32 | 33 | .badge-pill { 34 | padding-right: $badge-pill-padding-x; 35 | padding-left: $badge-pill-padding-x; 36 | @include border-radius($badge-pill-border-radius); 37 | } 38 | 39 | // Colors 40 | // 41 | // Contextual variations (linked badges get darker on :hover). 42 | 43 | @each $color, $value in $theme-colors { 44 | .badge-#{$color} { 45 | @include badge-variant($value); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /dashboard/src/assets/_scss/bootstrap/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | list-style: none; 7 | background-color: $breadcrumb-bg; 8 | @include border-radius($breadcrumb-border-radius); 9 | } 10 | 11 | .breadcrumb-item { 12 | // The separator between breadcrumbs (by default, a forward-slash: "/") 13 | + .breadcrumb-item { 14 | padding-left: $breadcrumb-item-padding; 15 | 16 | &::before { 17 | display: inline-block; // Suppress underlining of the separator in modern browsers 18 | padding-right: $breadcrumb-item-padding; 19 | color: $breadcrumb-divider-color; 20 | content: $breadcrumb-divider; 21 | } 22 | } 23 | 24 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 25 | // without `