@squadbase/vantage 0.5.3-dev.71d2349 → 0.6.0-dev.3cc6138
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +73 -0
- package/README.md +3 -3
- package/dist/add-S62E5MSP.js +6 -0
- package/dist/add-S62E5MSP.js.map +1 -0
- package/dist/{build-756WIEVI.js → build-XXKKX6KB.js} +10 -10
- package/dist/{build-756WIEVI.js.map → build-XXKKX6KB.js.map} +1 -1
- package/dist/{check-KZ5PHCA6.js → check-X2TDOILH.js} +8 -8
- package/dist/{check-KZ5PHCA6.js.map → check-X2TDOILH.js.map} +1 -1
- package/dist/{chunk-L3TW4FNA.js → chunk-46PPUW6Y.js} +34 -13
- package/dist/chunk-46PPUW6Y.js.map +1 -0
- package/dist/chunk-5ZOP4SQR.js +47 -0
- package/dist/chunk-5ZOP4SQR.js.map +1 -0
- package/dist/{chunk-BAM33YZ6.js → chunk-B45WAO5Q.js} +6 -5
- package/dist/chunk-B45WAO5Q.js.map +1 -0
- package/dist/{chunk-HQDEYCDP.js → chunk-CIJWVFJD.js} +3 -3
- package/dist/{chunk-HQDEYCDP.js.map → chunk-CIJWVFJD.js.map} +1 -1
- package/dist/chunk-FVWU275X.js +91 -0
- package/dist/chunk-FVWU275X.js.map +1 -0
- package/dist/{chunk-VXAV2435.js → chunk-KLEIVDUV.js} +30 -7
- package/dist/chunk-KLEIVDUV.js.map +1 -0
- package/dist/{chunk-RA6Z3OX3.js → chunk-LCN36MYX.js} +61 -9
- package/dist/chunk-LCN36MYX.js.map +1 -0
- package/dist/{chunk-JC6MT5UU.js → chunk-MXI3PZFT.js} +3 -3
- package/dist/{chunk-JC6MT5UU.js.map → chunk-MXI3PZFT.js.map} +1 -1
- package/dist/chunk-PLST5Q7T.js +2221 -0
- package/dist/chunk-PLST5Q7T.js.map +1 -0
- package/dist/chunk-PVTHHV7X.js +105 -0
- package/dist/chunk-PVTHHV7X.js.map +1 -0
- package/dist/{chunk-EHPJXDJU.js → chunk-SVNOWE5U.js} +4 -2
- package/dist/chunk-SVNOWE5U.js.map +1 -0
- package/dist/{chunk-C4MQRWXS.js → chunk-TDUIW7LD.js} +17 -3
- package/dist/chunk-TDUIW7LD.js.map +1 -0
- package/dist/{chunk-X44ZTKID.js → chunk-V2FV5OJ6.js} +61 -9
- package/dist/chunk-V2FV5OJ6.js.map +1 -0
- package/dist/{chunk-PSEYFYAP.js → chunk-VVOXG6ZU.js} +68 -8
- package/dist/chunk-VVOXG6ZU.js.map +1 -0
- package/dist/{chunk-D4Y5RWJA.js → chunk-YE4CPCXX.js} +81 -21
- package/dist/chunk-YE4CPCXX.js.map +1 -0
- package/dist/cli.js +15 -14
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +5 -35
- package/dist/client/index.js +1 -1
- package/dist/components/index.js +3 -2212
- package/dist/components/index.js.map +1 -1
- package/dist/{dev-EILX2VTF.js → dev-4MQQDHA4.js} +10 -10
- package/dist/{dev-EILX2VTF.js.map → dev-4MQQDHA4.js.map} +1 -1
- package/dist/{docs-GP2ZHIQF.js → docs-OTFWTCPW.js} +4 -4
- package/dist/{docs-GP2ZHIQF.js.map → docs-OTFWTCPW.js.map} +1 -1
- package/dist/{doctor-FXZLMGC3.js → doctor-QXA6DURZ.js} +8 -8
- package/dist/{doctor-FXZLMGC3.js.map → doctor-QXA6DURZ.js.map} +1 -1
- package/dist/manifest-ttGMFi-Z.d.ts +43 -0
- package/dist/{preview-WBQPCTTT.js → preview-HVOM27FS.js} +4 -4
- package/dist/{preview-WBQPCTTT.js.map → preview-HVOM27FS.js.map} +1 -1
- package/dist/query/index.js +1 -102
- package/dist/query/index.js.map +1 -1
- package/dist/router/index.d.ts +10 -0
- package/dist/router/index.js +2 -89
- package/dist/router/index.js.map +1 -1
- package/dist/{routes-WCN4KSZY.js → routes-2QRAKMGK.js} +17 -8
- package/dist/routes-2QRAKMGK.js.map +1 -0
- package/dist/{search-GLKCJXSI.js → search-7A43AZ7M.js} +4 -4
- package/dist/{search-GLKCJXSI.js.map → search-7A43AZ7M.js.map} +1 -1
- package/dist/server/node.d.ts +1 -1
- package/dist/server/node.js +6 -1
- package/dist/server/node.js.map +1 -1
- package/dist/slide/index.d.ts +230 -0
- package/dist/slide/index.js +1571 -0
- package/dist/slide/index.js.map +1 -0
- package/dist/table/index.d.ts +107 -0
- package/dist/table/index.js +680 -0
- package/dist/table/index.js.map +1 -0
- package/dist/types-DQjLpLCs.d.ts +121 -0
- package/dist/ui/index.js +3 -41
- package/dist/ui/index.js.map +1 -1
- package/dist/{upgrade-S64IXL42.js → upgrade-2QCP7UQQ.js} +9 -9
- package/dist/upgrade-2QCP7UQQ.js.map +1 -0
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.js +5 -5
- package/docs/en/agent-skills.md +19 -12
- package/docs/en/changelog.md +77 -0
- package/docs/en/cli-reference.md +8 -4
- package/docs/en/pages-and-metadata.md +17 -0
- package/docs/en/routing.md +75 -3
- package/docs/en/ui-and-theming.md +76 -0
- package/docs/index.json +2 -2
- package/docs/ja/agent-skills.md +18 -11
- package/docs/ja/changelog.md +75 -0
- package/docs/ja/cli-reference.md +8 -4
- package/docs/ja/pages-and-metadata.md +17 -0
- package/docs/ja/routing.md +71 -3
- package/docs/ja/ui-and-theming.md +74 -0
- package/package.json +17 -3
- package/skills/vantage-app/SKILL.md +4 -0
- package/skills/vantage-pitfalls/SKILL.md +41 -1
- package/skills/vantage-slide/SKILL.md +264 -0
- package/skills/vantage-slide/references/morph.md +102 -0
- package/skills/vantage-slide/references/steps.md +57 -0
- package/skills/vantage-slide/references/tokens.md +87 -0
- package/skills/vantage-slide/references/transitions.md +196 -0
- package/templates/AGENTS.md +28 -230
- package/templates/agents/api.md +49 -0
- package/templates/agents/csv.md +32 -0
- package/templates/agents/page.md +185 -0
- package/templates/agents/slide.md +34 -0
- package/templates/agents/xlsx.md +33 -0
- package/theme.css +28 -0
- package/dist/add-PPCBMWEN.js +0 -6
- package/dist/add-PPCBMWEN.js.map +0 -1
- package/dist/chunk-BAM33YZ6.js.map +0 -1
- package/dist/chunk-C4MQRWXS.js.map +0 -1
- package/dist/chunk-D4Y5RWJA.js.map +0 -1
- package/dist/chunk-EHPJXDJU.js.map +0 -1
- package/dist/chunk-L3TW4FNA.js.map +0 -1
- package/dist/chunk-PSEYFYAP.js.map +0 -1
- package/dist/chunk-RA6Z3OX3.js.map +0 -1
- package/dist/chunk-VXAV2435.js.map +0 -1
- package/dist/chunk-X44ZTKID.js.map +0 -1
- package/dist/routes-WCN4KSZY.js.map +0 -1
- package/dist/types-De3mo_hv.d.ts +0 -59
- package/dist/upgrade-S64IXL42.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/table/infer.ts","../../src/table/parse.ts","../../src/table/sheet-grid.tsx","../../src/table/table-viewer.tsx","../../src/table/file-page-view.tsx"],"names":["useState","useLayoutEffect","useRef","jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Turning raw rows into a readable table: which row is the header, what each\n * column holds, and how a cell should read. Deliberately shallow — the goal is\n * \"legible as a spreadsheet\", not a reimplementation of one. Formulas, charts\n * and cell formatting are dropped; their values are what survive.\n */\nimport { FILE_PAGE_MAX_ROWS } from \"../core/constants\"\nimport type { CellFormat, TableColumn, TableSheet } from \"./types\"\n\n/** Rows sampled when deciding a column's format. */\nconst TYPE_SAMPLE_ROWS = 500\n\n/** Share of non-empty sampled values that must agree before a type is claimed. */\nconst TYPE_CONFIDENCE = 0.9\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === \"\"\n}\n\n/**\n * `YYYY-MM-DD`, optionally with a time. XLSX hands back real `Date`s, but CSV\n * carries dates as text — recognising the ISO shape is what lets a date column\n * from a CSV align (and sort) like one. The string itself is left alone; only\n * the alignment follows from this.\n */\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?)?$/\n\nfunction classify(value: unknown): CellFormat {\n if (value instanceof Date) return \"date\"\n if (typeof value === \"number\" && Number.isFinite(value)) return \"number\"\n if (typeof value === \"string\" && ISO_DATE.test(value)) return \"date\"\n return \"text\"\n}\n\n/**\n * Header labels are kept exactly as the file wrote them — blank stays blank,\n * and two columns titled \"Amount\" stay two columns titled \"Amount\". The viewer\n * draws this row as the file's row 1, so anything invented here (`Column 3`,\n * `Amount (2)`) would be text the reader cannot find in their own file.\n * Uniqueness lives in `key`, which is positional.\n */\nfunction toColumns(header: unknown[], width: number, body: unknown[][]): TableColumn[] {\n const columns: TableColumn[] = []\n\n for (let index = 0; index < width; index++) {\n const raw = header[index]\n const label = isEmpty(raw) ? \"\" : String(raw).trim()\n\n let numbers = 0\n let dates = 0\n let filled = 0\n for (let row = 0; row < Math.min(body.length, TYPE_SAMPLE_ROWS); row++) {\n const cell = body[row]?.[index]\n if (isEmpty(cell)) continue\n filled++\n const kind = classify(cell)\n if (kind === \"number\") numbers++\n else if (kind === \"date\") dates++\n }\n let format: CellFormat = \"text\"\n if (filled > 0) {\n if (numbers / filled >= TYPE_CONFIDENCE) format = \"number\"\n else if (dates / filled >= TYPE_CONFIDENCE) format = \"date\"\n }\n\n // The key is positional rather than derived from the label: two columns\n // titled \"Amount\" must stay distinguishable, and a label can be any text.\n // Nothing in the viewer reads it — it is there for callers rendering their\n // own table from `toSheet`.\n columns.push({ key: `c${index}`, label, format })\n }\n return columns\n}\n\n/**\n * Build a sheet from raw rows. The first row is the header — the near-universal\n * spreadsheet convention, and guessing otherwise (scoring rows for\n * \"headerness\") misfires on data that happens to start with text.\n */\nexport function toSheet(name: string, rows: unknown[][]): TableSheet {\n if (rows.length === 0) {\n return { name, columns: [], rows: [], totalRows: 0, truncated: false }\n }\n const header = rows[0] ?? []\n const body = rows.slice(1)\n const width = rows.reduce((max, row) => Math.max(max, row.length), 0)\n const truncated = body.length > FILE_PAGE_MAX_ROWS\n const kept = truncated ? body.slice(0, FILE_PAGE_MAX_ROWS) : body\n return {\n name,\n columns: toColumns(header, width, kept),\n // Pad short rows so every row has a value at every column index; ragged\n // rows are common in hand-edited CSV and would otherwise read as holes.\n rows: kept.map((row) => Array.from({ length: width }, (_, i) => row[i] ?? null)),\n totalRows: body.length,\n truncated,\n }\n}\n\nconst numberFormat = new Intl.NumberFormat()\n\n/**\n * Cell text. The raw value stays in the row so sorting compares numbers as\n * numbers and dates as dates; only the display passes through here.\n */\nexport function formatCell(value: unknown, format: CellFormat): string {\n if (isEmpty(value)) return \"\"\n // A date that arrived as text is shown exactly as the file wrote it: the\n // point of the viewer is to read the file, not to restate it.\n if (format === \"date\" && typeof value === \"string\") return value\n if (format === \"date\" && value instanceof Date) return value.toLocaleDateString()\n if (format === \"number\" && typeof value === \"number\") return numberFormat.format(value)\n if (value instanceof Date) return value.toLocaleString()\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\"\n return String(value)\n}\n","/**\n * Reading a data file in the browser. Both parsers are loaded through\n * `await import()` so an app without a data-file page never ships them, and an\n * app with one only pays when such a page is opened.\n *\n * Parsing happens on the client rather than at generate time because Vantage\n * has an SPA mode (no `server/`), so there is no server to parse on — and\n * because it makes dev, `build` and `preview` run the same code over the same\n * bytes, which is what \"the same URL returns the same thing\" rests on.\n */\nimport { FILE_PAGE_MAX_BYTES } from \"../core/constants\"\nimport { toSheet } from \"./infer\"\nimport type { Workbook } from \"./types\"\n\n/** Thrown for every failure a file page can show; the page renders the message. */\nexport class FilePageError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"FilePageError\"\n }\n}\n\nfunction megabytes(bytes: number): string {\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n}\n\n/**\n * Decode CSV bytes. A Japanese spreadsheet exported from Excel is usually\n * CP932, not UTF-8, and decoding it as UTF-8 turns every non-ASCII character\n * into U+FFFD. Rather than ask the user to declare an encoding, decode as\n * UTF-8 and fall back when the result is visibly full of replacement\n * characters — a real UTF-8 file has none.\n */\nfunction decodeCsv(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer)\n const hasBom = bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf\n const body = hasBom ? bytes.subarray(3) : bytes\n const utf8 = new TextDecoder(\"utf-8\").decode(body)\n const replacements = (utf8.match(/�/g) ?? []).length\n if (replacements > 0 && replacements / Math.max(utf8.length, 1) > 0.0005) {\n try {\n return new TextDecoder(\"shift-jis\").decode(body)\n } catch {\n // Some engines ship without the legacy decoder; the UTF-8 read is still\n // the best available answer.\n }\n }\n return utf8\n}\n\nasync function parseCsv(buffer: ArrayBuffer): Promise<Workbook> {\n const { default: Papa } = await import(\"papaparse\")\n const text = decodeCsv(buffer)\n // `header: false` on purpose: lifting the header row is done in `infer.ts`,\n // which puts CSV and XLSX on one code path instead of two.\n const result = Papa.parse<unknown[]>(text, {\n header: false,\n dynamicTyping: true,\n skipEmptyLines: \"greedy\",\n })\n return { sheets: [toSheet(\"Sheet1\", result.data)] }\n}\n\nasync function parseXlsx(buffer: ArrayBuffer): Promise<Workbook> {\n // The browser build specifically: the package has no root export, and the\n // node build reaches for `fs`.\n const { default: readXlsxFile } = await import(\"read-excel-file/browser\")\n const sheets = await readXlsxFile(buffer)\n return {\n sheets: sheets.map((sheet) => toSheet(sheet.sheet, sheet.data as unknown[][])),\n }\n}\n\n/**\n * Fetch and parse the file behind a file page. Every failure — network, size,\n * a corrupt workbook, an extension with no parser — surfaces as a rejected\n * promise so the page can render it in place instead of taking the app down.\n */\nexport async function loadWorkbook(src: string, kind: string): Promise<Workbook> {\n let buffer: ArrayBuffer\n try {\n const response = await fetch(src)\n if (!response.ok) {\n throw new FilePageError(`Could not load the file (HTTP ${response.status}).`)\n }\n buffer = await response.arrayBuffer()\n } catch (err) {\n if (err instanceof FilePageError) throw err\n throw new FilePageError(`Could not load the file: ${(err as Error).message}`)\n }\n\n if (buffer.byteLength > FILE_PAGE_MAX_BYTES) {\n throw new FilePageError(\n `This file is ${megabytes(buffer.byteLength)}, over the ${megabytes(\n FILE_PAGE_MAX_BYTES,\n )} limit for a data-file page. Download it, or serve the data from server/api/ and render it with DataTable.`,\n )\n }\n\n try {\n switch (kind) {\n case \"csv\":\n return await parseCsv(buffer)\n case \"xlsx\":\n return await parseXlsx(buffer)\n default:\n // Reached when an extension is added to FILE_PAGE_EXTENSIONS without a\n // parser here. Naming it beats rendering an empty table.\n throw new FilePageError(`No viewer for \".${kind}\" files.`)\n }\n } catch (err) {\n if (err instanceof FilePageError) throw err\n throw new FilePageError(\n `This file could not be read. It may be corrupt, password-protected, or not really a .${kind} file. (${\n (err as Error).message\n })`,\n )\n }\n}\n","/**\n * The spreadsheet grid. A data file page should read the way the file reads in\n * Excel or Sheets — column letters across the top, row numbers down the side,\n * a ruled canvas of fixed-height rows that runs past the data, and a selected\n * cell. That is why this is a grid and not a styled `DataTable`: the card, the\n * pagination and the sort affordances all say \"web table\", and none of them\n * exist in a spreadsheet.\n *\n * It is a viewer, not an editor. No toolbar, no formula bar, no editing; the\n * only interactions are moving the selection and copying a cell.\n *\n * Rows and columns are windowed. That is not an optimisation to revisit later:\n * a file page is capped at 200,000 rows, and mounting them would be hundreds of\n * thousands of DOM nodes. Fixed row height makes the window arithmetic exact,\n * so no virtualiser dependency is needed — `first = scrollTop / ROW_HEIGHT`.\n */\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n} from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { formatCell } from \"./infer\"\nimport type { CellFormat, TableSheet } from \"./types\"\n\n/** Row height, matching a spreadsheet's default line rather than a web table's. */\nconst ROW_HEIGHT = 22\n/** Height of the A / B / C band. */\nconst HEAD_HEIGHT = 22\nconst MIN_GUTTER_WIDTH = 44\nconst MIN_COL_WIDTH = 56\nconst MAX_COL_WIDTH = 420\n/** Width of the empty columns that carry the ruling past the data. */\nconst FILLER_COL_WIDTH = 100\n/** Horizontal padding plus borders, added to the measured text width. */\nconst COL_PADDING = 18\nconst OVERSCAN_ROWS = 8\nconst OVERSCAN_COLS = 2\n/** Rows sampled when sizing a column. */\nconst WIDTH_SAMPLE_ROWS = 200\n/** Must match the cell font below, or measured widths will not fit the text. */\nconst CELL_FONT = '13px ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif'\n\n/** `0 → A`, `25 → Z`, `26 → AA` — spreadsheet column names. */\nexport function columnLabel(index: number): string {\n let label = \"\"\n for (let n = index; n >= 0; n = Math.floor(n / 26) - 1) {\n label = String.fromCharCode(65 + (n % 26)) + label\n }\n return label\n}\n\n/**\n * Size each column to its content, the way a spreadsheet does on import.\n * Measured with the canvas text metrics of the font the cells use, over a\n * sample spread across the whole sheet — sampling the first N rows only would\n * size a column on its header and miss the long values further down.\n */\nfunction measureWidths(sheet: TableSheet): number[] {\n const context =\n typeof document === \"undefined\" ? null : document.createElement(\"canvas\").getContext(\"2d\")\n if (context) context.font = CELL_FONT\n // Without a canvas (SSR, or a browser that refuses the context) fall back to\n // an average character width: the grid still lays out, just less snugly.\n const widthOf = (text: string) => (context ? context.measureText(text).width : text.length * 7.2)\n const stride = Math.max(1, Math.ceil(sheet.rows.length / WIDTH_SAMPLE_ROWS))\n\n return sheet.columns.map((column, index) => {\n let max = widthOf(column.label)\n for (let row = 0; row < sheet.rows.length; row += stride) {\n const text = formatCell(sheet.rows[row]?.[index], column.format)\n if (text !== \"\") max = Math.max(max, widthOf(text))\n }\n return Math.min(MAX_COL_WIDTH, Math.max(MIN_COL_WIDTH, Math.ceil(max) + COL_PADDING))\n })\n}\n\n/** Running x of each column, so windowing and scrolling are lookups. */\nfunction runningOffsets(widths: number[]): number[] {\n const offsets = [0]\n for (const width of widths) offsets.push(offsets[offsets.length - 1]! + width)\n return offsets\n}\n\n/** Index of the last offset at or before `x`. */\nfunction columnAt(offsets: number[], x: number): number {\n let low = 0\n let high = offsets.length - 2\n while (low < high) {\n const mid = (low + high + 1) >> 1\n if (offsets[mid]! <= x) low = mid\n else high = mid - 1\n }\n return Math.max(0, low)\n}\n\ninterface Selection {\n /** `0` is the header row (the file's row 1); `n` is body row `n - 1`. */\n row: number\n col: number\n}\n\nexport interface SheetGridProps {\n sheet: TableSheet\n className?: string\n}\n\n/**\n * One sheet as a grid. Fills its container, so give the parent a height —\n * `TableViewer` is the component that does that for a page.\n */\nexport function SheetGrid({ sheet, className }: SheetGridProps) {\n const scrollRef = useRef<HTMLDivElement>(null)\n const [scroll, setScroll] = useState({ top: 0, left: 0 })\n const [viewport, setViewport] = useState({ width: 0, height: 0 })\n const [selected, setSelected] = useState<Selection>({ row: 0, col: 0 })\n\n const dataWidths = useMemo(() => measureWidths(sheet), [sheet])\n const dataCols = sheet.columns.length\n const dataRows = sheet.rows.length\n\n // Wide enough for the largest row number: the gutter must not resize as the\n // window scrolls into five-digit rows.\n const gutterWidth = Math.max(MIN_GUTTER_WIDTH, String(dataRows + 1).length * 8 + 16)\n\n // Past the data the canvas keeps going, ruled and empty, as it does in every\n // spreadsheet. Enough of it to cover the viewport — beyond that nobody can\n // tell whether the sheet ends at column F or column XFD.\n const dataWidth = dataWidths.reduce((sum, width) => sum + width, 0)\n const fillerCols = Math.max(\n 0,\n Math.ceil((viewport.width - gutterWidth - dataWidth) / FILLER_COL_WIDTH),\n )\n const fillerRows = Math.max(\n 0,\n Math.ceil((viewport.height - HEAD_HEIGHT - (dataRows + 1) * ROW_HEIGHT) / ROW_HEIGHT),\n )\n const colCount = dataCols + fillerCols\n const rowCount = dataRows + fillerRows\n\n const widths = useMemo(\n () => [...dataWidths, ...Array.from({ length: fillerCols }, () => FILLER_COL_WIDTH)],\n [dataWidths, fillerCols],\n )\n const offsets = useMemo(() => runningOffsets(widths), [widths])\n const totalWidth = offsets[offsets.length - 1] ?? 0\n\n useLayoutEffect(() => {\n const element = scrollRef.current\n if (!element) return\n const measure = () => setViewport({ width: element.clientWidth, height: element.clientHeight })\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(element)\n return () => observer.disconnect()\n }, [])\n\n // Selection is positional, so a new sheet must not keep pointing at a cell\n // that no longer exists.\n useEffect(() => {\n setSelected({ row: 0, col: 0 })\n scrollRef.current?.scrollTo({ top: 0, left: 0 })\n }, [sheet])\n\n // Body rows live below the two frozen bands, so the first visible one falls\n // straight out of scrollTop.\n const firstRow = Math.max(0, Math.floor(scroll.top / ROW_HEIGHT) - OVERSCAN_ROWS)\n const lastRow = Math.min(\n rowCount,\n Math.ceil((scroll.top + viewport.height - HEAD_HEIGHT - ROW_HEIGHT) / ROW_HEIGHT) +\n OVERSCAN_ROWS,\n )\n const firstCol = Math.max(0, columnAt(offsets, scroll.left) - OVERSCAN_COLS)\n const lastCol = Math.min(\n colCount,\n columnAt(offsets, scroll.left + viewport.width) + 1 + OVERSCAN_COLS,\n )\n const leadWidth = offsets[firstCol] ?? 0\n const tailWidth = totalWidth - (offsets[lastCol] ?? totalWidth)\n const visibleCols = Array.from({ length: Math.max(0, lastCol - firstCol) }, (_, i) => firstCol + i)\n\n /** Bring a cell inside the scrollport, allowing for the frozen bands. */\n const reveal = useCallback(\n (next: Selection) => {\n const element = scrollRef.current\n if (!element) return\n if (next.row > 0) {\n const top = HEAD_HEIGHT + ROW_HEIGHT + (next.row - 1) * ROW_HEIGHT\n const frozen = HEAD_HEIGHT + ROW_HEIGHT\n if (top - element.scrollTop < frozen) element.scrollTop = top - frozen\n else if (top + ROW_HEIGHT - element.scrollTop > element.clientHeight) {\n element.scrollTop = top + ROW_HEIGHT - element.clientHeight\n }\n }\n const left = offsets[next.col] ?? 0\n const width = widths[next.col] ?? 0\n if (left - element.scrollLeft < 0) element.scrollLeft = left\n else if (left + width + gutterWidth - element.scrollLeft > element.clientWidth) {\n element.scrollLeft = left + width + gutterWidth - element.clientWidth\n }\n },\n [gutterWidth, offsets, widths],\n )\n\n const cellText = useCallback(\n (row: number, col: number): string => {\n const column = sheet.columns[col]\n if (!column) return \"\"\n if (row === 0) return column.label\n return formatCell(sheet.rows[row - 1]?.[col], column.format)\n },\n [sheet],\n )\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n // The selection stays on the data. The empty canvas past it is ruling,\n // not cells anyone needs to land on.\n //\n // `escapable` is what keeps this from being a keyboard trap: the grid is\n // focusable, so if Tab were always swallowed there would be no way out of\n // it. Tab that cannot move the selection any further is left to the\n // browser, which moves focus on to the sheet tabs.\n const step = (rows: number, cols: number, escapable = false) => {\n const next = {\n row: Math.min(dataRows, Math.max(0, selected.row + rows)),\n col: Math.min(dataCols - 1, Math.max(0, selected.col + cols)),\n }\n const moved = next.row !== selected.row || next.col !== selected.col\n if (moved || !escapable) event.preventDefault()\n if (!moved) return\n setSelected(next)\n reveal(next)\n }\n const page = Math.max(1, Math.floor(viewport.height / ROW_HEIGHT) - 1)\n\n switch (event.key) {\n case \"ArrowDown\":\n return step(1, 0)\n case \"ArrowUp\":\n return step(-1, 0)\n case \"Tab\":\n return step(0, event.shiftKey ? -1 : 1, true)\n case \"ArrowRight\":\n return step(0, 1)\n case \"ArrowLeft\":\n return step(0, -1)\n case \"PageDown\":\n return step(page, 0)\n case \"PageUp\":\n return step(-page, 0)\n case \"Home\":\n return step(event.ctrlKey || event.metaKey ? -dataRows : 0, -dataCols)\n case \"End\":\n return step(event.ctrlKey || event.metaKey ? dataRows : 0, dataCols)\n case \"c\":\n case \"C\":\n // The one thing a reader wants out of a viewer: the value, in full,\n // even when the column is too narrow to show it.\n if (event.metaKey || event.ctrlKey) {\n // A refused or unavailable clipboard is not worth an unhandled\n // rejection in the app's error reporting.\n navigator.clipboard?.writeText(cellText(selected.row, selected.col)).catch(() => {})\n }\n return\n default:\n return\n }\n },\n [cellText, dataCols, dataRows, reveal, selected, viewport.height],\n )\n\n if (dataCols === 0) {\n return <p className={cn(\"p-4 text-sm text-muted-foreground\", className)}>This sheet is empty.</p>\n }\n\n const select = (row: number, col: number) => {\n setSelected({ row, col })\n scrollRef.current?.focus({ preventScroll: true })\n }\n\n const rowStyle: CSSProperties = { height: ROW_HEIGHT, width: gutterWidth + totalWidth }\n\n return (\n <div\n ref={scrollRef}\n role=\"grid\"\n aria-label={sheet.name}\n aria-rowcount={dataRows + 1}\n aria-colcount={dataCols}\n tabIndex={0}\n onScroll={(event) =>\n setScroll({ top: event.currentTarget.scrollTop, left: event.currentTarget.scrollLeft })\n }\n onKeyDown={onKeyDown}\n className={cn(\n \"relative h-full overflow-auto bg-background text-[13px] outline-none select-none [overscroll-behavior:contain]\",\n className,\n )}\n >\n <div role=\"rowgroup\" style={{ width: gutterWidth + totalWidth }}>\n {/* A / B / C. Sticky on both axes, so the corner stays put. */}\n <div\n className=\"sticky top-0 z-40 flex\"\n style={{ ...rowStyle, height: HEAD_HEIGHT }}\n role=\"row\"\n >\n <div\n className=\"sticky left-0 z-10 shrink-0 border-r border-b border-border bg-muted\"\n style={{ width: gutterWidth, height: HEAD_HEIGHT }}\n />\n <div className=\"shrink-0 border-b border-border bg-muted\" style={{ width: leadWidth }} />\n {visibleCols.map((col) => (\n <div\n key={col}\n role={col < dataCols ? \"columnheader\" : \"presentation\"}\n aria-colindex={col < dataCols ? col + 1 : undefined}\n onMouseDown={col < dataCols ? () => select(selected.row, col) : undefined}\n className={cn(\n \"flex shrink-0 items-center justify-center border-r border-b border-border bg-muted text-[11px] text-muted-foreground\",\n selected.col === col && col < dataCols && \"bg-accent font-medium text-foreground\",\n )}\n style={{ width: widths[col], height: HEAD_HEIGHT }}\n >\n {columnLabel(col)}\n </div>\n ))}\n <div className=\"shrink-0 border-b border-border bg-muted\" style={{ width: tailWidth }} />\n </div>\n\n {/* The file's row 1. Frozen under the letters, because a data file's\n first row is its header and reading row 40,000 without it is\n guesswork — the first thing anyone does to a sheet by hand. */}\n {/* Opaque: body rows scroll underneath this one. */}\n <div\n className=\"sticky z-30 flex bg-background\"\n style={{ ...rowStyle, top: HEAD_HEIGHT }}\n role=\"row\"\n >\n <RowHeader\n label=\"1\"\n width={gutterWidth}\n active={selected.row === 0}\n onSelect={() => select(0, selected.col)}\n />\n <div className=\"shrink-0 border-b border-foreground/25\" style={{ width: leadWidth }} />\n {visibleCols.map((col) => (\n <Cell\n key={col}\n width={widths[col]!}\n // A header label is text, and a spreadsheet aligns a cell by what\n // is in it — so it reads left even over a column of numbers.\n format=\"text\"\n text={sheet.columns[col]?.label ?? \"\"}\n header\n selected={selected.row === 0 && selected.col === col}\n onSelect={col < dataCols ? () => select(0, col) : undefined}\n colIndex={col < dataCols ? col : undefined}\n />\n ))}\n <div className=\"shrink-0 border-b border-foreground/25\" style={{ width: tailWidth }} />\n </div>\n\n {/* `presentation` so the rows below stay owned by the rowgroup above. */}\n <div role=\"presentation\" className=\"relative\" style={{ height: rowCount * ROW_HEIGHT }}>\n {Array.from({ length: Math.max(0, lastRow - firstRow) }, (_, offset) => {\n const row = firstRow + offset\n const cells = sheet.rows[row]\n return (\n <div\n key={row}\n role=\"row\"\n aria-rowindex={row < dataRows ? row + 2 : undefined}\n className=\"absolute flex\"\n style={{ ...rowStyle, top: row * ROW_HEIGHT }}\n >\n <RowHeader\n label={String(row + 2)}\n width={gutterWidth}\n active={selected.row === row + 1}\n onSelect={row < dataRows ? () => select(row + 1, selected.col) : undefined}\n />\n <div className=\"shrink-0\" style={{ width: leadWidth }} />\n {visibleCols.map((col) => {\n const column = sheet.columns[col]\n return (\n <Cell\n key={col}\n width={widths[col]!}\n format={column?.format ?? \"text\"}\n text={column ? formatCell(cells?.[col], column.format) : \"\"}\n selected={selected.row === row + 1 && selected.col === col}\n onSelect={\n row < dataRows && col < dataCols ? () => select(row + 1, col) : undefined\n }\n colIndex={col < dataCols ? col : undefined}\n />\n )\n })}\n <div className=\"shrink-0\" style={{ width: tailWidth }} />\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\nSheetGrid.displayName = \"SheetGrid\"\n\nfunction RowHeader({\n label,\n width,\n active,\n onSelect,\n}: {\n label: string\n width: number\n active: boolean\n onSelect?: () => void\n}) {\n return (\n <div\n role={onSelect ? \"rowheader\" : \"presentation\"}\n onMouseDown={onSelect}\n className={cn(\n // Above a selected cell (`z-10`): scrolling a selected column under the\n // gutter must not paint its outline over the row number.\n \"sticky left-0 z-20 flex h-full shrink-0 items-center justify-center border-r border-b border-border bg-muted text-[11px] text-muted-foreground\",\n active && \"bg-accent font-medium text-foreground\",\n )}\n style={{ width }}\n >\n {label}\n </div>\n )\n}\n\nfunction Cell({\n width,\n format,\n text,\n header,\n selected,\n onSelect,\n colIndex,\n}: {\n width: number\n format: CellFormat\n text: string\n header?: boolean\n selected: boolean\n onSelect?: () => void\n colIndex?: number\n}) {\n return (\n <div\n role={onSelect ? \"gridcell\" : \"presentation\"}\n aria-colindex={colIndex === undefined ? undefined : colIndex + 1}\n aria-selected={onSelect ? selected : undefined}\n onMouseDown={onSelect}\n // Columns are sized to their content but capped, so a long value still\n // gets clipped — the title is how the rest of it stays reachable\n // without a formula bar.\n title={text || undefined}\n className={cn(\n \"flex h-full shrink-0 items-center border-r border-b border-border px-1.5\",\n header && \"border-b-foreground/25 font-medium\",\n // Numbers and dates read right-aligned, as they do in a spreadsheet.\n format === \"text\" ? \"justify-start\" : \"justify-end tabular-nums\",\n selected && onSelect && \"relative z-10 outline-2 -outline-offset-2 outline-primary\",\n )}\n style={{ width }}\n >\n <span className=\"truncate\">{text}</span>\n </div>\n )\n}\n","/**\n * One sheet, framed the way a spreadsheet application frames one: the grid\n * fills the window, and a status bar sits under it with the sheet tabs on the\n * left and the shape of the sheet on the right.\n *\n * The frame is what makes the grid usable — a grid needs a definite height to\n * scroll inside, and a Vantage page has no guaranteed one (layouts belong to\n * the app). So it measures the space left below itself in the viewport rather\n * than asking the app to arrange for a height.\n */\nimport { useLayoutEffect, useRef, useState, type RefObject } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { SheetGrid } from \"./sheet-grid\"\nimport type { TableSheet } from \"./types\"\n\n/** Never collapse below this, however little viewport is left. */\nconst MIN_HEIGHT = 320\n/** Breathing room under the frame when the layout leaves none of its own. */\nconst MIN_BOTTOM_GAP = 8\n\nexport interface TableViewerProps {\n /** The sheet to render. */\n sheet: TableSheet\n /** Every sheet's name. Given more than one, a tab strip is rendered. */\n sheetNames?: string[]\n activeSheet?: number\n onSheetChange?: (index: number) => void\n /**\n * Fixed height for the frame. Without it the viewer fills the rest of the\n * viewport, which is right for a file page and wrong for a table embedded in\n * a dashboard among other cards.\n */\n height?: number | string\n className?: string\n}\n\n/**\n * What the layout keeps under the frame: every ancestor's bottom padding,\n * border and margin. It has to come out of the height, or the page ends up\n * scrollable by exactly that much (a page shell nested in a layout shell means\n * two lots of padding). Read from the box model rather than from the document\n * height, which a `min-h-screen` layout pins to the viewport and would make\n * this feed back on its own result.\n */\nfunction spaceBelow(element: HTMLElement): number {\n let total = 0\n for (let node = element.parentElement; node && node !== document.body; node = node.parentElement) {\n const style = getComputedStyle(node)\n total +=\n parseFloat(style.paddingBottom) + parseFloat(style.borderBottomWidth) + parseFloat(style.marginBottom)\n }\n return Number.isFinite(total) ? total : 0\n}\n\n/**\n * Fill the rest of the viewport. Measured rather than expressed in CSS: the\n * frame's distance from the top of the window depends on whatever the app's\n * layout put above it, which no `calc()` here can know.\n */\nfunction useFillHeight(ref: RefObject<HTMLElement | null>, enabled: boolean): number {\n const [height, setHeight] = useState(MIN_HEIGHT)\n\n useLayoutEffect(() => {\n const element = ref.current\n if (!element || !enabled) return\n const measure = () => {\n // Document-relative, not viewport-relative: `rect.top` alone shrinks as\n // the page scrolls, so a measurement taken while scrolled (a mobile URL\n // bar collapsing fires `resize`) would make the frame taller than the\n // viewport and add page scroll that never goes away.\n const rect = element.getBoundingClientRect()\n const top = rect.top + window.scrollY\n const next = Math.max(\n MIN_HEIGHT,\n window.innerHeight - top - Math.max(spaceBelow(element), MIN_BOTTOM_GAP),\n )\n // Only a real change: the frame's own height feeds back into the\n // document height, and rounding noise would loop.\n setHeight((current) => (Math.abs(current - next) > 1 ? next : current))\n }\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(document.body)\n window.addEventListener(\"resize\", measure)\n return () => {\n observer.disconnect()\n window.removeEventListener(\"resize\", measure)\n }\n }, [enabled, ref])\n\n return height\n}\n\nfunction plural(count: number, noun: string): string {\n return `${count.toLocaleString()} ${noun}${count === 1 ? \"\" : \"s\"}`\n}\n\n/** Render one parsed sheet. Exported so an app can drive it with its own data. */\nexport function TableViewer({\n sheet,\n sheetNames,\n activeSheet = 0,\n onSheetChange,\n height,\n className,\n}: TableViewerProps) {\n const frameRef = useRef<HTMLDivElement>(null)\n const filled = useFillHeight(frameRef, height === undefined)\n const tabs = sheetNames && sheetNames.length > 1 ? sheetNames : null\n\n return (\n <div\n ref={frameRef}\n className={cn(\n \"flex flex-col overflow-hidden rounded-md border border-border bg-background\",\n className,\n )}\n style={{ height: height ?? filled }}\n >\n <div className=\"min-h-0 flex-1\">\n <SheetGrid sheet={sheet} />\n </div>\n\n {/* The status bar: sheet tabs and the shape of the sheet, where a\n spreadsheet puts them. */}\n <div className=\"flex items-center gap-4 border-t border-border bg-muted/60 px-2 py-1\">\n {tabs ? (\n <div className=\"flex min-w-0 items-end gap-px overflow-x-auto\" role=\"tablist\">\n {tabs.map((name, index) => (\n <button\n key={name}\n type=\"button\"\n role=\"tab\"\n aria-selected={index === activeSheet}\n onClick={() => onSheetChange?.(index)}\n className={cn(\n \"shrink-0 rounded-t-sm border-t-2 px-3 py-1 text-xs whitespace-nowrap\",\n index === activeSheet\n ? \"border-primary bg-background font-medium text-foreground\"\n : \"border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n {name}\n </button>\n ))}\n </div>\n ) : null}\n\n <div className=\"ml-auto flex shrink-0 items-center gap-3 text-[11px] text-muted-foreground\">\n {sheet.truncated ? (\n <span className=\"font-medium text-foreground\">\n First {sheet.rows.length.toLocaleString()} of {sheet.totalRows.toLocaleString()} rows —\n download the file for the rest\n </span>\n ) : null}\n <span>\n {plural(sheet.totalRows, \"row\")} × {plural(sheet.columns.length, \"column\")}\n </span>\n </div>\n </div>\n </div>\n )\n}\nTableViewer.displayName = \"TableViewer\"\n","/**\n * The page a `.csv` or `.xlsx` under `src/` becomes. Generated wrappers in\n * `.vantage/file-pages/` mount this; apps can mount it themselves to take over\n * the title or to render a file kept out of routing with an `_` prefix.\n */\nimport { useState } from \"react\"\nimport { DownloadIcon } from \"lucide-react\"\nimport {\n PageShell,\n PageShellActions,\n PageShellContent,\n PageShellHeader,\n PageShellHeading,\n PageShellMeta,\n PageShellTitle,\n} from \"../components\"\nimport { useQuery } from \"../query\"\nimport { Button } from \"../ui/button\"\nimport { Loading, ErrorState } from \"../ui/states\"\nimport { loadWorkbook } from \"./parse\"\nimport { TableViewer } from \"./table-viewer\"\n\nexport interface FilePageViewProps {\n /** Extension without the dot, e.g. `\"xlsx\"`. */\n kind: string\n /** URL of the file, produced by Vite's asset pipeline. */\n src: string\n /** Original file name, used for the heading fallback and the download. */\n fileName: string\n /** Title derived from the file name at generate time. */\n title?: string\n}\n\nexport function FilePageView({ kind, src, fileName, title }: FilePageViewProps) {\n const [active, setActive] = useState(0)\n\n // The framework's QueryClient is already above this in the tree, so the\n // parsed workbook is cached across navigations for free and the retry and\n // networkMode policies are the managed ones — no second provider.\n const workbook = useQuery({\n queryKey: [\"vantage:file-page\", src],\n queryFn: () => loadWorkbook(src, kind),\n staleTime: Infinity,\n })\n\n const download = (\n // `nativeButton={false}` because this renders an `<a>`: Base UI needs to\n // know it is not driving a real button, or it warns and keeps button\n // semantics that would fight the link's.\n <Button\n variant=\"outline\"\n size=\"sm\"\n nativeButton={false}\n render={<a href={src} download={fileName} />}\n >\n <DownloadIcon aria-hidden=\"true\" />\n Download\n </Button>\n )\n\n const sheets = workbook.data?.sheets ?? []\n const sheet = sheets[Math.min(active, Math.max(sheets.length - 1, 0))]\n\n return (\n <PageShell>\n {/* A slim band: the grid below wants the vertical room, and a data file\n has no description to carry. */}\n <PageShellHeader className=\"py-6\">\n <PageShellHeading>\n <PageShellTitle>{title ?? fileName}</PageShellTitle>\n <PageShellMeta>{fileName}</PageShellMeta>\n </PageShellHeading>\n <PageShellActions>{download}</PageShellActions>\n </PageShellHeader>\n\n <PageShellContent>\n {workbook.isPending ? <Loading label={`Reading ${fileName}…`} /> : null}\n\n {/* Every failure path lands here, inside the page. A data file the\n browser cannot read must not take the rest of the app down. */}\n {workbook.isError ? (\n <ErrorState\n title={`Could not display ${fileName}`}\n message={(workbook.error as Error).message}\n action={download}\n />\n ) : null}\n\n {sheet ? (\n <TableViewer\n sheet={sheet}\n sheetNames={sheets.map((s) => s.name)}\n activeSheet={active}\n onSheetChange={setActive}\n />\n ) : null}\n </PageShellContent>\n </PageShell>\n )\n}\nFilePageView.displayName = \"FilePageView\"\n"]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-kind suffixes. A page module may carry exactly one of these between its
|
|
3
|
+
* name and its extension — `june.slide.tsx` is "`/june`, rendered as a deck".
|
|
4
|
+
* The suffix never reaches the URL.
|
|
5
|
+
*
|
|
6
|
+
* Deliberately an allowlist rather than the general rule "the last dot-separated
|
|
7
|
+
* token is a suffix": the general rule would silently move an existing
|
|
8
|
+
* `report.v2.tsx` from `/report.v2` to `/report`. Generalize the mechanism,
|
|
9
|
+
* register one entry.
|
|
10
|
+
*/
|
|
11
|
+
declare const PAGE_VARIANTS: readonly ["slide"];
|
|
12
|
+
type PageVariant = (typeof PAGE_VARIANTS)[number];
|
|
13
|
+
/**
|
|
14
|
+
* Data files rendered as a page by a built-in viewer. Adding an entry here is
|
|
15
|
+
* only half the job — `src/table/` has to be able to render it (see the switch
|
|
16
|
+
* in `file-page-view.tsx`), or the page mounts and immediately errors.
|
|
17
|
+
*/
|
|
18
|
+
declare const FILE_PAGE_EXTENSIONS: readonly [".csv", ".xlsx"];
|
|
19
|
+
type FilePageExt = (typeof FILE_PAGE_EXTENSIONS)[number];
|
|
20
|
+
|
|
21
|
+
/** A parsed path segment of a page or API route. */
|
|
22
|
+
type Segment = {
|
|
23
|
+
kind: "static";
|
|
24
|
+
value: string;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "param";
|
|
27
|
+
name: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "catchall";
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
32
|
+
/** What a page route is rendered from. */
|
|
33
|
+
type PageKind = "module" | "file";
|
|
34
|
+
/** A discovered page route. */
|
|
35
|
+
interface PageRoute {
|
|
36
|
+
/** Project-relative POSIX path, e.g. `sales/[customerId].tsx`. */
|
|
37
|
+
file: string;
|
|
38
|
+
/** Absolute filesystem path. */
|
|
39
|
+
absFile: string;
|
|
40
|
+
/** Display route path, e.g. `/sales/:customerId` or `/files/*`. */
|
|
41
|
+
routePath: string;
|
|
42
|
+
/** Parsed segments. */
|
|
43
|
+
segments: Segment[];
|
|
44
|
+
/** Directory (POSIX, relative), e.g. `sales` or "" for root. */
|
|
45
|
+
dir: string;
|
|
46
|
+
/** Whether the file has a dynamic (param/catchall) segment. */
|
|
47
|
+
dynamic: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* `"module"` — a `.tsx`/`.jsx` the app authored; its default export is the
|
|
50
|
+
* component. `"file"` — a data file (`.csv`/`.xlsx`) drawn by the built-in
|
|
51
|
+
* viewer through a generated wrapper module.
|
|
52
|
+
*
|
|
53
|
+
* Required rather than optional-with-a-default: there is exactly one
|
|
54
|
+
* construction site (`scanPages`), so requiring it costs one line there and
|
|
55
|
+
* makes every future one answer the question — while the read sites that
|
|
56
|
+
* legitimately do not care (route conflicts, the nav registry, router
|
|
57
|
+
* assembly) keep compiling untouched. That asymmetry is the whole reason
|
|
58
|
+
* this is a discriminator on `PageRoute` and not a second `filePages` array.
|
|
59
|
+
*/
|
|
60
|
+
kind: PageKind;
|
|
61
|
+
/** `kind: "file"` only: the lowercased extension, e.g. `".csv"`. */
|
|
62
|
+
fileExt?: FilePageExt;
|
|
63
|
+
/**
|
|
64
|
+
* The page-kind suffix the file carried, e.g. `june.slide.tsx` -> `"slide"`.
|
|
65
|
+
* Orthogonal to `kind` (a variant only ever rides on a `"module"`), which is
|
|
66
|
+
* why the two are separate fields rather than one union.
|
|
67
|
+
*/
|
|
68
|
+
variant?: PageVariant;
|
|
69
|
+
}
|
|
70
|
+
/** A discovered layout module. */
|
|
71
|
+
interface LayoutRoute {
|
|
72
|
+
/** Project-relative POSIX path, e.g. `_layout.tsx` or `sales/_layout.tsx`. */
|
|
73
|
+
file: string;
|
|
74
|
+
absFile: string;
|
|
75
|
+
/** Directory the layout applies to (POSIX, relative), "" for root. */
|
|
76
|
+
dir: string;
|
|
77
|
+
}
|
|
78
|
+
/** A discovered server API route. */
|
|
79
|
+
interface ApiRoute {
|
|
80
|
+
/** Project-relative POSIX path, e.g. `server/api/customers/[id].ts`. */
|
|
81
|
+
file: string;
|
|
82
|
+
absFile: string;
|
|
83
|
+
/** Display route path, e.g. `/api/customers/:id`. */
|
|
84
|
+
routePath: string;
|
|
85
|
+
/** Hono-style match pattern, e.g. `/api/customers/:id` or `/api/files/*`. */
|
|
86
|
+
pattern: string;
|
|
87
|
+
segments: Segment[];
|
|
88
|
+
params: string[];
|
|
89
|
+
}
|
|
90
|
+
/** The full route model derived from a project scan. */
|
|
91
|
+
interface RouteModel {
|
|
92
|
+
pages: PageRoute[];
|
|
93
|
+
layouts: LayoutRoute[];
|
|
94
|
+
notFound: string | null;
|
|
95
|
+
error: string | null;
|
|
96
|
+
apis: ApiRoute[];
|
|
97
|
+
hasServer: boolean;
|
|
98
|
+
/** Page-scan root relative to the project root: `"src"` or `""`. */
|
|
99
|
+
pageDir: string;
|
|
100
|
+
/**
|
|
101
|
+
* Files under the page root that look like they were meant to be pages but
|
|
102
|
+
* are not routed. Collected by the same walk that finds pages, so the
|
|
103
|
+
* diagnostics that report them cost no extra I/O. Project-relative POSIX.
|
|
104
|
+
*/
|
|
105
|
+
unrouted: UnroutedFile[];
|
|
106
|
+
}
|
|
107
|
+
/** A file the scan skipped that a diagnostic should speak up about. */
|
|
108
|
+
interface UnroutedFile {
|
|
109
|
+
/** Project-relative POSIX path. */
|
|
110
|
+
file: string;
|
|
111
|
+
/**
|
|
112
|
+
* `"extension"` — a spreadsheet-ish extension with no viewer.
|
|
113
|
+
* `"variant"` — a page-kind suffix in a position that cannot carry one
|
|
114
|
+
* (`_layout.slide.tsx`, `foo.slide.ts`).
|
|
115
|
+
*/
|
|
116
|
+
reason: "extension" | "variant";
|
|
117
|
+
/** For `reason: "variant"`: which suffix was found. */
|
|
118
|
+
variant?: PageVariant;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export type { RouteModel as R, Segment as S };
|
package/dist/ui/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Empty, ErrorState, Loading } from '../chunk-5ZOP4SQR.js';
|
|
2
|
+
export { Badge, Button, Calendar, CalendarDayButton, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, toggleVariants, useIsMobile, useSidebar } from '../chunk-MXI3PZFT.js';
|
|
2
3
|
import { cn } from '../chunk-A2UUGASH.js';
|
|
3
4
|
export { cn } from '../chunk-A2UUGASH.js';
|
|
4
5
|
import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
|
|
@@ -626,46 +627,7 @@ function TabsContent({ className, ...props }) {
|
|
|
626
627
|
}
|
|
627
628
|
);
|
|
628
629
|
}
|
|
629
|
-
function Loading({ label = "Loading\u2026", className }) {
|
|
630
|
-
return /* @__PURE__ */ jsx("div", { className: cn("flex min-h-[30vh] items-center justify-center", className), role: "status", "aria-live": "polite", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-sm text-muted-foreground", children: [
|
|
631
|
-
/* @__PURE__ */ jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }),
|
|
632
|
-
label
|
|
633
|
-
] }) });
|
|
634
|
-
}
|
|
635
|
-
function Empty({
|
|
636
|
-
title = "Nothing here yet",
|
|
637
|
-
description,
|
|
638
|
-
icon,
|
|
639
|
-
action,
|
|
640
|
-
className
|
|
641
|
-
}) {
|
|
642
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center justify-center gap-2 p-10 text-center", className), children: [
|
|
643
|
-
icon ? /* @__PURE__ */ jsx("div", { className: "text-3xl text-muted-foreground", children: icon }) : null,
|
|
644
|
-
/* @__PURE__ */ jsx("p", { className: "font-medium", children: title }),
|
|
645
|
-
description ? /* @__PURE__ */ jsx("p", { className: "max-w-sm text-sm text-muted-foreground", children: description }) : null,
|
|
646
|
-
action ? /* @__PURE__ */ jsx("div", { className: "mt-2", children: action }) : null
|
|
647
|
-
] });
|
|
648
|
-
}
|
|
649
|
-
function ErrorState({
|
|
650
|
-
title = "Something went wrong",
|
|
651
|
-
message,
|
|
652
|
-
action,
|
|
653
|
-
className
|
|
654
|
-
}) {
|
|
655
|
-
return /* @__PURE__ */ jsxs(
|
|
656
|
-
"div",
|
|
657
|
-
{
|
|
658
|
-
className: cn("rounded-xl border border-destructive/30 bg-destructive/5 p-6", className),
|
|
659
|
-
role: "alert",
|
|
660
|
-
children: [
|
|
661
|
-
/* @__PURE__ */ jsx("p", { className: "font-semibold text-destructive", children: title }),
|
|
662
|
-
message ? /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: message }) : null,
|
|
663
|
-
action ? /* @__PURE__ */ jsx("div", { className: "mt-3", children: action }) : null
|
|
664
|
-
]
|
|
665
|
-
}
|
|
666
|
-
);
|
|
667
|
-
}
|
|
668
630
|
|
|
669
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertTitle, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle,
|
|
631
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertTitle, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Label, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, ScrollArea, ScrollBar, Slider, Spinner, Switch, Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants };
|
|
670
632
|
//# sourceMappingURL=index.js.map
|
|
671
633
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/accordion.tsx","../../src/ui/alert.tsx","../../src/ui/breadcrumb.tsx","../../src/ui/card.tsx","../../src/ui/label.tsx","../../src/ui/progress.tsx","../../src/ui/scroll-area.tsx","../../src/ui/slider.tsx","../../src/ui/spinner.tsx","../../src/ui/switch.tsx","../../src/ui/tabs.tsx","../../src/ui/states.tsx"],"names":["AccordionPrimitive","jsx","jsxs","ProgressPrimitive","ScrollAreaPrimitive","SliderPrimitive","SwitchPrimitive","TabsPrimitive","cva"],"mappings":"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","file":"index.js","sourcesContent":["import { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"./cn\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"not-last:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\" />\n <ChevronUpIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n \"h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./cn\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n","import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"./cn\"\nimport { ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n aria-label=\"breadcrumb\"\n data-slot=\"breadcrumb\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"transition-colors hover:text-foreground\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n <ChevronRightIcon className=\"cn-rtl-flip\" />\n )}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 items-center justify-center [&>svg]:size-4\",\n className\n )}\n {...props}\n >\n <MoreHorizontalIcon />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"./cn\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n \"cn-font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-(--card-spacing)\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"./cn\"\n\nfunction Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import { Progress as ProgressPrimitive } from \"@base-ui/react/progress\"\n\nimport { cn } from \"./cn\"\n\nfunction Progress({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn(\"flex flex-wrap gap-3\", className)}\n {...props}\n >\n {children}\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n \"relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted\",\n className\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\"h-full bg-primary transition-all\", className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\n \"ml-auto text-sm text-muted-foreground tabular-nums\",\n className\n )}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nexport {\n Progress,\n ProgressTrack,\n ProgressIndicator,\n ProgressLabel,\n ProgressValue,\n}\n","import * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\"\n\nimport { cn } from \"./cn\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: ScrollAreaPrimitive.Root.Props) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import { Slider as SliderPrimitive } from \"@base-ui/react/slider\"\n\nimport { cn } from \"./cn\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: SliderPrimitive.Root.Props) {\n const _values = Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max]\n\n return (\n <SliderPrimitive.Root\n className={cn(\"data-horizontal:w-full data-vertical:h-full\", className)}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n thumbAlignment=\"edge\"\n {...props}\n >\n <SliderPrimitive.Control className=\"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col\">\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className=\"relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1\"\n >\n <SliderPrimitive.Indicator\n data-slot=\"slider-range\"\n className=\"bg-primary select-none data-horizontal:h-full data-vertical:w-full\"\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","import { cn } from \"./cn\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon data-slot=\"spinner\" role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n","import { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\n\nimport { cn } from \"./cn\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./cn\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-horizontal:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 text-sm outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","import type { ReactNode } from \"react\"\nimport { cn } from \"./cn\"\n\nexport function Loading({ label = \"Loading…\", className }: { label?: string; className?: string }) {\n return (\n <div className={cn(\"flex min-h-[30vh] items-center justify-center\", className)} role=\"status\" aria-live=\"polite\">\n <div className=\"flex items-center gap-3 text-sm text-muted-foreground\">\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n {label}\n </div>\n </div>\n )\n}\n\nexport function Empty({\n title = \"Nothing here yet\",\n description,\n icon,\n action,\n className,\n}: {\n title?: string\n description?: string\n icon?: ReactNode\n action?: ReactNode\n className?: string\n}) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center gap-2 p-10 text-center\", className)}>\n {icon ? <div className=\"text-3xl text-muted-foreground\">{icon}</div> : null}\n <p className=\"font-medium\">{title}</p>\n {description ? <p className=\"max-w-sm text-sm text-muted-foreground\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n )\n}\n\nexport function ErrorState({\n title = \"Something went wrong\",\n message,\n action,\n className,\n}: {\n title?: string\n message?: ReactNode\n action?: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn(\"rounded-xl border border-destructive/30 bg-destructive/5 p-6\", className)}\n role=\"alert\"\n >\n <p className=\"font-semibold text-destructive\">{title}</p>\n {message ? <p className=\"mt-1 text-sm text-muted-foreground\">{message}</p> : null}\n {action ? <div className=\"mt-3\">{action}</div> : null}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/accordion.tsx","../../src/ui/alert.tsx","../../src/ui/breadcrumb.tsx","../../src/ui/card.tsx","../../src/ui/label.tsx","../../src/ui/progress.tsx","../../src/ui/scroll-area.tsx","../../src/ui/slider.tsx","../../src/ui/spinner.tsx","../../src/ui/switch.tsx","../../src/ui/tabs.tsx"],"names":["AccordionPrimitive","jsx","jsxs","ProgressPrimitive","ScrollAreaPrimitive","SliderPrimitive","SwitchPrimitive","TabsPrimitive","cva"],"mappings":"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","file":"index.js","sourcesContent":["import { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"./cn\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"not-last:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\" />\n <ChevronUpIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n \"h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./cn\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n","import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"./cn\"\nimport { ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n aria-label=\"breadcrumb\"\n data-slot=\"breadcrumb\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"transition-colors hover:text-foreground\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n <ChevronRightIcon className=\"cn-rtl-flip\" />\n )}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\n \"flex size-5 items-center justify-center [&>svg]:size-4\",\n className\n )}\n {...props}\n >\n <MoreHorizontalIcon />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"./cn\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n \"cn-font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-(--card-spacing)\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"./cn\"\n\nfunction Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import { Progress as ProgressPrimitive } from \"@base-ui/react/progress\"\n\nimport { cn } from \"./cn\"\n\nfunction Progress({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn(\"flex flex-wrap gap-3\", className)}\n {...props}\n >\n {children}\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n \"relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted\",\n className\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\"h-full bg-primary transition-all\", className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\n \"ml-auto text-sm text-muted-foreground tabular-nums\",\n className\n )}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nexport {\n Progress,\n ProgressTrack,\n ProgressIndicator,\n ProgressLabel,\n ProgressValue,\n}\n","import * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\"\n\nimport { cn } from \"./cn\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: ScrollAreaPrimitive.Root.Props) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import { Slider as SliderPrimitive } from \"@base-ui/react/slider\"\n\nimport { cn } from \"./cn\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: SliderPrimitive.Root.Props) {\n const _values = Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max]\n\n return (\n <SliderPrimitive.Root\n className={cn(\"data-horizontal:w-full data-vertical:h-full\", className)}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n thumbAlignment=\"edge\"\n {...props}\n >\n <SliderPrimitive.Control className=\"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col\">\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className=\"relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1\"\n >\n <SliderPrimitive.Indicator\n data-slot=\"slider-range\"\n className=\"bg-primary select-none data-horizontal:h-full data-vertical:w-full\"\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","import { cn } from \"./cn\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon data-slot=\"spinner\" role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n","import { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\n\nimport { cn } from \"./cn\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"./cn\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-horizontal:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 text-sm outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { syncAgentsFile } from './chunk-
|
|
2
|
-
import { generateArtifacts } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import { scanProject } from './chunk-
|
|
5
|
-
import { frameworkVersion, printJson, log } from './chunk-
|
|
6
|
-
import './chunk-
|
|
1
|
+
import { syncAgentsFile } from './chunk-V2FV5OJ6.js';
|
|
2
|
+
import { generateArtifacts } from './chunk-LCN36MYX.js';
|
|
3
|
+
import './chunk-KLEIVDUV.js';
|
|
4
|
+
import { scanProject } from './chunk-YE4CPCXX.js';
|
|
5
|
+
import { frameworkVersion, printJson, log } from './chunk-CIJWVFJD.js';
|
|
6
|
+
import './chunk-TDUIW7LD.js';
|
|
7
7
|
|
|
8
8
|
// @squadbase/vantage — generated build. Do not edit.
|
|
9
9
|
|
|
@@ -19,11 +19,11 @@ async function upgrade(root, args) {
|
|
|
19
19
|
}
|
|
20
20
|
log.brand(`upgrade \u2192 v${version}`);
|
|
21
21
|
log.ok("Regenerated .vantage artifacts.");
|
|
22
|
-
if (agents === "updated") log.ok("Synced AGENTS.md from the framework.");
|
|
22
|
+
if (agents === "updated") log.ok("Synced AGENTS.md and agents/ from the framework.");
|
|
23
23
|
log.info("No breaking code transforms required for this version.");
|
|
24
24
|
return 0;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export { upgrade };
|
|
28
|
-
//# sourceMappingURL=upgrade-
|
|
29
|
-
//# sourceMappingURL=upgrade-
|
|
28
|
+
//# sourceMappingURL=upgrade-2QCP7UQQ.js.map
|
|
29
|
+
//# sourceMappingURL=upgrade-2QCP7UQQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/upgrade.ts"],"names":[],"mappings":";;;;;;;;;;AAWA,eAAsB,OAAA,CAAQ,MAAc,IAAA,EAAmC;AAC7E,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAKjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAElC,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM;AACnB,IAAA,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,EAAC,EAAG,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,MAAA,KAAW,SAAA,EAAW,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,KAAA,CAAM,CAAA,gBAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AACjC,EAAA,GAAA,CAAI,GAAG,iCAAiC,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,SAAA,EAAW,GAAA,CAAI,EAAA,CAAG,kDAAkD,CAAA;AACnF,EAAA,GAAA,CAAI,KAAK,wDAAwD,CAAA;AACjE,EAAA,OAAO,CAAA;AACT","file":"upgrade-2QCP7UQQ.js","sourcesContent":["import { generateArtifacts } from \"../core/generate\"\nimport { scanProject } from \"../core/scan\"\nimport { syncAgentsFile } from \"./add\"\nimport { frameworkVersion, log, printJson, type ParsedArgs } from \"./util\"\n\n/**\n * `vantage upgrade` — reconcile generated artifacts with the installed\n * framework version and apply any needed code transforms. v0.1 only\n * regenerates artifacts and re-syncs a managed AGENTS.md + agents/*.md; the\n * migration hook exists for future major versions.\n */\nexport async function upgrade(root: string, args: ParsedArgs): Promise<number> {\n const version = frameworkVersion()\n const model = scanProject(root)\n generateArtifacts({ root, model })\n\n // Keep an adopted AGENTS.md + agents/*.md (the app-author map and its\n // per-artifact-type knowledge files) in step with the framework's canonical\n // copies. No-op when the app never ran `vantage add agents`.\n const agents = syncAgentsFile(root)\n\n if (args.flags.json) {\n printJson({ ok: true, version, transforms: [], regenerated: true, agentsSynced: agents === \"updated\" })\n return 0\n }\n\n log.brand(`upgrade → v${version}`)\n log.ok(\"Regenerated .vantage artifacts.\")\n if (agents === \"updated\") log.ok(\"Synced AGENTS.md and agents/ from the framework.\")\n log.info(\"No breaking code transforms required for this version.\")\n return 0\n}\n"]}
|
package/dist/vite/index.d.ts
CHANGED
package/dist/vite/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { vantagePlugin } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { vantagePlugin } from '../chunk-46PPUW6Y.js';
|
|
2
|
+
import '../chunk-LCN36MYX.js';
|
|
3
|
+
import '../chunk-KLEIVDUV.js';
|
|
4
|
+
import '../chunk-YE4CPCXX.js';
|
|
3
5
|
import '../chunk-46QI6GFC.js';
|
|
4
|
-
import '../chunk-VXAV2435.js';
|
|
5
|
-
import '../chunk-D4Y5RWJA.js';
|
|
6
|
-
import '../chunk-C4MQRWXS.js';
|
|
7
6
|
import '../chunk-B7LLBNLV.js';
|
|
7
|
+
import '../chunk-TDUIW7LD.js';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
9
9
|
//# sourceMappingURL=index.js.map
|