routie dev init since i didn't adhere to any proper guidance up until now

This commit is contained in:
2026-04-29 22:27:29 -06:00
commit e1dabb71e2
15301 changed files with 3562618 additions and 0 deletions
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class ApiConfig(AppConfig):
name = 'api'
View File
+3
View File
@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+33
View File
@@ -0,0 +1,33 @@
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.utils import timezone
from django.http import JsonResponse
from datetime import timedelta
@api_view(['GET'])
def hello(request):
return Response({"message": "Hello from Django!"})
def accept_disclaimer(request):
request.session['disclaimer_accepted_at'] = timezone.now().isoformat()
return JsonResponse({'ok': True})
def check_disclaimer(request):
accepted_at = request.session.get('disclaimer_accepted_at')
if not accepted_at:
return JsonResponse({'accepted': False})
accepted_time = timezone.datetime.fromisoformat(accepted_at)
if timezone.now() - accepted_time > timedelta(minutes=30):
return JsonResponse({'accepted': False})
return JsonResponse({'accepted': True})
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def accept_disclaimer(request):
request.session['disclaimer_accepted_at'] = timezone.now().isoformat()
return JsonResponse({'ok': True})
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+16
View File
@@ -0,0 +1,16 @@
"""
ASGI config for backend project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_asgi_application()
+134
View File
@@ -0,0 +1,134 @@
"""
Django settings for backend project.
Generated by 'django-admin startproject' using Django 6.0.4.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.0/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-m01q!i8-%3+jf0)98&a+-0gfvoas8lu+p(a3md^9l#c40$p=h6'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = [
"localhost",
"127.0.0.1"
]
CSRF_TRUSTED_ORIGINS = [
"http://localhost:3000",
]
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'api'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
ROOT_URLCONF = 'backend.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'backend.wsgi.application'
# Database
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/6.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/6.0/howto/static-files/
STATIC_URL = 'static/'
# CUSTOM
SESSION_COOKIE_AGE = 30 * 60
SESSION_SAVE_EVERY_REQUEST = False
CSRF_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SECURE = False # True if using HTTPS
+26
View File
@@ -0,0 +1,26 @@
"""
URL configuration for backend project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from api.views import hello, accept_disclaimer, check_disclaimer
urlpatterns = [
path('admin/', admin.site.urls),
path('api/hello/', hello),
path('api/accept-disclaimer/', accept_disclaimer),
path('api/check-disclaimer/', check_disclaimer)
]
+16
View File
@@ -0,0 +1,16 @@
"""
WSGI config for backend project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_wsgi_application()
Binary file not shown.
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
+4
View File
@@ -0,0 +1,4 @@
# Project Rules
## General
- Follow the existing code style and patterns.
+11
View File
@@ -0,0 +1,11 @@
# For a complete example, see: https://okigu.com/ruler#complete-example
# List of agents to configure
default_agents = ["copilot", "claude", "trae"]
[mcp_servers.vuetify]
url = "https://mcp.vuetifyjs.com/mcp"
# https://github.com/vuetifyjs/mcp#authentication
# [mcp_servers.vuetify.headers]
# Authorization = "Bearer <YOUR_API_KEY>"
+6
View File
@@ -0,0 +1,6 @@
{
"recommendations": [
"vuetifyjs.vuetify-vscode",
"vue.volar"
]
}
+11
View File
@@ -0,0 +1,11 @@
# Project Rules
## General
- Follow the existing code style and patterns.
- Use npm for running project commands.
- Keep code in TypeScript unless migration is required.
## Stack
- Framework: Vue 3 + Vite
- UI Library: Vuetify
- Enabled Features: ESLint, Vuetify MCP, Tailwind CSS
+81
View File
@@ -0,0 +1,81 @@
# vuetify-name
Scaffolded with Vuetify CLI.
## ❗️ Documentation
- Primary docs: https://vuetifyjs.com/
- Getting started guide: https://vuetifyjs.com/en/getting-started/installation/
- Community support: https://community.vuetifyjs.com/
- Issue tracker: https://issues.vuetifyjs.com/
## 🧱 Stack
- Framework: Vue 3 + Vite
- UI Library: Vuetify
- Language: TypeScript
- Package manager: npm
## 🧭 Start Here
- Main entry: `src/main.ts`
- Main app component: `src/App.vue`
- Main styles: `src/styles/`
- Plugin setup: `src/plugins/`
## 📁 Project Structure
- `src/main.ts` — application entry point
- `src/App.vue` — root component
- `src/components/` — reusable Vue components
- `src/plugins/` — plugin registration and setup
- `src/styles/` — global styles and theme settings
- `public/` — static public files
## ✨ Enabled Features
- ESLint
- Vuetify MCP
- Tailwind CSS
## 💿 Install
Use your selected package manager (npm) to install dependencies:
```bash
npm install
```
## 🚀 Quick Start
```bash
npm install
npm run dev
```
## 🏗️ Build
```bash
npm run build
```
## 🧪 Available Scripts
- `npm run dev`
- `npm run build`
- `npm run preview`
- `npm run build-only`
- `npm run type-check`
- `npm run lint`
- `npm run lint:fix`
- `npm run mcp`
- `npm run mcp:revert`
## 💪 Support Vuetify Development
This project uses Vuetify - an MIT licensed Open Source project. We are glad to welcome contributors and any support for ongoing development:
- Contribute to Vuetify and ecosystem projects: https://github.com/vuetifyjs
- Request enterprise support: https://support.vuetifyjs.com/
- Sponsor on GitHub: https://github.com/sponsors/vuetifyjs
- Support on Open Collective: https://opencollective.com/vuetify
+2
View File
@@ -0,0 +1,2 @@
/// <reference types="vite/client" />
/// <reference types="vite-plugin-vue-layouts-next/client" />
+5
View File
@@ -0,0 +1,5 @@
import vuetify from 'eslint-config-vuetify'
export default vuetify({
ts: true,
})
+13
View File
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to Vuetify 4</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../acorn/bin/acorn
+1
View File
@@ -0,0 +1 @@
../baseline-browser-mapping/dist/cli.cjs
+1
View File
@@ -0,0 +1 @@
../browserslist/cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../cssesc/bin/cssesc
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../eslint/bin/eslint.js
+1
View File
@@ -0,0 +1 @@
../eslint-config-vuetify/bin/cli.mjs
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../jiti/lib/jiti-cli.mjs
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../js-yaml/bin/js-yaml.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../jsesc/bin/jsesc
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../nanoid/bin/nanoid.cjs
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../which/bin/node-which
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../npm-run-all2/bin/npm-run-all/index.js
+1
View File
@@ -0,0 +1 @@
../npm-run-all2/bin/npm-run-all/index.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../nypm/dist/cli.mjs
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../@babel/parser/bin/babel-parser.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../pidtree/bin/pidtree.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../regexp-tree/bin/regexp-tree
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../regjsparser/bin/parser
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../rolldown/bin/cli.mjs
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../@intellectronica/ruler/dist/cli/index.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../npm-run-all2/bin/run-p/index.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../npm-run-all2/bin/run-s/index.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../sass/sass.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../semver/bin/semver.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../typescript/bin/tsc
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../typescript/bin/tsserver
+1
View File
@@ -0,0 +1 @@
../update-browserslist-db/cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../vite/bin/vite.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../vue-tsc/bin/vue-tsc.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../yaml/bin.mjs
+4652
View File
File diff suppressed because it is too large Load Diff
+218
View File
@@ -0,0 +1,218 @@
import { C as vShow, Cn as withDirectives, Dt as mergeProps, U as computed, W as createBaseVNode, ar as normalizeClass, et as createVNode, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { I as isObject, _ as convertToUnit, l as propsFactory, n as genericComponent, q as pickWithRest } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { r as useTextColor, t as useBackgroundColor } from "./color-B6vuQruj.js";
import { a as useTheme, i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { n as IconValue } from "./icons-k2ZLE_i8.js";
import { r as useLocale } from "./locale-DDGMqzqb.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { t as VDefaultsProvider } from "./VDefaultsProvider-C09t4-My.js";
import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js";
import { t as VImg } from "./VImg-DaEUT7gG.js";
import { n as useRounded, t as makeRoundedProps } from "./rounded-BuPGKRa9.js";
import { n as makeTransitionProps, t as MaybeTransition } from "./transition-DqoZ8fA1.js";
import { n as useBorder, t as makeBorderProps } from "./border-jCmRyoxP.js";
import { n as useLocation, t as makeLocationProps } from "./location-BIKTnDF4.js";
import { n as useDensity, t as makeDensityProps } from "./density-CpKZ5PhP.js";
import { n as makeVariantProps, r as useVariant, t as genOverlays } from "./variant-CqXtG9Ih.js";
import { n as makeSizeProps, r as useSize, t as VIcon } from "./VIcon-1CJH_3Uo.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VAvatar/VAvatar.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VBadge/VBadge.css";
//#region node_modules/vuetify/lib/components/VBadge/VBadge.js
var makeVBadgeProps = propsFactory({
bordered: Boolean,
color: String,
content: [Number, String],
dot: Boolean,
dotSize: [Number, String],
floating: Boolean,
icon: IconValue,
inline: Boolean,
label: {
type: String,
default: "$vuetify.badge"
},
max: [Number, String],
modelValue: {
type: Boolean,
default: true
},
offsetX: [Number, String],
offsetY: [Number, String],
textColor: String,
...makeComponentProps(),
...makeLocationProps({ location: "top end" }),
...makeRoundedProps(),
...makeTagProps(),
...makeThemeProps(),
...makeTransitionProps({ transition: "scale-rotate-transition" }),
...makeDimensionProps()
}, "VBadge");
var VBadge = genericComponent()({
name: "VBadge",
inheritAttrs: false,
props: makeVBadgeProps(),
setup(props, ctx) {
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color);
const { roundedClasses } = useRounded(props);
const { t } = useLocale();
const { textColorClasses, textColorStyles } = useTextColor(() => props.textColor);
const { themeClasses } = useTheme();
const { locationStyles } = useLocation(props, true, (side) => {
return (props.floating ? props.dot ? 2 : 4 : props.dot ? Number(props.dotSize ?? 8) : 12) + (["top", "bottom"].includes(side) ? Number(props.offsetY ?? 0) : ["left", "right"].includes(side) ? Number(props.offsetX ?? 0) : 0);
});
const { dimensionStyles } = useDimension(props);
useRender(() => {
const value = Number(props.content);
const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, [
"aria-atomic",
"aria-label",
"aria-live",
"role",
"title"
]);
return createVNode(props.tag, mergeProps({ "class": [
"v-badge",
{
"v-badge--bordered": props.bordered,
"v-badge--dot": props.dot,
"v-badge--floating": props.floating,
"v-badge--inline": props.inline
},
props.class
] }, attrs, { "style": props.style }), { default: () => [createBaseVNode("div", { "class": "v-badge__wrapper" }, [ctx.slots.default?.(), createVNode(MaybeTransition, { "transition": props.transition }, { default: () => [withDirectives(createBaseVNode("span", mergeProps({
"class": [
"v-badge__badge",
themeClasses.value,
backgroundColorClasses.value,
roundedClasses.value,
textColorClasses.value
],
"style": [
backgroundColorStyles.value,
textColorStyles.value,
dimensionStyles.value,
props.inline ? {} : locationStyles.value,
props.dot && props.dotSize ? {
width: convertToUnit(props.dotSize),
height: convertToUnit(props.dotSize)
} : {}
],
"aria-atomic": "true",
"aria-label": t(props.label, value),
"aria-live": "polite",
"role": "status"
}, badgeAttrs), [props.dot ? void 0 : ctx.slots.badge ? ctx.slots.badge?.() : props.icon ? createVNode(VIcon, { "icon": props.icon }, null) : content]), [[vShow, props.modelValue]])] })])] });
});
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VAvatar/VAvatar.js
var makeVAvatarProps = propsFactory({
badge: {
type: [Boolean, Object],
default: false
},
start: Boolean,
end: Boolean,
icon: IconValue,
image: String,
text: String,
...makeBorderProps(),
...makeComponentProps(),
...makeDensityProps(),
...makeRoundedProps(),
...makeSizeProps(),
...makeTagProps(),
...makeThemeProps(),
...makeVariantProps({ variant: "flat" })
}, "VAvatar");
var VAvatar = genericComponent()({
name: "VAvatar",
props: makeVAvatarProps(),
setup(props, { slots }) {
const { themeClasses } = provideTheme(props);
const { borderClasses } = useBorder(props);
const { colorClasses, colorStyles, variantClasses } = useVariant(props);
const { densityClasses } = useDensity(props);
const { roundedClasses } = useRounded(props);
const { sizeClasses, sizeStyles } = useSize(props);
const badgeDotSize = computed(() => {
switch (props.size) {
case "x-small": return 8;
case "small": return 10;
case "large": return 14;
case "x-large": return 16;
default: return 12;
}
});
const badgeOffset = computed(() => {
const { floating } = isObject(props.badge) ? props.badge : {};
return (floating ? badgeDotSize.value / 2 : 0) - 1.5;
});
const badgeProps = computed(() => {
return {
bordered: true,
dot: !slots.badge,
dotSize: badgeDotSize.value,
offsetX: badgeOffset.value,
offsetY: badgeOffset.value,
color: typeof props.badge === "string" ? props.badge : "primary",
...isObject(props.badge) ? props.badge : {}
};
});
useRender(() => {
const avatar = createVNode(props.tag, {
"class": normalizeClass([
"v-avatar",
{
"v-avatar--start": props.start,
"v-avatar--end": props.end
},
themeClasses.value,
borderClasses.value,
colorClasses.value,
densityClasses.value,
roundedClasses.value,
sizeClasses.value,
variantClasses.value,
props.class
]),
"style": normalizeStyle([
colorStyles.value,
sizeStyles.value,
props.style
])
}, { default: () => [!slots.default ? props.image ? createVNode(VImg, {
"key": "image",
"src": props.image,
"alt": "",
"cover": true
}, null) : props.icon ? createVNode(VIcon, {
"key": "icon",
"icon": props.icon
}, null) : props.text : createVNode(VDefaultsProvider, {
"key": "content-defaults",
"defaults": {
VImg: {
cover: true,
src: props.image
},
VIcon: { icon: props.icon }
}
}, { default: () => [slots.default()] }), genOverlays(false, "v-avatar")] });
return props.badge ? createVNode(VBadge, badgeProps.value, {
default: () => avatar,
badge: slots.badge
}) : avatar;
});
return {};
}
});
//#endregion
export { VAvatar as t };
//# sourceMappingURL=VAvatar-CA-KqvIX.js.map
File diff suppressed because one or more lines are too long
+318
View File
@@ -0,0 +1,318 @@
import { Cn as withDirectives, Dt as mergeProps, Ot as nextTick, Qn as toRef, U as computed, W as createBaseVNode, ar as normalizeClass, cr as toDisplayString, et as createVNode, gn as watch, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { a as provideDefaults, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { n as IconValue } from "./icons-k2ZLE_i8.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { t as VDefaultsProvider } from "./VDefaultsProvider-C09t4-My.js";
import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js";
import { n as useRounded, t as makeRoundedProps } from "./rounded-BuPGKRa9.js";
import { n as useBorder, t as makeBorderProps } from "./border-jCmRyoxP.js";
import { n as useElevation, t as makeElevationProps } from "./elevation-B0TH2wU6.js";
import { n as useLocation, t as makeLocationProps } from "./location-BIKTnDF4.js";
import { n as useDensity, t as makeDensityProps } from "./density-CpKZ5PhP.js";
import { n as makeVariantProps, r as useVariant, t as genOverlays } from "./variant-CqXtG9Ih.js";
import { i as useGroupItem, n as makeGroupProps, r as useGroup, t as makeGroupItemProps } from "./group-Cm2viEWK.js";
import { n as makeSizeProps, r as useSize, t as VIcon } from "./VIcon-1CJH_3Uo.js";
import { n as makeLoaderProps, r as useLoader } from "./loader-CV4sMFhE.js";
import { t as VProgressCircular } from "./VProgressCircular-yKv2qs75.js";
import { n as usePosition, t as makePositionProps } from "./position-BCUsnxVO.js";
import { r as useLink, t as makeRouterProps } from "./router-D_jP4Uwb.js";
import { t as Ripple } from "./ripple-Z40rPDte.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VBtn/VBtn.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VBtnToggle/VBtnToggle.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VBtnGroup/VBtnGroup.css";
//#region node_modules/vuetify/lib/components/VBtnGroup/VBtnGroup.js
var makeVBtnGroupProps = propsFactory({
baseColor: String,
divided: Boolean,
direction: {
type: String,
default: "horizontal"
},
...makeBorderProps(),
...makeComponentProps(),
...makeDensityProps(),
...makeElevationProps(),
...makeRoundedProps(),
...makeTagProps(),
...makeThemeProps(),
...makeVariantProps()
}, "VBtnGroup");
var VBtnGroup = genericComponent()({
name: "VBtnGroup",
props: makeVBtnGroupProps(),
setup(props, { slots }) {
const { themeClasses } = provideTheme(props);
const { densityClasses } = useDensity(props);
const { borderClasses } = useBorder(props);
const { elevationClasses } = useElevation(props);
const { roundedClasses } = useRounded(props);
provideDefaults({ VBtn: {
height: toRef(() => props.direction === "horizontal" ? "auto" : null),
baseColor: toRef(() => props.baseColor),
color: toRef(() => props.color),
density: toRef(() => props.density),
flat: true,
variant: toRef(() => props.variant)
} });
useRender(() => {
return createVNode(props.tag, {
"class": normalizeClass([
"v-btn-group",
`v-btn-group--${props.direction}`,
{ "v-btn-group--divided": props.divided },
themeClasses.value,
borderClasses.value,
densityClasses.value,
elevationClasses.value,
roundedClasses.value,
props.class
]),
"style": normalizeStyle(props.style)
}, slots);
});
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VBtnToggle/VBtnToggle.js
var VBtnToggleSymbol = Symbol.for("vuetify:v-btn-toggle");
var makeVBtnToggleProps = propsFactory({
...makeVBtnGroupProps(),
...makeGroupProps()
}, "VBtnToggle");
genericComponent()({
name: "VBtnToggle",
props: makeVBtnToggleProps(),
emits: { "update:modelValue": (value) => true },
setup(props, { slots }) {
const { isSelected, next, prev, select, selected } = useGroup(props, VBtnToggleSymbol);
useRender(() => {
const btnGroupProps = VBtnGroup.filterProps(props);
return createVNode(VBtnGroup, mergeProps({ "class": ["v-btn-toggle", props.class] }, btnGroupProps, { "style": props.style }), { default: () => [slots.default?.({
isSelected,
next,
prev,
select,
selected
})] });
});
return {
next,
prev,
select
};
}
});
//#endregion
//#region node_modules/vuetify/lib/composables/selectLink.js
function useSelectLink(link, select) {
watch(() => link.isActive?.value, (isActive) => {
if (link.isLink.value && isActive != null && select) nextTick(() => {
select(isActive);
});
}, { immediate: true });
}
//#endregion
//#region node_modules/vuetify/lib/components/VBtn/VBtn.js
var makeVBtnProps = propsFactory({
active: {
type: Boolean,
default: void 0
},
activeColor: String,
baseColor: String,
symbol: {
type: null,
default: VBtnToggleSymbol
},
flat: Boolean,
icon: [
Boolean,
String,
Function,
Object
],
prependIcon: IconValue,
appendIcon: IconValue,
block: Boolean,
readonly: Boolean,
slim: Boolean,
stacked: Boolean,
spaced: String,
ripple: {
type: [Boolean, Object],
default: true
},
text: {
type: [
String,
Number,
Boolean
],
default: void 0
},
...makeBorderProps(),
...makeComponentProps(),
...makeDensityProps(),
...makeDimensionProps(),
...makeElevationProps(),
...makeGroupItemProps(),
...makeLoaderProps(),
...makeLocationProps(),
...makePositionProps(),
...makeRoundedProps(),
...makeRouterProps(),
...makeSizeProps(),
...makeTagProps({ tag: "button" }),
...makeThemeProps(),
...makeVariantProps({ variant: "elevated" })
}, "VBtn");
var VBtn = genericComponent()({
name: "VBtn",
props: makeVBtnProps(),
emits: { "group:selected": (val) => true },
setup(props, { attrs, slots }) {
const { themeClasses } = provideTheme(props);
const { borderClasses } = useBorder(props);
const { densityClasses } = useDensity(props);
const { dimensionStyles } = useDimension(props);
const { elevationClasses } = useElevation(props);
const { loaderClasses } = useLoader(props);
const { locationStyles } = useLocation(props);
const { positionClasses } = usePosition(props);
const { roundedClasses } = useRounded(props);
const { sizeClasses, sizeStyles } = useSize(props);
const group = useGroupItem(props, props.symbol, false);
const link = useLink(props, attrs);
const isActive = computed(() => {
if (props.active !== void 0) return props.active;
if (link.isRouterLink.value) return link.isActive?.value;
return group?.isSelected.value;
});
const color = toRef(() => isActive.value ? props.activeColor ?? props.color : props.color);
const { colorClasses, colorStyles, variantClasses } = useVariant(computed(() => {
return {
color: group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value ? color.value ?? props.baseColor : props.baseColor,
variant: props.variant
};
}));
const isDisabled = computed(() => group?.disabled.value || props.disabled);
const isElevated = toRef(() => {
return props.variant === "elevated" && !(props.disabled || props.flat || props.border);
});
const valueAttr = computed(() => {
if (props.value === void 0 || typeof props.value === "symbol") return void 0;
return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
});
function onClick(e) {
if (isDisabled.value || link.isLink.value && (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0 || attrs.target === "_blank")) return;
if (link.isRouterLink.value) link.navigate.value?.(e);
else group?.toggle();
}
useSelectLink(link, group?.select);
useRender(() => {
const Tag = link.isLink.value ? "a" : props.tag;
const hasPrepend = !!(props.prependIcon || slots.prepend);
const hasAppend = !!(props.appendIcon || slots.append);
const hasIcon = !!(props.icon && props.icon !== true);
return withDirectives(createVNode(Tag, mergeProps(link.linkProps, {
"type": Tag === "a" ? void 0 : "button",
"class": [
"v-btn",
group?.selectedClass.value,
{
"v-btn--active": isActive.value,
"v-btn--block": props.block,
"v-btn--disabled": isDisabled.value,
"v-btn--elevated": isElevated.value,
"v-btn--flat": props.flat,
"v-btn--icon": !!props.icon,
"v-btn--loading": props.loading,
"v-btn--readonly": props.readonly,
"v-btn--slim": props.slim,
"v-btn--stacked": props.stacked
},
props.spaced ? ["v-btn--spaced", `v-btn--spaced-${props.spaced}`] : [],
themeClasses.value,
borderClasses.value,
colorClasses.value,
densityClasses.value,
elevationClasses.value,
loaderClasses.value,
positionClasses.value,
roundedClasses.value,
sizeClasses.value,
variantClasses.value,
props.class
],
"style": [
colorStyles.value,
dimensionStyles.value,
locationStyles.value,
sizeStyles.value,
props.style
],
"aria-busy": props.loading ? true : void 0,
"disabled": isDisabled.value && Tag !== "a" || void 0,
"tabindex": props.loading || props.readonly ? -1 : void 0,
"onClick": onClick,
"value": valueAttr.value
}), { default: () => [
genOverlays(true, "v-btn"),
!props.icon && hasPrepend && createBaseVNode("span", {
"key": "prepend",
"class": "v-btn__prepend"
}, [!slots.prepend ? createVNode(VIcon, {
"key": "prepend-icon",
"icon": props.prependIcon
}, null) : createVNode(VDefaultsProvider, {
"key": "prepend-defaults",
"disabled": !props.prependIcon,
"defaults": { VIcon: { icon: props.prependIcon } }
}, slots.prepend)]),
createBaseVNode("span", {
"class": "v-btn__content",
"data-no-activator": ""
}, [!slots.default && hasIcon ? createVNode(VIcon, {
"key": "content-icon",
"icon": props.icon
}, null) : createVNode(VDefaultsProvider, {
"key": "content-defaults",
"disabled": !hasIcon,
"defaults": { VIcon: { icon: props.icon } }
}, { default: () => [slots.default?.() ?? toDisplayString(props.text)] })]),
!props.icon && hasAppend && createBaseVNode("span", {
"key": "append",
"class": "v-btn__append"
}, [!slots.append ? createVNode(VIcon, {
"key": "append-icon",
"icon": props.appendIcon
}, null) : createVNode(VDefaultsProvider, {
"key": "append-defaults",
"disabled": !props.appendIcon,
"defaults": { VIcon: { icon: props.appendIcon } }
}, slots.append)]),
!!props.loading && createBaseVNode("span", {
"key": "loader",
"class": "v-btn__loader"
}, [slots.loader?.() ?? createVNode(VProgressCircular, {
"color": typeof props.loading === "boolean" ? void 0 : props.loading,
"indeterminate": true,
"width": "2"
}, null)])
] }), [[
Ripple,
!isDisabled.value && props.ripple,
"",
{ center: !!props.icon }
]]);
});
return { group };
}
});
//#endregion
export { makeVBtnProps as n, VBtn as t };
//# sourceMappingURL=VBtn-BZzD9gwE.js.map
File diff suppressed because one or more lines are too long
+28
View File
@@ -0,0 +1,28 @@
import { $n as toRefs } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { a as provideDefaults, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
//#region node_modules/vuetify/lib/components/VDefaultsProvider/VDefaultsProvider.js
var makeVDefaultsProviderProps = propsFactory({
defaults: Object,
disabled: Boolean,
reset: [Number, String],
root: [Boolean, String],
scoped: Boolean
}, "VDefaultsProvider");
var VDefaultsProvider = genericComponent(false)({
name: "VDefaultsProvider",
props: makeVDefaultsProviderProps(),
setup(props, { slots }) {
const { defaults, disabled, reset, root, scoped } = toRefs(props);
provideDefaults(defaults, {
reset,
root,
scoped,
disabled
});
return () => slots.default?.();
}
});
//#endregion
export { VDefaultsProvider as t };
//# sourceMappingURL=VDefaultsProvider-C09t4-My.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"VDefaultsProvider-C09t4-My.js","names":[],"sources":["../../vuetify/lib/components/VDefaultsProvider/VDefaultsProvider.js"],"sourcesContent":["// Composables\nimport { provideDefaults } from \"../../composables/defaults.js\"; // Utilities\nimport { toRefs } from 'vue';\nimport { genericComponent, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeVDefaultsProviderProps = propsFactory({\n defaults: Object,\n disabled: Boolean,\n reset: [Number, String],\n root: [Boolean, String],\n scoped: Boolean\n}, 'VDefaultsProvider');\nexport const VDefaultsProvider = genericComponent(false)({\n name: 'VDefaultsProvider',\n props: makeVDefaultsProviderProps(),\n setup(props, {\n slots\n }) {\n const {\n defaults,\n disabled,\n reset,\n root,\n scoped\n } = toRefs(props);\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n disabled\n });\n return () => slots.default?.();\n }\n});\n//# sourceMappingURL=VDefaultsProvider.js.map"],"mappings":";;;AAIA,IAAa,6BAA6B,aAAa;CACrD,UAAU;CACV,UAAU;CACV,OAAO,CAAC,QAAQ,OAAO;CACvB,MAAM,CAAC,SAAS,OAAO;CACvB,QAAQ;CACT,EAAE,oBAAoB;AACvB,IAAa,oBAAoB,iBAAiB,MAAM,CAAC;CACvD,MAAM;CACN,OAAO,4BAA4B;CACnC,MAAM,OAAO,EACX,SACC;EACD,MAAM,EACJ,UACA,UACA,OACA,MACA,WACE,OAAO,MAAM;AACjB,kBAAgB,UAAU;GACxB;GACA;GACA;GACA;GACD,CAAC;AACF,eAAa,MAAM,WAAW;;CAEjC,CAAC"}
+100
View File
@@ -0,0 +1,100 @@
import { Qn as toRef, U as computed, W as createBaseVNode, ar as normalizeClass, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { _ as convertToUnit, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { r as useTextColor } from "./color-B6vuQruj.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VDivider/VDivider.css";
//#region node_modules/vuetify/lib/components/VDivider/VDivider.js
var allowedVariants = [
"dotted",
"dashed",
"solid",
"double"
];
var makeVDividerProps = propsFactory({
color: String,
contentOffset: [
Number,
String,
Array
],
gradient: Boolean,
inset: Boolean,
length: [Number, String],
opacity: [Number, String],
thickness: [Number, String],
vertical: Boolean,
variant: {
type: String,
default: "solid",
validator: (v) => allowedVariants.includes(v)
},
...makeComponentProps(),
...makeThemeProps()
}, "VDivider");
var VDivider = genericComponent()({
name: "VDivider",
props: makeVDividerProps(),
setup(props, { attrs, slots }) {
const { themeClasses } = provideTheme(props);
const { textColorClasses, textColorStyles } = useTextColor(() => props.color);
const dividerStyles = computed(() => {
const styles = {};
if (props.length) styles[props.vertical ? "height" : "width"] = convertToUnit(props.length);
if (props.thickness) styles[props.vertical ? "borderRightWidth" : "borderTopWidth"] = convertToUnit(props.thickness);
return styles;
});
const contentStyles = toRef(() => {
const margin = Array.isArray(props.contentOffset) ? props.contentOffset[0] : props.contentOffset;
const shift = Array.isArray(props.contentOffset) ? props.contentOffset[1] : 0;
return {
marginBlock: props.vertical && margin ? convertToUnit(margin) : void 0,
marginInline: !props.vertical && margin ? convertToUnit(margin) : void 0,
transform: shift ? `translate${props.vertical ? "X" : "Y"}(${convertToUnit(shift)})` : void 0
};
});
useRender(() => {
const divider = createBaseVNode("hr", {
"class": normalizeClass([
{
"v-divider": true,
"v-divider--gradient": props.gradient && !slots.default,
"v-divider--inset": props.inset,
"v-divider--vertical": props.vertical
},
themeClasses.value,
textColorClasses.value,
props.class
]),
"style": normalizeStyle([
dividerStyles.value,
textColorStyles.value,
{ "--v-border-opacity": props.opacity },
{ "border-style": props.variant },
props.style
]),
"aria-orientation": !attrs.role || attrs.role === "separator" ? props.vertical ? "vertical" : "horizontal" : void 0,
"role": `${attrs.role || "separator"}`
}, null);
if (!slots.default) return divider;
return createBaseVNode("div", { "class": normalizeClass(["v-divider__wrapper", {
"v-divider__wrapper--gradient": props.gradient,
"v-divider__wrapper--inset": props.inset,
"v-divider__wrapper--vertical": props.vertical
}]) }, [
divider,
createBaseVNode("div", {
"class": "v-divider__content",
"style": normalizeStyle(contentStyles.value)
}, [slots.default()]),
divider
]);
});
return {};
}
});
//#endregion
export { VDivider as t };
//# sourceMappingURL=VDivider-BJiijT0J.js.map
File diff suppressed because one or more lines are too long
+103
View File
@@ -0,0 +1,103 @@
import { L as Text, Yn as shallowRef, ar as normalizeClass, et as createVNode, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { E as flattenFragments, P as includes, _ as convertToUnit, c as getCurrentInstanceName, l as propsFactory, n as genericComponent, x as destructComputed } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { r as useTextColor } from "./color-B6vuQruj.js";
import { a as useTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { n as IconValue, s as useIcon } from "./icons-k2ZLE_i8.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VIcon/VIcon.css";
//#region node_modules/vuetify/lib/composables/size.js
var predefinedSizes = [
"x-small",
"small",
"default",
"large",
"x-large"
];
var makeSizeProps = propsFactory({ size: {
type: [String, Number],
default: "default"
} }, "size");
function useSize(props, name = getCurrentInstanceName()) {
return destructComputed(() => {
const size = props.size;
let sizeClasses;
let sizeStyles;
if (includes(predefinedSizes, size)) sizeClasses = `${name}--size-${size}`;
else if (size) sizeStyles = {
width: convertToUnit(size),
height: convertToUnit(size)
};
return {
sizeClasses,
sizeStyles
};
});
}
//#endregion
//#region node_modules/vuetify/lib/components/VIcon/VIcon.js
var makeVIconProps = propsFactory({
color: String,
disabled: Boolean,
start: Boolean,
end: Boolean,
icon: IconValue,
opacity: [String, Number],
...makeComponentProps(),
...makeSizeProps(),
...makeTagProps({ tag: "i" }),
...makeThemeProps()
}, "VIcon");
var VIcon = genericComponent()({
name: "VIcon",
props: makeVIconProps(),
setup(props, { attrs, slots }) {
const slotIcon = shallowRef();
const { themeClasses } = useTheme();
const { iconData } = useIcon(() => slotIcon.value || props.icon);
const { sizeClasses } = useSize(props);
const { textColorClasses, textColorStyles } = useTextColor(() => props.color);
useRender(() => {
const slotValue = slots.default?.();
if (slotValue) slotIcon.value = flattenFragments(slotValue).filter((node) => node.type === Text && node.children && typeof node.children === "string")[0]?.children;
const hasClick = !!(attrs.onClick || attrs.onClickOnce);
return createVNode(iconData.value.component, {
"tag": props.tag,
"icon": iconData.value.icon,
"class": normalizeClass([
"v-icon",
"notranslate",
themeClasses.value,
sizeClasses.value,
textColorClasses.value,
{
"v-icon--clickable": hasClick,
"v-icon--disabled": props.disabled,
"v-icon--start": props.start,
"v-icon--end": props.end
},
props.class
]),
"style": normalizeStyle([
{ "--v-icon-opacity": props.opacity },
!sizeClasses.value ? {
fontSize: convertToUnit(props.size),
height: convertToUnit(props.size),
width: convertToUnit(props.size)
} : void 0,
textColorStyles.value,
props.style
]),
"role": hasClick ? "button" : void 0,
"aria-hidden": !hasClick,
"tabindex": hasClick ? props.disabled ? -1 : 0 : void 0
}, { default: () => [slotValue] });
});
return {};
}
});
//#endregion
export { makeSizeProps as n, useSize as r, VIcon as t };
//# sourceMappingURL=VIcon-1CJH_3Uo.js.map
File diff suppressed because one or more lines are too long
+363
View File
@@ -0,0 +1,363 @@
import { At as onBeforeMount, C as vShow, Cn as withDirectives, Dt as mergeProps, Kn as ref, M as Fragment, Ot as nextTick, Qn as toRef, U as computed, W as createBaseVNode, Yn as shallowRef, ar as normalizeClass, et as createVNode, gn as watch, jt as onBeforeUnmount, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { _ as convertToUnit, et as SUPPORTS_INTERSECTION, l as propsFactory, n as genericComponent, s as getCurrentInstance, w as filterInputAttrs } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { t as useBackgroundColor } from "./color-B6vuQruj.js";
import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js";
import { n as useRounded, t as makeRoundedProps } from "./rounded-BuPGKRa9.js";
import { n as makeTransitionProps, t as MaybeTransition } from "./transition-DqoZ8fA1.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VImg/VImg.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VResponsive/VResponsive.css";
//#region node_modules/vuetify/lib/components/VResponsive/VResponsive.js
function useAspectStyles(props) {
return { aspectStyles: computed(() => {
const ratio = Number(props.aspectRatio);
return ratio ? { paddingBottom: String(1 / ratio * 100) + "%" } : void 0;
}) };
}
var makeVResponsiveProps = propsFactory({
aspectRatio: [String, Number],
contentClass: null,
inline: Boolean,
...makeComponentProps(),
...makeDimensionProps()
}, "VResponsive");
var VResponsive = genericComponent()({
name: "VResponsive",
props: makeVResponsiveProps(),
setup(props, { slots }) {
const { aspectStyles } = useAspectStyles(props);
const { dimensionStyles } = useDimension(props);
useRender(() => createBaseVNode("div", {
"class": normalizeClass([
"v-responsive",
{ "v-responsive--inline": props.inline },
props.class
]),
"style": normalizeStyle([dimensionStyles.value, props.style])
}, [
createBaseVNode("div", {
"class": "v-responsive__sizer",
"style": normalizeStyle(aspectStyles.value)
}, null),
slots.additional?.(),
slots.default && createBaseVNode("div", { "class": normalizeClass(["v-responsive__content", props.contentClass]) }, [slots.default()])
]));
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/directives/intersect/index.js
function mounted(el, binding) {
if (!SUPPORTS_INTERSECTION) return;
const modifiers = binding.modifiers || {};
const value = binding.value;
const { handler, options } = typeof value === "object" ? value : {
handler: value,
options: {}
};
const observer = new IntersectionObserver((entries = [], observer) => {
const _observe = el._observe?.[binding.instance.$.uid];
if (!_observe) return;
const isIntersecting = entries.some((entry) => entry.isIntersecting);
if (handler && (!modifiers.quiet || _observe.init) && (!modifiers.once || isIntersecting || _observe.init)) handler(isIntersecting, entries, observer);
if (isIntersecting && modifiers.once) unmounted(el, binding);
else _observe.init = true;
}, options);
el._observe = Object(el._observe);
el._observe[binding.instance.$.uid] = {
init: false,
observer
};
observer.observe(el);
}
function unmounted(el, binding) {
const observe = el._observe?.[binding.instance.$.uid];
if (!observe) return;
observe.observer.unobserve(el);
delete el._observe[binding.instance.$.uid];
}
var Intersect = {
mounted,
unmounted,
updated: (el, binding) => {
if (el._observe?.[binding.instance.$.uid]) {
unmounted(el, binding);
mounted(el, binding);
}
}
};
//#endregion
//#region node_modules/vuetify/lib/components/VImg/VImg.js
var makeVImgProps = propsFactory({
absolute: Boolean,
alt: String,
cover: Boolean,
color: String,
draggable: {
type: [Boolean, String],
default: void 0
},
eager: Boolean,
gradient: String,
imageClass: null,
lazySrc: String,
options: {
type: Object,
default: () => ({
root: void 0,
rootMargin: void 0,
threshold: void 0
})
},
sizes: String,
src: {
type: [String, Object],
default: ""
},
crossorigin: String,
referrerpolicy: String,
srcset: String,
position: String,
...makeVResponsiveProps(),
...makeComponentProps(),
...makeRoundedProps(),
...makeTransitionProps()
}, "VImg");
var VImg = genericComponent()({
name: "VImg",
directives: { vIntersect: Intersect },
inheritAttrs: false,
props: makeVImgProps(),
emits: {
loadstart: (value) => true,
load: (value) => true,
error: (value) => true
},
setup(props, { attrs, emit, slots }) {
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color);
const { roundedClasses } = useRounded(props);
const vm = getCurrentInstance("VImg");
const currentSrc = shallowRef("");
const image = ref();
const state = shallowRef(props.eager ? "loading" : "idle");
const naturalWidth = shallowRef();
const naturalHeight = shallowRef();
const normalisedSrc = computed(() => {
return props.src && typeof props.src === "object" ? {
src: props.src.src,
srcset: props.srcset || props.src.srcset,
lazySrc: props.lazySrc || props.src.lazySrc,
aspect: Number(props.aspectRatio || props.src.aspect || 0)
} : {
src: props.src,
srcset: props.srcset,
lazySrc: props.lazySrc,
aspect: Number(props.aspectRatio || 0)
};
});
const aspectRatio = computed(() => {
return normalisedSrc.value.aspect || naturalWidth.value / naturalHeight.value || 0;
});
watch(() => props.src, () => {
init(state.value !== "idle");
});
watch(aspectRatio, (val, oldVal) => {
if (!val && oldVal && image.value) pollForSize(image.value);
});
onBeforeMount(() => init());
function init(isIntersecting) {
if (props.eager && isIntersecting) return;
if (SUPPORTS_INTERSECTION && !isIntersecting && !props.eager) return;
state.value = "loading";
if (normalisedSrc.value.lazySrc) {
const lazyImg = new Image();
lazyImg.src = normalisedSrc.value.lazySrc;
pollForSize(lazyImg, null);
}
if (!normalisedSrc.value.src) return;
nextTick(() => {
emit("loadstart", image.value?.currentSrc || normalisedSrc.value.src);
setTimeout(() => {
if (vm.isUnmounted) return;
if (image.value?.complete) {
if (!image.value.naturalWidth) onError();
if (state.value === "error") return;
if (!aspectRatio.value) pollForSize(image.value, null);
if (state.value === "loading") onLoad();
} else {
if (!aspectRatio.value) pollForSize(image.value);
getSrc();
}
});
});
}
function onLoad() {
if (vm.isUnmounted) return;
getSrc();
pollForSize(image.value);
state.value = "loaded";
emit("load", image.value?.currentSrc || normalisedSrc.value.src);
}
function onError() {
if (vm.isUnmounted) return;
state.value = "error";
emit("error", image.value?.currentSrc || normalisedSrc.value.src);
}
function getSrc() {
const img = image.value;
if (img) currentSrc.value = img.currentSrc || img.src;
}
let timer = -1;
onBeforeUnmount(() => {
clearTimeout(timer);
});
function pollForSize(img, timeout = 100) {
const poll = () => {
clearTimeout(timer);
if (vm.isUnmounted) return;
const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img;
if (imgHeight || imgWidth) {
naturalWidth.value = imgWidth;
naturalHeight.value = imgHeight;
} else if (!img.complete && state.value === "loading" && timeout != null) timer = window.setTimeout(poll, timeout);
else if (img.currentSrc.endsWith(".svg") || img.currentSrc.startsWith("data:image/svg+xml")) {
naturalWidth.value = 1;
naturalHeight.value = 1;
}
};
poll();
}
const containClasses = toRef(() => ({
"v-img__img--cover": props.cover,
"v-img__img--contain": !props.cover
}));
const __image = () => {
if (!normalisedSrc.value.src || state.value === "idle") return null;
const img = createBaseVNode("img", {
"class": normalizeClass([
"v-img__img",
containClasses.value,
props.imageClass
]),
"style": { objectPosition: props.position },
"crossorigin": props.crossorigin,
"src": normalisedSrc.value.src,
"srcset": normalisedSrc.value.srcset,
"alt": props.alt,
"referrerpolicy": props.referrerpolicy,
"draggable": props.draggable,
"sizes": props.sizes,
"ref": image,
"onLoad": onLoad,
"onError": onError
}, null);
const sources = slots.sources?.();
return createVNode(MaybeTransition, {
"transition": props.transition,
"appear": true
}, { default: () => [withDirectives(sources ? createBaseVNode("picture", { "class": "v-img__picture" }, [sources, img]) : img, [[vShow, state.value === "loaded"]])] });
};
const __preloadImage = () => createVNode(MaybeTransition, { "transition": props.transition }, { default: () => [normalisedSrc.value.lazySrc && state.value !== "loaded" && createBaseVNode("img", {
"class": normalizeClass([
"v-img__img",
"v-img__img--preload",
containClasses.value
]),
"style": { objectPosition: props.position },
"crossorigin": props.crossorigin,
"src": normalisedSrc.value.lazySrc,
"alt": props.alt,
"referrerpolicy": props.referrerpolicy,
"draggable": props.draggable
}, null)] });
const __placeholder = () => {
if (!slots.placeholder) return null;
return createVNode(MaybeTransition, {
"transition": props.transition,
"appear": true
}, { default: () => [(state.value === "loading" || state.value === "error" && !slots.error) && createBaseVNode("div", { "class": "v-img__placeholder" }, [slots.placeholder()])] });
};
const __error = () => {
if (!slots.error) return null;
return createVNode(MaybeTransition, {
"transition": props.transition,
"appear": true
}, { default: () => [state.value === "error" && createBaseVNode("div", { "class": "v-img__error" }, [slots.error()])] });
};
const __gradient = () => {
if (!props.gradient) return null;
return createBaseVNode("div", {
"class": "v-img__gradient",
"style": { backgroundImage: `linear-gradient(${props.gradient})` }
}, null);
};
const isBooted = shallowRef(false);
{
const stop = watch(aspectRatio, (val) => {
if (val) {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
isBooted.value = true;
});
});
stop();
}
});
}
useRender(() => {
const responsiveProps = VResponsive.filterProps(props);
const [rootAttrs, imageAttrs] = filterInputAttrs(attrs);
return withDirectives(createVNode(VResponsive, mergeProps({
"class": [
"v-img",
{
"v-img--absolute": props.absolute,
"v-img--booting": !isBooted.value,
"v-img--fit-content": props.width === "fit-content"
},
backgroundColorClasses.value,
roundedClasses.value,
props.class
],
"style": [
{ width: convertToUnit(props.width === "auto" ? naturalWidth.value : props.width) },
backgroundColorStyles.value,
props.style
]
}, responsiveProps, rootAttrs, {
"aspectRatio": aspectRatio.value,
"aria-label": props.alt,
"role": props.alt ? "img" : void 0
}), {
additional: () => createBaseVNode(Fragment, null, [
createVNode(__image, imageAttrs, null),
createVNode(__preloadImage, null, null),
createVNode(__gradient, null, null),
createVNode(__placeholder, null, null),
createVNode(__error, null, null)
]),
default: slots.default
}), [[
Intersect,
{
handler: init,
options: props.options
},
null,
{ once: true }
]]);
});
return {
currentSrc,
image,
state,
naturalWidth,
naturalHeight
};
}
});
//#endregion
export { Intersect as n, VImg as t };
//# sourceMappingURL=VImg-DaEUT7gG.js.map
File diff suppressed because one or more lines are too long
+720
View File
@@ -0,0 +1,720 @@
import { At as onBeforeMount, Cn as withDirectives, Dt as mergeProps, Ft as onMounted, Kn as ref, M as Fragment, Ot as nextTick, Qn as toRef, U as computed, Ut as provide, Vn as onScopeDispose, W as createBaseVNode, Yn as shallowRef, ar as normalizeClass, cn as useId, et as createVNode, gn as watch, jt as onBeforeUnmount, nr as unref, sr as normalizeStyle, xt as inject } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { B as matchesSelector, K as pick, Z as wrapInArray, a as provideDefaults, c as getCurrentInstanceName, d as EventProp, f as callEvent, l as propsFactory, n as genericComponent, s as getCurrentInstance, w as filterInputAttrs } from "./defineComponent-DB6xIcDy.js";
import { a as VSlideYTransition } from "./transitions-DCQ3sjjZ.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as deepEqual } from "./deepEqual-DDqmGqyF.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { r as useTextColor, t as useBackgroundColor } from "./color-B6vuQruj.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { n as IconValue } from "./icons-k2ZLE_i8.js";
import { n as useToggleScope, t as useProxiedModel } from "./proxiedModel-DSlSIQ0y.js";
import { i as useRtl, r as useLocale } from "./locale-DDGMqzqb.js";
import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js";
import { n as makeTransitionProps, t as MaybeTransition } from "./transition-DqoZ8fA1.js";
import { n as useDensity, t as makeDensityProps } from "./density-CpKZ5PhP.js";
import { t as VIcon } from "./VIcon-1CJH_3Uo.js";
import { t as Ripple } from "./ripple-Z40rPDte.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VSelectionControl/VSelectionControl.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VLabel/VLabel.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VSelectionControlGroup/VSelectionControlGroup.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VInput/VInput.css";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VMessages/VMessages.css";
//#region node_modules/vuetify/lib/components/VLabel/VLabel.js
var makeVLabelProps = propsFactory({
text: String,
onClick: EventProp(),
...makeComponentProps(),
...makeThemeProps()
}, "VLabel");
var VLabel = genericComponent()({
name: "VLabel",
props: makeVLabelProps(),
setup(props, { slots }) {
useRender(() => createBaseVNode("label", {
"class": normalizeClass([
"v-label",
{ "v-label--clickable": !!props.onClick },
props.class
]),
"style": normalizeStyle(props.style),
"onClick": props.onClick
}, [props.text, slots.default?.()]));
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VSelectionControlGroup/VSelectionControlGroup.js
var VSelectionControlGroupSymbol = Symbol.for("vuetify:selection-control-group");
var makeSelectionControlGroupProps = propsFactory({
color: String,
disabled: {
type: Boolean,
default: null
},
defaultsTarget: String,
error: Boolean,
id: String,
inline: Boolean,
falseIcon: IconValue,
trueIcon: IconValue,
ripple: {
type: [Boolean, Object],
default: true
},
multiple: {
type: Boolean,
default: null
},
name: String,
readonly: {
type: Boolean,
default: null
},
modelValue: null,
type: String,
valueComparator: {
type: Function,
default: deepEqual
},
...makeComponentProps(),
...makeDensityProps(),
...makeThemeProps()
}, "SelectionControlGroup");
var makeVSelectionControlGroupProps = propsFactory({ ...makeSelectionControlGroupProps({ defaultsTarget: "VSelectionControl" }) }, "VSelectionControlGroup");
genericComponent()({
name: "VSelectionControlGroup",
props: makeVSelectionControlGroupProps(),
emits: { "update:modelValue": (value) => true },
setup(props, { slots }) {
const modelValue = useProxiedModel(props, "modelValue");
const uid = useId();
const id = toRef(() => props.id || `v-selection-control-group-${uid}`);
const name = toRef(() => props.name || id.value);
const updateHandlers = /* @__PURE__ */ new Set();
provide(VSelectionControlGroupSymbol, {
modelValue,
forceUpdate: () => {
updateHandlers.forEach((fn) => fn());
},
onForceUpdate: (cb) => {
updateHandlers.add(cb);
onScopeDispose(() => {
updateHandlers.delete(cb);
});
}
});
provideDefaults({ [props.defaultsTarget]: {
color: toRef(() => props.color),
disabled: toRef(() => props.disabled),
density: toRef(() => props.density),
error: toRef(() => props.error),
inline: toRef(() => props.inline),
modelValue,
multiple: toRef(() => !!props.multiple || props.multiple == null && Array.isArray(modelValue.value)),
name,
falseIcon: toRef(() => props.falseIcon),
trueIcon: toRef(() => props.trueIcon),
readonly: toRef(() => props.readonly),
ripple: toRef(() => props.ripple),
type: toRef(() => props.type),
valueComparator: toRef(() => props.valueComparator)
} });
useRender(() => createBaseVNode("div", {
"class": normalizeClass([
"v-selection-control-group",
{ "v-selection-control-group--inline": props.inline },
props.class
]),
"style": normalizeStyle(props.style),
"role": props.type === "radio" ? "radiogroup" : void 0
}, [slots.default?.()]));
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VSelectionControl/VSelectionControl.js
var makeVSelectionControlProps = propsFactory({
label: String,
baseColor: String,
trueValue: null,
falseValue: null,
value: null,
...makeComponentProps(),
...makeSelectionControlGroupProps()
}, "VSelectionControl");
function useSelectionControl(props) {
const group = inject(VSelectionControlGroupSymbol, void 0);
const { densityClasses } = useDensity(props);
const modelValue = useProxiedModel(props, "modelValue");
const trueValue = computed(() => props.trueValue !== void 0 ? props.trueValue : props.value !== void 0 ? props.value : true);
const falseValue = computed(() => props.falseValue !== void 0 ? props.falseValue : false);
const isMultiple = computed(() => !!props.multiple || props.multiple == null && Array.isArray(modelValue.value));
const model = computed({
get() {
const val = group ? group.modelValue.value : modelValue.value;
return isMultiple.value ? wrapInArray(val).some((v) => props.valueComparator(v, trueValue.value)) : props.valueComparator(val, trueValue.value);
},
set(val) {
if (props.readonly) return;
const currentValue = val ? trueValue.value : falseValue.value;
let newVal = currentValue;
if (isMultiple.value) newVal = val ? [...wrapInArray(modelValue.value), currentValue] : wrapInArray(modelValue.value).filter((item) => !props.valueComparator(item, trueValue.value));
if (group) group.modelValue.value = newVal;
else modelValue.value = newVal;
}
});
const { textColorClasses, textColorStyles } = useTextColor(() => {
if (props.error || props.disabled) return void 0;
return model.value ? props.color : props.baseColor;
});
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => {
return model.value && !props.error && !props.disabled ? props.color : props.baseColor;
});
return {
group,
densityClasses,
trueValue,
falseValue,
model,
textColorClasses,
textColorStyles,
backgroundColorClasses,
backgroundColorStyles,
icon: computed(() => model.value ? props.trueIcon : props.falseIcon)
};
}
var VSelectionControl = genericComponent()({
name: "VSelectionControl",
directives: { vRipple: Ripple },
inheritAttrs: false,
props: makeVSelectionControlProps(),
emits: { "update:modelValue": (value) => true },
setup(props, { attrs, slots }) {
const { group, densityClasses, icon, model, textColorClasses, textColorStyles, backgroundColorClasses, backgroundColorStyles, trueValue } = useSelectionControl(props);
const uid = useId();
const isFocused = shallowRef(false);
const isFocusVisible = shallowRef(false);
const input = ref();
const id = toRef(() => props.id || `input-${uid}`);
const isInteractive = toRef(() => !props.disabled && !props.readonly);
group?.onForceUpdate(() => {
if (input.value) input.value.checked = model.value;
});
function onFocus(e) {
if (props.disabled) return;
isFocused.value = true;
if (matchesSelector(e.target, ":focus-visible") !== false) isFocusVisible.value = true;
}
function onBlur() {
isFocused.value = false;
isFocusVisible.value = false;
}
function onClickLabel(e) {
e.stopPropagation();
}
function onInput(e) {
if (!isInteractive.value) {
if (input.value) input.value.checked = model.value;
return;
}
if (props.readonly && group) nextTick(() => group.forceUpdate());
model.value = e.target.checked;
}
useRender(() => {
const label = slots.label ? slots.label({
label: props.label,
props: { for: id.value }
}) : props.label;
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
const inputNode = createBaseVNode("input", mergeProps({
"ref": input,
"checked": model.value,
"disabled": !!props.disabled,
"id": id.value,
"onBlur": onBlur,
"onFocus": onFocus,
"onInput": onInput,
"aria-disabled": !!props.disabled,
"aria-label": props.label,
"type": props.type,
"value": trueValue.value,
"name": props.name,
"aria-checked": props.type === "checkbox" ? model.value : void 0
}, inputAttrs), null);
return createBaseVNode("div", mergeProps({ "class": [
"v-selection-control",
{
"v-selection-control--dirty": model.value,
"v-selection-control--disabled": props.disabled,
"v-selection-control--error": props.error,
"v-selection-control--focused": isFocused.value,
"v-selection-control--focus-visible": isFocusVisible.value,
"v-selection-control--inline": props.inline
},
densityClasses.value,
props.class
] }, rootAttrs, { "style": props.style }), [createBaseVNode("div", {
"class": normalizeClass(["v-selection-control__wrapper", textColorClasses.value]),
"style": normalizeStyle(textColorStyles.value)
}, [slots.default?.({
backgroundColorClasses,
backgroundColorStyles
}), withDirectives(createBaseVNode("div", { "class": normalizeClass(["v-selection-control__input"]) }, [slots.input?.({
model,
textColorClasses,
textColorStyles,
backgroundColorClasses,
backgroundColorStyles,
inputNode,
icon: icon.value,
props: {
onFocus,
onBlur,
id: id.value
}
}) ?? createBaseVNode(Fragment, null, [icon.value && createVNode(VIcon, {
"key": "icon",
"icon": icon.value
}, null), inputNode])]), [[
Ripple,
!props.disabled && !props.readonly && props.ripple,
null,
{
center: true,
circle: true
}
]])]), label && createVNode(VLabel, {
"for": id.value,
"onClick": onClickLabel
}, { default: () => [label] })]);
});
return {
isFocused,
input
};
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VInput/InputIcon.js
function useInputIcon(props) {
const { t } = useLocale();
function InputIcon({ name, color, ...attrs }) {
const localeKey = {
prepend: "prependAction",
prependInner: "prependAction",
append: "appendAction",
appendInner: "appendAction",
clear: "clear"
}[name];
const listener = props[`onClick:${name}`];
function onKeydown(e) {
if (e.key !== "Enter" && e.key !== " ") return;
e.preventDefault();
e.stopPropagation();
callEvent(listener, new PointerEvent("click", e));
}
const label = listener && localeKey ? t(`$vuetify.input.${localeKey}`, props.label ?? "") : void 0;
return createVNode(VIcon, mergeProps({
"icon": props[`${name}Icon`],
"aria-label": label,
"onClick": listener,
"onKeydown": onKeydown,
"color": color
}, attrs), null);
}
return { InputIcon };
}
//#endregion
//#region node_modules/vuetify/lib/components/VMessages/VMessages.js
var makeVMessagesProps = propsFactory({
active: Boolean,
color: String,
messages: {
type: [Array, String],
default: () => []
},
...makeComponentProps(),
...makeTransitionProps({ transition: {
component: VSlideYTransition,
leaveAbsolute: true,
group: true
} })
}, "VMessages");
var VMessages = genericComponent()({
name: "VMessages",
props: makeVMessagesProps(),
setup(props, { slots }) {
const messages = computed(() => wrapInArray(props.messages));
const { textColorClasses, textColorStyles } = useTextColor(() => props.color);
useRender(() => createVNode(MaybeTransition, {
"transition": props.transition,
"tag": "div",
"class": normalizeClass([
"v-messages",
textColorClasses.value,
props.class
]),
"style": normalizeStyle([textColorStyles.value, props.style])
}, { default: () => [props.active && messages.value.map((message, i) => createBaseVNode("div", {
"class": "v-messages__message",
"key": `${i}-${messages.value}`
}, [slots.message ? slots.message({ message }) : message]))] }));
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/composables/focus.js
var makeFocusProps = propsFactory({
focused: Boolean,
"onUpdate:focused": EventProp()
}, "focus");
function useFocus(props, name = getCurrentInstanceName()) {
const isFocused = useProxiedModel(props, "focused");
const focusClasses = toRef(() => {
return { [`${name}--focused`]: isFocused.value };
});
function focus() {
isFocused.value = true;
}
function blur() {
isFocused.value = false;
}
return {
focusClasses,
isFocused,
focus,
blur
};
}
//#endregion
//#region node_modules/vuetify/lib/composables/form.js
var FormKey = Symbol.for("vuetify:form");
propsFactory({
disabled: Boolean,
fastFail: Boolean,
readonly: Boolean,
modelValue: {
type: Boolean,
default: null
},
validateOn: {
type: String,
default: "input"
}
}, "form");
function useForm(props) {
const form = inject(FormKey, null);
return {
...form,
isReadonly: computed(() => !!(props?.readonly ?? form?.isReadonly.value)),
isDisabled: computed(() => !!(props?.disabled ?? form?.isDisabled.value))
};
}
//#endregion
//#region node_modules/vuetify/lib/labs/rules/rules.js
var RulesSymbol = Symbol.for("vuetify:rules");
function useRules(fn) {
const rules = inject(RulesSymbol, null);
if (!fn) {
if (!rules) throw new Error("Could not find Vuetify rules injection");
return rules.aliases;
}
return rules?.resolve(fn) ?? toRef(fn);
}
//#endregion
//#region node_modules/vuetify/lib/composables/validation.js
var makeValidationProps = propsFactory({
disabled: {
type: Boolean,
default: null
},
error: Boolean,
errorMessages: {
type: [Array, String],
default: () => []
},
maxErrors: {
type: [Number, String],
default: 1
},
name: String,
label: String,
readonly: {
type: Boolean,
default: null
},
rules: {
type: Array,
default: () => []
},
modelValue: null,
validateOn: String,
validationValue: null,
...makeFocusProps()
}, "validation");
function useValidation(props, name = getCurrentInstanceName(), id = useId()) {
const model = useProxiedModel(props, "modelValue");
const validationModel = computed(() => props.validationValue === void 0 ? model.value : props.validationValue);
const form = useForm(props);
const rules = useRules(() => props.rules);
const internalErrorMessages = ref([]);
const isPristine = shallowRef(true);
const isDirty = computed(() => !!(wrapInArray(model.value === "" ? null : model.value).length || wrapInArray(validationModel.value === "" ? null : validationModel.value).length));
const errorMessages = computed(() => {
return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors))) : internalErrorMessages.value;
});
const validateOn = computed(() => {
let value = (props.validateOn ?? form.validateOn?.value) || "input";
if (value === "lazy") value = "input lazy";
if (value === "eager") value = "input eager";
const set = new Set(value?.split(" ") ?? []);
return {
input: set.has("input"),
blur: set.has("blur") || set.has("input") || set.has("invalid-input"),
invalidInput: set.has("invalid-input"),
lazy: set.has("lazy"),
eager: set.has("eager")
};
});
const isValid = computed(() => {
if (props.error || props.errorMessages?.length) return false;
if (!props.rules.length) return true;
if (isPristine.value) return internalErrorMessages.value.length || validateOn.value.lazy ? null : true;
else return !internalErrorMessages.value.length;
});
const isValidating = shallowRef(false);
const validationClasses = computed(() => {
return {
[`${name}--error`]: isValid.value === false,
[`${name}--dirty`]: isDirty.value,
[`${name}--disabled`]: form.isDisabled.value,
[`${name}--readonly`]: form.isReadonly.value
};
});
const vm = getCurrentInstance("validation");
const uid = computed(() => props.name ?? unref(id));
onBeforeMount(() => {
form.register?.({
id: uid.value,
vm,
validate,
reset,
resetValidation
});
});
onBeforeUnmount(() => {
form.unregister?.(uid.value);
});
onMounted(async () => {
if (!validateOn.value.lazy) await validate(!validateOn.value.eager);
form.update?.(uid.value, isValid.value, errorMessages.value);
});
useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {
watch(validationModel, () => {
if (validationModel.value != null) validate();
else if (props.focused) {
const unwatch = watch(() => props.focused, (val) => {
if (!val) validate();
unwatch();
});
}
});
});
useToggleScope(() => validateOn.value.blur, () => {
watch(() => props.focused, (val) => {
if (!val) validate();
});
});
watch([isValid, errorMessages], () => {
form.update?.(uid.value, isValid.value, errorMessages.value);
});
async function reset() {
model.value = null;
await nextTick();
await resetValidation();
}
async function resetValidation() {
isPristine.value = true;
if (!validateOn.value.lazy) await validate(!validateOn.value.eager);
else internalErrorMessages.value = [];
}
async function validate(silent = false) {
const results = [];
isValidating.value = true;
for (const rule of rules.value) {
if (results.length >= Number(props.maxErrors ?? 1)) break;
const result = await (typeof rule === "function" ? rule : () => rule)(validationModel.value);
if (result === true) continue;
if (result !== false && typeof result !== "string") {
console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`);
continue;
}
results.push(result || "");
}
internalErrorMessages.value = results;
isValidating.value = false;
isPristine.value = silent;
return internalErrorMessages.value;
}
return {
errorMessages,
isDirty,
isDisabled: form.isDisabled,
isReadonly: form.isReadonly,
isPristine,
isValid,
isValidating,
reset,
resetValidation,
validate,
validationClasses
};
}
//#endregion
//#region node_modules/vuetify/lib/components/VInput/VInput.js
var makeVInputProps = propsFactory({
id: String,
appendIcon: IconValue,
baseColor: String,
centerAffix: {
type: Boolean,
default: true
},
color: String,
glow: Boolean,
iconColor: [Boolean, String],
prependIcon: IconValue,
hideDetails: [Boolean, String],
hideSpinButtons: Boolean,
hint: String,
indentDetails: {
type: Boolean,
default: null
},
persistentHint: Boolean,
messages: {
type: [Array, String],
default: () => []
},
direction: {
type: String,
default: "horizontal",
validator: (v) => ["horizontal", "vertical"].includes(v)
},
"onClick:prepend": EventProp(),
"onClick:append": EventProp(),
...makeComponentProps(),
...makeDensityProps(),
...pick(makeDimensionProps(), [
"maxWidth",
"minWidth",
"width"
]),
...makeThemeProps(),
...makeValidationProps()
}, "VInput");
var VInput = genericComponent()({
name: "VInput",
props: { ...makeVInputProps() },
emits: { "update:modelValue": (value) => true },
setup(props, { attrs, slots, emit }) {
const { densityClasses } = useDensity(props);
const { dimensionStyles } = useDimension(props);
const { themeClasses } = provideTheme(props);
const { rtlClasses } = useRtl();
const { InputIcon } = useInputIcon(props);
const uid = useId();
const id = computed(() => props.id || `input-${uid}`);
const { errorMessages, isDirty, isDisabled, isReadonly, isPristine, isValid, isValidating, reset, resetValidation, validate, validationClasses } = useValidation(props, "v-input", id);
const messages = computed(() => {
if (props.errorMessages?.length || !isPristine.value && errorMessages.value.length) return errorMessages.value;
else if (props.hint && (props.persistentHint || props.focused)) return props.hint;
else return props.messages;
});
const hasMessages = toRef(() => messages.value.length > 0);
const hasDetails = toRef(() => !props.hideDetails || props.hideDetails === "auto" && (hasMessages.value || !!slots.details));
const messagesId = computed(() => hasDetails.value ? `${id.value}-messages` : void 0);
const slotProps = computed(() => ({
id,
messagesId,
isDirty,
isDisabled,
isReadonly,
isPristine,
isValid,
isValidating,
hasDetails,
reset,
resetValidation,
validate
}));
const color = toRef(() => {
return props.error || props.disabled ? void 0 : props.focused ? props.color : props.baseColor;
});
const iconColor = toRef(() => {
if (!props.iconColor) return void 0;
return props.iconColor === true ? color.value : props.iconColor;
});
useRender(() => {
const hasPrepend = !!(slots.prepend || props.prependIcon);
const hasAppend = !!(slots.append || props.appendIcon);
return createBaseVNode("div", {
"class": normalizeClass([
"v-input",
`v-input--${props.direction}`,
{
"v-input--center-affix": props.centerAffix,
"v-input--focused": props.focused,
"v-input--glow": props.glow,
"v-input--hide-spin-buttons": props.hideSpinButtons,
"v-input--indent-details": props.indentDetails
},
densityClasses.value,
themeClasses.value,
rtlClasses.value,
validationClasses.value,
props.class
]),
"style": normalizeStyle([dimensionStyles.value, props.style])
}, [
hasPrepend && createBaseVNode("div", {
"key": "prepend",
"class": "v-input__prepend"
}, [slots.prepend ? slots.prepend(slotProps.value) : props.prependIcon && createVNode(InputIcon, {
"key": "prepend-icon",
"name": "prepend",
"color": iconColor.value
}, null)]),
slots.default && createBaseVNode("div", { "class": "v-input__control" }, [slots.default?.(slotProps.value)]),
hasAppend && createBaseVNode("div", {
"key": "append",
"class": "v-input__append"
}, [slots.append ? slots.append(slotProps.value) : props.appendIcon && createVNode(InputIcon, {
"key": "append-icon",
"name": "append",
"color": iconColor.value
}, null)]),
hasDetails.value && createBaseVNode("div", {
"id": messagesId.value,
"class": "v-input__details",
"role": "alert",
"aria-live": "polite"
}, [createVNode(VMessages, {
"active": hasMessages.value,
"messages": messages.value
}, { message: slots.message }), slots.details?.(slotProps.value)])
]);
});
return {
reset,
resetValidation,
validate,
isValid,
errorMessages
};
}
});
//#endregion
export { useFocus as a, makeVSelectionControlProps as c, makeFocusProps as i, VLabel as l, makeVInputProps as n, useInputIcon as o, useForm as r, VSelectionControl as s, VInput as t };
//# sourceMappingURL=VInput-BxI8SL-_.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+140
View File
@@ -0,0 +1,140 @@
import { Dt as mergeProps, Kn as ref, Nt as onDeactivated, Qn as toRef, U as computed, Ut as provide, Yn as shallowRef, cn as useId, et as createVNode, gn as watch, jt as onBeforeUnmount, xt as inject } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { D as focusChild, F as isClickInsideElement, H as omit, O as focusableChildren, k as getNextElement, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { o as VDialogTransition } from "./transitions-DCQ3sjjZ.js";
import { n as makeVOverlayProps, r as VMenuSymbol, t as VOverlay } from "./VOverlay-BS8OrX3g.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { t as useProxiedModel } from "./proxiedModel-DSlSIQ0y.js";
import { i as useRtl } from "./locale-DDGMqzqb.js";
import { t as VDefaultsProvider } from "./VDefaultsProvider-C09t4-My.js";
import { t as useScopeId } from "./scopeId-CyMkmyzM.js";
import { t as forwardRefs } from "./forwardRefs-CW3d8km7.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VMenu/VMenu.css";
//#region node_modules/vuetify/lib/components/VMenu/VMenu.js
var makeVMenuProps = propsFactory({
id: String,
submenu: Boolean,
...omit(makeVOverlayProps({
captureFocus: true,
closeDelay: 250,
closeOnContentClick: true,
locationStrategy: "connected",
location: void 0,
openDelay: 300,
scrim: false,
scrollStrategy: "reposition",
transition: { component: VDialogTransition }
}), ["absolute"])
}, "VMenu");
var VMenu = genericComponent()({
name: "VMenu",
props: makeVMenuProps(),
emits: { "update:modelValue": (value) => true },
setup(props, { slots }) {
const isActive = useProxiedModel(props, "modelValue");
const { scopeId } = useScopeId();
const { isRtl } = useRtl();
const uid = useId();
const id = toRef(() => props.id || `v-menu-${uid}`);
const overlay = ref();
const parent = inject(VMenuSymbol, null);
const openChildren = shallowRef(/* @__PURE__ */ new Set());
provide(VMenuSymbol, {
register() {
openChildren.value.add(uid);
},
unregister() {
openChildren.value.delete(uid);
},
closeParents(e) {
setTimeout(() => {
if (!openChildren.value.size && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
isActive.value = false;
parent?.closeParents();
}
}, 40);
}
});
onBeforeUnmount(() => parent?.unregister());
onDeactivated(() => isActive.value = false);
watch(isActive, (val) => {
val ? parent?.register() : parent?.unregister();
}, { immediate: true });
function onClickOutside(e) {
parent?.closeParents(e);
}
function onKeydown(e) {
if (props.disabled) return;
if (e.key === "Tab" || e.key === "Enter" && !props.closeOnContentClick) {
if (e.key === "Enter" && (e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLInputElement && !!e.target.closest("form"))) return;
if (e.key === "Enter") e.preventDefault();
if (!getNextElement(focusableChildren(overlay.value?.contentEl, false), e.shiftKey ? "prev" : "next", (el) => el.tabIndex >= 0) && !props.retainFocus) {
isActive.value = false;
overlay.value?.activatorEl?.focus();
}
} else if (props.submenu && e.key === (isRtl.value ? "ArrowRight" : "ArrowLeft")) {
isActive.value = false;
overlay.value?.activatorEl?.focus();
}
}
function onActivatorKeydown(e) {
if (props.disabled) return;
const el = overlay.value?.contentEl;
if (el && isActive.value) {
if (e.key === "ArrowDown") {
e.preventDefault();
e.stopImmediatePropagation();
focusChild(el, "next");
} else if (e.key === "ArrowUp") {
e.preventDefault();
e.stopImmediatePropagation();
focusChild(el, "prev");
} else if (props.submenu) {
if (e.key === (isRtl.value ? "ArrowRight" : "ArrowLeft")) isActive.value = false;
else if (e.key === (isRtl.value ? "ArrowLeft" : "ArrowRight")) {
e.preventDefault();
focusChild(el, "first");
}
}
} else if (props.submenu ? e.key === (isRtl.value ? "ArrowLeft" : "ArrowRight") : ["ArrowDown", "ArrowUp"].includes(e.key)) {
isActive.value = true;
e.preventDefault();
setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
}
}
const activatorProps = computed(() => mergeProps({
"aria-haspopup": "menu",
"aria-expanded": String(isActive.value),
"aria-controls": id.value,
"aria-owns": id.value,
onKeydown: onActivatorKeydown
}, props.activatorProps));
useRender(() => {
const overlayProps = VOverlay.filterProps(props);
return createVNode(VOverlay, mergeProps({
"ref": overlay,
"id": id.value,
"class": ["v-menu", props.class],
"style": props.style
}, overlayProps, {
"modelValue": isActive.value,
"onUpdate:modelValue": ($event) => isActive.value = $event,
"absolute": true,
"activatorProps": activatorProps.value,
"location": props.location ?? (props.submenu ? "end" : "bottom"),
"onClick:outside": onClickOutside,
"onKeydown": onKeydown
}, scopeId), {
activator: slots.activator,
default: (...args) => createVNode(VDefaultsProvider, { "root": "VMenu" }, { default: () => [slots.default?.(...args)] })
});
});
return forwardRefs({
id,
ΨopenChildren: openChildren
}, overlay);
}
});
//#endregion
export { VMenu as t };
//# sourceMappingURL=VMenu-DCQFp-2Y.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+149
View File
@@ -0,0 +1,149 @@
import { Ft as onMounted, Kn as ref, Qn as toRef, U as computed, W as createBaseVNode, Yn as shallowRef, _n as watchEffect, ar as normalizeClass, et as createVNode, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { $ as PREFERS_REDUCED_MOTION, _ as convertToUnit, g as clamp, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { r as useTextColor } from "./color-B6vuQruj.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { t as useResizeObserver } from "./resizeObserver-C12jWpYk.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { n as makeSizeProps, r as useSize } from "./VIcon-1CJH_3Uo.js";
import { i as useIntersectionObserver } from "./loader-CV4sMFhE.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VProgressCircular/VProgressCircular.css";
//#region node_modules/vuetify/lib/composables/reveal.js
var makeRevealProps = propsFactory({ reveal: {
type: [Boolean, Object],
default: false
} }, "reveal");
function useReveal(props) {
const defaultDuration = 900;
const duration = toRef(() => typeof props.reveal === "object" ? Math.max(0, Number(props.reveal.duration ?? defaultDuration)) : defaultDuration);
const state = shallowRef(props.reveal ? "initial" : "disabled");
onMounted(async () => {
if (props.reveal) {
state.value = "initial";
await new Promise((resolve) => requestAnimationFrame(resolve));
state.value = "pending";
await new Promise((resolve) => setTimeout(resolve, duration.value));
state.value = "done";
}
});
return {
duration,
state
};
}
//#endregion
//#region node_modules/vuetify/lib/components/VProgressCircular/VProgressCircular.js
var makeVProgressCircularProps = propsFactory({
bgColor: String,
color: String,
indeterminate: [Boolean, String],
rounded: Boolean,
modelValue: {
type: [Number, String],
default: 0
},
rotate: {
type: [Number, String],
default: 0
},
width: {
type: [Number, String],
default: 4
},
...makeComponentProps(),
...makeRevealProps(),
...makeSizeProps(),
...makeTagProps({ tag: "div" }),
...makeThemeProps()
}, "VProgressCircular");
var VProgressCircular = genericComponent()({
name: "VProgressCircular",
props: makeVProgressCircularProps(),
setup(props, { slots }) {
const MAGIC_RADIUS_CONSTANT = 20;
const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT;
const root = ref();
const { themeClasses } = provideTheme(props);
const { sizeClasses, sizeStyles } = useSize(props);
const { textColorClasses, textColorStyles } = useTextColor(() => props.color);
const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor);
const { intersectionRef, isIntersecting } = useIntersectionObserver();
const { resizeRef, contentRect } = useResizeObserver();
const { state: revealState, duration: revealDuration } = useReveal(props);
const normalizedValue = toRef(() => revealState.value === "initial" ? 0 : clamp(parseFloat(props.modelValue), 0, 100));
const width = toRef(() => Number(props.width));
const size = toRef(() => {
return sizeStyles.value ? Number(props.size) : contentRect.value ? contentRect.value.width : Math.max(width.value, 32);
});
const diameter = toRef(() => MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value) * 2);
const strokeWidth = toRef(() => width.value / size.value * diameter.value);
const strokeDashOffset = toRef(() => {
const baseLength = (100 - normalizedValue.value) / 100 * CIRCUMFERENCE;
return props.rounded && normalizedValue.value > 0 && normalizedValue.value < 100 ? convertToUnit(Math.min(CIRCUMFERENCE - .01, baseLength + strokeWidth.value)) : convertToUnit(baseLength);
});
const startAngle = computed(() => {
const baseAngle = Number(props.rotate);
return props.rounded ? baseAngle + strokeWidth.value / 2 / CIRCUMFERENCE * 360 : baseAngle;
});
watchEffect(() => {
intersectionRef.value = root.value;
resizeRef.value = root.value;
});
useRender(() => createVNode(props.tag, {
"ref": root,
"class": normalizeClass([
"v-progress-circular",
{
"v-progress-circular--indeterminate": !!props.indeterminate,
"v-progress-circular--visible": isIntersecting.value,
"v-progress-circular--disable-shrink": props.indeterminate && (props.indeterminate === "disable-shrink" || PREFERS_REDUCED_MOTION()),
"v-progress-circular--revealing": ["initial", "pending"].includes(revealState.value)
},
themeClasses.value,
sizeClasses.value,
textColorClasses.value,
props.class
]),
"style": normalizeStyle([
sizeStyles.value,
textColorStyles.value,
{ "--progress-reveal-duration": `${revealDuration.value}ms` },
props.style
]),
"role": "progressbar",
"aria-valuemin": "0",
"aria-valuemax": "100",
"aria-valuenow": props.indeterminate ? void 0 : normalizedValue.value
}, { default: () => [createBaseVNode("svg", {
"style": { transform: `rotate(calc(-90deg + ${startAngle.value}deg))` },
"xmlns": "http://www.w3.org/2000/svg",
"viewBox": `0 0 ${diameter.value} ${diameter.value}`
}, [createBaseVNode("circle", {
"class": normalizeClass(["v-progress-circular__underlay", underlayColorClasses.value]),
"style": normalizeStyle(underlayColorStyles.value),
"fill": "transparent",
"cx": "50%",
"cy": "50%",
"r": MAGIC_RADIUS_CONSTANT,
"stroke-width": strokeWidth.value,
"stroke-dasharray": CIRCUMFERENCE,
"stroke-dashoffset": 0
}, null), createBaseVNode("circle", {
"class": "v-progress-circular__overlay",
"fill": "transparent",
"cx": "50%",
"cy": "50%",
"r": MAGIC_RADIUS_CONSTANT,
"stroke-width": strokeWidth.value,
"stroke-dasharray": CIRCUMFERENCE,
"stroke-dashoffset": strokeDashOffset.value,
"stroke-linecap": props.rounded ? "round" : void 0
}, null)]), slots.default && createBaseVNode("div", { "class": "v-progress-circular__content" }, [slots.default({ value: normalizedValue.value })])] }));
return {};
}
});
//#endregion
export { VProgressCircular as t };
//# sourceMappingURL=VProgressCircular-yKv2qs75.js.map
File diff suppressed because one or more lines are too long
+64
View File
@@ -0,0 +1,64 @@
import { ar as normalizeClass, et as createVNode, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { t as useBackgroundColor } from "./color-B6vuQruj.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js";
import { n as useRounded, t as makeRoundedProps } from "./rounded-BuPGKRa9.js";
import { n as useBorder, t as makeBorderProps } from "./border-jCmRyoxP.js";
import { n as useElevation, t as makeElevationProps } from "./elevation-B0TH2wU6.js";
import { n as useLocation, t as makeLocationProps } from "./location-BIKTnDF4.js";
import { n as usePosition, t as makePositionProps } from "./position-BCUsnxVO.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VSheet/VSheet.css";
//#region node_modules/vuetify/lib/components/VSheet/VSheet.js
var makeVSheetProps = propsFactory({
color: String,
...makeBorderProps(),
...makeComponentProps(),
...makeDimensionProps(),
...makeElevationProps(),
...makeLocationProps(),
...makePositionProps(),
...makeRoundedProps(),
...makeTagProps(),
...makeThemeProps()
}, "VSheet");
var VSheet = genericComponent()({
name: "VSheet",
props: makeVSheetProps(),
setup(props, { slots }) {
const { themeClasses } = provideTheme(props);
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color);
const { borderClasses } = useBorder(props);
const { dimensionStyles } = useDimension(props);
const { elevationClasses } = useElevation(props);
const { locationStyles } = useLocation(props);
const { positionClasses } = usePosition(props);
const { roundedClasses } = useRounded(props);
useRender(() => createVNode(props.tag, {
"class": normalizeClass([
"v-sheet",
themeClasses.value,
backgroundColorClasses.value,
borderClasses.value,
elevationClasses.value,
positionClasses.value,
roundedClasses.value,
props.class
]),
"style": normalizeStyle([
backgroundColorStyles.value,
dimensionStyles.value,
locationStyles.value,
props.style
])
}, slots));
return {};
}
});
//#endregion
export { VSheet as t };
//# sourceMappingURL=VSheet-CLHX3uIJ.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"VSheet-CLHX3uIJ.js","names":["_createVNode","_normalizeClass","_normalizeStyle"],"sources":["../../vuetify/lib/components/VSheet/VSheet.js"],"sourcesContent":["import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VSheet.css\";\n\n// Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVSheetProps = propsFactory({\n color: String,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeLocationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps()\n}, 'VSheet');\nexport const VSheet = genericComponent()({\n name: 'VSheet',\n props: makeVSheetProps(),\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n borderClasses\n } = useBorder(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n positionClasses\n } = usePosition(props);\n const {\n roundedClasses\n } = useRounded(props);\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class]),\n \"style\": _normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style])\n }, slots));\n return {};\n }\n});\n//# sourceMappingURL=VSheet.js.map"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAa,kBAAkB,aAAa;CAC1C,OAAO;CACP,GAAG,iBAAiB;CACpB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,kBAAkB;CACrB,GAAG,cAAc;CACjB,GAAG,gBAAgB;CACpB,EAAE,SAAS;AACZ,IAAa,SAAS,kBAAkB,CAAC;CACvC,MAAM;CACN,OAAO,iBAAiB;CACxB,MAAM,OAAO,EACX,SACC;EACD,MAAM,EACJ,iBACE,aAAa,MAAM;EACvB,MAAM,EACJ,wBACA,0BACE,yBAAyB,MAAM,MAAM;EACzC,MAAM,EACJ,kBACE,UAAU,MAAM;EACpB,MAAM,EACJ,oBACE,aAAa,MAAM;EACvB,MAAM,EACJ,qBACE,aAAa,MAAM;EACvB,MAAM,EACJ,mBACE,YAAY,MAAM;EACtB,MAAM,EACJ,oBACE,YAAY,MAAM;EACtB,MAAM,EACJ,mBACE,WAAW,MAAM;AACrB,kBAAgBA,YAAa,MAAM,KAAK;GACtC,SAASC,eAAgB;IAAC;IAAW,aAAa;IAAO,uBAAuB;IAAO,cAAc;IAAO,iBAAiB;IAAO,gBAAgB;IAAO,eAAe;IAAO,MAAM;IAAM,CAAC;GAC9L,SAASC,eAAgB;IAAC,sBAAsB;IAAO,gBAAgB;IAAO,eAAe;IAAO,MAAM;IAAM,CAAC;GAClH,EAAE,MAAM,CAAC;AACV,SAAO,EAAE;;CAEZ,CAAC"}
+320
View File
@@ -0,0 +1,320 @@
import { U as computed, W as createBaseVNode, Yn as shallowRef, ar as normalizeClass, et as createVNode, gn as watch, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { O as focusableChildren, Q as IN_BROWSER, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { r as VFadeTransition } from "./transitions-DCQ3sjjZ.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { n as IconValue } from "./icons-k2ZLE_i8.js";
import { i as useRtl } from "./locale-DDGMqzqb.js";
import { a as useDisplay, i as makeDisplayProps } from "./display-DKaCj-_K.js";
import { r as useGoTo } from "./goto-Bn-PzNUr.js";
import { t as useResizeObserver } from "./resizeObserver-C12jWpYk.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { n as makeGroupProps, r as useGroup } from "./group-Cm2viEWK.js";
import { t as VIcon } from "./VIcon-1CJH_3Uo.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VSlideGroup/VSlideGroup.css";
//#region node_modules/vuetify/lib/components/VSlideGroup/helpers.js
function calculateUpdatedTarget({ selectedElement, containerElement, isRtl, isHorizontal }) {
const containerSize = getOffsetSize(isHorizontal, containerElement);
const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);
const childrenSize = getOffsetSize(isHorizontal, selectedElement);
const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);
const additionalOffset = childrenSize * .4;
if (scrollPosition > childrenStartPosition) return childrenStartPosition - additionalOffset;
else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) return childrenStartPosition - containerSize + childrenSize + additionalOffset;
return scrollPosition;
}
function calculateCenteredTarget({ selectedElement, containerElement, isHorizontal }) {
const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);
const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);
const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);
return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;
}
function getScrollSize(isHorizontal, element) {
return element?.[isHorizontal ? "scrollWidth" : "scrollHeight"] || 0;
}
function getScrollPosition(isHorizontal, rtl, element) {
if (!element) return 0;
const { scrollLeft, offsetWidth, scrollWidth } = element;
if (isHorizontal) return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;
return element.scrollTop;
}
function getOffsetSize(isHorizontal, element) {
return element?.[isHorizontal ? "offsetWidth" : "offsetHeight"] || 0;
}
function getOffsetPosition(isHorizontal, element) {
return element?.[isHorizontal ? "offsetLeft" : "offsetTop"] || 0;
}
//#endregion
//#region node_modules/vuetify/lib/components/VSlideGroup/VSlideGroup.js
var VSlideGroupSymbol = Symbol.for("vuetify:v-slide-group");
var makeVSlideGroupProps = propsFactory({
centerActive: Boolean,
scrollToActive: {
type: Boolean,
default: true
},
contentClass: null,
direction: {
type: String,
default: "horizontal"
},
symbol: {
type: null,
default: VSlideGroupSymbol
},
nextIcon: {
type: IconValue,
default: "$next"
},
prevIcon: {
type: IconValue,
default: "$prev"
},
showArrows: {
type: [Boolean, String],
validator: (v) => typeof v === "boolean" || [
"always",
"desktop",
"mobile",
"never"
].includes(v)
},
...makeComponentProps(),
...makeDisplayProps({ mobile: null }),
...makeTagProps(),
...makeGroupProps({ selectedClass: "v-slide-group-item--active" })
}, "VSlideGroup");
var VSlideGroup = genericComponent()({
name: "VSlideGroup",
props: makeVSlideGroupProps(),
emits: { "update:modelValue": (value) => true },
setup(props, { slots }) {
const { isRtl } = useRtl();
const { displayClasses, mobile } = useDisplay(props);
const group = useGroup(props, props.symbol);
const isOverflowing = shallowRef(false);
const scrollOffset = shallowRef(0);
const containerSize = shallowRef(0);
const contentSize = shallowRef(0);
const isHorizontal = computed(() => props.direction === "horizontal");
const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver();
const { resizeRef: contentRef, contentRect } = useResizeObserver();
const goTo = useGoTo();
const goToOptions = computed(() => {
return {
container: containerRef.el,
duration: 200,
easing: "easeOutQuart"
};
});
const firstSelectedIndex = computed(() => {
if (!group.selected.value.length) return -1;
return group.items.value.findIndex((item) => item.id === group.selected.value[0]);
});
const lastSelectedIndex = computed(() => {
if (!group.selected.value.length) return -1;
return group.items.value.findIndex((item) => item.id === group.selected.value[group.selected.value.length - 1]);
});
if (IN_BROWSER) {
let frame = -1;
watch(() => [
group.selected.value,
containerRect.value,
contentRect.value,
isHorizontal.value
], () => {
cancelAnimationFrame(frame);
frame = requestAnimationFrame(() => {
if (containerRect.value && contentRect.value) {
const sizeProperty = isHorizontal.value ? "width" : "height";
containerSize.value = containerRect.value[sizeProperty];
contentSize.value = contentRect.value[sizeProperty];
isOverflowing.value = containerSize.value + 1 < contentSize.value;
}
if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {
const selectedElement = contentRef.el.children[lastSelectedIndex.value];
scrollToChildren(selectedElement, props.centerActive);
}
});
});
}
const isFocused = shallowRef(false);
function scrollToChildren(children, center) {
let target = 0;
if (center) target = calculateCenteredTarget({
containerElement: containerRef.el,
isHorizontal: isHorizontal.value,
selectedElement: children
});
else target = calculateUpdatedTarget({
containerElement: containerRef.el,
isHorizontal: isHorizontal.value,
isRtl: isRtl.value,
selectedElement: children
});
scrollToPosition(target);
}
function scrollToPosition(newPosition) {
if (!IN_BROWSER || !containerRef.el) return;
const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el);
const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el);
if (getScrollSize(isHorizontal.value, containerRef.el) <= offsetSize || Math.abs(newPosition - scrollPosition) < 16) return;
if (isHorizontal.value && isRtl.value && containerRef.el) {
const { scrollWidth, offsetWidth: containerWidth } = containerRef.el;
newPosition = scrollWidth - containerWidth - newPosition;
}
if (isHorizontal.value) goTo.horizontal(newPosition, goToOptions.value);
else goTo(newPosition, goToOptions.value);
}
function onScroll(e) {
const { scrollTop, scrollLeft } = e.target;
scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop;
}
function onFocusin(e) {
isFocused.value = true;
if (!isOverflowing.value || !contentRef.el) return;
for (const el of e.composedPath()) for (const item of contentRef.el.children) if (item === el) {
scrollToChildren(item);
return;
}
}
function onFocusout(e) {
isFocused.value = false;
}
let ignoreFocusEvent = false;
function onFocus(e) {
if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget))) focus();
ignoreFocusEvent = false;
}
function onFocusAffixes() {
ignoreFocusEvent = true;
}
function onKeydown(e) {
if (!contentRef.el) return;
function toFocus(location) {
e.preventDefault();
focus(location);
}
if (isHorizontal.value) {
if (e.key === "ArrowRight") toFocus(isRtl.value ? "prev" : "next");
else if (e.key === "ArrowLeft") toFocus(isRtl.value ? "next" : "prev");
} else if (e.key === "ArrowDown") toFocus("next");
else if (e.key === "ArrowUp") toFocus("prev");
if (e.key === "Home") toFocus("first");
else if (e.key === "End") toFocus("last");
}
function getSiblingElement(el, location) {
if (!el) return void 0;
let sibling = el;
do
sibling = sibling?.[location === "next" ? "nextElementSibling" : "previousElementSibling"];
while (sibling?.hasAttribute("disabled"));
return sibling;
}
function focus(location) {
if (!contentRef.el) return;
let el;
if (!location) el = focusableChildren(contentRef.el)[0];
else if (location === "next") {
el = getSiblingElement(contentRef.el.querySelector(":focus"), location);
if (!el) return focus("first");
} else if (location === "prev") {
el = getSiblingElement(contentRef.el.querySelector(":focus"), location);
if (!el) return focus("last");
} else if (location === "first") {
el = contentRef.el.firstElementChild;
if (el?.hasAttribute("disabled")) el = getSiblingElement(el, "next");
} else if (location === "last") {
el = contentRef.el.lastElementChild;
if (el?.hasAttribute("disabled")) el = getSiblingElement(el, "prev");
}
if (el) el.focus({ preventScroll: true });
}
function scrollTo(location) {
const direction = isHorizontal.value && isRtl.value ? -1 : 1;
const offsetStep = (location === "prev" ? -direction : direction) * containerSize.value;
let newPosition = scrollOffset.value + offsetStep;
if (isHorizontal.value && isRtl.value && containerRef.el) {
const { scrollWidth, offsetWidth: containerWidth } = containerRef.el;
newPosition += scrollWidth - containerWidth;
}
scrollToPosition(newPosition);
}
const slotProps = computed(() => ({
next: group.next,
prev: group.prev,
select: group.select,
isSelected: group.isSelected
}));
const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0);
const hasAffixes = computed(() => {
switch (props.showArrows) {
case "never": return false;
case "always": return true;
case "desktop": return !mobile.value;
case true: return hasOverflowOrScroll.value;
case "mobile": return mobile.value || hasOverflowOrScroll.value;
default: return !mobile.value && hasOverflowOrScroll.value;
}
});
const hasPrev = computed(() => {
return Math.abs(scrollOffset.value) > 1;
});
const hasNext = computed(() => {
if (!hasOverflowOrScroll.value) return false;
return contentSize.value - containerSize.value - Math.abs(scrollOffset.value) > 1;
});
useRender(() => createVNode(props.tag, {
"class": normalizeClass([
"v-slide-group",
{
"v-slide-group--vertical": !isHorizontal.value,
"v-slide-group--has-affixes": hasAffixes.value,
"v-slide-group--is-overflowing": isOverflowing.value
},
displayClasses.value,
props.class
]),
"style": normalizeStyle(props.style),
"tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
"onFocus": onFocus
}, { default: () => [
hasAffixes.value && createBaseVNode("div", {
"key": "prev",
"class": normalizeClass(["v-slide-group__prev", { "v-slide-group__prev--disabled": !hasPrev.value }]),
"onMousedown": onFocusAffixes,
"onClick": () => hasPrev.value && scrollTo("prev")
}, [slots.prev?.(slotProps.value) ?? createVNode(VFadeTransition, null, { default: () => [createVNode(VIcon, { "icon": isRtl.value ? props.nextIcon : props.prevIcon }, null)] })]),
createBaseVNode("div", {
"key": "container",
"ref": containerRef,
"class": normalizeClass(["v-slide-group__container", props.contentClass]),
"onScroll": onScroll
}, [createBaseVNode("div", {
"ref": contentRef,
"class": "v-slide-group__content",
"onFocusin": onFocusin,
"onFocusout": onFocusout,
"onKeydown": onKeydown
}, [slots.default?.(slotProps.value)])]),
hasAffixes.value && createBaseVNode("div", {
"key": "next",
"class": normalizeClass(["v-slide-group__next", { "v-slide-group__next--disabled": !hasNext.value }]),
"onMousedown": onFocusAffixes,
"onClick": () => hasNext.value && scrollTo("next")
}, [slots.next?.(slotProps.value) ?? createVNode(VFadeTransition, null, { default: () => [createVNode(VIcon, { "icon": isRtl.value ? props.prevIcon : props.nextIcon }, null)] })])
] }));
return {
selected: group.selected,
scrollTo,
scrollOffset,
focus,
hasPrev,
hasNext
};
}
});
//#endregion
export { VSlideGroupSymbol as n, makeVSlideGroupProps as r, VSlideGroup as t };
//# sourceMappingURL=VSlideGroup-TpMGTwfd.js.map
File diff suppressed because one or more lines are too long
+170
View File
@@ -0,0 +1,170 @@
import { U as computed, W as createBaseVNode, Yn as shallowRef, ar as normalizeClass, et as createVNode, sr as normalizeStyle } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { _ as convertToUnit, a as provideDefaults, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { t as VExpandTransition } from "./transitions-DCQ3sjjZ.js";
import { t as makeComponentProps } from "./component-DdiwBe6i.js";
import { t as useRender } from "./useRender-fVtVsZgv.js";
import { t as useBackgroundColor } from "./color-B6vuQruj.js";
import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js";
import { i as useRtl } from "./locale-DDGMqzqb.js";
import { t as makeTagProps } from "./tag-C_KkCPzB.js";
import { t as VDefaultsProvider } from "./VDefaultsProvider-C09t4-My.js";
import { t as VImg } from "./VImg-DaEUT7gG.js";
import { n as useRounded, t as makeRoundedProps } from "./rounded-BuPGKRa9.js";
import { n as useBorder, t as makeBorderProps } from "./border-jCmRyoxP.js";
import { n as useElevation, t as makeElevationProps } from "./elevation-B0TH2wU6.js";
import { n as useLocation, t as makeLocationProps } from "./location-BIKTnDF4.js";
import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VToolbar/VToolbar.css";
//#region node_modules/vuetify/lib/components/VToolbar/VToolbarTitle.js
var makeVToolbarTitleProps = propsFactory({
text: String,
...makeComponentProps(),
...makeTagProps()
}, "VToolbarTitle");
var VToolbarTitle = genericComponent()({
name: "VToolbarTitle",
props: makeVToolbarTitleProps(),
setup(props, { slots }) {
useRender(() => {
const hasText = !!(slots.default || slots.text || props.text);
return createVNode(props.tag, {
"class": normalizeClass(["v-toolbar-title", props.class]),
"style": normalizeStyle(props.style)
}, { default: () => [hasText && createBaseVNode("div", { "class": "v-toolbar-title__placeholder" }, [slots.text ? slots.text() : props.text, slots.default?.()])] });
});
return {};
}
});
//#endregion
//#region node_modules/vuetify/lib/components/VToolbar/VToolbar.js
var allowedDensities = [
null,
"prominent",
"default",
"comfortable",
"compact"
];
var makeVToolbarProps = propsFactory({
absolute: Boolean,
collapse: Boolean,
collapsePosition: {
type: String,
default: "start"
},
color: String,
density: {
type: String,
default: "default",
validator: (v) => allowedDensities.includes(v)
},
extended: {
type: Boolean,
default: null
},
extensionHeight: {
type: [Number, String],
default: 48
},
flat: Boolean,
floating: Boolean,
height: {
type: [Number, String],
default: 64
},
image: String,
title: String,
...makeBorderProps(),
...makeComponentProps(),
...makeElevationProps(),
...makeLocationProps(),
...makeRoundedProps(),
...makeTagProps({ tag: "header" }),
...makeThemeProps()
}, "VToolbar");
var VToolbar = genericComponent()({
name: "VToolbar",
props: makeVToolbarProps(),
setup(props, { slots }) {
const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color);
const { borderClasses } = useBorder(props);
const { elevationClasses } = useElevation(props);
const { locationStyles } = useLocation(props);
const { roundedClasses } = useRounded(props);
const { themeClasses } = provideTheme(props);
const { rtlClasses } = useRtl();
const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === "prominent" ? Number(props.height) : 0) - (props.density === "comfortable" ? 8 : 0) - (props.density === "compact" ? 16 : 0), 10));
const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === "prominent" ? Number(props.extensionHeight) : 0) - (props.density === "comfortable" ? 4 : 0) - (props.density === "compact" ? 8 : 0), 10) : 0);
provideDefaults({ VBtn: { variant: "text" } });
useRender(() => {
const hasTitle = !!(props.title || slots.title);
const hasImage = !!(slots.image || props.image);
const extension = slots.extension?.();
isExtended.value = props.extended === null ? !!extension : props.extended;
return createVNode(props.tag, {
"class": normalizeClass([
"v-toolbar",
`v-toolbar--collapse-${props.collapsePosition}`,
{
"v-toolbar--absolute": props.absolute,
"v-toolbar--collapse": props.collapse,
"v-toolbar--flat": props.flat,
"v-toolbar--floating": props.floating,
[`v-toolbar--density-${props.density}`]: true
},
backgroundColorClasses.value,
borderClasses.value,
elevationClasses.value,
roundedClasses.value,
themeClasses.value,
rtlClasses.value,
props.class
]),
"style": normalizeStyle([
backgroundColorStyles.value,
locationStyles.value,
props.style
])
}, { default: () => [
hasImage && createBaseVNode("div", {
"key": "image",
"class": "v-toolbar__image"
}, [!slots.image ? createVNode(VImg, {
"key": "image-img",
"cover": true,
"src": props.image
}, null) : createVNode(VDefaultsProvider, {
"key": "image-defaults",
"disabled": !props.image,
"defaults": { VImg: {
cover: true,
src: props.image
} }
}, slots.image)]),
createVNode(VDefaultsProvider, { "defaults": { VTabs: { height: convertToUnit(contentHeight.value) } } }, { default: () => [createBaseVNode("div", {
"class": "v-toolbar__content",
"style": { height: convertToUnit(contentHeight.value) }
}, [
slots.prepend && createBaseVNode("div", { "class": "v-toolbar__prepend" }, [slots.prepend?.()]),
hasTitle && createVNode(VToolbarTitle, {
"key": "title",
"text": props.title
}, { text: slots.title }),
slots.default?.(),
slots.append && createBaseVNode("div", { "class": "v-toolbar__append" }, [slots.append?.()])
])] }),
createVNode(VDefaultsProvider, { "defaults": { VTabs: { height: convertToUnit(extensionHeight.value) } } }, { default: () => [createVNode(VExpandTransition, null, { default: () => [isExtended.value && createBaseVNode("div", {
"class": "v-toolbar__extension",
"style": { height: convertToUnit(extensionHeight.value) }
}, [extension])] })] })
] });
});
return {
contentHeight,
extensionHeight
};
}
});
//#endregion
export { makeVToolbarTitleProps as i, makeVToolbarProps as n, VToolbarTitle as r, VToolbar as t };
//# sourceMappingURL=VToolbar-XKeTy7Mr.js.map
File diff suppressed because one or more lines are too long
+370
View File
@@ -0,0 +1,370 @@
{
"hash": "8e064f63",
"configHash": "9602e671",
"lockfileHash": "2af5d584",
"browserHash": "42fe83ff",
"optimized": {
"vue-router": {
"src": "../../vue-router/dist/vue-router.mjs",
"file": "vue-router.js",
"fileHash": "c505db30",
"needsInterop": false
},
"vue": {
"src": "../../vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "27ec1265",
"needsInterop": false
},
"vuetify": {
"src": "../../vuetify/lib/framework.js",
"file": "vuetify.js",
"fileHash": "f2f22051",
"needsInterop": false
},
"vuetify/components/VApp": {
"src": "../../vuetify/lib/components/VApp/index.js",
"file": "vuetify_components_VApp.js",
"fileHash": "7d5bc39c",
"needsInterop": false
},
"vuetify/components/VAppBar": {
"src": "../../vuetify/lib/components/VAppBar/index.js",
"file": "vuetify_components_VAppBar.js",
"fileHash": "52919531",
"needsInterop": false
},
"vuetify/components/VAvatar": {
"src": "../../vuetify/lib/components/VAvatar/index.js",
"file": "vuetify_components_VAvatar.js",
"fileHash": "affaa970",
"needsInterop": false
},
"vuetify/components/VBtn": {
"src": "../../vuetify/lib/components/VBtn/index.js",
"file": "vuetify_components_VBtn.js",
"fileHash": "bf1868e4",
"needsInterop": false
},
"vuetify/components/VCard": {
"src": "../../vuetify/lib/components/VCard/index.js",
"file": "vuetify_components_VCard.js",
"fileHash": "1d7888e1",
"needsInterop": false
},
"vuetify/components/VCode": {
"src": "../../vuetify/lib/components/VCode/index.js",
"file": "vuetify_components_VCode.js",
"fileHash": "3bb42ba7",
"needsInterop": false
},
"vuetify/components/VDialog": {
"src": "../../vuetify/lib/components/VDialog/index.js",
"file": "vuetify_components_VDialog.js",
"fileHash": "ab2af168",
"needsInterop": false
},
"vuetify/components/VDivider": {
"src": "../../vuetify/lib/components/VDivider/index.js",
"file": "vuetify_components_VDivider.js",
"fileHash": "94063435",
"needsInterop": false
},
"vuetify/components/VExpansionPanel": {
"src": "../../vuetify/lib/components/VExpansionPanel/index.js",
"file": "vuetify_components_VExpansionPanel.js",
"fileHash": "ec3b7564",
"needsInterop": false
},
"vuetify/components/VGrid": {
"src": "../../vuetify/lib/components/VGrid/index.js",
"file": "vuetify_components_VGrid.js",
"fileHash": "51bab3d5",
"needsInterop": false
},
"vuetify/components/VIcon": {
"src": "../../vuetify/lib/components/VIcon/index.js",
"file": "vuetify_components_VIcon.js",
"fileHash": "2b9944e9",
"needsInterop": false
},
"vuetify/components/VImg": {
"src": "../../vuetify/lib/components/VImg/index.js",
"file": "vuetify_components_VImg.js",
"fileHash": "9243aee4",
"needsInterop": false
},
"vuetify/components/VList": {
"src": "../../vuetify/lib/components/VList/index.js",
"file": "vuetify_components_VList.js",
"fileHash": "c02ef873",
"needsInterop": false
},
"vuetify/components/VMain": {
"src": "../../vuetify/lib/components/VMain/index.js",
"file": "vuetify_components_VMain.js",
"fileHash": "71aadc09",
"needsInterop": false
},
"vuetify/components/VMenu": {
"src": "../../vuetify/lib/components/VMenu/index.js",
"file": "vuetify_components_VMenu.js",
"fileHash": "d7a1339d",
"needsInterop": false
},
"vuetify/components/VNavigationDrawer": {
"src": "../../vuetify/lib/components/VNavigationDrawer/index.js",
"file": "vuetify_components_VNavigationDrawer.js",
"fileHash": "708ecbaa",
"needsInterop": false
},
"vuetify/components/VSelect": {
"src": "../../vuetify/lib/components/VSelect/index.js",
"file": "vuetify_components_VSelect.js",
"fileHash": "246963c8",
"needsInterop": false
},
"vuetify/components/VSheet": {
"src": "../../vuetify/lib/components/VSheet/index.js",
"file": "vuetify_components_VSheet.js",
"fileHash": "95c536e9",
"needsInterop": false
},
"vuetify/components/VSwitch": {
"src": "../../vuetify/lib/components/VSwitch/index.js",
"file": "vuetify_components_VSwitch.js",
"fileHash": "9703e7db",
"needsInterop": false
},
"vuetify/components/VTabs": {
"src": "../../vuetify/lib/components/VTabs/index.js",
"file": "vuetify_components_VTabs.js",
"fileHash": "3caec951",
"needsInterop": false
},
"vuetify/components/VToolbar": {
"src": "../../vuetify/lib/components/VToolbar/index.js",
"file": "vuetify_components_VToolbar.js",
"fileHash": "af8ddee1",
"needsInterop": false
}
},
"chunks": {
"VAvatar-CA-KqvIX": {
"file": "VAvatar-CA-KqvIX.js",
"isDynamicEntry": false
},
"VBtn-BZzD9gwE": {
"file": "VBtn-BZzD9gwE.js",
"isDynamicEntry": false
},
"VDefaultsProvider-C09t4-My": {
"file": "VDefaultsProvider-C09t4-My.js",
"isDynamicEntry": false
},
"VDivider-BJiijT0J": {
"file": "VDivider-BJiijT0J.js",
"isDynamicEntry": false
},
"VIcon-1CJH_3Uo": {
"file": "VIcon-1CJH_3Uo.js",
"isDynamicEntry": false
},
"VImg-DaEUT7gG": {
"file": "VImg-DaEUT7gG.js",
"isDynamicEntry": false
},
"VInput-BxI8SL-_": {
"file": "VInput-BxI8SL-_.js",
"isDynamicEntry": false
},
"VList-DkWOjB0M": {
"file": "VList-DkWOjB0M.js",
"isDynamicEntry": false
},
"VMenu-DCQFp-2Y": {
"file": "VMenu-DCQFp-2Y.js",
"isDynamicEntry": false
},
"VOverlay-BS8OrX3g": {
"file": "VOverlay-BS8OrX3g.js",
"isDynamicEntry": false
},
"VProgressCircular-yKv2qs75": {
"file": "VProgressCircular-yKv2qs75.js",
"isDynamicEntry": false
},
"VSheet-CLHX3uIJ": {
"file": "VSheet-CLHX3uIJ.js",
"isDynamicEntry": false
},
"VSlideGroup-TpMGTwfd": {
"file": "VSlideGroup-TpMGTwfd.js",
"isDynamicEntry": false
},
"VToolbar-XKeTy7Mr": {
"file": "VToolbar-XKeTy7Mr.js",
"isDynamicEntry": false
},
"anchor-DB_quObT": {
"file": "anchor-DB_quObT.js",
"isDynamicEntry": false
},
"border-jCmRyoxP": {
"file": "border-jCmRyoxP.js",
"isDynamicEntry": false
},
"box-BNWMOtF7": {
"file": "box-BNWMOtF7.js",
"isDynamicEntry": false
},
"color-B6vuQruj": {
"file": "color-B6vuQruj.js",
"isDynamicEntry": false
},
"colorUtils-BE28T62U": {
"file": "colorUtils-BE28T62U.js",
"isDynamicEntry": false
},
"component-DdiwBe6i": {
"file": "component-DdiwBe6i.js",
"isDynamicEntry": false
},
"createSimpleFunctional-Cqw8cOWQ": {
"file": "createSimpleFunctional-Cqw8cOWQ.js",
"isDynamicEntry": false
},
"deepEqual-DDqmGqyF": {
"file": "deepEqual-DDqmGqyF.js",
"isDynamicEntry": false
},
"defineComponent-DB6xIcDy": {
"file": "defineComponent-DB6xIcDy.js",
"isDynamicEntry": false
},
"density-CpKZ5PhP": {
"file": "density-CpKZ5PhP.js",
"isDynamicEntry": false
},
"dimensions-BDdmuRdK": {
"file": "dimensions-BDdmuRdK.js",
"isDynamicEntry": false
},
"display-DKaCj-_K": {
"file": "display-DKaCj-_K.js",
"isDynamicEntry": false
},
"easing-DfcvkbkS": {
"file": "easing-DfcvkbkS.js",
"isDynamicEntry": false
},
"elevation-B0TH2wU6": {
"file": "elevation-B0TH2wU6.js",
"isDynamicEntry": false
},
"focusTrap-rHoJd0qS": {
"file": "focusTrap-rHoJd0qS.js",
"isDynamicEntry": false
},
"forwardRefs-CW3d8km7": {
"file": "forwardRefs-CW3d8km7.js",
"isDynamicEntry": false
},
"getScrollParent-DuXs8SPu": {
"file": "getScrollParent-DuXs8SPu.js",
"isDynamicEntry": false
},
"goto-Bn-PzNUr": {
"file": "goto-Bn-PzNUr.js",
"isDynamicEntry": false
},
"group-Cm2viEWK": {
"file": "group-Cm2viEWK.js",
"isDynamicEntry": false
},
"icons-k2ZLE_i8": {
"file": "icons-k2ZLE_i8.js",
"isDynamicEntry": false
},
"layout-C9QMoF7I": {
"file": "layout-C9QMoF7I.js",
"isDynamicEntry": false
},
"lazy-DhsobH97": {
"file": "lazy-DhsobH97.js",
"isDynamicEntry": false
},
"loader-CV4sMFhE": {
"file": "loader-CV4sMFhE.js",
"isDynamicEntry": false
},
"locale-DDGMqzqb": {
"file": "locale-DDGMqzqb.js",
"isDynamicEntry": false
},
"location-BIKTnDF4": {
"file": "location-BIKTnDF4.js",
"isDynamicEntry": false
},
"position-BCUsnxVO": {
"file": "position-BCUsnxVO.js",
"isDynamicEntry": false
},
"proxiedModel-DSlSIQ0y": {
"file": "proxiedModel-DSlSIQ0y.js",
"isDynamicEntry": false
},
"resizeObserver-C12jWpYk": {
"file": "resizeObserver-C12jWpYk.js",
"isDynamicEntry": false
},
"ripple-Z40rPDte": {
"file": "ripple-Z40rPDte.js",
"isDynamicEntry": false
},
"rounded-BuPGKRa9": {
"file": "rounded-BuPGKRa9.js",
"isDynamicEntry": false
},
"router-D_jP4Uwb": {
"file": "router-D_jP4Uwb.js",
"isDynamicEntry": false
},
"scopeId-CyMkmyzM": {
"file": "scopeId-CyMkmyzM.js",
"isDynamicEntry": false
},
"ssrBoot-CSc1_bcP": {
"file": "ssrBoot-CSc1_bcP.js",
"isDynamicEntry": false
},
"tag-C_KkCPzB": {
"file": "tag-C_KkCPzB.js",
"isDynamicEntry": false
},
"theme-Cx5kFg0-": {
"file": "theme-Cx5kFg0-.js",
"isDynamicEntry": false
},
"transition-DqoZ8fA1": {
"file": "transition-DqoZ8fA1.js",
"isDynamicEntry": false
},
"transitions-DCQ3sjjZ": {
"file": "transitions-DCQ3sjjZ.js",
"isDynamicEntry": false
},
"useRender-fVtVsZgv": {
"file": "useRender-fVtVsZgv.js",
"isDynamicEntry": false
},
"variant-CqXtG9Ih": {
"file": "variant-CqXtG9Ih.js",
"isDynamicEntry": false
},
"vue.runtime.esm-bundler-BvoXUmaf": {
"file": "vue.runtime.esm-bundler-BvoXUmaf.js",
"isDynamicEntry": false
}
}
}
+60
View File
@@ -0,0 +1,60 @@
import { P as includes } from "./defineComponent-DB6xIcDy.js";
//#region node_modules/vuetify/lib/util/anchor.js
var block = ["top", "bottom"];
var inline = [
"start",
"end",
"left",
"right"
];
/** Parse a raw anchor string into an object */
function parseAnchor(anchor, isRtl) {
let [side, align] = anchor.split(" ");
if (!align) align = includes(block, side) ? "start" : includes(inline, side) ? "top" : "center";
return {
side: toPhysical(side, isRtl),
align: toPhysical(align, isRtl)
};
}
function toPhysical(str, isRtl) {
if (str === "start") return isRtl ? "right" : "left";
if (str === "end") return isRtl ? "left" : "right";
return str;
}
function flipSide(anchor) {
return {
side: {
center: "center",
top: "bottom",
bottom: "top",
left: "right",
right: "left"
}[anchor.side],
align: anchor.align
};
}
function flipAlign(anchor) {
return {
side: anchor.side,
align: {
center: "center",
top: "bottom",
bottom: "top",
left: "right",
right: "left"
}[anchor.align]
};
}
function flipCorner(anchor) {
return {
side: anchor.align,
align: anchor.side
};
}
function getAxis(anchor) {
return includes(block, anchor.side) ? "y" : "x";
}
//#endregion
export { parseAnchor as a, getAxis as i, flipCorner as n, toPhysical as o, flipSide as r, flipAlign as t };
//# sourceMappingURL=anchor-DB_quObT.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"anchor-DB_quObT.js","names":[],"sources":["../../vuetify/lib/util/anchor.js"],"sourcesContent":["// Utilities\nimport { includes } from \"./helpers.js\";\nconst block = ['top', 'bottom'];\nconst inline = ['start', 'end', 'left', 'right'];\n/** Parse a raw anchor string into an object */\nexport function parseAnchor(anchor, isRtl) {\n let [side, align] = anchor.split(' ');\n if (!align) {\n align = includes(block, side) ? 'start' : includes(inline, side) ? 'top' : 'center';\n }\n return {\n side: toPhysical(side, isRtl),\n align: toPhysical(align, isRtl)\n };\n}\nexport function toPhysical(str, isRtl) {\n if (str === 'start') return isRtl ? 'right' : 'left';\n if (str === 'end') return isRtl ? 'left' : 'right';\n return str;\n}\nexport function flipSide(anchor) {\n return {\n side: {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n }[anchor.side],\n align: anchor.align\n };\n}\nexport function flipAlign(anchor) {\n return {\n side: anchor.side,\n align: {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n }[anchor.align]\n };\n}\nexport function flipCorner(anchor) {\n return {\n side: anchor.align,\n align: anchor.side\n };\n}\nexport function getAxis(anchor) {\n return includes(block, anchor.side) ? 'y' : 'x';\n}\n//# sourceMappingURL=anchor.js.map"],"mappings":";;AAEA,IAAM,QAAQ,CAAC,OAAO,SAAS;AAC/B,IAAM,SAAS;CAAC;CAAS;CAAO;CAAQ;CAAQ;;AAEhD,SAAgB,YAAY,QAAQ,OAAO;CACzC,IAAI,CAAC,MAAM,SAAS,OAAO,MAAM,IAAI;AACrC,KAAI,CAAC,MACH,SAAQ,SAAS,OAAO,KAAK,GAAG,UAAU,SAAS,QAAQ,KAAK,GAAG,QAAQ;AAE7E,QAAO;EACL,MAAM,WAAW,MAAM,MAAM;EAC7B,OAAO,WAAW,OAAO,MAAM;EAChC;;AAEH,SAAgB,WAAW,KAAK,OAAO;AACrC,KAAI,QAAQ,QAAS,QAAO,QAAQ,UAAU;AAC9C,KAAI,QAAQ,MAAO,QAAO,QAAQ,SAAS;AAC3C,QAAO;;AAET,SAAgB,SAAS,QAAQ;AAC/B,QAAO;EACL,MAAM;GACJ,QAAQ;GACR,KAAK;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACR,CAAC,OAAO;EACT,OAAO,OAAO;EACf;;AAEH,SAAgB,UAAU,QAAQ;AAChC,QAAO;EACL,MAAM,OAAO;EACb,OAAO;GACL,QAAQ;GACR,KAAK;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACR,CAAC,OAAO;EACV;;AAEH,SAAgB,WAAW,QAAQ;AACjC,QAAO;EACL,MAAM,OAAO;EACb,OAAO,OAAO;EACf;;AAEH,SAAgB,QAAQ,QAAQ;AAC9B,QAAO,SAAS,OAAO,OAAO,KAAK,GAAG,MAAM"}
+20
View File
@@ -0,0 +1,20 @@
import { U as computed } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { c as getCurrentInstanceName, l as propsFactory } from "./defineComponent-DB6xIcDy.js";
//#region node_modules/vuetify/lib/composables/border.js
var makeBorderProps = propsFactory({ border: [
Boolean,
Number,
String
] }, "border");
function useBorder(props, name = getCurrentInstanceName()) {
return { borderClasses: computed(() => {
const border = props.border;
if (border === true || border === "") return `${name}--border`;
else if (typeof border === "string" || border === 0) return String(border).split(" ").map((v) => `border-${v}`);
return [];
}) };
}
//#endregion
export { useBorder as n, makeBorderProps as t };
//# sourceMappingURL=border-jCmRyoxP.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"border-jCmRyoxP.js","names":[],"sources":["../../vuetify/lib/composables/border.js"],"sourcesContent":["// Utilities\nimport { computed } from 'vue';\nimport { getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeBorderProps = propsFactory({\n border: [Boolean, Number, String]\n}, 'border');\nexport function useBorder(props, name = getCurrentInstanceName()) {\n const borderClasses = computed(() => {\n const border = props.border;\n if (border === true || border === '') {\n return `${name}--border`;\n } else if (typeof border === 'string' || border === 0) {\n return String(border).split(' ').map(v => `border-${v}`);\n }\n return [];\n });\n return {\n borderClasses\n };\n}\n//# sourceMappingURL=border.js.map"],"mappings":";;;AAIA,IAAa,kBAAkB,aAAa,EAC1C,QAAQ;CAAC;CAAS;CAAQ;CAAO,EAClC,EAAE,SAAS;AACZ,SAAgB,UAAU,OAAO,OAAO,wBAAwB,EAAE;AAUhE,QAAO,EACL,eAVoB,eAAe;EACnC,MAAM,SAAS,MAAM;AACrB,MAAI,WAAW,QAAQ,WAAW,GAChC,QAAO,GAAG,KAAK;WACN,OAAO,WAAW,YAAY,WAAW,EAClD,QAAO,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,KAAI,MAAK,UAAU,IAAI;AAE1D,SAAO,EAAE;GAGI,EACd"}
+71
View File
@@ -0,0 +1,71 @@
//#region node_modules/vuetify/lib/util/box.js
var Box = class {
constructor(args) {
const pageScale = document.body.currentCSSZoom ?? 1;
const isElement = args instanceof Element;
const factor = isElement ? 1 + (1 - pageScale) / pageScale : 1;
const { x, y, width, height } = isElement ? args.getBoundingClientRect() : args;
this.x = x * factor;
this.y = y * factor;
this.width = width * factor;
this.height = height * factor;
}
get top() {
return this.y;
}
get bottom() {
return this.y + this.height;
}
get left() {
return this.x;
}
get right() {
return this.x + this.width;
}
};
function getOverflow(a, b) {
return {
x: {
before: Math.max(0, b.left - a.left),
after: Math.max(0, a.right - b.right)
},
y: {
before: Math.max(0, b.top - a.top),
after: Math.max(0, a.bottom - b.bottom)
}
};
}
function getTargetBox(target) {
if (Array.isArray(target)) {
const pageScale = document.body.currentCSSZoom ?? 1;
const factor = 1 + (1 - pageScale) / pageScale;
return new Box({
x: target[0] * factor,
y: target[1] * factor,
width: 0 * factor,
height: 0 * factor
});
} else return new Box(target);
}
function getElementBox(el) {
if (el === document.documentElement) if (!visualViewport) return new Box({
x: 0,
y: 0,
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
});
else {
const pageScale = document.body.currentCSSZoom ?? 1;
return new Box({
x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,
y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,
width: visualViewport.width * visualViewport.scale / pageScale,
height: visualViewport.height * visualViewport.scale / pageScale
});
}
else return new Box(el);
}
//#endregion
export { getTargetBox as i, getElementBox as n, getOverflow as r, Box as t };
//# sourceMappingURL=box-BNWMOtF7.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"box-BNWMOtF7.js","names":[],"sources":["../../vuetify/lib/util/box.js"],"sourcesContent":["export class Box {\n constructor(args) {\n const pageScale = document.body.currentCSSZoom ?? 1;\n const isElement = args instanceof Element;\n const factor = isElement ? 1 + (1 - pageScale) / pageScale : 1;\n const {\n x,\n y,\n width,\n height\n } = isElement ? args.getBoundingClientRect() : args;\n this.x = x * factor;\n this.y = y * factor;\n this.width = width * factor;\n this.height = height * factor;\n }\n get top() {\n return this.y;\n }\n get bottom() {\n return this.y + this.height;\n }\n get left() {\n return this.x;\n }\n get right() {\n return this.x + this.width;\n }\n}\nexport function getOverflow(a, b) {\n return {\n x: {\n before: Math.max(0, b.left - a.left),\n after: Math.max(0, a.right - b.right)\n },\n y: {\n before: Math.max(0, b.top - a.top),\n after: Math.max(0, a.bottom - b.bottom)\n }\n };\n}\nexport function getTargetBox(target) {\n if (Array.isArray(target)) {\n const pageScale = document.body.currentCSSZoom ?? 1;\n const factor = 1 + (1 - pageScale) / pageScale;\n return new Box({\n x: target[0] * factor,\n y: target[1] * factor,\n width: 0 * factor,\n height: 0 * factor\n });\n } else {\n return new Box(target);\n }\n}\nexport function getElementBox(el) {\n if (el === document.documentElement) {\n if (!visualViewport) {\n return new Box({\n x: 0,\n y: 0,\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight\n });\n } else {\n const pageScale = document.body.currentCSSZoom ?? 1;\n return new Box({\n x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,\n y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,\n width: visualViewport.width * visualViewport.scale / pageScale,\n height: visualViewport.height * visualViewport.scale / pageScale\n });\n }\n } else {\n return new Box(el);\n }\n}\n//# sourceMappingURL=box.js.map"],"mappings":";AAAA,IAAa,MAAb,MAAiB;CACf,YAAY,MAAM;EAChB,MAAM,YAAY,SAAS,KAAK,kBAAkB;EAClD,MAAM,YAAY,gBAAgB;EAClC,MAAM,SAAS,YAAY,KAAK,IAAI,aAAa,YAAY;EAC7D,MAAM,EACJ,GACA,GACA,OACA,WACE,YAAY,KAAK,uBAAuB,GAAG;AAC/C,OAAK,IAAI,IAAI;AACb,OAAK,IAAI,IAAI;AACb,OAAK,QAAQ,QAAQ;AACrB,OAAK,SAAS,SAAS;;CAEzB,IAAI,MAAM;AACR,SAAO,KAAK;;CAEd,IAAI,SAAS;AACX,SAAO,KAAK,IAAI,KAAK;;CAEvB,IAAI,OAAO;AACT,SAAO,KAAK;;CAEd,IAAI,QAAQ;AACV,SAAO,KAAK,IAAI,KAAK;;;AAGzB,SAAgB,YAAY,GAAG,GAAG;AAChC,QAAO;EACL,GAAG;GACD,QAAQ,KAAK,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK;GACpC,OAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,MAAM;GACtC;EACD,GAAG;GACD,QAAQ,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI;GAClC,OAAO,KAAK,IAAI,GAAG,EAAE,SAAS,EAAE,OAAO;GACxC;EACF;;AAEH,SAAgB,aAAa,QAAQ;AACnC,KAAI,MAAM,QAAQ,OAAO,EAAE;EACzB,MAAM,YAAY,SAAS,KAAK,kBAAkB;EAClD,MAAM,SAAS,KAAK,IAAI,aAAa;AACrC,SAAO,IAAI,IAAI;GACb,GAAG,OAAO,KAAK;GACf,GAAG,OAAO,KAAK;GACf,OAAO,IAAI;GACX,QAAQ,IAAI;GACb,CAAC;OAEF,QAAO,IAAI,IAAI,OAAO;;AAG1B,SAAgB,cAAc,IAAI;AAChC,KAAI,OAAO,SAAS,gBAClB,KAAI,CAAC,eACH,QAAO,IAAI,IAAI;EACb,GAAG;EACH,GAAG;EACH,OAAO,SAAS,gBAAgB;EAChC,QAAQ,SAAS,gBAAgB;EAClC,CAAC;MACG;EACL,MAAM,YAAY,SAAS,KAAK,kBAAkB;AAClD,SAAO,IAAI,IAAI;GACb,GAAG,eAAe,QAAQ,IAAI,IAAI,eAAe;GACjD,GAAG,eAAe,QAAQ,IAAI,IAAI,eAAe;GACjD,OAAO,eAAe,QAAQ,eAAe,QAAQ;GACrD,QAAQ,eAAe,SAAS,eAAe,QAAQ;GACxD,CAAC;;KAGJ,QAAO,IAAI,IAAI,GAAG"}
+57
View File
@@ -0,0 +1,57 @@
import { er as toValue } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { x as destructComputed } from "./defineComponent-DB6xIcDy.js";
import { a as isCssColor, c as parseColor, i as hasLightForeground, o as isParsableColor } from "./colorUtils-BE28T62U.js";
//#region node_modules/vuetify/lib/composables/color.js
function useColor(colors) {
return destructComputed(() => {
const { class: colorClasses, style: colorStyles } = computeColor(colors);
return {
colorClasses,
colorStyles
};
});
}
function useTextColor(color) {
const { colorClasses: textColorClasses, colorStyles: textColorStyles } = useColor(() => ({ text: toValue(color) }));
return {
textColorClasses,
textColorStyles
};
}
function useBackgroundColor(color) {
const { colorClasses: backgroundColorClasses, colorStyles: backgroundColorStyles } = useColor(() => ({ background: toValue(color) }));
return {
backgroundColorClasses,
backgroundColorStyles
};
}
function normalizeColors(colors) {
return {
text: typeof colors.text === "string" ? colors.text.replace(/^text-/, "") : colors.text,
background: typeof colors.background === "string" ? colors.background.replace(/^bg-/, "") : colors.background
};
}
function computeColor(colors) {
const _colors = normalizeColors(toValue(colors));
const classes = [];
const styles = {};
if (_colors.background) if (isCssColor(_colors.background)) {
styles.backgroundColor = _colors.background;
if (!_colors.text && isParsableColor(_colors.background)) {
const backgroundColor = parseColor(_colors.background);
if (backgroundColor.a == null || backgroundColor.a === 1) classes.push(hasLightForeground(backgroundColor) ? "v-theme-on-dark" : "v-theme-on-light");
}
} else classes.push(`bg-${_colors.background}`);
if (_colors.text) if (isCssColor(_colors.text)) {
styles.color = _colors.text;
styles.caretColor = _colors.text;
} else classes.push(`text-${_colors.text}`);
return {
class: classes,
style: styles
};
}
//#endregion
export { useColor as n, useTextColor as r, useBackgroundColor as t };
//# sourceMappingURL=color-B6vuQruj.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"color-B6vuQruj.js","names":[],"sources":["../../vuetify/lib/composables/color.js"],"sourcesContent":["// Utilities\nimport { toValue } from 'vue';\nimport { destructComputed, hasLightForeground, isCssColor, isParsableColor, parseColor } from \"../util/index.js\"; // Types\n// Composables\nexport function useColor(colors) {\n return destructComputed(() => {\n const {\n class: colorClasses,\n style: colorStyles\n } = computeColor(colors);\n return {\n colorClasses,\n colorStyles\n };\n });\n}\nexport function useTextColor(color) {\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles\n } = useColor(() => ({\n text: toValue(color)\n }));\n return {\n textColorClasses,\n textColorStyles\n };\n}\nexport function useBackgroundColor(color) {\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles\n } = useColor(() => ({\n background: toValue(color)\n }));\n return {\n backgroundColorClasses,\n backgroundColorStyles\n };\n}\nfunction normalizeColors(colors) {\n return {\n text: typeof colors.text === 'string' ? colors.text.replace(/^text-/, '') : colors.text,\n background: typeof colors.background === 'string' ? colors.background.replace(/^bg-/, '') : colors.background\n };\n}\nexport function computeColor(colors) {\n const _colors = normalizeColors(toValue(colors));\n const classes = [];\n const styles = {};\n if (_colors.background) {\n if (isCssColor(_colors.background)) {\n styles.backgroundColor = _colors.background;\n if (!_colors.text && isParsableColor(_colors.background)) {\n const backgroundColor = parseColor(_colors.background);\n if (backgroundColor.a == null || backgroundColor.a === 1) {\n classes.push(hasLightForeground(backgroundColor) ? 'v-theme-on-dark' : 'v-theme-on-light');\n }\n }\n } else {\n classes.push(`bg-${_colors.background}`);\n }\n }\n if (_colors.text) {\n if (isCssColor(_colors.text)) {\n styles.color = _colors.text;\n styles.caretColor = _colors.text;\n } else {\n classes.push(`text-${_colors.text}`);\n }\n }\n return {\n class: classes,\n style: styles\n };\n}\n//# sourceMappingURL=color.js.map"],"mappings":";;;;AAIA,SAAgB,SAAS,QAAQ;AAC/B,QAAO,uBAAuB;EAC5B,MAAM,EACJ,OAAO,cACP,OAAO,gBACL,aAAa,OAAO;AACxB,SAAO;GACL;GACA;GACD;GACD;;AAEJ,SAAgB,aAAa,OAAO;CAClC,MAAM,EACJ,cAAc,kBACd,aAAa,oBACX,gBAAgB,EAClB,MAAM,QAAQ,MAAM,EACrB,EAAE;AACH,QAAO;EACL;EACA;EACD;;AAEH,SAAgB,mBAAmB,OAAO;CACxC,MAAM,EACJ,cAAc,wBACd,aAAa,0BACX,gBAAgB,EAClB,YAAY,QAAQ,MAAM,EAC3B,EAAE;AACH,QAAO;EACL;EACA;EACD;;AAEH,SAAS,gBAAgB,QAAQ;AAC/B,QAAO;EACL,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,KAAK,QAAQ,UAAU,GAAG,GAAG,OAAO;EACnF,YAAY,OAAO,OAAO,eAAe,WAAW,OAAO,WAAW,QAAQ,QAAQ,GAAG,GAAG,OAAO;EACpG;;AAEH,SAAgB,aAAa,QAAQ;CACnC,MAAM,UAAU,gBAAgB,QAAQ,OAAO,CAAC;CAChD,MAAM,UAAU,EAAE;CAClB,MAAM,SAAS,EAAE;AACjB,KAAI,QAAQ,WACV,KAAI,WAAW,QAAQ,WAAW,EAAE;AAClC,SAAO,kBAAkB,QAAQ;AACjC,MAAI,CAAC,QAAQ,QAAQ,gBAAgB,QAAQ,WAAW,EAAE;GACxD,MAAM,kBAAkB,WAAW,QAAQ,WAAW;AACtD,OAAI,gBAAgB,KAAK,QAAQ,gBAAgB,MAAM,EACrD,SAAQ,KAAK,mBAAmB,gBAAgB,GAAG,oBAAoB,mBAAmB;;OAI9F,SAAQ,KAAK,MAAM,QAAQ,aAAa;AAG5C,KAAI,QAAQ,KACV,KAAI,WAAW,QAAQ,KAAK,EAAE;AAC5B,SAAO,QAAQ,QAAQ;AACvB,SAAO,aAAa,QAAQ;OAE5B,SAAQ,KAAK,QAAQ,QAAQ,OAAO;AAGxC,QAAO;EACL,OAAO;EACP,OAAO;EACR"}

Some files were not shown because too many files have changed in this diff Show More