@redhat-cloud-services/hcc-storybook-hub 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 +60 -0
- package/dist/FeatureFlagsProvider-C_Xxe83Z.d.mts +12 -0
- package/dist/FeatureFlagsProvider-C_Xxe83Z.d.ts +12 -0
- package/dist/chunk-EPJ4YIIZ.mjs +101 -0
- package/dist/chunk-KVKMLDB5.js +58 -0
- package/dist/chunk-NXYQ66I7.js +13 -0
- package/dist/chunk-UCQY2VRL.mjs +58 -0
- package/dist/chunk-WZJQMQID.mjs +13 -0
- package/dist/chunk-YTIDUO5E.js +101 -0
- package/dist/index.d.mts +149 -0
- package/dist/index.d.ts +149 -0
- package/dist/index.js +97 -0
- package/dist/index.mjs +97 -0
- package/dist/main-config.d.mts +17 -0
- package/dist/main-config.d.ts +17 -0
- package/dist/main-config.js +96 -0
- package/dist/main-config.mjs +96 -0
- package/dist/mocks/RBACHook.d.mts +7 -0
- package/dist/mocks/RBACHook.d.ts +7 -0
- package/dist/mocks/RBACHook.js +26 -0
- package/dist/mocks/RBACHook.mjs +26 -0
- package/dist/mocks/kesselAccessCheck.d.mts +49 -0
- package/dist/mocks/kesselAccessCheck.d.ts +49 -0
- package/dist/mocks/kesselAccessCheck.js +60 -0
- package/dist/mocks/kesselAccessCheck.mjs +60 -0
- package/dist/mocks/unleash.d.mts +18 -0
- package/dist/mocks/unleash.d.ts +18 -0
- package/dist/mocks/unleash.js +25 -0
- package/dist/mocks/unleash.mjs +25 -0
- package/dist/mocks/useChrome.d.mts +13 -0
- package/dist/mocks/useChrome.d.ts +13 -0
- package/dist/mocks/useChrome.js +12 -0
- package/dist/mocks/useChrome.mjs +12 -0
- package/lib/css/storybook.css +295 -0
- package/package.json +49 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
interface Resource {
|
|
5
|
+
id: string;
|
|
6
|
+
type: string;
|
|
7
|
+
reporter?: {
|
|
8
|
+
type: string;
|
|
9
|
+
};
|
|
10
|
+
relation?: string;
|
|
11
|
+
}
|
|
12
|
+
interface AccessCheckResult {
|
|
13
|
+
resource: Resource;
|
|
14
|
+
allowed: boolean;
|
|
15
|
+
relation: string;
|
|
16
|
+
}
|
|
17
|
+
type SingleParams = {
|
|
18
|
+
relation: string;
|
|
19
|
+
resource: Resource;
|
|
20
|
+
};
|
|
21
|
+
type BulkWithTopRelation = {
|
|
22
|
+
relation: string;
|
|
23
|
+
resources: Resource[];
|
|
24
|
+
};
|
|
25
|
+
type BulkWithPerResourceRelation = {
|
|
26
|
+
resources: (Resource & {
|
|
27
|
+
relation: string;
|
|
28
|
+
})[];
|
|
29
|
+
};
|
|
30
|
+
type UseSelfAccessCheckOptions = SingleParams | BulkWithTopRelation | BulkWithPerResourceRelation;
|
|
31
|
+
declare const useSelfAccessCheck: (params: UseSelfAccessCheckOptions) => {
|
|
32
|
+
data: {
|
|
33
|
+
resource: Resource;
|
|
34
|
+
allowed: boolean;
|
|
35
|
+
};
|
|
36
|
+
loading: boolean;
|
|
37
|
+
} | {
|
|
38
|
+
data: AccessCheckResult[];
|
|
39
|
+
loading: boolean;
|
|
40
|
+
};
|
|
41
|
+
declare const AccessCheck: {
|
|
42
|
+
Provider: ({ children }: {
|
|
43
|
+
children: React.ReactNode;
|
|
44
|
+
baseUrl?: string;
|
|
45
|
+
apiPath?: string;
|
|
46
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { AccessCheck, useSelfAccessCheck };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
interface Resource {
|
|
5
|
+
id: string;
|
|
6
|
+
type: string;
|
|
7
|
+
reporter?: {
|
|
8
|
+
type: string;
|
|
9
|
+
};
|
|
10
|
+
relation?: string;
|
|
11
|
+
}
|
|
12
|
+
interface AccessCheckResult {
|
|
13
|
+
resource: Resource;
|
|
14
|
+
allowed: boolean;
|
|
15
|
+
relation: string;
|
|
16
|
+
}
|
|
17
|
+
type SingleParams = {
|
|
18
|
+
relation: string;
|
|
19
|
+
resource: Resource;
|
|
20
|
+
};
|
|
21
|
+
type BulkWithTopRelation = {
|
|
22
|
+
relation: string;
|
|
23
|
+
resources: Resource[];
|
|
24
|
+
};
|
|
25
|
+
type BulkWithPerResourceRelation = {
|
|
26
|
+
resources: (Resource & {
|
|
27
|
+
relation: string;
|
|
28
|
+
})[];
|
|
29
|
+
};
|
|
30
|
+
type UseSelfAccessCheckOptions = SingleParams | BulkWithTopRelation | BulkWithPerResourceRelation;
|
|
31
|
+
declare const useSelfAccessCheck: (params: UseSelfAccessCheckOptions) => {
|
|
32
|
+
data: {
|
|
33
|
+
resource: Resource;
|
|
34
|
+
allowed: boolean;
|
|
35
|
+
};
|
|
36
|
+
loading: boolean;
|
|
37
|
+
} | {
|
|
38
|
+
data: AccessCheckResult[];
|
|
39
|
+
loading: boolean;
|
|
40
|
+
};
|
|
41
|
+
declare const AccessCheck: {
|
|
42
|
+
Provider: ({ children }: {
|
|
43
|
+
children: React.ReactNode;
|
|
44
|
+
baseUrl?: string;
|
|
45
|
+
apiPath?: string;
|
|
46
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { AccessCheck, useSelfAccessCheck };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkKVKMLDB5js = require('../chunk-KVKMLDB5.js');
|
|
4
|
+
|
|
5
|
+
// lib/mocks/kesselAccessCheck.tsx
|
|
6
|
+
var _react = require('react');
|
|
7
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
8
|
+
function checkTenantPermission(relation, tenantPerms) {
|
|
9
|
+
return _nullishCoalesce(tenantPerms[relation], () => ( false));
|
|
10
|
+
}
|
|
11
|
+
function checkWorkspacePermission(relation, resourceId, wsPerms) {
|
|
12
|
+
const wsRelMap = {
|
|
13
|
+
rbac_workspace_view: "view",
|
|
14
|
+
rbac_workspace_edit: "edit",
|
|
15
|
+
rbac_workspace_create: "create",
|
|
16
|
+
rbac_workspace_delete: "delete",
|
|
17
|
+
rbac_workspace_move: "move",
|
|
18
|
+
rbac_workspaces_role_binding_view: "view",
|
|
19
|
+
rbac_workspaces_role_binding_grant: "edit",
|
|
20
|
+
rbac_workspaces_role_binding_revoke: "edit",
|
|
21
|
+
rbac_workspaces_role_binding_update: "edit",
|
|
22
|
+
view: "view",
|
|
23
|
+
edit: "edit",
|
|
24
|
+
create: "create",
|
|
25
|
+
delete: "delete",
|
|
26
|
+
move: "move"
|
|
27
|
+
};
|
|
28
|
+
const key = wsRelMap[relation];
|
|
29
|
+
if (!key) return false;
|
|
30
|
+
return _nullishCoalesce(_optionalChain([wsPerms, 'access', _ => _[key], 'optionalAccess', _2 => _2.includes, 'call', _3 => _3(resourceId)]), () => ( false));
|
|
31
|
+
}
|
|
32
|
+
var useSelfAccessCheck = (params) => {
|
|
33
|
+
const mock = _chunkKVKMLDB5js.useMockState.call(void 0, );
|
|
34
|
+
const mockRef = _react.useRef.call(void 0, mock);
|
|
35
|
+
mockRef.current = mock;
|
|
36
|
+
const resolvePermission = (relation, resource) => {
|
|
37
|
+
if (resource.type === "tenant") return checkTenantPermission(relation, mockRef.current.tenantPermissions);
|
|
38
|
+
return checkWorkspacePermission(relation, resource.id, mockRef.current.workspacePermissions);
|
|
39
|
+
};
|
|
40
|
+
if ("resource" in params && !("resources" in params)) {
|
|
41
|
+
const { relation, resource } = params;
|
|
42
|
+
const allowed = resolvePermission(relation, resource);
|
|
43
|
+
return { data: { resource, allowed }, loading: false };
|
|
44
|
+
}
|
|
45
|
+
const rawResources = params.resources;
|
|
46
|
+
const topRelation = "relation" in params ? params.relation : void 0;
|
|
47
|
+
const data = rawResources.map((resource) => {
|
|
48
|
+
const relation = _nullishCoalesce(_nullishCoalesce(resource.relation, () => ( topRelation)), () => ( ""));
|
|
49
|
+
const allowed = resolvePermission(relation, resource);
|
|
50
|
+
return { resource, allowed, relation };
|
|
51
|
+
});
|
|
52
|
+
return { data, loading: false };
|
|
53
|
+
};
|
|
54
|
+
var AccessCheck = {
|
|
55
|
+
Provider: ({ children }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children })
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
exports.AccessCheck = AccessCheck; exports.useSelfAccessCheck = useSelfAccessCheck;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useMockState
|
|
3
|
+
} from "../chunk-UCQY2VRL.mjs";
|
|
4
|
+
|
|
5
|
+
// lib/mocks/kesselAccessCheck.tsx
|
|
6
|
+
import { useRef } from "react";
|
|
7
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
8
|
+
function checkTenantPermission(relation, tenantPerms) {
|
|
9
|
+
return tenantPerms[relation] ?? false;
|
|
10
|
+
}
|
|
11
|
+
function checkWorkspacePermission(relation, resourceId, wsPerms) {
|
|
12
|
+
const wsRelMap = {
|
|
13
|
+
rbac_workspace_view: "view",
|
|
14
|
+
rbac_workspace_edit: "edit",
|
|
15
|
+
rbac_workspace_create: "create",
|
|
16
|
+
rbac_workspace_delete: "delete",
|
|
17
|
+
rbac_workspace_move: "move",
|
|
18
|
+
rbac_workspaces_role_binding_view: "view",
|
|
19
|
+
rbac_workspaces_role_binding_grant: "edit",
|
|
20
|
+
rbac_workspaces_role_binding_revoke: "edit",
|
|
21
|
+
rbac_workspaces_role_binding_update: "edit",
|
|
22
|
+
view: "view",
|
|
23
|
+
edit: "edit",
|
|
24
|
+
create: "create",
|
|
25
|
+
delete: "delete",
|
|
26
|
+
move: "move"
|
|
27
|
+
};
|
|
28
|
+
const key = wsRelMap[relation];
|
|
29
|
+
if (!key) return false;
|
|
30
|
+
return wsPerms[key]?.includes(resourceId) ?? false;
|
|
31
|
+
}
|
|
32
|
+
var useSelfAccessCheck = (params) => {
|
|
33
|
+
const mock = useMockState();
|
|
34
|
+
const mockRef = useRef(mock);
|
|
35
|
+
mockRef.current = mock;
|
|
36
|
+
const resolvePermission = (relation, resource) => {
|
|
37
|
+
if (resource.type === "tenant") return checkTenantPermission(relation, mockRef.current.tenantPermissions);
|
|
38
|
+
return checkWorkspacePermission(relation, resource.id, mockRef.current.workspacePermissions);
|
|
39
|
+
};
|
|
40
|
+
if ("resource" in params && !("resources" in params)) {
|
|
41
|
+
const { relation, resource } = params;
|
|
42
|
+
const allowed = resolvePermission(relation, resource);
|
|
43
|
+
return { data: { resource, allowed }, loading: false };
|
|
44
|
+
}
|
|
45
|
+
const rawResources = params.resources;
|
|
46
|
+
const topRelation = "relation" in params ? params.relation : void 0;
|
|
47
|
+
const data = rawResources.map((resource) => {
|
|
48
|
+
const relation = resource.relation ?? topRelation ?? "";
|
|
49
|
+
const allowed = resolvePermission(relation, resource);
|
|
50
|
+
return { resource, allowed, relation };
|
|
51
|
+
});
|
|
52
|
+
return { data, loading: false };
|
|
53
|
+
};
|
|
54
|
+
var AccessCheck = {
|
|
55
|
+
Provider: ({ children }) => /* @__PURE__ */ jsx(Fragment, { children })
|
|
56
|
+
};
|
|
57
|
+
export {
|
|
58
|
+
AccessCheck,
|
|
59
|
+
useSelfAccessCheck
|
|
60
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { b as FlagProvider, b as IFlagProvider } from '../FeatureFlagsProvider-C_Xxe83Z.mjs';
|
|
2
|
+
import 'react';
|
|
3
|
+
|
|
4
|
+
declare const useFlag: (flagName: string) => boolean;
|
|
5
|
+
declare const UnleashClient: {
|
|
6
|
+
new (): {};
|
|
7
|
+
};
|
|
8
|
+
declare const useUnleashContext: () => {};
|
|
9
|
+
declare const useVariant: () => {
|
|
10
|
+
name: string;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const useFlagsStatus: () => {
|
|
14
|
+
flagsReady: boolean;
|
|
15
|
+
flagsError: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { UnleashClient, useFlag, useFlagsStatus, useUnleashContext, useVariant };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { b as FlagProvider, b as IFlagProvider } from '../FeatureFlagsProvider-C_Xxe83Z.js';
|
|
2
|
+
import 'react';
|
|
3
|
+
|
|
4
|
+
declare const useFlag: (flagName: string) => boolean;
|
|
5
|
+
declare const UnleashClient: {
|
|
6
|
+
new (): {};
|
|
7
|
+
};
|
|
8
|
+
declare const useUnleashContext: () => {};
|
|
9
|
+
declare const useVariant: () => {
|
|
10
|
+
name: string;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const useFlagsStatus: () => {
|
|
14
|
+
flagsReady: boolean;
|
|
15
|
+
flagsError: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { UnleashClient, useFlag, useFlagsStatus, useUnleashContext, useVariant };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkNXYQ66I7js = require('../chunk-NXYQ66I7.js');
|
|
5
|
+
|
|
6
|
+
// lib/mocks/unleash.ts
|
|
7
|
+
var _react = require('react');
|
|
8
|
+
var useFlag = (flagName) => {
|
|
9
|
+
const flags = _react.useContext.call(void 0, _chunkNXYQ66I7js.FeatureFlagsContext);
|
|
10
|
+
return flags[flagName] || false;
|
|
11
|
+
};
|
|
12
|
+
var UnleashClient = class {
|
|
13
|
+
};
|
|
14
|
+
var useUnleashContext = () => ({});
|
|
15
|
+
var useVariant = () => ({ name: "disabled", enabled: false });
|
|
16
|
+
var useFlagsStatus = () => ({ flagsReady: true, flagsError: false });
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
exports.FlagProvider = _chunkNXYQ66I7js.FeatureFlagsProvider; exports.IFlagProvider = _chunkNXYQ66I7js.FeatureFlagsProvider; exports.UnleashClient = UnleashClient; exports.useFlag = useFlag; exports.useFlagsStatus = useFlagsStatus; exports.useUnleashContext = useUnleashContext; exports.useVariant = useVariant;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FeatureFlagsContext,
|
|
3
|
+
FeatureFlagsProvider
|
|
4
|
+
} from "../chunk-WZJQMQID.mjs";
|
|
5
|
+
|
|
6
|
+
// lib/mocks/unleash.ts
|
|
7
|
+
import { useContext } from "react";
|
|
8
|
+
var useFlag = (flagName) => {
|
|
9
|
+
const flags = useContext(FeatureFlagsContext);
|
|
10
|
+
return flags[flagName] || false;
|
|
11
|
+
};
|
|
12
|
+
var UnleashClient = class {
|
|
13
|
+
};
|
|
14
|
+
var useUnleashContext = () => ({});
|
|
15
|
+
var useVariant = () => ({ name: "disabled", enabled: false });
|
|
16
|
+
var useFlagsStatus = () => ({ flagsReady: true, flagsError: false });
|
|
17
|
+
export {
|
|
18
|
+
FeatureFlagsProvider as FlagProvider,
|
|
19
|
+
FeatureFlagsProvider as IFlagProvider,
|
|
20
|
+
UnleashClient,
|
|
21
|
+
useFlag,
|
|
22
|
+
useFlagsStatus,
|
|
23
|
+
useUnleashContext,
|
|
24
|
+
useVariant
|
|
25
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as _vitest_spy from '@vitest/spy';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
declare const chromeAppNavClickSpy: _vitest_spy.Mock<(...args: any[]) => any>;
|
|
5
|
+
interface ChromeConfig {
|
|
6
|
+
bundle?: string;
|
|
7
|
+
app?: string;
|
|
8
|
+
quickStartsCatalog?: React.FC;
|
|
9
|
+
}
|
|
10
|
+
declare function configureChromeMock(config: ChromeConfig): void;
|
|
11
|
+
declare function useChrome(): any;
|
|
12
|
+
|
|
13
|
+
export { chromeAppNavClickSpy, configureChromeMock, useChrome as default, useChrome };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as _vitest_spy from '@vitest/spy';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
declare const chromeAppNavClickSpy: _vitest_spy.Mock<(...args: any[]) => any>;
|
|
5
|
+
interface ChromeConfig {
|
|
6
|
+
bundle?: string;
|
|
7
|
+
app?: string;
|
|
8
|
+
quickStartsCatalog?: React.FC;
|
|
9
|
+
}
|
|
10
|
+
declare function configureChromeMock(config: ChromeConfig): void;
|
|
11
|
+
declare function useChrome(): any;
|
|
12
|
+
|
|
13
|
+
export { chromeAppNavClickSpy, configureChromeMock, useChrome as default, useChrome };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkYTIDUO5Ejs = require('../chunk-YTIDUO5E.js');
|
|
6
|
+
require('../chunk-KVKMLDB5.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.chromeAppNavClickSpy = _chunkYTIDUO5Ejs.chromeAppNavClickSpy; exports.configureChromeMock = _chunkYTIDUO5Ejs.configureChromeMock; exports.default = _chunkYTIDUO5Ejs.useChrome; exports.useChrome = _chunkYTIDUO5Ejs.useChrome;
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/* Custom Storybook Styling */
|
|
2
|
+
|
|
3
|
+
/* Container improvements */
|
|
4
|
+
.storybook-container {
|
|
5
|
+
padding: 1rem;
|
|
6
|
+
min-height: 100vh;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Documentation improvements */
|
|
11
|
+
.docs-story {
|
|
12
|
+
background: #ffffff;
|
|
13
|
+
border-radius: 8px;
|
|
14
|
+
padding: 2rem;
|
|
15
|
+
margin: 1rem 0;
|
|
16
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
17
|
+
border: 1px solid #e8e8e8;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Enhanced code blocks */
|
|
21
|
+
.docblock-code-toggle {
|
|
22
|
+
background: #f8f9fa;
|
|
23
|
+
border: 1px solid #e9ecef;
|
|
24
|
+
border-radius: 6px;
|
|
25
|
+
margin: 1rem 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.prismjs {
|
|
29
|
+
background: #f8f9fa !important;
|
|
30
|
+
border-radius: 6px;
|
|
31
|
+
border: 1px solid #e9ecef;
|
|
32
|
+
font-size: 0.875rem;
|
|
33
|
+
line-height: 1.5;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Story canvas improvements */
|
|
37
|
+
.docs-story > div {
|
|
38
|
+
background: transparent;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Controls panel styling */
|
|
42
|
+
.sidebar-item {
|
|
43
|
+
border-radius: 4px;
|
|
44
|
+
margin-bottom: 2px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Better typography in docs */
|
|
48
|
+
.sbdocs-content h1 {
|
|
49
|
+
color: #151515;
|
|
50
|
+
font-weight: 600;
|
|
51
|
+
margin-bottom: 1rem;
|
|
52
|
+
border-bottom: 2px solid #0066cc;
|
|
53
|
+
padding-bottom: 0.5rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.sbdocs-content h2 {
|
|
57
|
+
color: #333;
|
|
58
|
+
font-weight: 500;
|
|
59
|
+
margin-top: 2rem;
|
|
60
|
+
margin-bottom: 1rem;
|
|
61
|
+
border-left: 4px solid #0066cc;
|
|
62
|
+
padding-left: 1rem;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.sbdocs-content h3 {
|
|
66
|
+
color: #444;
|
|
67
|
+
font-weight: 500;
|
|
68
|
+
margin-top: 1.5rem;
|
|
69
|
+
margin-bottom: 0.75rem;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Enhanced table styling */
|
|
73
|
+
.docblock-argstable {
|
|
74
|
+
border: 1px solid #e8e8e8;
|
|
75
|
+
border-radius: 8px;
|
|
76
|
+
overflow: hidden;
|
|
77
|
+
margin: 1rem 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.docblock-argstable-head {
|
|
81
|
+
background: #f8f9fa;
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.docblock-argstable-body .docblock-argstable-row {
|
|
86
|
+
border-bottom: 1px solid #f0f0f0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.docblock-argstable-body .docblock-argstable-row:hover {
|
|
90
|
+
background: #fafafa;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Story preview improvements */
|
|
94
|
+
.sb-show-main {
|
|
95
|
+
background: #ffffff;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* Sidebar improvements */
|
|
99
|
+
.sidebar-container {
|
|
100
|
+
background: #fafafa;
|
|
101
|
+
border-right: 1px solid #e8e8e8;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.sidebar-item[data-selected="true"] {
|
|
105
|
+
background: #e3f2fd;
|
|
106
|
+
color: #0066cc;
|
|
107
|
+
font-weight: 500;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Toolbar improvements */
|
|
111
|
+
.sb-bar {
|
|
112
|
+
background: #ffffff;
|
|
113
|
+
border-bottom: 1px solid #e8e8e8;
|
|
114
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* Controls improvements */
|
|
118
|
+
.docblock-argstable-category {
|
|
119
|
+
background: #f0f8ff;
|
|
120
|
+
color: #0066cc;
|
|
121
|
+
font-weight: 600;
|
|
122
|
+
text-transform: uppercase;
|
|
123
|
+
font-size: 0.75rem;
|
|
124
|
+
letter-spacing: 0.5px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Badge styling for component status */
|
|
128
|
+
.component-badge {
|
|
129
|
+
display: inline-block;
|
|
130
|
+
padding: 0.25rem 0.5rem;
|
|
131
|
+
border-radius: 12px;
|
|
132
|
+
font-size: 0.75rem;
|
|
133
|
+
font-weight: 500;
|
|
134
|
+
text-transform: uppercase;
|
|
135
|
+
letter-spacing: 0.5px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.component-badge--stable {
|
|
139
|
+
background: #d4edda;
|
|
140
|
+
color: #155724;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.component-badge--beta {
|
|
144
|
+
background: #fff3cd;
|
|
145
|
+
color: #856404;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.component-badge--deprecated {
|
|
149
|
+
background: #f8d7da;
|
|
150
|
+
color: #721c24;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Enhanced spacing for better readability */
|
|
154
|
+
.sbdocs-content > * + * {
|
|
155
|
+
margin-top: 1.5rem;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.sbdocs-content ul, .sbdocs-content ol {
|
|
159
|
+
padding-left: 2rem;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.sbdocs-content li {
|
|
163
|
+
margin-bottom: 0.5rem;
|
|
164
|
+
line-height: 1.6;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Code inline styling */
|
|
168
|
+
.sbdocs-content code:not([class]) {
|
|
169
|
+
background: #f8f9fa;
|
|
170
|
+
color: #e83e8c;
|
|
171
|
+
padding: 0.2rem 0.4rem;
|
|
172
|
+
border-radius: 4px;
|
|
173
|
+
font-size: 0.875em;
|
|
174
|
+
border: 1px solid #e9ecef;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* Blockquote styling */
|
|
178
|
+
.sbdocs-content blockquote {
|
|
179
|
+
border-left: 4px solid #0066cc;
|
|
180
|
+
padding-left: 1rem;
|
|
181
|
+
margin: 1.5rem 0;
|
|
182
|
+
color: #666;
|
|
183
|
+
font-style: italic;
|
|
184
|
+
background: #f8f9fa;
|
|
185
|
+
padding: 1rem;
|
|
186
|
+
border-radius: 0 4px 4px 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Link styling */
|
|
190
|
+
.sbdocs-content a {
|
|
191
|
+
color: #0066cc;
|
|
192
|
+
text-decoration: none;
|
|
193
|
+
border-bottom: 1px solid transparent;
|
|
194
|
+
transition: border-color 0.2s ease;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.sbdocs-content a:hover {
|
|
198
|
+
border-bottom-color: #0066cc;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Responsive improvements */
|
|
202
|
+
@media (max-width: 768px) {
|
|
203
|
+
.storybook-container {
|
|
204
|
+
padding: 0.5rem;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.docs-story {
|
|
208
|
+
padding: 1rem;
|
|
209
|
+
margin: 0.5rem 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.sbdocs-content h1 {
|
|
213
|
+
font-size: 1.5rem;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.sbdocs-content h2 {
|
|
217
|
+
font-size: 1.25rem;
|
|
218
|
+
margin-top: 1.5rem;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Dark mode support */
|
|
223
|
+
@media (prefers-color-scheme: dark) {
|
|
224
|
+
.docs-story {
|
|
225
|
+
background: #1a1a1a;
|
|
226
|
+
border-color: #333;
|
|
227
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.sbdocs-content h1,
|
|
231
|
+
.sbdocs-content h2,
|
|
232
|
+
.sbdocs-content h3 {
|
|
233
|
+
color: #ffffff;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.docblock-argstable {
|
|
237
|
+
border-color: #333;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.docblock-argstable-head {
|
|
241
|
+
background: #2a2a2a;
|
|
242
|
+
color: #ffffff;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.docblock-argstable-body .docblock-argstable-row:hover {
|
|
246
|
+
background: #2a2a2a;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.prismjs {
|
|
250
|
+
background: #1a1a1a !important;
|
|
251
|
+
border-color: #333;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.sbdocs-content code:not([class]) {
|
|
255
|
+
background: #2a2a2a;
|
|
256
|
+
color: #ff6b6b;
|
|
257
|
+
border-color: #333;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.sbdocs-content blockquote {
|
|
261
|
+
background: #2a2a2a;
|
|
262
|
+
color: #ccc;
|
|
263
|
+
border-left-color: #0088ff;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* Animation improvements */
|
|
268
|
+
.sidebar-item,
|
|
269
|
+
.docblock-argstable-body .docblock-argstable-row,
|
|
270
|
+
.sbdocs-content a,
|
|
271
|
+
.component-badge {
|
|
272
|
+
transition: all 0.2s ease;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/* Focus improvements for accessibility */
|
|
276
|
+
.sidebar-item:focus,
|
|
277
|
+
.docblock-argstable button:focus,
|
|
278
|
+
.sbdocs-content a:focus {
|
|
279
|
+
outline: 2px solid #0088ff;
|
|
280
|
+
outline-offset: 2px;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* Print styles */
|
|
284
|
+
@media print {
|
|
285
|
+
.sb-bar,
|
|
286
|
+
.sidebar-container {
|
|
287
|
+
display: none !important;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.docs-story {
|
|
291
|
+
box-shadow: none;
|
|
292
|
+
border: 1px solid #ccc;
|
|
293
|
+
break-inside: avoid;
|
|
294
|
+
}
|
|
295
|
+
}
|