sos-portal-components-react 0.0.0-stage → 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/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.0 - 2026-11-06
6
+
7
+ - Establish the shared cross-sector portal-component boundary.
8
+ - Publish the initial Tuskr-ready use-case catalogue covering shell, access,
9
+ cards, identity, encounters, communications, appointments, relationships,
10
+ calls, clinical documents, permissions and lifecycle composition.
11
+ - Add the Personal/Professional communications matrix for card-root channels,
12
+ relationship child threads and persisted audio/video call-event states.
13
+ - Keep host/tenant controller governance in Antifraud Hosting and leave
14
+ research/genomics outside the initial core until their package boundary is
15
+ decided.
16
+ - Add the canonical `SubjectConversationChat` React Native/Web adapter over
17
+ Antifraud's neutral conversation surface and SOS subject-conversation
18
+ contracts, including text, governed attachments, FHIR documents and call
19
+ events without moving authorization or delivery into React.
20
+
package/README.md CHANGED
@@ -1,3 +1,147 @@
1
- # Temporary Holding Version
1
+ # SOS Portal Components React
2
+
3
+ Shared portal UI for base components. It provides the portal UI core for
4
+ personal and professional applications across human
5
+ health, animal care, public safety, emergency response and other configured
6
+ sectors. The package exists to prevent each sector flavour from reimplementing
7
+ the same shell, access journey, card navigation and governed subject workflows.
8
+
9
+ The first implementation of a workflow may be proven in the animal-care
10
+ portals. That does not make every future human-health consumer depend
11
+ permanently on an animal-care component. Promotion into this package happens
12
+ only after the shared contract is understood. Research, genomics and other
13
+ specialist areas remain in their current package until their long-term
14
+ boundary is deliberately chosen.
15
+
16
+ ## Ownership boundaries
17
+
18
+ - This package owns reusable portal presentation and controlled user intents.
19
+ - Applications own branding, routes, environment selection, BFF calls and
20
+ server-resolved sector/role policy.
21
+ - `antifraud-hosting-components-react` owns neutral host- and
22
+ tenant-controller administration. SOS may compose it but does not fork it.
23
+ - `antifraud-portal-components-react` owns neutral evidence and conversation
24
+ primitives used beyond health.
25
+ - `terminology-components-react` owns terminology controls; the terminology
26
+ service and SDK own canonical systems, releases and searches.
27
+ - FHIR/SOS/Vet data utilities and SDKs own data contracts, validation,
28
+ transport, signatures and persistence. React never derives authority.
29
+ - Sector packages own their human-health, animal-care and other
30
+ domain-specific extensions.
31
+
32
+ Browser state, a visible tab or a selected role never grants authority. Every
33
+ protected action is enabled from trusted host capabilities and remains
34
+ revalidated by the BFF/Gateway.
35
+
36
+ ## Implemented exports
37
+
38
+ - `sos-portal-components-react/subject-conversation-chat` provides the
39
+ canonical React Native/Web adapter for an already-authorized subject
40
+ conversation. It projects the stable SOS entry model into the neutral
41
+ Antifraud conversation surface backed by
42
+ `@kesha-antonov/react-native-chat`. Hosts retain BFF delivery, attachment
43
+ opening, FHIR rendering, WebRTC signaling and authorization.
44
+
45
+ The compatibility export currently present in the human-health component
46
+ package is deprecated and will delegate to this package while consumers move
47
+ to the SOS-owned path.
48
+
49
+ ## Tuskr use-case catalogue
50
+
51
+ The stable IDs below are intended to become Tuskr cases. Each case must be
52
+ executed for every applicable flavour, actor, viewport and environment. Demo
53
+ uses synthetic state and must say so; Test Network and Production must use
54
+ their real authorized BFF path.
55
+
56
+ | ID | Area | Governed journey and acceptance target |
57
+ |---|---|---|
58
+ | SOS-PORTAL-001 | Shell | Render the shared top bar, brand slot, account/profile menu, current subject and responsive navigation without flavour-specific forks. |
59
+ | SOS-PORTAL-002 | Entry | Choose an enabled Demo, Test Network or Production entry supplied by trusted host configuration; a browser choice never selects network infrastructure. |
60
+ | SOS-PORTAL-003 | Sign-in | Sign in through the host adapter, restore the exact protected profile and reject a profile belonging to another access path. |
61
+ | SOS-PORTAL-004 | Biometrics | Unlock a protected profile with platform biometrics/passkey when available and use the governed PIN/password recovery fallback without exposing keys to React. |
62
+ | SOS-PORTAL-005 | Registration | Register or accept an invitation for the applicable person, professional or animal-responsible profile; registration alone grants no subject access. |
63
+ | SOS-PORTAL-006 | Cards | List only server-authorized individual or animal cards, select one card and preserve its stable identifier across navigation/reload. |
64
+ | SOS-PORTAL-007 | Card sections | Resolve card sections from subject kind, sector, role and backend capabilities; hidden or read-only sections cannot be enabled by URL or browser state. |
65
+ | SOS-PORTAL-008 | Identity | View and edit the permitted identity fields, provenance and attestations for a selected card while preserving immutable identifiers. |
66
+ | SOS-PORTAL-009 | Related entities | Add, view, update or remove authorized related people, animals and organizations with explicit relationship type and provenance. |
67
+ | SOS-PORTAL-010 | Contacts | Manage ordinary and emergency contacts independently, including priority, relationship, availability and emergency-only disclosure. |
68
+ | SOS-PORTAL-011 | Encounters | List, open and author permitted encounters; bind contributions to the acting professional, organization, subject and server-confirmed scope. |
69
+ | SOS-PORTAL-012 | Communications | Render one canonical conversation of DIDComm/FHIR Communications with text and governed attachments such as Bundles, documents, ICS, images and audio in both Personal and an authorized Professional card channel. |
70
+ | SOS-PORTAL-013 | Calls | Initiate and display authorized audio/video calls and outgoing, incoming, completed, rejected, cancelled or missed call events without treating call signaling as clinical authority. |
71
+ | SOS-PORTAL-014 | Appointments | Search availability and create, update or cancel appointments for applicable services, including blood-donation centres and other scheduled providers. |
72
+ | SOS-PORTAL-015 | Clinical viewer | View authorized clinical documents, IPS summaries, sections, timelines and source/provenance details for human or animal cards. |
73
+ | SOS-PORTAL-016 | Clinical authoring | Create and edit clinical documents through the canonical section-based editor, including encounters, observations, immunizations and host-enabled sections. |
74
+ | SOS-PORTAL-017 | Credentials | Create, display, scan and verify supported health/data-card credentials and QR transports while keeping signing and verification outside React. |
75
+ | SOS-PORTAL-018 | Permissions | View and change only permitted Consent/access relationships, group memberships and card grants; notifications never substitute for authorization. |
76
+ | SOS-PORTAL-019 | Employee lifecycle | Compose the canonical Antifraud Hosting workforce screen for invitations, licences, employees and devices; SOS supplies sector labels and adapters, not a duplicate implementation. |
77
+ | SOS-PORTAL-020 | Individual members | Manage an individual's authorized members/delegates separately from organization employees, with explicit lifecycle and revocation. |
78
+ | SOS-PORTAL-021 | Emergency access | Show protected emergency data and request governed exceptional/break-glass access with reason, expiry, audit and clear post-access state. |
79
+ | SOS-PORTAL-022 | Subject index | Display real index-update Communications from authorized providers and open linked records without manufacturing parallel chat events. |
80
+ | SOS-PORTAL-023 | Provider directory | Select authorized card/index, clinical, appointment or emergency providers from host-supplied directories without hard-coded flavour endpoints. |
81
+ | SOS-PORTAL-024 | Accessibility | Complete every shared journey by keyboard and screen reader with visible focus, labelled controls, status announcements and responsive layouts. |
82
+ | SOS-PORTAL-025 | Expo reuse | Render platform-neutral contracts in Expo Android/iOS adapters and web adapters while retaining one message/card/action model and host-owned native capabilities. |
83
+ | SOS-PORTAL-026 | Preferences | Apply light/dark/system appearance, text size, locale and accessibility preferences before and after sign-in without changing authorization. |
84
+ | SOS-PORTAL-027 | Failure safety | Fail closed on missing capabilities, expired sessions, invalid attachments, unavailable providers or rejected persistence and preserve an actionable, non-sensitive error. |
85
+ | SOS-PORTAL-028 | Controller embedding | In CH Management, embed the published Antifraud controller components for groups, departments, workforce and memberships until controller access is removed from branded professional portals. |
86
+ | SOS-PORTAL-029 | Conversation threads | Open the individual card's root channel and authorized child threads for members, related entities or emergency contacts; each thread keeps stable subject/relationship/participant identifiers, and contact status alone grants no message access. |
87
+
88
+ ### Communications execution matrix
89
+
90
+ Tuskr must exercise `SOS-PORTAL-012`, `SOS-PORTAL-013` and
91
+ `SOS-PORTAL-029` together:
92
+
93
+ | Actor/surface | Root card channel | Authorized child thread | Required call events |
94
+ |---|---|---|---|
95
+ | Personal portal | View/send according to the individual's capability | Open a member, related-entity or emergency-contact thread only after the BFF confirms participation | outgoing, incoming, completed, rejected/cancelled and missed audio/video calls |
96
+ | Professional portal | View/send in the selected individual's card channel only with professional subject scope | Open only child threads included in the professional's server-resolved scope | the same persisted call-event projection; no browser-manufactured duplicate |
97
+ | Reload/cross-surface | Preserve stable channel, thread and message identifiers | Preserve the exact relationship reference and participant set | Personal and Professional render the same authorized event status and attachment metadata |
98
+
99
+ Acceptance requires real persisted Communications (or the explicit synthetic
100
+ Demo adapter), chronological projection without a parallel chat record, and
101
+ negative tests proving that a contact listed for emergencies cannot enumerate
102
+ or open a thread without separate authorization.
103
+
104
+ ## Tracked specialist integration cases
105
+
106
+ These cases must remain visible in Tuskr and in CH while they are migrated,
107
+ but they are not owned by the initial SOS core package.
108
+
109
+ | ID | Current owner | Planned direction | Acceptance target |
110
+ |---|---|---|---|
111
+ | HEALTH-RESEARCH-001 | Human-health components / host adapter | Candidate for animal-care components | Create, update, activate and revoke a research study with server-confirmed controller or delegated authority. |
112
+ | HEALTH-RESEARCH-002 | Human-health components / host adapter | Candidate for animal-care components | Search and add authorized research subjects without turning discovery into access. |
113
+ | HEALTH-RESEARCH-003 | Human-health components / host adapter | Candidate for animal-care components | Import research data, map source fields, track jobs and review/reclassify/discard staged records. |
114
+ | HEALTH-RESEARCH-004 | Human-health components / host adapter | Candidate for animal-care components | Manage research contracts, study invitations, subscriptions and governed data access separately from ordinary card permissions. |
115
+ | HEALTH-RESEARCH-005 | Human-health components / host adapter | Undecided specialist package | Use transcription/edge models and future genomic workflows only through explicit capability, provenance and privacy policy. |
116
+
117
+ The current source inventory still contains host-local research panels.
118
+ Migration is complete only when consuming portals import their published
119
+ human-health implementation and the local alternatives are deprecated.
120
+ Group-management source already lives in
121
+ the Antifraud Controller application; its controlled UI must be exported by
122
+ the Antifraud Hosting component package before CH can remove its final local
123
+ group adapter.
124
+
125
+ ## Explicitly outside the initial core
126
+
127
+ - host registry, tenant admission and organization lifecycle policy (Antifraud
128
+ Controller/Hosting);
129
+ - research-study administration, research-subject import and genomic workflows
130
+ (tracked above through their human-health to animal-care/specialist migration);
131
+ - terminology databases and searches;
132
+ - FHIR validation/conversion, DIDComm transport, wallets, signatures, QR
133
+ cryptography, WebRTC signaling and persistence;
134
+ - application-specific routes, branding and deployment configuration.
135
+
136
+ ## Delivery order
137
+
138
+ 1. Inventory the current verified components in deprecated sector portals,
139
+ human-health components and consuming portal flavours.
140
+ 2. Add a contract test for one canonical component per use case.
141
+ 3. Move the current implementation without changing its data/authority
142
+ boundary, then switch all CH flavours to the published package.
143
+ 4. Mark old exports deprecated and keep their legacy tests separately runnable.
144
+ 5. Add web plus Expo adapters only where the same controlled contract is
145
+ genuinely reusable.
146
+ 6. Remove compatibility implementations only in a later breaking release.
2
147
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
@@ -0,0 +1,36 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type AntifraudConversationMessage } from 'antifraud-portal-components-react/conversation-surface';
3
+ import { type SubjectConversationChatMessage, type SubjectConversationEntry } from 'sos-data-utils-ts/subject-conversation-chat';
4
+ export type SubjectConversationChatUser = Readonly<{
5
+ id: string;
6
+ name: string;
7
+ avatar?: string;
8
+ }>;
9
+ export type SubjectConversationIMessage = AntifraudConversationMessage & SubjectConversationChatMessage;
10
+ /**
11
+ * Shared SOS React Native/Web conversation adapter.
12
+ *
13
+ * Hosts own authorization, materialization, attachment opening and delivery.
14
+ * This component only projects already-authorized SOS conversation entries
15
+ * into the product-neutral Antifraud transcript and composer.
16
+ */
17
+ export declare function SubjectConversationChat({ entries, currentUser, locale, onSendText, onAttach, renderFhirDocument, renderEntryContent, footer, copy, composerEnabled, }: Readonly<{
18
+ entries: readonly SubjectConversationEntry[];
19
+ currentUser: SubjectConversationChatUser;
20
+ locale?: string;
21
+ onSendText(text: string): void | Promise<void>;
22
+ onAttach?(): void | Promise<void>;
23
+ renderFhirDocument?(input: Readonly<{
24
+ label: string;
25
+ bundle: Readonly<Record<string, unknown>>;
26
+ message: SubjectConversationIMessage;
27
+ }>): ReactNode;
28
+ renderEntryContent?(message: SubjectConversationIMessage): ReactNode;
29
+ footer?: ReactNode;
30
+ copy?: Readonly<{
31
+ placeholder: string;
32
+ send: string;
33
+ }>;
34
+ composerEnabled?: boolean;
35
+ }>): import("react").JSX.Element;
36
+ //# sourceMappingURL=SubjectConversationChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubjectConversationChat.d.ts","sourceRoot":"","sources":["../src/SubjectConversationChat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,wDAAwD,CAAA;AAC/D,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC9B,MAAM,6CAA6C,CAAA;AAEpD,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC,CAAA;AAEF,MAAM,MAAM,2BAA2B,GAAG,4BAA4B,GAAG,8BAA8B,CAAA;AAEvG;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,WAAW,EACX,MAAM,EACN,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,EACN,IAAI,EACJ,eAAe,GAChB,EAAE,QAAQ,CAAC;IACV,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAA;IAC5C,WAAW,EAAE,2BAA2B,CAAA;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,QAAQ,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,kBAAkB,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC;QAClC,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QACzC,OAAO,EAAE,2BAA2B,CAAA;KACrC,CAAC,GAAG,SAAS,CAAA;IACd,kBAAkB,CAAC,CAAC,OAAO,EAAE,2BAA2B,GAAG,SAAS,CAAA;IACpE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAC,+BA2BD"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { AntifraudConversationSurface, } from 'antifraud-portal-components-react/conversation-surface';
4
+ import { SubjectConversationContentKind, projectSubjectConversationChatMessages, } from 'sos-data-utils-ts/subject-conversation-chat';
5
+ /**
6
+ * Shared SOS React Native/Web conversation adapter.
7
+ *
8
+ * Hosts own authorization, materialization, attachment opening and delivery.
9
+ * This component only projects already-authorized SOS conversation entries
10
+ * into the product-neutral Antifraud transcript and composer.
11
+ */
12
+ export function SubjectConversationChat({ entries, currentUser, locale, onSendText, onAttach, renderFhirDocument, renderEntryContent, footer, copy, composerEnabled, }) {
13
+ const messages = useMemo(() => [...projectSubjectConversationChatMessages(entries)], [entries]);
14
+ const user = useMemo(() => ({
15
+ _id: currentUser.id,
16
+ name: currentUser.name,
17
+ ...(currentUser.avatar ? { avatar: currentUser.avatar } : {}),
18
+ }), [currentUser.avatar, currentUser.id, currentUser.name]);
19
+ return _jsx(AntifraudConversationSurface, { messages: messages, currentUser: user, onSendText: onSendText, ...(locale ? { locale } : {}), ...(onAttach ? { onAttach } : {}), ...(renderFhirDocument || renderEntryContent ? { renderMessageContent: (message) => {
20
+ const content = message.subjectConversation.content;
21
+ return content.kind === SubjectConversationContentKind.FhirDocument && renderFhirDocument
22
+ ? renderFhirDocument({ label: content.label, bundle: content.bundle, message })
23
+ : renderEntryContent?.(message) ?? null;
24
+ } } : {}), ...(footer !== undefined ? { footer } : {}), ...(copy ? { copy } : {}), ...(composerEnabled !== undefined ? { composerEnabled } : {}) });
25
+ }
26
+ //# sourceMappingURL=SubjectConversationChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubjectConversationChat.js","sourceRoot":"","sources":["../src/SubjectConversationChat.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAA;AAC/C,OAAO,EACL,4BAA4B,GAE7B,MAAM,wDAAwD,CAAA;AAC/D,OAAO,EACL,8BAA8B,EAC9B,sCAAsC,GAGvC,MAAM,6CAA6C,CAAA;AAUpD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,OAAO,EACP,WAAW,EACX,MAAM,EACN,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,EACN,IAAI,EACJ,eAAe,GAgBf;IACA,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,CAAC,GAAG,sCAAsC,CAAC,OAAO,CAAC,CAAkC,EAC3F,CAAC,OAAO,CAAC,CACV,CAAA;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B,GAAG,EAAE,WAAW,CAAC,EAAE;QACnB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IAE3D,OAAO,KAAC,4BAA4B,IAClC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,UAAU,KAClB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9B,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,OAAoC,EAAE,EAAE;gBAC/G,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAA;gBACnD,OAAO,OAAO,CAAC,IAAI,KAAK,8BAA8B,CAAC,YAAY,IAAI,kBAAkB;oBACvF,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC/E,CAAC,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;YAC3C,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACL,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtB,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC9D,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './SubjectConversationChat.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './SubjectConversationChat.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,76 @@
1
1
  {
2
2
  "name": "sos-portal-components-react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Shared portal UI for base components",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./subject-conversation-chat": {
15
+ "types": "./dist/SubjectConversationChat.d.ts",
16
+ "default": "./dist/SubjectConversationChat.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md",
22
+ "CHANGELOG.md"
23
+ ],
24
+ "scripts": {
25
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
26
+ "build": "npm run clean && tsc -p tsconfig.build.json",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit",
28
+ "test": "vitest run",
29
+ "check": "npm run typecheck && npm test && npm run build",
30
+ "prepack": "npm run check"
31
+ },
32
+ "engines": {
33
+ "node": ">=24.0.0"
34
+ },
35
+ "peerDependencies": {
36
+ "@kesha-antonov/react-native-chat": "^6.0.1",
37
+ "react": ">=18.3.0",
38
+ "react-dom": ">=18.3.0",
39
+ "react-native": ">=0.82.0",
40
+ "react-native-gesture-handler": ">=3.0.0",
41
+ "react-native-keyboard-controller": ">=1.0.0",
42
+ "react-native-reanimated": ">=3.0.0",
43
+ "react-native-safe-area-context": ">=5.0.0"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "@kesha-antonov/react-native-chat": { "optional": true },
47
+ "react-native": { "optional": true },
48
+ "react-native-gesture-handler": { "optional": true },
49
+ "react-native-keyboard-controller": { "optional": true },
50
+ "react-native-reanimated": { "optional": true },
51
+ "react-native-safe-area-context": { "optional": true }
52
+ },
53
+ "dependencies": {
54
+ "antifraud-portal-components-react": "0.2.2",
55
+ "sos-data-utils-ts": "0.6.25"
56
+ },
57
+ "devDependencies": {
58
+ "@testing-library/react": "^16.3.2",
59
+ "@types/node": "22.19.15",
60
+ "@types/react": "19.2.17",
61
+ "@types/react-dom": "19.2.3",
62
+ "jsdom": "26.1.0",
63
+ "react": "19.2.8",
64
+ "react-dom": "19.2.8",
65
+ "typescript": "5.9.3",
66
+ "vitest": "4.1.12"
67
+ },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
71
+ "repository": {
72
+ "type": "git",
73
+ "url": "git+https://github.com/soschain/sos-portal-components-react.git"
74
+ }
75
+ }
76
+