@alfadocs/ui-kit-debug 0.50.0 → 0.51.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.
- package/dist/_chunks/{agenda-card-BaSfVfrL.js → agenda-card-Bl-SBiCh.js} +55 -45
- package/dist/_chunks/agenda-card-Bl-SBiCh.js.map +1 -0
- package/dist/_chunks/agenda-tray-DA6qj8BL.js +203 -0
- package/dist/_chunks/agenda-tray-DA6qj8BL.js.map +1 -0
- package/dist/_chunks/{ai-consent-banner-F2md5JD3.js → ai-consent-banner-DBKV27je.js} +2 -2
- package/dist/_chunks/{ai-consent-banner-F2md5JD3.js.map → ai-consent-banner-DBKV27je.js.map} +1 -1
- package/dist/_chunks/ai-tools-rail-7tC3GT4h.js +340 -0
- package/dist/_chunks/ai-tools-rail-7tC3GT4h.js.map +1 -0
- package/dist/_chunks/{alert-CUTxnym2.js → alert-_mUKLmwA.js} +54 -44
- package/dist/_chunks/alert-_mUKLmwA.js.map +1 -0
- package/dist/_chunks/{audio-recorder-DVJXV7_k.js → audio-recorder-D6OVfNiZ.js} +2 -2
- package/dist/_chunks/{audio-recorder-DVJXV7_k.js.map → audio-recorder-D6OVfNiZ.js.map} +1 -1
- package/dist/_chunks/{bishop-score-2MzAz8NE.js → bishop-score-CMQxsdy4.js} +2 -2
- package/dist/_chunks/{bishop-score-2MzAz8NE.js.map → bishop-score-CMQxsdy4.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-DdylQzT6.js → bmi-calculator-DuUneHuZ.js} +2 -2
- package/dist/_chunks/{bmi-calculator-DdylQzT6.js.map → bmi-calculator-DuUneHuZ.js.map} +1 -1
- package/dist/_chunks/{booking-DljH0JkS.js → booking-BUV9fspj.js} +2 -2
- package/dist/_chunks/{booking-DljH0JkS.js.map → booking-BUV9fspj.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-oOkj5wlB.js → cycle-calculator-vTtZZAmn.js} +2 -2
- package/dist/_chunks/{cycle-calculator-oOkj5wlB.js.map → cycle-calculator-vTtZZAmn.js.map} +1 -1
- package/dist/_chunks/{document-scanner-Cxqvq7GR.js → document-scanner-biBS_f6c.js} +2 -2
- package/dist/_chunks/{document-scanner-Cxqvq7GR.js.map → document-scanner-biBS_f6c.js.map} +1 -1
- package/dist/_chunks/dropdown-menu-DwwPovMZ.js +354 -0
- package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +1 -0
- package/dist/_chunks/{due-date-calculator-DykajWzh.js → due-date-calculator-CUm5KJbf.js} +2 -2
- package/dist/_chunks/{due-date-calculator-DykajWzh.js.map → due-date-calculator-CUm5KJbf.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-Bh48OHRv.js → editable-currency-cell-renderer-D5C5tCfu.js} +3 -3
- package/dist/_chunks/{editable-currency-cell-renderer-Bh48OHRv.js.map → editable-currency-cell-renderer-D5C5tCfu.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-Da-B4P4k.js → fetal-weight-Xf8-ZoDy.js} +2 -2
- package/dist/_chunks/{fetal-weight-Da-B4P4k.js.map → fetal-weight-Xf8-ZoDy.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-BWaLWje-.js → freemium-paywall-gHGA44dW.js} +2 -2
- package/dist/_chunks/{freemium-paywall-BWaLWje-.js.map → freemium-paywall-gHGA44dW.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-Bc55hq6t.js → gestational-age-calculator-830KJql3.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-Bc55hq6t.js.map → gestational-age-calculator-830KJql3.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-DAnpbale.js → hcg-doubling-kVOpDfny.js} +2 -2
- package/dist/_chunks/{hcg-doubling-DAnpbale.js.map → hcg-doubling-kVOpDfny.js.map} +1 -1
- package/dist/_chunks/{header-settings-Bx0Biimh.js → header-settings-D5Z2B_Yz.js} +3 -3
- package/dist/_chunks/{header-settings-Bx0Biimh.js.map → header-settings-D5Z2B_Yz.js.map} +1 -1
- package/dist/_chunks/insert-result-njqBthzT.js +742 -0
- package/dist/_chunks/insert-result-njqBthzT.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-UKSLx9K_.js → marketplace-app-shell-Dmo1S9av.js} +6 -6
- package/dist/_chunks/{marketplace-app-shell-UKSLx9K_.js.map → marketplace-app-shell-Dmo1S9av.js.map} +1 -1
- package/dist/_chunks/{patient-search-BJOmTmDA.js → patient-search-CArmRKeg.js} +3 -3
- package/dist/_chunks/{patient-search-BJOmTmDA.js.map → patient-search-CArmRKeg.js.map} +1 -1
- package/dist/_chunks/{patient-shell-DUmhXnFq.js → patient-shell-c2YixkQw.js} +4 -4
- package/dist/_chunks/{patient-shell-DUmhXnFq.js.map → patient-shell-c2YixkQw.js.map} +1 -1
- package/dist/_chunks/{payment-form-xmeCkxas.js → payment-form-DJ9vnzrT.js} +2 -2
- package/dist/_chunks/{payment-form-xmeCkxas.js.map → payment-form-DJ9vnzrT.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-q1D3Uion.js → pdf-viewer-4odMFuFW.js} +2 -2
- package/dist/_chunks/{pdf-viewer-q1D3Uion.js.map → pdf-viewer-4odMFuFW.js.map} +1 -1
- package/dist/_chunks/{practice-results-Cq1y8JFD.js → practice-results-CtfciF2v.js} +3 -3
- package/dist/_chunks/{practice-results-Cq1y8JFD.js.map → practice-results-CtfciF2v.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-48Gfvod1.js → pregnancy-dating-BA37LSkF.js} +16 -16
- package/dist/_chunks/{pregnancy-dating-48Gfvod1.js.map → pregnancy-dating-BA37LSkF.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-CCGrvarh.js → pregnancy-weight-gain-BMRBeA8V.js} +2 -2
- package/dist/_chunks/{pregnancy-weight-gain-CCGrvarh.js.map → pregnancy-weight-gain-BMRBeA8V.js.map} +1 -1
- package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js → recaptcha-widget-BCNHsgqt.js} +2 -2
- package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js.map → recaptcha-widget-BCNHsgqt.js.map} +1 -1
- package/dist/_chunks/{sidebar-h78cTNLh.js → sidebar-DPEHzxLZ.js} +397 -346
- package/dist/_chunks/sidebar-DPEHzxLZ.js.map +1 -0
- package/dist/_chunks/{sign-document-CZkAf28g.js → sign-document-Bzld9jVM.js} +2 -2
- package/dist/_chunks/{sign-document-CZkAf28g.js.map → sign-document-Bzld9jVM.js.map} +1 -1
- package/dist/_chunks/{task-card-CPyQ5AXC.js → task-card-BwY9jaV1.js} +48 -42
- package/dist/_chunks/task-card-BwY9jaV1.js.map +1 -0
- package/dist/_chunks/task-tray-Cb_hK4yb.js +234 -0
- package/dist/_chunks/task-tray-Cb_hK4yb.js.map +1 -0
- package/dist/_chunks/{theme-toggle-ClATnY4Q.js → theme-toggle-DAW7uC0B.js} +3 -3
- package/dist/_chunks/{theme-toggle-ClATnY4Q.js.map → theme-toggle-DAW7uC0B.js.map} +1 -1
- package/dist/_chunks/{unit-converter-jWp3Z85y.js → unit-converter-BQ6lEYvd.js} +2 -2
- package/dist/_chunks/{unit-converter-jWp3Z85y.js.map → unit-converter-BQ6lEYvd.js.map} +1 -1
- package/dist/_chunks/use-edge-resize-ZnGG7gyO.js +139 -0
- package/dist/_chunks/use-edge-resize-ZnGG7gyO.js.map +1 -0
- package/dist/_chunks/use-theme-CAuo6EYT.js +159 -0
- package/dist/_chunks/use-theme-CAuo6EYT.js.map +1 -0
- package/dist/_chunks/{warning-stack-CXfoAT-_.js → warning-stack-Cv4fr5zo.js} +2 -2
- package/dist/_chunks/{warning-stack-CXfoAT-_.js.map → warning-stack-Cv4fr5zo.js.map} +1 -1
- package/dist/_chunks/{workflow-map-DzX_LI4y.js → workflow-map-BJDUNYlX.js} +3 -3
- package/dist/_chunks/{workflow-map-DzX_LI4y.js.map → workflow-map-BJDUNYlX.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/_shared/insert-result.d.ts.map +1 -1
- package/dist/components/agenda-card/agenda-card.d.ts +19 -2
- package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts +24 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/index.js +1 -1
- package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +8 -0
- package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -1
- package/dist/components/ai-tools-rail/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/button-group/button-group.d.ts +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/document-scanner/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +2 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/form-field/form-field.d.ts +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts +15 -15
- package/dist/components/key-value-pair/key-value-pair.d.ts +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-dating/pregnancy-dating.d.ts.map +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/radio-group/radio-group.d.ts +1 -1
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/separator/separator.d.ts +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.d.ts +8 -0
- package/dist/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/tabs/tabs.d.ts +2 -2
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-card/task-card.d.ts +15 -1
- package/dist/components/task-card/task-card.d.ts.map +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/task-tray/task-tray.d.ts +24 -1
- package/dist/components/task-tray/task-tray.d.ts.map +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow/workflow-map.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +12 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-edge-resize.d.ts +78 -0
- package/dist/hooks/use-edge-resize.d.ts.map +1 -0
- package/dist/hooks/use-theme.d.ts.map +1 -1
- package/dist/i18n/locales/ar.d.ts +4 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +7 -3
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +4 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +7 -3
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +4 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +7 -3
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +4 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +7 -3
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +4 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +7 -3
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +4 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +7 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +4 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +7 -3
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +4 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +7 -3
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +4 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +7 -3
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +4 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +7 -3
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +4 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +7 -3
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +4 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +7 -3
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +4 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +7 -3
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +4 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +7 -3
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +4 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +7 -3
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +4 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +7 -3
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +4 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +7 -3
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +4 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +7 -3
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +37 -37
- package/dist/locales/ar.json +7 -3
- package/dist/locales/de.json +7 -3
- package/dist/locales/el.json +7 -3
- package/dist/locales/en.json +7 -3
- package/dist/locales/es.json +7 -3
- package/dist/locales/fr.json +7 -3
- package/dist/locales/hi.json +7 -3
- package/dist/locales/it.json +7 -3
- package/dist/locales/ja.json +7 -3
- package/dist/locales/nl.json +7 -3
- package/dist/locales/pl.json +7 -3
- package/dist/locales/pt.json +7 -3
- package/dist/locales/ro.json +7 -3
- package/dist/locales/ru.json +7 -3
- package/dist/locales/sq.json +7 -3
- package/dist/locales/sv.json +7 -3
- package/dist/locales/tr.json +7 -3
- package/dist/locales/zh.json +7 -3
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/agenda-card-BaSfVfrL.js.map +0 -1
- package/dist/_chunks/agenda-tray-DQayYmQ0.js +0 -165
- package/dist/_chunks/agenda-tray-DQayYmQ0.js.map +0 -1
- package/dist/_chunks/ai-tools-rail-CYLWrRmm.js +0 -280
- package/dist/_chunks/ai-tools-rail-CYLWrRmm.js.map +0 -1
- package/dist/_chunks/alert-CUTxnym2.js.map +0 -1
- package/dist/_chunks/circle-arrow-up-CC_85SuH.js +0 -16
- package/dist/_chunks/circle-arrow-up-CC_85SuH.js.map +0 -1
- package/dist/_chunks/dropdown-menu-CUEXqKis.js +0 -299
- package/dist/_chunks/dropdown-menu-CUEXqKis.js.map +0 -1
- package/dist/_chunks/insert-result-DNdi_JYW.js +0 -683
- package/dist/_chunks/insert-result-DNdi_JYW.js.map +0 -1
- package/dist/_chunks/sidebar-h78cTNLh.js.map +0 -1
- package/dist/_chunks/task-card-CPyQ5AXC.js.map +0 -1
- package/dist/_chunks/task-tray-B8jFv5FV.js +0 -196
- package/dist/_chunks/task-tray-B8jFv5FV.js.map +0 -1
- package/dist/_chunks/use-theme-C2dHKUAN.js +0 -145
- package/dist/_chunks/use-theme-C2dHKUAN.js.map +0 -1
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { jsx as a, jsxs as p } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as j, useRef as v, useMemo as q, useImperativeHandle as z } from "react";
|
|
3
|
-
import { c as M } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { useTranslation as S } from "react-i18next";
|
|
5
|
-
import { I as C } from "./icon-button-CKEOrN37.js";
|
|
6
|
-
import { S as K } from "./skeleton-CZbwyJAA.js";
|
|
7
|
-
import { E } from "./empty-state-BLy7tigq.js";
|
|
8
|
-
import { T as L } from "./task-card-CPyQ5AXC.js";
|
|
9
|
-
import { u as P } from "./registry-nPAVE19X.js";
|
|
10
|
-
import { c as H } from "./createLucideIcon-CrFbzy84.js";
|
|
11
|
-
import { P as V } from "./plus-CYKNmfuA.js";
|
|
12
|
-
/**
|
|
13
|
-
* @license lucide-react v1.8.0 - ISC
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the ISC license.
|
|
16
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/
|
|
18
|
-
const B = [
|
|
19
|
-
["path", { d: "M13 5h8", key: "a7qcls" }],
|
|
20
|
-
["path", { d: "M13 12h8", key: "h98zly" }],
|
|
21
|
-
["path", { d: "M13 19h8", key: "c3s6r1" }],
|
|
22
|
-
["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
|
|
23
|
-
["rect", { x: "3", y: "4", width: "6", height: "6", rx: "1", key: "cif1o7" }]
|
|
24
|
-
], F = H("list-todo", B), G = {
|
|
25
|
-
id: "task-tray",
|
|
26
|
-
capabilities: ["select_single", "dismiss"],
|
|
27
|
-
state: {
|
|
28
|
-
items: {
|
|
29
|
-
type: "Array<{ id: string; status: string }>",
|
|
30
|
-
descriptionKey: "ui.agent.taskTray.state.items",
|
|
31
|
-
description: "Currently-displayed tasks. Ids + status only — never task title / patient.",
|
|
32
|
-
read: (e) => e.getItems()
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
actions: {
|
|
36
|
-
select_item: {
|
|
37
|
-
safety: "read",
|
|
38
|
-
argsType: "{ id: string }",
|
|
39
|
-
descriptionKey: "ui.agent.taskTray.actions.selectItem",
|
|
40
|
-
description: "Activate the task with the given id.",
|
|
41
|
-
invoke: (e, s) => {
|
|
42
|
-
e.selectItem(s.id);
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
toggle_done: {
|
|
46
|
-
safety: "write",
|
|
47
|
-
argsType: "{ id: string }",
|
|
48
|
-
descriptionKey: "ui.agent.taskTray.actions.toggleDone",
|
|
49
|
-
description: "Request the host to toggle the done state of a task.",
|
|
50
|
-
invoke: (e, s) => {
|
|
51
|
-
e.toggleDone(s.id);
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
dismiss: {
|
|
55
|
-
safety: "destructive",
|
|
56
|
-
argsType: "{ id: string }",
|
|
57
|
-
descriptionKey: "ui.agent.taskTray.actions.dismiss",
|
|
58
|
-
description: "Request the host to dismiss / remove the task with the given id.",
|
|
59
|
-
invoke: (e, s) => {
|
|
60
|
-
e.dismiss(s.id);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
domHooks: {
|
|
65
|
-
root: {
|
|
66
|
-
attr: "data-component",
|
|
67
|
-
value: "task-tray",
|
|
68
|
-
description: "Marks the TaskTray wrapper."
|
|
69
|
-
},
|
|
70
|
-
instanceId: {
|
|
71
|
-
attr: "data-component-id",
|
|
72
|
-
sourceProp: "id",
|
|
73
|
-
description: "Sourced from the id prop. Required to address a specific tray from the agent."
|
|
74
|
-
},
|
|
75
|
-
item: {
|
|
76
|
-
attr: "data-task-id",
|
|
77
|
-
description: "Stable task id emitted on each rendered TaskCard inside the tray."
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}, J = M(
|
|
81
|
-
[
|
|
82
|
-
"ds:flex ds:flex-col",
|
|
83
|
-
"ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]",
|
|
84
|
-
"ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2",
|
|
85
|
-
"ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]",
|
|
86
|
-
"ds:overflow-hidden"
|
|
87
|
-
].join(" "),
|
|
88
|
-
{
|
|
89
|
-
variants: {
|
|
90
|
-
size: {
|
|
91
|
-
sm: "",
|
|
92
|
-
md: ""
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
defaultVariants: {
|
|
96
|
-
size: "sm"
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
), Q = j(
|
|
100
|
-
({
|
|
101
|
-
id: e,
|
|
102
|
-
items: s,
|
|
103
|
-
title: k,
|
|
104
|
-
size: f = "sm",
|
|
105
|
-
onOpenTask: i,
|
|
106
|
-
onToggleDone: n,
|
|
107
|
-
onDismissTask: c,
|
|
108
|
-
onAddTask: y,
|
|
109
|
-
addLabel: x,
|
|
110
|
-
loading: h = !1,
|
|
111
|
-
emptyTitle: b,
|
|
112
|
-
emptyDescription: w,
|
|
113
|
-
className: I,
|
|
114
|
-
...N
|
|
115
|
-
}, T) => {
|
|
116
|
-
const { t: l } = S(), u = k ?? l("taskTray.title", "Tasks"), R = x ?? l("taskTray.add", "Add task"), A = !h && s.length === 0;
|
|
117
|
-
let m;
|
|
118
|
-
h ? m = /* @__PURE__ */ a("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]", children: [0, 1, 2].map((t) => /* @__PURE__ */ a(K, { variant: "rectangular", height: "2.5rem" }, t)) }) : A ? m = /* @__PURE__ */ a("div", { className: "ds:p-[var(--spacing-md)]", children: /* @__PURE__ */ a(
|
|
119
|
-
E,
|
|
120
|
-
{
|
|
121
|
-
variant: "first-use",
|
|
122
|
-
size: "sm",
|
|
123
|
-
title: b ?? l("taskTray.empty.title", "No tasks yet"),
|
|
124
|
-
description: w ?? l("taskTray.empty.description", "New tasks will appear here.")
|
|
125
|
-
}
|
|
126
|
-
) }) : m = /* @__PURE__ */ a("ul", { className: "ds:flex ds:list-none ds:flex-col", children: s.map((t) => /* @__PURE__ */ a(
|
|
127
|
-
L,
|
|
128
|
-
{
|
|
129
|
-
item: t,
|
|
130
|
-
size: f,
|
|
131
|
-
onActivate: i,
|
|
132
|
-
"data-task-id": t.id
|
|
133
|
-
},
|
|
134
|
-
t.id
|
|
135
|
-
)) });
|
|
136
|
-
const d = v(s);
|
|
137
|
-
d.current = s;
|
|
138
|
-
const _ = q(
|
|
139
|
-
() => ({
|
|
140
|
-
getItems: () => d.current.map((t) => ({
|
|
141
|
-
id: t.id,
|
|
142
|
-
status: t.status ?? "open"
|
|
143
|
-
})),
|
|
144
|
-
selectItem: (t) => {
|
|
145
|
-
const r = d.current.find((o) => o.id === t);
|
|
146
|
-
r && (i == null || i(r));
|
|
147
|
-
},
|
|
148
|
-
toggleDone: (t) => {
|
|
149
|
-
const r = d.current.find((o) => o.id === t);
|
|
150
|
-
r && (n == null || n(r));
|
|
151
|
-
},
|
|
152
|
-
dismiss: (t) => {
|
|
153
|
-
const r = d.current.find((o) => o.id === t);
|
|
154
|
-
r && (c == null || c(r));
|
|
155
|
-
}
|
|
156
|
-
}),
|
|
157
|
-
[i, n, c]
|
|
158
|
-
), g = v(null);
|
|
159
|
-
return z(T, () => g.current, []), P(G, _, e), /* @__PURE__ */ p(
|
|
160
|
-
"section",
|
|
161
|
-
{
|
|
162
|
-
ref: g,
|
|
163
|
-
"aria-label": u,
|
|
164
|
-
"data-component": "task-tray",
|
|
165
|
-
"data-component-id": e,
|
|
166
|
-
className: J({ size: f, className: I }),
|
|
167
|
-
...N,
|
|
168
|
-
children: [
|
|
169
|
-
/* @__PURE__ */ p("header", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]", children: [
|
|
170
|
-
/* @__PURE__ */ p("h3", { className: "ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card", children: [
|
|
171
|
-
/* @__PURE__ */ a(F, { "aria-hidden": "true", className: "ds:size-4" }),
|
|
172
|
-
u
|
|
173
|
-
] }),
|
|
174
|
-
y ? /* @__PURE__ */ a(
|
|
175
|
-
C,
|
|
176
|
-
{
|
|
177
|
-
icon: /* @__PURE__ */ a(V, {}),
|
|
178
|
-
intent: "outline",
|
|
179
|
-
size: "sm",
|
|
180
|
-
"aria-label": R,
|
|
181
|
-
onClick: y
|
|
182
|
-
}
|
|
183
|
-
) : null
|
|
184
|
-
] }),
|
|
185
|
-
m
|
|
186
|
-
]
|
|
187
|
-
}
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
);
|
|
191
|
-
Q.displayName = "TaskTray";
|
|
192
|
-
export {
|
|
193
|
-
Q as T,
|
|
194
|
-
G as t
|
|
195
|
-
};
|
|
196
|
-
//# sourceMappingURL=task-tray-B8jFv5FV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-tray-B8jFv5FV.js","sources":["../../node_modules/lucide-react/dist/esm/icons/list-todo.js","../../src/components/task-tray/task-tray.agent.ts","../../src/components/task-tray/task-tray.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M13 5h8\", key: \"a7qcls\" }],\n [\"path\", { d: \"M13 12h8\", key: \"h98zly\" }],\n [\"path\", { d: \"M13 19h8\", key: \"c3s6r1\" }],\n [\"path\", { d: \"m3 17 2 2 4-4\", key: \"1jhpwq\" }],\n [\"rect\", { x: \"3\", y: \"4\", width: \"6\", height: \"6\", rx: \"1\", key: \"cif1o7\" }]\n];\nconst ListTodo = createLucideIcon(\"list-todo\", __iconNode);\n\nexport { __iconNode, ListTodo as default };\n//# sourceMappingURL=list-todo.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — TaskTray. */\n/* */\n/* Tray-level surface: read the current task ids + status, route a */\n/* `select_item` activation, and `toggle_done` / `dismiss` per task */\n/* through the curated handle. TaskTray is in-page (no open/close), */\n/* so it declares neither `open` nor `close`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { TaskTrayHandle } from './task-tray';\n\nexport const taskTrayAgent: AgentAdapter<TaskTrayHandle> = {\n id: 'task-tray',\n capabilities: ['select_single', 'dismiss'],\n state: {\n items: {\n type: 'Array<{ id: string; status: string }>',\n descriptionKey: 'ui.agent.taskTray.state.items',\n description:\n 'Currently-displayed tasks. Ids + status only — never task title / patient.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.taskTray.actions.selectItem',\n description: 'Activate the task with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n toggle_done: {\n safety: 'write',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.taskTray.actions.toggleDone',\n description: 'Request the host to toggle the done state of a task.',\n invoke: (handle, args: { id: string }) => {\n handle.toggleDone(args.id);\n },\n },\n dismiss: {\n safety: 'destructive',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.taskTray.actions.dismiss',\n description:\n 'Request the host to dismiss / remove the task with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.dismiss(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'task-tray',\n description: 'Marks the TaskTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-task-id',\n description:\n 'Stable task id emitted on each rendered TaskCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ListTodo, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { TaskCard, type TaskItem } from '../task-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { taskTrayAgent } from './task-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst taskTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * Curated imperative handle for TaskTray. Exposed as the forwardRef\n * target so a future agent / MCP UI bridge can drive the tray without\n * touching the DOM. See `task-tray.agent.ts`.\n */\nexport interface TaskTrayHandle {\n getItems: () => Array<{ id: string; status: string }>;\n selectItem: (id: string) => void;\n toggleDone: (id: string) => void;\n dismiss: (id: string) => void;\n}\n\nexport interface TaskTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof taskTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n /** Tasks rendered inside the panel. */\n items: TaskItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Visual density forwarded to each TaskCard. */\n size?: 'sm' | 'md';\n /** Fires when the user activates a task (click / Enter / Space). */\n onOpenTask?: (item: TaskItem) => void;\n /** Fires when the host should toggle the done state of a task. Used by agent integration. */\n onToggleDone?: (item: TaskItem) => void;\n /** Fires when the host should dismiss / remove a task. Used by agent integration. */\n onDismissTask?: (item: TaskItem) => void;\n /** Fires when the user activates the header \"Add\" affordance. */\n onAddTask?: () => void;\n /** Localised label for the \"Add\" affordance. Defaults to `ui.taskTray.add`. */\n addLabel?: string;\n /** When true the panel renders skeleton placeholders. */\n loading?: boolean;\n /** Render an empty state when `items` is empty and `loading` is false. */\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const TaskTray = forwardRef<HTMLElement, TaskTrayProps>(\n (\n {\n id,\n items,\n title,\n size = 'sm',\n onOpenTask,\n onToggleDone,\n onDismissTask,\n onAddTask,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('taskTray.title', 'Tasks');\n const resolvedAddLabel = addLabel ?? t('taskTray.add', 'Add task');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"2.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('taskTray.empty.title', 'No tasks yet')}\n description={\n emptyDescription ??\n t('taskTray.empty.description', 'New tasks will appear here.')\n }\n />\n </div>\n );\n } else {\n body = (\n <ul className=\"ds:flex ds:list-none ds:flex-col\">\n {items.map((item) => (\n <TaskCard\n key={item.id}\n item={item}\n size={size}\n onActivate={onOpenTask}\n data-task-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * task-tray.agent.ts. */\n const itemsRef = useRef<TaskItem[]>(items);\n itemsRef.current = items;\n\n const handle = useMemo<TaskTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({\n id: i.id,\n status: i.status ?? 'open',\n })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenTask?.(found);\n },\n toggleDone: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onToggleDone?.(found);\n },\n dismiss: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onDismissTask?.(found);\n },\n }),\n [onOpenTask, onToggleDone, onDismissTask],\n );\n\n const rootRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLElement, []);\n useAgentRegistration(taskTrayAgent, handle, id);\n\n return (\n <section\n ref={rootRef}\n aria-label={heading}\n data-component=\"task-tray\"\n data-component-id={id}\n className={taskTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <ListTodo aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {onAddTask ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddTask}\n />\n ) : null}\n </header>\n {body}\n </section>\n );\n },\n);\n\nTaskTray.displayName = 'TaskTray';\n"],"names":["__iconNode","ListTodo","createLucideIcon","taskTrayAgent","handle","args","taskTrayVariants","cva","TaskTray","forwardRef","id","items","title","size","onOpenTask","onToggleDone","onDismissTask","onAddTask","addLabel","loading","emptyTitle","emptyDescription","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","TaskCard","itemsRef","useRef","useMemo","targetId","found","rootRef","useImperativeHandle","useAgentRegistration","jsxs","IconButton","Plus"],"mappings":";;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK,SAAQ,CAAE;AAC9E,GACMC,IAAWC,EAAiB,aAAaF,CAAU,GCJ5CG,IAA8C;AAAA,EACzD,IAAI;AAAA,EACJ,cAAc,CAAC,iBAAiB,SAAS;AAAA,EACzC,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,EACpC;AAAA,EAEF,SAAS;AAAA,IACP,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,GAAQC,MAAyB;AACxC,QAAAD,EAAO,WAAWC,EAAK,EAAE;AAAA,MAC3B;AAAA,IAAA;AAAA,IAEF,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,GAAQC,MAAyB;AACxC,QAAAD,EAAO,WAAWC,EAAK,EAAE;AAAA,MAC3B;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACD,GAAQC,MAAyB;AACxC,QAAAD,EAAO,QAAQC,EAAK,EAAE;AAAA,MACxB;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,IAEJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GClDMC,IAAmBC;AAAA,EACvB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAsDaC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,YAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUf,KAASa,EAAE,kBAAkB,OAAO,GAC9CG,IAAmBV,KAAYO,EAAE,gBAAgB,UAAU,GAC3DI,IAAU,CAACV,KAAWR,EAAM,WAAW;AAE7C,QAAImB;AACJ,IAAIX,IACFW,IACE,gBAAAC,EAAC,SAAI,WAAU,2EACZ,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACC,MACd,gBAAAD,EAACE,KAAiB,SAAQ,eAAc,QAAO,SAAA,GAAhCD,CAAyC,CACzD,GACH,IAEOH,IACTC,IACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA,gBAAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAOd,KAAcK,EAAE,wBAAwB,cAAc;AAAA,QAC7D,aACEJ,KACAI,EAAE,8BAA8B,6BAA6B;AAAA,MAAA;AAAA,IAAA,GAGnE,IAGFK,sBACG,MAAA,EAAG,WAAU,oCACX,UAAAnB,EAAM,IAAI,CAACwB,MACV,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEC,MAAAD;AAAA,QACA,MAAAtB;AAAA,QACA,YAAYC;AAAA,QACZ,gBAAcqB,EAAK;AAAA,MAAA;AAAA,MAJdA,EAAK;AAAA,IAAA,CAMb,GACH;AAMJ,UAAME,IAAWC,EAAmB3B,CAAK;AACzC,IAAA0B,EAAS,UAAU1B;AAEnB,UAAMP,IAASmC;AAAA,MACb,OAAO;AAAA,QACL,UAAU,MACRF,EAAS,QAAQ,IAAI,CAACL,OAAO;AAAA,UAC3B,IAAIA,EAAE;AAAA,UACN,QAAQA,EAAE,UAAU;AAAA,QAAA,EACpB;AAAA,QACJ,YAAY,CAACQ,MAAqB;AAChC,gBAAMC,IAAQJ,EAAS,QAAQ,KAAK,CAACL,MAAMA,EAAE,OAAOQ,CAAQ;AAC5D,UAAIC,qBAAoBA;AAAA,QAC1B;AAAA,QACA,YAAY,CAACD,MAAqB;AAChC,gBAAMC,IAAQJ,EAAS,QAAQ,KAAK,CAACL,MAAMA,EAAE,OAAOQ,CAAQ;AAC5D,UAAIC,qBAAsBA;AAAA,QAC5B;AAAA,QACA,SAAS,CAACD,MAAqB;AAC7B,gBAAMC,IAAQJ,EAAS,QAAQ,KAAK,CAACL,MAAMA,EAAE,OAAOQ,CAAQ;AAC5D,UAAIC,qBAAuBA;AAAA,QAC7B;AAAA,MAAA;AAAA,MAEF,CAAC3B,GAAYC,GAAcC,CAAa;AAAA,IAAA,GAGpC0B,IAAUJ,EAAoB,IAAI;AACxC,WAAAK,EAAoBnB,GAAK,MAAMkB,EAAQ,SAAwB,CAAA,CAAE,GACjEE,EAAqBzC,GAAeC,GAAQM,CAAE,GAG5C,gBAAAmC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKH;AAAA,QACL,cAAYf;AAAA,QACZ,kBAAe;AAAA,QACf,qBAAmBjB;AAAA,QACnB,WAAWJ,EAAiB,EAAE,MAAAO,GAAM,WAAAS,GAAW;AAAA,QAC9C,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAsB,EAAC,UAAA,EAAO,WAAU,kGAChB,UAAA;AAAA,YAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,oFACZ,UAAA;AAAA,cAAA,gBAAAd,EAAC9B,GAAA,EAAS,eAAY,QAAO,WAAU,aAAY;AAAA,cAClD0B;AAAA,YAAA,GACH;AAAA,YACCV,IACC,gBAAAc;AAAA,cAACe;AAAA,cAAA;AAAA,gBACC,wBAAOC,GAAA,EAAK;AAAA,gBACZ,QAAO;AAAA,gBACP,MAAK;AAAA,gBACL,cAAYnB;AAAA,gBACZ,SAASX;AAAA,cAAA;AAAA,YAAA,IAET;AAAA,UAAA,GACN;AAAA,UACCa;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAtB,EAAS,cAAc;","x_google_ignoreList":[0]}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { useSyncExternalStore as D, useEffect as b, useCallback as p } from "react";
|
|
2
|
-
const y = "alfadocs-ui.theme", w = "alfadocs-ui.accessibility", r = {
|
|
3
|
-
light: "theme-light",
|
|
4
|
-
dark: "theme-dark",
|
|
5
|
-
accessible: "theme-accessible"
|
|
6
|
-
}, M = "(prefers-color-scheme: dark)", C = "(prefers-contrast: more)";
|
|
7
|
-
function g(e) {
|
|
8
|
-
if (typeof window > "u") return null;
|
|
9
|
-
try {
|
|
10
|
-
return window.localStorage.getItem(e);
|
|
11
|
-
} catch {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function S(e, t) {
|
|
16
|
-
if (!(typeof window > "u"))
|
|
17
|
-
try {
|
|
18
|
-
t === null ? window.localStorage.removeItem(e) : window.localStorage.setItem(e, t);
|
|
19
|
-
} catch {
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function L(e) {
|
|
23
|
-
return e === "light" || e === "dark" || e === "system";
|
|
24
|
-
}
|
|
25
|
-
function T(e) {
|
|
26
|
-
return e === "default" || e === "accessible" || e === "system";
|
|
27
|
-
}
|
|
28
|
-
function O() {
|
|
29
|
-
const e = g(y), t = g(w), i = typeof window < "u" && typeof window.matchMedia == "function", s = typeof document < "u" ? document.documentElement.classList : null, A = s ? s.contains(r.dark) ? "dark" : s.contains(r.light) ? "light" : null : null, _ = s != null && s.contains(r.accessible) ? "accessible" : null;
|
|
30
|
-
return {
|
|
31
|
-
theme: L(e) ? e : A ?? "system",
|
|
32
|
-
accessibility: T(t) ? t : _ ?? "system",
|
|
33
|
-
prefersDark: i ? window.matchMedia(M).matches : !1,
|
|
34
|
-
prefersMoreContrast: i ? window.matchMedia(C).matches : !1
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
let n = O();
|
|
38
|
-
const h = /* @__PURE__ */ new Set();
|
|
39
|
-
function c(e) {
|
|
40
|
-
e.theme === n.theme && e.accessibility === n.accessibility && e.prefersDark === n.prefersDark && e.prefersMoreContrast === n.prefersMoreContrast || (n = e, h.forEach((t) => t()));
|
|
41
|
-
}
|
|
42
|
-
function I(e) {
|
|
43
|
-
return h.add(e), () => {
|
|
44
|
-
h.delete(e);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function R() {
|
|
48
|
-
return n;
|
|
49
|
-
}
|
|
50
|
-
function V() {
|
|
51
|
-
return {
|
|
52
|
-
theme: "system",
|
|
53
|
-
accessibility: "system",
|
|
54
|
-
prefersDark: !1,
|
|
55
|
-
prefersMoreContrast: !1
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
let d = 0, u = null, f = null, l = null;
|
|
59
|
-
function v(e) {
|
|
60
|
-
c({ ...n, prefersDark: e.matches });
|
|
61
|
-
}
|
|
62
|
-
function H(e) {
|
|
63
|
-
c({ ...n, prefersMoreContrast: e.matches });
|
|
64
|
-
}
|
|
65
|
-
function Y(e) {
|
|
66
|
-
if (e.key === y) {
|
|
67
|
-
const t = L(e.newValue) ? e.newValue : "system";
|
|
68
|
-
c({ ...n, theme: t });
|
|
69
|
-
} else if (e.key === w) {
|
|
70
|
-
const t = T(e.newValue) ? e.newValue : "system";
|
|
71
|
-
c({ ...n, accessibility: t });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function E(e, t) {
|
|
75
|
-
return typeof e.addEventListener == "function" ? (e.addEventListener("change", t), () => e.removeEventListener("change", t)) : (e.addListener(t), () => e.removeListener(t));
|
|
76
|
-
}
|
|
77
|
-
function G() {
|
|
78
|
-
return d += 1, d > 1 || typeof window > "u" || (typeof window.matchMedia == "function" && (u = window.matchMedia(M), f = window.matchMedia(C), c({
|
|
79
|
-
...n,
|
|
80
|
-
prefersDark: u.matches,
|
|
81
|
-
prefersMoreContrast: f.matches
|
|
82
|
-
}), o = E(u, v), a = E(f, H)), l = Y, window.addEventListener("storage", l)), m;
|
|
83
|
-
}
|
|
84
|
-
let o = null, a = null;
|
|
85
|
-
function m() {
|
|
86
|
-
d -= 1, !(d > 0) && (o == null || o(), a == null || a(), o = null, a = null, u = null, f = null, l && typeof window < "u" && window.removeEventListener("storage", l), l = null);
|
|
87
|
-
}
|
|
88
|
-
function k(e) {
|
|
89
|
-
const t = e.theme === "system" ? e.prefersDark ? "dark" : "light" : e.theme, i = e.accessibility === "system" ? e.prefersMoreContrast : e.accessibility === "accessible";
|
|
90
|
-
return t === "dark" && i ? "dark-accessible" : t === "dark" ? "dark" : i ? "light-accessible" : "light";
|
|
91
|
-
}
|
|
92
|
-
function K(e) {
|
|
93
|
-
switch (e) {
|
|
94
|
-
case "light":
|
|
95
|
-
return [r.light];
|
|
96
|
-
case "dark":
|
|
97
|
-
return [r.dark];
|
|
98
|
-
case "light-accessible":
|
|
99
|
-
return [r.light, r.accessible];
|
|
100
|
-
case "dark-accessible":
|
|
101
|
-
return [r.dark, r.accessible];
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
const Q = [
|
|
105
|
-
r.light,
|
|
106
|
-
r.dark,
|
|
107
|
-
r.accessible
|
|
108
|
-
];
|
|
109
|
-
function U(e) {
|
|
110
|
-
if (typeof document > "u") return;
|
|
111
|
-
const t = document.documentElement, i = new Set(K(e));
|
|
112
|
-
Q.forEach((s) => {
|
|
113
|
-
i.has(s) ? t.classList.add(s) : t.classList.remove(s);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
function N() {
|
|
117
|
-
const e = D(I, R, V);
|
|
118
|
-
b(() => G(), []), b(() => {
|
|
119
|
-
U(k(e));
|
|
120
|
-
}, [e]);
|
|
121
|
-
const t = p((s) => {
|
|
122
|
-
S(y, s === "system" ? null : s), c({ ...n, theme: s });
|
|
123
|
-
}, []), i = p((s) => {
|
|
124
|
-
S(
|
|
125
|
-
w,
|
|
126
|
-
s === "system" ? null : s
|
|
127
|
-
), c({ ...n, accessibility: s });
|
|
128
|
-
}, []);
|
|
129
|
-
return {
|
|
130
|
-
theme: e.theme,
|
|
131
|
-
accessibility: e.accessibility,
|
|
132
|
-
resolvedTheme: k(e),
|
|
133
|
-
setTheme: t,
|
|
134
|
-
setAccessibility: i
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
export {
|
|
138
|
-
w as A,
|
|
139
|
-
r as T,
|
|
140
|
-
y as a,
|
|
141
|
-
k as r,
|
|
142
|
-
K as t,
|
|
143
|
-
N as u
|
|
144
|
-
};
|
|
145
|
-
//# sourceMappingURL=use-theme-C2dHKUAN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-theme-C2dHKUAN.js","sources":["../../src/hooks/use-theme.ts"],"sourcesContent":["import { useCallback, useEffect, useSyncExternalStore } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* */\n/* Modelled as two orthogonal axes per `src/docs/04-theming.mdx` — base */\n/* colour scheme and AAA contrast modifier — plus an explicit `system` */\n/* value meaning \"no user override, follow OS preferences\". The four */\n/* concrete applied themes called out in `hooks-gaps.mdx` are exposed */\n/* via `resolvedTheme` for code that needs to branch on the composed */\n/* result (e.g. data-visualisation libraries with their own theme */\n/* machinery). */\n/* -------------------------------------------------------------------- */\n\nexport type ThemeBase = 'light' | 'dark';\nexport type ThemePreference = ThemeBase | 'system';\nexport type AccessibilityPreference = 'default' | 'accessible' | 'system';\nexport type ResolvedTheme =\n | 'light'\n | 'dark'\n | 'light-accessible'\n | 'dark-accessible';\n\nexport interface UseThemeReturn {\n /** User's stored base-theme preference, or `'system'` when no override is set. */\n theme: ThemePreference;\n /** User's stored AAA-contrast preference, or `'system'` when no override is set. */\n accessibility: AccessibilityPreference;\n /** The theme actually applied to the DOM once the preferences + OS signals are resolved. */\n resolvedTheme: ResolvedTheme;\n /** Persist a new base-theme preference. Pass `'system'` to clear the override. */\n setTheme: (next: ThemePreference) => void;\n /** Persist a new AAA-contrast preference. Pass `'system'` to clear the override. */\n setAccessibility: (next: AccessibilityPreference) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* SSR-safe named constants */\n/* */\n/* Exported so a consuming app's SSR shim can plant the correct classes */\n/* on `<html>` at render time without importing the whole hook (which */\n/* pulls in React, `useSyncExternalStore`, etc.). See the acceptance */\n/* criterion in `src/user_stories/to-do/review-findings/hooks-gaps.mdx`. */\n/* -------------------------------------------------------------------- */\n\nexport const THEME_STORAGE_KEY = 'alfadocs-ui.theme';\nexport const ACCESSIBILITY_STORAGE_KEY = 'alfadocs-ui.accessibility';\n\nexport const THEME_CLASS = {\n light: 'theme-light',\n dark: 'theme-dark',\n accessible: 'theme-accessible',\n} as const;\n\nconst COLOR_SCHEME_QUERY = '(prefers-color-scheme: dark)';\nconst CONTRAST_QUERY = '(prefers-contrast: more)';\n\n/* -------------------------------------------------------------------- */\n/* Persistence — guarded against private-mode / disabled-storage throws */\n/* -------------------------------------------------------------------- */\n\nfunction safeReadStorage(key: string): string | null {\n if (typeof window === 'undefined') return null;\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeWriteStorage(key: string, value: string | null): void {\n if (typeof window === 'undefined') return;\n try {\n if (value === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, value);\n }\n } catch {\n /* Storage can throw in private mode or when quota is exceeded — the\n in-memory state is the source of truth, so a write failure is\n recoverable. Silent-fail matches how `usePrefersReducedMotion`\n handles `matchMedia` being unavailable. */\n }\n}\n\nfunction isValidTheme(value: unknown): value is ThemePreference {\n return value === 'light' || value === 'dark' || value === 'system';\n}\n\nfunction isValidAccessibility(\n value: unknown,\n): value is AccessibilityPreference {\n return value === 'default' || value === 'accessible' || value === 'system';\n}\n\n/* -------------------------------------------------------------------- */\n/* External store — singleton so every `useTheme()` consumer in the */\n/* tree reads the same snapshot and only one `matchMedia` / storage */\n/* subscription is registered per tab. */\n/* -------------------------------------------------------------------- */\n\ninterface ThemeSnapshot {\n theme: ThemePreference;\n accessibility: AccessibilityPreference;\n prefersDark: boolean;\n prefersMoreContrast: boolean;\n}\n\nfunction readInitialSnapshot(): ThemeSnapshot {\n const storedTheme = safeReadStorage(THEME_STORAGE_KEY);\n const storedA11y = safeReadStorage(ACCESSIBILITY_STORAGE_KEY);\n\n const hasMatchMedia =\n typeof window !== 'undefined' && typeof window.matchMedia === 'function';\n\n /* When storage has no explicit override, fall back to whatever theme\n classes are already on `<html>` (set by SSR, a consuming app's shell,\n or Storybook's `withThemeByClassName` decorator). Without this, a\n nested `<ThemeRoot>` driven by `resolvedTheme` would clobber the\n outer cascade with `theme-light` (the OS-preference default) and\n bomb the closest-ancestor token resolution for every child. */\n const htmlClasses =\n typeof document !== 'undefined' ? document.documentElement.classList : null;\n const htmlThemeOverride: ThemePreference | null = htmlClasses\n ? htmlClasses.contains(THEME_CLASS.dark)\n ? 'dark'\n : htmlClasses.contains(THEME_CLASS.light)\n ? 'light'\n : null\n : null;\n const htmlA11yOverride: AccessibilityPreference | null =\n htmlClasses?.contains(THEME_CLASS.accessible) ? 'accessible' : null;\n\n return {\n theme: isValidTheme(storedTheme)\n ? storedTheme\n : (htmlThemeOverride ?? 'system'),\n accessibility: isValidAccessibility(storedA11y)\n ? storedA11y\n : (htmlA11yOverride ?? 'system'),\n prefersDark: hasMatchMedia\n ? window.matchMedia(COLOR_SCHEME_QUERY).matches\n : false,\n prefersMoreContrast: hasMatchMedia\n ? window.matchMedia(CONTRAST_QUERY).matches\n : false,\n };\n}\n\nlet snapshot: ThemeSnapshot = readInitialSnapshot();\nconst listeners = new Set<() => void>();\n\nfunction commit(next: ThemeSnapshot): void {\n if (\n next.theme === snapshot.theme &&\n next.accessibility === snapshot.accessibility &&\n next.prefersDark === snapshot.prefersDark &&\n next.prefersMoreContrast === snapshot.prefersMoreContrast\n ) {\n return;\n }\n snapshot = next;\n listeners.forEach((listener) => listener());\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nfunction getSnapshot(): ThemeSnapshot {\n return snapshot;\n}\n\nfunction getServerSnapshot(): ThemeSnapshot {\n return {\n theme: 'system',\n accessibility: 'system',\n prefersDark: false,\n prefersMoreContrast: false,\n };\n}\n\n/* -------------------------------------------------------------------- */\n/* Media-query subscriptions — mounted once per tab, on the first time */\n/* `useTheme` is called in the browser. Cleanup happens via a ref-count */\n/* in the subscription effect below. */\n/* -------------------------------------------------------------------- */\n\nlet mediaSubscriberCount = 0;\nlet colorSchemeMql: MediaQueryList | null = null;\nlet contrastMql: MediaQueryList | null = null;\nlet storageHandler: ((event: StorageEvent) => void) | null = null;\n\nfunction onColorSchemeChange(event: MediaQueryListEvent): void {\n commit({ ...snapshot, prefersDark: event.matches });\n}\n\nfunction onContrastChange(event: MediaQueryListEvent): void {\n commit({ ...snapshot, prefersMoreContrast: event.matches });\n}\n\nfunction onStorage(event: StorageEvent): void {\n if (event.key === THEME_STORAGE_KEY) {\n const next = isValidTheme(event.newValue) ? event.newValue : 'system';\n commit({ ...snapshot, theme: next });\n } else if (event.key === ACCESSIBILITY_STORAGE_KEY) {\n const next = isValidAccessibility(event.newValue)\n ? event.newValue\n : 'system';\n commit({ ...snapshot, accessibility: next });\n }\n}\n\nfunction attachMqlListener(\n mql: MediaQueryList,\n handler: (event: MediaQueryListEvent) => void,\n): () => void {\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }\n // Safari < 14 fallback.\n mql.addListener(handler);\n return () => mql.removeListener(handler);\n}\n\nfunction mountMediaSubscriptions(): () => void {\n mediaSubscriberCount += 1;\n if (mediaSubscriberCount > 1) {\n return disposeOneSubscriber;\n }\n\n if (typeof window === 'undefined') {\n return disposeOneSubscriber;\n }\n\n if (typeof window.matchMedia === 'function') {\n colorSchemeMql = window.matchMedia(COLOR_SCHEME_QUERY);\n contrastMql = window.matchMedia(CONTRAST_QUERY);\n // Re-sync the module snapshot in case the OS preferences changed\n // between initial read and first effect run (hydration window).\n commit({\n ...snapshot,\n prefersDark: colorSchemeMql.matches,\n prefersMoreContrast: contrastMql.matches,\n });\n detachColorScheme = attachMqlListener(colorSchemeMql, onColorSchemeChange);\n detachContrast = attachMqlListener(contrastMql, onContrastChange);\n }\n\n // Cross-tab sync — `storage` only fires on *other* tabs, so the local\n // tab still needs setTheme to update snapshot directly (it does).\n storageHandler = onStorage;\n window.addEventListener('storage', storageHandler);\n\n return disposeOneSubscriber;\n}\n\nlet detachColorScheme: (() => void) | null = null;\nlet detachContrast: (() => void) | null = null;\n\nfunction disposeOneSubscriber(): void {\n mediaSubscriberCount -= 1;\n if (mediaSubscriberCount > 0) return;\n detachColorScheme?.();\n detachContrast?.();\n detachColorScheme = null;\n detachContrast = null;\n colorSchemeMql = null;\n contrastMql = null;\n if (storageHandler && typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n }\n storageHandler = null;\n}\n\n/* -------------------------------------------------------------------- */\n/* Resolution helpers */\n/* -------------------------------------------------------------------- */\n\nexport function resolveTheme(state: ThemeSnapshot): ResolvedTheme {\n const base: ThemeBase =\n state.theme === 'system'\n ? state.prefersDark\n ? 'dark'\n : 'light'\n : state.theme;\n const accessible =\n state.accessibility === 'system'\n ? state.prefersMoreContrast\n : state.accessibility === 'accessible';\n if (base === 'dark' && accessible) return 'dark-accessible';\n if (base === 'dark') return 'dark';\n if (accessible) return 'light-accessible';\n return 'light';\n}\n\nexport function themeClassList(resolved: ResolvedTheme): string[] {\n switch (resolved) {\n case 'light':\n return [THEME_CLASS.light];\n case 'dark':\n return [THEME_CLASS.dark];\n case 'light-accessible':\n return [THEME_CLASS.light, THEME_CLASS.accessible];\n case 'dark-accessible':\n return [THEME_CLASS.dark, THEME_CLASS.accessible];\n }\n}\n\nconst ALL_THEME_CLASSES = [\n THEME_CLASS.light,\n THEME_CLASS.dark,\n THEME_CLASS.accessible,\n];\n\nfunction applyToDocument(resolved: ResolvedTheme): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const next = new Set(themeClassList(resolved));\n ALL_THEME_CLASSES.forEach((cls) => {\n if (next.has(cls)) {\n root.classList.add(cls);\n } else {\n root.classList.remove(cls);\n }\n });\n}\n\n/* -------------------------------------------------------------------- */\n/* Public hook */\n/* -------------------------------------------------------------------- */\n\n/**\n * Read and update the DS theme preference.\n *\n * - `theme` / `accessibility` are the stored user preferences, with\n * `'system'` meaning \"no override — follow OS\".\n * - `resolvedTheme` composes preferences + live `matchMedia` state into\n * one of the four concrete themes.\n * - `setTheme` / `setAccessibility` persist the override to\n * `localStorage` and re-apply classes to `document.documentElement`\n * synchronously. Pass `'system'` to clear.\n *\n * Singleton under the hood — every hook call shares one `matchMedia`\n * subscription, so mounting the hook many times does not multiply the\n * listener count. The hook also listens for cross-tab `storage` events\n * so a theme change in tab A is reflected in tab B without a reload.\n */\nexport function useTheme(): UseThemeReturn {\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => mountMediaSubscriptions(), []);\n\n useEffect(() => {\n applyToDocument(resolveTheme(state));\n }, [state]);\n\n const setTheme = useCallback((next: ThemePreference) => {\n safeWriteStorage(THEME_STORAGE_KEY, next === 'system' ? null : next);\n commit({ ...snapshot, theme: next });\n }, []);\n\n const setAccessibility = useCallback((next: AccessibilityPreference) => {\n safeWriteStorage(\n ACCESSIBILITY_STORAGE_KEY,\n next === 'system' ? null : next,\n );\n commit({ ...snapshot, accessibility: next });\n }, []);\n\n return {\n theme: state.theme,\n accessibility: state.accessibility,\n resolvedTheme: resolveTheme(state),\n setTheme,\n setAccessibility,\n };\n}\n\n/* -------------------------------------------------------------------- */\n/* Test hook — reset module-level state between tests. Not exported */\n/* from the barrel. */\n/* -------------------------------------------------------------------- */\n\nexport function __resetThemeStoreForTests(): void {\n snapshot = readInitialSnapshot();\n listeners.clear();\n mediaSubscriberCount = 0;\n detachColorScheme?.();\n detachContrast?.();\n detachColorScheme = null;\n detachContrast = null;\n colorSchemeMql = null;\n contrastMql = null;\n if (storageHandler && typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n }\n storageHandler = null;\n}\n"],"names":["THEME_STORAGE_KEY","ACCESSIBILITY_STORAGE_KEY","THEME_CLASS","COLOR_SCHEME_QUERY","CONTRAST_QUERY","safeReadStorage","key","safeWriteStorage","value","isValidTheme","isValidAccessibility","readInitialSnapshot","storedTheme","storedA11y","hasMatchMedia","htmlClasses","htmlThemeOverride","htmlA11yOverride","snapshot","listeners","commit","next","listener","subscribe","getSnapshot","getServerSnapshot","mediaSubscriberCount","colorSchemeMql","contrastMql","storageHandler","onColorSchemeChange","event","onContrastChange","onStorage","attachMqlListener","mql","handler","mountMediaSubscriptions","detachColorScheme","detachContrast","disposeOneSubscriber","resolveTheme","state","base","accessible","themeClassList","resolved","ALL_THEME_CLASSES","applyToDocument","root","cls","useTheme","useSyncExternalStore","useEffect","setTheme","useCallback","setAccessibility"],"mappings":"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"}
|