From d32ad89a7d3799efa21eede99a47d027d99cc67e Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:44:55 -0400 Subject: [PATCH 01/13] feat(api): compress HTTP responses with gzip The API never sent a Content-Encoding header, so every response went out uncompressed no matter what the client advertised. The status endpoint is the one that hurts: it serialises every device, worker and controller on each poll, and the bulk of that JSON is the same field names repeated once per record. That redundancy is exactly what deflate is built for, and the saving grows with the number of connections a deployment reports. Once the response takes longer to transfer than the poll interval, requests start overlapping and never catch up. Compression is what keeps a poll inside its own interval. The middleware also covers the embedded UI. Serving this repository's own build, measured against a running binary: JS 668,735 -> 200,496 bytes CSS 67,972 -> 12,233 bytes Three exclusions are deliberate: - WebSocket upgrades. The middleware refuses any request carrying Connection: Upgrade, so device and controller sockets keep their hijackable ResponseWriter. - Already-compressed bodies. Logcat replies are a zip built in memory, and the static assets include png, ico and woff2. Deflating those costs CPU for a fraction of a percent and can grow the response. - Bodies under 1 KiB, where the gzip header and trailer outweigh what the deflate stream saves. The many small action acknowledgements fall into this bucket. Gzip is registered after the logger so the response size the logger reports is the size that actually went over the wire. Uses gin-contrib/gzip rather than a hand-rolled handler: Accept-Encoding negotiation, writer pooling, Content-Length handling and the refusal to double-compress add up to well past the point where owning the code is cheaper than depending on it, and the failure modes are subtle. It comes from the same org as the gin-contrib/static dependency already in use. Co-Authored-By: Claude Opus 5 --- go.mod | 1 + go.sum | 2 + libs/ginutil/gzip.go | 53 ++++++++++++++ libs/ginutil/gzip_test.go | 144 ++++++++++++++++++++++++++++++++++++++ libs/ginutil/logger.go | 4 ++ 5 files changed, 204 insertions(+) create mode 100644 libs/ginutil/gzip.go create mode 100644 libs/ginutil/gzip_test.go diff --git a/go.mod b/go.mod index 6928700..9c89283 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.26.3 require ( github.com/Depado/ginprom v1.8.3 github.com/fasthttp/websocket v1.5.12 + github.com/gin-contrib/gzip v1.2.6 github.com/gin-contrib/static v1.1.6 github.com/gin-gonic/gin v1.12.0 github.com/google/uuid v1.6.0 diff --git a/go.sum b/go.sum index fb408ca..19cbdec 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx5 github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gin-contrib/gzip v1.2.6 h1:OtN8DplD5DNZCSLAnQ5HxRkD2qZ5VU+JhOrcfJrcRvg= +github.com/gin-contrib/gzip v1.2.6/go.mod h1:BQy8/+JApnRjAVUplSGZiVtD2k8GmIE2e9rYu/hLzzU= github.com/gin-contrib/sse v1.1.1 h1:uGYpNwTacv5R68bSGMapo62iLTRa9l5zxGCps4hK6ko= github.com/gin-contrib/sse v1.1.1/go.mod h1:QXzuVkA0YO7o/gun03UI1Q+FTI8ZV/n5t03kIQAI89s= github.com/gin-contrib/static v1.1.6 h1:4/OIJI9PxO2jsUezNulpVbzI8ORMmdPlJ4P9QGwWgME= diff --git a/libs/ginutil/gzip.go b/libs/ginutil/gzip.go new file mode 100644 index 0000000..1158dc1 --- /dev/null +++ b/libs/ginutil/gzip.go @@ -0,0 +1,53 @@ +package ginutil + +import ( + "github.com/gin-contrib/gzip" + "github.com/gin-gonic/gin" +) + +// gzipMinLength is the smallest response worth compressing. Below roughly a +// kilobyte the gzip header and trailer cost more than the deflate stream saves, +// so the many small `{"status":"ok"}` action replies are written through +// untouched. +const gzipMinLength = 1024 + +// gzipExcludedExtensions lists the static assets that are already compressed +// on disk. Re-deflating them burns CPU for a fraction of a percent, and in the +// case of the fonts can make the response marginally larger. The middleware's +// own defaults cover .png/.gif/.jpeg/.jpg; the rest are ours. +var gzipExcludedExtensions = []string{ + ".png", ".gif", ".jpeg", ".jpg", ".webp", ".avif", + ".ico", ".woff", ".woff2", ".zip", ".gz", +} + +// gzipExcludedPathRegexps skips endpoints whose bodies are already a compressed +// container. Logcat replies are a zip built in memory and served with an +// explicit Content-Length, so there is nothing left for deflate to find. +var gzipExcludedPathRegexps = []string{ + `/action/logcat$`, +} + +// GzipMiddleware compresses responses for clients that advertise gzip support. +// +// This matters far more than it looks: /api/status serialises every device, +// worker, and controller on every poll, and the bulk of that JSON is the same +// field names repeated once per record -- exactly the redundancy deflate is +// built for, and the saving grows with the number of connections reported. +// Once the response outgrows the poll interval, requests start overlapping +// and never catch up; compressing it keeps a poll inside its own interval. +// +// The middleware also covers the embedded UI, so the JS and CSS bundles stop +// going out uncompressed. +// +// Two things are deliberately left alone. WebSocket upgrades are skipped by the +// middleware itself (it refuses any request carrying Connection: Upgrade), so +// device and controller sockets are unaffected. Responses that already carry a +// Content-Encoding are passed through rather than compressed twice. +func GzipMiddleware() gin.HandlerFunc { + return gzip.Gzip( + gzip.DefaultCompression, + gzip.WithExcludedExtensions(gzipExcludedExtensions), + gzip.WithExcludedPathsRegexs(gzipExcludedPathRegexps), + gzip.WithMinLength(gzipMinLength), + ) +} diff --git a/libs/ginutil/gzip_test.go b/libs/ginutil/gzip_test.go new file mode 100644 index 0000000..5446dab --- /dev/null +++ b/libs/ginutil/gzip_test.go @@ -0,0 +1,144 @@ +package ginutil + +import ( + "compress/gzip" + "io" + "log/slog" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gin-gonic/gin" +) + +// largeBody is comfortably over gzipMinLength and highly repetitive, standing in +// for the repeated JSON field names that dominate a real status reply. +var largeBody = strings.Repeat(`{"origin":"device","is_connected":true},`, 200) + +func newGzipTestEngine(t *testing.T) *gin.Engine { + t.Helper() + gin.SetMode(gin.TestMode) + + r := NewEngineWithLogger(slog.New(slog.DiscardHandler)) + r.GET("/api/status", func(c *gin.Context) { + c.String(http.StatusOK, largeBody) + }) + r.GET("/api/ok", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"status": "ok"}) + }) + r.GET("/api/device/abc/action/logcat", func(c *gin.Context) { + c.Data(http.StatusOK, "application/zip", []byte(largeBody)) + }) + r.GET("/assets/logo.png", func(c *gin.Context) { + c.Data(http.StatusOK, "image/png", []byte(largeBody)) + }) + return r +} + +func doGet(t *testing.T, r *gin.Engine, path string, header map[string]string) *httptest.ResponseRecorder { + t.Helper() + req := httptest.NewRequest(http.MethodGet, path, nil) + for k, v := range header { + req.Header.Set(k, v) + } + w := httptest.NewRecorder() + r.ServeHTTP(w, req) + return w +} + +func TestGzipMiddlewareCompressesLargeResponses(t *testing.T) { + r := newGzipTestEngine(t) + + w := doGet(t, r, "/api/status", map[string]string{"Accept-Encoding": "gzip"}) + + if got := w.Header().Get("Content-Encoding"); got != "gzip" { + t.Fatalf("Content-Encoding = %q, want %q", got, "gzip") + } + + reader, err := gzip.NewReader(w.Body) + if err != nil { + t.Fatalf("response is not valid gzip: %v", err) + } + defer reader.Close() + + decoded, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("failed to read gzip stream: %v", err) + } + if string(decoded) != largeBody { + t.Error("decompressed body does not match the original") + } + if w.Body.Len() >= len(largeBody) { + t.Errorf("compressed body (%d bytes) is not smaller than the original (%d bytes)", + w.Body.Len(), len(largeBody)) + } +} + +func TestGzipMiddlewareSkipsWhenNotAccepted(t *testing.T) { + r := newGzipTestEngine(t) + + w := doGet(t, r, "/api/status", nil) + + if got := w.Header().Get("Content-Encoding"); got != "" { + t.Errorf("Content-Encoding = %q, want empty for a client that did not ask for gzip", got) + } + if w.Body.String() != largeBody { + t.Error("body was altered for a client that did not ask for gzip") + } +} + +// A WebSocket upgrade must reach the handler untouched -- wrapping the +// ResponseWriter would break the hijack that the device and controller sockets +// depend on. +func TestGzipMiddlewareSkipsUpgradeRequests(t *testing.T) { + r := newGzipTestEngine(t) + + w := doGet(t, r, "/api/status", map[string]string{ + "Accept-Encoding": "gzip", + "Connection": "Upgrade", + "Upgrade": "websocket", + }) + + if got := w.Header().Get("Content-Encoding"); got != "" { + t.Errorf("Content-Encoding = %q, want empty for an upgrade request", got) + } +} + +func TestGzipMiddlewareSkipsSmallResponses(t *testing.T) { + r := newGzipTestEngine(t) + + w := doGet(t, r, "/api/ok", map[string]string{"Accept-Encoding": "gzip"}) + + if got := w.Header().Get("Content-Encoding"); got != "" { + t.Errorf("Content-Encoding = %q, want empty for a body under %d bytes", got, gzipMinLength) + } + if !strings.Contains(w.Body.String(), `"status":"ok"`) { + t.Errorf("small body was mangled: %q", w.Body.String()) + } +} + +func TestGzipMiddlewareSkipsExcludedPaths(t *testing.T) { + tests := []struct { + name string + path string + }{ + {"logcat zip", "/api/device/abc/action/logcat"}, + {"png asset", "/assets/logo.png"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r := newGzipTestEngine(t) + + w := doGet(t, r, tt.path, map[string]string{"Accept-Encoding": "gzip"}) + + if got := w.Header().Get("Content-Encoding"); got != "" { + t.Errorf("Content-Encoding = %q, want empty for already-compressed content", got) + } + if w.Body.String() != largeBody { + t.Error("body was altered for an excluded path") + } + }) + } +} diff --git a/libs/ginutil/logger.go b/libs/ginutil/logger.go index 82afc51..1bb77ac 100644 --- a/libs/ginutil/logger.go +++ b/libs/ginutil/logger.go @@ -75,9 +75,13 @@ func LoggerMiddleware(logger *slog.Logger) gin.HandlerFunc { // NewEngineWithLogger creates a new Gin engine with custom logger middleware // instead of using gin.Default() which includes the default logger. +// +// Gzip sits inside the logger so the size the logger reports is the size that +// actually went over the wire, not the size before compression. func NewEngineWithLogger(logger *slog.Logger) *gin.Engine { r := gin.New() r.Use(RecoveryMiddleware(logger)) r.Use(LoggerMiddleware(logger)) + r.Use(GzipMiddleware()) return r } From 07853da8e572c63399a7ae930cc1f4b6d9752fe7 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:56:12 -0400 Subject: [PATCH 02/13] fix(ui): repair table search, paging, and row identity Four defects in the shared table machinery, fixed together because they live in the same lines: making itemCount a required option changed every call site, and the same edits carry the search rework. 1. The page index survived a filter change. useTablePagination exposed resetPage() and no caller ever used it, so searching from anything but the first page sliced past the end of the results and drew an empty table. The footer read like this, with a non-empty result set behind it: before search "76-100 of 1400" "Page 4 of 56" after search "76-50 of 50" "Page 4 of 2" 0 rows drawn Fifty rows matched and none were shown. The hook now takes the filtered row count and a reset key. A new key, the search term, goes back to the first page; a changing count only clamps, because the count also moves on its own as devices join and drop off the poll and resetting on that would drag the reader back every few seconds. 2. Paging forward never scrolled. The old handler scrolled to the bottom of the document, and only when navigating backward off a partly-filled last page. Every other page change left the reader at the foot of the page they had just left, looking at the footer of a table whose rows had all been replaced. The hook now scrolls the table back into view on any page change, honouring prefers-reduced-motion. 3. One search box ran two filters over different fields. The worker tables filtered devices in the parent and workers in the child, each against its own field list, with only the child trimming its term. Two consequences, both reported as "search behaves strangely": - A term only the inner list knew about could never reach it, because the outer pass had already discarded the device. Typing "active" or "inactive" always came back empty. - A worker id pasted out of a log with a trailing space matched nothing, because the outer pass looked for the space too. There is now one filter per table over one declared field list. Each list lives in a sibling module next to its table, and doubles as the text shown when a search matches nothing, so the two cannot drift apart again. session.controller.id is dropped from all three lists: it was searched everywhere and populated nowhere. Controllers gain UUID as a searchable field. It is the identifier a support conversation quotes and it was the one thing on the row that could not be searched for. 4. Worker rows collided on their React key. Worker ids are only unique within a device, and these tables flatten across devices, so the same id can appear on several rows at once. Expanding any one of them expanded every namesake. Rows are now keyed on device id and worker id together. Also: tables render an empty state instead of a bare header row, naming the term and the fields it was matched against, and the card heading reports the filtered count against the total ("Workers (50 of 500)") rather than the pre-filter count it used to show. Verified against the mock large profile, 50 devices and 500 workers: searching from page 3 now lands on "1-25 of 111" / "Page 1 of 5" with rows drawn; " active " matches 298 of 500, agreeing with the in-use stat card; an unmatched term shows the empty state and lists the fields. Co-Authored-By: Claude Opus 5 --- .../src/components/table-empty-state.tsx | 48 ++++++ .../src/controllers/controller-search.ts | 22 +++ .../src/controllers/controllers-table.tsx | 87 +++++----- libs/base-ui/src/devices/device-search.ts | 20 +++ libs/base-ui/src/devices/devices-table.tsx | 84 +++++----- .../base-ui/src/hooks/use-table-pagination.ts | 122 +++++++++----- libs/base-ui/src/index.ts | 13 ++ libs/base-ui/src/search/searchable.ts | 54 +++++++ libs/base-ui/src/workers/worker-search.ts | 39 +++++ libs/base-ui/src/workers/workers-table.tsx | 152 +++++++++--------- 10 files changed, 435 insertions(+), 206 deletions(-) create mode 100644 libs/base-ui/src/components/table-empty-state.tsx create mode 100644 libs/base-ui/src/controllers/controller-search.ts create mode 100644 libs/base-ui/src/devices/device-search.ts create mode 100644 libs/base-ui/src/search/searchable.ts create mode 100644 libs/base-ui/src/workers/worker-search.ts diff --git a/libs/base-ui/src/components/table-empty-state.tsx b/libs/base-ui/src/components/table-empty-state.tsx new file mode 100644 index 0000000..50d600b --- /dev/null +++ b/libs/base-ui/src/components/table-empty-state.tsx @@ -0,0 +1,48 @@ +import { SearchX } from "lucide-react"; +import type { FC } from "react"; +import { TableCell, TableRow } from "./ui/table"; + +export interface TableEmptyStateProps { + /** Must span the full table, or the message sits under the first column. */ + colSpan: number; + /** The term as typed. Empty when the table itself has nothing in it. */ + search: string; + /** Plural, lower case: "devices", "workers", "controllers". */ + noun: string; + /** Human-readable field list, from describeSearchableFields. */ + searchableFields: string; +} + +/** + * The row a table shows when it has nothing to show. + * + * Previously these tables just rendered an empty tbody, which reads the same + * whether the search matched nothing, the fleet is empty, or the request + * failed. Naming the term and the fields it was matched against turns "the + * search is broken" into "that is not a field I search". + */ +export const TableEmptyState: FC = ({ + colSpan, + search, + noun, + searchableFields, +}) => ( + + +
+
+
+
+); diff --git a/libs/base-ui/src/controllers/controller-search.ts b/libs/base-ui/src/controllers/controller-search.ts new file mode 100644 index 0000000..e0e5cc8 --- /dev/null +++ b/libs/base-ui/src/controllers/controller-search.ts @@ -0,0 +1,22 @@ +import { + describeSearchableFields, + type SearchableField, +} from "../search/searchable"; +import type { Controller } from "../types"; + +/** + * Every field the controllers search box looks at. + * + * UUID is included because it is what a support conversation quotes, and it was + * previously the one identifier on the row that could not be searched for. + */ +export const CONTROLLER_SEARCH_FIELDS: SearchableField[] = [ + { label: "controller ID", get: (controller) => controller.id }, + { label: "UUID", get: (controller) => controller.uuid }, + { label: "user agent", get: (controller) => controller.user_agent }, + { label: "worker ID", get: (controller) => controller.worker_id }, +]; + +export const CONTROLLER_SEARCH_FIELD_LABELS = describeSearchableFields( + CONTROLLER_SEARCH_FIELDS, +); diff --git a/libs/base-ui/src/controllers/controllers-table.tsx b/libs/base-ui/src/controllers/controllers-table.tsx index 36f3954..f56b6ce 100644 --- a/libs/base-ui/src/controllers/controllers-table.tsx +++ b/libs/base-ui/src/controllers/controllers-table.tsx @@ -1,9 +1,10 @@ import { ChevronDown, ChevronRight } from "lucide-react"; import { motion } from "motion/react"; -import React, { memo, useCallback, useMemo, useState } from "react"; +import React, { memo, useCallback, useMemo, useRef, useState } from "react"; import { toast } from "react-toastify"; import { Collapse } from "../anim/collapse"; import { CustomTablePagination } from "../components/custom-table-pagination"; +import { TableEmptyState } from "../components/table-empty-state"; import { Button } from "../components/ui/button"; import { Card, @@ -28,6 +29,7 @@ import { TABLE_WRAPPER, } from "../lib/aesthetic"; import { Search } from "../search"; +import { matchesSearch, normalizeSearchTerm } from "../search/searchable"; import { createControllerSorter, getNextSortState, @@ -38,9 +40,20 @@ import { RelativeTimeLabel } from "../time-label"; import type { Controller } from "../types"; import { ControllerActions } from "./controller-actions"; import { ControllerDetails } from "./controller-details"; +import { + CONTROLLER_SEARCH_FIELD_LABELS, + CONTROLLER_SEARCH_FIELDS, +} from "./controller-search"; + +/** Columns rendered by this table, for the empty state's colSpan. */ +const CONTROLLER_COLUMN_COUNT = 8; interface ControllersTableComponentProps { controllers: Controller[]; + /** Rows before the search was applied, for the "5 of 200" heading. */ + totalCount: number; + /** The term as typed, for the empty state and the page reset. */ + search: string; onControllerAction: ( controllerUuid: string, action: "disconnect" | "reconnect", @@ -49,12 +62,15 @@ interface ControllersTableComponentProps { const ControllersTableComponent: React.FC = ({ controllers, + totalCount, + search, onControllerAction, }) => { const [expandedRows, setExpandedRows] = useState>(new Set()); const [sortBy, setSortBy] = useState("id"); const [sortOrder, setSortOrder] = useState("asc"); const [isTableExpanded, setIsTableExpanded] = useState(true); + const cardRef = useRef(null); // Use the custom pagination hook with persistent storage const { @@ -65,6 +81,9 @@ const ControllersTableComponent: React.FC = ({ getPaginatedItems, } = useTablePagination({ tableKey: "controllers", + itemCount: controllers.length, + resetKey: search, + scrollTargetRef: cardRef, }); const toggleRowExpansion = useCallback((controllerId: string) => { @@ -103,44 +122,9 @@ const ControllersTableComponent: React.FC = ({ return getPaginatedItems(sortedControllers); }, [sortedControllers, getPaginatedItems]); - // Enhanced pagination handler with scroll behavior - const handleChangePageWithScroll = useCallback( - (event: unknown, newPage: number) => { - const currentPage = page; - const totalPages = Math.ceil(sortedControllers.length / rowsPerPage); - const currentPageRowCount = paginatedControllers.length; - - // Check if we're navigating back from a partially filled last page - const isNavigatingBack = newPage < currentPage; - const wasOnLastPage = currentPage === totalPages - 1; - const wasPartiallyFilled = - currentPageRowCount < rowsPerPage && currentPageRowCount > 0; - - handleChangePage(event, newPage); - - // If navigating back from a partially filled last page, scroll to bottom - // to keep the user's mouse over the back button - if (isNavigatingBack && wasOnLastPage && wasPartiallyFilled) { - // Use setTimeout to ensure the page change has been processed - setTimeout(() => { - window.scrollTo({ - top: document.documentElement.scrollHeight, - behavior: "smooth", - }); - }, 0); - } - }, - [ - page, - sortedControllers.length, - rowsPerPage, - paginatedControllers.length, - handleChangePage, - ], - ); - return ( = ({ )} - Controllers ({controllers.length}) + Controllers ( + {search + ? `${controllers.length} of ${totalCount}` + : `${totalCount}`} + ) @@ -244,6 +232,14 @@ const ControllersTableComponent: React.FC = ({ + {paginatedControllers.length === 0 && ( + + )} {paginatedControllers.map((controller, index) => { const controllerId = controller.id || `controller-${index}`; const isExpanded = expandedRows.has(controllerId); @@ -330,7 +326,7 @@ const ControllersTableComponent: React.FC = ({ count={sortedControllers.length} page={page} rowsPerPage={rowsPerPage} - onPageChange={handleChangePageWithScroll} + onPageChange={handleChangePage} onRowsPerPageChange={handleChangeRowsPerPage} /> @@ -396,13 +392,10 @@ const ControllersTable = ({ controllers }: { controllers: Controller[] }) => { ); const filteredItems = useMemo(() => { - const lowercaseSearch = search.toLowerCase(); - return controllers.filter( - (controller) => - !lowercaseSearch || - controller.id?.toLowerCase().includes(lowercaseSearch) || - controller.user_agent?.toLowerCase().includes(lowercaseSearch) || - controller.worker_id?.toLowerCase().includes(lowercaseSearch), + const term = normalizeSearchTerm(search); + if (!term) return controllers; + return controllers.filter((controller) => + matchesSearch(controller, CONTROLLER_SEARCH_FIELDS, term), ); }, [search, controllers]); @@ -425,6 +418,8 @@ const ControllersTable = ({ controllers }: { controllers: Controller[] }) => {
diff --git a/libs/base-ui/src/devices/device-search.ts b/libs/base-ui/src/devices/device-search.ts new file mode 100644 index 0000000..17971c1 --- /dev/null +++ b/libs/base-ui/src/devices/device-search.ts @@ -0,0 +1,20 @@ +import { + describeSearchableFields, + type SearchableField, +} from "../search/searchable"; +import type { Device } from "../types"; + +/** + * Every field the devices search box looks at. The labels are shown to the + * reader when a search comes back empty, so they read as column names rather + * than as property paths. + */ +export const DEVICE_SEARCH_FIELDS: SearchableField[] = [ + { label: "origin", get: (device) => device.origin }, + { label: "device ID", get: (device) => device.id }, + { label: "version", get: (device) => device.version }, + { label: "public IP", get: (device) => device.public_ip }, +]; + +export const DEVICE_SEARCH_FIELD_LABELS = + describeSearchableFields(DEVICE_SEARCH_FIELDS); diff --git a/libs/base-ui/src/devices/devices-table.tsx b/libs/base-ui/src/devices/devices-table.tsx index e42703f..78b0a23 100644 --- a/libs/base-ui/src/devices/devices-table.tsx +++ b/libs/base-ui/src/devices/devices-table.tsx @@ -1,10 +1,11 @@ import { CheckCircle2, ChevronDown, ChevronRight, XCircle } from "lucide-react"; import { motion } from "motion/react"; -import React, { memo, useCallback, useMemo, useState } from "react"; +import React, { memo, useCallback, useMemo, useRef, useState } from "react"; import { toast } from "react-toastify"; import { Collapse } from "../anim/collapse"; import { MagneticButton } from "../anim/magnetic-button"; import { CustomTablePagination } from "../components/custom-table-pagination"; +import { TableEmptyState } from "../components/table-empty-state"; import { Button } from "../components/ui/button"; import { Card, @@ -33,6 +34,7 @@ import { import { apiFetch } from "../lib/api"; import { cn } from "../lib/utils"; import { Search } from "../search"; +import { matchesSearch, normalizeSearchTerm } from "../search/searchable"; import { createDeviceSorter, getNextSortState, @@ -43,9 +45,20 @@ import { RelativeTimeLabel } from "../time-label"; import type { Device } from "../types"; import { DeviceActions } from "./device-actions"; import { DeviceDetails } from "./device-details"; +import { + DEVICE_SEARCH_FIELD_LABELS, + DEVICE_SEARCH_FIELDS, +} from "./device-search"; + +/** Columns rendered by this table, for the empty state's colSpan. */ +const DEVICE_COLUMN_COUNT = 11; interface DevicesTableComponentProps { devices: Device[]; + /** Rows before the search was applied, for the "5 of 40" heading. */ + totalCount: number; + /** The term as typed, for the empty state and the page reset. */ + search: string; onDeviceAction: ( deviceId: string, action: "reboot" | "restart" | "logcat" | "delete" | "disconnect", @@ -56,6 +69,8 @@ interface DevicesTableComponentProps { const DevicesTableComponent: React.FC = ({ devices, + totalCount, + search, onDeviceAction, onToggleDeviceEnabled, onRemoveDead, @@ -64,6 +79,7 @@ const DevicesTableComponent: React.FC = ({ const [sortBy, setSortBy] = useState("origin"); const [sortOrder, setSortOrder] = useState("asc"); const [isTableExpanded, setIsTableExpanded] = useState(true); + const cardRef = useRef(null); // Use the custom pagination hook with persistent storage const { @@ -74,6 +90,9 @@ const DevicesTableComponent: React.FC = ({ getPaginatedItems, } = useTablePagination({ tableKey: "devices", + itemCount: devices.length, + resetKey: search, + scrollTargetRef: cardRef, }); const toggleRowExpansion = useCallback((deviceId: string) => { @@ -112,42 +131,6 @@ const DevicesTableComponent: React.FC = ({ return getPaginatedItems(sortedDevices); }, [sortedDevices, getPaginatedItems]); - // Enhanced pagination handler with scroll behavior - const handleChangePageWithScroll = useCallback( - (event: unknown, newPage: number) => { - const currentPage = page; - const totalPages = Math.ceil(sortedDevices.length / rowsPerPage); - const currentPageRowCount = paginatedDevices.length; - - // Check if we're navigating back from a partially filled last page - const isNavigatingBack = newPage < currentPage; - const wasOnLastPage = currentPage === totalPages - 1; - const wasPartiallyFilled = - currentPageRowCount < rowsPerPage && currentPageRowCount > 0; - - handleChangePage(event, newPage); - - // If navigating back from a partially filled last page, scroll to bottom - // to keep the user's mouse over the back button - if (isNavigatingBack && wasOnLastPage && wasPartiallyFilled) { - // Use setTimeout to ensure the page change has been processed - setTimeout(() => { - window.scrollTo({ - top: document.documentElement.scrollHeight, - behavior: "smooth", - }); - }, 0); - } - }, - [ - page, - sortedDevices.length, - rowsPerPage, - paginatedDevices.length, - handleChangePage, - ], - ); - // Memoize toggle handler to avoid recreation on every render const handleToggleDeviceEnabled = useCallback( (deviceId: string, currentEnabled: boolean) => { @@ -158,6 +141,7 @@ const DevicesTableComponent: React.FC = ({ return ( = ({ )} - Devices ({devices.length}) + Devices ( + {search ? `${devices.length} of ${totalCount}` : `${totalCount}`}) {onRemoveDead && ( @@ -283,6 +268,14 @@ const DevicesTableComponent: React.FC = ({ + {paginatedDevices.length === 0 && ( + + )} {paginatedDevices.map((device, index) => { const deviceId = device.id || `device-${index}`; const isExpanded = expandedRows.has(deviceId); @@ -423,7 +416,7 @@ const DevicesTableComponent: React.FC = ({ count={sortedDevices.length} page={page} rowsPerPage={rowsPerPage} - onPageChange={handleChangePageWithScroll} + onPageChange={handleChangePage} onRowsPerPageChange={handleChangeRowsPerPage} /> @@ -549,13 +542,10 @@ const DevicesTable = ({ ); const filteredItems = useMemo(() => { - const lowercaseSearch = search.toLowerCase(); - return devices.filter( - (device) => - !lowercaseSearch || - device.origin?.toLowerCase().includes(lowercaseSearch) || - device.id?.toLowerCase().includes(lowercaseSearch) || - device.version.toString().toLowerCase().includes(lowercaseSearch), + const term = normalizeSearchTerm(search); + if (!term) return devices; + return devices.filter((device) => + matchesSearch(device, DEVICE_SEARCH_FIELDS, term), ); }, [search, devices]); @@ -577,6 +567,8 @@ const DevicesTable = ({
; initialRowsPerPage?: number; - tableKey?: string; // Unique key for localStorage persistence + /** Unique key for persisting rows-per-page across visits. */ + tableKey?: string; } export interface UseTablePaginationReturn { @@ -12,9 +30,16 @@ export interface UseTablePaginationReturn { handleChangePage: (event: unknown, newPage: number) => void; handleChangeRowsPerPage: (event: React.ChangeEvent) => void; getPaginatedItems: (items: T[]) => T[]; - resetPage: () => void; } +/** + * Clears the sticky header plus a little breathing room, so the scrolled-to + * table does not start underneath it. + */ +const SCROLL_HEADER_OFFSET = 72; + +const storageKey = (tableKey: string) => `table-pagination-${tableKey}`; + // Helper function to safely access localStorage const getStoredRowsPerPage = ( tableKey: string, @@ -23,7 +48,7 @@ const getStoredRowsPerPage = ( if (typeof window === "undefined") return defaultValue; try { - const stored = localStorage.getItem(`table-pagination-${tableKey}`); + const stored = localStorage.getItem(storageKey(tableKey)); if (stored) { const parsed = parseInt(stored, 10); // Validate that the stored value is a reasonable pagination size @@ -43,61 +68,87 @@ const storeRowsPerPage = (tableKey: string, value: number): void => { if (typeof window === "undefined") return; try { - localStorage.setItem(`table-pagination-${tableKey}`, value.toString()); + localStorage.setItem(storageKey(tableKey), value.toString()); } catch (error) { console.warn("Failed to store table pagination to localStorage:", error); } }; +const prefersReducedMotion = (): boolean => { + if (typeof window === "undefined" || !window.matchMedia) return false; + return window.matchMedia("(prefers-reduced-motion: reduce)").matches; +}; + export function useTablePagination({ - initialPage = 0, + itemCount, + resetKey, + scrollTargetRef, initialRowsPerPage = 25, tableKey, -}: UseTablePaginationOptions = {}): UseTablePaginationReturn { - // Get initial rows per page from localStorage if tableKey is provided - const getInitialRowsPerPage = useCallback(() => { - return tableKey +}: UseTablePaginationOptions): UseTablePaginationReturn { + const [rowsPerPage, setRowsPerPage] = useState(() => + tableKey ? getStoredRowsPerPage(tableKey, initialRowsPerPage) - : initialRowsPerPage; - }, [tableKey, initialRowsPerPage]); - - const [page, setPage] = useState(initialPage); - const [rowsPerPage, setRowsPerPage] = useState(getInitialRowsPerPage); - - // Update localStorage when rowsPerPage changes (only if tableKey is provided) - useEffect(() => { - if (tableKey && rowsPerPage !== initialRowsPerPage) { - storeRowsPerPage(tableKey, rowsPerPage); - } - }, [rowsPerPage, tableKey, initialRowsPerPage]); + : initialRowsPerPage, + ); + const [requestedPage, setRequestedPage] = useState(0); + + // Adjusting during render rather than in an effect: an effect would paint one + // frame of the stale page against the new results before correcting itself. + const [lastResetKey, setLastResetKey] = useState(resetKey); + if (resetKey !== lastResetKey) { + setLastResetKey(resetKey); + setRequestedPage(0); + } - const handleChangePage = useCallback((_event: unknown, newPage: number) => { - setPage(newPage); - }, []); + // Clamped rather than reset, because itemCount also moves on its own as + // devices join and drop off the poll. Resetting on that would drag the reader + // back to the first page every few seconds; clamping only intervenes when the + // requested page has nothing left on it, and restores the reader's position + // if the rows come back. + const lastPage = Math.max(0, Math.ceil(itemCount / rowsPerPage) - 1); + const page = Math.min(requestedPage, lastPage); + + const scrollTableIntoView = useCallback(() => { + const target = scrollTargetRef?.current; + if (!target || typeof window === "undefined") return; + + const top = + target.getBoundingClientRect().top + + window.scrollY - + SCROLL_HEADER_OFFSET; + window.scrollTo({ + top: Math.max(0, top), + behavior: prefersReducedMotion() ? "auto" : "smooth", + }); + }, [scrollTargetRef]); + + const handleChangePage = useCallback( + (_event: unknown, newPage: number) => { + setRequestedPage(newPage); + scrollTableIntoView(); + }, + [scrollTableIntoView], + ); const handleChangeRowsPerPage = useCallback( (event: React.ChangeEvent) => { const newRowsPerPage = parseInt(event.target.value, 10); setRowsPerPage(newRowsPerPage); - setPage(0); + setRequestedPage(0); - // Store to localStorage immediately if tableKey is provided if (tableKey) { storeRowsPerPage(tableKey, newRowsPerPage); } + scrollTableIntoView(); }, - [tableKey], + [tableKey, scrollTableIntoView], ); - const resetPage = useCallback(() => { - setPage(0); - }, []); - const getPaginatedItems = useCallback( (items: T[]) => { const startIndex = page * rowsPerPage; - const endIndex = startIndex + rowsPerPage; - return items.slice(startIndex, endIndex); + return items.slice(startIndex, startIndex + rowsPerPage); }, [page, rowsPerPage], ); @@ -108,6 +159,5 @@ export function useTablePagination({ handleChangePage, handleChangeRowsPerPage, getPaginatedItems, - resetPage, }; } diff --git a/libs/base-ui/src/index.ts b/libs/base-ui/src/index.ts index 214f49b..6f61452 100644 --- a/libs/base-ui/src/index.ts +++ b/libs/base-ui/src/index.ts @@ -3,6 +3,7 @@ export * from "./auth"; export { ConfirmationDialog } from "./components/confirmation-dialog"; export { CustomTablePagination } from "./components/custom-table-pagination"; export { StatusGrid } from "./components/status-grid"; +export { TableEmptyState } from "./components/table-empty-state"; export { TimeWindowStats } from "./components/time-window-stats"; export { TimeWindowStatsGrid } from "./components/time-window-stats-grid"; export { Button, buttonVariants } from "./components/ui/button"; @@ -79,6 +80,13 @@ export { } from "./lib/query-options"; export { cn } from "./lib/utils"; export * from "./search"; +export { + buildSearchIndex, + describeSearchableFields, + matchesSearch, + normalizeSearchTerm, + type SearchableField, +} from "./search/searchable"; export * from "./sorting"; export { StatusGrids } from "./status/status-grids"; export { StatusPage } from "./status/status-page"; @@ -86,4 +94,9 @@ export * from "./time-label"; export * from "./types"; export * from "./utils"; export { WorkerDetails } from "./workers/worker-details"; +export { + WORKER_SEARCH_FIELD_LABELS, + WORKER_SEARCH_FIELDS, + workerRowKey, +} from "./workers/worker-search"; export { WorkersPage } from "./workers/workers-page"; diff --git a/libs/base-ui/src/search/searchable.ts b/libs/base-ui/src/search/searchable.ts new file mode 100644 index 0000000..95c5b46 --- /dev/null +++ b/libs/base-ui/src/search/searchable.ts @@ -0,0 +1,54 @@ +/** + * One declaration of what a table's search box looks at, used for three things + * at once: building the haystack a row is matched against, telling the reader + * which fields were searched when nothing matched, and keeping those two from + * drifting apart. + * + * They used to drift. The worker tables ran two filters over one search box -- + * an outer pass over devices and an inner pass over workers, each with its own + * field list. A term only the inner list knew about could never reach it, + * because the outer pass had already discarded the device, so searching + * "active" always came back empty. + */ + +export interface SearchableField { + /** Shown to the reader when a search matches nothing. */ + label: string; + get: (item: T) => string | number | null | undefined; +} + +/** + * Trim, then lower-case. Both halves matter: the old code trimmed in one filter + * and not the other, so a worker id pasted out of a log with a trailing space + * matched nothing. + */ +export const normalizeSearchTerm = (term: string): string => + term.trim().toLowerCase(); + +/** + * Flattens a row into the single lower-cased string its search term is tested + * against. Worth precomputing once per row rather than per keystroke -- these + * tables carry thousands of rows. + */ +export const buildSearchIndex = ( + item: T, + fields: SearchableField[], +): string => + fields + .map((field) => field.get(item)) + .filter((value) => value !== null && value !== undefined && value !== "") + .join(" ") + .toLowerCase(); + +/** "origin, worker ID, device ID" -- for the no-matches message. */ +export const describeSearchableFields = ( + fields: SearchableField[], +): string => fields.map((field) => field.label).join(", "); + +/** Convenience for tables that filter a modest list without precomputing. */ +export const matchesSearch = ( + item: T, + fields: SearchableField[], + normalizedTerm: string, +): boolean => + !normalizedTerm || buildSearchIndex(item, fields).includes(normalizedTerm); diff --git a/libs/base-ui/src/workers/worker-search.ts b/libs/base-ui/src/workers/worker-search.ts new file mode 100644 index 0000000..3f3966c --- /dev/null +++ b/libs/base-ui/src/workers/worker-search.ts @@ -0,0 +1,39 @@ +import { + describeSearchableFields, + type SearchableField, +} from "../search/searchable"; +import type { Worker } from "../types"; + +/** + * Every field the workers search box looks at. + * + * "status" is here so that typing `active` or `inactive` narrows the table -- + * it was in the old inner filter's field list but unreachable, because the + * outer filter ran first over device fields and threw every device away before + * the inner one saw the term. + * + * `session.controller.id` is deliberately absent. It was searched in three + * places and populated in none, so the field only ever widened the haystack + * with undefined. + */ +export const WORKER_SEARCH_FIELDS: SearchableField[] = [ + { label: "origin", get: (worker) => worker.origin }, + { label: "worker ID", get: (worker) => worker.id }, + { label: "device ID", get: (worker) => worker.device_id }, + { label: "version", get: (worker) => worker.version_code }, + { label: "user agent", get: (worker) => worker.user_agent }, + { label: "platform", get: (worker) => worker.platform }, + { label: "status", get: (worker) => (worker.is_in_use ? "active" : "idle") }, +]; + +export const WORKER_SEARCH_FIELD_LABELS = + describeSearchableFields(WORKER_SEARCH_FIELDS); + +/** + * Worker ids are only unique within their device, and these tables flatten + * across devices, so the same id can appear on several rows at once. Keying + * rows on the id alone collides in React and makes every namesake expand and + * collapse together. + */ +export const workerRowKey = (worker: Worker, index: number): string => + worker.id ? `${worker.device_id}/${worker.id}` : `worker-${index}`; diff --git a/libs/base-ui/src/workers/workers-table.tsx b/libs/base-ui/src/workers/workers-table.tsx index 2e08459..1df9d77 100644 --- a/libs/base-ui/src/workers/workers-table.tsx +++ b/libs/base-ui/src/workers/workers-table.tsx @@ -5,10 +5,12 @@ import React, { useCallback, useDeferredValue, useMemo, + useRef, useState, } from "react"; import { Collapse } from "../anim/collapse"; import { CustomTablePagination } from "../components/custom-table-pagination"; +import { TableEmptyState } from "../components/table-empty-state"; import { Button } from "../components/ui/button"; import { Card, @@ -34,6 +36,7 @@ import { } from "../lib/aesthetic"; import { cn } from "../lib/utils"; import { Search } from "../search"; +import { buildSearchIndex, normalizeSearchTerm } from "../search/searchable"; import { compareWorkerItems, getNextSortState, @@ -44,11 +47,22 @@ import { RelativeTimeLabel } from "../time-label"; import type { Device, Worker } from "../types"; import { useDebounce } from "../utils"; import { WorkerDetails } from "./worker-details"; +import { + WORKER_SEARCH_FIELD_LABELS, + WORKER_SEARCH_FIELDS, + workerRowKey, +} from "./worker-search"; + +/** Columns rendered by this table, for the empty state's colSpan. */ +const WORKER_COLUMN_COUNT = 10; interface WorkersTableProps { devices: Device[]; } +/** A worker plus the haystack its search term is tested against. */ +type IndexedWorker = Worker & { searchIndex: string }; + const WorkersTableComponent: React.FC<{ devices: Device[]; search: string; @@ -57,48 +71,62 @@ const WorkersTableComponent: React.FC<{ const [sortBy, setSortBy] = useState("origin"); const [sortOrder, setSortOrder] = useState("asc"); const [isTableExpanded, setIsTableExpanded] = useState(true); - - // Use the custom pagination hook with persistent storage - const { - page, - rowsPerPage, - handleChangePage, - handleChangeRowsPerPage, - getPaginatedItems, - } = useTablePagination({ - tableKey: "workers", - }); + const cardRef = useRef(null); // Use both debounce and deferred value for optimal performance const debouncedSearch = useDebounce(search, 300); const deferredSearch = useDeferredValue(debouncedSearch); - // Extract all workers from all devices with pre-computed search strings + // Flatten every device's workers, precomputing each row's search haystack -- + // worth doing once per poll rather than once per keystroke across thousands + // of rows. const allWorkers = useMemo(() => { - const workers: (Worker & { searchString: string })[] = []; + const workers: IndexedWorker[] = []; devices.forEach((device) => { - if (device.workers) { - device.workers.forEach((worker) => { - // Pre-compute search string to avoid repeated toLowerCase() calls - const searchString = [ - worker.origin, - worker.id, - worker.device_id, - worker.version_code, - worker.session?.controller?.id, - worker.is_in_use ? "active" : "inactive", - ] - .filter(Boolean) - .join(" ") - .toLowerCase(); - - workers.push({ ...worker, searchString }); + device.workers?.forEach((worker) => { + workers.push({ + ...worker, + searchIndex: buildSearchIndex(worker, WORKER_SEARCH_FIELDS), }); - } + }); }); return workers; }, [devices]); + const filteredAndSortedWorkers = useMemo(() => { + const term = normalizeSearchTerm(deferredSearch); + + const filteredWorkers = term + ? allWorkers.filter((worker) => worker.searchIndex.includes(term)) + : allWorkers; + + // Early return if no sorting needed + if (!sortBy) return filteredWorkers; + + return [...filteredWorkers].sort((a, b) => + compareWorkerItems(a, b, sortBy, sortOrder), + ); + }, [allWorkers, sortBy, sortOrder, deferredSearch]); + + // Use the custom pagination hook with persistent storage + const { + page, + rowsPerPage, + handleChangePage, + handleChangeRowsPerPage, + getPaginatedItems, + } = useTablePagination({ + tableKey: "workers", + itemCount: filteredAndSortedWorkers.length, + resetKey: deferredSearch, + scrollTargetRef: cardRef, + }); + + // Calculate paginated workers using the hook + const paginatedWorkers = useMemo(() => { + return getPaginatedItems(filteredAndSortedWorkers); + }, [filteredAndSortedWorkers, getPaginatedItems]); + const toggleRowExpansion = useCallback((workerId: string) => { setExpandedRows((prev) => { const newExpandedRows = new Set(prev); @@ -120,33 +148,9 @@ const WorkersTableComponent: React.FC<{ [sortBy, sortOrder], ); - const filteredAndSortedWorkers = useMemo(() => { - // Use deferred search for better performance - const lowercaseSearch = deferredSearch.toLowerCase().trim(); - - // First filter the workers based on search using pre-computed search strings - const filteredWorkers = lowercaseSearch - ? allWorkers.filter((worker) => - worker.searchString.includes(lowercaseSearch), - ) - : allWorkers; - - // Early return if no sorting needed - if (!sortBy) return filteredWorkers; - - // Then sort the filtered workers using the worker-specific sorting library with id as secondary sort - return [...filteredWorkers].sort((a, b) => - compareWorkerItems(a, b, sortBy, sortOrder), - ); - }, [allWorkers, sortBy, sortOrder, deferredSearch]); - - // Calculate paginated workers using the hook - const paginatedWorkers = useMemo(() => { - return getPaginatedItems(filteredAndSortedWorkers); - }, [filteredAndSortedWorkers, getPaginatedItems]); - return ( - Workers ({allWorkers.length}) + Workers ( + {search + ? `${filteredAndSortedWorkers.length} of ${allWorkers.length}` + : `${allWorkers.length}`} + )
@@ -279,8 +287,16 @@ const WorkersTableComponent: React.FC<{ + {paginatedWorkers.length === 0 && ( + + )} {paginatedWorkers.map((worker, index) => { - const workerId = worker.id || `worker-${index}`; + const workerId = workerRowKey(worker, index); const isExpanded = expandedRows.has(workerId); // Status-driven row tinting: disconnected → destructive, @@ -398,26 +414,6 @@ const WorkersTableComponent: React.FC<{ const WorkersTable = ({ devices }: WorkersTableProps) => { const [search, setSearch] = useState(""); - const filteredItems = useMemo(() => { - const lowercaseSearch = search.toLowerCase(); - return devices.filter( - (device) => - !lowercaseSearch || - device.origin?.toLowerCase().includes(lowercaseSearch) || - device.id?.toLowerCase().includes(lowercaseSearch) || - device.version.toString().toLowerCase().includes(lowercaseSearch) || - device.workers?.some((worker) => - [ - worker.origin, - worker.id, - worker.device_id, - worker.version_code?.toString(), - worker.session?.controller?.id, - ].some((field) => field?.toLowerCase().includes(lowercaseSearch)), - ), - ); - }, [search, devices]); - return (
@@ -428,7 +424,7 @@ const WorkersTable = ({ devices }: WorkersTableProps) => { />
- +
); From d022db125d83bb73b2616950fe6869c2ef06236f Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:57:50 -0400 Subject: [PATCH 03/13] feat(ui): confirm and report the result of removing dead devices Remove Dead is the only destructive action in the app that asked for no confirmation and reported no result. It fired straight into PUT /api/device/_/action/delete, and the reply, which carries the number of entries removed, was parsed and discarded. Nothing appeared on screen either way, so a working call and a failing one were indistinguishable, and there was no way to tell that the button was wired up at all. The backend was never the problem: deleteDevice() treats "_" as "every unconnected device", calls DeleteUnconnectedDevices(), and returns the count. Now the button opens a confirmation naming what will happen, and the result becomes a toast: the number removed on success, a plain note when there was nothing to remove, and the error text when the call fails. Every other device action in this tree already reports through toast.promise; this brings the last one into line. Also corrects the mock handler, which returned {ok: true} where the real API returns {status, message, devices_count}. The mock removed the devices but could not report how many, so the UI correctly said "no dead devices to remove" while several disappeared from the table. A mock that disagrees with the endpoint it stands in for hides exactly this kind of bug. Verified against the mock large profile: 50 devices with 44 connected, confirmation shown, toast reads "Removed 6 dead devices", table drops to 44. Co-Authored-By: Claude Opus 5 --- libs/base-ui/src/devices/device-page.tsx | 58 ++++++++++++++++++++++-- libs/base-ui/src/mocks/handlers.ts | 8 +++- libs/base-ui/src/mocks/state.ts | 5 +- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/libs/base-ui/src/devices/device-page.tsx b/libs/base-ui/src/devices/device-page.tsx index 6aa3cbd..9ccb276 100644 --- a/libs/base-ui/src/devices/device-page.tsx +++ b/libs/base-ui/src/devices/device-page.tsx @@ -1,14 +1,24 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Loader2 } from "lucide-react"; -import { useCallback } from "react"; +import { useCallback, useState } from "react"; +import { toast } from "react-toastify"; +import { ConfirmationDialog } from "../components/confirmation-dialog"; import { apiFetch } from "../lib/api"; import { statusQuery } from "../lib/query-options"; import type { Device, Status } from "../types"; import { DeviceGrids } from "./device-grids"; import { MemoizedDevicesTable as DevicesTable } from "./devices-table"; +/** Shape of the reply from PUT /api/device/_/action/delete. */ +interface RemoveDeadResponse { + devices_count?: number; +} + +const REMOVE_DEAD_TIMEOUT_MS = 5000; + export const DevicePage = () => { const queryClient = useQueryClient(); + const [confirmRemoveDead, setConfirmRemoveDead] = useState(false); const { isLoading, isFetching, error, data, isSuccess } = useQuery( statusQuery(), ); @@ -45,28 +55,56 @@ export const DevicePage = () => { [queryClient], ); + // The button used to fire silently: no confirmation before deleting, and no + // report afterwards. The reply carries the number of entries removed, which + // was parsed and thrown away, so a working call and a failing one looked + // exactly alike -- nothing happened on screen either way. const removeDeadMutation = useMutation({ - mutationFn: async () => { + mutationFn: async (): Promise => { const cancel = new AbortController(); - const timer = setTimeout(() => cancel.abort(), 5000); + const timer = setTimeout(() => cancel.abort(), REMOVE_DEAD_TIMEOUT_MS); try { const res = await apiFetch("/api/device/_/action/delete", { method: "PUT", signal: cancel.signal, }); - if (!res.ok) throw new Error(`Remove dead failed: ${res.status}`); - return res.json(); + if (!res.ok) { + throw new Error( + `Remove dead failed: ${res.status} ${res.statusText}`, + ); + } + return (await res.json()) as RemoveDeadResponse; } finally { clearTimeout(timer); } }, + onSuccess: (result) => { + const removed = result.devices_count ?? 0; + if (removed === 0) { + toast.info("No dead devices to remove"); + return; + } + toast.success( + `Removed ${removed} dead device${removed === 1 ? "" : "s"}`, + ); + }, + onError: (error: Error) => { + toast.error(error.message || "Failed to remove dead devices"); + }, onSettled: () => queryClient.invalidateQueries(statusQuery()), }); const handleRemoveDead = useCallback(() => { + setConfirmRemoveDead(true); + }, []); + + const confirmRemoveDeadDevices = useCallback(() => { + setConfirmRemoveDead(false); removeDeadMutation.mutate(); }, [removeDeadMutation]); + const cancelRemoveDead = useCallback(() => setConfirmRemoveDead(false), []); + if (isLoading) { return (
@@ -105,6 +143,16 @@ export const DevicePage = () => { onRemoveDead={handleRemoveDead} />
+ ); }; diff --git a/libs/base-ui/src/mocks/handlers.ts b/libs/base-ui/src/mocks/handlers.ts index 0d86bd4..17ac685 100644 --- a/libs/base-ui/src/mocks/handlers.ts +++ b/libs/base-ui/src/mocks/handlers.ts @@ -46,8 +46,12 @@ export const handlers = [ http.put("/api/device/_/action/delete", async () => { await delay(200); - removeDeadDevices(); - return HttpResponse.json({ ok: true }); + const devicesRemoved = removeDeadDevices(); + return HttpResponse.json({ + status: "ok", + message: "Removed dead connections", + devices_count: devicesRemoved, + }); }), http.put("/api/device/:deviceId/action/:action", async ({ params }) => { diff --git a/libs/base-ui/src/mocks/state.ts b/libs/base-ui/src/mocks/state.ts index 203436e..505415b 100644 --- a/libs/base-ui/src/mocks/state.ts +++ b/libs/base-ui/src/mocks/state.ts @@ -118,8 +118,11 @@ export const removeDevice = (id: string) => { mockState.devices = mockState.devices.filter((d) => d.id !== id); }; -export const removeDeadDevices = () => { +/** Returns how many entries were dropped, matching the real API's reply. */ +export const removeDeadDevices = (): number => { + const before = mockState.devices.length; mockState.devices = mockState.devices.filter((d) => d.is_connected); + return before - mockState.devices.length; }; export const setDeviceConnected = (id: string, connected: boolean) => { From 28baf47273fd0ae7459cf4daf784c93506d9e26c Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:58:33 -0400 Subject: [PATCH 04/13] fix(ui): stop rounding sub-millisecond request durations to zero Avg Request Duration rendered 0 in every time window on a healthy deployment. The values were never zero, but Math.round() flattened anything below half a millisecond, so an instance running well was indistinguishable from a metric that had stopped collecting. Durations under 10 ms now keep two decimals, and anything above zero but under a hundredth of a millisecond renders as "<0.01" rather than collapsing back to 0. The requests/s column already had this treatment; the duration column did not. The four rows were also four near-identical copies of the same markup, so the fix would otherwise have had to land in four places. They are now one array and one map. Co-Authored-By: Claude Opus 5 --- .../src/components/time-window-stats.tsx | 88 +++++++++++-------- 1 file changed, 52 insertions(+), 36 deletions(-) diff --git a/libs/base-ui/src/components/time-window-stats.tsx b/libs/base-ui/src/components/time-window-stats.tsx index 063aeee..1c99ae5 100644 --- a/libs/base-ui/src/components/time-window-stats.tsx +++ b/libs/base-ui/src/components/time-window-stats.tsx @@ -19,6 +19,47 @@ interface TimeWindowStatsProps { const formatRate = (value: number): string => value > 0 && value < 1 ? value.toFixed(2) : String(Math.round(value)); +/** + * Request durations are routinely sub-millisecond, and rounding those to an + * integer printed 0 across every window, so a healthy deployment was + * indistinguishable from a metric that had stopped collecting. Small values + * keep two decimals; anything under a hundredth of a millisecond says so + * rather than collapsing to zero. + */ +const formatDurationMs = (value: number): string => { + if (!Number.isFinite(value) || value <= 0) return "0"; + if (value < 0.01) return "<0.01"; + if (value < 10) return value.toFixed(2); + return String(Math.round(value)); +}; + +const WINDOWS: { + label: string; + rate: keyof TimeWindowedStats; + duration: keyof TimeWindowedStats; +}[] = [ + { + label: "30 seconds", + rate: "requests_rate_over_30_seconds", + duration: "request_ms_avg_over_30_seconds", + }, + { + label: "1 minute", + rate: "requests_rate_over_1_min", + duration: "request_ms_avg_over_1_min", + }, + { + label: "5 minutes", + rate: "requests_rate_over_5_min", + duration: "request_ms_avg_over_5_min", + }, + { + label: "15 minutes", + rate: "requests_rate_over_15_min", + duration: "request_ms_avg_over_15_min", + }, +]; + const TimeWindowStatsComponent: React.FC = ({ stats, title = "Time Window Statistics", @@ -41,42 +82,17 @@ const TimeWindowStatsComponent: React.FC = ({ - - 30 seconds - - {formatRate(stats.requests_rate_over_30_seconds)} - - - {Math.round(stats.request_ms_avg_over_30_seconds)} - - - - 1 minute - - {formatRate(stats.requests_rate_over_1_min)} - - - {Math.round(stats.request_ms_avg_over_1_min)} - - - - 5 minutes - - {formatRate(stats.requests_rate_over_5_min)} - - - {Math.round(stats.request_ms_avg_over_5_min)} - - - - 15 minutes - - {formatRate(stats.requests_rate_over_15_min)} - - - {Math.round(stats.request_ms_avg_over_15_min)} - - + {WINDOWS.map((window) => ( + + {window.label} + + {formatRate(stats[window.rate])} + + + {formatDurationMs(stats[window.duration])} + + + ))} From dce6469b582fb85e7a95426ad60f3db9e7096448 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 14:59:04 -0400 Subject: [PATCH 05/13] perf(ui): ship the app logo at the size it is drawn The logo was a 475x475 PNG weighing 225,847 bytes, rendered by the header at size-8, which is 32 CSS pixels. It was the single largest asset the app served, larger after compression than any JavaScript chunk, and PNG barely deflates so serving it gzipped would not have helped. Resampled to 96x96, which still covers a 3x display at the size it is actually drawn: before 225,847 bytes after 13,020 bytes 94% smaller Co-Authored-By: Claude Opus 5 --- apps/rotom-ng-ui/src/assets/rotom-ng.png | Bin 225847 -> 13020 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/rotom-ng-ui/src/assets/rotom-ng.png b/apps/rotom-ng-ui/src/assets/rotom-ng.png index 041950f21894d00b60e9655366625cc89e5b037c..e535604cd252a0109c73f077dbf6236f23a06714 100644 GIT binary patch delta 12621 zcmZv@1yCHpw>JtQgy0DtG=$*6f-e>zcp$j5Sa63$7Tb^@3GVJLS=?cno*+9HXGu{Zai0H+`M(YR zTVKc74kY>hzfArY`~PFb^yo+bzZL%5&;MX1jADvF9y=iZpSA+j?R=~p^*`DN!NT^wE9wOq|Dtt9#W%jAEs{|<8W5sy#ls%k`J>Br#K<%%kcn*%= zI$q_*N#*N $?z)h%tbaZ*z=2e@DBi&zcWK)z|N0-V|TYRMcj&P?yWgUb9D;kfTgg!Y-R2H6dzlj(4)F>ub@J9TsQGP_lB- zVRtSTXOgn_cD&D;e%*XK(-_#hCsSB0EWj-7Q{SHuwaw-4<{pYj`v%8=fB>3jbnW-| z_sJvHgst}$++$$Wfmfj=4_FCQHZn3oguO5|MfwW&C3|mUW8)i3SpooA59J99#M}+6 z)UE_Lq?G;a;=&{B0hC14_(Qjda;eBZ!PH9%kN#WD;MTXDG`?bW9m7Y zeQy}lp}GYG?<=JviA%LPG&V%!BgSJJ2){>@O^VJUk(BKDA>F8#OHjjw;;_@%WmL^c zpLH)y309;fmB~AbqqvlhO{C9w9^g(vqkMRM0iS6L%q@n#{|yD$emsN}7%QZIayu@9 zT!@8B1jWVkZf*E&c@F1Xs|_~-QMLFRjW8p-`I2J1m!ZkAqn;vtbnl{X`SY{9SP2&G zjDh_K8(W#yx5HrB)))9zt>Oq7aI}+04_PLDiBWufbv5UKJmty7#l@UF)T!#7?z`m_ z&Ap?!BRY;(Iy939dT7W$Vh}2`TFe-)mrk7|d3`;8TjpKHhykSLg^sJFQ}U3@e9MM! zA*&L7Qai)eE~wu%+RH}lc%55wc@S(Dg7&@MAEk~YLv-yK(K+l%#_rV= zjg*@htD)k=-46lQK06D31E=U+wb63`&rKOY_7M(T8o<*S3z4*?(?EZ54KwsCNn2OE z?D29R{zA1C^2X4nsMd~4^%pR+YQ9&0Vb@pjve+@O!D>t`YA)y@(@-C2kg!6$fQ#4& z0hAVIW%7a!1(tc}tmK&7O6Wz+$uN95SLiML(S!x$zV5HMkLb~j6!g@`9vo+CpQ~U2 z4^6u7*7vUlAPV~jN#RlF8%z@1V^)mtjo&rRz%5VM_z})`dO)Q*B9Irk;+we)mNn`} zNPx=Y#5m1u{zSiM{S(M*yY}j9$~vA2eWFxntMfh6tBio#CZU?Zkz_S-2Q67yUHi+0 zw7B*%_O~Z211df7j%xXSQggQxFHg{G!Kc^$>t9?yK*(s-2KZ>zN#s+4SqiZ{!Zt@| zz;*Ekg*c`0M%R*JX*vW0N@`TMULMVJtL<*BFdvg6HPB)3 zgmgB2FJD-@L>!YkzC4xul&0H1)AyhfCbmPhIB{)8a+L60M=WA>h zR4&lN5OSJVgL8ZM6hYWQXvFjfmf7Z9= zbPDt17m|pr@n6ZYnNg|gdKJGa^t}Zh52j;@&wP3OoCfP8b@%oWb>xpGBNgf(8}tQJflB38BU6W@7IeJ55yMT;6Q7ITt;Rx zgw(U^5|DvTdRr7+Ne(Cn538Z~jLj1M-6|1y2Pmbmsl4U$NtrB4KNEUMjzWkB&;_Q3 zqpBG8pQS^R(G|u`ydYwd&ZTJ2xo9ohrAD=){WSD(PA=t%x+p4Cc(iuMH)8S|R0vJC zs(f$E+c0RuY~fw~9Fzoyf=)O47C9)>v!Z*ILqF4s_6Z+$^{8CBze^G3`nDR03Hw9O;)kN#54lCn+$J-|5J7*QRGn4?;YO6^^+^ee(GY`y)Jy{_d>cM za769ljK|Sz)00qmo{fH*jcCC;#(%-^v;SmyhU#ta-}(R_`wz|q6;tPL#tvNH4M-v* zxY{O|j~_fNB}85mc(BUoJuNU2l}AQT1^v#-o9f;hWl7wk0;NG4xm3oAsmJXDKWa_V zb2?B~ChgX=&p!VQd6(UEvYLNR?suSfimy9G!E*7M7`7OP6Do;VwB~j60@!-ztE^(f z)lw8*{pL%doMbjvYLAvvOP$4Kq7rMd`+j$63wU{@`sK6F|#iaqta1iO;#O zGa4TFRBYU5)kF8(M~er+r2v=jM=(1b3E@dWzvJC+o+Rs#5I{BJJf3wd%yN!of%YWy z+BG9#JtTDqi^-Hb#s<+P3s&2@kW-r*!@z81TEd0Ly?FuPwqK@G{~=08#C|A%>+-qq zG`U68#_9Lh*>L#mgmo0fhOV6e)RYKdv{cQi$2}KAp@#ZX~LG0 z8pJ%$TGt>Rkv6WrAAX2tp@vVL^+{YvC{h%p5m~&Ay*qDMKLu&}MaE3ijzxo^fKAIv zDJ{G4-knt{(CEe z5gIu6|UwJrx2De{8Im`N!?dCA_9r!n{f+F_ulBvz`2we_1T+ z^q3B$w&sm+Z5$hWhnlgTSH^1>^wn+&!6XzlN{`-b(3mPoi}uaT78_|Tn#Pw000NM_ z8I|aI*8O-co(_wu5!$AdXmP9G@GxkqssXgbdb#a!th{_C)ygIc3vsd_ZW%Q=87+%K zhkg@rQnoT^k#XwVxGEqr0Llq?uMs3ZpFZOW55J&F! zNagV>>@wrotfR1R3lbm-zjz9Amz`j|2&Wd)ed!aL-H)d2#$KL1AX4to#J6F$uk~RG zje5zt+WG)=rEYEDvFhzf8^i_2Q?p|0uR%q{UsF@3g_fdLYX2Ckbq4Ll#u>*s-FlsQ zlfU)#AEww9XcmpDrN-^SAFHt6aaTE9P4Bd6{|@xuNS?7IN->9on#bNXd#LtMX|96I zl+=890E00=(h@9LbXF2C2BqLfy_IOq%F+#c#Xm%!j$c^KDD$e;7mtXp<$jDJF zC>IY(f%{>Y=)Cm3Jh5H>cEc%0Kiu>dDRe#~)es?TvwyN!UWD?DlBa&(TV+jaB4Qh0 zX49=)z|;spHbNji(m`#>YRz_I*YX999vJ}dxA%Emhp*{Q+sz9s>$OXmT>hvbB%-@% zEV7rI+hZx|#+M9mZ+Azt_MAD*Q@slcLPAb*oyyFdxhfYn8gw|50RTFrWk3qBu`VfN zmRjt~&M#j>*@)_%W*tw9o6h@By#_Ewa zn~N0}3#;F;v8UrWQM=D`}vu~b9QQ9o`~kK2e!&mV8F zT^}P!11=xeGAY$h3b@?DPa?Dk-C49%Vz(Sbx7Lo3hFz6Z&v`!X#=TxCr@Rt1D?eJ> z@-1nQMo9F%S&Qxr&}6p`@{h8!8glB0E8NbawFtYU4JmCN*PI zq&?!u@04Y4644e|;VkG_q}fyxNc7aGelEW#LEJ@LOuphRvw8hV^{-rfzAc#PK0PZW z@&z72SkP;4?Pv`TGbK>8`Imkb>n`e6mvQ)+ro3#3hH;0TT%Q;A8i4#d#M4QIyWNHq zf6M8#FEZe|hR?{zuux=#axr}tSGG~aRezmYGhaP~Y6k!LBH^C;QJ;!bz0_@!Y5f=^hiGsv9br+@GTv$_9~8kHnBA~(kJF+8`5Eu?Hc`}4<4V80ow$6V$U;bF-2 zu1MkcWiVf4CA~QwKk3o(VEGemT)PH;Jk6o6Y%edBg6#GKeGc+N%MkmW{}3(@x za~1fn+I*bmS?GNicT*nFz6~jmu6LzH3FN8+2lYlmExx0`f2aR)1-n8C{nzoAT!X)X z16m@T>>1jM3=&Z?Sgsj6ElWy0Fe;HKo7vh)uCd z=jf$bAb9V@=Fp8GusGh6PRViSG+C{aFRJiP^w-QR3qb)O+qyonAz=&h(8ocVaMAg1 z-{B(XAA;D?*J4~~>!eX5ZcHW=52op$4@FlyaN_N6)Ot0ZhBgq<)|EF3M8uahI^P?> zNN06_E08ZX7;rQ`&dFDPup-&9%iHcu3g0`6?cnRkPl#M4V_c^7dzRn?b@?9Le}4zt zVMeC)^iCa-S&)g2heHUllh)eCs-YYWAC!$OZnC<^UXh{&|pcAhZ z$i1FlK6u7@a6wdy^YCC|jw5WciZC56i!CO}_l1%uU=HYWvbQieZ19=c0ph>eZ2fU* z$KgvqJ*53l=DTcSM8e@?7)M!`d75~8AdruppX9ciIu>eW`)^RB$_j402=ZmJ_CbL8I@YgPhZd%i*x{$A;a zk~E@5vT~iw5=q}K^ggo3&I;I3U!JeP)@H0Nhupy=7u1z3+*-r?R4=yRkC|B2U-9O- zWX8v0QZGma-(1nx9*XUyWT_Z#rpi#X>?)7e0^kB1@*sz~}M}LS$u> zZWcF(Z6k3$1Nd34KjK^lH~tgpTY2InRQsVxi&>jVFTgIe@aMG8LG?bx`q3Ig^;d6y z=|bmCO*8A1o%!wE_EN@BP3Y^6naZ)b^3e#3LhB@rd|~+zsMLd~uk`{*Oyh;9PTz|8 z0qJLYNJA&!L3EE+jH_f({j;)N(yyy{tNNo@rd>_;OsmP!!fDL7ZHQnP~(%DX2r&aoXo)fy{opy3*g@4MP4FWNFIXf8f%O;5op#+-oR)MQHht_r886CQF0S zY2K{liz(o}Q^5jfHYalbo0|EUV=40m#Cg7EB0h_Xd%oFUMmOXqah^=FCx(v(%tIAc z&9Pi#fGqFGnoYK=in7mH`CzKn!D9KnJoDEo<9f8+0gi@!Sy55Z=y$*hj_0s2tylT zA#4MO=sd~sS8UVEYkcl>Z_BUV>4M3e@nR*%{=mAl5M?+p+oZ-)wq+Y5Xp763L3GpV z1y5&b^%-kE=|rU(m9=+s{S}Veur?Vh#q6x`KI;)Ts{doBgaF!RtdqY&|6ej!A$9ty zy%4<3lG?Mv(5xYG1$YgKoDNxD5FXlc{M9jS^2u)hNGA`Z`Rexf+?vWn-MYAJNk4yWn7l(orf-bcqH7hhrWsxozY2n&GF>$}qbcCEy-l8N2#wQ3F-h?VS*j>ct zGySVN@~G?1Rsh7sW#?*bCWuh%yx`{;o3BI2HukKuR3J#9q#9*(MJv*ld314+zcLOQimmiHIm zo2)n9`R(J|un0CGjg8O94lRo8C@BUn48iDdYT@$qGJnX;MrZv>nunoJ!<&WjOcsg4 zLhyaxPRT)$O$WIu4T@u2Ths+|b9HRnG{QeBVfX$|qq~hoY(gHt3i)l$7B{M_0PEss znNrk0K|hng0%!`JRDjPS5ut;h#>F8sPa<7lhY`1lK>5>9GW(bojukE1=O$qbSZgQX z`#|1xJ_zLSWYbC7JoG5L(;T656%%=h@3SlsD<)+onpOoOQThqLUK!^Pi@t zL`6!1|n%(BZF- z`xCW~hqVKE058eY$(AAja*wcon5)qk`SzDFB>kJu=j_^VnWCgP@k6H+YL?ijkrj&}AjsSI17wb5 zO|akNN1Sx!3%DYpvPyTK5~+7^Y+2wXkDs%=m|k~Uw|CLPQ~($#eihd@QEy0p_JwWT z$^H(!{5xvxH=<3e7{Z%0Gc0FWSFdogdfnA0 z66$<*cLlR*8|Od;Nz+~Fe69So0tvtW*^nK2zrV}nXW>8htS}7A@@)!vQ<}`PwL_~v zRQ}QCVW+L_iG98OxNz4_+-^ow`G|6F(DrVK5$DC(@k>8#{xsy7*AOSa%0=50sn^Yi zol(EeZ9Fhoo*p;zb=rQz-bVT8bLfJclM%%^Fs;~$<2h}~Lg({hKly!pVn~!i(#sS| z+_w9$BeoCdY15gAKg(^r4o#r=!*$zE34Y0!P^?+ci|wA>bd%|UDD3mtY-l9itY}e8 zB;i80G&Tuy1UWc$)#}gkLGbP6V%~fs3Cr21rr)9@!Au8a(blPWveP^R-5rH_TXiRgK(4*6{q6p^%sHtyJb#%q0R>Td&7B( znQtDgrC)1?OYcWhdlu6B-o!9?dD4l%UR2mAgXQXeF^q8Qw^cbYP}4QWl>ZGA%+Z5t zy)gk2S{*qhA1s~gj0}SWYO^Npq)Nm$4*urKyl(Q`uiuqB3aARUV}ziUZP^Q}_xiG) zH{j4|i9|xAvCjqv(*q9UzIz!y>*%OA>r9-Ih}&x_Atsb7$>#r}IRI`61Ng9naHVz2 zM=ePPfRvNewVv{GAvix2p2cp<5gs$oQ(DlPwlp`}NwrJbTnEwn>0 zWU90hil}9}P`CSlg9)j>nRz*2rCMZ)DqXmaN)E7XN77SIe)=Sly#y=t@2we6W=pt{ zy)F`9kt-<>tx$8fY0e-GjYdn;!t%0yG1vnkItaxMpUvv5_z4&FE2Q(hE5GIP-Cx{2 zo$)Bs9t%80ce*@MFIGwmM!F-?yS4LL9e#2;RXz20Cyaw%)gT`sC*!W5RN-|`@UO0l zg+Bl5n{-%xhXvDjJ3lXr#ZjUd`KT>4CiDBF(VSAzQg?^=n!>W(cE{IdO@>l9)gpy&j*xr`YN-qETQ3@R^`R{0BDIfU;j+%kvi)NMSVOfeV4`N2cRftj^52{oLl2BZPmnQuvVMZh5@h)OcRcWS=hBjv04JO>1Q-J+S z+q?{wC6&)k?wht8i|gzV+WI-u_7|=UVy1oy`~`y=d9^_v>V$`1L&x{denbM%<1)w4 z2EsON=Q(!hOO{E%JoK&&J-z~v#}4xFem8-8x{>7!0k=s6Q{_=!Saf=Y4j*n-b~O&-t}ioivskNvQRmyY z#AN%818D0HQTT18MjhOPRR}9rLsE|lkRvAey zt8zV%{Lpf%^B*nlL%R!|lH3e#@(wR$X76YCe zz6#W&hdy0jVKN2er;oB&I5{FULceAq zzso{jdXDK_2MeVTxan1jl;r}XsVle2G(QhMR1Nk*iDqvjy;!HlR zGszY7rd2Q$OsP&unvu-#^0$UO z*mEUga!V2R&k5|V$VaQ+5HERaYO|hwf`pU`2J^E2LDC!a6DrE*P>)v!8h>dY*Nm}U zXwZQP2^wi^Gdsm>3;*4Yy5k^t|LU8u*O$}4Oy1~_+277HP0Otod-m6&Rs>q??d`f1 z3}UY1Y6KiYJQdxoA%l$XM(;{D6!~&~jwRqy2=9M1F*ImY{eA7X{;4x?HCRaL3=W}P zc>gv;ZH}&43<+t~sd2BcxW5U3+7PkR7dAO=$>e%d`#TUm=;Y@i^SX?t%7kSB67N}5CU3(Ubd>HbYm^@I zwispAyu9x1uj%5*ylNb)za=F^^L$y=5hSmdgSkp?MQ7Bg6vdP{u+6j1b*O**wz^f|f& zz>*i+Ys!^0hM%L42}Xr!CG^k*-1L(n*SUN?x~W_%{RJQtuw(71SVU{OFM(82b>6YR z34(19PtR2`mxY?+J)Tmj-nx$1ReR}cW}d3|c_h5ygXaC_RWEePP0u0z=LCXZ!S}je zhAR~|EcJW3>pn%>vaFFShgbd~5%HAh4l4(MKx*8xU=18cd*T7iTK|#{H-aCFW}f7S z7zjt89%O_|oM5J#9KuK0%sEI#TM)?J_;9@|opA@rSU+=36 zY)}tZ3vSZMV^`Jo`Il#B;Adksl+DGK2n{&0eJ+C;as-X6jKm0iGPy;DG$=dU0~w;6 z?fKV3i!B^{<5rWx(aMjghy2m;L;*P1-I&oF9Jpwan$J4m2l>3V#p41*Mo{ZyG)mvD z!nJl6mXg?R##P+Kyx=moGJvL6kr8ATl}x>>py5rbqcmL`mlRBBgWnI8INj^ceBU6J zOd%8PDotrhZFW#lD+~2UD?hth;9<}9JeP~NB~8lp!C+%*Dz!*gf8 zr77--Vy`Y?h(MHqdgeMZJj>eggHW(&5#`o-1Sxbj-_tLQi%otF`TF1Jgo4lP(+7{80tJ@v`3^H>U6l8WUS#~(Na$vu>-{5LX1BALLS*=CRz_6{f^Fudh`8Im36!qOx3fy_jX5;os@mgC@G7Zqz2BcO z7b~4%(D_cV?zVM8@p5;Luz=ZjuSYWb5*{%uVnRYO$iy@5+5&6>^8icWv(3Qj=Eqop zb7hIgn9rM+TT`!;NO=ZzF?BiUl<=fhruMy#SzXrPfZOn64$@EkBCpWIjs%p<h{ zT&d-M1mu_yfv)bB(U`$T!gF2pbpGUZKhpi_FbKR?lEd zhqfPmWLFhtfYNvxz3Kr~#H+@iOv2ZaQa8??Uv z-VPC=&=(e|gc9yyj~wHi@e7R6()_%`K@g;c=RLPkw5B4yTqD>C=#Wz7X=hNN1}J); z`RzPr7(ix+saera&U6F-+p2lM68sI(&2}Oxv++H!DeMkULk|>lv0~sH2vPmOctXW;6v_F z`R9rXKk}p$0B#S;%Jb2sZ+nfHTXd8ttB^Rf*N#mHFngV%PvkLeKyA~HV&Qd z%##R-3DMuK6uM#;&1zzw_X0R%27vlhtIF!V*qcZQ5cK!)7%JM$+kmleD>lU@-qKlx zq%oyE%ctfg`hHt+vTaSd`NJi$P1~hP_k54}F>|$H$FYUdc0J+%&AaJ$n-nw9l zYgIrTS=!6t4X;_78uMHn`?pb7|Uk;ZP-$Kr7jiuKlD&{NUzq<-&Z2ScyG`(XFUHLc) zJ&YE?A!^*C5x^45VM00yOSebp*Fo^aq%2HqV&bOk#aTS@_8&Qyc&soYU!IEXFeApz zeAgfD_OPNUCql9J-8}PN^>LcfLaD^tmttelW#`)rhd=a3Bj!g;Y!pZQ9AxNm(;(!5-g?=5F-z^3X3rgNK8}`k6A6u@#@-{6^NwU3Sk|M5O114C7BE|XTSyf zZ_PC(@&0qZyG~QxJ6OZvot$`f@tcO64$e7WQ2yc$0~hP%YF}_F=Q2+yZRZ6%!kDC0 z$yp^+_(l_wNkli^x6>v2?&s)%ETniyHo4?Q#1JaV8Kr!6us76Lo;Et)O`mmDKGzUZ zEFl4`XFsSs4ouFmR>RZyK0y+%TgmX2!gS?uT_6wt@w0VAq>*&#yNI55a~=^bH=H9? z?C(d`;j$`~JtJ!0_g-2@UR(~RSH$$xGga^RSR*|D{756>3K=rO<@#z9-vl9X!F*XN zg?^HWv}*}#XUv*<&H0mix+VdLu*>2`991IEU1O%C_dx!Al80&to6c2zTmGCZ!kdu?U@JK8w&lm0o%bIw&26^~ z@T`?+OSQ*qDu{4&59CIWrgZ%yvl@_ozk1RNZSY)m6t`rppOX6pVZF(ErquJ{X&Xi` z(~DtzmfrYnNksyax1fYY3S@VHa7LDMXS*AiObEP%hfe`!+yuGZ%D~DtHa3WsEUgO= z(c8-d#pj!tII-LAVzB&R>BFl#3`&`VOxMRQ9wGR`)QG@J(eqgqVv@*=Ui?kap`u&Q zKB-nIBgN#kq#HzWOP?gm(mRtEoAvr)?kxh}(?=UFB`BYts|2j@N8^7NQhUVfo%HSe z`Dr=Y!~izu^e`|pc7wSY#rv3C27;I5uj1E#^EL5psEL5mU$nvHa>d{;;C6jGUhwVc z!|_GFqhNFVSHwH<)v)!6Z%btfD{mF3cU>QG;f$M&BG!HC&v}HzC^koG-nKe%n&V|2 zlVbAvMD;yZMK&8A0clhx6IeN?-!yE+wYvWTOfo6`g@=u@rb13=zb|`=Y&NRrDp3iA k`R1wgc&&z@J@2HJJ(XBZ9dp?J^Dl#voZ81q8MANy4~0nz`Tzg` literal 225847 zcmY(q2|Sx=*FWAqX6os*Wga@UmUe0xqot@NN<1AiMHL-gP(iJE)SAQ=Nn~0bs+N=> zlq8)|RkiP8i5igzk+hb?P9>(^-~0Rj?|kmhb=_Cab*}p)_vc*ae81;T zyW{F`<{R~IjvYI8#>w$#_hZM7PyT)W^Mq_9Iq~W>S#uob?(oyGYNqD0?BZFlr&EZF z%dsD2{eK?&`nb|DxxYnZpJT_>kA3}L{bR>&9oP8ZzWebX{zv8?$Bw0j9{cKlWFE@e zzmG?2sdrqJ?irZx ze|q3}_Sui0%zlhGdiVXk?|!^fa_j4--!y*v&u_0fIsS7_M^7h?sc_MCWh|>}xOjF4 zzkD!>NHXJ0i7GpHuA5ne64$-gQEh7iG7((W$*DwnBGw}_P1KCL_BXApt=0GT_I656 zeSC7nC^X|1f(dHzYg1|n1Y!qv=eYnY=NtBI4~8YN|0?){bEct3b>&a``uaOCN`DCj zeION&+EBuC*pIYM?=b=6WspR2qL|-`+S`7d<%RfV=kEp;dhI;PFAKW*!oY@Tc;UpKWxwQfmD zz&o(7W>MVEbEE6*q&B8B8^j=-k(lkBRjNME`wla8O)+eHKa5j7Z5P+gNEp0fWP1YZ zH+{f8>_h2-w`HWU_{@>;0d?OMmMPoA8;hTt?QLQua>1i4HZlch9@uy zhqXA>;s-SMHeSn5riR%oXf(t7dBYrdV_LEbIFdT5To$D=9>##ib&qL``D~1s$m5HF z`ST5=7lRYd#mg$QVP*KKWe0t`-F;df&58N}y#58wP<7b0L1tx)YnW{D&Zbgoz6xU? zBLXtEDrzoa4#id~WyrI;ud7WE?(;1;-VIJvBsEi4(P}3d&|f-5AjX>I??QhZ{8vo` zs4yuOYLoI&jRM^Y)C>GV|9wW({UHK9mQiUr%z0;Cy$%aBK&)04HjUnmBQ*AYwr4$= zMv=6f0RcJA+Vz;V>x{R@!1a$xgDif0&{fYBdecCCyN`AqlAFz{*ar@>C&xSRT;aVwAY9XbSCm)Z^Uanj5 z)Gf%Z14r0ki$^W>gTJz}CHJAv_^lT~FOL;aMRVAHW&{~nem6kvi}wU8$8Te8*z8oi z&B%wPeDhDeua=NLcZ9d1PmAh}jBQojPPZkAD$Bm=xk_$kqlJZ-+vlG(1E6!n!Jbx0 zE-#_>&*V`i?g4LO>_dp4^TU;9j+1xiQo9{b1y?WX>0UhSYu&F*7d<_Np3gyJBdfBq zjf1Q2(}-^^icv2yv+5MFZa%yyN^`QQ-*b`lz%eX{1r5$>EAC(8-0a7i_ci3ZhcEsK zJ|h~^*U~P+U?`sUp;<$qh&KWpV7@XtVT%%yVY3(ow2HZT>wxrt4paB>4T~w-4enyE z0XH)TTQ|hVwGPK^aty<|Z(zc!^Tt*>IrS$Fk(Zx)zxTfq{iX99aJTZJ9%;un;q&jK zcB0EVdhnv>Tsl);K60uR()9xw*w>`?iks}%VL~Y8eHd`G0|K`K&dkr} zo_9L~{LoOI61$SAj(qoxx9?TJRd&%srax#y~zAA3VD?LmIW zJn34hycAaL5~iyV>aqi9PBwS-wo~ddAF>!34R5y>4%EB(Jj@}b=VZjZWSZ8%_~ zodrj3(MY?6a`INh$w9hreO8l?Ve1yXy{&#Q;LC&)8{6=MNx1qg&^fHf+IO`F%f-)D zkJFz*qDj~VT>Fv+&DhP5WIAXca^~rH4N_{BzrR`4$5l)Ut9`(fb6k9F#`CBy7CTg0 z?JwJ>wsVfj<1|{C{zgh5oOGi>wlQ@f%X=;`FVOt8nju?RbSp&)$S^=bH1`unkI+<` z*_xoTiRY+$FG8J&KSm)ob?{RL{ z0~$X=f{=7D!Lu~s4KP^h9{<;^00k7&-f2p8->U~Ncfv=r*-95UAFxrO?5&>WY_!4S zI^SM0(PLXR7m*8d?E-m#kvu7Vz+Zd$?m9^#B&FHwVQ4vI--abM6=QVGY(&DlU|a5{ z%n5lrF%oXU=$~pLjVzL_fG|qBnJYS=&&LS z{~Soat+m@5@5+@7IuqfJFfqwZcs(j$k!$Z(Tt}fhFk0(rD<+6f99ZQIPzJfM@ti4) zcV7=Tmiwjbe0038)mGWhV6$p6bZW1}&7hg%=#AGD^HwyW$@f`PHhR{W{kg$Bhsi|f zt7Jc)N~rjF`B(3-kKAv?MxXl${Akbk@+loX7)MR<@P%6jnRoRPgnu5Fw3(w=WJM-` zPlslab;F@)znJC(u6pflzR9xN!!PLE)PfCBXXL8m&?wnmpLK0*0jr(LysV?=E_RKabF+R{fFLNFYgv z&P9=xjw<`n(%ZFe;EuJ%xbimORsjay_y>Hgvu zyUg64;>HCRVr%aFkmWE;wo#`!DQr+Oz)AeV2B%c;U4qz#(D?aU%|IpiGK#Numz7jp zk`NrgFtfl0RW@*E5l0HR6hM4O0^wAh((*-V#8z?i56__7B{q{;mV+K9WUKuzGxwGUI#q<8>@{mYf=$- zyO1Q!e`B6uJl;N%cS#p++p@z6%fZxed3k0g&^N3$YK}*B#`2^deHqT~2SFNCTi0-A z2j%+lobEzm-B#MCvfCZvj8H@6qPD4i#?JT3Hc2LhT~2;B;}d7!G&Hn)ePtqjENG|f zjGo9$KQ_#up@nzXvicg!3VN=AND%`~-x{58jSZX(0v>;&YloQ3?<&^=b!xAAWv&&8 zO$YRimp;Ms7caQFLZnS;OHZoN*xRl#fIQyYqsD#brYdKAWhtIa(bGNzu`=j^k<{j8 zFYoZp?n2c-RD=>P0nmQ7N7UC$HX|f1f$CRXPG(7=rNn|H1jSNgj-s@luu6&1GHI7$ z4aE$<`P;WS*ny=uWcWsKF(@K%V)HTBSoSYkDjF!D&e2#GPFM&9eLd*3WU&yNu-~9A zrTmCh%Q(!n#c9^f^Tt&!|3^=3^2AlgfAcp^4TX~m@Ci|9)7VuL#LZWZlEh{z@z2S+ z<6%ahx8gfcpVAMW-+%E5ShZq4xNeS%o{!I-w1Q@N*&VRQNA;6DNL4f@>>-jxi!-8^ z)^LSO`H)R)@>tGv-L&gWL}HCU+UDX;0SI6xUb&$y85#7;aURn}ue*5zDlXwvS9L3` zxMoP&^XdB`Kx=RIC(E8#ZF9Q0pMgT5aHhmW2=sf*+HeN8GVI?^V&T*b!8+}=6*tZD z?N?aw;IA)WWGTY6#(&)wgA9aT^zdlTDR`4PBCqOAY<{yi7tcUa`><|)^SG@DPlf0E zoQLxbzU*~aU%_twN|*|9>QPkLazuK>r>9&X+ zrvgg@@y1Cl!&|z3xXmA1Ag_!St|QhU(UOoPKwKXEkLuf5TkxizG3|`Hz?^jTX(|rT zU{z3h(N|$*tF#K87N&xR>cq2&!XRJjFflQpjT+bP!eiBX-MwbgJv)f41 z4nQ(F%`a#3f^BmyH6IE-1S($Leghm3024w$=k>vCM{U@$=u5}69(oa5#`#Cs zTPsN+LFrd&kn=q6c^y|H$kEq2OYYT>QY)Rn2Lt5FCpxoog9(euEO=$#`a$8Squ*kw zHZ#)Lzk$$3aumJ%#ac3SPEn9oY0bWM*#`QWl>!k_zHlBqq$O<_`w#y5G*ElRRC?H_ zUOtcqgidD|3YR=zIc)0sPSfU;vaBgDM>YxslE!xO1m|3b{sQG})R{k|!>&YY( zbEtx(Dw{M9HicB@wem(&LGLfB6clD*rhpq>h9ae+B$2opD9fUmM(B`qTJbz4ESkfGY?Hu7^=8T=E(=9_l{d~i3hB8mOipPF$x8V6~#jSFYf&n7c2 z>Y;or!7AY_l+xZ@r0r{dOkzByB3r7moHVV{HZj}PzL`%{xy`2aHf!OJuv-mR;=L6o zH;FfqlQwDbw`Xf?UH#06NpEPX)+Mm&&H?mi@a2Uoqxz|;-axf^aG(Cs#NHQVM*5P8 zj<(4`k=4S3{_^Qy==NC76@5}?jh8De*`$W!RtaKvpHp-VpC8E!Fm>}e?XD@koP`d3 z8J5)sHIPTLL4Tz!@6Ta-TJ>FaH}*i4tf|KMPpiLFnm65D`%dy1yo>mR^GkwHkx_ex zPck*$MeCQ^AhuWdZwH;oPN_@$(TWOniyu5#J*@fS<`XsyF1yOR0IHu zBmxKfn(8^AvNA7wqab#zA2J-%{$LG8TJUjVSF~bwzkAvC(zXj74}$mRnYi*(6(6f9 z@-+t@13f>b)_a@?>m6*vr^Xgzl0NJkZcUM3Wi#5wom)fiQ{4K2V>ud!Wt|W3MD+}P zKpYJH(b&8)@M!GI^n~Ec{oOi_c7dL+>olSnAbL( z@O&JN;d^wK@&cPJ{|38iP&sWb#h>u)Qr)Vs z+d6x|rg`+G_p%L0@t_Z6w^A%`ZGSp(U0b^c-l|pDaI^Ag9&FTJd4KVb9k}NJu-Ch1 zslto3(*?eMs{Rhi^W2~R=3JR5`iRld)5fOCO+LYQEW2rvP7BEy-)n_l2`ezR%lQMO zCe&Yg!jx@`d`C&sr$LU&$j*Jv9J%D|MqyFxXP3xL>#kiXcEH+<2(nr3zj%1j%NAq< zP+Xxte+TcC> zBR+C>q1W~Nq=~4fCAMnqUt93LqD{!-kI8UH2k8jDt2w8b41A=lc%sAJC*x4}q|pxT zG>7yq+crmzIzer$x`=^@>h(G$m{VHGOuuTvB^<0arFi@IdzSLIH(!+)lNc;+zmvnL< zgqo-3(Q=|WHblbv3Jgq=GV6pvr%2v8I>*~wV$dz0zZJ-k*(s`7{Ng17GR-pO8pnEK zz6lJHz6@7@y}W!?&L;yR^m&0*K`!e1R;rTn(p>!bP#p`@qq^)uoMbQ2XUKQD%Z52a z0vb(`9_WuYaB+U`i6`1+9@x6FsTBe8=oBlK%PCaJhuM?E7UT>NFYN?io7lQO-6JE| za)EAjW!Vf&%nD+Lp5w@8Y1Ly~NJRnB>K@zH6FyJDB^btijw~Wyd^eCzyh21mv*t3= z23tEE<%L-$`Bo@{s!ymfc7H)^2t3XE1#tRG5 zonoH(+iT5(ZzB~pBBgcLvkImRdM~1iugk+IeO)g7QDh4n{-jmnR7a`r^MRUYfho8O z&POH^)u0)@so_Q>wci4SBnW~|BNrK0=WzS{*WB!uZ6 zNry_FS}VW71Z|Bw+CWy;%oMYj!x4361`iD0PD&aSSJX}%4fO$DR%9~d5sOjpZ)gcA zIyEMO=fiKa$d!e{t#sl-OmVaA<%P-v@n&de5OQZFj5d3ih84Zj zKigq3e8@}%k9C5EAgNekv3%m@%Lg1$nVfV+S0kib(D>^{}D5?WJsr#|fE{8m~o z5%yi#*)FH2!HmU6zEqH1a7|v^B7L+pp%fDF=8|~L`vqN2Yr4q{tzysunqCu~<&fHm zHpp>oBKyPA$C}LC_@Wg6eRAnF9#9ms0spB*1v;|cm66fof9HDe{7}sdtj_1&Ro4I& zEr6M#k85m@_IPTOX;cbvmoW&40ZlaQE;|<|Zp!GOEra2j>SxNJmMY!UX6Pbu_d$Y| zrhGiD%#UnAUe~uXnc2&-#I%t4e@Paj_NRnzJy4JL$vf!xGm6(Ola8({P%jb-tO2q| zC<{_i9mf)Gnkv>NZj1$Phq>sgYJV&Jaxpeyw=p{_i-RfdoqM&5+jLEK$@1A6j!wT1 zH0l!B4ZeD1KR7(nLaQu|QpTC*KEhe$xJ`E$WtN>yj^e1Bfi`uHEY2Ij@|^djy@RcY z%E<;zAOeGfj=>u&o%1Z0Cb0D^^xDVLpKU}0%N62E+BUl&aqOq?-qfsJNq ziM@D2dRX8-uc@88<72IEDd=%`Xvv~R9d2?mx=852{jBu^Ny2uaC1!RzjFmAdFE-dL zk#3Cm2andd<2r2q^qg~e2hQ?ZPlKVf5J0Eq*LD$+k}s1p1_B%6n|w|Bsg`1@%m%!D zho%}%`?Qkp)7es^BB`#mL($Mmd@y-mOThV!5^i z*oG~$mU@{345`x>iU}}ZxAYc{)s^*Tf)ia|B>TEx9j!u({Is|r)N4NT@K@C9_eM~|8ly1usLSwyEK@(KS=YzJFF{`g5@VyUB*L78x_cZA)RoTUF=((8QrTE8*qEDlUxb&laDdWuufFROVch!lXX#4)jQ2ZWm_J4XQC2I(GVB!= z!hfPz^dho6MMH5itixHDHQP%V<+M1HRbf!A<-01Fvqj_xX}DegYFl50A3~!ABC0i0 zIS3`(tHRZD2FAedey>DtUsdm%zC;w1+V(_lE+k(5yp2V&M>2v^dT5Ju1T~D1^Y&xa zAA~qsj=g4AkxliX!*T(sv&<14$}X0J@&**myhv9_5hv3zuRxgpBK;Wy*F0%YdD&haF4cBsQQtk zdo5zZs?f=2W(H86?(MlYve!xzYei0*<<|UjHDRX7F7ej+JqS&Sm4hx_v~e9 z`Qm_98^L0C;ui9B!h+snvkZde6bvCFbnHo{G8`Lx9#o!Qw4i1mqB*^!9AgQYxCO86 z{W6^I)VB@+R>ZIpmR_~;g5sQBb-Ur7QGZ?v>3YcM2W4)E&(Y>FZ`$e5%SG zO`dxjAGBT>x!Z^3_JF2il>xc+nB2`b#)2`N>8?2V3U^bzr#XdeWac14NV8~bw!ck3 zBSJQi*SP&j2)r6bHJG+Cq0(B3hnL46x-{F;S4sM?=dnq9j^ifuCy_S0?kdKv-UiJy zyxivDPPm!DajDQL$R?25t11|JyMe`m%6D2lMZF=mft`zb2r9ShoaKU=nI8iC#%@FN z+IE}sp;1BQDZ-$-S`Y0`$m!{+HI8rZ`bwrD&N#zx&p5-og;hP1;v*dO!WmBYB>HW~ zP3H*z`d!3zLk=%x&hBy0;WqKRt6aN-epu|&D#M93;-)V?nl(G2ZE2)g<2tn0OIi!} zISD*^lDu~F0QjJ(9VU->P$FWrUQcnah#mi^0U_l!_X*j61$!B;1gwju<7j!FZ-iT= zkynsVutHlwsXFh)0BHB+V#xWJ)B=hw&MKJ7Fi&Z028P2viXcYpR=@;RT$ZVzP}nBA z5Hf{?*NqO+QrE6lXXavx2ZZ+YxiSWT?i^lfceF2x{i7b}89gQ`b;do|$)PM=1?ZY= zl4c_g-gO_~-)kGlyC=o0-C%UjKl!Mi6Z`x;2l13sJxY6|U$XR%i$|La0~LF(|76{i zRzYOsf2OUj;x41dyC}F)@Tlsu&B`PYiejL1)Y-Ytp*|7OE3li*#8PFN|Swb>tx<)t}(rxlfAqSIDw z#>&*9+jbutT?Q{%nigq7=xRy%H|AhE}^!&}+)%{uOwZ$q>Xr(*&j@WumB-09ndW@+Ebv z*}HXF0K=ZITGdh+_NF0Yu|ary8=`ZLKI99K^U{nvic9>aHdGSJB zktTKFLWrHD*cL9;2#!#eyBX{5)NI2 z1S?pP7{BVN08_*qwzS47XbnSo=>T%NOnM%n!Cn@<4DAR06OAZ zu|Bbu$pIoFJCLI1=TVC8@fklxG(qwZJJF!Y>*~fcWWbD2muPu7gj>PvplFy(?e=C% z=Ewr%0Q6vxL(_w*1553JGbFEZ6luV8+c`L?AxevW0QVLtSzEm zKA85Gewos3zO92d)2ox=;jnl@5i^L)$;TFqjWpzUs5#79B+i^Bs?LwA#9_FwZwFdQ zlKLY`Ns;BiD#XO6znn24tt^p&Gw;()JkU(q!$+C%9X0_O0wP3JkTX>oWfNBB)U})7`f)sI&MMbsXKd^mI#8^pY^gGYhFcto+010YY!#c!h!yf**$&Ob~ZZ zS_X_yHn%}-&lEP*%ahEiqx9kH+He-gO4TE3=6&u&d}V0ob5Oe1IgOGP>!P($L?g?u z%QlINASdkCai%rb_Ym4@#Ohg|H|pZ^*&ZK%?L*kBnGhJFAfjD-&8peMOZybO7#kR| zR5|s#u?Q?-cAlEi3}!7K`s|t4aK(n@91~~qjE2P}(g?UXY-{&yOx%+9HaN`wUia}j5LlbphDl*VCH0?@iHY*i%dIT zoxSU&qTRIRrQ%J5A6YC^s-W-vwiEBycE4-$F4$RG)1}zdKVT3q_-5w~aQ~k1&zTwy z@zf|3OC@7APC^&b4(Vl7al1H;cZ)o16ycMe+GnBKpk?`??2oc;6WzlWUJ#IUrAcTd zViu3!9)D3O+Vdb5=;v+dg89)J>xaW5=J64djWx+7znxuf6mp}7d$jA= zxikO~e+8cO;Rya%Bz%0tRN!cP+m^PnQdYt~3!gCvBM3JcY+d)vjgezi1|bxm-{uI^ zh)xKn!dBibTND1|{Cr3bXiq;2kDNdqLJNzAJY_zQbcHZhT@>awG54`4ZxMW38_Gsg zWw888++r-s`}{^H%`4&v@^Lr5sp?bdF8f;bQTO;=*3WGh)cC+tIw4r{Gq;(M>zud9 zO@@p)0;>E}DC9Ab2hx|&U|?HEzZUM&fteq*-AJo2k!G8<3IdbFciu|H$YnRKXdXz&MH;LUIO*a?k6dcgn6%38wiS<>{Zm)o~c(aVain za~vEn3|3TQArGd(grw4hunVJ^r7LhXXB5?Bz-2Z^p~hs-em<~hwBOg%kD%q|J)`Rf z4bq-#kQHsso^@vWdLUAsn8CZ5(UK{OjBTlGaSAbNjVvna^t3k!5e5~}pJtQyUl4+v z6QWPQTFDG?l@T)L?AwZmab)@Ig<6p+C>F!$DlXMYo#wzTp8LLD=T05#}Z z(qqa>$wrimVAIdc%0!PE=q32p5qwQTf>-A$@MmW8%rKRfMn1NF+XzF2WW7# zP3C|{ocG4}0Us3_F zxTdFWhFj&gPyv}5CcYZn2P&6{;t;r3mA`7Q`AIVLTgZg?hZ?S7edWfa5OPMvz#o~# zyBq8MC*v&oz#mv|uWUQ*E{y+T?XX}3c(l^Vg=+=DHhez$kQQzmuyS&}Pa26qlOtec zAy|`GM9!rquI1n*BcCZutxRy|@E0uyAEs4hDUufy7I@21N6#QWG2pU=DB{KV^Mb;! z%rx3Za_j(GgI1Qi7NeJ<9`rm^YoJ;Hqt9b)C{n$a`XzxI>6D(ZLOBett|*}NRg>=9 zU9Fw5-#KjST3c-fCHJ&X5rpiq>sHr&E7w00a`zR<()--&N%LT8d=l>ggdMxeZ#b@~ z;Ibr%R>V9+X`!n69R2th?-CerVpNW0Wd1?&IK6P1y^hSQZfI^TJR9g*-K%F~0>ed9 zSFe-O)b#BF=^Tifvn@&XVA@ZT^q2+Y!j%GE-3j=4aOGZAHY7HXWMsS8_F@%s;279P zz?oY=(4adK3duKZ+fH6F2%63s^~XH0I%NWtB1Mzj54UeIqp>vhHa z6#N;w^%pOen2<1@kv=%_D6@pc&rY=yb;nJ@`-mOo*rH@rP?n45)ko#Mj^X@@M|**1 zIB%Rk0~C>y37MCwE^=~K%$4+Kdw`Wvlc%F7FG2ry0d}=Sexo0;{wxe=_wQ)I$~0tc zaTOw*+7$*&Z_S(I2cO_5{Y(BL#_v!p2IEZ<(1{YV8UB_H_c*RyNuEU}j`DKt6QuEnn!@DGq z_Y*Tf(lM;42_4+5^be<6rawVUp=1>A>X26DCk~}GY4g)~M(`OF+eu^EaGK}+mnm43 z7l6}g1y#%#LJ$rinYykA+ZW^yD}Rru=Go|@eX z{mVI@`eKIrE!yMc*<3{Kc|25+L0j#i| zf!@y6;C4yYh}!5)joE9y9`V?DntVb{oNdCd1@iv3+0oP9@)wg^5E#Cpy?9Sf{O-qt z+pDwfOEfc;9jbiNh6Bw{A}OLC?XHvI9lI-;iAtZJA@1yWl7ZW6BZ^x0rrSFTy^qZD zw`tbW@uR&)Omgw@sc_&)@RbNXY?`6g-X;1M*f4D+2&^U4kBPz_3kAu{`9M1*cLgT@6O#`ovhF= zU$GUk|DcXHfVB%#g$yTrQPky7puMmMy ze@a#g+af#f!m5uV*&H-KbYTYY68ock0{(|n8QP486{0W{zm+-6JtuIVB~4c-^AA4@ zTYb8Wg=_K1WyyHgQJ^f_Uq6%(XJEk{^)oHDuyn}zCC{OT2HN$ zj>b`rMe{$tq89lnTN>9%`+8XU$W48wdfygysf(ZHWhVH{@&^uG;qvF_Jk~ox^>3ap zC)lw69ioW{RhU;wW|{Z-e&8L`uSt^Ozo!jm)SazrEAEE+_-L`y*7r$??(a~EjQEIk z{5{)+r&X}c&aZsWR&y)J-#1F9B|`$6cB#+QDCS?9)9N&YibvNAp^Kjgz+F0IvoKwo z)c6d$?XWDFLlRfqiT%YpO7k9Z|56I--k&L`nkxBb(WB1d_JYC~GCnFLkEOo&BO)tF z7XqM!Fsy*h!z-}bLgS;`)*PS5&t0^Z9<8UDoJhjK`;N~5UW<5nCP;+?cJEAZRmiTS zuO&)csxC$NLiOK@UZpmob>ZQRU;GxqnWYKyqh@YNVXA`qrFuK)(Q_4f<3#51gKH)0 zFv*IU;KNDFr3(VS_j|DMcI&eq;}lJPkuxJvO3`!G9)cVNRg?^TRb~{q*pTL;8ra@n z$qgDDOe8h*T?_#!M2NB}Q$rY|nSI&*!DQsmB2Dl;R)?hpBxm=m(gZ0YGh;9&vL>O7 z{2o?q^ec;VMFT@Rg5ZCtm{u3QxlbOgqiQd@Z}YYKW9@=mJBmr^p;P6G52u0gu$5^m zGhfJVzbs^g*^sxj_s1lEfo16sn+2#;PCU@@^D*GKF;&jUukRn9TB;MMue|UcjI?zc z!KY01->&xy;8X6>2n+M^jCnJ^&9@3}G}g*mvYfU%(Bu}Pc=W1XYO^U^Os|+)w47PM zF6t9uZnL3VNT#Xrp7Y^Wx-L+p;lR8)2{lDy2?ymp)4Q1w-0u}D6Cy-gfjjB}Ay5r= z0-GS58_;rh%OW7w@BT1t+k#M5Vto?)ehfRP6X#7Hqr@5oIySG=1)Ax_;}-jzL6KsH z6G(d3QhRNmqu5-R+rCw}PmI7XV#3Z+XkR}VMa6=;^|xj^ph$odMnekUAPT`MZPU$N8qumVAgV!OM+UujjA*hCn?8>&PfwdF{sW{@I= zi@{A|*vrG}^k26nIjC0zoK>9Idw>*H6t(W`KBafEEYQi4>@-oN*-r?pk>FJl7mXL5 zdaKj(R1etGdh{k0u~(Kkk29lZ`ME0n@8IE2(^KNFi~N;lV?_% zh4a$JY&Fj8o>GG~WJ(Tz;oWmH&^JBUHGW9S=j+k*d=7a|9m2xfQ}tx)fzi>$Lo2@> z^Q6UfW{?zLX^Z5KoF2|EH` zx;!@=RkzLKh2t?8>Y%kw%?$ba%(h_G^l(6!CakjC7-~(7i_(M+T_Lx}-tX`LIf#?i zgq>J`{t->Bx|_>mLgyxfpAQ7a7_hhj23fNxyei7a8jR@E6jR=5-0iQ(q;Q0j;UX}S z(g)tMij#(H{|MQ1aJAolM?5gqn15c*dPCZb_3k23^NJP&7$n2NJnybJ_QRotJ1?;I zT|=$gIaAMydRKga;Sk4^=7I=QA#|%)#@dv2=9XwLH(QUZJ1TAI+L@gDz!|{RJ_7x~ zdz(F$W%iax=810on$heo!`VX(djVjGG;hxAEuL(1aR76BjW%N4*<~8Cz6d&aG4!c6D_SMjqd{E3n zi%ab8x4>;QEwiH7`UShAudT-k<@Q3}YgeYY9*Tr9SbGtu!a@cs-gnim9T*+mlnAmWVIPk0IF#8LrY`G z;!a0pk!p0qMKp2!bUJJIN^eymN~gtoH?45I=y7A&4KDbS+(qry_hTQ+ zyt0(M;-DC5LeG=XJ^?PEK4wQ{&g_MfwEJt6S0SC4#LxTV!W8FN{deBtJnhFf+745f zUXX#VziQ{a$E68)UdGojnEfpWYRlp8c6MYTsU^z~$wJU9_w#43ZfEhYw{U-os8kEP z=Zz;tzW1k3Nrw!++OU*1Gjiiom?$WoNt5F%&$h|=oSmL8n39aki~p8 zr0DpL=yrvY(I__iNfU6P`iF$&oyblK@{UKzUTpJ0wzhOba;fVxo{N_KhNk2VWo^yb zT{qwzySn)5q^0KSX!r-V6c)^gdz+NC-plO~E?RcQ?Ux%{YoVob#+gfkth->ojvZBc zOX}L0JBT0`EpnDNTepn_U&Z@XM6SD|IhxV!0r9J7+#x0W;m+`u-mD&Jz^2=ZB`Yo# z#BJXQziU&+x1|v>;&-j~qqnT_Et8YdZ@WfVIm8YZ+S879$EC({cC#mxQ7eh_N%u*d z`409TTlL1MG7jfzaUd=JLGugzyAxzsvj3ZVeqT=zy%@jeX)waW?qLcxzpZtZ4%u-n zX$3Hj#i8TpyH;~SV=Bdxsm7{MMcx-dy=Zm1TwD7c7KC5q%ekj=v6g~w;$q#a?naDy z`wfhCnL3yEi$l3>!$Le(NMG_(Uq5`>lI7uNW0|yv=n4QGsA#KdOUKc+)$H&1P1us| zEBU(%#8Lg+b%M{d{cfrB>Zk{5S%a!Fv)?Q90PZih<#9>x>pY0A)z-*c6$uS~iTF&) zyJUg%vd5JBZ99-w;9_4*%u$d{Y&0OGc`y7y1uUDmHv{CkAUseHdZt`VOp1cG`8Ide zJ^FP+=xk#B&NsBT*(APM2gWuqVD(>Jz&FjNfmDyz5;GCEAw_d6a#7VeboB?JBPJj* zlX=UTj8w<(`9#J*+s?|-V>v;IKmV_U0> z%Ix%m!9x(KNwFye|Eq^b)6TY{Wz!s@Ilg~!#oKSUTA9~v zb+?eiZ*Qon>^PDLk`5&4v%(gdh!b`HaHh4+W9Mdd&DrTH?DDGg*ogmva8p#Zi5hPA zy?(fhIog+GyXBSeMb#!9%nDXA5N3tTtu80aD&aB!veyUN5_A({A|TVm4zrFuB~4AB zT3?A@5}?ug}&dfY_f;$YC)`bh6XXM|qw4?cHmGm4W7a_1>8+)fwU zuAxp+x&tGGl$CL$km?>1VZ~^o8G%8P9B@dPn=6uS5025QGwZ60U6j@!Zv`@4%C$)p zvmPB|+i{%c#4RCp0ko;%@mJs)|M|x|-~9ZrQDD<2;+YS)XvJI&$KTahW)pvA{1WLM zeKo6)0Nl$N_H9&7CupdOl)0aUC`rbufRjn5Ock^vdfns!-D?PTpy5=PQ?DA?`VrRngl*HC= zYefQ+ap8PfT~iG7;88b!Ckj4DI)iX&A?GrGElh|F2XjRz56+159V3dAiy-19;6EjpM5#N~& z4C|*%fp9#=%;v6ZRw-Nq7gpqQ;M1Dp5V_`+yVV33aVdJsZ*Fd?F7b!^ zy7nx|DCB19VXx#9agQ|LZdI)n?c%Ln^}b@ZU1!FduOWtR)}RI|s2)C&ElIOt2T1$l zdvDN)6KR`izc)q527D=xqTsQDS{J=ClFy57*1y~IDq{Z??Z#KG!CwuVQ%+T=k?T4T z^n?)OnT-n#H*wV(fPl}bxF_i5s;4`LI%P?yvCZ#cRV&j;c|6Ys(SHnAwTu4nGlD

Ci*^6ULcC5N0Hej%iG>hLAq00lJ!&ZX8X} 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 z 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 z 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 AayZK2C0> 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 Date: Sat, 29 Aug 2026 15:00:20 -0400 Subject: [PATCH 06/13] chore(base-ui): drop the react-admin scaffold and align declared deps The library declared 33 runtime dependencies and imported 13. Most of the extras were never used at all: dnd-kit, cmdk, recharts, lodash, date-fns, libphonenumber-js, react-hook-form, dompurify, html-react-parser, vaul, sonner, next-themes, query-string, diacritic, inflection, react-dropzone, react-error-boundary. Three packages it did import were missing from the manifest entirely (motion, react-toastify, @number-flow/react) and only resolved because the workspace root happened to carry them. That was survivable while this library was consumed by copying its source. It stops being survivable the moment it is published, because every consumer would install react-admin and recharts to get a table. Also removes seven files left over from a react-admin scaffold: field-types, i18n-provider, notify-auth-error, sanitize-input-rest-props, resolve-label, unknown-types and are-ids-equal. None is exported from the library index, and nothing in the application referenced any of them. They were the only importers of ra-core, ra-i18n-polyglot and ra-language-english. React moves to peerDependencies, which is what a component library should have been declaring; the application already pins and dedupes it in its Vite config. msw is an optional peer: it is needed only by the mock handlers, which a consumer pulls in explicitly or not at all. One stale line goes from the stylesheet too: a Tailwind @source pointing at apps/rotom-ui/src, a directory that does not exist. Harmless while Tailwind scans the real path alongside it, but a published package whose class scanning depends on @source lines should not carry paths that never resolve. Co-Authored-By: Claude Opus 5 --- libs/base-ui/package.json | 46 +++---- libs/base-ui/src/lib/are-ids-equal.ts | 5 - libs/base-ui/src/lib/field-types.ts | 126 ------------------ libs/base-ui/src/lib/i18n-provider.ts | 9 -- libs/base-ui/src/lib/notify-auth-error.ts | 30 ----- libs/base-ui/src/lib/resolve-label.ts | 10 -- .../src/lib/sanitize-input-rest-props.ts | 52 -------- libs/base-ui/src/lib/unknown-types.ts | 2 - libs/base-ui/src/styles/globals.css | 1 - 9 files changed, 18 insertions(+), 263 deletions(-) delete mode 100644 libs/base-ui/src/lib/are-ids-equal.ts delete mode 100644 libs/base-ui/src/lib/field-types.ts delete mode 100644 libs/base-ui/src/lib/i18n-provider.ts delete mode 100644 libs/base-ui/src/lib/notify-auth-error.ts delete mode 100644 libs/base-ui/src/lib/resolve-label.ts delete mode 100644 libs/base-ui/src/lib/sanitize-input-rest-props.ts delete mode 100644 libs/base-ui/src/lib/unknown-types.ts diff --git a/libs/base-ui/package.json b/libs/base-ui/package.json index e4fc2ef..c02e0db 100644 --- a/libs/base-ui/package.json +++ b/libs/base-ui/package.json @@ -2,41 +2,31 @@ "name": "@rotom-ng/base-ui", "version": "0.0.0", "private": true, - "devDependencies": { - "@tailwindcss/vite": "^4.3.0", - "tailwindcss": "^4.3.0" + "peerDependencies": { + "msw": "^2.14.6", + "react": "^19.2.6", + "react-dom": "^19.2.6" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + } }, "dependencies": { - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", + "@number-flow/react": "^0.6.0", "@tanstack/react-query": "^5.100.11", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "cronstrue": "^3.14.0", - "date-fns": "^4.2.1", - "diacritic": "^0.0.2", - "dompurify": "^3.4.5", - "html-react-parser": "^6.1.1", - "inflection": "^3.0.2", - "libphonenumber-js": "^1.13.2", - "lodash": "^4.18.1", "lucide-react": "^1.16.0", - "next-themes": "^0.4.6", - "query-string": "^9.3.1", - "ra-core": "^5.14.7", - "ra-i18n-polyglot": "^5.14.7", - "ra-language-english": "^5.14.7", - "radix-ui": "^1.4.3", - "react-dropzone": "^15.0.0", - "react-error-boundary": "^6.1.1", - "react-hook-form": "^7.76.0", + "motion": "^12.39.0", + "radix-ui": "^1.5.0", "react-router": "^8.3.0", - "recharts": "^3.8.1", - "sonner": "^2.0.7", + "react-toastify": "^11.1.0", "tailwind-merge": "^3.6.0", - "tw-animate-css": "^1.4.0", - "vaul": "^1.1.2" + "tw-animate-css": "^1.4.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.0", + "tailwindcss": "^4.3.0" } } diff --git a/libs/base-ui/src/lib/are-ids-equal.ts b/libs/base-ui/src/lib/are-ids-equal.ts deleted file mode 100644 index d7211d8..0000000 --- a/libs/base-ui/src/lib/are-ids-equal.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const areIdsEqual = (a: unknown, b: unknown): boolean => { - if (a === b) return true; - if (a == null || b == null) return false; - return String(a) === String(b); -}; diff --git a/libs/base-ui/src/lib/field-types.ts b/libs/base-ui/src/lib/field-types.ts deleted file mode 100644 index 228eec8..0000000 --- a/libs/base-ui/src/lib/field-types.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type { BaseFieldProps } from "ra-core"; -import type { ReactNode } from "react"; -import type { UnknownRecord } from "./unknown-types"; - -export type SortOrder = "ASC" | "DESC"; -export type TextAlign = "left" | "center" | "right" | "justify" | "inherit"; - -export interface FieldProps - extends Omit, "resource"> { - /** - * A class name to apply to the root div element - */ - className?: string; - - /** - * A class name to apply to the cell element when used inside . - */ - cellClassName?: string; - - /** - * A class name to apply to the header cell element when used inside . - */ - headerClassName?: string; - - /** - * Label to use as column header when using or . - * Defaults to the capitalized field name. Set to false to disable the label. - * - * @see https://marmelab.com/react-admin/Fields.html#label - * @example - * const PostList = () => ( - * - * - * - * - * - * - * ); - */ - label?: ReactNode | false; - - /** - * Set it to false to disable the click handler on the column header when used inside . - * - * @see https://marmelab.com/react-admin/Fields.html#sortable - * @example - * const PostList = () => ( - * - * - * - * - * - * - * - * - * ); - */ - sortable?: boolean; - - /** - * The field to use for sorting when users click this column head, if sortable. - * - * @see https://marmelab.com/react-admin/Fields.html#sortby - * @example - * const PostList = () => ( - * - * - * - * - * - * - * - * - * ); - */ - sortBy?: string; - - /** - * The order used for sorting when users click this column head, if sortable. - * - * @see https://marmelab.com/react-admin/Fields.html#sortbyorder - * @example - * const PostList = () => ( - * - * - * - * - * - * - * ); - */ - sortByOrder?: SortOrder; - - /** - * The text alignment for the cell content, when used inside . - * - * @see https://marmelab.com/react-admin/Fields.html#textalign - * @example - * const PostList = () => ( - * - * - * - * - * - * - * - * - * ); - */ - textAlign?: TextAlign; - - /** - * The component to display when the field value is empty. Defaults to empty string. - * - * @example - * const PostList = () => ( - * - * - * - * - * - * - * ); - */ - empty?: ReactNode; -} diff --git a/libs/base-ui/src/lib/i18n-provider.ts b/libs/base-ui/src/lib/i18n-provider.ts deleted file mode 100644 index 3d7b5b9..0000000 --- a/libs/base-ui/src/lib/i18n-provider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import polyglotI18nProvider from "ra-i18n-polyglot"; -import defaultMessages from "ra-language-english"; - -export const i18nProvider = polyglotI18nProvider( - () => defaultMessages, - "en", - [{ name: "en", value: "English" }], - { allowMissing: true }, -); diff --git a/libs/base-ui/src/lib/notify-auth-error.ts b/libs/base-ui/src/lib/notify-auth-error.ts deleted file mode 100644 index b114f7c..0000000 --- a/libs/base-ui/src/lib/notify-auth-error.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { useNotify } from "ra-core"; - -type NotifyFn = ReturnType; - -const getErrorMessage = (error: unknown): string | undefined => { - if (typeof error === "string") return error; - if ( - error && - typeof error === "object" && - "message" in error && - typeof (error as { message: unknown }).message === "string" && - (error as { message: string }).message - ) { - return (error as { message: string }).message; - } - return undefined; -}; - -/** - * Surface an authentication error via `useNotify()`. Falls back to the - * translated `ra.auth.sign_in_error` key when the error has no usable - * message. - */ -export const notifyAuthError = (notify: NotifyFn, error: unknown) => { - const message = getErrorMessage(error); - notify(message ?? "ra.auth.sign_in_error", { - type: "error", - messageArgs: { _: message }, - }); -}; diff --git a/libs/base-ui/src/lib/resolve-label.ts b/libs/base-ui/src/lib/resolve-label.ts deleted file mode 100644 index b95e86a..0000000 --- a/libs/base-ui/src/lib/resolve-label.ts +++ /dev/null @@ -1,10 +0,0 @@ -export function resolveLabel( - label: string | undefined, - translate: (key: string, options?: { _: string }) => string, - fallback: string, -): string { - if (label == null || label === "") return fallback; - // Heuristic: i18n keys are dot-namespaced. Literal labels are not. - if (label.includes(".")) return translate(label, { _: fallback }); - return label; -} diff --git a/libs/base-ui/src/lib/sanitize-input-rest-props.ts b/libs/base-ui/src/lib/sanitize-input-rest-props.ts deleted file mode 100644 index 41e1e8b..0000000 --- a/libs/base-ui/src/lib/sanitize-input-rest-props.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { UnknownRecord } from "./unknown-types"; - -/** - * Strip ra-core input-controller props before spreading the remaining - * props onto a DOM element. Mirrors the upstream - * `sanitizeInputRestProps` from `ra-core`. - */ -export const sanitizeInputRestProps = ({ - afterSubmit: _afterSubmit, - allowNull: _allowNull, - alwaysOn: _alwaysOn, - beforeSubmit: _beforeSubmit, - component: _component, - data: _data, - defaultValue: _defaultValue, - error: _error, - format: _format, - formatOnBlur: _formatOnBlur, - initializeForm: _initializeForm, - input: _input, - isEqual: _isEqual, - isRequired: _isRequired, - label: _label, - limitChoicesToValue: _limitChoicesToValue, - locale: _locale, - meta: _meta, - multiple: _multiple, - name: _name, - options: _options, - optionText: _optionText, - optionValue: _optionValue, - parse: _parse, - record: _record, - ref: _ref, - refetch: _refetch, - render: _render, - resource: _resource, - setFilter: _setFilter, - setPagination: _setPagination, - setSort: _setSort, - shouldUnregister: _shouldUnregister, - source: _source, - submitError: _submitError, - subscription: _subscription, - textAlign: _textAlign, - translate: _translate, - translateChoice: _translateChoice, - validate: _validate, - validateFields: _validateFields, - value: _value, - ...rest -}: UnknownRecord) => rest; diff --git a/libs/base-ui/src/lib/unknown-types.ts b/libs/base-ui/src/lib/unknown-types.ts deleted file mode 100644 index a48dfd6..0000000 --- a/libs/base-ui/src/lib/unknown-types.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type UnknownValue = unknown; -export type UnknownRecord = Record; diff --git a/libs/base-ui/src/styles/globals.css b/libs/base-ui/src/styles/globals.css index ae6ac29..9d07854 100644 --- a/libs/base-ui/src/styles/globals.css +++ b/libs/base-ui/src/styles/globals.css @@ -2,7 +2,6 @@ @import "tw-animate-css"; @source "../**/*.{ts,tsx}"; -@source "../../../../apps/rotom-ui/src/**/*.{ts,tsx}"; @source "../../../../apps/rotom-ng-ui/src/**/*.{ts,tsx}"; @source "../*.{ts,tsx}"; From 38b3b4a97b990d1e16ef4ad1aff4437c2332442d Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 15:04:53 -0400 Subject: [PATCH 07/13] ci: publish base-ui to GitHub Packages Reusing this library outside the repository meant unpacking a source tarball at a pinned commit. No version history, no integrity check, and no way to see which revision was in use without reading a stamp file. The library is now published as @unownhash/rotom-base-ui. Two ways in: a base-ui-v tag publishes that version under "latest", validated against package.json the same way release.yml validates version.txt against version.go; a push to main that touches the library publishes -main. under the "main" tag, which is what replaces pinning a commit. A consumer can track main without waiting for a release and still record exactly what it installed. The workflow deliberately carries no paths: filter. A paths filter applies to tag pushes as well as branch pushes, and a tag usually lands on a commit that changed nothing under libs/base-ui, so the filter would have silently skipped the release the tag existed to make. The branch case is gated inside the job with an explicit diff instead. It builds and lints the application against the library before publishing. Shipping TypeScript source means consumers compile it, so the application build is the only thing standing between a broken library and a broken consumer. Better to find that here than after someone installs it. Three changes were needed to make the package publishable: The name. GitHub Packages resolves an npm scope to the account that owns the repository, so @rotom-ng/base-ui could not be published under UnownHash at all. It is now @unownhash/rotom-base-ui, and the workspace resolves it by that same specifier, so local development and an installed copy agree. The stylesheet. It carried an @source pointing up and across into apps/rotom-ng-ui/src. Fine while the library was read out of the workspace, useless once installed from a registry, at which point every class used only by the application would have been dropped from the build with no error. The library now scans only itself, and the application has its own stylesheet that imports the library's and scans its own tree. The emitted CSS is byte-identical at 67.97 kB, so nothing was lost in the split. Vite alias. The tsconfig paths plugin resolves modules but not CSS @import, so the package name needed a real alias. Written in array form because order matters: the bare "@" alias is a prefix of "@unownhash/" and would otherwise claim it. The react and react-dom aliases become explicit bare-plus-subpath pairs to preserve the prefix matching the object form gave them for free. Also drops libs/base-ui/src/index.css, an empty file nothing imported. Verified with npm pack: 103 files, and the three export-map targets (index, styles/globals.css, mocks) are all present in the tarball. Co-Authored-By: Claude Opus 5 --- .github/workflows/publish-base-ui.yml | 148 ++++++++++++++++++++++++++ apps/rotom-ng-ui/src/app/app.tsx | 2 +- apps/rotom-ng-ui/src/main.tsx | 4 +- apps/rotom-ng-ui/src/styles.css | 12 +++ apps/rotom-ng-ui/tsconfig.app.json | 4 +- apps/rotom-ng-ui/tsconfig.json | 4 +- apps/rotom-ng-ui/vite.config.mts | 31 +++++- libs/base-ui/package.json | 30 +++++- libs/base-ui/src/index.css | 0 libs/base-ui/src/styles/globals.css | 5 +- tsconfig.base.json | 4 +- 11 files changed, 226 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/publish-base-ui.yml create mode 100644 apps/rotom-ng-ui/src/styles.css delete mode 100644 libs/base-ui/src/index.css diff --git a/.github/workflows/publish-base-ui.yml b/.github/workflows/publish-base-ui.yml new file mode 100644 index 0000000..d24fbe1 --- /dev/null +++ b/.github/workflows/publish-base-ui.yml @@ -0,0 +1,148 @@ +name: publish-base-ui + +# Publishes libs/base-ui to GitHub Packages as @unownhash/rotom-base-ui. +# +# Before this, the only way to reuse the library outside the repository was to +# unpack a source tarball at a pinned commit. That gave no version history, no +# integrity check, and no way to see which revision was in use without reading +# a stamp file. +# +# Two ways in, deliberately: +# +# - A base-ui-v tag publishes that version under the "latest" tag. +# The tag has to agree with package.json, so a release cannot be labelled +# with a version the package will not report. +# - A push to main that touches the library publishes a prerelease under the +# "main" tag, versioned -main.. This is what replaces +# pinning a commit: a consumer can track main without waiting for a +# release and still record exactly what it installed. +# +# No paths: filter on the trigger. A paths filter applies to tag pushes too, +# and tags usually land on a commit that changed nothing under libs/base-ui -- +# which would silently skip the release the tag was created to make. The +# branch case is gated inside the job instead, where it can be spelled out. + +on: + push: + branches: [main] + tags: + - 'base-ui-v*' + workflow_dispatch: + +concurrency: + group: publish-base-ui-${{ github.ref }} + cancel-in-progress: false + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + # Two commits, so a branch push can diff against its predecessor. + fetch-depth: 2 + + - name: Decide whether to publish + id: gate + env: + REF_TYPE: ${{ github.ref_type }} + EVENT_NAME: ${{ github.event_name }} + run: | + set -eu + if [ "$REF_TYPE" = 'tag' ] || [ "$EVENT_NAME" = 'workflow_dispatch' ]; then + echo "publish=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + # Branch push: only when the library itself moved. Everything else on + # main -- Go changes, workflow edits, docs -- leaves the published + # package alone. + if git diff --quiet HEAD^ HEAD -- libs/base-ui; then + echo "libs/base-ui unchanged in this push; nothing to publish." + echo "publish=false" >> "$GITHUB_OUTPUT" + else + echo "publish=true" >> "$GITHUB_OUTPUT" + fi + + - name: Setup Bun + if: steps.gate.outputs.publish == 'true' + uses: oven-sh/setup-bun@v2 + + - name: Install node dependencies + if: steps.gate.outputs.publish == 'true' + run: bun install --frozen-lockfile + + # The package ships TypeScript source, so consumers compile it rather + # than importing a prebuilt bundle. That makes the application build the + # only thing standing between a broken library and a broken consumer -- + # run it before publishing, not after someone installs it. + - name: Build the UI against the library + if: steps.gate.outputs.publish == 'true' + run: bun run build + + - name: Lint + if: steps.gate.outputs.publish == 'true' + run: bun run lint + + - name: Setup Node for publishing + if: steps.gate.outputs.publish == 'true' + uses: actions/setup-node@v5 + with: + node-version: '22' + registry-url: 'https://npm.pkg.github.com' + scope: '@unownhash' + + - name: Resolve the version to publish + id: version + if: steps.gate.outputs.publish == 'true' + working-directory: libs/base-ui + env: + REF_TYPE: ${{ github.ref_type }} + REF_NAME: ${{ github.ref_name }} + run: | + set -eu + pkg=$(node -p "require('./package.json').version") + + if [ "$REF_TYPE" = 'tag' ]; then + tag_version="${REF_NAME#base-ui-v}" + if [ "$tag_version" != "$pkg" ]; then + echo "::error::tag '${REF_NAME}' implies version '${tag_version}', but libs/base-ui/package.json says '${pkg}'. Bump the manifest or retag." + exit 1 + fi + printf 'value=%s\ndist_tag=latest\n' "$pkg" >> "$GITHUB_OUTPUT" + else + printf 'value=%s-main.%s\ndist_tag=main\n' "$pkg" "$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" + fi + + # npm version rather than editing the manifest by hand, so an invalid + # version fails here instead of producing a package nobody can install. + - name: Stamp the prerelease version + if: steps.gate.outputs.publish == 'true' && github.ref_type != 'tag' + working-directory: libs/base-ui + env: + VERSION: ${{ steps.version.outputs.value }} + run: npm version "$VERSION" --no-git-tag-version --allow-same-version + + - name: Publish to GitHub Packages + if: steps.gate.outputs.publish == 'true' + working-directory: libs/base-ui + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DIST_TAG: ${{ steps.version.outputs.dist_tag }} + run: npm publish --tag "$DIST_TAG" + + - name: Summarise + if: steps.gate.outputs.publish == 'true' + env: + VERSION: ${{ steps.version.outputs.value }} + DIST_TAG: ${{ steps.version.outputs.dist_tag }} + run: | + { + printf '### Published\n\n' + printf '```\n@unownhash/rotom-base-ui@%s\ndist-tag: %s\n```\n\n' "$VERSION" "$DIST_TAG" + printf 'Install with:\n\n' + printf '```bash\nbun add @unownhash/rotom-base-ui@%s\n```\n' "$DIST_TAG" + } >> "$GITHUB_STEP_SUMMARY" diff --git a/apps/rotom-ng-ui/src/app/app.tsx b/apps/rotom-ng-ui/src/app/app.tsx index 3f98366..d7abf26 100644 --- a/apps/rotom-ng-ui/src/app/app.tsx +++ b/apps/rotom-ng-ui/src/app/app.tsx @@ -12,7 +12,7 @@ import { TooltipProvider, useConfig, WorkersPage, -} from "@rotom-ng/base-ui"; +} from "@unownhash/rotom-base-ui"; import { QueryClientProvider } from "@tanstack/react-query"; import { useMemo } from "react"; import { Navigate, Route, Routes } from "react-router"; diff --git a/apps/rotom-ng-ui/src/main.tsx b/apps/rotom-ng-ui/src/main.tsx index faa237f..ef9e032 100644 --- a/apps/rotom-ng-ui/src/main.tsx +++ b/apps/rotom-ng-ui/src/main.tsx @@ -1,4 +1,4 @@ -import "@rotom-ng/base-ui/styles/globals.css"; +import "./styles.css"; import { StrictMode } from "react"; import * as ReactDOM from "react-dom/client"; @@ -9,7 +9,7 @@ import { App } from "./app/app"; async function enableMocks() { if (!import.meta.env.DEV) return; if (import.meta.env.VITE_MOCK !== "true") return; - const { worker } = await import("@rotom-ng/base-ui/mocks"); + const { worker } = await import("@unownhash/rotom-base-ui/mocks"); await worker.start({ onUnhandledRequest: "bypass" }); } diff --git a/apps/rotom-ng-ui/src/styles.css b/apps/rotom-ng-ui/src/styles.css new file mode 100644 index 0000000..2e58ffe --- /dev/null +++ b/apps/rotom-ng-ui/src/styles.css @@ -0,0 +1,12 @@ +/* The application's stylesheet. + * + * The shared library's stylesheet carries the theme, the Tailwind import, and + * an @source for its own components. It deliberately does not reach up into + * this application's tree: once base-ui is installed from a registry rather + * than read out of the workspace, a relative path out of the package stops + * resolving and every class used only here would be dropped from the build. + * + * So each side scans itself. This @source is relative to this file. */ +@import "@unownhash/rotom-base-ui/styles/globals.css"; + +@source "./**/*.{ts,tsx}"; diff --git a/apps/rotom-ng-ui/tsconfig.app.json b/apps/rotom-ng-ui/tsconfig.app.json index 109a9b8..afa2eee 100644 --- a/apps/rotom-ng-ui/tsconfig.app.json +++ b/apps/rotom-ng-ui/tsconfig.app.json @@ -6,8 +6,8 @@ "baseUrl": ".", "paths": { "@/*": ["../../libs/base-ui/src/*"], - "@rotom-ng/base-ui": ["../../libs/base-ui/src/index.ts"], - "@rotom-ng/base-ui/*": ["../../libs/base-ui/src/*"] + "@unownhash/rotom-base-ui": ["../../libs/base-ui/src/index.ts"], + "@unownhash/rotom-base-ui/*": ["../../libs/base-ui/src/*"] } }, "files": [], diff --git a/apps/rotom-ng-ui/tsconfig.json b/apps/rotom-ng-ui/tsconfig.json index a257144..cb91b0c 100644 --- a/apps/rotom-ng-ui/tsconfig.json +++ b/apps/rotom-ng-ui/tsconfig.json @@ -15,8 +15,8 @@ "baseUrl": ".", "paths": { "@/*": ["../../libs/base-ui/src/*"], - "@rotom-ng/base-ui": ["../../libs/base-ui/src/index.ts"], - "@rotom-ng/base-ui/*": ["../../libs/base-ui/src/*"] + "@unownhash/rotom-base-ui": ["../../libs/base-ui/src/index.ts"], + "@unownhash/rotom-base-ui/*": ["../../libs/base-ui/src/*"] } }, "files": [], diff --git a/apps/rotom-ng-ui/vite.config.mts b/apps/rotom-ng-ui/vite.config.mts index 3ec66a8..baf7b43 100644 --- a/apps/rotom-ng-ui/vite.config.mts +++ b/apps/rotom-ng-ui/vite.config.mts @@ -10,11 +10,32 @@ export default defineConfig({ cacheDir: '../../node_modules/.vite/apps/rotom-ng-ui', plugins: [react(), tailwindcss(), nxViteTsPaths()], resolve: { - alias: { - '@': path.resolve(__dirname, '../../libs/base-ui/src'), - react: path.resolve(__dirname, '../../node_modules/react'), - 'react-dom': path.resolve(__dirname, '../../node_modules/react-dom'), - }, + // Array form, because order matters: the bare '@' alias is a prefix of + // '@unownhash/...' and would otherwise claim it first. Listing the + // package name ahead of it keeps the workspace resolving base-ui by the + // same specifier a consumer installing it from the registry would use -- + // for stylesheets as well as modules, which the tsconfig paths plugin + // does not cover. + alias: [ + { + find: /^@unownhash\/rotom-base-ui$/, + replacement: path.resolve(__dirname, '../../libs/base-ui/src/index.ts'), + }, + { + find: /^@unownhash\/rotom-base-ui\//, + replacement: path.resolve(__dirname, '../../libs/base-ui/src') + '/', + }, + { find: /^@\//, replacement: path.resolve(__dirname, '../../libs/base-ui/src') + '/' }, + // Both the bare specifier and its subpaths (react-dom/client, + // react/jsx-runtime), so every import lands in the one copy. + { find: /^react$/, replacement: path.resolve(__dirname, '../../node_modules/react') }, + { find: /^react\//, replacement: path.resolve(__dirname, '../../node_modules/react') + '/' }, + { find: /^react-dom$/, replacement: path.resolve(__dirname, '../../node_modules/react-dom') }, + { + find: /^react-dom\//, + replacement: path.resolve(__dirname, '../../node_modules/react-dom') + '/', + }, + ], dedupe: ['react', 'react-dom'], }, optimizeDeps: { diff --git a/libs/base-ui/package.json b/libs/base-ui/package.json index c02e0db..e1237e6 100644 --- a/libs/base-ui/package.json +++ b/libs/base-ui/package.json @@ -1,7 +1,31 @@ { - "name": "@rotom-ng/base-ui", - "version": "0.0.0", - "private": true, + "name": "@unownhash/rotom-base-ui", + "version": "1.0.0", + "description": "Shared dashboard components for the RotomNG web UI.", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/UnownHash/RotomNG.git", + "directory": "libs/base-ui" + }, + "publishConfig": { + "registry": "https://npm.pkg.github.com", + "access": "restricted" + }, + "type": "module", + "sideEffects": [ + "*.css" + ], + "files": [ + "src", + "components.json" + ], + "exports": { + ".": "./src/index.ts", + "./styles/globals.css": "./src/styles/globals.css", + "./mocks": "./src/mocks/index.ts", + "./*": "./src/*" + }, "peerDependencies": { "msw": "^2.14.6", "react": "^19.2.6", diff --git a/libs/base-ui/src/index.css b/libs/base-ui/src/index.css deleted file mode 100644 index e69de29..0000000 diff --git a/libs/base-ui/src/styles/globals.css b/libs/base-ui/src/styles/globals.css index 9d07854..d1d2f5e 100644 --- a/libs/base-ui/src/styles/globals.css +++ b/libs/base-ui/src/styles/globals.css @@ -1,8 +1,11 @@ @import "tailwindcss"; @import "tw-animate-css"; +/* Only this library's own sources. A consuming application adds an @source + for its own files in the stylesheet that imports this one -- reaching up + out of the package would stop resolving the moment it is installed from a + registry rather than read out of the workspace. */ @source "../**/*.{ts,tsx}"; -@source "../../../../apps/rotom-ng-ui/src/**/*.{ts,tsx}"; @source "../*.{ts,tsx}"; @custom-variant dark (&:is(.dark *)); diff --git a/tsconfig.base.json b/tsconfig.base.json index 27131e7..6823756 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -10,8 +10,8 @@ "module": "esnext", "moduleResolution": "bundler", "paths": { - "@rotom-ng/base-ui": ["libs/base-ui/src/index.ts"], - "@rotom-ng/base-ui/*": ["libs/base-ui/src/*"] + "@unownhash/rotom-base-ui": ["libs/base-ui/src/index.ts"], + "@unownhash/rotom-base-ui/*": ["libs/base-ui/src/*"] }, "rootDir": ".", "skipDefaultLibCheck": true, From 0f96b27cc1c86c6b35d19fe21d95fa2993916f32 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sat, 29 Aug 2026 15:07:23 -0400 Subject: [PATCH 08/13] feat(ui): link workers to their devices and back Workers, devices and controllers each live on their own route, and the identifiers relating them were rendered as inert text. Following one meant reading an id, switching tabs, and typing it back in. Controllers cannot be joined to workers at all. A controller's worker_id is its own name rather than a foreign key, and workers come back without a session controller, so there is no edge there to render. The edge that does exist is worker.device_id against device.id. The workers table gains a Device column that navigates to that device. It takes the slot the Controller ID column occupied, which was permanently blank for the reason above: one dead column out, one working join in, same column count. The devices table's Origin cell navigates the other way, to that device's workers. Cross-linking needs the target page's filter to be addressable, so table search moves from component state into the URL as ?q=. Three things fall out of that and the third is the point: a search survives a reload, a search can be pasted to someone else, and one page can link into another's filter. It replaces rather than pushes, so typing does not bury the previous page under one history entry per keystroke. Verified against the mock medium profile: a worker's Device cell opens /devices?q=device-0 with the box pre-filled and the table reading "Devices (1 of 15)"; that device's Origin cell returns to /workers?q=device-0 reading "Workers (7 of 100)". Co-Authored-By: Claude Opus 5 --- .../src/controllers/controllers-table.tsx | 3 +- libs/base-ui/src/devices/devices-table.tsx | 16 +++++- libs/base-ui/src/index.ts | 6 +++ libs/base-ui/src/search/cross-link.tsx | 45 +++++++++++++++++ libs/base-ui/src/search/use-search-param.ts | 50 +++++++++++++++++++ libs/base-ui/src/workers/workers-table.tsx | 18 +++++-- 6 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 libs/base-ui/src/search/cross-link.tsx create mode 100644 libs/base-ui/src/search/use-search-param.ts diff --git a/libs/base-ui/src/controllers/controllers-table.tsx b/libs/base-ui/src/controllers/controllers-table.tsx index f56b6ce..1b43ee1 100644 --- a/libs/base-ui/src/controllers/controllers-table.tsx +++ b/libs/base-ui/src/controllers/controllers-table.tsx @@ -30,6 +30,7 @@ import { } from "../lib/aesthetic"; import { Search } from "../search"; import { matchesSearch, normalizeSearchTerm } from "../search/searchable"; +import { useSearchParamState } from "../search/use-search-param"; import { createControllerSorter, getNextSortState, @@ -337,7 +338,7 @@ const ControllersTableComponent: React.FC = ({ }; const ControllersTable = ({ controllers }: { controllers: Controller[] }) => { - const [search, setSearch] = useState(""); + const [search, setSearch] = useSearchParamState(); const executeAction = useCallback( async ({ diff --git a/libs/base-ui/src/devices/devices-table.tsx b/libs/base-ui/src/devices/devices-table.tsx index 78b0a23..b7cea2c 100644 --- a/libs/base-ui/src/devices/devices-table.tsx +++ b/libs/base-ui/src/devices/devices-table.tsx @@ -34,7 +34,9 @@ import { import { apiFetch } from "../lib/api"; import { cn } from "../lib/utils"; import { Search } from "../search"; +import { CrossLink } from "../search/cross-link"; import { matchesSearch, normalizeSearchTerm } from "../search/searchable"; +import { useSearchParamState } from "../search/use-search-param"; import { createDeviceSorter, getNextSortState, @@ -314,7 +316,17 @@ const DevicesTableComponent: React.FC = ({ - {device.origin} + {device.id ? ( + + {device.origin} + + ) : ( + device.origin + )}

@@ -435,7 +447,7 @@ const DevicesTable = ({ onDeviceUpdate?: (updatedDevice: Device) => void; onRemoveDead?: () => void; }) => { - const [search, setSearch] = useState(""); + const [search, setSearch] = useSearchParamState(); const executeAction = useCallback( async ({ deviceId, diff --git a/libs/base-ui/src/index.ts b/libs/base-ui/src/index.ts index 6f61452..fe847d8 100644 --- a/libs/base-ui/src/index.ts +++ b/libs/base-ui/src/index.ts @@ -80,6 +80,7 @@ export { } from "./lib/query-options"; export { cn } from "./lib/utils"; export * from "./search"; +export { CrossLink } from "./search/cross-link"; export { buildSearchIndex, describeSearchableFields, @@ -87,6 +88,11 @@ export { normalizeSearchTerm, type SearchableField, } from "./search/searchable"; +export { + SEARCH_PARAM, + searchLink, + useSearchParamState, +} from "./search/use-search-param"; export * from "./sorting"; export { StatusGrids } from "./status/status-grids"; export { StatusPage } from "./status/status-page"; diff --git a/libs/base-ui/src/search/cross-link.tsx b/libs/base-ui/src/search/cross-link.tsx new file mode 100644 index 0000000..259c3fd --- /dev/null +++ b/libs/base-ui/src/search/cross-link.tsx @@ -0,0 +1,45 @@ +import type { FC, ReactNode } from "react"; +import { Link } from "react-router"; +import { cn } from "../lib/utils"; +import { searchLink } from "./use-search-param"; + +export interface CrossLinkProps { + /** Route to open, e.g. "/devices". */ + to: string; + /** Term to pre-fill that page's search with. */ + term: string; + /** What the reader is being taken to, for the tooltip and screen readers. */ + label: string; + children?: ReactNode; + className?: string; +} + +/** + * A table cell that navigates to another table, pre-filtered. + * + * The data has no edge between a worker and its device -- worker.device_id + * and device.id are the only thing relating them, and both were rendered as + * inert text. Following one meant reading the id, switching tabs, and typing + * it back in. + */ +export const CrossLink: FC = ({ + to, + term, + label, + children, + className, +}) => ( + + {children ?? term} + +); diff --git a/libs/base-ui/src/search/use-search-param.ts b/libs/base-ui/src/search/use-search-param.ts new file mode 100644 index 0000000..d998e23 --- /dev/null +++ b/libs/base-ui/src/search/use-search-param.ts @@ -0,0 +1,50 @@ +import { useCallback } from "react"; +import { useSearchParams } from "react-router"; + +/** The query parameter every table's search box reads and writes. */ +export const SEARCH_PARAM = "q"; + +/** + * Table search, stored in the URL rather than in component state. + * + * Three things fall out of that, and the third is the point: + * + * - A search survives a reload, so a poll failure or an accidental refresh + * does not throw away what you were looking at. + * - A search can be pasted to someone else. + * - One page can link into another page's filter. Workers, devices and + * controllers live on separate routes with no edge between them in the + * data, so the only way to get from a worker to its device is to search + * for it. A link that carries the term does that in one click. + * + * Replaces rather than pushes, so typing does not bury the previous page + * under one history entry per keystroke. + */ +export const useSearchParamState = (): [string, (next: string) => void] => { + const [searchParams, setSearchParams] = useSearchParams(); + const search = searchParams.get(SEARCH_PARAM) ?? ""; + + const setSearch = useCallback( + (next: string) => { + setSearchParams( + (current) => { + const params = new URLSearchParams(current); + if (next) { + params.set(SEARCH_PARAM, next); + } else { + params.delete(SEARCH_PARAM); + } + return params; + }, + { replace: true }, + ); + }, + [setSearchParams], + ); + + return [search, setSearch]; +}; + +/** A link into another table, pre-filtered to `term`. */ +export const searchLink = (path: string, term: string): string => + `${path}?${SEARCH_PARAM}=${encodeURIComponent(term)}`; diff --git a/libs/base-ui/src/workers/workers-table.tsx b/libs/base-ui/src/workers/workers-table.tsx index 1df9d77..3238f93 100644 --- a/libs/base-ui/src/workers/workers-table.tsx +++ b/libs/base-ui/src/workers/workers-table.tsx @@ -36,7 +36,9 @@ import { } from "../lib/aesthetic"; import { cn } from "../lib/utils"; import { Search } from "../search"; +import { CrossLink } from "../search/cross-link"; import { buildSearchIndex, normalizeSearchTerm } from "../search/searchable"; +import { useSearchParamState } from "../search/use-search-param"; import { compareWorkerItems, getNextSortState, @@ -244,12 +246,12 @@ const WorkersTableComponent: React.FC<{ - Controller ID + Device @@ -354,7 +356,15 @@ const WorkersTableComponent: React.FC<{ {worker.weight || "N/A"} - {worker.session?.controller?.id || ""} + {worker.device_id ? ( + + ) : ( + "" + )} {worker.version_code} @@ -412,7 +422,7 @@ const WorkersTableComponent: React.FC<{ }; const WorkersTable = ({ devices }: WorkersTableProps) => { - const [search, setSearch] = useState(""); + const [search, setSearch] = useSearchParamState(); return (
From d44a456a54a738f757337ad98e3c837e6a436b46 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:15:29 -0400 Subject: [PATCH 09/13] fix(api): do not gzip the metrics endpoint The metrics endpoint is served by promhttp.HandlerFor, which negotiates Accept-Encoding itself and returns an already-gzipped body when the scraper asks for one. Wrapping that in the new middleware produced a response compressed twice: a client decompresses once and is handed another gzip stream instead of exposition text. Caught by the existing app tests, which read the body expecting the "go_" prefix and got binary. The middleware already declines to double-compress a body whose handler set Content-Encoding before writing, but that guard inspects the first Write, and promhttp's own gzip writer does not present its header there. Excluding the path is the honest fix: an endpoint that does its own content negotiation should not have a second compressor over it. Prometheus exposition still goes out compressed, by the handler that owns it. Co-Authored-By: Claude Opus 5 --- libs/ginutil/gzip.go | 15 ++++++++++++--- libs/ginutil/gzip_test.go | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/libs/ginutil/gzip.go b/libs/ginutil/gzip.go index 1158dc1..d5f4bce 100644 --- a/libs/ginutil/gzip.go +++ b/libs/ginutil/gzip.go @@ -20,11 +20,20 @@ var gzipExcludedExtensions = []string{ ".ico", ".woff", ".woff2", ".zip", ".gz", } -// gzipExcludedPathRegexps skips endpoints whose bodies are already a compressed -// container. Logcat replies are a zip built in memory and served with an -// explicit Content-Length, so there is nothing left for deflate to find. +// gzipExcludedPathRegexps skips endpoints that must not be wrapped a second +// time. +// +// Logcat replies are a zip built in memory and served with an explicit +// Content-Length, so there is nothing left for deflate to find. +// +// The metrics endpoint is served by promhttp, which negotiates Accept-Encoding +// itself and returns an already-gzipped body. Wrapping that produced a +// double-compressed response: a scraper decompresses once and is handed another +// gzip stream. Prometheus exposition still goes out compressed, just by the +// handler that owns it rather than by this middleware. var gzipExcludedPathRegexps = []string{ `/action/logcat$`, + `/metrics$`, } // GzipMiddleware compresses responses for clients that advertise gzip support. diff --git a/libs/ginutil/gzip_test.go b/libs/ginutil/gzip_test.go index 5446dab..8a1db64 100644 --- a/libs/ginutil/gzip_test.go +++ b/libs/ginutil/gzip_test.go @@ -142,3 +142,23 @@ func TestGzipMiddlewareSkipsExcludedPaths(t *testing.T) { }) } } + +// promhttp negotiates Accept-Encoding itself, so wrapping it produced a body +// that was gzipped twice: a scraper decompresses once and gets another gzip +// stream rather than exposition text. +func TestGzipMiddlewareSkipsMetrics(t *testing.T) { + gin.SetMode(gin.TestMode) + r := NewEngineWithLogger(slog.New(slog.DiscardHandler)) + r.GET("/api/metrics", func(c *gin.Context) { + c.String(http.StatusOK, largeBody) + }) + + w := doGet(t, r, "/api/metrics", map[string]string{"Accept-Encoding": "gzip"}) + + if got := w.Header().Get("Content-Encoding"); got != "" { + t.Errorf("Content-Encoding = %q, want empty: promhttp compresses this itself", got) + } + if w.Body.String() != largeBody { + t.Error("metrics body was altered by the middleware") + } +} From 4410f60c5f5920afdf5cfea0994768cda0314e21 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:15:56 -0400 Subject: [PATCH 10/13] fix(ui): route the remaining actions through apiFetch Every request to the API has to carry the session header, or the server rejects it whenever an api secret is configured. Device actions and the status polls were converted when that landed; four call sites were not. controllers-table disconnect and reconnect execute-job-modal run a job jobs-page clear a job instance, reload jobs All four used bare fetch, so with a secret set they would 401 and surface as a generic failure toast rather than sending the operator back to the login form. apiFetch attaches the header, keeps same-origin cookies, and converts a 401 into the AuthError that AuthGate watches for. Co-Authored-By: Claude Opus 5 --- libs/base-ui/src/controllers/controllers-table.tsx | 3 ++- libs/base-ui/src/jobs/execute-job-modal.tsx | 3 ++- libs/base-ui/src/jobs/jobs-page.tsx | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libs/base-ui/src/controllers/controllers-table.tsx b/libs/base-ui/src/controllers/controllers-table.tsx index 1b43ee1..7a1f94f 100644 --- a/libs/base-ui/src/controllers/controllers-table.tsx +++ b/libs/base-ui/src/controllers/controllers-table.tsx @@ -28,6 +28,7 @@ import { TABLE_HEADER_ROW, TABLE_WRAPPER, } from "../lib/aesthetic"; +import { apiFetch } from "../lib/api"; import { Search } from "../search"; import { matchesSearch, normalizeSearchTerm } from "../search/searchable"; import { useSearchParamState } from "../search/use-search-param"; @@ -359,7 +360,7 @@ const ControllersTable = ({ controllers }: { controllers: Controller[] }) => { }, }; - const promise = fetch( + const promise = apiFetch( `/api/controller/${controllerUuid}/action/${action}`, { method: "PUT" }, ).then(async (response) => { diff --git a/libs/base-ui/src/jobs/execute-job-modal.tsx b/libs/base-ui/src/jobs/execute-job-modal.tsx index 3ef663b..efa5b66 100644 --- a/libs/base-ui/src/jobs/execute-job-modal.tsx +++ b/libs/base-ui/src/jobs/execute-job-modal.tsx @@ -18,6 +18,7 @@ import { TableRow, } from "../components/ui/table"; import { TABLE_BODY_ROW, TABLE_HEADER_ROW } from "../lib/aesthetic"; +import { apiFetch } from "../lib/api"; import { Search } from "../search"; import { compareAlphanumeric } from "../sorting"; import type { Device } from "../types"; @@ -65,7 +66,7 @@ export const ExecuteJobModal: React.FC = ({ const executeJob = useCallback( async ({ deviceIds }: { deviceIds: string[] | number[] }) => { - const promise = fetch(`/api/job/${jobId}/run`, { + const promise = apiFetch(`/api/job/${jobId}/run`, { method: "PUT", headers: { "Content-Type": "application/json", diff --git a/libs/base-ui/src/jobs/jobs-page.tsx b/libs/base-ui/src/jobs/jobs-page.tsx index 1734ba0..e5bece1 100644 --- a/libs/base-ui/src/jobs/jobs-page.tsx +++ b/libs/base-ui/src/jobs/jobs-page.tsx @@ -16,6 +16,7 @@ import { AESTHETIC_CARD_HEADER, AESTHETIC_DANGER_BUTTON, } from "../lib/aesthetic"; +import { apiFetch } from "../lib/api"; import { jobInstancesQuery, jobsQuery, @@ -55,7 +56,7 @@ export const JobsPage = () => { const cancel = new AbortController(); const timer = setTimeout(() => cancel.abort(), 5000); try { - const res = await fetch("/api/job-instance/-/clear", { + const res = await apiFetch("/api/job-instance/-/clear", { method: "PUT", signal: cancel.signal, }); @@ -77,7 +78,7 @@ export const JobsPage = () => { const cancel = new AbortController(); const timer = setTimeout(() => cancel.abort(), 5000); try { - const res = await fetch("/api/job/-/reload", { + const res = await apiFetch("/api/job/-/reload", { method: "PUT", signal: cancel.signal, }); From 6b32e52121b0e92b2907ba606eceee5b1981da75 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:20:54 -0400 Subject: [PATCH 11/13] fix(ui): advance a page per click when Next is clicked quickly The pagination control works out an absolute target page from the page it was rendered with, so two clicks landing in the same render both computed the same target and the second was a no-op. Clicking Next twice in quick succession moved forward one page. The hook now records the page it rendered with, recovers the step the reader asked for, and applies it to whatever the current value is by the time the update runs, clamped to the last page. Two fast clicks advance two pages. Kept inside the hook rather than changing the pagination component's props, which are shared by every table. Co-Authored-By: Claude Opus 5 --- libs/base-ui/src/hooks/use-table-pagination.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/libs/base-ui/src/hooks/use-table-pagination.ts b/libs/base-ui/src/hooks/use-table-pagination.ts index cd729bf..d4d6285 100644 --- a/libs/base-ui/src/hooks/use-table-pagination.ts +++ b/libs/base-ui/src/hooks/use-table-pagination.ts @@ -1,4 +1,4 @@ -import { type RefObject, useCallback, useState } from "react"; +import { type RefObject, useCallback, useRef, useState } from "react"; export interface UseTablePaginationOptions { /** @@ -109,6 +109,14 @@ export function useTablePagination({ const lastPage = Math.max(0, Math.ceil(itemCount / rowsPerPage) - 1); const page = Math.min(requestedPage, lastPage); + // The pagination control hands back an absolute page it worked out from the + // page it was rendered with. Two clicks inside one render both compute the + // same target, so a quick double-click on Next used to advance a single + // page. Recording the rendered page lets the handler recover the step the + // reader asked for and apply it to whatever the current value is by then. + const renderedPage = useRef(page); + renderedPage.current = page; + const scrollTableIntoView = useCallback(() => { const target = scrollTargetRef?.current; if (!target || typeof window === "undefined") return; @@ -125,10 +133,14 @@ export function useTablePagination({ const handleChangePage = useCallback( (_event: unknown, newPage: number) => { - setRequestedPage(newPage); + const step = newPage - renderedPage.current; + setRequestedPage((previous) => { + const next = step === 0 ? newPage : previous + step; + return Math.max(0, Math.min(next, lastPage)); + }); scrollTableIntoView(); }, - [scrollTableIntoView], + [lastPage, scrollTableIntoView], ); const handleChangeRowsPerPage = useCallback( From 08a027a9443bc347cb3a705169711163fd831a37 Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:20:54 -0400 Subject: [PATCH 12/13] fix(ui): keep the page when a single poll fails Every page replaced its entire contents with a full-page error the moment one refresh failed, throwing away the table, the reader's page position, and whatever was in the search box. A dashboard that polls every five seconds will miss a poll occasionally, and losing the whole view over a transient blip is worse than showing numbers a few seconds old. The guard is now on the data rather than on isSuccess. That distinction is the whole fix, and it is not obvious: a refetch that fails while cached data is present flips status to "error" and isSuccess to false but leaves data in place. Verified directly against query-core: after success status=success isSuccess=true hasData=true after failed refetch status=error isSuccess=false hasData=true So keying the full-page error off isSuccess, which is what the first attempt at this did, would have kept wiping the view. With data present and a failure, the page renders as usual above a banner saying the numbers are the last successful update. With no data at all, the full-page error stands. Co-Authored-By: Claude Opus 5 --- .../src/components/stale-data-banner.tsx | 37 +++++++++++++++++++ .../src/controllers/controllers-page.tsx | 10 ++++- libs/base-ui/src/devices/device-page.tsx | 12 ++++-- libs/base-ui/src/index.ts | 1 + libs/base-ui/src/status/status-page.tsx | 12 ++++-- libs/base-ui/src/workers/workers-page.tsx | 10 ++++- 6 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 libs/base-ui/src/components/stale-data-banner.tsx diff --git a/libs/base-ui/src/components/stale-data-banner.tsx b/libs/base-ui/src/components/stale-data-banner.tsx new file mode 100644 index 0000000..7fe9bea --- /dev/null +++ b/libs/base-ui/src/components/stale-data-banner.tsx @@ -0,0 +1,37 @@ +import { AlertTriangle } from "lucide-react"; +import type { FC } from "react"; + +export interface StaleDataBannerProps { + /** The failure from the most recent poll. Nothing renders without one. */ + error: Error | null; +} + +/** + * Shown when a poll fails but earlier data is still on screen. + * + * The pages used to replace everything with a full-page error the moment a + * single refresh failed, which threw away the table, the reader's page, and + * whatever they had typed into the search box. A dashboard that polls every + * few seconds will fail a poll occasionally, and losing the whole view over a + * transient blip is worse than showing slightly old numbers. + * + * The rule is now: no data at all means the full-page error, and data plus a + * failure means this, so the reader can tell the numbers have stopped moving + * without being thrown out of what they were doing. + */ +export const StaleDataBanner: FC = ({ error }) => { + if (!error) return null; + + return ( +
+
+ ); +}; diff --git a/libs/base-ui/src/controllers/controllers-page.tsx b/libs/base-ui/src/controllers/controllers-page.tsx index b93c718..2d8f8ff 100644 --- a/libs/base-ui/src/controllers/controllers-page.tsx +++ b/libs/base-ui/src/controllers/controllers-page.tsx @@ -1,12 +1,13 @@ import { useQuery } from "@tanstack/react-query"; import { Loader2 } from "lucide-react"; +import { StaleDataBanner } from "../components/stale-data-banner"; import { statusQuery } from "../lib/query-options"; import { ControllerGrids } from "./controller-grids"; import { MemoizedControllersTable as ControllersTable } from "./controllers-table"; export const ControllersPage = () => { - const { isLoading, isFetching, error, data, isSuccess } = useQuery({ + const { isLoading, isFetching, error, data } = useQuery({ ...statusQuery(), select: (s) => s.controllers, }); @@ -19,7 +20,11 @@ export const ControllersPage = () => { ); } - if (error || !isSuccess) { + // Guard on the data, not on isSuccess. A refetch that fails while cached data + // is present flips status to "error" and isSuccess to false but leaves data + // in place, so keying the full-page error off isSuccess would still throw the + // whole view away on a single failed poll. + if (!data) { return (

@@ -31,6 +36,7 @@ export const ControllersPage = () => { return (

+

diff --git a/libs/base-ui/src/devices/device-page.tsx b/libs/base-ui/src/devices/device-page.tsx index 9ccb276..a7b2dec 100644 --- a/libs/base-ui/src/devices/device-page.tsx +++ b/libs/base-ui/src/devices/device-page.tsx @@ -3,6 +3,7 @@ import { Loader2 } from "lucide-react"; import { useCallback, useState } from "react"; import { toast } from "react-toastify"; import { ConfirmationDialog } from "../components/confirmation-dialog"; +import { StaleDataBanner } from "../components/stale-data-banner"; import { apiFetch } from "../lib/api"; import { statusQuery } from "../lib/query-options"; import type { Device, Status } from "../types"; @@ -19,9 +20,7 @@ const REMOVE_DEAD_TIMEOUT_MS = 5000; export const DevicePage = () => { const queryClient = useQueryClient(); const [confirmRemoveDead, setConfirmRemoveDead] = useState(false); - const { isLoading, isFetching, error, data, isSuccess } = useQuery( - statusQuery(), - ); + const { isLoading, isFetching, error, data } = useQuery(statusQuery()); const handleDeviceUpdate = useCallback( (updatedDevice: Device) => { @@ -113,7 +112,11 @@ export const DevicePage = () => { ); } - if (error || !isSuccess) { + // Guard on the data, not on isSuccess. A refetch that fails while cached data + // is present flips status to "error" and isSuccess to false but leaves data + // in place, so keying the full-page error off isSuccess would still throw the + // whole view away on a single failed poll. + if (!data) { return (

@@ -125,6 +128,7 @@ export const DevicePage = () => { return (

+

diff --git a/libs/base-ui/src/index.ts b/libs/base-ui/src/index.ts index fe847d8..5b6b0cc 100644 --- a/libs/base-ui/src/index.ts +++ b/libs/base-ui/src/index.ts @@ -2,6 +2,7 @@ export * from "./anim"; export * from "./auth"; export { ConfirmationDialog } from "./components/confirmation-dialog"; export { CustomTablePagination } from "./components/custom-table-pagination"; +export { StaleDataBanner } from "./components/stale-data-banner"; export { StatusGrid } from "./components/status-grid"; export { TableEmptyState } from "./components/table-empty-state"; export { TimeWindowStats } from "./components/time-window-stats"; diff --git a/libs/base-ui/src/status/status-page.tsx b/libs/base-ui/src/status/status-page.tsx index 70777bc..bbb439c 100644 --- a/libs/base-ui/src/status/status-page.tsx +++ b/libs/base-ui/src/status/status-page.tsx @@ -1,12 +1,11 @@ import { useQuery } from "@tanstack/react-query"; import { Loader2 } from "lucide-react"; +import { StaleDataBanner } from "../components/stale-data-banner"; import { statusQuery } from "../lib/query-options"; import { StatusGrids } from "./status-grids"; export const StatusPage = () => { - const { isLoading, isFetching, error, data, isSuccess } = useQuery( - statusQuery(), - ); + const { isLoading, isFetching, error, data } = useQuery(statusQuery()); if (isLoading) { return ( @@ -16,7 +15,11 @@ export const StatusPage = () => { ); } - if (error || !isSuccess) { + // Guard on the data, not on isSuccess. A refetch that fails while cached data + // is present flips status to "error" and isSuccess to false but leaves data + // in place, so keying the full-page error off isSuccess would still throw the + // whole view away on a single failed poll. + if (!data) { return (

@@ -28,6 +31,7 @@ export const StatusPage = () => { return (

+

Status diff --git a/libs/base-ui/src/workers/workers-page.tsx b/libs/base-ui/src/workers/workers-page.tsx index f52a6f5..0a3f122 100644 --- a/libs/base-ui/src/workers/workers-page.tsx +++ b/libs/base-ui/src/workers/workers-page.tsx @@ -1,12 +1,13 @@ import { useQuery } from "@tanstack/react-query"; import { Loader2 } from "lucide-react"; +import { StaleDataBanner } from "../components/stale-data-banner"; import { statusQuery } from "../lib/query-options"; import { WorkerGrids } from "./worker-grids"; import { MemoizedWorkersTable as WorkersTable } from "./workers-table"; export const WorkersPage = () => { - const { isLoading, isFetching, error, data, isSuccess } = useQuery({ + const { isLoading, isFetching, error, data } = useQuery({ ...statusQuery(), select: (s) => ({ devices: s.devices, global_stats: s.global_stats }), }); @@ -19,7 +20,11 @@ export const WorkersPage = () => { ); } - if (error || !isSuccess) { + // Guard on the data, not on isSuccess. A refetch that fails while cached data + // is present flips status to "error" and isSuccess to false but leaves data + // in place, so keying the full-page error off isSuccess would still throw the + // whole view away on a single failed poll. + if (!data) { return (

@@ -31,6 +36,7 @@ export const WorkersPage = () => { return (

+

From fedbeff79b936856a21e65ad6d85657d67ee331e Mon Sep 17 00:00:00 2001 From: Rin <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:21:01 -0400 Subject: [PATCH 13/13] chore: sync bun.lock with the base-ui manifest libs/base-ui is a workspace member, so its dependency list is recorded in the root lockfile. Pruning that list left the lockfile stale, and CI installs with --frozen-lockfile, so the next push would have failed before running a single test. Most of the change is the react-admin tree dropping out. Co-Authored-By: Claude Opus 5 --- bun.lock | 468 ++++++++++--------------------------------------------- 1 file changed, 83 insertions(+), 385 deletions(-) diff --git a/bun.lock b/bun.lock index 106ae98..c668eb4 100644 --- a/bun.lock +++ b/bun.lock @@ -48,45 +48,33 @@ "version": "0.0.0", }, "libs/base-ui": { - "name": "@rotom-ng/base-ui", - "version": "0.0.0", + "name": "@unownhash/rotom-base-ui", + "version": "1.0.0", "dependencies": { - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", + "@number-flow/react": "^0.6.0", "@tanstack/react-query": "^5.100.11", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "cronstrue": "^3.14.0", - "date-fns": "^4.2.1", - "diacritic": "^0.0.2", - "dompurify": "^3.4.5", - "html-react-parser": "^6.1.1", - "inflection": "^3.0.2", - "libphonenumber-js": "^1.13.2", - "lodash": "^4.18.1", "lucide-react": "^1.16.0", - "next-themes": "^0.4.6", - "query-string": "^9.3.1", - "ra-core": "^5.14.7", - "ra-i18n-polyglot": "^5.14.7", - "ra-language-english": "^5.14.7", - "radix-ui": "^1.4.3", - "react-dropzone": "^15.0.0", - "react-error-boundary": "^6.1.1", - "react-hook-form": "^7.76.0", + "motion": "^12.39.0", + "radix-ui": "^1.5.0", "react-router": "^8.3.0", - "recharts": "^3.8.1", - "sonner": "^2.0.7", + "react-toastify": "^11.1.0", "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", - "vaul": "^1.1.2", }, "devDependencies": { "@tailwindcss/vite": "^4.3.0", "tailwindcss": "^4.3.0", }, + "peerDependencies": { + "msw": "^2.14.6", + "react": "^19.2.6", + "react-dom": "^19.2.6", + }, + "optionalPeers": [ + "msw", + ], }, }, "trustedDependencies": [ @@ -353,14 +341,6 @@ "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], - "@dnd-kit/accessibility": ["@dnd-kit/accessibility@3.1.1", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw=="], - - "@dnd-kit/core": ["@dnd-kit/core@6.3.1", "", { "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ=="], - - "@dnd-kit/sortable": ["@dnd-kit/sortable@10.0.0", "", { "dependencies": { "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@dnd-kit/core": "^6.3.0", "react": ">=16.8.0" } }, "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg=="], - - "@dnd-kit/utilities": ["@dnd-kit/utilities@3.2.2", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg=="], - "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], "@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], @@ -593,127 +573,125 @@ "@pkgr/core": ["@pkgr/core@0.3.6", "", {}, "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA=="], - "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], - - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + "@radix-ui/number": ["@radix-ui/number@1.1.3", "", {}, "sha512-Road2bidD0uu/1BGDOWNdPI06g0lIRy6IF9GZcIrDK2KGItfor8IQwQa+yM2ERgHM1MmHxaxpTzk0/Jp42lNfA=="], - "@radix-ui/react-accessible-icon": ["@radix-ui/react-accessible-icon@1.1.7", "", { "dependencies": { "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.7", "", {}, "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q=="], - "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], + "@radix-ui/react-accessible-icon": ["@radix-ui/react-accessible-icon@1.1.15", "", { "dependencies": { "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-WTQwcAvQf5sOcuUyi90lKPbhwcvQ+j55cjrSmeaN+L2vKU3DooOvlKw2MDeiJ5IkV5N905KW0/fGojKOBhD11A=="], - "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.20", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collapsible": "1.1.20", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-jDhG9FvAEnlhnjrsINbNXcUa4G+L1KqSkJSunkbKEzFRcAb52jvM0PjPxPRvhe1HNc5F5yc0yzzWeeqlH4yBIg=="], - "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], + "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dialog": "1.1.23", "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-VAYOiQRqj3GPpYJE0I9J+X8Ip05cyVlNdKOFeiGS2Ou1HHGfpl0BxOyZm6nmVDyU+W+NF3/XLzmjHmVGydhwgA=="], - "@radix-ui/react-aspect-ratio": ["@radix-ui/react-aspect-ratio@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g=="], + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA=="], - "@radix-ui/react-avatar": ["@radix-ui/react-avatar@1.1.10", "", { "dependencies": { "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog=="], + "@radix-ui/react-aspect-ratio": ["@radix-ui/react-aspect-ratio@1.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-fy+dyVR+90nelK8rqIznFlxzx7uPcGbhxH8Nfr2bHb4UfSe+e3hklOC0luK0hDwVwnRX7xTRySpsrQVeW+/oNQ=="], - "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], + "@radix-ui/react-avatar": ["@radix-ui/react-avatar@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-is-hydrated": "0.1.3", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-4ULOTJ/mqy2hT9GlWa/MFHxHSvH3nJzHnZM1waNsc5Bonv7i70aNenghXmD97S6OJ81ekXONGGt4nT1r0PfEdA=="], - "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], + "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Gnptr9pDDQxD3hgq2dtPbtrp/c2qH1mBwIzw3X/ivrMb2e1t0jMTi606fVEqFPaQR1ggXIVQWKj3P2WW9v7zGQ=="], - "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.20", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mcGesGplBnzN2sbvJETzpCNfSMyPnb29q1GRLU+Ib7bJrpIG2ywmRoh2V5VbA2uNvKikKUlVbAPks7JDjz4A8Q=="], - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.15", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA=="], - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.5", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA=="], - "@radix-ui/react-context-menu": ["@radix-ui/react-context-menu@2.2.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.2.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA=="], - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + "@radix-ui/react-context-menu": ["@radix-ui/react-context-menu@2.3.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-menu": "2.1.24", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-CtXP35dxaB5T3zXSd+E3uHe/QpXcpYnZmxp6OaIbfthtfW4wyb77M23BG+bwIJDtsMwEP/YssdsmNyZu7jhWew=="], - "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA=="], - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg=="], - "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-effect-event": "0.0.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w=="], - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.24", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-menu": "2.1.24", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-geq8l2rJkxvkXsT9RMgtUE3P8pITFpTsvYpbySi1IH4fZEABD/Gp85myayFgxk0ktljGMJnCbeFkyTusvSvv7g=="], - "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.6", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ=="], - "@radix-ui/react-form": ["@radix-ui/react-form@0.1.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-label": "2.1.7", "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.16", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ=="], - "@radix-ui/react-hover-card": ["@radix-ui/react-hover-card@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg=="], + "@radix-ui/react-form": ["@radix-ui/react-form@0.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-label": "2.1.15", "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Q4TLEn2A7TAypxwmd6R9EwrlXDvkfYSDMrq9/887AXAGh+G1rH+kYJKSTv+Si9Y0JPKTwKYv6PviAJosysNimA=="], - "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + "@radix-ui/react-hover-card": ["@radix-ui/react-hover-card@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-H8qONfZd3ltrU3+jHCIgITbWo6e1iTKvP9DHdrvYbX48ooRM5FjEDTn16AMwdfuOGkWdZEhpl3PLL/Wk/AnHDQ=="], - "@radix-ui/react-label": ["@radix-ui/react-label@2.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.4", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA=="], - "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], + "@radix-ui/react-label": ["@radix-ui/react-label@2.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-o/rdYEwZTTo5tjknnPeyQFU45kUC4i/XyeDPP+HGyi6XqpOP6Zf5Ya5vh/Yfe9Id5JiuWnnAx2XqIeD3UYZt0g=="], - "@radix-ui/react-menubar": ["@radix-ui/react-menubar@1.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA=="], + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.24", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-callback-ref": "1.1.4", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-uW7RVuU6Lp/ZtfeY4b3kL32zccgEWvPv1+cf17ubYzHa9cL8AHokmk36cG/XEiH/smbQvumnieXX9j/e9RqJWA=="], - "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w=="], + "@radix-ui/react-menubar": ["@radix-ui/react-menubar@1.1.24", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-menu": "2.1.24", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-eeVs0vf7cuqXaM0qLQCPcufImiJNVBXdJDLu7ZGYl2732UH23Qat/foNGrr6vYV3/DdTsBqASoggUFgH14OcZA=="], - "@radix-ui/react-one-time-password-field": ["@radix-ui/react-one-time-password-field@0.1.8", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg=="], + "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.22", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-previous": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ou7iLEJ+yrhQndkkA4U21XIdS/CS45F4iXIkTZcb6/Ne9EMsOuDudVmCwmDnfFZZ+y1FZqXRNSIgBy+YMvZVZg=="], - "@radix-ui/react-password-toggle-field": ["@radix-ui/react-password-toggle-field@0.1.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-is-hydrated": "0.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw=="], + "@radix-ui/react-one-time-password-field": ["@radix-ui/react-one-time-password-field@0.1.16", "", { "dependencies": { "@radix-ui/number": "1.1.3", "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-is-hydrated": "0.1.3", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Tj9P6ntAJEw52oq/F0AGknXR4XncxEt7XU47O3xJQOiWfLzEy3d9gtgKfvjSzGxzHkfL+VzvxGu2KTFsloJqXw=="], - "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], + "@radix-ui/react-password-toggle-field": ["@radix-ui/react-password-toggle-field@0.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-is-hydrated": "0.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-4gvFnmDXu3dgj21CqsufzIameRvlRd4SBqaWhcrlrNhRo0Y5i/49AmRJYe1fdAM3G2VNBbmin4b0D6cdQocwgw=="], - "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mw58MrBlyHWFisTOYignD0vf/3gdcgAR+9of1s9G/38CbFiUwH1nCDkc0AUM9IrXFgN5Ue8n45j9WCgyM1sbiQ=="], - "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.3.7", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-rect": "1.1.4", "@radix-ui/react-use-size": "1.1.4", "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg=="], - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.17", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ=="], - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.10", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw=="], - "@radix-ui/react-progress": ["@radix-ui/react-progress@1.1.7", "", { "dependencies": { "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.10", "", { "dependencies": { "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg=="], - "@radix-ui/react-radio-group": ["@radix-ui/react-radio-group@1.3.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ=="], + "@radix-ui/react-progress": ["@radix-ui/react-progress@1.1.16", "", { "dependencies": { "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-5XnomAsoZZCY+KNTxbIghpGqPruZvKFNlvcAljVAOdDRDsH4/OZQxhtwo5wdtoDM5R6MhJBb2sPnDuRFep3lzg=="], - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + "@radix-ui/react-radio-group": ["@radix-ui/react-radio-group@1.4.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-cgYFEkntCxppHZgtSZ+7vh0wbZQ+IC7PPMw8DSnRG27B6kDd32/Zw0OJt7dGDigCoprMuWHjg2PvUn3PYvPFoQ=="], - "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.10", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-is-hydrated": "0.1.3", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ=="], - "@radix-ui/react-select": ["@radix-ui/react-select@2.2.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ=="], + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.18", "", { "dependencies": { "@radix-ui/number": "1.1.3", "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Zn5Cd171wxsO3Dfg8HaW6RifTb9CYTKQJHs/G4+LN1GfmJpaQMZQyQxMprVPHpaz7QY4l9BxK2JwQuzHsXC8nA=="], - "@radix-ui/react-separator": ["@radix-ui/react-separator@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA=="], + "@radix-ui/react-select": ["@radix-ui/react-select@2.3.7", "", { "dependencies": { "@radix-ui/number": "1.1.3", "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-previous": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-WFGImkmbzcfxeIwq/+4HvRN0pizBwbwQUED4I13ezQsDdfl38ZntN6TmR8XaSzPBqoCToe8rF75j6NPNDSzhbg=="], - "@radix-ui/react-slider": ["@radix-ui/react-slider@1.3.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw=="], + "@radix-ui/react-separator": ["@radix-ui/react-separator@1.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw=="], - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "@radix-ui/react-slider": ["@radix-ui/react-slider@1.4.7", "", { "dependencies": { "@radix-ui/number": "1.1.3", "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-previous": "1.1.4", "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mTSLf1GC/C0moWjTbvCM6Qn/gBjvlFt1azuWF2v7MN5C3Zq2U2J2lN3ZEYkpujuOU5Ro7A28wkviSxaKnG0BYg=="], - "@radix-ui/react-switch": ["@radix-ui/react-switch@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q=="], - "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], + "@radix-ui/react-switch": ["@radix-ui/react-switch@1.3.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-size": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-48tB/4dn2UVLBCYhTu9AuR63IHl73l/qLbLgxd86noTUor4/K4LFDAcYjK+isP5313qxaFpjPVogE7+Y0/V3Kw=="], - "@radix-ui/react-toast": ["@radix-ui/react-toast@1.2.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.21", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-UKxJlZid7FVtsk/WTxj4i4uSEgj2Au+KBbS7SQyTlzMhhn+86Cz3tISZdTa87bfEfcuvZezf2ZsxD4xuEKtkog=="], - "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.10", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ=="], + "@radix-ui/react-toast": ["@radix-ui/react-toast@1.2.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ofhyAsYaocRGOs/n0XWdUOSVzEAG6BfrMVM8z0c0kLEWY38w/0WuMFPTJP/HVaZPYkMvHZoKIIhNcjbTCBILPg=="], - "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q=="], + "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.18", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7lonPlKfSacd20GlOBx2ltuVKz9oqWYZz+oMQyOltw6t1y2nyftj2ZmwwUHYn49kqfDWcp8dNZm5NgV+5Z+mug=="], - "@radix-ui/react-toolbar": ["@radix-ui/react-toolbar@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-toggle-group": "1.1.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg=="], + "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-toggle": "1.1.18", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-OtnwuSVjd1Ofi+AdnvhsjQdyuhCDwYs1w9RyB5BN/OavXOVQo42SYqQjwUnbPnaiPFBpQ9aX70dWeee+v2oBLA=="], - "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], + "@radix-ui/react-toolbar": ["@radix-ui/react-toolbar@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-separator": "1.1.15", "@radix-ui/react-toggle-group": "1.1.19" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Ph0IvtYw4VB12ZnZg+YtrGs8yJQsnizwo/zu0R4Y/nWugtJzA7Pg1eWeuDR9+LSqn+xjamss+UOSOJJJ4gx8jw=="], - "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-6EamKFRRnlpdadndbZ6LMwycfwkwPte1B42hs6QA0gYhjaOKqW4PZ4pjaW9UrlDX5eVt/OjncE7BFTPL5nmZhg=="], - "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ=="], - "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ=="], - "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.5", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg=="], - "@radix-ui/react-use-is-hydrated": ["@radix-ui/react-use-is-hydrated@0.1.0", "", { "dependencies": { "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.5", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ge3ipobwSXTj4JyVtswQ7qZj0ZHdtbGuOno/LrgAAeSxtsJ6Vs4Gz5IkPH2bmqpjcLUFoqGhA/mueuIf63UXlA=="], - "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "@radix-ui/react-use-is-hydrated": ["@radix-ui/react-use-is-hydrated@0.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw=="], - "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw=="], - "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-XoSLhbRbqxFtgJoi2fNHA3C6pDlY34x508vUpUGoFZfvePfHXHbE1lC4FYFMnJWgiCRroSTw6fOsXQoVS9RwZg=="], - "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.4", "", { "dependencies": { "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ=="], - "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.4", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw=="], - "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.11", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ=="], - "@reduxjs/toolkit": ["@reduxjs/toolkit@2.12.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw=="], + "@radix-ui/rect": ["@radix-ui/rect@1.1.3", "", {}, "sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw=="], "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.3", "", { "os": "android", "cpu": "arm64" }, "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw=="], @@ -811,8 +789,6 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw=="], - "@rotom-ng/base-ui": ["@rotom-ng/base-ui@workspace:libs/base-ui"], - "@rotom-ng/rotom-ng-ui": ["@rotom-ng/rotom-ng-ui@workspace:apps/rotom-ng-ui"], "@rspack/binding": ["@rspack/binding@1.6.8", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.6.8", "@rspack/binding-darwin-x64": "1.6.8", "@rspack/binding-linux-arm64-gnu": "1.6.8", "@rspack/binding-linux-arm64-musl": "1.6.8", "@rspack/binding-linux-x64-gnu": "1.6.8", "@rspack/binding-linux-x64-musl": "1.6.8", "@rspack/binding-wasm32-wasi": "1.6.8", "@rspack/binding-win32-arm64-msvc": "1.6.8", "@rspack/binding-win32-ia32-msvc": "1.6.8", "@rspack/binding-win32-x64-msvc": "1.6.8" } }, "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ=="], @@ -855,8 +831,6 @@ "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@svgr/babel-plugin-add-jsx-attribute": ["@svgr/babel-plugin-add-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g=="], "@svgr/babel-plugin-remove-jsx-attribute": ["@svgr/babel-plugin-remove-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA=="], @@ -969,24 +943,6 @@ "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], - "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], - - "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], - - "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], - - "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], - - "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], - - "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], - - "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], - - "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], - - "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], - "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], "@types/esquery": ["@types/esquery@1.5.4", "", { "dependencies": { "@types/estree": "*" } }, "sha512-yYO4Q8H+KJHKW1rEeSzHxcZi90durqYgWVfnh5K6ZADVBjBv2e1NEveYX5yT2bffgN7RqzH3k9930m+i2yBoMA=="], @@ -1025,16 +981,14 @@ "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="], - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], - - "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], - "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], + "@unownhash/rotom-base-ui": ["@unownhash/rotom-base-ui@workspace:libs/base-ui"], + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.12.2", "", { "os": "android", "cpu": "arm" }, "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w=="], "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.12.2", "", { "os": "android", "cpu": "arm64" }, "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ=="], @@ -1193,8 +1147,6 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="], - "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], "axios": ["axios@1.16.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } }, "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w=="], @@ -1263,8 +1215,6 @@ "cacheable-request": ["cacheable-request@13.0.19", "", { "dependencies": { "@types/http-cache-semantics": "^4.2.0", "get-stream": "^9.0.1", "http-cache-semantics": "^4.2.0", "keyv": "^5.6.0", "mimic-response": "^4.0.0", "normalize-url": "^8.1.1", "responselike": "^4.0.2" } }, "sha512-SVXGH037+Mo1aIMO5B2UcleR43FGjFdN+M8JObSyEoQ2Mn4CODRWx28gN5jiTF0n5ItsgtIZfyargMNs8GX4kg=="], - "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], @@ -1301,8 +1251,6 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], - "co": ["co@4.6.0", "", {}, "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="], "collect-v8-coverage": ["collect-v8-coverage@1.0.3", "", {}, "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw=="], @@ -1345,8 +1293,6 @@ "cron-parser": ["cron-parser@4.9.0", "", { "dependencies": { "luxon": "^3.2.1" } }, "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q=="], - "cronstrue": ["cronstrue@3.14.0", "", { "bin": { "cronstrue": "bin/cli.js" } }, "sha512-XnW4vuK/jPJjmTyDWiej1Zq36Od7ITwxaV2O1pzHZuyMVvdy7NAvyvIBzybt+idqSpfqYuoDG7uf/ocGtJVWxA=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], @@ -1361,36 +1307,8 @@ "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], - - "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], - - "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], - - "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], - - "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], - - "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], - - "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], - - "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], - - "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], - - "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], - - "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], - - "date-fns": ["date-fns@4.4.0", "", {}, "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], - - "decode-uri-component": ["decode-uri-component@0.4.1", "", {}, "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ=="], - "decompress-response": ["decompress-response@10.0.0", "", { "dependencies": { "mimic-response": "^4.0.0" } }, "sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q=="], "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], @@ -1401,12 +1319,8 @@ "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], @@ -1421,17 +1335,13 @@ "detect-port": ["detect-port@2.1.0", "", { "dependencies": { "address": "^2.0.1" }, "bin": { "detect": "dist/commonjs/bin/detect-port.js", "detect-port": "dist/commonjs/bin/detect-port.js" } }, "sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q=="], - "diacritic": ["diacritic@0.0.2", "", {}, "sha512-iQCeDkSPwkfwWPr+HZZ49WRrM2FSI9097Q9w7agyRCdLcF9Eh2Ek0sHKcmMWx2oZVBjRBE/sziGFjZu0uf1Jbg=="], - - "dom-serializer": ["dom-serializer@3.1.1", "", { "dependencies": { "domelementtype": "^3.0.0", "domhandler": "^6.0.0", "entities": "^8.0.0" } }, "sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw=="], - - "domelementtype": ["domelementtype@3.0.0", "", {}, "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg=="], + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - "domhandler": ["domhandler@6.0.1", "", { "dependencies": { "domelementtype": "^3.0.0" } }, "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg=="], + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - "dompurify": ["dompurify@3.4.7", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA=="], + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "domutils": ["domutils@4.0.2", "", { "dependencies": { "dom-serializer": "^3.0.0", "domelementtype": "^3.0.0", "domhandler": "^6.0.0" } }, "sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA=="], + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], @@ -1463,7 +1373,7 @@ "enquirer": ["enquirer@2.3.6", "", { "dependencies": { "ansi-colors": "^4.1.1" } }, "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="], - "entities": ["entities@8.0.0", "", {}, "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA=="], + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], @@ -1477,8 +1387,6 @@ "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "es-toolkit": ["es-toolkit@1.47.0", "", {}, "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], @@ -1509,7 +1417,7 @@ "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], @@ -1555,8 +1463,6 @@ "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - "file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="], - "file-type": ["file-type@21.3.4", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g=="], "filename-reserved-regex": ["filename-reserved-regex@4.0.0", "", {}, "sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA=="], @@ -1565,8 +1471,6 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "filter-obj": ["filter-obj@5.1.0", "", {}, "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng=="], - "finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], @@ -1651,8 +1555,6 @@ "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], @@ -1665,16 +1567,10 @@ "homedir-polyfill": ["homedir-polyfill@1.0.3", "", { "dependencies": { "parse-passwd": "^1.0.0" } }, "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA=="], - "html-dom-parser": ["html-dom-parser@8.0.0", "", { "dependencies": { "domhandler": "6.0.1", "htmlparser2": "12.0.0" } }, "sha512-cWLJ8mt930VceOzVfY/J+T1ou9v3ENT0BgWqy5aEZjdFp37TYLXULjX8u0vD2rBpFAkK5IofOPl0y4Gq0QLIyA=="], - "html-encoding-sniffer": ["html-encoding-sniffer@3.0.0", "", { "dependencies": { "whatwg-encoding": "^2.0.0" } }, "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA=="], "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], - "html-react-parser": ["html-react-parser@6.1.3", "", { "dependencies": { "domhandler": "6.0.1", "html-dom-parser": "8.0.0", "react-property": "2.0.2", "style-to-js": "2.0.0" }, "peerDependencies": { "@types/react": "0.14 || 15 || 16 || 17 || 18 || 19", "react": "0.14 || 15 || 16 || 17 || 18 || 19" }, "optionalPeers": ["@types/react"] }, "sha512-CTsKtLJA23cgTbcJYT8vgHAPSqGY7NM+/mv+Tv6I0DqkLCa3FlceK2htH8AwlGa03BopqnVvK/XHqQq7HAw/sg=="], - - "htmlparser2": ["htmlparser2@12.0.0", "", { "dependencies": { "domelementtype": "^3.0.0", "domhandler": "^6.0.0", "domutils": "^4.0.2", "entities": "^8.0.0" } }, "sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw=="], - "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], @@ -1699,26 +1595,18 @@ "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "immer": ["immer@10.2.0", "", {}, "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "inflection": ["inflection@3.0.2", "", {}, "sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g=="], - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], - "inspect-with-kind": ["inspect-with-kind@1.0.5", "", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g=="], - "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], @@ -1835,8 +1723,6 @@ "jsonc-parser": ["jsonc-parser@3.2.0", "", {}, "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="], - "jsonexport": ["jsonexport@3.2.0", "", { "bin": { "jsonexport": "bin/jsonexport.js" } }, "sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ=="], - "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], "keyv": ["keyv@5.6.0", "", { "dependencies": { "@keyv/serialize": "^1.1.1" } }, "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw=="], @@ -1847,8 +1733,6 @@ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "libphonenumber-js": ["libphonenumber-js@1.13.4", "", {}, "sha512-/lhWr7vq8foWN9Apksnd9v8/cfwzW6g6qKOCo25XBGkNaVCHucXO57hLy4CWHGvytvLz6Nt3J5Gs8p3jlCGFXA=="], - "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], @@ -1881,8 +1765,6 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], @@ -1891,8 +1773,6 @@ "long-timeout": ["long-timeout@0.1.1", "", {}, "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], "lowercase-keys": ["lowercase-keys@3.0.0", "", {}, "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="], @@ -1965,16 +1845,12 @@ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], - "node-polyglot": ["node-polyglot@2.6.0", "", { "dependencies": { "hasown": "^2.0.2", "object.entries": "^1.1.8", "warning": "^4.0.3" } }, "sha512-ZZFkaYzIfGfBvSM6QhA9dM8EEaUJOVewzGSRcXWbJELXDj0lajAtKaENCYxvF5yE+TgHg6NQb0CmgYMsMdcNJQ=="], - "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], "node-schedule": ["node-schedule@2.1.1", "", { "dependencies": { "cron-parser": "^4.2.0", "long-timeout": "0.1.1", "sorted-array-functions": "^1.3.0" } }, "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ=="], @@ -1991,14 +1867,8 @@ "nx": ["nx@22.7.5", "", { "dependencies": { "@emnapi/core": "1.4.5", "@emnapi/runtime": "1.4.5", "@emnapi/wasi-threads": "1.0.4", "@jest/diff-sequences": "30.0.1", "@napi-rs/wasm-runtime": "0.2.4", "@tybys/wasm-util": "0.9.0", "@yarnpkg/lockfile": "1.1.0", "@zkochan/js-yaml": "0.0.7", "ansi-colors": "4.1.3", "ansi-regex": "5.0.1", "ansi-styles": "4.3.0", "argparse": "2.0.1", "asynckit": "0.4.0", "axios": "1.16.0", "balanced-match": "4.0.3", "base64-js": "1.5.1", "bl": "4.1.0", "brace-expansion": "5.0.6", "buffer": "5.7.1", "call-bind-apply-helpers": "1.0.2", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "8.0.1", "clone": "1.0.4", "color-convert": "2.0.1", "color-name": "1.1.4", "combined-stream": "1.0.8", "defaults": "1.0.4", "define-lazy-prop": "2.0.0", "delayed-stream": "1.0.0", "dotenv": "16.4.7", "dotenv-expand": "12.0.3", "dunder-proto": "1.0.1", "ejs": "5.0.1", "emoji-regex": "8.0.0", "end-of-stream": "1.4.5", "enquirer": "2.3.6", "es-define-property": "1.0.1", "es-errors": "1.3.0", "es-object-atoms": "1.1.1", "es-set-tostringtag": "2.1.0", "escalade": "3.2.0", "escape-string-regexp": "1.0.5", "figures": "3.2.0", "flat": "5.0.2", "follow-redirects": "1.16.0", "form-data": "4.0.5", "fs-constants": "1.0.0", "function-bind": "1.1.2", "get-caller-file": "2.0.5", "get-intrinsic": "1.3.0", "get-proto": "1.0.1", "gopd": "1.2.0", "has-flag": "4.0.0", "has-symbols": "1.1.0", "has-tostringtag": "1.0.2", "hasown": "2.0.2", "ieee754": "1.2.1", "ignore": "7.0.5", "inherits": "2.0.4", "is-docker": "2.2.1", "is-fullwidth-code-point": "3.0.0", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "is-wsl": "2.2.0", "json5": "2.2.3", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "log-symbols": "4.1.0", "math-intrinsics": "1.1.0", "mime-db": "1.52.0", "mime-types": "2.1.35", "mimic-fn": "2.1.0", "minimatch": "10.2.5", "minimist": "1.2.8", "npm-run-path": "4.0.1", "once": "1.4.0", "onetime": "5.1.2", "open": "8.4.2", "ora": "5.3.0", "path-key": "3.1.1", "picocolors": "1.1.1", "proxy-from-env": "2.1.0", "readable-stream": "3.6.2", "require-directory": "2.1.1", "resolve.exports": "2.0.3", "restore-cursor": "3.1.0", "safe-buffer": "5.2.1", "semver": "7.7.4", "signal-exit": "3.0.7", "smol-toml": "1.6.1", "string-width": "4.2.3", "string_decoder": "1.3.0", "strip-ansi": "6.0.1", "strip-bom": "3.0.0", "supports-color": "7.2.0", "tar-stream": "2.2.0", "tmp": "0.2.6", "tree-kill": "1.2.2", "tsconfig-paths": "4.2.0", "tslib": "2.8.1", "util-deprecate": "1.0.2", "wcwidth": "1.0.1", "wrap-ansi": "7.0.0", "wrappy": "1.0.2", "y18n": "5.0.8", "yaml": "2.9.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.7.5", "@nx/nx-darwin-x64": "22.7.5", "@nx/nx-freebsd-x64": "22.7.5", "@nx/nx-linux-arm-gnueabihf": "22.7.5", "@nx/nx-linux-arm64-gnu": "22.7.5", "@nx/nx-linux-arm64-musl": "22.7.5", "@nx/nx-linux-x64-gnu": "22.7.5", "@nx/nx-linux-x64-musl": "22.7.5", "@nx/nx-win32-arm64-msvc": "22.7.5", "@nx/nx-win32-x64-msvc": "22.7.5" }, "peerDependencies": { "@swc-node/register": "^1.11.1", "@swc/core": "^1.15.8" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "./dist/bin/nx.js", "nx-cloud": "./dist/bin/nx-cloud.js" } }, "sha512-zoxsJabb33jl1QYnalDn0bicryrEBgSzdKp90d7VGGv/jDgzKrcLg/hw2ZxeYiOjWPIT/o8QNT9G9vTs4dv3AQ=="], - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -2093,8 +1963,6 @@ "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], @@ -2105,17 +1973,9 @@ "qs": ["qs@6.15.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw=="], - "query-string": ["query-string@9.4.0", "", { "dependencies": { "decode-uri-component": "^0.4.1", "filter-obj": "^5.1.0", "split-on-first": "^3.0.0" } }, "sha512-ivvWyHqU9K1Log4hJFhqVIIMoEi0nzmlRhvk2pPcTuQH/Y0K5iTTMxEx7R0PRHD2Z1hMVbWnjfsEWbIKIK+3IA=="], - "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - "ra-core": ["ra-core@5.14.7", "", { "dependencies": { "date-fns": "^3.6.0", "eventemitter3": "^5.0.1", "inflection": "^3.0.0", "jsonexport": "^3.2.0", "lodash": "^4.17.21", "query-string": "^7.1.3", "react-error-boundary": "^4.0.13", "react-is": "^18.2.0 || ^19.0.0" }, "peerDependencies": { "@tanstack/react-query": "^5.83.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "react-hook-form": "^7.72.0", "react-router": "^6.28.1 || ^7.1.1", "react-router-dom": "^6.28.1 || ^7.1.1" } }, "sha512-daHOUEY9nEpBEHBzo1l4kDQ+/dqmYYsUKxWJyeFC2Vd7yh4w48MOBvGJ3nGFYgdLVICDuSl/VUr3kwHWkyfubA=="], - - "ra-i18n-polyglot": ["ra-i18n-polyglot@5.14.7", "", { "dependencies": { "node-polyglot": "^2.2.2", "ra-core": "^5.14.7" } }, "sha512-gZCVOnnch09p5e2vNIPlWtMIMWek+Qpdhg3nucvN1EXRzKRpRE6xUndeXRK/mJ/+d9LGq99sN0UUsqvGCPHtNQ=="], - - "ra-language-english": ["ra-language-english@5.14.7", "", { "dependencies": { "ra-core": "^5.14.7" } }, "sha512-pW4ZNXFLWzcDtDxpgn6J/ms+8mSeJEyjvO+uGANgGDcHc8NgruhaaDtObgPFDcyM2k6FdIYEITm1x2ZijSpsCw=="], - - "radix-ui": ["radix-ui@1.4.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-accessible-icon": "1.1.7", "@radix-ui/react-accordion": "1.2.12", "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-aspect-ratio": "1.1.7", "@radix-ui/react-avatar": "1.1.10", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-context-menu": "2.2.16", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-dropdown-menu": "2.1.16", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-form": "0.1.8", "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.7", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-menubar": "1.1.16", "@radix-ui/react-navigation-menu": "1.2.14", "@radix-ui/react-one-time-password-field": "0.1.8", "@radix-ui/react-password-toggle-field": "0.1.3", "@radix-ui/react-popover": "1.1.15", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-progress": "1.1.7", "@radix-ui/react-radio-group": "1.3.8", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-slider": "1.3.6", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-toggle-group": "1.1.11", "@radix-ui/react-toolbar": "1.1.11", "@radix-ui/react-tooltip": "1.2.8", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-escape-keydown": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA=="], + "radix-ui": ["radix-ui@1.6.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-accessible-icon": "1.1.15", "@radix-ui/react-accordion": "1.2.20", "@radix-ui/react-alert-dialog": "1.1.23", "@radix-ui/react-arrow": "1.1.15", "@radix-ui/react-aspect-ratio": "1.1.15", "@radix-ui/react-avatar": "1.2.6", "@radix-ui/react-checkbox": "1.3.11", "@radix-ui/react-collapsible": "1.1.20", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-context-menu": "2.3.7", "@radix-ui/react-dialog": "1.1.23", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-dropdown-menu": "2.1.24", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-form": "0.1.16", "@radix-ui/react-hover-card": "1.1.23", "@radix-ui/react-label": "2.1.15", "@radix-ui/react-menu": "2.1.24", "@radix-ui/react-menubar": "1.1.24", "@radix-ui/react-navigation-menu": "1.2.22", "@radix-ui/react-one-time-password-field": "0.1.16", "@radix-ui/react-password-toggle-field": "0.1.11", "@radix-ui/react-popover": "1.1.23", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-progress": "1.1.16", "@radix-ui/react-radio-group": "1.4.7", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-scroll-area": "1.2.18", "@radix-ui/react-select": "2.3.7", "@radix-ui/react-separator": "1.1.15", "@radix-ui/react-slider": "1.4.7", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-switch": "1.3.7", "@radix-ui/react-tabs": "1.1.21", "@radix-ui/react-toast": "1.2.23", "@radix-ui/react-toggle": "1.1.18", "@radix-ui/react-toggle-group": "1.1.19", "@radix-ui/react-toolbar": "1.1.19", "@radix-ui/react-tooltip": "1.2.16", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-escape-keydown": "1.1.5", "@radix-ui/react-use-is-hydrated": "0.1.3", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-size": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-QBdhh1arIEUvPC0dQ5+nwWAxt7+N+oP/9jPwjJkGFoSk/sqxg32gJtSXGtFh8frAIcS6oC9cx2Q+7KYCQLOAeA=="], "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], @@ -2125,42 +1985,22 @@ "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="], - "react-dropzone": ["react-dropzone@15.0.0", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-lGjYV/EoqEjEWPnmiSvH4v5IoIAwQM2W4Z1C0Q/Pw2xD0eVzKPS359BQTUMum+1fa0kH2nrKjuavmTPOGhpLPg=="], - - "react-error-boundary": ["react-error-boundary@6.1.2", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-3DpCr5HVdZ0caUjYE/kIHBEJN0mNP3ZCgf16c48uJ5TbWjorKVp+YG8W3XqlJ7vJAVNw6wNIImyPXmFydwmyng=="], - - "react-hook-form": ["react-hook-form@7.77.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-Sslh9YDYc0GDlWT/lxasnIduNo4v3yyvqRGvmGKUre5AFjDs/HV9/OafHGD8d+sB2yoL4UIL9L8X9i0WlZZebg=="], - - "react-is": ["react-is@19.2.7", "", {}, "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A=="], - "react-is-18": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], "react-is-19": ["react-is@19.2.7", "", {}, "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A=="], - "react-property": ["react-property@2.0.2", "", {}, "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug=="], - - "react-redux": ["react-redux@9.3.0", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "@types/react": "^18.2.25 || ^19", "react": "^18.0 || ^19", "redux": "^5.0.0" }, "optionalPeers": ["@types/react", "redux"] }, "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g=="], - "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], "react-router": ["react-router@8.3.0", "", { "dependencies": { "cookie-es": "^3.1.1" }, "peerDependencies": { "react": ">=19.2.7", "react-dom": ">=19.2.7" }, "optionalPeers": ["react-dom"] }, "sha512-qyPMvW83jGIct3yiieisxdk9M745anqhpIMKN5m1t6yBMfgVPpt77aHOqs5fUlEJRMCGffg9BaQLH9oPVOL7xQ=="], - "react-router-dom": ["react-router-dom@7.16.0", "", { "dependencies": { "react-router": "7.16.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-kMUAbimWB5FVbF4Bce4bJsiKJWLIUHq/mEG8+CFDnCSgltptBiG5nguducmsJeGKytlCvQud9Qhzpn49iduTlA=="], - "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], "react-toastify": ["react-toastify@11.1.0", "", { "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-e9h23x3phN0wbFeB6yovmWp7lobzV4CaCH0LO8nVP6H7Y+3GbcLpIzMm9dJhcp1RXbpyfvjgpfXqO80QAmn7sg=="], "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "recharts": ["recharts@3.8.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg=="], - - "redux": ["redux@5.0.1", "", {}, "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="], - - "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="], - "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], @@ -2177,8 +2017,6 @@ "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], - "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], - "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], @@ -2227,8 +2065,6 @@ "set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="], - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -2253,8 +2089,6 @@ "snake-case": ["snake-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg=="], - "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], - "sort-keys": ["sort-keys@1.1.2", "", { "dependencies": { "is-plain-obj": "^1.0.0" } }, "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg=="], "sort-keys-length": ["sort-keys-length@1.0.1", "", { "dependencies": { "sort-keys": "^1.0.0" } }, "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw=="], @@ -2267,8 +2101,6 @@ "source-map-support": ["source-map-support@0.5.19", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="], - "split-on-first": ["split-on-first@3.0.0", "", {}, "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA=="], - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], @@ -2283,8 +2115,6 @@ "strict-event-emitter": ["strict-event-emitter@0.5.1", "", {}, "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ=="], - "strict-uri-encode": ["strict-uri-encode@2.0.0", "", {}, "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="], - "string-hash": ["string-hash@1.1.3", "", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], "string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], @@ -2309,10 +2139,6 @@ "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], - "style-to-js": ["style-to-js@2.0.0", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-amkl/SwHF/Gb430+eOiN+XToZ6VsD2nota1kCXps4k1xagZOniEVNm8zKYm7RrGm2Q6d6hjnZdqebFIunoSJng=="], - - "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], - "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], @@ -2351,8 +2177,6 @@ "time-span": ["time-span@5.1.0", "", { "dependencies": { "convert-hrtime": "^5.0.0" } }, "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA=="], - "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], @@ -2437,8 +2261,6 @@ "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], @@ -2447,18 +2269,12 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], - - "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], - "vite": ["vite@8.0.16", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw=="], "vitest": ["vitest@4.1.8", "", { "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", "@vitest/pretty-format": "4.1.8", "@vitest/runner": "4.1.8", "@vitest/snapshot": "4.1.8", "@vitest/spy": "4.1.8", "@vitest/utils": "4.1.8", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.8", "@vitest/browser-preview": "4.1.8", "@vitest/browser-webdriverio": "4.1.8", "@vitest/coverage-istanbul": "4.1.8", "@vitest/coverage-v8": "4.1.8", "@vitest/ui": "4.1.8", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig=="], "walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], - "warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="], - "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], @@ -2551,88 +2367,6 @@ "@nx/eslint/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@radix-ui/react-accordion/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-alert-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-arrow/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-aspect-ratio/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-avatar/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-checkbox/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-collapsible/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-collection/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-context-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-dropdown-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-focus-scope/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-form/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-hover-card/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-label/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-menubar/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-one-time-password-field/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-password-toggle-field/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-popover/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-popper/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-portal/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], - - "@radix-ui/react-progress/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-radio-group/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-scroll-area/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-select/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-separator/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-slider/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-switch/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-tabs/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-toast/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-toggle/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-toggle-group/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-toolbar/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-tooltip/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@reduxjs/toolkit/immer": ["immer@11.1.8", "", {}, "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA=="], - "@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -2647,8 +2381,6 @@ "@svgr/core/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - "@svgr/hast-util-to-babel-ast/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "@svgr/plugin-svgo/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], "@swc/cli/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], @@ -2693,10 +2425,6 @@ "cosmiconfig/yaml": ["yaml@1.10.3", "", {}, "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="], - "css-select/domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - - "css-select/domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -2737,8 +2465,6 @@ "got/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - "http-proxy/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], - "is-core-module/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], "jest-diff/@jest/diff-sequences": ["@jest/diff-sequences@30.4.0", "", {}, "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g=="], @@ -2763,18 +2489,6 @@ "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], - "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - - "ra-core/date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], - - "ra-core/query-string": ["query-string@7.1.3", "", { "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg=="], - - "ra-core/react-error-boundary": ["react-error-boundary@4.1.2", "", { "dependencies": { "@babel/runtime": "^7.12.5" }, "peerDependencies": { "react": ">=16.13.1" } }, "sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag=="], - - "radix-ui/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "react-router-dom/react-router": ["react-router@7.16.0", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-wArC8lVyJb3+jM9OpDyW6hLCizACWkvQR/sSGqSs+o5uEXEtGlqdZ4v8hENR3Jad6i+LRkK93q/+bQAcvl6V1A=="], - "rollup-plugin-typescript2/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], @@ -2865,12 +2579,6 @@ "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "css-select/domhandler/domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - - "css-select/domutils/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - - "css-select/domutils/domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -2893,14 +2601,6 @@ "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "ra-core/query-string/decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], - - "ra-core/query-string/filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], - - "ra-core/query-string/split-on-first": ["split-on-first@1.1.0", "", {}, "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="], - - "react-router-dom/react-router/set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], - "rollup-plugin-typescript2/@rollup/pluginutils/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -2933,8 +2633,6 @@ "binary-version/execa/onetime/mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], - "css-select/domutils/dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="],