@airnauts/comments-client 0.1.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/LICENSE +21 -0
- package/README.md +30 -0
- package/dist/activation/storage.d.ts +4 -0
- package/dist/activation/storage.d.ts.map +1 -0
- package/dist/anchor/capture.d.ts +14 -0
- package/dist/anchor/capture.d.ts.map +1 -0
- package/dist/anchor/extract.d.ts +3 -0
- package/dist/anchor/extract.d.ts.map +1 -0
- package/dist/anchor/index.d.ts +4 -0
- package/dist/anchor/index.d.ts.map +1 -0
- package/dist/anchor/rematch.d.ts +46 -0
- package/dist/anchor/rematch.d.ts.map +1 -0
- package/dist/anchor/runtime.d.ts +33 -0
- package/dist/anchor/runtime.d.ts.map +1 -0
- package/dist/anchor/selectors.d.ts +5 -0
- package/dist/anchor/selectors.d.ts.map +1 -0
- package/dist/api/client.d.ts +24 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/errors.d.ts +8 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/app/app.d.ts +9 -0
- package/dist/app/app.d.ts.map +1 -0
- package/dist/app/mount.d.ts +6 -0
- package/dist/app/mount.d.ts.map +1 -0
- package/dist/app/providers.d.ts +7 -0
- package/dist/app/providers.d.ts.map +1 -0
- package/dist/app/widget-css.generated.d.ts +2 -0
- package/dist/app/widget-css.generated.d.ts.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/error-boundary.d.ts +16 -0
- package/dist/error-boundary.d.ts.map +1 -0
- package/dist/gate.d.ts +15 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/identity/IdentityModal.d.ts +8 -0
- package/dist/identity/IdentityModal.d.ts.map +1 -0
- package/dist/identity/storage.d.ts +7 -0
- package/dist/identity/storage.d.ts.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38617 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/marker/MarkerLayer.d.ts +14 -0
- package/dist/marker/MarkerLayer.d.ts.map +1 -0
- package/dist/marker/useFocusPin.d.ts +15 -0
- package/dist/marker/useFocusPin.d.ts.map +1 -0
- package/dist/panel/PanelDrawer.d.ts +5 -0
- package/dist/panel/PanelDrawer.d.ts.map +1 -0
- package/dist/panel/PanelProvider.d.ts +11 -0
- package/dist/panel/PanelProvider.d.ts.map +1 -0
- package/dist/panel/PanelRow.d.ts +7 -0
- package/dist/panel/PanelRow.d.ts.map +1 -0
- package/dist/panel/controller.d.ts +14 -0
- package/dist/panel/controller.d.ts.map +1 -0
- package/dist/panel/navigate.d.ts +13 -0
- package/dist/panel/navigate.d.ts.map +1 -0
- package/dist/panel/state.d.ts +42 -0
- package/dist/panel/state.d.ts.map +1 -0
- package/dist/positioning/coords.d.ts +28 -0
- package/dist/positioning/coords.d.ts.map +1 -0
- package/dist/positioning/layer.d.ts +12 -0
- package/dist/positioning/layer.d.ts.map +1 -0
- package/dist/positioning/lifecycle.d.ts +9 -0
- package/dist/positioning/lifecycle.d.ts.map +1 -0
- package/dist/react.d.ts +9 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +24 -0
- package/dist/react.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/threads/ThreadsProvider.d.ts +15 -0
- package/dist/threads/ThreadsProvider.d.ts.map +1 -0
- package/dist/threads/controller.d.ts +38 -0
- package/dist/threads/controller.d.ts.map +1 -0
- package/dist/threads/relativeTime.d.ts +3 -0
- package/dist/threads/relativeTime.d.ts.map +1 -0
- package/dist/threads/state.d.ts +98 -0
- package/dist/threads/state.d.ts.map +1 -0
- package/dist/threads/useThreads.d.ts +19 -0
- package/dist/threads/useThreads.d.ts.map +1 -0
- package/dist/ui/Attachment.d.ts +9 -0
- package/dist/ui/Attachment.d.ts.map +1 -0
- package/dist/ui/CommentList.d.ts +9 -0
- package/dist/ui/CommentList.d.ts.map +1 -0
- package/dist/ui/Composer.d.ts +20 -0
- package/dist/ui/Composer.d.ts.map +1 -0
- package/dist/ui/DetachedThread.d.ts +10 -0
- package/dist/ui/DetachedThread.d.ts.map +1 -0
- package/dist/ui/Launcher.d.ts +10 -0
- package/dist/ui/Launcher.d.ts.map +1 -0
- package/dist/ui/Pin.d.ts +17 -0
- package/dist/ui/Pin.d.ts.map +1 -0
- package/dist/ui/ThreadCard.d.ts +11 -0
- package/dist/ui/ThreadCard.d.ts.map +1 -0
- package/dist/ui/ThreadPopover.d.ts +14 -0
- package/dist/ui/ThreadPopover.d.ts.map +1 -0
- package/dist/ui/avatar.d.ts +4 -0
- package/dist/ui/avatar.d.ts.map +1 -0
- package/dist/ui/toast.d.ts +8 -0
- package/dist/ui/toast.d.ts.map +1 -0
- package/package.json +94 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Airnauts
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# @airnauts/comments-client
|
|
2
|
+
|
|
3
|
+
Embeddable commenting widget and React wrapper for the [Airnauts commenting tool](https://github.com/Airnauts/commenting-tool).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @airnauts/comments-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## React usage
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
'use client'
|
|
15
|
+
import { CommentsLayer } from '@airnauts/comments-client/react'
|
|
16
|
+
|
|
17
|
+
export function CommentsMount() {
|
|
18
|
+
return <CommentsLayer commentsKey="dev-key" endpoint="/api/comments" />
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The widget stays inert until the page URL carries a matching `?comments-key=…`.
|
|
23
|
+
The vanilla `@airnauts/comments-client` entry bundles its own React; the `/react`
|
|
24
|
+
entry uses the host app's React (declared as an optional peer dependency).
|
|
25
|
+
|
|
26
|
+
See the [integration guide](https://github.com/Airnauts/commenting-tool/blob/main/docs/integration.md).
|
|
27
|
+
|
|
28
|
+
## License
|
|
29
|
+
|
|
30
|
+
MIT © Airnauts
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The activation key persisted after a successful URL-param activation, or null. */
|
|
2
|
+
export declare function loadActivationKey(store?: Storage): string | null;
|
|
3
|
+
export declare function saveActivationKey(key: string, store?: Storage): void;
|
|
4
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/activation/storage.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,OAAsB,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,OAAsB,GAAG,IAAI,CAElF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Anchor } from '@airnauts/comments-core';
|
|
2
|
+
export declare const clamp01: (n: number) => number;
|
|
3
|
+
/** Fractional offset of a coordinate within a 1-D extent; 0.5 when the extent is zero (NaN guard). */
|
|
4
|
+
export declare function offsetWithin(coord: number, extent: {
|
|
5
|
+
start: number;
|
|
6
|
+
size: number;
|
|
7
|
+
}): number;
|
|
8
|
+
export type Point = {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function captureElement(el: Element, point: Point): Anchor;
|
|
13
|
+
export declare function captureSelection(range: Range): Anchor;
|
|
14
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/anchor/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAI5E,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,MAAqC,CAAA;AAEzE,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG3F;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAWhE;AAcD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAyCrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/anchor/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAsCtD,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAcnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/anchor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Anchor, Signals } from '@airnauts/comments-core';
|
|
2
|
+
import { type ScoreComponents } from '@airnauts/comments-core';
|
|
3
|
+
/** Scope candidates to the nearest surviving ancestor-landmark; fall back to all of the stored tag. */
|
|
4
|
+
export declare function findCandidates(root: ParentNode, stored: {
|
|
5
|
+
tag: string;
|
|
6
|
+
ancestorTrail: string[];
|
|
7
|
+
}): Element[];
|
|
8
|
+
export type Healed = {
|
|
9
|
+
selectors: [string, string];
|
|
10
|
+
signals: Signals;
|
|
11
|
+
};
|
|
12
|
+
/** Why an anchor was lost, with the scores that led there — for console diagnostics. */
|
|
13
|
+
export type OrphanDiagnostics = {
|
|
14
|
+
candidateCount: number;
|
|
15
|
+
thresholds: {
|
|
16
|
+
accept: number;
|
|
17
|
+
margin: number;
|
|
18
|
+
};
|
|
19
|
+
stored: {
|
|
20
|
+
tag: string;
|
|
21
|
+
selectors: readonly string[];
|
|
22
|
+
};
|
|
23
|
+
top: Array<{
|
|
24
|
+
total: number;
|
|
25
|
+
components: ScoreComponents;
|
|
26
|
+
excluded: false | 'tagMismatch';
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
export type RematchResult = {
|
|
30
|
+
kind: 'anchored';
|
|
31
|
+
el: Element;
|
|
32
|
+
range?: Range;
|
|
33
|
+
healed?: Healed;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'selectionLost';
|
|
36
|
+
el: Element;
|
|
37
|
+
healed?: Healed;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'orphaned';
|
|
40
|
+
reason: 'noCandidates' | 'belowAccept' | 'ambiguous';
|
|
41
|
+
diagnostics: OrphanDiagnostics;
|
|
42
|
+
};
|
|
43
|
+
/** Cheap agreement check for the fast path: same tag and every stored stableAttr present + equal. */
|
|
44
|
+
export declare function signalsAgree(stored: Signals, el: Element): boolean;
|
|
45
|
+
export declare function rematch(anchor: Anchor, root: ParentNode): RematchResult;
|
|
46
|
+
//# sourceMappingURL=rematch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rematch.d.ts","sourceRoot":"","sources":["../../src/anchor/rematch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,yBAAyB,CAAA;AA8BhC,uGAAuG;AACvG,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C,OAAO,EAAE,CAUX;AAED,MAAM,MAAM,MAAM,GAAG;IAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEtE,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IAErD,GAAG,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,KAAK,GAAG,aAAa,CAAA;KAAE,CAAC,CAAA;CAC5F,CAAA;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,CAAA;IACpD,WAAW,EAAE,iBAAiB,CAAA;CAC/B,CAAA;AAEL,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAOlE;AAuCD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,aAAa,CAqCvE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Anchor, ThreadListItem, ThreadStatus } from '@airnauts/comments-core';
|
|
2
|
+
import type { ApiClient } from '../api/client';
|
|
3
|
+
import { type Box } from '../positioning/coords';
|
|
4
|
+
import type { PlacedThread } from '../threads/state';
|
|
5
|
+
export type RuntimeOptions = {
|
|
6
|
+
client: Pick<ApiClient, 'listThreads' | 'refreshAnchor'>;
|
|
7
|
+
pageKey: string;
|
|
8
|
+
onPlacements: (placements: PlacedThread[]) => void;
|
|
9
|
+
root?: ParentNode;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the page key for the CURRENT document URL. Used to detect that a client-side
|
|
12
|
+
* route change is in flight: when this no longer equals `pageKey`, this runtime is keyed
|
|
13
|
+
* to the page being left and the live DOM already belongs to the destination route, so
|
|
14
|
+
* rematching would falsely orphan our threads. Omitted in tests that don't exercise nav.
|
|
15
|
+
*/
|
|
16
|
+
currentPageKey?: () => string;
|
|
17
|
+
};
|
|
18
|
+
type RetainedMatch = {
|
|
19
|
+
item: ThreadListItem;
|
|
20
|
+
el: Element;
|
|
21
|
+
anchor: Anchor;
|
|
22
|
+
highlight: Box[];
|
|
23
|
+
};
|
|
24
|
+
export declare function createRuntime(opts: RuntimeOptions): {
|
|
25
|
+
refresh: () => Promise<void>;
|
|
26
|
+
reposition: () => void;
|
|
27
|
+
rematchAll: () => void;
|
|
28
|
+
setItemStatus: (id: string, status: ThreadStatus) => void;
|
|
29
|
+
dispose: () => void;
|
|
30
|
+
readonly placed: RetainedMatch[];
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/anchor/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,KAAK,GAAG,EAAmB,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,eAAe,CAAC,CAAA;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,IAAI,CAAA;IAClD,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;CAC9B,CAAA;AAED,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,CAAA;AAO5F,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc;;;;wBAwFrB,MAAM,UAAU,YAAY;;;EAyBxD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Dual selectors per architecture §7: [structural nth-of-type path, class path]. */
|
|
2
|
+
export declare function buildSelectors(el: Element): [string, string];
|
|
3
|
+
/** Resolve a selector to a single unique Element; null on zero or multiple hits. */
|
|
4
|
+
export declare function resolveUnique(selector: string, root: ParentNode): Element | null;
|
|
5
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/anchor/selectors.ts"],"names":[],"mappings":"AAqCA,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAShF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type AddCommentBody, type Attachment, type Comment, type CreateThreadBody, type RefreshAnchorBody, type SetThreadStatusBody, type Thread, type ThreadListItem, type ThreadListResponse, type ThreadStatus } from '@airnauts/comments-core';
|
|
2
|
+
export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
3
|
+
export type ApiClientOptions = {
|
|
4
|
+
endpoint: string;
|
|
5
|
+
key: string;
|
|
6
|
+
fetch?: FetchLike;
|
|
7
|
+
};
|
|
8
|
+
export type ListParams = {
|
|
9
|
+
pageKey?: string;
|
|
10
|
+
status?: ThreadStatus;
|
|
11
|
+
sort?: 'updatedAt';
|
|
12
|
+
cursor?: string;
|
|
13
|
+
};
|
|
14
|
+
export interface ApiClient {
|
|
15
|
+
createThread(body: CreateThreadBody): Promise<Thread>;
|
|
16
|
+
listThreads(params?: ListParams): Promise<ThreadListResponse>;
|
|
17
|
+
getThread(id: string): Promise<Thread>;
|
|
18
|
+
addComment(id: string, body: AddCommentBody): Promise<Comment>;
|
|
19
|
+
setThreadStatus(id: string, body: SetThreadStatusBody): Promise<Thread>;
|
|
20
|
+
refreshAnchor(id: string, body: RefreshAnchorBody): Promise<ThreadListItem>;
|
|
21
|
+
upload(file: File): Promise<Attachment>;
|
|
22
|
+
}
|
|
23
|
+
export declare function createApiClient(opts: ApiClientOptions): ApiClient;
|
|
24
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAGhC,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC7D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9D,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3E,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACxC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAoEjE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ErrorCode } from '@airnauts/comments-core';
|
|
2
|
+
export declare class ApiError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly code: ErrorCode | 'UNKNOWN';
|
|
5
|
+
readonly details?: unknown;
|
|
6
|
+
constructor(status: number, code: ErrorCode | 'UNKNOWN', message: string, details?: unknown);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;gBAEd,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAO5F"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ApiClient } from '../api/client';
|
|
2
|
+
import { type InitOptions } from '../config';
|
|
3
|
+
export type WidgetAppProps = {
|
|
4
|
+
options: InitOptions;
|
|
5
|
+
/** Test seam: inject a client instead of constructing one from `options`. */
|
|
6
|
+
client?: ApiClient;
|
|
7
|
+
};
|
|
8
|
+
export declare function WidgetApp({ options, client: injected }: WidgetAppProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app/app.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,WAAW,CAAA;AAW5D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,WAAW,CAAA;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAuDtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/app/mount.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAI5C,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CA6CxD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export declare function usePortalContainer(): HTMLElement | null;
|
|
3
|
+
export declare function useToastsContainer(): HTMLElement | null;
|
|
4
|
+
export declare function WidgetProvider({ children }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/app/providers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAA;AAS3E,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAED,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAenE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const widgetCss = "/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--cmnt-color-red-500:oklch(63.7% .237 25.331);--cmnt-color-red-700:oklch(50.5% .213 27.518);--cmnt-color-amber-50:oklch(98.7% .022 95.277);--cmnt-color-amber-100:oklch(96.2% .059 95.617);--cmnt-color-amber-700:oklch(55.5% .163 48.998);--cmnt-color-green-600:oklch(62.7% .194 149.214);--cmnt-color-blue-500:oklch(62.3% .214 259.815);--cmnt-color-blue-600:oklch(54.6% .245 262.881);--cmnt-color-blue-800:oklch(42.4% .199 265.638);--cmnt-color-slate-300:oklch(86.9% .022 252.894);--cmnt-color-slate-500:oklch(55.4% .046 257.417);--cmnt-color-gray-50:oklch(98.5% .002 247.839);--cmnt-color-gray-100:oklch(96.7% .003 264.542);--cmnt-color-gray-200:oklch(92.8% .006 264.531);--cmnt-color-gray-300:oklch(87.2% .01 258.338);--cmnt-color-gray-400:oklch(70.7% .022 261.325);--cmnt-color-gray-500:oklch(55.1% .027 264.364);--cmnt-color-gray-600:oklch(44.6% .03 256.802);--cmnt-color-gray-700:oklch(37.3% .034 259.733);--cmnt-color-gray-800:oklch(27.8% .033 256.848);--cmnt-color-gray-900:oklch(21% .034 264.665);--cmnt-color-black:#000;--cmnt-color-white:#fff;--cmnt-spacing:.25rem;--cmnt-text-xs:.75rem;--cmnt-text-xs--line-height:calc(1 / .75);--cmnt-text-sm:.875rem;--cmnt-text-sm--line-height:calc(1.25 / .875);--cmnt-text-base:1rem;--cmnt-text-base--line-height:calc(1.5 / 1);--cmnt-font-weight-medium:500;--cmnt-font-weight-semibold:600;--cmnt-font-weight-bold:700;--cmnt-leading-relaxed:1.625;--cmnt-radius-md:.375rem;--cmnt-radius-lg:.5rem;--cmnt-radius-xl:.75rem;--cmnt-animate-spin:spin 1s linear infinite;--cmnt-animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--cmnt-default-transition-duration:.15s;--cmnt-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{[data-comments-root] button,[data-comments-root] input,[data-comments-root] textarea,[data-comments-root] select{font-family:inherit}[data-comments-root],[data-comments-root] *,[data-comments-root] :before,[data-comments-root] :after{box-sizing:border-box}}@layer components;@layer utilities{.cmnt\\:pointer-events-auto{pointer-events:auto}.cmnt\\:pointer-events-none{pointer-events:none}.cmnt\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.cmnt\\:absolute{position:absolute}.cmnt\\:fixed{position:fixed}.cmnt\\:relative{position:relative}.cmnt\\:inset-0{inset:calc(var(--cmnt-spacing) * 0)}.cmnt\\:-top-1\\.5{top:calc(var(--cmnt-spacing) * -1.5)}.cmnt\\:top-0{top:calc(var(--cmnt-spacing) * 0)}.cmnt\\:top-0\\.5{top:calc(var(--cmnt-spacing) * .5)}.cmnt\\:top-1{top:calc(var(--cmnt-spacing) * 1)}.cmnt\\:top-1\\.5{top:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:top-1\\/2{top:50%}.cmnt\\:top-4{top:calc(var(--cmnt-spacing) * 4)}.cmnt\\:-right-\\[7px\\]{right:-7px}.cmnt\\:right-0{right:calc(var(--cmnt-spacing) * 0)}.cmnt\\:right-0\\.5{right:calc(var(--cmnt-spacing) * .5)}.cmnt\\:right-1{right:calc(var(--cmnt-spacing) * 1)}.cmnt\\:right-4{right:calc(var(--cmnt-spacing) * 4)}.cmnt\\:bottom-0{bottom:calc(var(--cmnt-spacing) * 0)}.cmnt\\:bottom-4{bottom:calc(var(--cmnt-spacing) * 4)}.cmnt\\:left-0\\.5{left:calc(var(--cmnt-spacing) * .5)}.cmnt\\:left-1\\.5{left:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:left-1\\/2{left:50%}.cmnt\\:left-\\[14px\\]{left:14px}.cmnt\\:z-50{z-index:50}.cmnt\\:m-0{margin:calc(var(--cmnt-spacing) * 0)}.cmnt\\:mx-3{margin-inline:calc(var(--cmnt-spacing) * 3)}.cmnt\\:my-3{margin-block:calc(var(--cmnt-spacing) * 3)}.cmnt\\:-mt-\\[42px\\]{margin-top:-42px}.cmnt\\:mt-0{margin-top:calc(var(--cmnt-spacing) * 0)}.cmnt\\:mt-0\\.5{margin-top:calc(var(--cmnt-spacing) * .5)}.cmnt\\:mt-1{margin-top:calc(var(--cmnt-spacing) * 1)}.cmnt\\:mt-1\\.5{margin-top:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:mt-2{margin-top:calc(var(--cmnt-spacing) * 2)}.cmnt\\:mb-1{margin-bottom:calc(var(--cmnt-spacing) * 1)}.cmnt\\:mb-2{margin-bottom:calc(var(--cmnt-spacing) * 2)}.cmnt\\:mb-3\\.5{margin-bottom:calc(var(--cmnt-spacing) * 3.5)}.cmnt\\:-ml-\\[21px\\]{margin-left:-21px}.cmnt\\:ml-1{margin-left:calc(var(--cmnt-spacing) * 1)}.cmnt\\:block{display:block}.cmnt\\:flex{display:flex}.cmnt\\:hidden{display:none}.cmnt\\:inline-flex{display:inline-flex}.cmnt\\:h-2{height:calc(var(--cmnt-spacing) * 2)}.cmnt\\:h-2\\.5{height:calc(var(--cmnt-spacing) * 2.5)}.cmnt\\:h-3{height:calc(var(--cmnt-spacing) * 3)}.cmnt\\:h-4{height:calc(var(--cmnt-spacing) * 4)}.cmnt\\:h-5{height:calc(var(--cmnt-spacing) * 5)}.cmnt\\:h-7{height:calc(var(--cmnt-spacing) * 7)}.cmnt\\:h-\\[22px\\]{height:22px}.cmnt\\:h-\\[26px\\]{height:26px}.cmnt\\:h-\\[30px\\]{height:30px}.cmnt\\:h-\\[42px\\]{height:42px}.cmnt\\:h-\\[58px\\]{height:58px}.cmnt\\:h-full{height:100%}.cmnt\\:h-px{height:1px}.cmnt\\:max-h-\\[230px\\]{max-height:230px}.cmnt\\:w-2{width:calc(var(--cmnt-spacing) * 2)}.cmnt\\:w-2\\/5{width:40%}.cmnt\\:w-3{width:calc(var(--cmnt-spacing) * 3)}.cmnt\\:w-4{width:calc(var(--cmnt-spacing) * 4)}.cmnt\\:w-5{width:calc(var(--cmnt-spacing) * 5)}.cmnt\\:w-7{width:calc(var(--cmnt-spacing) * 7)}.cmnt\\:w-80{width:calc(var(--cmnt-spacing) * 80)}.cmnt\\:w-\\[26px\\]{width:26px}.cmnt\\:w-\\[30px\\]{width:30px}.cmnt\\:w-\\[42px\\]{width:42px}.cmnt\\:w-\\[85\\%\\]{width:85%}.cmnt\\:w-\\[88px\\]{width:88px}.cmnt\\:w-\\[360px\\]{width:360px}.cmnt\\:w-full{width:100%}.cmnt\\:w-max{width:max-content}.cmnt\\:max-w-\\[160px\\]{max-width:160px}.cmnt\\:max-w-\\[calc\\(100vw-16px\\)\\]{max-width:calc(100vw - 16px)}.cmnt\\:min-w-0{min-width:calc(var(--cmnt-spacing) * 0)}.cmnt\\:min-w-80{min-width:calc(var(--cmnt-spacing) * 80)}.cmnt\\:min-w-\\[22px\\]{min-width:22px}.cmnt\\:flex-1{flex:1}.cmnt\\:shrink-0{flex-shrink:0}.cmnt\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cmnt\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cmnt\\:animate-ping{animation:var(--cmnt-animate-ping)}.cmnt\\:animate-spin{animation:var(--cmnt-animate-spin)}.cmnt\\:cursor-default{cursor:default}.cmnt\\:cursor-pointer{cursor:pointer}.cmnt\\:flex-col{flex-direction:column}.cmnt\\:items-baseline{align-items:baseline}.cmnt\\:items-center{align-items:center}.cmnt\\:items-start{align-items:flex-start}.cmnt\\:justify-between{justify-content:space-between}.cmnt\\:justify-center{justify-content:center}.cmnt\\:gap-1{gap:calc(var(--cmnt-spacing) * 1)}.cmnt\\:gap-1\\.5{gap:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:gap-2{gap:calc(var(--cmnt-spacing) * 2)}.cmnt\\:gap-\\[9px\\]{gap:9px}.cmnt\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cmnt\\:overflow-auto{overflow:auto}.cmnt\\:overflow-hidden{overflow:hidden}.cmnt\\:overflow-y-auto{overflow-y:auto}.cmnt\\:rounded{border-radius:.25rem}.cmnt\\:rounded-\\[11px\\]{border-radius:11px}.cmnt\\:rounded-full{border-radius:3.40282e38px}.cmnt\\:rounded-lg{border-radius:var(--cmnt-radius-lg)}.cmnt\\:rounded-md{border-radius:var(--cmnt-radius-md)}.cmnt\\:rounded-xl{border-radius:var(--cmnt-radius-xl)}.cmnt\\:border{border-style:var(--tw-border-style);border-width:1px}.cmnt\\:border-0{border-style:var(--tw-border-style);border-width:0}.cmnt\\:border-2{border-style:var(--tw-border-style);border-width:2px}.cmnt\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.cmnt\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.cmnt\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.cmnt\\:border-l-\\[3px\\]{border-left-style:var(--tw-border-style);border-left-width:3px}.cmnt\\:border-none{--tw-border-style:none;border-style:none}.cmnt\\:border-\\[\\#f1f3f5\\]{border-color:#f1f3f5}.cmnt\\:border-blue-600{border-color:var(--cmnt-color-blue-600)}.cmnt\\:border-gray-200{border-color:var(--cmnt-color-gray-200)}.cmnt\\:border-gray-300{border-color:var(--cmnt-color-gray-300)}.cmnt\\:border-slate-300{border-color:var(--cmnt-color-slate-300)}.cmnt\\:border-white{border-color:var(--cmnt-color-white)}.cmnt\\:border-t-transparent{border-top-color:#0000}.cmnt\\:bg-\\[\\#93b4f5\\]{background-color:#93b4f5}.cmnt\\:bg-\\[\\#dbe3f0\\]{background-color:#dbe3f0}.cmnt\\:bg-\\[\\#f3f6fc\\]{background-color:#f3f6fc}.cmnt\\:bg-\\[\\#f7fdf9\\]{background-color:#f7fdf9}.cmnt\\:bg-amber-50{background-color:var(--cmnt-color-amber-50)}.cmnt\\:bg-amber-100{background-color:var(--cmnt-color-amber-100)}.cmnt\\:bg-black\\/40{background-color:var(--cmnt-color-black)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-black\\/40{background-color:color-mix(in oklab, var(--cmnt-color-black) 40%, transparent)}}.cmnt\\:bg-black\\/55{background-color:var(--cmnt-color-black)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-black\\/55{background-color:color-mix(in oklab, var(--cmnt-color-black) 55%, transparent)}}.cmnt\\:bg-blue-500\\/40{background-color:var(--cmnt-color-blue-500)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-blue-500\\/40{background-color:color-mix(in oklab, var(--cmnt-color-blue-500) 40%, transparent)}}.cmnt\\:bg-blue-600,.cmnt\\:bg-blue-600\\/20{background-color:var(--cmnt-color-blue-600)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-blue-600\\/20{background-color:color-mix(in oklab, var(--cmnt-color-blue-600) 20%, transparent)}}.cmnt\\:bg-blue-800{background-color:var(--cmnt-color-blue-800)}.cmnt\\:bg-gray-100{background-color:var(--cmnt-color-gray-100)}.cmnt\\:bg-gray-200{background-color:var(--cmnt-color-gray-200)}.cmnt\\:bg-gray-300{background-color:var(--cmnt-color-gray-300)}.cmnt\\:bg-gray-400{background-color:var(--cmnt-color-gray-400)}.cmnt\\:bg-gray-800{background-color:var(--cmnt-color-gray-800)}.cmnt\\:bg-gray-900{background-color:var(--cmnt-color-gray-900)}.cmnt\\:bg-red-500\\/15{background-color:var(--cmnt-color-red-500)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-red-500\\/15{background-color:color-mix(in oklab, var(--cmnt-color-red-500) 15%, transparent)}}.cmnt\\:bg-transparent{background-color:#0000}.cmnt\\:bg-white,.cmnt\\:bg-white\\/55{background-color:var(--cmnt-color-white)}@supports (color:color-mix(in lab, red, red)){.cmnt\\:bg-white\\/55{background-color:color-mix(in oklab, var(--cmnt-color-white) 55%, transparent)}}.cmnt\\:object-cover{object-fit:cover}.cmnt\\:p-0{padding:calc(var(--cmnt-spacing) * 0)}.cmnt\\:p-1{padding:calc(var(--cmnt-spacing) * 1)}.cmnt\\:p-2{padding:calc(var(--cmnt-spacing) * 2)}.cmnt\\:p-3{padding:calc(var(--cmnt-spacing) * 3)}.cmnt\\:p-6{padding:calc(var(--cmnt-spacing) * 6)}.cmnt\\:px-1{padding-inline:calc(var(--cmnt-spacing) * 1)}.cmnt\\:px-1\\.5{padding-inline:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:px-2{padding-inline:calc(var(--cmnt-spacing) * 2)}.cmnt\\:px-3{padding-inline:calc(var(--cmnt-spacing) * 3)}.cmnt\\:px-3\\.5{padding-inline:calc(var(--cmnt-spacing) * 3.5)}.cmnt\\:px-\\[5px\\]{padding-inline:5px}.cmnt\\:px-\\[11px\\]{padding-inline:11px}.cmnt\\:py-0\\.5{padding-block:calc(var(--cmnt-spacing) * .5)}.cmnt\\:py-1{padding-block:calc(var(--cmnt-spacing) * 1)}.cmnt\\:py-1\\.5{padding-block:calc(var(--cmnt-spacing) * 1.5)}.cmnt\\:py-2{padding-block:calc(var(--cmnt-spacing) * 2)}.cmnt\\:py-2\\.5{padding-block:calc(var(--cmnt-spacing) * 2.5)}.cmnt\\:py-4{padding-block:calc(var(--cmnt-spacing) * 4)}.cmnt\\:py-6{padding-block:calc(var(--cmnt-spacing) * 6)}.cmnt\\:py-\\[3px\\]{padding-block:3px}.cmnt\\:py-\\[5px\\]{padding-block:5px}.cmnt\\:py-\\[9px\\]{padding-block:9px}.cmnt\\:pr-2{padding-right:calc(var(--cmnt-spacing) * 2)}.cmnt\\:pl-3{padding-left:calc(var(--cmnt-spacing) * 3)}.cmnt\\:text-center{text-align:center}.cmnt\\:text-left{text-align:left}.cmnt\\:text-base{font-size:var(--cmnt-text-base);line-height:var(--tw-leading,var(--cmnt-text-base--line-height))}.cmnt\\:text-sm{font-size:var(--cmnt-text-sm);line-height:var(--tw-leading,var(--cmnt-text-sm--line-height))}.cmnt\\:text-xs{font-size:var(--cmnt-text-xs);line-height:var(--tw-leading,var(--cmnt-text-xs--line-height))}.cmnt\\:text-\\[10px\\]{font-size:10px}.cmnt\\:text-\\[11px\\]{font-size:11px}.cmnt\\:text-\\[13px\\]{font-size:13px}.cmnt\\:leading-\\[0\\]{--tw-leading:0;line-height:0}.cmnt\\:leading-relaxed{--tw-leading:var(--cmnt-leading-relaxed);line-height:var(--cmnt-leading-relaxed)}.cmnt\\:font-bold{--tw-font-weight:var(--cmnt-font-weight-bold);font-weight:var(--cmnt-font-weight-bold)}.cmnt\\:font-medium{--tw-font-weight:var(--cmnt-font-weight-medium);font-weight:var(--cmnt-font-weight-medium)}.cmnt\\:font-semibold{--tw-font-weight:var(--cmnt-font-weight-semibold);font-weight:var(--cmnt-font-weight-semibold)}.cmnt\\:whitespace-pre-wrap{white-space:pre-wrap}.cmnt\\:text-amber-700{color:var(--cmnt-color-amber-700)}.cmnt\\:text-blue-600{color:var(--cmnt-color-blue-600)}.cmnt\\:text-gray-400{color:var(--cmnt-color-gray-400)}.cmnt\\:text-gray-500{color:var(--cmnt-color-gray-500)}.cmnt\\:text-gray-600{color:var(--cmnt-color-gray-600)}.cmnt\\:text-gray-700{color:var(--cmnt-color-gray-700)}.cmnt\\:text-gray-900{color:var(--cmnt-color-gray-900)}.cmnt\\:text-green-600{color:var(--cmnt-color-green-600)}.cmnt\\:text-red-700{color:var(--cmnt-color-red-700)}.cmnt\\:text-slate-500{color:var(--cmnt-color-slate-500)}.cmnt\\:text-white{color:var(--cmnt-color-white)}.cmnt\\:italic{font-style:italic}.cmnt\\:underline{text-decoration-line:underline}.cmnt\\:opacity-80{opacity:.8}.cmnt\\:shadow-\\[-8px_0_24px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:-8px 0 24px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.cmnt\\:shadow-\\[0_6px_20px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 6px 20px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.cmnt\\:shadow-\\[0_12px_32px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 12px 32px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.cmnt\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.cmnt\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--cmnt-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cmnt-default-transition-duration))}.cmnt\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--cmnt-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cmnt-default-transition-duration))}.cmnt\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--cmnt-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cmnt-default-transition-duration))}.cmnt\\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.cmnt\\:group-hover\\:opacity-100:is(:where(.cmnt\\:group):hover *){opacity:1}}.cmnt\\:first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media (hover:hover){.cmnt\\:hover\\:bg-gray-50:hover{background-color:var(--cmnt-color-gray-50)}.cmnt\\:hover\\:bg-gray-100:hover{background-color:var(--cmnt-color-gray-100)}}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}";
|
|
2
|
+
//# sourceMappingURL=widget-css.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-css.generated.d.ts","sourceRoot":"","sources":["../../src/app/widget-css.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,m5iBAAm5iB,CAAA"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type CaptureContext, type Provenance } from '@airnauts/comments-core';
|
|
2
|
+
export type Features = {
|
|
3
|
+
screenshots?: boolean;
|
|
4
|
+
textAnchors?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type InitOptions = {
|
|
7
|
+
key: string;
|
|
8
|
+
endpoint: string;
|
|
9
|
+
pageKey?: (url: string) => string;
|
|
10
|
+
keyParam?: string;
|
|
11
|
+
features?: Features;
|
|
12
|
+
provenance?: Provenance;
|
|
13
|
+
};
|
|
14
|
+
export declare const DEFAULT_KEY_PARAM = "comments-key";
|
|
15
|
+
export declare function resolvePageKey(opts: InitOptions, url: string): string;
|
|
16
|
+
export declare function buildCaptureContext(win?: Window): CaptureContext;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEhG,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,iBAAiB,iBAAiB,CAAA;AAE/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAe,GAAG,cAAc,CAOxE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Component, type ErrorInfo, type ReactNode } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
};
|
|
5
|
+
type State = {
|
|
6
|
+
hasError: boolean;
|
|
7
|
+
};
|
|
8
|
+
/** Contains any widget render crash so it never propagates to the host page. */
|
|
9
|
+
export declare class WidgetErrorBoundary extends Component<Props, State> {
|
|
10
|
+
constructor(props: Props);
|
|
11
|
+
static getDerivedStateFromError(): State;
|
|
12
|
+
componentDidCatch(error: unknown, info: ErrorInfo): void;
|
|
13
|
+
render(): ReactNode;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=error-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../src/error-boundary.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjE,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAA;AACpC,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAElC,gFAAgF;AAChF,qBAAa,mBAAoB,SAAQ,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAClD,KAAK,EAAE,KAAK;IAKxB,MAAM,CAAC,wBAAwB,IAAI,KAAK;IAI/B,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAIxD,MAAM,IAAI,SAAS;CAG7B"}
|
package/dist/gate.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type GateInput = {
|
|
2
|
+
search: string;
|
|
3
|
+
key: string;
|
|
4
|
+
keyParam?: string;
|
|
5
|
+
/** A previously persisted key (e.g. from localStorage), checked when the URL param is absent. */
|
|
6
|
+
storedKey?: string | null;
|
|
7
|
+
};
|
|
8
|
+
/** Activated iff the configured URL param OR a persisted key equals the init key. */
|
|
9
|
+
export declare function isActivated({ search, key, keyParam, storedKey, }: GateInput): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* True when the URL param itself carries the matching key — the one-time case
|
|
12
|
+
* where `init` should persist the key and strip it from the address bar.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isUrlActivation({ search, key, keyParam, }: Omit<GateInput, 'storedKey'>): boolean;
|
|
15
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,GAAG,EACH,QAA4B,EAC5B,SAAgB,GACjB,EAAE,SAAS,GAAG,OAAO,CAErB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,GAAG,EACH,QAA4B,GAC7B,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,OAAO,CAExC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Identity } from './storage';
|
|
2
|
+
export type IdentityModalProps = {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
onSubmit: (identity: Identity) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function IdentityModal({ open, onOpenChange, onSubmit }: IdentityModalProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=IdentityModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdentityModal.d.ts","sourceRoot":"","sources":["../../src/identity/IdentityModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAkDjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/identity/storage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAID,wBAAgB,YAAY,CAAC,KAAK,GAAE,OAAsB,GAAG,QAAQ,GAAG,IAAI,CAiB3E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAE,OAAsB,GAAG,IAAI,CAEpF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type InitOptions } from './config';
|
|
2
|
+
export declare const packageName = "@airnauts/comments-client";
|
|
3
|
+
export * from './anchor';
|
|
4
|
+
export type { InitOptions } from './config';
|
|
5
|
+
export { DEFAULT_KEY_PARAM } from './config';
|
|
6
|
+
export type CommentsHandle = {
|
|
7
|
+
destroy(): void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Mount the widget if a valid key is present in the URL — or was persisted from a
|
|
11
|
+
* prior URL activation; otherwise a no-op. When activated via the URL param, the
|
|
12
|
+
* key is persisted to localStorage and stripped from the URL, so subsequent
|
|
13
|
+
* visits keep commenting available without the param.
|
|
14
|
+
*
|
|
15
|
+
* Async by contract so a future lazy-load split can return a Promise without a
|
|
16
|
+
* breaking change. In M5 the app is statically bundled (no code-splitting); the
|
|
17
|
+
* gate still keeps the widget inert (never mounts, renders, or fetches) when the
|
|
18
|
+
* key is absent.
|
|
19
|
+
*/
|
|
20
|
+
export declare function init(options: InitOptions): Promise<CommentsHandle>;
|
|
21
|
+
export declare const comments: {
|
|
22
|
+
init: typeof init;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAG9D,eAAO,MAAM,WAAW,8BAA8B,CAAA;AAEtD,cAAc,UAAU,CAAA;AACxB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAWD;;;;;;;;;;GAUG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAgBxE;AAED,eAAO,MAAM,QAAQ;;CAAW,CAAA"}
|