Compare commits
5
Commits
a970bfa991
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5863858b09 | ||
|
|
535603f6d3 | ||
|
|
058370830f | ||
|
|
bedb6c98e7 | ||
|
|
51bbb45b32 |
No files matched your search
@@ -0,0 +1,110 @@
|
||||
# Lassistanoque
|
||||
|
||||
Assistant IA auto-hébergé : backend Go (API + SPA embarquée), base SQLite, connecteurs LLM multiples (via [any-llm](https://github.com/mozilla-ai/any-llm-go)), authentification par mot de passe ou OpenID Connect.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- Go >= 1.26
|
||||
- Node.js + npm (build du frontend)
|
||||
- (optionnel) un serveur OpenID Connect, ex. [Keycloak](https://www.keycloak.org/)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# 1. frontend : build la SPA et l'écrit dans backend/internal/http/web
|
||||
cd backend/web
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
# 2. backend
|
||||
cd ..
|
||||
go build -o lassistanoque .
|
||||
```
|
||||
|
||||
Le `Makefile` du backend enchaîne les deux et produit les binaires multi-plateformes dans `build/` :
|
||||
|
||||
```bash
|
||||
make build # linux/amd64, linux/arm64, windows, darwin...
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
La configuration se fait par variables d'environnement, chargeables depuis un fichier `.env` placé dans le répertoire de lancement (backend) :
|
||||
|
||||
| Variable | Défaut | Description |
|
||||
|----------------------------|--------------------|----------------------------------------------------|
|
||||
| `LASSISTANOQUE_DB_TYPE` | `turso` | Type de base (seul `turso`/SQLite est implémenté) |
|
||||
| `LASSISTANOQUE_DB_URL` | `lassistanoque.db` | Chemin du fichier SQLite |
|
||||
| `LASSISTANOQUE_HTTP_PORT` | `3000` | Port du serveur HTTP |
|
||||
| `LASSISTANOQUE_JWT_SECRET` | *(obligatoire)* | Secret de signature des tokens, ex. `openssl rand -base64 32` |
|
||||
| `LASSISTANOQUE_STORAGE_TYPE`| `database` | Stockage des fichiers (seul `database` est implémenté) |
|
||||
| `LASSISTANOQUE_SERVER_ID` | `default` | Identifiant du serveur |
|
||||
|
||||
Exemple `backend/.env` :
|
||||
|
||||
```env
|
||||
LASSISTANOQUE_JWT_SECRET=<secret généré>
|
||||
LASSISTANOQUE_HTTP_PORT=3000
|
||||
```
|
||||
|
||||
## Lancement
|
||||
|
||||
```bash
|
||||
./lassistanoque serve
|
||||
```
|
||||
|
||||
- Les migrations de la base sont appliquées automatiquement au démarrage (ou manuellement avec `./lassistanoque migrate`).
|
||||
- L'application est servie sur `http://localhost:3000` (SPA + API `/api`).
|
||||
- Créez le premier compte depuis la page d'inscription (`/register`), puis configurez un fournisseur LLM et sa clé d'API dans les réglages de l'espace (`settings/models`).
|
||||
|
||||
## Authentification OpenID Connect
|
||||
|
||||
Les fournisseurs OIDC sont enregistrés dans la table `oidc` :
|
||||
|
||||
```sql
|
||||
insert into oidc (id, label, domain, client_id, client_secret, wellknown_url, _date_created, _version)
|
||||
values (
|
||||
'keycloak', -- identifiant du fournisseur
|
||||
'Keycloak', -- libellé affiché sur la page de connexion
|
||||
'sso.example.com', -- domaine du fournisseur
|
||||
'lassistanoque', -- client_id
|
||||
'<client_secret>',
|
||||
'https://<keycloak>/realms/<realm>/.well-known/openid-configuration',
|
||||
datetime('now'),
|
||||
'v1'
|
||||
);
|
||||
```
|
||||
|
||||
Côté fournisseur (Keycloak) :
|
||||
|
||||
- client de type *confidential*, *Standard Flow* (authorization code) activé ;
|
||||
- *Valid Redirect URIs* : `http://localhost:3000/api/auth/oidc/callback` (l'URL de callback est reconstruite depuis le `Host` de la requête ; derrière un reverse proxy, transmettre `X-Forwarded-Proto` et `X-Forwarded-Host`).
|
||||
|
||||
Flux : les fournisseurs configurés apparaissent comme boutons sur la page de connexion → redirection vers le fournisseur → au retour, le backend valide le `state` signé, échange le code, vérifie le token ID (signature JWKS, émetteur, audience) puis délivre les tokens applicatifs. À la première connexion, l'utilisateur est créé automatiquement avec son espace personnel.
|
||||
|
||||
## Développement
|
||||
|
||||
```bash
|
||||
# backend (API sur :3000)
|
||||
cd backend
|
||||
go run . serve
|
||||
|
||||
# frontend en mode dev (Vite sur :5173, API proxyfiée vers :3000)
|
||||
cd web
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Structure :
|
||||
|
||||
```
|
||||
backend/
|
||||
├── cmd/ # CLI (serve, migrate, version) et assemblage IoC
|
||||
├── internal/
|
||||
│ ├── adapter/ # implémentations : db (turso/SQLite), auth (password, oidc), llm, tools, security (JWT)
|
||||
│ ├── domain/ # entités et interfaces des repositories
|
||||
│ ├── http/ # serveur HTTP, routes, SPA embarquée
|
||||
│ └── service/ # logique métier (auth, chat, agents, tasks...)
|
||||
└── web/ # frontend SvelteKit
|
||||
```
|
||||
|
||||
Tests : `go test ./backend/...`
|
||||
+17
-1
@@ -3,12 +3,14 @@ package cmd
|
||||
import (
|
||||
"time"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/auth/oidc"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/auth/password"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/file"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/llm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/security"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/browser"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/scheduler"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/searxng"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/weather"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
@@ -17,6 +19,7 @@ import (
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/chat"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/provider"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/storage"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/task"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/tool"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/user"
|
||||
)
|
||||
@@ -35,6 +38,7 @@ var providerService *provider.Service
|
||||
var agentService *agent.Service
|
||||
var toolService *tool.Service
|
||||
var chatService *chat.Service
|
||||
var taskService *task.Service
|
||||
var tokenManager auth.TokenManager
|
||||
|
||||
func init() {
|
||||
@@ -71,6 +75,8 @@ func getAuthenticators() map[string]auth.Authenticator {
|
||||
authenticators := make(map[string]auth.Authenticator)
|
||||
pwdAuth := password.NewPasswordAuthenticator(GetTokenManager(), db.UserRepository())
|
||||
authenticators["password"] = pwdAuth
|
||||
oidcAuth := oidc.NewOIDCAuthenticator(GetTokenManager(), db.OIDCProviderRepository(), db.UserRepository())
|
||||
authenticators["oidc"] = oidcAuth
|
||||
return authenticators
|
||||
}
|
||||
|
||||
@@ -98,7 +104,7 @@ func GetStorageService() *storage.Service {
|
||||
|
||||
func GetAuthService() *auth.Service {
|
||||
if authService == nil {
|
||||
authService = auth.NewService(db.SettingsRepository(), db.UserRepository(), getAuthenticators())
|
||||
authService = auth.NewService(db.SettingsRepository(), db.UserRepository(), db.OIDCProviderRepository(), GetTokenManager(), getAuthenticators())
|
||||
}
|
||||
return authService
|
||||
}
|
||||
@@ -132,16 +138,26 @@ func GetChatService() *chat.Service {
|
||||
GetLLMAdapter(),
|
||||
GetToolService(),
|
||||
)
|
||||
// l'exécution des tâches planifiées passe par le service de chat
|
||||
GetTaskService().SetChatService(chatService)
|
||||
}
|
||||
return chatService
|
||||
}
|
||||
|
||||
func GetTaskService() *task.Service {
|
||||
if taskService == nil {
|
||||
taskService = task.NewService(db.TaskRepository())
|
||||
}
|
||||
return taskService
|
||||
}
|
||||
|
||||
func GetToolService() *tool.Service {
|
||||
if toolService == nil {
|
||||
toolService = tool.NewService(db.ToolRepository(), db.UserRepository())
|
||||
toolService.RegisterToolImpl(&weather.WeatherTool{})
|
||||
toolService.RegisterToolImpl(&searxng.SearxngTool{})
|
||||
toolService.RegisterToolImpl(&browser.BrowserTool{})
|
||||
toolService.RegisterToolImpl(scheduler.New(GetTaskService()))
|
||||
}
|
||||
return toolService
|
||||
}
|
||||
@@ -47,11 +47,16 @@ func runServe() {
|
||||
AgentService: GetAgentService(),
|
||||
ChatService: GetChatService(),
|
||||
ToolService: GetToolService(),
|
||||
TaskService: GetTaskService(),
|
||||
TokenManager: GetTokenManager(),
|
||||
})
|
||||
|
||||
gatewayRouter := gateway.NewRouter(gateway.Dependencies{})
|
||||
|
||||
// task scheduler : replanifie les tâches persistées
|
||||
GetTaskService().Start()
|
||||
defer GetTaskService().Stop()
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
package oidc
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
// providerMetadata est le document de découverte OpenID
|
||||
// (.well-known/openid-configuration).
|
||||
type providerMetadata struct {
|
||||
Issuer string `json:"issuer"`
|
||||
AuthorizationEndpoint string `json:"authorization_endpoint"`
|
||||
TokenEndpoint string `json:"token_endpoint"`
|
||||
JwksURI string `json:"jwks_uri"`
|
||||
}
|
||||
|
||||
type metadataCacheEntry struct {
|
||||
metadata *providerMetadata
|
||||
expiresAt time.Time
|
||||
}
|
||||
|
||||
// discovery maintient un cache des documents de découverte par fournisseur.
|
||||
type discovery struct {
|
||||
httpClient *http.Client
|
||||
mu sync.Mutex
|
||||
entries map[string]*metadataCacheEntry
|
||||
}
|
||||
|
||||
func newDiscovery() *discovery {
|
||||
return &discovery{
|
||||
httpClient: &http.Client{Timeout: 10 * time.Second},
|
||||
entries: make(map[string]*metadataCacheEntry),
|
||||
}
|
||||
}
|
||||
|
||||
// Metadata retourne les endpoints du fournisseur, avec mise en cache.
|
||||
func (d *discovery) Metadata(provider *domain.OIDCProvider) (*providerMetadata, error) {
|
||||
d.mu.Lock()
|
||||
entry, ok := d.entries[provider.ID]
|
||||
if ok && time.Now().Before(entry.expiresAt) {
|
||||
d.mu.Unlock()
|
||||
return entry.metadata, nil
|
||||
}
|
||||
d.mu.Unlock()
|
||||
|
||||
metadata, err := d.fetch(provider.WellknownURL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error fetching provider discovery document: %s", err)
|
||||
}
|
||||
if metadata.Issuer == "" || metadata.AuthorizationEndpoint == "" || metadata.TokenEndpoint == "" || metadata.JwksURI == "" {
|
||||
return nil, fmt.Errorf("incomplete discovery document for provider %s", provider.ID)
|
||||
}
|
||||
|
||||
d.mu.Lock()
|
||||
d.entries[provider.ID] = &metadataCacheEntry{
|
||||
metadata: metadata,
|
||||
expiresAt: time.Now().Add(1 * time.Hour),
|
||||
}
|
||||
d.mu.Unlock()
|
||||
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
func (d *discovery) fetch(wellknownURL string) (*providerMetadata, error) {
|
||||
res, err := d.httpClient.Get(wellknownURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
if res.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("unexpected status %d", res.StatusCode)
|
||||
}
|
||||
body, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
metadata := &providerMetadata{}
|
||||
if err := json.Unmarshal(body, metadata); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return metadata, nil
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
package oidc
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"crypto/elliptic"
|
||||
"crypto/rsa"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
)
|
||||
|
||||
// jwk est une clé du document JWKS du fournisseur.
|
||||
type jwk struct {
|
||||
Kid string `json:"kid"`
|
||||
Kty string `json:"kty"`
|
||||
Alg string `json:"alg"`
|
||||
Use string `json:"use"`
|
||||
N string `json:"n"`
|
||||
E string `json:"e"`
|
||||
Crv string `json:"crv"`
|
||||
X string `json:"x"`
|
||||
Y string `json:"y"`
|
||||
}
|
||||
|
||||
type jwksDocument struct {
|
||||
Keys []jwk `json:"keys"`
|
||||
}
|
||||
|
||||
type jwksCacheEntry struct {
|
||||
keys map[string]interface{}
|
||||
expiresAt time.Time
|
||||
}
|
||||
|
||||
// jwksStore maintient un cache des clés publiques de signature par fournisseur.
|
||||
type jwksStore struct {
|
||||
httpClient *http.Client
|
||||
mu sync.Mutex
|
||||
entries map[string]*jwksCacheEntry
|
||||
}
|
||||
|
||||
func newJwksStore() *jwksStore {
|
||||
return &jwksStore{
|
||||
httpClient: &http.Client{Timeout: 10 * time.Second},
|
||||
entries: make(map[string]*jwksCacheEntry),
|
||||
}
|
||||
}
|
||||
|
||||
// KeyFunc retourne une fonction de résolution de clé pour golang-jwt,
|
||||
// valable pour un fournisseur donné.
|
||||
func (s *jwksStore) KeyFunc(providerID string, jwksURI string) jwt.Keyfunc {
|
||||
return func(t *jwt.Token) (interface{}, error) {
|
||||
kid, ok := t.Header["kid"].(string)
|
||||
if !ok || kid == "" {
|
||||
return nil, fmt.Errorf("id token: kid manquant")
|
||||
}
|
||||
key, err := s.key(providerID, jwksURI, kid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return key, nil
|
||||
}
|
||||
}
|
||||
|
||||
// key retourne la clé publique correspondant au kid, avec mise en cache.
|
||||
// Si le kid est inconnu, le cache est invalidé et le JWKS re-téléchargé
|
||||
// (rotation de clés côté fournisseur).
|
||||
func (s *jwksStore) key(providerID string, jwksURI string, kid string) (interface{}, error) {
|
||||
fetch := func() (map[string]interface{}, error) {
|
||||
keys, err := s.fetch(jwksURI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error fetching provider JWKS: %s", err)
|
||||
}
|
||||
s.mu.Lock()
|
||||
s.entries[providerID] = &jwksCacheEntry{
|
||||
keys: keys,
|
||||
expiresAt: time.Now().Add(1 * time.Hour),
|
||||
}
|
||||
s.mu.Unlock()
|
||||
return keys, nil
|
||||
}
|
||||
|
||||
s.mu.Lock()
|
||||
entry, ok := s.entries[providerID]
|
||||
valid := ok && time.Now().Before(entry.expiresAt)
|
||||
s.mu.Unlock()
|
||||
|
||||
if valid {
|
||||
if key, ok := entry.keys[kid]; ok {
|
||||
return key, nil
|
||||
}
|
||||
}
|
||||
|
||||
keys, err := fetch()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
key, ok := keys[kid]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("id token: aucune clé JWKS ne correspond au kid %s", kid)
|
||||
}
|
||||
return key, nil
|
||||
}
|
||||
|
||||
func (s *jwksStore) fetch(jwksURI string) (map[string]interface{}, error) {
|
||||
res, err := s.httpClient.Get(jwksURI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
if res.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("unexpected status %d", res.StatusCode)
|
||||
}
|
||||
body, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
document := &jwksDocument{}
|
||||
if err := json.Unmarshal(body, document); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
keys := make(map[string]interface{})
|
||||
for _, k := range document.Keys {
|
||||
if k.Use != "" && k.Use != "sig" {
|
||||
continue
|
||||
}
|
||||
switch k.Kty {
|
||||
case "RSA":
|
||||
key, err := rsaKey(k)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
keys[k.Kid] = key
|
||||
case "EC":
|
||||
key, err := ecKey(k)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
keys[k.Kid] = key
|
||||
}
|
||||
}
|
||||
return keys, nil
|
||||
}
|
||||
|
||||
func rsaKey(k jwk) (*rsa.PublicKey, error) {
|
||||
if k.N == "" || k.E == "" {
|
||||
return nil, fmt.Errorf("clé RSA JWKS incomplète (kid %s)", k.Kid)
|
||||
}
|
||||
nBytes, err := base64.RawURLEncoding.DecodeString(k.N)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("module RSA invalide: %s", err)
|
||||
}
|
||||
eBytes, err := base64.RawURLEncoding.DecodeString(k.E)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("exposant RSA invalide: %s", err)
|
||||
}
|
||||
return &rsa.PublicKey{
|
||||
N: new(big.Int).SetBytes(nBytes),
|
||||
E: int(new(big.Int).SetBytes(eBytes).Int64()),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func ecKey(k jwk) (*ecdsa.PublicKey, error) {
|
||||
if k.X == "" || k.Y == "" {
|
||||
return nil, fmt.Errorf("clé EC JWKS incomplète (kid %s)", k.Kid)
|
||||
}
|
||||
var curve elliptic.Curve
|
||||
switch strings.ToUpper(k.Crv) {
|
||||
case "P-256":
|
||||
curve = elliptic.P256()
|
||||
case "P-384":
|
||||
curve = elliptic.P384()
|
||||
case "P-521":
|
||||
curve = elliptic.P521()
|
||||
default:
|
||||
return nil, fmt.Errorf("courbe EC non supportée: %s", k.Crv)
|
||||
}
|
||||
xBytes, err := base64.RawURLEncoding.DecodeString(k.X)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("coordonnée x invalide: %s", err)
|
||||
}
|
||||
yBytes, err := base64.RawURLEncoding.DecodeString(k.Y)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("coordonnée y invalide: %s", err)
|
||||
}
|
||||
return &ecdsa.PublicKey{
|
||||
Curve: curve,
|
||||
X: new(big.Int).SetBytes(xBytes),
|
||||
Y: new(big.Int).SetBytes(yBytes),
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
package oidc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/auth"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrRegistrationUnsupported = errors.New("registration via OIDC is not supported: users are provisioned at login")
|
||||
ErrNoEmail = errors.New("id token does not contain an email claim")
|
||||
ErrUserDisabled = errors.New("user is disabled")
|
||||
)
|
||||
|
||||
// tokenResponse est la réponse de l'endpoint token du fournisseur.
|
||||
type tokenResponse struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
IDToken string `json:"id_token"`
|
||||
TokenType string `json:"token_type"`
|
||||
ExpiresIn int `json:"expires_in"`
|
||||
}
|
||||
|
||||
// idTokenClaims sont les claims du token ID émis par le fournisseur.
|
||||
type idTokenClaims struct {
|
||||
Email string `json:"email"`
|
||||
GivenName string `json:"given_name"`
|
||||
FamilyName string `json:"family_name"`
|
||||
Name string `json:"name"`
|
||||
PreferredUsername string `json:"preferred_username"`
|
||||
Picture string `json:"picture"`
|
||||
jwt.RegisteredClaims
|
||||
}
|
||||
|
||||
type OIDCAuthenticator struct {
|
||||
tokenManager auth.TokenManager
|
||||
oidcRepository domain.OIDCProviderRepository
|
||||
userRepository domain.UserRepository
|
||||
discovery *discovery
|
||||
jwks *jwksStore
|
||||
httpClient *http.Client
|
||||
}
|
||||
|
||||
func NewOIDCAuthenticator(
|
||||
tokenManager auth.TokenManager,
|
||||
oidcRepository domain.OIDCProviderRepository,
|
||||
userRepository domain.UserRepository,
|
||||
) *OIDCAuthenticator {
|
||||
return &OIDCAuthenticator{
|
||||
tokenManager: tokenManager,
|
||||
oidcRepository: oidcRepository,
|
||||
userRepository: userRepository,
|
||||
discovery: newDiscovery(),
|
||||
jwks: newJwksStore(),
|
||||
httpClient: &http.Client{Timeout: 10 * time.Second},
|
||||
}
|
||||
}
|
||||
|
||||
// AuthorizeURL construit l'URL d'autorisation vers laquelle rediriger l'utilisateur.
|
||||
func (s *OIDCAuthenticator) AuthorizeURL(ctx context.Context, provider *domain.OIDCProvider, redirectURI string, state string) (string, error) {
|
||||
metadata, err := s.discovery.Metadata(provider)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
params := url.Values{}
|
||||
params.Set("client_id", provider.ClientID)
|
||||
params.Set("redirect_uri", redirectURI)
|
||||
params.Set("response_type", "code")
|
||||
params.Set("scope", "openid profile email")
|
||||
params.Set("state", state)
|
||||
|
||||
return metadata.AuthorizationEndpoint + "?" + params.Encode(), nil
|
||||
}
|
||||
|
||||
// ExchangeCode échange le code d'autorisation contre un token ID, le valide,
|
||||
// puis délivre une session applicative.
|
||||
func (s *OIDCAuthenticator) ExchangeCode(ctx context.Context, provider *domain.OIDCProvider, code string, redirectURI string) (*auth.Session, error) {
|
||||
metadata, err := s.discovery.Metadata(provider)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tokens, err := s.requestTokens(metadata.TokenEndpoint, provider, code, redirectURI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if tokens.IDToken == "" {
|
||||
return nil, fmt.Errorf("provider %s did not return an id token", provider.ID)
|
||||
}
|
||||
|
||||
claims, err := s.validateIDToken(provider, metadata, tokens.IDToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if claims.Email == "" {
|
||||
return nil, ErrNoEmail
|
||||
}
|
||||
|
||||
user, err := s.provisionUser(claims)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
accessToken, expiresAt, err := s.tokenManager.GenerateAccessToken(user)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to generate access token: %s", err)
|
||||
}
|
||||
refreshToken, _, err := s.tokenManager.GenerateRefreshToken(user.ID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to generate refresh token: %s", err)
|
||||
}
|
||||
|
||||
return &auth.Session{
|
||||
User: user,
|
||||
AccessToken: accessToken,
|
||||
RefreshToken: refreshToken,
|
||||
ExpiresAt: expiresAt,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Authenticate implémente auth.Authenticator: le flux OIDC passe par le state
|
||||
// signé qui transporte l'id du fournisseur, puis l'échange du code.
|
||||
func (s *OIDCAuthenticator) Authenticate(ctx context.Context, creds auth.Credentials) (*auth.Session, error) {
|
||||
providerID, err := s.tokenManager.ParseStateToken(creds.OIDCState)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid oidc state: %s", err)
|
||||
}
|
||||
provider, err := s.oidcRepository.FindOIDCProvider(providerID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unknown oidc provider: %s", providerID)
|
||||
}
|
||||
return s.ExchangeCode(ctx, provider, creds.OIDCCode, creds.RedirectURI)
|
||||
}
|
||||
|
||||
func (s *OIDCAuthenticator) Register(ctx context.Context, registration auth.Registration) (*auth.Session, error) {
|
||||
return nil, ErrRegistrationUnsupported
|
||||
}
|
||||
|
||||
func (s *OIDCAuthenticator) requestTokens(tokenEndpoint string, provider *domain.OIDCProvider, code string, redirectURI string) (*tokenResponse, error) {
|
||||
form := url.Values{}
|
||||
form.Set("grant_type", "authorization_code")
|
||||
form.Set("code", code)
|
||||
form.Set("redirect_uri", redirectURI)
|
||||
form.Set("client_id", provider.ClientID)
|
||||
form.Set("client_secret", provider.ClientSecret)
|
||||
|
||||
res, err := s.httpClient.Post(tokenEndpoint, "application/x-www-form-urlencoded", strings.NewReader(form.Encode()))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error calling token endpoint: %s", err)
|
||||
}
|
||||
defer res.Body.Close()
|
||||
body, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if res.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("token endpoint returned status %d: %s", res.StatusCode, string(body))
|
||||
}
|
||||
|
||||
tokens := &tokenResponse{}
|
||||
if err := json.Unmarshal(body, tokens); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tokens, nil
|
||||
}
|
||||
|
||||
func (s *OIDCAuthenticator) validateIDToken(provider *domain.OIDCProvider, metadata *providerMetadata, idToken string) (*idTokenClaims, error) {
|
||||
claims := &idTokenClaims{}
|
||||
_, err := jwt.ParseWithClaims(idToken, claims, s.jwks.KeyFunc(provider.ID, metadata.JwksURI),
|
||||
jwt.WithValidMethods([]string{"RS256", "RS384", "RS512", "ES256", "ES384", "ES521"}),
|
||||
jwt.WithIssuer(metadata.Issuer),
|
||||
jwt.WithAudience(provider.ClientID),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid id token: %s", err)
|
||||
}
|
||||
return claims, nil
|
||||
}
|
||||
|
||||
func (s *OIDCAuthenticator) provisionUser(claims *idTokenClaims) (*domain.User, error) {
|
||||
user, err := s.userRepository.FindUserByEmail(claims.Email)
|
||||
if err == nil {
|
||||
if !user.Enabled {
|
||||
return nil, ErrUserDisabled
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
if !errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
firstname := claims.GivenName
|
||||
if firstname == "" {
|
||||
firstname = claims.PreferredUsername
|
||||
}
|
||||
user, err = s.userRepository.CreateUser(&domain.User{
|
||||
Email: claims.Email,
|
||||
Firstname: firstname,
|
||||
Lastname: claims.FamilyName,
|
||||
Enabled: true,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating oidc user %s: %s", claims.Email, err)
|
||||
}
|
||||
|
||||
_, err = s.userRepository.CreateTeam(user.ID, &domain.Team{
|
||||
Label: "Espace personnel",
|
||||
DateCreated: time.Now(),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating personal team for oidc user %s: %s", claims.Email, err)
|
||||
}
|
||||
|
||||
return user, nil
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
package oidc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"database/sql"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/security"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
type mockOIDCRepo struct {
|
||||
domain.OIDCProviderRepository
|
||||
provider *domain.OIDCProvider
|
||||
}
|
||||
|
||||
func (m *mockOIDCRepo) FindOIDCProvider(id string) (*domain.OIDCProvider, error) {
|
||||
return m.provider, nil
|
||||
}
|
||||
|
||||
type mockUserRepo struct {
|
||||
domain.UserRepository
|
||||
created *domain.User
|
||||
}
|
||||
|
||||
func (m *mockUserRepo) FindUserByEmail(email string) (*domain.User, error) {
|
||||
return nil, sql.ErrNoRows
|
||||
}
|
||||
|
||||
func (m *mockUserRepo) CreateUser(user *domain.User) (*domain.User, error) {
|
||||
user.ID = "user-1"
|
||||
m.created = user
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (m *mockUserRepo) CreateTeam(userid string, team *domain.Team) (*domain.Team, error) {
|
||||
return team, nil
|
||||
}
|
||||
|
||||
// fakeIdP simule un fournisseur OpenID Connect (Keycloak-like):
|
||||
// document de découverte, JWKS et endpoint token.
|
||||
type fakeIdP struct {
|
||||
server *httptest.Server
|
||||
key *rsa.PrivateKey
|
||||
kid string
|
||||
idToken string
|
||||
provider *domain.OIDCProvider
|
||||
redirectURI string
|
||||
tokenCalls int
|
||||
}
|
||||
|
||||
func newFakeIdP(t *testing.T) *fakeIdP {
|
||||
t.Helper()
|
||||
|
||||
key, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
idp := &fakeIdP{key: key, kid: "test-key-1", redirectURI: "http://localhost:3000/api/auth/oidc/callback"}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
server := httptest.NewServer(mux)
|
||||
idp.server = server
|
||||
|
||||
mux.HandleFunc("/.well-known/openid-configuration", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(map[string]string{
|
||||
"issuer": server.URL,
|
||||
"authorization_endpoint": server.URL + "/authorize",
|
||||
"token_endpoint": server.URL + "/token",
|
||||
"jwks_uri": server.URL + "/jwks",
|
||||
})
|
||||
})
|
||||
|
||||
mux.HandleFunc("/jwks", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(map[string][]map[string]string{
|
||||
"keys": {{
|
||||
"kid": idp.kid,
|
||||
"kty": "RSA",
|
||||
"alg": "RS256",
|
||||
"use": "sig",
|
||||
"n": base64.RawURLEncoding.EncodeToString(key.PublicKey.N.Bytes()),
|
||||
"e": base64.RawURLEncoding.EncodeToString(big.NewInt(int64(key.PublicKey.E)).Bytes()),
|
||||
}},
|
||||
})
|
||||
})
|
||||
|
||||
mux.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) {
|
||||
idp.tokenCalls++
|
||||
if err := r.ParseForm(); err != nil {
|
||||
t.Errorf("invalid token request form: %s", err)
|
||||
}
|
||||
if r.Form.Get("grant_type") != "authorization_code" {
|
||||
t.Errorf("unexpected grant_type: %s", r.Form.Get("grant_type"))
|
||||
}
|
||||
if r.Form.Get("redirect_uri") != idp.redirectURI {
|
||||
t.Errorf("unexpected redirect_uri: %s", r.Form.Get("redirect_uri"))
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(map[string]any{
|
||||
"access_token": "opaque-access-token",
|
||||
"id_token": idp.idToken,
|
||||
"token_type": "Bearer",
|
||||
"expires_in": 300,
|
||||
})
|
||||
})
|
||||
|
||||
idp.provider = &domain.OIDCProvider{
|
||||
ID: "kc",
|
||||
Label: "Keycloak",
|
||||
ClientID: "lassistanoque",
|
||||
ClientSecret: "secret",
|
||||
WellknownURL: server.URL + "/.well-known/openid-configuration",
|
||||
}
|
||||
|
||||
return idp
|
||||
}
|
||||
|
||||
func (idp *fakeIdP) signIDToken(t *testing.T, claims jwt.MapClaims) string {
|
||||
t.Helper()
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
|
||||
token.Header["kid"] = idp.kid
|
||||
signed, err := token.SignedString(idp.key)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return signed
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
os.Setenv("LASSISTANOQUE_JWT_SECRET", "test-secret")
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
||||
func newAuthenticator(idp *fakeIdP) *OIDCAuthenticator {
|
||||
tokenManager := security.NewJwtTokenManager(time.Hour, 24*time.Hour, "lassistanoque")
|
||||
return NewOIDCAuthenticator(tokenManager, &mockOIDCRepo{provider: idp.provider}, &mockUserRepo{})
|
||||
}
|
||||
|
||||
func TestAuthorizeURL(t *testing.T) {
|
||||
idp := newFakeIdP(t)
|
||||
defer idp.server.Close()
|
||||
|
||||
authenticator := newAuthenticator(idp)
|
||||
state, err := authenticator.tokenManager.GenerateStateToken(idp.provider.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
url, err := authenticator.AuthorizeURL(context.Background(), idp.provider, idp.redirectURI, state)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(url, idp.server.URL+"/authorize?") {
|
||||
t.Errorf("unexpected authorize url: %s", url)
|
||||
}
|
||||
for _, expected := range []string{
|
||||
"client_id=lassistanoque",
|
||||
"response_type=code",
|
||||
"scope=openid+profile+email",
|
||||
"state=",
|
||||
} {
|
||||
if !strings.Contains(url, expected) {
|
||||
t.Errorf("authorize url misses %s: %s", expected, url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestExchangeCodeCreatesUserAndSession(t *testing.T) {
|
||||
idp := newFakeIdP(t)
|
||||
defer idp.server.Close()
|
||||
|
||||
idp.idToken = idp.signIDToken(t, jwt.MapClaims{
|
||||
"iss": idp.server.URL,
|
||||
"aud": idp.provider.ClientID,
|
||||
"exp": time.Now().Add(5 * time.Minute).Unix(),
|
||||
"email": "fabien@example.com",
|
||||
"given_name": "Fabien",
|
||||
"family_name": "Dupont",
|
||||
})
|
||||
|
||||
userRepo := &mockUserRepo{}
|
||||
tokenManager := security.NewJwtTokenManager(time.Hour, 24*time.Hour, "lassistanoque")
|
||||
authenticator := NewOIDCAuthenticator(tokenManager, &mockOIDCRepo{provider: idp.provider}, userRepo)
|
||||
|
||||
session, err := authenticator.ExchangeCode(context.Background(), idp.provider, "auth-code", idp.redirectURI)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if idp.tokenCalls != 1 {
|
||||
t.Errorf("expected 1 token endpoint call, got %d", idp.tokenCalls)
|
||||
}
|
||||
if userRepo.created == nil {
|
||||
t.Fatal("user was not provisioned")
|
||||
}
|
||||
if userRepo.created.Email != "fabien@example.com" ||
|
||||
userRepo.created.Firstname != "Fabien" ||
|
||||
userRepo.created.Lastname != "Dupont" {
|
||||
t.Errorf("provisioned user mismatch: %+v", userRepo.created)
|
||||
}
|
||||
if !userRepo.created.Enabled {
|
||||
t.Error("provisioned user should be enabled")
|
||||
}
|
||||
if session.AccessToken == "" || session.RefreshToken == "" {
|
||||
t.Error("session tokens are empty")
|
||||
}
|
||||
if session.User == nil || session.User.Email != "fabien@example.com" {
|
||||
t.Errorf("session user mismatch: %+v", session.User)
|
||||
}
|
||||
|
||||
// le token applicatif doit être valide
|
||||
user, err := tokenManager.ParseAndValidate(session.AccessToken)
|
||||
if err != nil {
|
||||
t.Fatalf("generated access token invalid: %s", err)
|
||||
}
|
||||
if user.ID != "user-1" {
|
||||
t.Errorf("unexpected user id in access token: %s", user.ID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExchangeCodeRejectsForgedIDToken(t *testing.T) {
|
||||
idp := newFakeIdP(t)
|
||||
defer idp.server.Close()
|
||||
|
||||
// token signé par une autre clé que celle du JWKS
|
||||
forgedKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{
|
||||
"iss": idp.server.URL,
|
||||
"aud": idp.provider.ClientID,
|
||||
"exp": time.Now().Add(5 * time.Minute).Unix(),
|
||||
"email": "attacker@example.com",
|
||||
})
|
||||
token.Header["kid"] = idp.kid
|
||||
idp.idToken, err = token.SignedString(forgedKey)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
authenticator := newAuthenticator(idp)
|
||||
if _, err := authenticator.ExchangeCode(context.Background(), idp.provider, "auth-code", idp.redirectURI); err == nil {
|
||||
t.Fatal("exchange should fail with a forged id token")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExchangeCodeRejectsWrongIssuer(t *testing.T) {
|
||||
idp := newFakeIdP(t)
|
||||
defer idp.server.Close()
|
||||
|
||||
idp.idToken = idp.signIDToken(t, jwt.MapClaims{
|
||||
"iss": "https://evil.example.com",
|
||||
"aud": idp.provider.ClientID,
|
||||
"exp": time.Now().Add(5 * time.Minute).Unix(),
|
||||
"email": "attacker@example.com",
|
||||
})
|
||||
|
||||
authenticator := newAuthenticator(idp)
|
||||
if _, err := authenticator.ExchangeCode(context.Background(), idp.provider, "auth-code", idp.redirectURI); err == nil {
|
||||
t.Fatal("exchange should fail with a wrong issuer")
|
||||
}
|
||||
}
|
||||
@@ -11,11 +11,13 @@ import (
|
||||
type Database interface {
|
||||
SettingsRepository() domain.SettingsRepository
|
||||
UserRepository() domain.UserRepository
|
||||
OIDCProviderRepository() domain.OIDCProviderRepository
|
||||
FileRepository() domain.FileRepository
|
||||
ProviderRepository() domain.ProviderRepository
|
||||
AgentRepository() domain.AgentRepository
|
||||
ChatRepository() domain.ChatRepository
|
||||
ToolRepository() domain.ToolRepository
|
||||
TaskRepository() domain.TaskRepository
|
||||
Migrate() error
|
||||
Close()
|
||||
}
|
||||
|
||||
@@ -189,8 +189,9 @@ func (t Table[T]) Select(options ...Option) ([]*T, error) {
|
||||
}
|
||||
if q.pagesize != 0 {
|
||||
query += fmt.Sprintf(" limit %d", q.pagesize)
|
||||
if q.pagenum != 0 {
|
||||
query += fmt.Sprintf(" offset %d", q.pagesize*(q.pagenum-1))
|
||||
if q.pagenum > 0 {
|
||||
// pages en base 0 : la page 0 est la première page
|
||||
query += fmt.Sprintf(" offset %d", q.pagesize*q.pagenum)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ package turso
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database/orm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
@@ -29,15 +31,25 @@ func NewTursoChatRepository(db *sql.DB) *TursoChatRepository {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *TursoChatRepository) ListChats(userID string, teamID string, page int) ([]*domain.Chat, error) {
|
||||
func (r *TursoChatRepository) ListChats(userID string, teamID string, page int, query string, taskID string) ([]*domain.Chat, error) {
|
||||
where := "team_id=$1 and team_id in (select team_id from user_teams where user_id=$2)"
|
||||
args := []any{teamID, userID}
|
||||
if query != "" {
|
||||
// % et _ sont des jokers LIKE : on les neutralise
|
||||
escaped := strings.ReplaceAll(query, `\`, `\\`)
|
||||
escaped = strings.ReplaceAll(escaped, `%`, `\%`)
|
||||
escaped = strings.ReplaceAll(escaped, `_`, `\_`)
|
||||
where += " and title like $3 escape '\\'"
|
||||
args = append(args, "%"+escaped+"%")
|
||||
}
|
||||
if taskID != "" {
|
||||
where += fmt.Sprintf(" and task_id=$%d", len(args)+1)
|
||||
args = append(args, taskID)
|
||||
}
|
||||
return r.chatTable.Select(
|
||||
orm.WithWhere(
|
||||
"team_id=$1 and team_id in (select team_id from user_teams where user_id=$2)",
|
||||
teamID,
|
||||
userID,
|
||||
),
|
||||
orm.WithWhere(where, args...),
|
||||
orm.WithOrder("_date_created desc"),
|
||||
orm.WithPagination(page, 50),
|
||||
orm.WithPagination(page, 20),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -68,6 +80,16 @@ func (r *TursoChatRepository) UpdateChat(userID string, chat *domain.Chat) (*dom
|
||||
}
|
||||
|
||||
func (r *TursoChatRepository) DeleteChat(userID string, teamID string, id string) error {
|
||||
// les messages n'ont pas de clé étrangère cascade : suppression explicite
|
||||
err := r.messageTable.DeleteWhere(
|
||||
"chat_id=$1 and team_id=$2 and team_id in (select team_id from user_teams where user_id=$3)",
|
||||
id,
|
||||
teamID,
|
||||
userID,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return r.chatTable.DeleteWhere(
|
||||
"id=$1 and team_id=$2 and team_id in (select team_id from user_teams where user_id=$3)",
|
||||
id,
|
||||
|
||||
@@ -64,6 +64,10 @@ func (db *TursoDB) SettingsRepository() domain.SettingsRepository {
|
||||
return NewTursoSettingsRepository(db.DB)
|
||||
}
|
||||
|
||||
func (db *TursoDB) OIDCProviderRepository() domain.OIDCProviderRepository {
|
||||
return NewTursoOIDCProviderRepository(db.DB)
|
||||
}
|
||||
|
||||
func (db *TursoDB) FileRepository() domain.FileRepository {
|
||||
return NewTursoFileRepository(db.DB)
|
||||
}
|
||||
@@ -83,3 +87,7 @@ func (db *TursoDB) ChatRepository() domain.ChatRepository {
|
||||
func (db *TursoDB) ToolRepository() domain.ToolRepository {
|
||||
return NewTursoToolRepository(db.DB)
|
||||
}
|
||||
|
||||
func (db *TursoDB) TaskRepository() domain.TaskRepository {
|
||||
return NewTursoTaskRepository(db.DB)
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package turso
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"testing"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
func TestListChatsFilter(t *testing.T) {
|
||||
db, err := sql.Open("sqlite3", ":memory:")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
schema := `
|
||||
create table chats (
|
||||
id text not null primary key, team_id text not null, start_datetime numeric,
|
||||
end_datetime numeric, agent_id text, user_id text, task_id text, title text,
|
||||
fresh_title numeric, _date_created numeric not null, _date_updated numeric,
|
||||
_version text not null);
|
||||
create table user_teams (user_id text, team_id text);
|
||||
insert into chats (id, team_id, user_id, agent_id, task_id, title, fresh_title, _date_created, _version)
|
||||
values ('c1','t1','u1','','','Problème de timeout',0,'2026-01-01 10:00:00','v'),
|
||||
('c2','t1','u1','','task-9','Discussion navigateur',0,'2026-01-02 10:00:00','v'),
|
||||
('c3','t1','u1','','','Recette de cuisine 100%',0,'2026-01-03 10:00:00','v');
|
||||
insert into user_teams (user_id, team_id) values ('u1','t1');
|
||||
insert into chats (id, team_id, user_id, agent_id, task_id, title, fresh_title, _date_created, _version)
|
||||
select 'bulk-'||(n+1), 't1','u1','','','Conversation '||(n+1), 0,
|
||||
datetime('2026-01-01','+'||(n+10)||' minutes'), 'v'
|
||||
from (with recursive cnt(n) as (select 0 union all select n+1 from cnt where n < 24) select n from cnt);
|
||||
`
|
||||
if _, err := db.Exec(schema); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
repo := NewTursoChatRepository(db)
|
||||
|
||||
// sans filtre, page 0 : 20 conversations (28 en base)
|
||||
p0, err := repo.ListChats("u1", "t1", 0, "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(p0) != 20 {
|
||||
t.Fatalf("page 0: expected 20, got %d", len(p0))
|
||||
}
|
||||
p1, err := repo.ListChats("u1", "t1", 1, "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(p1) != 8 {
|
||||
t.Fatalf("page 1: expected 8, got %d", len(p1))
|
||||
}
|
||||
seen := map[string]bool{}
|
||||
for _, c := range append(append([]*domain.Chat{}, p0...), p1...) {
|
||||
if seen[c.ID] {
|
||||
t.Fatalf("chat %s appears twice across pages", c.ID)
|
||||
}
|
||||
seen[c.ID] = true
|
||||
}
|
||||
p2, err := repo.ListChats("u1", "t1", 2, "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(p2) != 0 {
|
||||
t.Fatalf("page 2: expected 0, got %d", len(p2))
|
||||
}
|
||||
|
||||
// filtre simple
|
||||
res, err := repo.ListChats("u1", "t1", 0, "timeout", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(res) != 1 || res[0].ID != "c1" {
|
||||
t.Fatalf("filter 'timeout': %+v", res)
|
||||
}
|
||||
|
||||
// jokers LIKE neutralisés : '100%' ne doit rien matcher de spécial
|
||||
res, err = repo.ListChats("u1", "t1", 0, "100%", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(res) != 1 || res[0].ID != "c3" {
|
||||
t.Fatalf("filter '100%%': %+v", res)
|
||||
}
|
||||
|
||||
// pas de résultat
|
||||
res, err = repo.ListChats("u1", "t1", 0, "inexistant", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(res) != 0 {
|
||||
t.Fatalf("expected 0, got %d", len(res))
|
||||
}
|
||||
|
||||
// filtre par tâche
|
||||
taskRes, err := repo.ListChats("u1", "t1", 0, "", "task-9")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(taskRes) != 1 || taskRes[0].ID != "c2" {
|
||||
t.Fatalf("filter task-9: expected [c2], got %v", taskRes)
|
||||
}
|
||||
|
||||
_ = domain.Chat{}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
alter table tasks drop column repeat;
|
||||
@@ -0,0 +1 @@
|
||||
alter table tasks add column repeat integer not null default 1;
|
||||
+1
@@ -0,0 +1 @@
|
||||
alter table tasks drop column last_datetime;
|
||||
+1
@@ -0,0 +1 @@
|
||||
alter table tasks add column last_datetime numeric;
|
||||
@@ -0,0 +1,34 @@
|
||||
package turso
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database/orm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
type TursoOIDCProviderRepository struct {
|
||||
db *sql.DB
|
||||
OIDCTable orm.Table[domain.OIDCProvider]
|
||||
}
|
||||
|
||||
func NewTursoOIDCProviderRepository(db *sql.DB) *TursoOIDCProviderRepository {
|
||||
dialect := orm.NewSqliteDialect()
|
||||
oidcTable, err := orm.NewTable[domain.OIDCProvider](db, dialect, "oidc")
|
||||
if err != nil {
|
||||
log.Fatalf("error creating oidc provider table")
|
||||
}
|
||||
return &TursoOIDCProviderRepository{
|
||||
db: db,
|
||||
OIDCTable: oidcTable,
|
||||
}
|
||||
}
|
||||
|
||||
func (or *TursoOIDCProviderRepository) ListOIDCProviders() ([]*domain.OIDCProvider, error) {
|
||||
return or.OIDCTable.Select(orm.WithOrder("label asc"))
|
||||
}
|
||||
|
||||
func (or *TursoOIDCProviderRepository) FindOIDCProvider(id string) (*domain.OIDCProvider, error) {
|
||||
return or.OIDCTable.Get(id)
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package turso
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database/orm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
type TursoTaskRepository struct {
|
||||
db *sql.DB
|
||||
taskTable orm.Table[domain.Task]
|
||||
}
|
||||
|
||||
func NewTursoTaskRepository(db *sql.DB) *TursoTaskRepository {
|
||||
dialect := orm.NewSqliteDialect()
|
||||
taskTable, err := orm.NewTable[domain.Task](db, dialect, "tasks")
|
||||
if err != nil {
|
||||
log.Fatalf("error creating task table")
|
||||
}
|
||||
|
||||
return &TursoTaskRepository{
|
||||
db: db,
|
||||
taskTable: taskTable,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) ListTasks(userID string, teamID string) ([]*domain.Task, error) {
|
||||
return r.taskTable.Select(
|
||||
orm.WithWhere(
|
||||
"team_id=$1 and team_id in (select team_id from user_teams where user_id=$2)",
|
||||
teamID,
|
||||
userID,
|
||||
),
|
||||
orm.WithOrder("_date_created desc"),
|
||||
)
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) ListActiveTasks() ([]*domain.Task, error) {
|
||||
return r.taskTable.Select(
|
||||
orm.WithWhere("status=$1", domain.TaskStatusActive),
|
||||
)
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) GetTaskByID(userID string, teamID string, id string) (*domain.Task, error) {
|
||||
return r.taskTable.SelectOne(
|
||||
"id=$1 and team_id=$2 and team_id in (select team_id from user_teams where user_id=$3)",
|
||||
id,
|
||||
teamID,
|
||||
userID,
|
||||
)
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) CreateTask(task *domain.Task) (*domain.Task, error) {
|
||||
return r.taskTable.Insert(task)
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) UpdateTask(task *domain.Task) (*domain.Task, error) {
|
||||
return r.taskTable.Update(task)
|
||||
}
|
||||
|
||||
func (r *TursoTaskRepository) DeleteTask(userID string, teamID string, id string) error {
|
||||
return r.taskTable.DeleteWhere(
|
||||
"id=$1 and team_id=$2 and team_id in (select team_id from user_teams where user_id=$3)",
|
||||
id,
|
||||
teamID,
|
||||
userID,
|
||||
)
|
||||
}
|
||||
|
||||
// FirstUserOfTeam retourne le premier utilisateur d'une équipe. Les tâches
|
||||
// planifiées ne portent pas d'utilisateur : c'est lui qui porte la conversation
|
||||
// générée lors de l'exécution.
|
||||
func (r *TursoTaskRepository) FirstUserOfTeam(teamID string) (string, error) {
|
||||
var userID string
|
||||
err := r.db.QueryRow(
|
||||
"select user_id from user_teams where team_id=$1 order by _date_created asc limit 1",
|
||||
teamID,
|
||||
).Scan(&userID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return userID, nil
|
||||
}
|
||||
@@ -168,13 +168,15 @@ func (e *AnyLLMEngine) Stream(
|
||||
Extra: extra,
|
||||
})
|
||||
|
||||
params.OnChunk(&domain.Chunk{
|
||||
Done: false,
|
||||
ToolName: tc.Function.Name,
|
||||
Role: anyllm.RoleAssistant,
|
||||
Content: tc.Function.Arguments,
|
||||
Reasoning: false,
|
||||
})
|
||||
if params.OnChunk != nil {
|
||||
params.OnChunk(&domain.Chunk{
|
||||
Done: false,
|
||||
ToolName: tc.Function.Name,
|
||||
Role: anyllm.RoleAssistant,
|
||||
Content: tc.Function.Arguments,
|
||||
Reasoning: false,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -182,11 +184,13 @@ func (e *AnyLLMEngine) Stream(
|
||||
}
|
||||
|
||||
if !toolCalling {
|
||||
params.OnChunk(&domain.Chunk{
|
||||
Done: true,
|
||||
Role: anyllm.RoleAssistant,
|
||||
Content: "",
|
||||
})
|
||||
if params.OnChunk != nil {
|
||||
params.OnChunk(&domain.Chunk{
|
||||
Done: true,
|
||||
Role: anyllm.RoleAssistant,
|
||||
Content: "",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if err := <-errChan; err != nil {
|
||||
|
||||
@@ -75,6 +75,38 @@ func (tm *JwtTokenManager) GenerateRefreshToken(userID string) (string, time.Tim
|
||||
return signed, expiresAt, err
|
||||
}
|
||||
|
||||
// GenerateStateToken crée un JWT court (10 min) utilisé comme paramètre state
|
||||
// du flux OIDC, porteur d'une donnée arbitraire (ex: l'id du fournisseur).
|
||||
func (tm *JwtTokenManager) GenerateStateToken(data string) (string, error) {
|
||||
claims := jwt.RegisteredClaims{
|
||||
Subject: data,
|
||||
Issuer: tm.issuer,
|
||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(10 * time.Minute)),
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
}
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
return token.SignedString(tm.secret)
|
||||
}
|
||||
|
||||
// ParseStateToken vérifie un state généré par GenerateStateToken et retourne
|
||||
// la donnée qu'il transporte.
|
||||
func (tm *JwtTokenManager) ParseStateToken(state string) (string, error) {
|
||||
claims := &jwt.RegisteredClaims{}
|
||||
token, err := jwt.ParseWithClaims(state, claims, func(t *jwt.Token) (interface{}, error) {
|
||||
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||
return nil, errors.New("méthode de signature inattendue")
|
||||
}
|
||||
return tm.secret, nil
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if !token.Valid {
|
||||
return "", errors.New("token invalide")
|
||||
}
|
||||
return claims.Subject, nil
|
||||
}
|
||||
|
||||
// ParseAndValidate décode et vérifie la signature + l'expiration d'un JWT.
|
||||
func (tm *JwtTokenManager) ParseAndValidate(tokenString string) (*domain.User, error) {
|
||||
claims := &Claims{}
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
package scheduler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/task"
|
||||
)
|
||||
|
||||
// SchedulerTool permet à l'agent de planifier des tâches pour l'utilisateur :
|
||||
// exécution d'un prompt selon une spécification cron, avec ou sans répétition.
|
||||
type SchedulerTool struct {
|
||||
taskService *task.Service
|
||||
}
|
||||
|
||||
func New(taskService *task.Service) *SchedulerTool {
|
||||
return &SchedulerTool{taskService: taskService}
|
||||
}
|
||||
|
||||
func (t *SchedulerTool) Name() string {
|
||||
return "scheduler"
|
||||
}
|
||||
|
||||
func (t *SchedulerTool) Description() string {
|
||||
return "Schedule tasks that run automatically at specified times, with or without repetition. " +
|
||||
"Use this tool whenever the user asks to do something later or on a recurring basis " +
|
||||
"(e.g. 'every day at 8am', 'every Monday at 9am', 'tomorrow at 6pm', 'every hour'). " +
|
||||
"Actions: 'create' (schedule a new task), 'list' (list scheduled tasks), " +
|
||||
"'update' (modify a task's title, prompt, cron or repetition), " +
|
||||
"'delete' (delete a task by its id)."
|
||||
}
|
||||
|
||||
func (t *SchedulerTool) Params() []domain.ToolParam {
|
||||
return []domain.ToolParam{}
|
||||
}
|
||||
|
||||
func (t *SchedulerTool) Definition(ctx context.Context) *domain.ToolDefinition {
|
||||
return &domain.ToolDefinition{
|
||||
Type: "function",
|
||||
Function: &domain.ToolFunction{
|
||||
Name: t.Name(),
|
||||
Description: t.Description(),
|
||||
Parameters: map[string]any{
|
||||
"type": "object",
|
||||
"properties": map[string]any{
|
||||
"action": map[string]any{
|
||||
"type": "string",
|
||||
"enum": []string{"create", "list", "update", "delete"},
|
||||
"description": "The scheduling action to perform.",
|
||||
},
|
||||
"title": map[string]any{
|
||||
"type": "string",
|
||||
"description": "Short task title, e.g. 'Météo du matin'. Required for 'create'.",
|
||||
},
|
||||
"prompt": map[string]any{
|
||||
"type": "string",
|
||||
"description": "Self-contained prompt to execute at the scheduled time. " +
|
||||
"It will run in a fresh conversation with no memory of this one: " +
|
||||
"include all needed context. Required for 'create'.",
|
||||
},
|
||||
"cron": map[string]any{
|
||||
"type": "string",
|
||||
"description": "Cron spec, 5 fields 'minute hour day-of-month month day-of-week' " +
|
||||
"(e.g. '0 8 * * *' every day at 08:00, '0 9 * * 1' every Monday at 09:00, " +
|
||||
"'30 18 1 * *' on the 1st at 18:30) or a descriptor like '@daily', '@hourly', '@weekly'. " +
|
||||
"Required for 'create'.",
|
||||
},
|
||||
"repeat": map[string]any{
|
||||
"type": "boolean",
|
||||
"description": "true: the task repeats on schedule. " +
|
||||
"false: it runs only once, at the first time matching the cron spec, then is marked done. " +
|
||||
"Default true. Use false for one-shot requests like 'tomorrow at 8am'.",
|
||||
},
|
||||
"id": map[string]any{
|
||||
"type": "string",
|
||||
"description": "Task id, as returned by 'list'. Required for 'update' and 'delete'.",
|
||||
},
|
||||
},
|
||||
"required": []string{"action"},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (t *SchedulerTool) Execute(ctx context.Context, input []byte, configuration string) ([]byte, error) {
|
||||
var params struct {
|
||||
Action string `json:"action"`
|
||||
Title string `json:"title"`
|
||||
Prompt string `json:"prompt"`
|
||||
Cron string `json:"cron"`
|
||||
Repeat *bool `json:"repeat"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
if err := json.Unmarshal(input, ¶ms); err != nil {
|
||||
return nil, fmt.Errorf("invalid parameters: %w", err)
|
||||
}
|
||||
|
||||
userID, ok := domain.UserIDFromContext(ctx)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("scheduler tool: missing user context")
|
||||
}
|
||||
teamID, ok := domain.TeamIDFromContext(ctx)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("scheduler tool: missing team context")
|
||||
}
|
||||
modelID, _ := domain.ModelIDFromContext(ctx)
|
||||
|
||||
switch params.Action {
|
||||
case "create":
|
||||
repeat := true
|
||||
if params.Repeat != nil {
|
||||
repeat = *params.Repeat
|
||||
}
|
||||
taskModel, err := t.taskService.CreateTask(userID, teamID, &domain.Task{
|
||||
ModelID: modelID,
|
||||
Label: params.Title,
|
||||
Prompt: params.Prompt,
|
||||
Cron: params.Cron,
|
||||
Repeat: repeat,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := json.Marshal(taskModel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
|
||||
case "list":
|
||||
tasks, err := t.taskService.ListTasks(userID, teamID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := json.Marshal(tasks)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
|
||||
case "update":
|
||||
if params.ID == "" {
|
||||
return nil, fmt.Errorf("'id' is required for action 'update'")
|
||||
}
|
||||
current, err := t.taskService.GetTask(userID, teamID, params.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// mise à jour partielle : seuls les champs fournis changent
|
||||
if params.Title != "" {
|
||||
current.Label = params.Title
|
||||
}
|
||||
if params.Prompt != "" {
|
||||
current.Prompt = params.Prompt
|
||||
}
|
||||
if params.Cron != "" {
|
||||
current.Cron = params.Cron
|
||||
}
|
||||
if params.Repeat != nil {
|
||||
current.Repeat = *params.Repeat
|
||||
}
|
||||
updated, err := t.taskService.UpdateTask(userID, teamID, current)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := json.Marshal(updated)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
|
||||
case "delete":
|
||||
if params.ID == "" {
|
||||
return nil, fmt.Errorf("'id' is required for action 'delete'")
|
||||
}
|
||||
if err := t.taskService.DeleteTask(userID, teamID, params.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return []byte("task deleted"), nil
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown action %q", params.Action)
|
||||
}
|
||||
}
|
||||
@@ -62,9 +62,11 @@ type ChatWithMessages struct {
|
||||
}
|
||||
|
||||
type ChatParams struct {
|
||||
ProviderID string
|
||||
ModelID string
|
||||
OnChunk StreamCallback
|
||||
ProviderID string
|
||||
ModelID string
|
||||
ContextMaxTokens int // taille de contexte du modèle ; 0 = défaut
|
||||
MaxResponseTokens int // réserve de réponse ; 0 = défaut
|
||||
OnChunk StreamCallback
|
||||
}
|
||||
|
||||
type ToolParam struct {
|
||||
@@ -149,7 +151,7 @@ type LLMEngine interface {
|
||||
}
|
||||
|
||||
type ChatRepository interface {
|
||||
ListChats(userID string, teamID string, page int) ([]*Chat, error)
|
||||
ListChats(userID string, teamID string, page int, query string, taskID string) ([]*Chat, error)
|
||||
ListChatsWithUnfreshTitles(teamID string) ([]*Chat, error)
|
||||
GetChat(userID string, teamID string, id string) (*Chat, error)
|
||||
CreateChat(userID string, chat *Chat) (*Chat, error)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package domain
|
||||
|
||||
import "time"
|
||||
|
||||
// OIDCProvider décrit un fournisseur OpenID Connect enregistré dans la table oidc.
|
||||
type OIDCProvider struct {
|
||||
ID string `db:"id" json:"id"`
|
||||
Label string `db:"label" json:"label"`
|
||||
Domain string `db:"domain" json:"domain"`
|
||||
ClientID string `db:"client_id" json:"clientId"`
|
||||
ClientSecret string `db:"client_secret" json:"-"`
|
||||
WellknownURL string `db:"wellknown_url" json:"wellknownUrl"`
|
||||
DateCreated time.Time `db:"_date_created" json:"_date_created"`
|
||||
DateUpdated *time.Time `db:"_date_updated" json:"_date_updated"`
|
||||
VersionId string `db:"_version" json:"_version"`
|
||||
}
|
||||
|
||||
type OIDCProviderRepository interface {
|
||||
ListOIDCProviders() ([]*OIDCProvider, error)
|
||||
FindOIDCProvider(id string) (*OIDCProvider, error)
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package domain
|
||||
|
||||
import "time"
|
||||
|
||||
const (
|
||||
// statuts d'une tâche planifiée
|
||||
TaskStatusActive = "active"
|
||||
TaskStatusDone = "done"
|
||||
)
|
||||
|
||||
type Task struct {
|
||||
ID string `db:"id" json:"id"`
|
||||
TeamID string `db:"team_id" json:"teamId"`
|
||||
ModelID string `db:"model_id" json:"modelId"`
|
||||
Label string `db:"label" json:"label"`
|
||||
Prompt string `db:"prompt" json:"prompt"`
|
||||
Cron string `db:"cron" json:"cron"`
|
||||
Repeat bool `db:"repeat" json:"repeat"`
|
||||
Status string `db:"status" json:"status"`
|
||||
NextDatetime *time.Time `db:"next_datetime" json:"nextDatetime"`
|
||||
LastDatetime *time.Time `db:"last_datetime" json:"lastDatetime"`
|
||||
DateCreated time.Time `db:"_date_created" json:"_date_created"`
|
||||
DateUpdated *time.Time `db:"_date_updated" json:"_date_updated"`
|
||||
VersionId string `db:"_version" json:"_version"`
|
||||
}
|
||||
|
||||
type TaskRepository interface {
|
||||
ListTasks(userID string, teamID string) ([]*Task, error)
|
||||
ListActiveTasks() ([]*Task, error)
|
||||
GetTaskByID(userID string, teamID string, id string) (*Task, error)
|
||||
CreateTask(task *Task) (*Task, error)
|
||||
UpdateTask(task *Task) (*Task, error)
|
||||
DeleteTask(userID string, teamID string, id string) error
|
||||
FirstUserOfTeam(teamID string) (string, error)
|
||||
}
|
||||
@@ -1,6 +1,41 @@
|
||||
package domain
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Clés de contexte passées aux outils lors de l'exécution : identité de
|
||||
// l'appelant et modèle en cours, pour les outils qui en dépendent
|
||||
// (ex. scheduler crée une tâche pour l'équipe courante).
|
||||
type contextKey int
|
||||
|
||||
const (
|
||||
contextKeyUserID contextKey = iota
|
||||
contextKeyTeamID
|
||||
contextKeyModelID
|
||||
)
|
||||
|
||||
func WithToolContext(ctx context.Context, userID string, teamID string, modelID string) context.Context {
|
||||
ctx = context.WithValue(ctx, contextKeyUserID, userID)
|
||||
ctx = context.WithValue(ctx, contextKeyTeamID, teamID)
|
||||
return context.WithValue(ctx, contextKeyModelID, modelID)
|
||||
}
|
||||
|
||||
func UserIDFromContext(ctx context.Context) (string, bool) {
|
||||
v, ok := ctx.Value(contextKeyUserID).(string)
|
||||
return v, ok
|
||||
}
|
||||
|
||||
func TeamIDFromContext(ctx context.Context) (string, bool) {
|
||||
v, ok := ctx.Value(contextKeyTeamID).(string)
|
||||
return v, ok
|
||||
}
|
||||
|
||||
func ModelIDFromContext(ctx context.Context) (string, bool) {
|
||||
v, ok := ctx.Value(contextKeyModelID).(string)
|
||||
return v, ok
|
||||
}
|
||||
|
||||
type Tool struct {
|
||||
ID string `db:"id" json:"id"`
|
||||
|
||||
@@ -17,6 +17,8 @@ func NewAuthGroup(prefix string, e *echo.Group, service *auth.Service) *echo.Gro
|
||||
}
|
||||
auth := e.Group(prefix)
|
||||
auth.POST("/login", authHandler.Login)
|
||||
auth.GET("/oidc/providers", authHandler.OIDCProviders)
|
||||
auth.GET("/oidc/login", authHandler.OIDCLogin)
|
||||
auth.GET("/oidc/callback", authHandler.OIDCCallback)
|
||||
auth.POST("/register", authHandler.Register)
|
||||
return auth
|
||||
@@ -69,8 +71,77 @@ func (h AuthHandler) Login(c *echo.Context) error {
|
||||
return c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
||||
// oidcRedirectURI reconstruit l'URL de callback du serveur à partir de la
|
||||
// requête. Elle doit être identique entre /oidc/login et /oidc/callback.
|
||||
func oidcRedirectURI(c *echo.Context) string {
|
||||
scheme := "http"
|
||||
if proto := c.Request().Header.Get("X-Forwarded-Proto"); proto != "" {
|
||||
scheme = proto
|
||||
} else if c.Request().TLS != nil {
|
||||
scheme = "https"
|
||||
}
|
||||
host := c.Request().Header.Get("X-Forwarded-Host")
|
||||
if host == "" {
|
||||
host = c.Request().Host
|
||||
}
|
||||
return scheme + "://" + host + "/api/auth/oidc/callback"
|
||||
}
|
||||
|
||||
func (h AuthHandler) OIDCProviders(c *echo.Context) error {
|
||||
providers, err := h.authService.ListOIDCProviders()
|
||||
if err != nil {
|
||||
c.Logger().Error(fmt.Sprintf("error listing oidc providers: %s", err))
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "error listing oidc providers")
|
||||
}
|
||||
return c.JSON(http.StatusOK, providers)
|
||||
}
|
||||
|
||||
func (h AuthHandler) OIDCLogin(c *echo.Context) error {
|
||||
providerID := c.QueryParam("provider")
|
||||
if providerID == "" {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "provider query parameter is required")
|
||||
}
|
||||
|
||||
authorizeURL, err := h.authService.OIDCAuthorizeURL(context.Background(), providerID, oidcRedirectURI(c))
|
||||
if err != nil {
|
||||
c.Logger().Error(fmt.Sprintf("error building oidc authorize url: %s", err))
|
||||
return c.Redirect(http.StatusFound, "/login?error=oidc")
|
||||
}
|
||||
return c.Redirect(http.StatusFound, authorizeURL)
|
||||
}
|
||||
|
||||
func (h AuthHandler) OIDCCallback(c *echo.Context) error {
|
||||
return nil
|
||||
if errParam := c.QueryParam("error"); errParam != "" {
|
||||
c.Logger().Error(fmt.Sprintf("oidc provider returned an error: %s", errParam))
|
||||
return c.Redirect(http.StatusFound, "/login?error=oidc")
|
||||
}
|
||||
code := c.QueryParam("code")
|
||||
state := c.QueryParam("state")
|
||||
if code == "" || state == "" {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "code and state are required")
|
||||
}
|
||||
|
||||
session, err := h.authService.OIDCCallback(context.Background(), state, code, oidcRedirectURI(c))
|
||||
if err != nil {
|
||||
c.Logger().Error(fmt.Sprintf("error while oidc callback: %s", err))
|
||||
return c.Redirect(http.StatusFound, "/login?error=oidc")
|
||||
}
|
||||
|
||||
// L'application SPA est servie par ce même serveur (même origine) et lit
|
||||
// ses tokens dans localStorage: on les dépose ici puis on redirige vers
|
||||
// l'application, sans jamais les faire transiter dans une URL.
|
||||
page := fmt.Sprintf(`<!doctype html>
|
||||
<html>
|
||||
<head><meta charset="utf-8"><title>Connexion en cours...</title></head>
|
||||
<body>
|
||||
<script>
|
||||
localStorage.setItem("accessToken", %q);
|
||||
localStorage.setItem("refreshToken", %q);
|
||||
location.replace("/");
|
||||
</script>
|
||||
</body>
|
||||
</html>`, session.AccessToken, session.RefreshToken)
|
||||
return c.Blob(http.StatusOK, "text/html; charset=utf-8", []byte(page))
|
||||
}
|
||||
|
||||
func (h AuthHandler) Register(c *echo.Context) error {
|
||||
|
||||
@@ -52,6 +52,7 @@ func (h *ChatHandler) NewChat(c *echo.Context) error {
|
||||
userID,
|
||||
teamID,
|
||||
request.AgentID,
|
||||
"",
|
||||
)
|
||||
if err != nil {
|
||||
c.Logger().Error("error creating chat", "error", err.Error())
|
||||
@@ -119,11 +120,17 @@ func (h *ChatHandler) List(c *echo.Context) error {
|
||||
teamID := c.Param("space")
|
||||
page := c.Param("page")
|
||||
pageInt, _ := strconv.Atoi(page)
|
||||
chats, err := h.chatService.ListChats(userID, teamID, pageInt)
|
||||
query := c.QueryParam("q")
|
||||
taskID := c.QueryParam("task")
|
||||
chats, err := h.chatService.ListChats(userID, teamID, pageInt, query, taskID)
|
||||
if err != nil {
|
||||
c.Logger().Error("error listing chats", "error", err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "error listing chats")
|
||||
}
|
||||
// évite "null" dans la réponse quand il n'y a pas de conversation
|
||||
if chats == nil {
|
||||
chats = []*domain.Chat{}
|
||||
}
|
||||
return c.JSON(http.StatusOK, chats)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/auth"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/task"
|
||||
)
|
||||
|
||||
type TaskHandler struct {
|
||||
taskService *task.Service
|
||||
}
|
||||
|
||||
func NewTaskGroup(prefix string, e *echo.Group, service *task.Service, middlewares ...echo.MiddlewareFunc) *echo.Group {
|
||||
taskHandler := &TaskHandler{taskService: service}
|
||||
|
||||
auth := e.Group(prefix, middlewares...)
|
||||
auth.GET("/:space", taskHandler.List)
|
||||
auth.PUT("/:space/:id", taskHandler.Update)
|
||||
auth.DELETE("/:space/:id", taskHandler.Delete)
|
||||
return auth
|
||||
}
|
||||
|
||||
func (h *TaskHandler) List(c *echo.Context) error {
|
||||
userID := c.Get(auth.ContextUserIDKey).(string)
|
||||
teamID := c.Param("space")
|
||||
tasks, err := h.taskService.ListTasks(userID, teamID)
|
||||
if err != nil {
|
||||
c.Logger().Error("error listing tasks", "error", err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "error listing tasks")
|
||||
}
|
||||
// évite "null" dans la réponse quand il n'y a pas de tâche
|
||||
if tasks == nil {
|
||||
tasks = []*domain.Task{}
|
||||
}
|
||||
return c.JSON(http.StatusOK, tasks)
|
||||
}
|
||||
|
||||
func (h *TaskHandler) Update(c *echo.Context) error {
|
||||
userID := c.Get(auth.ContextUserIDKey).(string)
|
||||
teamID := c.Param("space")
|
||||
taskID := c.Param("id")
|
||||
|
||||
var taskModel domain.Task
|
||||
if err := c.Bind(&taskModel); err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "error binding request")
|
||||
}
|
||||
taskModel.ID = taskID
|
||||
|
||||
updated, err := h.taskService.UpdateTask(userID, teamID, &taskModel)
|
||||
if err != nil {
|
||||
c.Logger().Error("error updating task", "error", err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "error updating task")
|
||||
}
|
||||
return c.JSON(http.StatusOK, updated)
|
||||
}
|
||||
|
||||
func (h *TaskHandler) Delete(c *echo.Context) error {
|
||||
userID := c.Get(auth.ContextUserIDKey).(string)
|
||||
teamID := c.Param("space")
|
||||
taskID := c.Param("id")
|
||||
if err := h.taskService.DeleteTask(userID, teamID, taskID); err != nil {
|
||||
c.Logger().Error("error deleting task", "error", err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "error deleting task")
|
||||
}
|
||||
return c.JSON(http.StatusOK, "task deleted")
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import (
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/chat"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/provider"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/storage"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/task"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/tool"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/user"
|
||||
)
|
||||
@@ -44,6 +45,7 @@ type Dependencies struct {
|
||||
AgentService *agent.Service
|
||||
ChatService *chat.Service
|
||||
ToolService *tool.Service
|
||||
TaskService *task.Service
|
||||
TokenManager auth.TokenManager
|
||||
}
|
||||
|
||||
@@ -87,6 +89,7 @@ func NewRouter(deps Dependencies) *Router {
|
||||
_ = handlers.NewToolGroup("/tool", api, deps.ToolService, deps.UserService, deps.TokenManager.TokenMiddleware)
|
||||
_ = handlers.NewTeamGroup("/team", api, deps.UserService, deps.TokenManager.TokenMiddleware)
|
||||
_ = handlers.NewChatGroup("/chat", api, deps.ChatService, deps.TokenManager.TokenMiddleware)
|
||||
_ = handlers.NewTaskGroup("/task", api, deps.TaskService, deps.TokenManager.TokenMiddleware)
|
||||
|
||||
server := http.Server{
|
||||
Addr: fmt.Sprintf(":%d", cfg.HttpPort),
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
||||
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-700:oklch(50% .134 242.749);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-900:oklch(37.9% .146 265.522);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-bold:700;--radius-sm:.25rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-heightLine truncated
|
||||
@@ -1,2 +0,0 @@
|
||||
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
||||
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-duration:initial;--tw-leading:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-ease:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-green-300:oklch(87.1% .15 154.449);--color-green-700:oklch(52.7% .154 150.069);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-700:oklch(50% .134 242.749);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-900:oklch(37.9% .146 265.522);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-bold:700;--radius-sm:.25rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inheritLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
img.svelte-1hoglcg{opacity:0;max-width:100%;height:auto}img.fade-in.svelte-1hoglcg{opacity:1;transition:opacity .3s ease-in-out}img.visible.svelte-1hoglcg{opacity:1;transition:none}img.error.svelte-1hoglcg{opacity:.5;filter:grayscale()}
|
||||
@@ -1,3 +0,0 @@
|
||||
var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=Array.isArray,r=Array.prototype.indexOf,i=Array.prototype.includes,a=Array.from,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyDescriptors,l=Object.prototype,u=Array.prototype,d=Object.getPrototypeOf,f=Object.isExtensible,p=()=>{};function m(e){for(var t=0;t<e.length;t++)e[t]()}function h(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var g=1<<24,_=1024,v=2048,y=4096,b=8192,x=16384,S=32768,ee=1<<25,C=65536,te=1<<18,ne=1<<19,re=1<<20,ie=1<<25,ae=65536,oe=1<<21,se=1<<22,ce=1<<23,w=Symbol(`$state`),le=Symbol(`legacy props`),ue=Symbol(``),de=Symbol(`proxy path`),fe=Symbol(`attributes`),pe=Symbol(`class`),me=Symbol(`style`),he=Symbol(`text`),ge=Symbol(`form reset`),_e=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},ve=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function ye(e){throw Error(`https://svelte.dev/e/experimental_async_required`)}function be(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function xe(){throw Error(`https://svelte.dev/e/missing_context`)}function Se(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function Ce(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function we(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function Te(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Ee(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function De(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function Oe(){throw Error(`https://svelte.dev/e/fork_discarded`)}function ke(){throw Error(`https://svelte.dev/e/fork_timing`)}function Ae(){throw Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`)}function je(){throw Error(`https://svelte.dev/e/hydration_failed`)}function Me(e){throw Error(`https://svelte.dev/e/lifecycle_legacy_only`)}function Ne(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Pe(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Fe(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Ie(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Le(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Re={},T=Symbol(`uninitialized`),ze=`http://www.w3.org/1999/xhtml`;function Be(){console.warn(`https://svelte.dev/e/derived_inert`)}function Ve(e){console.warn(`https://svelte.dev/e/hydratable_missing_but_expected`)}function He(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ue(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function We(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var E=!1;function D(e){E=e}var O;function k(e){if(e===null)throw He(),Re;return O=e}function Ge(){return k(R(O))}function Ke(e){if(E){if(R(O)!==null)throw He(),Re;O=e}}function qe(e=1){if(E){for(var t=e,n=O;t--;)n=R(n);O=n}}function Je(e=!0){for(var t=0,n=O;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=R(n);e&&n.remove(),n=i}}function Ye(e){if(!e||e.nodeType!==8)throw He(),Re;return e.data}function Xe(e){return e===this.v}function Ze(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Qe(e){return!Ze(e,this.v)}var $e=!1;function et(){$e=!0}function tt(e,t){return e.label=t,nt(e.v,t),e}function nt(e,t){return e?.[de]?.(t),e}function rt(e){return typeof e==`symbol`?`Symbol(${e.description})`:typeof e==`function`?`<function>`:typeof e==`object`&&e?`<object>`:String(e)}var A=null;function it(e){A=e}function at(){let e={};return[()=>(ct(e)||xe(),ot(e)),t=>st(e,t)]}function ot(e){return pt(`getContext`).get(e)}function st(e,t){return pt(`setContext`).set(e,t),t}function ct(e){return pt(`hasContext`).has(e)}function lt(){return pt(`getAllContexts`)}function ut(e,t=!1,n){A={p:A,i:!1,c:null,e:null,s:e,x:null,r:G,l:$e&&!t?{s:null,u:null,$:[]}:null}}function dt(e){var t=A,n=t.e;if(n!==null){t.e=null;for(var r of n)Xn(r)}return e!==void 0&&(t.x=e),t.i=!0,A=t.p,e??{}}function ft(){return!$e||A!==null&&A.l===null}function pt(e){return A===null&&be(e),A.c??=new Map(mt(A)||void 0)}function mt(e){let t=e.p;for(;t!==null;){let e=t.c;if(e!==null)return e;t=t.p}return null}var ht=[];function gt(){var e=ht;ht=[],m(e)}function j(e){if(ht.length===0&&!tn){var t=ht;queueMicrotask(()=>{t===ht&>()})}ht.push(e)}function _t(){for(;ht.length>0;)gt()}function vt(e){var t=G;if(t===null)return H.f|=ce,e;if(!(t.f&32768)&&!(t.f&4))throw e;yt(e,t)}function yt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var bt=~(v|y|_);function M(e,t){e.f=e.fLine truncated
|
||||
`).some(e=>e.startsWith(`https://svelte.dev/e/`)))throw r;return r!==Re&&console.warn(`Failed to hydrate: `,r),t.recover===!1&&je(),Ln(),Vn(n),D(!1),di(e,t)}finally{D(r),k(i)}}var pi=new Map;function mi(e,{target:t,anchor:n,props:r={},events:i,context:o,intro:s=!0,transformError:c}){Ln();var l=void 0,u=Qn(()=>{var s=n??t.appendChild(I());It(s,{pending:()=>{}},t=>{ut({});var n=A;if(o&&(n.c=o),i&&(r.$$events=i),E&&$(t,null),l=e(t,r)||{},E&&(G.nodes.end=O,O===null||O.nodeType!==8||O.data!==`]`))throw He(),Re;dt()},c);var u=new Set,d=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!u.has(r)){u.add(r);var i=Gr(r);for(let e of[t,document]){var a=pi.get(e);a===void 0&&(a=new Map,pi.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,ei,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return d(a(qr)),Jr.add(d),()=>{for(var e of u)for(let n of[t,document]){var r=pi.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,ei),r.delete(e),r.size===0&&pi.delete(n)):r.set(e,i)}Jr.delete(d),s!==n&&s.parentNode?.removeChild(s)}});return hi.set(l,u),l}var hi=new WeakMap;function gi(e,t){let n=hi.get(e);return n?(hi.delete(e),n(t)):Promise.resolve()}var _i=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)fr(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(fr(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(V(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();mr(r,t),t.append(I()),this.#n.set(e,{effect:r,fragment:t})}else V(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),ur(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(V(n.effect),this.#n.delete(e))};ensure(e,t){var n=N,r=Hn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=I();i.append(a),this.#n.set(e,{effect:B(()=>t(a)),fragment:i})}else this.#t.set(e,B(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else E&&(this.anchor=O),this.#a(n)}};function vi(e,t,n=!1){var r;E&&(r=O,Ge());var i=new _i(e),a=n?C:0;function o(e,t){if(E){var n=Ye(r);if(e!==parseInt(n.substring(1))){var a=Je();k(a),i.anchor=a,D(!1),i.ensure(e,t),D(!0);return}}i.ensure(e,t)}rr(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}var yi=Symbol(`NaN`);function bi(e,t,n){E&&Ge();var r=new _i(e),i=!ft();rr(()=>{var e=t();e!==e&&(e=yi),i&&typeof e==`object`&&e&&(e={}),r.ensure(e,n)})}function xi(e,t){return t}function Si(e,t,n){for(var r=[],i=t.length,o,s=t.length,c=0;c<i;c++){let n=t[c];ur(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;Ci(e,a(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=r.length===0&&n!==null;if(l){var u=n,d=u.parentNode;Vn(d),d.append(u),e.items.clear()}Ci(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function Ci(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=ie,mr(a,document.createDocumentFragment())):V(t[i],n)}}var wi;function Ti(e,t,r,i,o,s=null){var c=e,l=new Map;if(t&4){var u=e;c=E?k(L(u)):u.appendChild(I())}E&&Ge();var d=null,f=Kt(()=>{var e=r();return n(e)?e:e==null?[]:a(e)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,Di(v,p,c,t,i),d!==null&&(p.length===0?d.f&33554432?(d.f^=ie,ki(d,null,c)):fr(d):ur(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:rr(()=>{p=Z(f);var e=p.length;let n=!1;E&&Ye(c)===`[!`!=(e===0)&&(c=Je(),k(c),D(!1),n=!0);for(var a=new Set,u=N,v=Hn(),y=0;y<e;y+=1){E&&O.nodeType===8&&O.data===`]`&&(c=O,n=!0,D(!1));var b=p[y],x=i(b,y),S=h?null:l.get(x);S?(S.v&&Tn(S.v,b),S.i&&Tn(S.i,y),v&&u.unskip_effect(S.e)):(S=Oi(l,h?c:wi??=I(),b,x,y,o,t,r),h||(S.e.f|=ie),l.set(x,S)),a.add(x)}if(e===0&&s&&!d&&(h?d=B(()=>s(c)):(d=B(()=>s(wi??=I())),d.f|=ie)),e>a.size&&Ce(``,``,``),E&&e>0&&k(Je()),!h)if(m.set(u,a),v){for(let[e,t]of l)a.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);n&&D(!0),Z(f)}),flags:t,items:l,pending:m,outrogroups:null,fallback:d};h=!1,E&&(c=O)}function Ei(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function Di(e,t,n,r,i){var o=!!(r&8),s=t.length,c=e.items,l=Ei(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=i(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if(h=t[v],g
Line truncated
|
||||
\r\f\xA0\v`];function Vi(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||Bi.includes(r[o-1]))&&(s===r.length||Bi.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Hi(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function Ui(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Wi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(Ui)),i&&c.push(...Object.keys(i).map(Ui));var l=0,u=-1;let t=e.length;for(var d=0;d<t;d++){var f=e[d];if(s?f===`/`&&e[d-1]===`*`&&(s=!1):a?a===f&&(a=!1):f===`/`&&e[d+1]===`*`?s=!0:f===`"`||f===`'`?a=f:f===`(`?o++:f===`)`&&o--,!s&&a===!1&&o===0){if(f===`:`&&u===-1)u=d;else if(f===`;`||d===t-1){if(u!==-1){var p=Ui(e.substring(l,u).trim());if(!c.includes(p)){f!==`;`&&d++;var m=e.substring(l,d).trim();n+=` `+m+`;`}}l=d+1,u=-1}}}}return r&&(n+=Hi(r)),i&&(n+=Hi(i,!0)),n=n.trim(),n===``?null:n}return e==null?null:String(e)}function Gi(e,t,n,r,i,a){var o=e[pe];if(E||o!==n||o===void 0){var s=Vi(n,r,a);(!E||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[pe]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}function Ki(e,t={},n,r){for(var i in n){var a=n[i];t[i]!==a&&(n[i]==null?e.style.removeProperty(i):e.style.setProperty(i,a,r))}}function qi(e,t,n,r){var i=e[me];if(E||i!==t){var a=Wi(t,r);(!E||a!==e.getAttribute(`style`))&&(a==null?e.removeAttribute(`style`):e.style.cssText=a),e[me]=t}else r&&(Array.isArray(r)?(Ki(e,n?.[0],r[0]),Ki(e,n?.[1],r[1],`important`)):Ki(e,n,r));return r}function Ji(e,t,r=!1){if(e.multiple){if(t==null)return;if(!n(t))return Ue();for(var i of e.options)i.selected=t.includes(Zi(i));return}for(i of e.options)if(jn(Zi(i),t)){i.selected=!0;return}(!r||t!==void 0)&&(e.selectedIndex=-1)}function Yi(e){var t=new MutationObserver(()=>{`__value`in e&&Ji(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),Jn(()=>{t.disconnect()})}function Xi(e,t,n=t){var r=new WeakSet,i=!0;Nt(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Zi);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Zi(o)}n(a),e.__value=a,N!==null&&r.add(N)}),$n(()=>{var a=t();if(e===document.activeElement){var o=N;if(r.has(o))return}if(Ji(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Zi(s),n(a))}e.__value=a,i=!1}),Yi(e)}function Zi(e){return`__value`in e?e.__value:e.value}var Qi=Symbol(`class`),$i=Symbol(`style`),ea=Symbol(`is custom element`),ta=Symbol(`is html`),na=ve?`link`:`LINK`,ra=ve?`input`:`INPUT`,ia=ve?`option`:`OPTION`,aa=ve?`select`:`SELECT`,oa=ve?`progress`:`PROGRESS`;function sa(e){if(E){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;ua(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;ua(e,`checked`,null),e.checked=r}}};e[ge]=n,j(n),jt()}}function ca(e,t){var n=pa(e);n.value!==(n.value=t??void 0)&&(e.value!==t||t===0&&e.nodeName===oa)&&(e.value=t??``)}function la(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function ua(e,t,n,r){var i=pa(e);E&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===na)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[ue]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ha(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function da(e,t,n,r,i=!1,a=!1){if(E&&i&&e.nodeName===ra){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||sa(o)}var s=pa(e),c=s[ea],l=!s[ta];let u=E&&c;u&&D(!1);var d=t||{},f=e.nodeName===ia;for(var p in t)p in n||(n[p]=null);n.class?n.class=zi(n.class):(r||n[Qi])&&(n.class=null),n[$i]&&(n.style??=null);var m=ha(e);if(e.nodeName===ra&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,ua(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){Gi(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[Qi],n[Qi]),d[i]=o,d[Qi]=n[Qi];continue}if(i===`style`){qi(e,o,t?.[$i],n[$i]),d[i]=o,d[$i]=n[$i];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=Br(r);if(Rr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)Zr(r,e,o),Qr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=Yr(r,e,a,t)}}else if(i===`style`)ua(e,i,o);else if(i===`autofocus`)Ot(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{A as e,B as t,K as n,M as r,N as i,Q as a,W as o,Z as s,at as c,dt as l,ft as u,it as d,j as f,k as p,nt as m,rt as h,tt as g,vt as _}from"./DGrvnoUE.js";import"./xihTtKlq.js";var v=class extends Map{#e=new Map;#t=d(0);#n=d(0);#r=o||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return o===this.#r?d(e):h(e)}has(e){var n=this.#e,r=n.get(e);if(r===void 0)if(super.has(e))r=this.#i(0),n.set(e,r);else return t(this.#t),!1;return t(r),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var n=this.#e,r=n.get(e);if(r===void 0)if(super.has(e))r=this.#i(0),n.set(e,r);else{t(this.#t);return}return t(r),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),m(this.#n,super.size),g(o);else if(i!==t){g(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&g(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),m(n,-1)),r&&(m(this.#n,super.size),g(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;m(this.#n,0);for(var t of e.values())m(t,-1);g(this.#t),e.clear()}}#a(){t(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var n of super.keys())if(!e.has(n)){var r=this.#i(0);e.set(n,r)}}for([,r]of this.#e)t(r)}keys(){return t(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return t(this.#n),super.size}},y=i(`<span class="text-red-700 dark:text-red-400 text-xs"> </span>`);function b(i,o){u(o,!0);var d=r(),m=a(d),h=t=>{var r=y(),i=s(r,!0);_(r),n(t=>e(i,t),[()=>o.errors.get(o.key)]),f(t,r)},g=c(()=>o.errors.has(o.key));p(m,e=>{t(g)&&e(h)}),f(i,d),l()}export{v as n,b as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{F as e,I as t,P as n,Q as r,X as i,nt as a,r as o,t as s}from"./39JK5HWF.js";var c=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},u=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function d(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function f(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function p(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(e,t,n,r=!1){let i=new URL(e);Object.defineProperty(i,"searchParams",{value:new Proxy(i.searchParams,{get(e,r){if(r===`get`||r===`getAll`||r===`has`)return(t,...i)=>(n(t),e[r](t,...i));t();let i=Reflect.get(e,r);return typeof i==`function`?i.bind(e):i}}),enumerable:!0,configurable:!0});let a=[`href`,`pathname`,`search`,`toString`,`toJSON`];r&&a.push(`hash`);for(let n of a)Object.defineProperty(i,n,{get(){return t(),e[n]},enumerable:!0,configurable:!0});return i}function g(){}function _(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function v(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var ee=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&y.delete(x(e)),ee(e,t));var y=new Map;function b(e,t){let n=x(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=v(e));let i=r.getAttribute(`data-ttl`);return i&&y.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function te(e,t,n){if(y.size>0){let t=x(e,n),r=y.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);y.delete(t)}}return window.fetch(t,n)}function x(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${_(...e)}"]`}return n}var ne=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,re=/^\/\((?:[^)]+)\)$/;function ie(e){let t=[];return{pattern:e===`/`||re.test(e)?/^\/$/:RegExp(`^${oe(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return ce(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return ce(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ne.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return ce(e)}).join(``)}).join(``)}/?$`),params:t}}function ae(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function oe(e){return e.slice(1).split(`/`).filter(ae)}function se(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0)if(s.rest)c=``;else continue;if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function ce(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}function le({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=ie(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return se(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function ue(e,t=JSON.parse){try{return t(sessionStorage[e
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{gt as e}from"./DGrvnoUE.js";e();
|
||||
@@ -1 +0,0 @@
|
||||
import{J as e}from"./39JK5HWF.js";import{t}from"./B0qrqti_.js";import"./DL7ZyBAF.js";var n=e({user:null,status:`loading`}),r=()=>{localStorage.removeItem(`accessToken`),n.status=`unauthenticated`},i=()=>localStorage.getItem(`accessToken`),a=e=>{localStorage.setItem(`accessToken`,e)},o=`/api`,s=class extends Error{status;body;constructor(e,t){super(`API Error ${e}`),this.status=e,this.body=t}};async function c(e,n={}){let{auth:a=!0,headers:c,...u}=n,d={"Content-Type":`application/json`,...c},f=new Headers(d);if(a){let e=i();e&&f.append(`Authorization`,`Bearer ${e}`)}let p=await fetch(`${o}${e}`,{...u,headers:f});if(p.status===401&&(r(),t(`/login`)),!p.ok)throw new s(p.status,await l(p));if(p.status!==204)return p.json()}async function l(e){try{return await e.json()}catch{return null}}var u={get:(e,t)=>c(e,{...t,method:`GET`}),post:(e,t,n)=>c(e,{...n,method:`POST`,body:JSON.stringify(t)}),put:(e,t,n)=>c(e,{...n,method:`PUT`,body:JSON.stringify(t)}),delete:(e,t)=>c(e,{...t,method:`DELETE`})};export{a as i,n,r,u as t};
|
||||
@@ -0,0 +1 @@
|
||||
var e=e=>{e.focus()};export{e as t};
|
||||
@@ -0,0 +1 @@
|
||||
import{t as e}from"./DtfiK5fE.js";var t={createChat:(t,n)=>e.post(`/chat/${t}`,n),createChatMessage:(t,n,r)=>e.postStream(`/chat/${t}/${n}`,r),allChats:(t,n,r,i)=>e.get(`/chat/${t}/all/${n}${r||i?`?${[r&&`q=${encodeURIComponent(r)}`,i&&`task=${i}`].filter(Boolean).join(`&`)}`:``}`),getChat:(t,n)=>e.get(`/chat/${t}/${n}`),subscribe:(t,n)=>e.get(`/chat/${t}/${n}/subscribe`),deleteChat:(t,n)=>e.delete(`/chat/${t}/${n}`)};export{t};
|
||||
@@ -0,0 +1 @@
|
||||
import{B as e,H as t,V as n,ct as r,it as i,nt as a,r as o,t as s}from"./DGrvnoUE.js";var c=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},u=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function d(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function f(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function p(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(e,t,n,r=!1){let i=new URL(e);Object.defineProperty(i,"searchParams",{value:new Proxy(i.searchParams,{get(e,r){if(r===`get`||r===`getAll`||r===`has`)return(t,...i)=>(n(t),e[r](t,...i));t();let i=Reflect.get(e,r);return typeof i==`function`?i.bind(e):i}}),enumerable:!0,configurable:!0});let a=[`href`,`pathname`,`search`,`toString`,`toJSON`];r&&a.push(`hash`);for(let n of a)Object.defineProperty(i,n,{get(){return t(),e[n]},enumerable:!0,configurable:!0});return i}function g(){}function _(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function v(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var ee=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&y.delete(x(e)),ee(e,t));var y=new Map;function b(e,t){let n=x(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=v(e));let i=r.getAttribute(`data-ttl`);return i&&y.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function te(e,t,n){if(y.size>0){let t=x(e,n),r=y.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);y.delete(t)}}return window.fetch(t,n)}function x(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${_(...e)}"]`}return n}var ne=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,re=/^\/\((?:[^)]+)\)$/;function ie(e){let t=[];return{pattern:e===`/`||re.test(e)?/^\/$/:RegExp(`^${oe(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return ce(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return ce(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ne.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return ce(e)}).join(``)}).join(``)}/?$`),params:t}}function ae(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function oe(e){return e.slice(1).split(`/`).filter(ae)}function se(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0)if(s.rest)c=``;else continue;if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function ce(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}function le({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=ie(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return se(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function ue(e,t=JSON.parse){try{return t(sessionStorage
Line truncated
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{t as e}from"./BC84wEQu.js";var t={providerTypes:()=>e.get(`/provider/providerTypes`),getProviders:t=>e.get(`/provider/${t}`),getProvider:(t,n)=>e.get(`/provider/${t}/${n}`),createProvider:(t,n)=>e.post(`/provider/${t}`,n),updateProvider:(t,n)=>e.put(`/provider/${t}`,n),deleteProvider:(t,n)=>e.delete(`/provider/${t}/${n}`),getAvailableModels:(t,n)=>e.post(`/provider/${t}/avalable-models`,n),getProvidersModels:t=>e.get(`/provider/${t}/models`)};export{t};
|
||||
import{t as e}from"./DtfiK5fE.js";var t={providerTypes:()=>e.get(`/provider/providerTypes`),getProviders:t=>e.get(`/provider/${t}`),getProvider:(t,n)=>e.get(`/provider/${t}/${n}`),createProvider:(t,n)=>e.post(`/provider/${t}`,n),updateProvider:(t,n)=>e.put(`/provider/${t}`,n),deleteProvider:(t,n)=>e.delete(`/provider/${t}/${n}`),getAvailableModels:(t,n)=>e.post(`/provider/${t}/avalable-models`,n),getProvidersModels:t=>e.get(`/provider/${t}/models`)};export{t};
|
||||
@@ -0,0 +1 @@
|
||||
import{t as e}from"./DtfiK5fE.js";var t={register:t=>e.post(`/auth/register`,t),status:()=>e.get(`/auth/status`),login:t=>e.post(`/auth/login`,t),oidcProviders:()=>e.get(`/auth/oidc/providers`,{auth:!1}),oidcLoginUrl:e=>`/api/auth/oidc/login?provider=${encodeURIComponent(e)}`};export{t};
|
||||
@@ -0,0 +1,4 @@
|
||||
import{$ as e,A as t,C as n,I as r,K as i,L as a,M as o,N as s,Q as c,R as l,X as u,Z as d,a as f,dt as p,et as m,ft as h,j as g,k as _,vt as v}from"./DGrvnoUE.js";import"./xihTtKlq.js";import{t as y}from"./DtfiK5fE.js";var b={listTasks:e=>y.get(`/task/${e}`),updateTask:(e,t,n)=>y.put(`/task/${e}/${t}`,n),deleteTask:(e,t)=>y.delete(`/task/${e}/${t}`)},x=0,S=m([]),C=(e,t)=>{S.push({id:x++,type:e,text:t,status:`appearing`})},w=e=>e;function T(e){let t=e-1;return t*t*t+1}function E(e,{delay:t=0,duration:n=400,easing:r=w}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function D(e,{delay:t=0,duration:n=400,easing:r=T,start:i=0,opacity:a=0}={}){let o=getComputedStyle(e),s=+o.opacity,c=o.transform===`none`?``:o.transform,l=1-i,u=s*(1-a);return{delay:t,duration:n,easing:r,css:(e,t)=>`
|
||||
transform: ${c} scale(${1-l*t});
|
||||
opacity: ${s-u*t}
|
||||
`}}var O=s(`<div class="fixed inset-0 z-50 flex items-center justify-center p-4"><button type="button" class="absolute inset-0 cursor-default bg-black/50" aria-label="Fermer"></button> <div class="relative w-full max-w-sm rounded-lg bg-stone-50 p-4 shadow-xl dark:bg-stone-900" role="dialog" aria-modal="true" aria-labelledby="confirm-dialog-title"><div class="flex items-center gap-3"><div class="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-red-100 text-red-600 dark:bg-red-950 dark:text-red-400"><i class="icon-trash-empty"></i></div> <h2 id="confirm-dialog-title" class="text-base font-bold"> </h2></div> <p class="mt-3 text-sm text-stone-600 dark:text-stone-400"> </p> <div class="mt-4 flex justify-end gap-2"><button type="button" class="bt small"> </button> <button type="button" class="bt small danger"> </button></div></div></div>`);function k(r,s){h(s,!0);let m=f(s,`open`,3,!1),y=f(s,`title`,3,``),b=f(s,`message`,3,``),x=f(s,`confirmLabel`,3,`Confirmer`),S=f(s,`cancelLabel`,3,`Annuler`),C=()=>s.onCancel?.(),w=e=>{m()&&e.key===`Escape`&&C()};var T=o();l(`keydown`,u,w);var k=c(T),A=r=>{var o=O(),c=d(o),l=e(c,2),u=d(l),f=e(d(u),2),p=d(f,!0);v(f),v(u);var m=e(u,2),h=d(m,!0);v(m);var _=e(m,2),w=d(_),T=d(w,!0);v(w);var k=e(w,2),A=d(k,!0);v(k),v(_),v(l),v(o),i(()=>{t(p,y()),t(h,b()),t(T,S()),t(A,x())}),a(`click`,c,C),n(3,c,()=>E,()=>({duration:150})),a(`click`,w,C),a(`click`,k,function(...e){s.onConfirm?.apply(this,e)}),n(3,l,()=>D,()=>({duration:150,start:.95})),g(r,o)};_(k,e=>{m()&&e(A)}),g(r,T),p()}r([`click`]);export{C as n,b as r,k as t};
|
||||
@@ -1,6 +0,0 @@
|
||||
import{$ as e,A as t,B as n,D as r,E as i,G as a,I as o,J as s,K as c,L as l,M as u,N as d,O as f,P as p,Q as m,S as h,T as g,V as _,W as v,X as y,_ as b,a as x,at as ee,b as S,c as te,d as C,dt as w,f as ne,h as re,it as ie,j as ae,k as oe,l as se,lt as ce,m as le,n as ue,o as de,q as T,r as fe,u as pe,w as E,x as me}from"./39JK5HWF.js";import"./B0qrqti_.js";import"./xihTtKlq.js";var he=Math.min,D=Math.max,ge=Math.round,O=Math.floor,k=e=>({x:e,y:e}),A={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function _e(e,t,n){return D(e,he(t,n))}function j(e,t){return typeof e==`function`?e(t):e}function M(e){return e.split(`-`)[0]}function N(e){return e.split(`-`)[1]}function P(e){return e===`x`?`y`:`x`}function ve(e){return e===`y`?`height`:`width`}function F(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function I(e){return P(F(e))}function ye(e,t,n){n===void 0&&(n=!1);let r=N(e),i=I(e),a=ve(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Ee(o)),[o,Ee(o)]}function be(e){let t=Ee(e);return[L(e),t,L(t)]}function L(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var xe=[`left`,`right`],Se=[`right`,`left`],R=[`top`,`bottom`],Ce=[`bottom`,`top`];function we(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Se:xe:t?xe:Se;case`left`:case`right`:return t?R:Ce;default:return[]}}function Te(e,t,n,r){let i=N(e),a=we(M(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(L)))),a}function Ee(e){let t=M(e);return A[t]+e.slice(t.length)}function De(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function Oe(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:De(e)}function ke(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Ae(e,t,n){let{reference:r,floating:i}=e,a=F(t),o=I(t),s=ve(o),c=M(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=N(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function je(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=j(t,e),p=Oe(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ke(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=ke(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Me=50,Ne=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:je},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=Ae(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Me&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=Ae(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},Pe=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=j(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=M(r),_=F(o),v=M(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[Ee(o)]:be(o)),x=p!==`none`;!d&&x&&b.push(...Te(o,m,p,y));let ee=[o,...b],S=await s.detectOverflow(t,h),te=[],C=i.flip?.overflows||[];if(l&&te.push(S[g]),u){let e=ye(r,a,y);te.push(S[e[0]],S[e[1]])}if(C=[...C,{placement:r,overflows:te}],!te.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=ee[e];if(t&&(u!==`alignment`||_===F(t)||C.every(e=>F(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:C},reLine truncated
|
||||
3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0
|
||||
1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502
|
||||
0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0
|
||||
0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"></path></svg>`);function Mt(e){var t=$();i(e,t)}var Nt=oe(`<svg width="100%" height="100%" viewBox="-2 -2 50 50" focusable="false" aria-hidden="true" role="presentation"><path fill="currentColor" d="M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124
|
||||
l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z"></path></svg>`);function Pt(e){var t=Nt();i(e,t)}var Ft=oe(`<svg class="loading" viewBox="25 25 50 50"><circle class="circle_path" cx="50" cy="50" r="20" fill="none" stroke="currentColor" stroke-width="5" stroke-miterlimit="10"></circle></svg>`);function It(e){var t=Ft();i(e,t)}var Lt=f(`<div class="list-item" tabindex="-1" role="none"><div><!></div></div>`),Rt=f(`<div class="empty">No options</div>`),zt=f(`<div role="none"><!> <!> <!></div>`),Bt=f(`<span id="aria-selection"> </span> <span id="aria-context"> </span>`,1),Vt=f(`<div class="multi-item-clear"><!></div>`),Ht=f(`<div role="none"><span class="multi-item-text"><!></span> <!></div>`),Ut=f(`<div><!></div>`),Wt=f(`<div class="icon loading" aria-hidden="true"><!></div>`),Gt=f(`<button type="button" class="icon clear-select"><!></button>`),Kt=f(`<div class="icon chevron" aria-hidden="true"><!></div>`),qt=f(`<input type="hidden"/>`),Jt=f(`<select class="required" required="" tabindex="-1" aria-hidden="true"></select>`),Yt=f(`<div role="none"><!> <span aria-live="polite" aria-atomic="false" aria-relevant="additions text" class="a11y-text"><!></span> <div class="prepend"><!></div> <div class="value-container"><!> <input/></div> <div class="indicators"><!> <!> <!></div> <!> <!></div>`);function Xt(o,f){ee(f,!0);let ae,oe=x(f,`valueMode`,3,`item`),ce=x(f,`filter`,3,At),he=x(f,`getItems`,3,jt),D=x(f,`id`,3,null),ge=x(f,`name`,3,null),O=x(f,`container`,15,null),k=x(f,`input`,15,null),A=x(f,`multiple`,3,!1),_e=x(f,`multiFullItemClearable`,3,!1),j=x(f,`disabled`,3,!1),M=x(f,`focused`,15,!1),N=x(f,`value`,15),P=x(f,`filterText`,15,``),ve=x(f,`placeholder`,3,`Please select`),F=x(f,`placeholderAlwaysShow`,3,!1),I=x(f,`items`,31,()=>s([])),ye=x(f,`label`,3,`label`),be=x(f,`itemFilter`,3,(e,t,n)=>`${e}`.toLowerCase().includes(t.toLowerCase())),L=x(f,`groupBy`,3,void 0),xe=x(f,`groupFilter`,3,e=>e),Se=x(f,`groupHeaderSelectable`,3,!1),R=x(f,`itemId`,3,`value`),Ce=x(f,`loadOptions`,3,void 0),we=x(f,`containerStyles`,3,``),Te=x(f,`hasError`,3,!1),Ee=x(f,`filterSelectedItems`,3,!0),De=x(f,`required`,3,!1),Oe=x(f,`closeListOnChange`,3,!0),ke=x(f,`clearFilterTextOnBlur`,3,!0),Ae=x(f,`createGroupHeaderItem`,3,(e,t)=>({value:e,[ye()]:e})),je=x(f,`searchable`,3,!0),Me=x(f,`inputStyles`,3,``),Ne=x(f,`clearable`,3,!0),Pe=x(f,`loading`,15,!1),z=x(f,`listOpen`,15,!1),Fe=x(f,`debounce`,3,(e,t=1)=>{clearTimeout(ae),ae=setTimeout(e,t)}),Ie=x(f,`debounceWait`,3,300),Le=x(f,`hideEmptyState`,3,!1),Re=x(f,`inputAttributes`,19,()=>({})),ze=x(f,`listAutoWidth`,3,!0),B=x(f,`showChevron`,3,!1),V=x(f,`listOffset`,3,5),H=x(f,`hoverItemIndex`,15,0),U=x(f,`floatingConfig`,19,()=>({})),W=x(f,`class`,3,``),Be=x(f,`ariaValues`,3,e=>`Option ${e}, selected.`),Ve=x(f,`ariaListOpen`,3,(e,t)=>`You are currently focused on option ${e}. There are ${t} results available.`),He=x(f,`ariaFocused`,3,()=>`Select is focused, type to refine list, press down to open the menu.`);function Ue(){return p(Q)}let G=m(void 0),We,K,Ge,Ke,q=m(null),qe={},Je=e(()=>{if(Re()||!je()){let e=Object.assign({autocapitalize:`none`,autocomplete:`off`,autocorrect:`off`,spellcheck:!1,tabindex:0,type:`text`,"aria-autocomplete":`list`},Re());D()&&(e.id=D()),je()||(e.readonly=!0),JSON.stringify(e)!==JSON.stringify(qe)&&(qe=e)}return qe});function J(e){return e==null?e:typeof e==`object`?e[R()]:e}function Ye(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!=`object`}let Y=e(()=>oe()===`id`||Ye(I()));function Xe(e){return p(Y)?J(e):e}function X(e){if(e==null)return e;if(typeof e==`object`)return e[ye()];let t=I()?.find(t=>t[R()]===e);return t?t[ye()]:e}function Ze(){return N()==null?null:p(Y)?A()&&Array.isArray(N())?JSON.stringify(N()):`${N()}`:JSON.stringify(N())}function Qe(e){return e.map((e,t)=>({index:t,value:e,label:`${e}`}))}function $e(e){if(!L())return e;let t=[],n={};e.forEach(e=>{let r=L()(e)??``;t.includes(r)||(t.push(r),n[r]=[],r&&n[r].push(Object.assign(Ae()(r,e),{id:r,groupHeader:!0,selectable:Se()}))),n[r].push(Object.assign({groupItem:!!r},e))});let r=[];return xe()(t).forEach(e=>{n[e]&&r.push(...n[e])}),r}function et(){if(A()){JSON.stringify(N())!==JSON.stringify(We)&&(!N()||gt())&&f.oninput?.(N());return}N()?(!We||JSON.stringify(J(N()))!==JSON.stringify(J(We)))&&f.oninput?.(N()):We&&f.oninput?.(N())}function tt(){Ge=!0,N()&&(Array.isArray(N())||N([N()]))}function nt(){Ge=!1,N()&&N(void 0)}function rt(){Z(p(Q).findIndex(e=>e[R()]===J(N())),!0)}function Z(e=0,t){let n=e<0?0:e;H()!==n&&H(n),!t&&L()&&p(Q)[H()]&&!p(Q)[H()].selectable&&en(1)}function it(){!Ce()&&P().length===0||(Ce()?Fe()(async function(){Pe(!0);let e=await he()({onerror:f.onerror,onloaded:f.onloaded,loadOptions:Ce(),convertStringItemsToObjects:Qe,filterText:P()});e?(Pe(e.loading),z(z()?e.listOpen:P().length>0),M(z()&&e.focused),I(L()?$e(e.filteredItems):e.filteredItems)):(Pe(!1),M(!0),z(!0))},Ie()):(z()||z(!0),A()&&y(G,void 0)))}let at=e(()=>A()?Array.isArray(N())&&N().length>0:!!N()),ot=e(()=>pLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
import"./BZuNOv8h.js";
|
||||
@@ -0,0 +1 @@
|
||||
import{et as e}from"./DGrvnoUE.js";var t=e({spaces:[],current:``});export{t};
|
||||
@@ -1 +0,0 @@
|
||||
import{J as e}from"./39JK5HWF.js";var t=e({spaces:[],current:``});export{t};
|
||||
@@ -1 +0,0 @@
|
||||
import{t as e}from"./BC84wEQu.js";var t={register:t=>e.post(`/auth/register`,t),status:()=>e.get(`/auth/status`),login:t=>e.post(`/auth/login`,t)};export{t};
|
||||
@@ -0,0 +1,3 @@
|
||||
var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=Array.isArray,r=Array.prototype.indexOf,i=Array.prototype.includes,a=Array.from,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyDescriptors,l=Object.prototype,u=Array.prototype,d=Object.getPrototypeOf,f=Object.isExtensible;function p(e){return typeof e==`function`}var m=()=>{};function h(e){for(var t=0;t<e.length;t++)e[t]()}function g(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var _=1<<24,v=1024,y=2048,b=4096,x=8192,S=16384,ee=32768,te=1<<25,ne=65536,re=1<<18,ie=1<<19,ae=1<<20,oe=1<<25,se=65536,ce=1<<21,le=1<<22,ue=1<<23,C=Symbol(`$state`),de=Symbol(`legacy props`),fe=Symbol(``),pe=Symbol(`proxy path`),me=Symbol(`attributes`),he=Symbol(`class`),ge=Symbol(`style`),_e=Symbol(`text`),ve=Symbol(`form reset`),ye=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},be=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function xe(e){throw Error(`https://svelte.dev/e/experimental_async_required`)}function Se(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function Ce(){throw Error(`https://svelte.dev/e/missing_context`)}function we(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function Te(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function Ee(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function De(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Oe(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function ke(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function Ae(){throw Error(`https://svelte.dev/e/fork_discarded`)}function je(){throw Error(`https://svelte.dev/e/fork_timing`)}function Me(){throw Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`)}function Ne(){throw Error(`https://svelte.dev/e/hydration_failed`)}function Pe(e){throw Error(`https://svelte.dev/e/lifecycle_legacy_only`)}function Fe(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Ie(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Le(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Re(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function ze(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Be={},w=Symbol(`uninitialized`),Ve=`http://www.w3.org/1999/xhtml`,He=`http://www.w3.org/2000/svg`;function Ue(){console.warn(`https://svelte.dev/e/derived_inert`)}function We(e){console.warn(`https://svelte.dev/e/hydratable_missing_but_expected`)}function Ge(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ke(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function qe(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var T=!1;function E(e){T=e}var D;function O(e){if(e===null)throw Ge(),Be;return D=e}function k(){return O(R(D))}function Je(e){if(T){if(R(D)!==null)throw Ge(),Be;D=e}}function Ye(e=1){if(T){for(var t=e,n=D;t--;)n=R(n);D=n}}function Xe(e=!0){for(var t=0,n=D;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=R(n);e&&n.remove(),n=i}}function Ze(e){if(!e||e.nodeType!==8)throw Ge(),Be;return e.data}function Qe(e){return e===this.v}function $e(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function et(e){return!$e(e,this.v)}var tt=!1;function nt(){tt=!0}function rt(e,t){return e.label=t,it(e.v,t),e}function it(e,t){return e?.[pe]?.(t),e}function at(e){return typeof e==`symbol`?`Symbol(${e.description})`:typeof e==`function`?`<function>`:typeof e==`object`&&e?`<object>`:String(e)}var A=null;function ot(e){A=e}function st(){let e={};return[()=>(ut(e)||Ce(),ct(e)),t=>lt(e,t)]}function ct(e){return ht(`getContext`).get(e)}function lt(e,t){return ht(`setContext`).set(e,t),t}function ut(e){return ht(`hasContext`).has(e)}function dt(){return ht(`getAllContexts`)}function ft(e,t=!1,n){A={p:A,i:!1,c:null,e:null,s:e,x:null,r:G,l:tt&&!t?{s:null,u:null,$:[]}:null}}function pt(e){var t=A,n=t.e;if(n!==null){t.e=null;for(var r of n)$n(r)}return e!==void 0&&(t.x=e),t.i=!0,A=t.p,e??{}}function mt(){return!tt||A!==null&&A.l===null}function ht(e){return A===null&&Se(e),A.c??=new Map(gt(A)||void 0)}function gt(e){let t=e.p;for(;t!==null;){let e=t.c;if(e!==null)return e;t=t.p}return null}var _t=[];function vt(){var e=_t;_t=[],h(e)}function j(e){if(_t.length===0&&!rn){var t=_t;queueMicrotask(()=>{t===_t&&vt()})}_t.push(e)}function yt(){for(;_t.length>0;)vt()}function bt(e){var t=G;if(t===null)return H.f|=ue,e;if(!(t.f&32768)&&!(t.f&4))throw e;xt(e,t)}function xt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);rLine truncated
|
||||
`).some(e=>e.startsWith(`https://svelte.dev/e/`)))throw r;return r!==Be&&console.warn(`Failed to hydrate: `,r),t.recover===!1&&Ne(),zn(),Un(n),E(!1),yi(e,t)}finally{E(r),O(i)}}var xi=new Map;function Si(e,{target:t,anchor:n,props:r={},events:i,context:o,intro:s=!0,transformError:c}){zn();var l=void 0,u=tr(()=>{var u=n??t.appendChild(I());Rt(u,{pending:()=>{}},t=>{ft({});var n=A;if(o&&(n.c=o),i&&(r.$$events=i),T&&$(t,null),gi=s,l=e(t,r)||{},gi=!0,T&&(G.nodes.end=D,D===null||D.nodeType!==8||D.data!==`]`))throw Ge(),Be;pt()},c);var d=new Set,f=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!d.has(r)){d.add(r);var i=Jr(r);for(let e of[t,document]){var a=xi.get(e);a===void 0&&(a=new Map,xi.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,oi,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return f(a(Qr)),$r.add(f),()=>{for(var e of d)for(let n of[t,document]){var r=xi.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,oi),r.delete(e),r.size===0&&xi.delete(n)):r.set(e,i)}$r.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return Ci.set(l,u),l}var Ci=new WeakMap;function wi(e,t){let n=Ci.get(e);return n?(Ci.delete(e),n(t)):Promise.resolve()}var Ti=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)hr(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(hr(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(V(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();_r(r,t),t.append(I()),this.#n.set(e,{effect:r,fragment:t})}else V(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),pr(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(V(n.effect),this.#n.delete(e))};ensure(e,t){var n=N,r=Wn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=I();i.append(a),this.#n.set(e,{effect:B(()=>t(a)),fragment:i})}else this.#t.set(e,B(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else T&&(this.anchor=D),this.#a(n)}};function Ei(e,t,n=!1){var r;T&&(r=D,k());var i=new Ti(e),a=n?ne:0;function o(e,t){if(T){var n=Ze(r);if(e!==parseInt(n.substring(1))){var a=Xe();O(a),i.anchor=a,E(!1),i.ensure(e,t),E(!0);return}}i.ensure(e,t)}or(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}var Di=Symbol(`NaN`);function Oi(e,t,n){T&&k();var r=new Ti(e),i=!mt();or(()=>{var e=t();e!==e&&(e=Di),i&&typeof e==`object`&&e&&(e={}),r.ensure(e,n)})}function ki(e,t){return t}function Ai(e,t,n){for(var r=[],i=t.length,o,s=t.length,c=0;c<i;c++){let n=t[c];pr(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;ji(e,a(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=r.length===0&&n!==null;if(l){var u=n,d=u.parentNode;Un(d),d.append(u),e.items.clear()}ji(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function ji(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=oe,_r(a,document.createDocumentFragment())):V(t[i],n)}}var Mi;function Ni(e,t,r,i,o,s=null){var c=e,l=new Map;if(t&4){var u=e;c=T?O(L(u)):u.appendChild(I())}T&&k();var d=null,f=Jt(()=>{var e=r();return n(e)?e:e==null?[]:a(e)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,Fi(v,p,c,t,i),d!==null&&(p.length===0?d.f&33554432?(d.f^=oe,Li(d,null,c)):hr(d):pr(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:or(()=>{p=Z(f);var e=p.length;let n=!1;T&&Ze(c)===`[!`!=(e===0)&&(c=Xe(),O(c),E(!1),n=!0);for(var a=new Set,u=N,v=Wn(),y=0;y<e;y+=1){T&&D.nodeType===8&&D.data===`]`&&(c=D,n=!0,E(!1));var b=p[y],x=i(b,y),S=h?null:l.get(x);S?(S.v&&Dn(S.v,b),S.i&&Dn(S.i,y),v&&u.unskip_effect(S.e)):(S=Ii(l,h?c:Mi??=I(),b,x,y,o,t,r),h||(S.e.f|=oe),l.set(x,S)),a.add(x)}if(e===0&&s&&!d&&(h?d=B(()=>s(c)):(d=B(()=>s(Mi??=I())),d.f|=oe)),e>a.size&&Te(``,``,``),T&&e>0&&O(Xe()),!h)if(m.set(u,a),v){for(let[e,t]of l)a.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);n&&E(!0),Z(f)}),flags:t,items:l,pending:m,outrogroups:null,fallback:d};h=!1,T&&(c=D)}function Pi(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function Fi(e,t,n,r,i){var o=!!(r&8),s=t.length,c=e.items,l=Pi(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=i(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if
Line truncated
|
||||
\r\f\xA0\v`];function oa(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||aa.includes(r[o-1]))&&(s===r.length||aa.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function sa(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function ca(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function la(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(ca)),i&&c.push(...Object.keys(i).map(ca));var l=0,u=-1;let t=e.length;for(var d=0;d<t;d++){var f=e[d];if(s?f===`/`&&e[d-1]===`*`&&(s=!1):a?a===f&&(a=!1):f===`/`&&e[d+1]===`*`?s=!0:f===`"`||f===`'`?a=f:f===`(`?o++:f===`)`&&o--,!s&&a===!1&&o===0){if(f===`:`&&u===-1)u=d;else if(f===`;`||d===t-1){if(u!==-1){var p=ca(e.substring(l,u).trim());if(!c.includes(p)){f!==`;`&&d++;var m=e.substring(l,d).trim();n+=` `+m+`;`}}l=d+1,u=-1}}}}return r&&(n+=sa(r)),i&&(n+=sa(i,!0)),n=n.trim(),n===``?null:n}return e==null?null:String(e)}function ua(e,t,n,r,i,a){var o=e[he];if(T||o!==n||o===void 0){var s=oa(n,r,a);(!T||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[he]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}function da(e,t={},n,r){for(var i in n){var a=n[i];t[i]!==a&&(n[i]==null?e.style.removeProperty(i):e.style.setProperty(i,a,r))}}function fa(e,t,n,r){var i=e[ge];if(T||i!==t){var a=la(t,r);(!T||a!==e.getAttribute(`style`))&&(a==null?e.removeAttribute(`style`):e.style.cssText=a),e[ge]=t}else r&&(Array.isArray(r)?(da(e,n?.[0],r[0]),da(e,n?.[1],r[1],`important`)):da(e,n,r));return r}function pa(e,t,r=!1){if(e.multiple){if(t==null)return;if(!n(t))return Ke();for(var i of e.options)i.selected=t.includes(ga(i));return}for(i of e.options)if(Nn(ga(i),t)){i.selected=!0;return}(!r||t!==void 0)&&(e.selectedIndex=-1)}function ma(e){var t=new MutationObserver(()=>{`__value`in e&&pa(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),Zn(()=>{t.disconnect()})}function ha(e,t,n=t){var r=new WeakSet,i=!0;Ft(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),ga);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&ga(o)}n(a),e.__value=a,N!==null&&r.add(N)}),nr(()=>{var a=t();if(e===document.activeElement){var o=N;if(r.has(o))return}if(pa(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=ga(s),n(a))}e.__value=a,i=!1}),ma(e)}function ga(e){return`__value`in e?e.__value:e.value}var _a=Symbol(`class`),va=Symbol(`style`),ya=Symbol(`is custom element`),ba=Symbol(`is html`),xa=be?`link`:`LINK`,Sa=be?`input`:`INPUT`,Ca=be?`option`:`OPTION`,wa=be?`select`:`SELECT`,Ta=be?`progress`:`PROGRESS`;function Ea(e){if(T){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;ka(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;ka(e,`checked`,null),e.checked=r}}};e[ve]=n,j(n),Nt()}}function Da(e,t){var n=Ma(e);n.value!==(n.value=t??void 0)&&(e.value!==t||t===0&&e.nodeName===Ta)&&(e.value=t??``)}function Oa(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function ka(e,t,n,r){var i=Ma(e);T&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===xa)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[fe]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&Pa(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Aa(e,t,n,r,i=!1,a=!1){if(T&&i&&e.nodeName===Sa){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||Ea(o)}var s=Ma(e),c=s[ya],l=!s[ba];let u=T&&c;u&&E(!1);var d=t||{},f=e.nodeName===Ca;for(var p in t)p in n||(n[p]=null);n.class?n.class=ia(n.class):(r||n[_a])&&(n.class=null),n[va]&&(n.style??=null);var m=Pa(e);if(e.nodeName===Sa&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,ka(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){ua(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[_a],n[_a]),d[i]=o,d[_a]=n[_a];continue}if(i===`style`){fa(e,o,t?.[va],n[va]),d[i]=o,d[va]=n[va];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=Ur(r);if(Vr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)ri(r,e,o),ii([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=ti(r,e,a,t)}}else if(i===`style`)ka(e,i,o);else if(i===`autofocus`)At(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))
Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
import"./B0qrqti_.js";
|
||||
@@ -1 +0,0 @@
|
||||
import{$ as e,B as t,D as n,E as r,G as i,K as a,O as o,P as s,Q as c,R as l,T as u,X as d,Y as f,Z as p,at as m,dt as h,it as g,w as _}from"./39JK5HWF.js";import"./xihTtKlq.js";var v=class extends Map{#e=new Map;#t=c(0);#n=c(0);#r=l||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return l===this.#r?c(e):p(e)}has(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else return s(this.#t),!1;return s(n),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else{s(this.#t);return}return s(n),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),d(this.#n,super.size),f(o);else if(i!==t){f(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&f(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),d(n,-1)),r&&(d(this.#n,super.size),f(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;d(this.#n,0);for(var t of e.values())d(t,-1);f(this.#t),e.clear()}}#a(){s(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var n=this.#i(0);e.set(t,n)}}for([,n]of this.#e)s(n)}keys(){return s(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return s(this.#n),super.size}},y=o(`<span class="text-red-700 dark:text-red-400 text-xs"> </span>`);function b(o,c){m(c,!0);var l=n(),d=a(l),f=e=>{var n=y(),a=i(n,!0);h(n),t(e=>u(a,e),[()=>c.errors.get(c.key)]),r(e,n)},p=e(()=>c.errors.has(c.key));_(d,e=>{s(p)&&e(f)}),r(o,l),g()}export{v as n,b as t};
|
||||
@@ -0,0 +1,6 @@
|
||||
import{$ as e,A as t,B as n,D as r,E as i,F as a,H as o,I as s,K as c,L as l,M as u,N as d,P as f,Q as p,R as m,T as h,U as g,X as _,Z as v,_ as y,a as b,at as x,b as ee,c as te,dt as ne,et as S,f as re,ft as ie,h as ae,it as oe,j as C,k as w,m as se,n as ce,nt as T,p as le,q as E,r as ue,u as de,v as fe,vt as D}from"./DGrvnoUE.js";import"./BZuNOv8h.js";import"./xihTtKlq.js";import"./B6JECYQD.js";var pe=Math.min,O=Math.max,me=Math.round,he=Math.floor,k=e=>({x:e,y:e}),A={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function j(e,t,n){return O(e,pe(t,n))}function ge(e,t){return typeof e==`function`?e(t):e}function M(e){return e.split(`-`)[0]}function N(e){return e.split(`-`)[1]}function P(e){return e===`x`?`y`:`x`}function F(e){return e===`y`?`height`:`width`}function I(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function _e(e){return P(I(e))}function ve(e,t,n){n===void 0&&(n=!1);let r=N(e),i=_e(e),a=F(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Ee(o)),[o,Ee(o)]}function ye(e){let t=Ee(e);return[be(e),t,be(t)]}function be(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var xe=[`left`,`right`],Se=[`right`,`left`],Ce=[`top`,`bottom`],L=[`bottom`,`top`];function we(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Se:xe:t?xe:Se;case`left`:case`right`:return t?Ce:L;default:return[]}}function Te(e,t,n,r){let i=N(e),a=we(M(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(be)))),a}function Ee(e){let t=M(e);return A[t]+e.slice(t.length)}function De(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function Oe(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:De(e)}function ke(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Ae(e,t,n){let{reference:r,floating:i}=e,a=I(t),o=_e(t),s=F(o),c=M(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=N(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function je(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=ge(t,e),p=Oe(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ke(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=ke(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Me=50,Ne=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:je},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=Ae(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Me&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=Ae(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},Pe=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=ge(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=M(r),_=I(o),v=M(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[Ee(o)]:ye(o)),x=p!==`none`;!d&&x&&b.push(...Te(o,m,p,y));let ee=[o,...b],te=await s.detectOverflow(t,h),ne=[],S=i.flip?.overflows||[];if(l&&ne.push(te[g]),u){let e=ve(r,a,y);ne.push(te[e[0]],te[e[1]])}if(S=[...S,{placement:r,overflows:ne}],!ne.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=ee[e];if(t&&(u!==`alignment`||_===I(t)||S.every(e=>I(e.placement)!==_||e.overflows[0]>0)))return{daLine truncated
|
||||
3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0
|
||||
1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502
|
||||
0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0
|
||||
0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"></path></svg>`);function Nt(e){var t=Mt();C(e,t)}var Q=f(`<svg width="100%" height="100%" viewBox="-2 -2 50 50" focusable="false" aria-hidden="true" role="presentation"><path fill="currentColor" d="M34.923,37.251L24,26.328L13.077,37.251L9.436,33.61l10.923-10.923L9.436,11.765l3.641-3.641L24,19.047L34.923,8.124
|
||||
l3.641,3.641L27.641,22.688L38.564,33.61L34.923,37.251z"></path></svg>`);function Pt(e){var t=Q();C(e,t)}var Ft=f(`<svg class="loading" viewBox="25 25 50 50"><circle class="circle_path" cx="50" cy="50" r="20" fill="none" stroke="currentColor" stroke-width="5" stroke-miterlimit="10"></circle></svg>`);function It(e){var t=Ft();C(e,t)}var Lt=d(`<div class="list-item" tabindex="-1" role="none"><div><!></div></div>`),Rt=d(`<div class="empty">No options</div>`),zt=d(`<div role="none"><!> <!> <!></div>`),Bt=d(`<span id="aria-selection"> </span> <span id="aria-context"> </span>`,1),Vt=d(`<div class="multi-item-clear"><!></div>`),Ht=d(`<div role="none"><span class="multi-item-text"><!></span> <!></div>`),Ut=d(`<div><!></div>`),Wt=d(`<div class="icon loading" aria-hidden="true"><!></div>`),Gt=d(`<button type="button" class="icon clear-select"><!></button>`),Kt=d(`<div class="icon chevron" aria-hidden="true"><!></div>`),qt=d(`<input type="hidden"/>`),Jt=d(`<select class="required" required="" tabindex="-1" aria-hidden="true"></select>`),Yt=d(`<div role="none"><!> <span aria-live="polite" aria-atomic="false" aria-relevant="additions text" class="a11y-text"><!></span> <div class="prepend"><!></div> <div class="value-container"><!> <input/></div> <div class="indicators"><!> <!> <!></div> <!> <!></div>`);function Xt(o,s){ie(s,!0);let d,f=b(s,`valueMode`,3,`item`),pe=b(s,`filter`,3,At),O=b(s,`getItems`,3,jt),me=b(s,`id`,3,null),he=b(s,`name`,3,null),k=b(s,`container`,15,null),A=b(s,`input`,15,null),j=b(s,`multiple`,3,!1),ge=b(s,`multiFullItemClearable`,3,!1),M=b(s,`disabled`,3,!1),N=b(s,`focused`,15,!1),P=b(s,`value`,15),F=b(s,`filterText`,15,``),I=b(s,`placeholder`,3,`Please select`),_e=b(s,`placeholderAlwaysShow`,3,!1),ve=b(s,`items`,31,()=>S([])),ye=b(s,`label`,3,`label`),be=b(s,`itemFilter`,3,(e,t,n)=>`${e}`.toLowerCase().includes(t.toLowerCase())),xe=b(s,`groupBy`,3,void 0),Se=b(s,`groupFilter`,3,e=>e),Ce=b(s,`groupHeaderSelectable`,3,!1),L=b(s,`itemId`,3,`value`),we=b(s,`loadOptions`,3,void 0),Te=b(s,`containerStyles`,3,``),Ee=b(s,`hasError`,3,!1),De=b(s,`filterSelectedItems`,3,!0),Oe=b(s,`required`,3,!1),ke=b(s,`closeListOnChange`,3,!0),Ae=b(s,`clearFilterTextOnBlur`,3,!0),je=b(s,`createGroupHeaderItem`,3,(e,t)=>({value:e,[ye()]:e})),Me=b(s,`searchable`,3,!0),Ne=b(s,`inputStyles`,3,``),Pe=b(s,`clearable`,3,!0),Fe=b(s,`loading`,15,!1),R=b(s,`listOpen`,15,!1),Ie=b(s,`debounce`,3,(e,t=1)=>{clearTimeout(d),d=setTimeout(e,t)}),Le=b(s,`debounceWait`,3,300),Re=b(s,`hideEmptyState`,3,!1),z=b(s,`inputAttributes`,19,()=>({})),B=b(s,`listAutoWidth`,3,!0),V=b(s,`showChevron`,3,!1),ze=b(s,`listOffset`,3,5),H=b(s,`hoverItemIndex`,15,0),U=b(s,`floatingConfig`,19,()=>({})),Be=b(s,`class`,3,``),Ve=b(s,`ariaValues`,3,e=>`Option ${e}, selected.`),He=b(s,`ariaListOpen`,3,(e,t)=>`You are currently focused on option ${e}. There are ${t} results available.`),Ue=b(s,`ariaFocused`,3,()=>`Select is focused, type to refine list, press down to open the menu.`);function We(){return n(Z)}let W=oe(void 0),G,Ge,Ke,qe,K=oe(null),q={},J=x(()=>{if(z()||!Me()){let e=Object.assign({autocapitalize:`none`,autocomplete:`off`,autocorrect:`off`,spellcheck:!1,tabindex:0,type:`text`,"aria-autocomplete":`list`},z());me()&&(e.id=me()),Me()||(e.readonly=!0),JSON.stringify(e)!==JSON.stringify(q)&&(q=e)}return q});function Y(e){return e==null?e:typeof e==`object`?e[L()]:e}function Je(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!=`object`}let Ye=x(()=>f()===`id`||Je(ve()));function Xe(e){return n(Ye)?Y(e):e}function Ze(e){if(e==null)return e;if(typeof e==`object`)return e[ye()];let t=ve()?.find(t=>t[L()]===e);return t?t[ye()]:e}function Qe(){return P()==null?null:n(Ye)?j()&&Array.isArray(P())?JSON.stringify(P()):`${P()}`:JSON.stringify(P())}function $e(e){return e.map((e,t)=>({index:t,value:e,label:`${e}`}))}function et(e){if(!xe())return e;let t=[],n={};e.forEach(e=>{let r=xe()(e)??``;t.includes(r)||(t.push(r),n[r]=[],r&&n[r].push(Object.assign(je()(r,e),{id:r,groupHeader:!0,selectable:Ce()}))),n[r].push(Object.assign({groupItem:!!r},e))});let r=[];return Se()(t).forEach(e=>{n[e]&&r.push(...n[e])}),r}function tt(){if(j()){JSON.stringify(P())!==JSON.stringify(G)&&(!P()||_t())&&s.oninput?.(P());return}P()?(!G||JSON.stringify(Y(P()))!==JSON.stringify(Y(G)))&&s.oninput?.(P()):G&&s.oninput?.(P())}function nt(){Ke=!0,P()&&(Array.isArray(P())||P([P()]))}function rt(){Ke=!1,P()&&P(void 0)}function X(){it(n(Z).findIndex(e=>e[L()]===Y(P())),!0)}function it(e=0,t){let r=e<0?0:e;H()!==r&&H(r),!t&&xe()&&n(Z)[H()]&&!n(Z)[H()].selectable&&tn(1)}function at(){!we()&&F().length===0||(we()?Ie()(async function(){Fe(!0);let e=await O()({onerror:s.onerror,onloaded:s.onloaded,loadOptions:we(),convertStringItemsToObjects:$e,filterText:F()});e?(Fe(e.loading),R(R()?e.listOpen:F().length>0),N(R()&&e.focused),ve(xe()?et(e.filteredItems):e.filteredItems)):(Fe(!1),N(!0),R(!0))},Le()):(R()||R(!0),j()&&T(W,void 0)))}let ot=x(()=>j()?Array.isArray(P())&&P().length>0:!!P()),st=x(()=>n(Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
import"./39JK5HWF.js";import{a as e,r as t}from"./B0qrqti_.js";var n={get data(){return e.data},get error(){return e.error},get form(){return e.form},get params(){return e.params},get route(){return e.route},get state(){return e.state},get status(){return e.status},get url(){return e.url}};t.updated.check;var r=n;export{r as t};
|
||||
@@ -0,0 +1,2 @@
|
||||
import{et as e}from"./DGrvnoUE.js";import{t}from"./BZuNOv8h.js";import"./CY9OlB4q.js";var n=e({user:null,status:`loading`}),r=()=>{localStorage.removeItem(`accessToken`),n.status=`unauthenticated`},i=()=>localStorage.getItem(`accessToken`),a=e=>{localStorage.setItem(`accessToken`,e)},o=`/api`,s=class extends Error{status;body;constructor(e,t){super(`API Error ${e}`),this.status=e,this.body=t}};async function c(e,n={}){let{auth:a=!0,headers:c,...l}=n,d={"Content-Type":`application/json`,...c},f=new Headers(d);if(a){let e=i();e&&f.append(`Authorization`,`Bearer ${e}`)}let p=await fetch(`${o}${e}`,{...l,headers:f});if(p.status===401&&(r(),t(`/login`)),!p.ok)throw new s(p.status,await u(p));if(p.status!==204)return p.json()}async function*l(e,n={}){let{auth:a=!0,headers:s,...c}=n,l={"Content-Type":`application/json`,...s},u=new Headers(l);if(a){let e=i();e&&u.append(`Authorization`,`Bearer ${e}`)}let d=await fetch(`${o}${e}`,{...c,headers:u});if(d.status===401&&(r(),t(`/login`)),!d.ok||!d.body)throw Error(`HTTP ${d.status}`);let f=d.body.pipeThrough(new TextDecoderStream).getReader(),p=``;try{for(;;){let{value:e,done:t}=await f.read();if(t)break;p+=e;let n=p.split(`
|
||||
`);p=n.pop()??``;for(let e of n)e.trim()&&(yield JSON.parse(e))}p.trim()&&(yield JSON.parse(p))}finally{f.releaseLock()}}async function u(e){try{return await e.json()}catch{return null}}var d={get:(e,t)=>c(e,{...t,method:`GET`}),post:(e,t,n)=>c(e,{...n,method:`POST`,body:JSON.stringify(t)}),postStream:(e,t,n)=>l(e,{...n,method:`POST`,body:JSON.stringify(t)}),put:(e,t,n)=>c(e,{...n,method:`PUT`,body:JSON.stringify(t)}),delete:(e,t)=>c(e,{...t,method:`DELETE`})};export{a as i,n,r,d as t};
|
||||
@@ -0,0 +1 @@
|
||||
import"./DGrvnoUE.js";import{i as e,o as t}from"./BZuNOv8h.js";var n={get data(){return t.data},get error(){return t.error},get form(){return t.form},get params(){return t.params},get route(){return t.route},get state(){return t.state},get status(){return t.status},get url(){return t.url}};e.updated.check;var r=n;export{r as t};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{t as e}from"./BC84wEQu.js";var t={me:()=>e.get(`/user/me`),update:(t,n)=>e.put(`/user/${t}`,n),listAddresses:t=>e.get(`/user/${t}/address`),createAddress:(t,n)=>e.post(`/user/${t}/address`,n),updateAddress:(t,n)=>e.put(`/user/${t}/address`,n),deleteAddress:(t,n)=>e.delete(`/user/${t}/address/${n}`)};export{t};
|
||||
import{t as e}from"./DtfiK5fE.js";var t={me:()=>e.get(`/user/me`),update:(t,n)=>e.put(`/user/${t}`,n),listAddresses:t=>e.get(`/user/${t}/address`),createAddress:(t,n)=>e.post(`/user/${t}/address`,n),updateAddress:(t,n)=>e.put(`/user/${t}/address`,n),deleteAddress:(t,n)=>e.delete(`/user/${t}/address/${n}`)};export{t};
|
||||
@@ -0,0 +1,2 @@
|
||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BLV5Ey1y.js","../chunks/DGrvnoUE.js","../chunks/xihTtKlq.js","../chunks/DTCALkcP.js","../assets/0.C0TpjoIE.css","../nodes/1.COgG0Fy8.js","../chunks/ffLBjIeN.js","../chunks/BZuNOv8h.js","../nodes/2.wASuVt48.js","../chunks/CY9OlB4q.js","../chunks/DtfiK5fE.js","../chunks/zsRwiIdn.js","../chunks/Cyrg28w2.js","../chunks/BRXBpvt8.js","../nodes/3.CHETzYMH.js","../nodes/4.DkQEi_Qd.js","../chunks/BYWIgY43.js","../chunks/BYYkuYgk.js","../nodes/5.BgmoPtaF.js","../chunks/B6JECYQD.js","../assets/5.nNRn7XR0.css","../nodes/6.B8E4TBNF.js","../chunks/Bht2nTIZ.js","../nodes/7.CJI6is1J.js","../nodes/8.Ds1ONmZq.js","../nodes/9.CYl-UmMc.js","../chunks/BeIYuf23.js","../chunks/6mSXxE57.js","../chunks/DdGy_ePN.js","../nodes/10.D6tOeXzG.js","../nodes/11.DtFjRc5K.js","../nodes/12.D1XIMXHX.js","../nodes/13.C-WGkE4P.js","../chunks/D3MDK1zR.js","../nodes/14.Zp7NcB4T.js","../nodes/15.DBuFCR43.js","../nodes/16.Bwbj6qfw.js","../nodes/17.BV0v_EXc.js","../nodes/18.e37B7XcZ.js","../nodes/19.CdvrW-UN.js","../chunks/BedKI9iq.js","../nodes/20.CPbrVrB7.js"])))=>i.map(i=>d[i]);
|
||||
import{$ as e,A as t,B as n,F as r,H as i,J as a,K as o,M as s,N as c,Q as l,Z as u,a as d,at as f,c as p,dt as m,ft as h,i as g,it as _,j as v,k as y,nt as b,q as x,r as S,vt as C,w}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var T=`modulepreload`,E=function(e,t){return new URL(e,t).href},D={},O=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=E(t,n),t=s(t),t in D)return;D[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:T,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},k={},A=c(`<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>`),j=c(`<!> <!>`,1);function M(c,g){h(g,!0);let T=d(g,`components`,23,()=>[]),E=d(g,`data_0`,3,null),D=d(g,`data_1`,3,null),O=d(g,`data_2`,3,null);a(()=>g.stores.page.set(g.page)),x(()=>{g.stores,g.page,g.constructors,T(),g.form,E(),D(),O(),g.stores.page.notify()});let k=_(!1),M=_(!1),N=_(null);S(()=>{let e=g.stores.page.subscribe(()=>{n(k)&&(b(M,!0),i().then(()=>{b(N,document.title||`untitled page`,!0)}))});return b(k,!0),e});let P=f(()=>g.constructors[2]);var F=j(),I=l(F),L=e=>{let t=f(()=>g.constructors[0]);var r=s(),i=l(r);w(i,()=>n(t),(e,t)=>{p(t(e,{get data(){return E()},get form(){return g.form},get params(){return g.page.params},children:(e,t)=>{var r=s(),i=l(r),a=e=>{let t=f(()=>g.constructors[1]);var r=s(),i=l(r);w(i,()=>n(t),(e,t)=>{p(t(e,{get data(){return D()},get form(){return g.form},get params(){return g.page.params},children:(e,t)=>{var r=s(),i=l(r);w(i,()=>n(P),(e,t)=>{p(t(e,{get data(){return O()},get form(){return g.form},get params(){return g.page.params}}),e=>T()[2]=e,()=>T()?.[2])}),v(e,r)},$$slots:{default:!0}}),e=>T()[1]=e,()=>T()?.[1])}),v(e,r)},o=e=>{let t=f(()=>g.constructors[1]);var r=s(),i=l(r);w(i,()=>n(t),(e,t)=>{p(t(e,{get data(){return D()},get form(){return g.form},get params(){return g.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),v(e,r)};y(i,e=>{g.constructors[2]?e(a):e(o,-1)}),v(e,r)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),v(e,r)},R=e=>{let t=f(()=>g.constructors[0]);var r=s(),i=l(r);w(i,()=>n(t),(e,t)=>{p(t(e,{get data(){return E()},get form(){return g.form},get params(){return g.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),v(e,r)};y(I,e=>{g.constructors[1]?e(L):e(R,-1)});var z=e(I,2),B=e=>{var i=A(),a=u(i),s=e=>{var i=r();o(()=>t(i,n(N))),v(e,i)};y(a,e=>{n(M)&&e(s)}),C(i),v(e,i)};y(z,e=>{n(k)&&e(B)}),v(c,F),m()}var N=g(M),P=[()=>O(()=>import(`../nodes/0.BLV5Ey1y.js`),__vite__mapDeps([0,1,2,3,4]),import.meta.url),()=>O(()=>import(`../nodes/1.COgG0Fy8.js`),__vite__mapDeps([5,1,2,6,7]),import.meta.url),()=>O(()=>import(`../nodes/2.wASuVt48.js`),__vite__mapDeps([8,1,7,2,3,6,9,10,11,12,13]),import.meta.url),()=>O(()=>import(`../nodes/3.CHETzYMH.js`),__vite__mapDeps([14,1,7,2,9,12]),import.meta.url),()=>O(()=>import(`../nodes/4.DkQEi_Qd.js`),__vite__mapDeps([15,1,7,2,9,16,17,10]),import.meta.url),()=>O(()=>import(`../nodes/5.BgmoPtaF.js`),__vite__mapDeps([18,1,2,6,7,16,17,10,9,19,20]),import.meta.url),()=>O(()=>import(`../nodes/6.B8E4TBNF.js`),__vite__mapDeps([21,1,7,2,9,17,10,22]),import.meta.url),()=>O(()=>import(`../nodes/7.CJI6is1J.js`),__vite__mapDeps([23,1,2]),import.meta.url),()=>O(()=>import(`../nodes/8.Ds1ONmZq.js`),__vite__mapDeps([24,1,2]),import.meta.url),()=>O(()=>import(`../nodes/9.CYl-UmMc.js`),__vite__mapDeps([25,1,2,10,7,9,12,26,27,28,19]),import.meta.url),()=>O(()=>import(`../nodes/10.D6tOeXzG.js`),__vite__mapDeps([29,1,2]),import.meta.url),()=>O(()=>import(`../nodes/11.DtFjRc5K.js`),__vite__mapDeps([30,1,2]),import.meta.url),()=>O(()=>import(`../nodes/12.D1XIMXHX.js`),__vite__mapDeps([31,1,2]),import.meta.url),()=>O(()=>import(`../nodes/13.C-WGkE4P.js`),__vite__mapDeps([32,1,2,26,10,7,9,27,28,19,33]),import.meta.url),()=>O(()=>import(`../nodes/14.Zp7NcB4T.js`),__vite__mapDeps([34,1,2]),import.meta.url),()=>O(()=>import(`../nodes/15.DBuFCR43.js`),__vite__mapDeps([35,1,2,10,7,9,27]),import.meta.url),()Line truncated
|
||||
@@ -1,2 +0,0 @@
|
||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.WTbeuaG5.js","../chunks/39JK5HWF.js","../chunks/xihTtKlq.js","../chunks/DTCALkcP.js","../assets/0.PdzDvXHc.css","../nodes/1.HToxGbTu.js","../chunks/DtPl1hOB.js","../chunks/B0qrqti_.js","../nodes/2.DJpmXDpd.js","../chunks/DL7ZyBAF.js","../chunks/BC84wEQu.js","../chunks/BDef5Ccs.js","../chunks/D8dI9nx6.js","../chunks/BRXBpvt8.js","../nodes/3.DQ-wAvIJ.js","../nodes/4.Dw1ji0S9.js","../nodes/5.BV8wWprr.js","../nodes/6.iWRSAZEv.js","../nodes/7.CJ-_CrAo.js","../nodes/8.TeTitTKA.js","../chunks/DOY2HMbt.js","../chunks/DRdGzrsF.js","../chunks/BorM6hBh.js","../nodes/9.C_kOH_FX.js","../nodes/10.2kRbJUBr.js","../nodes/11.3PxmG5oJ.js","../nodes/12.DXjVg3KD.js","../chunks/D3MDK1zR.js","../nodes/13.CjlegDH_.js","../nodes/14.CFcHzpcm.js","../nodes/15.SpasLkf4.js","../nodes/16.TiX4VGhr.js","../nodes/17.D_IcqSXn.js","../nodes/18.CljvOcq_.js","../chunks/DFI7Zp3t.js","../nodes/19.B7Etxitc.js"])))=>i.map(i=>d[i]);
|
||||
import{$ as e,A as t,B as n,D as r,E as i,G as a,H as o,I as s,K as c,O as l,P as u,Q as d,T as f,V as p,X as m,a as h,at as g,dt as _,i as v,it as y,o as b,q as x,r as S,w as C,y as w}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var T=`modulepreload`,E=function(e,t){return new URL(e,t).href},D={},O=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=E(t,n),t=s(t),t in D)return;D[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:T,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},k={},A=l(`<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>`),j=l(`<!> <!>`,1);function M(l,v){g(v,!0);let T=h(v,`components`,23,()=>[]),E=h(v,`data_0`,3,null),D=h(v,`data_1`,3,null),O=h(v,`data_2`,3,null);o(()=>v.stores.page.set(v.page)),p(()=>{v.stores,v.page,v.constructors,T(),v.form,E(),D(),O(),v.stores.page.notify()});let k=d(!1),M=d(!1),N=d(null);S(()=>{let e=v.stores.page.subscribe(()=>{u(k)&&(m(M,!0),s().then(()=>{m(N,document.title||`untitled page`,!0)}))});return m(k,!0),e});let P=e(()=>v.constructors[2]);var F=j(),I=c(F),L=t=>{let n=e(()=>v.constructors[0]);var a=r(),o=c(a);w(o,()=>u(n),(t,n)=>{b(n(t,{get data(){return E()},get form(){return v.form},get params(){return v.page.params},children:(t,n)=>{var a=r(),o=c(a),s=t=>{let n=e(()=>v.constructors[1]);var a=r(),o=c(a);w(o,()=>u(n),(e,t)=>{b(t(e,{get data(){return D()},get form(){return v.form},get params(){return v.page.params},children:(e,t)=>{var n=r(),a=c(n);w(a,()=>u(P),(e,t)=>{b(t(e,{get data(){return O()},get form(){return v.form},get params(){return v.page.params}}),e=>T()[2]=e,()=>T()?.[2])}),i(e,n)},$$slots:{default:!0}}),e=>T()[1]=e,()=>T()?.[1])}),i(t,a)},l=t=>{let n=e(()=>v.constructors[1]);var a=r(),o=c(a);w(o,()=>u(n),(e,t)=>{b(t(e,{get data(){return D()},get form(){return v.form},get params(){return v.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),i(t,a)};C(o,e=>{v.constructors[2]?e(s):e(l,-1)}),i(t,a)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),i(t,a)},R=t=>{let n=e(()=>v.constructors[0]);var a=r(),o=c(a);w(o,()=>u(n),(e,t)=>{b(t(e,{get data(){return E()},get form(){return v.form},get params(){return v.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),i(t,a)};C(I,e=>{v.constructors[1]?e(L):e(R,-1)});var z=x(I,2),B=e=>{var r=A(),o=a(r),s=e=>{var r=t();n(()=>f(r,u(N))),i(e,r)};C(o,e=>{u(M)&&e(s)}),_(r),i(e,r)};C(z,e=>{u(k)&&e(B)}),i(l,F),y()}var N=v(M),P=[()=>O(()=>import(`../nodes/0.WTbeuaG5.js`),__vite__mapDeps([0,1,2,3,4]),import.meta.url),()=>O(()=>import(`../nodes/1.HToxGbTu.js`),__vite__mapDeps([5,1,2,6,7]),import.meta.url),()=>O(()=>import(`../nodes/2.DJpmXDpd.js`),__vite__mapDeps([8,1,7,2,3,6,9,10,11,12,13]),import.meta.url),()=>O(()=>import(`../nodes/3.DQ-wAvIJ.js`),__vite__mapDeps([14,1,7,2,9,12]),import.meta.url),()=>O(()=>import(`../nodes/4.Dw1ji0S9.js`),__vite__mapDeps([15,1,2]),import.meta.url),()=>O(()=>import(`../nodes/5.BV8wWprr.js`),__vite__mapDeps([16,1,2]),import.meta.url),()=>O(()=>import(`../nodes/6.iWRSAZEv.js`),__vite__mapDeps([17,1,2]),import.meta.url),()=>O(()=>import(`../nodes/7.CJ-_CrAo.js`),__vite__mapDeps([18,1,2]),import.meta.url),()=>O(()=>import(`../nodes/8.TeTitTKA.js`),__vite__mapDeps([19,1,2,10,7,9,12,20,21,22]),import.meta.url),()=>O(()=>import(`../nodes/9.C_kOH_FX.js`),__vite__mapDeps([23,1,2]),import.meta.url),()=>O(()=>import(`../nodes/10.2kRbJUBr.js`),__vite__mapDeps([24,1,2]),import.meta.url),()=>O(()=>import(`../nodes/11.3PxmG5oJ.js`),__vite__mapDeps([25,1,2]),import.meta.url),()=>O(()=>import(`../nodes/12.DXjVg3KD.js`),__vite__mapDeps([26,1,2,20,10,7,9,21,22,27]),import.meta.url),()=>O(()=>import(`../nodes/13.CjlegDH_.js`),__vite__mapDeps([28,1,2]),import.meta.url),()=>O(()=>import(`../nodes/14.CFcHzpcm.js`),__vite__mapDeps([29,1,2]),import.meta.url),()=>O(()=>import(`../nodes/15.SpasLkf4.js`),__vite__mapDeps([30,1,2]),import.meta.url),()=>O(()=>import(`../nodes/16.TiX4VGhr.js`),__vite__mapDeps([31Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{c as e,r as t}from"../chunks/BZuNOv8h.js";export{e as load_css,t as start};
|
||||
@@ -1 +0,0 @@
|
||||
import{n as e,s as t}from"../chunks/B0qrqti_.js";export{t as load_css,e as start};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{B as e,D as t,E as n,K as r,O as i,U as a,at as o,b as s,d as c,ft as l,it as u,r as d,ut as f,v as p,z as m}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/DTCALkcP.js";var g=l({prerender:()=>!1,ssr:()=>!1}),_=`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTNtbSIKICAgaGVpZ2h0PSIxM21tIgogICB2aWV3Qm94PSIwIDAgMTMgMTMiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuNC40IChkY2FmM2U3ZDllLCAyMDI2LTA1LTA1KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmF2aWNvbi5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iLi4vYmFja2VuZC93ZWIvc3JjL2xpYi9hc3NldHMvbG9nby10eHQucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTYiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI5NiIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzEiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjMDAwMDAwIgogICAgIGJvcmRlcm9wYWNpdHk9IjAuMjUiCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6em9vbT0iMS40NDMxODE4IgogICAgIGlua3NjYXBlOmN4PSIyODcuOTA1NTIiCiAgICAgaW5rc2NhcGU6Y3k9IjIxNC44MDMxNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMSIgLz4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJDYWxxdWUgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjExMTFweDtmb250LWZhbWlseTpwaXhlbGFydDstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOnBpeGVsYXJ0O3dyaXRpbmctbW9kZTpsci10YjtkaXJlY3Rpb246bHRyO2ZpbGw6IzM3YWJjODtzdHJva2Utd2lkdGg6MC4yNjQ1ODMiCiAgICAgICB4PSIyLjc0OTk5OTUiCiAgICAgICB5PSIxMS41NDk5OTciCiAgICAgICBpZD0idGV4dDEiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4xIgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6MTQuMTExMXB4O2ZvbnQtZmFtaWx5OidHb2h1Rm9udCAxMSBOZXJkIEZvbnQnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J0dvaHVGb250IDExIE5lcmQgRm9udCc7ZmlsbDojMGVhNWU5O2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDowLjI2NDU4MyIKICAgICAgICAgeD0iMi43NDk5OTk1IgogICAgICAgICB5PSIxMS41NDk5OTciPmw8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=`,v=i(`<link rel="icon"/> <link rel="stylesheet" href="/assets/fontello/css/fontello.css"/>`,1);function y(i,l){o(l,!0),d(()=>{h()});var g=t();p(`12qhfyh`,t=>{var i=v(),o=r(i);f(2),e(()=>c(o,`href`,_)),m(()=>{a.title=`Lasssistanoque`}),n(t,i)});var y=r(g);s(y,()=>l.children),n(i,g),u()}export{y as component,g as universal};
|
||||
import{G as e,K as t,M as n,N as r,Q as i,T as a,Y as o,_t as s,bt as c,dt as l,ft as u,j as d,m as f,r as p,x as m}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/DTCALkcP.js";var g=c({prerender:()=>!1,ssr:()=>!1}),_=`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTNtbSIKICAgaGVpZ2h0PSIxM21tIgogICB2aWV3Qm94PSIwIDAgMTMgMTMiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuNC40IChkY2FmM2U3ZDllLCAyMDI2LTA1LTA1KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmF2aWNvbi5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iLi4vYmFja2VuZC93ZWIvc3JjL2xpYi9hc3NldHMvbG9nby10eHQucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTYiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI5NiIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzEiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjMDAwMDAwIgogICAgIGJvcmRlcm9wYWNpdHk9IjAuMjUiCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6em9vbT0iMS40NDMxODE4IgogICAgIGlua3NjYXBlOmN4PSIyODcuOTA1NTIiCiAgICAgaW5rc2NhcGU6Y3k9IjIxNC44MDMxNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMSIgLz4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJDYWxxdWUgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjExMTFweDtmb250LWZhbWlseTpwaXhlbGFydDstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOnBpeGVsYXJ0O3dyaXRpbmctbW9kZTpsci10YjtkaXJlY3Rpb246bHRyO2ZpbGw6IzM3YWJjODtzdHJva2Utd2lkdGg6MC4yNjQ1ODMiCiAgICAgICB4PSIyLjc0OTk5OTUiCiAgICAgICB5PSIxMS41NDk5OTciCiAgICAgICBpZD0idGV4dDEiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4xIgogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6MTQuMTExMXB4O2ZvbnQtZmFtaWx5OidHb2h1Rm9udCAxMSBOZXJkIEZvbnQnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J0dvaHVGb250IDExIE5lcmQgRm9udCc7ZmlsbDojMGVhNWU5O2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDowLjI2NDU4MyIKICAgICAgICAgeD0iMi43NDk5OTk1IgogICAgICAgICB5PSIxMS41NDk5OTciPmw8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=`,v=r(`<link rel="icon"/> <link rel="stylesheet" href="/assets/fontello/css/fontello.css"/>`,1);function y(r,c){u(c,!0),p(()=>{h()});var g=n();m(`12qhfyh`,n=>{var r=v(),a=i(r);s(2),t(()=>f(a,`href`,_)),e(()=>{o.title=`Lasssistanoque`}),d(n,r)});var y=i(g);a(y,()=>c.children),d(r,g),l()}export{y as component,g as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,K as n,N as r,Q as i,Z as a,dt as o,ft as s,j as c,vt as l}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/ffLBjIeN.js";var d=r(`<h1> </h1> <p> </p>`,1);function f(r,f){s(f,!0);var p=d(),m=i(p),h=a(m,!0);l(m);var g=e(m,2),_=a(g,!0);l(g),n(()=>{t(h,u.status),t(_,u.error?.message)}),c(r,p),o()}export{f as component};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,E as t,G as n,K as r,O as i,T as a,at as o,dt as s,it as c,q as l}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/DtPl1hOB.js";var d=i(`<h1> </h1> <p> </p>`,1);function f(i,f){o(f,!0);var p=d(),m=r(p),h=n(m,!0);s(m);var g=l(m,2),_=n(g,!0);s(g),e(()=>{a(h,u.status),a(_,u.error?.message)}),t(i,p),c()}export{f as component};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Base de connaissance`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage : Canaux de communication`,back:`/settings`}}var a=e(`<div>Modèles</div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Mémoire`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage : Base de connaissance`,back:`/settings`}}var a=e(`<div>Modèles</div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage : Mémoire`,back:`/settings`}}var a=e(`<div>Modèles</div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,C as t,D as n,E as r,G as i,J as a,K as o,L as s,M as c,N as l,O as u,P as d,Q as f,T as p,X as m,_ as h,a as g,at as _,c as v,dt as y,ft as b,it as x,j as S,q as C,s as ee,u as w,ut as T,w as E,x as D,z as O}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";import{t as k}from"../chunks/DOY2HMbt.js";import{n as A,t as j}from"../chunks/DRdGzrsF.js";import{t as M}from"../chunks/BorM6hBh.js";import{n as N}from"../chunks/D3MDK1zR.js";var P=b({load:()=>F}),F=async({params:e})=>({title:`Paramétrage : Modèles`,back:`../settings`,space:e.space,providerTypes:await k.providerTypes(),providers:await k.getProviders(e.space)}),I=u(`<li><label><input type="checkbox"/> </label></li>`),L=u(`<div><div class="formgroup my-2"><form><div class="formelement"><label for="name">Nom</label> <input id="name" type="text" class="textinput" placeholder="nom affiché"/> <!></div> <div class="formelement"><label for="type" class="block my-1 flex-1">Type</label> <!> <!></div> <div class="formelement"><label for="baseUrl">URL</label> <input id="baseUrl" type="text" class="textinput" placeholder="http://127.0.0.1:8080/v1" autocomplete="off"/> <!></div> <div class="formelement"><label for="apiKey">Clé API</label> <input id="apiKey" type="password" class="textinput" placeholder="clé API (optionnel)" autocomplete="new-password"/> <!></div> <div class="formelement"><label for="models">Models</label> <button class="bt small">Afficher les modèles disponibles</button> <ol class="ml-2"></ol> <div><!></div></div> <div class="text-right"><button type="button" class="bt">Annuler</button> <button type="submit" class="bt mx-4">Enregistrer</button></div></form></div></div>`);function R(t,s){_(s,!0);let u=g(s,`item`,7),b=f(a(u().models.split(`|`))),S=f(a(u().models.split(`|`).map(e=>({value:e,selected:!0})))),N=new A,P=e=>{e.focus()},F=e=>{e.preventDefault(),u().models=d(b).join(`|`),s.onSave(u())},R=e=>{e.preventDefault(),s.onCancel()},z=e=>{e.preventDefault(),N.clear(),k.getAvailableModels(u().teamId,u()).then(e=>{m(S,e.map(e=>({value:e,selected:d(b).includes(e)})),!0)}).catch(e=>{N.set(`models`,e)})},B=()=>{m(b,d(S).filter(e=>e.selected).map(e=>e.value),!0)};var V=L(),H=i(V),U=i(H),W=i(U),G=C(i(W),2);w(G),O(()=>v(G,()=>u().name,e=>u().name=e)),h(G,e=>P?.(e));var te=C(G,2);j(te,{key:`name`,get errors(){return s.errors}}),y(W);var K=C(W,2),q=C(i(K),2);M(q,{get items(){return s.providerTypes},valueMode:`id`,get value(){return u().type},set value(e){u().type=e}});var ne=C(q,2);j(ne,{key:`type`,get errors(){return s.errors}}),y(K);var J=C(K,2),Y=C(i(J),2);w(Y);var re=C(Y,2);j(re,{key:`baseUrl`,get errors(){return s.errors}}),y(J);var X=C(J,2),Z=C(i(X),2);w(Z);var ie=C(Z,2);j(ie,{key:`apiKey`,get errors(){return s.errors}}),y(X);var Q=C(X,2),ae=C(i(Q),2),$=C(ae,2);D($,21,()=>d(S),e=>e.value,(t,a,s)=>{var l=n(),u=o(l),f=t=>{var n=I(),o=i(n),s=i(o);w(s);var l=C(s);y(o),y(n),e(()=>p(l,` ${d(a).value??``}`)),c(`change`,s,B),ee(s,()=>d(a).selected,e=>d(a).selected=e),r(t,n)};E(u,e=>{d(a).value&&e(f)}),r(t,l)}),y($);var oe=C($,2),se=i(oe);j(se,{key:`models`,get errors(){return N}}),y(oe),y(Q);var ce=C(Q,2),le=i(ce);T(2),y(ce),y(U),y(H),y(V),l(`submit`,U,F),c(`change`,U,()=>{s.errors.clear()}),v(Y,()=>u().baseUrl,e=>u().baseUrl=e),v(Z,()=>u().apiKey,e=>u().apiKey=e),c(`click`,ae,z),c(`click`,le,R),r(t,V),x()}S([`change`,`click`]);var z=u(`<button class="rounded w-full border border-dashed p-2 border-stone-500 cursor-pointer" tabindex="0"><i class="icon-plus"></i> Ajouter un fournisseur</button>`),B=u(`<div class="rounded border p-2 my-2 border-stone-500 flex"><div class="flex-1"><span> </span> <span class="text-stone-500"> </span></div> <button class="bt small mx-1" aria-label="Modifier"><i class="icon-edit"></i></button> <button class="bt small mx-1" aria-label="Supprimer"><i class="icon-trash-empty"></i></button></div>`),V=u(`<div class="container"><!> <!></div>`);function H(l,u){_(u,!0);let h=f(a(s(()=>u.data.providers))),g=f(!1),v=f(null),b=f(a({})),S=new A,ee=()=>{d(v)||(S.clear(),m(b,{},!0),d(b).models=``,m(g,!0))},w=()=>{m(g,!1)},T=e=>{e.name||S.set(`name`,`Le nom est obligatoire !`),e.type||S.set(`type`,`Le type est obligatoire !`),e.baseUrl&&!N(e.baseUrl)&&S.set(`baseUrl`,`Mauvaise URL !`),S.size===0&&k.createProvider(u.data.space,e).then(e=>{d(h).push(e),m(g,!1),m(b,{},!0)}).catch(e=>{console.log(e)})},O=()=>{m(v,null),m(b,{},!0)},j=e=>{e.name||S.set(`name`,`Le nom est obligatoire !`),e.type||S.set(`type`,`Le type est obligatoire !`),e.baseUrl&&!N(e.baseUrl)&&S.set(`baseUrl`,`Mauvaise URL !`),S.size===0&&k.updateProvider(u.data.space,e).then(e=>{m(h,d(h).map(t=>e.id===t.id?e:t),!0),m(v,null),m(b,{},!0)}).catch(e=>{console.log(e)})},M=async e=>{S.clear(),!d(g)&&k.getProvider(u.data.space,e).then(t=>{m(h,d(h).map(n=>n.id===e?t:n),!0),m(v,e,!0)})},P=e=>{k.deleteProvider(u.data.space,e).then(()=>{m(h,d(h).filter(t=>t.id!==e),!0)}).catch(e=>{console.log(e)})};var F=V(),I=i(F),L=e=>{var i=n(),a=o(i);t(a,()=>`new`,e=>{R(e,{get item()Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,G as i,I as a,K as o,L as s,M as c,N as l,O as u,Q as d,R as f,U as p,X as m,Z as h,_t as g,a as _,b as v,bt as y,dt as b,et as x,ft as S,it as C,j as w,k as T,l as E,nt as D,p as O,u as k,vt as A}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as j}from"../chunks/BeIYuf23.js";import{n as M,t as N}from"../chunks/6mSXxE57.js";import{t as P}from"../chunks/DdGy_ePN.js";import{n as F}from"../chunks/D3MDK1zR.js";var I=y({load:()=>L}),L=async({params:e})=>({title:`Paramétrage : Modèles`,back:`../settings`,space:e.space,providerTypes:await j.providerTypes(),providers:await j.getProviders(e.space)}),R=l(`<li><label><input type="checkbox"/> </label></li>`),z=l(`<div><div class="formgroup my-2"><form><div class="formelement"><label for="name">Nom</label> <input id="name" type="text" class="textinput" placeholder="nom affiché"/> <!></div> <div class="formelement"><label for="type" class="block my-1 flex-1">Type</label> <!> <!></div> <div class="formelement"><label for="baseUrl">URL</label> <input id="baseUrl" type="text" class="textinput" placeholder="http://127.0.0.1:8080/v1" autocomplete="off"/> <!></div> <div class="formelement"><label for="apiKey">Clé API</label> <input id="apiKey" type="password" class="textinput" placeholder="clé API (optionnel)" autocomplete="new-password"/> <!></div> <div class="formelement"><label for="models">Models</label> <button class="bt small">Afficher les modèles disponibles</button> <ol class="ml-2"></ol> <div><!></div></div> <div class="text-right"><button type="button" class="bt">Annuler</button> <button type="submit" class="bt mx-4">Enregistrer</button></div></form></div></div>`);function B(a,l){S(l,!0);let u=_(l,`item`,7),p=C(x(u().models.split(`|`))),m=C(x(u().models.split(`|`).map(e=>({value:e,selected:!0})))),y=new M,F=e=>{e.focus()},I=e=>{e.preventDefault(),u().models=n(p).join(`|`),l.onSave(u())},L=e=>{e.preventDefault(),l.onCancel()},B=e=>{e.preventDefault(),y.clear(),j.getAvailableModels(u().teamId,u()).then(e=>{D(m,e.map(e=>({value:e,selected:n(p).includes(e)})),!0)}).catch(e=>{y.set(`models`,e)})},V=()=>{D(p,n(m).filter(e=>e.selected).map(e=>e.value),!0)};var H=z(),U=h(H),W=h(U),G=h(W),K=e(h(G),2);O(K),i(()=>k(K,()=>u().name,e=>u().name=e)),v(K,e=>F?.(e));var ee=e(K,2);N(ee,{key:`name`,get errors(){return l.errors}}),A(G);var q=e(G,2),te=e(h(q),2);P(te,{get items(){return l.providerTypes},valueMode:`id`,get value(){return u().type},set value(e){u().type=e}});var ne=e(te,2);N(ne,{key:`type`,get errors(){return l.errors}}),A(q);var J=e(q,2),Y=e(h(J),2);O(Y);var re=e(Y,2);N(re,{key:`baseUrl`,get errors(){return l.errors}}),A(J);var X=e(J,2),Z=e(h(X),2);O(Z);var ie=e(Z,2);N(ie,{key:`apiKey`,get errors(){return l.errors}}),A(X);var Q=e(X,2),ae=e(h(Q),2),$=e(ae,2);r($,21,()=>n(m),e=>e.value,(r,i,a)=>{var l=c(),u=d(l),f=r=>{var a=R(),c=h(a),l=h(c);O(l);var u=e(l);A(c),A(a),o(()=>t(u,` ${n(i).value??``}`)),s(`change`,l,V),E(l,()=>n(i).selected,e=>n(i).selected=e),w(r,a)};T(u,e=>{n(i).value&&e(f)}),w(r,l)}),A($);var oe=e($,2),se=h(oe);N(se,{key:`models`,get errors(){return y}}),A(oe),A(Q);var ce=e(Q,2),le=h(ce);g(2),A(ce),A(W),A(U),A(H),f(`submit`,W,I),s(`change`,W,()=>{l.errors.clear()}),k(Y,()=>u().baseUrl,e=>u().baseUrl=e),k(Z,()=>u().apiKey,e=>u().apiKey=e),s(`click`,ae,B),s(`click`,le,L),w(a,H),b()}a([`change`,`click`]);var V=l(`<button class="rounded w-full border border-dashed p-2 border-stone-500 cursor-pointer" tabindex="0"><i class="icon-plus"></i> Ajouter un fournisseur</button>`),H=l(`<div class="rounded border p-2 my-2 border-stone-500 flex formgroup"><div class="flex-1 p-2"><span> </span> <span class="text-stone-500"> </span></div> <button class="bt small mx-1" aria-label="Modifier"><i class="icon-edit"></i></button> <button class="bt small mx-1" aria-label="Supprimer"><i class="icon-trash-empty"></i></button></div>`),U=l(`<div class="container"><!> <!></div>`);function W(i,a){S(a,!0);let l=C(x(p(()=>a.data.providers))),g=C(!1),_=C(null),v=C(x({})),y=new M,E=()=>{n(_)||(y.clear(),D(v,{},!0),n(v).models=``,D(g,!0))},O=()=>{D(g,!1)},k=e=>{e.name||y.set(`name`,`Le nom est obligatoire !`),e.type||y.set(`type`,`Le type est obligatoire !`),e.baseUrl&&!F(e.baseUrl)&&y.set(`baseUrl`,`Mauvaise URL !`),y.size===0&&j.createProvider(a.data.space,e).then(e=>{n(l).push(e),D(g,!1),D(v,{},!0)}).catch(e=>{console.log(e)})},N=()=>{D(_,null),D(v,{},!0)},P=e=>{e.name||y.set(`name`,`Le nom est obligatoire !`),e.type||y.set(`type`,`Le type est obligatoire !`),e.baseUrl&&!F(e.baseUrl)&&y.set(`baseUrl`,`Mauvaise URL !`),y.size===0&&j.updateProvider(a.data.space,e).then(e=>{D(l,n(l).map(t=>e.id===t.id?e:t),!0),D(_,null),D(v,{},!0)}).catch(e=>{console.log(e)})},I=async e=>{y.clear(),!n(g)&&j.getProvider(a.data.space,e).then(t=>{D(l,n(l).map(n=>n.id===e?t:n),!0),D(_,e,!0)})},L=e=>{j.deleteProvider(a.data.space,e).then(()=>{D(l,n(l).filter(t=>t.id!==e),!0)}).catch(e=>{console.log(e)})},R=e=>{e.key===`Escape`&&N()};var z=U();f(`keydown
Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Skills`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Outils`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage : Skills`,back:`/settings`}}var a=e(`<div>Modèles</div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,G as i,I as a,K as o,L as s,M as c,N as l,O as u,Q as d,R as f,U as p,X as m,Z as h,_t as g,a as _,b as v,bt as y,dt as b,et as x,ft as S,it as C,j as w,k as T,l as E,m as D,nt as O,p as k,r as A,u as j,vt as M}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as N}from"../chunks/DtfiK5fE.js";import{n as P,t as F}from"../chunks/6mSXxE57.js";var I={getTools:e=>N.get(`/tool/${e}`),getTool:(e,t)=>N.get(`/tool/${e}/${t}`),getToolParams:(e,t)=>N.get(`/tool/${e}/${t}/params`),createTool:(e,t)=>N.post(`/tool/${e}`,t),updateTool:(e,t)=>N.put(`/tool/${e}`,t)},L=y({load:()=>R}),R=async({params:e})=>({title:`Paramétrage : Outils`,back:`../settings`,space:e.space,tools:await I.getTools(e.space)}),z=l(`<input id="enabled" type="checkbox" class="checkboxinput"/>`),B=l(`<input type="number" class="textinput"/>`),V=l(`<input class="textinput"/>`),H=l(`<div class="formelement"><label> </label> <!> <!></div>`),U=l(`<div><div class="formgroup my-2"><form><div class="formelement"><label for="name">Nom</label> <input id="name" type="text" class="textinput" placeholder="nom affiché" disabled=""/> <!></div> <div class="formelement"><label for="enabled">Actif</label> <input id="enabled" type="checkbox" class="checkboxinput"/> <!></div> <!> <div class="text-right"><button type="button" class="bt">Annuler</button> <button type="submit" class="bt mx-4">Enregistrer</button></div></form></div></div>`);function W(a,c){S(c,!0);let l=_(c,`item`,7),u=x(p(()=>l())),d=C(x([])),m=new P;A(async()=>{O(d,await I.getToolParams(l().teamId,l().id),!0),m=new P(Object.entries(JSON.parse(l().configuration)))});let y=e=>{e.focus()},N=e=>{e.preventDefault(),l().configuration=JSON.stringify(Object.fromEntries(m)),c.onSave(l())},L=e=>{e.preventDefault(),c.onCancel()};var R=U(),W=h(R),G=h(W),K=h(G),q=e(h(K),2);k(q),i(()=>j(q,()=>u.name,e=>u.name=e)),v(q,e=>y?.(e));var J=e(q,2);F(J,{key:`name`,get errors(){return c.errors}}),M(K);var Y=e(K,2),X=e(h(Y),2);k(X);var Z=e(X,2);F(Z,{key:`baseUrl`,get errors(){return c.errors}}),M(Y);var Q=e(Y,2);r(Q,17,()=>n(d),e=>e.name,(r,i)=>{var a=H(),s=h(a),l=h(s,!0);M(s);var u=e(s,2),d=e=>{var t=z();k(t),E(t,()=>m.get(n(i).name)??``,e=>m.set(n(i).name,e)),w(e,t)},f=e=>{var t=B();k(t),o(()=>{D(t,`id`,n(i).name),D(t,`placeholder`,n(i).description)}),j(t,()=>m.get(n(i).name)??``,e=>m.set(n(i).name,e)),w(e,t)},p=e=>{var t=V();k(t),o(()=>{D(t,`id`,n(i).name),D(t,`placeholder`,n(i).description)}),j(t,()=>m.get(n(i).name)??``,e=>m.set(n(i).name,e)),w(e,t)};T(u,e=>{n(i).type==`bool`?e(d):n(i).type==`int`?e(f,1):e(p,-1)});var g=e(u,2);F(g,{key:`baseUrl`,get errors(){return c.errors}}),M(a),o(()=>{D(s,`for`,n(i).name),t(l,n(i).name)}),w(r,a)});var $=e(Q,2),ee=h($);g(2),M($),M(G),M(W),M(R),f(`submit`,G,N),s(`change`,G,()=>{c.errors.clear()}),E(X,()=>u.enabled,e=>u.enabled=e),s(`click`,ee,L),w(a,R),b()}a([`change`,`click`]);var G=l(`<div class="rounded border p-2 my-2 border-stone-500 flex formgroup"><div class="flex-1 p-2"><span> </span> <span class="text-stone-500"> </span></div> <button class="bt small mx-1" aria-label="Modifier"><i class="icon-edit"></i></button></div>`),K=l(`<div class="container"></div>`);function q(i,a){S(a,!0);let l=C(x(p(()=>a.data.tools))),g=C(null),_=new P,v=()=>{O(g,null)},y=e=>{_.size===0&&I.updateTool(a.data.space,e).then(e=>{O(l,n(l).map(t=>e.id===t.id?e:t),!0),O(g,null)}).catch(e=>{console.log(e)})},E=async e=>{_.clear(),I.getTool(a.data.space,e).then(t=>{O(l,n(l).map(n=>n.id===e?t:n),!0),O(g,e,!0)})},D=e=>{e.key===`Escape`&&v()};var k=K();f(`keydown`,m,D),r(k,21,()=>n(l),e=>e.id,(r,i)=>{var a=c(),l=d(a),f=e=>{var t=c(),r=d(t);u(r,()=>n(i).id,e=>{W(e,{get item(){return n(i)},get errors(){return _},onSave:y,onCancel:v})}),w(e,t)},p=r=>{var a=G(),c=h(a),l=h(c),u=h(l,!0);M(l);var d=e(l,2),f=h(d);M(d),M(c);var p=e(c,2);M(a),o(()=>{t(u,n(i).name),t(f,`(${n(i).enabled??``})`)}),s(`click`,p,()=>E(n(i).id)),w(r,a)};T(l,e=>{n(g)===n(i).id?e(f):e(p,-1)}),w(r,a)}),M(k),w(i,k),b()}a([`click`]);export{q as component,L as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Utilisateurs`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage : Utilisateurs`,back:`/settings`}}var a=e(`<div>Modèles</div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Tâches`}}var a=t(`<div>Tâches</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -0,0 +1,4 @@
|
||||
import{$ as e,A as t,B as n,E as r,I as i,K as a,L as o,M as s,N as c,Q as l,R as u,Z as d,at as f,bt as p,dt as m,et as h,ft as g,it as _,j as v,k as y,l as b,m as x,nt as S,p as C,q as w,st as T,u as E,v as D,vt as O}from"../chunks/DGrvnoUE.js";import{n as k}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import{t as A}from"../chunks/ffLBjIeN.js";import"../chunks/CY9OlB4q.js";import{t as j}from"../chunks/BYYkuYgk.js";import{n as M,r as N,t as P}from"../chunks/Bht2nTIZ.js";var F=p({load:()=>I}),I=async({params:e})=>({title:`Tâches`,tasks:await N.listTasks(e.space),space:e.space}),ee=c(`<p class="my-4 text-center text-sm text-stone-500">Aucune tâche planifiée. Demandez-en une dans le chat
|
||||
(« résume-moi l'actualité tous les jours à 8h »).</p>`),L=c(`<div class="dark:bg-stone-800 rounded p-3 my-2"><form><div class="formgroup my-2"><div class="formelement"><label>Titre</label> <input class="textinput" type="text"/></div> <div class="formelement"><label>Planification (cron)</label> <input class="textinput" type="text"/></div> <div class="formelement"><label>Répétition</label> <input type="checkbox"/></div></div> <div class="formelement"><label>Prompt</label> <textarea class="textinput w-full" rows="4"></textarea></div> <div class="mt-2 flex gap-2"><button class="bt small" type="submit"> </button> <button class="bt small" type="button">Annuler</button></div></form></div>`),R=c(`<p class="text-sm text-stone-500">Chargement...</p>`),z=c(`<p class="text-sm text-stone-500">Aucune conversation pour cette tâche.</p>`),B=c(`<li class="my-1 text-sm"><a class="text-sky-700 dark:text-sky-300"> </a> <span class="ml-2 text-xs text-stone-500"> </span></li>`),V=c(`<ul class="mt-1"></ul>`),H=c(`<div class="mt-2 border-t border-stone-600 pt-2"><div class="text-xs font-medium uppercase text-stone-500">Conversations liées</div> <!></div>`),U=c(`<div><div class="flex flex-row items-center"><div class="flex-1"><div class="font-bold text-base"> </div> <div class="text-xs text-stone-500"> </div></div> <button class="bt small" title="Conversations liées"><i class="icon-chat"></i></button> <button class="bt small" title="Modifier la tâche"><i class="icon-edit"></i></button> <button class="bt small" title="Supprimer la tâche"><i class="icon-trash-empty"></i></button></div> <p class="mt-1 text-sm text-stone-600 dark:text-stone-400"> </p> <span class="text-xs"> </span> <!></div>`),te=c(`<div class="container"><!> <!></div> <!>`,1);function W(i,c){g(c,!0);let p=f(()=>c.data.tasks??[]),F=_(null),I=_(null),W=_(!1),G=_(h(A.url.searchParams.get(`task`))),K=_(h({})),q=_(!1),J=async e=>{S(q,!0);try{let t=await j.allChats(c.data.space,0,void 0,e);S(K,{...n(K),[e]:t??[]},!0)}catch{M(`failure`,`Erreur lors du chargement des conversations`)}finally{S(q,!1)}},ne=async e=>{if(n(G)===e.id){S(G,null);return}S(G,e.id,!0),n(K)[e.id]||await J(e.id)},Y=!1;w(()=>{!Y&&n(G)&&(Y=!0,J(n(G))),Y=!0});let X=e=>{if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString(`fr-FR`,{day:`numeric`,month:`long`,year:`numeric`,hour:`2-digit`,minute:`2-digit`})},re=e=>{S(F,{...e},!0)},ie=async e=>{if(e.preventDefault(),n(F)){if(!n(F).label.trim()||!n(F).prompt.trim()||!n(F).cron.trim()){M(`failure`,`Titre, prompt et planification sont obligatoires`);return}S(W,!0);try{await N.updateTask(c.data.space,n(F).id,{label:n(F).label,prompt:n(F).prompt,cron:n(F).cron,repeat:n(F).repeat}),M(`success`,`Tâche mise à jour`),S(F,null),await k()}catch{M(`failure`,`Erreur lors de la mise à jour de la tâche`)}finally{S(W,!1)}}},ae=async()=>{if(n(I))try{await N.deleteTask(c.data.space,n(I).id),M(`success`,`Tâche supprimée`),await k()}catch{M(`failure`,`Erreur lors de la suppression de la tâche`)}finally{S(I,null)}};var Z=te(),Q=l(Z),$=d(Q),oe=e=>{var t=ee();v(e,t)};y($,e=>{n(p).length===0&&e(oe)});var se=e($,2);r(se,17,()=>n(p),e=>e.id,(i,f)=>{var p=s(),m=l(p),h=r=>{var i=L(),s=d(i),c=d(s),l=d(c),p=d(l),m=e(p,2);C(m),O(l);var h=e(l,2),g=d(h),_=e(g,2);C(_),O(h);var y=e(h,2),w=d(y),D=e(w,2);C(D),O(y),O(c);var k=e(c,2),A=d(k),j=e(A,2);T(j),O(k);var M=e(k,2),N=d(M),P=d(N,!0);O(N);var I=e(N,2);O(M),O(s),O(i),a(()=>{x(p,`for`,`label-${n(f).id}`),x(m,`id`,`label-${n(f).id}`),x(g,`for`,`cron-${n(f).id}`),x(_,`id`,`cron-${n(f).id}`),x(w,`for`,`repeat-${n(f).id}`),x(D,`id`,`repeat-${n(f).id}`),x(A,`for`,`prompt-${n(f).id}`),x(j,`id`,`prompt-${n(f).id}`),N.disabled=n(W),t(P,n(W)?`Enregistrement...`:`Enregistrer`)}),u(`submit`,s,ie),E(m,()=>n(F).label,e=>n(F).label=e),E(_,()=>n(F).cron,e=>n(F).cron=e),b(D,()=>n(F).repeat,e=>n(F).repeat=e),E(j,()=>n(F).prompt,e=>n(F).prompt=e),o(`click`,I,()=>S(F,null)),v(r,i)},g=i=>{var s=U();let l;var u=d(s),p=d(u),m=d(p),h=d(m,!0);O(m);var g=e(m,2),_=d(g);O(g),O(p);var b=e(p,2),C=e(b,2),w=e(C,2);O(u);var T=e(u,2),E=d(T,!0);O(T);var k=e(T,2),A=d(k);O(k);var j=e(k,2),M=i=>{var o=H(),s=e(d(o),2),l=e=>{var t=R();v(e,t)},u=e=>{var t=z();v(e,t)},p=i=>{var o=V();r(o,21,()=>n(K)[n(f).id],e=>e.id,(r,i)=>{var o=B(),s=d(o),l=d(s,!0);O(s);var u=e(s,2),f=d(u,!0);O(u),O(o),a(e=>{x(s,`href`,`/${c.data.space}/${n(i).id}`),t(l,n(i).title),t(f,e)},[()=>X(n(i)._date_created)]),v(r,o)}),O(o),v(i,o)};y(s,e=>{n(q)&&!n(K)[n(f).id]?e(l):(n(K)[n(f).id]??[]).length===0?e(u,1):e(p,-1)}),O(o),v(i,o)};y(j,e=>{n(G)===n(f).id&&e(M)}),O(s),a(e=>{l=D(s,1,`dark:bg-stone-800 rounded p-2 my-2`,null,l,{"ring-2":n(G)===n(f).id,"ring-sky-500":n(G)===n(f).id}),t(h,n(f).label),t(_,`${n(f).cron??``}
|
||||
${n(f).repeat?`· répétée`:`· ponctuelle`}
|
||||
${n(f).status===`done`?`· terminée`:``}`),t(E,n(f).prompt),t(A,`Prochaine exécution : ${e??``}`)},[()=>X(n(f).nextDatetime)]),o(`click`,b,()=>ne(n(f))),o(`click`,C,()=>re(n(f))),o(`click`,w,()=>S(I,n(f),!0)),v(i,s)};y(m,e=>{n(F)&&n(F).id===n(f).id?e(h):e(g,-1)}),v(i,p)}),O(Q);var ce=e(Q,2);{let e=f(()=>n(I)!==null),t=f(()=>`Voulez-vous vraiment supprimer « ${n(I)?.label} » ? Cette action est irréversible.`);P(ce,{get open(){return n(e)},title:`Supprimer la tâche`,get message(){return n(t)},confirmLabel:`Supprimer`,onConfirm:ae,onCancel:()=>S(I,null)})}v(i,Z),m()}i([`click`]);export{W as component,F as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{$ as e,A as t,B as n,E as r,G as i,J as a,K as o,L as s,M as c,N as l,O as u,P as d,Q as f,T as p,V as m,X as h,_ as ee,a as g,at as te,c as _,dt as v,ft as y,h as b,it as ne,j as x,p as S,q as C,r as re,u as w,ut as T,w as E,x as ie,z as ae}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";import{n as oe,t as se}from"../chunks/DTCALkcP.js";import{t as D}from"../chunks/BC84wEQu.js";import{t as O}from"../chunks/BDef5Ccs.js";import{n as ce,t as k}from"../chunks/DRdGzrsF.js";import{t as le}from"../chunks/BorM6hBh.js";import{t as ue}from"../chunks/D3MDK1zR.js";var de=y({load:()=>fe}),fe=async()=>({title:`Profil`,me:await O.me()}),A=function(e){return e[e.None=0]=`None`,e[e.Changed=1]=`Changed`,e[e.Saving=2]=`Saving`,e[e.Saved=3]=`Saved`,e[e.Error=4]=`Error`,e}({}),pe={listTimezones:()=>D.get(`/misc/timezones`)},me=u(`<i class="incon-spin1 anomate-spin"></i> Enregistrement en cours`,1),he=u(`<i class="incon-ok anomate-spin"></i> Enregistrement réussi`,1),ge=u(`<button><!></button>`);function _e(e,a){te(a,!0);let o=g(a,`state`,7),s=g(a,`disabled`,3,!1);m(()=>{(o()===A.Saved||o()===A.Error)&&setTimeout(()=>{o(A.None)},2e3)});let l=()=>{a.handleClick&&(o()===A.Changed||o()===A.None)&&a.handleClick()};var u=ge();let d;var f=i(u),h=e=>{var i=t();n(()=>p(i,a.label)),r(e,i)},ee=e=>{var t=me();T(),r(e,t)},_=e=>{var t=he();T(),r(e,t)},y=e=>{var n=t(`Echec`);r(e,n)};E(f,e=>{o()==A.None||o()==A.Changed?e(h):o()==A.Saving?e(ee,1):o()==A.Saved?e(_,2):o()==A.Error&&e(y,3)}),v(u),n(()=>{u.disabled=s(),d=b(u,1,`bt`,null,d,{disabled:s(),changed:o()===A.Changed,saving:o()===A.Saving,saved:o()===A.Saved,error:o()===A.Error})}),c(`click`,u,l),r(e,u),ne()}x([`click`]);var ve=u(`<div class="m-2"><div class="dark:bg-stone-700 bg-stone-300 rounded inline px-2 py-1 text-sm"><span class="inline-block w-20"> </span> <span> </span> <button class="ml-4 pointer" title="Annuler"><i class="icon-cancel"></i></button></div></div>`),ye=u(`<div class="mb-4 formgroup container"><h2>Mon compte</h2> <form><div class="formelement"><label for="email" class="my-1 flex-1">Email</label> <input id="email" type="text" class="textinput"/> <!></div> <div class="grid grid-cols-1 gap-x-4 md:grid-cols-2"><div class="formelement"><label for="firstname" class=" my-1 flex-1">Prénom</label> <input id="firstname" type="text" class="textinput"/> <!></div> <div class="formelement"><label for="lastname" class="my-1 flex-1">Nom</label> <input id="lastname" type="text" class="textinput"/> <!></div></div> <div class="grid grid-cols-1 gap-x-4 md:grid-cols-2"><div class="formelement"><label for="lang" class="block my-1 flex-1">Langue</label> <select class="textinput"><option>English</option><option>Français</option></select> <!></div> <div class="formelement"><label for="timezone" class="block my-1 flex-1">Timezone</label> <!> <!></div></div> <div class="formelement"><label for="theme" class="block my-1 flex-1">Thème</label> <select class="textinput"><option>Automatique</option><option>Sombre</option><option>Clair</option></select> <!></div> <!></form></div> <div class="mb-4 formgroup container"><h2>Canaux de communication</h2> <!> <div class="flex gap-2 mt-6"><div><select class="textinput"><option></option><option>Email</option><option>Signal</option><option>Telegram</option><option>Whatsapp</option></select></div> <div class="flex-1"><input type="text" class="textinput"/></div> <div><!></div></div></div>`,1);function j(t,u){te(u,!0);let g=a(s(()=>u.data.me.user)),y=f(a([])),b=f(a({type:``,address:``})),x=f(a([])),T=new ce,E=f(a(A.None)),D=f(a(A.None));re(async()=>{h(y,await O.listAddresses(g.id),!0),h(x,(await pe.listTimezones()).map(e=>({value:e,label:e})),!0)}),m(()=>{oe(g.theme),se()});let de=e=>{e.preventDefault(),h(E,A.Saving,!0),ue(g.email)||T.set(`email`,`Adresse email invalide !`),g.firstname||T.set(`firstname`,`Le prénom est obligatoire !`),g.lastname||T.set(`lastname`,`Le nom est obligatoire !`),T.size==0&&O.update(g.id,g).then(()=>{h(E,A.Saved,!0)}).catch(e=>{h(E,A.Saving,!0),console.error(e)})},fe=()=>{h(D,A.Saving,!0),O.createAddress(g.id,d(b)).then(e=>{d(y).push(e),h(b,{type:``,address:``},!0),h(D,A.Saved,!0)}).catch(e=>{console.log(e)})},me=e=>{O.deleteAddress(g.id,e).then(()=>{h(y,d(y).filter(t=>t.id!=e),!0)}).catch(e=>{console.log(e)})},he=()=>{T.clear(),h(E,A.Changed,!0)},ge=e=>{e.focus()};var j=ye(),M=o(j),N=C(i(M),2),P=i(N),F=C(i(P),2);w(F),ae(()=>_(F,()=>g.email,e=>g.email=e)),ee(F,e=>ge?.(e));var be=C(F,2);k(be,{key:`email`,get errors(){return T}}),v(P);var I=C(P,2),L=i(I),R=C(i(L),2);w(R);var xe=C(R,2);k(xe,{key:`firstname`,get errors(){return T}}),v(L);var Se=C(L,2),z=C(i(Se),2);w(z);var Ce=C(z,2);k(Ce,{key:`lastname`,get errors(){return T}}),v(Se),v(I);var B=C(I,2),V=i(B),H=C(i(V),2),U=i(H);U.value=U.__value=`en`;var we=C(U);we.value=we.__value=`fr`,v(H);var Te=C(H,2);k(Te,{key:`lang`,get errors(){return T}}),v(V);var Ee=C(V,2),De=C(i(Ee),2);le(De,{get items(){return d(x)},valueMode:`id`,get value(){return g.timezone},set valueLine truncated
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,E as t,G as n,J as r,K as i,M as a,N as o,O as s,at as c,c as l,d as u,dt as d,et as f,it as p,j as m,q as h,u as g,ut as _,w as v}from"../chunks/39JK5HWF.js";import{t as y}from"../chunks/B0qrqti_.js";import"../chunks/xihTtKlq.js";import"../chunks/DL7ZyBAF.js";import{i as b,n as x}from"../chunks/BC84wEQu.js";import{t as S}from"../chunks/BRXBpvt8.js";import{t as C}from"../chunks/DFI7Zp3t.js";var w=s(`<form><div class="flex"><label for="email" class="block mb-2 flex-1">Email</label> <a href="/recover-password" class="text-xs">Mot de passe oublié ?</a></div> <div class="flex flex-row"><input type="text" class="textinput mr-1"/> <button class="bt" title="page suivante"><i class="icon-right-big"></i></button></div></form> <div class="my-4 text-xs"><a href="/register">Pas encore de compte ? Incrivez-vous.</a></div>`,1),T=s(`<form><div class="flex"><label for="email" class="block mb-2 flex-1">Mot de passe</label></div> <div class="flex flex-row"><input type="password" class="textinput mr-1"/> <button class="bt">Entrer</button></div> <a href="/login" class="text-xs">← Retour</a></form>`),E=s(`<div class="h-full w-full flex items-center public"><div class="m-auto w-96 max-w-full p-4"><img class="h-10 mb-4" alt="logo"/> <h1>Identifiez-vous ...</h1> <!> <hr class="my-4"/> <div class="grid grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-4"><button class="bt p-5 text-center" title="Connexion avec Google"><i class="icon-google"></i></button> <button class="bt p-5 text-center" title="Connexion avec Facebook"><i class="icon-facebook"></i></button> <button class="bt p-5 text-center" title="Connexion avec Github"><i class="icon-github"></i></button> <button class="bt p-5 text-center" title="Connexion avec Apple"><i class="icon-apple"></i></button></div></div></div>`);function D(s,m){c(m,!0);let D=r({email:``,password:``,validemail:!1}),O=()=>{D.validemail=!0},k=e=>{e.preventDefault(),C.login(D).then(e=>{x.user=e.user,b(e.accessToken),y(`/`)}).catch(e=>{console.log(e)})};var A=E(),j=n(A),M=n(j),N=h(M,4),P=e=>{var r=w(),a=i(r),s=h(n(a),2),c=n(s);g(c),f(c,!0),_(2),d(s),d(a),_(2),o(`submit`,a,O),l(c,()=>D.email,e=>D.email=e),t(e,r)},F=e=>{var r=T(),i=h(n(r),2),s=n(i);g(s),f(s,!0),_(2),d(i);var c=h(i,2);d(r),o(`submit`,r,k),l(s,()=>D.password,e=>D.password=e),a(`click`,c,()=>{D.validemail=!1}),t(e,r)};v(N,e=>{D.validemail?e(F,-1):e(P)}),_(4),d(j),d(A),e(()=>u(M,`src`,S)),t(s,A),p()}m([`click`]);export{D as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,F as i,G as a,I as o,K as s,L as c,N as l,Q as u,R as d,U as f,Z as p,_t as m,a as h,at as ee,b as te,bt as g,dt as ne,et as _,ft as re,g as v,it as y,j as b,k as x,nt as S,p as C,q as ie,r as ae,u as w,v as T,vt as E}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{n as oe,t as se}from"../chunks/DTCALkcP.js";import{t as D}from"../chunks/DtfiK5fE.js";import{t as O}from"../chunks/zsRwiIdn.js";import{n as ce,t as k}from"../chunks/6mSXxE57.js";import{t as le}from"../chunks/DdGy_ePN.js";import{t as ue}from"../chunks/D3MDK1zR.js";var de=g({load:()=>fe}),fe=async()=>({title:`Profil`,me:await O.me()}),A=function(e){return e[e.None=0]=`None`,e[e.Changed=1]=`Changed`,e[e.Saving=2]=`Saving`,e[e.Saved=3]=`Saved`,e[e.Error=4]=`Error`,e}({}),pe={listTimezones:()=>D.get(`/misc/timezones`)},me=l(`<i class="incon-spin1 anomate-spin"></i> Enregistrement en cours`,1),he=l(`<i class="incon-ok anomate-spin"></i> Enregistrement réussi`,1),ge=l(`<button><!></button>`);function _e(e,n){re(n,!0);let r=h(n,`state`,7),a=h(n,`disabled`,3,!1);ie(()=>{(r()===A.Saved||r()===A.Error)&&setTimeout(()=>{r(A.None)},2e3)});let o=()=>{n.handleClick&&(r()===A.Changed||r()===A.None)&&n.handleClick()};var l=ge();let u;var d=p(l),f=e=>{var r=i();s(()=>t(r,n.label)),b(e,r)},ee=e=>{var t=me();m(),b(e,t)},te=e=>{var t=he();m(),b(e,t)},g=e=>{var t=i(`Echec`);b(e,t)};x(d,e=>{r()==A.None||r()==A.Changed?e(f):r()==A.Saving?e(ee,1):r()==A.Saved?e(te,2):r()==A.Error&&e(g,3)}),E(l),s(()=>{l.disabled=a(),u=T(l,1,`bt`,null,u,{disabled:a(),changed:r()===A.Changed,saving:r()===A.Saving,saved:r()===A.Saved,error:r()===A.Error})}),c(`click`,l,o),b(e,l),ne()}o([`click`]);var ve=l(`<div class="m-2"><div class="dark:bg-stone-700 bg-stone-300 rounded inline px-2 py-1 text-sm"><span class="inline-block w-20"> </span> <span> </span> <button class="ml-4 pointer" title="Annuler"><i class="icon-cancel"></i></button></div></div>`),ye=l(`<div class="mb-4 formgroup container"><h2>Mon compte</h2> <form><div class="formelement"><label for="email" class="my-1 flex-1">Email</label> <input id="email" type="text" class="textinput"/> <!></div> <div class="grid grid-cols-1 gap-x-4 md:grid-cols-2"><div class="formelement"><label for="firstname" class=" my-1 flex-1">Prénom</label> <input id="firstname" type="text" class="textinput"/> <!></div> <div class="formelement"><label for="lastname" class="my-1 flex-1">Nom</label> <input id="lastname" type="text" class="textinput"/> <!></div></div> <div class="grid grid-cols-1 gap-x-4 md:grid-cols-2"><div class="formelement"><label for="lang" class="block my-1 flex-1">Langue</label> <select class="textinput"><option>English</option><option>Français</option></select> <!></div> <div class="formelement"><label for="timezone" class="block my-1 flex-1">Timezone</label> <!> <!></div></div> <div class="formelement"><label for="theme" class="block my-1 flex-1">Thème</label> <select class="textinput"><option>Automatique</option><option>Sombre</option><option>Clair</option></select> <!></div> <!></form></div> <div class="mb-4 formgroup container"><h2>Canaux de communication</h2> <!> <div class="flex gap-2 mt-6"><div><select class="textinput"><option></option><option>Email</option><option>Signal</option><option>Telegram</option><option>Whatsapp</option></select></div> <div class="flex-1"><input type="text" class="textinput"/></div> <div><!></div></div></div>`,1);function j(i,o){re(o,!0);let l=_(f(()=>o.data.me.user)),m=y(_([])),h=y(_({type:``,address:``})),g=y(_([])),x=new ce,T=y(_(A.None)),D=y(_(A.None));ae(async()=>{S(m,await O.listAddresses(l.id),!0),S(g,(await pe.listTimezones()).map(e=>({value:e,label:e})),!0)}),ie(()=>{oe(l.theme),se()});let de=e=>{e.preventDefault(),S(T,A.Saving,!0),ue(l.email)||x.set(`email`,`Adresse email invalide !`),l.firstname||x.set(`firstname`,`Le prénom est obligatoire !`),l.lastname||x.set(`lastname`,`Le nom est obligatoire !`),x.size==0&&O.update(l.id,l).then(()=>{S(T,A.Saved,!0)}).catch(e=>{S(T,A.Saving,!0),console.error(e)})},fe=()=>{S(D,A.Saving,!0),O.createAddress(l.id,n(h)).then(e=>{n(m).push(e),S(h,{type:``,address:``},!0),S(D,A.Saved,!0)}).catch(e=>{console.log(e)})},me=e=>{O.deleteAddress(l.id,e).then(()=>{S(m,n(m).filter(t=>t.id!=e),!0)}).catch(e=>{console.log(e)})},he=()=>{x.clear(),S(T,A.Changed,!0)},ge=e=>{e.focus()};var j=ye(),M=u(j),N=e(p(M),2),P=p(N),F=e(p(P),2);C(F),a(()=>w(F,()=>l.email,e=>l.email=e)),te(F,e=>ge?.(e));var be=e(F,2);k(be,{key:`email`,get errors(){return x}}),E(P);var I=e(P,2),L=p(I),R=e(p(L),2);C(R);var xe=e(R,2);k(xe,{key:`firstname`,get errors(){return x}}),E(L);var Se=e(L,2),z=e(p(Se),2);C(z);var Ce=e(z,2);k(Ce,{key:`lastname`,get errors(){return x}}),E(Se),E(I);var B=e(I,2),V=p(B),H=e(p(V),2),U=p(H);U.value=U.__value=`en`;var we=e(U);we.value=we.__value=`fr`,E(H);var Te=e(H,2);k(Te,{key:`lang`,get errors(){return x}}),E(V);var Ee=e(V,2),De=e(p(Ee),2);le(De,{get items(){return n(g)},valueMode:`id`,get value(){return l.timezone},seLine truncated
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,E as t,G as n,J as r,M as i,N as a,O as o,at as s,c,d as l,dt as u,et as d,it as f,j as p,q as m,u as h}from"../chunks/39JK5HWF.js";import{t as g}from"../chunks/B0qrqti_.js";import"../chunks/xihTtKlq.js";import"../chunks/DL7ZyBAF.js";import{t as _}from"../chunks/BRXBpvt8.js";import{n as v,t as y}from"../chunks/DRdGzrsF.js";import{t as b}from"../chunks/D3MDK1zR.js";import{t as x}from"../chunks/DFI7Zp3t.js";var S=o(`<div class="h-full w-full flex items-center public"><div class="m-auto w-96 max-w-full p-4"><img class="h-10 mb-4" alt="logo"/> <h1>Inscription</h1> <form><label for="email" class="block my-1 flex-1">Email</label> <input id="email" type="text" class="textinput"/> <!> <label for="firstname" class="block my-1 flex-1">Prénom</label> <input id="firstname" type="text" class="textinput"/> <!> <label for="lastname" class="block my-1 flex-1">Nom</label> <input id="lastname" type="text" class="textinput"/> <!> <label for="password" class="block my-1 flex-1">Mot de passe</label> <input id="password" type="password" class="textinput"/> <!> <label for="verifpassword" class="block my-1 flex-1">Vérification du mot de passe</label> <input id="verifpassword" type="password" class="textinput"/> <!> <button class="bt my-2 w-full ">Enregistrer</button> <!></form></div></div>`);function C(o,p){s(p,!0);let C=new v,w=r({email:``,firstname:``,lastname:``,password:``,verifPassword:``}),T=e=>{if(e.preventDefault(),C.clear(),b(w.email)||C.set(`email`,`Adresse email invalide !`),w.firstname||C.set(`firstname`,`Le prénom est obligatoire !`),w.lastname||C.set(`lastname`,`Le nom est obligatoire !`),w.password!==w.verifPassword&&C.set(`verifPassword`,`Les mots de pass ne correspondent pas.`),C.size==0){let e={method:`password`,email:w.email,firstname:w.firstname,lastname:w.lastname,password:w.password};x.register(e).then(()=>{g(`/`)}).catch(e=>{C.set(`submit`,`Erreur: `+e)})}};var E=S(),D=n(E),O=n(D),k=m(O,4),A=m(n(k),2);h(A),d(A,!0);var j=m(A,2);y(j,{key:`email`,get errors(){return C}});var M=m(j,4);h(M);var N=m(M,2);y(N,{key:`firstname`,get errors(){return C}});var P=m(N,4);h(P);var F=m(P,2);y(F,{key:`lastname`,get errors(){return C}});var I=m(F,4);h(I);var L=m(I,2);y(L,{key:`password`,get errors(){return C}});var R=m(L,4);h(R);var z=m(R,2);y(z,{key:`verifPassword`,get errors(){return C}});var B=m(z,4);y(B,{key:`submit`,get errors(){return C}}),u(k),u(D),u(E),e(()=>l(O,`src`,_)),a(`submit`,k,T),i(`change`,k,()=>{C.clear()}),c(A,()=>w.email,e=>w.email=e),c(M,()=>w.firstname,e=>w.firstname=e),c(P,()=>w.lastname,e=>w.lastname=e),c(I,()=>w.password,e=>w.password=e),c(R,()=>w.verifPassword,e=>w.verifPassword=e),t(o,E),f()}p([`change`]);export{C as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,I as i,K as a,L as o,N as s,Q as c,R as l,Z as u,_t as d,dt as f,et as p,ft as m,it as h,j as g,k as _,m as v,nt as y,ot as b,p as x,r as S,u as C,vt as w}from"../chunks/DGrvnoUE.js";import{t as T}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import"../chunks/CY9OlB4q.js";import{i as E,n as D}from"../chunks/DtfiK5fE.js";import{t as O}from"../chunks/BRXBpvt8.js";import{t as k}from"../chunks/D3MDK1zR.js";import{t as A}from"../chunks/BedKI9iq.js";var j=s(`<form><div class="flex"><label for="email" class="block mb-2 flex-1">Email</label> <a href="/recover-password" class="text-xs ">Mot de passe oublié ?</a></div> <div class="flex flex-row"><input type="text" class="textinput mr-1 flex-1"/> <button class="bt small" title="page suivante"><i class="icon-right-big"></i></button></div></form> <div class="my-4 text-xs"><a href="/register">Pas encore de compte ? Incrivez-vous.</a></div>`,1),M=s(`<form><div class="flex"><label for="email" class="block mb-2 flex-1">Mot de passe</label></div> <div class="flex flex-row"><input type="password" class="textinput mr-1 flex-1"/> <button class="bt small">Entrer</button></div> <a href="/login" class="text-xs">← Retour</a></form>`),N=s(`<button class="bt p-5 text-center"> </button>`),P=s(`<hr class="my-4"/> <div class="grid grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-4"></div>`,1),F=s(`<div class="h-full w-full flex items-center public"><div class="m-auto w-96 max-w-full p-4"><img class="h-10 mb-4" alt="logo"/> <h1>Identifiez-vous ...</h1> <!> <!></div></div>`);function I(i,s){m(s,!0);let I=p({email:``,password:``,validemail:!1}),L=h(p([]));S(()=>{A.oidcProviders().then(e=>{y(L,e??[],!0)}).catch(()=>{y(L,[],!0)})});let R=e=>{window.location.href=A.oidcLoginUrl(e)},z=()=>{I.validemail=k(I.email)},B=e=>{e.preventDefault(),A.login(I).then(e=>{D.user=e.user,E(e.accessToken),T(`/`)}).catch(e=>{console.log(e)})};var V=F(),H=u(V),U=u(H),W=e(U,4),G=t=>{var n=j(),r=c(n),i=e(u(r),2),a=u(i);x(a),b(a,!0),d(2),w(i),w(r),d(2),l(`submit`,r,z),C(a,()=>I.email,e=>I.email=e),g(t,n)},K=t=>{var n=M(),r=e(u(n),2),i=u(r);x(i),b(i,!0),d(2),w(r);var a=e(r,2);w(n),l(`submit`,n,B),C(i,()=>I.password,e=>I.password=e),o(`click`,a,()=>{I.validemail=!1}),g(t,n)};_(W,e=>{I.validemail?e(K,-1):e(G)});var q=e(W,2),J=i=>{var s=P(),l=e(c(s),2);r(l,21,()=>n(L),e=>e.id,(e,r)=>{var i=N(),s=u(i,!0);w(i),a(()=>{v(i,`title`,`Connexion avec ${n(r).label??``}`),t(s,n(r).label)}),o(`click`,i,()=>R(n(r).id)),g(e,i)}),w(l),g(i,s)};_(q,e=>{n(L).length>0&&e(J)}),w(H),w(V),a(()=>v(U,`src`,O)),g(i,V),f()}i([`click`]);export{I as component};
|
||||
@@ -1 +0,0 @@
|
||||
import{$ as e,B as t,E as n,G as r,J as i,K as a,M as o,N as s,O as c,P as l,T as u,V as d,W as f,a as p,at as m,b as h,d as g,dt as _,ft as v,g as y,h as b,it as x,j as S,q as C,r as w,w as T,x as E}from"../chunks/39JK5HWF.js";import{t as D}from"../chunks/B0qrqti_.js";import"../chunks/xihTtKlq.js";import{n as O,t as k}from"../chunks/DTCALkcP.js";import{t as A}from"../chunks/DtPl1hOB.js";import"../chunks/DL7ZyBAF.js";import{n as j,r as M}from"../chunks/BC84wEQu.js";import{t as N}from"../chunks/BDef5Ccs.js";import{t as P}from"../chunks/D8dI9nx6.js";import{t as F}from"../chunks/BRXBpvt8.js";var I=v({load:()=>L}),L=async()=>{let e=await N.me();return P.spaces=e.teams,P.current||(P.current=P.spaces[0].id),{spaceid:P.current,me:e}},R=i({sidebarDesktopOpen:!0,sidebarMobileOpen:!1,menuContentVisible:!0}),z=c(`<span class="ml-4"> </span>`),B=c(`<div class="my-2 block"><a class="p-2 w-full text-left menuitem block"><i></i> <!></a></div>`);function V(e,i){m(i,!0);let a=p(i,`label`,3,``),s=p(i,`icon`,3,``),c=p(i,`link`,3,``),l=e=>{e.preventDefault(),R.sidebarMobileOpen=!1,R.menuContentVisible=!1,D(c())};var d=B(),f=r(d),h=r(f),v=C(h,2),S=e=>{var i=z(),o=r(i,!0);_(i),t(()=>u(o,a())),n(e,i)};T(v,e=>{R.menuContentVisible&&e(S)}),_(f),_(d),t(()=>{g(f,`href`,c()),b(h,1,y([s()]))}),o(`click`,f,l),n(e,d),x()}S([`click`]);var H=c(`<div class="flex-1 p-3 font openonly"><img class="h-5" alt="logo"/></div>`),U=c(`<option> </option>`),W=c(`<div class="m-2"><div class="formelement"><select class="textinput"></select></div></div>`),G=c(`<div class="flex flex-row gap-2 p-2 "><div class="py-1 flex-1 flex flex-row text-xs"><div class="w-6 h-6 rounded-full bg-cyan-600 text-white flex items-center justify-center font-medium">FM</div> <div class="flex-1 ml-2 inline-flex items-center">Fabien Masson</div></div> <a href="/profile" class="bt small inline-flex items-center justify-center" title="Edition profil"><i class="icon-edit"></i></a> <button class="bt small" title="Déconnecter"><i class="icon-logout"></i></button></div>`),K=c(`<div class="flex flex-row italic mb-2"><!> <button id="hamburgerDesktop" title="Open menu"><i class="icon-menu pointer block p-2"></i></button> <button id="hamburgerMobile" title="Open menu"><i class="icon-menu pointer block p-2"></i></button></div> <!> <div id="menu" class="flex-1 overflow-y-scroll"><!> <!> <!> <!> <!></div> <div id="profile" class="w-full items-center border-t border-stone-200 dark:border-stone-800"><!></div>`,1);function q(i,s){m(s,!0);let c=()=>{M()};var d=K(),f=a(d),p=r(f),h=e=>{var i=H(),a=r(i);_(i),t(()=>g(a,`src`,F)),n(e,i)};T(p,e=>{R.menuContentVisible&&e(h)});var v=C(p,2),y=C(v,2);_(f);var b=C(f,2),S=e=>{var i=W(),a=r(i),o=r(a);E(o,21,()=>s.spaces,e=>e.id,(e,i)=>{var a=U(),o=r(a,!0);_(a);var s={};t(()=>{u(o,l(i).label),s!==(s=l(i).id)&&(a.value=(a.__value=l(i).id)??``)}),n(e,a)}),_(o),_(a),_(i),n(e,i)};T(b,e=>{R.menuContentVisible&&e(S)});var w=C(b,2),D=r(w);{let t=e(()=>`/${s.spaceid}`);V(D,{label:`Nouveau chat`,icon:`icon-plus`,get link(){return l(t)}})}var O=C(D,2);{let t=e(()=>`/${s.spaceid}/history`);V(O,{label:`Conversations`,icon:`icon-chat`,get link(){return l(t)}})}var k=C(O,2);{let t=e(()=>`/${s.spaceid}/tasks`);V(k,{label:`Planification`,icon:`icon-tasks`,get link(){return l(t)}})}var A=C(k,2);{let t=e(()=>`/${s.spaceid}/kb`);V(A,{label:`Connaissances`,icon:`icon-graduation-cap`,get link(){return l(t)}})}var j=C(A,2);{let t=e(()=>`/${s.spaceid}/settings`);V(j,{label:`Réglages`,icon:`icon-cog`,get link(){return l(t)}})}_(w);var N=C(w,2),P=r(N),I=e=>{var t=G(),i=C(r(t),4);_(t),o(`click`,i,c),n(e,t)},L=e=>{V(e,{label:`User`,icon:`icon-user`,link:`/profile`})};T(P,e=>{R.menuContentVisible?e(I):e(L,-1)}),_(N),o(`click`,v,function(...e){s.handleMenuDesktop?.apply(this,e)}),o(`click`,y,function(...e){s.handleMenuMobile?.apply(this,e)}),n(i,d),x()}S([`click`]);var J=c(`<span><a title="retour"><i class="icon-left-big"></i></a></span>`),Y=c(`<div id="outer"><div id="sidebar" class="flex flex-col z-10"><!></div> <div id="main"><div class="flex flex-col h-screen "><div class="px-2"><div class="header container"><h1 class="flex"><span class="flex-1"> </span> <!></h1></div></div> <div class="overflow-scroll flex-1 p-2"><!></div></div></div></div>`);function X(e,i){m(i,!0);let a=()=>{R.sidebarDesktopOpen=!R.sidebarDesktopOpen,R.sidebarDesktopOpen?setTimeout(()=>{R.menuContentVisible=R.sidebarDesktopOpen},200):R.menuContentVisible=R.sidebarDesktopOpen},o=()=>{R.sidebarMobileOpen=!R.sidebarMobileOpen,R.sidebarMobileOpen?setTimeout(()=>{R.menuContentVisible=R.sidebarMobileOpen},200):R.menuContentVisible=R.sidebarMobileOpen},c=()=>{R.menuContentVisible=window.innerWidth<640?R.sidebarMobileOpen:R.sidebarDesktopOpen};w(async()=>{c(),i.data.me?(j.user=i.data.me.user,O(j.user.theme),k(),j.status=`authenticated`):j.status=`unauthenticated`}),d(()=>{j.status==`unauthenticated`&&D(`/login`)});var l=Y();s(`resize`,f,c);var p=r(l);q(r(p),{get spaces(){return P.spaces},get spaceid(){return i.data.spacLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,I as i,K as a,L as o,N as s,Q as c,R as l,T as u,X as d,Z as f,a as p,at as m,bt as h,dt as g,et as _,ft as v,j as y,k as b,m as x,q as S,r as C,v as w,vt as T,y as E}from"../chunks/DGrvnoUE.js";import{t as D}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import{n as O,t as k}from"../chunks/DTCALkcP.js";import{t as A}from"../chunks/ffLBjIeN.js";import"../chunks/CY9OlB4q.js";import{n as j,r as M}from"../chunks/DtfiK5fE.js";import{t as N}from"../chunks/zsRwiIdn.js";import{t as P}from"../chunks/Cyrg28w2.js";import{t as F}from"../chunks/BRXBpvt8.js";var I=h({load:()=>L}),L=async()=>{let e=await N.me();return P.spaces=e.teams,P.current||(P.current=P.spaces[0].id),{spaceid:P.current,me:e}},R=_({sidebarDesktopOpen:!0,sidebarMobileOpen:!1,menuContentVisible:!0}),z=s(`<span class="ml-4"> </span>`),B=s(`<div class="my-2 block"><a class="p-2 w-full text-left menuitem block"><i></i> <!></a></div>`);function V(n,r){v(r,!0);let i=p(r,`label`,3,``),s=p(r,`icon`,3,``),c=p(r,`link`,3,``),l=e=>{e.preventDefault(),R.sidebarMobileOpen&&(R.sidebarMobileOpen=!1,R.menuContentVisible=!1),D(c())};var u=B(),d=f(u),m=f(d),h=e(m,2),_=e=>{var n=z(),r=f(n,!0);T(n),a(()=>t(r,i())),y(e,n)};b(h,e=>{R.menuContentVisible&&e(_)}),T(d),T(u),a(()=>{x(d,`href`,c()),w(m,1,E([s()]))}),o(`click`,d,l),y(n,u),g()}i([`click`]);var H=s(`<div class="flex-1 p-3 font openonly"><img class="h-5" alt="logo"/></div>`),U=s(`<option> </option>`),W=s(`<div class="m-2"><div class="formelement"><select class="textinput"></select></div></div>`),G=s(`<div class="flex flex-row gap-2 p-2 "><div class="py-1 flex-1 flex flex-row text-xs"><div class="w-6 h-6 rounded-full bg-cyan-600 text-white flex items-center justify-center font-medium">FM</div> <div class="flex-1 ml-2 inline-flex items-center">Fabien Masson</div></div> <a href="/profile" class="bt small inline-flex items-center justify-center" title="Edition profil"><i class="icon-edit"></i></a> <button class="bt small" title="Déconnecter"><i class="icon-logout"></i></button></div>`),K=s(`<div class="flex flex-row italic mb-2"><!> <button id="hamburgerDesktop" title="Open menu"><i class="icon-menu pointer block p-2"></i></button> <button id="hamburgerMobile" title="Open menu"><i class="icon-menu pointer block p-2"></i></button></div> <!> <div id="menu" class="flex-1 overflow-y-scroll"><!> <!> <!> <!> <!></div> <div id="profile" class="w-full items-center border-t border-stone-200 dark:border-stone-800"><!></div>`,1);function q(i,s){v(s,!0);let l=()=>{M()};var u=K(),d=c(u),p=f(d),h=e=>{var t=H(),n=f(t);T(t),a(()=>x(n,`src`,F)),y(e,t)};b(p,e=>{R.menuContentVisible&&e(h)});var _=e(p,2),S=e(_,2);T(d);var C=e(d,2),w=e=>{var i=W(),o=f(i),c=f(o);r(c,21,()=>s.spaces,e=>e.id,(e,r)=>{var i=U(),o=f(i,!0);T(i);var s={};a(()=>{t(o,n(r).label),s!==(s=n(r).id)&&(i.value=(i.__value=n(r).id)??``)}),y(e,i)}),T(c),T(o),T(i),y(e,i)};b(C,e=>{R.menuContentVisible&&e(w)});var E=e(C,2),D=f(E);{let e=m(()=>`/${s.spaceid}`);V(D,{label:`Nouveau chat`,icon:`icon-plus`,get link(){return n(e)}})}var O=e(D,2);{let e=m(()=>`/${s.spaceid}/history`);V(O,{label:`Conversations`,icon:`icon-chat`,get link(){return n(e)}})}var k=e(O,2);{let e=m(()=>`/${s.spaceid}/tasks`);V(k,{label:`Planification`,icon:`icon-tasks`,get link(){return n(e)}})}var A=e(k,2);{let e=m(()=>`/${s.spaceid}/kb`);V(A,{label:`Connaissances`,icon:`icon-graduation-cap`,get link(){return n(e)}})}var j=e(A,2);{let e=m(()=>`/${s.spaceid}/settings`);V(j,{label:`Réglages`,icon:`icon-cog`,get link(){return n(e)}})}T(E);var N=e(E,2),P=f(N),I=t=>{var n=G(),r=e(f(n),4);T(n),o(`click`,r,l),y(t,n)},L=e=>{V(e,{label:`User`,icon:`icon-user`,link:`/profile`})};b(P,e=>{R.menuContentVisible?e(I):e(L,-1)}),T(N),o(`click`,_,function(...e){s.handleMenuDesktop?.apply(this,e)}),o(`click`,S,function(...e){s.handleMenuMobile?.apply(this,e)}),y(i,u),g()}i([`click`]);var J=s(`<span><a title="retour"><i class="icon-left-big"></i></a></span>`),Y=s(`<div id="outer"><div id="sidebar" class="flex flex-col z-10"><!></div> <div id="main"><div class="flex flex-col h-screen "><div class="px-2"><div class="header container"><h1 class="flex mx-2"><span class="flex-1"> </span> <!></h1></div></div> <div class="overflow-scroll flex-1 p-2"><!></div></div></div></div>`);function X(n,r){v(r,!0);let i=()=>{R.sidebarDesktopOpen=!R.sidebarDesktopOpen,R.sidebarDesktopOpen?setTimeout(()=>{R.menuContentVisible=R.sidebarDesktopOpen},200):R.menuContentVisible=R.sidebarDesktopOpen},o=()=>{R.sidebarMobileOpen=!R.sidebarMobileOpen,R.sidebarMobileOpen?setTimeout(()=>{R.menuContentVisible=R.sidebarMobileOpen},200):R.menuContentVisible=R.sidebarMobileOpen},s=()=>{R.menuContentVisible=window.innerWidth<640?R.sidebarMobileOpen:R.sidebarDesktopOpen};C(async()=>{s(),r.data.me?(j.user=r.data.me.user,O(j.user.theme),k(),j.status=`authenticated`):j.status=`unauthenticated`}),S(()=>{j.status==`unauthenticated`&&D(`/login`)});var c=Y();l(`resize`,d,s);var p=f(c);q(f(p),{get spaces(){return P.spaces},geLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,I as t,K as n,L as r,N as i,R as a,Z as o,dt as s,et as c,ft as l,j as u,m as d,ot as f,p,u as m,vt as h}from"../chunks/DGrvnoUE.js";import{t as g}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import"../chunks/CY9OlB4q.js";import{t as _}from"../chunks/BRXBpvt8.js";import{n as v,t as y}from"../chunks/6mSXxE57.js";import{t as b}from"../chunks/D3MDK1zR.js";import{t as x}from"../chunks/BedKI9iq.js";var S=i(`<div class="h-full w-full flex items-center public"><div class="m-auto w-96 max-w-full p-4"><img class="h-10 mb-4" alt="logo"/> <h1>Inscription</h1> <form><label for="email" class="block my-1 flex-1">Email</label> <input id="email" type="text" class="textinput"/> <!> <label for="firstname" class="block my-1 flex-1">Prénom</label> <input id="firstname" type="text" class="textinput"/> <!> <label for="lastname" class="block my-1 flex-1">Nom</label> <input id="lastname" type="text" class="textinput"/> <!> <label for="password" class="block my-1 flex-1">Mot de passe</label> <input id="password" type="password" class="textinput"/> <!> <label for="verifpassword" class="block my-1 flex-1">Vérification du mot de passe</label> <input id="verifpassword" type="password" class="textinput"/> <!> <button class="bt my-2 w-full ">Enregistrer</button> <!></form></div></div>`);function C(t,i){l(i,!0);let C=new v,w=c({email:``,firstname:``,lastname:``,password:``,verifPassword:``}),T=e=>{if(e.preventDefault(),C.clear(),b(w.email)||C.set(`email`,`Adresse email invalide !`),w.firstname||C.set(`firstname`,`Le prénom est obligatoire !`),w.lastname||C.set(`lastname`,`Le nom est obligatoire !`),w.password!==w.verifPassword&&C.set(`verifPassword`,`Les mots de pass ne correspondent pas.`),C.size==0){let e={method:`password`,email:w.email,firstname:w.firstname,lastname:w.lastname,password:w.password};x.register(e).then(()=>{g(`/`)}).catch(e=>{C.set(`submit`,`Erreur: `+e)})}};var E=S(),D=o(E),O=o(D),k=e(O,4),A=e(o(k),2);p(A),f(A,!0);var j=e(A,2);y(j,{key:`email`,get errors(){return C}});var M=e(j,4);p(M);var N=e(M,2);y(N,{key:`firstname`,get errors(){return C}});var P=e(N,4);p(P);var F=e(P,2);y(F,{key:`lastname`,get errors(){return C}});var I=e(F,4);p(I);var L=e(I,2);y(L,{key:`password`,get errors(){return C}});var R=e(L,4);p(R);var z=e(R,2);y(z,{key:`verifPassword`,get errors(){return C}});var B=e(z,4);y(B,{key:`submit`,get errors(){return C}}),h(k),h(D),h(E),n(()=>d(O,`src`,_)),a(`submit`,k,T),r(`change`,k,()=>{C.clear()}),m(A,()=>w.email,e=>w.email=e),m(M,()=>w.firstname,e=>w.firstname=e),m(P,()=>w.lastname,e=>w.lastname=e),m(I,()=>w.password,e=>w.password=e),m(R,()=>w.verifPassword,e=>w.verifPassword=e),u(t,E),s()}t([`change`]);export{C as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{bt as e,dt as t,ft as n}from"../chunks/DGrvnoUE.js";import{t as r}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import"../chunks/CY9OlB4q.js";import{t as i}from"../chunks/Cyrg28w2.js";var a=e({load:()=>o}),o=async({parent:e})=>{let{me:t}=await e();return{me:t}};function s(e,a){n(a,!0),r(`/${i.current}/`,{replaceState:!0}),t()}export{s as component,a as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{at as e,ft as t,it as n}from"../chunks/39JK5HWF.js";import{t as r}from"../chunks/B0qrqti_.js";import"../chunks/xihTtKlq.js";import"../chunks/DL7ZyBAF.js";import{t as i}from"../chunks/D8dI9nx6.js";var a=t({load:()=>o}),o=async({parent:e})=>{let{me:t}=await e();return{me:t}};function s(t,a){e(a,!0),r(`/${i.current}/`,{replaceState:!0}),n()}export{s as component,a as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{B as e,G as t,N as n,R as r,Z as i,_t as a,b as o,bt as s,dt as c,et as l,ft as u,it as d,j as f,nt as p,p as m,u as h,vt as g}from"../chunks/DGrvnoUE.js";import{t as _}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import"../chunks/CY9OlB4q.js";import{t as v}from"../chunks/BYWIgY43.js";import{t as y}from"../chunks/BYYkuYgk.js";var b=s({load:()=>x}),x=({params:e})=>({title:`Nouvelle conversation`,spaceId:e.space}),S=n(`<div class="h-full w-full flex items-center public"><div class="container"><form class="request flex w-full"><input class="chatinput w-full flex-1 focus:outline-hidden focus:shadow-none focus:ring-0" type="text" placeholder="Demande ce que tu veux"/> <button class="chatbutton">Go</button></form></div></div>`);function C(n,s){u(s,!0);let b=l({}),x=d(``),C=async()=>{y.createChat(s.data.spaceId,b).then(t=>{_(`/${s.data.spaceId}/${t.id}`,{state:{prompt:e(x)}})}).catch(e=>console.log(e))};var w=S(),T=i(w),E=i(T),D=i(E);m(D),t(()=>h(D,()=>e(x),e=>p(x,e))),o(D,e=>v?.(e)),a(2),g(E),g(T),g(w),r(`submit`,E,C),f(n,w),c()}export{C as component,b as universal};
|
||||
@@ -1,6 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Conversation`}}var a=t(`<div class="container">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -1,6 +0,0 @@
|
||||
import{A as e,E as t,ft as n,ut as r}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var i=n({load:()=>a});function a(){return{title:`Historique`}}function o(n){r();var i=e(`Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
|
||||
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?`);t(n,i)}export{o as component,i as universal};
|
||||
@@ -0,0 +1,72 @@
|
||||
import{$ as e,A as t,B as n,E as r,F as i,G as a,H as o,K as s,M as c,N as l,O as u,Q as d,R as f,S as p,T as m,U as h,Z as g,_,_t as v,a as y,at as b,b as x,bt as S,c as C,d as w,dt as ee,et as te,f as T,ft as ne,it as E,j as D,k as O,lt as k,m as A,nt as j,o as re,p as ie,pt as ae,q as M,r as N,s as P,st as oe,u as se,ut as ce,v as le,vt as F,w as I,y as ue,yt as L,z as R}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as de}from"../chunks/ffLBjIeN.js";import{t as fe}from"../chunks/BYWIgY43.js";import{t as pe}from"../chunks/BYYkuYgk.js";import"../chunks/B6JECYQD.js";var me=S({load:()=>he}),he=async({params:e})=>{let t=await pe.getChat(e.space,e.conversation);return{title:t.chat.title,spaceId:e.space,chatId:e.conversation,chatWithMessage:t}},ge=l(`<a><!></a>`);function _e(e,t){var n=ge();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ve=l(`<abbr><!></abbr>`);function ye(e,t){var n=ve();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var be=l(`<address><!></address>`);function xe(e,t){var n=be();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Se=l(`<article><!></article>`);function Ce(e,t){var n=Se();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var we=l(`<aside><!></aside>`);function Te(e,t){var n=we();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Ee=l(`<audio><!></audio>`);function De(e,t){var n=Ee();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Oe=l(`<b><!></b>`);function ke(e,t){var n=Oe();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Ae=l(`<bdi><!></bdi>`);function je(e,t){var n=Ae();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Me=l(`<bdo><!></bdo>`);function Ne(e,t){var n=Me();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Pe=l(`<blockquote><!></blockquote>`);function Fe(e,t){var n=Pe();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Ie=l(`<br/>`);function Le(e,t){let n=y(t,`attributes`,19,()=>({}));var r=Ie();T(r,()=>({...n()})),D(e,r)}var Re=l(`<button><!></button>`);function ze(e,t){var n=Re();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Be=l(`<canvas><!></canvas>`);function Ve(e,t){var n=Be();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var He=l(`<cite><!></cite>`);function Ue(e,t){var n=He();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var We=l(`<code><!></code>`);function Ge(e,t){var n=We();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Ke=l(`<datalist><!></datalist>`);function qe(e,t){var n=Ke();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Je=l(`<dd><!></dd>`);function Ye(e,t){var n=Je();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Xe=l(`<del><!></del>`);function Ze(e,t){var n=Xe();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Qe=l(`<details><!></details>`);function $e(e,t){var n=Qe();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var et=l(`<dfn><!></dfn>`);function tt(e,t){var n=et();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var nt=l(`<dialog><!></dialog>`);function rt(e,t){var n=nt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var it=l(`<div><!></div>`);function at(e,t){var n=it();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ot=l(`<dl><!></dl>`);function st(e,t){var n=ot();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ct=l(`<dt><!></dt>`);function lt(e,t){var n=ct();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ut=l(`<em><!></em>`);function dt(e,t){var n=ut();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ft=l(`<embed/>`);function pt(e,t){var n=ft();T(n,()=>({...t.attributes})),R(n),D(e,n)}var mt=l(`<fieldset><!></fieldset>`);function ht(e,t){var n=mt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var gt=l(`<footer><!></footer>`);function _t(e,t){var n=gt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var vt=l(`<form><!></form>`);function yt(e,t){var n=vt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var bt=l(`<h1><!></h1>`);function xt(e,t){var n=bt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var St=l(`<h2><!></h2>`);function Ct(e,t){var n=St();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var wt=l(`<h3><!></h3>`);function Tt(e,t){var n=wt();T(n,()=>({...t.attributes}));var r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Et=l(`<h4><!></h4>`);function Dt(e,t){var n=Et();T(nLine truncated
|
||||
]`).replace(`lheading`,Wr).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},si=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ci=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,li=/^( {2,}|\\)\n(?!\s*$)[ \t]*/,ui=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,di=/[\p{P}\p{S}]/u,fi=/[\s\p{P}\p{S}]/u,pi=/[^\s\p{P}\p{S}]/u,mi=z(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,fi).getRegex(),hi=/[\p{Pi}\p{Ps}"']/u,gi=/(?!~)[\p{P}\p{S}]/u,_i=/(?!~)[\s\p{P}\p{S}]/u,vi=/(?:[^\s\p{P}\p{S}]|~)/u,yi=z(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,Ir?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),bi=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,xi=z(bi,`u`).replace(/punct/g,di).getRegex(),Si=z(bi,`u`).replace(/punct/g,gi).getRegex(),Ci=z(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,hi).replace(/punct/g,di).getRegex(),wi=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Ti=z(wi,`gu`).replace(/notPunctSpace/g,pi).replace(/punctSpace/g,fi).replace(/punct/g,di).getRegex(),Ei=z(wi,`gu`).replace(/notPunctSpace/g,vi).replace(/punctSpace/g,_i).replace(/punct/g,gi).getRegex(),Di=z(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,pi).replace(/punctSpace/g,fi).replace(/punct/g,di).getRegex(),Oi=z(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,pi).replace(/punctSpace/g,fi).replace(/punct/g,di).getRegex(),ki=z(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,pi).replace(/punctSpace/g,fi).replace(/punct/g,di).getRegex(),Ai=z(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,di).getRegex(),ji=z(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,pi).replace(/punctSpace/g,fi).replace(/punct/g,di).getRegex(),Mi=z(/\\(punct)/,`gu`).replace(/punct/g,di).getRegex(),Ni=z(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Pi=z(Qr).replace(`(?:-->|$)`,`-->`).getRegex(),Fi=z(`^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,Pi).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ii=/\[(?:\\[\s\S]|[^\[\]\\])*\]/,Li=z(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace(`brackets`,Ii).getRegex(),Ri=z(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Li).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),zi=z(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Li).replace(`ref`,Jr).getRegex(),Bi=z(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Jr).getRegex(),Vi=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/,Hi=z(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace(`brackets`,Ii).getRegex(),Ui=z(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,z(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Hi).replace(`ref`,Vi).getRegex()).replace(`nolink`,z(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Vi).getRegex()).getRegex(),Wi=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Gi=z(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g,/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),Ki={_backpedal:Pr,anyPunctLine truncated
|
||||
`),n=t.length-1;for(;n>=0&&B.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
|
||||
`)}function aa(e){return e.trim().toLowerCase().toUpperCase().toLowerCase()}function oa(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function sa(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function ca(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`),c=e[0].charAt(0)===`!`;r.state.inLink=!0;let l=r.state.linkEmitted,u=r.state.inRawBlock;r.state.linkEmitted=!1;let d=r.inlineTokens(s),f=r.state.linkEmitted;if(r.state.linkEmitted=l,r.state.inLink=!1,!c){if(f){r.state.inRawBlock=u;return}r.state.linkEmitted=!0}return{type:c?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:d}}function la(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
||||
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return e.slice(Math.min(r.length,i.length))}).join(`
|
||||
`)}function ua(e,t,n,r){if(!t.includes(`<`))return!1;for(let i=0;i<t.length;i++){if(t[i]===`\\`){i++;continue}if(t[i]==="`"){let e=r.inline.code.exec(t.slice(i));if(e){i+=e[0].length-1;continue}}if(t[i]!==`<`)continue;let a=e.slice(n+i),o=r.inline.tag.exec(a)||r.inline.autolink.exec(a);if(o){if(o[0].length>t.length-i)return!0;i+=o[0].length-1}}return!1}var da=class{options;rules;lexer;constructor(e){this.options=e||Mr}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=this.options.pedantic?t[0]:ia(t[0]);return{type:`code`,raw:e,codeBlockStyle:`indented`,text:e.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=la(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=ra(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceTabChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:ra(t[0],`
|
||||
`),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:ra(t[0],`
|
||||
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=ra(t[0],`
|
||||
`).split(`
|
||||
`),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o;for(o=0;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
|
||||
`),c=s.replace(this.rules.other.blockquoteSetextReplace,`
|
||||
$1`).replace(this.rules.other.blockquoteSetextReplace2,``);n=n?`${n}
|
||||
${s}`:s,r=r?`${r}
|
||||
${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=l,e.length===0)break;let u=i.at(-1);if(u?.type===`code`)break;if(u?.type===`blockquote`){let t=u,a=e.join(`
|
||||
`),o=t.raw+`
|
||||
`+a.replace(this.rules.other.blockquoteSetextReplace2,``),s=this.blockquote(o);i[i.length-1]=s;let c=o.substring(s.raw.length).replace(/^\n/,``),l=c?c.split(`
|
||||
`).length:0,d=l?e.slice(0,-l):e;d.length>0&&(n=`${n}
|
||||
${d.join(`
|
||||
`)}`),r=r.substring(0,r.length-t.text.length)+s.text;break}if(u?.type===`list`){let t=u,a=t.raw+`
|
||||
`+e.join(`
|
||||
`),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
|
||||
`);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=t[2].split(`
|
||||
`,1)[0],l=t[1].length,u=this.options.pedantic?sa(c,l):c.replace(this.rules.other.leadingSpaceTab,e=>sa(e,l)),d=e.split(`
|
||||
`,1)[0],f=!u.trim(),p=0;if(this.options.pedantic?(p=2,s=u.trimStart()):f?p=l+1:(p=u.search(this.rules.other.nonSpaceChar),p=p>4?1:p,s=u.slice(p),p+=l),f&&this.rules.other.blankLine.test(d)&&(r+=d+`
|
||||
`,e=e.substring(d.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(p),n=this.rules.other.hrRegex(p),i=this.rules.other.fencesBeginRegex(p),a=this.rules.other.headingBeginRegex(p),o=this.rules.other.htmlBeginRegex(p),c=this.rules.other.blockquoteBeginRegex(p);for(;e;){let l=e.split(`
|
||||
`,1)[0],m;if(d=l,this.options.pedantic?(d=d.replace(this.rules.other.listReplaceNesting,` `),m=d):m=d.replace(this.rules.other.leadingSpaceTab,e=>e.replace(this.rules.other.tabCharGlobal,` `)),i.test(d)||a.test(d)||o.test(d)||c.test(d)||t.test(d)||n.test(d))break;if(m.search(this.rules.other.nonSpaceChar)>=p||!d.trim())s+=`
|
||||
`+m.slice(p);else{if(f||u.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(u)||a.test(u)||n.test(u))break;s+=`
|
||||
`+d}f=!d.trim(),r+=l+`
|
||||
`,e=e.substring(l.length+1),u=m.slice(p)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items)if(this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]),!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}for(let e of i.items){let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&=!1}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=ia(t[0]);return{type:`html`,block:!0,raw:e,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=aa(t[1]).replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:ra(t[0],`
|
||||
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=na(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
|
||||
`):[],a={type:`table`,raw:ra(t[0],`
|
||||
`),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(na(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:ra(t[0],`
|
||||
`),depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
|
||||
`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&ua(e,t[1],n,this.rules))return;let r=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let e=ra(r.slice(0,-1),`\\`);if((r.length-e.length)%2==0)return}else{let e=oa(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let i=t[2],a=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(i);e&&(i=e[1],a=e[3])}else a=t[3]?t[3].slice(1,-1):``;return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(i=this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i.slice(1):i.slice(1,-1)),ca(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,`$1`),title:a&&a.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=n[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&ua(e,n[1],r,this.rules))return;let i=t[aa((n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `))];if(!i){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return ca(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let i=[...r[0]].length-1,a,o,s=i,c=0,l=r[0][0],u=n===l,d=l===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+i);(r=d.exec(t))!==null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){s+=o;continue}if(r[5]||r[6]){if(i%3&&!((i+o)%3)){c+=o;continue}if(u)break}if(s-=o,s>0)continue;o=Math.min(o,o+s+c);let t=[...r[0]][0].length,n=e.slice(0,i+r.index+t+o);if(Math.min(i,o)%2){let e=n.slice(1,-1);return{type:`em`,raw:n,text:e,tokens:this.lexer.inlineTokens(e)}}let l=n.slice(2,-2);return{type:`strong`,raw:n,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:e?t[0]:ea(t[0]),escaped:e}}}},H=class e{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Mr,this.options.tokenizer=this.options.tokenizer||new da,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inR
Line truncated
|
||||
`),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(B.tabCharGlobal,` `).replace(B.spaceLine,``));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(n=>(i=n.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let n=t.at(-1);i.raw.length===1&&n!==void 0?n.raw+=`
|
||||
`:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
||||
`)?``:`
|
||||
`)+i.raw,n.text+=`
|
||||
`+i.text,this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
||||
`)?``:`
|
||||
`)+i.raw,n.text+=`
|
||||
`+i.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},t.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),t.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let t=1/0,n=e.slice(1),r;this.options.extensions.startBlock.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(a=e.substring(0,t+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let r=t.at(-1);n&&r?.type===`paragraph`?(r.raw+=(r.raw.endsWith(`
|
||||
`)?``:`
|
||||
`)+i.raw,r.text+=`
|
||||
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
||||
`)?``:`
|
||||
`)+i.raw,n.text+=`
|
||||
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}linkInText(e){if(!e.includes(`[`))return!1;let t=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(t.test(n[0])&&e.charAt(n.index-1)!==`!`)return!0;for(let t of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let e=t[0],n=e.lastIndexOf(`[`);if(!(e.charAt(0)===`!`||!Object.hasOwn(this.tokens.links,aa(e.slice(n+1,-1))))&&!(n>1&&this.linkInText(e.slice(1,n-1))))return!0}return!1}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links&&e.includes(`[`)){let e=this.tokenizer.rules.inline.reflinkSearch,t=n=>{let r=n.lastIndexOf(`[`);if(!Object.hasOwn(this.tokens.links,aa(n.slice(r+1,-1))))return n;if(r>1&&n.charAt(0)!==`!`){let i=n.slice(1,r-1);if(this.linkInText(i))return`[`+i.replace(e,t)+`][`+`a`.repeat(n.length-r-2)+`]`}return`[`+`a`.repeat(n.length-2)+`]`};n=n.replace(e,t)}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,e=>`+`.repeat(e.length)),n=n.replace(this.tokenizer.rules.inline.blockSkip,(e,t,n)=>{let r=n?n.length:0;return e.slice(0,r)+`[`+`a`.repeat(e.length-r-2)+`]`}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let r=!1,i=``,a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=``),r=!1;let o;if(this.options.extensions?.inline?.some(n=>(o=n.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let n=t.at(-1);o.type===`text`&&n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let s=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(s=e.substring(0,t+1))}if(o=this.tokenizer.inlineText(s)){e=e.substring(o.raw.length),o.raw.slice(-1)!==`_`&&(i=o.raw.slice(-1)),r=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},fa=class{options;parser;constructor(e){this.options=e||Mr}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(B.notSpaceStart)?.[0],i=e?e.replace(B.endingNewline,``)+`
|
||||
`:``;return r?`<pre><code class="language-`+V(r)+`">`+(n?i:V(i,!0))+`</code></pre>
|
||||
`:`<pre><code>`+(n?i:V(i,!0))+`</code></pre>
|
||||
`}blockquote({tokens:e}){return`<blockquote>
|
||||
${this.parser.parse(e)}</blockquote>
|
||||
`}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
||||
`}hr(e){return`<hr>
|
||||
`}list(e){let t=e.ordered,n=e.start,r=``;for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let i=t?`ol`:`ul`,a=t&&n!==1?` start="`+n+`"`:``;return`<`+i+a+`>
|
||||
`+r+`</`+i+`>
|
||||
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
|
||||
`}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
|
||||
`}table(e){let t=``,n=``;for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r=``;for(let t=0;t<e.rows.length;t++){let i=e.rows[t];n=``;for(let e=0;e<i.length;e++)n+=this.tablecell(i[e]);r+=this.tablerow({text:n})}return r&&=`<tbody>${r}</tbody>`,`<table>
|
||||
<thead>
|
||||
`+t+`</thead>
|
||||
`+r+`</table>
|
||||
`}tablerow({text:e}){return`<tr>
|
||||
${e}</tr>
|
||||
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
||||
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${V(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:r,autolink:i}){let a=i?V(n,!0):this.parser.parseInline(r),o=ta(e);if(o===null)return a;e=V(o,i);let s=`<a href="`+e+`"`;return t&&(s+=` title="`+V(t)+`"`),s+=`>`+a+`</a>`,s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=ta(e);if(i===null)return V(n);e=i;let a=`<img src="${V(e)}" alt="${V(n)}"`;return t&&(a+=` title="${V(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:V(e.text)}},pa=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},U=class e{options;renderer;textRenderer;constructor(e){this.options=e||Mr,this.options.renderer=this.options.renderer||new fa,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new pa}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},ma=class{options;block;constructor(e){this.options=e||Mr}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?H.lex:H.lexInline}provideParser(e=this.block){return e?U.parse:U.parseInline}},ha=class{defaults=jr();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=U;Renderer=fa;TextRenderer=pa;Lexer=H;Tokenizer=da;Hooks=ma;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`Line truncated
|
||||
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+V(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},ga=new ha;function W(e,t){return ga.parse(e,t)}W.options=W.setOptions=function(e){return ga.setOptions(e),W.defaults=ga.defaults,Nr(W.defaults),W},W.getDefaults=jr,W.defaults=Mr;function _a(...e){return ga.use(...e),W.defaults=ga.defaults,Nr(W.defaults),W}W.use=_a,W.walkTokens=function(e,t){return ga.walkTokens(e,t)},W.parseInline=ga.parseInline,W.Parser=U,W.parser=U.parse,W.Renderer=fa,W.TextRenderer=pa,W.Lexer=H,W.lexer=H.lex,W.Tokenizer=da,W.Hooks=ma,W.parse=W,W.options,W.setOptions,W.walkTokens,W.parseInline,U.parse,H.lex;var va=l(`<blockquote><!></blockquote>`);function ya(e,t){var n=va(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var ba=l(`<br/>`);function xa(e){var t=ba();D(e,t)}var Sa=l(`<pre><code> </code></pre>`);function Ca(e,n){var r=Sa(),i=g(r),a=g(i,!0);F(i),F(r),s(()=>{le(r,1,ue(n.lang)),t(a,n.text)}),D(e,r)}var wa=l(`<code> </code>`);function Ta(e,n){ne(n,!0);var r=wa(),i=g(r,!0);F(r),s(e=>t(i,e),[()=>n.raw.replace(/`/g,``)]),D(e,r),ee()}var Ea=l(`<del><!></del>`);function Da(e,t){var n=Ea(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Oa=l(`<em><!></em>`);function ka(e,t){var n=Oa(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}function Aa(e,n){v();var r=i();s(()=>t(r,n.text)),D(e,r)}var ja=l(`<h1><!></h1>`),Ma=l(`<h2><!></h2>`),Na=l(`<h3><!></h3>`),Pa=l(`<h4><!></h4>`),Fa=l(`<h5><!></h5>`),Ia=l(`<h6><!></h6>`);function La(e,r){ne(r,!0);let a=y(r,`id`,3,void 0),o=b(()=>r.options.headerIds?a()??`${r.options.headerPrefix}${r.slug(r.text)}`:void 0);var l=c(),u=d(l),f=e=>{var t=ja(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},p=e=>{var t=Ma(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},h=e=>{var t=Na(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},_=e=>{var t=Pa(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},v=e=>{var t=Fa(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},x=e=>{var t=Ia(),i=g(t);m(i,()=>r.children??L),F(t),s(()=>A(t,`id`,n(o))),D(e,t)},S=e=>{var n=i();s(()=>t(n,r.raw)),D(e,n)};O(u,e=>{r.depth===1?e(f):r.depth===2?e(p,1):r.depth===3?e(h,2):r.depth===4?e(_,3):r.depth===5?e(v,4):r.depth===6?e(x,5):e(S,-1)}),D(e,l),ee()}var Ra=l(`<hr/>`);function za(e){var t=Ra();D(e,t)}var Ba=l(`<img/>`);function Va(e,t){ne(t,!0);let r=(e,t=L)=>{var r=Ba();let c;C(r,e=>j(g,e),()=>n(g)),x(r,(e,t)=>k?.(e,t),t),s(()=>{A(r,`src`,n(w)?t().source:void 0),A(r,`data-src`,i()),A(r,`title`,a()),A(r,`alt`,o()),A(r,`loading`,l()?`lazy`:`eager`),c=le(r,1,`svelte-1hoglcg`,null,c,{"fade-in":p()&&n(te)&&!n(T),visible:!p()&&n(te)&&!n(T),error:n(T)})}),f(`load`,r,re),f(`error`,r,ie),R(r),D(e,r)},i=y(t,`href`,3,void 0),a=y(t,`title`,3,void 0),o=y(t,`text`,3,``),l=y(t,`lazy`,3,!0),p=y(t,`fadeIn`,3,!0),m=b(()=>i()===``?void 0:i()),h=b(()=>({source:n(m)})),g=E(void 0),_=E(void 0),v=E(void 0),S=E(!1),w=b(()=>n(S)||!l()),te=b(()=>n(_)===n(h)),T=b(()=>n(v)===n(h)),O=new WeakMap,k=(e,t)=>(O.set(e,t),{update(t){O.set(e,t)},destroy(){O.delete(e)}});M(()=>{l()||j(S,!0)}),M(()=>{let e=n(g);if(n(w)||!e)return;if(typeof IntersectionObserver>`u`){j(S,!0);return}let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&(j(S,!0),t.disconnect())},{rootMargin:`50px`});return t.observe(e),()=>{t.disconnect()}});let re=e=>{let t=O.get(e.currentTarget);t&&n(v)!==t&&j(_,t)},ie=e=>{let t=O.get(e.currentTarget);t&&(j(v,t),j(_,t))};var ae=c(),N=d(ae);u(N,()=>n(h),e=>{r(e,()=>n(h))}),D(e,ae),ee()}var Ha=l(`<a><!></a>`);function Ua(e,t){let n=y(t,`href`,3,void 0),r=y(t,`title`,3,void 0);var i=Ha(),a=g(i);m(a,()=>t.children??L),F(i),s(()=>{A(i,`href`,n()),A(i,`title`,r())}),D(e,i)}var Wa=l(`<ol><!></ol>`),Ga=l(`<ul><!></ul>`);function Ka(e,t){let n=y(t,`ordered`,3,!1),r=y(t,`start`,3,1);var i=c(),a=d(i),o=e=>{var n=Wa(),i=g(n);m(i,()=>t.children??L),F(n),s(()=>A(n,`start`,r())),D(e,n)},l=e=>{var n=Ga(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)};O(a,e=>{n()?e(o):e(l,-1)}),D(e,i)}var qa=l(`<li><!></li>`);function Ja(e,t){y(t,`listItemIndex`,3,void 0);var n=qa(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var Ya=l(`<p><!></p>`);function Xa(e,t){var n=Ya(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}function Za(e,n){v();var r=i();s(()=>t(r,n.text)),D(e,r)}var Qa=l(`<strong><!></strong>`);function $a(e,t){var n=Qa(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var eo=l(`<table><!></table>`);function to(e,t){var n=eo(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var no=l(`<tbody><!></tbody>`);function ro(e,t){var n=no(),r=g(n);m(r,()=>t.children??L),F(n),D(e,n)}var io=l(`<th><!></th>`),ao=l(`<td><!></td>`);function oo(e,t){let r=b(()=>t.align?`text-align: ${t.align}`:void 0);var i=c(),a=d(i),o=e=>{var i=io(),a=g(i);m(a,()=>t.children??L),F(i),s(()=>_(i,n(r))),D(e,i)},l=e=>{var i=ao(),a=g(i);m(a,()=>t.children??L),F(i),s(()=>_(i,n(r))),D(e,i)};O(a,e=>{t.header?e(o):e(l,-
Line truncated
|
||||
|
||||
`))return!0;switch(e.type){case`heading`:case`hr`:return e.raw.endsWith(`
|
||||
`);default:return!1}};hasPotentialReferenceUse=e=>!e.includes(`[`)||!e.includes(`]`)?!1:pc.test(e)||mc.test(e);hasPotentialReferenceUseOutsideDefinitions=e=>{if(!e.includes(`[`)||!e.includes(`]`))return!1;for(let t of e.split(`
|
||||
`))if(!hc.test(t)&&this.hasPotentialReferenceUse(t))return!0;return!1};hasReferenceDefinition=e=>!e.includes(`[`)||!e.includes(`]`)?!1:hc.test(e);appendIntroducesMatch=(e,t)=>{if(t(e.slice(this.prevSource.length)))return!0;let n=this.prevSource.lastIndexOf(`
|
||||
`)+1;return!t(this.prevSource.slice(n))&&t(e.slice(n))};isAppendOnlyUpdate=e=>this.prevSource!==``&&e.startsWith(this.prevSource);hasNewReferenceDefinition=e=>e.startsWith(this.prevSource)?this.appendIntroducesMatch(e,this.hasReferenceDefinition):!1;appendedDefinitionInvalidatesTail=e=>this.prevHasPotentialReferenceUse&&this.hasNewReferenceDefinition(e);canUseTailWindow=(e,t,n=this.isAppendOnlyUpdate(e),r=this.appendedDefinitionInvalidatesTail(e))=>{if(this.tailWindowDisabled||this.prevSource===``||this.prevTokens.length===0||!n||t.reparseOffset<=0||r)return!1;if(this.prevHasReferenceDefinition){let n=e.slice(t.reparseOffset);if(this.hasPotentialReferenceUseOutsideDefinitions(n))return!1}return!0};parseSource=(e,t,n,r)=>{if(!this.canUseTailWindow(e,t,n,r))return{tokens:$s(e,this.options,!1),tailTokens:[],usedTailWindow:!1};let i=$s(e.slice(t.reparseOffset),this.options,!1);return{tokens:[...this.prevTokens.slice(0,t.prefixCount),...i],tailTokens:i,usedTailWindow:!0}};hasAnyHtmlSpanMismatch=e=>e.some(this.hasHtmlSpanMismatch);getNextTailWindowBoundary=(e,t,n)=>{if(e.length===0||n)return{prefixCount:0,reparseOffset:0};let r=e[e.length-1];return this.isStableAtSourceEnd(r)?{prefixCount:e.length,reparseOffset:t}:{prefixCount:e.length-1,reparseOffset:t-this.getTokenSourceLength(r)}};updateCachedState=(e,t,n,r)=>{let i=t.usedTailWindow?this.prevHasHtmlSpanMismatch||this.hasAnyHtmlSpanMismatch(t.tailTokens):this.hasAnyHtmlSpanMismatch(t.tokens);this.prevHasPotentialReferenceUse=n?this.prevHasPotentialReferenceUse||this.appendIntroducesMatch(e,this.hasPotentialReferenceUseOutsideDefinitions):this.hasPotentialReferenceUseOutsideDefinitions(e),this.prevHasReferenceDefinition=n?this.prevHasReferenceDefinition||r:this.hasReferenceDefinition(e),this.prevSource=e,this.prevTokens=t.tokens,this.prevHasHtmlSpanMismatch=i,this.prevTailWindowBoundary=this.getNextTailWindowBoundary(t.tokens,e.length,i)};isReferenceSensitiveUpdate=(e,t,n)=>t?n:(this.prevHasReferenceDefinition||this.hasReferenceDefinition(e))&&(this.hasPotentialReferenceUse(this.prevSource)||this.hasPotentialReferenceUse(e));update=e=>{let t=this.getTailWindowBoundary(),n=this.isAppendOnlyUpdate(e),r=n&&this.appendIntroducesMatch(e,this.hasReferenceDefinition),i=this.prevHasPotentialReferenceUse&&r,a=this.parseSource(e,t,n,i),o=a.tokens;if(typeof this.options.walkTokens==`function`)for(let e of o)this.options.walkTokens(e);let s=this.isReferenceSensitiveUpdate(e,n,i),c=n&&!s,l=0,u=a.usedTailWindow?t.reparseOffset:0;if(!s){let e=Math.min(this.prevTokens.length,o.length);for(;l<e;){let e=this.prevTokens[l],n=o[l];if(!oc(e,n))break;a.usedTailWindow?u!==void 0&&l>=t.prefixCount&&(u+=this.getTokenSourceLength(n)):u!==void 0&&(this.hasHtmlSpanMismatch(n)?u=void 0:u+=this.getTokenSourceLength(n)),l++}}return this.updateCachedState(e,a,n,r),{tokens:o,divergeAt:l,divergeOffset:u,canReuse:c,usedTailWindow:a.usedTailWindow}}},_c=e=>typeof e==`object`&&!!e,vc=e=>_c(e)&&typeof e.id==`string`&&typeof e.text==`string`,yc=e=>{let t=``;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n),i=e[n];t+=/[A-Za-z0-9_-]/.test(i)?i:`~${r.toString(16).padStart(4,`0`)}`}return t},bc=(e,t=1)=>{let n=`fnref-${yc(e)}`;return t===1?n:`${n}:ref:${t}`},xc=e=>{let t=new WeakMap,n=new WeakMap,r=new Map,i=new Map,a=new Set,o=[],s=e=>{if(Array.isArray(e))for(let t of e)Array.isArray(t)?s(t):_c(t)&&c(t)},c=e=>{if(e.type===`footnoteRef`&&typeof e.id==`string`){let n=(r.get(e.id)??0)+1,a=bc(e.id,n);r.set(e.id,n),t.set(e,Object.freeze({referenceId:a}));let o=i.get(e.id);o?o.push(a):i.set(e.id,[a])}else if(e.type===`footnoteSection`&&Array.isArray(e.footnotes)){let t=[];for(let n of e.footnotes)!vc(n)||a.has(n.id)||(a.add(n.id),t.push({id:n.id,text:n.text}));o.push({token:e,footnotes:t})}e.type!==`image`&&e.type!==`code`&&e.type!==`codespan`&&(s(e.tokens),s(e.items),s(e.header),s(e.rows))};s(e);for(let e of o){let t=e.footnotes.map(e=>Object.freeze({...e,backrefs:Object.freeze([...i.get(e.id)??[]])}));n.set(e.token,Object.freeze({footnotes:Object.freeze(t)}))}return Object.freeze({referenceProps:t,sectionProps:n})},Sc=1e6,Cc=e=>typeof e==`object`&&!!e&&`offset`in e,wc=(e,t,{currentBufferLength:n=0,maxOffsetGap:r=Sc}={})=>typeof e==`string`?t===`offset`?{kind:`drop`,message:`offset mode active, string chunk dropped. Call resetStream() before switching streaming input modes.`}:{kind:`append`,value:e,nextMode:`append`}:!Cc(e)||typeof e.value!=`string`?{kind:`drop`,message:`Invalid chunk object passed to writeChunk(); expected { value: string, offset: number }.`}:!Number.isSafeInteger(e.offset)||e.offset<0?{kind:`drop`,message:`Invalid offset chunk passed to writeChunk(); offset must be a non-negative safe integer.`}:t===`append`?{kind:`drop`,message:`append mode active, offset chunk dropped. Call resetStream() before switching streaming input modes.`}:e.offset-n>r?{kind:`drop`,message:`offset chunk skipped: offset ${e.offset} is more than ${r} chars beyond the current buffer length (${n}).`}:{kind:`offset`,ch
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,I as i,K as a,L as o,N as s,Q as c,Z as l,at as u,bt as d,dt as f,et as p,ft as m,g as h,it as g,j as _,k as v,m as y,nt as b,p as x,u as S,vt as C}from"../chunks/DGrvnoUE.js";import{n as w}from"../chunks/BZuNOv8h.js";import"../chunks/xihTtKlq.js";import"../chunks/CY9OlB4q.js";import{t as T}from"../chunks/BYYkuYgk.js";import{n as E,r as D,t as O}from"../chunks/Bht2nTIZ.js";var k=d({load:()=>A}),A=async({params:e})=>({title:`Historique`,conversations:await T.allChats(e.space,0),tasks:await D.listTasks(e.space),space:e.space}),j=s(`<option> </option>`),M=s(`<div class="formelement w-60"><select class="textinput"><option>Toutes les tâches</option><!></select></div>`),N=s(`<span class="mx-1">·</span> <a class="text-sky-700 dark:text-sky-300">Tâche planifiée</a>`,1),P=s(`<div class="dark:bg-stone-800 rounded p-2 my-2"><div class="flex flex-row items-center"><div class="flex-1 font-bold text-base"><a> </a></div> <button class="bt small" title="Supprimer la conversation"><i class="icon-trash-empty"></i></button></div> <div class="mt-1 text-xs text-stone-500"><span title="Créée le"> </span> <span class="mx-1">·</span> <span title="Dernière interaction"> </span> <!></div></div>`),ee=s(`<p class="my-4 text-center text-sm text-stone-500">Aucune conversation trouvée.</p>`),te=s(`<div class="my-4 text-center"><button class="bt small"> </button></div>`),F=s(`<div class="container"><div class="my-2 flex gap-2"><div class="formelement flex-1"><input class="textinput" type="search" placeholder="Rechercher une conversation..."/></div> <!></div> <!> <!> <!></div> <!>`,1);function I(i,s){m(s,!0);let d=e=>{if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString(`fr-FR`,{day:`numeric`,month:`long`,year:`numeric`,hour:`2-digit`,minute:`2-digit`})},D=g(``),k=g(``),A=g(p(s.data.conversations)),I=g(0),L=g(!1),R=g(null),z=u(()=>n(A).length===(n(I)+1)*20),B=u(()=>s.data.tasks??[]),V=async()=>{b(I,0);let e=n(k)||void 0,t=await T.allChats(s.data.space,0,n(D),e);b(A,t??[],!0)},H,U=()=>{H!==void 0&&clearTimeout(H),H=setTimeout(V,300)},W=()=>{V()},G=async()=>{if(!n(L)){b(L,!0);try{let e=n(k)||void 0,t=await T.allChats(s.data.space,n(I)+1,n(D),e)??[];b(A,[...n(A),...t],!0),b(I,n(I)+1)}catch{E(`failure`,`Erreur lors du chargement des conversations`)}finally{b(L,!1)}}},K=async()=>{if(n(R))try{await T.deleteChat(s.data.space,n(R).id),E(`success`,`Conversation supprimée`),await w(),await V()}catch{E(`failure`,`Erreur lors de la suppression de la conversation`)}finally{b(R,null)}};var q=F(),J=c(q),Y=l(J),X=l(Y),Z=l(X);x(Z),C(X);var ne=e(X,2),re=i=>{var s=M(),c=l(s),u=l(c);u.value=u.__value=``;var d=e(u);r(d,17,()=>n(B),e=>e.id,(e,r)=>{var i=j(),o=l(i,!0);C(i);var s={};a(()=>{t(o,n(r).label),s!==(s=n(r).id)&&(i.value=(i.__value=n(r).id)??``)}),_(e,i)}),C(c),C(s),o(`change`,c,W),h(c,()=>n(k),e=>b(k,e)),_(i,s)};v(ne,e=>{n(B).length>0&&e(re)}),C(Y);var Q=e(Y,2);r(Q,17,()=>n(A),e=>e.id,(r,i)=>{var u=P(),f=l(u),p=l(f),m=l(p),h=l(m,!0);C(m),C(p);var g=e(p,2);C(f);var x=e(f,2),S=l(x),w=l(S);C(S);var T=e(S,4),E=l(T);C(T);var D=e(T,2),O=t=>{var r=N(),o=e(c(r),2);a(()=>y(o,`href`,`/${s.data.space}/tasks?task=${n(i).taskId}`)),_(t,r)};v(D,e=>{n(i).taskId&&e(O)}),C(x),C(u),a((e,r)=>{y(m,`href`,`/${s.data.space}/${n(i).id}`),t(h,n(i).title),t(w,`Créée le ${e??``}`),t(E,`Dernière interaction : ${r??``}`)},[()=>d(n(i)._date_created),()=>d(n(i)._date_updated)]),o(`click`,g,()=>b(R,n(i),!0)),_(r,u)});var $=e(Q,2),ie=e=>{var t=ee();_(e,t)};v($,e=>{n(A).length===0&&e(ie)});var ae=e($,2),oe=e=>{var r=te(),i=l(r),s=l(i,!0);C(i),C(r),a(()=>{i.disabled=n(L),t(s,n(L)?`Chargement...`:`Charger plus`)}),o(`click`,i,G),_(e,r)};v(ae,e=>{n(z)&&e(oe)}),C(J);var se=e(J,2);{let e=u(()=>n(R)!==null),t=u(()=>`Voulez-vous vraiment supprimer « ${n(R)?.title} » ? Cette action est irréversible.`);O(se,{get open(){return n(e)},title:`Supprimer la conversation`,get message(){return n(t)},confirmLabel:`Supprimer`,onConfirm:K,onCancel:()=>b(R,null)})}o(`input`,Z,U),S(Z,()=>n(D),e=>b(D,e)),_(i,q),f()}i([`input`,`change`,`click`]);export{I as component,k as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage`}}var a=t(`<div class="container grid grid-cols-[repeat(auto-fit,minmax(250px, 1fr))] gap-4"><a class="bt p-5 text-center" title="Modèles" href="settings/models">Modèles</a> <a class="bt p-5 text-center" title="Agents" href="settings/agents">Agents</a> <a class="bt p-5 text-center" title="Outils" href="settings/tools">Outils <span class="ml-2 text-xs bg-red-900 text-red-300 rounded-lg p-1">12</span></a> <a class="bt p-5 text-center" title="Skills" href="settings/skills">Compétences <span class="ml-2 text-xs bg-red-900 text-red-300 rounded-lg p-1">3</span></a> <a class="bt p-5 text-center" title="Bases de connaissance" href="settings/kb">Bases de connaissance</a> <a class="bt p-5 text-center" title="Mémoire" href="settings/memory">Mémoire <span class="ml-2 opacity-50 text-xs">standard</span></a> <a class="bt p-5 text-center" title="Canaux de communication" href="settings/channels">Canaux de communication <span class="ml-2 text-xs bg-red-900 text-red-300 rounded-lg p-1">12</span></a> <a class="bt p-5 text-center" title="Utilisateurs" href="settings/users">Utilisateurs <span class="ml-2 text-xs bg-red-900 text-red-300 rounded-lg p-1">1</span></a></div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{ft as e}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var t=e({load:()=>n});function n(){return{title:`Base de connaissance`}}function r(e){}export{r as component,t as universal};
|
||||
import{bt as e}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var t=e({load:()=>n});function n(){return{title:`Base de connaissance`}}function r(e){}export{r as component,t as universal};
|
||||
@@ -0,0 +1 @@
|
||||
import{N as e,bt as t,j as n}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";var r=t({load:()=>i});function i(){return{title:`Paramétrage`}}var a=e(`<div class="container grid grid-cols-[repeat(auto-fit,minmax(250px, 1fr))] gap-4"><a class="bt p-5 text-center" title="Modèles" href="settings/models">Modèles</a> <a class="bt p-5 text-center" title="Agents" href="settings/agents">Agents</a> <a class="bt p-5 text-center" title="Outils" href="settings/tools">Outils</a></div>`);function o(e){var t=a();n(e,t)}export{o as component,r as universal};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,C as t,D as n,E as r,G as i,J as a,K as o,L as s,M as c,N as l,O as u,P as d,Q as f,T as p,X as m,_ as h,a as g,at as _,c as v,dt as y,ft as b,h as x,it as S,j as C,q as w,tt as T,u as E,ut as D,w as O,x as k,z as A}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";import{t as j}from"../chunks/BC84wEQu.js";import{t as M}from"../chunks/D8dI9nx6.js";import{t as N}from"../chunks/DOY2HMbt.js";import{n as P,t as F}from"../chunks/DRdGzrsF.js";import{t as I}from"../chunks/BorM6hBh.js";var L={getAgents:e=>j.get(`/agent/${e}`),getAgent:(e,t)=>j.get(`/agent/${e}/${t}`),createAgent:(e,t)=>j.post(`/agent/${e}`,t),updateAgent:(e,t)=>j.put(`/agent/${e}`,t),deleteAgent:(e,t)=>j.delete(`/agent/${e}/${t}`)},R={getSpace:e=>j.get(`/team/${e}`),updateSpace:(e,t)=>j.put(`/team/${e}`,t)},z=b({load:()=>B}),B=async({params:e})=>({title:`Paramétrage : Agents`,back:`../settings`,space:await R.getSpace(e.space),agents:await L.getAgents(e.space),providersModels:await N.getProvidersModels(e.space)}),V=u(`<div><div class="formgroup my-2"><form><div class="formelement"><label for="name">Nom</label> <input id="name" type="text" class="textinput" placeholder="nom affiché"/> <!></div> <div class="formelement"><label for="systemPrompt">Prompt système</label> <textarea rows="10" id="systemPrompt" class="areainput" placeholder="prompt système"></textarea> <!></div> <div class="formelement"><label for="type" class="block my-1 flex-1">Type</label> <!> <!></div> <div class="text-right"><button type="button" class="bt">Annuler</button> <button type="submit" class="bt mx-4">Enregistrer</button></div></form></div></div>`);function H(e,t){_(t,!0);let n=g(t,`item`,7),o=f(a(s(()=>n().defaultProviderId+`|`+n().defaultModelId))),u=e=>e.group,p=e=>{e.focus()},b=e=>{e.preventDefault();let r=d(o).split(`|`);d(o).length>1?(n().defaultProviderId=r[0],n().defaultModelId=r[1]):(n().defaultProviderId=``,n().defaultModelId=``),t.onSave(n())},x=e=>{e.preventDefault(),t.onCancel()};var C=V(),O=i(C),k=i(O),j=i(k),M=w(i(j),2);E(M),A(()=>v(M,()=>n().name,e=>n().name=e)),h(M,e=>p?.(e));var N=w(M,2);F(N,{key:`name`,get errors(){return t.errors}}),y(j);var P=w(j,2),L=w(i(P),2);T(L);var R=w(L,2);F(R,{key:`baseUrl`,get errors(){return t.errors}}),y(P);var z=w(P,2),B=w(i(z),2);I(B,{get items(){return t.providersModels},valueMode:`id`,groupBy:u,get value(){return d(o)},set value(e){m(o,e,!0)}});var H=w(B,2);F(H,{key:`model`,get errors(){return t.errors}}),y(z);var U=w(z,2),W=i(U);D(2),y(U),y(k),y(O),y(C),l(`submit`,k,b),c(`change`,k,()=>{t.errors.clear()}),v(L,()=>n().systemPrompt,e=>n().systemPrompt=e),c(`click`,W,x),r(e,C),S()}C([`change`,`click`]);var U=u(`<button class="rounded w-full border border-dashed p-2 border-stone-500 cursor-pointer" tabindex="0"><i class="icon-plus"></i> Ajouter un agent</button>`),W=u(`<div class="rounded border p-2 my-2 border-stone-500 flex"><div class="flex-1"><span> </span></div> <button title="Modifier">Agent par défaut</button> <button class="bt small mx-1" title="Modifier"><i class="icon-edit"></i></button> <button class="bt small mx-1" title="Supprimer"><i class="icon-trash-empty"></i></button></div>`),G=u(`<div class="container"><!> <!></div>`);function K(l,u){_(u,!0);let h=f(a(s(()=>u.data.space))),g=f(a(s(()=>u.data.agents))),v=f(!1),b=f(null),C=f(a({})),T=new P,E=()=>{d(b)||(T.clear(),m(C,{},!0),m(v,!0))},D=()=>{m(v,!1)},A=e=>{e.name||T.set(`name`,`Le nom est obligatoire !`),(e.defaultProviderId===``||e.defaultModelId===``)&&T.set(`model`,`Le modèle est obligatoire !`),T.size===0&&L.createAgent(u.data.space.id,e).then(e=>{d(g).push(e),m(v,!1),m(C,{},!0)}).catch(e=>{console.log(e)})},j=()=>{m(b,null),m(C,{},!0)},N=e=>{e.name||T.set(`name`,`Le nom est obligatoire !`),T.size===0&&L.updateAgent(u.data.space.id,e).then(e=>{m(g,d(g).map(t=>e.id===t.id?e:t),!0),m(b,null),m(C,{},!0)}).catch(e=>{console.log(e)})},F=async e=>{T.clear(),!d(v)&&L.getAgent(u.data.space.id,e).then(t=>{m(g,d(g).filter(e=>e.id===t.id?t:e),!0),m(b,e,!0)}).catch(e=>console.log(e))},I=e=>{L.deleteAgent(u.data.space.id,e).then(()=>{m(g,d(g).filter(t=>t.id!==e),!0)}).catch(e=>{console.log(e)})},z=e=>{let t=d(h);t.defaultAgentId=e,R.updateSpace(t.id,t).then(e=>{M.spaces.map(t=>t.id===M.current?e:t),m(h,e,!0)}).catch(e=>{console.log(e)})};var B=G(),V=i(B),K=e=>{var i=n(),a=o(i);t(a,()=>`new`,e=>{H(e,{get item(){return d(C)},get errors(){return T},onSave:A,onCancel:D,get providersModels(){return u.data.providersModels}})}),r(e,i)},q=e=>{var t=U();c(`click`,t,E),r(e,t)};O(V,e=>{d(v)?e(K):e(q,-1)});var J=w(V,2);k(J,17,()=>d(g),e=>e.id,(a,s)=>{var l=n(),f=o(l),m=e=>{var i=n(),a=o(i);t(a,()=>d(s).id,e=>{H(e,{get item(){return d(s)},get errors(){return T},onSave:N,onCancel:j,get providersModels(){return u.data.providersModels}})}),r(e,i)},g=t=>{var n=W(),a=i(n),o=i(a),l=i(o,!0);y(o),y(a);var u=w(a,2);let f;var m=w(u,2),g=w(m,2);y(n),e(()=>{p(l,d(s).name),f=x(u,1,`bt small mx-1`,null,f,{highlight:d(s).id===d(h).defaultAgentId})}),c(`click`,u,()=>z(dLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{$ as e,A as t,B as n,E as r,G as i,I as a,K as o,L as s,M as c,N as l,O as u,Q as d,R as f,U as p,X as m,Z as h,_t as g,a as _,b as v,bt as y,dt as b,et as x,ft as S,it as C,j as w,k as T,nt as E,p as D,st as O,u as k,v as A,vt as j}from"../chunks/DGrvnoUE.js";import"../chunks/xihTtKlq.js";import{t as M}from"../chunks/DtfiK5fE.js";import{t as N}from"../chunks/Cyrg28w2.js";import{t as P}from"../chunks/BeIYuf23.js";import{n as F,t as I}from"../chunks/6mSXxE57.js";import{t as L}from"../chunks/DdGy_ePN.js";var R={getAgents:e=>M.get(`/agent/${e}`),getAgent:(e,t)=>M.get(`/agent/${e}/${t}`),createAgent:(e,t)=>M.post(`/agent/${e}`,t),updateAgent:(e,t)=>M.put(`/agent/${e}`,t),deleteAgent:(e,t)=>M.delete(`/agent/${e}/${t}`)},z={getSpace:e=>M.get(`/team/${e}`),updateSpace:(e,t)=>M.put(`/team/${e}`,t)},B=y({load:()=>V}),V=async({params:e})=>({title:`Paramétrage : Agents`,back:`../settings`,space:await z.getSpace(e.space),agents:await R.getAgents(e.space),providersModels:await P.getProvidersModels(e.space)}),H=l(`<div><div class="formgroup my-2"><form><div class="formelement"><label for="name">Nom</label> <input id="name" type="text" class="textinput" placeholder="nom affiché"/> <!></div> <div class="formelement"><label for="systemPrompt">Prompt système</label> <textarea rows="10" id="systemPrompt" class="areainput" placeholder="prompt système"></textarea> <!></div> <div class="formelement"><label for="type" class="block my-1 flex-1">Type</label> <!> <!></div> <div class="text-right"><button type="button" class="bt">Annuler</button> <button type="submit" class="bt mx-4">Enregistrer</button></div></form></div></div>`);function U(t,r){S(r,!0);let a=_(r,`item`,7),o=C(x(p(()=>a().defaultProviderId+`|`+a().defaultModelId))),c=e=>e.group,l=e=>{e.focus()},u=e=>{e.preventDefault();let t=n(o).split(`|`);n(o).length>1?(a().defaultProviderId=t[0],a().defaultModelId=t[1]):(a().defaultProviderId=``,a().defaultModelId=``),r.onSave(a())},d=e=>{e.preventDefault(),r.onCancel()};var m=H(),y=h(m),T=h(y),A=h(T),M=e(h(A),2);D(M),i(()=>k(M,()=>a().name,e=>a().name=e)),v(M,e=>l?.(e));var N=e(M,2);I(N,{key:`name`,get errors(){return r.errors}}),j(A);var P=e(A,2),F=e(h(P),2);O(F);var R=e(F,2);I(R,{key:`baseUrl`,get errors(){return r.errors}}),j(P);var z=e(P,2),B=e(h(z),2);L(B,{get items(){return r.providersModels},valueMode:`id`,groupBy:c,get value(){return n(o)},set value(e){E(o,e,!0)}});var V=e(B,2);I(V,{key:`model`,get errors(){return r.errors}}),j(z);var U=e(z,2),W=h(U);g(2),j(U),j(T),j(y),j(m),f(`submit`,T,u),s(`change`,T,()=>{r.errors.clear()}),k(F,()=>a().systemPrompt,e=>a().systemPrompt=e),s(`click`,W,d),w(t,m),b()}a([`change`,`click`]);var W=l(`<button class="rounded w-full border border-dashed p-2 border-stone-500 cursor-pointer" tabindex="0"><i class="icon-plus"></i> Ajouter un agent</button>`),G=l(`<div class="rounded border p-2 my-2 border-stone-500 flex formgroup"><div class="flex-1 p-2"><span> </span></div> <button title="Modifier">Agent par défaut</button> <button class="bt small mx-1" title="Modifier"><i class="icon-edit"></i></button> <button class="bt small mx-1" title="Supprimer"><i class="icon-trash-empty"></i></button></div>`),K=l(`<div class="container"><!> <!></div>`);function q(i,a){S(a,!0);let l=C(x(p(()=>a.data.space))),g=C(x(p(()=>a.data.agents))),_=C(!1),v=C(null),y=C(x({})),D=new F,O=()=>{n(v)||(D.clear(),E(y,{},!0),E(_,!0))},k=()=>{E(_,!1)},M=e=>{e.name||D.set(`name`,`Le nom est obligatoire !`),(e.defaultProviderId===``||e.defaultModelId===``)&&D.set(`model`,`Le modèle est obligatoire !`),D.size===0&&R.createAgent(a.data.space.id,e).then(e=>{n(g).push(e),E(_,!1),E(y,{},!0)}).catch(e=>{console.log(e)})},P=()=>{E(v,null),E(y,{},!0)},I=e=>{e.name||D.set(`name`,`Le nom est obligatoire !`),D.size===0&&R.updateAgent(a.data.space.id,e).then(e=>{E(g,n(g).map(t=>e.id===t.id?e:t),!0),E(v,null),E(y,{},!0)}).catch(e=>{console.log(e)})},L=async e=>{D.clear(),!n(_)&&R.getAgent(a.data.space.id,e).then(t=>{E(g,n(g).filter(e=>e.id===t.id?t:e),!0),E(v,e,!0)}).catch(e=>console.log(e))},B=e=>{R.deleteAgent(a.data.space.id,e).then(()=>{E(g,n(g).filter(t=>t.id!==e),!0)}).catch(e=>{console.log(e)})},V=e=>{let t=n(l);t.defaultAgentId=e,z.updateSpace(t.id,t).then(e=>{N.spaces.map(t=>t.id===N.current?e:t),E(l,e,!0)}).catch(e=>{console.log(e)})},H=e=>{e.key===`Escape`&&P()};var q=K();f(`keydown`,m,H);var J=h(q),Y=e=>{var t=c(),r=d(t);u(r,()=>`new`,e=>{U(e,{get item(){return n(y)},get errors(){return D},onSave:M,onCancel:k,get providersModels(){return a.data.providersModels}})}),w(e,t)},X=e=>{var t=W();s(`click`,t,O),w(e,t)};T(J,e=>{n(_)?e(Y):e(X,-1)});var Z=e(J,2);r(Z,17,()=>n(g),e=>e.id,(r,i)=>{var f=c(),p=d(f),m=e=>{var t=c(),r=d(t);u(r,()=>n(i).id,e=>{U(e,{get item(){return n(i)},get errors(){return D},onSave:I,onCancel:P,get providersModels(){return a.data.providersModels}})}),w(e,t)},g=r=>{var a=G(),c=h(a),u=h(c),d=h(u,!0);j(u),j(c);var f=e(c,2);let p;var m=e(f,2),g=e(m,2);j(a),o(()=>{t(d,n(i).name),p=A(f,1,`bt small mx-
Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
import{E as e,O as t,ft as n}from"../chunks/39JK5HWF.js";import"../chunks/xihTtKlq.js";var r=n({load:()=>i});function i(){return{title:`Paramétrage : Canaux de communication`,back:`/settings`}}var a=t(`<div>Modèles</div>`);function o(t){var n=a();e(t,n)}export{o as component,r as universal};
|
||||
@@ -1 +1 @@
|
||||
{"version":"1788815336322"}
|
||||
{"version":"1791316638543"}
|
||||
Loaded 100 of 125 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user