@repobit/dex-system-design 0.2.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.
Files changed (111) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +15 -0
  3. package/package.json +57 -0
  4. package/src/assets/fonts/IBMPlexMono-Bold.woff2 +0 -0
  5. package/src/assets/fonts/IBMPlexMono-BoldItalic.woff2 +0 -0
  6. package/src/assets/fonts/IBMPlexMono-Italic.woff2 +0 -0
  7. package/src/assets/fonts/IBMPlexMono-Light.woff2 +0 -0
  8. package/src/assets/fonts/IBMPlexMono-LightItalic.woff2 +0 -0
  9. package/src/assets/fonts/IBMPlexMono-Medium.woff2 +0 -0
  10. package/src/assets/fonts/IBMPlexMono-MediumItalic.woff2 +0 -0
  11. package/src/assets/fonts/IBMPlexMono-Regular.woff2 +0 -0
  12. package/src/assets/fonts/IBMPlexMono-SemiBold.woff2 +0 -0
  13. package/src/assets/fonts/IBMPlexMono-SemiBoldItalic.woff2 +0 -0
  14. package/src/assets/fonts/IBMPlexSans-Bold.woff2 +0 -0
  15. package/src/assets/fonts/IBMPlexSans-BoldItalic.woff2 +0 -0
  16. package/src/assets/fonts/IBMPlexSans-Italic.woff2 +0 -0
  17. package/src/assets/fonts/IBMPlexSans-Light.woff2 +0 -0
  18. package/src/assets/fonts/IBMPlexSans-LightItalic.woff2 +0 -0
  19. package/src/assets/fonts/IBMPlexSans-Medium.woff2 +0 -0
  20. package/src/assets/fonts/IBMPlexSans-MediumItalic.woff2 +0 -0
  21. package/src/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  22. package/src/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  23. package/src/assets/fonts/IBMPlexSans-SemiBoldItalic.woff2 +0 -0
  24. package/src/assets/fonts/bd-ibm-plex-mono.zip +0 -0
  25. package/src/assets/fonts/bd-ibm-plex-sans.zip +0 -0
  26. package/src/assets/icons/badge-icon-individual.png +0 -0
  27. package/src/assets/icons/bd-icon-family-white.png +0 -0
  28. package/src/assets/icons/bd-icon-family.png +0 -0
  29. package/src/assets/icons/bd-icon-user.png +0 -0
  30. package/src/assets/icons/left_clicked.png +0 -0
  31. package/src/assets/icons/left_disabled.png +0 -0
  32. package/src/assets/icons/left_hover.png +0 -0
  33. package/src/assets/icons/left_normal.png +0 -0
  34. package/src/assets/icons/light-carousel-img1.png +0 -0
  35. package/src/assets/icons/light-carousel-img2.png +0 -0
  36. package/src/assets/icons/light-carousel-img3.png +0 -0
  37. package/src/assets/icons/more_hover.png +0 -0
  38. package/src/assets/icons/more_normal.png +0 -0
  39. package/src/assets/icons/more_pressed.png +0 -0
  40. package/src/assets/icons/pic1.png +0 -0
  41. package/src/assets/icons/pic2.png +0 -0
  42. package/src/assets/icons/pic3.png +0 -0
  43. package/src/assets/icons/right_clicked.png +0 -0
  44. package/src/assets/icons/right_disabled.png +0 -0
  45. package/src/assets/icons/right_hover.png +0 -0
  46. package/src/assets/icons/right_normal.png +0 -0
  47. package/src/assets/icons/tabs-img1.png +0 -0
  48. package/src/assets/icons/tabs-img2.png +0 -0
  49. package/src/assets/icons/tabs-img3.png +0 -0
  50. package/src/assets/icons/verified_arrow.png +0 -0
  51. package/src/components/Button/Button.js +120 -0
  52. package/src/components/Button/button.css.js +137 -0
  53. package/src/components/Button/button.stories.js +56 -0
  54. package/src/components/Button/icons.css +5 -0
  55. package/src/components/Button/icons.js +24 -0
  56. package/src/components/Button/index.js +0 -0
  57. package/src/components/FAQ/faq.css.js +107 -0
  58. package/src/components/FAQ/faq.js +176 -0
  59. package/src/components/FAQ/faq.stories.js +45 -0
  60. package/src/components/Input/Input.js +27 -0
  61. package/src/components/Input/index.js +0 -0
  62. package/src/components/Input/input.css.js +68 -0
  63. package/src/components/carousel/carousel.css.js +304 -0
  64. package/src/components/carousel/carousel.js +226 -0
  65. package/src/components/carousel/carousel.stories.js +73 -0
  66. package/src/components/light-carousel/light-carousel.css.js +149 -0
  67. package/src/components/light-carousel/light-carousel.js +108 -0
  68. package/src/components/light-carousel/light-carousel.stories.js +43 -0
  69. package/src/components/paragraph/paragraph.css.js +16 -0
  70. package/src/components/paragraph/paragraph.js +59 -0
  71. package/src/components/pricing-cards/pricing-card.css.js +409 -0
  72. package/src/components/pricing-cards/pricing-card.js +764 -0
  73. package/src/components/pricing-cards/pricing-card.stories.js +12 -0
  74. package/src/components/tabs/tabs.css.js +239 -0
  75. package/src/components/tabs/tabs.js +183 -0
  76. package/src/components/tabs/tabs.stories.js +18 -0
  77. package/src/components/termsOfUse/terms.css.js +38 -0
  78. package/src/components/termsOfUse/terms.js +226 -0
  79. package/src/components/termsOfUse/terms.stories.js +14 -0
  80. package/src/index.js +0 -0
  81. package/src/stories/Button.js +20 -0
  82. package/src/stories/Button.stories.js +46 -0
  83. package/src/stories/Configure.mdx +364 -0
  84. package/src/stories/Header.js +45 -0
  85. package/src/stories/Header.stories.js +24 -0
  86. package/src/stories/Page.js +62 -0
  87. package/src/stories/Page.stories.js +20 -0
  88. package/src/stories/assets/accessibility.png +0 -0
  89. package/src/stories/assets/accessibility.svg +1 -0
  90. package/src/stories/assets/addon-library.png +0 -0
  91. package/src/stories/assets/assets.png +0 -0
  92. package/src/stories/assets/avif-test-image.avif +0 -0
  93. package/src/stories/assets/context.png +0 -0
  94. package/src/stories/assets/discord.svg +1 -0
  95. package/src/stories/assets/docs.png +0 -0
  96. package/src/stories/assets/figma-plugin.png +0 -0
  97. package/src/stories/assets/github.svg +1 -0
  98. package/src/stories/assets/share.png +0 -0
  99. package/src/stories/assets/styling.png +0 -0
  100. package/src/stories/assets/testing.png +0 -0
  101. package/src/stories/assets/theming.png +0 -0
  102. package/src/stories/assets/tutorials.svg +1 -0
  103. package/src/stories/assets/youtube.svg +1 -0
  104. package/src/stories/button.css +30 -0
  105. package/src/stories/header.css +32 -0
  106. package/src/stories/page.css +68 -0
  107. package/src/tokens/colors.js +121 -0
  108. package/src/tokens/layout.css +46 -0
  109. package/src/tokens/tokens.css +297 -0
  110. package/src/tokens/typography.css.js +207 -0
  111. package/src/tokens/typography.js +0 -0
@@ -0,0 +1,12 @@
1
+ import { html } from 'lit';
2
+ import './pricing-card.js';
3
+
4
+ export default {
5
+ title: 'Components/Pricing Cards',
6
+ component: 'bd-pricing-container',
7
+ };
8
+
9
+ const Template = () => html`<bd-pricing-container></bd-pricing-container>`;
10
+
11
+ export const Default = Template.bind({});
12
+ Default.storyName = 'Pricing Cards Component';
@@ -0,0 +1,239 @@
1
+ import { css } from "../../../node_modules/lit-element/lit-element";
2
+
3
+ export default css`
4
+ :host {
5
+ --background-card-grey: var(--color-neutral-25);
6
+ --border-card-grey: var(--color-neutral-50);
7
+ --border-card-green: var(--color-green-700);
8
+ --badge-background: var(--color-blue-500);
9
+ --text-color-white: var(--color-neutral-0);
10
+ font-size: 100%;
11
+ display: block;
12
+ font-family: var(--font-family-sans);
13
+ }
14
+
15
+ .bd-tab-button p {
16
+ margin-top: 1em;
17
+ margin-bottom: 1em;
18
+ }
19
+
20
+ .bd-tabs-component .bd-left img {
21
+ max-width: 90%;
22
+ }
23
+
24
+ .bd-card-container {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ padding: 36px 0px;
28
+ border-radius: 5px;
29
+ margin-top: 10px;
30
+ margin: auto;
31
+ width: 50%;
32
+ }
33
+
34
+ .bd-card-container .bd-left {
35
+ flex: 1;
36
+ padding-right: 20px;
37
+ }
38
+
39
+ .bd-card-container .bd-right {
40
+ flex: 1;
41
+ justify-content: center;
42
+ align-items: center;
43
+ padding: 0px var(--size-24);
44
+ }
45
+
46
+ .bd-tabs-container {
47
+ display: flex;
48
+ justify-content: center;
49
+ margin-bottom: 40px;
50
+ flex-wrap: wrap;
51
+ border-bottom: 1px solid #e4f2ff;
52
+ margin: 0 auto;
53
+ }
54
+
55
+ .bd-tabs-container button {
56
+ background-color: white;
57
+ color: #006eff;
58
+ border: 0;
59
+ padding: 9px;
60
+ display: flex;
61
+ gap: 10px;
62
+ align-items: center;
63
+ position: relative;
64
+ cursor: pointer;
65
+ font-size: 1.125em;
66
+ max-height: 55px;
67
+ }
68
+
69
+ .bd-tabs-container button::after {
70
+ background: #006eff;
71
+ content: "";
72
+ height: 4px;
73
+ position: absolute;
74
+ left: 0;
75
+ bottom: 0;
76
+ width: 0;
77
+ transition: width 1s ease;
78
+ }
79
+
80
+ .bd-tabs-container button.bd-selected::after {
81
+ width: 100%;
82
+ }
83
+
84
+ .bd-tabs-container button.bd-selected {
85
+ color: black;
86
+ }
87
+
88
+ .bd-tab-button {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ gap: 8px;
93
+ background: none;
94
+ border: none;
95
+ padding: 10px;
96
+ cursor: pointer;
97
+ font-weight: bold;
98
+ }
99
+
100
+ .bd-tab-button img {
101
+ margin-right: 8px;
102
+ height: 30px;
103
+ width: 30px;
104
+ }
105
+
106
+ .bd-tabs-component h2 {
107
+ margin-bottom: 75px;
108
+ max-width: 630px;
109
+ text-align: center;
110
+ }
111
+
112
+ .bd-tabs-component {
113
+ display: flex;
114
+ flex-direction: column;
115
+ align-items: center;
116
+ margin-top: 48px;
117
+ }
118
+
119
+ .bd-ul-privacy {
120
+ list-style: none;
121
+ padding-inline-start: 0px;
122
+ }
123
+
124
+ .bd-find-out-more {
125
+ text-decoration: none;
126
+ background-color: white;
127
+ color: #006eff;
128
+ border: 0;
129
+ display: flex;
130
+ gap: 10px;
131
+ align-items: start;
132
+ position: relative;
133
+ cursor: pointer;
134
+ font-family: var(--font-family-sans);
135
+ font-weight: var(--font-weight-sans-semibold);
136
+ }
137
+
138
+ .bd-find-out-more .bd-arrow svg {
139
+ width: 12px;
140
+ height: 12px;
141
+ position: relative;
142
+ top: 1.5px;
143
+ }
144
+
145
+ .bd-right h3 {
146
+ font-size: 1.5em;
147
+ }
148
+
149
+ .bd-section-title {
150
+ font-family: var(--font-family-sans);
151
+ font-weight: var(--font-weight-sans-semibold);
152
+ }
153
+
154
+ /* ✅ Responsive Design */
155
+ @media (max-width: 1200px) {
156
+ .bd-tabs-component.bd-we-container {
157
+ max-width: 100%;
158
+ padding: 0 20px;
159
+ }
160
+ }
161
+
162
+ @media (max-width: 992px) {
163
+ .bd-tabs-component .bd-card-container {
164
+ flex-direction: column;
165
+ width: 90%;
166
+ }
167
+
168
+ .bd-tabs-component .bd-tabs-container {
169
+ flex-wrap: wrap;
170
+ }
171
+
172
+ .bd-tabs-component .bd-tabs-container button picture img {
173
+ width: 24px;
174
+ }
175
+
176
+ .bd-tabs-component .bd-card-container {
177
+ align-items: center;
178
+ text-align: center;
179
+ }
180
+
181
+ .bd-tabs-component .bd-left {
182
+ width: 100%;
183
+ padding: 10px;
184
+ }
185
+
186
+ .bd-tabs-component .bd-left img {
187
+ max-width: 80%;
188
+ }
189
+
190
+ .bd-tabs-component .bd-right {
191
+ width: 100%;
192
+ padding: 10px;
193
+ }
194
+
195
+ .bd-tabs-component.bd-we-container {
196
+ max-width: 100%;
197
+ padding-left: 30px;
198
+ padding-right: 30px;
199
+ }
200
+ }
201
+
202
+ @media (max-width: 768px) {
203
+ .bd-card-container {
204
+ flex-direction: column;
205
+ width: 100%;
206
+ padding: 20px;
207
+ }
208
+
209
+ .bd-tabs-component {
210
+ margin-top: 24px;
211
+ }
212
+
213
+ .bd-tabs-container {
214
+ flex-direction: column;
215
+ align-items: center;
216
+ text-align: center;
217
+ width: 100%;
218
+ }
219
+
220
+ .bd-tabs-container button {
221
+ font-size: 1em;
222
+ padding: 6px;
223
+ }
224
+
225
+ .bd-tabs-component .bd-left img {
226
+ max-width: 70%;
227
+ height: auto;
228
+ }
229
+
230
+ .bd-tabs-component .bd-right {
231
+ text-align: center;
232
+ padding: 10px;
233
+ }
234
+
235
+ .bd-find-out-more {
236
+ justify-content: center;
237
+ }
238
+ }
239
+ `;
@@ -0,0 +1,183 @@
1
+ import { LitElement, html, css } from "lit";
2
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
3
+
4
+ import tabsCSS from "../tabs/tabs.css.js";
5
+
6
+ class TabsComponent extends LitElement {
7
+ static properties = {
8
+ selectedTab: { type: Number },
9
+ };
10
+
11
+ constructor() {
12
+ super();
13
+ this.selectedTab = 0;
14
+ }
15
+
16
+ selectTab(index) {
17
+ console.log("Selected Tab:", index);
18
+ this.selectedTab = index;
19
+ this.requestUpdate();
20
+ }
21
+
22
+ render() {
23
+ const tabs = [
24
+ {
25
+ title: "Privacy Protection",
26
+ imageBase: "src/assets/icons/tabs-img1.png",
27
+ icon: "src/assets/icons/pic1.png",
28
+ },
29
+ {
30
+ title: "Identity Protection",
31
+ imageBase: "src/assets/icons/tabs-img2.png",
32
+ icon: "src/assets/icons/pic2.png",
33
+ },
34
+ {
35
+ title: "Device Protection",
36
+ imageBase: "src/assets/icons/tabs-img3.png",
37
+ icon: "src/assets/icons/pic3.png",
38
+ },
39
+ {
40
+ title: "Financial Insurance",
41
+ imageBase: "src/assets/icons/tabs-img3.png",
42
+ icon: "src/assets/icons/pic3.png",
43
+ },
44
+ ];
45
+
46
+ const content = [
47
+ {
48
+ heading: "Take back your family’s digital privacy",
49
+ description: () => html`<ul class="ul-privacy">
50
+ <li>
51
+ Enjoy complete data privacy with
52
+ <strong>Bitdefender Premium VPN</strong>.
53
+ </li>
54
+ <li>
55
+ Escape intrusive ads and trackers with our advanced
56
+ <strong>Ad-Blocker</strong> and
57
+ <strong>Anti-Tracker</strong> features.
58
+ </li>
59
+ <li>
60
+ Shield yourself with robust
61
+ <strong>Webcam and Microphone Protection</strong>.
62
+ </li>
63
+ </ul>`,
64
+ href: "#1",
65
+ },
66
+ {
67
+ heading: "Safe data. Safe you.",
68
+ description: () => html`<p>
69
+ Get instant alerts for potential threats to your personal data and
70
+ finances.
71
+ </p>
72
+ <p>Receive clear and concise advice on handling data breaches.</p>
73
+ <p>
74
+ Reduce the risk of online ID theft by scanning your digital
75
+ footprint.
76
+ </p>`,
77
+ href: "#2",
78
+ },
79
+ {
80
+ heading: "We secure what you hold dear",
81
+ description: () => html`<p>
82
+ Enjoy seamless security across all devices.
83
+ </p>
84
+ <p>
85
+ Protection from corrupt websites, risky downloads, and phishing
86
+ attempts.
87
+ </p>
88
+ <p>Lightweight performance ensures smooth device operation.</p>`,
89
+ href: "#3",
90
+ },
91
+ {
92
+ heading: "Financial Insurance",
93
+ description: () => html`<p>
94
+ Enjoy seamless security across all devices.
95
+ </p>
96
+ <p>
97
+ Protection from corrupt websites, risky downloads, and phishing
98
+ attempts.
99
+ </p>
100
+ <p>Lightweight performance ensures smooth device operation.</p>`,
101
+ href: "#4",
102
+ },
103
+ ];
104
+
105
+ const selectedTabData = tabs[this.selectedTab];
106
+
107
+ return html`
108
+ <div class="bd-tabs-component">
109
+ <h1 class="bd-section-title">
110
+ Live your digital life worry-free from start to finish
111
+ </h1>
112
+ <div class="bd-tabs-container">
113
+ ${tabs.map(
114
+ (tab, index) => html`
115
+ <button
116
+ class=${this.selectedTab === index
117
+ ? "bd-selected bd-tab-button"
118
+ : "bd-tab-button"}
119
+ @click=${() => this.selectTab(index)}
120
+ >
121
+ <img src="${tab.icon}" />
122
+ <p><strong>${tab.title}</strong></p>
123
+ </button>
124
+ `
125
+ )}
126
+ </div>
127
+ <div class="bd-card-container">
128
+ <div class="bd-left">
129
+ <picture>
130
+ ${["webp", "png"].map((format) =>
131
+ ["2000", "750"].map(
132
+ (width) => html`
133
+ <source
134
+ type="image/${format}"
135
+ srcset="
136
+ ${selectedTabData.imageBase}?width=${width}&format=${format}&optimize=medium
137
+ "
138
+ media="${width === "2000" ? "(min-width: 600px)" : ""}"
139
+ />
140
+ `
141
+ )
142
+ )}
143
+ <img
144
+ loading="lazy"
145
+ alt="${selectedTabData.title}"
146
+ src="${selectedTabData.imageBase}?width=750&format=png&optimize=medium"
147
+ />
148
+ </picture>
149
+ </div>
150
+ <div class="bd-right">
151
+ <h3>${content[this.selectedTab].heading}</h3>
152
+ ${content[this.selectedTab].description()}
153
+ <a
154
+ href="${content[this.selectedTab].href}"
155
+ class="bd-find-out-more"
156
+ >
157
+ Find out more
158
+ <span class="bd-arrow">
159
+ <svg
160
+ width="14"
161
+ height="14"
162
+ viewBox="0 0 24 24"
163
+ fill="none"
164
+ stroke="currentColor"
165
+ stroke-width="3"
166
+ stroke-linecap="round"
167
+ stroke-linejoin="round"
168
+ >
169
+ <path d="M5 12h14"></path>
170
+ <path d="M12 5l7 7-7 7"></path>
171
+ </svg>
172
+ </span>
173
+ </a>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ `;
178
+ }
179
+ }
180
+
181
+ TabsComponent.styles = [tabsCSS];
182
+
183
+ customElements.define("bd-tabs-component", TabsComponent);
@@ -0,0 +1,18 @@
1
+ import { html } from 'lit';
2
+ import './tabs.js';
3
+
4
+ export default {
5
+ title: 'Components/Tabs',
6
+ component: 'bd-tabs-component',
7
+ decorators: [
8
+ (story) => html`<div class="tabs">${story()}</div>`,
9
+ ],
10
+ parameters: {
11
+ layout: 'centered',
12
+ },
13
+ };
14
+
15
+ const Template = () => html`<bd-tabs-component></bd-tabs-component>`;
16
+
17
+ export const Default = Template.bind({});
18
+ Default.storyName = 'Tabs Component';
@@ -0,0 +1,38 @@
1
+ import { css } from "../../../node_modules/lit-element/lit-element";
2
+
3
+ export default css`
4
+ :host {
5
+ --background-card-grey: var(--color-neutral-25);
6
+ --border-card-grey: var(--color-neutral-50);
7
+ --border-card-green: var(--color-green-700);
8
+ --badge-background: var(--color-blue-500);
9
+ --text-color-white: var(--color-neutral-0);
10
+ -webkit-font-smoothing: antialiased;
11
+ -moz-osx-font-smoothing: grayscale;
12
+ display: block;
13
+ }
14
+
15
+ .bd-terms-container {
16
+ background: #f2f2f2;
17
+ padding: var(--size-44) 0;
18
+ font-family: Arial, Helvetica, sans-serif;
19
+ }
20
+
21
+ .bd-terms-wrapper {
22
+ padding: var(--size-14) var(--size-20) var(--size-40) var(--size-20);
23
+ }
24
+
25
+ #bd-terms-of-use {
26
+ font-size: var(--size-16);
27
+ }
28
+
29
+ .bd-terms-text-p {
30
+ font-size: var(--size-12);
31
+ line-height: 1.31;
32
+ letter-spacing: 0.006em;
33
+ padding: 0;
34
+ }
35
+ .bd-terms-text-a {
36
+ color: var(--color-blue-500);
37
+ }
38
+ `;