@health-samurai/react-components 0.0.0-alpha.18 → 0.0.0-alpha.20

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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bundle.css +51 -33
  3. package/dist/src/components/code-editor/fhir-autocomplete.d.ts +70 -0
  4. package/dist/src/components/code-editor/fhir-autocomplete.d.ts.map +1 -0
  5. package/dist/src/components/code-editor/fhir-autocomplete.js +1849 -0
  6. package/dist/src/components/code-editor/fhir-autocomplete.js.map +1 -0
  7. package/dist/src/components/code-editor/fhir-autocomplete.test.js +1099 -0
  8. package/dist/src/components/code-editor/fhir-autocomplete.test.js.map +1 -0
  9. package/dist/src/components/code-editor/http/index.d.ts +9 -1
  10. package/dist/src/components/code-editor/http/index.d.ts.map +1 -1
  11. package/dist/src/components/code-editor/http/index.js +423 -3
  12. package/dist/src/components/code-editor/http/index.js.map +1 -1
  13. package/dist/src/components/code-editor/index.d.ts +13 -4
  14. package/dist/src/components/code-editor/index.d.ts.map +1 -1
  15. package/dist/src/components/code-editor/index.js +505 -96
  16. package/dist/src/components/code-editor/index.js.map +1 -1
  17. package/dist/src/components/code-editor/json-ast.d.ts +46 -0
  18. package/dist/src/components/code-editor/json-ast.d.ts.map +1 -0
  19. package/dist/src/components/code-editor/json-ast.js +465 -0
  20. package/dist/src/components/code-editor/json-ast.js.map +1 -0
  21. package/dist/src/components/code-editor/json-ast.test.js +206 -0
  22. package/dist/src/components/code-editor/json-ast.test.js.map +1 -0
  23. package/dist/src/components/code-editor/sql-completion.d.ts +22 -0
  24. package/dist/src/components/code-editor/sql-completion.d.ts.map +1 -0
  25. package/dist/src/components/code-editor/sql-completion.js +895 -0
  26. package/dist/src/components/code-editor/sql-completion.js.map +1 -0
  27. package/dist/src/components/date-picker-input.d.ts +10 -0
  28. package/dist/src/components/date-picker-input.d.ts.map +1 -0
  29. package/dist/src/components/date-picker-input.js +90 -0
  30. package/dist/src/components/date-picker-input.js.map +1 -0
  31. package/dist/src/components/date-picker-input.stories.js +76 -0
  32. package/dist/src/components/date-picker-input.stories.js.map +1 -0
  33. package/dist/src/index.d.ts +1 -0
  34. package/dist/src/index.d.ts.map +1 -1
  35. package/dist/src/index.js +1 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/shadcn/components/ui/alert-dialog.d.ts +1 -1
  38. package/dist/src/shadcn/components/ui/calendar.d.ts +1 -1
  39. package/dist/src/shadcn/components/ui/carousel.d.ts +1 -1
  40. package/dist/src/shadcn/components/ui/chart.d.ts +3 -3
  41. package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
  42. package/dist/src/shadcn/components/ui/chart.js +1 -1
  43. package/dist/src/shadcn/components/ui/chart.js.map +1 -1
  44. package/dist/src/shadcn/components/ui/command.d.ts +1 -1
  45. package/dist/src/shadcn/components/ui/pagination.d.ts +1 -1
  46. package/dist/src/shadcn/components/ui/resizable.stories.js +2 -2
  47. package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
  48. package/dist/src/shadcn/components/ui/sidebar.d.ts +4 -4
  49. package/dist/src/shadcn/components/ui/tabs.d.ts +3 -1
  50. package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
  51. package/dist/src/shadcn/components/ui/tabs.js +129 -2
  52. package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
  53. package/dist/src/shadcn/components/ui/tabs.stories.js +1 -1
  54. package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
  55. package/dist/src/shadcn/components/ui/toggle-group.d.ts +1 -1
  56. package/dist/src/typography.css +1 -1
  57. package/package.json +24 -19
  58. package/src/components/code-editor/fhir-autocomplete.test.ts +993 -0
  59. package/src/components/code-editor/fhir-autocomplete.ts +2321 -0
  60. package/src/components/code-editor/http/index.ts +339 -2
  61. package/src/components/code-editor/index.tsx +593 -102
  62. package/src/components/code-editor/json-ast.test.ts +230 -0
  63. package/src/components/code-editor/json-ast.ts +590 -0
  64. package/src/components/code-editor/sql-completion.ts +1105 -0
  65. package/src/components/date-picker-input.stories.tsx +79 -0
  66. package/src/components/date-picker-input.tsx +104 -0
  67. package/src/index.tsx +1 -0
  68. package/src/shadcn/components/ui/chart.tsx +6 -3
  69. package/src/shadcn/components/ui/resizable.stories.tsx +2 -2
  70. package/src/shadcn/components/ui/tabs.stories.tsx +1 -1
  71. package/src/shadcn/components/ui/tabs.tsx +160 -2
  72. package/src/typography.css +1 -1
  73. package/dist/src/components/code-editor/http/grammar/http.test.d.ts +0 -2
  74. package/dist/src/components/code-editor/http/grammar/http.test.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/code-editor/sql-completion.ts"],"sourcesContent":["import {\n\tautocompletion,\n\ttype Completion,\n\ttype CompletionContext,\n\ttype CompletionResult,\n\ttype CompletionSource,\n\tstartCompletion,\n} from \"@codemirror/autocomplete\";\nimport { EditorState, type Extension } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\n\n// ── Public types ──\n\nexport type SqlQueryType =\n\t| \"tables\"\n\t| \"columns\"\n\t| \"functions\"\n\t| \"jsonb_columns\"\n\t| \"structure_definition\";\n\ninterface StructureDefinitionElementType {\n\tcode: string;\n}\n\ninterface StructureDefinitionElement {\n\tpath?: string;\n\ttype?: StructureDefinitionElementType[];\n\tmax?: string;\n\tshort?: string;\n\tdefinition?: string;\n}\n\ninterface StructureDefinition {\n\tname?: string;\n\tsnapshot?: {\n\t\telement: StructureDefinitionElement[];\n\t};\n}\n\nexport interface SqlConfig {\n\texecuteSql: (\n\t\tquery: string,\n\t\ttype: SqlQueryType,\n\t) => Promise<Record<string, unknown>[]>;\n}\n\n// ── Internal types ──\n\ntype SchemaMap = Record<string, string[]>;\ntype JsonbColumnMap = Record<string, string[]>;\ntype ColumnInfo = { name: string; dataType: string };\ntype ColumnMap = Record<string, ColumnInfo[]>;\n\ntype FhirFieldInfo = {\n\tname: string;\n\tdatatype: string;\n\tisArray: boolean;\n\tdescription: string | undefined;\n};\n\ntype FhirPathChildren = Record<string, FhirFieldInfo[]>;\n\ntype JsonbChain = {\n\ttableOrAlias: string | null;\n\tcolumn: string;\n\tpath: string[];\n\tisPathOp: boolean;\n\tpartialInput: string;\n\tinsideQuote: boolean;\n\tlastRawSegment: string | null;\n};\n\ntype AliasEntry = { schema: string; table: string };\n\nexport interface SqlMetadata {\n\tschemas: SchemaMap;\n\tjsonbColumns: JsonbColumnMap;\n\tfunctions: string[];\n\tcolumns: ColumnMap;\n}\n\n// ── SQL queries ──\n\nconst TABLES_QUERY = `SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema', 'pgagent') AND table_type = 'BASE TABLE' ORDER BY table_schema, table_name`;\n\nconst JSONB_COLUMNS_QUERY = `SELECT c.table_schema, c.table_name, c.column_name FROM information_schema.columns c JOIN information_schema.tables t ON c.table_schema = t.table_schema AND c.table_name = t.table_name WHERE t.table_type = 'BASE TABLE' AND c.table_schema NOT IN ('pg_catalog', 'information_schema', 'pgagent') AND c.udt_name = 'jsonb'`;\n\nconst FUNCTIONS_QUERY = `SELECT DISTINCT p.proname AS name FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid LEFT JOIN pg_depend d ON d.objid = p.oid AND d.deptype = 'e' WHERE n.nspname NOT IN ('pg_catalog', 'information_schema') AND d.objid IS NULL ORDER BY p.proname`;\n\nconst COLUMNS_QUERY = `SELECT c.table_schema, c.table_name, c.column_name, c.data_type FROM information_schema.columns c JOIN information_schema.tables t ON c.table_schema = t.table_schema AND c.table_name = t.table_name WHERE t.table_type = 'BASE TABLE' AND c.table_schema NOT IN ('pg_catalog', 'information_schema', 'pgagent') ORDER BY c.table_schema, c.table_name, c.ordinal_position`;\n\n// ── FHIR StructureDefinition processing ──\n\nfunction isExpandedVariant(path: string, unionBases: Set<string>): boolean {\n\tconst parts = path.split(\".\");\n\tif (parts.length < 2) return false;\n\tconst parentPath = parts.slice(0, -1).join(\".\");\n\tconst name = parts[parts.length - 1]!;\n\n\tfor (const base of unionBases) {\n\t\tconst baseParts = base.split(\".\");\n\t\tconst baseName = baseParts[baseParts.length - 1]!;\n\t\tconst baseParent = baseParts.slice(0, -1).join(\".\");\n\n\t\tif (\n\t\t\tparentPath === baseParent &&\n\t\t\tname.startsWith(baseName) &&\n\t\t\tname.length > baseName.length &&\n\t\t\t/^[A-Z]/.test(name.slice(baseName.length))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction buildFromStructureDefinition(\n\tsd: StructureDefinition,\n): FhirPathChildren {\n\tconst elements = sd.snapshot?.element ?? [];\n\tconst result: FhirPathChildren = {};\n\n\tconst unionBases = new Set<string>();\n\tfor (const el of elements) {\n\t\tif (!el.path) continue;\n\t\tconst name = el.path.split(\".\").pop() ?? \"\";\n\t\tif (name.endsWith(\"[x]\")) {\n\t\t\tunionBases.add(el.path.replace(/\\[x\\]$/, \"\"));\n\t\t}\n\t}\n\n\tfor (const el of elements) {\n\t\tif (!el.path) continue;\n\t\tconst parts = el.path.split(\".\");\n\t\tif (parts.length < 2) continue;\n\n\t\tif (isExpandedVariant(el.path, unionBases)) continue;\n\n\t\tconst parentPath = parts.slice(0, -1).join(\".\");\n\t\tconst rawName = parts[parts.length - 1]!;\n\n\t\tif (!result[parentPath]) result[parentPath] = [];\n\n\t\tif (rawName.endsWith(\"[x]\")) {\n\t\t\tconst name = rawName.slice(0, -3);\n\t\t\tif (result[parentPath].some((f) => f.name === name)) continue;\n\n\t\t\tresult[parentPath].push({\n\t\t\t\tname,\n\t\t\t\tdatatype: \"union\",\n\t\t\t\tisArray: el.max === \"*\",\n\t\t\t\tdescription: el.short ?? el.definition,\n\t\t\t});\n\n\t\t\tconst unionPath = `${parentPath}.${name}`;\n\t\t\tif (!result[unionPath]) result[unionPath] = [];\n\t\t\tfor (const t of el.type ?? []) {\n\t\t\t\tif (!result[unionPath].some((f) => f.name === t.code)) {\n\t\t\t\t\tresult[unionPath].push({\n\t\t\t\t\t\tname: t.code,\n\t\t\t\t\t\tdatatype: t.code,\n\t\t\t\t\t\tisArray: false,\n\t\t\t\t\t\tdescription: el.short ?? el.definition,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (result[parentPath].some((f) => f.name === rawName)) continue;\n\n\t\t\tresult[parentPath].push({\n\t\t\t\tname: rawName,\n\t\t\t\tdatatype: el.type?.[0]?.code ?? \"\",\n\t\t\t\tisArray: el.max === \"*\",\n\t\t\t\tdescription: el.short ?? el.definition,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction transformReferenceFields(result: FhirPathChildren): void {\n\tfor (const [path, children] of Object.entries(result)) {\n\t\tconst hasReferenceField = children.some((c) => c.name === \"reference\");\n\t\tif (!hasReferenceField) continue;\n\n\t\tresult[path] = children.flatMap((child) => {\n\t\t\tif (child.name === \"reference\") {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"id\",\n\t\t\t\t\t\tdatatype: \"string\",\n\t\t\t\t\t\tisArray: false,\n\t\t\t\t\t\tdescription: \"Resource ID\" as string | undefined,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"resourceType\",\n\t\t\t\t\t\tdatatype: \"string\",\n\t\t\t\t\t\tisArray: false,\n\t\t\t\t\t\tdescription: \"Resource type\" as string | undefined,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn [child];\n\t\t});\n\t}\n}\n\n// ── SQL parsing utilities ──\n\nconst SQL_TABLE_KEYWORDS =\n\t/\\b(?:from|join|inner\\s+join|left\\s+join|right\\s+join|full\\s+join|cross\\s+join|into|update|table)\\s+$/i;\n\nfunction isInsideString(textBefore: string): boolean {\n\tlet count = 0;\n\tfor (let i = 0; i < textBefore.length; i++) {\n\t\tif (textBefore[i] === \"'\") {\n\t\t\tif (i + 1 < textBefore.length && textBefore[i + 1] === \"'\") {\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t}\n\treturn count % 2 !== 0;\n}\n\nfunction isInJsonbContext(textBefore: string): boolean {\n\treturn parseJsonbChain(textBefore) !== null;\n}\n\nfunction parseJsonbChain(textBefore: string): JsonbChain | null {\n\tconst pathOpMatch = textBefore.match(/((?:\\w+\\.)?\\w+)\\s*#>>?\\s*'\\{([^}]*)$/);\n\tif (pathOpMatch) {\n\t\tconst ref = pathOpMatch[1]!;\n\t\tconst pathContent = pathOpMatch[2]!;\n\t\tconst segments = pathContent ? pathContent.split(\",\") : [];\n\t\tconst partialInput = segments.length > 0 ? (segments.pop() ?? \"\") : \"\";\n\t\tconst lastRawSegment =\n\t\t\tsegments.length > 0 ? (segments[segments.length - 1] ?? null) : null;\n\t\tconst path = segments.filter((s) => !/^\\d+$/.test(s));\n\n\t\tconst dotParts = ref.split(\".\");\n\t\tif (dotParts.length === 2) {\n\t\t\treturn {\n\t\t\t\ttableOrAlias: dotParts[0]!,\n\t\t\t\tcolumn: dotParts[1]!,\n\t\t\t\tpath,\n\t\t\t\tisPathOp: true,\n\t\t\t\tpartialInput,\n\t\t\t\tinsideQuote: false,\n\t\t\t\tlastRawSegment,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\ttableOrAlias: null,\n\t\t\tcolumn: dotParts[0]!,\n\t\t\tpath,\n\t\t\tisPathOp: true,\n\t\t\tpartialInput,\n\t\t\tinsideQuote: false,\n\t\t\tlastRawSegment,\n\t\t};\n\t}\n\n\tconst arrowPattern =\n\t\t/(?:((?:\\w+\\.)?\\w+)((?:\\s*->>?\\s*(?:'[^']*'|\\d+))*)\\s*->>?\\s*)('?)([^']*)?$/;\n\tconst arrowMatch = textBefore.match(arrowPattern);\n\tif (!arrowMatch) return null;\n\n\tconst ref = arrowMatch[1]!;\n\tconst chainPart = arrowMatch[2] || \"\";\n\tconst insideQuote = arrowMatch[3] === \"'\";\n\tconst partialInput = arrowMatch[4] ?? \"\";\n\n\tconst chainSegments: string[] = [];\n\tlet lastRawSeg: string | null = null;\n\tconst segmentRegex = /->>?\\s*(?:'([^']*)'|(\\d+))/g;\n\tfor (\n\t\tlet m = segmentRegex.exec(chainPart);\n\t\tm !== null;\n\t\tm = segmentRegex.exec(chainPart)\n\t) {\n\t\tconst seg = m[1] ?? m[2] ?? \"\";\n\t\tlastRawSeg = seg;\n\t\tif (!/^\\d+$/.test(seg)) {\n\t\t\tchainSegments.push(seg);\n\t\t}\n\t}\n\n\tconst dotParts = ref.split(\".\");\n\tif (dotParts.length === 2) {\n\t\treturn {\n\t\t\ttableOrAlias: dotParts[0]!,\n\t\t\tcolumn: dotParts[1]!,\n\t\t\tpath: chainSegments,\n\t\t\tisPathOp: false,\n\t\t\tpartialInput,\n\t\t\tinsideQuote,\n\t\t\tlastRawSegment: lastRawSeg,\n\t\t};\n\t}\n\treturn {\n\t\ttableOrAlias: null,\n\t\tcolumn: dotParts[0]!,\n\t\tpath: chainSegments,\n\t\tisPathOp: false,\n\t\tpartialInput,\n\t\tinsideQuote,\n\t\tlastRawSegment: lastRawSeg,\n\t};\n}\n\nfunction buildAliasMap(\n\tsql: string,\n\tschemas: SchemaMap,\n): Record<string, AliasEntry> {\n\tconst aliases: Record<string, AliasEntry> = {};\n\tconst regex = /\\b(?:FROM|JOIN)\\s+((?:\\w+\\.)?\\w+)(?:\\s+(?:AS\\s+)?(\\w+))?/gi;\n\n\tfor (let match = regex.exec(sql); match !== null; match = regex.exec(sql)) {\n\t\tconst fullTable = match[1]!;\n\t\tconst alias = match[2];\n\n\t\tlet schema: string;\n\t\tlet table: string;\n\t\tif (fullTable.includes(\".\")) {\n\t\t\tconst parts = fullTable.split(\".\");\n\t\t\tschema = parts[0]!;\n\t\t\ttable = parts[1]!;\n\t\t} else {\n\t\t\ttable = fullTable;\n\t\t\tlet found: string | null = null;\n\t\t\tfor (const [s, tables] of Object.entries(schemas)) {\n\t\t\t\tif (tables.includes(table)) {\n\t\t\t\t\tfound = s;\n\t\t\t\t\tif (s === \"public\") break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tschema = found ?? \"public\";\n\t\t}\n\n\t\tif (alias) {\n\t\t\taliases[alias.toLowerCase()] = { schema, table };\n\t\t}\n\t\taliases[table.toLowerCase()] = { schema, table };\n\t}\n\n\treturn aliases;\n}\n\nfunction tableToResourceType(table: string): string {\n\treturn table\n\t\t.split(\"_\")\n\t\t.map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n\t\t.join(\"\");\n}\n\nfunction getCurrentStatement(doc: string, pos: number): string {\n\tlet start = 0;\n\tlet end = doc.length;\n\n\tconst before = doc.lastIndexOf(\";\", pos - 1);\n\tif (before !== -1) start = before + 1;\n\n\tconst after = doc.indexOf(\";\", pos);\n\tif (after !== -1) end = after;\n\n\treturn doc.slice(start, end);\n}\n\n// ── Completion result builders ──\n\nfunction buildJsonbResult(\n\tchain: JsonbChain,\n\tpathChildren: FhirPathChildren,\n\tresourceType: string,\n\tcontext: CompletionContext,\n): CompletionResult | null {\n\tconst lookupPath =\n\t\tchain.path.length > 0\n\t\t\t? `${resourceType}.${chain.path.join(\".\")}`\n\t\t\t: resourceType;\n\n\tconst children = pathChildren[lookupPath];\n\tif (!children || children.length === 0) return null;\n\n\tconst partial = chain.partialInput.toLowerCase();\n\tconst filtered = partial\n\t\t? children.filter((f) => f.name.toLowerCase().startsWith(partial))\n\t\t: children;\n\n\tif (filtered.length === 0) return null;\n\n\tif (chain.isPathOp) {\n\t\treturn {\n\t\t\tfrom: context.pos - chain.partialInput.length,\n\t\t\tvalidFor: /^\\w*$/,\n\t\t\toptions: filtered.map(\n\t\t\t\t(f): Completion => ({\n\t\t\t\t\tlabel: f.name,\n\t\t\t\t\ttype: \"property\",\n\t\t\t\t\tdetail: f.datatype + (f.isArray ? \"[]\" : \"\"),\n\t\t\t\t\t...(f.description != null ? { info: f.description } : {}),\n\t\t\t\t}),\n\t\t\t),\n\t\t};\n\t}\n\n\tif (chain.insideQuote) {\n\t\treturn {\n\t\t\tfrom: context.pos - chain.partialInput.length,\n\t\t\tvalidFor: /^\\w*$/,\n\t\t\toptions: filtered.map(\n\t\t\t\t(f): Completion => ({\n\t\t\t\t\tlabel: f.name,\n\t\t\t\t\ttype: \"property\",\n\t\t\t\t\tdetail: f.datatype + (f.isArray ? \"[]\" : \"\"),\n\t\t\t\t\t...(f.description != null ? { info: f.description } : {}),\n\t\t\t\t\tapply: (\n\t\t\t\t\t\tview: EditorView,\n\t\t\t\t\t\t_completion: Completion,\n\t\t\t\t\t\tfrom: number,\n\t\t\t\t\t\tto: number,\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst after = view.state.sliceDoc(to, to + 1);\n\t\t\t\t\t\tconst end = after === \"'\" ? to + 1 : to;\n\t\t\t\t\t\tconst insert = `${f.name}'`;\n\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\tchanges: { from, to: end, insert },\n\t\t\t\t\t\t\tselection: { anchor: from + insert.length },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tfrom: context.pos - chain.partialInput.length,\n\t\tvalidFor: /^'?\\w*'?$/,\n\t\toptions: filtered.map(\n\t\t\t(f): Completion => ({\n\t\t\t\tlabel: `'${f.name}'`,\n\t\t\t\ttype: \"property\",\n\t\t\t\tdetail: f.datatype + (f.isArray ? \"[]\" : \"\"),\n\t\t\t\t...(f.description != null ? { info: f.description } : {}),\n\t\t\t\tapply: `'${f.name}'`,\n\t\t\t}),\n\t\t),\n\t};\n}\n\nfunction isArrayPosition(\n\tchain: JsonbChain,\n\tpathChildren: FhirPathChildren,\n\tresourceType: string,\n): boolean {\n\tif (!chain.lastRawSegment || /^\\d+$/.test(chain.lastRawSegment)) return false;\n\tif (!chain.isPathOp && chain.insideQuote) return false;\n\n\tconst fieldName = chain.lastRawSegment;\n\tconst parentPath =\n\t\tchain.path.length > 1\n\t\t\t? `${resourceType}.${chain.path.slice(0, -1).join(\".\")}`\n\t\t\t: resourceType;\n\tconst parentChildren = pathChildren[parentPath];\n\tif (!parentChildren) return false;\n\n\tconst element = parentChildren.find((f) => f.name === fieldName);\n\treturn !!element?.isArray;\n}\n\nfunction buildArrayIndexResult(\n\tchain: JsonbChain,\n\tcontext: CompletionContext,\n): CompletionResult {\n\treturn {\n\t\tfrom: context.pos - chain.partialInput.length,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tlabel: \"0\",\n\t\t\t\ttype: \"enum\",\n\t\t\t\tdetail: \"array index\",\n\t\t\t},\n\t\t],\n\t};\n}\n\nasync function resolveNestedTypes(\n\tpathChildren: FhirPathChildren,\n\tresourceType: string,\n\tpath: string[],\n\tfetchSchema: (type: string) => Promise<FhirPathChildren | null>,\n): Promise<void> {\n\tfor (let i = 0; i < path.length; i++) {\n\t\tconst currentPath = `${resourceType}.${path.slice(0, i + 1).join(\".\")}`;\n\n\t\tif (pathChildren[currentPath]) continue;\n\n\t\tconst parentPath =\n\t\t\ti === 0 ? resourceType : `${resourceType}.${path.slice(0, i).join(\".\")}`;\n\t\tconst parentChildren = pathChildren[parentPath];\n\t\tif (!parentChildren) return;\n\n\t\tconst segmentName = path[i]!;\n\t\tconst element = parentChildren.find((f) => f.name === segmentName);\n\t\tif (!element?.datatype) return;\n\n\t\tif (element.datatype === \"union\") continue;\n\n\t\tconst firstChar = element.datatype[0]!;\n\t\tif (firstChar !== firstChar.toUpperCase()) return;\n\n\t\tconst typeChildren = await fetchSchema(element.datatype);\n\t\tif (!typeChildren) return;\n\n\t\tconst typeName = element.datatype;\n\t\tfor (const [key, children] of Object.entries(typeChildren)) {\n\t\t\tconst suffix = key === typeName ? \"\" : key.slice(typeName.length);\n\t\t\tpathChildren[currentPath + suffix] = children;\n\t\t}\n\t}\n}\n\n// ── Completion extensions ──\n\nfunction tableCompletionExtension(schemas: SchemaMap): Extension {\n\tconst source = (context: CompletionContext): CompletionResult | null => {\n\t\tconst line = context.state.doc.lineAt(context.pos);\n\t\tconst textBefore = line.text.slice(0, context.pos - line.from);\n\n\t\tif (isInsideString(textBefore)) return null;\n\n\t\tconst schemaDot = textBefore.match(/(\\w+)\\.(\\w*)$/);\n\t\tif (schemaDot) {\n\t\t\tconst schemaName = schemaDot[1]!;\n\t\t\tconst tables = schemas[schemaName];\n\t\t\tif (!tables) return null;\n\t\t\treturn {\n\t\t\t\tfrom: context.pos - (schemaDot[2] ?? \"\").length,\n\t\t\t\toptions: tables.map((t) => ({ label: t, type: \"table\" })),\n\t\t\t};\n\t\t}\n\n\t\tconst word = context.matchBefore(/\\w*/);\n\t\tif (!word) return null;\n\n\t\tconst beforeWord = textBefore.slice(0, word.from - line.from);\n\t\tif (!SQL_TABLE_KEYWORDS.test(beforeWord) && !context.explicit) return null;\n\n\t\tconst options: { label: string; type: string; detail?: string }[] = [];\n\n\t\tfor (const [schema, tables] of Object.entries(schemas)) {\n\t\t\toptions.push({ label: `${schema}.`, type: \"keyword\", detail: \"schema\" });\n\t\t\tfor (const table of tables) {\n\t\t\t\tif (schema === \"public\") {\n\t\t\t\t\toptions.push({ label: table, type: \"table\" });\n\t\t\t\t} else {\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tlabel: `${schema}.${table}`,\n\t\t\t\t\t\ttype: \"table\",\n\t\t\t\t\t\tdetail: schema,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { from: word.from, options };\n\t};\n\n\treturn EditorState.languageData.of(() => [{ autocomplete: source }]);\n}\n\nfunction columnCompletionExtension(ctx: {\n\tschemas: SchemaMap;\n\tcolumns: ColumnMap;\n}): Extension {\n\tconst source = (context: CompletionContext): CompletionResult | null => {\n\t\tconst line = context.state.doc.lineAt(context.pos);\n\t\tconst textBefore = line.text.slice(0, context.pos - line.from);\n\n\t\tif (isInsideString(textBefore)) return null;\n\n\t\tconst fullDoc = context.state.doc.toString();\n\t\tconst statement = getCurrentStatement(fullDoc, context.pos);\n\t\tconst aliases = buildAliasMap(statement, ctx.schemas);\n\n\t\tif (Object.keys(aliases).length === 0) return null;\n\n\t\tconst aliasDot = textBefore.match(/(\\w+)\\.(\\w*)$/);\n\t\tif (aliasDot) {\n\t\t\tconst beforeAlias = textBefore.slice(\n\t\t\t\t0,\n\t\t\t\ttextBefore.length - aliasDot[0].length,\n\t\t\t);\n\t\t\tif (SQL_TABLE_KEYWORDS.test(beforeAlias)) return null;\n\n\t\t\tconst aliasName = aliasDot[1]!;\n\t\t\tconst entry = aliases[aliasName.toLowerCase()];\n\t\t\tif (!entry) return null;\n\t\t\tconst key = `${entry.schema}.${entry.table}`;\n\t\t\tconst cols = ctx.columns[key];\n\t\t\tif (!cols || cols.length === 0) return null;\n\n\t\t\treturn {\n\t\t\t\tfrom: context.pos - (aliasDot[2] ?? \"\").length,\n\t\t\t\toptions: cols.map((c) => ({\n\t\t\t\t\tlabel: c.name,\n\t\t\t\t\ttype: \"variable\",\n\t\t\t\t\tdetail: c.dataType,\n\t\t\t\t})),\n\t\t\t};\n\t\t}\n\n\t\tconst word = context.matchBefore(/\\w*/);\n\t\tif (!word) return null;\n\t\tif (word.from === word.to && !context.explicit) return null;\n\n\t\tconst textBeforeWord = textBefore.slice(0, word.from - line.from);\n\t\tif (SQL_TABLE_KEYWORDS.test(textBeforeWord)) return null;\n\n\t\tconst seen = new Set<string>();\n\t\tconst options: { label: string; type: string; detail: string }[] = [];\n\t\tfor (const entry of Object.values(aliases)) {\n\t\t\tconst key = `${entry.schema}.${entry.table}`;\n\t\t\tconst cols = ctx.columns[key];\n\t\t\tif (!cols) continue;\n\t\t\tfor (const c of cols) {\n\t\t\t\tconst dedup = `${c.name}::${entry.table}`;\n\t\t\t\tif (seen.has(dedup)) continue;\n\t\t\t\tseen.add(dedup);\n\t\t\t\toptions.push({\n\t\t\t\t\tlabel: c.name,\n\t\t\t\t\ttype: \"variable\",\n\t\t\t\t\tdetail: `${c.dataType} · ${entry.table}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (options.length === 0) return null;\n\t\treturn { from: word.from, options };\n\t};\n\n\treturn EditorState.languageData.of(() => [{ autocomplete: source }]);\n}\n\nfunction triggerCompletionAfter(view: EditorView) {\n\trequestAnimationFrame(() => startCompletion(view));\n}\n\nfunction jsonbOperatorExtension(): Extension {\n\tconst source = (context: CompletionContext): CompletionResult | null => {\n\t\tconst line = context.state.doc.lineAt(context.pos);\n\t\tconst textBefore = line.text.slice(0, context.pos - line.from);\n\n\t\tif (/\\w\\s*#$/.test(textBefore)) {\n\t\t\treturn {\n\t\t\t\tfrom: context.pos - 1,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"#>> '{}'\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"#>> '{\";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}}' ` },\n\t\t\t\t\t\t\t\tselection: { anchor: from + insert.length },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttriggerCompletionAfter(view);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"#> '{}'\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"#> '{\";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}}' ` },\n\t\t\t\t\t\t\t\tselection: { anchor: from + insert.length },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttriggerCompletionAfter(view);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\n\t\tif (/\\w\\s*->$/.test(textBefore) && !/\\w\\s*->>$/.test(textBefore)) {\n\t\t\treturn {\n\t\t\t\tfrom: context.pos - 2,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"->> ''\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"->> '\";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}' ` },\n\t\t\t\t\t\t\t\tselection: { anchor: from + insert.length },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttriggerCompletionAfter(view);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"-> ''\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"-> '\";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}' ` },\n\t\t\t\t\t\t\t\tselection: { anchor: from + insert.length },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttriggerCompletionAfter(view);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"->> 0\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"->> \";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}0 ` },\n\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\tanchor: from + insert.length,\n\t\t\t\t\t\t\t\t\thead: from + insert.length + 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"-> 0\",\n\t\t\t\t\t\ttype: \"operator\",\n\t\t\t\t\t\tapply: (view, _completion, from, to) => {\n\t\t\t\t\t\t\tconst insert = \"-> \";\n\t\t\t\t\t\t\tview.dispatch({\n\t\t\t\t\t\t\t\tchanges: { from, to, insert: `${insert}0 ` },\n\t\t\t\t\t\t\t\tselection: {\n\t\t\t\t\t\t\t\t\tanchor: from + insert.length,\n\t\t\t\t\t\t\t\t\thead: from + insert.length + 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t};\n\n\treturn EditorState.languageData.of(() => [{ autocomplete: source }]);\n}\n\nfunction jsonbCompletionExtension(ctx: {\n\tschemas: SchemaMap;\n\tjsonbColumns: JsonbColumnMap;\n\tsdCache: Record<string, FhirPathChildren>;\n\tsdNotFound: Set<string>;\n\tfetchSchema: (type: string) => Promise<FhirPathChildren | null>;\n}): Extension {\n\tconst resolveChain = (\n\t\tcontext: CompletionContext,\n\t): { chain: JsonbChain; resourceType: string } | null => {\n\t\tconst line = context.state.doc.lineAt(context.pos);\n\t\tconst textBefore = line.text.slice(0, context.pos - line.from);\n\n\t\tconst chain = parseJsonbChain(textBefore);\n\t\tif (!chain) return null;\n\n\t\tconst fullDoc = context.state.doc.toString();\n\t\tconst statement = getCurrentStatement(fullDoc, context.pos);\n\t\tconst aliases = buildAliasMap(statement, ctx.schemas);\n\n\t\tlet resolved: AliasEntry | null = null;\n\n\t\tif (chain.tableOrAlias) {\n\t\t\tresolved = aliases[chain.tableOrAlias.toLowerCase()] ?? null;\n\t\t} else {\n\t\t\tfor (const entry of Object.values(aliases)) {\n\t\t\t\tconst key = `${entry.schema}.${entry.table}`;\n\t\t\t\tconst cols = ctx.jsonbColumns[key];\n\t\t\t\tif (cols?.includes(chain.column)) {\n\t\t\t\t\tresolved = entry;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!resolved) return null;\n\n\t\tconst jsonbKey = `${resolved.schema}.${resolved.table}`;\n\t\tconst jsonbCols = ctx.jsonbColumns[jsonbKey];\n\t\tif (!jsonbCols?.includes(chain.column)) return null;\n\n\t\tif (chain.column !== \"resource\") return null;\n\n\t\tconst resourceType = tableToResourceType(resolved.table);\n\t\tif (ctx.sdNotFound.has(resourceType)) return null;\n\n\t\treturn { chain, resourceType };\n\t};\n\n\tconst complete = async (\n\t\tchain: JsonbChain,\n\t\tresourceType: string,\n\t\tpathChildren: FhirPathChildren,\n\t\tcontext: CompletionContext,\n\t): Promise<CompletionResult | null> => {\n\t\tif (chain.path.length > 0) {\n\t\t\tawait resolveNestedTypes(\n\t\t\t\tpathChildren,\n\t\t\t\tresourceType,\n\t\t\t\tchain.path,\n\t\t\t\tctx.fetchSchema,\n\t\t\t);\n\t\t}\n\n\t\tif (isArrayPosition(chain, pathChildren, resourceType)) {\n\t\t\treturn buildArrayIndexResult(chain, context);\n\t\t}\n\n\t\treturn buildJsonbResult(chain, pathChildren, resourceType, context);\n\t};\n\n\tconst source = (\n\t\tcontext: CompletionContext,\n\t): CompletionResult | null | Promise<CompletionResult | null> => {\n\t\tconst info = resolveChain(context);\n\t\tif (!info) return null;\n\n\t\tconst { chain, resourceType } = info;\n\n\t\tconst cached = ctx.sdCache[resourceType];\n\t\tif (cached) {\n\t\t\tif (chain.path.length === 0) {\n\t\t\t\treturn buildJsonbResult(chain, cached, resourceType, context);\n\t\t\t}\n\t\t\treturn complete(chain, resourceType, cached, context);\n\t\t}\n\n\t\treturn ctx.fetchSchema(resourceType).then((fetched) => {\n\t\t\tif (!fetched) return null;\n\t\t\treturn complete(chain, resourceType, fetched, context);\n\t\t});\n\t};\n\n\treturn EditorState.languageData.of(() => [{ autocomplete: source }]);\n}\n\nfunction sqlCompletionOverride(): Extension {\n\treturn autocompletion({\n\t\toverride: [\n\t\t\tasync (context: CompletionContext): Promise<CompletionResult | null> => {\n\t\t\t\tconst line = context.state.doc.lineAt(context.pos);\n\t\t\t\tconst textBefore = line.text.slice(0, context.pos - line.from);\n\t\t\t\tconst inJsonb = isInJsonbContext(textBefore);\n\n\t\t\t\tconst langSources = context.state.languageDataAt<CompletionSource>(\n\t\t\t\t\t\"autocomplete\",\n\t\t\t\t\tcontext.pos,\n\t\t\t\t);\n\n\t\t\t\tconst results = (\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tlangSources.map((src) => Promise.resolve(src(context))),\n\t\t\t\t\t)\n\t\t\t\t).filter((r): r is CompletionResult => r !== null);\n\n\t\t\t\tif (results.length === 0) return null;\n\n\t\t\t\tif (inJsonb) {\n\t\t\t\t\tconst jsonbTypes = new Set([\"property\", \"enum\", \"operator\"]);\n\t\t\t\t\tconst jsonbResult = results.find((r) =>\n\t\t\t\t\t\tr.options.some((o) => jsonbTypes.has(o.type ?? \"\")),\n\t\t\t\t\t);\n\t\t\t\t\tif (!jsonbResult) return null;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...jsonbResult,\n\t\t\t\t\t\toptions: jsonbResult.options.filter((o) =>\n\t\t\t\t\t\t\tjsonbTypes.has(o.type ?? \"\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst hasTableResults = results.some((r) =>\n\t\t\t\t\tr.options.some((o) => o.type === \"table\"),\n\t\t\t\t);\n\n\t\t\t\tif (hasTableResults) {\n\t\t\t\t\tconst tableOptions = results.flatMap((r) =>\n\t\t\t\t\t\tr.options.filter((o) => o.type === \"table\" || o.type === \"keyword\"),\n\t\t\t\t\t);\n\t\t\t\t\tconst from = results.find((r) =>\n\t\t\t\t\t\tr.options.some((o) => o.type === \"table\"),\n\t\t\t\t\t)?.from;\n\t\t\t\t\tif (from == null) return null;\n\t\t\t\t\treturn { from, options: tableOptions };\n\t\t\t\t}\n\n\t\t\t\tif (results.length === 1) return results[0]!;\n\n\t\t\t\tconst groups = new Map<\n\t\t\t\t\tnumber,\n\t\t\t\t\t{ from: number; options: Completion[] }\n\t\t\t\t>();\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\tconst existing = groups.get(r.from);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\texisting.options.push(...r.options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgroups.set(r.from, {\n\t\t\t\t\t\t\tfrom: r.from,\n\t\t\t\t\t\t\toptions: [...r.options],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet best: { from: number; options: Completion[] } | null = null;\n\t\t\t\tfor (const g of groups.values()) {\n\t\t\t\t\tif (!best || g.options.length > best.options.length) best = g;\n\t\t\t\t}\n\t\t\t\tif (best) {\n\t\t\t\t\tbest.options = best.options.map((o) => {\n\t\t\t\t\t\tif (o.type === \"keyword\") return { ...o, boost: 2 };\n\t\t\t\t\t\tif (o.type === \"type\") return { ...o, boost: 1 };\n\t\t\t\t\t\tif (o.type === \"variable\") return { ...o, boost: -1 };\n\t\t\t\t\t\treturn o;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn best;\n\t\t\t},\n\t\t],\n\t});\n}\n\n// ── Public API ──\n\nexport async function fetchSqlMetadata(\n\texecuteSql: SqlConfig[\"executeSql\"],\n): Promise<SqlMetadata> {\n\tconst [tablesRows, jsonbRows, functionsRows, columnsRows] = await Promise.all(\n\t\t[\n\t\t\texecuteSql(TABLES_QUERY, \"tables\"),\n\t\t\texecuteSql(JSONB_COLUMNS_QUERY, \"jsonb_columns\"),\n\t\t\texecuteSql(FUNCTIONS_QUERY, \"functions\"),\n\t\t\texecuteSql(COLUMNS_QUERY, \"columns\"),\n\t\t],\n\t);\n\n\tconst schemas: SchemaMap = {};\n\tfor (const row of tablesRows) {\n\t\tconst s = String(row.table_schema);\n\t\tif (!schemas[s]) schemas[s] = [];\n\t\tschemas[s].push(String(row.table_name));\n\t}\n\n\tconst jsonbColumns: JsonbColumnMap = {};\n\tfor (const row of jsonbRows) {\n\t\tconst key = `${row.table_schema}.${row.table_name}`;\n\t\tif (!jsonbColumns[key]) jsonbColumns[key] = [];\n\t\tjsonbColumns[key].push(String(row.column_name));\n\t}\n\n\tconst functions = functionsRows.map((r) => String(r.name));\n\n\tconst columns: ColumnMap = {};\n\tfor (const row of columnsRows) {\n\t\tconst key = `${row.table_schema}.${row.table_name}`;\n\t\tif (!columns[key]) columns[key] = [];\n\t\tcolumns[key].push({\n\t\t\tname: String(row.column_name),\n\t\t\tdataType: String(row.data_type),\n\t\t});\n\t}\n\n\treturn { schemas, jsonbColumns, functions, columns };\n}\n\nexport function buildSqlCompletionExtensions(\n\tmetadata: SqlMetadata,\n\texecuteSql: SqlConfig[\"executeSql\"],\n): Extension[] {\n\tconst sdCache: Record<string, FhirPathChildren> = {};\n\tconst sdNotFound = new Set<string>();\n\n\tconst fetchSchema = async (\n\t\tresourceType: string,\n\t): Promise<FhirPathChildren | null> => {\n\t\tif (sdCache[resourceType]) return sdCache[resourceType];\n\t\tif (sdNotFound.has(resourceType)) return null;\n\n\t\ttry {\n\t\t\tconst name = resourceType.replace(/'/g, \"''\");\n\t\t\tconst rows = await executeSql(\n\t\t\t\t`SELECT resource FROM far.canonicalresource WHERE rt = 'StructureDefinition' AND resource->>'name' = '${name}' LIMIT 1`,\n\t\t\t\t\"structure_definition\",\n\t\t\t);\n\t\t\tconst sd = (rows[0]?.resource ?? null) as StructureDefinition | null;\n\t\t\tif (!sd) {\n\t\t\t\tsdNotFound.add(resourceType);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst pathChildren = buildFromStructureDefinition(sd);\n\t\t\ttransformReferenceFields(pathChildren);\n\t\t\tsdCache[resourceType] = pathChildren;\n\t\t\treturn pathChildren;\n\t\t} catch {\n\t\t\tsdNotFound.add(resourceType);\n\t\t\treturn null;\n\t\t}\n\t};\n\n\treturn [\n\t\tEditorView.theme({\n\t\t\t\".cm-tooltip.cm-tooltip-autocomplete\": {\n\t\t\t\tbackground: \"var(--color-bg-primary)\",\n\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\tpadding: \"4px\",\n\t\t\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\tfontSize: \"14px\",\n\t\t\t},\n\t\t\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\t\t\tmaxHeight: \"300px\",\n\t\t\t},\n\t\t\t\".cm-tooltip-autocomplete ul li\": {\n\t\t\t\tpadding: \"4px 8px\",\n\t\t\t\tborderRadius: \"4px\",\n\t\t\t},\n\t\t\t\".cm-tooltip-autocomplete ul li[aria-selected]\": {\n\t\t\t\tbackground: \"var(--color-bg-quaternary)\",\n\t\t\t\tcolor: \"var(--color-text-primary)\",\n\t\t\t},\n\t\t\t\".cm-completionLabel\": {\n\t\t\t\tcolor: \"var(--color-text-primary)\",\n\t\t\t\tfontSize: \"14px\",\n\t\t\t},\n\t\t\t\".cm-completionDetail\": {\n\t\t\t\tcolor: \"var(--color-text-tertiary)\",\n\t\t\t\tfontSize: \"12px\",\n\t\t\t\tfontStyle: \"normal\",\n\t\t\t\tmarginLeft: \"8px\",\n\t\t\t},\n\t\t\t\".cm-completionIcon\": {\n\t\t\t\tpadding: \"0\",\n\t\t\t\tmarginRight: \"6px\",\n\t\t\t\twidth: \"18px\",\n\t\t\t\theight: \"18px\",\n\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tborderRadius: \"4px\",\n\t\t\t\tfontSize: \"11px\",\n\t\t\t\tfontWeight: \"600\",\n\t\t\t\tlineHeight: \"1\",\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-table\": {\n\t\t\t\tbackground: \"var(--color-blue-100)\",\n\t\t\t\tcolor: \"var(--color-blue-600)\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-table::after\": {\n\t\t\t\tcontent: \"'T'\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-keyword\": {\n\t\t\t\tbackground: \"var(--color-green-200)\",\n\t\t\t\tcolor: \"var(--color-green-700)\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-keyword::after\": {\n\t\t\t\tcontent: \"'S'\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-property\": {\n\t\t\t\tbackground: \"var(--color-purple-100)\",\n\t\t\t\tcolor: \"var(--color-purple-600)\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-property::after\": {\n\t\t\t\tcontent: \"'F'\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-variable\": {\n\t\t\t\tbackground: \"var(--color-yellow-200)\",\n\t\t\t\tcolor: \"var(--color-yellow-700)\",\n\t\t\t},\n\t\t\t\".cm-completionIcon-variable::after\": {\n\t\t\t\tcontent: \"'C'\",\n\t\t\t},\n\t\t}),\n\t\ttableCompletionExtension(metadata.schemas),\n\t\tcolumnCompletionExtension({\n\t\t\tschemas: metadata.schemas,\n\t\t\tcolumns: metadata.columns,\n\t\t}),\n\t\tjsonbCompletionExtension({\n\t\t\tschemas: metadata.schemas,\n\t\t\tjsonbColumns: metadata.jsonbColumns,\n\t\t\tsdCache,\n\t\t\tsdNotFound,\n\t\t\tfetchSchema,\n\t\t}),\n\t\tjsonbOperatorExtension(),\n\t\tsqlCompletionOverride(),\n\t];\n}\n"],"names":["autocompletion","startCompletion","EditorState","EditorView","TABLES_QUERY","JSONB_COLUMNS_QUERY","FUNCTIONS_QUERY","COLUMNS_QUERY","isExpandedVariant","path","unionBases","parts","split","length","parentPath","slice","join","name","base","baseParts","baseName","baseParent","startsWith","test","buildFromStructureDefinition","sd","elements","snapshot","element","result","Set","el","pop","endsWith","add","replace","rawName","some","f","push","datatype","isArray","max","description","short","definition","unionPath","t","type","code","transformReferenceFields","children","Object","entries","hasReferenceField","c","flatMap","child","SQL_TABLE_KEYWORDS","isInsideString","textBefore","count","i","isInJsonbContext","parseJsonbChain","pathOpMatch","match","ref","pathContent","segments","partialInput","lastRawSegment","filter","s","dotParts","tableOrAlias","column","isPathOp","insideQuote","arrowPattern","arrowMatch","chainPart","chainSegments","lastRawSeg","segmentRegex","m","exec","seg","buildAliasMap","sql","schemas","aliases","regex","fullTable","alias","schema","table","includes","found","tables","toLowerCase","tableToResourceType","map","charAt","toUpperCase","getCurrentStatement","doc","pos","start","end","before","lastIndexOf","after","indexOf","buildJsonbResult","chain","pathChildren","resourceType","context","lookupPath","partial","filtered","from","validFor","options","label","detail","info","apply","view","_completion","to","state","sliceDoc","insert","dispatch","changes","selection","anchor","isArrayPosition","fieldName","parentChildren","find","buildArrayIndexResult","resolveNestedTypes","fetchSchema","currentPath","segmentName","firstChar","typeChildren","typeName","key","suffix","tableCompletionExtension","source","line","lineAt","text","schemaDot","schemaName","word","matchBefore","beforeWord","explicit","languageData","of","autocomplete","columnCompletionExtension","ctx","fullDoc","toString","statement","keys","aliasDot","beforeAlias","aliasName","entry","cols","columns","dataType","textBeforeWord","seen","values","dedup","has","triggerCompletionAfter","requestAnimationFrame","jsonbOperatorExtension","head","jsonbCompletionExtension","resolveChain","resolved","jsonbColumns","jsonbKey","jsonbCols","sdNotFound","complete","cached","sdCache","then","fetched","sqlCompletionOverride","override","inJsonb","langSources","languageDataAt","results","Promise","all","src","resolve","r","jsonbTypes","jsonbResult","o","hasTableResults","tableOptions","groups","Map","existing","get","set","best","g","boost","fetchSqlMetadata","executeSql","tablesRows","jsonbRows","functionsRows","columnsRows","row","String","table_schema","table_name","column_name","functions","data_type","buildSqlCompletionExtensions","metadata","rows","resource","theme","background","border","borderRadius","padding","boxShadow","fontFamily","fontSize","maxHeight","color","fontStyle","marginLeft","marginRight","width","height","display","alignItems","justifyContent","fontWeight","lineHeight","boxSizing","content"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface DatePickerInputProps {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ placeholder?: string;
5
+ className?: string;
6
+ disabled?: boolean;
7
+ }
8
+ declare function DatePickerInput({ value, onChange, placeholder, className, disabled, }: DatePickerInputProps): import("react/jsx-runtime").JSX.Element;
9
+ export { DatePickerInput, type DatePickerInputProps };
10
+ //# sourceMappingURL=date-picker-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker-input.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker-input.tsx"],"names":[],"mappings":"AAiCA,UAAU,oBAAoB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,iBAAS,eAAe,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAA0B,EAC1B,SAAS,EACT,QAAQ,GACR,EAAE,oBAAoB,2CAsDtB;AAED,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CalendarIcon } from "lucide-react";
3
+ import * as React from "react";
4
+ import { Button } from "../shadcn/components/ui/button.js";
5
+ import { Calendar } from "../shadcn/components/ui/calendar.js";
6
+ import { Input } from "../shadcn/components/ui/input.js";
7
+ import { Popover, PopoverContent, PopoverTrigger } from "../shadcn/components/ui/popover.js";
8
+ import { cn } from "../shadcn/lib/utils.js";
9
+ function formatDate(date) {
10
+ if (!date) return "";
11
+ const d = date.getDate().toString().padStart(2, "0");
12
+ const m = (date.getMonth() + 1).toString().padStart(2, "0");
13
+ const y = date.getFullYear();
14
+ return `${d}.${m}.${y}`;
15
+ }
16
+ function parseDate(value) {
17
+ if (!value) return undefined;
18
+ const parts = value.split(".");
19
+ if (parts.length === 3) {
20
+ const [d, m, y] = parts;
21
+ const date = new Date(`${y}-${m}-${d}`);
22
+ if (!Number.isNaN(date.getTime())) return date;
23
+ }
24
+ const date = new Date(value);
25
+ if (!Number.isNaN(date.getTime())) return date;
26
+ return undefined;
27
+ }
28
+ function DatePickerInput({ value, onChange, placeholder = "dd.mm.yyyy", className, disabled }) {
29
+ const [open, setOpen] = React.useState(false);
30
+ const selectedDate = parseDate(value);
31
+ const [month, setMonth] = React.useState(selectedDate ?? new Date());
32
+ return /*#__PURE__*/ _jsx("div", {
33
+ className: cn("relative", className),
34
+ children: /*#__PURE__*/ _jsx(Input, {
35
+ type: "text",
36
+ placeholder: placeholder,
37
+ value: value,
38
+ disabled: disabled,
39
+ onChange: (e)=>onChange(e.target.value),
40
+ onKeyDown: (e)=>{
41
+ if (e.key === "ArrowDown") {
42
+ e.preventDefault();
43
+ setOpen(true);
44
+ }
45
+ },
46
+ rightSlot: /*#__PURE__*/ _jsxs(Popover, {
47
+ open: open,
48
+ onOpenChange: setOpen,
49
+ children: [
50
+ /*#__PURE__*/ _jsx(PopoverTrigger, {
51
+ asChild: true,
52
+ children: /*#__PURE__*/ _jsx(Button, {
53
+ variant: "ghost",
54
+ size: "small",
55
+ className: "p-0 size-5",
56
+ "aria-label": "Select date",
57
+ disabled: disabled,
58
+ onClick: (e)=>{
59
+ e.preventDefault();
60
+ setOpen((o)=>!o);
61
+ },
62
+ children: /*#__PURE__*/ _jsx(CalendarIcon, {
63
+ className: "size-3.5"
64
+ })
65
+ })
66
+ }),
67
+ /*#__PURE__*/ _jsx(PopoverContent, {
68
+ className: "w-auto p-0",
69
+ align: "end",
70
+ sideOffset: 10,
71
+ children: /*#__PURE__*/ _jsx(Calendar, {
72
+ mode: "single",
73
+ selected: selectedDate,
74
+ month: month,
75
+ onMonthChange: (m)=>setMonth(m),
76
+ onSelect: (date)=>{
77
+ onChange(formatDate(date));
78
+ if (date) setMonth(date);
79
+ setOpen(false);
80
+ }
81
+ })
82
+ })
83
+ ]
84
+ })
85
+ })
86
+ });
87
+ }
88
+ export { DatePickerInput };
89
+
90
+ //# sourceMappingURL=date-picker-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/date-picker-input.tsx"],"sourcesContent":["import { CalendarIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"#shadcn/components/ui/button\";\nimport { Calendar } from \"#shadcn/components/ui/calendar\";\nimport { Input } from \"#shadcn/components/ui/input\";\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"#shadcn/components/ui/popover\";\nimport { cn } from \"#shadcn/lib/utils\";\n\nfunction formatDate(date: Date | undefined): string {\n\tif (!date) return \"\";\n\tconst d = date.getDate().toString().padStart(2, \"0\");\n\tconst m = (date.getMonth() + 1).toString().padStart(2, \"0\");\n\tconst y = date.getFullYear();\n\treturn `${d}.${m}.${y}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n\tif (!value) return undefined;\n\tconst parts = value.split(\".\");\n\tif (parts.length === 3) {\n\t\tconst [d, m, y] = parts;\n\t\tconst date = new Date(`${y}-${m}-${d}`);\n\t\tif (!Number.isNaN(date.getTime())) return date;\n\t}\n\tconst date = new Date(value);\n\tif (!Number.isNaN(date.getTime())) return date;\n\treturn undefined;\n}\n\ninterface DatePickerInputProps {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tplaceholder?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n}\n\nfunction DatePickerInput({\n\tvalue,\n\tonChange,\n\tplaceholder = \"dd.mm.yyyy\",\n\tclassName,\n\tdisabled,\n}: DatePickerInputProps) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst selectedDate = parseDate(value);\n\tconst [month, setMonth] = React.useState<Date>(selectedDate ?? new Date());\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<Input\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === \"ArrowDown\") {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\trightSlot={\n\t\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tclassName=\"p-0 size-5\"\n\t\t\t\t\t\t\t\taria-label=\"Select date\"\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tsetOpen((o) => !o);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CalendarIcon className=\"size-3.5\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t\t<PopoverContent className=\"w-auto p-0\" align=\"end\" sideOffset={10}>\n\t\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\t\tmode=\"single\"\n\t\t\t\t\t\t\t\tselected={selectedDate}\n\t\t\t\t\t\t\t\tmonth={month}\n\t\t\t\t\t\t\t\tonMonthChange={(m) => setMonth(m)}\n\t\t\t\t\t\t\t\tonSelect={(date) => {\n\t\t\t\t\t\t\t\t\tonChange(formatDate(date));\n\t\t\t\t\t\t\t\t\tif (date) setMonth(date);\n\t\t\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</PopoverContent>\n\t\t\t\t\t</Popover>\n\t\t\t\t}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport { DatePickerInput, type DatePickerInputProps };\n"],"names":["CalendarIcon","React","Button","Calendar","Input","Popover","PopoverContent","PopoverTrigger","cn","formatDate","date","d","getDate","toString","padStart","m","getMonth","y","getFullYear","parseDate","value","undefined","parts","split","length","Date","Number","isNaN","getTime","DatePickerInput","onChange","placeholder","className","disabled","open","setOpen","useState","selectedDate","month","setMonth","div","type","e","target","onKeyDown","key","preventDefault","rightSlot","onOpenChange","asChild","variant","size","aria-label","onClick","o","align","sideOffset","mode","selected","onMonthChange","onSelect"],"mappings":";AAAA,SAASA,YAAY,QAAQ,eAAe;AAC5C,YAAYC,WAAW,QAAQ;AAC/B,SAASC,MAAM,QAAQ,oCAA+B;AACtD,SAASC,QAAQ,QAAQ,sCAAiC;AAC1D,SAASC,KAAK,QAAQ,mCAA8B;AACpD,SACCC,OAAO,EACPC,cAAc,EACdC,cAAc,QACR,qCAAgC;AACvC,SAASC,EAAE,QAAQ,yBAAoB;AAEvC,SAASC,WAAWC,IAAsB;IACzC,IAAI,CAACA,MAAM,OAAO;IAClB,MAAMC,IAAID,KAAKE,OAAO,GAAGC,QAAQ,GAAGC,QAAQ,CAAC,GAAG;IAChD,MAAMC,IAAI,AAACL,CAAAA,KAAKM,QAAQ,KAAK,CAAA,EAAGH,QAAQ,GAAGC,QAAQ,CAAC,GAAG;IACvD,MAAMG,IAAIP,KAAKQ,WAAW;IAC1B,OAAO,GAAGP,EAAE,CAAC,EAAEI,EAAE,CAAC,EAAEE,GAAG;AACxB;AAEA,SAASE,UAAUC,KAAa;IAC/B,IAAI,CAACA,OAAO,OAAOC;IACnB,MAAMC,QAAQF,MAAMG,KAAK,CAAC;IAC1B,IAAID,MAAME,MAAM,KAAK,GAAG;QACvB,MAAM,CAACb,GAAGI,GAAGE,EAAE,GAAGK;QAClB,MAAMZ,OAAO,IAAIe,KAAK,GAAGR,EAAE,CAAC,EAAEF,EAAE,CAAC,EAAEJ,GAAG;QACtC,IAAI,CAACe,OAAOC,KAAK,CAACjB,KAAKkB,OAAO,KAAK,OAAOlB;IAC3C;IACA,MAAMA,OAAO,IAAIe,KAAKL;IACtB,IAAI,CAACM,OAAOC,KAAK,CAACjB,KAAKkB,OAAO,KAAK,OAAOlB;IAC1C,OAAOW;AACR;AAUA,SAASQ,gBAAgB,EACxBT,KAAK,EACLU,QAAQ,EACRC,cAAc,YAAY,EAC1BC,SAAS,EACTC,QAAQ,EACc;IACtB,MAAM,CAACC,MAAMC,QAAQ,GAAGlC,MAAMmC,QAAQ,CAAC;IACvC,MAAMC,eAAelB,UAAUC;IAC/B,MAAM,CAACkB,OAAOC,SAAS,GAAGtC,MAAMmC,QAAQ,CAAOC,gBAAgB,IAAIZ;IAEnE,qBACC,KAACe;QAAIR,WAAWxB,GAAG,YAAYwB;kBAC9B,cAAA,KAAC5B;YACAqC,MAAK;YACLV,aAAaA;YACbX,OAAOA;YACPa,UAAUA;YACVH,UAAU,CAACY,IAAMZ,SAASY,EAAEC,MAAM,CAACvB,KAAK;YACxCwB,WAAW,CAACF;gBACX,IAAIA,EAAEG,GAAG,KAAK,aAAa;oBAC1BH,EAAEI,cAAc;oBAChBX,QAAQ;gBACT;YACD;YACAY,yBACC,MAAC1C;gBAAQ6B,MAAMA;gBAAMc,cAAcb;;kCAClC,KAAC5B;wBAAe0C,OAAO;kCACtB,cAAA,KAAC/C;4BACAgD,SAAQ;4BACRC,MAAK;4BACLnB,WAAU;4BACVoB,cAAW;4BACXnB,UAAUA;4BACVoB,SAAS,CAACX;gCACTA,EAAEI,cAAc;gCAChBX,QAAQ,CAACmB,IAAM,CAACA;4BACjB;sCAEA,cAAA,KAACtD;gCAAagC,WAAU;;;;kCAG1B,KAAC1B;wBAAe0B,WAAU;wBAAauB,OAAM;wBAAMC,YAAY;kCAC9D,cAAA,KAACrD;4BACAsD,MAAK;4BACLC,UAAUrB;4BACVC,OAAOA;4BACPqB,eAAe,CAAC5C,IAAMwB,SAASxB;4BAC/B6C,UAAU,CAAClD;gCACVoB,SAASrB,WAAWC;gCACpB,IAAIA,MAAM6B,SAAS7B;gCACnByB,QAAQ;4BACT;;;;;;;AAQR;AAEA,SAASN,eAAe,GAA8B"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { DatePickerInput } from "./date-picker-input.js";
4
+ function DatePickerInputWrapper(props) {
5
+ const [value, setValue] = useState("");
6
+ return /*#__PURE__*/ _jsx("div", {
7
+ className: "w-48",
8
+ children: /*#__PURE__*/ _jsx(DatePickerInput, {
9
+ value: value,
10
+ onChange: setValue,
11
+ ...props
12
+ })
13
+ });
14
+ }
15
+ function DatePickerInputPrefilledWrapper() {
16
+ const [value, setValue] = useState("15.06.2025");
17
+ return /*#__PURE__*/ _jsx("div", {
18
+ className: "w-48",
19
+ children: /*#__PURE__*/ _jsx(DatePickerInput, {
20
+ value: value,
21
+ onChange: setValue
22
+ })
23
+ });
24
+ }
25
+ function DatePickerRangeWrapper() {
26
+ const [from, setFrom] = useState("");
27
+ const [to, setTo] = useState("");
28
+ return /*#__PURE__*/ _jsxs("div", {
29
+ className: "flex items-center gap-2",
30
+ children: [
31
+ /*#__PURE__*/ _jsx(DatePickerInput, {
32
+ value: from,
33
+ onChange: setFrom,
34
+ className: "w-40",
35
+ placeholder: "From"
36
+ }),
37
+ /*#__PURE__*/ _jsx("span", {
38
+ className: "text-text-secondary",
39
+ children: "—"
40
+ }),
41
+ /*#__PURE__*/ _jsx(DatePickerInput, {
42
+ value: to,
43
+ onChange: setTo,
44
+ className: "w-40",
45
+ placeholder: "To"
46
+ })
47
+ ]
48
+ });
49
+ }
50
+ const meta = {
51
+ title: "Component/DatePickerInput",
52
+ component: DatePickerInputWrapper,
53
+ parameters: {
54
+ layout: "centered"
55
+ }
56
+ };
57
+ export default meta;
58
+ export const Default = {};
59
+ export const WithPlaceholder = {
60
+ args: {
61
+ placeholder: "Select a date..."
62
+ }
63
+ };
64
+ export const Disabled = {
65
+ args: {
66
+ disabled: true
67
+ }
68
+ };
69
+ export const Prefilled = {
70
+ render: ()=>/*#__PURE__*/ _jsx(DatePickerInputPrefilledWrapper, {})
71
+ };
72
+ export const DateRange = {
73
+ render: ()=>/*#__PURE__*/ _jsx(DatePickerRangeWrapper, {})
74
+ };
75
+
76
+ //# sourceMappingURL=date-picker-input.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/date-picker-input.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { useState } from \"react\";\nimport { DatePickerInput } from \"./date-picker-input\";\n\nfunction DatePickerInputWrapper(props: {\n\tplaceholder?: string;\n\tdisabled?: boolean;\n}) {\n\tconst [value, setValue] = useState(\"\");\n\treturn (\n\t\t<div className=\"w-48\">\n\t\t\t<DatePickerInput value={value} onChange={setValue} {...props} />\n\t\t</div>\n\t);\n}\n\nfunction DatePickerInputPrefilledWrapper() {\n\tconst [value, setValue] = useState(\"15.06.2025\");\n\treturn (\n\t\t<div className=\"w-48\">\n\t\t\t<DatePickerInput value={value} onChange={setValue} />\n\t\t</div>\n\t);\n}\n\nfunction DatePickerRangeWrapper() {\n\tconst [from, setFrom] = useState(\"\");\n\tconst [to, setTo] = useState(\"\");\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<DatePickerInput\n\t\t\t\tvalue={from}\n\t\t\t\tonChange={setFrom}\n\t\t\t\tclassName=\"w-40\"\n\t\t\t\tplaceholder=\"From\"\n\t\t\t/>\n\t\t\t<span className=\"text-text-secondary\">—</span>\n\t\t\t<DatePickerInput\n\t\t\t\tvalue={to}\n\t\t\t\tonChange={setTo}\n\t\t\t\tclassName=\"w-40\"\n\t\t\t\tplaceholder=\"To\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nconst meta = {\n\ttitle: \"Component/DatePickerInput\",\n\tcomponent: DatePickerInputWrapper,\n\tparameters: {\n\t\tlayout: \"centered\",\n\t},\n} satisfies Meta<typeof DatePickerInputWrapper>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {};\n\nexport const WithPlaceholder: Story = {\n\targs: {\n\t\tplaceholder: \"Select a date...\",\n\t},\n};\n\nexport const Disabled: Story = {\n\targs: {\n\t\tdisabled: true,\n\t},\n};\n\nexport const Prefilled: StoryObj = {\n\trender: () => <DatePickerInputPrefilledWrapper />,\n};\n\nexport const DateRange: StoryObj = {\n\trender: () => <DatePickerRangeWrapper />,\n};\n"],"names":["useState","DatePickerInput","DatePickerInputWrapper","props","value","setValue","div","className","onChange","DatePickerInputPrefilledWrapper","DatePickerRangeWrapper","from","setFrom","to","setTo","placeholder","span","meta","title","component","parameters","layout","Default","WithPlaceholder","args","Disabled","disabled","Prefilled","render","DateRange"],"mappings":";AACA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SAASC,uBAAuBC,KAG/B;IACA,MAAM,CAACC,OAAOC,SAAS,GAAGL,SAAS;IACnC,qBACC,KAACM;QAAIC,WAAU;kBACd,cAAA,KAACN;YAAgBG,OAAOA;YAAOI,UAAUH;YAAW,GAAGF,KAAK;;;AAG/D;AAEA,SAASM;IACR,MAAM,CAACL,OAAOC,SAAS,GAAGL,SAAS;IACnC,qBACC,KAACM;QAAIC,WAAU;kBACd,cAAA,KAACN;YAAgBG,OAAOA;YAAOI,UAAUH;;;AAG5C;AAEA,SAASK;IACR,MAAM,CAACC,MAAMC,QAAQ,GAAGZ,SAAS;IACjC,MAAM,CAACa,IAAIC,MAAM,GAAGd,SAAS;IAC7B,qBACC,MAACM;QAAIC,WAAU;;0BACd,KAACN;gBACAG,OAAOO;gBACPH,UAAUI;gBACVL,WAAU;gBACVQ,aAAY;;0BAEb,KAACC;gBAAKT,WAAU;0BAAsB;;0BACtC,KAACN;gBACAG,OAAOS;gBACPL,UAAUM;gBACVP,WAAU;gBACVQ,aAAY;;;;AAIhB;AAEA,MAAME,OAAO;IACZC,OAAO;IACPC,WAAWjB;IACXkB,YAAY;QACXC,QAAQ;IACT;AACD;AAEA,eAAeJ,KAAK;AAGpB,OAAO,MAAMK,UAAiB,CAAC,EAAE;AAEjC,OAAO,MAAMC,kBAAyB;IACrCC,MAAM;QACLT,aAAa;IACd;AACD,EAAE;AAEF,OAAO,MAAMU,WAAkB;IAC9BD,MAAM;QACLE,UAAU;IACX;AACD,EAAE;AAEF,OAAO,MAAMC,YAAsB;IAClCC,QAAQ,kBAAM,KAACnB;AAChB,EAAE;AAEF,OAAO,MAAMoB,YAAsB;IAClCD,QAAQ,kBAAM,KAAClB;AAChB,EAAE"}
@@ -3,6 +3,7 @@ export * from "./components/button-dropdown";
3
3
  export * from "./components/code-editor";
4
4
  export * from "./components/copy-icon";
5
5
  export * from "./components/data-table";
6
+ export * from "./components/date-picker-input";
6
7
  export * from "./components/fhir-structure-view";
7
8
  export * from "./components/icon-button";
8
9
  export * from "./components/operation-outcome-view";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
package/dist/src/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./components/button-dropdown.js";
4
4
  export * from "./components/code-editor/index.js";
5
5
  export * from "./components/copy-icon.js";
6
6
  export * from "./components/data-table.js";
7
+ export * from "./components/date-picker-input.js";
7
8
  export * from "./components/fhir-structure-view.js";
8
9
  export * from "./components/icon-button.js";
9
10
  export * from "./components/operation-outcome-view.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["// Shadcn Components\nexport { type ExternalToast, toast } from \"sonner\";\nexport * from \"./components/button-dropdown\";\nexport * from \"./components/code-editor\";\nexport * from \"./components/copy-icon\";\nexport * from \"./components/data-table\";\nexport * from \"./components/fhir-structure-view\";\nexport * from \"./components/icon-button\";\nexport * from \"./components/operation-outcome-view\";\nexport * from \"./components/request-line-editor\";\nexport * from \"./components/segment-control\";\nexport * from \"./components/split-button\";\nexport * from \"./components/tag\";\nexport * from \"./components/tile\";\nexport * from \"./components/toolbar\";\nexport * from \"./components/tree-view\";\nexport * from \"./icons\";\nexport * from \"./shadcn/components/ui/accordion\";\nexport * from \"./shadcn/components/ui/alert\";\nexport * from \"./shadcn/components/ui/alert-dialog\";\nexport * from \"./shadcn/components/ui/aspect-ratio\";\nexport * from \"./shadcn/components/ui/avatar\";\nexport * from \"./shadcn/components/ui/badge\";\nexport * from \"./shadcn/components/ui/breadcrumb\";\nexport * from \"./shadcn/components/ui/button\";\nexport * from \"./shadcn/components/ui/calendar\";\nexport * from \"./shadcn/components/ui/card\";\nexport * from \"./shadcn/components/ui/carousel\";\nexport * from \"./shadcn/components/ui/chart\";\nexport * from \"./shadcn/components/ui/checkbox\";\nexport * from \"./shadcn/components/ui/collapsible\";\nexport * from \"./shadcn/components/ui/combobox\";\nexport * from \"./shadcn/components/ui/command\";\nexport * from \"./shadcn/components/ui/context-menu\";\nexport * from \"./shadcn/components/ui/dialog\";\nexport * from \"./shadcn/components/ui/drawer\";\nexport * from \"./shadcn/components/ui/dropdown-menu\";\nexport * from \"./shadcn/components/ui/form\";\nexport * from \"./shadcn/components/ui/hover-card\";\nexport * from \"./shadcn/components/ui/input\";\nexport * from \"./shadcn/components/ui/input-otp\";\nexport * from \"./shadcn/components/ui/label\";\nexport * from \"./shadcn/components/ui/menubar\";\nexport * from \"./shadcn/components/ui/navigation-menu\";\nexport * from \"./shadcn/components/ui/pagination\";\nexport * from \"./shadcn/components/ui/popover\";\nexport * from \"./shadcn/components/ui/progress\";\nexport * from \"./shadcn/components/ui/radio-group\";\nexport * from \"./shadcn/components/ui/resizable\";\nexport * from \"./shadcn/components/ui/scroll-area\";\nexport * from \"./shadcn/components/ui/select\";\nexport * from \"./shadcn/components/ui/separator\";\nexport * from \"./shadcn/components/ui/sheet\";\nexport * from \"./shadcn/components/ui/sidebar\";\nexport * from \"./shadcn/components/ui/skeleton\";\nexport * from \"./shadcn/components/ui/slider\";\nexport * from \"./shadcn/components/ui/sonner\";\nexport * from \"./shadcn/components/ui/switch\";\nexport * from \"./shadcn/components/ui/table\";\nexport * from \"./shadcn/components/ui/tabs\";\nexport * from \"./shadcn/components/ui/textarea\";\nexport * from \"./shadcn/components/ui/toggle\";\nexport * from \"./shadcn/components/ui/toggle-group\";\nexport * from \"./shadcn/components/ui/tooltip\";\nexport * from \"./shadcn/components/ui/tree\";\n// Hooks\nexport * from \"./shadcn/hooks/use-mobile\";\nexport * from \"./shadcn/lib/utils\";\n"],"names":["toast"],"mappings":"AAAA,oBAAoB;AACpB,SAA6BA,KAAK,QAAQ,SAAS;AACnD,cAAc,kCAA+B;AAC7C,cAAc,oCAA2B;AACzC,cAAc,4BAAyB;AACvC,cAAc,6BAA0B;AACxC,cAAc,sCAAmC;AACjD,cAAc,8BAA2B;AACzC,cAAc,yCAAsC;AACpD,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,+BAA4B;AAC1C,cAAc,sBAAmB;AACjC,cAAc,uBAAoB;AAClC,cAAc,0BAAuB;AACrC,cAAc,4BAAyB;AACvC,cAAc,aAAU;AACxB,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,yCAAsC;AACpD,cAAc,yCAAsC;AACpD,cAAc,mCAAgC;AAC9C,cAAc,kCAA+B;AAC7C,cAAc,uCAAoC;AAClD,cAAc,mCAAgC;AAC9C,cAAc,qCAAkC;AAChD,cAAc,iCAA8B;AAC5C,cAAc,qCAAkC;AAChD,cAAc,kCAA+B;AAC7C,cAAc,qCAAkC;AAChD,cAAc,wCAAqC;AACnD,cAAc,qCAAkC;AAChD,cAAc,oCAAiC;AAC/C,cAAc,yCAAsC;AACpD,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,0CAAuC;AACrD,cAAc,iCAA8B;AAC5C,cAAc,uCAAoC;AAClD,cAAc,kCAA+B;AAC7C,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,oCAAiC;AAC/C,cAAc,4CAAyC;AACvD,cAAc,uCAAoC;AAClD,cAAc,oCAAiC;AAC/C,cAAc,qCAAkC;AAChD,cAAc,wCAAqC;AACnD,cAAc,sCAAmC;AACjD,cAAc,wCAAqC;AACnD,cAAc,mCAAgC;AAC9C,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,oCAAiC;AAC/C,cAAc,qCAAkC;AAChD,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,kCAA+B;AAC7C,cAAc,iCAA8B;AAC5C,cAAc,qCAAkC;AAChD,cAAc,mCAAgC;AAC9C,cAAc,yCAAsC;AACpD,cAAc,oCAAiC;AAC/C,cAAc,iCAA8B;AAC5C,QAAQ;AACR,cAAc,+BAA4B;AAC1C,cAAc,wBAAqB"}
1
+ {"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["// Shadcn Components\nexport { type ExternalToast, toast } from \"sonner\";\nexport * from \"./components/button-dropdown\";\nexport * from \"./components/code-editor\";\nexport * from \"./components/copy-icon\";\nexport * from \"./components/data-table\";\nexport * from \"./components/date-picker-input\";\nexport * from \"./components/fhir-structure-view\";\nexport * from \"./components/icon-button\";\nexport * from \"./components/operation-outcome-view\";\nexport * from \"./components/request-line-editor\";\nexport * from \"./components/segment-control\";\nexport * from \"./components/split-button\";\nexport * from \"./components/tag\";\nexport * from \"./components/tile\";\nexport * from \"./components/toolbar\";\nexport * from \"./components/tree-view\";\nexport * from \"./icons\";\nexport * from \"./shadcn/components/ui/accordion\";\nexport * from \"./shadcn/components/ui/alert\";\nexport * from \"./shadcn/components/ui/alert-dialog\";\nexport * from \"./shadcn/components/ui/aspect-ratio\";\nexport * from \"./shadcn/components/ui/avatar\";\nexport * from \"./shadcn/components/ui/badge\";\nexport * from \"./shadcn/components/ui/breadcrumb\";\nexport * from \"./shadcn/components/ui/button\";\nexport * from \"./shadcn/components/ui/calendar\";\nexport * from \"./shadcn/components/ui/card\";\nexport * from \"./shadcn/components/ui/carousel\";\nexport * from \"./shadcn/components/ui/chart\";\nexport * from \"./shadcn/components/ui/checkbox\";\nexport * from \"./shadcn/components/ui/collapsible\";\nexport * from \"./shadcn/components/ui/combobox\";\nexport * from \"./shadcn/components/ui/command\";\nexport * from \"./shadcn/components/ui/context-menu\";\nexport * from \"./shadcn/components/ui/dialog\";\nexport * from \"./shadcn/components/ui/drawer\";\nexport * from \"./shadcn/components/ui/dropdown-menu\";\nexport * from \"./shadcn/components/ui/form\";\nexport * from \"./shadcn/components/ui/hover-card\";\nexport * from \"./shadcn/components/ui/input\";\nexport * from \"./shadcn/components/ui/input-otp\";\nexport * from \"./shadcn/components/ui/label\";\nexport * from \"./shadcn/components/ui/menubar\";\nexport * from \"./shadcn/components/ui/navigation-menu\";\nexport * from \"./shadcn/components/ui/pagination\";\nexport * from \"./shadcn/components/ui/popover\";\nexport * from \"./shadcn/components/ui/progress\";\nexport * from \"./shadcn/components/ui/radio-group\";\nexport * from \"./shadcn/components/ui/resizable\";\nexport * from \"./shadcn/components/ui/scroll-area\";\nexport * from \"./shadcn/components/ui/select\";\nexport * from \"./shadcn/components/ui/separator\";\nexport * from \"./shadcn/components/ui/sheet\";\nexport * from \"./shadcn/components/ui/sidebar\";\nexport * from \"./shadcn/components/ui/skeleton\";\nexport * from \"./shadcn/components/ui/slider\";\nexport * from \"./shadcn/components/ui/sonner\";\nexport * from \"./shadcn/components/ui/switch\";\nexport * from \"./shadcn/components/ui/table\";\nexport * from \"./shadcn/components/ui/tabs\";\nexport * from \"./shadcn/components/ui/textarea\";\nexport * from \"./shadcn/components/ui/toggle\";\nexport * from \"./shadcn/components/ui/toggle-group\";\nexport * from \"./shadcn/components/ui/tooltip\";\nexport * from \"./shadcn/components/ui/tree\";\n// Hooks\nexport * from \"./shadcn/hooks/use-mobile\";\nexport * from \"./shadcn/lib/utils\";\n"],"names":["toast"],"mappings":"AAAA,oBAAoB;AACpB,SAA6BA,KAAK,QAAQ,SAAS;AACnD,cAAc,kCAA+B;AAC7C,cAAc,oCAA2B;AACzC,cAAc,4BAAyB;AACvC,cAAc,6BAA0B;AACxC,cAAc,oCAAiC;AAC/C,cAAc,sCAAmC;AACjD,cAAc,8BAA2B;AACzC,cAAc,yCAAsC;AACpD,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,+BAA4B;AAC1C,cAAc,sBAAmB;AACjC,cAAc,uBAAoB;AAClC,cAAc,0BAAuB;AACrC,cAAc,4BAAyB;AACvC,cAAc,aAAU;AACxB,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,yCAAsC;AACpD,cAAc,yCAAsC;AACpD,cAAc,mCAAgC;AAC9C,cAAc,kCAA+B;AAC7C,cAAc,uCAAoC;AAClD,cAAc,mCAAgC;AAC9C,cAAc,qCAAkC;AAChD,cAAc,iCAA8B;AAC5C,cAAc,qCAAkC;AAChD,cAAc,kCAA+B;AAC7C,cAAc,qCAAkC;AAChD,cAAc,wCAAqC;AACnD,cAAc,qCAAkC;AAChD,cAAc,oCAAiC;AAC/C,cAAc,yCAAsC;AACpD,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,0CAAuC;AACrD,cAAc,iCAA8B;AAC5C,cAAc,uCAAoC;AAClD,cAAc,kCAA+B;AAC7C,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,oCAAiC;AAC/C,cAAc,4CAAyC;AACvD,cAAc,uCAAoC;AAClD,cAAc,oCAAiC;AAC/C,cAAc,qCAAkC;AAChD,cAAc,wCAAqC;AACnD,cAAc,sCAAmC;AACjD,cAAc,wCAAqC;AACnD,cAAc,mCAAgC;AAC9C,cAAc,sCAAmC;AACjD,cAAc,kCAA+B;AAC7C,cAAc,oCAAiC;AAC/C,cAAc,qCAAkC;AAChD,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,mCAAgC;AAC9C,cAAc,kCAA+B;AAC7C,cAAc,iCAA8B;AAC5C,cAAc,qCAAkC;AAChD,cAAc,mCAAgC;AAC9C,cAAc,yCAAsC;AACpD,cAAc,oCAAiC;AAC/C,cAAc,iCAA8B;AAC5C,QAAQ;AACR,cAAc,+BAA4B;AAC1C,cAAc,wBAAqB"}
@@ -1,7 +1,7 @@
1
1
  import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
2
2
  import type { VariantProps } from "class-variance-authority";
3
3
  import * as React from "react";
4
- import type { buttonVariants } from "#shadcn/components/ui/button";
4
+ import type { buttonVariants } from "../../components/ui/button";
5
5
  declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
6
6
  declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
7
7
  declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { type DayButton, DayPicker } from "react-day-picker";
3
- import { Button } from "#shadcn/components/ui/button";
3
+ import { Button } from "../../components/ui/button";
4
4
  declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, formatters, components, ...props }: React.ComponentProps<typeof DayPicker> & {
5
5
  buttonVariant?: React.ComponentProps<typeof Button>["variant"];
6
6
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
2
2
  import * as React from "react";
3
- import { Button } from "#shadcn/components/ui/button";
3
+ import { Button } from "../../components/ui/button";
4
4
  type CarouselApi = UseEmblaCarouselType[1];
5
5
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
6
6
  type CarouselOptions = UseCarouselParameters[0];
@@ -25,15 +25,15 @@ declare function ChartStyle({ id, config }: {
25
25
  config: ChartConfig;
26
26
  }): import("react/jsx-runtime").JSX.Element | null;
27
27
  declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
28
- declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<"div"> & {
28
+ declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }: RechartsPrimitive.TooltipContentProps & React.ComponentProps<"div"> & {
29
29
  hideLabel?: boolean;
30
30
  hideIndicator?: boolean;
31
31
  indicator?: "line" | "dot" | "dashed";
32
32
  nameKey?: string;
33
33
  labelKey?: string;
34
34
  }): import("react/jsx-runtime").JSX.Element | null;
35
- declare const ChartLegend: typeof RechartsPrimitive.Legend;
36
- declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: React.ComponentProps<"div"> & Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
35
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
36
+ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: React.ComponentProps<"div"> & Pick<RechartsPrimitive.DefaultLegendContentProps, "payload" | "verticalAlign"> & {
37
37
  hideIcon?: boolean;
38
38
  nameKey?: string;
39
39
  }): import("react/jsx-runtime").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,UAAU,CAAC;AAK9C,QAAA,MAAM,MAAM;;;CAAwC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;KACxB,CAAC,IAAI,MAAM,GAAG;QACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;KAC3B,GAAG,CACD;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GACjC;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAC/D;CACD,CAAC;AAkBF,iBAAS,cAAc,CAAC,EACvB,EAAE,EACF,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACR,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,cAAc,CAC7B,OAAO,iBAAiB,CAAC,mBAAmB,CAC5C,CAAC,UAAU,CAAC,CAAC;CACd,2CAsBA;AAED,iBAAS,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,kDAgCtE;AAED,QAAA,MAAM,YAAY,kCAA4B,CAAC;AAE/C,iBAAS,mBAAmB,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAiB,EACjB,SAAiB,EACjB,aAAqB,EACrB,KAAK,EACL,cAAc,EACd,cAAc,EACd,SAAS,EACT,KAAK,EACL,OAAO,EACP,QAAQ,GACR,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC,GACxD,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,kDAyHD;AAED,QAAA,MAAM,WAAW,iCAA2B,CAAC;AAE7C,iBAAS,kBAAkB,CAAC,EAC3B,SAAS,EACT,QAAgB,EAChB,OAAO,EACP,aAAwB,EACxB,OAAO,GACP,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC7B,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,GAAG,eAAe,CAAC,GAAG;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,kDA0CD;AAyCD,OAAO,EACN,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,UAAU,GACV,CAAC"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,UAAU,CAAC;AAK9C,QAAA,MAAM,MAAM;;;CAAwC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;KACxB,CAAC,IAAI,MAAM,GAAG;QACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;KAC3B,GAAG,CACD;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GACjC;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAC/D;CACD,CAAC;AAkBF,iBAAS,cAAc,CAAC,EACvB,EAAE,EACF,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACR,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,cAAc,CAC7B,OAAO,iBAAiB,CAAC,mBAAmB,CAC5C,CAAC,UAAU,CAAC,CAAC;CACd,2CAsBA;AAED,iBAAS,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,kDAgCtE;AAED,QAAA,MAAM,YAAY,kCAA4B,CAAC;AAE/C,iBAAS,mBAAmB,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAiB,EACjB,SAAiB,EACjB,aAAqB,EACrB,KAAK,EACL,cAAc,EACd,cAAc,EACd,SAAS,EACT,KAAK,EACL,OAAO,EACP,QAAQ,GACR,EAAE,iBAAiB,CAAC,mBAAmB,GACvC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,kDAyHD;AAED,QAAA,MAAM,WAAW,sGAA2B,CAAC;AAE7C,iBAAS,kBAAkB,CAAC,EAC3B,SAAS,EACT,QAAgB,EAChB,OAAO,EACP,aAAwB,EACxB,OAAO,GACP,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC7B,IAAI,CACH,iBAAiB,CAAC,yBAAyB,EAC3C,SAAS,GAAG,eAAe,CAC3B,GAAG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,kDA0CD;AAyCD,OAAO,EACN,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,UAAU,GACV,CAAC"}
@@ -143,7 +143,7 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
143
143
  })
144
144
  ]
145
145
  })
146
- }, item.dataKey);
146
+ }, String(item.dataKey ?? index));
147
147
  })
148
148
  })
149
149
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\n\nimport { cn } from \"#shadcn/lib/utils\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useChart must be used within a <ChartContainer />\");\n\t}\n\n\treturn context;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<\n\t\ttypeof RechartsPrimitive.ResponsiveContainer\n\t>[\"children\"];\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nfunction ChartStyle({ id, config }: { id: string; config: ChartConfig }) {\n\tconst colorConfig = Object.entries(config).filter(\n\t\t([, config]) => config.theme || config.color,\n\t);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<style\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: FIXME: unchanged shadcn\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: Object.entries(THEMES)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t.map(([key, itemConfig]) => {\n\t\tconst color =\n\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n\t\t\titemConfig.color;\n\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t})\n\t.join(\"\\n\")}\n}\n`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = \"dot\",\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<\"div\"> & {\n\t\thideLabel?: boolean;\n\t\thideIndicator?: boolean;\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\";\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === \"string\"\n\t\t\t\t? config[label as keyof typeof config]?.label || label\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn(\"font-medium\", labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n\t}, [\n\t\tlabel,\n\t\tlabelFormatter,\n\t\tpayload,\n\t\thideLabel,\n\t\tlabelClassName,\n\t\tconfig,\n\t\tlabelKey,\n\t]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst indicatorColor = color || item.payload.fill || item.color;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.dataKey}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n\t\t\t\t\t\t\t\tindicator === \"dot\" && \"items-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"h-2.5 w-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent\":\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-bg\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-border\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"flex flex-1 justify-between leading-none\",\n\t\t\t\t\t\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{item.value && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = \"bottom\",\n\tnameKey,\n}: React.ComponentProps<\"div\"> &\n\tPick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n\t\thideIcon?: boolean;\n\t\tnameKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center gap-4\",\n\t\t\t\tverticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload.map((item) => {\n\t\t\t\tconst key = `${nameKey || item.dataKey || \"value\"}`;\n\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{itemConfig?.label}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== \"object\" || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload &&\n\t\ttypeof payload.payload === \"object\" &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string;\n\t}\n\n\treturn configLabelKey in config\n\t\t? config[configLabelKey]\n\t\t: config[key as keyof typeof config];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n"],"names":["React","RechartsPrimitive","cn","THEMES","light","dark","ChartContext","createContext","useChart","context","useContext","Error","ChartContainer","id","className","children","config","props","uniqueId","useId","chartId","replace","Provider","value","div","data-slot","data-chart","ChartStyle","ResponsiveContainer","colorConfig","Object","entries","filter","theme","color","length","style","dangerouslySetInnerHTML","__html","map","prefix","key","itemConfig","join","ChartTooltip","Tooltip","ChartTooltipContent","active","payload","indicator","hideLabel","hideIndicator","label","labelFormatter","labelClassName","formatter","nameKey","labelKey","tooltipLabel","useMemo","item","dataKey","name","getPayloadConfigFromPayload","nestLabel","index","indicatorColor","fill","undefined","icon","span","toLocaleString","ChartLegend","Legend","ChartLegendContent","hideIcon","verticalAlign","backgroundColor","payloadPayload","configLabelKey"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\n\nimport { cn } from \"#shadcn/lib/utils\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useChart must be used within a <ChartContainer />\");\n\t}\n\n\treturn context;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<\n\t\ttypeof RechartsPrimitive.ResponsiveContainer\n\t>[\"children\"];\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nfunction ChartStyle({ id, config }: { id: string; config: ChartConfig }) {\n\tconst colorConfig = Object.entries(config).filter(\n\t\t([, config]) => config.theme || config.color,\n\t);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<style\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: FIXME: unchanged shadcn\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: Object.entries(THEMES)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t.map(([key, itemConfig]) => {\n\t\tconst color =\n\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n\t\t\titemConfig.color;\n\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t})\n\t.join(\"\\n\")}\n}\n`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = \"dot\",\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: RechartsPrimitive.TooltipContentProps &\n\tReact.ComponentProps<\"div\"> & {\n\t\thideLabel?: boolean;\n\t\thideIndicator?: boolean;\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\";\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === \"string\"\n\t\t\t\t? config[label as keyof typeof config]?.label || label\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn(\"font-medium\", labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n\t}, [\n\t\tlabel,\n\t\tlabelFormatter,\n\t\tpayload,\n\t\thideLabel,\n\t\tlabelClassName,\n\t\tconfig,\n\t\tlabelKey,\n\t]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst indicatorColor = color || item.payload.fill || item.color;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={String(item.dataKey ?? index)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n\t\t\t\t\t\t\t\tindicator === \"dot\" && \"items-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"h-2.5 w-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent\":\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-bg\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-border\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"flex flex-1 justify-between leading-none\",\n\t\t\t\t\t\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{item.value && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = \"bottom\",\n\tnameKey,\n}: React.ComponentProps<\"div\"> &\n\tPick<\n\t\tRechartsPrimitive.DefaultLegendContentProps,\n\t\t\"payload\" | \"verticalAlign\"\n\t> & {\n\t\thideIcon?: boolean;\n\t\tnameKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center gap-4\",\n\t\t\t\tverticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload.map((item) => {\n\t\t\t\tconst key = `${nameKey || item.dataKey || \"value\"}`;\n\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{itemConfig?.label}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== \"object\" || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload &&\n\t\ttypeof payload.payload === \"object\" &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string;\n\t}\n\n\treturn configLabelKey in config\n\t\t? config[configLabelKey]\n\t\t: config[key as keyof typeof config];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n"],"names":["React","RechartsPrimitive","cn","THEMES","light","dark","ChartContext","createContext","useChart","context","useContext","Error","ChartContainer","id","className","children","config","props","uniqueId","useId","chartId","replace","Provider","value","div","data-slot","data-chart","ChartStyle","ResponsiveContainer","colorConfig","Object","entries","filter","theme","color","length","style","dangerouslySetInnerHTML","__html","map","prefix","key","itemConfig","join","ChartTooltip","Tooltip","ChartTooltipContent","active","payload","indicator","hideLabel","hideIndicator","label","labelFormatter","labelClassName","formatter","nameKey","labelKey","tooltipLabel","useMemo","item","dataKey","name","getPayloadConfigFromPayload","nestLabel","index","indicatorColor","fill","undefined","icon","span","toLocaleString","String","ChartLegend","Legend","ChartLegendContent","hideIcon","verticalAlign","backgroundColor","payloadPayload","configLabelKey"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Command as CommandPrimitive } from "cmdk";
2
2
  import type * as React from "react";
3
- import { Dialog } from "#shadcn/components/ui/dialog";
3
+ import { Dialog } from "../../components/ui/dialog";
4
4
  declare function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>): import("react/jsx-runtime").JSX.Element;
5
5
  declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: React.ComponentProps<typeof Dialog> & {
6
6
  title?: string;
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import { type Button } from "#shadcn/components/ui/button";
2
+ import { type Button } from "../../components/ui/button";
3
3
  declare function Pagination({ className, ...props }: React.ComponentProps<"nav">): import("react/jsx-runtime").JSX.Element;
4
4
  declare function PaginationContent({ className, ...props }: React.ComponentProps<"ul">): import("react/jsx-runtime").JSX.Element;
5
5
  declare function PaginationItem({ ...props }: React.ComponentProps<"li">): import("react/jsx-runtime").JSX.Element;