@repobit/dex-system-design 0.24.4 → 0.24.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/package.json +4 -4
- package/src/components/accordion/accordion.css.js +40 -0
- package/src/components/accordion/accordion.js +31 -0
- package/src/components/accordion/accordion.stories.js +147 -4
- package/src/components/agent-endpoints/agent-endpoints.css.js +92 -0
- package/src/components/agent-endpoints/agent-endpoints.js +86 -0
- package/src/components/agent-endpoints/agent-endpoints.stories.js +148 -0
- package/src/components/ai-guardian-demo.stories.js +848 -0
- package/src/components/awards/awards-flex.css.js +169 -0
- package/src/components/awards/awards-flex.js +269 -0
- package/src/components/awards/awards-flex.stories.js +657 -0
- package/src/components/bento-grid/bento-grid.css.js +57 -0
- package/src/components/bento-grid/bento-grid.js +186 -0
- package/src/components/bento-grid/bento-grid.stories.js +440 -0
- package/src/components/bento-grid/bento-item.css.js +105 -0
- package/src/components/bento-grid/bento-item.js +57 -0
- package/src/components/button/button.css.js +26 -0
- package/src/components/button/button.js +8 -0
- package/src/components/button/button.stories.js +12 -0
- package/src/components/comparison-panel/comparison-panel.css.js +104 -0
- package/src/components/comparison-panel/comparison-panel.js +100 -0
- package/src/components/comparison-panel/comparison-panel.stories.js +223 -0
- package/src/components/compatibility-table/compatibility-table.css.js +243 -0
- package/src/components/compatibility-table/compatibility-table.js +123 -0
- package/src/components/compatibility-table/compatibility-table.stories.js +189 -0
- package/src/components/cta-banner/cta-banner.css.js +60 -0
- package/src/components/cta-banner/cta-banner.js +63 -0
- package/src/components/dropdown/dropdown.css.js +1 -1
- package/src/components/footer/footer.css.js +0 -1
- package/src/components/header/header-code.css.js +125 -0
- package/src/components/header/header-code.js +69 -0
- package/src/components/header/header-code.stories.js +226 -0
- package/src/components/heading/heading.css.js +3 -0
- package/src/components/icons/bd-ai-icon.js +27 -0
- package/src/components/icons/quote-icon.js +28 -0
- package/src/components/install-options/install-options.css.js +276 -0
- package/src/components/install-options/install-options.js +184 -0
- package/src/components/list/list-item/list-item.css.js +3 -3
- package/src/components/list/list-item/list-item.js +10 -4
- package/src/components/overview/overview.css.js +121 -0
- package/src/components/overview/overview.js +63 -0
- package/src/components/overview/overview.stories.js +193 -0
- package/src/components/page-switcher/page-switcher.css.js +100 -0
- package/src/components/page-switcher/page-switcher.js +42 -0
- package/src/components/paragraph/paragraph.css.js +1 -5
- package/src/components/paragraph/paragraph.js +7 -3
- package/src/components/process-steps/process-steps.css.js +95 -0
- package/src/components/process-steps/process-steps.js +72 -0
- package/src/components/process-steps/process-steps.stories.js +144 -0
- package/src/components/quick-answer/quick-answer.css.js +67 -0
- package/src/components/quick-answer/quick-answer.js +59 -0
- package/src/components/quick-answer/quick-answer.stories.js +160 -0
- package/src/components/review/review-grid.css.js +34 -0
- package/src/components/review/review-grid.js +63 -0
- package/src/components/review/review.css.js +50 -0
- package/src/components/review/review.js +58 -0
- package/src/components/review/review.stories.js +228 -0
- package/src/components/terminal/terminal-cursor.js +49 -0
- package/src/components/terminal/terminal-message.css.js +161 -0
- package/src/components/terminal/terminal-message.js +169 -0
- package/src/components/terminal/terminal-message.stories.js +321 -0
- package/src/components/trust-panel/trust-panel.css.js +167 -0
- package/src/components/trust-panel/trust-panel.js +116 -0
- package/src/components/trust-panel/trust-panel.stories.js +234 -0
- package/src/tokens/tokens.css +1 -1
- package/src/components/tabsComponent/tabsComponent.css.js +0 -267
- package/src/components/tabsComponent/tabsComponent.js +0 -193
- package/src/components/tabsComponent/tabsComponent.stories.js +0 -134
- package/src/components/tabsComponentFamily/tabsComponentFamily.css.js +0 -181
- package/src/components/tabsComponentFamily/tabsComponentFamily.js +0 -180
- package/src/components/tabsComponentFamily/tabsComponentFamily.stories.js +0 -319
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { css } from "lit";
|
|
2
|
+
|
|
3
|
+
export default css`
|
|
4
|
+
:host {
|
|
5
|
+
display: block;
|
|
6
|
+
font-family: var(--typography-fontFamily-sans);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.bd-headercode-container {
|
|
10
|
+
display: grid;
|
|
11
|
+
grid-template-columns: 1fr 1fr;
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: var(--spacing-48);
|
|
14
|
+
max-width: var(--layout-ensemble-max-width, 1200px);
|
|
15
|
+
margin: 0 auto;
|
|
16
|
+
padding: var(--spacing-48) var(--layout-ensemble-inline-padding, var(--spacing-24));
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* === LEFT COLUMN === */
|
|
21
|
+
.bd-headercode-left {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
align-items: flex-start;
|
|
25
|
+
gap: var(--spacing-16);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Slot for a small breadcrumb-style line above the eyebrow
|
|
29
|
+
(e.g. "Bitdefender AI skill-scanner"). Empty by default —
|
|
30
|
+
collapses to nothing when no content is slotted in. */
|
|
31
|
+
.bd-headercode-breadcrumb {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-wrap: wrap;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: var(--spacing-16);
|
|
36
|
+
color: var(--color-neutral-500);
|
|
37
|
+
font-family: var(--typography-fontFamily-mono, monospace);
|
|
38
|
+
font-size: var(--typography-fontSize-xs, 12px);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.bd-headercode-breadcrumb:not(:has(*)) {
|
|
42
|
+
display: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.bd-headercode-eyebrow {
|
|
46
|
+
color: var(--color-blue-400);
|
|
47
|
+
font-weight: var(--typography-fontWeight-bold);
|
|
48
|
+
margin: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.bd-headercode-title {
|
|
52
|
+
margin: 0;
|
|
53
|
+
color: var(--color-neutral-1000);
|
|
54
|
+
line-height: var(--typography-lineHeight-tight, 1.05);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.bd-headercode-description {
|
|
58
|
+
color: var(--color-neutral-600);
|
|
59
|
+
max-width: 480px;
|
|
60
|
+
margin: 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.bd-headercode-cta {
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-wrap: wrap;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: var(--spacing-16);
|
|
68
|
+
margin-top: var(--spacing-8);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Slot for a small status badge next to the CTA buttons (e.g. "AVAILABLE").
|
|
72
|
+
Empty by default — collapses to nothing when no content is slotted in. */
|
|
73
|
+
.bd-headercode-badge {
|
|
74
|
+
display: inline-flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
color: var(--color-neutral-500);
|
|
77
|
+
font-family: var(--typography-fontFamily-mono, monospace);
|
|
78
|
+
font-size: var(--typography-fontSize-xs, 12px);
|
|
79
|
+
letter-spacing: 0.05em;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.bd-headercode-badge:not(:has(*)) {
|
|
83
|
+
display: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* === RIGHT COLUMN === */
|
|
87
|
+
.bd-headercode-right {
|
|
88
|
+
display: flex;
|
|
89
|
+
flex-direction: column;
|
|
90
|
+
align-items: flex-end;
|
|
91
|
+
gap: var(--spacing-8);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.bd-headercode-right ::slotted(*) {
|
|
95
|
+
width: 100%;
|
|
96
|
+
max-width: 520px;
|
|
97
|
+
box-shadow: 0 1px 2px #0003,0 18px 48px #000a1e73
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.bd-headercode-terminal-caption {
|
|
101
|
+
color: var(--color-neutral-500);
|
|
102
|
+
margin: 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* === RESPONSIVE === */
|
|
106
|
+
@media (max-width: 899px) {
|
|
107
|
+
.bd-headercode-container {
|
|
108
|
+
grid-template-columns: 1fr;
|
|
109
|
+
gap: var(--spacing-32);
|
|
110
|
+
padding: var(--spacing-32) var(--spacing-24);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.bd-headercode-right {
|
|
114
|
+
align-items: stretch;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.bd-headercode-right ::slotted(*) {
|
|
118
|
+
max-width: none;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.bd-headercode-description {
|
|
122
|
+
max-width: none;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { LitElement, html, nothing } from "lit";
|
|
2
|
+
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
+
import "../button/button.js";
|
|
4
|
+
import "../heading/heading.js";
|
|
5
|
+
import "../paragraph/paragraph.js";
|
|
6
|
+
import "../terminal/terminal-message.js";
|
|
7
|
+
import headerCodeCSS from "./header-code.css.js";
|
|
8
|
+
|
|
9
|
+
class HeaderCode extends LitElement {
|
|
10
|
+
static properties = {
|
|
11
|
+
eyebrow : { type: String },
|
|
12
|
+
title : { type: String },
|
|
13
|
+
description : { type: String },
|
|
14
|
+
terminalCaption: { type: String, attribute: "terminal-caption" }
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
static styles = [tokens, headerCodeCSS];
|
|
18
|
+
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
this.eyebrow = "";
|
|
22
|
+
this.title = "";
|
|
23
|
+
this.description = "";
|
|
24
|
+
this.terminalCaption = "";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
render() {
|
|
28
|
+
return html`
|
|
29
|
+
<div class="bd-headercode-container">
|
|
30
|
+
<div class="bd-headercode-left">
|
|
31
|
+
<div class="bd-headercode-breadcrumb">
|
|
32
|
+
<slot name="breadcrumb"></slot>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
${this.eyebrow
|
|
36
|
+
? html`<bd-p kind="normal" class="bd-headercode-eyebrow">${this.eyebrow}</bd-p>`
|
|
37
|
+
: nothing}
|
|
38
|
+
|
|
39
|
+
<bd-h as="h1" class="bd-headercode-title">
|
|
40
|
+
<slot name="title">${this.title}</slot>
|
|
41
|
+
</bd-h>
|
|
42
|
+
|
|
43
|
+
${this.description
|
|
44
|
+
? html`<bd-p kind="regular" class="bd-headercode-description">${this.description}</bd-p>`
|
|
45
|
+
: nothing}
|
|
46
|
+
|
|
47
|
+
<div class="bd-headercode-cta">
|
|
48
|
+
<slot name="primary-button"></slot>
|
|
49
|
+
<slot name="secondary-button"></slot>
|
|
50
|
+
<span class="bd-headercode-badge">
|
|
51
|
+
<slot name="badge"></slot>
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div class="bd-headercode-right">
|
|
57
|
+
<slot name="terminal-content"></slot>
|
|
58
|
+
|
|
59
|
+
${this.terminalCaption
|
|
60
|
+
? html`<bd-p kind="small" class="bd-headercode-terminal-caption" font-family="'IBM Plex Mono', ui-monospace, SFMono-Regular, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"
|
|
61
|
+
>${this.terminalCaption}</bd-p>`
|
|
62
|
+
: nothing}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
customElements.define("bd-header-code", HeaderCode);
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
import "../button/button.js";
|
|
3
|
+
import "../terminal/terminal-message.js";
|
|
4
|
+
import "./header-code.js";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title : "Components/Header Code",
|
|
8
|
+
component : "bd-header-code",
|
|
9
|
+
tags : ["autodocs"],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: "fullscreen",
|
|
12
|
+
docs : {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
**HeaderCode** is a hero/header variant pairing marketing copy on the left with a
|
|
16
|
+
terminal-style code/demo window on the right. Unlike \`bd-header\`, it has no pricing —
|
|
17
|
+
just eyebrow, title, description, two CTA buttons, and a slotted terminal.
|
|
18
|
+
|
|
19
|
+
The terminal window — including the traffic-light titlebar dots — is owned by
|
|
20
|
+
\`<bd-terminal-message>\`. \`bd-header-code\` additionally renders an optional small
|
|
21
|
+
caption **below** the terminal box via \`terminal-caption\`.
|
|
22
|
+
|
|
23
|
+
### Usage
|
|
24
|
+
\`\`\`html
|
|
25
|
+
<bd-header-code
|
|
26
|
+
eyebrow="Security for autonomous AI agents"
|
|
27
|
+
title="Bitdefender AI Guardian"
|
|
28
|
+
description="A security layer between your AI agents and the actions they take."
|
|
29
|
+
terminal-caption="AI Guardian CLI · first-run setup"
|
|
30
|
+
>
|
|
31
|
+
<bd-button-link slot="primary-button" label="Download BETA Today" kind="primary">Download BETA Today</bd-button-link>
|
|
32
|
+
<bd-button-link slot="secondary-button" label="See how it works" kind="outline">See how it works</bd-button-link>
|
|
33
|
+
|
|
34
|
+
<bd-terminal-message
|
|
35
|
+
slot="terminal-content"
|
|
36
|
+
show-titlebar
|
|
37
|
+
panel-label="Welcome"
|
|
38
|
+
icon="👋"
|
|
39
|
+
greeting="Hi, I'm AI Guardian."
|
|
40
|
+
intro="I keep an eye on what your AI assistant can access and do:"
|
|
41
|
+
.items=\${["which tools it can use", "which credentials to watch", "which MCP servers to trust"]}
|
|
42
|
+
footer-bold="Let's get started."
|
|
43
|
+
footer="It only takes a minute, and nothing changes until you confirm it."
|
|
44
|
+
show-cursor
|
|
45
|
+
hint="[Enter] to continue · [esc] to cancel"
|
|
46
|
+
></bd-terminal-message>
|
|
47
|
+
</bd-header-code>
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
### Attributes
|
|
51
|
+
| Attribute | Type | Default | Description |
|
|
52
|
+
|----------------------|--------|---------|-----------------------------------------------------|
|
|
53
|
+
| \`eyebrow\` | String | \`""\` | Small label above the title |
|
|
54
|
+
| \`title\` | String | \`""\` | Main heading (can be overridden via \`title\` slot) |
|
|
55
|
+
| \`description\` | String | \`""\` | Supporting paragraph under the title |
|
|
56
|
+
| \`terminal-caption\` | String | \`""\` | Small caption rendered below the terminal box |
|
|
57
|
+
|
|
58
|
+
### Slots
|
|
59
|
+
| Slot | Description |
|
|
60
|
+
|---------------------|-----------------------------------------------|
|
|
61
|
+
| \`title\` | Overrides the \`title\` attribute if content is provided |
|
|
62
|
+
| \`primary-button\` | The main CTA (typically \`bd-button-link\`) |
|
|
63
|
+
| \`secondary-button\` | The secondary CTA |
|
|
64
|
+
| \`terminal-content\` | Freeform content rendered on the right (typically a \`bd-terminal-message\`) |
|
|
65
|
+
`
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
argTypes: {
|
|
70
|
+
eyebrow : { control: "text", table: { category: "Content" } },
|
|
71
|
+
title : { control: "text", table: { category: "Content" } },
|
|
72
|
+
description : { control: "text", table: { category: "Content" } },
|
|
73
|
+
terminalCaption: { control: "text", table: { category: "Terminal" } }
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const terminalContent = html`
|
|
78
|
+
<bd-terminal-message
|
|
79
|
+
slot="terminal-content"
|
|
80
|
+
show-titlebar
|
|
81
|
+
panel-label="Welcome"
|
|
82
|
+
icon="👋"
|
|
83
|
+
greeting="Hi, I'm AI Guardian."
|
|
84
|
+
intro="I keep an eye on what your AI assistant can access and do:"
|
|
85
|
+
.items=${["which tools it can use", "which credentials to watch", "which MCP servers to trust"]}
|
|
86
|
+
footer-bold="Let's get started."
|
|
87
|
+
footer="It only takes a minute, and nothing changes until you confirm it."
|
|
88
|
+
show-cursor
|
|
89
|
+
hint="[Enter] to continue · [esc] to cancel"
|
|
90
|
+
></bd-terminal-message>
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
const render = (args) => html`
|
|
94
|
+
<bd-header-code
|
|
95
|
+
eyebrow=${args.eyebrow}
|
|
96
|
+
title=${args.title}
|
|
97
|
+
description=${args.description}
|
|
98
|
+
terminal-caption=${args.terminalCaption}
|
|
99
|
+
>
|
|
100
|
+
<bd-button-link
|
|
101
|
+
slot="primary-button"
|
|
102
|
+
label="Download BETA Today"
|
|
103
|
+
kind="primary"
|
|
104
|
+
size="md"
|
|
105
|
+
font-size="18px"
|
|
106
|
+
font-weight="600"
|
|
107
|
+
>Download BETA Today</bd-button-link>
|
|
108
|
+
|
|
109
|
+
<bd-button-link
|
|
110
|
+
slot="secondary-button"
|
|
111
|
+
label="See how it works"
|
|
112
|
+
kind="primary-outline"
|
|
113
|
+
size="md"
|
|
114
|
+
font-size="18px"
|
|
115
|
+
font-weight="600"
|
|
116
|
+
>See how it works</bd-button-link>
|
|
117
|
+
|
|
118
|
+
${terminalContent}
|
|
119
|
+
</bd-header-code>
|
|
120
|
+
`;
|
|
121
|
+
|
|
122
|
+
export const Default = {
|
|
123
|
+
name: "Default — AI Guardian",
|
|
124
|
+
args: {
|
|
125
|
+
eyebrow : "Security for autonomous AI agents",
|
|
126
|
+
title : "Bitdefender AI Guardian",
|
|
127
|
+
description : "A security layer between your AI agents and the actions they take — policies, guardrails, and monitoring that let agents run safely.",
|
|
128
|
+
terminalCaption: "AI Guardian CLI · first-run setup"
|
|
129
|
+
},
|
|
130
|
+
render,
|
|
131
|
+
parameters: {
|
|
132
|
+
docs: {
|
|
133
|
+
description: {
|
|
134
|
+
story: "Matches the reference design exactly: titlebar says \"Welcome\", the caption below the terminal box says \"AI Guardian CLI · first-run setup\"."
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export const NoEyebrow = {
|
|
141
|
+
name: "No Eyebrow",
|
|
142
|
+
args: {
|
|
143
|
+
eyebrow : "",
|
|
144
|
+
title : "Bitdefender AI Guardian",
|
|
145
|
+
description : "A security layer between your AI agents and the actions they take.",
|
|
146
|
+
terminalCaption: "AI Guardian CLI"
|
|
147
|
+
},
|
|
148
|
+
render,
|
|
149
|
+
parameters: {
|
|
150
|
+
docs: {
|
|
151
|
+
description: {
|
|
152
|
+
story: "The eyebrow line is optional — omitting it removes the element entirely rather than leaving empty space."
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export const SingleButton = {
|
|
159
|
+
name: "Single CTA",
|
|
160
|
+
args: {
|
|
161
|
+
eyebrow : "Security for autonomous AI agents",
|
|
162
|
+
title : "Bitdefender AI Guardian",
|
|
163
|
+
description : "A security layer between your AI agents and the actions they take.",
|
|
164
|
+
terminalCaption: "AI Guardian CLI"
|
|
165
|
+
},
|
|
166
|
+
render: (args) => html`
|
|
167
|
+
<bd-header-code
|
|
168
|
+
eyebrow=${args.eyebrow}
|
|
169
|
+
title=${args.title}
|
|
170
|
+
description=${args.description}
|
|
171
|
+
terminal-caption=${args.terminalCaption}
|
|
172
|
+
>
|
|
173
|
+
<bd-button-link
|
|
174
|
+
slot="primary-button"
|
|
175
|
+
label="Download BETA Today"
|
|
176
|
+
kind="primary"
|
|
177
|
+
size="md"
|
|
178
|
+
>Download BETA Today</bd-button-link>
|
|
179
|
+
|
|
180
|
+
${terminalContent}
|
|
181
|
+
</bd-header-code>
|
|
182
|
+
`,
|
|
183
|
+
parameters: {
|
|
184
|
+
docs: {
|
|
185
|
+
description: {
|
|
186
|
+
story: "Only the primary-button slot is filled — the secondary slot renders nothing since it's empty."
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const NoCaption = {
|
|
193
|
+
name: "No Caption",
|
|
194
|
+
args: {
|
|
195
|
+
eyebrow : "Security for autonomous AI agents",
|
|
196
|
+
title : "Bitdefender AI Guardian",
|
|
197
|
+
description : "A security layer between your AI agents and the actions they take.",
|
|
198
|
+
terminalCaption: ""
|
|
199
|
+
},
|
|
200
|
+
render,
|
|
201
|
+
parameters: {
|
|
202
|
+
docs: {
|
|
203
|
+
description: {
|
|
204
|
+
story: "`terminal-caption` omitted — no small caption line under the terminal box."
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const Playground = {
|
|
211
|
+
name: "Playground",
|
|
212
|
+
args: {
|
|
213
|
+
eyebrow : "Security for autonomous AI agents",
|
|
214
|
+
title : "Bitdefender AI Guardian",
|
|
215
|
+
description : "A security layer between your AI agents and the actions they take — policies, guardrails, and monitoring that let agents run safely.",
|
|
216
|
+
terminalCaption: "AI Guardian CLI · first-run setup"
|
|
217
|
+
},
|
|
218
|
+
render,
|
|
219
|
+
parameters: {
|
|
220
|
+
docs: {
|
|
221
|
+
description: {
|
|
222
|
+
story: "Fully interactive story — use the Controls panel to edit eyebrow, title, description, and terminal caption live."
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// icons/bd-ai-icon.js
|
|
2
|
+
import { LitElement, html } from "lit";
|
|
3
|
+
|
|
4
|
+
class BdAiIcon extends LitElement {
|
|
5
|
+
static properties = {
|
|
6
|
+
width : { type: Number },
|
|
7
|
+
height: { type: Number }
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
this.width = 126;
|
|
13
|
+
this.height = 15; // raport identic cu viewBox-ul real (524.8:62.6)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
createRenderRoot() { return this; }
|
|
17
|
+
|
|
18
|
+
render() {
|
|
19
|
+
return html`
|
|
20
|
+
<svg width="${this.width}" height="${this.height}" viewBox="0 0 524.8 62.6" xmlns="http://www.w3.org/2000/svg">
|
|
21
|
+
<path fill="#006dff" d="M89.8,48.5v-17.8h10.5v-8.3h-10.5v-11.4h-6.2l-3.6,11.4h-9.5v.5l3.6,3.1c5.5,4.5,5.9,4.4,5.9,6.9v-2.2s0,18,0,18c0,12.8,9,15.1,17,13l4.9-7.8-.3-.2c-6.8,2-11.7,1.8-11.7-5.2ZM62.8,3.2c-3.6,0-6.2,2.8-6.2,5.9s2.6,5.9,6.2,5.9,6.4-2.5,6.4-5.9-2.8-5.9-6.4-5.9ZM37.2,31.2v-.2c6-1.8,10-6.1,10-12.7,0-10.5-9-14.5-17.7-14.5H8.4s-8.4,0-8.4,0v.9l3,2.5c3.6,2.9,4,3.5,4,6.1v48.4h20.8c10.9,0,21.9-3.9,21.9-16.5s-5.2-13.2-12.5-14ZM17.3,12.6h8.5c5.7,0,7.5.8,9.3,2.5,1.3,1.2,1.9,3,1.9,5s-.6,3.5-2,4.8c-1.7,1.6-4,2.4-8.3,2.4h-9.4v-14.7ZM26.8,52.8h-9.5v-16.7h9.9c8.3,0,12.2,2.1,12.2,8.2s-7.3,8.5-12.7,8.5ZM130.8,2.1l3.1,2c2.8,1.8,3.2,2.6,3.2,5.1v18.2h-.2c-2-2.5-6-6-13.3-6-11.2,0-19,9-19,20.6s7.3,20.6,19.4,20.6,10.6-2.1,13.5-6.9h.2l1,5.9h8.3V1.4h-16.1v.7ZM125.9,53.8c-7.2,0-11.5-5.6-11.5-11.8s4.3-11.8,11.5-11.8,11.5,5.6,11.5,11.8-4.3,11.8-11.5,11.8ZM52.7,23.1l1.6,1.3c3.5,2.7,3.7,3.2,3.7,6.5h0v30.8h9.8V22.4h-15.1v.6ZM376.8,21.4c-11.8,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.7-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9c1.3-15.4-7-24-19.2-24ZM366.1,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM412.3,28.6h-.2v-6.2h-16.5v.4s2.5,1.6,2.5,1.6c4,2.5,4.2,3.3,4.2,8.2v29h9.8v-21c0-2.1,1.3-9.9,10.5-9.9s3.1.3,4.7.7v-9.5c-1.1-.3-2.3-.6-3.5-.6-5.2,0-9.5,2.7-11.6,7.2ZM334.1,2.1l1.4.9c4.7,3,5.3,3.9,5.3,9v15.4h-.3c-2-2.5-6-6-13.3-6-11.2,0-19,9-19,20.6s7.3,20.6,19.4,20.6,10.6-2.1,13.5-6.9h.2l1,5.9h8.3V1.4h-16.5v.7ZM329.6,53.8c-7.2,0-11.5-5.6-11.5-11.8s4.3-11.8,11.5-11.8,11.5,5.6,11.5,11.8-4.3,11.8-11.5,11.8ZM288.1,21.4c-4.4,0-9.3,2.2-12.5,7h-.2v-6h-8.4s-7.7,0-7.7,0v.4l2.4,1.6c4,2.5,4.3,3.3,4.3,8.2v29h9.8v-21.4c0-5.2,2.5-10,9-10s8,5.2,8,9.6v21.8h9.8v-24.8c0-9.1-5.3-15.4-14.6-15.4ZM239.8,21.4c-11.9,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.8-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9c1.3-15.4-7-24-19.2-24ZM229.1,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM173.1,21.4c-11.9,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.7-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9v-2.7c0-13.6-8.3-21.3-19.2-21.3ZM162.4,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM209.8,15.1c0-6.9,6.1-8.8,13.9-5.7l.5-.4-2.3-8.3c-15-3-22,3.7-22,14.4v7.2h-9.6v.6l5,4.1c3.9,3.1,4.6,3.8,4.6,7.1v27.6h9.8v-31h9.1v-8.4h-9.1v-7.1ZM524.8,9.6V3.9h-23.2v5.8h8.1v46.2h-8.1v5.8h23.2v-5.8h-8.1V9.6h8.1ZM467.4,3.9l-20.2,57.7h7l5.8-17h23.3l5.8,17h7.3l-20.2-57.7h-8.9ZM461.7,38.4l9.8-28.1h.4l9.8,28.1h-19.9Z"/>
|
|
22
|
+
</svg>
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
customElements.define("bd-ai-icon", BdAiIcon);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// icons/quote-icon.js
|
|
2
|
+
import { LitElement, css, html } from "lit";
|
|
3
|
+
|
|
4
|
+
class QuoteIcon extends LitElement {
|
|
5
|
+
|
|
6
|
+
static properties = {
|
|
7
|
+
width : { type: Number },
|
|
8
|
+
height: { type: Number },
|
|
9
|
+
color : { type: String }
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.width = 51;
|
|
15
|
+
this.height = 52;
|
|
16
|
+
this.color = "#2E6BF6";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static styles = css`:host { display: inline-flex; }`;
|
|
20
|
+
render() {
|
|
21
|
+
return html`
|
|
22
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${this.width}" height="${this.height}" viewBox="0 0 51 52" aria-hidden="true">
|
|
23
|
+
<text fill="${this.color}" font-size="128" font-family="Helvetica"><tspan x="0" y="99">“</tspan></text>
|
|
24
|
+
</svg>
|
|
25
|
+
`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
customElements.define("bd-quote-icon", QuoteIcon);
|