@arbidocs/blocks 0.4.152 → 0.4.154
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/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js → ConnectedNativeDocxComparison-OLWRQSRS.js} +11 -11
- package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js.map → ConnectedNativeDocxComparison-OLWRQSRS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs → ConnectedNativeDocxComparison-YORMOPPN.cjs} +12 -12
- package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs.map → ConnectedNativeDocxComparison-YORMOPPN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js → ConnectedNativeDocxEditor-34EBIIFS.js} +10 -10
- package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js.map → ConnectedNativeDocxEditor-34EBIIFS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs → ConnectedNativeDocxEditor-EHTWGGX3.cjs} +12 -12
- package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs.map → ConnectedNativeDocxEditor-EHTWGGX3.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-QW74LKHN.cjs → ConnectedStreamedWordArtifact-5DK6QGYN.cjs} +12 -12
- package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js → ConnectedStreamedWordArtifact-GLIDLSAS.js} +11 -11
- package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js.map → ConnectedStreamedWordArtifact-GLIDLSAS.js.map} +1 -1
- package/dist/WorkspaceTableView-5OWX53R5.js +376 -0
- package/dist/WorkspaceTableView-5OWX53R5.js.map +1 -0
- package/dist/WorkspaceTableView-ZFMAYHUD.cjs +378 -0
- package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +1 -0
- package/dist/agents/index.cjs +282 -282
- package/dist/agents/index.js +7 -7
- package/dist/{chunk-RQ2Y7USX.cjs → chunk-2VHYOTWW.cjs} +3 -3
- package/dist/chunk-2VHYOTWW.cjs.map +1 -0
- package/dist/{chunk-DTROMMDX.cjs → chunk-3VULDTNL.cjs} +4 -4
- package/dist/{chunk-DTROMMDX.cjs.map → chunk-3VULDTNL.cjs.map} +1 -1
- package/dist/{chunk-UTTTJSQU.cjs → chunk-4RPBUMHB.cjs} +4 -4
- package/dist/{chunk-UTTTJSQU.cjs.map → chunk-4RPBUMHB.cjs.map} +1 -1
- package/dist/chunk-53RCZPMR.cjs +496 -0
- package/dist/chunk-53RCZPMR.cjs.map +1 -0
- package/dist/chunk-5TDGVOR5.js +142 -0
- package/dist/chunk-5TDGVOR5.js.map +1 -0
- package/dist/{chunk-CU2O32Z4.cjs → chunk-6QAAIDQQ.cjs} +62 -99
- package/dist/chunk-6QAAIDQQ.cjs.map +1 -0
- package/dist/chunk-7HHYMDPE.js +431 -0
- package/dist/chunk-7HHYMDPE.js.map +1 -0
- package/dist/{chunk-SMN32BQ3.cjs → chunk-7NL6WJER.cjs} +3 -160
- package/dist/chunk-7NL6WJER.cjs.map +1 -0
- package/dist/{chunk-T74Q3MCZ.cjs → chunk-BDA3RHYD.cjs} +4 -4
- package/dist/{chunk-T74Q3MCZ.cjs.map → chunk-BDA3RHYD.cjs.map} +1 -1
- package/dist/{chunk-IXWJGOM2.js → chunk-BQ77KSXU.js} +3 -3
- package/dist/{chunk-IXWJGOM2.js.map → chunk-BQ77KSXU.js.map} +1 -1
- package/dist/chunk-BTF4AZMG.js +148 -0
- package/dist/chunk-BTF4AZMG.js.map +1 -0
- package/dist/{chunk-HALD6ZB5.cjs → chunk-C3SMTA3C.cjs} +4 -4
- package/dist/{chunk-HALD6ZB5.cjs.map → chunk-C3SMTA3C.cjs.map} +1 -1
- package/dist/{chunk-GAYMJWTC.cjs → chunk-CB4TIDEX.cjs} +6 -6
- package/dist/{chunk-GAYMJWTC.cjs.map → chunk-CB4TIDEX.cjs.map} +1 -1
- package/dist/{chunk-KPZZ5FHE.cjs → chunk-CNHUJRQ4.cjs} +10 -6
- package/dist/chunk-CNHUJRQ4.cjs.map +1 -0
- package/dist/{chunk-Q4BY2CQQ.cjs → chunk-CQCNU5KT.cjs} +28 -28
- package/dist/{chunk-Q4BY2CQQ.cjs.map → chunk-CQCNU5KT.cjs.map} +1 -1
- package/dist/{chunk-GRGS5M6O.cjs → chunk-CROGFB46.cjs} +160 -3
- package/dist/chunk-CROGFB46.cjs.map +1 -0
- package/dist/{chunk-QN47Q4N7.js → chunk-CU6LDQ57.js} +3 -3
- package/dist/{chunk-QN47Q4N7.js.map → chunk-CU6LDQ57.js.map} +1 -1
- package/dist/{chunk-EF4ZLKRM.js → chunk-DEPF5LQI.js} +3 -3
- package/dist/{chunk-EF4ZLKRM.js.map → chunk-DEPF5LQI.js.map} +1 -1
- package/dist/{chunk-JAANWQGB.js → chunk-ETZ5A3GU.js} +3 -3
- package/dist/{chunk-JAANWQGB.js.map → chunk-ETZ5A3GU.js.map} +1 -1
- package/dist/{chunk-TBEVGWY3.js → chunk-F57LNUSZ.js} +10 -6
- package/dist/chunk-F57LNUSZ.js.map +1 -0
- package/dist/{chunk-GFNELPDP.cjs → chunk-FM3IRQJW.cjs} +10 -5
- package/dist/chunk-FM3IRQJW.cjs.map +1 -0
- package/dist/chunk-FPHTSNOE.js +465 -0
- package/dist/chunk-FPHTSNOE.js.map +1 -0
- package/dist/{chunk-OVR3XMYL.js → chunk-FYZXDZM7.js} +3 -3
- package/dist/{chunk-OVR3XMYL.js.map → chunk-FYZXDZM7.js.map} +1 -1
- package/dist/{chunk-2FLWPM3B.cjs → chunk-GC2FSPSQ.cjs} +7 -7
- package/dist/{chunk-2FLWPM3B.cjs.map → chunk-GC2FSPSQ.cjs.map} +1 -1
- package/dist/{chunk-DB2OXRQC.js → chunk-GO3BN76C.js} +7 -7
- package/dist/{chunk-DB2OXRQC.js.map → chunk-GO3BN76C.js.map} +1 -1
- package/dist/{chunk-XZIYRKLW.cjs → chunk-H32DV7XS.cjs} +5 -139
- package/dist/chunk-H32DV7XS.cjs.map +1 -0
- package/dist/{chunk-4236BRZK.js → chunk-HP2C4MD3.js} +29 -3
- package/dist/chunk-HP2C4MD3.js.map +1 -0
- package/dist/{chunk-ZP6Q3KXU.cjs → chunk-HUATKA3M.cjs} +4 -4
- package/dist/{chunk-ZP6Q3KXU.cjs.map → chunk-HUATKA3M.cjs.map} +1 -1
- package/dist/chunk-ISHFVKVU.js +304 -0
- package/dist/chunk-ISHFVKVU.js.map +1 -0
- package/dist/chunk-JUUOJP7I.cjs +164 -0
- package/dist/chunk-JUUOJP7I.cjs.map +1 -0
- package/dist/{chunk-4KMLM3GY.cjs → chunk-KBO75NLM.cjs} +7 -7
- package/dist/{chunk-4KMLM3GY.cjs.map → chunk-KBO75NLM.cjs.map} +1 -1
- package/dist/{chunk-Z4NQ3TED.js → chunk-KCSIX7CY.js} +3 -3
- package/dist/{chunk-Z4NQ3TED.js.map → chunk-KCSIX7CY.js.map} +1 -1
- package/dist/{chunk-DN2KI4BU.js → chunk-KDLX5AA7.js} +3 -3
- package/dist/{chunk-DN2KI4BU.js.map → chunk-KDLX5AA7.js.map} +1 -1
- package/dist/{chunk-WFA2GVZJ.js → chunk-MF5KQ4PS.js} +3 -3
- package/dist/{chunk-WFA2GVZJ.js.map → chunk-MF5KQ4PS.js.map} +1 -1
- package/dist/{chunk-YXNNNP57.js → chunk-MNG7N6M2.js} +4 -4
- package/dist/{chunk-YXNNNP57.js.map → chunk-MNG7N6M2.js.map} +1 -1
- package/dist/chunk-MSFQDELO.cjs +482 -0
- package/dist/chunk-MSFQDELO.cjs.map +1 -0
- package/dist/{chunk-KSHKTOY2.js → chunk-NUSBINUM.js} +3 -3
- package/dist/chunk-NUSBINUM.js.map +1 -0
- package/dist/{chunk-EYKISBDO.cjs → chunk-OALEDG67.cjs} +5 -5
- package/dist/{chunk-EYKISBDO.cjs.map → chunk-OALEDG67.cjs.map} +1 -1
- package/dist/{chunk-COCGRJLA.cjs → chunk-OFV3PRF2.cjs} +7 -7
- package/dist/{chunk-COCGRJLA.cjs.map → chunk-OFV3PRF2.cjs.map} +1 -1
- package/dist/chunk-OOU4QLRK.cjs +319 -0
- package/dist/chunk-OOU4QLRK.cjs.map +1 -0
- package/dist/chunk-OU3RGQFX.cjs +136 -0
- package/dist/chunk-OU3RGQFX.cjs.map +1 -0
- package/dist/{chunk-3PCBYOIZ.js → chunk-P6RIBIVN.js} +38 -7
- package/dist/chunk-P6RIBIVN.js.map +1 -0
- package/dist/{chunk-LXTOOUEN.cjs → chunk-Q7CQYYZW.cjs} +5 -5
- package/dist/{chunk-LXTOOUEN.cjs.map → chunk-Q7CQYYZW.cjs.map} +1 -1
- package/dist/{chunk-CROTH2BS.js → chunk-QKR5LWDO.js} +9 -40
- package/dist/{chunk-CROTH2BS.js.map → chunk-QKR5LWDO.js.map} +1 -1
- package/dist/{chunk-HUJF2XM2.js → chunk-RE7NULEY.js} +3 -3
- package/dist/{chunk-HUJF2XM2.js.map → chunk-RE7NULEY.js.map} +1 -1
- package/dist/chunk-REH7PX3N.cjs +145 -0
- package/dist/chunk-REH7PX3N.cjs.map +1 -0
- package/dist/chunk-RQKWYKZY.js +127 -0
- package/dist/chunk-RQKWYKZY.js.map +1 -0
- package/dist/{chunk-U6JQ4KMX.cjs → chunk-SN2GZ4ZM.cjs} +29 -2
- package/dist/chunk-SN2GZ4ZM.cjs.map +1 -0
- package/dist/{chunk-R6VCPDPF.js → chunk-SZSJGZSO.js} +156 -6
- package/dist/chunk-SZSJGZSO.js.map +1 -0
- package/dist/{chunk-US3S4DCB.js → chunk-TF7HN5EU.js} +10 -5
- package/dist/chunk-TF7HN5EU.js.map +1 -0
- package/dist/{chunk-YKQ2DPIP.js → chunk-VF5EUAIV.js} +3 -3
- package/dist/{chunk-YKQ2DPIP.js.map → chunk-VF5EUAIV.js.map} +1 -1
- package/dist/{chunk-KMZWKSKO.cjs → chunk-VZPFYZZU.cjs} +4 -4
- package/dist/{chunk-KMZWKSKO.cjs.map → chunk-VZPFYZZU.cjs.map} +1 -1
- package/dist/{chunk-ZLEYLCE4.js → chunk-WK6FVIF7.js} +6 -156
- package/dist/chunk-WK6FVIF7.js.map +1 -0
- package/dist/{chunk-COA3S3CZ.js → chunk-XI37A7HH.js} +4 -4
- package/dist/{chunk-COA3S3CZ.js.map → chunk-XI37A7HH.js.map} +1 -1
- package/dist/{chunk-LGBAZD37.js → chunk-XRL4R2TT.js} +7 -139
- package/dist/chunk-XRL4R2TT.js.map +1 -0
- package/dist/{chunk-4JNKXOFZ.cjs → chunk-YBJ4QGNH.cjs} +11 -11
- package/dist/{chunk-4JNKXOFZ.cjs.map → chunk-YBJ4QGNH.cjs.map} +1 -1
- package/dist/{chunk-GFOEWPAP.cjs → chunk-YF3QUHKN.cjs} +49 -12
- package/dist/chunk-YF3QUHKN.cjs.map +1 -0
- package/dist/{chunk-H4D7WKDY.js → chunk-YNMO3DSR.js} +3 -3
- package/dist/{chunk-H4D7WKDY.js.map → chunk-YNMO3DSR.js.map} +1 -1
- package/dist/citations/index.cjs +10 -10
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/index.cjs +77 -77
- package/dist/collaboration/index.js +2 -2
- package/dist/connect/docx.cjs +14 -14
- package/dist/connect/docx.js +10 -10
- package/dist/connect/index.cjs +1577 -962
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +3 -0
- package/dist/connect/index.js +1014 -450
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +66 -66
- package/dist/connect/viewer.js +10 -10
- package/dist/connection/ConnectionProvider.d.ts +7 -0
- package/dist/connection/projects/ConnectedProjectsPanel.d.ts +34 -0
- package/dist/connection/projects/index.d.ts +1 -0
- package/dist/connection/workspace-dashboard/ConnectedWorkspaceDashboard.d.ts +37 -0
- package/dist/connection/workspace-dashboard/dashboard-rows.d.ts +42 -0
- package/dist/connection/workspace-dashboard/index.d.ts +1 -0
- package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +37 -0
- package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +15 -0
- package/dist/connection/workspace-list/WorkspaceFilterMenu.d.ts +4 -0
- package/dist/connection/workspace-list/WorkspaceTableView.d.ts +13 -0
- package/dist/connection/workspace-list/index.d.ts +5 -0
- package/dist/connection/workspace-list/projectBilling.d.ts +21 -0
- package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +251 -0
- package/dist/connection/workspace-list/workspaceTable.d.ts +58 -0
- package/dist/connection/workspace-settings/ConnectedWorkspaceMembers.d.ts +26 -0
- package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +7 -9
- package/dist/connection/workspace-settings/index.d.ts +2 -1
- package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +0 -1
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +2 -2
- package/dist/files/index.cjs +169 -169
- package/dist/files/index.js +3 -3
- package/dist/home/index.cjs +119 -459
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +13 -419
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +510 -510
- package/dist/index.js +18 -18
- package/dist/provider/BlocksProvider.d.ts +9 -1
- package/dist/retrieval/index.cjs +4 -4
- package/dist/retrieval/index.js +2 -2
- package/dist/settings/index.cjs +169 -165
- package/dist/settings/index.d.ts +1 -0
- package/dist/settings/index.js +2 -2
- package/dist/settings/tri-state-filters.d.ts +13 -0
- package/dist/shell/index.cjs +44 -44
- package/dist/shell/index.js +3 -3
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +14 -14
- package/dist/studio/index.js +6 -6
- package/dist/workflow-canvas/index.cjs +27 -27
- package/dist/workflow-canvas/index.js +9 -9
- package/dist/workspaces/index.cjs +110 -369
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.d.ts +2 -0
- package/dist/workspaces/index.js +12 -350
- package/dist/workspaces/index.js.map +1 -1
- package/dist/workspaces/workspace-groups.d.ts +90 -0
- package/dist/workspaces/workspace-roles.d.ts +11 -0
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-QW74LKHN.cjs.map +0 -1
- package/dist/chunk-3PCBYOIZ.js.map +0 -1
- package/dist/chunk-4236BRZK.js.map +0 -1
- package/dist/chunk-CU2O32Z4.cjs.map +0 -1
- package/dist/chunk-EV7W64B6.js +0 -134
- package/dist/chunk-EV7W64B6.js.map +0 -1
- package/dist/chunk-GFNELPDP.cjs.map +0 -1
- package/dist/chunk-GFOEWPAP.cjs.map +0 -1
- package/dist/chunk-GRGS5M6O.cjs.map +0 -1
- package/dist/chunk-KPZZ5FHE.cjs.map +0 -1
- package/dist/chunk-KSHKTOY2.js.map +0 -1
- package/dist/chunk-LGBAZD37.js.map +0 -1
- package/dist/chunk-R6VCPDPF.js.map +0 -1
- package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
- package/dist/chunk-RXK3XP62.cjs +0 -144
- package/dist/chunk-RXK3XP62.cjs.map +0 -1
- package/dist/chunk-SMN32BQ3.cjs.map +0 -1
- package/dist/chunk-TBEVGWY3.js.map +0 -1
- package/dist/chunk-U6JQ4KMX.cjs.map +0 -1
- package/dist/chunk-US3S4DCB.js.map +0 -1
- package/dist/chunk-XZIYRKLW.cjs.map +0 -1
- package/dist/chunk-ZLEYLCE4.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var lucideReact = require('lucide-react');
|
|
5
|
+
var ui = require('@arbidocs/react/ui');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
// src/home/CollapsibleSection.tsx
|
|
9
|
+
var DEFAULT_COLLAPSIBLE_SECTION_LABELS = {
|
|
10
|
+
collapseSection: "Collapse section",
|
|
11
|
+
expandSection: "Expand section"
|
|
12
|
+
};
|
|
13
|
+
function CollapsibleSection({
|
|
14
|
+
title,
|
|
15
|
+
icon,
|
|
16
|
+
isExpanded,
|
|
17
|
+
onToggle,
|
|
18
|
+
children,
|
|
19
|
+
count,
|
|
20
|
+
hasActiveFilters = false,
|
|
21
|
+
expandWhenEmpty = false,
|
|
22
|
+
childrenClassName,
|
|
23
|
+
headerClassName,
|
|
24
|
+
className,
|
|
25
|
+
rightContent,
|
|
26
|
+
collapsible = true,
|
|
27
|
+
onHeaderClick,
|
|
28
|
+
labels
|
|
29
|
+
}) {
|
|
30
|
+
const l = { ...DEFAULT_COLLAPSIBLE_SECTION_LABELS, ...labels };
|
|
31
|
+
const hasCount = count !== void 0;
|
|
32
|
+
const shouldBeExpanded = !collapsible ? true : hasCount ? count > 0 ? isExpanded : expandWhenEmpty && isExpanded : isExpanded;
|
|
33
|
+
const hasContent = hasCount ? count > 0 || expandWhenEmpty : true;
|
|
34
|
+
const chevron = /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
lucideReact.ChevronRight,
|
|
36
|
+
{
|
|
37
|
+
className: ui.cn("size-4 shrink-0 transition-transform", shouldBeExpanded && "rotate-90")
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
const titleBlock = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
41
|
+
icon,
|
|
42
|
+
typeof title === "string" ? title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: title }) : title,
|
|
43
|
+
hasCount && /* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
+
"span",
|
|
45
|
+
{
|
|
46
|
+
className: ui.cn(
|
|
47
|
+
"ml-1 text-xs tabular-nums",
|
|
48
|
+
hasActiveFilters ? "rounded-full bg-primary px-1.5 font-medium text-primary-foreground" : "font-normal text-muted-foreground"
|
|
49
|
+
),
|
|
50
|
+
children: count
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
] });
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("w-full", className), "data-slot": "collapsible-section", children: [
|
|
55
|
+
onHeaderClick ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
role: "button",
|
|
59
|
+
tabIndex: 0,
|
|
60
|
+
onClick: onHeaderClick,
|
|
61
|
+
onKeyDown: (e) => {
|
|
62
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
onHeaderClick();
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
className: ui.cn(
|
|
68
|
+
"mb-4 flex cursor-pointer items-center justify-between gap-2 font-semibold pointer-coarse:min-h-11 transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
69
|
+
headerClassName
|
|
70
|
+
),
|
|
71
|
+
"data-slot": "collapsible-section-header",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2 text-left", children: [
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
75
|
+
"button",
|
|
76
|
+
{
|
|
77
|
+
type: "button",
|
|
78
|
+
"aria-expanded": shouldBeExpanded,
|
|
79
|
+
"aria-label": shouldBeExpanded ? l.collapseSection : l.expandSection,
|
|
80
|
+
disabled: !hasContent,
|
|
81
|
+
onClick: (e) => {
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
if (hasContent) onToggle();
|
|
84
|
+
},
|
|
85
|
+
className: "-ml-0.5 shrink-0 rounded-md p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 pointer-coarse:p-3.5",
|
|
86
|
+
children: chevron
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
titleBlock
|
|
90
|
+
] }),
|
|
91
|
+
rightContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
) : !collapsible ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
95
|
+
"div",
|
|
96
|
+
{
|
|
97
|
+
className: ui.cn("mb-4 flex items-center justify-between", headerClassName),
|
|
98
|
+
"data-slot": "collapsible-section-header",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 items-center gap-2 text-left font-medium", children: titleBlock }),
|
|
101
|
+
rightContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
className: ui.cn("mb-4 flex items-center justify-between", headerClassName),
|
|
108
|
+
"data-slot": "collapsible-section-header",
|
|
109
|
+
children: [
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
111
|
+
"div",
|
|
112
|
+
{
|
|
113
|
+
role: "button",
|
|
114
|
+
tabIndex: hasContent ? 0 : -1,
|
|
115
|
+
"aria-expanded": shouldBeExpanded,
|
|
116
|
+
"aria-disabled": !hasContent,
|
|
117
|
+
onClick: hasContent ? onToggle : void 0,
|
|
118
|
+
onKeyDown: hasContent ? (e) => {
|
|
119
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
120
|
+
e.preventDefault();
|
|
121
|
+
onToggle();
|
|
122
|
+
}
|
|
123
|
+
} : void 0,
|
|
124
|
+
className: ui.cn(
|
|
125
|
+
"touch-hit flex min-w-0 items-center gap-2 rounded-md text-left font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
126
|
+
hasContent ? "cursor-pointer hover:text-muted-foreground" : "cursor-default opacity-60"
|
|
127
|
+
),
|
|
128
|
+
children: [
|
|
129
|
+
chevron,
|
|
130
|
+
titleBlock
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
rightContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: rightContent })
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
shouldBeExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: childrenClassName ?? "mb-8 flex flex-wrap justify-start gap-6", children })
|
|
139
|
+
] });
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
exports.CollapsibleSection = CollapsibleSection;
|
|
143
|
+
exports.DEFAULT_COLLAPSIBLE_SECTION_LABELS = DEFAULT_COLLAPSIBLE_SECTION_LABELS;
|
|
144
|
+
//# sourceMappingURL=chunk-REH7PX3N.cjs.map
|
|
145
|
+
//# sourceMappingURL=chunk-REH7PX3N.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/home/CollapsibleSection.tsx"],"names":["jsx","ChevronRight","cn","jsxs"],"mappings":"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","file":"chunk-REH7PX3N.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Fixed strings of the section header. */\nexport interface CollapsibleSectionLabels {\n /** The chevron button's name (only with `onHeaderClick`). */\n collapseSection: string\n expandSection: string\n}\n\nexport const DEFAULT_COLLAPSIBLE_SECTION_LABELS: CollapsibleSectionLabels = {\n collapseSection: 'Collapse section',\n expandSection: 'Expand section',\n}\n\nexport interface CollapsibleSectionProps {\n /** The section's heading. A node, so callers can add badges or tooltips. */\n title: ReactNode\n /** Leading glyph before the title. */\n icon?: ReactNode\n isExpanded: boolean\n onToggle: () => void\n children: ReactNode\n /** Count badge beside the title. When 0 the section cannot expand (unless `expandWhenEmpty`). */\n count?: number\n /** The count badge is filled (a filter is active). */\n hasActiveFilters?: boolean\n expandWhenEmpty?: boolean\n /** Class for the body wrapper. */\n childrenClassName?: string\n headerClassName?: string\n className?: string\n /** Trailing header content. */\n rightContent?: ReactNode\n /** When false the section is always open: no chevron, a plain header. */\n collapsible?: boolean\n /**\n * When set, the whole header is one click target firing this (e.g. open a\n * detail panel) and the chevron becomes its own separate toggle.\n */\n onHeaderClick?: () => void\n labels?: Partial<CollapsibleSectionLabels>\n}\n\n/**\n * A section with a chevron toggle, title, optional count and body. The header\n * is a `role=\"button\"` div (not a native button) because `title`/`rightContent`\n * may hold interactive nodes such as tooltip triggers; a button inside a button\n * is invalid HTML.\n */\nexport function CollapsibleSection({\n title,\n icon,\n isExpanded,\n onToggle,\n children,\n count,\n hasActiveFilters = false,\n expandWhenEmpty = false,\n childrenClassName,\n headerClassName,\n className,\n rightContent,\n collapsible = true,\n onHeaderClick,\n labels,\n}: CollapsibleSectionProps) {\n const l = { ...DEFAULT_COLLAPSIBLE_SECTION_LABELS, ...labels }\n const hasCount = count !== undefined\n const shouldBeExpanded = !collapsible\n ? true\n : hasCount\n ? count > 0\n ? isExpanded\n : expandWhenEmpty && isExpanded\n : isExpanded\n const hasContent = hasCount ? count > 0 || expandWhenEmpty : true\n\n const chevron = (\n <ChevronRight\n className={cn('size-4 shrink-0 transition-transform', shouldBeExpanded && 'rotate-90')}\n />\n )\n const titleBlock = (\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon}\n {typeof title === 'string'\n ? title && <span className=\"whitespace-nowrap\">{title}</span>\n : title}\n {hasCount && (\n <span\n className={cn(\n 'ml-1 text-xs tabular-nums',\n hasActiveFilters\n ? 'rounded-full bg-primary px-1.5 font-medium text-primary-foreground'\n : 'font-normal text-muted-foreground'\n )}\n >\n {count}\n </span>\n )}\n </div>\n )\n\n return (\n <div className={cn('w-full', className)} data-slot=\"collapsible-section\">\n {onHeaderClick ? (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onHeaderClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onHeaderClick()\n }\n }}\n className={cn(\n 'mb-4 flex cursor-pointer items-center justify-between gap-2 font-semibold pointer-coarse:min-h-11 transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n headerClassName\n )}\n data-slot=\"collapsible-section-header\"\n >\n <div className=\"flex min-w-0 items-center gap-2 text-left\">\n <button\n type=\"button\"\n aria-expanded={shouldBeExpanded}\n aria-label={shouldBeExpanded ? l.collapseSection : l.expandSection}\n disabled={!hasContent}\n onClick={(e) => {\n e.stopPropagation()\n if (hasContent) onToggle()\n }}\n className=\"-ml-0.5 shrink-0 rounded-md p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 pointer-coarse:p-3.5\"\n >\n {chevron}\n </button>\n {titleBlock}\n </div>\n {rightContent && <div className=\"flex shrink-0 items-center\">{rightContent}</div>}\n </div>\n ) : !collapsible ? (\n <div\n className={cn('mb-4 flex items-center justify-between', headerClassName)}\n data-slot=\"collapsible-section-header\"\n >\n <div className=\"flex min-w-0 items-center gap-2 text-left font-medium\">{titleBlock}</div>\n {rightContent && <div className=\"flex shrink-0 items-center\">{rightContent}</div>}\n </div>\n ) : (\n <div\n className={cn('mb-4 flex items-center justify-between', headerClassName)}\n data-slot=\"collapsible-section-header\"\n >\n <div\n role=\"button\"\n tabIndex={hasContent ? 0 : -1}\n aria-expanded={shouldBeExpanded}\n aria-disabled={!hasContent}\n onClick={hasContent ? onToggle : undefined}\n onKeyDown={\n hasContent\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onToggle()\n }\n }\n : undefined\n }\n className={cn(\n 'touch-hit flex min-w-0 items-center gap-2 rounded-md text-left font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n hasContent\n ? 'cursor-pointer hover:text-muted-foreground'\n : 'cursor-default opacity-60'\n )}\n >\n {chevron}\n {titleBlock}\n </div>\n {rightContent && <div className=\"flex shrink-0 items-center\">{rightContent}</div>}\n </div>\n )}\n {shouldBeExpanded && (\n <div className={childrenClassName ?? 'mb-8 flex flex-wrap justify-start gap-6'}>\n {children}\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Trash2 } from 'lucide-react';
|
|
3
|
+
import { Tooltip, TooltipTrigger, TooltipContent, cn, Button } from '@arbidocs/react/ui';
|
|
4
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/home/ProjectBandParts.tsx
|
|
7
|
+
function PlainBandTitle({
|
|
8
|
+
title,
|
|
9
|
+
count,
|
|
10
|
+
hint
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", "data-slot": "band-title", children: [
|
|
13
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold text-foreground", children: title }),
|
|
14
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm tabular-nums text-muted-foreground", children: count }),
|
|
15
|
+
hint && /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: hint })
|
|
16
|
+
] });
|
|
17
|
+
}
|
|
18
|
+
function ProjectBandTitle({
|
|
19
|
+
name,
|
|
20
|
+
count,
|
|
21
|
+
nameTestId,
|
|
22
|
+
breakdown,
|
|
23
|
+
readout
|
|
24
|
+
}) {
|
|
25
|
+
return /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1", "data-slot": "band-title", children: [
|
|
26
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold text-foreground", "data-testid": nameTestId, children: name }) }),
|
|
28
|
+
breakdown && /* @__PURE__ */ jsx(TooltipContent, { side: "top", children: breakdown })
|
|
29
|
+
] }),
|
|
30
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm tabular-nums text-muted-foreground", children: count }),
|
|
31
|
+
readout
|
|
32
|
+
] });
|
|
33
|
+
}
|
|
34
|
+
function ProjectBreakdown({ name, badge, meters, dailyCap }) {
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-64 space-y-2.5", "data-slot": "project-breakdown", children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: name }),
|
|
38
|
+
badge
|
|
39
|
+
] }),
|
|
40
|
+
meters && /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 border-t border-border/50 pt-2.5", children: [
|
|
41
|
+
meters,
|
|
42
|
+
dailyCap && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-6 text-xs", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: dailyCap.label }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums text-foreground", children: dailyCap.value })
|
|
45
|
+
] })
|
|
46
|
+
] })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function ProjectReadout({ plan, usageLabel = "Usage:", usage }) {
|
|
50
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
51
|
+
plan && /* @__PURE__ */ jsx(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
className: "flex items-center whitespace-nowrap",
|
|
55
|
+
"data-testid": plan.testId,
|
|
56
|
+
"data-slot": "project-plan",
|
|
57
|
+
children: plan.badge
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ jsxs(
|
|
61
|
+
"span",
|
|
62
|
+
{
|
|
63
|
+
className: "flex items-center gap-1.5 text-sm text-muted-foreground",
|
|
64
|
+
"data-testid": usage.testId,
|
|
65
|
+
"data-slot": "project-usage",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ jsx("span", { children: usageLabel }),
|
|
68
|
+
usage.node
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
] });
|
|
73
|
+
}
|
|
74
|
+
function GridWithSelectionBar({
|
|
75
|
+
className,
|
|
76
|
+
grid,
|
|
77
|
+
bar
|
|
78
|
+
}) {
|
|
79
|
+
return /* @__PURE__ */ jsxs(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: cn("flex h-full min-h-0 flex-col", className),
|
|
83
|
+
"data-slot": "grid-with-selection-bar",
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx("div", { className: "relative min-h-0 flex-1", children: grid }),
|
|
86
|
+
bar
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
function BulkDeleteButton({
|
|
92
|
+
count,
|
|
93
|
+
isCompact,
|
|
94
|
+
disabled,
|
|
95
|
+
onClick,
|
|
96
|
+
label = "Delete"
|
|
97
|
+
}) {
|
|
98
|
+
return /* @__PURE__ */ jsxs(
|
|
99
|
+
Button,
|
|
100
|
+
{
|
|
101
|
+
variant: "outline",
|
|
102
|
+
size: "sm",
|
|
103
|
+
onClick,
|
|
104
|
+
disabled,
|
|
105
|
+
title: label,
|
|
106
|
+
className: "border-destructive/30 text-destructive hover:bg-destructive hover:text-destructive-foreground pointer-coarse:h-11",
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsx(Trash2, { className: "size-4" }),
|
|
109
|
+
isCompact ? /* @__PURE__ */ jsx("span", { className: "sr-only", children: label }) : /* @__PURE__ */ jsxs("span", { className: "ml-1", children: [
|
|
110
|
+
label,
|
|
111
|
+
" ",
|
|
112
|
+
count > 0 ? `(${count})` : ""
|
|
113
|
+
] })
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
function GridCellRow({ testId, children }) {
|
|
119
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "grid-cell-row", "data-testid": testId, className: "flex items-center", children });
|
|
120
|
+
}
|
|
121
|
+
function EmptyCellDash() {
|
|
122
|
+
return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", "aria-label": "None", children: "\u2014" });
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export { BulkDeleteButton, EmptyCellDash, GridCellRow, GridWithSelectionBar, PlainBandTitle, ProjectBandTitle, ProjectBreakdown, ProjectReadout };
|
|
126
|
+
//# sourceMappingURL=chunk-RQKWYKZY.js.map
|
|
127
|
+
//# sourceMappingURL=chunk-RQKWYKZY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/home/ProjectBandParts.tsx"],"names":[],"mappings":";;;;;AAKO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,aAAU,YAAA,EAClD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAAA,EAAkD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACxE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACnE,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAiC,QAAA,EAAA,IAAA,EAAK;AAAA,GAAA,EACjE,CAAA;AAEJ;AAaO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qDAAA,EAAsD,aAAU,YAAA,EAC9E,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gDAAA,EAAiD,aAAA,EAAa,UAAA,EAC3E,QAAA,EAAA,IAAA,EACH,CAAA,EACF,CAAA;AAAA,MACC,SAAA,oBAAa,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,OAAO,QAAA,EAAA,SAAA,EAAU;AAAA,KAAA,EACtD,CAAA;AAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACnE;AAAA,GAAA,EACH,CAAA;AAEJ;AAYO,SAAS,iBAAiB,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,UAAS,EAA0B;AACzF,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,aAAU,mBAAA,EAC1C,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MAC7D;AAAA,KAAA,EACH,CAAA;AAAA,IACC,MAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,MACA,QAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA;AAAA,wBACxD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA4C,mBAAS,KAAA,EAAM;AAAA,OAAA,EAC7E;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAWO,SAAS,eAAe,EAAE,IAAA,EAAM,UAAA,GAAa,QAAA,EAAU,OAAM,EAAwB;AAC1F,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qCAAA;AAAA,QACV,eAAa,IAAA,CAAK,MAAA;AAAA,QAClB,WAAA,EAAU,cAAA;AAAA,QAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,KACR;AAAA,oBAEF,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yDAAA;AAAA,QACV,eAAa,KAAA,CAAM,MAAA;AAAA,QACnB,WAAA,EAAU,eAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAM,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,UACjB,KAAA,CAAM;AAAA;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;AAGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA;AAAA,MACvD,WAAA,EAAU,yBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,QAC9C;AAAA;AAAA;AAAA,GACH;AAEJ;AAYO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAA0B;AACxB,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAU,mHAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,QAAA,EAAS,CAAA;AAAA,QAC1B,SAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,iBAAM,CAAA,mBAEjC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UAAM,GAAA;AAAA,UAAE,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,SAAA,EACtC;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAGO,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,QAAA,EAAS,EAA6C;AAC1F,EAAA,uBACE,GAAA,CAAC,SAAI,WAAA,EAAU,eAAA,EAAgB,eAAa,MAAA,EAAQ,SAAA,EAAU,qBAC3D,QAAA,EACH,CAAA;AAEJ;AAGO,SAAS,aAAA,GAAgB;AAC9B,EAAA,2BACG,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,YAAA,EAAW,QAAO,QAAA,EAAA,QAAA,EAE1D,CAAA;AAEJ","file":"chunk-RQKWYKZY.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { Trash2 } from 'lucide-react'\nimport { Button, cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\n\n/** Name + count text of a band that has no project to open (\"Common\", own workspaces). */\nexport function PlainBandTitle({\n title,\n count,\n hint,\n}: {\n title: string\n count: number\n /** Muted explanation after the count, e.g. \"Shared with everyone\". */\n hint?: string\n}) {\n return (\n <span className=\"flex items-center gap-2\" data-slot=\"band-title\">\n <span className=\"truncate text-sm font-semibold text-foreground\">{title}</span>\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n {hint && <span className=\"text-sm text-muted-foreground\">{hint}</span>}\n </span>\n )\n}\n\nexport interface ProjectBandTitleProps {\n name: string\n count: number\n nameTestId: string\n /** Full plan / usage breakdown shown as a tooltip on the name. */\n breakdown?: ReactNode\n /** Plan badge and usage readout, right after the count. */\n readout?: ReactNode\n}\n\n/** Title of a project band: name (with breakdown tooltip), count and the plan / usage readout. */\nexport function ProjectBandTitle({\n name,\n count,\n nameTestId,\n breakdown,\n readout,\n}: ProjectBandTitleProps) {\n return (\n <span className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1\" data-slot=\"band-title\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"truncate text-sm font-semibold text-foreground\" data-testid={nameTestId}>\n {name}\n </span>\n </TooltipTrigger>\n {breakdown && <TooltipContent side=\"top\">{breakdown}</TooltipContent>}\n </Tooltip>\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n {readout}\n </span>\n )\n}\n\nexport interface ProjectBreakdownProps {\n name: string\n /** Plan badge (owned projects only). */\n badge?: ReactNode\n /** Quota meters; shown for owned projects only. */\n meters?: ReactNode\n dailyCap?: { label: string; value: string }\n}\n\n/** Plan + limits panel of the project tooltip. */\nexport function ProjectBreakdown({ name, badge, meters, dailyCap }: ProjectBreakdownProps) {\n return (\n <div className=\"w-64 space-y-2.5\" data-slot=\"project-breakdown\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-sm font-semibold text-foreground\">{name}</span>\n {badge}\n </div>\n {meters && (\n <div className=\"space-y-2.5 border-t border-border/50 pt-2.5\">\n {meters}\n {dailyCap && (\n <div className=\"flex items-center justify-between gap-6 text-xs\">\n <span className=\"text-muted-foreground\">{dailyCap.label}</span>\n <span className=\"font-medium tabular-nums text-foreground\">{dailyCap.value}</span>\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport interface ProjectReadoutProps {\n /** Plan badge, with the id of its wrapper. */\n plan?: { badge: ReactNode; testId: string }\n usageLabel?: string\n /** The quota meter (a slot: it needs the host's formatter), with its wrapper's test id. */\n usage: { testId: string; node: ReactNode }\n}\n\n/** Plan / usage readout beside a project name: always visible, nothing hover-only. */\nexport function ProjectReadout({ plan, usageLabel = 'Usage:', usage }: ProjectReadoutProps) {\n return (\n <>\n {plan && (\n <span\n className=\"flex items-center whitespace-nowrap\"\n data-testid={plan.testId}\n data-slot=\"project-plan\"\n >\n {plan.badge}\n </span>\n )}\n <span\n className=\"flex items-center gap-1.5 text-sm text-muted-foreground\"\n data-testid={usage.testId}\n data-slot=\"project-usage\"\n >\n <span>{usageLabel}</span>\n {usage.node}\n </span>\n </>\n )\n}\n\n/** Column filling its container: scrolling grid on top, selection bar underneath. */\nexport function GridWithSelectionBar({\n className,\n grid,\n bar,\n}: {\n className?: string\n grid: ReactNode\n bar: ReactNode\n}) {\n return (\n <div\n className={cn('flex h-full min-h-0 flex-col', className)}\n data-slot=\"grid-with-selection-bar\"\n >\n <div className=\"relative min-h-0 flex-1\">{grid}</div>\n {bar}\n </div>\n )\n}\n\nexport interface BulkDeleteButtonProps {\n count: number\n /** Icon only (a narrow selection bar). */\n isCompact: boolean\n disabled?: boolean\n onClick: () => void\n label?: string\n}\n\n/** \"Delete (n)\" of a selection bar. */\nexport function BulkDeleteButton({\n count,\n isCompact,\n disabled,\n onClick,\n label = 'Delete',\n}: BulkDeleteButtonProps) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClick}\n disabled={disabled}\n title={label}\n className=\"border-destructive/30 text-destructive hover:bg-destructive hover:text-destructive-foreground pointer-coarse:h-11\"\n >\n <Trash2 className=\"size-4\" />\n {isCompact ? (\n <span className=\"sr-only\">{label}</span>\n ) : (\n <span className=\"ml-1\">\n {label} {count > 0 ? `(${count})` : ''}\n </span>\n )}\n </Button>\n )\n}\n\n/** Single-line row inside a grid cell (identity pill, avatars). */\nexport function GridCellRow({ testId, children }: { testId?: string; children: ReactNode }) {\n return (\n <div data-slot=\"grid-cell-row\" data-testid={testId} className=\"flex items-center\">\n {children}\n </div>\n )\n}\n\n/** Muted em dash of an empty grid cell. */\nexport function EmptyCellDash() {\n return (\n <span className=\"text-muted-foreground\" aria-label=\"None\">\n —\n </span>\n )\n}\n"]}
|
|
@@ -2033,6 +2033,32 @@ function SyncFolderStatus({
|
|
|
2033
2033
|
}
|
|
2034
2034
|
);
|
|
2035
2035
|
}
|
|
2036
|
+
|
|
2037
|
+
// src/settings/tri-state-filters.ts
|
|
2038
|
+
function applyTriStateFilters(items, filterStates, getAttributes) {
|
|
2039
|
+
const includeKeys = [];
|
|
2040
|
+
const excludeKeys = [];
|
|
2041
|
+
for (const [key, state] of filterStates.entries()) {
|
|
2042
|
+
if (state === "include") includeKeys.push(key);
|
|
2043
|
+
else if (state === "exclude") excludeKeys.push(key);
|
|
2044
|
+
}
|
|
2045
|
+
if (includeKeys.length === 0 && excludeKeys.length === 0) {
|
|
2046
|
+
return items;
|
|
2047
|
+
}
|
|
2048
|
+
return items.filter((item) => {
|
|
2049
|
+
const attributes = getAttributes(item);
|
|
2050
|
+
for (const key of excludeKeys) {
|
|
2051
|
+
if (attributes[key]) return false;
|
|
2052
|
+
}
|
|
2053
|
+
if (includeKeys.length === 0) {
|
|
2054
|
+
return true;
|
|
2055
|
+
}
|
|
2056
|
+
for (const key of includeKeys) {
|
|
2057
|
+
if (attributes[key]) return true;
|
|
2058
|
+
}
|
|
2059
|
+
return false;
|
|
2060
|
+
});
|
|
2061
|
+
}
|
|
2036
2062
|
function FilterChip({
|
|
2037
2063
|
label,
|
|
2038
2064
|
state,
|
|
@@ -5172,6 +5198,7 @@ exports.WelcomeDialog = WelcomeDialog;
|
|
|
5172
5198
|
exports.WelcomeProjectPicker = WelcomeProjectPicker;
|
|
5173
5199
|
exports.WorkOfflineToggle = WorkOfflineToggle;
|
|
5174
5200
|
exports.applyInvertedIndexFilter = applyInvertedIndexFilter;
|
|
5201
|
+
exports.applyTriStateFilters = applyTriStateFilters;
|
|
5175
5202
|
exports.buildInvertedIndex = buildInvertedIndex;
|
|
5176
5203
|
exports.formatSessionTtl = formatSessionTtl;
|
|
5177
5204
|
exports.resolveSettingsSection = resolveSettingsSection;
|
|
@@ -5180,5 +5207,5 @@ exports.toActiveSessionViews = toActiveSessionViews;
|
|
|
5180
5207
|
exports.toDeleteBlockerViews = toDeleteBlockerViews;
|
|
5181
5208
|
exports.toLogoutSessionViews = toLogoutSessionViews;
|
|
5182
5209
|
exports.toNotificationCategories = toNotificationCategories;
|
|
5183
|
-
//# sourceMappingURL=chunk-
|
|
5184
|
-
//# sourceMappingURL=chunk-
|
|
5210
|
+
//# sourceMappingURL=chunk-SN2GZ4ZM.cjs.map
|
|
5211
|
+
//# sourceMappingURL=chunk-SN2GZ4ZM.cjs.map
|