@pyric/ui 0.1.0-alpha.7 → 0.1.0-alpha.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 (117) hide show
  1. package/LICENSE +216 -0
  2. package/dist/auth/components/AuthUserList.d.ts +15 -4
  3. package/dist/auth/components/AuthUserList.d.ts.map +1 -1
  4. package/dist/auth/components/AuthUserList.js +3 -3
  5. package/dist/auth/components/AuthUserList.js.map +1 -1
  6. package/dist/firestore/components/DocumentList.d.ts +5 -2
  7. package/dist/firestore/components/DocumentList.d.ts.map +1 -1
  8. package/dist/firestore/components/DocumentList.js +17 -3
  9. package/dist/firestore/components/DocumentList.js.map +1 -1
  10. package/dist/firestore/firestoreApi.d.ts +2 -2
  11. package/dist/firestore/firestoreApi.d.ts.map +1 -1
  12. package/dist/firestore/firestoreApi.js +2 -1
  13. package/dist/firestore/firestoreApi.js.map +1 -1
  14. package/dist/firestore/hooks/useDocumentEditor.d.ts +7 -4
  15. package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -1
  16. package/dist/firestore/hooks/useDocumentEditor.js +7 -4
  17. package/dist/firestore/hooks/useDocumentEditor.js.map +1 -1
  18. package/dist/firestore/hooks/useDocumentList.d.ts +18 -13
  19. package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -1
  20. package/dist/firestore/hooks/useDocumentList.js +77 -27
  21. package/dist/firestore/hooks/useDocumentList.js.map +1 -1
  22. package/dist/firestore/hooks/useFirestoreCollection.d.ts +1 -1
  23. package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -1
  24. package/dist/firestore/hooks/useFirestoreCollection.js +3 -2
  25. package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -1
  26. package/dist/firestore/hooks/useFirestoreDoc.d.ts +1 -1
  27. package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -1
  28. package/dist/firestore/hooks/useFirestoreDoc.js +3 -2
  29. package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -1
  30. package/dist/firestore/index.d.ts +1 -0
  31. package/dist/firestore/index.d.ts.map +1 -1
  32. package/dist/firestore/index.js +1 -0
  33. package/dist/firestore/index.js.map +1 -1
  34. package/dist/firestore/reducers/documentEditor.d.ts.map +1 -1
  35. package/dist/firestore/reducers/documentEditor.js +2 -0
  36. package/dist/firestore/reducers/documentEditor.js.map +1 -1
  37. package/dist/firestore/reducers/types.d.ts +3 -0
  38. package/dist/firestore/reducers/types.d.ts.map +1 -1
  39. package/dist/firestore/valueEquality.d.ts +4 -0
  40. package/dist/firestore/valueEquality.d.ts.map +1 -0
  41. package/dist/firestore/valueEquality.js +44 -0
  42. package/dist/firestore/valueEquality.js.map +1 -0
  43. package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
  44. package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
  45. package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
  46. package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
  47. package/dist/primitives/index.d.ts +1 -0
  48. package/dist/primitives/index.d.ts.map +1 -1
  49. package/dist/primitives/index.js +1 -0
  50. package/dist/primitives/index.js.map +1 -1
  51. package/dist/rtdb/components/RtdbTree.js +2 -1
  52. package/dist/rtdb/components/RtdbTree.js.map +1 -1
  53. package/dist/rtdb/hooks/useRtdbTree.d.ts +2 -0
  54. package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -1
  55. package/dist/rtdb/hooks/useRtdbTree.js +20 -2
  56. package/dist/rtdb/hooks/useRtdbTree.js.map +1 -1
  57. package/dist/rtdb/values.d.ts +6 -0
  58. package/dist/rtdb/values.d.ts.map +1 -1
  59. package/dist/rtdb/values.js +43 -0
  60. package/dist/rtdb/values.js.map +1 -1
  61. package/dist/rules/hooks/useDenialTrace.d.ts +1 -1
  62. package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -1
  63. package/dist/rules/hooks/useDenialTrace.js +1 -1
  64. package/dist/rules/hooks/useDenialTrace.js.map +1 -1
  65. package/dist/rules/types.d.ts +1 -1
  66. package/dist/rules/types.d.ts.map +1 -1
  67. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +0 -2
  68. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -1
  69. package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -1
  70. package/dist/storage/components/ObjectBrowser.d.ts +6 -3
  71. package/dist/storage/components/ObjectBrowser.d.ts.map +1 -1
  72. package/dist/storage/components/ObjectBrowser.js +6 -5
  73. package/dist/storage/components/ObjectBrowser.js.map +1 -1
  74. package/dist/storage/components/ObjectInspector.d.ts +1 -1
  75. package/dist/storage/components/ObjectInspector.d.ts.map +1 -1
  76. package/dist/storage/folderPlaceholder.d.ts +9 -3
  77. package/dist/storage/folderPlaceholder.d.ts.map +1 -1
  78. package/dist/storage/folderPlaceholder.js +12 -5
  79. package/dist/storage/folderPlaceholder.js.map +1 -1
  80. package/dist/storage/hooks/useObjectUpload.d.ts +5 -9
  81. package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -1
  82. package/dist/storage/hooks/useObjectUpload.js.map +1 -1
  83. package/dist/storage/hooks/useStorageDelete.d.ts +2 -1
  84. package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -1
  85. package/dist/storage/hooks/useStorageDelete.js +19 -13
  86. package/dist/storage/hooks/useStorageDelete.js.map +1 -1
  87. package/dist/storage/hooks/useStorageList.d.ts +5 -7
  88. package/dist/storage/hooks/useStorageList.d.ts.map +1 -1
  89. package/dist/storage/hooks/useStorageList.js +5 -8
  90. package/dist/storage/hooks/useStorageList.js.map +1 -1
  91. package/dist/storage/hooks/useStorageObject.d.ts +4 -5
  92. package/dist/storage/hooks/useStorageObject.d.ts.map +1 -1
  93. package/dist/storage/hooks/useStorageObject.js.map +1 -1
  94. package/dist/storage/hooks/useStorageRulesGate.d.ts +5 -17
  95. package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -1
  96. package/dist/storage/hooks/useStorageRulesGate.js +35 -43
  97. package/dist/storage/hooks/useStorageRulesGate.js.map +1 -1
  98. package/dist/storage/pendingPrefixes.d.ts +7 -3
  99. package/dist/storage/pendingPrefixes.d.ts.map +1 -1
  100. package/dist/storage/pendingPrefixes.js +9 -3
  101. package/dist/storage/pendingPrefixes.js.map +1 -1
  102. package/dist/storage/storageApi.d.ts +1 -1
  103. package/dist/storage/storageApi.d.ts.map +1 -1
  104. package/dist/storage/storageApi.js +9 -2
  105. package/dist/storage/storageApi.js.map +1 -1
  106. package/dist/traffic/components/TrafficLineChart.d.ts +4 -1
  107. package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -1
  108. package/dist/traffic/components/TrafficLineChart.js +3 -3
  109. package/dist/traffic/components/TrafficLineChart.js.map +1 -1
  110. package/dist/traffic/components/TrafficRow.js +1 -1
  111. package/dist/traffic/components/TrafficRow.js.map +1 -1
  112. package/dist/traffic/components/TrafficTimeline.d.ts +12 -5
  113. package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -1
  114. package/dist/traffic/components/TrafficTimeline.js +20 -6
  115. package/dist/traffic/components/TrafficTimeline.js.map +1 -1
  116. package/dist/traffic/hooks/useTrafficMetrics.js +1 -1
  117. package/package.json +17 -6
@@ -1 +1 @@
1
- {"version":3,"file":"storageApi.js","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA2BhF,MAAM,mBAAmB,GAAe,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAE5F,MAAM,iBAAiB,GAAG,aAAa,CAAa,mBAAmB,CAAC,CAAC;AAEzE,mFAAmF;AACnF,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"storageApi.js","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AA2B9F,MAAM,mBAAmB,GAAe;IACtC,GAAG;IACH,OAAO;IACP,WAAW;IACX,OAAO;IACP,WAAW;IACX,YAAY;CACb,CAAC;AAEF,MAAM,iBAAiB,GAAG,aAAa,CAAa,mBAAmB,CAAC,CAAC;AAEzE,mFAAmF;AACnF,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC"}
@@ -6,6 +6,9 @@ export interface TrafficLineChartProps {
6
6
  * {@link TrafficMetricCards}' `visible`/`onToggle` so the legend cards
7
7
  * and the chart's lines toggle in lockstep. */
8
8
  visible?: ReadonlySet<string>;
9
+ /** Omit all-zero series from the plot and tooltip while retaining their
10
+ * explicit total in the accompanying metric strip. */
11
+ omitZeroSeries?: boolean;
9
12
  formatValue?: (n: number) => string;
10
13
  formatTime?: (t: number) => string;
11
14
  emptyState?: React.ReactNode;
@@ -30,5 +33,5 @@ export interface TrafficLineChartProps {
30
33
  * `[data-pyric-chart-hit]` (with `data-pyric-point-index`),
31
34
  * `[data-pyric-chart-tooltip]`, `[data-pyric-tooltip-row]`.
32
35
  */
33
- export declare function TrafficLineChart({ points, series, visible, formatValue, formatTime, emptyState, className, }: TrafficLineChartProps): import("react").JSX.Element;
36
+ export declare function TrafficLineChart({ points, series, visible, omitZeroSeries, formatValue, formatTime, emptyState, className, }: TrafficLineChartProps): import("react").JSX.Element;
34
37
  //# sourceMappingURL=TrafficLineChart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrafficLineChart.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE/E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;oDAEgD;IAChD,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,OAAO,EACP,WAAgC,EAChC,UAA8B,EAC9B,UAAU,EACV,SAAS,GACV,EAAE,qBAAqB,+BAqFvB"}
1
+ {"version":3,"file":"TrafficLineChart.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE/E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;oDAEgD;IAChD,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B;2DACuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAsB,EACtB,WAAgC,EAChC,UAA8B,EAC9B,UAAU,EACV,SAAS,GACV,EAAE,qBAAqB,+BAwFvB"}
@@ -21,12 +21,12 @@ const defaultFormatTime = (t) => new Date(t).toLocaleTimeString();
21
21
  * `[data-pyric-chart-hit]` (with `data-pyric-point-index`),
22
22
  * `[data-pyric-chart-tooltip]`, `[data-pyric-tooltip-row]`.
23
23
  */
24
- export function TrafficLineChart({ points, series, visible, formatValue = defaultFormatValue, formatTime = defaultFormatTime, emptyState, className, }) {
24
+ export function TrafficLineChart({ points, series, visible, omitZeroSeries = false, formatValue = defaultFormatValue, formatTime = defaultFormatTime, emptyState, className, }) {
25
25
  const [hovered, setHovered] = useState(null);
26
26
  if (points.length === 0) {
27
27
  return (_jsx("div", { className: className, "data-pyric-ui": "traffic-line-chart", "data-pyric-empty": "", children: emptyState }));
28
28
  }
29
- const visibleSeries = series.filter((s) => !visible || visible.has(s.key));
29
+ const visibleSeries = series.filter((s) => (!visible || visible.has(s.key)) && (!omitZeroSeries || s.total > 0));
30
30
  let maxValue = 0;
31
31
  for (const s of visibleSeries)
32
32
  for (const v of s.values)
@@ -39,7 +39,7 @@ export function TrafficLineChart({ points, series, visible, formatValue = defaul
39
39
  const hoveredPoint = hovered != null ? points[hovered] : null;
40
40
  return (_jsx("div", { className: className, "data-pyric-ui": "traffic-line-chart", children: _jsxs("div", { "data-pyric-chart-svg": "", children: [_jsx("svg", { viewBox: "0 0 100 100", preserveAspectRatio: "none", role: "img", "aria-label": "metrics over time", children: series.map((s) => {
41
41
  const seriesIndex = series.indexOf(s);
42
- const isVisible = !visible || visible.has(s.key);
42
+ const isVisible = (!visible || visible.has(s.key)) && (!omitZeroSeries || s.total > 0);
43
43
  if (!isVisible)
44
44
  return null;
45
45
  const d = s.values.map((v, i) => `${i === 0 ? 'M' : 'L'}${xAt(i)},${yAt(v)}`).join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"TrafficLineChart.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TrafficLineChart.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficLineChart.tsx"],"names":[],"mappings":"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"}
@@ -22,6 +22,6 @@ import { defaultFormatTime } from './format.js';
22
22
  * - method renders as `<Badge>` (`data-pyric-badge-kind`)
23
23
  */
24
24
  export function TrafficRow({ event, selected, onSelect, renderClassification, formatTime = defaultFormatTime, className, }) {
25
- return (_jsxs("button", { type: "button", onClick: () => onSelect?.(event), className: className, "data-pyric-traffic-row": "", "data-pyric-result": event.result, "data-pyric-origin": event.origin, "data-pyric-method": event.method, "data-pyric-selected": selected ? '' : undefined, children: [_jsx("span", { "data-pyric-traffic-time": "", children: formatTime(event.at) }), _jsx("span", { "data-pyric-traffic-service": event.service ?? '', children: event.service ?? '' }), _jsx(Badge, { kind: event.method, children: event.method }), _jsx("span", { "data-pyric-traffic-path": "", children: event.path }), renderClassification ? renderClassification(event) : null] }));
25
+ return (_jsxs("button", { type: "button", onClick: () => onSelect?.(event), className: className, "data-pyric-traffic-row": "", "data-pyric-result": event.result, "data-pyric-origin": event.origin, "data-pyric-method": event.method, "data-pyric-selected": selected ? '' : undefined, children: [_jsx("span", { "data-pyric-traffic-time": "", children: formatTime(event.at) }), _jsx("span", { "data-pyric-traffic-service": event.service ?? '', children: event.service ?? '' }), _jsx(Badge, { kind: event.method, children: event.method }), _jsx("span", { "data-pyric-traffic-path": "", children: event.path || '/' }), renderClassification ? renderClassification(event) : null] }));
26
26
  }
27
27
  //# sourceMappingURL=TrafficRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrafficRow.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficRow.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmBhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,UAAU,GAAG,iBAAiB,EAC9B,SAAS,GACO;IAChB,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAChC,SAAS,EAAE,SAAS,4BACG,EAAE,uBACN,KAAK,CAAC,MAAM,uBACZ,KAAK,CAAC,MAAM,uBACZ,KAAK,CAAC,MAAM,yBACV,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAE9C,0CAA8B,EAAE,YAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAQ,EAC9D,6CAAkC,KAAK,CAAC,OAAO,IAAI,EAAE,YAAG,KAAK,CAAC,OAAO,IAAI,EAAE,GAAQ,EACnF,KAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,YAAG,KAAK,CAAC,MAAM,GAAS,EACjD,0CAA8B,EAAE,YAAE,KAAK,CAAC,IAAI,GAAQ,EACnD,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IACnD,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TrafficRow.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficRow.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmBhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,UAAU,GAAG,iBAAiB,EAC9B,SAAS,GACO;IAChB,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAChC,SAAS,EAAE,SAAS,4BACG,EAAE,uBACN,KAAK,CAAC,MAAM,uBACZ,KAAK,CAAC,MAAM,uBACZ,KAAK,CAAC,MAAM,yBACV,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAE9C,0CAA8B,EAAE,YAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAQ,EAC9D,6CAAkC,KAAK,CAAC,OAAO,IAAI,EAAE,YAAG,KAAK,CAAC,OAAO,IAAI,EAAE,GAAQ,EACnF,KAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,YAAG,KAAK,CAAC,MAAM,GAAS,EACjD,0CAA8B,EAAE,YAAE,KAAK,CAAC,IAAI,IAAI,GAAG,GAAQ,EAC1D,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IACnD,CACV,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { ReactNode } from 'react';
2
- import type { TimeWindow, UseTrafficBucketsResult } from '../hooks/useTrafficBuckets.js';
1
+ import { type ReactNode } from 'react';
2
+ import type { TimeWindow, TrafficBucket, UseTrafficBucketsResult } from '../hooks/useTrafficBuckets.js';
3
3
  import type { TrafficEvent } from '../types.js';
4
4
  export interface TrafficTimelineProps {
5
5
  /**
@@ -33,6 +33,12 @@ export interface TrafficTimelineProps {
33
33
  * window so a bare consumer still gets a working selection.
34
34
  */
35
35
  onBrush?: (window: TimeWindow) => void;
36
+ /**
37
+ * Direct annotation shown while a bucket is hovered or keyboard-focused.
38
+ * The timeline owns preview state and positioning; the consumer owns the
39
+ * words and number formatting.
40
+ */
41
+ renderBucketSummary?: (bucket: TrafficBucket) => ReactNode;
36
42
  /**
37
43
  * Where the live edge marker sits, in epoch-ms. Defaults to
38
44
  * `window.end` (the right edge = "now"). Omit / pass `null` to hide
@@ -74,8 +80,9 @@ export interface TrafficTimelineProps {
74
80
  * Styling hooks: `[data-pyric-ui="traffic-timeline"]`,
75
81
  * `[data-pyric-timeline-header]`, `[data-pyric-timeline-bars]`,
76
82
  * `[data-pyric-bucket]` (with `data-pyric-bucket-index`,
77
- * `data-pyric-has-denies`), `[data-pyric-brush]`,
78
- * `[data-pyric-live]`, `[data-pyric-timeline-axis]`.
83
+ * `data-pyric-has-denies`, `data-pyric-bucket-selected`),
84
+ * `[data-pyric-bucket-summary]`, `[data-pyric-brush]`, `[data-pyric-live]`,
85
+ * `[data-pyric-timeline-axis]`.
79
86
  */
80
- export declare function TrafficTimeline({ events, buckets: prebucketed, window, bucketCount, brush, onBrush, liveAt, header, axis, emptyState, className, }: TrafficTimelineProps): import("react").JSX.Element;
87
+ export declare function TrafficTimeline({ events, buckets: prebucketed, window, bucketCount, brush, onBrush, renderBucketSummary, liveAt, header, axis, emptyState, className, }: TrafficTimelineProps): import("react").JSX.Element;
81
88
  //# sourceMappingURL=TrafficTimeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrafficTimeline.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficTimeline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,UAAU,EAEV,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,0CAA0C;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EAAE,WAAW,EACpB,MAAM,EACN,WAAgB,EAChB,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,GACV,EAAE,oBAAoB,+BAyEtB"}
1
+ {"version":3,"file":"TrafficTimeline.d.ts","sourceRoot":"","sources":["../../../src/traffic/components/TrafficTimeline.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,0CAA0C;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,SAAS,CAAC;IAC3D;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EAAE,WAAW,EACpB,MAAM,EACN,WAAgB,EAChB,KAAK,EACL,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,GACV,EAAE,oBAAoB,+BAiHtB"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useState } from 'react';
2
3
  import { useTrafficBuckets } from '../hooks/useTrafficBuckets.js';
3
4
  /** Clamp a 0..1 fraction. */
4
5
  function clamp01(n) {
@@ -35,10 +36,14 @@ function fraction(t, window) {
35
36
  * Styling hooks: `[data-pyric-ui="traffic-timeline"]`,
36
37
  * `[data-pyric-timeline-header]`, `[data-pyric-timeline-bars]`,
37
38
  * `[data-pyric-bucket]` (with `data-pyric-bucket-index`,
38
- * `data-pyric-has-denies`), `[data-pyric-brush]`,
39
- * `[data-pyric-live]`, `[data-pyric-timeline-axis]`.
39
+ * `data-pyric-has-denies`, `data-pyric-bucket-selected`),
40
+ * `[data-pyric-bucket-summary]`, `[data-pyric-brush]`, `[data-pyric-live]`,
41
+ * `[data-pyric-timeline-axis]`.
40
42
  */
41
- export function TrafficTimeline({ events, buckets: prebucketed, window, bucketCount = 30, brush, onBrush, liveAt, header, axis, emptyState, className, }) {
43
+ export function TrafficTimeline({ events, buckets: prebucketed, window, bucketCount = 30, brush, onBrush, renderBucketSummary, liveAt, header, axis, emptyState, className, }) {
44
+ const summaryId = useId();
45
+ const [hoveredBucket, setHoveredBucket] = useState(null);
46
+ const [focusedBucket, setFocusedBucket] = useState(null);
42
47
  // Hook is always called (rules of hooks); its result is discarded
43
48
  // when the caller pre-bucketed.
44
49
  const computed = useTrafficBuckets({
@@ -48,6 +53,9 @@ export function TrafficTimeline({ events, buckets: prebucketed, window, bucketCo
48
53
  });
49
54
  const result = prebucketed ?? computed;
50
55
  const { buckets, total } = result;
56
+ const activeBucketIndex = hoveredBucket ?? focusedBucket;
57
+ const activeBucket = activeBucketIndex === null ? null : (buckets.find((bucket) => bucket.index === activeBucketIndex) ?? null);
58
+ const activeBucketSelected = activeBucket !== null && brush?.start === activeBucket.start && brush.end === activeBucket.end;
51
59
  if (buckets.length === 0) {
52
60
  return (_jsx("div", { className: className, "data-pyric-ui": "traffic-timeline", "data-pyric-empty": "", children: emptyState }));
53
61
  }
@@ -55,14 +63,20 @@ export function TrafficTimeline({ events, buckets: prebucketed, window, bucketCo
55
63
  const livePoint = liveAt === undefined ? window.end : liveAt;
56
64
  const liveX = livePoint == null ? null : fraction(livePoint, window);
57
65
  const resolvedAxis = typeof axis === 'function' ? axis(window) : axis;
58
- return (_jsxs("div", { className: className, "data-pyric-ui": "traffic-timeline", "data-pyric-empty": isEmpty ? '' : undefined, children: [header !== undefined && (_jsx("div", { "data-pyric-timeline-header": "", children: header })), _jsxs("div", { "data-pyric-timeline-chart": "", children: [_jsx("div", { "data-pyric-timeline-bars": "", role: "img", "aria-label": "request volume over time", children: buckets.map((bucket) => (_jsx(Bar, { bucket: bucket, window: window, onBrush: onBrush }, bucket.index))) }), brush && (_jsx("div", { "data-pyric-brush": "", "aria-hidden": "true", style: {
66
+ return (_jsxs("div", { className: className, "data-pyric-ui": "traffic-timeline", "data-pyric-empty": isEmpty ? '' : undefined, children: [header !== undefined && (_jsx("div", { "data-pyric-timeline-header": "", children: header })), _jsxs("div", { "data-pyric-timeline-chart": "", children: [_jsx("div", { "data-pyric-timeline-bars": "", role: onBrush ? 'group' : 'img', "aria-label": "request volume over time", children: buckets.map((bucket) => (_jsx(Bar, { bucket: bucket, window: window, onBrush: onBrush, onHover: renderBucketSummary ? setHoveredBucket : undefined, onFocus: renderBucketSummary ? setFocusedBucket : undefined, summaryId: renderBucketSummary && !activeBucketSelected && activeBucket?.index === bucket.index
67
+ ? summaryId
68
+ : undefined, selected: brush?.start === bucket.start && brush.end === bucket.end }, bucket.index))) }), activeBucket && renderBucketSummary && !activeBucketSelected ? (_jsx("div", { id: summaryId, role: "tooltip", "data-pyric-bucket-summary": "", style: {
69
+ '--pyric-bucket-summary-x': (activeBucket.index + 0.5) / Math.max(buckets.length, 1),
70
+ }, children: renderBucketSummary(activeBucket) })) : null, brush && (_jsx("div", { "data-pyric-brush": "", "aria-hidden": "true", style: {
59
71
  '--pyric-brush-left': fraction(brush.start, window),
60
72
  '--pyric-brush-right': 1 - fraction(brush.end, window),
61
73
  } })), liveX != null && (_jsx("div", { "data-pyric-live": "", "aria-hidden": "true", style: { '--pyric-live-x': liveX } }))] }), resolvedAxis !== undefined && resolvedAxis !== null && (_jsx("div", { "data-pyric-timeline-axis": "", children: resolvedAxis }))] }));
62
74
  }
63
- function Bar({ bucket, window, onBrush, }) {
75
+ function Bar({ bucket, window, onBrush, onHover, onFocus, summaryId, selected, }) {
64
76
  const interactive = onBrush !== undefined;
65
- return (_jsxs("button", { type: "button", "data-pyric-bucket": "", "data-pyric-bucket-index": bucket.index, "data-pyric-bucket-count": bucket.count, "data-pyric-bucket-denies": bucket.denies, "data-pyric-has-denies": bucket.denies > 0 ? '' : undefined, disabled: !interactive, onClick: interactive
77
+ const requestLabel = `${bucket.count} ${bucket.count === 1 ? 'request' : 'requests'}`;
78
+ const denyLabel = `${bucket.denies} denied`;
79
+ return (_jsxs("button", { type: "button", "data-pyric-bucket": "", "data-pyric-bucket-index": bucket.index, "data-pyric-bucket-count": bucket.count, "data-pyric-bucket-denies": bucket.denies, "data-pyric-has-denies": bucket.denies > 0 ? '' : undefined, "data-pyric-bucket-selected": selected ? '' : undefined, disabled: !interactive, "aria-label": `${requestLabel}, ${denyLabel}`, "aria-describedby": summaryId, "aria-pressed": interactive ? selected : undefined, onPointerEnter: onHover ? () => onHover(bucket.index) : undefined, onPointerLeave: onHover ? () => onHover(null) : undefined, onFocus: onFocus ? () => onFocus(bucket.index) : undefined, onBlur: onFocus ? () => onFocus(null) : undefined, onClick: interactive
66
80
  ? () => onBrush?.({ start: bucket.start, end: bucket.end })
67
81
  : undefined, style: {
68
82
  '--pyric-bucket-h': bucket.heightRatio,
@@ -1 +1 @@
1
- {"version":3,"file":"TrafficTimeline.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficTimeline.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TrafficTimeline.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficTimeline.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAoElE,6BAA6B;AAC7B,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,CAAS,EAAE,MAAkB;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EAAE,WAAW,EACpB,MAAM,EACN,WAAW,GAAG,EAAE,EAChB,KAAK,EACL,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,GACY;IACrB,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,kEAAkE;IAClE,gCAAgC;IAChC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,MAAM;QACN,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,WAAW,IAAI,QAAQ,CAAC;IACvC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,iBAAiB,GAAG,aAAa,IAAI,aAAa,CAAC;IACzD,MAAM,YAAY,GAChB,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC;IAC7G,MAAM,oBAAoB,GACxB,YAAY,KAAK,IAAI,IAAI,KAAK,EAAE,KAAK,KAAK,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC;IAEjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CACL,cACE,SAAS,EAAE,SAAS,mBACN,kBAAkB,sBACf,EAAE,YAElB,UAAU,GACP,CACP,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAErE,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtE,OAAO,CACL,eACE,SAAS,EAAE,SAAS,mBACN,kBAAkB,sBACd,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAEzC,MAAM,KAAK,SAAS,IAAI,CACvB,4CAAgC,EAAE,YAAE,MAAM,GAAO,CAClD,EAED,4CAA+B,EAAE,aAC/B,0CAC2B,EAAE,EAC3B,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,gBACpB,0BAA0B,YAEpC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,GAAG,IAEF,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAC3D,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAC3D,SAAS,EACP,mBAAmB,IAAI,CAAC,oBAAoB,IAAI,YAAY,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK;gCAClF,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,SAAS,EAEf,QAAQ,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAX9D,MAAM,CAAC,KAAK,CAYjB,CACH,CAAC,GACE,EAEL,YAAY,IAAI,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAC9D,cACE,EAAE,EAAE,SAAS,EACb,IAAI,EAAC,SAAS,+BACY,EAAE,EAC5B,KAAK,EACH;4BACE,0BAA0B,EAAE,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;yBAC9D,YAGzB,mBAAmB,CAAC,YAAY,CAAC,GAC9B,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,IAAI,CACR,kCACmB,EAAE,iBACP,MAAM,EAClB,KAAK,EACH;4BACE,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;4BACnD,qBAAqB,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;yBAChC,GAE1B,CACH,EAEA,KAAK,IAAI,IAAI,IAAI,CAChB,iCACkB,EAAE,iBACN,MAAM,EAClB,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAyB,GACzD,CACH,IACG,EAEL,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,CACtD,0CAA8B,EAAE,YAAE,YAAY,GAAO,CACtD,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,EACX,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,GAST;IACC,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC;IAC1C,MAAM,YAAY,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACtF,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC;IAC5C,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,uBACK,EAAE,6BACK,MAAM,CAAC,KAAK,6BACZ,MAAM,CAAC,KAAK,8BACX,MAAM,CAAC,MAAM,2BAChB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gCAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACrD,QAAQ,EAAE,CAAC,WAAW,gBACV,GAAG,YAAY,KAAK,SAAS,EAAE,sBACzB,SAAS,kBACb,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAChD,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EACjE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EACzD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAC1D,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EACjD,OAAO,EACL,WAAW;YACT,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3D,CAAC,CAAC,SAAS,EAEf,KAAK,EACH;YACE,kBAAkB,EAAE,MAAM,CAAC,WAAW;YACtC,uBAAuB,EAAE,MAAM,CAAC,eAAe;SACzB,aAG1B,0CAA8B,EAAE,iBAAa,MAAM,GAAG,EACtD,yCAA6B,EAAE,iBAAa,MAAM,GAAG,IAC9C,CACV,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { useMemo } from 'react';
2
2
  /**
3
3
  * Billable-metrics + rules-metrics aggregation (Traffic tab: "Billable
4
- * metrics" and "Subscriptions & Rules"). Mirrors the Firebase Console
4
+ * metrics" and "Rules"). Mirrors the Firebase Console
5
5
  * Usage tab's shape (per-series totals + a bucketed time series), built
6
6
  * on top of the same half-open `[window.start, window.end)` bucketing
7
7
  * kernel {@link bucketTraffic} already uses.
package/package.json CHANGED
@@ -1,6 +1,16 @@
1
1
  {
2
2
  "name": "@pyric/ui",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "0.1.0-alpha.9",
4
+ "license": "Apache-2.0",
5
+ "homepage": "https://pyric.dev",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/davideast/pyric.git",
9
+ "directory": "packages/ui"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/davideast/pyric/issues"
13
+ },
4
14
  "description": "Headless React data-admin components and hooks for Firebase apps built on pyric. Same components work in sandbox (pyric/firestore against pyric/sandbox) and production (firebase/firestore against real Firebase) via a single Firestore handle prop. Ships zero visual styling — consumers bring their own design system via className + data-* attributes.",
5
15
  "type": "module",
6
16
  "exports": {
@@ -67,7 +77,8 @@
67
77
  },
68
78
  "files": [
69
79
  "dist",
70
- "README.md"
80
+ "README.md",
81
+ "LICENSE"
71
82
  ],
72
83
  "scripts": {
73
84
  "build": "tsc",
@@ -77,11 +88,11 @@
77
88
  "typecheck": "bun x tsc -p tsconfig.json --noEmit"
78
89
  },
79
90
  "peerDependencies": {
80
- "@inbrowser/agent": "0.4.1",
91
+ "@inbrowser/agent": "0.4.2",
81
92
  "react": ">=19",
82
93
  "react-dom": ">=19",
83
94
  "firebase": ">=12",
84
- "pyric": "^0.1.0-alpha.7"
95
+ "pyric": "^0.1.0-alpha.9"
85
96
  },
86
97
  "peerDependenciesMeta": {
87
98
  "@inbrowser/agent": {
@@ -97,8 +108,8 @@
97
108
  "fake-indexeddb": "^6.0.0",
98
109
  "firebase": "^12.12.0",
99
110
  "jsdom": "^29.1.1",
100
- "pyric": "^0.1.0-alpha.7",
101
- "pyric-admin": "^0.1.0-alpha.7",
111
+ "pyric": "^0.1.0-alpha.9",
112
+ "pyric-admin": "^0.1.0-alpha.9",
102
113
  "react": "^19.0.0",
103
114
  "react-dom": "^19.0.0",
104
115
  "react-test-renderer": "^19.2.6",