@maka/maka-cli 5.123.0 → 5.123.1
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 +64 -64
- package/bundle/typescript/package.json +120 -120
- package/bundle/typescript/src/README.md +64 -64
- package/bundle/typescript/src/commands/aws/aws.command.js +2 -2
- package/bundle/typescript/src/commands/aws/ci.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/aws/ckp.sub.cmd.js +12 -12
- package/bundle/typescript/src/commands/aws/csg.sub.cmd.js +3 -3
- package/bundle/typescript/src/commands/aws/di.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/aws/rkp.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/aws/sth.sub.cmd.js +3 -3
- package/bundle/typescript/src/commands/aws/ti.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/build/build.js +16 -16
- package/bundle/typescript/src/commands/build/docker.sub.cmd.js +9 -9
- package/bundle/typescript/src/commands/create.js +36 -36
- package/bundle/typescript/src/commands/debug.js +4 -4
- package/bundle/typescript/src/commands/deploy/deploy.command.js +2 -2
- package/bundle/typescript/src/commands/deploy/galaxy.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/deploy/github.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/env/env.command.js +8 -8
- package/bundle/typescript/src/commands/env/set.sub.cmd.js +11 -11
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -9
- package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +7 -7
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +443 -443
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -6
- package/bundle/typescript/src/commands/game/sideQuest/game.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +206 -206
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +9 -9
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +556 -556
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +1447 -1447
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +14 -14
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/generate.js +2 -2
- package/bundle/typescript/src/commands/lint.js +10 -10
- package/bundle/typescript/src/commands/maka.cmd.js +26 -26
- package/bundle/typescript/src/commands/murder.js +14 -14
- package/bundle/typescript/src/commands/proxy.js +13 -13
- package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +6 -6
- package/bundle/typescript/src/commands/run/docker.sub.cmd.js +11 -11
- package/bundle/typescript/src/commands/run/run.command.js +24 -24
- package/bundle/typescript/src/commands/set/global.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/set/local.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/set/set.command.js +3 -3
- package/bundle/typescript/src/commands/testCmd/test.command.js +2 -2
- package/bundle/typescript/src/exec.js +0 -0
- package/bundle/typescript/src/generators/api.js +11 -11
- package/bundle/typescript/src/generators/collection.js +6 -6
- package/bundle/typescript/src/generators/hook.js +10 -10
- package/bundle/typescript/src/generators/kits/auth/auth.generator.js +2 -2
- package/bundle/typescript/src/generators/kits/auth/auth0-meteor.auth.gen.js +612 -612
- package/bundle/typescript/src/generators/kits/auth/basic-meteor.auth.gen.js +48 -48
- package/bundle/typescript/src/generators/kits/auth/provider.auth.gen.js +12 -12
- package/bundle/typescript/src/generators/kits/esri/esri.generator.js +3 -3
- package/bundle/typescript/src/generators/kits/esri/map.esri.gen.js +7 -7
- package/bundle/typescript/src/generators/kits/frames/frames.generator.js +16 -16
- package/bundle/typescript/src/generators/kits/mui/auth.mui.gen.js +2 -2
- package/bundle/typescript/src/generators/kits/mui/auth0.mui.gen.js +5 -5
- package/bundle/typescript/src/generators/kits/mui/frame.mui.gen.js +4 -4
- package/bundle/typescript/src/generators/kits/mui/mui.generator.js +22 -22
- package/bundle/typescript/src/generators/services/translation.js +5 -5
- package/bundle/typescript/src/templates/aws/cloudformation/create-ec2-instance.template +14 -14
- package/bundle/typescript/src/templates/meteor/api/api.js +20 -20
- package/bundle/typescript/src/templates/meteor/api/api.js.ts +20 -20
- package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js +50 -50
- package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js.ts +55 -55
- package/bundle/typescript/src/templates/meteor/api/graphql-api.js +63 -63
- package/bundle/typescript/src/templates/meteor/api/graphql-api.js.ts +69 -69
- package/bundle/typescript/src/templates/meteor/api/methods.js +39 -39
- package/bundle/typescript/src/templates/meteor/api/methods.js.ts +40 -40
- package/bundle/typescript/src/templates/meteor/api/register-api.js +3 -3
- package/bundle/typescript/src/templates/meteor/api/register-api.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/api/resolvers.js +9 -9
- package/bundle/typescript/src/templates/meteor/api/resolvers.js.ts +9 -9
- package/bundle/typescript/src/templates/meteor/api/typeDefs.js +6 -6
- package/bundle/typescript/src/templates/meteor/api/typeDefs.js.ts +6 -6
- package/bundle/typescript/src/templates/meteor/app/client/body.html +3 -3
- package/bundle/typescript/src/templates/meteor/app/client/head.html +12 -12
- package/bundle/typescript/src/templates/meteor/app/client/main.js +15 -15
- package/bundle/typescript/src/templates/meteor/app/client/main.js.jsx +15 -15
- package/bundle/typescript/src/templates/meteor/app/client/main.js.ts +17 -17
- package/bundle/typescript/src/templates/meteor/app/client/main.js.tsx +17 -17
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.jsx +107 -107
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.ts +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.tsx +108 -108
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js +39 -39
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.jsx +33 -33
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.ts +24 -24
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.tsx +33 -33
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.jsx +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.ts +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.tsx +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.jsx +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.tsx +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.jsx +28 -28
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.tsx +28 -28
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.jsx +95 -95
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.tsx +98 -98
- package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js +24 -24
- package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js.ts +24 -24
- package/bundle/typescript/src/templates/meteor/app/lib/main.js +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.jsx +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.tsx +3 -3
- package/bundle/typescript/src/templates/meteor/app/maka.d.ts +533 -533
- package/bundle/typescript/src/templates/meteor/app/meteor.d.ts +181 -181
- package/bundle/typescript/src/templates/meteor/app/public/manifest.json +27 -27
- package/bundle/typescript/src/templates/meteor/app/public/sw.js +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.jsx +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.ts +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.tsx +30 -30
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.jsx +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.ts +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.tsx +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/main.js +13 -13
- package/bundle/typescript/src/templates/meteor/app/server/main.js.jsx +13 -13
- package/bundle/typescript/src/templates/meteor/app/server/main.js.ts +14 -14
- package/bundle/typescript/src/templates/meteor/app/server/main.js.tsx +14 -14
- package/bundle/typescript/src/templates/meteor/app/tsconfig.json +42 -42
- package/bundle/typescript/src/templates/meteor/collection/collection.js +51 -51
- package/bundle/typescript/src/templates/meteor/collection/collection.js.ts +55 -55
- package/bundle/typescript/src/templates/meteor/collection/tests.js +27 -27
- package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +27 -27
- package/bundle/typescript/src/templates/meteor/config/deploy.sh.template +101 -101
- package/bundle/typescript/src/templates/meteor/config/docker-compose.yaml +17 -17
- package/bundle/typescript/src/templates/meteor/config/nginx.conf.template +31 -31
- package/bundle/typescript/src/templates/meteor/config/pm2.config.js +27 -27
- package/bundle/typescript/src/templates/meteor/config/process.env +5 -5
- package/bundle/typescript/src/templates/meteor/config/settings.json +11 -11
- package/bundle/typescript/src/templates/meteor/config/ssh.json +6 -6
- package/bundle/typescript/src/templates/meteor/dbc/config.js +70 -70
- package/bundle/typescript/src/templates/meteor/dbc/config.js.ts +70 -70
- package/bundle/typescript/src/templates/meteor/dbc/conn.js +37 -37
- package/bundle/typescript/src/templates/meteor/dbc/conn.js.ts +37 -37
- package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js +3 -3
- package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/github/workflows/deploy.yaml +150 -150
- package/bundle/typescript/src/templates/meteor/method/method.js +48 -48
- package/bundle/typescript/src/templates/meteor/method/method.js.ts +48 -48
- package/bundle/typescript/src/templates/meteor/package/package.js +37 -37
- package/bundle/typescript/src/templates/meteor/package/package.js.jsx +37 -37
- package/bundle/typescript/src/templates/meteor/package/package.js.ts +36 -36
- package/bundle/typescript/src/templates/meteor/package/package.js.tsx +37 -37
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.jsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.ts +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.tsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.jsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.ts +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.tsx +5 -5
- package/bundle/typescript/src/templates/meteor/project/.maka/config.json +29 -29
- package/bundle/typescript/src/templates/meteor/project/README.md +33 -33
- package/bundle/typescript/src/templates/meteor/project/build/README +4 -4
- package/bundle/typescript/src/templates/meteor/project/gitignore +10 -10
- package/bundle/typescript/src/templates/meteor/project/package.json +29 -29
- package/bundle/typescript/src/templates/meteor/publish/publish.js +7 -7
- package/bundle/typescript/src/templates/meteor/publish/publish.js.ts +7 -7
- package/bundle/typescript/src/templates/meteor/service/logger/logger.js +27 -27
- package/bundle/typescript/src/templates/meteor/service/logger/logger.js.ts +27 -27
- package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css +5 -5
- package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css.less +5 -5
- package/bundle/typescript/src/templates/meteor/template/template-tests.js +1 -1
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.jsx +55 -55
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.tsx +55 -55
- package/bundle/typescript/src/templates/meteor/template/template.css +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.css.less +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.css.scss +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.html +5 -5
- package/bundle/typescript/src/templates/meteor/template/template.js +20 -20
- package/bundle/typescript/src/templates/meteor/template/template.js.jsx +77 -77
- package/bundle/typescript/src/templates/meteor/template/template.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/template/template.js.tsx +89 -89
- package/bundle/typescript/src/templates/react/component/component.css +6 -6
- package/bundle/typescript/src/templates/react/component/component.css.less +6 -6
- package/bundle/typescript/src/templates/react/component/component.css.scss +3 -3
- package/bundle/typescript/src/templates/react/component/component.js.jsx +59 -59
- package/bundle/typescript/src/templates/react/component/component.js.tsx +65 -65
- package/bundle/typescript/src/templates/react/hook/hook.css +3 -3
- package/bundle/typescript/src/templates/react/hook/hook.css.scss +3 -3
- package/bundle/typescript/src/templates/react/hook/hook.js.jsx +19 -19
- package/bundle/typescript/src/templates/react/hook/hook.js.tsx +19 -19
- package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.jsx +306 -306
- package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.tsx +350 -350
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.jsx +178 -178
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.tsx +178 -178
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.jsx +59 -59
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.tsx +67 -67
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.jsx +273 -273
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.tsx +275 -275
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.jsx +182 -182
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.tsx +199 -199
- package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.jsx +138 -138
- package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.tsx +153 -153
- package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.jsx +29 -29
- package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.tsx +32 -32
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.css +63 -63
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.jsx +153 -153
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.tsx +164 -164
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.css +105 -105
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.jsx +158 -158
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.tsx +166 -166
- package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.jsx +34 -34
- package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.tsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.jsx +53 -53
- package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.tsx +53 -53
- package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.jsx +25 -25
- package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.tsx +25 -25
- package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.jsx +41 -41
- package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +34 -34
- package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.jsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.tsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.jsx +71 -71
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.tsx +71 -71
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.jsx +123 -123
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.tsx +123 -123
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.jsx +56 -56
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.tsx +74 -74
- package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.jsx +43 -43
- package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.tsx +43 -43
- package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.jsx +121 -121
- package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.tsx +117 -117
- package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.jsx +41 -41
- package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.tsx +41 -41
- package/bundle/typescript/src/templates/react/route/route.js +8 -8
- package/bundle/typescript/src/templates/react/route/route.js.jsx +5 -5
- package/bundle/typescript/src/templates/react/route/route.js.ts +8 -8
- package/bundle/typescript/src/templates/react/route/route.js.tsx +5 -5
- package/bundle/typescript/src/templates/react/test/test.js +1 -1
- package/bundle/typescript/src/templates/react/test/test.js.jsx +40 -40
- package/bundle/typescript/src/templates/react/test/test.js.ts +1 -1
- package/bundle/typescript/src/templates/react/test/test.js.tsx +40 -40
- package/bundle/typescript/src/templates/service/docker/Dockerfile +54 -54
- package/bundle/typescript/src/templates/service/eslint/babel.config.js +16 -16
- package/bundle/typescript/src/templates/service/eslint/config.eslint.js +69 -69
- package/bundle/typescript/src/templates/service/i18n/i18n.js +33 -33
- package/bundle/typescript/src/templates/service/i18n/i18n.js.ts +33 -33
- package/bundle/typescript/src/templates/service/i18n/locales.js +3 -3
- package/bundle/typescript/src/templates/service/i18n/locales.js.ts +3 -3
- package/bundle/typescript/src/templates/service/openssl/openssl.conf +22 -22
- package/bundle/typescript/src/templates/service/test/jest/jest.config.js +24 -24
- package/bundle/typescript/src/templates/service/test/jest/jest.setup.js +7 -7
- package/bundle/typescript/src/tools/mpi/sdk-runtime.d.ts +1 -0
- package/bundle/typescript/src/tools/mpi/sdk-runtime.js +29 -0
- package/bundle/typescript/src/tools/mpi/sdk-runtime.js.map +1 -1
- package/package.json +120 -120
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
import { Meteor } from 'meteor/meteor';
|
|
2
|
-
import { Roles } from 'meteor/alanning:roles';
|
|
3
|
-
import { Accounts } from 'meteor/accounts-base';
|
|
4
|
-
|
|
5
|
-
import { User } from './authentication-provider';
|
|
6
|
-
|
|
7
|
-
// Meteor.User carries Meteor's own fields (_id, username, emails, profile...);
|
|
8
|
-
// the generic AuthProvider only needs the minimal { id, name } shape.
|
|
9
|
-
const toUser = (meteorUser: Meteor.User | null): User | null => {
|
|
10
|
-
if (!meteorUser) return null;
|
|
11
|
-
return {
|
|
12
|
-
id: meteorUser._id,
|
|
13
|
-
name: meteorUser.username || meteorUser.emails?.[0]?.address || meteorUser._id,
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
type UserSelector = { username: string } | { email: string };
|
|
18
|
-
|
|
19
|
-
class AuthService {
|
|
20
|
-
static getUserQuerySelector(username: string): UserSelector {
|
|
21
|
-
// if the username is an email address, use the email field
|
|
22
|
-
if (username.indexOf('@') > -1) {
|
|
23
|
-
return { email: username };
|
|
24
|
-
} else {
|
|
25
|
-
return { username };
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
static async authenticateUser(username: string, password: string): Promise<User | null> {
|
|
30
|
-
// Implement Meteor-specific login logic
|
|
31
|
-
try {
|
|
32
|
-
const selector = AuthService.getUserQuerySelector(username);
|
|
33
|
-
return new Promise<User | null>((resolve, reject) => {
|
|
34
|
-
Meteor.loginWithPassword(selector, password, (error) => {
|
|
35
|
-
if (error) {
|
|
36
|
-
reject(error);
|
|
37
|
-
} else {
|
|
38
|
-
resolve(toUser(Meteor.user()));
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error('Meteor authentication failed:', error);
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static async authenticateToken(): Promise<User | null> {
|
|
50
|
-
// Implement token validation logic using Meteor
|
|
51
|
-
try {
|
|
52
|
-
return new Promise<User | null>((resolve, reject) => {
|
|
53
|
-
const token = localStorage.getItem('Meteor.loginToken');
|
|
54
|
-
if (token) {
|
|
55
|
-
Meteor.loginWithToken(token, (error) => {
|
|
56
|
-
if (error) {
|
|
57
|
-
reject(error);
|
|
58
|
-
}
|
|
59
|
-
resolve(toUser(Meteor.user()));
|
|
60
|
-
})
|
|
61
|
-
}
|
|
62
|
-
resolve(null);
|
|
63
|
-
});
|
|
64
|
-
} catch (error) {
|
|
65
|
-
console.error('Token validation failed:', error);
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static async getUserAuthorizations(userId: string): Promise<string[]> {
|
|
71
|
-
// Implement logic to fetch user permissions from Meteor
|
|
72
|
-
try {
|
|
73
|
-
return new Promise<string[]>((resolve) => {
|
|
74
|
-
const roles = Roles.getRolesForUser(userId);
|
|
75
|
-
resolve(roles);
|
|
76
|
-
});
|
|
77
|
-
} catch (error) {
|
|
78
|
-
console.error('Failed to fetch user permissions:', error);
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
static async deauthenticateUser(): Promise<boolean> {
|
|
84
|
-
// Implement logout logic using Meteor
|
|
85
|
-
try {
|
|
86
|
-
return new Promise<boolean>((resolve, reject) => {
|
|
87
|
-
Meteor.logout((error) => {
|
|
88
|
-
if (error) {
|
|
89
|
-
reject(error);
|
|
90
|
-
}
|
|
91
|
-
resolve(true);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
} catch (error) {
|
|
95
|
-
console.error('Logout failed:', error);
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
static async registerNewUser(username: string, password: string): Promise<User | null> {
|
|
101
|
-
try {
|
|
102
|
-
const selector = AuthService.getUserQuerySelector(username);
|
|
103
|
-
|
|
104
|
-
// Implement user registration logic using Meteor
|
|
105
|
-
// createUserAsync returns the new user's id and logs them in
|
|
106
|
-
await Accounts.createUserAsync({ ...selector, password });
|
|
107
|
-
return toUser(Meteor.user());
|
|
108
|
-
} catch (error) {
|
|
109
|
-
console.error('Registration failed:', error);
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static async sendForgotPasswordEmail(email: string): Promise<boolean> {
|
|
115
|
-
try {
|
|
116
|
-
// Implement password reset logic using Meteor
|
|
117
|
-
return new Promise<boolean>((resolve, reject) => {
|
|
118
|
-
Accounts.forgotPassword({ email }, (error) => {
|
|
119
|
-
if (error) {
|
|
120
|
-
reject(error);
|
|
121
|
-
} else {
|
|
122
|
-
resolve(true);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
} catch (error) {
|
|
127
|
-
console.error('Password reset failed:', error);
|
|
128
|
-
throw error;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
static async resetPasswordWithToken(token: string, password: string): Promise<User | null> {
|
|
133
|
-
try {
|
|
134
|
-
// Implement password reset logic using Meteor
|
|
135
|
-
await new Promise<void>((resolve, reject) => {
|
|
136
|
-
Accounts.resetPassword(token, password, (error) => {
|
|
137
|
-
if (error) {
|
|
138
|
-
reject(error);
|
|
139
|
-
} else {
|
|
140
|
-
resolve();
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
// resetPassword logs the user in on success
|
|
145
|
-
return toUser(Meteor.user());
|
|
146
|
-
} catch (error) {
|
|
147
|
-
console.error('Password reset failed:', error);
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export default AuthService;
|
|
1
|
+
import { Meteor } from 'meteor/meteor';
|
|
2
|
+
import { Roles } from 'meteor/alanning:roles';
|
|
3
|
+
import { Accounts } from 'meteor/accounts-base';
|
|
4
|
+
|
|
5
|
+
import { User } from './authentication-provider';
|
|
6
|
+
|
|
7
|
+
// Meteor.User carries Meteor's own fields (_id, username, emails, profile...);
|
|
8
|
+
// the generic AuthProvider only needs the minimal { id, name } shape.
|
|
9
|
+
const toUser = (meteorUser: Meteor.User | null): User | null => {
|
|
10
|
+
if (!meteorUser) return null;
|
|
11
|
+
return {
|
|
12
|
+
id: meteorUser._id,
|
|
13
|
+
name: meteorUser.username || meteorUser.emails?.[0]?.address || meteorUser._id,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type UserSelector = { username: string } | { email: string };
|
|
18
|
+
|
|
19
|
+
class AuthService {
|
|
20
|
+
static getUserQuerySelector(username: string): UserSelector {
|
|
21
|
+
// if the username is an email address, use the email field
|
|
22
|
+
if (username.indexOf('@') > -1) {
|
|
23
|
+
return { email: username };
|
|
24
|
+
} else {
|
|
25
|
+
return { username };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static async authenticateUser(username: string, password: string): Promise<User | null> {
|
|
30
|
+
// Implement Meteor-specific login logic
|
|
31
|
+
try {
|
|
32
|
+
const selector = AuthService.getUserQuerySelector(username);
|
|
33
|
+
return new Promise<User | null>((resolve, reject) => {
|
|
34
|
+
Meteor.loginWithPassword(selector, password, (error) => {
|
|
35
|
+
if (error) {
|
|
36
|
+
reject(error);
|
|
37
|
+
} else {
|
|
38
|
+
resolve(toUser(Meteor.user()));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Meteor authentication failed:', error);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static async authenticateToken(): Promise<User | null> {
|
|
50
|
+
// Implement token validation logic using Meteor
|
|
51
|
+
try {
|
|
52
|
+
return new Promise<User | null>((resolve, reject) => {
|
|
53
|
+
const token = localStorage.getItem('Meteor.loginToken');
|
|
54
|
+
if (token) {
|
|
55
|
+
Meteor.loginWithToken(token, (error) => {
|
|
56
|
+
if (error) {
|
|
57
|
+
reject(error);
|
|
58
|
+
}
|
|
59
|
+
resolve(toUser(Meteor.user()));
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
resolve(null);
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error('Token validation failed:', error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static async getUserAuthorizations(userId: string): Promise<string[]> {
|
|
71
|
+
// Implement logic to fetch user permissions from Meteor
|
|
72
|
+
try {
|
|
73
|
+
return new Promise<string[]>((resolve) => {
|
|
74
|
+
const roles = Roles.getRolesForUser(userId);
|
|
75
|
+
resolve(roles);
|
|
76
|
+
});
|
|
77
|
+
} catch (error) {
|
|
78
|
+
console.error('Failed to fetch user permissions:', error);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static async deauthenticateUser(): Promise<boolean> {
|
|
84
|
+
// Implement logout logic using Meteor
|
|
85
|
+
try {
|
|
86
|
+
return new Promise<boolean>((resolve, reject) => {
|
|
87
|
+
Meteor.logout((error) => {
|
|
88
|
+
if (error) {
|
|
89
|
+
reject(error);
|
|
90
|
+
}
|
|
91
|
+
resolve(true);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.error('Logout failed:', error);
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static async registerNewUser(username: string, password: string): Promise<User | null> {
|
|
101
|
+
try {
|
|
102
|
+
const selector = AuthService.getUserQuerySelector(username);
|
|
103
|
+
|
|
104
|
+
// Implement user registration logic using Meteor
|
|
105
|
+
// createUserAsync returns the new user's id and logs them in
|
|
106
|
+
await Accounts.createUserAsync({ ...selector, password });
|
|
107
|
+
return toUser(Meteor.user());
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error('Registration failed:', error);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static async sendForgotPasswordEmail(email: string): Promise<boolean> {
|
|
115
|
+
try {
|
|
116
|
+
// Implement password reset logic using Meteor
|
|
117
|
+
return new Promise<boolean>((resolve, reject) => {
|
|
118
|
+
Accounts.forgotPassword({ email }, (error) => {
|
|
119
|
+
if (error) {
|
|
120
|
+
reject(error);
|
|
121
|
+
} else {
|
|
122
|
+
resolve(true);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.error('Password reset failed:', error);
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
static async resetPasswordWithToken(token: string, password: string): Promise<User | null> {
|
|
133
|
+
try {
|
|
134
|
+
// Implement password reset logic using Meteor
|
|
135
|
+
await new Promise<void>((resolve, reject) => {
|
|
136
|
+
Accounts.resetPassword(token, password, (error) => {
|
|
137
|
+
if (error) {
|
|
138
|
+
reject(error);
|
|
139
|
+
} else {
|
|
140
|
+
resolve();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
// resetPassword logs the user in on success
|
|
145
|
+
return toUser(Meteor.user());
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error('Password reset failed:', error);
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export default AuthService;
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { Map } from '@esri/react-arcgis';
|
|
3
|
-
import { loadCss } from 'esri-loader';
|
|
4
|
-
|
|
5
|
-
const <%= componentName %> = () => {
|
|
6
|
-
const [mapHeight, setMapHeight] = useState('100vh');
|
|
7
|
-
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
loadCss();
|
|
10
|
-
|
|
11
|
-
// Check if an element with id "app-bar" exists
|
|
12
|
-
const appBar = document.getElementById('app-bar');
|
|
13
|
-
const footer = document.getElementById('footer');
|
|
14
|
-
if (appBar) {
|
|
15
|
-
const appBarHeight = appBar ? appBar.getBoundingClientRect().height : 0;
|
|
16
|
-
const footerHeight = footer ? footer.getBoundingClientRect().height : 0;
|
|
17
|
-
const windowHeight = window.innerHeight;
|
|
18
|
-
const adjustedHeight = windowHeight - appBarHeight - footerHeight;
|
|
19
|
-
setMapHeight(`${adjustedHeight}px`);
|
|
20
|
-
}
|
|
21
|
-
}, []); // Empty dependency array means this useEffect runs once, similar to componentDidMount
|
|
22
|
-
|
|
23
|
-
return (
|
|
24
|
-
<Map style={{ width: '100%', height: mapHeight }} />
|
|
25
|
-
);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { <%= componentName %> }
|
|
29
|
-
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Map } from '@esri/react-arcgis';
|
|
3
|
+
import { loadCss } from 'esri-loader';
|
|
4
|
+
|
|
5
|
+
const <%= componentName %> = () => {
|
|
6
|
+
const [mapHeight, setMapHeight] = useState('100vh');
|
|
7
|
+
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
loadCss();
|
|
10
|
+
|
|
11
|
+
// Check if an element with id "app-bar" exists
|
|
12
|
+
const appBar = document.getElementById('app-bar');
|
|
13
|
+
const footer = document.getElementById('footer');
|
|
14
|
+
if (appBar) {
|
|
15
|
+
const appBarHeight = appBar ? appBar.getBoundingClientRect().height : 0;
|
|
16
|
+
const footerHeight = footer ? footer.getBoundingClientRect().height : 0;
|
|
17
|
+
const windowHeight = window.innerHeight;
|
|
18
|
+
const adjustedHeight = windowHeight - appBarHeight - footerHeight;
|
|
19
|
+
setMapHeight(`${adjustedHeight}px`);
|
|
20
|
+
}
|
|
21
|
+
}, []); // Empty dependency array means this useEffect runs once, similar to componentDidMount
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Map style={{ width: '100%', height: mapHeight }} />
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { <%= componentName %> }
|
|
29
|
+
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { Map } from '@esri/react-arcgis';
|
|
3
|
-
import { loadCss } from 'esri-loader';
|
|
4
|
-
|
|
5
|
-
if (module.hot) {
|
|
6
|
-
module.hot.decline();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const <%= componentName %> = () => {
|
|
10
|
-
const [mapHeight, setMapHeight] = useState('100vh');
|
|
11
|
-
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
loadCss();
|
|
14
|
-
|
|
15
|
-
// Check if an element with id "app-bar" exists
|
|
16
|
-
const appBar = document.getElementById('app-bar');
|
|
17
|
-
const footer = document.getElementById('footer');
|
|
18
|
-
if (appBar) {
|
|
19
|
-
const appBarHeight = appBar ? appBar.getBoundingClientRect().height : 0;
|
|
20
|
-
const footerHeight = footer ? footer.getBoundingClientRect().height : 0;
|
|
21
|
-
const windowHeight = window.innerHeight;
|
|
22
|
-
const adjustedHeight = windowHeight - appBarHeight - footerHeight;
|
|
23
|
-
setMapHeight(`${adjustedHeight}px`);
|
|
24
|
-
}
|
|
25
|
-
}, []); // Empty dependency array means this useEffect runs once, similar to componentDidMount
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<Map style={{ width: '100%', height: mapHeight }} />
|
|
29
|
-
);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export { <%= componentName %> }
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Map } from '@esri/react-arcgis';
|
|
3
|
+
import { loadCss } from 'esri-loader';
|
|
4
|
+
|
|
5
|
+
if (module.hot) {
|
|
6
|
+
module.hot.decline();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const <%= componentName %> = () => {
|
|
10
|
+
const [mapHeight, setMapHeight] = useState('100vh');
|
|
11
|
+
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
loadCss();
|
|
14
|
+
|
|
15
|
+
// Check if an element with id "app-bar" exists
|
|
16
|
+
const appBar = document.getElementById('app-bar');
|
|
17
|
+
const footer = document.getElementById('footer');
|
|
18
|
+
if (appBar) {
|
|
19
|
+
const appBarHeight = appBar ? appBar.getBoundingClientRect().height : 0;
|
|
20
|
+
const footerHeight = footer ? footer.getBoundingClientRect().height : 0;
|
|
21
|
+
const windowHeight = window.innerHeight;
|
|
22
|
+
const adjustedHeight = windowHeight - appBarHeight - footerHeight;
|
|
23
|
+
setMapHeight(`${adjustedHeight}px`);
|
|
24
|
+
}
|
|
25
|
+
}, []); // Empty dependency array means this useEffect runs once, similar to componentDidMount
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<Map style={{ width: '100%', height: mapHeight }} />
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { <%= componentName %> }
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
#<%= fileName %> {
|
|
2
|
-
width: 100%;
|
|
3
|
-
min-height: 100vh;
|
|
4
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
5
|
-
padding: 20px;
|
|
6
|
-
box-sizing: border-box;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.<%= fileName %>-header {
|
|
10
|
-
display: flex;
|
|
11
|
-
justify-content: space-between;
|
|
12
|
-
align-items: center;
|
|
13
|
-
background: rgba(255, 255, 255, 0.95);
|
|
14
|
-
padding: 15px 25px;
|
|
15
|
-
border-radius: 8px;
|
|
16
|
-
margin-bottom: 20px;
|
|
17
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
18
|
-
flex-wrap: wrap;
|
|
19
|
-
gap: 15px;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.<%= fileName %>-header h1 {
|
|
23
|
-
margin: 0;
|
|
24
|
-
font-size: 24px;
|
|
25
|
-
color: #333;
|
|
26
|
-
font-weight: 600;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.frames-container {
|
|
30
|
-
position: relative;
|
|
31
|
-
width: 100%;
|
|
32
|
-
min-height: calc(100vh - 120px);
|
|
33
|
-
background: rgba(255, 255, 255, 0.1);
|
|
34
|
-
border-radius: 8px;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.frame-content {
|
|
39
|
-
padding: 20px;
|
|
40
|
-
height: 100%;
|
|
41
|
-
overflow: auto;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.frame-content h3 {
|
|
45
|
-
margin-top: 0;
|
|
46
|
-
color: #333;
|
|
47
|
-
font-size: 18px;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.frame-content p {
|
|
51
|
-
margin: 10px 0;
|
|
52
|
-
color: #666;
|
|
53
|
-
line-height: 1.6;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.frame-content code {
|
|
57
|
-
background: #f4f4f4;
|
|
58
|
-
padding: 2px 6px;
|
|
59
|
-
border-radius: 3px;
|
|
60
|
-
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
61
|
-
font-size: 13px;
|
|
62
|
-
color: #e83e8c;
|
|
63
|
-
}
|
|
1
|
+
#<%= fileName %> {
|
|
2
|
+
width: 100%;
|
|
3
|
+
min-height: 100vh;
|
|
4
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
5
|
+
padding: 20px;
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.<%= fileName %>-header {
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: space-between;
|
|
12
|
+
align-items: center;
|
|
13
|
+
background: rgba(255, 255, 255, 0.95);
|
|
14
|
+
padding: 15px 25px;
|
|
15
|
+
border-radius: 8px;
|
|
16
|
+
margin-bottom: 20px;
|
|
17
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
18
|
+
flex-wrap: wrap;
|
|
19
|
+
gap: 15px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.<%= fileName %>-header h1 {
|
|
23
|
+
margin: 0;
|
|
24
|
+
font-size: 24px;
|
|
25
|
+
color: #333;
|
|
26
|
+
font-weight: 600;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.frames-container {
|
|
30
|
+
position: relative;
|
|
31
|
+
width: 100%;
|
|
32
|
+
min-height: calc(100vh - 120px);
|
|
33
|
+
background: rgba(255, 255, 255, 0.1);
|
|
34
|
+
border-radius: 8px;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.frame-content {
|
|
39
|
+
padding: 20px;
|
|
40
|
+
height: 100%;
|
|
41
|
+
overflow: auto;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.frame-content h3 {
|
|
45
|
+
margin-top: 0;
|
|
46
|
+
color: #333;
|
|
47
|
+
font-size: 18px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.frame-content p {
|
|
51
|
+
margin: 10px 0;
|
|
52
|
+
color: #666;
|
|
53
|
+
line-height: 1.6;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.frame-content code {
|
|
57
|
+
background: #f4f4f4;
|
|
58
|
+
padding: 2px 6px;
|
|
59
|
+
border-radius: 3px;
|
|
60
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
61
|
+
font-size: 13px;
|
|
62
|
+
color: #e83e8c;
|
|
63
|
+
}
|