@flanksource/clicky-ui 0.2.7 → 0.2.9

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 (145) hide show
  1. package/dist/components/Combobox.cjs +89 -49
  2. package/dist/components/Combobox.cjs.map +1 -1
  3. package/dist/components/Combobox.d.ts +3 -0
  4. package/dist/components/Combobox.d.ts.map +1 -1
  5. package/dist/components/Combobox.js +91 -51
  6. package/dist/components/Combobox.js.map +1 -1
  7. package/dist/components/FilterBar.cjs +42 -44
  8. package/dist/components/FilterBar.cjs.map +1 -1
  9. package/dist/components/FilterBar.d.ts +19 -0
  10. package/dist/components/FilterBar.d.ts.map +1 -1
  11. package/dist/components/FilterBar.js +43 -45
  12. package/dist/components/FilterBar.js.map +1 -1
  13. package/dist/components/JsonSchemaForm.cjs +35 -0
  14. package/dist/components/JsonSchemaForm.cjs.map +1 -0
  15. package/dist/components/JsonSchemaForm.d.ts +3 -0
  16. package/dist/components/JsonSchemaForm.d.ts.map +1 -0
  17. package/dist/components/JsonSchemaForm.js +35 -0
  18. package/dist/components/JsonSchemaForm.js.map +1 -0
  19. package/dist/components/json-schema-form-array.cjs +169 -0
  20. package/dist/components/json-schema-form-array.cjs.map +1 -0
  21. package/dist/components/json-schema-form-array.d.ts +8 -0
  22. package/dist/components/json-schema-form-array.d.ts.map +1 -0
  23. package/dist/components/json-schema-form-array.js +169 -0
  24. package/dist/components/json-schema-form-array.js.map +1 -0
  25. package/dist/components/json-schema-form-fields.cjs +365 -0
  26. package/dist/components/json-schema-form-fields.cjs.map +1 -0
  27. package/dist/components/json-schema-form-fields.d.ts +19 -0
  28. package/dist/components/json-schema-form-fields.d.ts.map +1 -0
  29. package/dist/components/json-schema-form-fields.js +365 -0
  30. package/dist/components/json-schema-form-fields.js.map +1 -0
  31. package/dist/components/json-schema-form-render.cjs +154 -0
  32. package/dist/components/json-schema-form-render.cjs.map +1 -0
  33. package/dist/components/json-schema-form-render.d.ts +40 -0
  34. package/dist/components/json-schema-form-render.d.ts.map +1 -0
  35. package/dist/components/json-schema-form-render.js +154 -0
  36. package/dist/components/json-schema-form-render.js.map +1 -0
  37. package/dist/components/json-schema-form-resolve.cjs +121 -0
  38. package/dist/components/json-schema-form-resolve.cjs.map +1 -0
  39. package/dist/components/json-schema-form-resolve.d.ts +19 -0
  40. package/dist/components/json-schema-form-resolve.d.ts.map +1 -0
  41. package/dist/components/json-schema-form-resolve.js +121 -0
  42. package/dist/components/json-schema-form-resolve.js.map +1 -0
  43. package/dist/components/json-schema-form-types.d.ts +108 -0
  44. package/dist/components/json-schema-form-types.d.ts.map +1 -0
  45. package/dist/components.cjs +7 -0
  46. package/dist/components.cjs.map +1 -1
  47. package/dist/components.d.ts +3 -0
  48. package/dist/components.d.ts.map +1 -1
  49. package/dist/components.js +8 -1
  50. package/dist/components.js.map +1 -1
  51. package/dist/data/Clicky.cjs +1 -1
  52. package/dist/data/Clicky.cjs.map +1 -1
  53. package/dist/data/Clicky.js +1 -1
  54. package/dist/data/Clicky.js.map +1 -1
  55. package/dist/data/DataTable.cjs +16 -15
  56. package/dist/data/DataTable.cjs.map +1 -1
  57. package/dist/data/DataTable.d.ts +2 -1
  58. package/dist/data/DataTable.d.ts.map +1 -1
  59. package/dist/data/DataTable.js +16 -15
  60. package/dist/data/DataTable.js.map +1 -1
  61. package/dist/data/Icon.cjs +11 -0
  62. package/dist/data/Icon.cjs.map +1 -1
  63. package/dist/data/Icon.d.ts +12 -1
  64. package/dist/data/Icon.d.ts.map +1 -1
  65. package/dist/data/Icon.js +12 -1
  66. package/dist/data/Icon.js.map +1 -1
  67. package/dist/data/LogDetails.cjs +277 -0
  68. package/dist/data/LogDetails.cjs.map +1 -0
  69. package/dist/data/LogDetails.d.ts +5 -0
  70. package/dist/data/LogDetails.d.ts.map +1 -0
  71. package/dist/data/LogDetails.js +277 -0
  72. package/dist/data/LogDetails.js.map +1 -0
  73. package/dist/data/LogsTable.cjs +6 -202
  74. package/dist/data/LogsTable.cjs.map +1 -1
  75. package/dist/data/LogsTable.d.ts.map +1 -1
  76. package/dist/data/LogsTable.js +4 -200
  77. package/dist/data/LogsTable.js.map +1 -1
  78. package/dist/data/MatrixTable.cjs +17 -9
  79. package/dist/data/MatrixTable.cjs.map +1 -1
  80. package/dist/data/MatrixTable.d.ts +3 -1
  81. package/dist/data/MatrixTable.d.ts.map +1 -1
  82. package/dist/data/MatrixTable.js +17 -9
  83. package/dist/data/MatrixTable.js.map +1 -1
  84. package/dist/data/Properties.cjs +2 -2
  85. package/dist/data/Properties.cjs.map +1 -1
  86. package/dist/data/Properties.js +2 -2
  87. package/dist/data/Properties.js.map +1 -1
  88. package/dist/data/cells/TagList.cjs +19 -3
  89. package/dist/data/cells/TagList.cjs.map +1 -1
  90. package/dist/data/cells/TagList.d.ts +11 -1
  91. package/dist/data/cells/TagList.d.ts.map +1 -1
  92. package/dist/data/cells/TagList.js +19 -3
  93. package/dist/data/cells/TagList.js.map +1 -1
  94. package/dist/data/cells/Timestamp.cjs +17 -2
  95. package/dist/data/cells/Timestamp.cjs.map +1 -1
  96. package/dist/data/cells/Timestamp.d.ts +2 -0
  97. package/dist/data/cells/Timestamp.d.ts.map +1 -1
  98. package/dist/data/cells/Timestamp.js +17 -2
  99. package/dist/data/cells/Timestamp.js.map +1 -1
  100. package/dist/data/log-utils.cjs +7 -0
  101. package/dist/data/log-utils.cjs.map +1 -0
  102. package/dist/data/log-utils.d.ts +2 -0
  103. package/dist/data/log-utils.d.ts.map +1 -0
  104. package/dist/data/log-utils.js +7 -0
  105. package/dist/data/log-utils.js.map +1 -0
  106. package/dist/data.cjs +3 -0
  107. package/dist/data.cjs.map +1 -1
  108. package/dist/data.d.ts +2 -2
  109. package/dist/data.d.ts.map +1 -1
  110. package/dist/data.js +5 -2
  111. package/dist/index.cjs +13 -0
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.js +15 -2
  114. package/dist/index.js.map +1 -1
  115. package/dist/rpc/EntityExplorerApp.cjs +3 -2
  116. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  117. package/dist/rpc/EntityExplorerApp.js +3 -2
  118. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  119. package/dist/rpc/OperationActionDialog.cjs +1 -1
  120. package/dist/rpc/OperationActionDialog.cjs.map +1 -1
  121. package/dist/rpc/OperationActionDialog.js +1 -1
  122. package/dist/rpc/OperationActionDialog.js.map +1 -1
  123. package/dist/rpc/OperationCommandPage.cjs +21 -14
  124. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  125. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  126. package/dist/rpc/OperationCommandPage.js +21 -14
  127. package/dist/rpc/OperationCommandPage.js.map +1 -1
  128. package/dist/rpc/apiClient.cjs +316 -0
  129. package/dist/rpc/apiClient.cjs.map +1 -0
  130. package/dist/rpc/apiClient.d.ts +44 -0
  131. package/dist/rpc/apiClient.d.ts.map +1 -0
  132. package/dist/rpc/apiClient.js +316 -0
  133. package/dist/rpc/apiClient.js.map +1 -0
  134. package/dist/rpc/useOperations.cjs.map +1 -1
  135. package/dist/rpc/useOperations.d.ts +2 -1
  136. package/dist/rpc/useOperations.d.ts.map +1 -1
  137. package/dist/rpc/useOperations.js.map +1 -1
  138. package/dist/rpc.cjs +3 -0
  139. package/dist/rpc.cjs.map +1 -1
  140. package/dist/rpc.d.ts +1 -0
  141. package/dist/rpc.d.ts.map +1 -1
  142. package/dist/rpc.js +3 -0
  143. package/dist/rpc.js.map +1 -1
  144. package/dist/styles.css +1 -1
  145. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.cjs","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelative(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\nfunction formatRelative(date: Date, now: Date): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":["jsx","cn"],"mappings":"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"}
1
+ {"version":3,"file":"Timestamp.cjs","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelativeTime(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\n// formatRelativeTime renders a compact \"30s ago\" / \"in 5m\" / \"just now\" string.\nexport function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\n// formatDateTimeRelative renders a value as an absolute locale date+time plus a\n// parenthesised relative hint, e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\". It is the\n// shared \"locale + relative\" presentation used for date-typed values across the\n// form, filter, and combobox surfaces. Unparseable strings pass through\n// unchanged (so a template token or freeform value is preserved); nullish input\n// yields an empty string. The hint is dropped when the value reads \"just now\".\nexport function formatDateTimeRelative(value: unknown, now: Date = new Date()): string {\n const parsed = parseTimestamp(value);\n if (!parsed) return typeof value === \"string\" ? value : \"\";\n const absolute = parsed.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const relative = formatRelativeTime(parsed, now);\n return relative === \"just now\" ? absolute : `${absolute} (${relative})`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":["jsx","cn"],"mappings":"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"}
@@ -45,6 +45,8 @@ export declare function parseTimestamp(value: unknown): Date | null;
45
45
  export declare function resolveDateMath(value: unknown, now?: Date): Date | null;
46
46
  export declare function chooseTimestampFormat(values: Date[]): TimestampFormat;
47
47
  export declare function formatTimestamp(date: Date, format: TimestampFormat, now?: Date): string;
48
+ export declare function formatRelativeTime(date: Date, now?: Date): string;
49
+ export declare function formatDateTimeRelative(value: unknown, now?: Date): string;
48
50
  export declare function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat;
49
51
  export type TimestampProps = {
50
52
  value: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../src/data/cells/Timestamp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC,CAAC;IACzF,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAkB1D;AAaD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,GAAG,IAAI,CAkCnF;AA4CD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CA8BrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAqBR;AA4BD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,eAAe,CAY9F;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAuB,EAAE,SAAS,EAAE,EAAE,cAAc,2CAe9F"}
1
+ {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../src/data/cells/Timestamp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC,CAAC;IACzF,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAkB1D;AAaD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,GAAG,IAAI,CAkCnF;AA4CD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CA8BrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAqBR;AAYD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAe7E;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAYrF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,eAAe,CAY9F;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAuB,EAAE,SAAS,EAAE,EAAE,cAAc,2CAe9F"}
@@ -116,7 +116,7 @@ function chooseTimestampFormat(values) {
116
116
  function formatTimestamp(date, format, now = /* @__PURE__ */ new Date()) {
117
117
  switch (format) {
118
118
  case "relative":
119
- return formatRelative(date, now);
119
+ return formatRelativeTime(date, now);
120
120
  case "time":
121
121
  return date.toLocaleTimeString(void 0, {
122
122
  hour: "2-digit",
@@ -143,7 +143,7 @@ function formatIso(date) {
143
143
  const min = String(date.getMinutes()).padStart(2, "0");
144
144
  return `${yyyy}-${mm}-${dd} ${hh}:${min}`;
145
145
  }
146
- function formatRelative(date, now) {
146
+ function formatRelativeTime(date, now = /* @__PURE__ */ new Date()) {
147
147
  const diffMs = now.getTime() - date.getTime();
148
148
  const future = diffMs < 0;
149
149
  const abs = Math.abs(diffMs);
@@ -157,6 +157,19 @@ function formatRelative(date, now) {
157
157
  if (value === "just now") return value;
158
158
  return future ? `in ${value}` : `${value} ago`;
159
159
  }
160
+ function formatDateTimeRelative(value, now = /* @__PURE__ */ new Date()) {
161
+ const parsed = parseTimestamp(value);
162
+ if (!parsed) return typeof value === "string" ? value : "";
163
+ const absolute = parsed.toLocaleString(void 0, {
164
+ year: "numeric",
165
+ month: "short",
166
+ day: "numeric",
167
+ hour: "2-digit",
168
+ minute: "2-digit"
169
+ });
170
+ const relative = formatRelativeTime(parsed, now);
171
+ return relative === "just now" ? absolute : `${absolute} (${relative})`;
172
+ }
160
173
  function modeToFormat(mode, dataFormat) {
161
174
  switch (mode) {
162
175
  case "absolute":
@@ -187,6 +200,8 @@ function Timestamp({ value, format, showTitleOnHover = true, className }) {
187
200
  export {
188
201
  Timestamp,
189
202
  chooseTimestampFormat,
203
+ formatDateTimeRelative,
204
+ formatRelativeTime,
190
205
  formatTimestamp,
191
206
  modeToFormat,
192
207
  parseTimestamp,
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.js","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelative(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\nfunction formatRelative(date: Date, now: Date): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Timestamp.js","sources":["../../../src/data/cells/Timestamp.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelativeTime(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\n// formatRelativeTime renders a compact \"30s ago\" / \"in 5m\" / \"just now\" string.\nexport function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\n// formatDateTimeRelative renders a value as an absolute locale date+time plus a\n// parenthesised relative hint, e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\". It is the\n// shared \"locale + relative\" presentation used for date-typed values across the\n// form, filter, and combobox surfaces. Unparseable strings pass through\n// unchanged (so a template token or freeform value is preserved); nullish input\n// yields an empty string. The hint is dropped when the value reads \"just now\".\nexport function formatDateTimeRelative(value: unknown, now: Date = new Date()): string {\n const parsed = parseTimestamp(value);\n if (!parsed) return typeof value === \"string\" ? value : \"\";\n const absolute = parsed.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const relative = formatRelativeTime(parsed, now);\n return relative === \"just now\" ? absolute : `${absolute} (${relative})`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n\nexport type TimestampProps = {\n value: unknown;\n format: TimestampFormat;\n showTitleOnHover?: boolean;\n className?: string;\n};\n\nexport function Timestamp({ value, format, showTitleOnHover = true, className }: TimestampProps) {\n const parsed = parseTimestamp(value);\n if (!parsed) return <span className={cn(\"text-muted-foreground\", className)}>—</span>;\n\n const display = formatTimestamp(parsed, format);\n const title = showTitleOnHover ? parsed.toISOString() : undefined;\n\n return (\n <span\n className={cn(\"tabular-nums whitespace-nowrap text-muted-foreground\", className)}\n title={title}\n >\n {display}\n </span>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function asRecord(value) {
4
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
5
+ }
6
+ exports.asRecord = asRecord;
7
+ //# sourceMappingURL=log-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-utils.cjs","sources":["../../src/data/log-utils.ts"],"sourcesContent":["export function asRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n"],"names":[],"mappings":";;AAAO,SAAS,SAAS,OAAqD;AAC5E,SAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC5D,QACD;AACN;;"}
@@ -0,0 +1,2 @@
1
+ export declare function asRecord(value: unknown): Record<string, unknown> | undefined;
2
+ //# sourceMappingURL=log-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-utils.d.ts","sourceRoot":"","sources":["../../src/data/log-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAI5E"}
@@ -0,0 +1,7 @@
1
+ function asRecord(value) {
2
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
3
+ }
4
+ export {
5
+ asRecord
6
+ };
7
+ //# sourceMappingURL=log-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-utils.js","sources":["../../src/data/log-utils.ts"],"sourcesContent":["export function asRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n"],"names":[],"mappings":"AAAO,SAAS,SAAS,OAAqD;AAC5E,SAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC5D,QACD;AACN;"}
package/dist/data.cjs CHANGED
@@ -319,6 +319,8 @@ exports.DataTable = DataTable.DataTable;
319
319
  exports.inferColumns = DataTable.inferColumns;
320
320
  exports.Timestamp = Timestamp.Timestamp;
321
321
  exports.chooseTimestampFormat = Timestamp.chooseTimestampFormat;
322
+ exports.formatDateTimeRelative = Timestamp.formatDateTimeRelative;
323
+ exports.formatRelativeTime = Timestamp.formatRelativeTime;
322
324
  exports.formatTimestamp = Timestamp.formatTimestamp;
323
325
  exports.modeToFormat = Timestamp.modeToFormat;
324
326
  exports.parseTimestamp = Timestamp.parseTimestamp;
@@ -338,6 +340,7 @@ exports.FilterPillGroup = FilterPill.FilterPillGroup;
338
340
  exports.FilterSeparator = FilterPill.FilterSeparator;
339
341
  exports.Gauge = Gauge.Gauge;
340
342
  exports.Icon = Icon.Icon;
343
+ exports.LabelIcon = Icon.LabelIcon;
341
344
  exports.setFallbackIconProvider = Icon.setFallbackIconProvider;
342
345
  exports.JsonView = JsonView.JsonView;
343
346
  exports.KeyValueList = KeyValueList.KeyValueList;
package/dist/data.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/data.d.ts CHANGED
@@ -4,13 +4,13 @@ export { AvatarBadge, type AvatarBadgeProps } from './data/AvatarBadge';
4
4
  export { Badge, badgeVariants, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeStatus, type BadgeTone, type BadgeTruncate, type BadgeVariant, } from './data/Badge';
5
5
  export { CodeBlock, type CodeBlockProps } from './data/CodeBlock';
6
6
  export { DataTable, inferColumns, type DataTableColumn, type DataTableColumnInput, type DataTableColumnKind, type DataTableProps, type StatusOptions, type TagsOptions, type TimestampOptions, } from './data/DataTable';
7
- export { Timestamp, chooseTimestampFormat, formatTimestamp, parseTimestamp, modeToFormat, type TimestampFormat, type TimestampMode, type TimestampProps, } from './data/cells/Timestamp';
7
+ export { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, parseTimestamp, modeToFormat, type TimestampFormat, type TimestampMode, type TimestampProps, } from './data/cells/Timestamp';
8
8
  export { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue, type NormalizedTag, type TagActionsContextValue, type TagFilterMode, type TagInput, type TagListProps, type TagsValue, } from './data/cells/TagList';
9
9
  export { StatusDot, type StatusDotProps, type StatusDotSize } from './data/cells/StatusDot';
10
10
  export { normalizeStatus, STATUS_TOKEN_GROUPS } from './data/cells/status-mapping';
11
11
  export { FilterPill, FilterPillGroup, FilterSeparator, type FilterPillProps, type FilterPillGroupProps, type FilterMode, } from './data/FilterPill';
12
12
  export { Gauge, type GaugeProps, type GaugeTone } from './data/Gauge';
13
- export { Icon, setFallbackIconProvider, type FallbackIconProps, type IconProps, type IconStyle, type IconTone, type StaticIconComponent, } from './data/Icon';
13
+ export { Icon, LabelIcon, setFallbackIconProvider, type FallbackIconProps, type IconProps, type IconStyle, type IconTone, type LabelIconSpec, type StaticIconComponent, } from './data/Icon';
14
14
  export * from './icons';
15
15
  export { JsonView, type JsonViewProps } from './data/JsonView';
16
16
  export { KeyValueList, type KeyValueListItem, type KeyValueListProps } from './data/KeyValueList';
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
package/dist/data.js CHANGED
@@ -4,13 +4,13 @@ import { AvatarBadge } from "./data/AvatarBadge.js";
4
4
  import { Badge, badgeVariants } from "./data/Badge.js";
5
5
  import { CodeBlock } from "./data/CodeBlock.js";
6
6
  import { DataTable, inferColumns } from "./data/DataTable.js";
7
- import { Timestamp, chooseTimestampFormat, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
7
+ import { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
8
8
  import { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue } from "./data/cells/TagList.js";
9
9
  import { StatusDot } from "./data/cells/StatusDot.js";
10
10
  import { STATUS_TOKEN_GROUPS, normalizeStatus } from "./data/cells/status-mapping.js";
11
11
  import { FilterPill, FilterPillGroup, FilterSeparator } from "./data/FilterPill.js";
12
12
  import { Gauge } from "./data/Gauge.js";
13
- import { Icon, setFallbackIconProvider } from "./data/Icon.js";
13
+ import { Icon, LabelIcon, setFallbackIconProvider } from "./data/Icon.js";
14
14
  import { JsonView } from "./data/JsonView.js";
15
15
  import { KeyValueList } from "./data/KeyValueList.js";
16
16
  import { Properties } from "./data/Properties.js";
@@ -329,6 +329,7 @@ export {
329
329
  JvmStackFrameRow,
330
330
  JvmStackTrace,
331
331
  KeyValueList,
332
+ LabelIcon,
332
333
  LogViewer,
333
334
  LogsTable,
334
335
  Markdown,
@@ -858,7 +859,9 @@ export {
858
859
  deriveCoreBars,
859
860
  detectDumpFormat,
860
861
  findProcessByPID,
862
+ formatDateTimeRelative,
861
863
  formatPropertyLabel,
864
+ formatRelativeTime,
862
865
  formatTimestamp,
863
866
  frameHasSource,
864
867
  getChangeIcon,
package/dist/index.cjs CHANGED
@@ -24,6 +24,8 @@ const Combobox = require("./components/Combobox.cjs");
24
24
  const themeSwitcher = require("./components/theme-switcher.cjs");
25
25
  const densitySwitcher = require("./components/density-switcher.cjs");
26
26
  const iconMenuPicker = require("./components/icon-menu-picker.cjs");
27
+ const JsonSchemaForm = require("./components/JsonSchemaForm.cjs");
28
+ const jsonSchemaFormResolve = require("./components/json-schema-form-resolve.cjs");
27
29
  const SplitPane = require("./layout/SplitPane.cjs");
28
30
  const Section = require("./layout/Section.cjs");
29
31
  const DropdownMenu = require("./overlay/DropdownMenu.cjs");
@@ -91,6 +93,7 @@ const OperationEntityPage = require("./rpc/OperationEntityPage.cjs");
91
93
  const OperationCommandPage = require("./rpc/OperationCommandPage.cjs");
92
94
  const EndpointList = require("./rpc/EndpointList.cjs");
93
95
  const useOperations = require("./rpc/useOperations.cjs");
96
+ const apiClient = require("./rpc/apiClient.cjs");
94
97
  const classify = require("./rpc/classify.cjs");
95
98
  const types = require("./rpc/types.cjs");
96
99
  const UiActivity = require("./icons/components/UiActivity.cjs");
@@ -392,6 +395,11 @@ exports.Combobox = Combobox.Combobox;
392
395
  exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
393
396
  exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
394
397
  exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
398
+ exports.JsonSchemaForm = JsonSchemaForm.JsonSchemaForm;
399
+ exports.effectiveProperties = jsonSchemaFormResolve.effectiveProperties;
400
+ exports.isOpenStringMap = jsonSchemaFormResolve.isOpenStringMap;
401
+ exports.matchesIf = jsonSchemaFormResolve.matchesIf;
402
+ exports.resolveControl = jsonSchemaFormResolve.resolveControl;
395
403
  exports.SplitPane = SplitPane.SplitPane;
396
404
  exports.DetailEmptyState = Section.DetailEmptyState;
397
405
  exports.Section = Section.Section;
@@ -408,6 +416,8 @@ exports.DataTable = DataTable.DataTable;
408
416
  exports.inferColumns = DataTable.inferColumns;
409
417
  exports.Timestamp = Timestamp.Timestamp;
410
418
  exports.chooseTimestampFormat = Timestamp.chooseTimestampFormat;
419
+ exports.formatDateTimeRelative = Timestamp.formatDateTimeRelative;
420
+ exports.formatRelativeTime = Timestamp.formatRelativeTime;
411
421
  exports.formatTimestamp = Timestamp.formatTimestamp;
412
422
  exports.modeToFormat = Timestamp.modeToFormat;
413
423
  exports.parseTimestamp = Timestamp.parseTimestamp;
@@ -427,6 +437,7 @@ exports.FilterPillGroup = FilterPill.FilterPillGroup;
427
437
  exports.FilterSeparator = FilterPill.FilterSeparator;
428
438
  exports.Gauge = Gauge.Gauge;
429
439
  exports.Icon = Icon.Icon;
440
+ exports.LabelIcon = Icon.LabelIcon;
430
441
  exports.setFallbackIconProvider = Icon.setFallbackIconProvider;
431
442
  exports.JsonView = JsonView.JsonView;
432
443
  exports.KeyValueList = KeyValueList.KeyValueList;
@@ -512,6 +523,8 @@ exports.EndpointList = EndpointList.EndpointList;
512
523
  exports.useOpenAPI = useOperations.useOpenAPI;
513
524
  exports.useOperationById = useOperations.useOperationById;
514
525
  exports.useOperations = useOperations.useOperations;
526
+ exports.OperationsApiClientError = apiClient.OperationsApiClientError;
527
+ exports.createOperationsApiClient = apiClient.createOperationsApiClient;
515
528
  exports.filterOperationsByDomain = classify.filterOperationsByDomain;
516
529
  exports.findDetailEndpoint = classify.findDetailEndpoint;
517
530
  exports.findListEndpoint = classify.findListEndpoint;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -22,6 +22,8 @@ import { Combobox } from "./components/Combobox.js";
22
22
  import { ThemeSwitcher } from "./components/theme-switcher.js";
23
23
  import { DensitySwitcher } from "./components/density-switcher.js";
24
24
  import { IconMenuPicker } from "./components/icon-menu-picker.js";
25
+ import { JsonSchemaForm } from "./components/JsonSchemaForm.js";
26
+ import { effectiveProperties, isOpenStringMap, matchesIf, resolveControl } from "./components/json-schema-form-resolve.js";
25
27
  import { SplitPane } from "./layout/SplitPane.js";
26
28
  import { DetailEmptyState, Section } from "./layout/Section.js";
27
29
  import { DropdownMenu } from "./overlay/DropdownMenu.js";
@@ -33,13 +35,13 @@ import { AvatarBadge } from "./data/AvatarBadge.js";
33
35
  import { Badge, badgeVariants } from "./data/Badge.js";
34
36
  import { CodeBlock } from "./data/CodeBlock.js";
35
37
  import { DataTable, inferColumns } from "./data/DataTable.js";
36
- import { Timestamp, chooseTimestampFormat, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
38
+ import { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
37
39
  import { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue } from "./data/cells/TagList.js";
38
40
  import { StatusDot } from "./data/cells/StatusDot.js";
39
41
  import { STATUS_TOKEN_GROUPS, normalizeStatus } from "./data/cells/status-mapping.js";
40
42
  import { FilterPill, FilterPillGroup, FilterSeparator } from "./data/FilterPill.js";
41
43
  import { Gauge } from "./data/Gauge.js";
42
- import { Icon, setFallbackIconProvider } from "./data/Icon.js";
44
+ import { Icon, LabelIcon, setFallbackIconProvider } from "./data/Icon.js";
43
45
  import { JsonView } from "./data/JsonView.js";
44
46
  import { KeyValueList } from "./data/KeyValueList.js";
45
47
  import { Properties } from "./data/Properties.js";
@@ -89,6 +91,7 @@ import { OperationEntityPage } from "./rpc/OperationEntityPage.js";
89
91
  import { OperationCommandPage } from "./rpc/OperationCommandPage.js";
90
92
  import { EndpointList } from "./rpc/EndpointList.js";
91
93
  import { useOpenAPI, useOperationById, useOperations } from "./rpc/useOperations.js";
94
+ import { OperationsApiClientError, createOperationsApiClient } from "./rpc/apiClient.js";
92
95
  import { filterOperationsByDomain, findDetailEndpoint, findListEndpoint, normalizeRows, parseJsonBody } from "./rpc/classify.js";
93
96
  import { isPositionalParam } from "./rpc/types.js";
94
97
  import { UiActivity } from "./icons/components/UiActivity.js";
@@ -395,10 +398,12 @@ export {
395
398
  Icon,
396
399
  IconMenuPicker,
397
400
  InlineError,
401
+ JsonSchemaForm,
398
402
  JsonView,
399
403
  JvmStackFrameRow,
400
404
  JvmStackTrace,
401
405
  KeyValueList,
406
+ LabelIcon,
402
407
  LogViewer,
403
408
  LogsTable,
404
409
  Markdown,
@@ -410,6 +415,7 @@ export {
410
415
  OperationCatalog,
411
416
  OperationCommandPage,
412
417
  OperationEntityPage,
418
+ OperationsApiClientError,
413
419
  PrettyStackTrace,
414
420
  ProgressBar,
415
421
  Properties,
@@ -943,8 +949,10 @@ export {
943
949
  countProcesses,
944
950
  countStackByState,
945
951
  countThreadsByState,
952
+ createOperationsApiClient,
946
953
  deriveCoreBars,
947
954
  detectDumpFormat,
955
+ effectiveProperties,
948
956
  filterOperationsByDomain,
949
957
  findDetailEndpoint,
950
958
  findListEndpoint,
@@ -952,8 +960,10 @@ export {
952
960
  fnv1a32,
953
961
  formatBytes,
954
962
  formatBytesPerSecond,
963
+ formatDateTimeRelative,
955
964
  formatDuration,
956
965
  formatPropertyLabel,
966
+ formatRelativeTime,
957
967
  formatShort,
958
968
  formatTimestamp,
959
969
  formatUnit,
@@ -961,9 +971,11 @@ export {
961
971
  getChangeIcon,
962
972
  inferColumns,
963
973
  isApplicationStackFrame,
974
+ isOpenStringMap,
964
975
  isPositionalParam,
965
976
  isTerminalStatus,
966
977
  logLevelColor,
978
+ matchesIf,
967
979
  modeToFormat,
968
980
  normalizeErrorDiagnostics,
969
981
  normalizeLogsTableRows,
@@ -983,6 +995,7 @@ export {
983
995
  processStateColor,
984
996
  processStateIcon,
985
997
  resolveBreakdown,
998
+ resolveControl,
986
999
  resolveSeries,
987
1000
  resolveSize,
988
1001
  segment,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -246,7 +246,8 @@ function UnknownSurface({ surfaceKey }) {
246
246
  /* @__PURE__ */ jsxRuntime.jsx("code", { children: surfaceKey })
247
247
  ] });
248
248
  }
249
- const AUTORUN_QUERY_PARAM = "__autoRun";
249
+ const AUTORUN_QUERY_PARAM = "autoRun";
250
+ const LEGACY_AUTORUN_QUERY_PARAM = "__autoRun";
250
251
  const ARG_QUERY_PREFIX = "__arg";
251
252
  function buildCommandHref(basePath, resolved) {
252
253
  var _a, _b;
@@ -335,7 +336,7 @@ function readCommandQueryParams() {
335
336
  let autoRun = false;
336
337
  const positional = [];
337
338
  for (const [key, value] of search.entries()) {
338
- if (key === AUTORUN_QUERY_PARAM) {
339
+ if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {
339
340
  autoRun = value === "1" || value === "true";
340
341
  continue;
341
342
  }