├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitattributes
├── .github
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── feature_request.md
│ ├── framewor7-core-issue.md
│ ├── framewor7-react-issue.md
│ ├── framewor7-svelte-issue.md
│ └── framewor7-vue-issue.md
├── PULL_REQUEST_TEMPLATE.md
├── lock.yml
├── stale.yml
└── workflows
│ ├── issue-close-require.yml
│ └── issue-labeled.yml
├── .gitignore
├── .nova
├── Configuration.json
└── Tasks
│ ├── Core.json
│ ├── React.json
│ ├── Svelte.json
│ └── Vue.json
├── .prettierignore
├── .prettierrc
├── .travis.yml
├── .vscode
└── settings.json
├── BACKERS.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── babel-react.config.js
├── babel-svelte.config.js
├── babel-vue.config.js
├── babel.config.js
├── build
├── core
│ └── package.json
├── react
│ └── package.json
├── svelte
│ └── package.json
└── vue
│ └── package.json
├── gulpfile.js
├── kitchen-sink
├── core
│ ├── css
│ │ └── app.css
│ ├── fonts
│ │ ├── Framework7Icons-Regular.ttf
│ │ ├── Framework7Icons-Regular.woff
│ │ ├── Framework7Icons-Regular.woff2
│ │ ├── MaterialIcons-Regular.ttf
│ │ ├── MaterialIcons-Regular.woff
│ │ └── MaterialIcons-Regular.woff2
│ ├── img
│ │ ├── beach.jpg
│ │ ├── f7-icon-square.png
│ │ ├── f7-icon.png
│ │ ├── lock.jpg
│ │ ├── monkey.jpg
│ │ ├── mountains.jpg
│ │ └── vi-icon.png
│ ├── index.html
│ ├── js
│ │ ├── app.js
│ │ ├── autocomplete-languages.json
│ │ ├── routes.js
│ │ └── store.js
│ └── pages
│ │ ├── 404.html
│ │ ├── about.html
│ │ ├── accordion.html
│ │ ├── action-sheet.html
│ │ ├── area-chart.html
│ │ ├── autocomplete.html
│ │ ├── badge.html
│ │ ├── breadcrumbs.html
│ │ ├── buttons.html
│ │ ├── calendar-page.html
│ │ ├── calendar.html
│ │ ├── cards-expandable.html
│ │ ├── cards.html
│ │ ├── checkbox.html
│ │ ├── chips.html
│ │ ├── color-picker.html
│ │ ├── color-themes.html
│ │ ├── contacts-list.html
│ │ ├── content-block.html
│ │ ├── data-table.html
│ │ ├── dialog.html
│ │ ├── fab-morph.html
│ │ ├── fab.html
│ │ ├── form-storage.html
│ │ ├── gauge.html
│ │ ├── grid.html
│ │ ├── home.html
│ │ ├── icons.html
│ │ ├── infinite-scroll.html
│ │ ├── inputs.html
│ │ ├── list-button.html
│ │ ├── list-index.html
│ │ ├── list.html
│ │ ├── login-screen-page.html
│ │ ├── login-screen.html
│ │ ├── master-detail-detail.html
│ │ ├── master-detail-master.html
│ │ ├── menu-list.html
│ │ ├── messages.html
│ │ ├── navbar-hide-scroll.html
│ │ ├── navbar.html
│ │ ├── notifications.html
│ │ ├── page-loader-component.html
│ │ ├── page-transitions-effect.html
│ │ ├── page-transitions.html
│ │ ├── panel.html
│ │ ├── photo-browser.html
│ │ ├── picker.html
│ │ ├── pie-chart.html
│ │ ├── popover.html
│ │ ├── popup.html
│ │ ├── preloader.html
│ │ ├── progressbar.html
│ │ ├── pull-to-refresh.html
│ │ ├── radio.html
│ │ ├── range.html
│ │ ├── searchbar-expandable.html
│ │ ├── searchbar.html
│ │ ├── segmented.html
│ │ ├── sheet-modal.html
│ │ ├── skeleton.html
│ │ ├── smart-select.html
│ │ ├── sortable.html
│ │ ├── stepper.html
│ │ ├── subnavbar-title.html
│ │ ├── subnavbar.html
│ │ ├── swipeout.html
│ │ ├── swiper-3d-coverflow.html
│ │ ├── swiper-3d-cube.html
│ │ ├── swiper-3d-flip.html
│ │ ├── swiper-fade.html
│ │ ├── swiper-gallery.html
│ │ ├── swiper-horizontal.html
│ │ ├── swiper-lazy.html
│ │ ├── swiper-loop.html
│ │ ├── swiper-multiple.html
│ │ ├── swiper-nested.html
│ │ ├── swiper-pagination-fraction.html
│ │ ├── swiper-pagination-progress.html
│ │ ├── swiper-parallax.html
│ │ ├── swiper-scrollbar.html
│ │ ├── swiper-space-between.html
│ │ ├── swiper-vertical.html
│ │ ├── swiper-zoom.html
│ │ ├── swiper.html
│ │ ├── tabbar-icons.html
│ │ ├── tabbar-scrollable.html
│ │ ├── tabbar.html
│ │ ├── tabs-animated.html
│ │ ├── tabs-routable.html
│ │ ├── tabs-static.html
│ │ ├── tabs-swipeable.html
│ │ ├── tabs.html
│ │ ├── text-editor.html
│ │ ├── timeline-horizontal-calendar.html
│ │ ├── timeline-horizontal.html
│ │ ├── timeline-vertical.html
│ │ ├── timeline.html
│ │ ├── toast.html
│ │ ├── toggle.html
│ │ ├── toolbar-hide-scroll.html
│ │ ├── toolbar-tabbar.html
│ │ ├── tooltip.html
│ │ ├── treeview.html
│ │ ├── virtual-list-vdom.html
│ │ └── virtual-list.html
├── react
│ ├── index.html
│ ├── public
│ │ ├── autocomplete-languages.json
│ │ └── img
│ │ │ ├── beach.jpg
│ │ │ ├── f7-icon-square.png
│ │ │ ├── f7-icon.png
│ │ │ ├── lock.jpg
│ │ │ ├── monkey.jpg
│ │ │ └── mountains.jpg
│ ├── src
│ │ ├── app.js
│ │ ├── app.jsx
│ │ ├── pages
│ │ │ ├── 404.jsx
│ │ │ ├── about.jsx
│ │ │ ├── accordion.jsx
│ │ │ ├── action-sheet.jsx
│ │ │ ├── area-chart.jsx
│ │ │ ├── autocomplete.jsx
│ │ │ ├── badge.jsx
│ │ │ ├── breadcrumbs.jsx
│ │ │ ├── buttons.jsx
│ │ │ ├── calendar-page.jsx
│ │ │ ├── calendar.jsx
│ │ │ ├── cards-expandable.jsx
│ │ │ ├── cards.jsx
│ │ │ ├── checkbox.jsx
│ │ │ ├── chips.jsx
│ │ │ ├── color-picker.jsx
│ │ │ ├── color-themes.jsx
│ │ │ ├── contacts-list.jsx
│ │ │ ├── content-block.jsx
│ │ │ ├── data-table.jsx
│ │ │ ├── dialog.jsx
│ │ │ ├── fab-morph.jsx
│ │ │ ├── fab.jsx
│ │ │ ├── form-storage.jsx
│ │ │ ├── gauge.jsx
│ │ │ ├── grid.jsx
│ │ │ ├── home.jsx
│ │ │ ├── icons.jsx
│ │ │ ├── infinite-scroll.jsx
│ │ │ ├── inputs.jsx
│ │ │ ├── list-button.jsx
│ │ │ ├── list-index.jsx
│ │ │ ├── list.jsx
│ │ │ ├── login-screen-page.jsx
│ │ │ ├── login-screen.jsx
│ │ │ ├── master-detail-detail.jsx
│ │ │ ├── master-detail-master.jsx
│ │ │ ├── menu-list.jsx
│ │ │ ├── messages.jsx
│ │ │ ├── navbar-hide-scroll.jsx
│ │ │ ├── navbar.jsx
│ │ │ ├── notifications.jsx
│ │ │ ├── page-transitions-effect.jsx
│ │ │ ├── page-transitions.jsx
│ │ │ ├── panel-left.jsx
│ │ │ ├── panel-right.jsx
│ │ │ ├── panel.jsx
│ │ │ ├── photo-browser.jsx
│ │ │ ├── picker.jsx
│ │ │ ├── pie-chart.jsx
│ │ │ ├── popover.jsx
│ │ │ ├── popup.jsx
│ │ │ ├── preloader.jsx
│ │ │ ├── progressbar.jsx
│ │ │ ├── pull-to-refresh.jsx
│ │ │ ├── radio.jsx
│ │ │ ├── range.jsx
│ │ │ ├── routable-actions.jsx
│ │ │ ├── routable-modals.jsx
│ │ │ ├── routable-popup.jsx
│ │ │ ├── searchbar-expandable.jsx
│ │ │ ├── searchbar.jsx
│ │ │ ├── segmented.jsx
│ │ │ ├── sheet-modal.jsx
│ │ │ ├── skeleton.jsx
│ │ │ ├── smart-select.jsx
│ │ │ ├── sortable.jsx
│ │ │ ├── stepper.jsx
│ │ │ ├── store.jsx
│ │ │ ├── subnavbar-title.jsx
│ │ │ ├── subnavbar.jsx
│ │ │ ├── swipeout.jsx
│ │ │ ├── swiper-3d-coverflow.jsx
│ │ │ ├── swiper-3d-cube.jsx
│ │ │ ├── swiper-3d-flip.jsx
│ │ │ ├── swiper-fade.jsx
│ │ │ ├── swiper-gallery.jsx
│ │ │ ├── swiper-horizontal.jsx
│ │ │ ├── swiper-lazy.jsx
│ │ │ ├── swiper-loop.jsx
│ │ │ ├── swiper-multiple.jsx
│ │ │ ├── swiper-nested.jsx
│ │ │ ├── swiper-pagination-fraction.jsx
│ │ │ ├── swiper-pagination-progress.jsx
│ │ │ ├── swiper-parallax.jsx
│ │ │ ├── swiper-scrollbar.jsx
│ │ │ ├── swiper-space-between.jsx
│ │ │ ├── swiper-vertical.jsx
│ │ │ ├── swiper-zoom.jsx
│ │ │ ├── swiper.jsx
│ │ │ ├── tabbar-icons.jsx
│ │ │ ├── tabbar-scrollable.jsx
│ │ │ ├── tabbar.jsx
│ │ │ ├── tabs-animated.jsx
│ │ │ ├── tabs-routable.jsx
│ │ │ ├── tabs-static.jsx
│ │ │ ├── tabs-swipeable.jsx
│ │ │ ├── tabs.jsx
│ │ │ ├── text-editor.jsx
│ │ │ ├── timeline-horizontal-calendar.jsx
│ │ │ ├── timeline-horizontal.jsx
│ │ │ ├── timeline-vertical.jsx
│ │ │ ├── timeline.jsx
│ │ │ ├── toast.jsx
│ │ │ ├── toggle.jsx
│ │ │ ├── toolbar-hide-scroll.jsx
│ │ │ ├── toolbar-tabbar.jsx
│ │ │ ├── tooltip.jsx
│ │ │ ├── treeview.jsx
│ │ │ └── virtual-list.jsx
│ │ ├── routes.js
│ │ └── store.js
│ └── vite.config.js
├── svelte
│ ├── index.html
│ ├── public
│ │ ├── autocomplete-languages.json
│ │ └── img
│ │ │ ├── beach.jpg
│ │ │ ├── f7-icon-square.png
│ │ │ ├── f7-icon.png
│ │ │ ├── lock.jpg
│ │ │ ├── monkey.jpg
│ │ │ └── mountains.jpg
│ ├── src
│ │ ├── app.js
│ │ ├── app.svelte
│ │ ├── pages
│ │ │ ├── 404.svelte
│ │ │ ├── about.svelte
│ │ │ ├── accordion.svelte
│ │ │ ├── action-sheet.svelte
│ │ │ ├── area-chart.svelte
│ │ │ ├── autocomplete.svelte
│ │ │ ├── badge.svelte
│ │ │ ├── breadcrumbs.svelte
│ │ │ ├── buttons.svelte
│ │ │ ├── calendar-page.svelte
│ │ │ ├── calendar.svelte
│ │ │ ├── cards-expandable.svelte
│ │ │ ├── cards.svelte
│ │ │ ├── checkbox.svelte
│ │ │ ├── chips.svelte
│ │ │ ├── color-picker.svelte
│ │ │ ├── color-themes.svelte
│ │ │ ├── contacts-list.svelte
│ │ │ ├── content-block.svelte
│ │ │ ├── data-table.svelte
│ │ │ ├── dialog.svelte
│ │ │ ├── fab-morph.svelte
│ │ │ ├── fab.svelte
│ │ │ ├── form-storage.svelte
│ │ │ ├── gauge.svelte
│ │ │ ├── grid.svelte
│ │ │ ├── home.svelte
│ │ │ ├── icons.svelte
│ │ │ ├── infinite-scroll.svelte
│ │ │ ├── inputs.svelte
│ │ │ ├── list-button.svelte
│ │ │ ├── list-index.svelte
│ │ │ ├── list.svelte
│ │ │ ├── login-screen-page.svelte
│ │ │ ├── login-screen.svelte
│ │ │ ├── master-detail-detail.svelte
│ │ │ ├── master-detail-master.svelte
│ │ │ ├── menu-list.svelte
│ │ │ ├── messages.svelte
│ │ │ ├── navbar-hide-scroll.svelte
│ │ │ ├── navbar.svelte
│ │ │ ├── notifications.svelte
│ │ │ ├── page-transitions-effect.svelte
│ │ │ ├── page-transitions.svelte
│ │ │ ├── panel-left.svelte
│ │ │ ├── panel-right.svelte
│ │ │ ├── panel.svelte
│ │ │ ├── photo-browser.svelte
│ │ │ ├── picker.svelte
│ │ │ ├── pie-chart.svelte
│ │ │ ├── popover.svelte
│ │ │ ├── popup.svelte
│ │ │ ├── preloader.svelte
│ │ │ ├── progressbar.svelte
│ │ │ ├── pull-to-refresh.svelte
│ │ │ ├── radio.svelte
│ │ │ ├── range.svelte
│ │ │ ├── routable-actions.svelte
│ │ │ ├── routable-modals.svelte
│ │ │ ├── routable-popup.svelte
│ │ │ ├── searchbar-expandable.svelte
│ │ │ ├── searchbar.svelte
│ │ │ ├── segmented.svelte
│ │ │ ├── sheet-modal.svelte
│ │ │ ├── skeleton.svelte
│ │ │ ├── smart-select.svelte
│ │ │ ├── sortable.svelte
│ │ │ ├── stepper.svelte
│ │ │ ├── store.svelte
│ │ │ ├── subnavbar-title.svelte
│ │ │ ├── subnavbar.svelte
│ │ │ ├── swipeout.svelte
│ │ │ ├── swiper-3d-coverflow.svelte
│ │ │ ├── swiper-3d-cube.svelte
│ │ │ ├── swiper-3d-flip.svelte
│ │ │ ├── swiper-fade.svelte
│ │ │ ├── swiper-gallery.svelte
│ │ │ ├── swiper-horizontal.svelte
│ │ │ ├── swiper-lazy.svelte
│ │ │ ├── swiper-loop.svelte
│ │ │ ├── swiper-multiple.svelte
│ │ │ ├── swiper-nested.svelte
│ │ │ ├── swiper-pagination-fraction.svelte
│ │ │ ├── swiper-pagination-progress.svelte
│ │ │ ├── swiper-parallax.svelte
│ │ │ ├── swiper-scrollbar.svelte
│ │ │ ├── swiper-space-between.svelte
│ │ │ ├── swiper-vertical.svelte
│ │ │ ├── swiper-zoom.svelte
│ │ │ ├── swiper.svelte
│ │ │ ├── tabbar-icons.svelte
│ │ │ ├── tabbar-scrollable.svelte
│ │ │ ├── tabbar.svelte
│ │ │ ├── tabs-animated.svelte
│ │ │ ├── tabs-routable.svelte
│ │ │ ├── tabs-static.svelte
│ │ │ ├── tabs-swipeable.svelte
│ │ │ ├── tabs.svelte
│ │ │ ├── text-editor.svelte
│ │ │ ├── timeline-horizontal-calendar.svelte
│ │ │ ├── timeline-horizontal.svelte
│ │ │ ├── timeline-vertical.svelte
│ │ │ ├── timeline.svelte
│ │ │ ├── toast.svelte
│ │ │ ├── toggle.svelte
│ │ │ ├── toolbar-hide-scroll.svelte
│ │ │ ├── toolbar-tabbar.svelte
│ │ │ ├── tooltip.svelte
│ │ │ ├── treeview.svelte
│ │ │ └── virtual-list.svelte
│ │ ├── routes.js
│ │ └── store.js
│ └── vite.config.js
└── vue
│ ├── index.html
│ ├── public
│ ├── autocomplete-languages.json
│ └── img
│ │ ├── beach.jpg
│ │ ├── f7-icon-square.png
│ │ ├── f7-icon.png
│ │ ├── lock.jpg
│ │ ├── monkey.jpg
│ │ └── mountains.jpg
│ ├── src
│ ├── app.js
│ ├── app.vue
│ ├── pages
│ │ ├── 404.vue
│ │ ├── about.vue
│ │ ├── accordion.vue
│ │ ├── action-sheet.vue
│ │ ├── area-chart.vue
│ │ ├── autocomplete.vue
│ │ ├── badge.vue
│ │ ├── breadcrumbs.vue
│ │ ├── buttons.vue
│ │ ├── calendar-page.vue
│ │ ├── calendar.vue
│ │ ├── cards-expandable.vue
│ │ ├── cards.vue
│ │ ├── checkbox.vue
│ │ ├── chips.vue
│ │ ├── color-picker.vue
│ │ ├── color-themes.vue
│ │ ├── contacts-list.vue
│ │ ├── content-block.vue
│ │ ├── data-table.vue
│ │ ├── dialog.vue
│ │ ├── fab-morph.vue
│ │ ├── fab.vue
│ │ ├── form-storage.vue
│ │ ├── gauge.vue
│ │ ├── grid.vue
│ │ ├── home.vue
│ │ ├── icons.vue
│ │ ├── infinite-scroll.vue
│ │ ├── inputs.vue
│ │ ├── list-button.vue
│ │ ├── list-index.vue
│ │ ├── list.vue
│ │ ├── login-screen-page.vue
│ │ ├── login-screen.vue
│ │ ├── master-detail-detail.vue
│ │ ├── master-detail-master.vue
│ │ ├── menu-list.vue
│ │ ├── messages.vue
│ │ ├── navbar-hide-scroll.vue
│ │ ├── navbar.vue
│ │ ├── notifications.vue
│ │ ├── page-transitions-effect.vue
│ │ ├── page-transitions.vue
│ │ ├── panel-left.vue
│ │ ├── panel-right.vue
│ │ ├── panel.vue
│ │ ├── photo-browser.vue
│ │ ├── picker.vue
│ │ ├── pie-chart.vue
│ │ ├── popover.vue
│ │ ├── popup.vue
│ │ ├── preloader.vue
│ │ ├── progressbar.vue
│ │ ├── pull-to-refresh.vue
│ │ ├── radio.vue
│ │ ├── range.vue
│ │ ├── routable-actions.vue
│ │ ├── routable-modals.vue
│ │ ├── routable-popup.vue
│ │ ├── searchbar-expandable.vue
│ │ ├── searchbar.vue
│ │ ├── segmented.vue
│ │ ├── sheet-modal.vue
│ │ ├── skeleton.vue
│ │ ├── smart-select.vue
│ │ ├── sortable.vue
│ │ ├── stepper.vue
│ │ ├── store.vue
│ │ ├── subnavbar-title.vue
│ │ ├── subnavbar.vue
│ │ ├── swipeout.vue
│ │ ├── swiper-3d-coverflow.vue
│ │ ├── swiper-3d-cube.vue
│ │ ├── swiper-3d-flip.vue
│ │ ├── swiper-fade.vue
│ │ ├── swiper-gallery.vue
│ │ ├── swiper-horizontal.vue
│ │ ├── swiper-lazy.vue
│ │ ├── swiper-loop.vue
│ │ ├── swiper-multiple.vue
│ │ ├── swiper-nested.vue
│ │ ├── swiper-pagination-fraction.vue
│ │ ├── swiper-pagination-progress.vue
│ │ ├── swiper-parallax.vue
│ │ ├── swiper-scrollbar.vue
│ │ ├── swiper-space-between.vue
│ │ ├── swiper-vertical.vue
│ │ ├── swiper-zoom.vue
│ │ ├── swiper.vue
│ │ ├── tabbar-icons.vue
│ │ ├── tabbar-scrollable.vue
│ │ ├── tabbar.vue
│ │ ├── tabs-animated.vue
│ │ ├── tabs-routable.vue
│ │ ├── tabs-static.vue
│ │ ├── tabs-swipeable.vue
│ │ ├── tabs.vue
│ │ ├── text-editor.vue
│ │ ├── timeline-horizontal-calendar.vue
│ │ ├── timeline-horizontal.vue
│ │ ├── timeline-vertical.vue
│ │ ├── timeline.vue
│ │ ├── toast.vue
│ │ ├── toggle.vue
│ │ ├── toolbar-hide-scroll.vue
│ │ ├── toolbar-tabbar.vue
│ │ ├── tooltip.vue
│ │ ├── treeview.vue
│ │ └── virtual-list.vue
│ ├── routes.js
│ └── store.js
│ └── vite.config.js
├── package-lock.json
├── package.json
├── packages
├── core
│ ├── LICENSE
│ ├── README.md
│ └── package.json
├── react
│ ├── LICENSE
│ ├── README.md
│ └── package.json
├── svelte
│ ├── LICENSE
│ ├── README.md
│ └── package.json
└── vue
│ ├── LICENSE
│ ├── README.md
│ ├── framework7-vue-web-types.json
│ └── package.json
├── scripts
├── banners
│ ├── core.js
│ ├── react.js
│ ├── svelte.js
│ └── vue.js
├── build-clean.js
├── build-config.js
├── build-core-components.js
├── build-core-js.js
├── build-core-styles.js
├── build-core-typings.js
├── build-ks-core.js
├── build-material-color-utils.js
├── build-react-typings.js
├── build-react.js
├── build-sponsors.js
├── build-svelte-typings.js
├── build-svelte.js
├── build-vue-typings.js
├── build-vue.js
├── core-components-list.js
├── find-common-css-vars.js
├── get-core-config.js
├── get-output.js
├── gulpfile.js
├── icon-font
│ ├── blank.svg
│ ├── generate.py
│ └── generate_font.py
├── release.js
├── transform-vue-component.js
├── ts-extend-props.js
└── utils
│ ├── autoprefixer.js
│ ├── clean-css.js
│ ├── fs-extra.js
│ └── less.js
└── src
├── core
├── components
│ ├── accordion
│ │ ├── accordion-ios.less
│ │ ├── accordion-md.less
│ │ ├── accordion-vars.less
│ │ ├── accordion.d.ts
│ │ ├── accordion.js
│ │ └── accordion.less
│ ├── actions
│ │ ├── actions-class.js
│ │ ├── actions-ios.less
│ │ ├── actions-md.less
│ │ ├── actions-vars.less
│ │ ├── actions.d.ts
│ │ ├── actions.js
│ │ └── actions.less
│ ├── app
│ │ ├── app-class.d.ts
│ │ ├── app-class.js
│ │ ├── app-ios.less
│ │ ├── app-md.less
│ │ ├── app-vars.less
│ │ ├── app.less
│ │ └── load-module.js
│ ├── area-chart
│ │ ├── area-chart-class.js
│ │ ├── area-chart-ios.less
│ │ ├── area-chart-md.less
│ │ ├── area-chart-vars.less
│ │ ├── area-chart.d.ts
│ │ ├── area-chart.js
│ │ └── area-chart.less
│ ├── autocomplete
│ │ ├── autocomplete-class.js
│ │ ├── autocomplete-ios.less
│ │ ├── autocomplete-md.less
│ │ ├── autocomplete-vars.less
│ │ ├── autocomplete.d.ts
│ │ ├── autocomplete.js
│ │ └── autocomplete.less
│ ├── badge
│ │ ├── badge-ios.less
│ │ ├── badge-md.less
│ │ ├── badge-vars.less
│ │ ├── badge.d.ts
│ │ ├── badge.js
│ │ └── badge.less
│ ├── block
│ │ ├── block-ios.less
│ │ ├── block-md.less
│ │ ├── block-vars.less
│ │ ├── block.d.ts
│ │ ├── block.js
│ │ └── block.less
│ ├── breadcrumbs
│ │ ├── breadcrumbs-ios.less
│ │ ├── breadcrumbs-md.less
│ │ ├── breadcrumbs-vars.less
│ │ ├── breadcrumbs.d.ts
│ │ ├── breadcrumbs.js
│ │ └── breadcrumbs.less
│ ├── button
│ │ ├── button-ios.less
│ │ ├── button-md.less
│ │ ├── button-vars.less
│ │ ├── button.d.ts
│ │ ├── button.js
│ │ └── button.less
│ ├── calendar
│ │ ├── calendar-class.js
│ │ ├── calendar-ios.less
│ │ ├── calendar-md.less
│ │ ├── calendar-vars.less
│ │ ├── calendar.d.ts
│ │ ├── calendar.js
│ │ └── calendar.less
│ ├── card
│ │ ├── card-ios.less
│ │ ├── card-md.less
│ │ ├── card-vars.less
│ │ ├── card.d.ts
│ │ ├── card.js
│ │ └── card.less
│ ├── checkbox
│ │ ├── checkbox-ios.less
│ │ ├── checkbox-md.less
│ │ ├── checkbox-vars.less
│ │ ├── checkbox.d.ts
│ │ ├── checkbox.js
│ │ └── checkbox.less
│ ├── chip
│ │ ├── chip-ios.less
│ │ ├── chip-md.less
│ │ ├── chip-vars.less
│ │ ├── chip.d.ts
│ │ ├── chip.js
│ │ └── chip.less
│ ├── color-picker
│ │ ├── color-picker-class.js
│ │ ├── color-picker-ios.less
│ │ ├── color-picker-md.less
│ │ ├── color-picker-vars.less
│ │ ├── color-picker.d.ts
│ │ ├── color-picker.js
│ │ ├── color-picker.less
│ │ └── modules
│ │ │ ├── alpha-slider.js
│ │ │ ├── brightness-slider.js
│ │ │ ├── current-color.js
│ │ │ ├── hex.js
│ │ │ ├── hs-spectrum.js
│ │ │ ├── hsb-sliders.js
│ │ │ ├── hue-slider.js
│ │ │ ├── initial-current-colors.js
│ │ │ ├── palette.js
│ │ │ ├── rgb-bars.js
│ │ │ ├── rgb-sliders.js
│ │ │ ├── sb-spectrum.js
│ │ │ └── wheel.js
│ ├── contacts-list
│ │ ├── contacts-list-ios.less
│ │ ├── contacts-list-md.less
│ │ ├── contacts-list-vars.less
│ │ ├── contacts-list.d.ts
│ │ ├── contacts-list.js
│ │ └── contacts-list.less
│ ├── data-table
│ │ ├── data-table-class.js
│ │ ├── data-table-ios.less
│ │ ├── data-table-md.less
│ │ ├── data-table-vars.less
│ │ ├── data-table.d.ts
│ │ ├── data-table.js
│ │ └── data-table.less
│ ├── dialog
│ │ ├── dialog-class.js
│ │ ├── dialog-ios.less
│ │ ├── dialog-md.less
│ │ ├── dialog-vars.less
│ │ ├── dialog.d.ts
│ │ ├── dialog.js
│ │ └── dialog.less
│ ├── fab
│ │ ├── fab-ios.less
│ │ ├── fab-md.less
│ │ ├── fab-vars.less
│ │ ├── fab.d.ts
│ │ ├── fab.js
│ │ └── fab.less
│ ├── form
│ │ ├── form-ios.less
│ │ ├── form-md.less
│ │ ├── form.d.ts
│ │ ├── form.js
│ │ └── form.less
│ ├── gauge
│ │ ├── gauge-class.js
│ │ ├── gauge-ios.less
│ │ ├── gauge-md.less
│ │ ├── gauge.d.ts
│ │ ├── gauge.js
│ │ └── gauge.less
│ ├── grid
│ │ ├── grid-ios.less
│ │ ├── grid-md.less
│ │ ├── grid-vars.less
│ │ ├── grid.d.ts
│ │ ├── grid.js
│ │ └── grid.less
│ ├── icon
│ │ ├── icon-ios.less
│ │ ├── icon-md.less
│ │ ├── icon.d.ts
│ │ ├── icon.js
│ │ └── icon.less
│ ├── infinite-scroll
│ │ ├── infinite-scroll-ios.less
│ │ ├── infinite-scroll-md.less
│ │ ├── infinite-scroll.d.ts
│ │ ├── infinite-scroll.js
│ │ └── infinite-scroll.less
│ ├── input
│ │ ├── input-ios.less
│ │ ├── input-md.less
│ │ ├── input-vars.less
│ │ ├── input.d.ts
│ │ ├── input.js
│ │ └── input.less
│ ├── link
│ │ ├── link-ios.less
│ │ ├── link-md.less
│ │ ├── link-vars.less
│ │ ├── link.d.ts
│ │ ├── link.js
│ │ └── link.less
│ ├── list-index
│ │ ├── list-index-class.js
│ │ ├── list-index-ios.less
│ │ ├── list-index-md.less
│ │ ├── list-index-vars.less
│ │ ├── list-index.d.ts
│ │ ├── list-index.js
│ │ └── list-index.less
│ ├── list
│ │ ├── list-ios.less
│ │ ├── list-md.less
│ │ ├── list-vars.less
│ │ ├── list.d.ts
│ │ ├── list.js
│ │ └── list.less
│ ├── login-screen
│ │ ├── login-screen-class.js
│ │ ├── login-screen-ios.less
│ │ ├── login-screen-md.less
│ │ ├── login-screen-vars.less
│ │ ├── login-screen.d.ts
│ │ ├── login-screen.js
│ │ └── login-screen.less
│ ├── messagebar
│ │ ├── messagebar-class.js
│ │ ├── messagebar-ios.less
│ │ ├── messagebar-md.less
│ │ ├── messagebar-vars.less
│ │ ├── messagebar.d.ts
│ │ ├── messagebar.js
│ │ └── messagebar.less
│ ├── messages
│ │ ├── messages-class.js
│ │ ├── messages-ios.less
│ │ ├── messages-md.less
│ │ ├── messages-vars.less
│ │ ├── messages.d.ts
│ │ ├── messages.js
│ │ └── messages.less
│ ├── modal
│ │ ├── custom-modal-class.js
│ │ ├── modal-class.js
│ │ ├── modal.d.ts
│ │ ├── modal.js
│ │ └── modal.less
│ ├── navbar
│ │ ├── navbar-ios.less
│ │ ├── navbar-md.less
│ │ ├── navbar-vars.less
│ │ ├── navbar.d.ts
│ │ ├── navbar.js
│ │ └── navbar.less
│ ├── notification
│ │ ├── notification-class.js
│ │ ├── notification-ios.less
│ │ ├── notification-md.less
│ │ ├── notification-vars.less
│ │ ├── notification.d.ts
│ │ ├── notification.js
│ │ └── notification.less
│ ├── page
│ │ ├── page-ios.less
│ │ ├── page-md.less
│ │ ├── page-transitions
│ │ │ ├── circle.less
│ │ │ ├── cover-v.less
│ │ │ ├── cover.less
│ │ │ ├── dive.less
│ │ │ ├── fade.less
│ │ │ ├── flip.less
│ │ │ ├── parallax.less
│ │ │ └── push.less
│ │ ├── page-vars.less
│ │ ├── page.d.ts
│ │ ├── page.js
│ │ └── page.less
│ ├── panel
│ │ ├── panel-class.js
│ │ ├── panel-ios.less
│ │ ├── panel-md.less
│ │ ├── panel-vars.less
│ │ ├── panel.d.ts
│ │ ├── panel.js
│ │ ├── panel.less
│ │ ├── resizable-panel.js
│ │ └── swipe-panel.js
│ ├── photo-browser
│ │ ├── photo-browser-class.js
│ │ ├── photo-browser-ios.less
│ │ ├── photo-browser-md.less
│ │ ├── photo-browser-vars.less
│ │ ├── photo-browser.d.ts
│ │ ├── photo-browser.js
│ │ └── photo-browser.less
│ ├── picker
│ │ ├── picker-class.js
│ │ ├── picker-column.js
│ │ ├── picker-ios.less
│ │ ├── picker-md.less
│ │ ├── picker-vars.less
│ │ ├── picker.d.ts
│ │ ├── picker.js
│ │ └── picker.less
│ ├── pie-chart
│ │ ├── pie-chart-class.js
│ │ ├── pie-chart-ios.less
│ │ ├── pie-chart-md.less
│ │ ├── pie-chart.d.ts
│ │ ├── pie-chart.js
│ │ └── pie-chart.less
│ ├── popover
│ │ ├── popover-class.js
│ │ ├── popover-ios.less
│ │ ├── popover-md.less
│ │ ├── popover-vars.less
│ │ ├── popover.d.ts
│ │ ├── popover.js
│ │ └── popover.less
│ ├── popup
│ │ ├── popup-class.js
│ │ ├── popup-ios.less
│ │ ├── popup-md.less
│ │ ├── popup-vars.less
│ │ ├── popup.d.ts
│ │ ├── popup.js
│ │ └── popup.less
│ ├── preloader
│ │ ├── preloader-ios.less
│ │ ├── preloader-md.less
│ │ ├── preloader-vars.less
│ │ ├── preloader.d.ts
│ │ ├── preloader.js
│ │ └── preloader.less
│ ├── progressbar
│ │ ├── progressbar-ios.less
│ │ ├── progressbar-md.less
│ │ ├── progressbar-vars.less
│ │ ├── progressbar.d.ts
│ │ ├── progressbar.js
│ │ └── progressbar.less
│ ├── pull-to-refresh
│ │ ├── pull-to-refresh-class.js
│ │ ├── pull-to-refresh-ios.less
│ │ ├── pull-to-refresh-md.less
│ │ ├── pull-to-refresh-vars.less
│ │ ├── pull-to-refresh.d.ts
│ │ ├── pull-to-refresh.js
│ │ └── pull-to-refresh.less
│ ├── radio
│ │ ├── radio-ios.less
│ │ ├── radio-md.less
│ │ ├── radio-vars.less
│ │ ├── radio.d.ts
│ │ ├── radio.js
│ │ └── radio.less
│ ├── range
│ │ ├── range-class.js
│ │ ├── range-ios.less
│ │ ├── range-md.less
│ │ ├── range-vars.less
│ │ ├── range.d.ts
│ │ ├── range.js
│ │ └── range.less
│ ├── searchbar
│ │ ├── remove-diacritics.js
│ │ ├── searchbar-class.js
│ │ ├── searchbar-ios.less
│ │ ├── searchbar-md.less
│ │ ├── searchbar-vars.less
│ │ ├── searchbar.d.ts
│ │ ├── searchbar.js
│ │ └── searchbar.less
│ ├── sheet
│ │ ├── sheet-class.js
│ │ ├── sheet-ios.less
│ │ ├── sheet-md.less
│ │ ├── sheet-vars.less
│ │ ├── sheet.d.ts
│ │ ├── sheet.js
│ │ └── sheet.less
│ ├── skeleton
│ │ ├── skeleton-ios.less
│ │ ├── skeleton-md.less
│ │ ├── skeleton-vars.less
│ │ ├── skeleton.d.ts
│ │ ├── skeleton.js
│ │ └── skeleton.less
│ ├── smart-select
│ │ ├── smart-select-class.js
│ │ ├── smart-select-ios.less
│ │ ├── smart-select-md.less
│ │ ├── smart-select-vars.less
│ │ ├── smart-select.d.ts
│ │ ├── smart-select.js
│ │ └── smart-select.less
│ ├── sortable
│ │ ├── sortable-ios.less
│ │ ├── sortable-md.less
│ │ ├── sortable-vars.less
│ │ ├── sortable.d.ts
│ │ ├── sortable.js
│ │ └── sortable.less
│ ├── statusbar
│ │ ├── statusbar-ios.less
│ │ ├── statusbar-md.less
│ │ ├── statusbar.d.ts
│ │ ├── statusbar.js
│ │ └── statusbar.less
│ ├── stepper
│ │ ├── stepper-class.js
│ │ ├── stepper-ios.less
│ │ ├── stepper-md.less
│ │ ├── stepper-vars.less
│ │ ├── stepper.d.ts
│ │ ├── stepper.js
│ │ └── stepper.less
│ ├── subnavbar
│ │ ├── subnavbar-ios.less
│ │ ├── subnavbar-md.less
│ │ ├── subnavbar-vars.less
│ │ ├── subnavbar.d.ts
│ │ ├── subnavbar.js
│ │ └── subnavbar.less
│ ├── swipeout
│ │ ├── swipeout-ios.less
│ │ ├── swipeout-md.less
│ │ ├── swipeout-vars.less
│ │ ├── swipeout.d.ts
│ │ ├── swipeout.js
│ │ └── swipeout.less
│ ├── swiper
│ │ ├── swiper-ios.less
│ │ ├── swiper-md.less
│ │ ├── swiper.d.ts
│ │ ├── swiper.js
│ │ └── swiper.less
│ ├── tabs
│ │ ├── tabs-ios.less
│ │ ├── tabs-md.less
│ │ ├── tabs.d.ts
│ │ ├── tabs.js
│ │ └── tabs.less
│ ├── text-editor
│ │ ├── text-editor-class.js
│ │ ├── text-editor-ios.less
│ │ ├── text-editor-md.less
│ │ ├── text-editor-vars.less
│ │ ├── text-editor.d.ts
│ │ ├── text-editor.js
│ │ └── text-editor.less
│ ├── timeline
│ │ ├── timeline-ios.less
│ │ ├── timeline-md.less
│ │ ├── timeline-vars.less
│ │ ├── timeline.d.ts
│ │ ├── timeline.js
│ │ └── timeline.less
│ ├── toast
│ │ ├── toast-class.js
│ │ ├── toast-ios.less
│ │ ├── toast-md.less
│ │ ├── toast-vars.less
│ │ ├── toast.d.ts
│ │ ├── toast.js
│ │ └── toast.less
│ ├── toggle
│ │ ├── toggle-class.js
│ │ ├── toggle-ios.less
│ │ ├── toggle-md.less
│ │ ├── toggle-vars.less
│ │ ├── toggle.d.ts
│ │ ├── toggle.js
│ │ └── toggle.less
│ ├── toolbar
│ │ ├── toolbar-ios.less
│ │ ├── toolbar-md.less
│ │ ├── toolbar-vars.less
│ │ ├── toolbar.d.ts
│ │ ├── toolbar.js
│ │ └── toolbar.less
│ ├── tooltip
│ │ ├── tooltip-class.js
│ │ ├── tooltip-ios.less
│ │ ├── tooltip-md.less
│ │ ├── tooltip-vars.less
│ │ ├── tooltip.d.ts
│ │ ├── tooltip.js
│ │ └── tooltip.less
│ ├── touch-ripple
│ │ ├── touch-ripple-class.js
│ │ ├── touch-ripple-ios.less
│ │ ├── touch-ripple-md.less
│ │ ├── touch-ripple-vars.less
│ │ ├── touch-ripple.d.ts
│ │ ├── touch-ripple.js
│ │ └── touch-ripple.less
│ ├── treeview
│ │ ├── treeview-ios.less
│ │ ├── treeview-md.less
│ │ ├── treeview-vars.less
│ │ ├── treeview.d.ts
│ │ ├── treeview.js
│ │ └── treeview.less
│ ├── typography
│ │ ├── typography-ios.less
│ │ ├── typography-md.less
│ │ ├── typography-vars.less
│ │ ├── typography.d.ts
│ │ ├── typography.js
│ │ └── typography.less
│ ├── view
│ │ ├── resizable-view.js
│ │ ├── view-class.js
│ │ ├── view-ios.less
│ │ ├── view-md.less
│ │ ├── view.d.ts
│ │ ├── view.js
│ │ └── view.less
│ └── virtual-list
│ │ ├── virtual-list-class.js
│ │ ├── virtual-list-ios.less
│ │ ├── virtual-list-md.less
│ │ ├── virtual-list.d.ts
│ │ ├── virtual-list.js
│ │ └── virtual-list.less
├── framework7-lite.js
├── framework7-types.d.ts
├── framework7.d.ts
├── framework7.js
├── framework7.less
├── icons
│ ├── font
│ │ ├── framework7-core-icons.ttf
│ │ ├── framework7-core-icons.woff
│ │ └── framework7-core-icons.woff2
│ └── svg
│ │ ├── arrow_bottom_md.svg
│ │ ├── arrow_left_md.svg
│ │ ├── arrow_right_md.svg
│ │ ├── checkbox_aurora.svg
│ │ ├── checkbox_ios.svg
│ │ ├── checkbox_md.svg
│ │ ├── chevron_down.svg
│ │ ├── chevron_down_aurora.svg
│ │ ├── chevron_left.svg
│ │ ├── chevron_left_aurora.svg
│ │ ├── chevron_left_ios.svg
│ │ ├── chevron_left_md.svg
│ │ ├── chevron_right.svg
│ │ ├── chevron_right_aurora.svg
│ │ ├── chevron_right_ios.svg
│ │ ├── chevron_right_md.svg
│ │ ├── chevron_up.svg
│ │ ├── chevron_up_aurora.svg
│ │ ├── delete_md.svg
│ │ ├── delete_round_ios.svg
│ │ ├── delete_round_md.svg
│ │ ├── notification_close_ios.svg
│ │ ├── ptr_arrow_ios.svg
│ │ ├── radio_ios.svg
│ │ ├── search_aurora.svg
│ │ ├── search_ios.svg
│ │ ├── search_md.svg
│ │ ├── sort_ios.svg
│ │ └── sort_md.svg
├── less
│ ├── mixins.less
│ ├── plugin.js
│ └── vars.less
├── modules
│ ├── clicks
│ │ ├── clicks.d.ts
│ │ └── clicks.js
│ ├── component
│ │ ├── $h.js
│ │ ├── $jsx.js
│ │ ├── component-class.js
│ │ ├── component.d.ts
│ │ ├── component.js
│ │ ├── custom-components.js
│ │ ├── eventslisteners.js
│ │ ├── parse-component.js
│ │ ├── patch.js
│ │ ├── snabbdom
│ │ │ ├── h.d.ts
│ │ │ ├── h.js
│ │ │ ├── h.js.map
│ │ │ ├── helpers
│ │ │ │ ├── attachto.d.ts
│ │ │ │ ├── attachto.js
│ │ │ │ └── attachto.js.map
│ │ │ ├── hooks.d.ts
│ │ │ ├── hooks.js
│ │ │ ├── hooks.js.map
│ │ │ ├── htmldomapi.d.ts
│ │ │ ├── htmldomapi.js
│ │ │ ├── htmldomapi.js.map
│ │ │ ├── is.d.ts
│ │ │ ├── is.js
│ │ │ ├── is.js.map
│ │ │ ├── modules
│ │ │ │ ├── attributes.d.ts
│ │ │ │ ├── attributes.js
│ │ │ │ ├── attributes.js.map
│ │ │ │ ├── class.d.ts
│ │ │ │ ├── class.js
│ │ │ │ ├── class.js.map
│ │ │ │ ├── dataset.d.ts
│ │ │ │ ├── dataset.js
│ │ │ │ ├── dataset.js.map
│ │ │ │ ├── eventlisteners.d.ts
│ │ │ │ ├── eventlisteners.js
│ │ │ │ ├── eventlisteners.js.map
│ │ │ │ ├── hero.d.ts
│ │ │ │ ├── hero.js
│ │ │ │ ├── hero.js.map
│ │ │ │ ├── module.d.ts
│ │ │ │ ├── module.js
│ │ │ │ ├── module.js.map
│ │ │ │ ├── props.d.ts
│ │ │ │ ├── props.js
│ │ │ │ ├── props.js.map
│ │ │ │ ├── style.d.ts
│ │ │ │ ├── style.js
│ │ │ │ └── style.js.map
│ │ │ ├── snabbdom.bundle.d.ts
│ │ │ ├── snabbdom.bundle.js
│ │ │ ├── snabbdom.bundle.js.map
│ │ │ ├── snabbdom.d.ts
│ │ │ ├── snabbdom.js
│ │ │ ├── snabbdom.js.map
│ │ │ ├── thunk.d.ts
│ │ │ ├── thunk.js
│ │ │ ├── thunk.js.map
│ │ │ ├── tovnode.d.ts
│ │ │ ├── tovnode.js
│ │ │ ├── tovnode.js.map
│ │ │ ├── vnode.d.ts
│ │ │ ├── vnode.js
│ │ │ └── vnode.js.map
│ │ └── vdom.js
│ ├── demo-module.js
│ ├── device
│ │ ├── device.d.ts
│ │ └── device.js
│ ├── history
│ │ └── history.js
│ ├── resize
│ │ ├── resize.d.ts
│ │ └── resize.js
│ ├── router
│ │ ├── app-router-check.js
│ │ ├── async-component.js
│ │ ├── back.js
│ │ ├── clear-previous-history.js
│ │ ├── component-loader.js
│ │ ├── modal.js
│ │ ├── navigate.js
│ │ ├── process-route-queue.js
│ │ ├── redirect.js
│ │ ├── router-class.js
│ │ ├── router.d.ts
│ │ ├── router.js
│ │ ├── swipe-back.js
│ │ └── tab.js
│ ├── service-worker
│ │ ├── service-worker.d.ts
│ │ └── service-worker.js
│ ├── store
│ │ ├── create-store.js
│ │ ├── store.d.ts
│ │ └── store.js
│ ├── support
│ │ ├── support.d.ts
│ │ └── support.js
│ ├── touch
│ │ ├── touch.d.ts
│ │ └── touch.js
│ └── utils
│ │ ├── utils.d.ts
│ │ └── utils.js
└── shared
│ ├── $jsx.js
│ ├── class.js
│ ├── constructor-methods.js
│ ├── dom7.js
│ ├── events-class.js
│ ├── get-device.d.ts
│ ├── get-device.js
│ ├── get-support.d.ts
│ ├── get-support.js
│ ├── history.js
│ ├── material-color-utils.js
│ ├── material-colors.js
│ ├── modal-methods.js
│ ├── utils.d.ts
│ └── utils.js
├── react
├── components
│ ├── accordion-content.jsx
│ ├── accordion-item.jsx
│ ├── accordion-toggle.jsx
│ ├── accordion.jsx
│ ├── actions-button.jsx
│ ├── actions-group.jsx
│ ├── actions-label.jsx
│ ├── actions.jsx
│ ├── app.jsx
│ ├── area-chart.jsx
│ ├── badge.jsx
│ ├── block-footer.jsx
│ ├── block-header.jsx
│ ├── block-title.jsx
│ ├── block.jsx
│ ├── breadcrumbs-collapsed.jsx
│ ├── breadcrumbs-item.jsx
│ ├── breadcrumbs-separator.jsx
│ ├── breadcrumbs.jsx
│ ├── button.jsx
│ ├── card-content.jsx
│ ├── card-footer.jsx
│ ├── card-header.jsx
│ ├── card.jsx
│ ├── checkbox.jsx
│ ├── chip.jsx
│ ├── fab-backdrop.jsx
│ ├── fab-button.jsx
│ ├── fab-buttons.jsx
│ ├── fab.jsx
│ ├── gauge.jsx
│ ├── icon.jsx
│ ├── input.jsx
│ ├── link.jsx
│ ├── list-button.jsx
│ ├── list-group.jsx
│ ├── list-index.jsx
│ ├── list-input.jsx
│ ├── list-item-content.jsx
│ ├── list-item.jsx
│ ├── list.jsx
│ ├── login-screen-title.jsx
│ ├── login-screen.jsx
│ ├── message.jsx
│ ├── messagebar-attachment.jsx
│ ├── messagebar-attachments.jsx
│ ├── messagebar-sheet-image.jsx
│ ├── messagebar-sheet-item.jsx
│ ├── messagebar-sheet.jsx
│ ├── messagebar.jsx
│ ├── messages-title.jsx
│ ├── messages.jsx
│ ├── nav-left.jsx
│ ├── nav-right.jsx
│ ├── nav-title-large.jsx
│ ├── nav-title.jsx
│ ├── navbar.jsx
│ ├── page-content.jsx
│ ├── page.jsx
│ ├── panel.jsx
│ ├── photo-browser.jsx
│ ├── pie-chart.jsx
│ ├── popover.jsx
│ ├── popup.jsx
│ ├── preloader.jsx
│ ├── progressbar.jsx
│ ├── radio.jsx
│ ├── range.jsx
│ ├── routable-modals.jsx
│ ├── searchbar.jsx
│ ├── segmented.jsx
│ ├── sheet.jsx
│ ├── skeleton-avatar.jsx
│ ├── skeleton-block.jsx
│ ├── skeleton-image.jsx
│ ├── skeleton-text.jsx
│ ├── stepper.jsx
│ ├── subnavbar.jsx
│ ├── swipeout-actions.jsx
│ ├── swipeout-button.jsx
│ ├── tab.jsx
│ ├── tabs.jsx
│ ├── text-editor.jsx
│ ├── toggle.jsx
│ ├── toolbar.jsx
│ ├── treeview-item.jsx
│ ├── treeview.jsx
│ ├── view.jsx
│ └── views.jsx
├── framework7-react.d.ts
├── framework7-react.js
└── shared
│ ├── components-router.js
│ ├── f7.js
│ ├── get-router-initial-component.js
│ ├── list-context.js
│ ├── mixins.js
│ ├── modal-state-classes.js
│ ├── plugin.js
│ ├── router-context.js
│ ├── router-open-in.jsx
│ ├── tabbar-context.js
│ ├── tabs-swipeable-context.js
│ ├── use-async-component.js
│ ├── use-icon.js
│ ├── use-isomorphic-layout-effect.js
│ ├── use-route-props.js
│ ├── use-smart-select.js
│ ├── use-store.js
│ ├── use-tab.js
│ ├── use-theme.js
│ ├── use-tooltip.js
│ ├── utils.js
│ └── watch-prop.js
├── svelte
├── components
│ ├── accordion-content.svelte
│ ├── accordion-item.svelte
│ ├── accordion-toggle.svelte
│ ├── accordion.svelte
│ ├── actions-button.svelte
│ ├── actions-group.svelte
│ ├── actions-label.svelte
│ ├── actions.svelte
│ ├── app.svelte
│ ├── area-chart.svelte
│ ├── badge.svelte
│ ├── block-footer.svelte
│ ├── block-header.svelte
│ ├── block-title.svelte
│ ├── block.svelte
│ ├── breadcrumbs-collapsed.svelte
│ ├── breadcrumbs-item.svelte
│ ├── breadcrumbs-separator.svelte
│ ├── breadcrumbs.svelte
│ ├── button.svelte
│ ├── card-content.svelte
│ ├── card-footer.svelte
│ ├── card-header.svelte
│ ├── card.svelte
│ ├── checkbox.svelte
│ ├── chip.svelte
│ ├── fab-backdrop.svelte
│ ├── fab-button.svelte
│ ├── fab-buttons.svelte
│ ├── fab.svelte
│ ├── gauge.svelte
│ ├── icon.svelte
│ ├── input.svelte
│ ├── link.svelte
│ ├── list-button.svelte
│ ├── list-group.svelte
│ ├── list-index.svelte
│ ├── list-input.svelte
│ ├── list-item.svelte
│ ├── list.svelte
│ ├── login-screen-title.svelte
│ ├── login-screen.svelte
│ ├── message.svelte
│ ├── messagebar-attachment.svelte
│ ├── messagebar-attachments.svelte
│ ├── messagebar-sheet-image.svelte
│ ├── messagebar-sheet-item.svelte
│ ├── messagebar-sheet.svelte
│ ├── messagebar.svelte
│ ├── messages-title.svelte
│ ├── messages.svelte
│ ├── nav-left.svelte
│ ├── nav-right.svelte
│ ├── nav-title-large.svelte
│ ├── nav-title.svelte
│ ├── navbar.svelte
│ ├── page-content.svelte
│ ├── page.svelte
│ ├── panel.svelte
│ ├── photo-browser.svelte
│ ├── pie-chart.svelte
│ ├── popover.svelte
│ ├── popup.svelte
│ ├── preloader.svelte
│ ├── progressbar.svelte
│ ├── radio.svelte
│ ├── range.svelte
│ ├── routable-modals.svelte
│ ├── router-context-provider.svelte
│ ├── searchbar.svelte
│ ├── segmented.svelte
│ ├── sheet.svelte
│ ├── skeleton-avatar.js
│ ├── skeleton-block.js
│ ├── skeleton-image.js
│ ├── skeleton-text.js
│ ├── stepper.svelte
│ ├── subnavbar.svelte
│ ├── swipeout-actions.svelte
│ ├── swipeout-button.svelte
│ ├── tab.svelte
│ ├── tabs.svelte
│ ├── text-editor.svelte
│ ├── toggle.svelte
│ ├── toolbar.svelte
│ ├── treeview-item.svelte
│ ├── treeview.svelte
│ ├── use-icon.svelte
│ ├── view.svelte
│ └── views.svelte
├── framework7-svelte.d.ts
├── framework7-svelte.js
└── shared
│ ├── components-router.js
│ ├── f7.js
│ ├── get-reactive-context.js
│ ├── get-router-initial-component.js
│ ├── list-context.js
│ ├── mixins.js
│ ├── modal-state-classes.js
│ ├── plugin.js
│ ├── rest-props.js
│ ├── router-context.js
│ ├── router-open-in-component.svelte
│ ├── router-open-in.js
│ ├── set-reactive-context.js
│ ├── use-icon.js
│ ├── use-route-props.js
│ ├── use-smart-select.js
│ ├── use-store.js
│ ├── use-tab.js
│ ├── use-theme.js
│ ├── use-tooltip.js
│ └── utils.js
├── vue-temp
└── .gitkeep
└── vue
├── components
├── accordion-content.vue
├── accordion-item.vue
├── accordion-toggle.vue
├── accordion.vue
├── actions-button.vue
├── actions-group.vue
├── actions-label.vue
├── actions.vue
├── app.vue
├── area-chart.vue
├── badge.vue
├── block-footer.vue
├── block-header.vue
├── block-title.vue
├── block.vue
├── breadcrumbs-collapsed.vue
├── breadcrumbs-item.vue
├── breadcrumbs-separator.vue
├── breadcrumbs.vue
├── button.vue
├── card-content.vue
├── card-footer.vue
├── card-header.vue
├── card.vue
├── checkbox.vue
├── chip.vue
├── fab-backdrop.vue
├── fab-button.vue
├── fab-buttons.vue
├── fab.vue
├── gauge.vue
├── icon.vue
├── input.vue
├── link.vue
├── list-button.vue
├── list-group.vue
├── list-index.vue
├── list-input.vue
├── list-item.vue
├── list.vue
├── login-screen-title.vue
├── login-screen.vue
├── message.vue
├── messagebar-attachment.vue
├── messagebar-attachments.vue
├── messagebar-sheet-image.vue
├── messagebar-sheet-item.vue
├── messagebar-sheet.vue
├── messagebar.vue
├── messages-title.vue
├── messages.vue
├── nav-left.vue
├── nav-right.vue
├── nav-title-large.vue
├── nav-title.vue
├── navbar.vue
├── page-content.vue
├── page.vue
├── panel.vue
├── photo-browser.vue
├── pie-chart.vue
├── popover.vue
├── popup.vue
├── preloader.vue
├── progressbar.vue
├── radio.vue
├── range.vue
├── routable-modals.vue
├── searchbar.vue
├── segmented.vue
├── sheet.vue
├── skeleton-avatar.vue
├── skeleton-block.vue
├── skeleton-image.vue
├── skeleton-text.vue
├── stepper.vue
├── subnavbar.vue
├── swipeout-actions.vue
├── swipeout-button.vue
├── tab.vue
├── tabs.vue
├── text-editor.vue
├── toggle.vue
├── toolbar.vue
├── treeview-item.vue
├── treeview.vue
├── use-icon.vue
├── view.vue
└── views.vue
├── framework7-vue-bundle.d.ts
├── framework7-vue.d.ts
├── framework7-vue.js
└── shared
├── components-router.js
├── f7.js
├── get-router-initial-component.js
├── mixins.js
├── modal-state-classes.js
├── plugin.js
├── router-open-in.js
├── use-icon.js
├── use-route-props.js
├── use-smart-select.js
├── use-store.js
├── use-tab.js
├── use-theme.js
├── use-tooltip.js
└── utils.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style of different editors and IDEs.
2 | # editorconfig.org
3 |
4 | root = true
5 |
6 | [*]
7 | charset = utf-8
8 | end_of_line = lf
9 | indent_size = 2
10 | indent_style = space
11 | insert_final_newline = true
12 | trim_trailing_whitespace = true
13 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | build
2 | .git
3 | .github
4 | custom
5 | packages
6 | node_modules
7 | *.ts
8 | kitchen-sink/core
9 | kitchen-sink/svelte/dist
10 | kitchen-sink/react/dist
11 | kitchen-sink/vue/dist
12 | src/core/framework7.js
13 | src/core/framework7-lite.js
14 | src/core/modules/demo-module.js
15 | src/core/modules/component/snabbdom
16 | src/core/shared/material-color-utils.js
17 | woff2
18 |
19 | src/vue-temp
20 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=LF
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 | - name: 📃 Documentation Issue
3 | url: https://github.com/framework7io/framework7-website/issues/new
4 | about: Issues with documentation or website
5 | - name: ⚙️ CLI Issue
6 | url: https://github.com/framework7io/framework7-cli/issues/new
7 | about: Issues with Framework7 CLI
8 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 |
5 | ---
6 |
7 | **Is your feature request related to a problem? Please describe.**
8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9 |
10 | **Describe the solution you'd like**
11 | A clear and concise description of what you want to happen.
12 |
13 | **Describe alternatives you've considered**
14 | A clear and concise description of any alternative solutions or features you've considered.
15 |
16 | **Additional context**
17 | Add any other context or screenshots about the feature request here.
18 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.
2 |
3 | The best way to propose a feature is to open an issue first and discuss your ideas there before implementing them.
4 |
5 | Always follow the [contribution guidelines](https://github.com/framework7io/framework7/blob/master/.github/CONTRIBUTING.md) when submitting a pull request.
6 |
--------------------------------------------------------------------------------
/.github/lock.yml:
--------------------------------------------------------------------------------
1 | daysUntilLock: 240
2 | exemptLabels:
3 | - Feature Request
4 | - Enhancement
5 | - In Progress
6 | - Bug confirmed
7 | lockLabel: outdated
8 | lockComment: false
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | daysUntilStale: 90
2 | daysUntilClose: 14
3 | exemptLabels:
4 | - Feature Request
5 | - Enhancement
6 | - In Progress
7 | - Bug confirmed
8 | staleLabel: wontfix
9 | markComment: >
10 | This issue has been automatically marked as stale because it has not had
11 | recent activity. It will be closed if no further activity occurs. Thank you
12 | for your contributions.
13 | closeComment: >
14 | This issue has been automatically closed due to inactivity.
15 | If this issue is still actual, please, create the new one.
--------------------------------------------------------------------------------
/.github/workflows/issue-close-require.yml:
--------------------------------------------------------------------------------
1 | name: Issue Close Require
2 |
3 | on:
4 | schedule:
5 | - cron: '0 0 * * *'
6 |
7 | jobs:
8 | close-issues:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: missing demo
12 | uses: actions-cool/issues-helper@v2.2.1
13 | with:
14 | actions: 'close-issues'
15 | token: ${{ secrets.GITHUB_TOKEN }}
16 | labels: 'missing demo'
17 | inactive-day: 3
18 |
--------------------------------------------------------------------------------
/.nova/Configuration.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.default_syntax" : "javascript",
3 | "workspace.color" : 0
4 | }
5 |
--------------------------------------------------------------------------------
/.nova/Tasks/Core.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions" : {
3 | "run" : {
4 | "enabled" : true,
5 | "script" : "npm run core"
6 | }
7 | },
8 | "identifier" : "9B164419-0236-4777-88BD-3F5CB47E019C",
9 | "openLogOnRun" : "start"
10 | }
11 |
--------------------------------------------------------------------------------
/.nova/Tasks/React.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions" : {
3 | "run" : {
4 | "enabled" : true,
5 | "script" : "npm run react"
6 | }
7 | },
8 | "identifier" : "F52B677B-1F9C-445F-A858-F1623B107D5D",
9 | "openLogOnRun" : "start"
10 | }
11 |
--------------------------------------------------------------------------------
/.nova/Tasks/Svelte.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions" : {
3 | "run" : {
4 | "enabled" : true,
5 | "script" : "npm run svelte"
6 | }
7 | },
8 | "identifier" : "758B0624-CC97-44ED-A6B6-774F7E325B39",
9 | "openLogOnRun" : "start"
10 | }
11 |
--------------------------------------------------------------------------------
/.nova/Tasks/Vue.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions" : {
3 | "run" : {
4 | "enabled" : true,
5 | "script" : "npm run vue"
6 | }
7 | },
8 | "identifier" : "35485CB5-B3D0-4824-BF7D-ACF0A6160B91",
9 | "openLogOnRun" : "start"
10 | }
11 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | build
2 | node_modules
3 | packages
4 |
5 | src/core/less/vars.less
6 | src/core/modules/component/htm.js
7 | src/core/modules/component/snabbdom
8 | kitchen-sink/core/css/app.css
9 | kitchen-sink/react/dist
10 | kitchen-sink/vue/dist
11 | kitchen-sink/svelte/dist
12 | kitchen-sink/**/*.json
13 | src/vue-temp
14 | src/core/shared/material-color-utils.js
15 | .nova
16 | package.json
17 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "arrowParens": "always",
3 | "bracketSpacing": true,
4 | "htmlWhitespaceSensitivity": "css",
5 | "insertPragma": false,
6 | "jsxSingleQuote": false,
7 | "printWidth": 100,
8 | "proseWrap": "preserve",
9 | "quoteProps": "as-needed",
10 | "requirePragma": false,
11 | "semi": true,
12 | "singleQuote": true,
13 | "tabWidth": 2,
14 | "trailingComma": "all",
15 | "useTabs": false,
16 | "vueIndentScriptAndStyle": false
17 | }
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '14.15.0'
4 | before_script:
5 | - npm install --global gulp
6 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "eslint.enable": true,
4 | "editor.defaultFormatter": "esbenp.prettier-vscode",
5 | "eslint.validate": ["javascript", "javascriptreact", "svelte", "typescript"]
6 | }
7 |
--------------------------------------------------------------------------------
/babel-react.config.js:
--------------------------------------------------------------------------------
1 | let modules = process.env.MODULES || false;
2 | if (modules === 'esm' || modules === 'false') modules = false;
3 |
4 | module.exports = {
5 | presets: ['@babel/preset-react', ['@babel/preset-env', { modules, loose: true }]],
6 | };
7 |
--------------------------------------------------------------------------------
/babel-svelte.config.js:
--------------------------------------------------------------------------------
1 | let modules = process.env.MODULES || false;
2 | if (modules === 'esm' || modules === 'false') modules = false;
3 |
4 | module.exports = {
5 | presets: [['@babel/preset-env', { modules, loose: true }]],
6 | };
7 |
--------------------------------------------------------------------------------
/babel-vue.config.js:
--------------------------------------------------------------------------------
1 | let modules = process.env.MODULES || false;
2 | if (modules === 'esm' || modules === 'false') modules = false;
3 |
4 | module.exports = {
5 | presets: [['@babel/preset-env', { modules, loose: true }]],
6 | };
7 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | let modules = process.env.MODULES || false;
2 | if (modules === 'esm' || modules === 'false') modules = false;
3 |
4 | module.exports = {
5 | presets: ['@babel/preset-react', ['@babel/preset-env', { modules, loose: true }]],
6 | };
7 |
--------------------------------------------------------------------------------
/build/core/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "framework7",
3 | "private": true,
4 | "main": "framework7.esm.js",
5 | "module": "framework7.esm.js",
6 | "jsnext:main": "framework7.esm.js",
7 | "typings": "framework7.d.ts",
8 | "sideEffects": [
9 | "*.less",
10 | "*.css",
11 | "shared/dom7.js"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/build/react/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "framework7-react",
3 | "private": true,
4 | "module": "framework7-react.js",
5 | "typings": "framework7-react.d.ts"
6 | }
7 |
--------------------------------------------------------------------------------
/build/svelte/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "framework7-svelte",
3 | "private": true,
4 | "module": "framework7-svelte.js",
5 | "svelte": "framework7-svelte-src.js",
6 | "typings": "framework7-svelte.d.ts"
7 | }
8 |
--------------------------------------------------------------------------------
/build/vue/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "framework7-vue",
3 | "private": true,
4 | "module": "framework7-vue.js",
5 | "typings": "framework7-vue.d.ts"
6 | }
7 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | require('./scripts/gulpfile.js');
2 |
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/Framework7Icons-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/Framework7Icons-Regular.ttf
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/Framework7Icons-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/Framework7Icons-Regular.woff
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/Framework7Icons-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/Framework7Icons-Regular.woff2
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/MaterialIcons-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/MaterialIcons-Regular.ttf
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/MaterialIcons-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/MaterialIcons-Regular.woff
--------------------------------------------------------------------------------
/kitchen-sink/core/fonts/MaterialIcons-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/fonts/MaterialIcons-Regular.woff2
--------------------------------------------------------------------------------
/kitchen-sink/core/img/beach.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/beach.jpg
--------------------------------------------------------------------------------
/kitchen-sink/core/img/f7-icon-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/f7-icon-square.png
--------------------------------------------------------------------------------
/kitchen-sink/core/img/f7-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/f7-icon.png
--------------------------------------------------------------------------------
/kitchen-sink/core/img/lock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/lock.jpg
--------------------------------------------------------------------------------
/kitchen-sink/core/img/monkey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/monkey.jpg
--------------------------------------------------------------------------------
/kitchen-sink/core/img/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/mountains.jpg
--------------------------------------------------------------------------------
/kitchen-sink/core/img/vi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/core/img/vi-icon.png
--------------------------------------------------------------------------------
/kitchen-sink/core/js/store.js:
--------------------------------------------------------------------------------
1 | var store = Framework7.createStore({
2 | state: {
3 | firstName: 'John',
4 | lastName: 'Doe',
5 | users: null,
6 | usersLoading: false,
7 | },
8 | actions: {
9 | helloWorld(ctx) {
10 | app.dialog.alert('Hello world');
11 | },
12 | loadUsers({ state }) {
13 | state.usersLoading = true;
14 | setTimeout(() => {
15 | state.usersLoading = false;
16 | state.users = ['Aaron', 'Alexander', 'Candy', 'Chloe', 'Vladimir'];
17 | }, 3000);
18 | },
19 | },
20 | getters: {
21 | usersLoading: ({ state }) => state.usersLoading,
22 | users: ({ state }) => state.users,
23 | },
24 | });
25 |
--------------------------------------------------------------------------------
/kitchen-sink/core/pages/404.html:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
Sorry
17 |
Requested content not found.
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/core/pages/page-transitions-effect.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
${$f7route.params.effect}
13 |
14 |
15 |
16 |
17 |
This page was loaded with ${$f7route.params.effect} transition.
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/beach.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/beach.jpg
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/f7-icon-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/f7-icon-square.png
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/f7-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/f7-icon.png
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/lock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/lock.jpg
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/monkey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/monkey.jpg
--------------------------------------------------------------------------------
/kitchen-sink/react/public/img/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/react/public/img/mountains.jpg
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/404.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Page, Navbar, Block } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 | Sorry
9 | Requested content not found.
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/list-button.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page, List, ListButton } from 'framework7-react';
3 |
4 | export default () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/page-transitions-effect.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Page, Navbar, Block } from 'framework7-react';
3 |
4 | export default (props) => (
5 |
6 |
7 |
8 |
9 |
10 | This page was loaded with {props.effect} transition.
11 |
12 |
13 |
14 | );
15 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/panel-right.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Page, Navbar, BlockTitle, Block, List, ListItem, Link } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 |
9 | This is a right side panel. You can close it by clicking outsite or on this link:
10 | close me. You can put here anything, even another isolated view.
11 |
12 |
13 | Panel Navigation
14 |
15 |
16 |
17 |
18 |
19 | );
20 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/routable-actions.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Actions, ActionsLabel, ActionsGroup, ActionsButton } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 | This Action Sheet was loaded as standalone component
8 | Action 1
9 | Action 2
10 |
11 |
12 | Cancel
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/routable-modals.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page, List, ListItem, Block } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 | In addition to pages, Framework7 router allows to load modal components:
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/swiper-horizontal.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/swiper-loop.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/swiper-scrollbar.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/tabs-routable.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page, Tabs, Tab, Link, Toolbar } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 |
9 | Tab 1
10 |
11 |
12 | Tab 2
13 |
14 |
15 | Tab 3
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/tabs.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page, List, ListItem } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | );
15 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/pages/timeline.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Navbar, Page, List, ListItem } from 'framework7-react';
3 |
4 | export default () => (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | );
14 |
--------------------------------------------------------------------------------
/kitchen-sink/react/src/store.js:
--------------------------------------------------------------------------------
1 | import { createStore } from 'framework7/lite';
2 |
3 | const store = createStore({
4 | state: {
5 | users: null,
6 | usersLoading: false,
7 | },
8 | actions: {
9 | loadUsers({ state }) {
10 | state.usersLoading = true;
11 | setTimeout(() => {
12 | state.usersLoading = false;
13 | state.users = ['Aaron', 'Alexander', 'Candy', 'Chloe', 'Vladimir'];
14 | }, 3000);
15 | },
16 | },
17 | getters: {
18 | usersLoading: ({ state }) => state.usersLoading,
19 | users: ({ state }) => state.users,
20 | },
21 | });
22 |
23 | export default store;
24 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/beach.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/beach.jpg
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/f7-icon-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/f7-icon-square.png
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/f7-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/f7-icon.png
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/lock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/lock.jpg
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/monkey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/monkey.jpg
--------------------------------------------------------------------------------
/kitchen-sink/svelte/public/img/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/svelte/public/img/mountains.jpg
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/404.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 | Sorry
10 | Requested content not found.
11 |
12 |
13 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/list-button.svelte:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/navbar.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Right
9 |
10 |
11 |
12 |
13 | Navbar is a fixed (with Fixed and Through layout types) area at the top of a screen that
14 | contains Page title and navigation elements.
15 |
16 | Navbar has 3 main parts: Left, Title and Right. Each part may contain any HTML content.
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/page-transitions-effect.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 | This page was loaded with {effect} transition.
12 |
13 |
14 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/panel-right.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 | This is a right side panel. You can close it by clicking outsite or on this link:
10 | close me. You can put here anything, even another isolated view.
11 |
12 |
13 | Panel Navigation
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/routable-actions.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 | This Action Sheet was loaded as standalone component
8 | Action 1
9 | Action 2
10 |
11 |
12 | Cancel
13 |
14 |
15 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/routable-modals.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | In addition to pages, Framework7 router allows to load modal components:
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-horizontal.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-loop.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-nested.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Horizontal Slide 1
9 |
10 |
11 | Vertical Slide 1
12 | Vertical Slide 2
13 | Vertical Slide 3
14 |
15 |
16 | Horizontal Slide 3
17 | Horizontal Slide 4
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-pagination-fraction.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-pagination-progress.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 | Slide 1
10 | Slide 2
11 | Slide 3
12 | Slide 4
13 | Slide 5
14 | Slide 6
15 | Slide 7
16 | Slide 8
17 | Slide 9
18 | Slide 10
19 |
20 |
21 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-scrollbar.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-space-between.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/swiper-vertical.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Slide 1
9 | Slide 2
10 | Slide 3
11 | Slide 4
12 | Slide 5
13 | Slide 6
14 | Slide 7
15 | Slide 8
16 | Slide 9
17 | Slide 10
18 |
19 |
20 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/tabs-routable.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | Tab 1
9 | Tab 2
10 | Tab 3
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/tabs.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/pages/timeline.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/kitchen-sink/svelte/src/store.js:
--------------------------------------------------------------------------------
1 | import { createStore } from 'framework7/lite';
2 |
3 | const store = createStore({
4 | state: {
5 | users: null,
6 | usersLoading: false,
7 | },
8 | actions: {
9 | loadUsers({ state }) {
10 | state.usersLoading = true;
11 | setTimeout(() => {
12 | state.usersLoading = false;
13 | state.users = ['Aaron', 'Alexander', 'Candy', 'Chloe', 'Vladimir'];
14 | }, 3000);
15 | },
16 | },
17 | getters: {
18 | usersLoading: ({ state }) => state.usersLoading,
19 | users: ({ state }) => state.users,
20 | },
21 | });
22 |
23 | export default store;
24 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/beach.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/beach.jpg
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/f7-icon-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/f7-icon-square.png
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/f7-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/f7-icon.png
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/lock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/lock.jpg
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/monkey.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/monkey.jpg
--------------------------------------------------------------------------------
/kitchen-sink/vue/public/img/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/kitchen-sink/vue/public/img/mountains.jpg
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Sorry
6 | Requested content not found.
7 |
8 |
9 |
10 |
11 |
22 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/list-button.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
28 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/page-transitions-effect.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | This page was loaded with {{ effect }} transition.
8 |
9 |
10 |
11 |
12 |
26 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/routable-actions.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | This Action Sheet was loaded as standalone component
5 | Action 1
6 | Action 2
7 |
8 |
9 | Cancel
10 |
11 |
12 |
13 |
25 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/routable-modals.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | In addition to pages, Framework7 router allows to load modal components:
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
26 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/tabs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
24 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/pages/timeline.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
23 |
--------------------------------------------------------------------------------
/kitchen-sink/vue/src/store.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { createStore } from 'framework7/lite';
3 |
4 | const store = createStore({
5 | state: {
6 | users: null,
7 | usersLoading: false,
8 | },
9 | actions: {
10 | loadUsers({ state }) {
11 | state.usersLoading = true;
12 | setTimeout(() => {
13 | state.usersLoading = false;
14 | state.users = ['Aaron', 'Alexander', 'Candy', 'Chloe', 'Vladimir'];
15 | }, 3000);
16 | },
17 | },
18 | getters: {
19 | usersLoading: ({ state }) => state.usersLoading,
20 | users: ({ state }) => state.users,
21 | },
22 | });
23 |
24 | export default store;
25 |
--------------------------------------------------------------------------------
/scripts/banners/core.js:
--------------------------------------------------------------------------------
1 | const pkg = require('../../packages/core/package.json');
2 |
3 | const version = process.env.VERSION || pkg.version;
4 |
5 | const date = {
6 | day: new Date().getDate(),
7 | month:
8 | 'January February March April May June July August September October November December'.split(
9 | ' ',
10 | )[new Date().getMonth()],
11 | year: new Date().getFullYear(),
12 | };
13 |
14 | module.exports = `${`
15 | /**
16 | * Framework7 ${version}
17 | * ${pkg.description}
18 | * ${pkg.homepage}
19 | *
20 | * Copyright 2014-${date.year} ${pkg.author}
21 | *
22 | * Released under the ${pkg.license} License
23 | *
24 | * Released on: ${date.month} ${date.day}, ${date.year}
25 | */
26 | `.trim()}\n`;
27 |
--------------------------------------------------------------------------------
/scripts/banners/react.js:
--------------------------------------------------------------------------------
1 | const pkg = require('../../packages/react/package.json');
2 |
3 | const version = process.env.VERSION || pkg.version;
4 |
5 | const date = {
6 | day: new Date().getDate(),
7 | month:
8 | 'January February March April May June July August September October November December'.split(
9 | ' ',
10 | )[new Date().getMonth()],
11 | year: new Date().getFullYear(),
12 | };
13 |
14 | module.exports = `${`
15 | /**
16 | * Framework7 React ${version}
17 | * ${pkg.description}
18 | * ${pkg.homepage}
19 | *
20 | * Copyright 2014-${date.year} ${pkg.author}
21 | *
22 | * Released under the ${pkg.license} License
23 | *
24 | * Released on: ${date.month} ${date.day}, ${date.year}
25 | */
26 | `.trim()}\n`;
27 |
--------------------------------------------------------------------------------
/scripts/banners/svelte.js:
--------------------------------------------------------------------------------
1 | const pkg = require('../../packages/svelte/package.json');
2 |
3 | const version = process.env.VERSION || pkg.version;
4 |
5 | const date = {
6 | day: new Date().getDate(),
7 | month:
8 | 'January February March April May June July August September October November December'.split(
9 | ' ',
10 | )[new Date().getMonth()],
11 | year: new Date().getFullYear(),
12 | };
13 |
14 | module.exports = `${`
15 | /**
16 | * Framework7 Svelte ${version}
17 | * ${pkg.description}
18 | * ${pkg.homepage}
19 | *
20 | * Copyright 2014-${date.year} ${pkg.author}
21 | *
22 | * Released under the ${pkg.license} License
23 | *
24 | * Released on: ${date.month} ${date.day}, ${date.year}
25 | */
26 | `.trim()}\n`;
27 |
--------------------------------------------------------------------------------
/scripts/banners/vue.js:
--------------------------------------------------------------------------------
1 | const pkg = require('../../packages/vue/package.json');
2 |
3 | const version = process.env.VERSION || pkg.version;
4 |
5 | const date = {
6 | day: new Date().getDate(),
7 | month:
8 | 'January February March April May June July August September October November December'.split(
9 | ' ',
10 | )[new Date().getMonth()],
11 | year: new Date().getFullYear(),
12 | };
13 |
14 | module.exports = `${`
15 | /**
16 | * Framework7 Vue ${version}
17 | * ${pkg.description}
18 | * ${pkg.homepage}
19 | *
20 | * Copyright 2014-${date.year} ${pkg.author}
21 | *
22 | * Released under the ${pkg.license} License
23 | *
24 | * Released on: ${date.month} ${date.day}, ${date.year}
25 | */
26 | `.trim()}\n`;
27 |
--------------------------------------------------------------------------------
/scripts/core-components-list.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | 'app',
3 | 'statusbar',
4 | 'view',
5 | 'navbar',
6 | 'toolbar',
7 | 'subnavbar',
8 | 'touch-ripple',
9 | 'modal',
10 | 'page',
11 | 'link',
12 | 'block',
13 | 'list',
14 | 'badge',
15 | 'button',
16 | 'icon',
17 | ];
18 |
--------------------------------------------------------------------------------
/scripts/icon-font/blank.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/scripts/icon-font/generate.py:
--------------------------------------------------------------------------------
1 | # Font generation script from Ionicons
2 | # https://github.com/driftyco/ionicons/
3 | # http://ionicons.com/
4 |
5 | from subprocess import call
6 | import os
7 |
8 | BUILDER_PATH = os.path.dirname(os.path.abspath(__file__))
9 |
10 | def main():
11 | generate_font_files()
12 |
13 | def generate_font_files():
14 | print("Generate Fonts")
15 | cmd = "fontforge -script %s/generate_font.py" % (BUILDER_PATH)
16 | call(cmd, shell=True)
17 |
18 | if __name__ == "__main__":
19 | main()
20 |
--------------------------------------------------------------------------------
/scripts/utils/autoprefixer.js:
--------------------------------------------------------------------------------
1 | /* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */
2 | /* eslint no-console: "off" */
3 | const postcss = require('postcss');
4 | const autoprefixer = require('autoprefixer');
5 |
6 | module.exports = async (content, { from = undefined, to = undefined } = {}) =>
7 | new Promise((resolve, reject) => {
8 | postcss([autoprefixer])
9 | .process(content, { from, to })
10 | .then((result) => {
11 | result.warnings().forEach((warn) => {
12 | console.warn(warn.toString());
13 | });
14 | resolve(result.css);
15 | })
16 | .catch((err) => {
17 | reject(err);
18 | throw err;
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/scripts/utils/less.js:
--------------------------------------------------------------------------------
1 | /* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */
2 | const path = require('path');
3 | const less = require('less');
4 |
5 | module.exports = (content, resolvePath = path.resolve(__dirname, '../../src/core')) =>
6 | new Promise((resolve, reject) => {
7 | less
8 | .render(content, { paths: [resolvePath] })
9 | .then((result) => {
10 | resolve(result.css);
11 | })
12 | .catch((err) => {
13 | reject(err);
14 | throw err;
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/src/core/components/accordion/accordion-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/accordion/accordion-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/accordion/accordion-vars.less:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/components/accordion/accordion-vars.less
--------------------------------------------------------------------------------
/src/core/components/actions/actions-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .actions-modal {
3 | background-color: var(--f7-actions-bg-color);
4 | border-radius: var(--f7-actions-border-radius) var(--f7-actions-border-radius) 0 0;
5 | padding-bottom: var(--f7-safe-area-bottom);
6 | }
7 | .actions-button {
8 | transition-duration: 300ms;
9 | }
10 | .actions-button,
11 | .actions-label {
12 | b,
13 | &.actions-button-strong {
14 | font-weight: 500;
15 | }
16 | }
17 |
18 | .actions-button-media {
19 | min-width: 40px;
20 | + .actions-button-text {
21 | margin-left: 16px;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/core/components/app/app-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .md-only,
3 | .if-md,
4 | .if-not-ios,
5 | .not-ios {
6 | display: none !important;
7 | }
8 | // Fix for iPad in Safari in Lanscape mode
9 | @media (width: 1024px) and (height: 691px) and (orientation: landscape) {
10 | &,
11 | & body,
12 | & .framework7-root {
13 | height: 671px;
14 | }
15 | }
16 | @media (width: 1024px) and (height: 692px) and (orientation: landscape) {
17 | &,
18 | & body,
19 | & .framework7-root {
20 | height: 672px;
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/core/components/app/app-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .ios-only,
3 | .if-ios,
4 | .if-not-md,
5 | .not-md {
6 | display: none !important;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/core/components/area-chart/area-chart-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/area-chart/area-chart-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/autocomplete/autocomplete-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .autocomplete-dropdown {
3 | .autocomplete-preloader {
4 | .ltr({ right: 16px; });
5 | .rtl({ left: 16px; });
6 | margin-bottom: 12px;
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/autocomplete/autocomplete-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .autocomplete-page {
3 | .navbar .autocomplete-preloader {
4 | .ltr({ margin-right: 8px; });
5 | .rtl({ margin-left: 8px; });
6 | }
7 | }
8 | .autocomplete-popup {
9 | .navbar .autocomplete-preloader {
10 | .ltr({
11 | margin-left: 8px;
12 | margin-right: 16px;
13 | });
14 | .rtl({
15 | margin-right: 8px;
16 | margin-left: 16px;
17 | });
18 | }
19 | }
20 | .autocomplete-dropdown {
21 | .autocomplete-preloader {
22 | .ltr({ right: 16px; });
23 | .rtl({ left: 16px; });
24 | margin-bottom: 8px;
25 | circle {
26 | stroke-width: 3;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/core/components/badge/badge-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/badge/badge-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/badge/badge-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-badge-text-color: #fff;
3 | --f7-badge-bg-color: #8e8e93;
4 | --f7-badge-in-icon-size: 16px;
5 | --f7-badge-in-icon-font-size: 10px;
6 | --f7-badge-font-weight: normal;
7 | --f7-badge-font-size: 12px;
8 | }
9 | .ios-vars({
10 | --f7-badge-padding: 0 4px;
11 | --f7-badge-size: 20px;
12 | --f7-badge-font-weight: 600;
13 | });
14 | .md-vars({
15 | --f7-badge-padding: 2px 6px;
16 | --f7-badge-size: 20px;
17 | --f7-badge-font-weight: 500;
18 | });
19 |
--------------------------------------------------------------------------------
/src/core/components/badge/badge.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Badge {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const BadgeComponent: Framework7Plugin;
14 | export default BadgeComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/badge/badge.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'badge',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/block/block-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/block/block-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/block/block.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Block {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const BlockComponent: Framework7Plugin;
14 | export default BlockComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/block/block.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'block',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/breadcrumbs/breadcrumbs-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/breadcrumbs/breadcrumbs-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/breadcrumbs/breadcrumbs.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7 from '../app/app-class.js';
2 | import { CSSSelector, Framework7Plugin } from '../app/app-class.js';
3 |
4 | export namespace Breadcrumbs {
5 | interface AppMethods {
6 | breadcrumbs: {};
7 | }
8 | interface AppParams {}
9 | interface DomEvents {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const BreadcrumbsComponent: Framework7Plugin;
14 |
15 | export default BreadcrumbsComponent;
16 |
--------------------------------------------------------------------------------
/src/core/components/breadcrumbs/breadcrumbs.js:
--------------------------------------------------------------------------------
1 | import { bindMethods } from '../../shared/utils.js';
2 |
3 | const Breadcrumbs = {};
4 |
5 | export default {
6 | name: 'breadrumbs',
7 | create() {
8 | const app = this;
9 | bindMethods(app, {
10 | breadrumbs: Breadcrumbs,
11 | });
12 | },
13 | };
14 |
--------------------------------------------------------------------------------
/src/core/components/button/button-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | // Buttons
3 | .button {
4 | transition-duration: 100ms;
5 | &.active-state {
6 | background-color: var(--f7-button-pressed-bg-color, rgba(var(--f7-theme-color-rgb), 0.15));
7 | }
8 | }
9 | .button-fill,
10 | .button-fill-ios {
11 | --f7-button-pressed-bg-color: var(
12 | --f7-button-fill-pressed-bg-color,
13 | var(--f7-theme-color-tint)
14 | );
15 | }
16 |
17 | .button-small,
18 | .button-small-ios {
19 | transition-duration: 200ms;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/core/components/button/button-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | // Buttons
3 | .button {
4 | transition-duration: 300ms;
5 | transform: translate3d(0, 0, 0);
6 | }
7 | .button-fill,
8 | .button-fill-md {
9 | --f7-button-pressed-bg-color: var(--f7-button-fill-pressed-bg-color, transparent);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/button/button.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Button {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const ButtonComponent: Framework7Plugin;
14 | export default ButtonComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/button/button.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'button',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/calendar/calendar-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/calendar/calendar-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/card/card-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/card/card-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/checkbox/checkbox-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .icon-checkbox,
3 | .checkbox i {
4 | &:after {
5 | content: 'checkbox_ios';
6 | font-size: 21px;
7 | }
8 | }
9 |
10 | label.item-checkbox {
11 | &.active-state {
12 | transition-duration: 0ms;
13 | }
14 | }
15 | label.item-checkbox input[type='checkbox']:indeterminate ~ .icon-checkbox,
16 | label.item-checkbox input[type='checkbox']:indeterminate ~ * .icon-checkbox,
17 | .checkbox input[type='checkbox']:indeterminate ~ i {
18 | &:after {
19 | height: 2px;
20 | margin-top: -1px;
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/core/components/checkbox/checkbox-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .icon-checkbox,
3 | .checkbox i {
4 | transition-duration: 200ms;
5 | &:after {
6 | content: 'checkbox_md';
7 | transition-duration: 200ms;
8 | font-size: 15px;
9 | }
10 | }
11 |
12 | label.item-checkbox {
13 | position: relative;
14 | overflow: hidden;
15 | z-index: 0;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/core/components/checkbox/checkbox-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | /* --f7-checkbox-active-color: var(--f7-theme-color); */
3 | --f7-checkbox-icon-color: #fff;
4 | --f7-checkbox-extra-margin: 0px;
5 | .dark-vars({
6 | --f7-checkbox-inactive-color: rgba(255, 255, 255, 0.3);
7 | --f7-checkbox-icon-color: #000;
8 | });
9 | }
10 | .ios-vars({
11 | --f7-checkbox-size: 22px;
12 | --f7-checkbox-border-radius: 50%;
13 | --f7-checkbox-border-width: 1px;
14 | .light-vars({
15 | --f7-checkbox-inactive-color: #c7c7cc;
16 | });
17 | });
18 | .md-vars({
19 | --f7-checkbox-size: 18px;
20 | --f7-checkbox-border-radius: 2px;
21 | --f7-checkbox-border-width: 2px;
22 | .light-vars({
23 | --f7-checkbox-inactive-color: #6d6d6d;
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/src/core/components/checkbox/checkbox.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Checkbox {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const CheckboxComponent: Framework7Plugin;
14 | export default CheckboxComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/checkbox/checkbox.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'checkbox',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/chip/chip-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .chip-media {
3 | .ltr({
4 | margin-left: calc(-1 * var(--f7-chip-padding-horizontal));
5 | });
6 | .rtl({
7 | margin-right: calc(-1 * var(--f7-chip-padding-horizontal));
8 | });
9 | }
10 | .chip-delete {
11 | &::after {
12 | content: 'delete_round_ios';
13 | }
14 | .ltr({
15 | margin-right: calc(-1 * var(--f7-chip-padding-horizontal));
16 | });
17 | .rtl({
18 | margin-left: calc(-1 * var(--f7-chip-padding-horizontal));
19 |
20 | });
21 | &:after {
22 | font-size: 10px;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/core/components/chip/chip-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .chip-media {
3 | .ltr({
4 | margin-left: calc(-1 * var(--f7-chip-padding-horizontal) + 4px);
5 | });
6 | .rtl({
7 | margin-right: calc(-1 * var(--f7-chip-padding-horizontal) + 4px);
8 | });
9 | }
10 | .chip-label + .chip-delete {
11 | .ltr({
12 | margin-left: 4px;
13 | });
14 | .rtl({
15 | margin-right: 4px;
16 | });
17 | }
18 | .chip-delete {
19 | &::after {
20 | content: 'delete_round_md';
21 | font-size: 16px;
22 | }
23 | .ltr({
24 | margin-right: calc(-1 * var(--f7-chip-padding-horizontal) + 4px);
25 | });
26 | .rtl({
27 | margin-left: calc(-1 * var(--f7-chip-padding-horizontal) + 4px);
28 | });
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/core/components/chip/chip.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Chip {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const ChipComponent: Framework7Plugin;
14 | export default ChipComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/chip/chip.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'chip',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/color-picker/color-picker-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/color-picker/color-picker-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/color-picker/modules/current-color.js:
--------------------------------------------------------------------------------
1 | /** @jsx $jsx */
2 | import $jsx from '../../../shared/$jsx.js';
3 |
4 | export default {
5 | render() {
6 | return (
7 |
10 | );
11 | },
12 | update(self) {
13 | self.$el
14 | .find('.color-picker-module-current-color .color-picker-current-color')
15 | .css('background-color', self.value.hex);
16 | },
17 | };
18 |
--------------------------------------------------------------------------------
/src/core/components/contacts-list/contacts-list-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/contacts-list/contacts-list-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .contacts-list {
3 | .list-group-title {
4 | pointer-events: none;
5 | overflow: visible;
6 | width: 40px;
7 | + li {
8 | margin-top: calc(var(--f7-contacts-list-title-height) * -1);
9 | }
10 | .hairline-remove(top);
11 | }
12 | li:not(.list-group-title) {
13 | .ltr({
14 | padding-left: 40px;
15 | });
16 | .rtl({
17 | padding-right: 40px;
18 | });
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/core/components/contacts-list/contacts-list-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | }
3 | .ios-vars({
4 | --f7-contacts-list-title-font-size: inherit;
5 | --f7-contacts-list-title-font-weight: 600;
6 | --f7-contacts-list-title-height: 22px;
7 | .light-vars({
8 | --f7-contacts-list-title-text-color: #000;
9 | --f7-contacts-list-title-bg-color: #f7f7f7;
10 | });
11 | .dark-vars({
12 | --f7-contacts-list-title-text-color: #fff;
13 | --f7-contacts-list-title-bg-color: #323234;
14 | });
15 | });
16 | .md-vars({
17 | --f7-contacts-list-title-font-size: 20px;
18 | --f7-contacts-list-title-font-weight: 500;
19 | --f7-contacts-list-title-height: 48px;
20 | --f7-contacts-list-title-bg-color: transparent;
21 | });
22 | .md-color-vars({
23 | --f7-contacts-list-title-text-color: var(--f7-theme-color);
24 | });
25 |
--------------------------------------------------------------------------------
/src/core/components/contacts-list/contacts-list.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace ContactsList {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const ContactsListComponent: Framework7Plugin;
14 | export default ContactsListComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/contacts-list/contacts-list.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'contactsList',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/fab/fab-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .fab > a,
3 | .fab-buttons a {
4 | &.active-state {
5 | transition-duration: 0ms;
6 | background-color: var(--f7-fab-pressed-bg-color, var(--f7-theme-color-shade));
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/fab/fab-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .fab > a,
3 | .fab-buttons a {
4 | &.active-state {
5 | background-color: var(
6 | --f7-fab-pressed-bg-color,
7 | var(--f7-fab-bg-color, var(--f7-theme-color))
8 | );
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/form/form-ios.less:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/components/form/form-ios.less
--------------------------------------------------------------------------------
/src/core/components/form/form-md.less:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/components/form/form-md.less
--------------------------------------------------------------------------------
/src/core/components/form/form.less:
--------------------------------------------------------------------------------
1 | /* === Form === */
2 | .if-ios-theme({
3 | @import './form-ios.less';
4 | });
5 | .if-md-theme({
6 | @import './form-md.less';
7 | });
8 |
--------------------------------------------------------------------------------
/src/core/components/gauge/gauge-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/gauge/gauge-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/gauge/gauge.less:
--------------------------------------------------------------------------------
1 | /* === Gauge === */
2 | .gauge {
3 | position: relative;
4 | text-align: center;
5 | margin-left: auto;
6 | margin-right: auto;
7 | display: inline-block;
8 | }
9 | .gauge-svg,
10 | .gauge svg {
11 | max-width: 100%;
12 | height: auto;
13 | circle,
14 | path {
15 | transition-duration: 400ms;
16 | }
17 | }
18 |
19 | .if-ios-theme({
20 | @import './gauge-ios.less';
21 | });
22 | .if-md-theme({
23 | @import './gauge-md.less';
24 | });
25 |
--------------------------------------------------------------------------------
/src/core/components/grid/grid-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/grid/grid-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/grid/grid-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-grid-gap: 16px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/core/components/grid/grid.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Grid {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface DomEvents {}
11 | interface AppEvents {}
12 | }
13 |
14 | declare const GridComponent: Framework7Plugin;
15 | export default GridComponent;
16 |
--------------------------------------------------------------------------------
/src/core/components/grid/grid.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'grid',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/icon/icon.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Icon {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const IconComponent: Framework7Plugin;
14 | export default IconComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/icon/icon.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'icon',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/icon/icon.less:
--------------------------------------------------------------------------------
1 | /* === Icon === */
2 | .f7-icons,
3 | .material-icons {
4 | width: 1em;
5 | height: 1em;
6 | }
7 | i.icon {
8 | display: inline-block;
9 | vertical-align: middle;
10 | background-size: 100% auto;
11 | background-position: center;
12 | background-repeat: no-repeat;
13 | font-style: normal;
14 | position: relative;
15 | }
16 | .icon-back,
17 | .icon-prev,
18 | .icon-forward,
19 | .icon-next {
20 | &:after {
21 | .core-icons-font();
22 | }
23 | }
24 | .icon[class*='color-'] {
25 | color: var(--f7-theme-color);
26 | }
27 |
28 | .if-ios-theme({
29 | @import './icon-ios.less';
30 | });
31 | .if-md-theme({
32 | @import './icon-md.less';
33 | });
34 |
--------------------------------------------------------------------------------
/src/core/components/infinite-scroll/infinite-scroll-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .infinite-scroll-preloader {
3 | margin-top: 35px;
4 | margin-bottom: 35px;
5 | .preloader,
6 | &.preloader {
7 | width: 27px;
8 | height: 27px;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/infinite-scroll/infinite-scroll-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .infinite-scroll-preloader {
3 | margin-top: 32px;
4 | margin-bottom: 32px;
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/core/components/infinite-scroll/infinite-scroll.less:
--------------------------------------------------------------------------------
1 | /* === Infinite === */
2 | .infinite-scroll-preloader {
3 | margin-left: auto;
4 | margin-right: auto;
5 | text-align: center;
6 | &.preloader {
7 | display: block;
8 | }
9 | }
10 | .if-ios-theme({
11 | @import './infinite-scroll-ios.less';
12 | });
13 | .if-md-theme({
14 | @import './infinite-scroll-md.less';
15 | });
16 |
--------------------------------------------------------------------------------
/src/core/components/link/link-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .link {
3 | transition: opacity 300ms;
4 | &.active-state {
5 | opacity: var(--f7-link-pressed-opacity);
6 | transition-duration: 0ms;
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/link/link-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/link/link-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-link-highlight-black: rgba(0, 0, 0, 0.1);
3 | --f7-link-highlight-white: rgba(255, 255, 255, 0.15);
4 | --f7-link-highlight-color: rgba(var(--f7-theme-color-rgb), 0.15);
5 | }
6 |
7 | .ios-vars({
8 | --f7-link-pressed-opacity: 0.3;
9 | });
10 |
--------------------------------------------------------------------------------
/src/core/components/link/link.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Link {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const LinkComponent: Framework7Plugin;
14 | export default LinkComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/link/link.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'link',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/link/link.less:
--------------------------------------------------------------------------------
1 | /* === Link === */
2 | @import './link-vars.less';
3 |
4 | .link,
5 | .tab-link {
6 | display: inline-flex;
7 | align-items: center;
8 | align-content: center;
9 | justify-content: center;
10 | position: relative;
11 | box-sizing: border-box;
12 | z-index: 1;
13 | --f7-touch-ripple-color: var(--f7-link-touch-ripple-color, rgba(var(--f7-theme-color-rgb), 0.25));
14 | }
15 | .link {
16 | i + span,
17 | i + i,
18 | span + i,
19 | span + span {
20 | .ltr({
21 | margin-left: 4px;
22 | });
23 | .rtl({
24 | margin-right: 4px;
25 | });
26 | }
27 | }
28 | .link[class*='color-'] {
29 | color: var(--f7-theme-color);
30 | }
31 |
32 | .if-ios-theme({
33 | @import './link-ios.less';
34 | });
35 | .if-md-theme({
36 | @import './link-md.less';
37 | });
38 |
--------------------------------------------------------------------------------
/src/core/components/list-index/list-index-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .list-index {
3 | .list-index-label {
4 | margin-bottom: calc(-1 * var(--f7-list-index-label-size) / 2);
5 | margin-right: calc(var(--f7-list-index-width) - 1px);
6 | border-radius: 50%;
7 | &:before {
8 | position: absolute;
9 | width: 100%;
10 | height: 100%;
11 | border-radius: 50% 0% 50% 50%;
12 | content: '';
13 | background-color: inherit;
14 | left: 0;
15 | top: 0;
16 | transform: rotate(45deg);
17 | z-index: -1;
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/core/components/list-index/list-index-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .list-index {
3 | .list-index-label {
4 | border-radius: 50% 50% 0 50%;
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/core/components/list/list-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .item-link.active-state .item-inner,
3 | .list-button.active-state,
4 | .links-list a.active-state {
5 | .hairline-color(bottom, transparent);
6 | }
7 |
8 | .links-list a,
9 | .list .item-link,
10 | .list .list-button {
11 | &.active-state {
12 | transition-duration: 0ms;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/core/components/list/list-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .menu-list .item-link.active-state {
3 | background-color: var(--f7-menu-list-item-bg-color);
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/src/core/components/list/list.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace List {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const ListComponent: Framework7Plugin;
14 | export default ListComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/list/list.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'list',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/login-screen/login-screen-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/login-screen/login-screen-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/modal/modal.js:
--------------------------------------------------------------------------------
1 | import Modal from './modal-class.js';
2 | import CustomModal from './custom-modal-class.js';
3 |
4 | export default {
5 | name: 'modal',
6 | static: {
7 | Modal,
8 | CustomModal,
9 | },
10 | create() {
11 | const app = this;
12 | app.customModal = {
13 | create(params) {
14 | return new CustomModal(app, params);
15 | },
16 | };
17 | },
18 | params: {
19 | modal: {
20 | queueDialogs: true,
21 | },
22 | },
23 | };
24 |
--------------------------------------------------------------------------------
/src/core/components/modal/modal.less:
--------------------------------------------------------------------------------
1 | .custom-modal-backdrop {
2 | z-index: 10500;
3 | }
4 |
5 | .custom-modal-backdrop,
6 | .actions-backdrop,
7 | .dialog-backdrop,
8 | .popover-backdrop,
9 | .popup-backdrop,
10 | .preloader-backdrop,
11 | .sheet-backdrop,
12 | .fab-backdrop {
13 | .modal-backdrop();
14 | }
15 |
--------------------------------------------------------------------------------
/src/core/components/page/page.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Page {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const PageComponent: Framework7Plugin;
14 | export default PageComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/page/page.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'page',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/panel/panel-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/panel/panel-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .panel-cover {
3 | overflow: hidden;
4 | &.panel-left {
5 | border-radius: 0 16px 16px 0;
6 | }
7 | &.panel-right {
8 | border-radius: 16px 0 0 16px;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/photo-browser/photo-browser-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/photo-browser/photo-browser-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/photo-browser/photo-browser-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-photobrowser-bg-color: #fff;
3 | --f7-photobrowser-bars-bg-color: rgba(var(--f7-bars-bg-color-rgb), 0.95);
4 | --f7-photobrowser-bars-text-color: var(--f7-bars-text-color);
5 | --f7-photobrowser-bars-link-color: var(--f7-bars-link-color);
6 | --f7-photobrowser-caption-font-size: 13px;
7 | --f7-photobrowser-caption-font-weight: 500;
8 | --f7-photobrowser-caption-light-text-color: #000;
9 | --f7-photobrowser-caption-dark-text-color: #fff;
10 | --f7-photobrowser-exposed-bg-color: #000;
11 |
12 | --f7-photobrowser-dark-bg-color: #000;
13 | --f7-photobrowser-dark-bars-bg-color: rgba(27, 27, 27, 0.8);
14 | --f7-photobrowser-dark-bars-text-color: #fff;
15 | --f7-photobrowser-dark-bars-link-color: #fff;
16 | }
17 |
--------------------------------------------------------------------------------
/src/core/components/picker/picker-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .picker-center-highlight {
3 | left: 16px;
4 | right: 16px;
5 | background-color: var(--f7-picker-item-selected-bg-color);
6 | border-radius: 8px;
7 | .popover & {
8 | left: 8px;
9 | right: 8px;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/core/components/picker/picker-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .picker-center-highlight {
3 | left: 0;
4 | right: 0;
5 | border-top: 1px solid var(--f7-md-outline);
6 | border-bottom: 1px solid var(--f7-md-outline);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/core/components/pie-chart/pie-chart-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/pie-chart/pie-chart-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/popover/popover-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .popover {
3 | transform: none;
4 | transition-property: opacity;
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/core/components/popup/popup-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/popup/popup-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/popup/popup-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-popup-border-radius: 0px;
3 | --f7-popup-tablet-width: 630px;
4 | --f7-popup-tablet-height: 630px;
5 | --f7-popup-push-offset: var(--f7-safe-area-top);
6 | /*
7 | --f7-popup-tablet-border-radius: var(--f7-popup-border-radius);
8 | */
9 | }
10 | .ios-vars({
11 | --f7-popup-tablet-border-radius: 5px;
12 | --f7-popup-transition-duration: 400ms;
13 | --f7-popup-transition-timing-function: initial;
14 | --f7-popup-push-border-radius: 10px;
15 | });
16 | .md-vars({
17 | --f7-popup-tablet-border-radius: 28px;
18 | --f7-popup-transition-duration: 600ms;
19 | --f7-popup-transition-timing-function: cubic-bezier(0, 1, 0.2, 1);
20 | --f7-popup-push-border-radius: 28px;
21 | });
22 |
--------------------------------------------------------------------------------
/src/core/components/preloader/preloader-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-preloader-modal-padding: 8px;
3 | --f7-preloader-modal-bg-color: rgba(0, 0, 0, 0.8);
4 | }
5 | .ios-vars({
6 | --f7-preloader-color: #6c6c6c;
7 | --f7-preloader-size: 20px;
8 | --f7-preloader-modal-preloader-size: 34px;
9 | --f7-preloader-modal-border-radius: 5px;
10 | });
11 | .md-vars({
12 | --f7-preloader-color: #757575;
13 | --f7-preloader-size: 32px;
14 | --f7-preloader-modal-preloader-size: 32px;
15 | --f7-preloader-modal-border-radius: 4px;
16 | });
17 |
--------------------------------------------------------------------------------
/src/core/components/progressbar/progressbar-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | /*
3 | --f7-progressbar-progress-color: var(--f7-theme-color);
4 | */
5 | }
6 | .ios-vars({
7 | --f7-progressbar-height: 4px;
8 | --f7-progressbar-border-radius: 4px;
9 | .light-vars({
10 | --f7-progressbar-bg-color: rgba(0,0,0,0.3);
11 | });
12 | .dark-vars({
13 | --f7-progressbar-bg-color: rgba(255,255,255,0.3);
14 | });
15 | });
16 | .md-vars({
17 | --f7-progressbar-height: 4px;
18 | --f7-progressbar-border-radius: 0px;
19 | });
20 | .md-color-vars({
21 | --f7-progressbar-bg-color: rgba(var(--f7-theme-color-rgb), 0.5);
22 | });
23 |
--------------------------------------------------------------------------------
/src/core/components/pull-to-refresh/pull-to-refresh-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | }
3 | .ios-vars({
4 | --f7-ptr-preloader-size: 28px;
5 | --f7-ptr-size: 44px;
6 | });
7 | .md-vars({
8 | --f7-ptr-preloader-size: 22px;
9 | --f7-ptr-size: 40px;
10 | });
11 | .md-color-vars({
12 | --f7-ptr-preloader-bg-color: var(--f7-md-surface-1);
13 | --f7-ptr-preloader-color: var(--f7-md-primary);
14 | });
15 |
--------------------------------------------------------------------------------
/src/core/components/radio/radio-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | /*
3 | --f7-radio-active-color: var(--f7-theme-color);
4 | */
5 | --f7-radio-border-radius: 50%;
6 | --f7-radio-extra-margin: 0px;
7 | .dark-vars({
8 | --f7-radio-inactive-color: rgba(255, 255, 255, 0.3);
9 | });
10 | }
11 | .ios-vars({
12 | --f7-radio-size: 22px;
13 | --f7-radio-border-width: 1px;
14 | .light-vars({
15 | --f7-radio-inactive-color: #c7c7cc;
16 | })
17 | });
18 | .md-vars({
19 | --f7-radio-size: 20px;
20 | --f7-radio-border-width: 2px;
21 | .light-vars({
22 | --f7-radio-inactive-color: #6d6d6d;
23 | })
24 | });
25 |
--------------------------------------------------------------------------------
/src/core/components/radio/radio.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Radio {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const RadioComponent: Framework7Plugin;
14 | export default RadioComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/radio/radio.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'radio',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/range/range-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .range-knob-label {
3 | margin-bottom: 6px;
4 | transform: translateX(-50%) translateY(100%) scale(0);
5 | }
6 | .range-knob-active-state .range-knob-label {
7 | transform: translateX(-50%) translateY(0%) scale(1);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/sheet/sheet-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/sheet/sheet-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .sheet-modal {
3 | .toolbar {
4 | a.link:not(.tab-link) {
5 | flex-shrink: 0;
6 | }
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --skeleton-color: #ccc;
3 | --skeleton-icon-color: rgba(0, 0, 0, 0.25);
4 | }
5 | .dark {
6 | --skeleton-color: #515151;
7 | --skeleton-icon-color: rgba(255, 255, 255, 0.25);
8 | }
9 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Skeleton {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const SkeletonComponent: Framework7Plugin;
14 | export default SkeletonComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'skeleton',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/skeleton/skeleton.less:
--------------------------------------------------------------------------------
1 | /* === Skeleton === */
2 | @import (inline) 'skeleton-elements/css/skeleton-elements.css';
3 |
4 | @import './skeleton-vars.less';
5 |
6 | .if-ios-theme({
7 | @import './skeleton-ios.less';
8 | });
9 | .if-md-theme({
10 | @import './skeleton-md.less';
11 | });
12 |
--------------------------------------------------------------------------------
/src/core/components/smart-select/smart-select-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/smart-select/smart-select-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/smart-select/smart-select-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | /*
3 | --f7-smart-select-sheet-bg: var(--f7-list-bg-color);
4 | --f7-smart-select-sheet-toolbar-border-color: var(--f7-bars-border-color);
5 | */
6 | }
7 |
--------------------------------------------------------------------------------
/src/core/components/sortable/sortable-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .sortable-handler {
3 | &:after {
4 | content: 'sort_ios';
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/core/components/sortable/sortable-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .sortable-handler {
3 | &:after {
4 | content: 'sort_md';
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/core/components/sortable/sortable-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | }
3 | .ios-vars({
4 | --f7-sortable-handler-width: 36px;
5 | --f7-sortable-sorting-item-box-shadow: 0px 2px 8px rgba(0,0,0,0.6);
6 | .light-vars({
7 | --f7-sortable-handler-color: rgba(0,0,0,0.22);
8 | --f7-sortable-sorting-item-bg-color: rgba(255,255,255,0.8);
9 | });
10 | .dark-vars({
11 | --f7-sortable-sorting-item-bg-color: rgba(50, 50, 50, 0.8);
12 | --f7-sortable-handler-color: rgba(255,255,255,0.55);
13 | });
14 | });
15 | .md-vars({
16 | --f7-sortable-handler-width: 42px;
17 | --f7-sortable-sorting-item-box-shadow: none;
18 | });
19 | .md-color-vars({
20 | --f7-sortable-handler-color: var(--f7-md-on-surface-variant);
21 | --f7-sortable-sorting-item-bg-color: var(--f7-md-surface-3);
22 | });
23 |
--------------------------------------------------------------------------------
/src/core/components/statusbar/statusbar-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/statusbar/statusbar-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/statusbar/statusbar.less:
--------------------------------------------------------------------------------
1 | /* === Statusbar === */
2 | .if-ios-theme({
3 | @import './statusbar-ios.less';
4 | });
5 | .if-md-theme({
6 | @import './statusbar-md.less';
7 | });
8 |
--------------------------------------------------------------------------------
/src/core/components/stepper/stepper-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .stepper-button,
3 | .stepper-button-minus,
4 | .stepper-button-plus {
5 | transition-duration: 300ms;
6 | transform: translate3d(0, 0, 0);
7 | overflow: hidden;
8 | }
9 | .stepper-fill,
10 | .stepper-fill-md {
11 | --f7-stepper-button-pressed-bg-color: var(
12 | --f7-stepper-fill-button-bg-color,
13 | var(--f7-theme-color)
14 | );
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/core/components/subnavbar/subnavbar.d.ts:
--------------------------------------------------------------------------------
1 | import { Framework7Plugin } from '../app/app-class.js';
2 |
3 | export namespace Subnavbar {
4 | interface AppMethods {}
5 | interface AppParams {}
6 | interface AppEvents {}
7 | }
8 |
9 | declare const SubnavbarComponent: Framework7Plugin;
10 |
11 | export default SubnavbarComponent;
12 |
--------------------------------------------------------------------------------
/src/core/components/subnavbar/subnavbar.js:
--------------------------------------------------------------------------------
1 | import $ from '../../shared/dom7.js';
2 |
3 | export default {
4 | name: 'subnavbar',
5 | on: {
6 | pageInit(page) {
7 | if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {
8 | page.$el.addClass('page-with-subnavbar');
9 | }
10 | const $innerSubnavbars = page.$el.find('.subnavbar').filter((subnavbarEl) => {
11 | return $(subnavbarEl).parents('.page')[0] === page.$el[0];
12 | });
13 | if ($innerSubnavbars.length) {
14 | page.$el.addClass('page-with-subnavbar');
15 | }
16 | },
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/src/core/components/swipeout/swipeout-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/swipeout/swipeout-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/swipeout/swipeout-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-swipeout-delete-button-bg-color: #ff3b30;
3 | --f7-swipeout-button-text-color: #fff;
4 | --f7-swipeout-button-padding-vertical: 0px;
5 | .light-vars({
6 | --f7-swipeout-button-bg-color: rgba(0,0,0,0.22);
7 | });
8 | .dark-vars({
9 | --f7-swipeout-button-bg-color: rgba(255,255,255,0.55);
10 | });
11 | }
12 | .ios-vars({
13 | --f7-swipeout-button-padding-horizontal: 30px;
14 | --f7-swipeout-button-font-size: inherit;
15 | --f7-swipeout-button-font-weight: inherit;
16 | });
17 | .md-vars({
18 | --f7-swipeout-button-padding-horizontal: 24px;
19 | --f7-swipeout-button-font-size: 14px;
20 | --f7-swipeout-button-font-weight: 500;
21 | .dark-vars({
22 | --f7-swipeout-button-text-color: #000;
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/core/components/swiper/swiper-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/swiper/swiper-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/swiper/swiper.less:
--------------------------------------------------------------------------------
1 | /* === Swiper === */
2 | @import (inline) 'swiper/swiper-bundle.css';
3 |
4 | .if-ios-theme({@import './swiper-ios.less' ;});
5 | .if-md-theme({@import './swiper-md.less' ;});
6 |
--------------------------------------------------------------------------------
/src/core/components/tabs/tabs-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/tabs/tabs-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/text-editor/text-editor-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | button.text-editor-button {
3 | transition: opacity 300ms;
4 | &.active-state {
5 | opacity: 0.3;
6 | transition-duration: 0ms;
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/components/text-editor/text-editor-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | button.text-editor-button {
3 | --f7-touch-ripple-color: rgba(var(--f7-theme-color-rgb), 0.25);
4 | }
5 | .text-editor-keyboard-toolbar {
6 | .toolbar-inner {
7 | padding-left: 8px;
8 | padding-right: 8px;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/timeline/timeline-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | .block-strong .timeline-item-inner {
3 | border-radius: 3px;
4 | border: 1px solid rgba(0, 0, 0, 0.1);
5 | }
6 | .timeline-year-title {
7 | span {
8 | margin-top: 3px;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/components/timeline/timeline-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | .timeline-year-title {
3 | span {
4 | margin-top: 2px;
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/core/components/timeline/timeline.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Timeline {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const TimelineComponent: Framework7Plugin;
14 | export default TimelineComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/timeline/timeline.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'timeline',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/toast/toast-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-toast-font-size: 14px;
3 | --f7-toast-icon-size: 48px;
4 | --f7-toast-max-width: 568px;
5 | }
6 | .ios-vars({
7 | --f7-toast-text-color: #fff;
8 | --f7-toast-bg-color: rgba(0,0,0,0.75);
9 | --f7-toast-bg-color-rgb: 0, 0, 0;
10 | --f7-toast-padding-horizontal: 16px;
11 | --f7-toast-padding-vertical: 12px;
12 | --f7-toast-border-radius: 8px;
13 | --f7-toast-button-min-width: 64px;
14 | });
15 | .md-vars({
16 | --f7-toast-padding-horizontal: 24px;
17 | --f7-toast-padding-vertical: 14px;
18 | --f7-toast-border-radius: 16px;
19 | --f7-toast-button-min-width: 64px;
20 | });
21 | .md-color-vars({
22 | --f7-toast-text-color: var(--f7-md-on-surface);
23 | --f7-toast-bg-color: var(--f7-md-surface-5);
24 | });
25 |
--------------------------------------------------------------------------------
/src/core/components/tooltip/tooltip-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/tooltip/tooltip-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/tooltip/tooltip-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-tooltip-padding: 8px 16px;
3 | --f7-tooltip-font-size: 14px;
4 | --f7-tooltip-font-weight: 500;
5 | --f7-tooltip-desktop-padding: 6px 8px;
6 | --f7-tooltip-desktop-font-size: 12px;
7 | }
8 | .ios-vars({
9 | --f7-tooltip-border-radius: 4px;
10 | --f7-tooltip-bg-color: rgba(0, 0, 0, 0.87);
11 | --f7-tooltip-text-color: #fff;
12 | });
13 | .md-vars({
14 | --f7-tooltip-border-radius: 8px;
15 | });
16 | .md-color-vars({
17 | --f7-tooltip-bg-color: var(--f7-md-secondary);
18 | --f7-tooltip-text-color: var(--f7-md-on-secondary);
19 | });
20 |
--------------------------------------------------------------------------------
/src/core/components/touch-ripple/touch-ripple-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/touch-ripple/touch-ripple-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/touch-ripple/touch-ripple-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-touch-ripple-black: rgba(0, 0, 0, 0.1);
3 | --f7-touch-ripple-white: rgba(255, 255, 255, 0.15);
4 | --f7-touch-ripple-color: var(--f7-touch-ripple-black);
5 | }
6 | .dark {
7 | --f7-touch-ripple-color: var(--f7-touch-ripple-white);
8 | }
9 |
--------------------------------------------------------------------------------
/src/core/components/touch-ripple/touch-ripple.d.ts:
--------------------------------------------------------------------------------
1 | import { Dom7Array } from 'dom7';
2 | import Framework7, {
3 | CSSSelector,
4 | Framework7EventsClass,
5 | Framework7Plugin,
6 | } from '../app/app-class.js';
7 |
8 | export namespace TouchRipple {
9 | interface TouchRipple {
10 | $rippleWaveEl: Dom7Array;
11 | rippleTransform: string;
12 | removing: boolean;
13 | remove(): void;
14 | }
15 | interface AppMethods {
16 | touchRipple: {
17 | create($el: Dom7Array, x: number, y: number): TouchRipple;
18 | };
19 | }
20 | interface AppParams {}
21 | interface AppEvents {}
22 | }
23 |
24 | declare const TouchRippleComponent: Framework7Plugin;
25 | export default TouchRippleComponent;
26 |
--------------------------------------------------------------------------------
/src/core/components/touch-ripple/touch-ripple.js:
--------------------------------------------------------------------------------
1 | import TouchRipple from './touch-ripple-class.js';
2 |
3 | export default {
4 | name: 'touch-ripple',
5 | static: {
6 | TouchRipple,
7 | },
8 | create() {
9 | const app = this;
10 | app.touchRipple = {
11 | create(...args) {
12 | return new TouchRipple(...args);
13 | },
14 | };
15 | },
16 | };
17 |
--------------------------------------------------------------------------------
/src/core/components/treeview/treeview-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/treeview/treeview-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/typography/typography-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/typography/typography-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/typography/typography-vars.less:
--------------------------------------------------------------------------------
1 | :root {
2 | --f7-typography-padding: 16px;
3 | --f7-typography-margin: 16px;
4 | }
5 |
--------------------------------------------------------------------------------
/src/core/components/typography/typography.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, {
2 | CSSSelector,
3 | Framework7EventsClass,
4 | Framework7Plugin,
5 | } from '../app/app-class.js';
6 |
7 | export namespace Typography {
8 | interface AppMethods {}
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const TypographyComponent: Framework7Plugin;
14 | export default TypographyComponent;
15 |
--------------------------------------------------------------------------------
/src/core/components/typography/typography.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'typography',
3 | };
4 |
--------------------------------------------------------------------------------
/src/core/components/view/view-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/view/view-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/view/view.less:
--------------------------------------------------------------------------------
1 | /* === Views === */
2 | .views,
3 | .view {
4 | position: relative;
5 | height: 100%;
6 | z-index: 5000;
7 | overflow: hidden;
8 | box-sizing: border-box;
9 | }
10 | .framework7-root {
11 | > .view,
12 | > .views {
13 | height: 100%;
14 | }
15 | }
16 | .view-resize-handler {
17 | width: 6px;
18 | height: 100%;
19 | position: absolute;
20 | left: var(--f7-page-master-width);
21 | margin-left: -3px;
22 | top: 0;
23 | cursor: col-resize;
24 | z-index: 1000;
25 | display: none;
26 | .view-master-detail & {
27 | display: block;
28 | }
29 | }
30 | .if-ios-theme({
31 | @import './view-ios.less';
32 | });
33 | .if-md-theme({
34 | @import './view-md.less';
35 | });
36 |
--------------------------------------------------------------------------------
/src/core/components/virtual-list/virtual-list-ios.less:
--------------------------------------------------------------------------------
1 | .ios {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/virtual-list/virtual-list-md.less:
--------------------------------------------------------------------------------
1 | .md {
2 | }
3 |
--------------------------------------------------------------------------------
/src/core/components/virtual-list/virtual-list.js:
--------------------------------------------------------------------------------
1 | import VirtualList from './virtual-list-class.js';
2 | import ConstructorMethods from '../../shared/constructor-methods.js';
3 |
4 | export default {
5 | name: 'virtualList',
6 | static: {
7 | VirtualList,
8 | },
9 | create() {
10 | const app = this;
11 | app.virtualList = ConstructorMethods({
12 | defaultSelector: '.virtual-list',
13 | constructor: VirtualList,
14 | app,
15 | domProp: 'f7VirtualList',
16 | });
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/src/core/components/virtual-list/virtual-list.less:
--------------------------------------------------------------------------------
1 | /* === Virtual List === */
2 | .if-ios-theme({
3 | @import './virtual-list-ios.less';
4 | });
5 | .if-md-theme({
6 | @import './virtual-list-md.less';
7 | });
8 |
--------------------------------------------------------------------------------
/src/core/framework7.d.ts:
--------------------------------------------------------------------------------
1 | import Dom7 from 'dom7';
2 | // IMPORT_BASE
3 |
4 | import { getSupport } from './shared/get-support.js';
5 | import { getDevice } from './shared/get-device.js';
6 | import { Utils } from './shared/utils.js';
7 |
8 | // IMPORT_MODULES
9 | import { ComponentFunction as Component } from './modules/component/component.js';
10 | import { StoreObject as Store, StoreParameters, createStore } from './modules/store/store.js';
11 |
12 | // IMPORT_COMPONENTS
13 |
14 | declare module './components/app/app-class.js' {
15 | // INSTALL
16 | }
17 |
18 | declare const utils: Utils;
19 |
20 | export { getSupport, getDevice, utils, Dom7, Component, Store, StoreParameters, createStore };
21 | export default Framework7;
22 |
--------------------------------------------------------------------------------
/src/core/icons/font/framework7-core-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/icons/font/framework7-core-icons.ttf
--------------------------------------------------------------------------------
/src/core/icons/font/framework7-core-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/icons/font/framework7-core-icons.woff
--------------------------------------------------------------------------------
/src/core/icons/font/framework7-core-icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/core/icons/font/framework7-core-icons.woff2
--------------------------------------------------------------------------------
/src/core/icons/svg/arrow_bottom_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | arrow_bottom_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/arrow_left_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | arrow_left_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/arrow_right_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | arrow_right_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/checkbox_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/checkbox_ios.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/checkbox_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | checkbox_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_down
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_down_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_left
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_left_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_left_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_left_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_right
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_right_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_right_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_right_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_up.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | chevron_up
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/core/icons/svg/chevron_up_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/delete_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | delete_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/core/icons/svg/delete_round_md.svg:
--------------------------------------------------------------------------------
1 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/src/core/icons/svg/ptr_arrow_ios.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/radio_ios.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/search_aurora.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/core/icons/svg/sort_md.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | sort_md
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/core/less/plugin.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 |
3 | function base64Encode(file) {
4 | // read binary data
5 | const bitmap = fs.readFileSync(file);
6 | // convert binary data to base64 encoded string
7 | return Buffer.from(bitmap).toString('base64');
8 | }
9 |
10 | module.exports = {
11 | install(less, pluginManager, functions) {
12 | functions.add('framework7_coreIconsFont', () => {
13 | const iconsFontBase64 = base64Encode('./src/core/icons/font/framework7-core-icons.woff');
14 | return iconsFontBase64;
15 | });
16 | },
17 | };
18 |
--------------------------------------------------------------------------------
/src/core/less/vars.less:
--------------------------------------------------------------------------------
1 | @breakpoints: {
2 | xsmall: 480px;
3 | small: 568px;
4 | medium: 768px;
5 | large: 1024px;
6 | xlarge: 1200px;
7 | };
8 |
--------------------------------------------------------------------------------
/src/core/modules/clicks/clicks.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, { Framework7Plugin } from '../../components/app/app-class';
2 |
3 | export namespace Clicks {
4 | interface AppMethods {}
5 | interface AppParams {
6 | /** Object with clicks-module related parameters */
7 | clicks?:
8 | | {
9 | /** CSS selector for links that should be treated as external and shouldn't be handled by Framework7. For example such '.external' value will match to links like (with class "external") (default '.external') */
10 | externalLinks?: string;
11 | }
12 | | undefined;
13 | }
14 | interface AppEvents {}
15 | }
16 |
17 | declare const ClicksModule: Framework7Plugin;
18 |
19 | export default ClicksModule;
20 |
--------------------------------------------------------------------------------
/src/core/modules/component/$h.js:
--------------------------------------------------------------------------------
1 | import htm from 'htm';
2 | import { flattenArray } from '../../shared/utils.js';
3 |
4 | const ignoreChildren = [false, null, '', undefined];
5 |
6 | const h = (type, props, ...children) => {
7 | return {
8 | type,
9 | props: props || {},
10 | children: flattenArray(children.filter((child) => ignoreChildren.indexOf(child) < 0)),
11 | };
12 | };
13 |
14 | const $h = htm.bind(h);
15 |
16 | export default $h;
17 |
--------------------------------------------------------------------------------
/src/core/modules/component/$jsx.js:
--------------------------------------------------------------------------------
1 | import { flattenArray } from '../../shared/utils.js';
2 |
3 | const ignoreChildren = [false, null, '', undefined];
4 |
5 | const $jsx = (type, props, ...children) => {
6 | const flatChildren = flattenArray(
7 | (children || []).filter((child) => ignoreChildren.indexOf(child) < 0),
8 | );
9 | if (type === 'Fragment') {
10 | return flatChildren;
11 | }
12 | return {
13 | type,
14 | props: props || {},
15 | children: flatChildren,
16 | };
17 | };
18 |
19 | export default $jsx;
20 |
--------------------------------------------------------------------------------
/src/core/modules/component/custom-components.js:
--------------------------------------------------------------------------------
1 | export default {};
2 |
--------------------------------------------------------------------------------
/src/core/modules/component/patch.js:
--------------------------------------------------------------------------------
1 | /* eslint import/no-named-as-default: off */
2 | import { init } from './snabbdom/snabbdom.js';
3 | import attributesModule from './snabbdom/modules/attributes.js';
4 | import propsModule from './snabbdom/modules/props.js';
5 | import styleModule from './snabbdom/modules/style.js';
6 | import eventListenersModule from './eventslisteners.js';
7 |
8 | const patch = init([attributesModule, propsModule, styleModule, eventListenersModule]);
9 |
10 | export default patch;
11 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/h.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode, VNodeData } from './vnode.js';
2 | export declare type VNodes = Array;
3 | export declare type VNodesSparse = VNode | Array;
4 | export declare function h (sel: string): VNode;
5 | export declare function h (sel: string, data: VNodeData): VNode;
6 | export declare function h (sel: string, text: string): VNode;
7 | export declare function h (sel: string, children: VNodesSparse): VNode;
8 | export declare function h (sel: string, data: VNodeData, text: string): VNode;
9 | export declare function h (sel: string, data: VNodeData, children: VNodesSparse): VNode;
10 | export default h;
11 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/helpers/attachto.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode } from '../vnode.js';
2 | export interface AttachData {
3 | [key: string]: any;
4 | [i: number]: any;
5 | placeholder?: any;
6 | real?: Node;
7 | }
8 | export declare function attachTo (target: Element, vnode: VNode): VNode;
9 | export default attachTo;
10 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/hooks.js:
--------------------------------------------------------------------------------
1 | //# sourceMappingURL=hooks.js.map
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/hooks.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/is.d.ts:
--------------------------------------------------------------------------------
1 | export declare const array: (arg: any) => arg is any[];
2 | export declare function primitive(s: any): s is (string | number);
3 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/is.js:
--------------------------------------------------------------------------------
1 | export var array = Array.isArray;
2 | export function primitive(s) {
3 | return typeof s === 'string' || typeof s === 'number';
4 | }
5 | //# sourceMappingURL=is.js.map
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/is.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"is.js","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;AACnC,MAAM,oBAAoB,CAAM;IAC9B,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AACxD,CAAC"}
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/attributes.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type Attrs = Record;
3 | export declare const attributesModule: Module;
4 | export default attributesModule;
5 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/class.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type Classes = Record;
3 | export declare const classModule: Module;
4 | export default classModule;
5 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/class.js:
--------------------------------------------------------------------------------
1 | function updateClass(oldVnode, vnode) {
2 | var cur, name, elm = vnode.elm, oldClass = oldVnode.data.class, klass = vnode.data.class;
3 | if (!oldClass && !klass)
4 | return;
5 | if (oldClass === klass)
6 | return;
7 | oldClass = oldClass || {};
8 | klass = klass || {};
9 | for (name in oldClass) {
10 | if (!klass[name]) {
11 | elm.classList.remove(name);
12 | }
13 | }
14 | for (name in klass) {
15 | cur = klass[name];
16 | if (cur !== oldClass[name]) {
17 | elm.classList[cur ? 'add' : 'remove'](name);
18 | }
19 | }
20 | }
21 | export var classModule = { create: updateClass, update: updateClass };
22 | export default classModule;
23 | //# sourceMappingURL=class.js.map
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/dataset.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type Dataset = Record;
3 | export declare const datasetModule: Module;
4 | export default datasetModule;
5 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/eventlisteners.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type On = {
3 | [N in keyof HTMLElementEventMap]?: (ev: HTMLElementEventMap[N]) => void;
4 | } & {
5 | [event: string]: EventListener;
6 | };
7 | export declare const eventListenersModule: Module;
8 | export default eventListenersModule;
9 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/hero.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type Hero = {
3 | id: string;
4 | };
5 | export declare const heroModule: Module;
6 | export default heroModule;
7 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/module.d.ts:
--------------------------------------------------------------------------------
1 | import { PreHook, CreateHook, UpdateHook, DestroyHook, RemoveHook, PostHook } from '../hooks.js';
2 | export interface Module {
3 | pre: PreHook;
4 | create: CreateHook;
5 | update: UpdateHook;
6 | destroy: DestroyHook;
7 | remove: RemoveHook;
8 | post: PostHook;
9 | }
10 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/module.js:
--------------------------------------------------------------------------------
1 | //# sourceMappingURL=module.js.map
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/module.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/modules/module.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/props.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type Props = Record;
3 | export declare const propsModule: Module;
4 | export default propsModule;
5 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/modules/style.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './module.js';
2 | export declare type VNodeStyle = Record & {
3 | delayed?: Record;
4 | remove?: Record;
5 | };
6 | export declare const styleModule: Module;
7 | export default styleModule;
8 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/snabbdom.bundle.d.ts:
--------------------------------------------------------------------------------
1 | export declare const snabbdomBundle: {
2 | patch: (oldVNode: any, vnode: any) => any;
3 | h: any;
4 | };
5 | export default snabbdomBundle;
6 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/snabbdom.bundle.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"snabbdom.bundle.js","sourceRoot":"","sources":["../src/snabbdom.bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC,CAAC,yCAAyC;AAChG,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC,CAAC,kCAAkC;AAC/E,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC,CAAC,yCAAyC;AACtF,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC,CAAC,0DAA0D;AACvG,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC,CAAC,2BAA2B;AAC1F,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC,CAAC,sCAAsC;AAC7D,IAAI,KAAK,GAAG,IAAI,CAAC;IACf,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,WAAW;IACX,oBAAoB;CACrB,CAAuC,CAAC;AACzC,MAAM,CAAC,IAAM,cAAc,GAAG,EAAE,KAAK,OAAA,EAAE,CAAC,EAAE,CAAQ,EAAE,CAAC;AACrD,eAAe,cAAc,CAAC"}
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/snabbdom.d.ts:
--------------------------------------------------------------------------------
1 | import { Module } from './modules/module.js';
2 | import { VNode } from './vnode.js';
3 | import { DOMAPI } from './htmldomapi.js';
4 | export { h } from './h.js';
5 | export { thunk } from './thunk.js';
6 | export declare function init (modules: Array>, domApi?: DOMAPI): (oldVnode: Element | VNode, vnode: VNode) => VNode;
7 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/thunk.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode, VNodeData } from './vnode.js';
2 | export interface ThunkData extends VNodeData {
3 | fn: () => VNode;
4 | args: Array;
5 | }
6 | export interface Thunk extends VNode {
7 | data: ThunkData;
8 | }
9 | export interface ThunkFn {
10 | (sel: string, fn: Function, args: Array): Thunk;
11 | (sel: string, key: any, fn: Function, args: Array): Thunk;
12 | }
13 | export declare const thunk: ThunkFn;
14 | export default thunk;
15 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/tovnode.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode } from './vnode.js';
2 | import { DOMAPI } from './htmldomapi.js';
3 | export declare function toVNode (node: Node, domApi?: DOMAPI): VNode;
4 | export default toVNode;
5 |
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/vnode.js:
--------------------------------------------------------------------------------
1 | export function vnode(sel, data, children, text, elm) {
2 | var key = data === undefined ? undefined : data.key;
3 | return { sel: sel, data: data, children: children,
4 | text: text, elm: elm, key: key };
5 | }
6 | export default vnode;
7 | //# sourceMappingURL=vnode.js.map
--------------------------------------------------------------------------------
/src/core/modules/component/snabbdom/vnode.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../src/vnode.ts"],"names":[],"mappings":"AAsCA,MAAM,gBAAgB,GAAuB,EACvB,IAAqB,EACrB,QAA2C,EAC3C,IAAwB,EACxB,GAA+B;IACnD,IAAI,GAAG,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpD,MAAM,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ;QACxC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAC,CAAC;AAC1C,CAAC;AAED,eAAe,KAAK,CAAC"}
--------------------------------------------------------------------------------
/src/core/modules/device/device.d.ts:
--------------------------------------------------------------------------------
1 | import { Device } from '../../shared/get-device.js';
2 | import Framework7, { Framework7Plugin } from '../../components/app/app-class.js';
3 |
4 | export namespace Device {
5 | interface AppMethods {
6 | /** Object with properties about device */
7 | device: Device;
8 | }
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 | declare const DeviceModule: Framework7Plugin;
13 |
14 | export default DeviceModule;
15 |
--------------------------------------------------------------------------------
/src/core/modules/history/history.js:
--------------------------------------------------------------------------------
1 | import History from '../../shared/history.js';
2 |
3 | export default {
4 | name: 'history',
5 | static: {
6 | history: History,
7 | },
8 | on: {
9 | init() {
10 | History.init(this);
11 | },
12 | },
13 | };
14 |
--------------------------------------------------------------------------------
/src/core/modules/resize/resize.d.ts:
--------------------------------------------------------------------------------
1 | import Framework7, { Framework7Plugin } from '../../components/app/app-class.js';
2 |
3 | export namespace Resize {
4 | interface AppMethods {
5 | /** App width in px */
6 | width: number;
7 | /** App height in px */
8 | height: number;
9 | /** App left offset in px */
10 | left: number;
11 | /** App top offset in px */
12 | top: number;
13 | }
14 | interface AppParams {}
15 | interface AppEvents {
16 | /** Event will be fired on app resize (window resize). */
17 | resize: () => void;
18 | /** Event will be fired on app orientation change (window orientantion change). */
19 | orientationchange: () => void;
20 | }
21 | }
22 |
23 | declare const ResizeModule: Framework7Plugin;
24 |
25 | export default ResizeModule;
26 |
--------------------------------------------------------------------------------
/src/core/modules/router/app-router-check.js:
--------------------------------------------------------------------------------
1 | export default function appRouterCheck(router, method) {
2 | if (!router.view) {
3 | throw new Error(
4 | `Framework7: it is not allowed to use router methods on global app router. Use router methods only on related View, e.g. app.views.main.router.${method}(...)`,
5 | );
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/core/modules/router/async-component.js:
--------------------------------------------------------------------------------
1 | export default function asyncComponent(router, component, resolve, reject) {
2 | function resolvePromise(componentPromise) {
3 | componentPromise
4 | .then((c) => {
5 | // eslint-disable-next-line
6 | resolve({ component: c.default || c._default || c });
7 | })
8 | .catch((err) => {
9 | reject();
10 | throw new Error(err, { cause: err });
11 | });
12 | }
13 | if (component instanceof Promise) {
14 | resolvePromise(component);
15 | return;
16 | }
17 | const asyncComponentResult = component.call(router);
18 | if (asyncComponentResult instanceof Promise) {
19 | resolvePromise(asyncComponentResult);
20 | } else {
21 | resolve({ component: asyncComponentResult });
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/core/modules/router/router.js:
--------------------------------------------------------------------------------
1 | import Router from './router-class.js';
2 |
3 | export default {
4 | name: 'router',
5 | static: {
6 | Router,
7 | },
8 | instance: {
9 | cache: {
10 | xhr: [],
11 | templates: [],
12 | components: [],
13 | },
14 | },
15 | create() {
16 | const instance = this;
17 | if (instance.app) {
18 | // View Router
19 | if (instance.params.router) {
20 | instance.router = new Router(instance.app, instance);
21 | }
22 | } else {
23 | // App Router
24 | instance.router = new Router(instance);
25 | }
26 | },
27 | };
28 |
--------------------------------------------------------------------------------
/src/core/modules/store/store.js:
--------------------------------------------------------------------------------
1 | import createStore from './create-store.js';
2 |
3 | export { createStore };
4 | export default {
5 | name: 'store',
6 | static: { createStore },
7 | proto: { createStore },
8 | };
9 |
--------------------------------------------------------------------------------
/src/core/modules/support/support.d.ts:
--------------------------------------------------------------------------------
1 | import { Support } from '../../shared/get-support.js';
2 | import Framework7, { Framework7Plugin } from '../../components/app/app-class.js';
3 |
4 | export namespace Support {
5 | interface AppMethods {
6 | /** Object with properties about supported features */
7 | support: Support;
8 | }
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const SupportModule: Framework7Plugin;
14 |
15 | export default SupportModule;
16 |
--------------------------------------------------------------------------------
/src/core/modules/support/support.js:
--------------------------------------------------------------------------------
1 | import { getSupport } from '../../shared/get-support.js';
2 |
3 | export default {
4 | name: 'support',
5 | static: {
6 | getSupport,
7 | },
8 | };
9 |
--------------------------------------------------------------------------------
/src/core/modules/utils/utils.d.ts:
--------------------------------------------------------------------------------
1 | import { Utils } from '../../shared/utils.js';
2 | import Framework7, { Framework7Plugin } from '../../components/app/app-class.js';
3 |
4 | export namespace Utils {
5 | interface AppMethods {
6 | /** Object with set of helper methods */
7 | utils: Utils;
8 | }
9 | interface AppParams {}
10 | interface AppEvents {}
11 | }
12 |
13 | declare const UtilsModule: Framework7Plugin;
14 |
15 | export default UtilsModule;
16 |
--------------------------------------------------------------------------------
/src/core/modules/utils/utils.js:
--------------------------------------------------------------------------------
1 | import * as utils from '../../shared/utils.js';
2 |
3 | export default {
4 | name: 'utils',
5 | proto: {
6 | utils,
7 | },
8 | static: {
9 | utils,
10 | },
11 | };
12 |
--------------------------------------------------------------------------------
/src/core/shared/dom7.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import * as methods from 'dom7';
3 |
4 | Object.keys(methods).forEach((methodName) => {
5 | if (methodName === '$') return;
6 | methods.$.fn[methodName] = methods[methodName];
7 | });
8 |
9 | export default methods.$;
10 |
--------------------------------------------------------------------------------
/src/core/shared/get-support.d.ts:
--------------------------------------------------------------------------------
1 | export interface Support {
2 | /** Touch events support (touchstart, touchmove, touchend) */
3 | touch: boolean;
4 | /** Pointer events support */
5 | pointerEvents: boolean;
6 | /** Passive event listener support */
7 | passiveListener: boolean;
8 | /** Intersection Observer support */
9 | intersectionObserver: boolean;
10 | }
11 |
12 | export const getSupport: () => Support;
13 |
--------------------------------------------------------------------------------
/src/react/components/skeleton-avatar.jsx:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonAvatar } from 'skeleton-elements/react';
3 |
4 | export default SkeletonAvatar;
5 |
--------------------------------------------------------------------------------
/src/react/components/skeleton-block.jsx:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonBlock } from 'skeleton-elements/react';
3 |
4 | export default SkeletonBlock;
5 |
--------------------------------------------------------------------------------
/src/react/components/skeleton-image.jsx:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonImage } from 'skeleton-elements/react';
3 |
4 | export default SkeletonImage;
5 |
--------------------------------------------------------------------------------
/src/react/components/skeleton-text.jsx:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonText } from 'skeleton-elements/react';
3 |
4 | export default SkeletonText;
5 |
--------------------------------------------------------------------------------
/src/react/framework7-react.js:
--------------------------------------------------------------------------------
1 | import Framework7React from './shared/plugin.js';
2 | import { f7, f7ready, theme } from './shared/f7.js';
3 | import { useStore } from './shared/use-store.js';
4 |
5 | // IMPORT_COMPONENTS
6 |
7 | // EXPORT_COMPONENTS
8 | export { f7, f7ready, theme, useStore };
9 | export default Framework7React;
10 |
--------------------------------------------------------------------------------
/src/react/shared/list-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const ListContext = React.createContext({
4 | listIsMedia: false,
5 | listIsSimple: false,
6 | listIsSortable: false,
7 | listIsSortableOpposite: false,
8 | });
9 |
10 | export { ListContext };
11 |
--------------------------------------------------------------------------------
/src/react/shared/modal-state-classes.js:
--------------------------------------------------------------------------------
1 | export const modalStateClasses = ({ isOpened, isClosing } = {}) => {
2 | return {
3 | 'modal-in': isOpened.current && !isClosing.current,
4 | 'modal-out': isClosing.current,
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/src/react/shared/router-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const RouterContext = React.createContext({
4 | route: null,
5 | router: null,
6 | });
7 |
8 | export { RouterContext };
9 |
--------------------------------------------------------------------------------
/src/react/shared/tabbar-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const TabbarContext = React.createContext({
4 | tabbarHasIcons: false,
5 | });
6 |
7 | export { TabbarContext };
8 |
--------------------------------------------------------------------------------
/src/react/shared/tabs-swipeable-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const TabsSwipeableContext = React.createContext(false);
4 |
5 | export { TabsSwipeableContext };
6 |
--------------------------------------------------------------------------------
/src/react/shared/use-async-component.js:
--------------------------------------------------------------------------------
1 | import React, { lazy, Suspense } from 'react';
2 |
3 | export const useAsyncComponent = (component, props, key) => {
4 | const Component = lazy(component);
5 | return (
6 |
7 |
8 |
9 | );
10 | };
11 |
--------------------------------------------------------------------------------
/src/react/shared/use-isomorphic-layout-effect.js:
--------------------------------------------------------------------------------
1 | import { useEffect, useLayoutEffect } from 'react';
2 |
3 | function useIsomorphicLayoutEffect(callback, deps) {
4 | // eslint-disable-next-line
5 | if (typeof window === 'undefined') return useEffect(callback, deps);
6 | return useLayoutEffect(callback, deps);
7 | }
8 |
9 | export { useIsomorphicLayoutEffect };
10 |
--------------------------------------------------------------------------------
/src/react/shared/use-route-props.js:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 |
3 | export const useRouteProps = (elRef, { routeProps } = {}) => {
4 | useEffect(() => {
5 | if (elRef.current) {
6 | elRef.current.f7RouteProps = routeProps;
7 | }
8 | return () => {
9 | if (elRef.current && elRef.current.f7RouteProps) {
10 | delete elRef.current.f7RouteProps;
11 | }
12 | };
13 | }, [routeProps]);
14 | };
15 |
--------------------------------------------------------------------------------
/src/react/shared/use-smart-select.js:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import { f7ready, f7 } from './f7.js';
3 | import { extend } from './utils.js';
4 |
5 | export const useSmartSelect = (smartSelect, smartSelectParams, f7SmartSelect, getEl) => {
6 | const onMount = () => {
7 | f7ready(() => {
8 | if (smartSelect) {
9 | const ssParams = extend({ el: getEl() }, smartSelectParams || {});
10 | f7SmartSelect.current = f7.smartSelect.create(ssParams);
11 | }
12 | });
13 | };
14 | const onDestroy = () => {
15 | if (f7SmartSelect.current && f7SmartSelect.current.destroy) {
16 | f7SmartSelect.current.destroy();
17 | }
18 | f7SmartSelect.current = null;
19 | };
20 | useEffect(() => {
21 | onMount();
22 | return onDestroy;
23 | }, []);
24 | };
25 |
--------------------------------------------------------------------------------
/src/react/shared/use-theme.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import { f7, f7ready, theme } from './f7.js';
3 |
4 | export const useTheme = () => {
5 | const [t, setTheme] = useState(f7 ? theme : null);
6 | if (!f7) {
7 | f7ready(() => {
8 | setTheme(theme);
9 | });
10 | }
11 | return t;
12 | };
13 |
--------------------------------------------------------------------------------
/src/react/shared/watch-prop.js:
--------------------------------------------------------------------------------
1 | import { useRef } from 'react';
2 | import { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';
3 |
4 | export const watchProp = (value, callback) => {
5 | const valueRef = useRef(value);
6 |
7 | useIsomorphicLayoutEffect(() => {
8 | if (value !== valueRef.current && callback) {
9 | callback(value, valueRef.current);
10 | }
11 | valueRef.current = value;
12 | }, [value]);
13 | };
14 |
--------------------------------------------------------------------------------
/src/svelte/components/accordion-content.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/accordion-toggle.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/accordion.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/svelte/components/actions-group.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/badge.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/svelte/components/block-footer.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/block-header.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/block-title.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/svelte/components/breadcrumbs-collapsed.svelte:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/svelte/components/breadcrumbs-item.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/svelte/components/breadcrumbs-separator.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/svelte/components/breadcrumbs.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/svelte/components/card-content.svelte:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/svelte/components/card-footer.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/card-header.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/fab-backdrop.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/svelte/components/fab-buttons.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/svelte/components/login-screen-title.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/messagebar-attachments.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/messagebar-sheet-item.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/messagebar-sheet.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/messages-title.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/nav-right.svelte:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/svelte/components/nav-title-large.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
17 |
--------------------------------------------------------------------------------
/src/svelte/components/router-context-provider.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/svelte/components/skeleton-avatar.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonAvatar } from 'skeleton-elements/svelte';
3 |
4 | export default SkeletonAvatar;
5 |
--------------------------------------------------------------------------------
/src/svelte/components/skeleton-block.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonBlock } from 'skeleton-elements/svelte';
3 |
4 | export default SkeletonBlock;
5 |
--------------------------------------------------------------------------------
/src/svelte/components/skeleton-image.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonImage } from 'skeleton-elements/svelte';
3 |
4 | export default SkeletonImage;
5 |
--------------------------------------------------------------------------------
/src/svelte/components/skeleton-text.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { SkeletonText } from 'skeleton-elements/svelte';
3 |
4 | export default SkeletonText;
5 |
--------------------------------------------------------------------------------
/src/svelte/components/swipeout-actions.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/svelte/components/treeview.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/svelte/components/use-icon.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 | {#if icon.badge}
10 | {icon.badge.content}
11 | {/if}
12 |
13 |
--------------------------------------------------------------------------------
/src/svelte/components/views.svelte:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/svelte/framework7-svelte.js:
--------------------------------------------------------------------------------
1 | import Framework7Svelte from './shared/plugin.js';
2 | import { f7, f7ready, theme, app } from './shared/f7.js';
3 | import { useStore } from './shared/use-store.js';
4 |
5 | // IMPORT_COMPONENTS
6 |
7 | // EXPORT_COMPONENTS
8 | export { f7, f7ready, theme, useStore, app };
9 | export default Framework7Svelte;
10 |
--------------------------------------------------------------------------------
/src/svelte/shared/get-reactive-context.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { getContext, onDestroy } from 'svelte';
3 |
4 | export const getReactiveContext = (name, setValue) => {
5 | const ctx = getContext(name);
6 | if (!ctx) return undefined;
7 | const { value, subscribe, unsubscribe } = ctx;
8 | subscribe(setValue);
9 | onDestroy(() => {
10 | unsubscribe(setValue);
11 | });
12 | return value;
13 | };
14 |
--------------------------------------------------------------------------------
/src/svelte/shared/list-context.js:
--------------------------------------------------------------------------------
1 | // import React from 'react';
2 |
3 | // const ListContext = React.createContext({
4 | // listIsMedia: false,
5 | // listIsSimple: false,
6 | // listIsSortable: false,
7 | // listIsSortableOpposite: false,
8 | // });
9 |
10 | // export { ListContext };
11 |
--------------------------------------------------------------------------------
/src/svelte/shared/modal-state-classes.js:
--------------------------------------------------------------------------------
1 | export const modalStateClasses = ({ isOpened, isClosing } = {}) => {
2 | return {
3 | 'modal-in': isOpened && !isClosing,
4 | 'modal-out': isClosing,
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/src/svelte/shared/router-context.js:
--------------------------------------------------------------------------------
1 | // import React from 'react';
2 |
3 | // const RouterContext = React.createContext({
4 | // route: null,
5 | // router: null,
6 | // });
7 |
8 | // export { RouterContext };
9 |
--------------------------------------------------------------------------------
/src/svelte/shared/use-icon.js:
--------------------------------------------------------------------------------
1 | export const useIcon = (props = {}) => {
2 | const {
3 | icon,
4 | iconMaterial,
5 | iconF7,
6 | iconMd,
7 | iconIos,
8 | iconColor,
9 | iconSize,
10 | iconBadge,
11 | badgeColor,
12 | iconBadgeColor,
13 | } = props;
14 | if (icon || iconMaterial || iconF7 || iconMd || iconIos) {
15 | return {
16 | props: {
17 | material: iconMaterial,
18 | f7: iconF7,
19 | icon,
20 | md: iconMd,
21 | ios: iconIos,
22 | color: iconColor,
23 | size: iconSize,
24 | },
25 | badge:
26 | iconBadge || iconBadge === 0
27 | ? { props: { color: badgeColor || iconBadgeColor }, content: iconBadge }
28 | : null,
29 | };
30 | }
31 | return null;
32 | };
33 |
--------------------------------------------------------------------------------
/src/svelte/shared/use-route-props.js:
--------------------------------------------------------------------------------
1 | export const useRouteProps = (el, routeProps) => {
2 | if (el && routeProps) {
3 | el.f7RouteProps = routeProps;
4 | }
5 |
6 | return {
7 | update(newValue) {
8 | if (el && el.f7RouteProps && !newValue) delete el.f7RouteProps;
9 | else if (el && newValue) el.f7RouteProps = newValue;
10 | },
11 | destroy() {
12 | if (el && routeProps) {
13 | delete el.f7RouteProps;
14 | }
15 | },
16 | };
17 | };
18 |
--------------------------------------------------------------------------------
/src/svelte/shared/use-smart-select.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line
2 | import { onMount, onDestroy } from 'svelte';
3 | import { f7ready, app } from './f7.js';
4 | import { extend } from './utils.js';
5 |
6 | export const useSmartSelect = (props, setInstance, getEl) => {
7 | let f7SmartSelect;
8 | onMount(() => {
9 | f7ready(() => {
10 | if (props.smartSelect) {
11 | const ssParams = extend({ el: getEl() }, props.smartSelectParams || {});
12 | f7SmartSelect = app.f7.smartSelect.create(ssParams);
13 | setInstance(f7SmartSelect);
14 | }
15 | });
16 | });
17 | onDestroy(() => {
18 | if (f7SmartSelect && f7SmartSelect.destroy) {
19 | f7SmartSelect.destroy();
20 | }
21 | f7SmartSelect = null;
22 | setInstance(f7SmartSelect);
23 | });
24 | };
25 |
--------------------------------------------------------------------------------
/src/svelte/shared/use-theme.js:
--------------------------------------------------------------------------------
1 | import { f7ready, app } from './f7.js';
2 |
3 | export const useTheme = (set) => {
4 | const t = app.f7 ? app.theme : null;
5 | if (!app.f7) {
6 | f7ready(() => {
7 | set(app.theme);
8 | });
9 | }
10 | return t;
11 | };
12 |
--------------------------------------------------------------------------------
/src/vue-temp/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/framework7io/framework7/8484d587d937e0b1f5146ac58f44a57afb5d5598/src/vue-temp/.gitkeep
--------------------------------------------------------------------------------
/src/vue/components/accordion-content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/accordion-toggle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/accordion.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
29 |
--------------------------------------------------------------------------------
/src/vue/components/actions-group.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/badge.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
33 |
--------------------------------------------------------------------------------
/src/vue/components/block-footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/block-header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/breadcrumbs-collapsed.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/breadcrumbs-item.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
23 |
--------------------------------------------------------------------------------
/src/vue/components/breadcrumbs-separator.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
19 |
--------------------------------------------------------------------------------
/src/vue/components/breadcrumbs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
--------------------------------------------------------------------------------
/src/vue/components/card-content.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
34 |
--------------------------------------------------------------------------------
/src/vue/components/card-footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/card-header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/fab-backdrop.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/fab-buttons.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
28 |
--------------------------------------------------------------------------------
/src/vue/components/login-screen-title.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/messagebar-attachments.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/messagebar-sheet-item.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/messagebar-sheet.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/messages-title.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/nav-right.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
31 |
--------------------------------------------------------------------------------
/src/vue/components/nav-title-large.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/skeleton-avatar.vue:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/vue/components/skeleton-block.vue:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/vue/components/skeleton-image.vue:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/vue/components/skeleton-text.vue:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/vue/components/treeview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
22 |
--------------------------------------------------------------------------------
/src/vue/components/use-icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ icon.badge.content }}
4 |
5 |
6 |
21 |
--------------------------------------------------------------------------------
/src/vue/components/views.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
31 |
--------------------------------------------------------------------------------
/src/vue/framework7-vue-bundle.d.ts:
--------------------------------------------------------------------------------
1 | export * from '.';
2 |
3 | declare const registerComponents: (app: any) => void;
4 |
5 | export { registerComponents };
6 |
--------------------------------------------------------------------------------
/src/vue/framework7-vue.js:
--------------------------------------------------------------------------------
1 | import Framework7Vue from './shared/plugin.js';
2 | import { f7, f7ready, theme } from './shared/f7.js';
3 | import { useStore } from './shared/use-store.js';
4 |
5 | // IMPORT_COMPONENTS
6 |
7 | // EXPORT_COMPONENTS
8 | export { f7, f7ready, theme, useStore };
9 | export default Framework7Vue;
10 |
--------------------------------------------------------------------------------
/src/vue/shared/modal-state-classes.js:
--------------------------------------------------------------------------------
1 | export const modalStateClasses = ({ isOpened, isClosing } = {}) => {
2 | return {
3 | 'modal-in': isOpened && !isClosing,
4 | 'modal-out': isClosing,
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/src/vue/shared/use-icon.js:
--------------------------------------------------------------------------------
1 | export const useIcon = (props = {}) => {
2 | const {
3 | icon,
4 | iconMaterial,
5 | iconF7,
6 | iconMd,
7 | iconIos,
8 | iconColor,
9 | iconSize,
10 | iconBadge,
11 | badgeColor,
12 | iconBadgeColor,
13 | } = props;
14 | if (icon || iconMaterial || iconF7 || iconMd || iconIos) {
15 | return {
16 | props: {
17 | material: iconMaterial,
18 | f7: iconF7,
19 | icon,
20 | md: iconMd,
21 | ios: iconIos,
22 | color: iconColor,
23 | size: iconSize,
24 | },
25 | badge:
26 | iconBadge || iconBadge === 0
27 | ? { props: { color: badgeColor || iconBadgeColor }, content: iconBadge }
28 | : null,
29 | };
30 | }
31 | return null;
32 | };
33 |
--------------------------------------------------------------------------------
/src/vue/shared/use-route-props.js:
--------------------------------------------------------------------------------
1 | import { onMounted, onUpdated } from 'vue';
2 |
3 | export const useRouteProps = (elRef, { routeProps } = {}) => {
4 | onMounted(() => {
5 | if (elRef.value && routeProps) {
6 | elRef.value.f7RouteProps = routeProps;
7 | }
8 | });
9 | onUpdated(() => {
10 | if (elRef.value && routeProps) {
11 | elRef.value.f7RouteProps = routeProps;
12 | } else if (elRef.value && elRef.value.f7RouteProps) {
13 | delete elRef.value.f7RouteProps;
14 | }
15 | });
16 | };
17 |
--------------------------------------------------------------------------------
/src/vue/shared/use-smart-select.js:
--------------------------------------------------------------------------------
1 | import { onMounted, onBeforeUnmount } from 'vue';
2 | import { f7ready, f7 } from './f7.js';
3 | import { extend } from './utils.js';
4 |
5 | export const useSmartSelect = (props, setInstance, getEl) => {
6 | let f7SmartSelect;
7 | onMounted(() => {
8 | f7ready(() => {
9 | if (props.smartSelect) {
10 | const ssParams = extend({ el: getEl() }, props.smartSelectParams || {});
11 | f7SmartSelect = f7.smartSelect.create(ssParams);
12 | setInstance(f7SmartSelect);
13 | }
14 | });
15 | });
16 | onBeforeUnmount(() => {
17 | if (f7SmartSelect && f7SmartSelect.destroy) {
18 | f7SmartSelect.destroy();
19 | }
20 | f7SmartSelect = null;
21 | setInstance(f7SmartSelect);
22 | });
23 | };
24 |
--------------------------------------------------------------------------------
/src/vue/shared/use-store.js:
--------------------------------------------------------------------------------
1 | import { onBeforeUnmount, ref } from 'vue';
2 | import { f7 } from './f7.js';
3 |
4 | export const useStore = (...args) => {
5 | // (store, getter)
6 | let store = args[0];
7 | let getter = args[1];
8 | if (args.length === 1) {
9 | // (getter)
10 | store = f7.store;
11 | getter = args[0];
12 | }
13 | // eslint-disable-next-line
14 | const obj = store._gettersPlain[getter];
15 | const valueRef = ref(obj.value);
16 | const callback = (v) => {
17 | valueRef.value = v;
18 | };
19 | obj.onUpdated(callback);
20 | onBeforeUnmount(() => {
21 | // eslint-disable-next-line
22 | store.__removeCallback(callback);
23 | });
24 | return valueRef;
25 | };
26 |
--------------------------------------------------------------------------------
/src/vue/shared/use-tab.js:
--------------------------------------------------------------------------------
1 | import { onMounted, onBeforeUnmount } from 'vue';
2 | import { f7, f7ready } from './f7.js';
3 |
4 | export const useTab = (elRef, emit) => {
5 | const onTabShow = (el) => {
6 | if (elRef.value !== el) return;
7 | emit('tab:show', el);
8 | };
9 | const onTabHide = (el) => {
10 | if (elRef.value !== el) return;
11 | emit('tab:hide', el);
12 | };
13 | onMounted(() => {
14 | if (!elRef.value) return;
15 | f7ready(() => {
16 | f7.on('tabShow', onTabShow);
17 | f7.on('tabHide', onTabHide);
18 | });
19 | });
20 | onBeforeUnmount(() => {
21 | if (!f7) return;
22 | f7.off('tabShow', onTabShow);
23 | f7.off('tabHide', onTabHide);
24 | });
25 | };
26 |
--------------------------------------------------------------------------------
/src/vue/shared/use-theme.js:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue';
2 | import { f7, f7ready, theme } from './f7.js';
3 |
4 | export const useTheme = () => {
5 | const t = ref(f7 ? theme : null);
6 | if (!f7) {
7 | f7ready(() => {
8 | t.value = theme;
9 | });
10 | }
11 | return t;
12 | };
13 |
--------------------------------------------------------------------------------