@innspel/react-native 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 +115 -0
- package/dist/index.cjs +1397 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +444 -0
- package/dist/index.d.ts +444 -0
- package/dist/index.js +1361 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Niclas Amundsen
|
|
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,115 @@
|
|
|
1
|
+
# @innspel/react-native
|
|
2
|
+
|
|
3
|
+
Innsendingswidgeten for React Native. Et ark over vertsappen din — aldri en
|
|
4
|
+
flytende knapp over innholdet.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
npm install @innspel/react-native @innspel/core
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
`react` og `react-native` er peer-avhengigheter. Widgeten krever ikke Expo, men
|
|
11
|
+
virker i Expo.
|
|
12
|
+
|
|
13
|
+
## Quickstart
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
17
|
+
import { init } from '@innspel/core';
|
|
18
|
+
import { createStorage, InnspelProvider, useInnspel } from '@innspel/react-native';
|
|
19
|
+
|
|
20
|
+
const innspel = init({
|
|
21
|
+
baseUrl: 'https://api.innspel.example',
|
|
22
|
+
tenantKey: 'ik_pub_xxxxxxxx',
|
|
23
|
+
identityProvider: hentFeedbackToken, // eller null = anonym modus
|
|
24
|
+
storage: createStorage(AsyncStorage),
|
|
25
|
+
context: { platform: 'ios', appVersion: '1.4.2' },
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export default () => (
|
|
29
|
+
<InnspelProvider client={innspel}>
|
|
30
|
+
<MinApp />
|
|
31
|
+
</InnspelProvider>
|
|
32
|
+
);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Åpne widgeten hvor som helst under provideren:
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
const { open } = useInnspel();
|
|
39
|
+
<Button title="Send innspill" onPress={() => open({ screen: 'Dørlista' })} />;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`screen` er rutens NAVN, aldri data i den. Det styrer hvilke kjente feil
|
|
43
|
+
innsenderen får se før hun skriver.
|
|
44
|
+
|
|
45
|
+
Utenfor React — en navigasjonshandler, en krasjlytter — bruker du klienten
|
|
46
|
+
direkte: `innspel.openFeedback({ screen: 'Dørlista' })`.
|
|
47
|
+
|
|
48
|
+
## Token-endepunktet
|
|
49
|
+
|
|
50
|
+
Det eneste du må bygge selv. Se
|
|
51
|
+
[integrasjonsguiden](../../../docs/sdk/README.md), som viser det med kjørbar
|
|
52
|
+
ES256-kode. `identityProvider: null` er anonym modus — et eksplisitt valg, ikke
|
|
53
|
+
noe du havner i ved å glemme opsjonen.
|
|
54
|
+
|
|
55
|
+
## Tema
|
|
56
|
+
|
|
57
|
+
Widgeten arver vertsappens flate. Send det du vil overstyre; resten faller
|
|
58
|
+
tilbake på Innspels eget tema, som er målt mot WCAG AA i begge paletter.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
<InnspelProvider
|
|
62
|
+
client={innspel}
|
|
63
|
+
colorScheme="light"
|
|
64
|
+
theme={{ color: { brand: '#E5007D', actionPrimary: '#E5007D' } }}
|
|
65
|
+
tenantName="Følget"
|
|
66
|
+
>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`tenantName` er navnet som står på svaret i «Mine innspill» — ditt, ikke
|
|
70
|
+
Innspels. Innsenderen skal se hvem som svarte.
|
|
71
|
+
|
|
72
|
+
`fontFamily` finnes ikke som token: systemfonten er standard i React Native, og
|
|
73
|
+
å sette den ville brutt med appen rundt.
|
|
74
|
+
|
|
75
|
+
## Hva innsenderen møter
|
|
76
|
+
|
|
77
|
+
| Skjerm | Hva |
|
|
78
|
+
|---|---|
|
|
79
|
+
| Første valg | «Noe virker ikke» eller «Jeg ønsker meg noe». Aldri et tredje, aldri spørsmål om kategori eller alvorlighet. |
|
|
80
|
+
| Kjente feil | I feilsporet **før** feltet, i ønskesporet etter. Tre svar per kort: «Ja, jeg også» (teller deg uten ny sak), «Ligner, men ikke helt» (ditt eget innspill med lenke), «Nei, det er noe annet». Tom liste hopper skjermen over — treffene er et tilbud, aldri en sperre. |
|
|
81
|
+
| Feltet | Ett tekstfelt. Send er aktiv fra N tegn, og **ingenting annet er obligatorisk**. Konteksten som legges ved er synlig og kan fjernes linje for linje. |
|
|
82
|
+
| Mønstervarsel | Ser teksten ut til å inneholde e-post, telefonnummer, kortnummer, IP eller en tilgangsnøkkel, spør widgeten om det skal fjernes. Den fjerner **aldri** noe selv. |
|
|
83
|
+
| Kvittering | Lover noe konkret, per spor, med saksnummer. Ber aldri om en vurdering av appen. |
|
|
84
|
+
| Mine innspill | Status, løftet som hører til, og svaret fra deg under saken. Det som venter på nett står øverst. |
|
|
85
|
+
|
|
86
|
+
## Offline
|
|
87
|
+
|
|
88
|
+
Faller nettet, køes innspillet lokalt — kun teksten. Køen tømmes når widgeten
|
|
89
|
+
åpnes eller nettet kommer tilbake, aldri ved oppstart, og innsenderen ser hele
|
|
90
|
+
tiden at det ligger noe og venter. Taket er 30.
|
|
91
|
+
|
|
92
|
+
## Tilgjengelighet
|
|
93
|
+
|
|
94
|
+
Widgeten er en dialog og oppfører seg som en: modal for skjermlesere, lukkes med
|
|
95
|
+
Android-tilbake og ESC, kvitteringen annonseres, og hver trykkflate er minst 48
|
|
96
|
+
punkter. Ikoner er skjult for skjermlesere — etiketten bærer meningen, aldri
|
|
97
|
+
fargen alene.
|
|
98
|
+
|
|
99
|
+
WCAG 2.1 AA er grønt-kriterium, ikke en ambisjon. Kontrasten måles i
|
|
100
|
+
tema-generatoren, som nekter å skrive tokens under kravet.
|
|
101
|
+
|
|
102
|
+
## Vedlegg og betaprogram
|
|
103
|
+
|
|
104
|
+
Skjermbilde med maskering kommer i M1.3, betaprogram-fanen i M3.
|
|
105
|
+
`innspel.programs.list()` finnes allerede i kjernen om du vil bygge din egen.
|
|
106
|
+
|
|
107
|
+
## Versjoner
|
|
108
|
+
|
|
109
|
+
Semver fra `0.1.0`. **Før `1.0.0` kan en minor bryte** — pin en eksakt versjon
|
|
110
|
+
om du trenger ro.
|
|
111
|
+
|
|
112
|
+
## Lisens
|
|
113
|
+
|
|
114
|
+
MIT. Klientpakkene er permissivt lisensiert fordi koden kjører hos deg og må
|
|
115
|
+
kunne leses og granskes der. Plattformen bak — API, panel og drift — er det ikke.
|