@pyric/ui 0.1.0-alpha.8 → 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.
- package/LICENSE +216 -0
- package/dist/auth/components/AuthUserList.d.ts +15 -4
- package/dist/auth/components/AuthUserList.d.ts.map +1 -1
- package/dist/auth/components/AuthUserList.js +3 -3
- package/dist/auth/components/AuthUserList.js.map +1 -1
- package/dist/firestore/components/DocumentList.d.ts +5 -2
- package/dist/firestore/components/DocumentList.d.ts.map +1 -1
- package/dist/firestore/components/DocumentList.js +17 -3
- package/dist/firestore/components/DocumentList.js.map +1 -1
- package/dist/firestore/firestoreApi.d.ts +2 -2
- package/dist/firestore/firestoreApi.d.ts.map +1 -1
- package/dist/firestore/firestoreApi.js +2 -1
- package/dist/firestore/firestoreApi.js.map +1 -1
- package/dist/firestore/hooks/useDocumentEditor.d.ts +7 -4
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -1
- package/dist/firestore/hooks/useDocumentEditor.js +7 -4
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -1
- package/dist/firestore/hooks/useDocumentList.d.ts +18 -13
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -1
- package/dist/firestore/hooks/useDocumentList.js +77 -27
- package/dist/firestore/hooks/useDocumentList.js.map +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.d.ts +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.js +3 -2
- package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.d.ts +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.js +3 -2
- package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -1
- package/dist/firestore/index.d.ts +1 -0
- package/dist/firestore/index.d.ts.map +1 -1
- package/dist/firestore/index.js +1 -0
- package/dist/firestore/index.js.map +1 -1
- package/dist/firestore/reducers/documentEditor.d.ts.map +1 -1
- package/dist/firestore/reducers/documentEditor.js +2 -0
- package/dist/firestore/reducers/documentEditor.js.map +1 -1
- package/dist/firestore/reducers/types.d.ts +3 -0
- package/dist/firestore/reducers/types.d.ts.map +1 -1
- package/dist/firestore/valueEquality.d.ts +4 -0
- package/dist/firestore/valueEquality.d.ts.map +1 -0
- package/dist/firestore/valueEquality.js +44 -0
- package/dist/firestore/valueEquality.js.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
- package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +1 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/rtdb/components/RtdbTree.js +2 -1
- package/dist/rtdb/components/RtdbTree.js.map +1 -1
- package/dist/rtdb/hooks/useRtdbTree.d.ts +2 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -1
- package/dist/rtdb/hooks/useRtdbTree.js +20 -2
- package/dist/rtdb/hooks/useRtdbTree.js.map +1 -1
- package/dist/rtdb/values.d.ts +6 -0
- package/dist/rtdb/values.d.ts.map +1 -1
- package/dist/rtdb/values.js +43 -0
- package/dist/rtdb/values.js.map +1 -1
- package/dist/rules/hooks/useDenialTrace.d.ts +1 -1
- package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -1
- package/dist/rules/hooks/useDenialTrace.js +1 -1
- package/dist/rules/hooks/useDenialTrace.js.map +1 -1
- package/dist/rules/types.d.ts +1 -1
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +0 -2
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -1
- package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -1
- package/dist/storage/components/ObjectBrowser.d.ts +6 -3
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -1
- package/dist/storage/components/ObjectBrowser.js +6 -5
- package/dist/storage/components/ObjectBrowser.js.map +1 -1
- package/dist/storage/components/ObjectInspector.d.ts +1 -1
- package/dist/storage/components/ObjectInspector.d.ts.map +1 -1
- package/dist/storage/folderPlaceholder.d.ts +9 -3
- package/dist/storage/folderPlaceholder.d.ts.map +1 -1
- package/dist/storage/folderPlaceholder.js +12 -5
- package/dist/storage/folderPlaceholder.js.map +1 -1
- package/dist/storage/hooks/useObjectUpload.d.ts +5 -9
- package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -1
- package/dist/storage/hooks/useObjectUpload.js.map +1 -1
- package/dist/storage/hooks/useStorageDelete.d.ts +2 -1
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageDelete.js +19 -13
- package/dist/storage/hooks/useStorageDelete.js.map +1 -1
- package/dist/storage/hooks/useStorageList.d.ts +5 -7
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageList.js +5 -8
- package/dist/storage/hooks/useStorageList.js.map +1 -1
- package/dist/storage/hooks/useStorageObject.d.ts +4 -5
- package/dist/storage/hooks/useStorageObject.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageObject.js.map +1 -1
- package/dist/storage/hooks/useStorageRulesGate.d.ts +5 -17
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageRulesGate.js +35 -43
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -1
- package/dist/storage/pendingPrefixes.d.ts +7 -3
- package/dist/storage/pendingPrefixes.d.ts.map +1 -1
- package/dist/storage/pendingPrefixes.js +9 -3
- package/dist/storage/pendingPrefixes.js.map +1 -1
- package/dist/storage/storageApi.d.ts +1 -1
- package/dist/storage/storageApi.d.ts.map +1 -1
- package/dist/storage/storageApi.js +9 -2
- package/dist/storage/storageApi.js.map +1 -1
- package/dist/traffic/components/TrafficLineChart.d.ts +4 -1
- package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -1
- package/dist/traffic/components/TrafficLineChart.js +3 -3
- package/dist/traffic/components/TrafficLineChart.js.map +1 -1
- package/dist/traffic/components/TrafficRow.js +1 -1
- package/dist/traffic/components/TrafficRow.js.map +1 -1
- package/dist/traffic/components/TrafficTimeline.d.ts +12 -5
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -1
- package/dist/traffic/components/TrafficTimeline.js +20 -6
- package/dist/traffic/components/TrafficTimeline.js.map +1 -1
- package/dist/traffic/hooks/useTrafficMetrics.js +1 -1
- package/package.json +16 -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;
|
|
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,+
|
|
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":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
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,
|
|
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
|
|
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
|
|
78
|
-
* `[data-pyric-
|
|
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,
|
|
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
|
|
39
|
-
* `[data-pyric-
|
|
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:
|
|
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
|
-
|
|
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":";
|
|
1
|
+
{"version":3,"file":"TrafficTimeline.js","sourceRoot":"","sources":["../../../src/traffic/components/TrafficTimeline.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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 "
|
|
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,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyric/ui",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.9",
|
|
4
|
+
"license": "Apache-2.0",
|
|
4
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
|
+
},
|
|
5
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.",
|
|
6
15
|
"type": "module",
|
|
7
16
|
"exports": {
|
|
@@ -68,7 +77,8 @@
|
|
|
68
77
|
},
|
|
69
78
|
"files": [
|
|
70
79
|
"dist",
|
|
71
|
-
"README.md"
|
|
80
|
+
"README.md",
|
|
81
|
+
"LICENSE"
|
|
72
82
|
],
|
|
73
83
|
"scripts": {
|
|
74
84
|
"build": "tsc",
|
|
@@ -78,11 +88,11 @@
|
|
|
78
88
|
"typecheck": "bun x tsc -p tsconfig.json --noEmit"
|
|
79
89
|
},
|
|
80
90
|
"peerDependencies": {
|
|
81
|
-
"@inbrowser/agent": "0.4.
|
|
91
|
+
"@inbrowser/agent": "0.4.2",
|
|
82
92
|
"react": ">=19",
|
|
83
93
|
"react-dom": ">=19",
|
|
84
94
|
"firebase": ">=12",
|
|
85
|
-
"pyric": "^0.1.0-alpha.
|
|
95
|
+
"pyric": "^0.1.0-alpha.9"
|
|
86
96
|
},
|
|
87
97
|
"peerDependenciesMeta": {
|
|
88
98
|
"@inbrowser/agent": {
|
|
@@ -98,8 +108,8 @@
|
|
|
98
108
|
"fake-indexeddb": "^6.0.0",
|
|
99
109
|
"firebase": "^12.12.0",
|
|
100
110
|
"jsdom": "^29.1.1",
|
|
101
|
-
"pyric": "^0.1.0-alpha.
|
|
102
|
-
"pyric-admin": "^0.1.0-alpha.
|
|
111
|
+
"pyric": "^0.1.0-alpha.9",
|
|
112
|
+
"pyric-admin": "^0.1.0-alpha.9",
|
|
103
113
|
"react": "^19.0.0",
|
|
104
114
|
"react-dom": "^19.0.0",
|
|
105
115
|
"react-test-renderer": "^19.2.6",
|