@ksvedal/docs 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/README.md +74 -0
- package/dist/Starthjelp-CDnMsPRF.js +6 -0
- package/dist/Starthjelp-DTDqsiPb.js +6 -0
- package/dist/_baseUniq-FW_jgYGR.js +477 -0
- package/dist/access_policy-BV-cRgLX.js +17 -0
- package/dist/access_policy-pBOJMSEK.js +17 -0
- package/dist/access_token_lifetime-6ypKk6LU.js +31 -0
- package/dist/access_token_lifetime-CVau9UC3.js +31 -0
- package/dist/allowed_grant_types-BrnsQvWi.js +101 -0
- package/dist/allowed_grant_types-ovkxJeQq.js +101 -0
- package/dist/application_type-BAESO1T4.js +36 -0
- package/dist/application_type-BtouPPrt.js +39 -0
- package/dist/arc-zSbgd3Dl.js +83 -0
- package/dist/architecture-U656AL7Q-bG73RCfJ.js +5 -0
- package/dist/architectureDiagram-VXUJARFQ-DbJ1yKpS.js +4668 -0
- package/dist/authentication_method-B28p58-a.js +43 -0
- package/dist/authentication_method-D8EwmEki.js +43 -0
- package/dist/authorization_lifetime-CfhrWQ9Y.js +39 -0
- package/dist/authorization_lifetime-DrFRbscQ.js +39 -0
- package/dist/backchannel_logout_uri-BTceN7xq.js +33 -0
- package/dist/backchannel_logout_uri-CBdktUL7.js +33 -0
- package/dist/blockDiagram-VD42YOAC-CmPMJI6H.js +2265 -0
- package/dist/breadcrumbs.json +1202 -0
- package/dist/c4Diagram-YG6GDRKO-BtTnslb7.js +1581 -0
- package/dist/channel-B9C38GUl.js +5 -0
- package/dist/chunk-4BX2VUAB-BLcImAIn.js +9 -0
- package/dist/chunk-55IACEB6-Cd_NYMQ6.js +8 -0
- package/dist/chunk-B4BG7PRW-C5mt8tWU.js +1376 -0
- package/dist/chunk-DI55MBZ5-BliqH_si.js +1382 -0
- package/dist/chunk-FMBD7UC4-D8OxNP20.js +19 -0
- package/dist/chunk-QN33PNHL-DBPrGAkF.js +20 -0
- package/dist/chunk-QZHKN3VN-Ce2k3n1F.js +15 -0
- package/dist/chunk-TZMSLE5B-BB3w_n2J.js +64 -0
- package/dist/classDiagram-2ON5EDUG-BJg1PJs9.js +16 -0
- package/dist/classDiagram-v2-WZHVMYZB-BJg1PJs9.js +16 -0
- package/dist/client_types-BmacnRwO.js +17 -0
- package/dist/client_types-Cu_f02j7.js +17 -0
- package/dist/clone-DZF-mLM1.js +8 -0
- package/dist/components/Docs.d.ts +5 -0
- package/dist/components/DocsBreadcrumbs.d.ts +10 -0
- package/dist/components/DocsErrorBoundary.d.ts +21 -0
- package/dist/components/DocsPage.d.ts +10 -0
- package/dist/components/DocsSearch.d.ts +12 -0
- package/dist/components/DocsViewer.d.ts +11 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/useDocsStyles.d.ts +1 -0
- package/dist/cose-bilkent-S5V4N54A-xEniAY-c.js +2608 -0
- package/dist/cytoscape.esm-CjI2IsL8.js +18735 -0
- package/dist/dagre-6UL2VRFP-DWEj74f8.js +446 -0
- package/dist/defaultLocale-BgPVtth8.js +171 -0
- package/dist/delegation_source-B8L65LAZ.js +17 -0
- package/dist/delegation_source-DBE0sh58.js +17 -0
- package/dist/diagram-PSM6KHXK-Z3KtWXiy.js +533 -0
- package/dist/diagram-QEK2KX5R-BVA9QmB8.js +221 -0
- package/dist/diagram-S2PKOQOG-BOmc_fL6.js +143 -0
- package/dist/docs/folder.d.ts +12 -0
- package/dist/docs/types.d.ts +12 -0
- package/dist/entraid-CPkATiHs.js +6 -0
- package/dist/entraid-CSwp8dMQ.js +6 -0
- package/dist/erDiagram-Q2GNP2WA-Blro_6F2.js +842 -0
- package/dist/faq-CqjYqwL1.js +8 -0
- package/dist/faq-TqD11_1a.js +8 -0
- package/dist/flowDiagram-NV44I4VS-BN9iLCEi.js +1627 -0
- package/dist/frontchannel_logout_uri-Bt6bvoBs.js +36 -0
- package/dist/frontchannel_logout_uri-DRGyFXRl.js +36 -0
- package/dist/ganttDiagram-JELNMOA3-CXLPJQlh.js +2670 -0
- package/dist/general--WqS-xp8.js +89 -0
- package/dist/general-B37q4SsA.js +63 -0
- package/dist/general-BCOYLf6V.js +152 -0
- package/dist/general-CQFRRoeE.js +63 -0
- package/dist/general-Dk7lWiBC.js +152 -0
- package/dist/general-QQfgnjEE.js +89 -0
- package/dist/gitGraph-F6HP7TQM-ChFlbGFG.js +5 -0
- package/dist/gitGraphDiagram-NY62KEGX-DXSPVlhd.js +712 -0
- package/dist/graph-dALvSPTP.js +381 -0
- package/dist/index-D_FT2Td-.js +25338 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -0
- package/dist/info-NVLQJR56-BSQ5ueiP.js +5 -0
- package/dist/infoDiagram-WHAUD3N6-D0hbJwWb.js +24 -0
- package/dist/init-DjUOC4st.js +16 -0
- package/dist/integration_guide-BXkM8zJ-.js +7 -0
- package/dist/integration_guide-CLABphnS.js +313 -0
- package/dist/integration_guide-Ci8Nz8oL.js +313 -0
- package/dist/integration_guide-Ct8RYoMV.js +6 -0
- package/dist/integration_guide-DWfjt6Qk.js +6 -0
- package/dist/integration_guide-DrKTpPnR.js +6 -0
- package/dist/journeyDiagram-XKPGCS4Q-DTU9EVLJ.js +834 -0
- package/dist/kanban-definition-3W4ZIXB7-CcKx9EnU.js +721 -0
- package/dist/katex-C6SjTJMZ.js +11690 -0
- package/dist/layout-DUskCdLZ.js +1441 -0
- package/dist/linear-RKbqvfvG.js +259 -0
- package/dist/mermaid-parser.core-C-16ojim.js +15189 -0
- package/dist/min-CsCJm_uR.js +38 -0
- package/dist/mindmap-definition-VGOIOE7T-LpgPu_oq.js +787 -0
- package/dist/on_behalf_of-EcHpNqmZ.js +36 -0
- package/dist/on_behalf_of-qrlvHfcG.js +36 -0
- package/dist/ordinal-DfAQgscy.js +61 -0
- package/dist/overview-Bw11cTNo.js +21 -0
- package/dist/overview-ZreyAEkN.js +21 -0
- package/dist/packet-BFZMPI3H-CwJrUCZn.js +5 -0
- package/dist/pie-7BOR55EZ-WUF72bRP.js +5 -0
- package/dist/pieDiagram-ADFJNKIX-BRjx2vS_.js +161 -0
- package/dist/pkce-BkSKWYmh.js +34 -0
- package/dist/pkce-C3U_jCxQ.js +33 -0
- package/dist/post_logout_redirect_uri-BSzuTRwg.js +33 -0
- package/dist/post_logout_redirect_uri-BnhzB1De.js +33 -0
- package/dist/pseudonymous_login-B3oa6s2f.js +17 -0
- package/dist/pseudonymous_login-x98obOlL.js +17 -0
- package/dist/quadrantDiagram-AYHSOK5B-BOwjGYKH.js +1024 -0
- package/dist/radar-NHE76QYJ-DRN4buPP.js +5 -0
- package/dist/redirect_uri-Cnlv_2rt.js +38 -0
- package/dist/redirect_uri-DgNidm8d.js +38 -0
- package/dist/refresh_token_lifetime-DCzCzIyu.js +34 -0
- package/dist/refresh_token_lifetime-QcGf0aOG.js +34 -0
- package/dist/refresh_token_usage-C2LdxQHa.js +33 -0
- package/dist/refresh_token_usage-DXI98e4O.js +33 -0
- package/dist/requirementDiagram-UZGBJVZJ-KRDecAgT.js +852 -0
- package/dist/sankeyDiagram-TZEHDZUN-MKxbwv35.js +810 -0
- package/dist/search-index.json +450 -0
- package/dist/sequenceDiagram-WL72ISMW-DEo0cUN3.js +2518 -0
- package/dist/sso-BuAlvelZ.js +79 -0
- package/dist/sso-DYMIpoUd.js +78 -0
- package/dist/stateDiagram-FKZM4ZOC-CaTGomRc.js +263 -0
- package/dist/stateDiagram-v2-4FDKWEC3-l4p7_3uG.js +16 -0
- package/dist/timeline-definition-IT6M3QCI-ChX0PfWC.js +799 -0
- package/dist/token_lifetimes-Cp22x6RM.js +17 -0
- package/dist/token_lifetimes-CwzcMEnb.js +17 -0
- package/dist/token_type-B8DCg80j.js +17 -0
- package/dist/token_type-C7Y04-Fc.js +17 -0
- package/dist/treemap-KMMF4GRG-DNEhU-LQ.js +5 -0
- package/dist/user_involvement-4nbn_fQ7.js +17 -0
- package/dist/user_involvement-COT572uK.js +17 -0
- package/dist/visibility-BSqCGXMv.js +17 -0
- package/dist/visibility-CidZ07d9.js +17 -0
- package/dist/xychartDiagram-PRI3JC2R-CBQAJ13t.js +1340 -0
- package/package.json +60 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const e = `# Tillatte grant types
|
|
2
|
+
|
|
3
|
+
## Formål
|
|
4
|
+
|
|
5
|
+
Tillatte grant types angir hvilke OAuth 2.0-flyter en klient har lov til å bruke.
|
|
6
|
+
|
|
7
|
+
En grant type beskriver hvordan klienten får tilgang til tokens, og er dermed en viktig del av klientens sikkerhets- og integrasjonsprofil.
|
|
8
|
+
|
|
9
|
+
## Teknisk virkemåte
|
|
10
|
+
|
|
11
|
+
Hver grant type representerer et bestemt autorisasjonsmønster. Ved å begrense hvilke grant types som er tillatt, begrenses også hvilke tokenflyter klienten kan benytte.
|
|
12
|
+
|
|
13
|
+
Dette er viktig for å:
|
|
14
|
+
|
|
15
|
+
- redusere angrepsflaten
|
|
16
|
+
- hindre utilsiktet bruk av uønskede flyter
|
|
17
|
+
- gjøre klientkonfigurasjonen mer forutsigbar
|
|
18
|
+
|
|
19
|
+
### Sikkerhetsprinsipp
|
|
20
|
+
|
|
21
|
+
En klient bør bare ha tilgang til de grant types den faktisk trenger. Overflødige flyter bør ikke være aktivert.
|
|
22
|
+
|
|
23
|
+
## authorization_code
|
|
24
|
+
|
|
25
|
+
\`authorization_code\` er en grant type der en klient først sender brukeren til autorisasjonsserveren for autentisering, og deretter mottar en autorisasjonskode som byttes inn i tokens.
|
|
26
|
+
|
|
27
|
+
Dette er den vanligste og mest anbefalte flyten for nettleserbasert innlogging i OIDC.
|
|
28
|
+
|
|
29
|
+
### Teknisk virkemåte
|
|
30
|
+
|
|
31
|
+
Flyten består typisk av disse trinnene:
|
|
32
|
+
|
|
33
|
+
1. Klienten sender brukeren til autorisasjonsendepunktet.
|
|
34
|
+
2. Brukeren autentiserer seg.
|
|
35
|
+
3. Autorisasjonsserveren returnerer brukeren til klientens redirect URI med en autorisasjonskode.
|
|
36
|
+
4. Klienten sender autorisasjonskoden til token-endepunktet.
|
|
37
|
+
5. Klienten mottar access token, og eventuelt ID-token og refresh token.
|
|
38
|
+
|
|
39
|
+
#### Hvorfor denne flyten anses som sikker
|
|
40
|
+
|
|
41
|
+
I denne flyten returneres det ikke tokens direkte via nettleseren. I stedet returneres en kortlivet kode, som klienten må utveksle server-til-server. Dette reduserer risikoen for lekkasje sammenlignet med mindre robuste mønstre.
|
|
42
|
+
|
|
43
|
+
#### PKCE
|
|
44
|
+
|
|
45
|
+
\`authorization_code\` brukes ofte sammen med PKCE. PKCE beskytter mot at autorisasjonskoden fanges opp og misbrukes av andre enn klienten som startet flyten.
|
|
46
|
+
|
|
47
|
+
## Bruk i OIDC-klienter
|
|
48
|
+
|
|
49
|
+
### ID-porten
|
|
50
|
+
|
|
51
|
+
Dette er den sentrale grant-typen for vanlige OIDC-innlogginger mot ID-porten.
|
|
52
|
+
|
|
53
|
+
### Ansattporten
|
|
54
|
+
|
|
55
|
+
Ansattporten bruker samme grunnmønster for brukerautentisering og tokenutveksling, og \`authorization_code\` er derfor tilsvarende relevant.
|
|
56
|
+
|
|
57
|
+
### Maskinporten
|
|
58
|
+
|
|
59
|
+
Denne grant-typen brukes normalt ikke for Maskinporten, siden Maskinporten ikke bygger på interaktiv brukerinnlogging i nettleser.
|
|
60
|
+
|
|
61
|
+
## Refresh token
|
|
62
|
+
|
|
63
|
+
Et refresh token gjør det mulig for en klient å hente nye access tokens uten at brukeren må autentisere seg på nytt hver gang et access token utløper.
|
|
64
|
+
|
|
65
|
+
Dette brukes for å opprettholde langvarige økter eller tilgang over tid.
|
|
66
|
+
|
|
67
|
+
### Teknisk virkemåte
|
|
68
|
+
|
|
69
|
+
Når en klient mottar både access token og refresh token, kan flyten se slik ut:
|
|
70
|
+
|
|
71
|
+
1. Access token brukes mot beskyttede API-er.
|
|
72
|
+
2. Når access token utløper, sender klienten refresh token til token-endepunktet.
|
|
73
|
+
3. Autorisasjonsserveren utsteder nytt access token dersom refresh token fortsatt er gyldig.
|
|
74
|
+
|
|
75
|
+
### Sikkerhetsmessig betydning
|
|
76
|
+
|
|
77
|
+
Et refresh token er ofte mer sensitivt enn et access token, fordi det kan brukes til å utstede nye tokens over tid. Det må derfor lagres og behandles med høy grad av beskyttelse.
|
|
78
|
+
|
|
79
|
+
## Bruk i OIDC-klienter
|
|
80
|
+
|
|
81
|
+
### ID-porten og Ansattporten
|
|
82
|
+
|
|
83
|
+
For klienter som trenger vedvarende brukerøkter, kan refresh token være relevant. Dette må vurderes opp mot behov, sikkerhetsnivå og hvordan klienten lagrer tokens.
|
|
84
|
+
|
|
85
|
+
### Maskinporten
|
|
86
|
+
|
|
87
|
+
Refresh token er normalt ikke del av det vanlige mønsteret for Maskinporten, siden Maskinporten typisk ikke representerer brukerøkter på samme måte som OIDC-klienter for sluttbrukere.
|
|
88
|
+
|
|
89
|
+
## Bruk i OIDC-klienter
|
|
90
|
+
|
|
91
|
+
### ID-porten og Ansattporten
|
|
92
|
+
|
|
93
|
+
For sluttbrukerrettede OIDC-klienter er \`authorization_code\` den mest relevante grant-typen. Den brukes når en bruker autentiserer seg via nettleser og klienten deretter henter tokens fra token-endepunktet.
|
|
94
|
+
|
|
95
|
+
### Maskinporten
|
|
96
|
+
|
|
97
|
+
Maskinporten brukes normalt for maskin-til-maskin-autorisering og følger andre mønstre enn ordinær brukerinnlogging. Dokumentasjon som omtaler OIDC-klienter vil derfor som regel være mest relevant for ID-porten og Ansattporten.
|
|
98
|
+
`;
|
|
99
|
+
export {
|
|
100
|
+
e as default
|
|
101
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const e = `# Allowed grant types
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Allowed grant types define which OAuth 2.0 flows a client is permitted to use.
|
|
6
|
+
|
|
7
|
+
A grant type describes how the client obtains tokens, and is therefore an important part of the client's security and integration profile.
|
|
8
|
+
|
|
9
|
+
## Technical behavior
|
|
10
|
+
|
|
11
|
+
Each grant type represents a specific authorization pattern. Restricting which grant types are allowed also restricts which token flows the client can use.
|
|
12
|
+
|
|
13
|
+
This is important in order to:
|
|
14
|
+
|
|
15
|
+
- reduce the attack surface
|
|
16
|
+
- prevent unintended use of unwanted flows
|
|
17
|
+
- make the client configuration more predictable
|
|
18
|
+
|
|
19
|
+
### Security principle
|
|
20
|
+
|
|
21
|
+
A client should only have access to the grant types it actually needs. Unnecessary flows should not be enabled.
|
|
22
|
+
|
|
23
|
+
## authorization_code
|
|
24
|
+
|
|
25
|
+
\`authorization_code\` is a grant type where a client first sends the user to the authorization server for authentication, and then receives an authorization code that is exchanged for tokens.
|
|
26
|
+
|
|
27
|
+
This is the most common and recommended flow for browser-based sign-in in OIDC.
|
|
28
|
+
|
|
29
|
+
### Technical behavior
|
|
30
|
+
|
|
31
|
+
The flow typically consists of these steps:
|
|
32
|
+
|
|
33
|
+
1. The client sends the user to the authorization endpoint.
|
|
34
|
+
2. The user authenticates.
|
|
35
|
+
3. The authorization server returns the user to the client's redirect URI with an authorization code.
|
|
36
|
+
4. The client sends the authorization code to the token endpoint.
|
|
37
|
+
5. The client receives an access token, and optionally an ID token and refresh token.
|
|
38
|
+
|
|
39
|
+
#### Why this flow is considered secure
|
|
40
|
+
|
|
41
|
+
In this flow, tokens are not returned directly through the browser. Instead, a short-lived code is returned, which the client must exchange server-to-server. This reduces the risk of leakage compared with less robust patterns.
|
|
42
|
+
|
|
43
|
+
#### PKCE
|
|
44
|
+
|
|
45
|
+
\`authorization_code\` is often used together with PKCE. PKCE protects against the authorization code being intercepted and misused by someone other than the client that started the flow.
|
|
46
|
+
|
|
47
|
+
## Use in OIDC clients
|
|
48
|
+
|
|
49
|
+
### ID-porten
|
|
50
|
+
|
|
51
|
+
This is the central grant type for regular OIDC logins against ID-porten.
|
|
52
|
+
|
|
53
|
+
### Ansattporten
|
|
54
|
+
|
|
55
|
+
Ansattporten uses the same basic pattern for user authentication and token exchange, so \`authorization_code\` is equally relevant there.
|
|
56
|
+
|
|
57
|
+
### Maskinporten
|
|
58
|
+
|
|
59
|
+
This grant type is normally not used for Maskinporten, since Maskinporten is not based on interactive user login in a browser.
|
|
60
|
+
|
|
61
|
+
## Refresh token
|
|
62
|
+
|
|
63
|
+
A refresh token allows a client to obtain new access tokens without requiring the user to authenticate again every time an access token expires.
|
|
64
|
+
|
|
65
|
+
This is used to maintain long-lived sessions or access over time.
|
|
66
|
+
|
|
67
|
+
### Technical behavior
|
|
68
|
+
|
|
69
|
+
When a client receives both an access token and a refresh token, the flow can look like this:
|
|
70
|
+
|
|
71
|
+
1. The access token is used against protected APIs.
|
|
72
|
+
2. When the access token expires, the client sends the refresh token to the token endpoint.
|
|
73
|
+
3. The authorization server issues a new access token if the refresh token is still valid.
|
|
74
|
+
|
|
75
|
+
### Security significance
|
|
76
|
+
|
|
77
|
+
A refresh token is often more sensitive than an access token, because it can be used to issue new tokens over time. It must therefore be stored and handled with a high degree of protection.
|
|
78
|
+
|
|
79
|
+
## Use in OIDC clients
|
|
80
|
+
|
|
81
|
+
### ID-porten and Ansattporten
|
|
82
|
+
|
|
83
|
+
For clients that need persistent user sessions, refresh tokens can be relevant. This must be evaluated against actual need, security level, and how the client stores tokens.
|
|
84
|
+
|
|
85
|
+
### Maskinporten
|
|
86
|
+
|
|
87
|
+
Refresh tokens are normally not part of the common pattern in Maskinporten, since Maskinporten typically does not represent user sessions in the same way as OIDC clients for end users.
|
|
88
|
+
|
|
89
|
+
## Use in OIDC clients
|
|
90
|
+
|
|
91
|
+
### ID-porten and Ansattporten
|
|
92
|
+
|
|
93
|
+
For end-user-facing OIDC clients, \`authorization_code\` is the most relevant grant type. It is used when a user authenticates through a browser and the client then obtains tokens from the token endpoint.
|
|
94
|
+
|
|
95
|
+
### Maskinporten
|
|
96
|
+
|
|
97
|
+
Maskinporten is normally used for machine-to-machine authorization and follows different patterns than regular user login. Documentation that discusses OIDC clients will therefore usually be most relevant for ID-porten and Ansattporten.
|
|
98
|
+
`;
|
|
99
|
+
export {
|
|
100
|
+
e as default
|
|
101
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const e = `# Application types
|
|
2
|
+
|
|
3
|
+
## Web Application
|
|
4
|
+
|
|
5
|
+
A web application is software that runs on a remote server and is accessed through a web browser. Nothing is installed locally by the user.
|
|
6
|
+
|
|
7
|
+
### Characteristics
|
|
8
|
+
- Accessed via URL
|
|
9
|
+
- Runs in a browser
|
|
10
|
+
- Platform-independent
|
|
11
|
+
- Centrally maintained and updated
|
|
12
|
+
|
|
13
|
+
## Browser Application
|
|
14
|
+
|
|
15
|
+
A browser application is a web application that runs directly inside the browser environment using technologies such as HTML, CSS, and JavaScript.
|
|
16
|
+
|
|
17
|
+
### Characteristics
|
|
18
|
+
- Executes inside the browser engine
|
|
19
|
+
- No local installation required
|
|
20
|
+
- Uses browser APIs
|
|
21
|
+
- Dependent on browser capabilities
|
|
22
|
+
|
|
23
|
+
Note: “Web app” and “browser app” are often used interchangeably, but “browser application” emphasizes execution inside the browser.
|
|
24
|
+
|
|
25
|
+
## Native Application
|
|
26
|
+
|
|
27
|
+
A native application is installed directly on a device and runs on the operating system rather than inside a browser.
|
|
28
|
+
|
|
29
|
+
### Characteristics
|
|
30
|
+
- Requires installation
|
|
31
|
+
- Built for a specific operating system
|
|
32
|
+
- Direct access to hardware and system resources
|
|
33
|
+
- Typically higher performance `;
|
|
34
|
+
export {
|
|
35
|
+
e as default
|
|
36
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const e = `# Applikasjonstyper
|
|
2
|
+
|
|
3
|
+
## Web (Webapplikasjon)
|
|
4
|
+
|
|
5
|
+
En webapplikasjon er et program som kjører på en server og brukes via en nettleser over internett eller intranett. Brukeren installerer ingenting lokalt.
|
|
6
|
+
|
|
7
|
+
### Kjennetegn
|
|
8
|
+
|
|
9
|
+
- Tilgang via URL
|
|
10
|
+
- Krever nettleser
|
|
11
|
+
- Plattformuavhengig
|
|
12
|
+
- Oppdateres sentralt på server
|
|
13
|
+
|
|
14
|
+
## Browser (Nettleserbasert applikasjon)
|
|
15
|
+
|
|
16
|
+
En browser-applikasjon er en type webapplikasjon som kjører direkte i nettleseren og er bygget med HTML, CSS og JavaScript.
|
|
17
|
+
|
|
18
|
+
### Kjennetegn
|
|
19
|
+
|
|
20
|
+
- Kjører i nettlesermiljøet
|
|
21
|
+
- Ingen lokal installasjon
|
|
22
|
+
- Bruker nettleserens motor
|
|
23
|
+
- Kan bruke nettleserens API-er
|
|
24
|
+
|
|
25
|
+
Merk: “Web application” og “browser application” brukes ofte om hverandre, men “browser application” presiserer at kjøringen skjer direkte i nettleseren.
|
|
26
|
+
|
|
27
|
+
## Native (Lokal / Native applikasjon)
|
|
28
|
+
|
|
29
|
+
En native applikasjon installeres direkte på en enhet og kjører på operativsystemet, ikke i en nettleser.
|
|
30
|
+
|
|
31
|
+
### Kjennetegn
|
|
32
|
+
|
|
33
|
+
- Må installeres
|
|
34
|
+
- Bygget for spesifikt operativsystem
|
|
35
|
+
- Direkte tilgang til maskinvare og systemressurser
|
|
36
|
+
- Ofte bedre ytelse `;
|
|
37
|
+
export {
|
|
38
|
+
e as default
|
|
39
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { M as ln, N as an, O as y, P as tn, Q as Y, R as O, S as _, T as un, V as Q, W as rn, X as j, Y as o, Z as sn, $ as on, a0 as fn } from "./index-D_FT2Td-.js";
|
|
2
|
+
function cn(l) {
|
|
3
|
+
return l.innerRadius;
|
|
4
|
+
}
|
|
5
|
+
function yn(l) {
|
|
6
|
+
return l.outerRadius;
|
|
7
|
+
}
|
|
8
|
+
function gn(l) {
|
|
9
|
+
return l.startAngle;
|
|
10
|
+
}
|
|
11
|
+
function dn(l) {
|
|
12
|
+
return l.endAngle;
|
|
13
|
+
}
|
|
14
|
+
function mn(l) {
|
|
15
|
+
return l && l.padAngle;
|
|
16
|
+
}
|
|
17
|
+
function pn(l, h, D, S, v, R, V, a) {
|
|
18
|
+
var E = D - l, i = S - h, n = V - v, d = a - R, u = d * E - n * i;
|
|
19
|
+
if (!(u * u < y))
|
|
20
|
+
return u = (n * (h - R) - d * (l - v)) / u, [l + u * E, h + u * i];
|
|
21
|
+
}
|
|
22
|
+
function H(l, h, D, S, v, R, V) {
|
|
23
|
+
var a = l - D, E = h - S, i = (V ? R : -R) / j(a * a + E * E), n = i * E, d = -i * a, u = l + n, s = h + d, f = D + n, c = S + d, W = (u + f) / 2, t = (s + c) / 2, m = f - u, g = c - s, A = m * m + g * g, T = v - R, P = u * c - f * s, I = (g < 0 ? -1 : 1) * j(fn(0, T * T * A - P * P)), M = (P * g - m * I) / A, N = (-P * m - g * I) / A, w = (P * g + m * I) / A, p = (-P * m + g * I) / A, x = M - W, e = N - t, r = w - W, X = p - t;
|
|
24
|
+
return x * x + e * e > r * r + X * X && (M = w, N = p), {
|
|
25
|
+
cx: M,
|
|
26
|
+
cy: N,
|
|
27
|
+
x01: -n,
|
|
28
|
+
y01: -d,
|
|
29
|
+
x11: M * (v / T - 1),
|
|
30
|
+
y11: N * (v / T - 1)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function hn() {
|
|
34
|
+
var l = cn, h = yn, D = Q(0), S = null, v = gn, R = dn, V = mn, a = null, E = ln(i);
|
|
35
|
+
function i() {
|
|
36
|
+
var n, d, u = +l.apply(this, arguments), s = +h.apply(this, arguments), f = v.apply(this, arguments) - an, c = R.apply(this, arguments) - an, W = un(c - f), t = c > f;
|
|
37
|
+
if (a || (a = n = E()), s < u && (d = s, s = u, u = d), !(s > y)) a.moveTo(0, 0);
|
|
38
|
+
else if (W > tn - y)
|
|
39
|
+
a.moveTo(s * Y(f), s * O(f)), a.arc(0, 0, s, f, c, !t), u > y && (a.moveTo(u * Y(c), u * O(c)), a.arc(0, 0, u, c, f, t));
|
|
40
|
+
else {
|
|
41
|
+
var m = f, g = c, A = f, T = c, P = W, I = W, M = V.apply(this, arguments) / 2, N = M > y && (S ? +S.apply(this, arguments) : j(u * u + s * s)), w = _(un(s - u) / 2, +D.apply(this, arguments)), p = w, x = w, e, r;
|
|
42
|
+
if (N > y) {
|
|
43
|
+
var X = sn(N / u * O(M)), z = sn(N / s * O(M));
|
|
44
|
+
(P -= X * 2) > y ? (X *= t ? 1 : -1, A += X, T -= X) : (P = 0, A = T = (f + c) / 2), (I -= z * 2) > y ? (z *= t ? 1 : -1, m += z, g -= z) : (I = 0, m = g = (f + c) / 2);
|
|
45
|
+
}
|
|
46
|
+
var Z = s * Y(m), $ = s * O(m), B = u * Y(T), C = u * O(T);
|
|
47
|
+
if (w > y) {
|
|
48
|
+
var F = s * Y(g), G = s * O(g), J = u * Y(A), K = u * O(A), q;
|
|
49
|
+
if (W < rn)
|
|
50
|
+
if (q = pn(Z, $, J, K, F, G, B, C)) {
|
|
51
|
+
var L = Z - q[0], U = $ - q[1], k = F - q[0], b = G - q[1], nn = 1 / O(on((L * k + U * b) / (j(L * L + U * U) * j(k * k + b * b))) / 2), en = j(q[0] * q[0] + q[1] * q[1]);
|
|
52
|
+
p = _(w, (u - en) / (nn - 1)), x = _(w, (s - en) / (nn + 1));
|
|
53
|
+
} else
|
|
54
|
+
p = x = 0;
|
|
55
|
+
}
|
|
56
|
+
I > y ? x > y ? (e = H(J, K, Z, $, s, x, t), r = H(F, G, B, C, s, x, t), a.moveTo(e.cx + e.x01, e.cy + e.y01), x < w ? a.arc(e.cx, e.cy, x, o(e.y01, e.x01), o(r.y01, r.x01), !t) : (a.arc(e.cx, e.cy, x, o(e.y01, e.x01), o(e.y11, e.x11), !t), a.arc(0, 0, s, o(e.cy + e.y11, e.cx + e.x11), o(r.cy + r.y11, r.cx + r.x11), !t), a.arc(r.cx, r.cy, x, o(r.y11, r.x11), o(r.y01, r.x01), !t))) : (a.moveTo(Z, $), a.arc(0, 0, s, m, g, !t)) : a.moveTo(Z, $), !(u > y) || !(P > y) ? a.lineTo(B, C) : p > y ? (e = H(B, C, F, G, u, -p, t), r = H(Z, $, J, K, u, -p, t), a.lineTo(e.cx + e.x01, e.cy + e.y01), p < w ? a.arc(e.cx, e.cy, p, o(e.y01, e.x01), o(r.y01, r.x01), !t) : (a.arc(e.cx, e.cy, p, o(e.y01, e.x01), o(e.y11, e.x11), !t), a.arc(0, 0, u, o(e.cy + e.y11, e.cx + e.x11), o(r.cy + r.y11, r.cx + r.x11), t), a.arc(r.cx, r.cy, p, o(r.y11, r.x11), o(r.y01, r.x01), !t))) : a.arc(0, 0, u, T, A, t);
|
|
57
|
+
}
|
|
58
|
+
if (a.closePath(), n) return a = null, n + "" || null;
|
|
59
|
+
}
|
|
60
|
+
return i.centroid = function() {
|
|
61
|
+
var n = (+l.apply(this, arguments) + +h.apply(this, arguments)) / 2, d = (+v.apply(this, arguments) + +R.apply(this, arguments)) / 2 - rn / 2;
|
|
62
|
+
return [Y(d) * n, O(d) * n];
|
|
63
|
+
}, i.innerRadius = function(n) {
|
|
64
|
+
return arguments.length ? (l = typeof n == "function" ? n : Q(+n), i) : l;
|
|
65
|
+
}, i.outerRadius = function(n) {
|
|
66
|
+
return arguments.length ? (h = typeof n == "function" ? n : Q(+n), i) : h;
|
|
67
|
+
}, i.cornerRadius = function(n) {
|
|
68
|
+
return arguments.length ? (D = typeof n == "function" ? n : Q(+n), i) : D;
|
|
69
|
+
}, i.padRadius = function(n) {
|
|
70
|
+
return arguments.length ? (S = n == null ? null : typeof n == "function" ? n : Q(+n), i) : S;
|
|
71
|
+
}, i.startAngle = function(n) {
|
|
72
|
+
return arguments.length ? (v = typeof n == "function" ? n : Q(+n), i) : v;
|
|
73
|
+
}, i.endAngle = function(n) {
|
|
74
|
+
return arguments.length ? (R = typeof n == "function" ? n : Q(+n), i) : R;
|
|
75
|
+
}, i.padAngle = function(n) {
|
|
76
|
+
return arguments.length ? (V = typeof n == "function" ? n : Q(+n), i) : V;
|
|
77
|
+
}, i.context = function(n) {
|
|
78
|
+
return arguments.length ? (a = n ?? null, i) : a;
|
|
79
|
+
}, i;
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
hn as d
|
|
83
|
+
};
|