@grantcodes/ui 2.15.6 → 2.16.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/CHANGELOG.md +67 -0
- package/custom-elements.json +476 -346
- package/package.json +23 -23
- package/src/components/accordion/accordion-item.component.js +17 -19
- package/src/components/accordion/accordion-item.css +40 -44
- package/src/components/accordion/accordion.component.js +7 -7
- package/src/components/accordion/accordion.css +5 -5
- package/src/components/accordion/accordion.js +6 -6
- package/src/components/accordion/accordion.react.js +6 -6
- package/src/components/accordion/accordion.stories.js +10 -10
- package/src/components/accordion/accordion.test.js +100 -100
- package/src/components/accordion/index.js +6 -6
- package/src/components/app-bar/app-bar.component.js +86 -92
- package/src/components/app-bar/app-bar.css +187 -203
- package/src/components/app-bar/app-bar.js +3 -3
- package/src/components/app-bar/app-bar.react.js +9 -9
- package/src/components/app-bar/app-bar.stories.js +20 -20
- package/src/components/app-bar/app-bar.test.js +190 -237
- package/src/components/app-bar/index.js +1 -1
- package/src/components/app-bar/nav-link.component.js +7 -9
- package/src/components/app-bar/nav-link.css +23 -28
- package/src/components/app-bar/nav-link.js +3 -3
- package/src/components/app-bar/nav-link.react.js +6 -6
- package/src/components/avatar/avatar.component.js +79 -68
- package/src/components/avatar/avatar.css +18 -18
- package/src/components/avatar/avatar.js +3 -3
- package/src/components/avatar/avatar.react.js +6 -6
- package/src/components/avatar/avatar.stories.js +24 -23
- package/src/components/avatar/avatar.test.js +128 -84
- package/src/components/avatar/index.js +1 -1
- package/src/components/badge/badge.component.js +23 -23
- package/src/components/badge/badge.css +39 -52
- package/src/components/badge/badge.js +3 -3
- package/src/components/badge/badge.react.js +6 -6
- package/src/components/badge/badge.stories.js +23 -23
- package/src/components/badge/badge.test.js +53 -68
- package/src/components/badge/index.js +1 -1
- package/src/components/breadcrumb/breadcrumb.component.js +95 -96
- package/src/components/breadcrumb/breadcrumb.css +42 -44
- package/src/components/breadcrumb/breadcrumb.js +6 -9
- package/src/components/breadcrumb/breadcrumb.react.js +9 -12
- package/src/components/breadcrumb/breadcrumb.stories.js +5 -5
- package/src/components/breadcrumb/breadcrumb.test.js +139 -151
- package/src/components/breadcrumb/index.js +1 -1
- package/src/components/button/button.component.js +101 -103
- package/src/components/button/button.css +90 -94
- package/src/components/button/button.js +3 -3
- package/src/components/button/button.react.js +6 -6
- package/src/components/button/button.stories.js +25 -25
- package/src/components/button/button.test.js +324 -344
- package/src/components/button/index.js +1 -1
- package/src/components/button-group/button-group.component.js +18 -18
- package/src/components/button-group/button-group.css +16 -16
- package/src/components/button-group/button-group.js +3 -3
- package/src/components/button-group/button-group.react.js +6 -6
- package/src/components/button-group/button-group.stories.js +23 -23
- package/src/components/button-group/button-group.test.js +54 -54
- package/src/components/button-group/index.js +1 -1
- package/src/components/card/card.component.js +31 -33
- package/src/components/card/card.css +85 -85
- package/src/components/card/card.js +4 -4
- package/src/components/card/card.react.js +6 -6
- package/src/components/card/card.stories.js +27 -26
- package/src/components/card/card.test.js +56 -56
- package/src/components/card/index.js +1 -1
- package/src/components/code-preview/code-preview.component.js +47 -48
- package/src/components/code-preview/code-preview.css +11 -11
- package/src/components/code-preview/code-preview.js +3 -3
- package/src/components/code-preview/code-preview.react.js +6 -6
- package/src/components/code-preview/code-preview.stories.js +29 -29
- package/src/components/code-preview/code-preview.test.js +112 -135
- package/src/components/code-preview/index.js +1 -1
- package/src/components/container/container.component.js +27 -27
- package/src/components/container/container.css +22 -22
- package/src/components/container/container.js +3 -3
- package/src/components/container/container.react.js +6 -6
- package/src/components/container/container.stories.js +44 -44
- package/src/components/container/container.test.js +54 -66
- package/src/components/container/index.js +1 -1
- package/src/components/countdown/countdown.component.js +160 -162
- package/src/components/countdown/countdown.css +50 -34
- package/src/components/countdown/countdown.js +3 -3
- package/src/components/countdown/countdown.react.js +6 -6
- package/src/components/countdown/countdown.stories.js +34 -34
- package/src/components/countdown/index.js +1 -1
- package/src/components/cta/cta.component.js +77 -81
- package/src/components/cta/cta.css +24 -24
- package/src/components/cta/cta.js +3 -3
- package/src/components/cta/cta.react.js +6 -6
- package/src/components/cta/cta.stories.js +32 -32
- package/src/components/cta/index.js +1 -1
- package/src/components/dialog/dialog.component.js +95 -58
- package/src/components/dialog/dialog.css +45 -50
- package/src/components/dialog/dialog.js +3 -3
- package/src/components/dialog/dialog.react.js +6 -6
- package/src/components/dialog/dialog.stories.js +38 -29
- package/src/components/dialog/dialog.test.js +188 -102
- package/src/components/dialog/index.js +1 -1
- package/src/components/dropdown/dropdown.component.js +220 -201
- package/src/components/dropdown/dropdown.css +60 -84
- package/src/components/dropdown/dropdown.js +6 -9
- package/src/components/dropdown/dropdown.react.js +15 -15
- package/src/components/dropdown/dropdown.stories.js +10 -10
- package/src/components/dropdown/dropdown.test.js +211 -157
- package/src/components/dropdown/index.js +1 -1
- package/src/components/dropzone/dropzone.component.js +126 -129
- package/src/components/dropzone/dropzone.css +35 -37
- package/src/components/dropzone/dropzone.js +3 -3
- package/src/components/dropzone/dropzone.react.js +6 -6
- package/src/components/dropzone/dropzone.stories.js +28 -28
- package/src/components/dropzone/dropzone.test.js +91 -99
- package/src/components/dropzone/index.js +1 -1
- package/src/components/feature-list/feature-list.component.js +78 -86
- package/src/components/feature-list/feature-list.css +37 -37
- package/src/components/feature-list/feature-list.js +3 -3
- package/src/components/feature-list/feature-list.react.js +6 -6
- package/src/components/feature-list/feature-list.stories.js +86 -90
- package/src/components/feature-list/index.js +1 -1
- package/src/components/footer/footer-column.component.js +7 -7
- package/src/components/footer/footer-column.css +22 -22
- package/src/components/footer/footer.component.js +19 -19
- package/src/components/footer/footer.css +38 -38
- package/src/components/footer/footer.js +8 -8
- package/src/components/footer/footer.react.js +9 -9
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/footer.test.js +101 -111
- package/src/components/footer/index.js +2 -2
- package/src/components/form-field/form-field.component.js +167 -125
- package/src/components/form-field/form-field.css +24 -24
- package/src/components/form-field/form-field.js +3 -3
- package/src/components/form-field/form-field.react.js +6 -6
- package/src/components/form-field/form-field.stories.js +53 -44
- package/src/components/form-field/form-field.test.js +280 -134
- package/src/components/form-field/index.js +1 -1
- package/src/components/gallery/gallery-image.component.js +30 -30
- package/src/components/gallery/gallery-image.js +3 -3
- package/src/components/gallery/gallery-image.react.js +6 -6
- package/src/components/gallery/gallery.component.js +24 -17
- package/src/components/gallery/gallery.css +79 -72
- package/src/components/gallery/gallery.js +3 -3
- package/src/components/gallery/gallery.react.js +6 -6
- package/src/components/gallery/gallery.stories.js +69 -68
- package/src/components/gallery/gallery.test.js +95 -88
- package/src/components/gallery/index.js +2 -2
- package/src/components/hero/hero.component.js +53 -57
- package/src/components/hero/hero.css +27 -27
- package/src/components/hero/hero.js +3 -3
- package/src/components/hero/hero.react.js +6 -6
- package/src/components/hero/hero.stories.js +39 -39
- package/src/components/hero/index.js +1 -1
- package/src/components/icon/icon.component.js +10 -10
- package/src/components/icon/icon.css +13 -13
- package/src/components/icon/icon.js +4 -4
- package/src/components/icon/icon.react.js +6 -6
- package/src/components/icon/icon.stories.js +8 -9
- package/src/components/icon/icon.test.js +54 -55
- package/src/components/icon/index.js +1 -1
- package/src/components/loading/index.js +1 -1
- package/src/components/loading/loading.component.js +41 -14
- package/src/components/loading/loading.css +47 -30
- package/src/components/loading/loading.js +4 -4
- package/src/components/loading/loading.react.js +6 -6
- package/src/components/loading/loading.stories.js +19 -18
- package/src/components/loading/loading.test.js +77 -54
- package/src/components/logo-cloud/index.js +1 -1
- package/src/components/logo-cloud/logo-cloud.component.js +39 -43
- package/src/components/logo-cloud/logo-cloud.css +31 -31
- package/src/components/logo-cloud/logo-cloud.js +3 -3
- package/src/components/logo-cloud/logo-cloud.react.js +6 -6
- package/src/components/logo-cloud/logo-cloud.stories.js +80 -80
- package/src/components/map/index.js +1 -1
- package/src/components/map/map.component.js +103 -107
- package/src/components/map/map.css +22 -22
- package/src/components/map/map.js +3 -3
- package/src/components/map/map.react.js +6 -6
- package/src/components/map/map.stories.js +38 -38
- package/src/components/media-text/index.js +1 -1
- package/src/components/media-text/media-text.component.js +76 -70
- package/src/components/media-text/media-text.css +32 -32
- package/src/components/media-text/media-text.js +3 -3
- package/src/components/media-text/media-text.react.js +6 -6
- package/src/components/media-text/media-text.stories.js +45 -45
- package/src/components/media-text/media-text.test.js +72 -0
- package/src/components/newsletter/index.js +1 -1
- package/src/components/newsletter/newsletter.component.js +56 -64
- package/src/components/newsletter/newsletter.css +48 -48
- package/src/components/newsletter/newsletter.js +3 -3
- package/src/components/newsletter/newsletter.react.js +6 -6
- package/src/components/newsletter/newsletter.stories.js +35 -35
- package/src/components/notice/index.js +1 -1
- package/src/components/notice/notice.component.js +66 -55
- package/src/components/notice/notice.css +37 -38
- package/src/components/notice/notice.js +3 -3
- package/src/components/notice/notice.react.js +6 -6
- package/src/components/notice/notice.stories.js +54 -53
- package/src/components/notice/notice.test.js +210 -156
- package/src/components/pagination/index.js +1 -1
- package/src/components/pagination/pagination.component.js +44 -44
- package/src/components/pagination/pagination.css +6 -6
- package/src/components/pagination/pagination.js +4 -4
- package/src/components/pagination/pagination.react.js +6 -6
- package/src/components/pagination/pagination.stories.js +20 -18
- package/src/components/pagination/pagination.test.js +95 -102
- package/src/components/person/index.js +1 -1
- package/src/components/person/person.component.js +29 -29
- package/src/components/person/person.css +17 -17
- package/src/components/person/person.js +4 -4
- package/src/components/person/person.react.js +6 -6
- package/src/components/person/person.stories.js +34 -33
- package/src/components/person/person.test.js +55 -68
- package/src/components/pricing/index.js +1 -1
- package/src/components/pricing/pricing.component.js +58 -70
- package/src/components/pricing/pricing.css +65 -65
- package/src/components/pricing/pricing.js +3 -3
- package/src/components/pricing/pricing.react.js +6 -6
- package/src/components/pricing/pricing.stories.js +96 -96
- package/src/components/sidebar/index.js +1 -1
- package/src/components/sidebar/sidebar.component.js +157 -130
- package/src/components/sidebar/sidebar.css +118 -115
- package/src/components/sidebar/sidebar.js +4 -4
- package/src/components/sidebar/sidebar.react.js +10 -10
- package/src/components/sidebar/sidebar.stories.js +10 -10
- package/src/components/sidebar/sidebar.test.js +250 -230
- package/src/components/stats/index.js +1 -1
- package/src/components/stats/stats.component.js +42 -50
- package/src/components/stats/stats.css +29 -29
- package/src/components/stats/stats.js +3 -3
- package/src/components/stats/stats.react.js +6 -6
- package/src/components/stats/stats.stories.js +40 -40
- package/src/components/tabs/index.js +2 -2
- package/src/components/tabs/internal/tabs-button.component.js +16 -27
- package/src/components/tabs/internal/tabs-button.js +3 -3
- package/src/components/tabs/internal/tabs-button.react.js +6 -6
- package/src/components/tabs/internal/tabs-item.component.js +30 -30
- package/src/components/tabs/tab.component.js +9 -11
- package/src/components/tabs/tab.js +3 -3
- package/src/components/tabs/tab.react.js +6 -6
- package/src/components/tabs/tabs.component.js +107 -109
- package/src/components/tabs/tabs.css +50 -59
- package/src/components/tabs/tabs.js +4 -4
- package/src/components/tabs/tabs.react.js +6 -6
- package/src/components/tabs/tabs.stories.js +23 -22
- package/src/components/tabs/tabs.test.js +201 -147
- package/src/components/testimonials/index.js +1 -1
- package/src/components/testimonials/testimonials.component.js +47 -51
- package/src/components/testimonials/testimonials.css +31 -31
- package/src/components/testimonials/testimonials.js +3 -3
- package/src/components/testimonials/testimonials.react.js +6 -6
- package/src/components/testimonials/testimonials.stories.js +49 -51
- package/src/components/toast/index.js +1 -1
- package/src/components/toast/toast.component.js +217 -148
- package/src/components/toast/toast.css +101 -99
- package/src/components/toast/toast.js +6 -9
- package/src/components/toast/toast.react.js +12 -12
- package/src/components/toast/toast.stories.js +75 -49
- package/src/components/toast/toast.test.js +260 -221
- package/src/components/tooltip/index.js +1 -1
- package/src/components/tooltip/tooltip.component.js +56 -49
- package/src/components/tooltip/tooltip.css +61 -50
- package/src/components/tooltip/tooltip.js +4 -4
- package/src/components/tooltip/tooltip.react.js +6 -6
- package/src/components/tooltip/tooltip.stories.js +24 -23
- package/src/components/tooltip/tooltip.test.js +143 -155
- package/src/constructor.test.js +31 -0
- package/src/css/base.css +1 -0
- package/src/css/colors.stories.js +120 -122
- package/src/css/elements/a.css +28 -28
- package/src/css/elements/forms/button.css +1 -1
- package/src/css/elements/forms/input.css +80 -80
- package/src/css/elements/forms/label.css +3 -3
- package/src/css/elements/media/image.css +2 -2
- package/src/css/elements.stories.js +48 -49
- package/src/css/helpers.css +8 -8
- package/src/css/layers.stories.js +5 -5
- package/src/css/reset.css +102 -102
- package/src/css/themes/todomap.css +1 -1
- package/src/css/tokens.stories.js +50 -53
- package/src/css/typography.css +30 -32
- package/src/css/typography.stories.js +92 -92
- package/src/css/util/focus-ring.css +12 -20
- package/src/css/view-transitions.css +16 -0
- package/src/exports.test.js +89 -105
- package/src/icons.js +1 -1
- package/src/lib/generate-id.js +1 -1
- package/src/lib/slot-presence-controller.js +48 -0
- package/src/lib/styles/all.css +38 -37
- package/src/lib/styles/focus-ring.css +12 -20
- package/src/lib/view-transition.js +42 -0
- package/src/lib/view-transition.test.js +105 -0
- package/src/main.js +29 -29
- package/src/pages/agency.stories.js +59 -59
- package/src/pages/blog-post.stories.js +48 -48
- package/src/pages/saas-landing.stories.js +180 -180
- package/src/react.js +44 -44
- package/src/react.test.js +42 -51
- package/src/test-utils/assert-helpers.js +39 -58
- package/src/test-utils/events.js +32 -34
- package/src/test-utils/fixture.js +31 -31
- package/src/test-utils/index.js +3 -3
- package/src/types.d.ts +3 -3
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { html } from
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import '../components/app-bar/app-bar.js';
|
|
3
|
+
import '../components/app-bar/nav-link.js';
|
|
4
|
+
import '../components/button/button.js';
|
|
5
|
+
import '../components/hero/hero.js';
|
|
6
|
+
import '../components/logo-cloud/logo-cloud.js';
|
|
7
|
+
import '../components/feature-list/feature-list.js';
|
|
8
|
+
import '../components/stats/stats.js';
|
|
9
|
+
import '../components/testimonials/testimonials.js';
|
|
10
|
+
import '../components/pricing/pricing.js';
|
|
11
|
+
import '../components/newsletter/newsletter.js';
|
|
12
|
+
import '../components/footer/footer.js';
|
|
13
13
|
|
|
14
14
|
const meta = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
title: 'Pages/SaaS Landing',
|
|
16
|
+
parameters: {
|
|
17
|
+
layout: 'fullscreen',
|
|
18
|
+
},
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export default meta;
|
|
@@ -70,7 +70,7 @@ const footerContent = html`
|
|
|
70
70
|
* feature-list, stats, testimonials, pricing, newsletter, and footer.
|
|
71
71
|
*/
|
|
72
72
|
export const Default = {
|
|
73
|
-
|
|
73
|
+
render: () => html`
|
|
74
74
|
<grantcodes-app-bar sticky>
|
|
75
75
|
<a slot="logo" href="/" style="font-weight: 700; font-size: 1.25rem; text-decoration: none; color: inherit;">
|
|
76
76
|
Flowbase
|
|
@@ -95,37 +95,37 @@ export const Default = {
|
|
|
95
95
|
<grantcodes-logo-cloud
|
|
96
96
|
title="Trusted by teams at"
|
|
97
97
|
logos=${JSON.stringify([
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
98
|
+
{
|
|
99
|
+
name: 'Vercel',
|
|
100
|
+
src: 'https://placehold.co/120x40?text=Vercel',
|
|
101
|
+
alt: 'Vercel',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Linear',
|
|
105
|
+
src: 'https://placehold.co/120x40?text=Linear',
|
|
106
|
+
alt: 'Linear',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'Stripe',
|
|
110
|
+
src: 'https://placehold.co/120x40?text=Stripe',
|
|
111
|
+
alt: 'Stripe',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'Notion',
|
|
115
|
+
src: 'https://placehold.co/120x40?text=Notion',
|
|
116
|
+
alt: 'Notion',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'Figma',
|
|
120
|
+
src: 'https://placehold.co/120x40?text=Figma',
|
|
121
|
+
alt: 'Figma',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'Loom',
|
|
125
|
+
src: 'https://placehold.co/120x40?text=Loom',
|
|
126
|
+
alt: 'Loom',
|
|
127
|
+
},
|
|
128
|
+
])}
|
|
129
129
|
></grantcodes-logo-cloud>
|
|
130
130
|
|
|
131
131
|
<grantcodes-feature-list
|
|
@@ -133,156 +133,156 @@ export const Default = {
|
|
|
133
133
|
subtitle="Flowbase combines the tools you already love into a single, cohesive experience — so your team stays in flow."
|
|
134
134
|
columns="3"
|
|
135
135
|
items=${JSON.stringify([
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
136
|
+
{
|
|
137
|
+
title: 'Task management',
|
|
138
|
+
description:
|
|
139
|
+
'Create, assign, and track work across your entire team with a simple, powerful interface.',
|
|
140
|
+
icon: 'check-square',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
title: 'Real-time docs',
|
|
144
|
+
description:
|
|
145
|
+
'Write collaboratively without conflicts. Docs live next to the tasks they belong to.',
|
|
146
|
+
icon: 'file-text',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
title: 'CI/CD pipelines',
|
|
150
|
+
description:
|
|
151
|
+
'Trigger builds, run tests, and deploy to production without leaving your workspace.',
|
|
152
|
+
icon: 'git-branch',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
title: 'Team inbox',
|
|
156
|
+
description:
|
|
157
|
+
'Pull in Slack, email, and GitHub notifications into one shared inbox your team can triage together.',
|
|
158
|
+
icon: 'inbox',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
title: 'Analytics',
|
|
162
|
+
description:
|
|
163
|
+
'Understand velocity, cycle time, and deployment frequency with built-in engineering metrics.',
|
|
164
|
+
icon: 'bar-chart-2',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
title: 'Access controls',
|
|
168
|
+
description:
|
|
169
|
+
'Fine-grained roles and SSO keep your data secure without slowing your team down.',
|
|
170
|
+
icon: 'shield',
|
|
171
|
+
},
|
|
172
|
+
])}
|
|
173
173
|
></grantcodes-feature-list>
|
|
174
174
|
|
|
175
175
|
<grantcodes-stats
|
|
176
176
|
title="Built for teams that care about output"
|
|
177
177
|
columns="4"
|
|
178
178
|
items=${JSON.stringify([
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
179
|
+
{
|
|
180
|
+
value: '12×',
|
|
181
|
+
label: 'Faster shipping',
|
|
182
|
+
context: 'compared to teams using 4+ separate tools',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
value: '98%',
|
|
186
|
+
label: 'Uptime SLA',
|
|
187
|
+
context: 'backed by our enterprise plan',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
value: '50k+',
|
|
191
|
+
label: 'Active teams',
|
|
192
|
+
context: 'across 80 countries',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
value: '4.9 / 5',
|
|
196
|
+
label: 'Customer rating',
|
|
197
|
+
context: 'across G2, Capterra, and Product Hunt',
|
|
198
|
+
},
|
|
199
|
+
])}
|
|
200
200
|
></grantcodes-stats>
|
|
201
201
|
|
|
202
202
|
<grantcodes-testimonials
|
|
203
203
|
title="What teams are saying"
|
|
204
204
|
layout="cards"
|
|
205
205
|
items=${JSON.stringify([
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
206
|
+
{
|
|
207
|
+
quote:
|
|
208
|
+
'We cut our weekly planning meeting from 90 minutes to 15. Flowbase just… makes it obvious what needs to happen next.',
|
|
209
|
+
name: 'Maya Okafor',
|
|
210
|
+
role: 'Engineering Lead',
|
|
211
|
+
company: 'Pulse Labs',
|
|
212
|
+
avatar: 'https://i.pravatar.cc/80?img=47',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
quote:
|
|
216
|
+
"I've tried every project tool out there. Flowbase is the first one that didn't need a dedicated Ops person to keep it clean.",
|
|
217
|
+
name: 'Sam Torres',
|
|
218
|
+
role: 'CTO',
|
|
219
|
+
company: 'Stackform',
|
|
220
|
+
avatar: 'https://i.pravatar.cc/80?img=12',
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
quote:
|
|
224
|
+
'The CI integration alone saved us four hours a week. The rest is just a bonus at this point.',
|
|
225
|
+
name: 'Priya Nair',
|
|
226
|
+
role: 'Senior Developer',
|
|
227
|
+
company: 'Mintcode',
|
|
228
|
+
avatar: 'https://i.pravatar.cc/80?img=32',
|
|
229
|
+
},
|
|
230
|
+
])}
|
|
231
231
|
></grantcodes-testimonials>
|
|
232
232
|
|
|
233
233
|
<grantcodes-pricing
|
|
234
234
|
title="Simple, honest pricing"
|
|
235
235
|
subtitle="No per-seat surprises. No feature gating. Pick the plan that fits your team size."
|
|
236
236
|
tiers=${JSON.stringify([
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
237
|
+
{
|
|
238
|
+
name: 'Starter',
|
|
239
|
+
price: 'Free',
|
|
240
|
+
period: '',
|
|
241
|
+
description: 'For solo developers and small side projects.',
|
|
242
|
+
features: [
|
|
243
|
+
{ text: 'Up to 3 team members', included: true },
|
|
244
|
+
{ text: 'Unlimited tasks', included: true },
|
|
245
|
+
{ text: '5 GB storage', included: true },
|
|
246
|
+
{ text: 'CI/CD pipelines', included: false },
|
|
247
|
+
{ text: 'SSO', included: false },
|
|
248
|
+
{ text: 'Priority support', included: false },
|
|
249
|
+
],
|
|
250
|
+
cta: { label: 'Get started free', href: '/signup' },
|
|
251
|
+
highlighted: false,
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: 'Team',
|
|
255
|
+
price: '$49',
|
|
256
|
+
period: 'month',
|
|
257
|
+
description: 'For growing teams that need to move fast.',
|
|
258
|
+
features: [
|
|
259
|
+
{ text: 'Up to 20 team members', included: true },
|
|
260
|
+
{ text: 'Unlimited tasks', included: true },
|
|
261
|
+
{ text: '50 GB storage', included: true },
|
|
262
|
+
{ text: 'CI/CD pipelines', included: true },
|
|
263
|
+
{ text: 'SSO', included: false },
|
|
264
|
+
{ text: 'Priority support', included: false },
|
|
265
|
+
],
|
|
266
|
+
cta: { label: 'Start free trial', href: '/signup?plan=team' },
|
|
267
|
+
highlighted: true,
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'Enterprise',
|
|
271
|
+
price: '$149',
|
|
272
|
+
period: 'month',
|
|
273
|
+
description: 'For large teams with advanced security needs.',
|
|
274
|
+
features: [
|
|
275
|
+
{ text: 'Unlimited team members', included: true },
|
|
276
|
+
{ text: 'Unlimited tasks', included: true },
|
|
277
|
+
{ text: '500 GB storage', included: true },
|
|
278
|
+
{ text: 'CI/CD pipelines', included: true },
|
|
279
|
+
{ text: 'SSO', included: true },
|
|
280
|
+
{ text: 'Priority support', included: true },
|
|
281
|
+
],
|
|
282
|
+
cta: { label: 'Contact sales', href: '/contact' },
|
|
283
|
+
highlighted: false,
|
|
284
|
+
},
|
|
285
|
+
])}
|
|
286
286
|
></grantcodes-pricing>
|
|
287
287
|
|
|
288
288
|
<grantcodes-newsletter
|
package/src/react.js
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
export { Accordion } from
|
|
2
|
-
export { AppBar } from
|
|
3
|
-
export { NavLink } from
|
|
4
|
-
export { Avatar } from
|
|
5
|
-
export { Badge } from
|
|
1
|
+
export { Accordion } from './components/accordion/accordion.react.js';
|
|
2
|
+
export { AppBar } from './components/app-bar/app-bar.react.js';
|
|
3
|
+
export { NavLink } from './components/app-bar/nav-link.react.js';
|
|
4
|
+
export { Avatar } from './components/avatar/avatar.react.js';
|
|
5
|
+
export { Badge } from './components/badge/badge.react.js';
|
|
6
6
|
export {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} from
|
|
10
|
-
export { Button } from
|
|
11
|
-
export { ButtonGroup } from
|
|
12
|
-
export { Card } from
|
|
13
|
-
export { CodePreview } from
|
|
14
|
-
export { Container } from
|
|
15
|
-
export { Countdown } from
|
|
16
|
-
export { Cta } from
|
|
17
|
-
export { Dialog } from
|
|
7
|
+
Breadcrumb,
|
|
8
|
+
BreadcrumbItem,
|
|
9
|
+
} from './components/breadcrumb/breadcrumb.react.js';
|
|
10
|
+
export { Button } from './components/button/button.react.js';
|
|
11
|
+
export { ButtonGroup } from './components/button-group/button-group.react.js';
|
|
12
|
+
export { Card } from './components/card/card.react.js';
|
|
13
|
+
export { CodePreview } from './components/code-preview/code-preview.react.js';
|
|
14
|
+
export { Container } from './components/container/container.react.js';
|
|
15
|
+
export { Countdown } from './components/countdown/countdown.react.js';
|
|
16
|
+
export { Cta } from './components/cta/cta.react.js';
|
|
17
|
+
export { Dialog } from './components/dialog/dialog.react.js';
|
|
18
18
|
export {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} from
|
|
22
|
-
export { Dropzone } from
|
|
23
|
-
export { FeatureList } from
|
|
24
|
-
export { Footer, FooterColumn } from
|
|
25
|
-
export { FormField } from
|
|
26
|
-
export { Gallery } from
|
|
27
|
-
export { GalleryImage } from
|
|
28
|
-
export { Hero } from
|
|
29
|
-
export { Icon } from
|
|
30
|
-
export { Loading } from
|
|
31
|
-
export { LogoCloud } from
|
|
32
|
-
export { MapEmbed } from
|
|
33
|
-
export { MediaText } from
|
|
34
|
-
export { Newsletter } from
|
|
35
|
-
export { Notice } from
|
|
36
|
-
export { Pagination } from
|
|
37
|
-
export { Person } from
|
|
38
|
-
export { Pricing } from
|
|
39
|
-
export { Sidebar } from
|
|
40
|
-
export { Stats } from
|
|
41
|
-
export {
|
|
42
|
-
export {
|
|
43
|
-
export {
|
|
44
|
-
export { Testimonials } from
|
|
45
|
-
export { Toast, ToastContainer } from
|
|
46
|
-
export { Tooltip } from
|
|
19
|
+
Dropdown,
|
|
20
|
+
DropdownItem,
|
|
21
|
+
} from './components/dropdown/dropdown.react.js';
|
|
22
|
+
export { Dropzone } from './components/dropzone/dropzone.react.js';
|
|
23
|
+
export { FeatureList } from './components/feature-list/feature-list.react.js';
|
|
24
|
+
export { Footer, FooterColumn } from './components/footer/footer.react.js';
|
|
25
|
+
export { FormField } from './components/form-field/form-field.react.js';
|
|
26
|
+
export { Gallery } from './components/gallery/gallery.react.js';
|
|
27
|
+
export { GalleryImage } from './components/gallery/gallery-image.react.js';
|
|
28
|
+
export { Hero } from './components/hero/hero.react.js';
|
|
29
|
+
export { Icon } from './components/icon/icon.react.js';
|
|
30
|
+
export { Loading } from './components/loading/loading.react.js';
|
|
31
|
+
export { LogoCloud } from './components/logo-cloud/logo-cloud.react.js';
|
|
32
|
+
export { MapEmbed } from './components/map/map.react.js';
|
|
33
|
+
export { MediaText } from './components/media-text/media-text.react.js';
|
|
34
|
+
export { Newsletter } from './components/newsletter/newsletter.react.js';
|
|
35
|
+
export { Notice } from './components/notice/notice.react.js';
|
|
36
|
+
export { Pagination } from './components/pagination/pagination.react.js';
|
|
37
|
+
export { Person } from './components/person/person.react.js';
|
|
38
|
+
export { Pricing } from './components/pricing/pricing.react.js';
|
|
39
|
+
export { Sidebar } from './components/sidebar/sidebar.react.js';
|
|
40
|
+
export { Stats } from './components/stats/stats.react.js';
|
|
41
|
+
export { TabsButton } from './components/tabs/internal/tabs-button.react.js';
|
|
42
|
+
export { Tab } from './components/tabs/tab.react.js';
|
|
43
|
+
export { Tabs } from './components/tabs/tabs.react.js';
|
|
44
|
+
export { Testimonials } from './components/testimonials/testimonials.react.js';
|
|
45
|
+
export { Toast, ToastContainer } from './components/toast/toast.react.js';
|
|
46
|
+
export { Tooltip } from './components/tooltip/tooltip.react.js';
|
package/src/react.test.js
CHANGED
|
@@ -1,56 +1,47 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { strict as assert } from 'node:assert';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
3
|
|
|
4
|
-
describe(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
4
|
+
describe('React Wrappers', () => {
|
|
5
|
+
it('should export all component wrappers', async () => {
|
|
6
|
+
const react = await import('./react.js');
|
|
7
|
+
assert.ok(react.Button, 'Button wrapper should be exported');
|
|
8
|
+
assert.ok(react.Card, 'Card wrapper should be exported');
|
|
9
|
+
assert.ok(react.Dialog, 'Dialog wrapper should be exported');
|
|
10
|
+
assert.ok(react.Accordion, 'Accordion wrapper should be exported');
|
|
11
|
+
assert.ok(react.Tooltip, 'Tooltip wrapper should be exported');
|
|
12
|
+
assert.ok(react.Hero, 'Hero wrapper should be exported');
|
|
13
|
+
assert.ok(react.Container, 'Container wrapper should be exported');
|
|
14
|
+
assert.ok(react.Icon, 'Icon wrapper should be exported');
|
|
15
|
+
assert.ok(react.Loading, 'Loading wrapper should be exported');
|
|
16
|
+
assert.ok(react.Notice, 'Notice wrapper should be exported');
|
|
17
|
+
});
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
`Expected at least 35 exports, got ${exportCount}`,
|
|
25
|
-
);
|
|
26
|
-
});
|
|
19
|
+
it('should export at least 35 component wrappers', async () => {
|
|
20
|
+
const react = await import('./react.js');
|
|
21
|
+
const exportCount = Object.keys(react).length;
|
|
22
|
+
assert.ok(exportCount >= 35, `Expected at least 35 exports, got ${exportCount}`);
|
|
23
|
+
});
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
it('should export event-mapped components', async () => {
|
|
26
|
+
const react = await import('./react.js');
|
|
27
|
+
assert.ok(react.AppBar, 'AppBar wrapper should be exported');
|
|
28
|
+
assert.ok(react.Dropdown, 'Dropdown wrapper should be exported');
|
|
29
|
+
assert.ok(react.DropdownItem, 'DropdownItem wrapper should be exported');
|
|
30
|
+
assert.ok(react.Sidebar, 'Sidebar wrapper should be exported');
|
|
31
|
+
assert.ok(react.Toast, 'Toast wrapper should be exported');
|
|
32
|
+
});
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
assert.ok(react.TabsButton, "TabsButton wrapper should be exported");
|
|
51
|
-
assert.ok(
|
|
52
|
-
react.ToastContainer,
|
|
53
|
-
"ToastContainer wrapper should be exported",
|
|
54
|
-
);
|
|
55
|
-
});
|
|
34
|
+
it('should export compound component wrappers', async () => {
|
|
35
|
+
const react = await import('./react.js');
|
|
36
|
+
assert.ok(react.Breadcrumb, 'Breadcrumb wrapper should be exported');
|
|
37
|
+
assert.ok(react.BreadcrumbItem, 'BreadcrumbItem wrapper should be exported');
|
|
38
|
+
assert.ok(react.Footer, 'Footer wrapper should be exported');
|
|
39
|
+
assert.ok(react.FooterColumn, 'FooterColumn wrapper should be exported');
|
|
40
|
+
assert.ok(react.Gallery, 'Gallery wrapper should be exported');
|
|
41
|
+
assert.ok(react.GalleryImage, 'GalleryImage wrapper should be exported');
|
|
42
|
+
assert.ok(react.Tabs, 'Tabs wrapper should be exported');
|
|
43
|
+
assert.ok(react.Tab, 'Tab wrapper should be exported');
|
|
44
|
+
assert.ok(react.TabsButton, 'TabsButton wrapper should be exported');
|
|
45
|
+
assert.ok(react.ToastContainer, 'ToastContainer wrapper should be exported');
|
|
46
|
+
});
|
|
56
47
|
});
|