@aintela/chat 0.2.22 → 0.2.25

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.
@@ -1,187 +0,0 @@
1
- var ct = Object.defineProperty;
2
- var k = (c, u) => ct(c, "name", { value: u, configurable: !0 });
3
- import { useState as T, useRef as a, useCallback as b, useEffect as A } from "react";
4
- const X = /* @__PURE__ */ k(() => typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : `s-${Date.now()}-${Math.random()}`, "newSessionId");
5
- function it(c, u, y = {}) {
6
- const [o, i] = T(null), [f, d] = T(0), [x, v] = T([]), [P, L] = T([]), [D, H] = T(""), z = a(""), C = a(null), O = a(c);
7
- O.current = c;
8
- const U = a(u);
9
- U.current = u;
10
- const j = a(y);
11
- j.current = y;
12
- const E = a(null), I = a(null), M = a(0), W = a(""), q = a(null), F = a(null), B = a(X()), Y = b(() => i(null), []), Z = b(() => {
13
- v([]), L([]), H(""), z.current = "", q.current = null, B.current = X();
14
- }, []), K = b((t) => {
15
- i(null);
16
- const e = O.current, l = e.getTextarea();
17
- if (!l) return;
18
- const m = l.selectionStart ?? l.value.length, h = l.value.slice(0, m), s = l.value.slice(m), n = h.length > 0 && !/\s$/.test(h);
19
- if (t.kind === "date") {
20
- const p = `${n ? " " : ""}${t.insert} `;
21
- e.setDraft(`${h}${p}${s}`), e.focusCaret(h.length + p.length);
22
- return;
23
- }
24
- if (t.kind === "namedLocation" && t.insert) {
25
- const p = `@${t.insert.replace(/ /g, " ")}`, S = `${n ? " " : ""}${p} `;
26
- e.setDraft(`${h}${S}${s}`), e.focusCaret(h.length + S.length);
27
- return;
28
- }
29
- const $ = t.kind === "location" ? "@" : "#", r = `${n ? " " : ""}${$}`;
30
- e.setDraft(`${h}${r}${s}`), e.focusCaret(h.length + r.length), requestAnimationFrame(() => {
31
- const p = e.getTextarea();
32
- p && e.syncTrigger(p);
33
- });
34
- }, []), Q = b(async () => {
35
- var m;
36
- const t = U.current.resolveDates;
37
- if (!t) return;
38
- const e = W.current;
39
- if (e.trim() === "") {
40
- q.current = null;
41
- return;
42
- }
43
- if (e === q.current) return;
44
- q.current = e, (m = F.current) == null || m.abort();
45
- const l = new AbortController();
46
- F.current = l;
47
- try {
48
- const { dates: h, locations: s } = await t(e, B.current, l.signal);
49
- if (W.current !== e) return;
50
- const n = h.filter((r) => r.display).map((r) => ({ text: r.text, display: r.display }));
51
- L(n), v(s.map((r) => r.text).filter((r) => r.trim().length > 0));
52
- const $ = n.map((r) => `${r.text}=${r.display}`).join("|");
53
- n.length > 0 && $ !== z.current && (z.current = $, H(n[n.length - 1].text), C.current != null && window.clearTimeout(C.current), C.current = window.setTimeout(() => H(""), 2e3)), n.length === 0 && (z.current = "");
54
- } catch {
55
- }
56
- }, []), _ = b((t, e, l) => {
57
- W.current = t;
58
- const m = U.current.analyze;
59
- m && !l && (E.current != null && window.clearTimeout(E.current), E.current = window.setTimeout(async () => {
60
- const h = ++M.current;
61
- try {
62
- const s = await m(t, e);
63
- if (h !== M.current) return;
64
- const n = O.current, $ = n.getTextarea();
65
- if (!$ || $.value !== t) return;
66
- const r = ($.selectionStart ?? e) === t.length, p = n.hasAtQuery, S = n.isPickerOpen(), G = s.suggestions ?? [], J = s.locationExpected && p ? G.filter((g) => g.kind === "location") : [], { enableHashDatePicker: nt = !1, datePresets: rt = ["amanhã", "depois de amanhã", "próxima semana"] } = j.current;
67
- if (r && !S && (J.length > 0 || s.dateExpected)) {
68
- const g = [];
69
- if (s.locationExpected && p) {
70
- for (const w of J)
71
- g.push({ key: `loc:${w.value}`, label: `📍 ${w.label}`, kind: "namedLocation", insert: w.value });
72
- g.push({ key: "loc", label: "📍 Local…", kind: "location" });
73
- }
74
- if (s.dateExpected) {
75
- const w = G.filter((R) => R.kind === "date").map((R) => R.value);
76
- for (const R of w.length > 0 ? w : rt)
77
- g.push({ key: `date:${R}`, label: `📅 ${R}`, kind: "date", insert: R });
78
- nt && g.push({ key: "cal", label: "🗓️ Escolher data…", kind: "calendar" });
79
- }
80
- if (g.length > 0) {
81
- d(0), i(g);
82
- return;
83
- }
84
- }
85
- if (s.locationExpected && s.locationPartialEmpty && s.locationCount < 2 && p && r && !S && n.currentTriggerChar() !== "@") {
86
- const g = $.selectionStart ?? t.length, w = t.slice(0, g), R = w.length > 0 && !/\s$/.test(w);
87
- if (!w.endsWith("@")) {
88
- const N = R ? " @" : "@";
89
- i(null), n.setDraft(`${w}${N}${t.slice(g)}`), n.focusCaret(g + N.length), requestAnimationFrame(() => {
90
- const V = n.getTextarea();
91
- V && n.syncTrigger(V);
92
- });
93
- }
94
- return;
95
- }
96
- i(null);
97
- } catch {
98
- }
99
- }, 200)), I.current != null && window.clearTimeout(I.current), I.current = window.setTimeout(() => {
100
- Q();
101
- }, 300);
102
- }, [Q]), tt = b((t) => {
103
- var l, m;
104
- const e = t.trim();
105
- e && ((m = (l = U.current).commitIntent) == null || m.call(l, e, B.current));
106
- }, []), et = b((t) => {
107
- if (!o || o.length === 0) return !1;
108
- if (t.key === "ArrowDown")
109
- return t.preventDefault(), d((e) => (e + 1) % o.length), !0;
110
- if (t.key === "ArrowUp")
111
- return t.preventDefault(), d((e) => (e - 1 + o.length) % o.length), !0;
112
- if (t.key === "Enter" || t.key === "Tab") {
113
- t.preventDefault();
114
- const e = o[f];
115
- return e && K(e), !0;
116
- }
117
- return t.key === "Escape" ? (t.preventDefault(), i(null), !0) : !1;
118
- }, [o, f, K]);
119
- return A(() => () => {
120
- var t;
121
- E.current != null && window.clearTimeout(E.current), I.current != null && window.clearTimeout(I.current), C.current != null && window.clearTimeout(C.current), (t = F.current) == null || t.abort();
122
- }, []), {
123
- predictions: o,
124
- predictionHighlight: f,
125
- setPredictionHighlight: d,
126
- applyPrediction: K,
127
- clearPredictions: Y,
128
- resolvedLocations: x,
129
- resolvedDates: P,
130
- forceTooltipText: D,
131
- scheduleAssist: _,
132
- commit: tt,
133
- onKeyDown: et,
134
- resetSession: Z
135
- };
136
- }
137
- k(it, "usePromptAssist");
138
- function lt(c, u) {
139
- const y = a(c), [o, i] = T(null);
140
- return A(() => {
141
- y.current = c;
142
- }, [c]), A(() => {
143
- function f() {
144
- y.current();
145
- }
146
- if (k(f, "tick"), u !== null) {
147
- const d = setInterval(f, u);
148
- return i(d), () => {
149
- clearInterval(d);
150
- };
151
- }
152
- }, [u]), o;
153
- }
154
- k(lt, "useInterval");
155
- function at(c, u, y = 0) {
156
- const [o, i] = T(y);
157
- return A(() => {
158
- const f = c.current;
159
- if (!f) return;
160
- const d = new ResizeObserver((x) => {
161
- const v = x[0];
162
- v && i(v.contentRect.width);
163
- });
164
- return d.observe(f), i(f.getBoundingClientRect().width), () => d.disconnect();
165
- }, [c, u]), o;
166
- }
167
- k(at, "useContainerWidth");
168
- function ut(c, u, y = 0, o = 0) {
169
- const [i, f] = T(y), [d, x] = T(o);
170
- return A(() => {
171
- const v = c.current;
172
- if (!v) return;
173
- const P = new ResizeObserver((L) => {
174
- const D = L[0];
175
- D && (x(D.contentRect.height), f(D.contentRect.width));
176
- });
177
- return P.observe(v), f(v.getBoundingClientRect().width), () => P.disconnect();
178
- }, [c, u]), [i, d];
179
- }
180
- k(ut, "useContainerRectangle");
181
- export {
182
- at as a,
183
- lt as b,
184
- it as c,
185
- ut as u
186
- };
187
- //# sourceMappingURL=useContainerWidth-DsNHNR-z.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContainerWidth-DsNHNR-z.js","sources":["../src/hooks/usePromptAssist.ts","../src/hooks/useIntervalHook.ts","../src/hooks/useContainerWidth.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport type { PromptAnalysis, PromptResolution } from '../services/httpPromptAssistService';\n\n/** A dropdown item. `namedLocation` inserts `@Name` directly; `location`/`calendar` insert `@`/`#` and open the picker. */\nexport type PredictionItem = {\n key: string;\n label: string;\n kind: 'location' | 'namedLocation' | 'date' | 'calendar';\n insert?: string;\n};\n\nexport type ResolvedDateItem = { text: string; display: string };\n\n/** The DOM operations the hook needs from its host composer — so the same logic drives PromptV2 and PromptComposer. */\nexport interface PromptAssistAdapter {\n getTextarea: () => HTMLTextAreaElement | null;\n /** Replace the draft value (host owns the React state). */\n setDraft: (next: string) => void;\n /** After a programmatic edit, focus the textarea and place the caret (host defers a frame if needed). */\n focusCaret: (pos: number) => void;\n /** Re-detect the `@`/`#` trigger at the caret and open the matching picker (host's existing flow). */\n syncTrigger: (ta: HTMLTextAreaElement) => void;\n /** Is a location/date picker already open? (suppresses the predictions dropdown / auto-`@`) */\n isPickerOpen: () => boolean;\n /** The trigger char of any open picker, or null — used to avoid re-inserting `@`. */\n currentTriggerChar: () => string | null;\n /** Whether the `@` location fetcher is wired (else no auto-`@` / generic \"Local…\"). */\n hasAtQuery: boolean;\n}\n\nexport interface PromptAssistFetchers {\n analyze?: (text: string, caret: number) => Promise<PromptAnalysis>;\n resolveDates?: (text: string, sessionId?: string, signal?: AbortSignal) => Promise<PromptResolution>;\n commitIntent?: (text: string, sessionId?: string) => void;\n}\n\nexport interface PromptAssistOptions {\n enableHashDatePicker?: boolean;\n datePresets?: string[];\n}\n\nconst newSessionId = () =>\n typeof crypto !== 'undefined' && crypto.randomUUID ? crypto.randomUUID() : `s-${Date.now()}-${Math.random()}`;\n\n/**\n * Headless prompt-assist logic shared by the chat composer (PromptV2) and the home composer (obtapp PromptComposer):\n * the analyze quick pass (auto-`@` + combined predictions dropdown), the resolve slow pass (date resolution +\n * mapped-location chips), commit-on-send learning, and keyboard nav — all with NO rendering/anchoring assumptions.\n * The host provides its DOM ops via {@link PromptAssistAdapter} and renders the returned `predictions` however it wants.\n */\nexport function usePromptAssist(\n adapter: PromptAssistAdapter,\n fetchers: PromptAssistFetchers,\n options: PromptAssistOptions = {},\n) {\n const [predictions, setPredictions] = useState<PredictionItem[] | null>(null);\n const [predictionHighlight, setPredictionHighlight] = useState(0);\n const [resolvedLocations, setResolvedLocations] = useState<string[]>([]);\n const [resolvedDates, setResolvedDates] = useState<ResolvedDateItem[]>([]);\n // The date text whose marker tooltip should auto-open (set on a NEW resolution, cleared after 2s) — identical\n // to PromptV2's behavior so both composers surface a freshly-resolved date the same way.\n const [forceTooltipText, setForceTooltipText] = useState('');\n const lastResolvedKeyRef = useRef('');\n const tooltipTimerRef = useRef<number | null>(null);\n\n // Latest adapter/fetchers/options via refs — the debounced callbacks must not capture stale closures.\n const adapterRef = useRef(adapter); adapterRef.current = adapter;\n const fetchersRef = useRef(fetchers); fetchersRef.current = fetchers;\n const optionsRef = useRef(options); optionsRef.current = options;\n\n const analyzeTimerRef = useRef<number | null>(null);\n const resolveTimerRef = useRef<number | null>(null);\n const analyzeSeqRef = useRef(0);\n const draftRef = useRef('');\n const lastResolveTextRef = useRef<string | null>(null);\n const resolveAbortRef = useRef<AbortController | null>(null);\n const sessionIdRef = useRef<string>(newSessionId());\n\n const clearPredictions = useCallback(() => setPredictions(null), []);\n\n /** Call when the draft empties (send / reseed): clear mapped data and start a fresh learning session. */\n const resetSession = useCallback(() => {\n setResolvedLocations([]);\n setResolvedDates([]);\n setForceTooltipText('');\n lastResolvedKeyRef.current = '';\n lastResolveTextRef.current = null;\n sessionIdRef.current = newSessionId();\n }, []);\n\n const applyPrediction = useCallback((p: PredictionItem) => {\n setPredictions(null);\n const ad = adapterRef.current;\n const ta = ad.getTextarea();\n if (!ta) return;\n const caret = ta.selectionStart ?? ta.value.length;\n const before = ta.value.slice(0, caret);\n const after = ta.value.slice(caret);\n const needsSpace = before.length > 0 && !/\\s$/.test(before);\n\n if (p.kind === 'date') {\n const ins = `${needsSpace ? ' ' : ''}${p.insert} `;\n ad.setDraft(`${before}${ins}${after}`);\n ad.focusCaret(before.length + ins.length);\n return;\n }\n if (p.kind === 'namedLocation' && p.insert) {\n // A specific place → finished \"@\" mention (NBSP-joined so a multi-word name stays one chip / one mention).\n const mention = `@${p.insert.replace(/ /g, String.fromCharCode(0xA0))}`;\n const ins = `${needsSpace ? ' ' : ''}${mention} `;\n ad.setDraft(`${before}${ins}${after}`);\n ad.focusCaret(before.length + ins.length);\n return;\n }\n // Generic location / calendar → insert the trigger char and open the host's picker.\n const chr = p.kind === 'location' ? '@' : '#';\n const ins = `${needsSpace ? ' ' : ''}${chr}`;\n ad.setDraft(`${before}${ins}${after}`);\n ad.focusCaret(before.length + ins.length);\n requestAnimationFrame(() => { const t = ad.getTextarea(); if (t) ad.syncTrigger(t); });\n }, []);\n\n const runResolve = useCallback(async () => {\n const resolve = fetchersRef.current.resolveDates;\n if (!resolve) return;\n const text = draftRef.current;\n if (text.trim() === '') { lastResolveTextRef.current = null; return; }\n if (text === lastResolveTextRef.current) return; // unchanged since last call\n lastResolveTextRef.current = text;\n resolveAbortRef.current?.abort();\n const ac = new AbortController();\n resolveAbortRef.current = ac;\n try {\n const { dates, locations } = await resolve(text, sessionIdRef.current, ac.signal);\n if (draftRef.current !== text) return; // moved on while in flight\n const resolved = dates.filter((d) => d.display).map((d) => ({ text: d.text, display: d.display }));\n setResolvedDates(resolved);\n setResolvedLocations(locations.map((l) => l.text).filter((t) => t.trim().length > 0));\n // Auto-open the newest date's tooltip for 2s (only when the resolution set actually changed).\n const key = resolved.map((r) => `${r.text}=${r.display}`).join('|');\n if (resolved.length > 0 && key !== lastResolvedKeyRef.current) {\n lastResolvedKeyRef.current = key;\n setForceTooltipText(resolved[resolved.length - 1].text);\n if (tooltipTimerRef.current != null) window.clearTimeout(tooltipTimerRef.current);\n tooltipTimerRef.current = window.setTimeout(() => setForceTooltipText(''), 2000);\n }\n if (resolved.length === 0) lastResolvedKeyRef.current = '';\n } catch { /* ignore — includes AbortError from a superseded call */ }\n }, []);\n\n /** Call from the textarea's onChange. Runs the debounced analyze (200ms) + resolve (300ms) passes. */\n const scheduleAssist = useCallback((value: string, caret: number, isDeletion: boolean) => {\n draftRef.current = value;\n const analyze = fetchersRef.current.analyze;\n if (analyze && !isDeletion) {\n if (analyzeTimerRef.current != null) window.clearTimeout(analyzeTimerRef.current);\n analyzeTimerRef.current = window.setTimeout(async () => {\n const seq = ++analyzeSeqRef.current;\n try {\n const a = await analyze(value, caret);\n if (seq !== analyzeSeqRef.current) return;\n const ad = adapterRef.current;\n const live = ad.getTextarea();\n if (!live || live.value !== value) return;\n\n const caretEnd = (live.selectionStart ?? caret) === value.length;\n const canLoc = ad.hasAtQuery;\n const pickerOpen = ad.isPickerOpen();\n const named = a.suggestions ?? [];\n const namedLocs = a.locationExpected && canLoc ? named.filter((s) => s.kind === 'location') : [];\n const { enableHashDatePicker = false, datePresets = ['amanhã', 'depois de amanhã', 'próxima semana'] } = optionsRef.current;\n\n // Dropdown only when it has real value (named locations and/or a date slot); else fall to auto-'@'.\n if (caretEnd && !pickerOpen && (namedLocs.length > 0 || a.dateExpected)) {\n const items: PredictionItem[] = [];\n if (a.locationExpected && canLoc) {\n for (const s of namedLocs)\n items.push({ key: `loc:${s.value}`, label: `📍 ${s.label}`, kind: 'namedLocation', insert: s.value });\n items.push({ key: 'loc', label: '📍 Local…', kind: 'location' });\n }\n if (a.dateExpected) {\n const nd = named.filter((s) => s.kind === 'date').map((s) => s.value);\n for (const d of (nd.length > 0 ? nd : datePresets))\n items.push({ key: `date:${d}`, label: `📅 ${d}`, kind: 'date', insert: d });\n if (enableHashDatePicker) items.push({ key: 'cal', label: '🗓️ Escolher data…', kind: 'calendar' });\n }\n if (items.length > 0) { setPredictionHighlight(0); setPredictions(items); return; }\n }\n\n // Auto-'@': a location slot with no richer dropdown (fresh origin or later slot w/o history).\n if (a.locationExpected && a.locationPartialEmpty && a.locationCount < 2\n && canLoc && caretEnd && !pickerOpen && ad.currentTriggerChar() !== '@') {\n const c = live.selectionStart ?? value.length;\n const before = value.slice(0, c);\n const needsSpace = before.length > 0 && !/\\s$/.test(before);\n if (!before.endsWith('@')) {\n const insert = needsSpace ? ' @' : '@';\n setPredictions(null);\n ad.setDraft(`${before}${insert}${value.slice(c)}`);\n ad.focusCaret(c + insert.length);\n requestAnimationFrame(() => { const t = ad.getTextarea(); if (t) ad.syncTrigger(t); });\n }\n return;\n }\n\n setPredictions(null);\n } catch { /* transient — ignore */ }\n }, 200);\n }\n\n if (resolveTimerRef.current != null) window.clearTimeout(resolveTimerRef.current);\n resolveTimerRef.current = window.setTimeout(() => { void runResolve(); }, 300);\n }, [runResolve]);\n\n /** Call on send with the FINAL text (NBSP-preserving) so the server learns the committed intent. */\n const commit = useCallback((finalText: string) => {\n const t = finalText.trim();\n if (t) fetchersRef.current.commitIntent?.(t, sessionIdRef.current);\n }, []);\n\n /** Wire to the textarea's onKeyDown; returns true if it handled the key (host should then stop). */\n const onKeyDown = useCallback((e: KeyboardEvent<HTMLTextAreaElement>): boolean => {\n if (!predictions || predictions.length === 0) return false;\n if (e.key === 'ArrowDown') { e.preventDefault(); setPredictionHighlight((i) => (i + 1) % predictions.length); return true; }\n if (e.key === 'ArrowUp') { e.preventDefault(); setPredictionHighlight((i) => (i - 1 + predictions.length) % predictions.length); return true; }\n if (e.key === 'Enter' || e.key === 'Tab') { e.preventDefault(); const it = predictions[predictionHighlight]; if (it) applyPrediction(it); return true; }\n if (e.key === 'Escape') { e.preventDefault(); setPredictions(null); return true; }\n return false;\n }, [predictions, predictionHighlight, applyPrediction]);\n\n useEffect(() => () => {\n if (analyzeTimerRef.current != null) window.clearTimeout(analyzeTimerRef.current);\n if (resolveTimerRef.current != null) window.clearTimeout(resolveTimerRef.current);\n if (tooltipTimerRef.current != null) window.clearTimeout(tooltipTimerRef.current);\n resolveAbortRef.current?.abort();\n }, []);\n\n return {\n predictions, predictionHighlight, setPredictionHighlight,\n applyPrediction, clearPredictions,\n resolvedLocations, resolvedDates, forceTooltipText,\n scheduleAssist, commit, onKeyDown, resetSession,\n };\n}\n","import { useEffect, useRef, useState } from \"react\";\n\n// Custom useInterval hook\nfunction useInterval(callback: () => void, delay: number) {\n const savedCallback = useRef(callback);\n const [intervalId, setIntervalId] = useState<NodeJS.Timeout | null>(null)\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n setIntervalId(id)\n return () => {\n\n clearInterval(id); // Cleanup function\n }\n }\n }, [delay]);\n\n return intervalId;\n}\n\nexport default useInterval","import { useState, useEffect } from \"react\";\n\nexport function useContainerWidth(ref: React.RefObject<HTMLElement | null>, renderId: string, initialWidth = 0) {\n const [width, setWidth] = useState(initialWidth);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) setWidth(entry.contentRect.width);\n });\n\n observer.observe(el);\n setWidth(el.getBoundingClientRect().width);\n\n return () => observer.disconnect();\n }, [ref, renderId]);\n\n return width;\n}\n\nexport function useContainerRectangle(ref: React.RefObject<HTMLElement | null>, renderId: string, initialWidth = 0, initialHeight = 0) {\n const [width, setWidth] = useState(initialWidth);\n const [height, setHeight] = useState(initialHeight);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setHeight(entry.contentRect.height);\n setWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(el);\n setWidth(el.getBoundingClientRect().width);\n\n return () => observer.disconnect();\n }, [ref, renderId]);\n\n return [width, height];\n}"],"names":["newSessionId","__name","usePromptAssist","adapter","fetchers","options","predictions","setPredictions","useState","predictionHighlight","setPredictionHighlight","resolvedLocations","setResolvedLocations","resolvedDates","setResolvedDates","forceTooltipText","setForceTooltipText","lastResolvedKeyRef","useRef","tooltipTimerRef","adapterRef","fetchersRef","optionsRef","analyzeTimerRef","resolveTimerRef","analyzeSeqRef","draftRef","lastResolveTextRef","resolveAbortRef","sessionIdRef","clearPredictions","useCallback","resetSession","applyPrediction","p","ad","ta","caret","before","after","needsSpace","ins","mention","chr","t","runResolve","resolve","text","_a","ac","dates","locations","resolved","d","l","key","scheduleAssist","value","isDeletion","analyze","seq","a","live","caretEnd","canLoc","pickerOpen","named","namedLocs","s","enableHashDatePicker","datePresets","items","nd","c","insert","commit","finalText","_b","onKeyDown","e","i","it","useEffect","useInterval","callback","delay","savedCallback","intervalId","setIntervalId","tick","id","useContainerWidth","ref","renderId","initialWidth","width","setWidth","el","observer","entries","entry","useContainerRectangle","initialHeight","height","setHeight"],"mappings":"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"}