gitextract_fpbhpnbu/ ├── .github/ │ ├── FUNDING.yml │ └── dependabot.yml ├── .gitignore ├── .vscode/ │ └── settings.json ├── BACKERS.md ├── LICENSE ├── README.md ├── _config.yml ├── api/ │ ├── _helpers/ │ │ ├── camel-case-keys.ts │ │ └── to-camel-case.ts │ ├── location/ │ │ ├── _helpers/ │ │ │ └── map-location.ts │ │ ├── coordinates.ts │ │ └── search.ts │ ├── package.json │ ├── tsconfig.json │ └── weather/ │ └── forecast.ts ├── client/ │ ├── .browserslistrc │ ├── babel.config.js │ ├── build/ │ │ ├── _base/ │ │ │ ├── config.js │ │ │ └── workbox.js │ │ ├── development.js │ │ ├── insights.js │ │ └── production.js │ ├── package.json │ ├── postcss.config.js │ ├── src/ │ │ ├── app.vue │ │ ├── assets/ │ │ │ └── images/ │ │ │ └── figures/ │ │ │ └── index.ts │ │ ├── components/ │ │ │ ├── charts/ │ │ │ │ ├── _base/ │ │ │ │ │ └── chart.ts │ │ │ │ ├── line.vue │ │ │ │ └── trends.vue │ │ │ ├── drawers/ │ │ │ │ └── maps.vue │ │ │ ├── forecast/ │ │ │ │ ├── daily-forecast.vue │ │ │ │ ├── hourly-forecast.vue │ │ │ │ ├── summary.vue │ │ │ │ ├── tides.vue │ │ │ │ ├── today.vue │ │ │ │ └── uv-index.vue │ │ │ ├── layouts/ │ │ │ │ ├── settings.vue │ │ │ │ └── weather.vue │ │ │ ├── modals/ │ │ │ │ └── location.vue │ │ │ ├── settings/ │ │ │ │ └── settings-item.vue │ │ │ └── weather/ │ │ │ ├── actions.vue │ │ │ └── observation.vue │ │ ├── constants/ │ │ │ ├── core/ │ │ │ │ ├── data.ts │ │ │ │ ├── drawers.ts │ │ │ │ ├── events.ts │ │ │ │ ├── global.ts │ │ │ │ ├── migrations.ts │ │ │ │ ├── modals.ts │ │ │ │ ├── routes.ts │ │ │ │ ├── settings.ts │ │ │ │ └── storage-keys.ts │ │ │ ├── forecast/ │ │ │ │ ├── directions.ts │ │ │ │ ├── figure.ts │ │ │ │ ├── formats.ts │ │ │ │ ├── formatters.ts │ │ │ │ ├── icon.ts │ │ │ │ ├── sections.ts │ │ │ │ ├── theme.ts │ │ │ │ ├── tides-chart-options.ts │ │ │ │ ├── trends.ts │ │ │ │ ├── unit-of-measure.ts │ │ │ │ ├── units.ts │ │ │ │ └── uv-index.ts │ │ │ └── maps/ │ │ │ └── maps.ts │ │ ├── controllers/ │ │ │ └── application.ts │ │ ├── enums/ │ │ │ ├── core/ │ │ │ │ └── status.ts │ │ │ ├── forecast/ │ │ │ │ ├── location.ts │ │ │ │ ├── observation.ts │ │ │ │ ├── phase.ts │ │ │ │ ├── section.ts │ │ │ │ ├── trend.ts │ │ │ │ ├── unit-of-measure.ts │ │ │ │ └── units.ts │ │ │ └── maps/ │ │ │ └── map.ts │ │ ├── helpers/ │ │ │ ├── get-direction.ts │ │ │ ├── get-figure.ts │ │ │ ├── get-icon.ts │ │ │ ├── get-phase.ts │ │ │ └── set-theme-meta.ts │ │ ├── index.ejs │ │ ├── index.ts │ │ ├── routes/ │ │ │ ├── error/ │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ └── not-found.vue │ │ │ ├── error.vue │ │ │ ├── forecast/ │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── forecast.vue │ │ │ ├── index.ts │ │ │ ├── maps/ │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── maps.vue │ │ │ ├── settings/ │ │ │ │ ├── forecast/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── locations.vue │ │ │ │ │ └── sections.vue │ │ │ │ ├── general/ │ │ │ │ │ ├── about.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ └── theme.vue │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ └── maps/ │ │ │ │ ├── display.vue │ │ │ │ └── index.ts │ │ │ └── settings.vue │ │ ├── services/ │ │ │ ├── location.ts │ │ │ └── weather.ts │ │ ├── startup/ │ │ │ ├── application.ts │ │ │ ├── components.ts │ │ │ ├── index.ts │ │ │ ├── logging.ts │ │ │ ├── router.ts │ │ │ ├── state.ts │ │ │ ├── vendor.ts │ │ │ └── worker.ts │ │ ├── static/ │ │ │ ├── .well-known/ │ │ │ │ └── somthing.txt │ │ │ ├── robots.txt │ │ │ └── sitemap.xml │ │ ├── store/ │ │ │ ├── actions/ │ │ │ │ ├── add-location.ts │ │ │ │ ├── load-forecast.ts │ │ │ │ ├── load-location.ts │ │ │ │ ├── move-section.ts │ │ │ │ ├── remove-location.ts │ │ │ │ ├── reset-settings.ts │ │ │ │ ├── search-locations.ts │ │ │ │ ├── set-current-location.ts │ │ │ │ ├── set-location.ts │ │ │ │ ├── set-section-visibility.ts │ │ │ │ ├── update-settings.ts │ │ │ │ └── update.ts │ │ │ ├── getters/ │ │ │ │ ├── forecast.ts │ │ │ │ ├── format.ts │ │ │ │ ├── phase.ts │ │ │ │ ├── theme.ts │ │ │ │ └── unit-of-measure.ts │ │ │ ├── helpers/ │ │ │ │ ├── location.ts │ │ │ │ └── storage.ts │ │ │ ├── index.ts │ │ │ ├── mutations/ │ │ │ │ ├── set-last-updated.ts │ │ │ │ ├── set-settings.ts │ │ │ │ └── set-status.ts │ │ │ ├── state/ │ │ │ │ └── index.ts │ │ │ └── store.ts │ │ ├── themes/ │ │ │ ├── core/ │ │ │ │ ├── dark/ │ │ │ │ │ ├── _dark.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.ts │ │ │ │ ├── default/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── light/ │ │ │ │ ├── _light.scss │ │ │ │ ├── index.scss │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── weather/ │ │ │ ├── clear/ │ │ │ │ ├── index.scss │ │ │ │ └── index.ts │ │ │ ├── default/ │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── partly-cloudy/ │ │ │ │ ├── index.scss │ │ │ │ └── index.ts │ │ │ └── rainy/ │ │ │ ├── index.scss │ │ │ └── index.ts │ │ ├── types/ │ │ │ ├── location.ts │ │ │ ├── state.ts │ │ │ ├── storage.ts │ │ │ ├── themes.ts │ │ │ └── weather.ts │ │ └── vue-shim.d.ts │ ├── tsconfig.json │ └── webpack.config.babel.js ├── package.json ├── packages/ │ ├── charts/ │ │ ├── package.json │ │ └── src/ │ │ ├── charts/ │ │ │ ├── _base/ │ │ │ │ └── chart.ts │ │ │ └── line/ │ │ │ ├── constants/ │ │ │ │ └── curve.ts │ │ │ ├── enums/ │ │ │ │ ├── line-type.ts │ │ │ │ └── marker-type.ts │ │ │ ├── index.ts │ │ │ └── types/ │ │ │ └── index.ts │ │ ├── d3/ │ │ │ └── index.ts │ │ ├── enums/ │ │ │ └── scale.ts │ │ ├── index.ts │ │ └── scales/ │ │ ├── index.ts │ │ ├── linear.ts │ │ ├── point.ts │ │ └── time.ts │ ├── components/ │ │ ├── package.json │ │ └── src/ │ │ ├── components/ │ │ │ ├── accordion/ │ │ │ │ ├── accordion-pane.vue │ │ │ │ ├── accordion.vue │ │ │ │ └── constants/ │ │ │ │ └── events.ts │ │ │ ├── block/ │ │ │ │ └── block.vue │ │ │ ├── container/ │ │ │ │ └── container.vue │ │ │ ├── core/ │ │ │ │ ├── confirm-modal.vue │ │ │ │ └── index.vue │ │ │ ├── drawer/ │ │ │ │ └── drawer.vue │ │ │ ├── icon/ │ │ │ │ └── icon.vue │ │ │ ├── icon-button/ │ │ │ │ └── icon-button.vue │ │ │ ├── icon-label/ │ │ │ │ └── icon-label.vue │ │ │ ├── index.ts │ │ │ ├── layout/ │ │ │ │ └── layout.vue │ │ │ ├── loader/ │ │ │ │ └── loader.vue │ │ │ ├── mapbox/ │ │ │ │ ├── compositions/ │ │ │ │ │ └── layer.ts │ │ │ │ ├── mapbox-legend.vue │ │ │ │ ├── mapbox-map.vue │ │ │ │ ├── mapbox-raster-layer.vue │ │ │ │ └── types/ │ │ │ │ └── index.ts │ │ │ ├── modal/ │ │ │ │ └── modal.vue │ │ │ ├── search-box/ │ │ │ │ └── search-box.vue │ │ │ └── transitions/ │ │ │ └── box-resize.vue │ │ ├── compositions/ │ │ │ ├── layer.ts │ │ │ ├── subscriber.ts │ │ │ └── timer.ts │ │ ├── constants/ │ │ │ └── modals.ts │ │ ├── controllers/ │ │ │ └── components.ts │ │ ├── directives/ │ │ │ ├── focus.ts │ │ │ ├── index.ts │ │ │ ├── meta.ts │ │ │ ├── tooltip.ts │ │ │ └── visible.ts │ │ ├── event-emitter/ │ │ │ └── index.ts │ │ ├── helpers/ │ │ │ └── get-listeners.ts │ │ ├── index.ts │ │ └── types/ │ │ └── index.ts │ ├── event-emitter/ │ │ ├── package.json │ │ └── src/ │ │ └── index.ts │ ├── router/ │ │ ├── package.json │ │ └── src/ │ │ └── index.ts │ ├── state/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── types/ │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── style/ │ │ ├── package.json │ │ └── src/ │ │ ├── _base.scss │ │ ├── _buttons.scss │ │ ├── _dots.scss │ │ ├── _grid.scss │ │ ├── _inputs.scss │ │ ├── _menus.scss │ │ ├── _mixins.scss │ │ ├── _spacing.scss │ │ ├── _tables.scss │ │ ├── _tooltips.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ └── index.scss │ ├── task-queue/ │ │ ├── package.json │ │ └── src/ │ │ └── index.ts │ └── utilities/ │ ├── package.json │ ├── src/ │ │ ├── array/ │ │ │ ├── join-by.ts │ │ │ ├── order-by.ts │ │ │ ├── swap-by.ts │ │ │ ├── union-with.ts │ │ │ └── unique-by.ts │ │ ├── date/ │ │ │ ├── format-distance-to-now.ts │ │ │ ├── format-distance.ts │ │ │ ├── format.ts │ │ │ ├── from-unix.ts │ │ │ ├── is-today.ts │ │ │ ├── to-unix.ts │ │ │ └── utc-to-zoned.ts │ │ ├── dom/ │ │ │ └── set-meta.ts │ │ ├── env/ │ │ │ ├── _base/ │ │ │ │ └── is-env.ts │ │ │ ├── is-development.ts │ │ │ └── is-production.ts │ │ ├── function/ │ │ │ ├── debounce.ts │ │ │ ├── identity.ts │ │ │ └── noop.ts │ │ ├── index.ts │ │ ├── number/ │ │ │ ├── clamp.ts │ │ │ ├── max-by.ts │ │ │ ├── min-by.ts │ │ │ ├── percentage.ts │ │ │ └── round.ts │ │ ├── object/ │ │ │ ├── clone-lazy.ts │ │ │ ├── merge-with.ts │ │ │ ├── merge.ts │ │ │ └── transform.ts │ │ ├── scale/ │ │ │ ├── _base/ │ │ │ │ └── scale.ts │ │ │ ├── continuous.ts │ │ │ └── discrete.ts │ │ ├── string/ │ │ │ ├── capitalize.ts │ │ │ └── unique-id.ts │ │ ├── type/ │ │ │ ├── is-array.ts │ │ │ ├── is-date.ts │ │ │ ├── is-function.ts │ │ │ ├── is-nil.ts │ │ │ ├── is-number.ts │ │ │ ├── is-plain-object.ts │ │ │ └── is-string.ts │ │ └── value/ │ │ └── get-accessor.ts │ └── tsconfig.json ├── tsconfig.json └── vercel.json