@alfadocs/ui-kit 0.73.0 → 0.77.0

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 (199) hide show
  1. package/dist/_chunks/actions-cell-renderer-DLrcSTK_.js +1546 -0
  2. package/dist/_chunks/{address-fields-COyjgqxA.js → address-fields-7k59FnJ6.js} +2 -2
  3. package/dist/_chunks/{ai-prompt-input-DFm58UjY.js → ai-prompt-input-DziJCGLe.js} +2 -2
  4. package/dist/_chunks/{audio-recorder-CjAY0GAc.js → audio-recorder-Cc3KuL9y.js} +2 -2
  5. package/dist/_chunks/{bishop-score-Bs6t6Zv1.js → bishop-score-DDW5-gb9.js} +2 -2
  6. package/dist/_chunks/{booking-CWnZhZ5g.js → booking-CLmeXtGv.js} +3 -3
  7. package/dist/_chunks/{care-plan-card-CfIP3Vc1.js → care-plan-card-BrwhyIJI.js} +2 -2
  8. package/dist/_chunks/{care-plan-entry-card-CRbS-G00.js → care-plan-entry-card-DWEdCQM3.js} +2 -2
  9. package/dist/_chunks/{country-select-DYHDLEjG.js → country-select-BN9nedAp.js} +2 -2
  10. package/dist/_chunks/data-table-tabs-BEUXiRlu.js +710 -0
  11. package/dist/_chunks/document-preview-CvHnHf6T.js +243 -0
  12. package/dist/_chunks/{document-scanner-BE6Jz4Ob.js → document-scanner-B6h1Ir56.js} +2 -2
  13. package/dist/_chunks/{field-value-DCXJXKab.js → field-value-DHG6gEKS.js} +2 -2
  14. package/dist/_chunks/file-Cwe9VC1A.js +40 -0
  15. package/dist/_chunks/file-manager-DfTG7bxx.js +1771 -0
  16. package/dist/_chunks/{file-upload-B2SXhRiN.js → file-upload-DENvuhfs.js} +98 -129
  17. package/dist/_chunks/flag-Cnmivlrl.js +641 -0
  18. package/dist/_chunks/{gestational-age-calculator-C9Dfis4I.js → gestational-age-calculator-BpYw-WF-.js} +2 -2
  19. package/dist/_chunks/{header-settings-CRQDCYgr.js → header-settings-DMfdx0Vq.js} +2 -2
  20. package/dist/_chunks/{icon-picker-BePK27S-.js → icon-picker-CM9ubkew.js} +2 -2
  21. package/dist/_chunks/link-cell-renderer-BQGUs45d.js +711 -0
  22. package/dist/_chunks/{locale-picker-Cbfqc0_N.js → locale-picker-EyvPrwDc.js} +3 -3
  23. package/dist/_chunks/{marketplace-app-shell-Dm6S-hun.js → marketplace-app-shell-Bxq1PYAj.js} +3 -3
  24. package/dist/_chunks/{muscle-scheme-B9MIkuj0.js → muscle-scheme-CFBE2dme.js} +6 -14
  25. package/dist/_chunks/{notes-panel-B_8-Mebz.js → notes-panel-Cvdp818a.js} +2 -2
  26. package/dist/_chunks/{optical-prescription-BQ75_kf6.js → optical-prescription-BEjYQjiO.js} +2 -2
  27. package/dist/_chunks/{patient-details-JkOI3Ijd.js → patient-details-zy76MRh7.js} +5 -5
  28. package/dist/_chunks/{patient-summary-card-CQOLMH3E.js → patient-summary-card-D6kgdTNn.js} +2 -2
  29. package/dist/_chunks/{patient-table-B_mOe-ZT.js → patient-table-DweKjiXg.js} +122 -118
  30. package/dist/_chunks/periodontal-chart-CYBhr9vc.js +1305 -0
  31. package/dist/_chunks/periodontal-diagnosis-cco40xTa.js +345 -0
  32. package/dist/_chunks/periodontal-risk-chart-bUGkMwDg.js +334 -0
  33. package/dist/_chunks/{phone-input-dtnrvnZf.js → phone-input-D00ZBAm-.js} +2 -2
  34. package/dist/_chunks/{popover-DGTKfLWh.js → popover-Cc0a69sw.js} +31 -28
  35. package/dist/_chunks/{pregnancy-dating-IsDVfqJX.js → pregnancy-dating-msMl_6wz.js} +2 -2
  36. package/dist/_chunks/{radiograph-panel.agent-e488ooH8.js → radiograph-panel.agent-CxF9pVxd.js} +2 -2
  37. package/dist/_chunks/{rich-text-editor-CgA2bYwi.js → rich-text-editor-CCWjNkbx.js} +186 -177
  38. package/dist/_chunks/{select-BmCbJMJS.js → select-BW5ecXlX.js} +13 -13
  39. package/dist/_chunks/{sidebar-CtU35PIX.js → sidebar-C0PbwJBc.js} +357 -320
  40. package/dist/_chunks/signature-request-C-mskXwi.js +318 -0
  41. package/dist/_chunks/{tabs-DVQ941Sj.js → tabs-CVTukWRD.js} +2 -2
  42. package/dist/_chunks/{tasks-panel-LCK5ZXvU.js → tasks-panel-CjGAhIN8.js} +2 -2
  43. package/dist/_chunks/tooth-data-BwuoKFf4.js +660 -0
  44. package/dist/_chunks/tooth-scheme-BzJ6rcte.js +1483 -0
  45. package/dist/_chunks/{unit-converter-3uL_tMCm.js → unit-converter-CSLWFDQh.js} +2 -2
  46. package/dist/agent-catalog.json +1430 -213
  47. package/dist/agent-i18n/en.json +86 -5
  48. package/dist/components/_shared/entity-card/entity-card.d.ts +1 -1
  49. package/dist/components/address-fields/index.js +1 -1
  50. package/dist/components/ai-prompt-input/index.js +1 -1
  51. package/dist/components/anamnesis-card/anamnesis-card.d.ts +1 -1
  52. package/dist/components/appointment-card/appointment-card.d.ts +1 -1
  53. package/dist/components/audio-recorder/index.js +1 -1
  54. package/dist/components/bishop-score/index.js +1 -1
  55. package/dist/components/booking/index.js +1 -1
  56. package/dist/components/card/card.d.ts +1 -1
  57. package/dist/components/care-plan-card/index.js +1 -1
  58. package/dist/components/care-plan-entry-card/index.js +1 -1
  59. package/dist/components/clinical-note-card/clinical-note-card.d.ts +1 -1
  60. package/dist/components/contact-profile-card/contact-profile-card.d.ts +1 -1
  61. package/dist/components/country-select/index.js +1 -1
  62. package/dist/components/data-table/index.js +35 -34
  63. package/dist/components/data-table/toolbar.d.ts +1 -1
  64. package/dist/components/data-table-tabs/data-table-tabs.agent.d.ts +4 -0
  65. package/dist/components/data-table-tabs/data-table-tabs.d.ts +93 -0
  66. package/dist/components/data-table-tabs/index.d.ts +5 -0
  67. package/dist/components/data-table-tabs/index.js +8 -0
  68. package/dist/components/data-table-tabs/use-data-table-filter-tabs.d.ts +63 -0
  69. package/dist/components/document-preview/document-preview.agent.d.ts +4 -0
  70. package/dist/components/document-preview/document-preview.d.ts +64 -0
  71. package/dist/components/document-preview/index.d.ts +4 -0
  72. package/dist/components/document-preview/index.js +6 -0
  73. package/dist/components/document-scanner/index.js +1 -1
  74. package/dist/components/file-manager/dialogs.d.ts +48 -0
  75. package/dist/components/file-manager/file-manager.agent.d.ts +4 -0
  76. package/dist/components/file-manager/file-manager.d.ts +82 -0
  77. package/dist/components/file-manager/folder-tree.d.ts +12 -0
  78. package/dist/components/file-manager/index.d.ts +5 -0
  79. package/dist/components/file-manager/index.js +6 -0
  80. package/dist/components/file-manager/list-view.d.ts +49 -0
  81. package/dist/components/file-manager/toolbar.d.ts +15 -0
  82. package/dist/components/file-manager/types.d.ts +167 -0
  83. package/dist/components/file-manager/utils.d.ts +34 -0
  84. package/dist/components/file-upload/index.js +1 -1
  85. package/dist/components/flag/index.js +1 -1
  86. package/dist/components/gestational-age-calculator/index.js +1 -1
  87. package/dist/components/header-settings/index.js +1 -1
  88. package/dist/components/icon-picker/index.js +1 -1
  89. package/dist/components/index.d.ts +7 -0
  90. package/dist/components/locale-picker/index.js +1 -1
  91. package/dist/components/message-card/message-card.d.ts +1 -1
  92. package/dist/components/muscle-scheme/index.js +1 -1
  93. package/dist/components/notes-panel/index.js +1 -1
  94. package/dist/components/notification-card/notification-card.d.ts +1 -1
  95. package/dist/components/operator-hero/operator-hero.d.ts +1 -1
  96. package/dist/components/optical-prescription/index.js +1 -1
  97. package/dist/components/patient-details/index.js +1 -1
  98. package/dist/components/patient-summary-card/index.js +1 -1
  99. package/dist/components/patient-summary-card/patient-summary-card.d.ts +1 -1
  100. package/dist/components/patient-table/index.js +1 -1
  101. package/dist/components/payment-card/payment-card.d.ts +1 -1
  102. package/dist/components/payment-card/payment-request-card.d.ts +1 -1
  103. package/dist/components/periodontal-chart/index.d.ts +6 -0
  104. package/dist/components/periodontal-chart/index.js +23 -0
  105. package/dist/components/periodontal-chart/periodontal-chart-data.d.ts +164 -0
  106. package/dist/components/periodontal-chart/periodontal-chart.agent.d.ts +4 -0
  107. package/dist/components/periodontal-chart/periodontal-chart.d.ts +71 -0
  108. package/dist/components/periodontal-chart-card/periodontal-chart-card.d.ts +1 -1
  109. package/dist/components/periodontal-diagnosis/index.d.ts +6 -0
  110. package/dist/components/periodontal-diagnosis/index.js +13 -0
  111. package/dist/components/periodontal-diagnosis/periodontal-diagnosis-data.d.ts +30 -0
  112. package/dist/components/periodontal-diagnosis/periodontal-diagnosis.agent.d.ts +4 -0
  113. package/dist/components/periodontal-diagnosis/periodontal-diagnosis.d.ts +44 -0
  114. package/dist/components/periodontal-risk-chart/index.d.ts +6 -0
  115. package/dist/components/periodontal-risk-chart/index.js +9 -0
  116. package/dist/components/periodontal-risk-chart/periodontal-risk-chart.agent.d.ts +4 -0
  117. package/dist/components/periodontal-risk-chart/periodontal-risk-chart.d.ts +28 -0
  118. package/dist/components/periodontal-risk-chart/periodontal-risk-data.d.ts +47 -0
  119. package/dist/components/phone-input/index.js +1 -1
  120. package/dist/components/popover/index.js +1 -1
  121. package/dist/components/popover/popover.d.ts +1 -0
  122. package/dist/components/pregnancy-dating/index.js +1 -1
  123. package/dist/components/product-hub-tray/product-hub-panel.d.ts +1 -1
  124. package/dist/components/radiograph-panel/index.js +1 -1
  125. package/dist/components/rich-text-editor/index.js +1 -1
  126. package/dist/components/select/index.js +1 -1
  127. package/dist/components/sidebar/index.js +1 -1
  128. package/dist/components/sidebar/sidebar.d.ts +9 -0
  129. package/dist/components/skeleton-scheme/index.js +5 -13
  130. package/dist/components/stat/stat.d.ts +1 -1
  131. package/dist/components/tabs/index.js +1 -1
  132. package/dist/components/tasks-panel/index.js +1 -1
  133. package/dist/components/tooth-scheme/index.js +29 -28
  134. package/dist/components/unit-converter/index.js +1 -1
  135. package/dist/i18n/locales/ar.d.ts +321 -0
  136. package/dist/i18n/locales/ar.js +321 -0
  137. package/dist/i18n/locales/de.d.ts +321 -0
  138. package/dist/i18n/locales/de.js +321 -0
  139. package/dist/i18n/locales/el.d.ts +321 -0
  140. package/dist/i18n/locales/el.js +321 -0
  141. package/dist/i18n/locales/en.d.ts +321 -0
  142. package/dist/i18n/locales/en.js +321 -0
  143. package/dist/i18n/locales/es.d.ts +321 -0
  144. package/dist/i18n/locales/es.js +321 -0
  145. package/dist/i18n/locales/fr.d.ts +321 -0
  146. package/dist/i18n/locales/fr.js +321 -0
  147. package/dist/i18n/locales/hi.d.ts +321 -0
  148. package/dist/i18n/locales/hi.js +321 -0
  149. package/dist/i18n/locales/it.d.ts +321 -0
  150. package/dist/i18n/locales/it.js +321 -0
  151. package/dist/i18n/locales/ja.d.ts +321 -0
  152. package/dist/i18n/locales/ja.js +321 -0
  153. package/dist/i18n/locales/nl.d.ts +321 -0
  154. package/dist/i18n/locales/nl.js +321 -0
  155. package/dist/i18n/locales/pl.d.ts +321 -0
  156. package/dist/i18n/locales/pl.js +321 -0
  157. package/dist/i18n/locales/pt.d.ts +321 -0
  158. package/dist/i18n/locales/pt.js +321 -0
  159. package/dist/i18n/locales/ro.d.ts +321 -0
  160. package/dist/i18n/locales/ro.js +321 -0
  161. package/dist/i18n/locales/ru.d.ts +321 -0
  162. package/dist/i18n/locales/ru.js +321 -0
  163. package/dist/i18n/locales/sq.d.ts +321 -0
  164. package/dist/i18n/locales/sq.js +321 -0
  165. package/dist/i18n/locales/sv.d.ts +321 -0
  166. package/dist/i18n/locales/sv.js +321 -0
  167. package/dist/i18n/locales/tr.d.ts +321 -0
  168. package/dist/i18n/locales/tr.js +321 -0
  169. package/dist/i18n/locales/zh.d.ts +321 -0
  170. package/dist/i18n/locales/zh.js +321 -0
  171. package/dist/index.js +834 -783
  172. package/dist/locales/ar.json +321 -0
  173. package/dist/locales/de.json +321 -0
  174. package/dist/locales/el.json +321 -0
  175. package/dist/locales/en.json +321 -0
  176. package/dist/locales/es.json +321 -0
  177. package/dist/locales/fr.json +321 -0
  178. package/dist/locales/hi.json +321 -0
  179. package/dist/locales/it.json +321 -0
  180. package/dist/locales/ja.json +321 -0
  181. package/dist/locales/nl.json +321 -0
  182. package/dist/locales/pl.json +321 -0
  183. package/dist/locales/pt.json +321 -0
  184. package/dist/locales/ro.json +321 -0
  185. package/dist/locales/ru.json +321 -0
  186. package/dist/locales/sq.json +321 -0
  187. package/dist/locales/sv.json +321 -0
  188. package/dist/locales/tr.json +321 -0
  189. package/dist/locales/zh.json +321 -0
  190. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  191. package/dist/patterns/signature-request/index.d.ts +3 -0
  192. package/dist/patterns/signature-request/index.js +5 -0
  193. package/dist/patterns/signature-request/signature-request.d.ts +81 -0
  194. package/dist/tokens.css +1 -1
  195. package/package.json +29 -1
  196. package/dist/_chunks/columns-2-8lq4-b8e.js +0 -15
  197. package/dist/_chunks/flag-DZ6V7-hU.js +0 -637
  198. package/dist/_chunks/link-cell-renderer-CLI7sBkX.js +0 -2210
  199. package/dist/_chunks/tooth-scheme-CX49GycY.js +0 -2133
@@ -0,0 +1,710 @@
1
+ import { jsxs as L, jsx as b } from "react/jsx-runtime";
2
+ import { useMemo as ie, useCallback as u, useRef as f, useEffect as be, forwardRef as Se, useId as De, useState as ue, useImperativeHandle as Fe } from "react";
3
+ import * as oe from "@radix-ui/react-tabs";
4
+ import { a as Z, c as Ie } from "./index-D2ZczOXr.js";
5
+ import { useTranslation as ke } from "react-i18next";
6
+ import { I as de } from "./icon-button-C_kbcd7I.js";
7
+ import { P as ce } from "./popover-Cc0a69sw.js";
8
+ import { T as je } from "./text-input-CUvCb6ST.js";
9
+ import { u as ze } from "./use-direction-Dp8h70PP.js";
10
+ import { u as Ke } from "./registry-DvAUVLHh.js";
11
+ import { u as ye } from "./use-controllable-state-BiY4xTzM.js";
12
+ import { X as we } from "./x-B5YnXwCz.js";
13
+ import { P as Me } from "./plus-DzMQ_c6b.js";
14
+ import { C as Pe } from "./check-DrFSN__t.js";
15
+ const qe = {
16
+ id: "data-table-tabs",
17
+ capabilities: ["select_single", "view_change"],
18
+ state: {
19
+ activeTabId: {
20
+ type: "string | null",
21
+ descriptionKey: "ui.agent.dataTableTabs.state.activeTabId",
22
+ description: "Id of the currently-active saved-filter tab.",
23
+ read: (r) => r.getActiveTabId()
24
+ },
25
+ tabs: {
26
+ type: "Array<{ id, label }>",
27
+ descriptionKey: "ui.agent.dataTableTabs.state.tabs",
28
+ description: "The saved-filter tabs, in strip order (ids + labels).",
29
+ read: (r) => r.getTabs().map(({ id: o, label: g }) => ({ id: o, label: g }))
30
+ }
31
+ },
32
+ actions: {
33
+ select_tab: {
34
+ // Applies a saved filter model — a view change, like apply_filter.
35
+ safety: "read",
36
+ argsType: "{ id: string }",
37
+ argsSchema: {
38
+ type: "object",
39
+ properties: {
40
+ id: { type: "string", description: "Tab id to activate." }
41
+ },
42
+ required: ["id"]
43
+ },
44
+ idempotent: !0,
45
+ descriptionKey: "ui.agent.dataTableTabs.actions.selectTab",
46
+ description: "Activate a saved-filter tab: snapshots the outgoing tab, applies the incoming filter model to the table.",
47
+ invoke: (r, o) => {
48
+ r.selectTab(o.id);
49
+ }
50
+ },
51
+ get_tabs: {
52
+ safety: "read",
53
+ returns: "Array<{ id: string, label: string }>",
54
+ returnsSchema: {
55
+ type: "array",
56
+ items: {
57
+ type: "object",
58
+ properties: {
59
+ id: { type: "string" },
60
+ label: { type: "string" }
61
+ },
62
+ required: ["id", "label"]
63
+ }
64
+ },
65
+ idempotent: !0,
66
+ descriptionKey: "ui.agent.dataTableTabs.actions.getTabs",
67
+ description: "Return the saved-filter tabs (ids + labels) in order.",
68
+ invoke: (r) => r.getTabs().map(({ id: o, label: g }) => ({ id: o, label: g }))
69
+ },
70
+ add_tab: {
71
+ safety: "write",
72
+ argsType: "{ label?: string }",
73
+ argsSchema: {
74
+ type: "object",
75
+ properties: {
76
+ label: {
77
+ type: "string",
78
+ description: "Display name for the new tab. Defaults to a numbered name."
79
+ }
80
+ },
81
+ required: []
82
+ },
83
+ idempotent: !1,
84
+ descriptionKey: "ui.agent.dataTableTabs.actions.addTab",
85
+ description: "Add a new tab capturing the table's current filter model, and activate it. Returns the new tab id.",
86
+ returns: "string",
87
+ returnsSchema: { type: "string" },
88
+ invoke: (r, o) => r.addTab(o.label)
89
+ },
90
+ rename_tab: {
91
+ safety: "write",
92
+ argsType: "{ id: string, label: string }",
93
+ argsSchema: {
94
+ type: "object",
95
+ properties: {
96
+ id: { type: "string", description: "Tab id to rename." },
97
+ label: { type: "string", description: "New display name." }
98
+ },
99
+ required: ["id", "label"]
100
+ },
101
+ idempotent: !0,
102
+ descriptionKey: "ui.agent.dataTableTabs.actions.renameTab",
103
+ description: "Rename a saved-filter tab. No-op on locked tabs and empty labels.",
104
+ invoke: (r, o) => {
105
+ r.renameTab(o.id, o.label);
106
+ }
107
+ },
108
+ remove_tab: {
109
+ // Removes a saved filter permanently — destructive, do not downgrade.
110
+ safety: "destructive",
111
+ argsType: "{ id: string }",
112
+ argsSchema: {
113
+ type: "object",
114
+ properties: {
115
+ id: { type: "string", description: "Tab id to remove." }
116
+ },
117
+ required: ["id"]
118
+ },
119
+ idempotent: !0,
120
+ descriptionKey: "ui.agent.dataTableTabs.actions.removeTab",
121
+ description: "Remove a saved-filter tab (its saved filter is lost). No-op on locked tabs and the last remaining tab.",
122
+ invoke: (r, o) => {
123
+ r.removeTab(o.id);
124
+ }
125
+ }
126
+ },
127
+ domHooks: {
128
+ root: { attr: "data-component", value: "data-table-tabs" },
129
+ instanceId: { attr: "data-component-id", sourceProp: "id" },
130
+ item: { attr: "data-tab-id" }
131
+ }
132
+ };
133
+ let xe = 0;
134
+ function Le() {
135
+ try {
136
+ if (typeof crypto < "u" && "randomUUID" in crypto)
137
+ return crypto.randomUUID();
138
+ } catch {
139
+ }
140
+ return xe += 1, `tab-${xe}`;
141
+ }
142
+ function le(r) {
143
+ return typeof r == "object" && r !== null && !Array.isArray(r) && Object.getPrototypeOf(r) !== null;
144
+ }
145
+ function Oe(r) {
146
+ return !le(r) || r.v !== 1 || !Array.isArray(r.tabs) ? !1 : r.tabs.every(
147
+ (o) => le(o) && typeof o.id == "string" && typeof o.label == "string" && le(o.filterModel)
148
+ );
149
+ }
150
+ function Ve(r) {
151
+ var J, Q;
152
+ const {
153
+ getTable: o,
154
+ tabs: g,
155
+ defaultTabs: k,
156
+ onTabsChange: R,
157
+ activeTabId: ee,
158
+ defaultActiveTabId: te,
159
+ onActiveTabChange: ae,
160
+ persistKey: z,
161
+ captureQuickFilter: x = !1,
162
+ applyOnActivate: A = !0,
163
+ maxTabs: O = 8,
164
+ createTab: N,
165
+ makeTabId: V = Le
166
+ } = r, { t: _ } = ke(), $ = g !== void 0, E = ie(() => k && k.length > 0 ? k : [
167
+ {
168
+ id: "default",
169
+ label: _("dataTableTabs.newTabName", { number: 1 }),
170
+ filterModel: {}
171
+ }
172
+ ], []), W = ie(() => {
173
+ if (!z || $ || typeof window > "u")
174
+ return null;
175
+ try {
176
+ const t = window.localStorage.getItem(`data-table-tabs:${z}`);
177
+ if (!t) return null;
178
+ const a = JSON.parse(t);
179
+ return Oe(a) ? a.tabs : null;
180
+ } catch {
181
+ return null;
182
+ }
183
+ }, []), [U, G] = ye({
184
+ value: g,
185
+ defaultValue: W ?? E,
186
+ onChange: R
187
+ }), C = ie(() => U ?? E, [U, E]), y = u(
188
+ (t) => {
189
+ const a = t(p.current);
190
+ if (p.current = a, G(a), z && !$)
191
+ try {
192
+ const n = { v: 1, tabs: a };
193
+ window.localStorage.setItem(
194
+ `data-table-tabs:${z}`,
195
+ JSON.stringify(n)
196
+ );
197
+ } catch {
198
+ }
199
+ },
200
+ // eslint-disable-next-line react-hooks/exhaustive-deps
201
+ [G, z, $]
202
+ ), [ne, S] = ye({
203
+ value: ee,
204
+ defaultValue: te ?? ((J = C[0]) == null ? void 0 : J.id) ?? "default",
205
+ onChange: ae
206
+ }), l = ne ?? ((Q = C[0]) == null ? void 0 : Q.id) ?? "default", p = f(C);
207
+ p.current = C;
208
+ const m = f(l);
209
+ m.current = l;
210
+ const H = f(!1), T = f(o);
211
+ T.current = o;
212
+ const K = u(() => {
213
+ const t = T.current();
214
+ if (!t) return;
215
+ const a = t.getFilter() ?? {}, n = x ? (() => {
216
+ var s;
217
+ const d = (s = t.getRawApi()) == null ? void 0 : s.getGridOption("quickFilterText");
218
+ return typeof d == "string" && d.length > 0 ? d : void 0;
219
+ })() : void 0;
220
+ y(
221
+ (d) => d.map(
222
+ (s) => s.id === m.current ? {
223
+ ...s,
224
+ filterModel: a,
225
+ ...x ? { quickFilter: n } : {}
226
+ } : s
227
+ )
228
+ );
229
+ }, [x, y]), I = u(
230
+ (t) => {
231
+ if (!t) return;
232
+ const a = T.current();
233
+ if (a) {
234
+ H.current = !0;
235
+ try {
236
+ a.setFilter(t.filterModel ?? {});
237
+ const n = a.getRawApi();
238
+ x && (n == null || n.setGridOption("quickFilterText", t.quickFilter ?? "")), n == null || n.onFilterChanged();
239
+ } finally {
240
+ H.current = !1;
241
+ }
242
+ }
243
+ },
244
+ [x]
245
+ );
246
+ be(() => {
247
+ let t;
248
+ const a = () => {
249
+ H.current || K();
250
+ }, n = (c) => {
251
+ const D = c.getRawApi();
252
+ if (!D) return !1;
253
+ if (D.addEventListener("filterChanged", a), t = () => D.removeEventListener("filterChanged", a), A) {
254
+ const F = p.current.find(
255
+ (j) => j.id === m.current
256
+ );
257
+ F && (Object.keys(F.filterModel ?? {}).length > 0 || x && F.quickFilter) && I(F);
258
+ }
259
+ return !0;
260
+ }, d = T.current();
261
+ if (d && n(d)) return () => t == null ? void 0 : t();
262
+ const s = window.setInterval(() => {
263
+ const c = T.current();
264
+ c && n(c) && window.clearInterval(s);
265
+ }, 50);
266
+ return () => {
267
+ window.clearInterval(s), t == null || t();
268
+ };
269
+ }, [A, I, K, x]);
270
+ const v = u(
271
+ (t) => {
272
+ if (t === m.current) return;
273
+ const a = p.current.find((n) => n.id === t);
274
+ a && (K(), S(t), m.current = t, A && I(a));
275
+ },
276
+ [A, I, K, S]
277
+ ), M = u(
278
+ (t, a) => {
279
+ var s;
280
+ if (p.current.length >= O) return m.current;
281
+ const n = p.current.length + 1, d = N ? N(n) : {
282
+ id: V(),
283
+ label: t ?? _("dataTableTabs.newTabName", { number: n }),
284
+ // New tab = copy of the CURRENT live model, so the grid view does
285
+ // not jump on add — the natural gesture is "save my current
286
+ // filter as a tab".
287
+ filterModel: a ?? ((s = T.current()) == null ? void 0 : s.getFilter()) ?? {}
288
+ };
289
+ return y((c) => [...c, d]), S(d.id), m.current = d.id, d.id;
290
+ },
291
+ [N, V, O, S, y, _]
292
+ ), B = u(
293
+ (t, a) => {
294
+ const n = a.trim();
295
+ n && y(
296
+ (d) => d.map(
297
+ (s) => s.id === t && !s.locked ? { ...s, label: n } : s
298
+ )
299
+ );
300
+ },
301
+ [y]
302
+ ), P = u(
303
+ (t) => {
304
+ const a = p.current, n = a.find((c) => c.id === t);
305
+ if (!n || n.locked || a.length <= 1) return;
306
+ const d = a.findIndex((c) => c.id === t), s = a.filter((c) => c.id !== t);
307
+ if (y(() => s), m.current === t) {
308
+ const c = s[Math.max(0, d - 1)];
309
+ c && (S(c.id), m.current = c.id, A && I(c));
310
+ }
311
+ },
312
+ [A, I, S, y]
313
+ ), q = u(() => p.current, []), Y = u(() => m.current, []);
314
+ return {
315
+ tabs: C,
316
+ activeTabId: l,
317
+ selectTab: v,
318
+ addTab: M,
319
+ renameTab: B,
320
+ removeTab: P,
321
+ atCapacity: C.length >= O,
322
+ getTabsSnapshot: q,
323
+ getActiveTabIdSnapshot: Y
324
+ };
325
+ }
326
+ const _e = Ie(
327
+ [
328
+ // The strip scrolls horizontally when tabs overflow; focusable tabs inside
329
+ // (with an inset focus ring, below) satisfy scrollable-region-focusable.
330
+ // No baseline border and no leading padding: the first tab sits flush with
331
+ // the table's inline-start edge and the active tab merges straight into the
332
+ // grid header below — the table's own rounded top is the only edge drawn.
333
+ "ds:flex ds:items-end ds:gap-[var(--spacing-2xs)] ds:overflow-x-auto",
334
+ "ds:pe-[var(--spacing-2xs)]"
335
+ ].join(" "),
336
+ {
337
+ variants: {
338
+ size: {
339
+ md: "",
340
+ lg: ""
341
+ }
342
+ },
343
+ defaultVariants: { size: "md" }
344
+ }
345
+ ), $e = Ie(
346
+ [
347
+ // `group` so the pointer-only ✕ can reveal on hover/focus/active; `relative`
348
+ // so that ✕ can be absolutely positioned in the trailing padding (below).
349
+ "ds:group ds:relative ds:inline-flex ds:items-center ds:justify-center",
350
+ "ds:whitespace-nowrap ds:select-none ds:cursor-pointer ds:shrink-0",
351
+ // Logical top corners so the leading corner can be squared in either text
352
+ // direction (see the first-tab override + the grid corner below). Inactive
353
+ // tabs take a crisp white fill so they read clearly against a warm page
354
+ // instead of dissolving into it; muted text keeps them clearly unselected.
355
+ // (Focus ring is INSET — see FOCUS_RING — so the scroll container never
356
+ // clips it and the flush-leading first tab keeps its ring.)
357
+ "ds:[border-start-start-radius:var(--radius-md)] ds:[border-start-end-radius:var(--radius-md)]",
358
+ "ds:bg-background ds:text-muted-foreground",
359
+ // Match the grid header's eyebrow treatment (uppercase, tracked, medium):
360
+ // the strip reads as one unit with the header below. `text-transform` is
361
+ // display-only — the stored label keeps its case for the rename editor, and
362
+ // uppercase is a no-op on caseless scripts (Arabic, CJK).
363
+ "ds:font-medium ds:uppercase ds:tracking-[var(--letter-spacing-uppercase)]",
364
+ "ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none",
365
+ "ds:hover:bg-muted/40 ds:hover:text-foreground",
366
+ // NOTE: the focus ring is applied by the component (see FOCUS_RING), gated
367
+ // on keyboard modality — Radix focuses the trigger on click, which would
368
+ // otherwise show a `:focus-visible` ring on a plain mouse selection.
369
+ // Active = the table header surface (`--muted`): a 1px downward pull fuses
370
+ // it into one continuous grey sheet with the grid header below. That fuse
371
+ // (grey fill + foreground text) is the whole selection cue — no accent bar.
372
+ "ds:data-[state=active]:bg-muted ds:data-[state=active]:text-foreground",
373
+ "ds:data-[state=active]:z-[1]",
374
+ "ds:data-[state=active]:[margin-block-end:-1px]",
375
+ "ds:disabled:pointer-events-none ds:disabled:opacity-50"
376
+ ].join(" "),
377
+ {
378
+ variants: {
379
+ size: {
380
+ // Symmetric inline padding so the label centres and every tab matches,
381
+ // removable or not; the ✕ lives in the trailing padding (absolute).
382
+ md: "ds:h-10 ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-2xs)]",
383
+ lg: "ds:h-12 ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:text-[length:var(--font-size-xs)]"
384
+ }
385
+ },
386
+ defaultVariants: { size: "md" }
387
+ }
388
+ ), Ee = "ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:[outline-offset:calc(-1*var(--focus-ring-width))]";
389
+ function Ue() {
390
+ const [r, o] = ue(!1);
391
+ return be(() => {
392
+ const g = () => o((R) => R || !0), k = () => o((R) => R && !1);
393
+ return document.addEventListener("keydown", g, !0), document.addEventListener("pointerdown", k, !0), () => {
394
+ document.removeEventListener("keydown", g, !0), document.removeEventListener("pointerdown", k, !0);
395
+ };
396
+ }, []), r;
397
+ }
398
+ const Ge = Se(function({
399
+ getTable: o,
400
+ tabs: g,
401
+ defaultTabs: k,
402
+ onTabsChange: R,
403
+ activeTabId: ee,
404
+ defaultActiveTabId: te,
405
+ onActiveTabChange: ae,
406
+ persistKey: z,
407
+ captureQuickFilter: x = !1,
408
+ applyOnActivate: A = !0,
409
+ allowAdd: O = !0,
410
+ allowRename: N = !0,
411
+ allowRemove: V = !0,
412
+ maxTabs: _ = 8,
413
+ createTab: $,
414
+ makeTabId: E,
415
+ renameOnAdd: W = !0,
416
+ size: U = "md",
417
+ id: G,
418
+ className: C,
419
+ "aria-label": y,
420
+ children: ne
421
+ }, S) {
422
+ const { t: l } = ke(), p = f(null), m = ze(p), H = Ue(), T = De(), K = `${T}-panel`, I = `${T}-hint`, {
423
+ tabs: v,
424
+ activeTabId: M,
425
+ selectTab: B,
426
+ addTab: P,
427
+ renameTab: q,
428
+ removeTab: Y,
429
+ atCapacity: J,
430
+ getTabsSnapshot: Q,
431
+ getActiveTabIdSnapshot: t
432
+ } = Ve({
433
+ getTable: o,
434
+ tabs: g,
435
+ defaultTabs: k,
436
+ onTabsChange: R,
437
+ activeTabId: ee,
438
+ defaultActiveTabId: te,
439
+ onActiveTabChange: ae,
440
+ persistKey: z,
441
+ captureQuickFilter: x,
442
+ applyOnActivate: A,
443
+ maxTabs: _,
444
+ createTab: $,
445
+ makeTabId: E
446
+ }), [a, n] = ue(null), d = f(null), s = v.find((e) => e.id === a), [c, D] = ue("");
447
+ be(() => {
448
+ if (!c) return;
449
+ const e = setTimeout(() => D(""), 3e3);
450
+ return () => clearTimeout(e);
451
+ }, [c]);
452
+ const F = f(/* @__PURE__ */ new Map()), j = u((e) => {
453
+ requestAnimationFrame(() => {
454
+ var i;
455
+ (i = F.current.get(e)) == null || i.focus();
456
+ });
457
+ }, []), pe = u(
458
+ (e) => N && !e.locked,
459
+ [N]
460
+ ), re = u(
461
+ (e) => V && !e.locked && v.length > 1,
462
+ [V, v.length]
463
+ ), se = u(
464
+ (e) => {
465
+ pe(e) && n(e.id);
466
+ },
467
+ [pe]
468
+ ), Re = u(() => {
469
+ var e;
470
+ if (a) {
471
+ const i = ((e = d.current) == null ? void 0 : e.value) ?? "";
472
+ i.trim() && (q(a, i), D(
473
+ l("dataTableTabs.announce.renamed", { name: i.trim() })
474
+ ));
475
+ }
476
+ n(null);
477
+ }, [a, q, l]), me = u(() => n(null), []), Ae = u(() => {
478
+ const e = l("dataTableTabs.newTabName", { number: v.length + 1 }), i = P();
479
+ D(l("dataTableTabs.announce.added", { name: e })), W && N ? n(i) : j(i);
480
+ }, [P, N, j, W, l, v.length]), X = u(
481
+ (e) => {
482
+ if (!re(e)) return;
483
+ const i = v.findIndex((h) => h.id === e.id), w = v.filter((h) => h.id !== e.id)[Math.max(0, i - 1)];
484
+ Y(e.id), D(l("dataTableTabs.announce.removed", { name: e.label })), w && j(w.id);
485
+ },
486
+ [re, j, Y, l, v]
487
+ ), Ne = u(
488
+ (e, i) => {
489
+ e.key === "Delete" || e.key === "Backspace" ? (e.preventDefault(), X(i)) : e.key === "F2" && (e.preventDefault(), se(i));
490
+ },
491
+ [X, se]
492
+ ), fe = f(B);
493
+ fe.current = B;
494
+ const ge = f(P);
495
+ ge.current = P;
496
+ const Te = f(q);
497
+ Te.current = q;
498
+ const ve = f(X);
499
+ ve.current = X;
500
+ const he = f({
501
+ getTabs: () => Q(),
502
+ getActiveTabId: () => t() ?? null,
503
+ selectTab: (e) => fe.current(e),
504
+ addTab: (e, i) => ge.current(e, i),
505
+ renameTab: (e, i) => Te.current(e, i),
506
+ removeTab: (e) => {
507
+ const i = Q().find((w) => w.id === e);
508
+ i && ve.current(i);
509
+ }
510
+ });
511
+ Fe(S, () => he.current, []), Ke(qe, he.current, G);
512
+ const Ce = `${T}-tab-${M}`;
513
+ return /* @__PURE__ */ L(
514
+ "div",
515
+ {
516
+ ref: p,
517
+ "data-component": "data-table-tabs",
518
+ "data-component-id": G,
519
+ className: Z("ds:flex ds:min-w-0 ds:flex-col", C),
520
+ children: [
521
+ /* @__PURE__ */ L(
522
+ ce.Root,
523
+ {
524
+ open: a !== null,
525
+ onOpenChange: (e) => {
526
+ e || me();
527
+ },
528
+ children: [
529
+ /* @__PURE__ */ L(
530
+ oe.Root,
531
+ {
532
+ value: M,
533
+ onValueChange: B,
534
+ orientation: "horizontal",
535
+ activationMode: "manual",
536
+ dir: m,
537
+ children: [
538
+ /* @__PURE__ */ L("div", { className: "ds:flex ds:items-end ds:gap-[var(--spacing-2xs)]", children: [
539
+ /* @__PURE__ */ b(
540
+ oe.List,
541
+ {
542
+ "aria-label": y ?? l("dataTableTabs.tablistLabel"),
543
+ "aria-describedby": I,
544
+ className: Z(
545
+ _e({ size: U }),
546
+ "ds:min-w-0 ds:flex-initial"
547
+ ),
548
+ children: v.map((e, i) => {
549
+ const w = /* @__PURE__ */ L(
550
+ oe.Trigger,
551
+ {
552
+ ref: (h) => {
553
+ h ? F.current.set(e.id, h) : F.current.delete(e.id);
554
+ },
555
+ value: e.id,
556
+ id: `${T}-tab-${e.id}`,
557
+ "aria-controls": K,
558
+ "data-tab-id": e.id,
559
+ className: Z(
560
+ $e({ size: U }),
561
+ // The leading tab sits flush in the panel's leading-top
562
+ // corner: square that corner (and the grid's, below) so
563
+ // the leading edge is one straight line with no cut-in.
564
+ i === 0 && "ds:[border-start-start-radius:0]",
565
+ // Keyboard-only focus ring; in pointer mode suppress the
566
+ // UA default outline that Radix's click-focus would show.
567
+ H ? Ee : "ds:focus-visible:outline-none"
568
+ ),
569
+ onKeyDown: (h) => Ne(h, e),
570
+ onDoubleClick: () => se(e),
571
+ children: [
572
+ /* @__PURE__ */ b("span", { className: "ds:max-w-[12rem] ds:truncate", children: e.label }),
573
+ re(e) && // Visual-only dismiss — pointer removal fires here;
574
+ // keyboard removal is Delete/Backspace on the trigger.
575
+ // No role/tabIndex: interactive content inside <button>
576
+ // is invalid HTML (kit TabsTrigger precedent). Absolutely
577
+ // positioned in the trailing padding and hidden until the
578
+ // tab is hovered/focused or active, so it reserves no flow
579
+ // space — every tab keeps the same symmetric padding
580
+ // whether or not it can be removed, and labels never
581
+ // reflow when it reveals.
582
+ /* @__PURE__ */ b(
583
+ "span",
584
+ {
585
+ "aria-hidden": "true",
586
+ className: Z(
587
+ "ds:absolute ds:end-[var(--spacing-2xs)] ds:top-1/2 ds:-translate-y-1/2",
588
+ "ds:inline-flex ds:items-center ds:justify-center",
589
+ "ds:size-3.5 ds:rounded-[var(--radius-sm)]",
590
+ "ds:opacity-0 ds:transition-opacity ds:motion-reduce:transition-none",
591
+ "ds:group-hover:opacity-100 ds:group-focus-visible:opacity-100",
592
+ "ds:group-data-[state=active]:opacity-100",
593
+ "ds:hover:bg-muted-foreground/20"
594
+ ),
595
+ onPointerDown: (h) => {
596
+ h.stopPropagation(), h.preventDefault(), X(e);
597
+ },
598
+ children: /* @__PURE__ */ b(we, { className: "ds:size-3" })
599
+ }
600
+ )
601
+ ]
602
+ },
603
+ e.id
604
+ );
605
+ return a === e.id ? /* @__PURE__ */ b(ce.Anchor, { asChild: !0, children: w }, e.id) : w;
606
+ })
607
+ }
608
+ ),
609
+ O && /* @__PURE__ */ b(
610
+ de,
611
+ {
612
+ intent: "ghost",
613
+ size: "sm",
614
+ icon: /* @__PURE__ */ b(Me, { "aria-hidden": "true" }),
615
+ tooltip: l(J ? "dataTableTabs.maxTabsReached" : "dataTableTabs.addTab"),
616
+ disabled: J,
617
+ className: "ds:mb-[var(--spacing-2xs)] ds:shrink-0",
618
+ onClick: Ae
619
+ }
620
+ )
621
+ ] }),
622
+ /* @__PURE__ */ b(
623
+ "div",
624
+ {
625
+ role: "tabpanel",
626
+ id: K,
627
+ "aria-labelledby": Ce,
628
+ className: "ds:min-w-0 ds:[&_.ag-root-wrapper]:[border-start-start-radius:0]",
629
+ children: ne
630
+ }
631
+ )
632
+ ]
633
+ }
634
+ ),
635
+ /* @__PURE__ */ b(
636
+ ce.Content,
637
+ {
638
+ side: "bottom",
639
+ align: "start",
640
+ "aria-label": l("dataTableTabs.rename.title"),
641
+ className: "ds:w-64",
642
+ onCloseAutoFocus: (e) => {
643
+ e.preventDefault(), s ? j(s.id) : M && j(M);
644
+ },
645
+ onOpenAutoFocus: (e) => {
646
+ var i, w;
647
+ e.preventDefault(), (i = d.current) == null || i.focus(), (w = d.current) == null || w.select();
648
+ },
649
+ children: /* @__PURE__ */ L(
650
+ "form",
651
+ {
652
+ className: "ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]",
653
+ onSubmit: (e) => {
654
+ e.preventDefault(), Re();
655
+ },
656
+ children: [
657
+ /* @__PURE__ */ b(
658
+ je,
659
+ {
660
+ ref: d,
661
+ size: "sm",
662
+ "aria-label": l("dataTableTabs.rename.inputLabel"),
663
+ defaultValue: (s == null ? void 0 : s.label) ?? "",
664
+ maxLength: 60,
665
+ className: "ds:min-w-0 ds:flex-1"
666
+ }
667
+ ),
668
+ /* @__PURE__ */ b(
669
+ de,
670
+ {
671
+ type: "submit",
672
+ intent: "ghost",
673
+ size: "sm",
674
+ icon: /* @__PURE__ */ b(Pe, { "aria-hidden": "true" }),
675
+ tooltip: l("dataTableTabs.rename.save")
676
+ }
677
+ ),
678
+ /* @__PURE__ */ b(
679
+ de,
680
+ {
681
+ type: "button",
682
+ intent: "ghost",
683
+ size: "sm",
684
+ icon: /* @__PURE__ */ b(we, { "aria-hidden": "true" }),
685
+ tooltip: l("dataTableTabs.rename.cancel"),
686
+ onClick: me
687
+ }
688
+ )
689
+ ]
690
+ }
691
+ )
692
+ }
693
+ )
694
+ ]
695
+ }
696
+ ),
697
+ /* @__PURE__ */ b("span", { id: I, className: "ds:sr-only", children: l("dataTableTabs.hint") }),
698
+ /* @__PURE__ */ b("span", { role: "status", "aria-live": "polite", className: "ds:sr-only", children: c })
699
+ ]
700
+ }
701
+ );
702
+ });
703
+ Ge.displayName = "DataTableTabs";
704
+ export {
705
+ Ge as D,
706
+ _e as a,
707
+ $e as b,
708
+ qe as d
709
+ };
710
+ //# sourceMappingURL=data-table-tabs-BEUXiRlu.js.map