@upstart.gg/sdk 0.0.104 → 0.0.105
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/dist/shared/ajv.js +1 -1
- package/dist/shared/attributes.js +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.js +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
- package/dist/shared/bricks/manifests/container.manifest.js +1 -1
- package/dist/shared/bricks/manifests/divider.manifest.js +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.js +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.js +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.js +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +1 -1
- package/dist/shared/bricks.js +1 -1
- package/dist/shared/chunk-245ZLDVB.js +3 -0
- package/dist/shared/{chunk-QALNFBY7.js → chunk-2D6ZEIDX.js} +1 -1
- package/dist/shared/{chunk-CW5FWW5W.js → chunk-4BLCQRF5.js} +1 -1
- package/dist/shared/{chunk-TEPFFY32.js → chunk-5MGYT6FI.js} +1 -1
- package/dist/shared/{chunk-HQQYIKTE.js → chunk-CS5N4UQU.js} +1 -1
- package/dist/shared/{chunk-5IEGQ7YT.js → chunk-FRWB3BF3.js} +1 -1
- package/dist/shared/{chunk-I5S2MPPR.js → chunk-HYXCHFS5.js} +1 -1
- package/dist/shared/{chunk-TCZBR3ZU.js → chunk-IKSRCRZZ.js} +1 -1
- package/dist/shared/{chunk-LJQXN32B.js → chunk-ISF6EBPX.js} +1 -1
- package/dist/shared/{chunk-UK6H3FDX.js → chunk-JDBVMPSI.js} +1 -1
- package/dist/shared/{chunk-UISES3HA.js → chunk-M3Z3XDUC.js} +1 -1
- package/dist/shared/{chunk-22KRCQK5.js → chunk-MWP5IU33.js} +1 -1
- package/dist/shared/{chunk-7L3UOEMR.js → chunk-NCSLTHKN.js} +1 -1
- package/dist/shared/{chunk-O22VV7YR.js → chunk-OWON727Q.js} +1 -1
- package/dist/shared/{chunk-CEXHD4BO.js → chunk-P5RC56CL.js} +2 -2
- package/dist/shared/{chunk-ZFTWLZ3G.js → chunk-QI3BZDXL.js} +1 -1
- package/dist/shared/{chunk-F6MLW6DO.js → chunk-RDSK2G6V.js} +1 -1
- package/dist/shared/{chunk-I43NIQ2K.js → chunk-RXRPFXDF.js} +1 -1
- package/dist/shared/{chunk-POYVTV5F.js → chunk-VFGMOA4M.js} +1 -1
- package/dist/shared/{chunk-VDHLON5R.js → chunk-VPD626ML.js} +1 -1
- package/dist/shared/{chunk-WCNVFVDK.js → chunk-VROOAFFW.js} +1 -1
- package/dist/shared/{chunk-E2EBTWJI.js → chunk-WB4PGCZQ.js} +1 -1
- package/dist/shared/chunk-X2RJL33B.js +3 -0
- package/dist/shared/{chunk-OQIFFJ7I.js → chunk-X4ZBUWUL.js} +1 -1
- package/dist/shared/datasources/external/rss/fetcher.d.ts +1 -1
- package/dist/shared/datasources/external/rss/fetcher.d.ts.map +1 -1
- package/dist/shared/page.js +1 -1
- package/dist/shared/site.js +1 -1
- package/package.json +5 -9
- package/dist/shared/chunk-GPKRRX3D.js +0 -3
- package/dist/shared/chunk-JFDOR3UH.js +0 -3
- package/src/node/cli/api.ts +0 -101
- package/src/node/cli/commands/cmd-build.ts +0 -64
- package/src/node/cli/commands/login/cmd-login.ts +0 -111
- package/src/node/cli/commands/logout/cmd-logout.ts +0 -11
- package/src/node/cli/commands/publish/cmd-publish.ts +0 -135
- package/src/node/cli/commands/publish/parse-gitignore.ts +0 -278
- package/src/node/cli/commands/publish/uploader.ts +0 -333
- package/src/node/cli/constants.ts +0 -14
- package/src/node/cli/is-logged-in.ts +0 -28
- package/src/node/cli/program.ts +0 -77
- package/src/node/cli/store.ts +0 -64
- package/src/node/cli/tests/api.test.ts +0 -161
- package/src/node/cli/types.ts +0 -34
- package/src/node/cli/utils.ts +0 -20
- package/src/node/shared/config.ts +0 -69
- package/src/node/shared/logger.ts +0 -44
- package/src/shared/ajv.ts +0 -103
- package/src/shared/analytics/init.ts +0 -14
- package/src/shared/analytics/track.ts +0 -21
- package/src/shared/analytics/types.ts +0 -13
- package/src/shared/attributes.ts +0 -211
- package/src/shared/brick-manifest.ts +0 -110
- package/src/shared/bricks/manifests/accordion.manifest.ts +0 -179
- package/src/shared/bricks/manifests/all-manifests.ts +0 -92
- package/src/shared/bricks/manifests/button.manifest.ts +0 -145
- package/src/shared/bricks/manifests/card.manifest.ts +0 -269
- package/src/shared/bricks/manifests/carousel.manifest.ts +0 -106
- package/src/shared/bricks/manifests/container.manifest.ts +0 -357
- package/src/shared/bricks/manifests/divider.manifest.ts +0 -121
- package/src/shared/bricks/manifests/footer.manifest.ts +0 -487
- package/src/shared/bricks/manifests/form.manifest.ts +0 -112
- package/src/shared/bricks/manifests/hero.manifest.ts +0 -132
- package/src/shared/bricks/manifests/icon.manifest.ts +0 -130
- package/src/shared/bricks/manifests/image.manifest.ts +0 -203
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +0 -227
- package/src/shared/bricks/manifests/map.manifest.ts +0 -75
- package/src/shared/bricks/manifests/navbar.manifest.ts +0 -344
- package/src/shared/bricks/manifests/sidebar.manifest.ts +0 -90
- package/src/shared/bricks/manifests/social-links.manifest.ts +0 -370
- package/src/shared/bricks/manifests/testimonials.manifest.ts +0 -397
- package/src/shared/bricks/manifests/tests/header.manifest.test.ts +0 -10
- package/src/shared/bricks/manifests/text.manifest.ts +0 -164
- package/src/shared/bricks/manifests/timeline.manifest.ts +0 -456
- package/src/shared/bricks/manifests/video.manifest.ts +0 -59
- package/src/shared/bricks/props/_style-presets.ts +0 -352
- package/src/shared/bricks/props/align.ts +0 -59
- package/src/shared/bricks/props/background.ts +0 -118
- package/src/shared/bricks/props/boolean.ts +0 -11
- package/src/shared/bricks/props/border.ts +0 -84
- package/src/shared/bricks/props/color.ts +0 -24
- package/src/shared/bricks/props/common.ts +0 -37
- package/src/shared/bricks/props/container.ts +0 -356
- package/src/shared/bricks/props/css-length.ts +0 -25
- package/src/shared/bricks/props/datasource.ts +0 -60
- package/src/shared/bricks/props/date.ts +0 -24
- package/src/shared/bricks/props/effects.ts +0 -123
- package/src/shared/bricks/props/enum.ts +0 -42
- package/src/shared/bricks/props/file.ts +0 -12
- package/src/shared/bricks/props/geolocation.ts +0 -30
- package/src/shared/bricks/props/helpers.ts +0 -101
- package/src/shared/bricks/props/image.ts +0 -90
- package/src/shared/bricks/props/number.ts +0 -16
- package/src/shared/bricks/props/padding.ts +0 -21
- package/src/shared/bricks/props/position.ts +0 -27
- package/src/shared/bricks/props/preset.ts +0 -136
- package/src/shared/bricks/props/string.ts +0 -56
- package/src/shared/bricks/props/tests/align.test.ts +0 -37
- package/src/shared/bricks/props/tests/background.test.ts +0 -102
- package/src/shared/bricks/props/tests/border.test.ts +0 -38
- package/src/shared/bricks/props/tests/effects.test.ts +0 -37
- package/src/shared/bricks/props/tests/helpers.test.ts +0 -133
- package/src/shared/bricks/props/tests/image.test.ts +0 -71
- package/src/shared/bricks/props/tests/padding.ts +0 -12
- package/src/shared/bricks/props/tests/string.test.ts +0 -79
- package/src/shared/bricks/props/text.ts +0 -66
- package/src/shared/bricks/props/types.ts +0 -57
- package/src/shared/bricks.ts +0 -232
- package/src/shared/context.ts +0 -39
- package/src/shared/datarecords/external/airtable/handler.ts +0 -21
- package/src/shared/datarecords/external/airtable/options.ts +0 -22
- package/src/shared/datarecords/external/generic-webhook/handler.ts +0 -10
- package/src/shared/datarecords/external/generic-webhook/options.ts +0 -13
- package/src/shared/datarecords/external/google/oauth/config.ts +0 -30
- package/src/shared/datarecords/external/google/sheets/handler.ts +0 -26
- package/src/shared/datarecords/external/google/sheets/options.ts +0 -9
- package/src/shared/datarecords/types.ts +0 -120
- package/src/shared/datarecords.ts +0 -5
- package/src/shared/datasources/README.md +0 -3
- package/src/shared/datasources/external/facebook/posts/fetcher.ts +0 -52
- package/src/shared/datasources/external/facebook/posts/sample.ts +0 -35
- package/src/shared/datasources/external/facebook/posts/schema.ts +0 -33
- package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +0 -73
- package/src/shared/datasources/external/http-json/fetcher.ts +0 -28
- package/src/shared/datasources/external/http-json/options.ts +0 -12
- package/src/shared/datasources/external/http-json/schema.ts +0 -6
- package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +0 -70
- package/src/shared/datasources/external/instagram/feed/fetcher.ts +0 -33
- package/src/shared/datasources/external/instagram/feed/sample.ts +0 -22
- package/src/shared/datasources/external/instagram/feed/schema.ts +0 -23
- package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +0 -64
- package/src/shared/datasources/external/mastodon/account/fetcher.ts +0 -24
- package/src/shared/datasources/external/mastodon/account/sample.ts +0 -33
- package/src/shared/datasources/external/mastodon/account/schema.ts +0 -45
- package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +0 -47
- package/src/shared/datasources/external/mastodon/options.ts +0 -11
- package/src/shared/datasources/external/mastodon/status/fetcher.ts +0 -35
- package/src/shared/datasources/external/mastodon/status/sample.array.ts +0 -59
- package/src/shared/datasources/external/mastodon/status/sample.single.ts +0 -55
- package/src/shared/datasources/external/mastodon/status/schema.ts +0 -130
- package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +0 -74
- package/src/shared/datasources/external/meta/oauth/config.ts +0 -16
- package/src/shared/datasources/external/meta/options.ts +0 -11
- package/src/shared/datasources/external/rss/fetcher.ts +0 -29
- package/src/shared/datasources/external/rss/options.ts +0 -11
- package/src/shared/datasources/external/rss/sample.ts +0 -22
- package/src/shared/datasources/external/rss/schema.ts +0 -42
- package/src/shared/datasources/external/threads/media/fetcher.ts +0 -53
- package/src/shared/datasources/external/threads/media/sample.ts +0 -44
- package/src/shared/datasources/external/threads/media/schema.ts +0 -37
- package/src/shared/datasources/external/tiktok/oauth/config.ts +0 -17
- package/src/shared/datasources/external/tiktok/video/fetcher.ts +0 -39
- package/src/shared/datasources/external/tiktok/video/options.ts +0 -12
- package/src/shared/datasources/external/tiktok/video/sample.ts +0 -26
- package/src/shared/datasources/external/tiktok/video/schema.ts +0 -27
- package/src/shared/datasources/external/youtube/list/fetcher.ts +0 -37
- package/src/shared/datasources/external/youtube/list/options.ts +0 -15
- package/src/shared/datasources/external/youtube/list/sample.ts +0 -33
- package/src/shared/datasources/external/youtube/list/schema.ts +0 -38
- package/src/shared/datasources/external/youtube/oauth/config.ts +0 -15
- package/src/shared/datasources/fetcher.ts +0 -17
- package/src/shared/datasources/internal/blog/schema.ts +0 -69
- package/src/shared/datasources/internal/changelog/schema.ts +0 -48
- package/src/shared/datasources/internal/contact-info/schema.ts +0 -20
- package/src/shared/datasources/internal/cv/schema.ts +0 -217
- package/src/shared/datasources/internal/faq/schema.ts +0 -27
- package/src/shared/datasources/internal/job-board/schema.ts +0 -228
- package/src/shared/datasources/internal/links/schema.ts +0 -15
- package/src/shared/datasources/internal/recipes/schema.ts +0 -42
- package/src/shared/datasources/internal/restaurant/schema.ts +0 -225
- package/src/shared/datasources/provider-options.ts +0 -7
- package/src/shared/datasources/samples.ts +0 -26
- package/src/shared/datasources/schemas.ts +0 -45
- package/src/shared/datasources/types.ts +0 -276
- package/src/shared/datasources/utils.ts +0 -16
- package/src/shared/datasources.ts +0 -42
- package/src/shared/env.ts +0 -23
- package/src/shared/errors.ts +0 -1
- package/src/shared/images.ts +0 -44
- package/src/shared/index.ts +0 -3
- package/src/shared/layout-constants.ts +0 -25
- package/src/shared/manifest.ts +0 -50
- package/src/shared/oauth.ts +0 -16
- package/src/shared/page.ts +0 -61
- package/src/shared/prompt.ts +0 -9
- package/src/shared/responsive.ts +0 -5
- package/src/shared/site.ts +0 -97
- package/src/shared/sitemap.ts +0 -66
- package/src/shared/social-icons.ts +0 -307
- package/src/shared/tests/attributes.test.ts +0 -37
- package/src/shared/theme.ts +0 -245
- package/src/shared/themes/README.md +0 -34
- package/src/shared/themes/color-system.ts +0 -127
- package/src/shared/utils/canvas-data-uri.ts +0 -2
- package/src/shared/utils/invariant.ts +0 -25
- package/src/shared/utils/json-date.ts +0 -8
- package/src/shared/utils/merge.ts +0 -12
- package/src/shared/utils/object-hash.ts +0 -7
- package/src/shared/utils/schema.ts +0 -35
- package/src/shared/utils/try-catch.ts +0 -12
- package/src/shared/utils/typed-ref.ts +0 -41
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { defineBrickManifest } from "~/shared/brick-manifest";
|
|
2
|
-
import { defineProps, optional, group, prop } from "../props/helpers";
|
|
3
|
-
import { Type } from "@sinclair/typebox";
|
|
4
|
-
import { MdExpandMore } from "react-icons/md";
|
|
5
|
-
import { preset } from "../props/preset";
|
|
6
|
-
import { backgroundColor, backgroundColorRef } from "../props/background";
|
|
7
|
-
import { fontSize, textContent, textContentRef } from "../props/text";
|
|
8
|
-
import { string } from "../props/string";
|
|
9
|
-
import { padding, paddingRef } from "../props/padding";
|
|
10
|
-
import { border, borderRef } from "../props/border";
|
|
11
|
-
import { shadow, shadowRef } from "../props/effects";
|
|
12
|
-
import { boolean } from "../props/boolean";
|
|
13
|
-
import { TfiLayoutAccordionSeparated } from "react-icons/tfi";
|
|
14
|
-
import type { BrickProps } from "../props/types";
|
|
15
|
-
import { StringEnum } from "~/shared/utils/schema";
|
|
16
|
-
import { colorRef } from "../props/color";
|
|
17
|
-
import type { FC } from "react";
|
|
18
|
-
|
|
19
|
-
export const manifest = defineBrickManifest({
|
|
20
|
-
type: "accordion",
|
|
21
|
-
kind: "widget",
|
|
22
|
-
name: "Accordion",
|
|
23
|
-
description: "An accordion/collapse element for expandable content",
|
|
24
|
-
aiInstructions: `
|
|
25
|
-
This accordion element displays content in collapsible panels.
|
|
26
|
-
It is typically used for FAQ sections, organized documentation, or to save space.
|
|
27
|
-
Each item has a title and expandable content area.
|
|
28
|
-
Multiple panels can be open simultaneously or limited to one at a time.
|
|
29
|
-
`.trim(),
|
|
30
|
-
icon: TfiLayoutAccordionSeparated,
|
|
31
|
-
|
|
32
|
-
defaultHeight: { desktop: 10, mobile: 15 },
|
|
33
|
-
defaultWidth: { desktop: 36, mobile: 24 },
|
|
34
|
-
|
|
35
|
-
props: defineProps(
|
|
36
|
-
{
|
|
37
|
-
container: optional(
|
|
38
|
-
group({
|
|
39
|
-
title: "Container",
|
|
40
|
-
children: {
|
|
41
|
-
backgroundColor: optional(backgroundColorRef()),
|
|
42
|
-
padding: optional(paddingRef),
|
|
43
|
-
border: optional(borderRef),
|
|
44
|
-
shadow: optional(shadowRef()),
|
|
45
|
-
},
|
|
46
|
-
}),
|
|
47
|
-
),
|
|
48
|
-
items: prop({
|
|
49
|
-
title: "Accordion items",
|
|
50
|
-
schema: Type.Array(
|
|
51
|
-
Type.Object({
|
|
52
|
-
title: textContentRef({ title: "Title", default: "My title", disableSizing: true }),
|
|
53
|
-
content: textContentRef({ title: "Content", default: "Expandable content goes here" }),
|
|
54
|
-
defaultOpen: optional(boolean("Open by default", false)),
|
|
55
|
-
}),
|
|
56
|
-
),
|
|
57
|
-
}),
|
|
58
|
-
itemsStyles: optional(
|
|
59
|
-
group({
|
|
60
|
-
title: "Accordion item styles",
|
|
61
|
-
children: {
|
|
62
|
-
backgroundColor: optional(backgroundColorRef()),
|
|
63
|
-
color: optional(colorRef()),
|
|
64
|
-
fontSize: fontSize("text-base"),
|
|
65
|
-
},
|
|
66
|
-
}),
|
|
67
|
-
),
|
|
68
|
-
allowMultiple: prop({
|
|
69
|
-
title: "Accordion items",
|
|
70
|
-
schema: boolean("Allow multiple open", true, {
|
|
71
|
-
description: "Allow multiple accordion items to be open at the same time",
|
|
72
|
-
}),
|
|
73
|
-
}),
|
|
74
|
-
variants: Type.Array(
|
|
75
|
-
StringEnum(["collapse-arrow", "collapse-plus"], {
|
|
76
|
-
default: ["collapse-arrow"],
|
|
77
|
-
enumNames: ["With Arrow indicator", "With + indicator"],
|
|
78
|
-
}),
|
|
79
|
-
),
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
default: {
|
|
83
|
-
container: {
|
|
84
|
-
padding: "p-6",
|
|
85
|
-
backgroundColor: "bg-transparent",
|
|
86
|
-
},
|
|
87
|
-
allowMultiple: true,
|
|
88
|
-
variants: ["collapse-arrow"],
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
),
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
export type Manifest = typeof manifest;
|
|
95
|
-
|
|
96
|
-
export const examples: {
|
|
97
|
-
description: string;
|
|
98
|
-
type: string;
|
|
99
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
100
|
-
}[] = [
|
|
101
|
-
{
|
|
102
|
-
description: "FAQ section with card styling with single open",
|
|
103
|
-
type: "accordion",
|
|
104
|
-
props: {
|
|
105
|
-
container: {
|
|
106
|
-
backgroundColor: "bg-base-50",
|
|
107
|
-
padding: "p-8",
|
|
108
|
-
border: {
|
|
109
|
-
rounding: "rounded-lg",
|
|
110
|
-
},
|
|
111
|
-
shadow: "shadow-lg",
|
|
112
|
-
},
|
|
113
|
-
variants: ["collapse-plus"],
|
|
114
|
-
allowMultiple: false,
|
|
115
|
-
items: [
|
|
116
|
-
{
|
|
117
|
-
title: "What is included in the basic plan?",
|
|
118
|
-
content:
|
|
119
|
-
"The basic plan includes access to all core features, up to 10 projects, 5GB storage, email support, and basic analytics. You can upgrade at any time to access advanced features like API access, priority support, and unlimited projects.",
|
|
120
|
-
defaultOpen: true,
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
title: "How do I cancel my subscription?",
|
|
124
|
-
content:
|
|
125
|
-
"You can cancel your subscription at any time from your account settings. Go to Billing > Manage Subscription > Cancel. Your access will continue until the end of your current billing period, and you won't be charged for the next cycle.",
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
title: "Is there a free trial available?",
|
|
129
|
-
content:
|
|
130
|
-
"Yes! We offer a 14-day free trial with full access to all premium features. No credit card required to start. You can upgrade to a paid plan anytime during or after the trial period.",
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
title: "What payment methods do you accept?",
|
|
134
|
-
content:
|
|
135
|
-
"We accept all major credit cards (Visa, MasterCard, American Express), PayPal, and bank transfers for annual subscriptions. All payments are processed securely through our payment partners.",
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
title: "Do you offer refunds?",
|
|
139
|
-
content:
|
|
140
|
-
"We offer a 30-day money-back guarantee for all new subscriptions. If you're not satisfied with our service, contact our support team within 30 days of your purchase for a full refund.",
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
description: "Product features with arrow indicator and multiple open",
|
|
147
|
-
type: "accordion",
|
|
148
|
-
props: {
|
|
149
|
-
container: {
|
|
150
|
-
padding: "p-4",
|
|
151
|
-
},
|
|
152
|
-
variants: ["collapse-arrow"],
|
|
153
|
-
allowMultiple: true,
|
|
154
|
-
items: [
|
|
155
|
-
{
|
|
156
|
-
title: "Advanced Analytics",
|
|
157
|
-
content:
|
|
158
|
-
"Get detailed insights into your data with our comprehensive analytics dashboard. Track key metrics, generate custom reports, and identify trends with powerful visualization tools.",
|
|
159
|
-
defaultOpen: true,
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
title: "Team Collaboration",
|
|
163
|
-
content:
|
|
164
|
-
"Work seamlessly with your team using real-time collaboration features. Share projects, assign tasks, leave comments, and track progress all in one place.",
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
title: "API Integration",
|
|
168
|
-
content:
|
|
169
|
-
"Connect with your existing tools and workflows using our robust API. Full documentation, SDKs for popular languages, and webhook support included.",
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
title: "Security & Compliance",
|
|
173
|
-
content:
|
|
174
|
-
"Enterprise-grade security with SOC 2 compliance, data encryption at rest and in transit, SSO support, and comprehensive audit logs.",
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
];
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { manifest as heroManifest, examples as heroExamples } from "./hero.manifest";
|
|
2
|
-
import { manifest as imageManifest, examples as imageExamples } from "./image.manifest";
|
|
3
|
-
import { manifest as videoManifest, examples as videoExamples } from "./video.manifest";
|
|
4
|
-
import { manifest as textManifest, examples as textExamples } from "./text.manifest";
|
|
5
|
-
import { manifest as containerManifest, examples as containerExamples } from "./container.manifest";
|
|
6
|
-
import { manifest as cardManifest, examples as cardExamples } from "./card.manifest";
|
|
7
|
-
import { manifest as mapManifest, examples as mapExamples } from "./map.manifest";
|
|
8
|
-
import { manifest as formManifest, examples as formExamples } from "./form.manifest";
|
|
9
|
-
import { manifest as imagesWallManifest, examples as imagesWallExamples } from "./images-gallery.manifest";
|
|
10
|
-
import { manifest as carouselManifest, examples as carouselExamples } from "./carousel.manifest";
|
|
11
|
-
import { manifest as navbarManifest, examples as navbarExamples } from "./navbar.manifest";
|
|
12
|
-
import { manifest as footerManifest, examples as footerExamples } from "./footer.manifest";
|
|
13
|
-
import { manifest as buttonManifest, examples as buttonExamples } from "./button.manifest";
|
|
14
|
-
import { manifest as iconManifest, examples as iconExamples } from "./icon.manifest";
|
|
15
|
-
import { manifest as socialLinksManifest, examples as socialLinksExamples } from "./social-links.manifest";
|
|
16
|
-
import { manifest as sidebarManifest, examples as sidebarExamples } from "./sidebar.manifest";
|
|
17
|
-
import { manifest as dividerManifest, examples as dividerExamples } from "./divider.manifest";
|
|
18
|
-
import { manifest as testimonialsManifest, examples as testimonialsExamples } from "./testimonials.manifest";
|
|
19
|
-
import { manifest as timelineManifest, examples as timelineExamples } from "./timeline.manifest";
|
|
20
|
-
import { manifest as accordionManifest, examples as accordionExamples } from "./accordion.manifest";
|
|
21
|
-
|
|
22
|
-
import { getBrickManifestDefaults, type BrickDefaults, type BrickManifest } from "../../brick-manifest";
|
|
23
|
-
|
|
24
|
-
export const manifests: Record<string, BrickManifest> = {
|
|
25
|
-
[textManifest.type]: textManifest,
|
|
26
|
-
[heroManifest.type]: heroManifest,
|
|
27
|
-
[imageManifest.type]: imageManifest,
|
|
28
|
-
[videoManifest.type]: videoManifest,
|
|
29
|
-
[cardManifest.type]: cardManifest,
|
|
30
|
-
[mapManifest.type]: mapManifest,
|
|
31
|
-
[formManifest.type]: formManifest,
|
|
32
|
-
[sidebarManifest.type]: sidebarManifest,
|
|
33
|
-
[imagesWallManifest.type]: imagesWallManifest,
|
|
34
|
-
[carouselManifest.type]: carouselManifest,
|
|
35
|
-
[navbarManifest.type]: navbarManifest,
|
|
36
|
-
[footerManifest.type]: footerManifest,
|
|
37
|
-
[buttonManifest.type]: buttonManifest,
|
|
38
|
-
[iconManifest.type]: iconManifest,
|
|
39
|
-
[socialLinksManifest.type]: socialLinksManifest,
|
|
40
|
-
[containerManifest.type]: containerManifest,
|
|
41
|
-
[dividerManifest.type]: dividerManifest,
|
|
42
|
-
[testimonialsManifest.type]: testimonialsManifest,
|
|
43
|
-
[timelineManifest.type]: timelineManifest,
|
|
44
|
-
[accordionManifest.type]: accordionManifest,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export const defaultProps: Record<string, BrickDefaults> = {
|
|
48
|
-
[textManifest.type]: getBrickManifestDefaults(textManifest),
|
|
49
|
-
[heroManifest.type]: getBrickManifestDefaults(heroManifest),
|
|
50
|
-
[imageManifest.type]: getBrickManifestDefaults(imageManifest),
|
|
51
|
-
[videoManifest.type]: getBrickManifestDefaults(videoManifest),
|
|
52
|
-
[cardManifest.type]: getBrickManifestDefaults(cardManifest),
|
|
53
|
-
[sidebarManifest.type]: getBrickManifestDefaults(sidebarManifest),
|
|
54
|
-
[mapManifest.type]: getBrickManifestDefaults(mapManifest),
|
|
55
|
-
[formManifest.type]: getBrickManifestDefaults(formManifest),
|
|
56
|
-
[imagesWallManifest.type]: getBrickManifestDefaults(imagesWallManifest),
|
|
57
|
-
[carouselManifest.type]: getBrickManifestDefaults(carouselManifest),
|
|
58
|
-
[navbarManifest.type]: getBrickManifestDefaults(navbarManifest),
|
|
59
|
-
[footerManifest.type]: getBrickManifestDefaults(footerManifest),
|
|
60
|
-
[buttonManifest.type]: getBrickManifestDefaults(buttonManifest),
|
|
61
|
-
[iconManifest.type]: getBrickManifestDefaults(iconManifest),
|
|
62
|
-
[socialLinksManifest.type]: getBrickManifestDefaults(socialLinksManifest),
|
|
63
|
-
[containerManifest.type]: getBrickManifestDefaults(containerManifest),
|
|
64
|
-
[dividerManifest.type]: getBrickManifestDefaults(dividerManifest),
|
|
65
|
-
[testimonialsManifest.type]: getBrickManifestDefaults(testimonialsManifest),
|
|
66
|
-
[timelineManifest.type]: getBrickManifestDefaults(timelineManifest),
|
|
67
|
-
[accordionManifest.type]: getBrickManifestDefaults(accordionManifest),
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
71
|
-
export const examples: Record<string, { description: string; type: string; props: any }[]> = {
|
|
72
|
-
[textManifest.type]: textExamples,
|
|
73
|
-
[heroManifest.type]: heroExamples,
|
|
74
|
-
[imageManifest.type]: imageExamples,
|
|
75
|
-
[videoManifest.type]: videoExamples,
|
|
76
|
-
[cardManifest.type]: cardExamples,
|
|
77
|
-
[mapManifest.type]: mapExamples,
|
|
78
|
-
[formManifest.type]: formExamples,
|
|
79
|
-
[sidebarManifest.type]: sidebarExamples,
|
|
80
|
-
[imagesWallManifest.type]: imagesWallExamples,
|
|
81
|
-
[carouselManifest.type]: carouselExamples,
|
|
82
|
-
[navbarManifest.type]: navbarExamples,
|
|
83
|
-
[footerManifest.type]: footerExamples,
|
|
84
|
-
[buttonManifest.type]: buttonExamples,
|
|
85
|
-
[iconManifest.type]: iconExamples,
|
|
86
|
-
[socialLinksManifest.type]: socialLinksExamples,
|
|
87
|
-
[containerManifest.type]: containerExamples,
|
|
88
|
-
[dividerManifest.type]: dividerExamples,
|
|
89
|
-
[testimonialsManifest.type]: testimonialsExamples,
|
|
90
|
-
[timelineManifest.type]: timelineExamples,
|
|
91
|
-
[accordionManifest.type]: accordionExamples,
|
|
92
|
-
};
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { defineBrickManifest } from "~/shared/brick-manifest";
|
|
2
|
-
import { defineProps, optional, prop } from "../props/helpers";
|
|
3
|
-
import { textContentRef } from "../props/text";
|
|
4
|
-
import { RxButton } from "react-icons/rx";
|
|
5
|
-
import { string, urlOrPageIdRef } from "../props/string";
|
|
6
|
-
import { Type } from "@sinclair/typebox";
|
|
7
|
-
import { StringEnum } from "~/shared/utils/schema";
|
|
8
|
-
import type { BrickProps } from "../props/types";
|
|
9
|
-
|
|
10
|
-
export const manifest = defineBrickManifest({
|
|
11
|
-
type: "button",
|
|
12
|
-
name: "Button",
|
|
13
|
-
repeatable: true,
|
|
14
|
-
description: "A button with text and optional icon",
|
|
15
|
-
icon: RxButton,
|
|
16
|
-
props: defineProps({
|
|
17
|
-
/**
|
|
18
|
-
* @see https://daisyui.com/components/button/?lang=en
|
|
19
|
-
* @see https://raw.githubusercontent.com/saadeghi/daisyui/refs/heads/master/packages/docs/src/routes/(routes)/components/button/+page.md?plain=1
|
|
20
|
-
*/
|
|
21
|
-
variants: Type.Array(
|
|
22
|
-
Type.Union(
|
|
23
|
-
[
|
|
24
|
-
Type.Literal("btn-neutral", { title: "Neutral", "ai:variant-type": "color" }),
|
|
25
|
-
Type.Literal("btn-primary", { title: "Primary", "ai:variant-type": "color" }),
|
|
26
|
-
Type.Literal("btn-secondary", { title: "Secondary", "ai:variant-type": "color" }),
|
|
27
|
-
Type.Literal("btn-accent", { title: "Accent", "ai:variant-type": "color" }),
|
|
28
|
-
Type.Literal("btn-info", { title: "Info", "ai:variant-type": "color" }),
|
|
29
|
-
Type.Literal("btn-success", { title: "Success", "ai:variant-type": "color" }),
|
|
30
|
-
Type.Literal("btn-warning", { title: "Warning", "ai:variant-type": "color" }),
|
|
31
|
-
Type.Literal("btn-error", { title: "Error", "ai:variant-type": "color" }),
|
|
32
|
-
Type.Literal("btn-outline", { title: "Outline", "ai:variant-type": "style" }),
|
|
33
|
-
Type.Literal("btn-dash", { title: "Dash", "ai:variant-type": "style" }),
|
|
34
|
-
Type.Literal("btn-soft", { title: "Soft", "ai:variant-type": "style" }),
|
|
35
|
-
Type.Literal("btn-ghost", { title: "Ghost", "ai:variant-type": "style" }),
|
|
36
|
-
Type.Literal("btn-link", { title: "Link", "ai:variant-type": "style" }),
|
|
37
|
-
Type.Literal("btn-active", { title: "Active", "ai:variant-type": "behavior" }),
|
|
38
|
-
Type.Literal("btn-disabled", { title: "Disabled", "ai:variant-type": "behavior" }),
|
|
39
|
-
Type.Literal("btn-icon-left", { title: "Icon left", "ai:variant-type": "icon" }),
|
|
40
|
-
Type.Literal("btn-icon-right", { title: "Icon right", "ai:variant-type": "icon" }),
|
|
41
|
-
Type.Literal("btn-xs", { title: "Extra small", "ai:variant-type": "size" }),
|
|
42
|
-
Type.Literal("btn-sm", { title: "Small", "ai:variant-type": "size" }),
|
|
43
|
-
Type.Literal("btn-md", { title: "Medium", "ai:variant-type": "size" }),
|
|
44
|
-
Type.Literal("btn-lg", { title: "Large", "ai:variant-type": "size" }),
|
|
45
|
-
Type.Literal("btn-xl", { title: "Extra large", "ai:variant-type": "size" }),
|
|
46
|
-
Type.Literal("btn-wide", { title: "Wide", "ai:variant-type": "modifier" }),
|
|
47
|
-
Type.Literal("btn-block", { title: "Block", "ai:variant-type": "modifier" }),
|
|
48
|
-
Type.Literal("btn-square", { title: "Square", "ai:variant-type": "modifier" }),
|
|
49
|
-
Type.Literal("btn-circle", { title: "Circle", "ai:variant-type": "modifier" }),
|
|
50
|
-
],
|
|
51
|
-
{
|
|
52
|
-
title: "Variant",
|
|
53
|
-
description: "Button variants.",
|
|
54
|
-
"ai:tip": "Those are DaisyUI button variants",
|
|
55
|
-
},
|
|
56
|
-
),
|
|
57
|
-
),
|
|
58
|
-
label: textContentRef({ title: "Label", default: "My button" }),
|
|
59
|
-
type: optional(
|
|
60
|
-
prop({
|
|
61
|
-
title: "Type",
|
|
62
|
-
schema: StringEnum(["button", "submit", "reset"], {
|
|
63
|
-
enumNames: ["Button", "Submit", "Reset"],
|
|
64
|
-
default: "button",
|
|
65
|
-
description: "The type of the button",
|
|
66
|
-
"ai:instructions":
|
|
67
|
-
"Use 'button' for regular buttons, 'submit' for form submission, and 'reset' to reset form fields.",
|
|
68
|
-
}),
|
|
69
|
-
}),
|
|
70
|
-
),
|
|
71
|
-
icon: optional(
|
|
72
|
-
prop({
|
|
73
|
-
title: "Icon",
|
|
74
|
-
description: "Icon to display (iconify reference)",
|
|
75
|
-
schema: string("Icon", undefined, {
|
|
76
|
-
description: "Icon to display (iconify reference)",
|
|
77
|
-
"ui:field": "iconify",
|
|
78
|
-
}),
|
|
79
|
-
}),
|
|
80
|
-
),
|
|
81
|
-
linkToUrlOrPageId: optional(urlOrPageIdRef({ title: "Link" })),
|
|
82
|
-
}),
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
export type Manifest = typeof manifest;
|
|
86
|
-
|
|
87
|
-
export const examples: {
|
|
88
|
-
description: string;
|
|
89
|
-
type: string;
|
|
90
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
91
|
-
}[] = [
|
|
92
|
-
{
|
|
93
|
-
description: "Primary button, large size, linking to a URL",
|
|
94
|
-
type: "button",
|
|
95
|
-
props: {
|
|
96
|
-
variants: ["btn-primary", "btn-lg"],
|
|
97
|
-
label: "Click me",
|
|
98
|
-
linkToUrlOrPageId: "https://example.com",
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
description: "Secondary button, small size, linking to a page",
|
|
103
|
-
type: "button",
|
|
104
|
-
props: {
|
|
105
|
-
variants: ["btn-secondary", "btn-sm"],
|
|
106
|
-
label: "Go to page",
|
|
107
|
-
linkToUrlOrPageId: "page-id-123",
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
description: "Disabled button with outline style",
|
|
112
|
-
type: "button",
|
|
113
|
-
props: {
|
|
114
|
-
variants: ["btn-outline", "btn-disabled"],
|
|
115
|
-
label: "Disabled Button",
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
description: "Ghost button",
|
|
120
|
-
type: "button",
|
|
121
|
-
props: {
|
|
122
|
-
variants: ["btn-ghost"],
|
|
123
|
-
label: "Ghost Button",
|
|
124
|
-
linkToUrlOrPageId: "https://example.com/ghost",
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
description: "Submit button in a form",
|
|
129
|
-
type: "button",
|
|
130
|
-
props: {
|
|
131
|
-
variants: ["btn-primary", "btn-md"],
|
|
132
|
-
label: "Submit form",
|
|
133
|
-
type: "submit",
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
description: "Button with icon on the right",
|
|
138
|
-
type: "button",
|
|
139
|
-
props: {
|
|
140
|
-
variants: ["btn-primary", "btn-md", "btn-icon-right"],
|
|
141
|
-
label: "Icon Button",
|
|
142
|
-
icon: "mdi:check-circle",
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
];
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
import { defineBrickManifest } from "~/shared/brick-manifest";
|
|
2
|
-
import { padding, paddingRef } from "../props/padding";
|
|
3
|
-
import { backgroundColor, backgroundColorRef } from "../props/background";
|
|
4
|
-
import { defineProps, group, optional } from "../props/helpers";
|
|
5
|
-
import { textContent, textContentRef } from "../props/text";
|
|
6
|
-
import { BsCardText } from "react-icons/bs";
|
|
7
|
-
import { image, imageRef } from "../props/image";
|
|
8
|
-
import { Type } from "@sinclair/typebox";
|
|
9
|
-
import type { BrickProps } from "../props/types";
|
|
10
|
-
|
|
11
|
-
export const manifest = defineBrickManifest({
|
|
12
|
-
type: "card",
|
|
13
|
-
name: "Card",
|
|
14
|
-
description: "A multi-purpose card that can have a title, subtitle, image, and content",
|
|
15
|
-
repeatable: true,
|
|
16
|
-
icon: BsCardText,
|
|
17
|
-
props: defineProps({
|
|
18
|
-
variants: Type.Array(
|
|
19
|
-
Type.Union(
|
|
20
|
-
[
|
|
21
|
-
Type.Literal("image-first", { title: "Image First" }),
|
|
22
|
-
Type.Literal("image-last", { title: "Image Last" }),
|
|
23
|
-
Type.Literal("image-overlay", { title: "Image Overlay" }),
|
|
24
|
-
Type.Literal("image-left-side", { title: "Image Left Side" }),
|
|
25
|
-
Type.Literal("image-right-side", { title: "Image Right Side" }),
|
|
26
|
-
Type.Literal("centered", { title: "Centered" }),
|
|
27
|
-
Type.Literal("large-padding", { title: "Large padding" }),
|
|
28
|
-
],
|
|
29
|
-
{
|
|
30
|
-
title: "Variant",
|
|
31
|
-
},
|
|
32
|
-
),
|
|
33
|
-
),
|
|
34
|
-
cardTitle: optional(
|
|
35
|
-
group({
|
|
36
|
-
title: "Title",
|
|
37
|
-
children: {
|
|
38
|
-
content: textContentRef(),
|
|
39
|
-
padding: optional(paddingRef),
|
|
40
|
-
backgroundColor: optional(backgroundColorRef()),
|
|
41
|
-
},
|
|
42
|
-
}),
|
|
43
|
-
),
|
|
44
|
-
cardImage: optional(
|
|
45
|
-
group({
|
|
46
|
-
title: "Image",
|
|
47
|
-
children: {
|
|
48
|
-
image: imageRef(),
|
|
49
|
-
},
|
|
50
|
-
}),
|
|
51
|
-
),
|
|
52
|
-
cardBody: optional(
|
|
53
|
-
group({
|
|
54
|
-
title: "Body",
|
|
55
|
-
children: {
|
|
56
|
-
content: textContentRef(),
|
|
57
|
-
padding: optional(paddingRef),
|
|
58
|
-
backgroundColor: optional(backgroundColorRef()),
|
|
59
|
-
},
|
|
60
|
-
}),
|
|
61
|
-
),
|
|
62
|
-
}),
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
export type Manifest = typeof manifest;
|
|
66
|
-
|
|
67
|
-
export const examples: {
|
|
68
|
-
description: string;
|
|
69
|
-
type: string;
|
|
70
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
71
|
-
}[] = [
|
|
72
|
-
{
|
|
73
|
-
description: "A simple card with a title and content",
|
|
74
|
-
type: "card",
|
|
75
|
-
props: {
|
|
76
|
-
variants: ["image-first"],
|
|
77
|
-
preset: "prominent-primary",
|
|
78
|
-
cardTitle: {
|
|
79
|
-
content: "Card Title",
|
|
80
|
-
padding: "p-4",
|
|
81
|
-
},
|
|
82
|
-
cardBody: {
|
|
83
|
-
content: "This is the body of the card.",
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
description: "Card with image and overlay text",
|
|
89
|
-
type: "card",
|
|
90
|
-
props: {
|
|
91
|
-
variants: ["image-overlay", "centered"],
|
|
92
|
-
cardImage: {
|
|
93
|
-
image: {
|
|
94
|
-
src: "https://via.placeholder.com/400x300",
|
|
95
|
-
alt: "Placeholder image",
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
cardTitle: {
|
|
99
|
-
content: "Overlay Title",
|
|
100
|
-
padding: "p-8",
|
|
101
|
-
backgroundColor: "rgba(0, 0, 0, 0.7)",
|
|
102
|
-
},
|
|
103
|
-
cardBody: {
|
|
104
|
-
content: "Beautiful overlay content with semi-transparent background.",
|
|
105
|
-
padding: "p-4",
|
|
106
|
-
backgroundColor: "rgba(255, 255, 255, 0.9)",
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
description: "Product card with image on the left",
|
|
112
|
-
type: "card",
|
|
113
|
-
props: {
|
|
114
|
-
variants: ["image-left-side"],
|
|
115
|
-
cardImage: {
|
|
116
|
-
image: {
|
|
117
|
-
src: "https://via.placeholder.com/200x200",
|
|
118
|
-
alt: "Product image",
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
cardTitle: {
|
|
122
|
-
content: "Premium Headphones",
|
|
123
|
-
padding: "p-4",
|
|
124
|
-
},
|
|
125
|
-
cardBody: {
|
|
126
|
-
content: "High-quality wireless headphones with noise cancellation and 30-hour battery life.",
|
|
127
|
-
padding: "p-4",
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
description: "Feature card with large padding and background",
|
|
133
|
-
type: "card",
|
|
134
|
-
props: {
|
|
135
|
-
variants: ["large-padding", "centered"],
|
|
136
|
-
cardTitle: {
|
|
137
|
-
content: "Key Feature",
|
|
138
|
-
padding: "p-8",
|
|
139
|
-
backgroundColor: "#f8f9fa",
|
|
140
|
-
},
|
|
141
|
-
cardBody: {
|
|
142
|
-
content: "This feature provides exceptional value and enhances user experience significantly.",
|
|
143
|
-
padding: "p-8",
|
|
144
|
-
backgroundColor: "#ffffff",
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
description: "Blog post card with image at the bottom",
|
|
150
|
-
type: "card",
|
|
151
|
-
props: {
|
|
152
|
-
variants: ["image-last"],
|
|
153
|
-
cardTitle: {
|
|
154
|
-
content: "The Future of Technology",
|
|
155
|
-
padding: "p-4",
|
|
156
|
-
},
|
|
157
|
-
cardBody: {
|
|
158
|
-
content:
|
|
159
|
-
"Exploring emerging trends and innovations that will shape our digital landscape in the coming decade.",
|
|
160
|
-
padding: "p-4",
|
|
161
|
-
},
|
|
162
|
-
cardImage: {
|
|
163
|
-
image: {
|
|
164
|
-
src: "https://via.placeholder.com/400x200",
|
|
165
|
-
alt: "Technology concept",
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
description: "Testimonial card with right-side image",
|
|
172
|
-
type: "card",
|
|
173
|
-
props: {
|
|
174
|
-
variants: ["image-right-side"],
|
|
175
|
-
cardTitle: {
|
|
176
|
-
content: "Customer Review",
|
|
177
|
-
padding: "p-4",
|
|
178
|
-
backgroundColor: "#e3f2fd",
|
|
179
|
-
},
|
|
180
|
-
cardBody: {
|
|
181
|
-
content:
|
|
182
|
-
'"This product exceeded my expectations. The quality is outstanding and the customer service is top-notch!"',
|
|
183
|
-
padding: "p-4",
|
|
184
|
-
},
|
|
185
|
-
cardImage: {
|
|
186
|
-
image: {
|
|
187
|
-
src: "https://via.placeholder.com/150x150",
|
|
188
|
-
alt: "Customer photo",
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
description: "Minimal centered card without image",
|
|
195
|
-
type: "card",
|
|
196
|
-
props: {
|
|
197
|
-
variants: ["centered"],
|
|
198
|
-
cardTitle: {
|
|
199
|
-
content: "Simple Announcement",
|
|
200
|
-
padding: "p-4",
|
|
201
|
-
},
|
|
202
|
-
cardBody: {
|
|
203
|
-
content: "Important updates will be posted here regularly.",
|
|
204
|
-
padding: "p-4",
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
description: "Event card with multiple variants",
|
|
210
|
-
type: "card",
|
|
211
|
-
props: {
|
|
212
|
-
variants: ["image-first", "large-padding", "centered"],
|
|
213
|
-
cardImage: {
|
|
214
|
-
image: {
|
|
215
|
-
src: "https://via.placeholder.com/400x250",
|
|
216
|
-
alt: "Event venue",
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
cardTitle: {
|
|
220
|
-
content: "Annual Conference 2025",
|
|
221
|
-
padding: "p-8",
|
|
222
|
-
backgroundColor: "#1976d2",
|
|
223
|
-
},
|
|
224
|
-
cardBody: {
|
|
225
|
-
content:
|
|
226
|
-
"Join us for three days of inspiring talks, networking opportunities, and hands-on workshops.",
|
|
227
|
-
padding: "p-8",
|
|
228
|
-
},
|
|
229
|
-
},
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
description: "News article card with compact layout",
|
|
233
|
-
type: "card",
|
|
234
|
-
props: {
|
|
235
|
-
variants: ["image-left-side"],
|
|
236
|
-
cardImage: {
|
|
237
|
-
image: {
|
|
238
|
-
src: "https://via.placeholder.com/120x120",
|
|
239
|
-
alt: "News thumbnail",
|
|
240
|
-
},
|
|
241
|
-
},
|
|
242
|
-
cardTitle: {
|
|
243
|
-
content: "Breaking News Update",
|
|
244
|
-
padding: "p-2",
|
|
245
|
-
},
|
|
246
|
-
cardBody: {
|
|
247
|
-
content: "Latest developments in the ongoing story with expert analysis and community reactions.",
|
|
248
|
-
padding: "p-2",
|
|
249
|
-
},
|
|
250
|
-
},
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
description: "Call-to-action card with prominent styling",
|
|
254
|
-
type: "card",
|
|
255
|
-
props: {
|
|
256
|
-
variants: ["centered", "large-padding"],
|
|
257
|
-
cardTitle: {
|
|
258
|
-
content: "Get Started Today",
|
|
259
|
-
padding: "p-8",
|
|
260
|
-
backgroundColor: "#4caf50",
|
|
261
|
-
},
|
|
262
|
-
cardBody: {
|
|
263
|
-
content: "Transform your workflow with our powerful tools. Sign up now and get 30 days free!",
|
|
264
|
-
padding: "p-8",
|
|
265
|
-
backgroundColor: "#f1f8e9",
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
];
|