@alfadocs/ui-kit-debug 1.29.0 → 1.31.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/{address-fields-CZ0pEdEI.js → address-fields-jFfjxOQR.js} +3 -3
- package/dist/_chunks/{address-fields-CZ0pEdEI.js.map → address-fields-jFfjxOQR.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-DwjqZgR5.js → anamnesis-summary-rows-DMO3MWSt.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-DwjqZgR5.js.map → anamnesis-summary-rows-DMO3MWSt.js.map} +1 -1
- package/dist/_chunks/{appointment-card-Dzr3GeVz.js → appointment-card-CvUFFEdS.js} +8 -6
- package/dist/_chunks/appointment-card-CvUFFEdS.js.map +1 -0
- package/dist/_chunks/{appointment-timeline-DhHwmHo1.js → appointment-timeline-DsMZY7U9.js} +2 -2
- package/dist/_chunks/{appointment-timeline-DhHwmHo1.js.map → appointment-timeline-DsMZY7U9.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-4FUu_5NX.js → appointment-tray-Z2GaOIYQ.js} +2 -2
- package/dist/_chunks/{appointment-tray-4FUu_5NX.js.map → appointment-tray-Z2GaOIYQ.js.map} +1 -1
- package/dist/_chunks/{booking-AabCk7CI.js → booking-jGzRUETo.js} +2 -2
- package/dist/_chunks/{booking-AabCk7CI.js.map → booking-jGzRUETo.js.map} +1 -1
- package/dist/_chunks/{calendar-CI9MINcR.js → calendar-BNQKpxhE.js} +494 -438
- package/dist/_chunks/calendar-BNQKpxhE.js.map +1 -0
- package/dist/_chunks/{calendar-event-card-66CEEWU6.js → calendar-event-card-DSh-69HT.js} +130 -122
- package/dist/_chunks/calendar-event-card-DSh-69HT.js.map +1 -0
- package/dist/_chunks/calendar-workspace-Dy1jHBvG.js +9392 -0
- package/dist/_chunks/calendar-workspace-Dy1jHBvG.js.map +1 -0
- package/dist/_chunks/{clinical-note-card-BBgFd2nB.js → clinical-note-card-yCTR9DB6.js} +185 -188
- package/dist/_chunks/clinical-note-card-yCTR9DB6.js.map +1 -0
- package/dist/_chunks/{color-picker-CU303VjY.js → color-picker-Bl5f0iK1.js} +28 -25
- package/dist/_chunks/color-picker-Bl5f0iK1.js.map +1 -0
- package/dist/_chunks/{combobox-D7_NLE2Z.js → combobox-DnSdYssy.js} +216 -215
- package/dist/_chunks/combobox-DnSdYssy.js.map +1 -0
- package/dist/_chunks/{country-select-DzbPFktV.js → country-select-CfDNFG5c.js} +2 -2
- package/dist/_chunks/{country-select-DzbPFktV.js.map → country-select-CfDNFG5c.js.map} +1 -1
- package/dist/_chunks/{face-scheme-DA2vjqaM.js → face-scheme-l-CQyLs-.js} +2 -2
- package/dist/_chunks/{face-scheme-DA2vjqaM.js.map → face-scheme-l-CQyLs-.js.map} +1 -1
- package/dist/_chunks/notes-panel-am6e-Lwh.js +380 -0
- package/dist/_chunks/notes-panel-am6e-Lwh.js.map +1 -0
- package/dist/_chunks/{patient-details-DYAmq76G.js → patient-details-CdfursHt.js} +3 -3
- package/dist/_chunks/{patient-details-DYAmq76G.js.map → patient-details-CdfursHt.js.map} +1 -1
- package/dist/_chunks/{province-select-BBc7s7vR.js → province-select-BaUnkg4S.js} +2 -2
- package/dist/_chunks/{province-select-BBc7s7vR.js.map → province-select-BaUnkg4S.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-lSCiE0Zz.js → rich-text-editor-VJATL1Tk.js} +2 -2
- package/dist/_chunks/{rich-text-editor-lSCiE0Zz.js.map → rich-text-editor-VJATL1Tk.js.map} +1 -1
- package/dist/_chunks/{sparkline-BmGcEyZO.js → sparkline-Dx_sxK3J.js} +228 -198
- package/dist/_chunks/sparkline-Dx_sxK3J.js.map +1 -0
- package/dist/_chunks/{timeline-r-8IUoBS.js → timeline-u-2t9t_M.js} +37 -35
- package/dist/_chunks/timeline-u-2t9t_M.js.map +1 -0
- package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js +210 -0
- package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js.map +1 -0
- package/dist/agent-catalog.json +55 -11
- package/dist/agent-i18n/en.json +10 -8
- package/dist/components/_shared/get-error-message.d.ts +3 -0
- package/dist/components/_shared/get-error-message.d.ts.map +1 -0
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/calendar/calendar.d.ts +26 -2
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/calendar-event-card/calendar-event-card.d.ts +9 -0
- package/dist/components/calendar-event-card/calendar-event-card.d.ts.map +1 -1
- package/dist/components/calendar-event-card/index.js +1 -1
- package/dist/components/clinical-note-card/clinical-note-card.d.ts +16 -1
- package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/color-picker/color-utils.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts +5 -0
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/notes-panel/index.d.ts +1 -1
- package/dist/components/notes-panel/index.d.ts.map +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/notes-panel/notes-panel.agent.d.ts.map +1 -1
- package/dist/components/notes-panel/notes-panel.d.ts +24 -5
- package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
- package/dist/components/sparkline/sparkline.d.ts +6 -0
- package/dist/components/sparkline/sparkline.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts +2 -0
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +56 -54
- package/dist/hooks/use-zoom-drilldown.d.ts +23 -0
- package/dist/hooks/use-zoom-drilldown.d.ts.map +1 -0
- package/dist/host-compat.css +10 -1
- package/dist/i18n/locales/ar.d.ts +50 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +54 -4
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +60 -10
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +64 -14
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +50 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +54 -4
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +50 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +54 -4
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +50 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +54 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +50 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +53 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +50 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +54 -4
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +60 -10
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +64 -14
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +50 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +54 -4
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +50 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +54 -4
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +50 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +54 -4
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +50 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +54 -4
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +50 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +53 -3
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +50 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +54 -4
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +50 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +54 -4
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +50 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +54 -4
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +50 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +54 -4
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +50 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +54 -4
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +1073 -1070
- package/dist/locales/ar.json +54 -4
- package/dist/locales/de.json +64 -14
- package/dist/locales/el.json +54 -4
- package/dist/locales/en.json +54 -4
- package/dist/locales/es.json +54 -4
- package/dist/locales/fr.json +53 -3
- package/dist/locales/hi.json +54 -4
- package/dist/locales/it.json +64 -14
- package/dist/locales/ja.json +54 -4
- package/dist/locales/nl.json +54 -4
- package/dist/locales/pl.json +54 -4
- package/dist/locales/pt.json +54 -4
- package/dist/locales/ro.json +53 -3
- package/dist/locales/ru.json +54 -4
- package/dist/locales/sq.json +54 -4
- package/dist/locales/sv.json +54 -4
- package/dist/locales/tr.json +54 -4
- package/dist/locales/zh.json +54 -4
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/calendar-appointment-details.d.ts +145 -0
- package/dist/patterns/calendar/calendar-appointment-details.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +32 -0
- package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-editor-hydration.d.ts +59 -0
- package/dist/patterns/calendar/calendar-editor-hydration.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-notes-tool.d.ts +14 -0
- package/dist/patterns/calendar/calendar-notes-tool.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-patient-picker.d.ts +11 -0
- package/dist/patterns/calendar/calendar-patient-picker.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-series-scope-chooser.d.ts +18 -0
- package/dist/patterns/calendar/calendar-series-scope-chooser.d.ts.map +1 -0
- package/dist/patterns/calendar/calendar-workspace.d.ts +26 -1
- package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar-workspace.model.d.ts +8 -5
- package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.data.d.ts +66 -1
- package/dist/patterns/calendar/calendar.data.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.host.d.ts +2 -0
- package/dist/patterns/calendar/calendar.host.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.journey.d.ts +42 -7
- package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.model.d.ts +54 -5
- package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.sheets.d.ts +68 -15
- package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.surface.d.ts +12 -2
- package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.types.d.ts +29 -1
- package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
- package/dist/patterns/calendar/index.d.ts +9 -6
- package/dist/patterns/calendar/index.d.ts.map +1 -1
- package/dist/patterns/calendar/index.js +15 -14
- package/dist/tokens.css +10 -2
- package/package.json +1 -1
- package/dist/_chunks/appointment-card-Dzr3GeVz.js.map +0 -1
- package/dist/_chunks/calendar-CI9MINcR.js.map +0 -1
- package/dist/_chunks/calendar-event-card-66CEEWU6.js.map +0 -1
- package/dist/_chunks/calendar-workspace-a84AHQwj.js +0 -7506
- package/dist/_chunks/calendar-workspace-a84AHQwj.js.map +0 -1
- package/dist/_chunks/clinical-note-card-BBgFd2nB.js.map +0 -1
- package/dist/_chunks/color-picker-CU303VjY.js.map +0 -1
- package/dist/_chunks/combobox-D7_NLE2Z.js.map +0 -1
- package/dist/_chunks/notes-panel-CTNpsByN.js +0 -353
- package/dist/_chunks/notes-panel-CTNpsByN.js.map +0 -1
- package/dist/_chunks/sparkline-BmGcEyZO.js.map +0 -1
- package/dist/_chunks/timeline-r-8IUoBS.js.map +0 -1
- package/dist/_chunks/use-signing-session-CyOZWinp.js +0 -147
- package/dist/_chunks/use-signing-session-CyOZWinp.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-zoom-drilldown-qCX34w9I.js","sources":["../../src/hooks/use-scroll-to-first-error.ts","../../src/hooks/use-signing-session.ts","../../src/hooks/use-zoom-drilldown.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface UseScrollToFirstErrorOptions {\n /**\n * Limits the DOM query to this element. Useful when the page renders\n * more than one form, or when an unrelated component happens to share\n * a field name. Defaults to `document`.\n */\n scope?: RefObject<HTMLElement | null>;\n /**\n * Forwarded to `scrollIntoView`. Defaults to\n * `{ behavior: 'smooth', block: 'center' }`. Pass\n * `{ behavior: 'auto' }` (or omit `behavior`) on consumers that\n * respect `prefers-reduced-motion` upstream — the kit doesn't shadow\n * the user's motion preference inside the hook, since some consumers\n * deliberately keep a near-instant snap for power-user form flows.\n */\n scrollOptions?: ScrollIntoViewOptions;\n /**\n * Move keyboard focus to the errored field after scrolling. Default\n * `true`. The focus call uses `preventScroll: true` so the smooth\n * scroll the hook just did isn't replaced by a snap.\n *\n * Setting this `false` defeats the keyboard-user side of WCAG 3.3.1\n * — the viewport will scroll but the active element stays on the\n * submit button, forcing a Shift+Tab back into the form. Only flip\n * this off when an upstream concern (e.g. a custom error summary\n * panel that owns its own focus) is taking responsibility.\n */\n focus?: boolean;\n /**\n * On the very first render, do nothing even if `errors` already has\n * entries. Default `true`. Without this the hook would yank the\n * viewport whenever a form is hydrated with server-rendered errors\n * from a no-JS fallback path — bad UX, since the user landed on the\n * page and hasn't asked for any movement yet. Set `false` only when\n * the consumer explicitly wants the initial-mount scroll (rare).\n */\n skipInitialMount?: boolean;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nfunction getScopeRoot(\n scope: RefObject<HTMLElement | null> | undefined,\n): ParentNode | null {\n if (scope?.current) return scope.current;\n if (typeof document === 'undefined') return null;\n return document;\n}\n\n/**\n * Resolve the DOM element to scroll/focus for a given errored field\n * name. The match order is:\n *\n * 1. `[data-error-anchor=\"<name>\"]` — the consumer's explicit hook,\n * used for Radix-based fields (Checkbox / Select / Switch) where\n * the named `<input>` is hidden behind a visible `<button>`.\n * Consumers set this on the trigger.\n * 2. `[name=\"<name>\"]` — the literal field name.\n * 3. `[name$=\"[<name>]\"]` — Symfony form-prefixed names like\n * `privacy_generator[fiscal_code]`. Suffix match keeps the hook\n * consumer-agnostic; no need to thread the form prefix through.\n *\n * Returns the first visible element among the matches. \"Visible\" here\n * means `offsetParent !== null` — that's the cheap heuristic Radix's\n * hidden inputs (display:none-equivalent positioning) fail and the\n * visible triggers pass. Falls back to the first match if every match\n * is hidden, so a field can still be scrolled into view even when the\n * trigger uses a non-standard layout.\n */\nfunction findErrorElement(name: string, root: ParentNode): HTMLElement | null {\n // `CSS.escape` is load-bearing here, not cosmetic. The Symfony\n // suffix-match arm embeds `name` inside `[name$=\"[${safe}]\"]`, so a\n // field name containing `]` would otherwise close the attribute\n // selector early and turn the rest of the string into stray\n // selector tokens. We don't expect adversarial input in practice\n // (server-controlled field names), but a server returning a `]`\n // in a 422 payload shouldn't be able to break the query.\n const safe =\n typeof CSS !== 'undefined' && typeof CSS.escape === 'function'\n ? CSS.escape(name)\n : // SSR / jsdom fallback — drop every character that's\n // significant in a CSS attribute selector. Conservative but\n // robust enough for the test environment.\n name.replace(/[\"'\\\\[\\]]/g, '');\n const selector =\n `[data-error-anchor=\"${safe}\"], ` +\n `[name=\"${safe}\"], ` +\n `[name$=\"[${safe}]\"]`;\n\n const matches = Array.from(root.querySelectorAll<HTMLElement>(selector));\n if (matches.length === 0) return null;\n\n const visible = matches.find((el) => el.offsetParent !== null);\n return visible ?? matches[0];\n}\n\n/* -------------------------------------------------------------------- */\n/* Hook */\n/* -------------------------------------------------------------------- */\n\n/**\n * Scrolls the first errored field into view and (by default) focuses\n * it, after `errors` changes. Backs the standard AlfaDocs rebrand\n * validation-error UX: after a 422 with `{ errors: { field: message } }`\n * is rendered inline, the user shouldn't be left staring at red labels\n * they can't see. Implements WCAG 3.3.1 / 3.3.3.\n *\n * The hook is stateless and never mutates the DOM beyond the\n * `scrollIntoView` + `focus` calls.\n *\n * @example\n * const fieldOrder = ['firstName', 'email', 'fiscalCode'] as const;\n * const [errors, setErrors] = useState<Record<string, string>>({});\n * useScrollToFirstError(errors, fieldOrder);\n *\n * @example Radix-based field\n * <Checkbox data-error-anchor=\"consent\" name=\"consent\" />\n * // hook scrolls to the visible <button>, not Radix's hidden input.\n *\n * @example Scoped to one form\n * const formRef = useRef<HTMLFormElement>(null);\n * useScrollToFirstError(errors, fieldOrder, { scope: formRef });\n */\nexport function useScrollToFirstError(\n errors: Readonly<Record<string, string | undefined>>,\n fieldOrder: ReadonlyArray<string>,\n options: UseScrollToFirstErrorOptions = {},\n): void {\n const {\n scope,\n scrollOptions = { behavior: 'smooth', block: 'center' },\n focus = true,\n skipInitialMount = true,\n } = options;\n\n // Single ref guards the initial-mount skip across StrictMode's\n // mount/unmount/remount cycle — flipped inside the effect body, not\n // in cleanup, so the second run sees `true` and stays gated.\n const ranOnceRef = useRef(false);\n\n // Track the previous \"first errored field name\" so a re-render that\n // leaves the same field errored doesn't re-scroll. We intentionally\n // depend on the resolved name (not the whole errors object) — that\n // way callers can mutate `errors` shape freely as long as the head\n // of the validation list is stable, which is the typical pattern\n // after a server returns the same 422 twice in a row.\n const lastScrolledFieldRef = useRef<string | null>(null);\n\n // Resolve the first errored field by visual order. A field is\n // \"errored\" iff its key has a truthy string value — the kit's form\n // contract is `Record<string, string | undefined>` where `undefined`\n // / missing keys mean \"no error\".\n const firstErroredField =\n fieldOrder.find((name) => Boolean(errors[name])) ?? null;\n\n useEffect(() => {\n if (skipInitialMount && !ranOnceRef.current) {\n ranOnceRef.current = true;\n // Record what we skipped so the next render doesn't try to\n // scroll to a field that was already errored at mount.\n lastScrolledFieldRef.current = firstErroredField;\n return;\n }\n\n if (!firstErroredField) {\n lastScrolledFieldRef.current = null;\n return;\n }\n\n if (firstErroredField === lastScrolledFieldRef.current) return;\n\n if (typeof window === 'undefined') return;\n\n // rAF defers the scroll until after the browser has laid out the\n // freshly-rendered error labels. Calling scrollIntoView synchronously\n // inside useEffect would fire before the new DOM is painted on\n // some browsers, leaving the viewport pointing at the old layout.\n const handle = window.requestAnimationFrame(() => {\n const root = getScopeRoot(scope);\n if (!root) return;\n const el = findErrorElement(firstErroredField, root);\n if (!el) return;\n\n el.scrollIntoView(scrollOptions);\n if (focus) {\n // preventScroll: true so the browser doesn't override the\n // smooth scroll above with a snap to put the element at the\n // top of the viewport.\n el.focus({ preventScroll: true });\n }\n lastScrolledFieldRef.current = firstErroredField;\n });\n\n return () => window.cancelAnimationFrame(handle);\n // `scrollOptions` / `focus` / `scope` / `skipInitialMount` are\n // option bag values — re-running on their identity change would\n // be surprising. The hook re-fires only when the field at the\n // head of the errored list changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [firstErroredField]);\n}\n","import { useCallback, useMemo, useState } from 'react';\n\n/* ------------------------------------------------------------------ */\n/* useSigningSession */\n/* */\n/* Orchestration state for a multi-field signing flow: N signature */\n/* fields across M pages (and optionally multiple PDFs per envelope), */\n/* a live \"X of Y signed\" counter, and a completion gate. Pure state — */\n/* no I/O, no globals, no persistence. The consumer owns the documents, */\n/* the capture UI, and where signatures are sent. */\n/* */\n/* Generic over the field shape (so geometry / page / docIndex / label */\n/* ride along untouched and `fields` can map straight onto SignatureField)*/\n/* and over the captured payload type (typically SignatureConfirmPayload).*/\n/* */\n/* The SET of field ids and their initial `signed` flags are captured at */\n/* first render — an envelope's fields are fixed for the session. Field */\n/* geometry/label changes still flow through `fields` on every render. */\n/* ------------------------------------------------------------------ */\n\n/** Minimum shape a signing field must satisfy. */\nexport interface SigningFieldBase {\n /** Stable, unique id for the field within the session. */\n id: string;\n /** Initial signed state (default `false`). */\n signed?: boolean;\n}\n\ninterface SignedEntry<TPayload> {\n signed: boolean;\n payload?: TPayload;\n}\n\n/** A consumer field enriched with the session's live signed state + payload. */\nexport type SigningField<TField extends SigningFieldBase, TPayload> = TField & {\n signed: boolean;\n payload?: TPayload;\n};\n\nexport interface UseSigningSessionReturn<\n TField extends SigningFieldBase,\n TPayload,\n> {\n /** The input fields, each enriched with live `signed` + `payload`. */\n fields: SigningField<TField, TPayload>[];\n /** How many fields are currently signed. */\n signedCount: number;\n /** Total number of fields. */\n total: number;\n /** True when every field is signed (and there is at least one). */\n isComplete: boolean;\n /** The field whose capture UI is currently open, or `null`. */\n activeFieldId: string | null;\n /** Open a field's capture UI (sets `activeFieldId`). */\n openField: (id: string) => void;\n /** Close any open capture UI (clears `activeFieldId`). */\n closeField: () => void;\n /** Flip a field to signed, storing its payload, and close it if active. */\n markSigned: (id: string, payload?: TPayload) => void;\n /** Read a single field's signed state. */\n isFieldSigned: (id: string) => boolean;\n /** Clear all signatures and close any open field. */\n reset: () => void;\n /** The field currently targeted by next/previous navigation, or `null`. */\n cursorFieldId: string | null;\n /** Move the navigation cursor to the next field (input order, cycling). */\n goToNextField: () => void;\n /** Move the navigation cursor to the previous field (cycling). */\n goToPreviousField: () => void;\n /** Move the cursor to the next still-unsigned field (cycling); no-op if all signed. */\n goToNextUnsigned: () => void;\n}\n\nfunction seedSigned<TField extends SigningFieldBase, TPayload>(\n fields: TField[],\n forceUnsigned = false,\n): Record<string, SignedEntry<TPayload>> {\n const map: Record<string, SignedEntry<TPayload>> = {};\n for (const field of fields) {\n map[field.id] = { signed: forceUnsigned ? false : Boolean(field.signed) };\n }\n return map;\n}\n\nexport function useSigningSession<\n TField extends SigningFieldBase,\n TPayload = unknown,\n>(fields: TField[]): UseSigningSessionReturn<TField, TPayload> {\n const [signed, setSigned] = useState<Record<string, SignedEntry<TPayload>>>(\n () => seedSigned<TField, TPayload>(fields),\n );\n const [activeFieldId, setActiveFieldId] = useState<string | null>(null);\n const [cursorFieldId, setCursorFieldId] = useState<string | null>(\n () => fields[0]?.id ?? null,\n );\n\n const enriched = useMemo<SigningField<TField, TPayload>[]>(\n () =>\n fields.map((field) => {\n const entry = signed[field.id];\n return {\n ...field,\n signed: entry ? entry.signed : Boolean(field.signed),\n payload: entry?.payload,\n };\n }),\n [fields, signed],\n );\n\n const signedCount = useMemo(\n () =>\n enriched.reduce((count, field) => (field.signed ? count + 1 : count), 0),\n [enriched],\n );\n const total = enriched.length;\n const isComplete = total > 0 && signedCount === total;\n\n const openField = useCallback((id: string) => {\n setActiveFieldId(id);\n }, []);\n\n const closeField = useCallback(() => {\n setActiveFieldId(null);\n }, []);\n\n const markSigned = useCallback((id: string, payload?: TPayload) => {\n setSigned((prev) => ({ ...prev, [id]: { signed: true, payload } }));\n setActiveFieldId((current) => (current === id ? null : current));\n }, []);\n\n const isFieldSigned = useCallback(\n (id: string) => Boolean(signed[id]?.signed),\n [signed],\n );\n\n const reset = useCallback(() => {\n setSigned(seedSigned<TField, TPayload>(fields, true));\n setActiveFieldId(null);\n setCursorFieldId(fields[0]?.id ?? null);\n }, [fields]);\n\n const goToNextField = useCallback(() => {\n setCursorFieldId((cur) => {\n const len = enriched.length;\n if (len === 0) return null;\n const i = cur ? enriched.findIndex((f) => f.id === cur) : -1;\n return enriched[(i + 1 + len) % len].id;\n });\n }, [enriched]);\n\n const goToPreviousField = useCallback(() => {\n setCursorFieldId((cur) => {\n const len = enriched.length;\n if (len === 0) return null;\n const i = cur ? enriched.findIndex((f) => f.id === cur) : 0;\n return enriched[(i - 1 + len) % len].id;\n });\n }, [enriched]);\n\n const goToNextUnsigned = useCallback(() => {\n setCursorFieldId((cur) => {\n const len = enriched.length;\n if (len === 0) return cur;\n const start = cur ? enriched.findIndex((f) => f.id === cur) : -1;\n for (let step = 1; step <= len; step += 1) {\n const field = enriched[(start + step) % len];\n if (!field.signed) return field.id;\n }\n return cur;\n });\n }, [enriched]);\n\n return useMemo(\n () => ({\n fields: enriched,\n signedCount,\n total,\n isComplete,\n activeFieldId,\n openField,\n closeField,\n markSigned,\n isFieldSigned,\n reset,\n cursorFieldId,\n goToNextField,\n goToPreviousField,\n goToNextUnsigned,\n }),\n [\n enriched,\n signedCount,\n total,\n isComplete,\n activeFieldId,\n openField,\n closeField,\n markSigned,\n isFieldSigned,\n reset,\n cursorFieldId,\n goToNextField,\n goToPreviousField,\n goToNextUnsigned,\n ],\n );\n}\n","// Expand-from-position drill-down: wraps the View Transitions API with a\n// feature-detect, a reduced-motion fallback, Esc-to-close and scroll restore.\n// Animation rules ship in ./use-zoom-drilldown.css (folded into tokens.css).\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\n\n/**\n * The `view-transition-class` the shipped CSS targets. Add it as a class name\n * to the source element and the detail, next to their shared\n * `view-transition-name`. The kit sheet maps the class to the property.\n */\nexport const ZOOM_DRILLDOWN_TRANSITION_CLASS = 'ds-zoom-drilldown' as const;\n\nexport interface UseZoomDrilldownOptions {\n /** Resolver for the scroll container whose scrollTop should be preserved\n * across the transition. Defaults to the nearest `<main>` element in\n * the document (or the Radix ScrollArea viewport around it). The window\n * scroll position is always tracked alongside. */\n getScrollContainer?: () => HTMLElement | null;\n}\n\nexport interface UseZoomDrilldownReturn<Id extends string> {\n /** The open drill-down target, or `null` while the source view shows. */\n readonly selected: Id | null;\n /** Zoom into `id`: saves the scroll position and enters at the top. */\n readonly open: (id: Id) => void;\n /** Zoom back out and restore the saved scroll position. */\n readonly close: () => void;\n}\n\ntype DocumentWithViewTransitions = Document & {\n startViewTransition?: (callback: () => void) => { finished?: Promise<void> };\n};\n\nconst defaultGetScrollContainer = (): HTMLElement | null => {\n if (typeof document === 'undefined') return null;\n const main = document.querySelector<HTMLElement>('main');\n if (!main) return null;\n // AppFrame layouts scroll a ScrollArea VIEWPORT rather than <main> itself.\n return (\n main.querySelector<HTMLElement>('[data-radix-scroll-area-viewport]') ??\n main.closest<HTMLElement>('[data-radix-scroll-area-viewport]') ??\n main\n );\n};\n\n// The scoped CSS only matches where `view-transition-class` is supported.\n// Elsewhere the UA default animation would ignore --animation-duration (and\n// the accessible themes' 0ms), so those browsers get the instant swap too.\nconst canAnimate = (doc: DocumentWithViewTransitions): boolean =>\n typeof doc.startViewTransition === 'function' &&\n typeof CSS !== 'undefined' &&\n typeof CSS.supports === 'function' &&\n CSS.supports('view-transition-class', ZOOM_DRILLDOWN_TRANSITION_CLASS);\n\nexport function useZoomDrilldown<Id extends string>(\n options: UseZoomDrilldownOptions = {},\n): UseZoomDrilldownReturn<Id> {\n const [selected, setSelected] = useState<Id | null>(null);\n // Captured on open(), restored after close() settles.\n const savedScrollRef = useRef<{ window: number; container: number } | null>(\n null,\n );\n // Through a ref so an inline resolver does not give open/close a new\n // identity on every render (and re-attach the Escape listener with it).\n const resolverRef = useRef(options.getScrollContainer);\n resolverRef.current = options.getScrollContainer;\n const getScrollContainer = useCallback(\n () => (resolverRef.current ?? defaultGetScrollContainer)(),\n [],\n );\n\n const readScroll = useCallback(() => {\n const containerEl = getScrollContainer();\n return {\n window: typeof window !== 'undefined' ? window.scrollY : 0,\n container: containerEl ? containerEl.scrollTop : 0,\n };\n }, [getScrollContainer]);\n\n const restoreScroll = useCallback(() => {\n const saved = savedScrollRef.current;\n if (!saved) return;\n savedScrollRef.current = null;\n // Async content can still be growing the page, so a single scrollTo may\n // clamp short. Re-apply over a few frames until it sticks.\n let tries = 0;\n const apply = () => {\n const containerEl = getScrollContainer();\n if (typeof window !== 'undefined') {\n window.scrollTo({ top: saved.window });\n }\n if (containerEl) containerEl.scrollTop = saved.container;\n const settled =\n (typeof window === 'undefined' ||\n Math.abs(window.scrollY - saved.window) < 2) &&\n (!containerEl || Math.abs(containerEl.scrollTop - saved.container) < 2);\n if (!settled && tries < 20) {\n tries += 1;\n requestAnimationFrame(apply);\n }\n };\n apply();\n }, [getScrollContainer]);\n\n // A drill-down always enters at its top, not at the depth scrolled behind it.\n const scrollToTop = useCallback(() => {\n const containerEl = getScrollContainer();\n if (typeof window !== 'undefined') window.scrollTo({ top: 0 });\n if (containerEl) containerEl.scrollTop = 0;\n }, [getScrollContainer]);\n\n const transition = useCallback(\n (next: Id | null) => {\n const doc = document as DocumentWithViewTransitions;\n const reduce =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const isClosing = next === null;\n if (reduce || !canAnimate(doc) || !doc.startViewTransition) {\n flushSync(() => setSelected(next));\n if (isClosing) restoreScroll();\n else scrollToTop();\n return;\n }\n const vt = doc.startViewTransition(() => {\n flushSync(() => setSelected(next));\n // Inside the callback so the new view is captured already at its top.\n if (!isClosing) scrollToTop();\n });\n if (isClosing) {\n vt?.finished?.then(restoreScroll, restoreScroll);\n }\n },\n [restoreScroll, scrollToTop],\n );\n\n const open = useCallback(\n (id: Id) => {\n savedScrollRef.current = readScroll();\n transition(id);\n },\n [readScroll, transition],\n );\n const close = useCallback(() => transition(null), [transition]);\n\n useEffect(() => {\n if (selected === null) return;\n const onKey = (event: KeyboardEvent) => {\n // An overlay inside the detail (Radix Select, Popover, Dialog) calls\n // preventDefault when Escape dismisses it: leave the drill-down open.\n if (event.key === 'Escape' && !event.defaultPrevented) close();\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [selected, close]);\n\n return { selected, open, close };\n}\n"],"names":["getScopeRoot","scope","findErrorElement","name","root","safe","selector","matches","el","useScrollToFirstError","errors","fieldOrder","options","scrollOptions","focus","skipInitialMount","ranOnceRef","useRef","lastScrolledFieldRef","firstErroredField","useEffect","handle","seedSigned","fields","forceUnsigned","map","field","useSigningSession","signed","setSigned","useState","activeFieldId","setActiveFieldId","cursorFieldId","setCursorFieldId","_a","enriched","useMemo","entry","signedCount","count","total","isComplete","openField","useCallback","id","closeField","markSigned","payload","prev","current","isFieldSigned","reset","goToNextField","cur","len","i","f","goToPreviousField","goToNextUnsigned","start","step","ZOOM_DRILLDOWN_TRANSITION_CLASS","defaultGetScrollContainer","main","canAnimate","doc","useZoomDrilldown","selected","setSelected","savedScrollRef","resolverRef","getScrollContainer","readScroll","containerEl","restoreScroll","saved","tries","apply","scrollToTop","transition","next","reduce","isClosing","flushSync","vt","open","close","onKey","event"],"mappings":"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"}
|
package/dist/agent-catalog.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "1.
|
|
3
|
+
"packageVersion": "1.31.0",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "component",
|
|
@@ -1592,7 +1592,7 @@
|
|
|
1592
1592
|
},
|
|
1593
1593
|
"item": {
|
|
1594
1594
|
"attr": "data-event-id",
|
|
1595
|
-
"description": "Emitted on every rendered FullCalendar event by the kit event renderer. Used by focusEvent. Cards also carry data-kind=\"task\"|\"draft\"|\"appointment\" and data-status for classification."
|
|
1595
|
+
"description": "Emitted on every rendered FullCalendar event by the kit event renderer. Used by focusEvent. Cards also carry data-kind=\"task\"|\"draft\"|\"pending-details\"|\"appointment\" and data-status for classification."
|
|
1596
1596
|
}
|
|
1597
1597
|
}
|
|
1598
1598
|
},
|
|
@@ -7673,7 +7673,7 @@
|
|
|
7673
7673
|
]
|
|
7674
7674
|
},
|
|
7675
7675
|
"idempotent": false,
|
|
7676
|
-
"description": "Toggle the pinned state of the note with the given id.",
|
|
7676
|
+
"description": "Toggle the pinned state of the note with the given id. Refused for a deleted note or one whose actions.pin is false.",
|
|
7677
7677
|
"descriptionKey": "ui.agent.notesPanel.actions.togglePin"
|
|
7678
7678
|
},
|
|
7679
7679
|
{
|
|
@@ -12858,7 +12858,10 @@
|
|
|
12858
12858
|
]
|
|
12859
12859
|
},
|
|
12860
12860
|
"idempotent": true,
|
|
12861
|
-
"
|
|
12861
|
+
"errors": [
|
|
12862
|
+
"Per-point tooltip titles are hidden after this call — the host point labels describe the previous series, not the one written."
|
|
12863
|
+
],
|
|
12864
|
+
"description": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it. Host-supplied point labels are not updated, so the tooltip title is hidden after this call.",
|
|
12862
12865
|
"descriptionKey": "ui.agent.sparkline.actions.updateSeries"
|
|
12863
12866
|
},
|
|
12864
12867
|
{
|
|
@@ -16873,6 +16876,14 @@
|
|
|
16873
16876
|
"component": "radio-group",
|
|
16874
16877
|
"as": "deleteScope"
|
|
16875
16878
|
},
|
|
16879
|
+
{
|
|
16880
|
+
"component": "radio-group",
|
|
16881
|
+
"as": "seriesScope"
|
|
16882
|
+
},
|
|
16883
|
+
{
|
|
16884
|
+
"component": "button",
|
|
16885
|
+
"as": "seriesScopeChange"
|
|
16886
|
+
},
|
|
16876
16887
|
{
|
|
16877
16888
|
"component": "dropdown-menu",
|
|
16878
16889
|
"as": "signatureMenu"
|
|
@@ -17023,7 +17034,7 @@
|
|
|
17023
17034
|
{
|
|
17024
17035
|
"name": "dock_tool",
|
|
17025
17036
|
"safety": "read",
|
|
17026
|
-
"description": "Open
|
|
17037
|
+
"description": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings or free-slot finder. Read the actual strip: hosts may withhold tools, and patient-notes is registered only with patient context. Notes uses the host's note permissions, independently of appointment-edit rights. Clearing its patient context returns to the previous available tool and focuses its rail button. Opening notes from a panel may address a note id and moves focus into Notes. Closing other tools returns to Appointments.",
|
|
17027
17038
|
"descriptionKey": "ui.agent.calendar.workflows.dockTool",
|
|
17028
17039
|
"uiActions": [
|
|
17029
17040
|
"control-room-rail.open",
|
|
@@ -17054,6 +17065,21 @@
|
|
|
17054
17065
|
"appointment.list"
|
|
17055
17066
|
]
|
|
17056
17067
|
},
|
|
17068
|
+
{
|
|
17069
|
+
"name": "read_appointment_details",
|
|
17070
|
+
"safety": "phi",
|
|
17071
|
+
"description": "Read one appointment in the docked details panel. With the host's details read, any card click, including a patient-less block and a chip whose names are still loading, focuses the appointment and docks a read-only panel: appointment, booking, money, contact, treatments, signing and series sections, the patient's latest three notes and a History sub-view. See more or a note opens the separate Notes rail tool when the host offers it. While the read is loading, failed or refused the panel shows that status instead. Edit, withheld from a read-only viewer, opens the editor. Without the host's read a pending chip stays inert and the editor form is the details. Reads patient-identifiable data.",
|
|
17072
|
+
"descriptionKey": "ui.agent.calendar.workflows.readAppointmentDetails",
|
|
17073
|
+
"uiActions": [
|
|
17074
|
+
"calendar.focus_event"
|
|
17075
|
+
],
|
|
17076
|
+
"stateReads": [
|
|
17077
|
+
"control-room-rail.activeToolId"
|
|
17078
|
+
],
|
|
17079
|
+
"apiActions": [
|
|
17080
|
+
"appointment.read"
|
|
17081
|
+
]
|
|
17082
|
+
},
|
|
17057
17083
|
{
|
|
17058
17084
|
"name": "create_appointment",
|
|
17059
17085
|
"safety": "phi",
|
|
@@ -17083,13 +17109,14 @@
|
|
|
17083
17109
|
"control-room-rail.activeToolId"
|
|
17084
17110
|
],
|
|
17085
17111
|
"apiActions": [
|
|
17112
|
+
"patient.search",
|
|
17086
17113
|
"appointment.create"
|
|
17087
17114
|
]
|
|
17088
17115
|
},
|
|
17089
17116
|
{
|
|
17090
17117
|
"name": "edit_appointment",
|
|
17091
17118
|
"safety": "phi",
|
|
17092
|
-
"description": "Amend an existing appointment.
|
|
17119
|
+
"description": "Amend an existing appointment in the docked editor. With the host's details read the editor opens from Edit on the details panel and Cancel or Save returns there; without it the details panel is the form. A remote host first loads canonical data; loading, failure and whole-appointment refusal expose no editable form. When that data carries a series, the editor first asks the scope: this occurrence, this and following, or the whole series. Honour the returned patient, care, description and recurrence capabilities. A refused recurring scope cannot be treated as an ordinary edit. Save waits for host acceptance before closing or announcing success; rejection preserves the entered draft for correction or retry. Writes patient-identifiable data.",
|
|
17093
17120
|
"descriptionKey": "ui.agent.calendar.workflows.editAppointment",
|
|
17094
17121
|
"uiActions": [
|
|
17095
17122
|
"calendar.focus_event",
|
|
@@ -17111,6 +17138,8 @@
|
|
|
17111
17138
|
"calendar.currentDate"
|
|
17112
17139
|
],
|
|
17113
17140
|
"apiActions": [
|
|
17141
|
+
"appointment.read",
|
|
17142
|
+
"patient.search",
|
|
17114
17143
|
"appointment.update",
|
|
17115
17144
|
"appointmentSeries.applyScope"
|
|
17116
17145
|
]
|
|
@@ -17134,7 +17163,7 @@
|
|
|
17134
17163
|
{
|
|
17135
17164
|
"name": "move_appointment",
|
|
17136
17165
|
"safety": "phi",
|
|
17137
|
-
"description": "Reschedule an appointment either by dragging its card to a new slot or by arming \"Move…\" in the details panel and then clicking the target slot — the panel stays docked and a banner tinted with the appointment's own colour names what is being placed. Either route ends in the confirmation dialog, which offers the SMS and e-mail notify channels
|
|
17166
|
+
"description": "Reschedule an appointment either by dragging its card to a new slot or by arming \"Move…\" in the details panel and then clicking the target slot — the panel stays docked and a banner tinted with the appointment's own colour names what is being placed. Either route ends in the confirmation dialog, which offers the SMS and e-mail notify channels and, for a series member, the recurring scope. A host recurring parent always confirms, asks the scope and hides the notify channels, as the platform does. Cancelling reverts the card and commits nothing. Writes patient-identifiable data.",
|
|
17138
17167
|
"descriptionKey": "ui.agent.calendar.workflows.moveAppointment",
|
|
17139
17168
|
"uiActions": [
|
|
17140
17169
|
"calendar.focus_event",
|
|
@@ -17216,7 +17245,7 @@
|
|
|
17216
17245
|
{
|
|
17217
17246
|
"name": "manage_patient_notes",
|
|
17218
17247
|
"safety": "phi",
|
|
17219
|
-
"description": "Read and write the patient's notes from the Notes
|
|
17248
|
+
"description": "Read and write the patient's notes from the conditional Notes rail tool: add a note through the composer, pin one, edit one in a dialog or delete one behind an alert dialog. Every write goes to the host, which stamps the note's id, time and author. The kit attributes nothing to a clinical note. An HTML note edits in a rich text editor and saves as HTML; a clinical or deleted note offers no edit. With no host seam, or when the host's seam is not writable, the tool is a read-only timeline. Explicit note permissions take precedence over appointment-edit permission. Details and the editor have no Notes sub-view. The rows carry ids and pin / flag / clinical markers only; the body and author are never exposed as state. Writes patient-identifiable clinical data.",
|
|
17220
17249
|
"descriptionKey": "ui.agent.calendar.workflows.managePatientNotes",
|
|
17221
17250
|
"uiActions": [
|
|
17222
17251
|
"notes-panel.add_note",
|
|
@@ -17224,7 +17253,8 @@
|
|
|
17224
17253
|
"dialog.open",
|
|
17225
17254
|
"dialog.close",
|
|
17226
17255
|
"dialog.dismiss",
|
|
17227
|
-
"text-area.set_value"
|
|
17256
|
+
"text-area.set_value",
|
|
17257
|
+
"rich-text-editor.set_content"
|
|
17228
17258
|
],
|
|
17229
17259
|
"stateReads": [
|
|
17230
17260
|
"notes-panel.notes",
|
|
@@ -17270,6 +17300,20 @@
|
|
|
17270
17300
|
"signature.request"
|
|
17271
17301
|
]
|
|
17272
17302
|
},
|
|
17303
|
+
{
|
|
17304
|
+
"name": "create_document",
|
|
17305
|
+
"safety": "phi",
|
|
17306
|
+
"description": "Open the appointment details create menu through data-action=\"open-create-document\" and select an offered data-action=\"create-document-<kind>\" item: bill, folder, template, empty, identification or webcam. The host supplies permitted kinds and owns navigation, confirmation and persistence. Appointment read-only mode does not withhold document rights. A selection starts the host workflow; it does not prove that a document or bill was created. May write patient-identifiable data.",
|
|
17307
|
+
"descriptionKey": "ui.agent.calendar.workflows.createDocument",
|
|
17308
|
+
"uiActions": [
|
|
17309
|
+
"dropdown-menu.open",
|
|
17310
|
+
"dropdown-menu.close"
|
|
17311
|
+
],
|
|
17312
|
+
"stateReads": [
|
|
17313
|
+
"dropdown-menu.isOpen"
|
|
17314
|
+
],
|
|
17315
|
+
"apiActions": []
|
|
17316
|
+
},
|
|
17273
17317
|
{
|
|
17274
17318
|
"name": "message_patient_whatsapp",
|
|
17275
17319
|
"safety": "phi",
|
|
@@ -17345,7 +17389,7 @@
|
|
|
17345
17389
|
{
|
|
17346
17390
|
"name": "find_free_slot",
|
|
17347
17391
|
"safety": "read",
|
|
17348
|
-
"description": "Search the practice for bookable time in the finder panel. Operator and chair scope are grouped checklists behind a popover per axis — a select-all row first, operators sectioned under their groups, nothing ticked searching every eligible resource — beside the care, the duration, the date range and, for a care that needs one, a medical-device select. The results list groups the slots under a day heading; a click steers the grid to that day and docks the editor prefilled with the date, time, duration, chair, operator and any seeded patient or care. The 185-day range warning is advisory (the search still runs), \"Show more slots\" pushes the To date out by 30 days and re-searches, and an alert names which business hours are missing when the practice or its operators hold none (it links to the scheduler only where the host supplies that navigation, which this workspace does not). Read-only
|
|
17392
|
+
"description": "Search the practice for bookable time in the finder panel. Operator and chair scope are grouped checklists behind a popover per axis — a select-all row first, operators sectioned under their groups, nothing ticked searching every eligible resource — beside the care, the duration, the date range and, for a care that needs one, a medical-device select. The results list groups the slots under a day heading; when the viewer may write appointments, a click steers the grid to that day and docks the editor prefilled with the date, time, duration, chair, operator and any seeded patient or care; read-only viewers see the list and projection only, under a lock note, with no Book. The 185-day range warning is advisory (the search still runs), \"Show more slots\" pushes the To date out by 30 days and re-searches, and an alert names which business hours are missing when the practice or its operators hold none (it links to the scheduler only where the host supplies that navigation, which this workspace does not). Projected bands open a modal list of original options by click, Enter or Space; only an explicit Book action uses the finder booking path. Read-only viewers can scroll those options without Book. Dismissal restores focus to the band.",
|
|
17349
17393
|
"descriptionKey": "ui.agent.calendar.workflows.findFreeSlot",
|
|
17350
17394
|
"uiActions": [
|
|
17351
17395
|
"collapsible.toggle",
|
|
@@ -17373,7 +17417,7 @@
|
|
|
17373
17417
|
{
|
|
17374
17418
|
"name": "triage_online_booking",
|
|
17375
17419
|
"safety": "phi",
|
|
17376
|
-
"description": "
|
|
17420
|
+
"description": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. Completing writes patient-identifiable data.",
|
|
17377
17421
|
"descriptionKey": "ui.agent.calendar.workflows.triageOnlineBooking",
|
|
17378
17422
|
"uiActions": [
|
|
17379
17423
|
"calendar.focus_event",
|
package/dist/agent-i18n/en.json
CHANGED
|
@@ -170,24 +170,26 @@
|
|
|
170
170
|
"filterColumns": "Narrow the grid to particular chairs or operators from the two filter popovers, with the platform's semantics: nothing ticked shows everyone and ticking narrows. Operators list under their groups with a tri-state row per group; \"Only available operators\" is on by default in the operator views, and a session-local \"Show disabled operators\" switch reveals the operators the practice has disabled. A count badge rides each filter button while it narrows, and the \"Reset filters\" chip beside them clears both selections and restores both switches without ever changing the view. Selection only — no appointment is touched.",
|
|
171
171
|
"maskPatientNames": "Turn privacy mode on or off from the toolbar. While on, patient names are masked on the cards, in the hover peek, in the Appointments panel and on the printed call sheet, so the page can stay open beside a waiting patient. It is a display mask, not a permission: it is not persisted and it changes no record.",
|
|
172
172
|
"configureDisplay": "Set the per-user display knobs in the cog popover — layout, zebra rows, show times, slot precision, the day window, the care-description mode, what the cards are coloured by, the default duration of a new appointment (5–240 minutes), whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, and whether the details panel offers the map link. The choices are remembered per user through the host's preferences adapter under `calendarWorkspace.*` keys, so they persist beyond the page load; they change presentation only and touch no patient record.",
|
|
173
|
-
"dockTool": "Open
|
|
173
|
+
"dockTool": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings or free-slot finder. Read the actual strip: hosts may withhold tools, and patient-notes is registered only with patient context. Notes uses the host's note permissions, independently of appointment-edit rights. Clearing its patient context returns to the previous available tool and focuses its rail button. Opening notes from a panel may address a note id and moves focus into Notes. Closing other tools returns to Appointments.",
|
|
174
174
|
"reviewUpcoming": "Read the rail's resting panel: the practice's upcoming appointments — now to the end of the seventh day, cancelled excluded, earliest first — each row led by the patient. The preset row, the jump-to-date picker and the edge loaders widen the derived window up to ±180 days. Activating a row selects that appointment on the grid, which docks its details. Read-only; the rows carry ids and lifecycle state, never patient identity.",
|
|
175
|
+
"readAppointmentDetails": "Read one appointment in the docked details panel. With the host's details read, any card click, including a patient-less block and a chip whose names are still loading, focuses the appointment and docks a read-only panel: appointment, booking, money, contact, treatments, signing and series sections, the patient's latest three notes and a History sub-view. See more or a note opens the separate Notes rail tool when the host offers it. While the read is loading, failed or refused the panel shows that status instead. Edit, withheld from a read-only viewer, opens the editor. Without the host's read a pending chip stays inert and the editor form is the details. Reads patient-identifiable data.",
|
|
175
176
|
"createAppointment": "Book a new appointment in the editor panel, docked from the New appointment button, from a click on an empty slot (prefilled with the slot, the clicked column and the cog's default duration) or from an online booking being processed. Set the patient, the linked care or care-plan lines, the date, start time and duration, the operator, chair, branch and colour, the description (255 characters at most — a longer one blocks the save), and, once a patient is chosen, the SMS and e-mail reminders, the first-visit question and — where the patient has unsigned required documents — how they are asked to sign. Busy chair, busy operator and operator-away warnings are advisory and do not hold the save; only a practice closure does. Enter submits from any text field. Writes patient-identifiable data.",
|
|
176
|
-
"editAppointment": "Amend an existing appointment.
|
|
177
|
+
"editAppointment": "Amend an existing appointment in the docked editor. With the host's details read the editor opens from Edit on the details panel and Cancel or Save returns there; without it the details panel is the form. A remote host first loads canonical data; loading, failure and whole-appointment refusal expose no editable form. When that data carries a series, the editor first asks the scope: this occurrence, this and following, or the whole series. Honour the returned patient, care, description and recurrence capabilities. A refused recurring scope cannot be treated as an ordinary edit. Save waits for host acceptance before closing or announcing success; rejection preserves the entered draft for correction or retry. Writes patient-identifiable data.",
|
|
177
178
|
"changeAppointmentStatus": "Set an appointment's attendance status from the Status select in the details panel. The status is patient-identifiable attendance data.",
|
|
178
|
-
"moveAppointment": "Reschedule an appointment either by dragging its card to a new slot or by arming \"Move…\" in the details panel and then clicking the target slot — the panel stays docked and a banner tinted with the appointment's own colour names what is being placed. Either route ends in the confirmation dialog, which offers the SMS and e-mail notify channels
|
|
179
|
+
"moveAppointment": "Reschedule an appointment either by dragging its card to a new slot or by arming \"Move…\" in the details panel and then clicking the target slot — the panel stays docked and a banner tinted with the appointment's own colour names what is being placed. Either route ends in the confirmation dialog, which offers the SMS and e-mail notify channels and, for a series member, the recurring scope. A host recurring parent always confirms, asks the scope and hides the notify channels, as the platform does. Cancelling reverts the card and commits nothing. Writes patient-identifiable data.",
|
|
179
180
|
"resizeAppointment": "Change an appointment's duration by dragging its card edge. Unlike a move this SAVES AT ONCE with no confirmation, exactly as the platform does; the toast that follows carries an Undo that restores the previous duration and logs both changes on the appointment's history. Writes patient-identifiable data.",
|
|
180
181
|
"copyAppointment": "Duplicate an appointment onto another slot: arm \"Copy…\" in the details panel, then click the target. The copy lands immediately with no confirmation, and its toast carries an Undo. A plan-linked appointment first asks whether to copy the appointment only or the appointment and its treatments. Writes patient-identifiable data.",
|
|
181
182
|
"deleteAppointment": "Remove an appointment from the details panel behind an alert dialog. The dialog asks for the recurring scope when the appointment belongs to a series, and for the care-plan cleanup when it is the parent of a price-list recurrence — so confirming can drop far more than the one card. Irreversible from this surface.",
|
|
182
|
-
"managePatientNotes": "Read and write the patient's notes from the Notes
|
|
183
|
+
"managePatientNotes": "Read and write the patient's notes from the conditional Notes rail tool: add a note through the composer, pin one, edit one in a dialog or delete one behind an alert dialog. Every write goes to the host, which stamps the note's id, time and author. The kit attributes nothing to a clinical note. An HTML note edits in a rich text editor and saves as HTML; a clinical or deleted note offers no edit. With no host seam, or when the host's seam is not writable, the tool is a read-only timeline. Explicit note permissions take precedence over appointment-edit permission. Details and the editor have no Notes sub-view. The rows carry ids and pin / flag / clinical markers only; the body and author are never exposed as state. Writes patient-identifiable clinical data.",
|
|
183
184
|
"readModificationHistory": "Open the History sub-view of the details panel and read the appointment's modification ledger, newest first — what changed, from what to what, and when. No mutation.",
|
|
184
185
|
"requestSignature": "Ask the patient to sign the appointment's documents from the details panel, by SMS or e-mail through the kit menu. The chip beside it reports the channel a request has already gone out on. There is no \"On this device…\" item: on-device signing is the host's own e-signature surface and no seam here mounts it, so the menu offers only the two channels it can honour. Sends a patient-identifiable request.",
|
|
186
|
+
"createDocument": "Open the appointment details create menu through data-action=\"open-create-document\" and select an offered data-action=\"create-document-<kind>\" item: bill, folder, template, empty, identification or webcam. The host supplies permitted kinds and owns navigation, confirmation and persistence. Appointment read-only mode does not withhold document rights. A selection starts the host workflow; it does not prove that a document or bill was created. May write patient-identifiable data.",
|
|
185
187
|
"messagePatientWhatsapp": "Reach the patient over WhatsApp from a waiting-list row. The affordance is a `wa.me` deep link the row opens in a new tab — it is disabled, and names its reason in its accessible name, when the entry carries no WhatsApp-capable number. There is no equivalent in the details panel: the send-reminder group is handed an empty channel list, because the host's legacy Snippets island is the only composing surface and no seam here mounts it. Hands a patient's contact detail to an outbound channel.",
|
|
186
188
|
"filterWaitingList": "Narrow the waiting queue: the four quick views (all, patients without an appointment, appointment scheduled over 30 days ago, on the list over 30 days) and, behind \"Show advanced filters\", the platform's nine optional client-side inputs — patient, patient assigned, operator, appointment scheduled, appointment scheduled from / to, on the waiting list from / to and description — applied only when \"Filter list\" is pressed. The toggle carries a count badge while any input is set, and changing the quick view drops the form. Selection only.",
|
|
187
189
|
"manageWaitingListEntry": "Add, amend or remove a waiting-list entry. The four-field form opens as a rail SUB-VIEW — from the toolbar split button's plus segment, from Add entry, or from a row's pencil — with a back arrow to the queue. Editing is refused on a row already linked to an appointment, because those fields belong to the appointment; the pencil stays focusable and names that reason. Remove deletes at once with no confirmation, platform parity, and its toast carries an Undo that puts the entry back. Writes patient-identifiable data.",
|
|
188
190
|
"scheduleWaitingPatient": "Give a waiting patient a slot. \"Schedule\" on an unlinked row hands off to the free-slot finder seeded from the entry — operator, chair, duration, patient, care and colour already filled in — and booking a slot opens the editor carrying the entry, so saving books the appointment and takes the entry off the list. A row already linked to an appointment reads \"Reschedule\" and seeds the same finder, but booking there MOVES the existing appointment rather than creating a second one. Writes patient-identifiable data.",
|
|
189
|
-
"findFreeSlot": "Search the practice for bookable time in the finder panel. Operator and chair scope are grouped checklists behind a popover per axis — a select-all row first, operators sectioned under their groups, nothing ticked searching every eligible resource — beside the care, the duration, the date range and, for a care that needs one, a medical-device select. The results list groups the slots under a day heading; a click steers the grid to that day and docks the editor prefilled with the date, time, duration, chair, operator and any seeded patient or care. The 185-day range warning is advisory (the search still runs), \"Show more slots\" pushes the To date out by 30 days and re-searches, and an alert names which business hours are missing when the practice or its operators hold none (it links to the scheduler only where the host supplies that navigation, which this workspace does not). Read-only
|
|
190
|
-
"triageOnlineBooking": "
|
|
191
|
+
"findFreeSlot": "Search the practice for bookable time in the finder panel. Operator and chair scope are grouped checklists behind a popover per axis — a select-all row first, operators sectioned under their groups, nothing ticked searching every eligible resource — beside the care, the duration, the date range and, for a care that needs one, a medical-device select. The results list groups the slots under a day heading; when the viewer may write appointments, a click steers the grid to that day and docks the editor prefilled with the date, time, duration, chair, operator and any seeded patient or care; read-only viewers see the list and projection only, under a lock note, with no Book. The 185-day range warning is advisory (the search still runs), \"Show more slots\" pushes the To date out by 30 days and re-searches, and an alert names which business hours are missing when the practice or its operators hold none (it links to the scheduler only where the host supplies that navigation, which this workspace does not). Projected bands open a modal list of original options by click, Enter or Space; only an explicit Book action uses the finder booking path. Read-only viewers can scroll those options without Book. Dismissal restores focus to the band.",
|
|
192
|
+
"triageOnlineBooking": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. Completing writes patient-identifiable data.",
|
|
191
193
|
"printDaySheet": "Print the front-desk call sheet. The toolbar's printer icon opens a dialog asking which day — one day, never the visible range — and Print renders that day's appointments through the browser, scoped by the filters in force and masked when privacy mode is on. Nothing is sent to a server, but the sheet itself is a patient-identifiable document."
|
|
192
194
|
}
|
|
193
195
|
},
|
|
@@ -800,7 +802,7 @@
|
|
|
800
802
|
},
|
|
801
803
|
"actions": {
|
|
802
804
|
"addNote": "Compose and commit a new note. A clinical note requires the clinical-note permission (read canAddClinical first).",
|
|
803
|
-
"togglePin": "Toggle the pinned state of the note with the given id.",
|
|
805
|
+
"togglePin": "Toggle the pinned state of the note with the given id. Refused for a deleted note or one whose actions.pin is false.",
|
|
804
806
|
"toggleFlag": "Toggle the flagged state of the note with the given id."
|
|
805
807
|
}
|
|
806
808
|
},
|
|
@@ -1322,7 +1324,7 @@
|
|
|
1322
1324
|
"pointCount": "Number of positions in the currently rendered series, unmeasured gaps included — reflecting whichever applied last, the `data` prop or an `update_series` call. A count only; the plotted values are never exposed."
|
|
1323
1325
|
},
|
|
1324
1326
|
"actions": {
|
|
1325
|
-
"updateSeries": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it.",
|
|
1327
|
+
"updateSeries": "Replace the sparkline data without remounting. Writes straight into ApexCharts, bypassing React — read the `pointCount` slot back rather than expecting the host tree to reflect it. Host-supplied point labels are not updated, so the tooltip title is hidden after this call.",
|
|
1326
1328
|
"exportPng": "Return a PNG data URI of the sparkline.",
|
|
1327
1329
|
"selectAnnotation": "Select a drawn annotation, as pressing its band would. No-op unless the host wired onAnnotationSelect and the id names an annotation that is currently drawn — check the `selectable` and `annotationIds` slots first, since neither failure produces a signal."
|
|
1328
1330
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-error-message.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/get-error-message.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appointment-card.d.ts","sourceRoot":"","sources":["../../../src/components/appointment-card/appointment-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAkB,MAAM,OAAO,CAAC;AACxE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAsBlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AA6C/D,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAMjF,oCAAoC;AACpC,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1D,kCAAkC;AAClC,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7D,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,KAAK,EAAE,gBAAgB,CAAC;IACxB,wDAAwD;IACxD,IAAI,EAAE,eAAe,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,yBAAyB;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,wBAAwB;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,uBAAuB;IACvB,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,sCAAsC;IACtC,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,qBAAqB;IACrB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD,QAAA,MAAM,uBAAuB;;;;8EAsC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"appointment-card.d.ts","sourceRoot":"","sources":["../../../src/components/appointment-card/appointment-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as p } from "../../_chunks/appointment-card-
|
|
2
|
-
import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-
|
|
1
|
+
import { A as p } from "../../_chunks/appointment-card-CvUFFEdS.js";
|
|
2
|
+
import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-Z2GaOIYQ.js";
|
|
3
3
|
import { i } from "../../_chunks/is-safe-url-DkETxeHz.js";
|
|
4
4
|
export {
|
|
5
5
|
p as AppointmentCard,
|
|
@@ -60,7 +60,7 @@ export interface CalendarEvent {
|
|
|
60
60
|
* own: use `isRecurring` for the grid indicator.
|
|
61
61
|
*/
|
|
62
62
|
isRecurrenceParent?: boolean;
|
|
63
|
-
/**
|
|
63
|
+
/** Background event; interactive only with onBackgroundEventClick. */
|
|
64
64
|
isInternal?: boolean;
|
|
65
65
|
/**
|
|
66
66
|
* Renders the card as a TASK rather than an appointment — calendar-scheduled
|
|
@@ -79,13 +79,24 @@ export interface CalendarEvent {
|
|
|
79
79
|
* filling.
|
|
80
80
|
*/
|
|
81
81
|
isDraft?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* A REAL booked appointment whose details the host is still fetching —
|
|
84
|
+
* an occupancy-first host draws the block from the slot it occupies
|
|
85
|
+
* (colour, time, chair) and fills the name in afterwards. Renders the
|
|
86
|
+
* card's details-pending treatment (`data-kind="pending-details"`). A
|
|
87
|
+
* click is delivered and the host decides what it opens; the hover
|
|
88
|
+
* callback and drag stay refused, so a block nobody can name yet is never
|
|
89
|
+
* previewed or moved. Distinct from the pattern's `isPendingBooking` (an
|
|
90
|
+
* online booking still missing a patient or an operator).
|
|
91
|
+
*/
|
|
92
|
+
detailsPending?: boolean;
|
|
82
93
|
/**
|
|
83
94
|
* Per-event master switch for drag AND resize. Overrides the
|
|
84
95
|
* calendar-level `editable` for this event only (true enables even when
|
|
85
96
|
* the calendar is not editable; false disables both gestures).
|
|
86
97
|
* Leave undefined to inherit the calendar-level setting.
|
|
87
98
|
* Precedence: per-event `startEditable` > per-event `editable` >
|
|
88
|
-
* calendar-level `editable`. Background
|
|
99
|
+
* calendar-level `editable`. Background and details-pending events
|
|
89
100
|
* are never draggable regardless.
|
|
90
101
|
*/
|
|
91
102
|
editable?: boolean;
|
|
@@ -297,6 +308,9 @@ export interface CalendarProps {
|
|
|
297
308
|
* caveat. Existing one-argument handlers keep working unchanged.
|
|
298
309
|
*/
|
|
299
310
|
onEventClick?: (event: CalendarEvent, meta?: CalendarEventClickMeta) => void;
|
|
311
|
+
/** Opt in to keyboard-accessible titled background buttons. The anchor
|
|
312
|
+
* follows CalendarEventClickMeta's lifetime rules; no booking is implied. */
|
|
313
|
+
onBackgroundEventClick?: (event: CalendarEvent, meta: CalendarEventClickMeta) => void;
|
|
300
314
|
/**
|
|
301
315
|
* Fires when the pointer enters an event's rendered surface — the anchor
|
|
302
316
|
* seam for hover "peek" cards. Skipped for background events
|
|
@@ -409,6 +423,16 @@ export interface CalendarProps {
|
|
|
409
423
|
* Omitted / empty array shows all seven days.
|
|
410
424
|
*/
|
|
411
425
|
hiddenDays?: number[];
|
|
426
|
+
/**
|
|
427
|
+
* Local ISO `YYYY-MM-DD` dates whose rows the host has NOT finished
|
|
428
|
+
* loading: every cell of such a day wears the loading wash and carries
|
|
429
|
+
* `aria-busy`, and its date header gains a visually-hidden "still
|
|
430
|
+
* loading" word, so a half-drawn day is never read as an empty one. A
|
|
431
|
+
* date left out of the list is one the host says is fully loaded; an
|
|
432
|
+
* omitted prop says every rendered day is. The workspace pattern
|
|
433
|
+
* derives it from `CalendarData.dayLoadState`.
|
|
434
|
+
*/
|
|
435
|
+
loadingDates?: readonly string[];
|
|
412
436
|
/** Lower bound of the time axis (e.g. '07:00'). */
|
|
413
437
|
slotMinTime?: string;
|
|
414
438
|
/** Upper bound of the time axis (e.g. '23:00'). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/components/calendar/calendar.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/components/calendar/calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -107,6 +107,15 @@ export interface CalendarEventCardProps extends Omit<HTMLAttributes<HTMLDivEleme
|
|
|
107
107
|
* of each paint custom property exists per render.
|
|
108
108
|
*/
|
|
109
109
|
isDraft?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Details-pending treatment — a REAL booked appointment an
|
|
112
|
+
* occupancy-first host drew from the slot it occupies while it still
|
|
113
|
+
* fetches whose it is. The card keeps its colour and size and renders an
|
|
114
|
+
* `aria-hidden` skeleton bar where the title goes, with the localised
|
|
115
|
+
* "loading details" word in the accessible name and
|
|
116
|
+
* `data-kind="pending-details"` as the hook. Wins over `isDraft`/`isTask`.
|
|
117
|
+
*/
|
|
118
|
+
detailsPending?: boolean;
|
|
110
119
|
/**
|
|
111
120
|
* Colour scheme for the picker colour. `'solid'` (default) is the
|
|
112
121
|
* platform model — the hex paints the whole surface, ink auto-derived.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-event-card.d.ts","sourceRoot":"","sources":["../../../src/components/calendar-event-card/calendar-event-card.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAsB3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar-event-card.d.ts","sourceRoot":"","sources":["../../../src/components/calendar-event-card/calendar-event-card.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAsB3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAsMhE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,cAAc,CAAC,cAAc,CAAC,EAC9B,OAAO,CACR;IACC;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAE7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0BAA0B;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAEhC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,iBAAiB,mHAgV7B,CAAC"}
|