@pixelated-tech/components 3.2.6 → 3.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.COMPONENTS.md +1429 -0
- package/README.md +215 -66
- package/dist/components/seo/sitemap.js +10 -2
- package/dist/components/structured/recipe.js +7 -0
- package/dist/components/structured/resume.js +1 -1
- package/dist/types/components/seo/sitemap.d.ts.map +1 -1
- package/dist/types/components/structured/recipe.d.ts.map +1 -1
- package/dist/types/stories/general/accordion.stories.d.ts +3 -3
- package/dist/types/stories/general/accordion.stories.d.ts.map +1 -1
- package/dist/types/tests/sitemap.test.d.ts +2 -0
- package/dist/types/tests/sitemap.test.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1429 @@
|
|
|
1
|
+
# Component Reference Guide
|
|
2
|
+
|
|
3
|
+
This guide provides detailed API documentation and usage examples for all Pixelated Components.
|
|
4
|
+
|
|
5
|
+
## 📋 Table of Contents
|
|
6
|
+
|
|
7
|
+
### General Components
|
|
8
|
+
- [Accordion](#accordion)
|
|
9
|
+
- [Callout](#callout)
|
|
10
|
+
- [Loading](#loading)
|
|
11
|
+
- [Modal](#modal)
|
|
12
|
+
- [SidePanel](#sidepanel)
|
|
13
|
+
- [SmartImage](#smartimage)
|
|
14
|
+
- [Table](#table)
|
|
15
|
+
|
|
16
|
+
### CMS Integration
|
|
17
|
+
- [Calendly](#calendly)
|
|
18
|
+
- [CloudinaryImage](#cloudinaryimage)
|
|
19
|
+
- [ContentfulItems](#contentfulitems)
|
|
20
|
+
- [GoogleReviews](#googlereviews)
|
|
21
|
+
- [Gravatar](#gravatar)
|
|
22
|
+
- [HubSpot](#hubspot)
|
|
23
|
+
- [Instagram](#instagram)
|
|
24
|
+
- [WordPress](#wordpress)
|
|
25
|
+
|
|
26
|
+
### UI Components
|
|
27
|
+
- [Carousel](#carousel)
|
|
28
|
+
- [Forms](#forms)
|
|
29
|
+
- [Menu](#menu)
|
|
30
|
+
- [Tables](#tables)
|
|
31
|
+
- [Tiles](#tiles)
|
|
32
|
+
|
|
33
|
+
### PageBuilder Components
|
|
34
|
+
- [ComponentPropertiesForm](#componentpropertiesform)
|
|
35
|
+
- [ComponentSelector](#componentselector)
|
|
36
|
+
- [ComponentTree](#componenttree)
|
|
37
|
+
- [PageBuilderUI](#pagebuilderui)
|
|
38
|
+
- [PageEngine](#pageengine)
|
|
39
|
+
- [SaveLoadSection](#saveloadsection)
|
|
40
|
+
|
|
41
|
+
### SEO & Schema
|
|
42
|
+
- [404 Page](#404-page)
|
|
43
|
+
- [GoogleAnalytics](#googleanalytics)
|
|
44
|
+
- [GoogleMap](#googlemap)
|
|
45
|
+
- [GoogleSearch](#googlesearch)
|
|
46
|
+
- [JSON-LD Schemas](#json-ld-schemas)
|
|
47
|
+
- [MetadataComponents](#metadatacomponents)
|
|
48
|
+
|
|
49
|
+
### Shopping Cart
|
|
50
|
+
- [eBay Components](#ebay-components)
|
|
51
|
+
- [PayPal](#paypal)
|
|
52
|
+
- [ShoppingCart](#shoppingcart)
|
|
53
|
+
|
|
54
|
+
### Structured Content
|
|
55
|
+
- [BuzzwordBingo](#buzzwordbingo)
|
|
56
|
+
- [Markdown](#markdown)
|
|
57
|
+
- [Recipe](#recipe)
|
|
58
|
+
- [Resume](#resume)
|
|
59
|
+
- [SocialCard](#socialcard)
|
|
60
|
+
- [Timeline](#timeline)
|
|
61
|
+
|
|
62
|
+
### Entertainment
|
|
63
|
+
- [NerdJoke](#nerdjoke)
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 📖 Usage Examples
|
|
68
|
+
|
|
69
|
+
### Basic Component Usage
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import { Accordion, Callout, SmartImage } from '@pixelated-tech/components';
|
|
73
|
+
|
|
74
|
+
function MyApp() {
|
|
75
|
+
return (
|
|
76
|
+
<div>
|
|
77
|
+
<Accordion items={[
|
|
78
|
+
{ title: 'How it works', content: 'This component uses native HTML details elements...' },
|
|
79
|
+
{ title: 'Why use it', content: 'Accessible, lightweight, and SEO-friendly...' }
|
|
80
|
+
]} />
|
|
81
|
+
|
|
82
|
+
<Callout
|
|
83
|
+
title="Welcome!"
|
|
84
|
+
content="This is a highlighted callout message"
|
|
85
|
+
variant="boxed"
|
|
86
|
+
/>
|
|
87
|
+
|
|
88
|
+
<SmartImage
|
|
89
|
+
src="/path/to/image.jpg"
|
|
90
|
+
alt="Description"
|
|
91
|
+
aboveFold={true}
|
|
92
|
+
/>
|
|
93
|
+
</div>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Storybook Interactive Demos
|
|
99
|
+
|
|
100
|
+
For interactive component exploration:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Start Storybook development server
|
|
104
|
+
npm run storybook
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Storybook provides:**
|
|
108
|
+
- ✅ **Live component playground** - Try different props and see results instantly
|
|
109
|
+
- ✅ **Multiple variants** - See components in different states and configurations
|
|
110
|
+
- ✅ **Responsive testing** - Check how components behave on different screen sizes
|
|
111
|
+
- ✅ **Accessibility testing** - Built-in a11y checks and guidelines
|
|
112
|
+
- ✅ **Component documentation** - Auto-generated from TypeScript interfaces
|
|
113
|
+
|
|
114
|
+
**Access locally at:** `http://localhost:6006`
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## General Components
|
|
119
|
+
|
|
120
|
+
### Accordion
|
|
121
|
+
|
|
122
|
+
Expandable content component using native `<details>` elements for accessibility and SEO.
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
import { Accordion } from '@pixelated-tech/components';
|
|
126
|
+
|
|
127
|
+
const items = [
|
|
128
|
+
{
|
|
129
|
+
title: 'What is React?',
|
|
130
|
+
content: 'React is a JavaScript library for building user interfaces.'
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
title: 'How does it work?',
|
|
134
|
+
content: 'React uses a component-based architecture and virtual DOM.'
|
|
135
|
+
}
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
<Accordion items={items} />
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Props
|
|
142
|
+
|
|
143
|
+
| Prop | Type | Default | Description |
|
|
144
|
+
|------|------|---------|-------------|
|
|
145
|
+
| `items` | `Array<{title: string, content: string \| ReactNode}>` | - | Array of accordion items |
|
|
146
|
+
| `className` | `string` | - | Additional CSS classes |
|
|
147
|
+
|
|
148
|
+
#### Features
|
|
149
|
+
- ✅ **Accessible** - Uses semantic HTML with proper ARIA attributes
|
|
150
|
+
- ✅ **SEO-friendly** - Content is crawlable when expanded
|
|
151
|
+
- ✅ **Lightweight** - No JavaScript required for basic functionality
|
|
152
|
+
- ✅ **Customizable** - Full CSS customization support
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### Callout
|
|
157
|
+
|
|
158
|
+
Flexible content highlight component with image and button support.
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import { Callout } from '@pixelated-tech/components';
|
|
162
|
+
|
|
163
|
+
<Callout
|
|
164
|
+
title="Important Notice"
|
|
165
|
+
content="This is a highlighted message"
|
|
166
|
+
variant="boxed"
|
|
167
|
+
img="/path/to/image.jpg"
|
|
168
|
+
url="/learn-more"
|
|
169
|
+
/>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### Props
|
|
173
|
+
|
|
174
|
+
| Prop | Type | Default | Description |
|
|
175
|
+
|------|------|---------|-------------|
|
|
176
|
+
| `title` | `string` | - | Callout title |
|
|
177
|
+
| `content` | `string \| ReactNode` | - | Callout content |
|
|
178
|
+
| `variant` | `'default' \| 'boxed' \| 'full' \| 'grid' \| 'overlay' \| 'split'` | `'default'` | Visual style variant |
|
|
179
|
+
| `boxShape` | `'square' \| 'bevel' \| 'squircle' \| 'round'` | `'squircle'` | Border radius style |
|
|
180
|
+
| `layout` | `'horizontal' \| 'vertical'` | `'horizontal'` | Content layout |
|
|
181
|
+
| `direction` | `'left' \| 'right'` | `'left'` | Image position (when layout is horizontal) |
|
|
182
|
+
| `gridColumns` | `{left: number, right: number}` | `{left: 1, right: 2}` | Grid column distribution |
|
|
183
|
+
| `img` | `string` | - | Image URL |
|
|
184
|
+
| `imgAlt` | `string` | - | Image alt text |
|
|
185
|
+
| `imgShape` | `'square' \| 'bevel' \| 'squircle' \| 'round'` | `'square'` | Image border radius |
|
|
186
|
+
| `imgClick` | `(event: MouseEvent, url?: string) => void` | - | Image click handler |
|
|
187
|
+
| `url` | `string` | - | Link URL for the entire callout |
|
|
188
|
+
| `buttonText` | `string` | - | Custom button text |
|
|
189
|
+
| `subtitle` | `string` | - | Subtitle text |
|
|
190
|
+
| `aboveFold` | `boolean` | - | Image optimization hint |
|
|
191
|
+
|
|
192
|
+
#### Variants
|
|
193
|
+
- **`default`**: Simple layout with optional border
|
|
194
|
+
- **`boxed`**: Border around entire callout
|
|
195
|
+
- **`full`**: Full-width layout with minimal margins
|
|
196
|
+
- **`grid`**: CSS Grid layout with configurable columns
|
|
197
|
+
- **`overlay`**: Image overlay with text positioning
|
|
198
|
+
- **`split`**: Full-width split layout
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
### Loading
|
|
203
|
+
|
|
204
|
+
Progress indicator component with multiple animation styles.
|
|
205
|
+
|
|
206
|
+
```tsx
|
|
207
|
+
import { Loading } from '@pixelated-tech/components';
|
|
208
|
+
|
|
209
|
+
// Default spinner
|
|
210
|
+
<Loading />
|
|
211
|
+
|
|
212
|
+
// Custom message
|
|
213
|
+
<Loading message="Loading data..." />
|
|
214
|
+
|
|
215
|
+
// Different variants
|
|
216
|
+
<Loading variant="dots" />
|
|
217
|
+
<Loading variant="pulse" />
|
|
218
|
+
<Loading variant="bars" />
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### Props
|
|
222
|
+
| Prop | Type | Default | Description |
|
|
223
|
+
|------|------|---------|-------------|
|
|
224
|
+
| `variant` | `'spinner' \| 'dots' \| 'pulse' \| 'bars'` | `'spinner'` | Animation style |
|
|
225
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Component size |
|
|
226
|
+
| `message` | `string` | - | Loading message text |
|
|
227
|
+
| `color` | `string` | - | Custom color (CSS color value) |
|
|
228
|
+
|
|
229
|
+
### Modal
|
|
230
|
+
|
|
231
|
+
Dialog overlay component with accessibility features.
|
|
232
|
+
|
|
233
|
+
```tsx
|
|
234
|
+
import { Modal } from '@pixelated-tech/components';
|
|
235
|
+
|
|
236
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
237
|
+
|
|
238
|
+
<Modal
|
|
239
|
+
isOpen={isOpen}
|
|
240
|
+
onClose={() => setIsOpen(false)}
|
|
241
|
+
title="Confirm Action"
|
|
242
|
+
>
|
|
243
|
+
<p>Are you sure you want to proceed?</p>
|
|
244
|
+
<button onClick={() => setIsOpen(false)}>Cancel</button>
|
|
245
|
+
<button onClick={handleConfirm}>Confirm</button>
|
|
246
|
+
</Modal>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Props
|
|
250
|
+
| Prop | Type | Default | Description |
|
|
251
|
+
|------|------|---------|-------------|
|
|
252
|
+
| `isOpen` | `boolean` | `false` | Modal visibility |
|
|
253
|
+
| `onClose` | `() => void` | - | Close handler |
|
|
254
|
+
| `title` | `string` | - | Modal title |
|
|
255
|
+
| `children` | `ReactNode` | - | Modal content |
|
|
256
|
+
| `size` | `'small' \| 'medium' \| 'large' \| 'fullscreen'` | `'medium'` | Modal size |
|
|
257
|
+
| `closeOnOverlay` | `boolean` | `true` | Close when clicking overlay |
|
|
258
|
+
|
|
259
|
+
### SidePanel
|
|
260
|
+
|
|
261
|
+
Slide-out panel component for additional content.
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
import { SidePanel } from '@pixelated-tech/components';
|
|
265
|
+
|
|
266
|
+
<SidePanel
|
|
267
|
+
isOpen={isOpen}
|
|
268
|
+
onClose={() => setIsOpen(false)}
|
|
269
|
+
position="right"
|
|
270
|
+
title="Settings"
|
|
271
|
+
>
|
|
272
|
+
<div>Panel content goes here</div>
|
|
273
|
+
</SidePanel>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
#### Props
|
|
277
|
+
| Prop | Type | Default | Description |
|
|
278
|
+
|------|------|---------|-------------|
|
|
279
|
+
| `isOpen` | `boolean` | `false` | Panel visibility |
|
|
280
|
+
| `onClose` | `() => void` | - | Close handler |
|
|
281
|
+
| `position` | `'left' \| 'right'` | `'right'` | Slide direction |
|
|
282
|
+
| `title` | `string` | - | Panel title |
|
|
283
|
+
| `children` | `ReactNode` | - | Panel content |
|
|
284
|
+
| `width` | `string` | `'300px'` | Panel width |
|
|
285
|
+
|
|
286
|
+
### SmartImage
|
|
287
|
+
|
|
288
|
+
Optimized image component with lazy loading and responsive features.
|
|
289
|
+
|
|
290
|
+
```tsx
|
|
291
|
+
import { SmartImage } from '@pixelated-tech/components';
|
|
292
|
+
|
|
293
|
+
<SmartImage
|
|
294
|
+
src="/path/to/image.jpg"
|
|
295
|
+
alt="Description"
|
|
296
|
+
aboveFold={false}
|
|
297
|
+
sizes="(max-width: 768px) 100vw, 50vw"
|
|
298
|
+
/>
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
#### Props
|
|
302
|
+
| Prop | Type | Default | Description |
|
|
303
|
+
|------|------|---------|-------------|
|
|
304
|
+
| `src` | `string` | - | Image source URL |
|
|
305
|
+
| `alt` | `string` | - | Alt text |
|
|
306
|
+
| `aboveFold` | `boolean` | `false` | Above-the-fold hint for loading |
|
|
307
|
+
| `sizes` | `string` | - | Responsive sizes attribute |
|
|
308
|
+
| `loading` | `'lazy' \| 'eager'` | `'lazy'` | Loading strategy |
|
|
309
|
+
| `width` | `number` | - | Image width |
|
|
310
|
+
| `height` | `number` | - | Image height |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## CMS Integration
|
|
315
|
+
|
|
316
|
+
### WordPress Components
|
|
317
|
+
|
|
318
|
+
#### BlogPostList
|
|
319
|
+
|
|
320
|
+
Displays a list of WordPress blog posts with pagination support.
|
|
321
|
+
|
|
322
|
+
```tsx
|
|
323
|
+
import { BlogPostList } from '@pixelated-tech/components';
|
|
324
|
+
|
|
325
|
+
<BlogPostList
|
|
326
|
+
site="blog.pixelated.tech"
|
|
327
|
+
count={10}
|
|
328
|
+
/>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
#### Props
|
|
332
|
+
|
|
333
|
+
| Prop | Type | Default | Description |
|
|
334
|
+
|------|------|---------|-------------|
|
|
335
|
+
| `site` | `string` | - | WordPress site URL or API endpoint |
|
|
336
|
+
| `count` | `number` | - | Number of posts to fetch (undefined = all) |
|
|
337
|
+
| `posts` | `BlogPostType[]` | - | Pre-fetched posts array |
|
|
338
|
+
|
|
339
|
+
#### BlogPostSummary
|
|
340
|
+
|
|
341
|
+
Individual blog post display component.
|
|
342
|
+
|
|
343
|
+
```tsx
|
|
344
|
+
import { BlogPostSummary } from '@pixelated-tech/components';
|
|
345
|
+
|
|
346
|
+
<BlogPostSummary
|
|
347
|
+
ID="123"
|
|
348
|
+
title="Blog Post Title"
|
|
349
|
+
date="2024-01-01"
|
|
350
|
+
excerpt="Post excerpt..."
|
|
351
|
+
URL="https://blog.example.com/post"
|
|
352
|
+
categories={['tech', 'react']}
|
|
353
|
+
/>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Calendly
|
|
357
|
+
|
|
358
|
+
Scheduling integration component for Calendly bookings.
|
|
359
|
+
|
|
360
|
+
```tsx
|
|
361
|
+
import { Calendly } from '@pixelated-tech/components';
|
|
362
|
+
|
|
363
|
+
<Calendly
|
|
364
|
+
url="https://calendly.com/username/meeting"
|
|
365
|
+
styles={{ height: '600px' }}
|
|
366
|
+
/>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
#### Props
|
|
370
|
+
| Prop | Type | Default | Description |
|
|
371
|
+
|------|------|---------|-------------|
|
|
372
|
+
| `url` | `string` | - | Calendly booking URL |
|
|
373
|
+
| `styles` | `object` | - | Inline styles for iframe |
|
|
374
|
+
|
|
375
|
+
### CloudinaryImage
|
|
376
|
+
|
|
377
|
+
Optimized image delivery with Cloudinary transformations.
|
|
378
|
+
|
|
379
|
+
```tsx
|
|
380
|
+
import { SmartImage } from '@pixelated-tech/components';
|
|
381
|
+
|
|
382
|
+
<SmartImage
|
|
383
|
+
src="https://res.cloudinary.com/demo/image/upload/sample.jpg"
|
|
384
|
+
alt="Cloudinary image"
|
|
385
|
+
transformations="w_400,h_300,c_fill,f_auto"
|
|
386
|
+
/>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
#### Props
|
|
390
|
+
| Prop | Type | Default | Description |
|
|
391
|
+
|------|------|---------|-------------|
|
|
392
|
+
| `src` | `string` | - | Cloudinary image URL |
|
|
393
|
+
| `alt` | `string` | - | Alt text |
|
|
394
|
+
| `transformations` | `string` | - | Cloudinary transformation string |
|
|
395
|
+
| `aboveFold` | `boolean` | `false` | Loading priority |
|
|
396
|
+
|
|
397
|
+
### ContentfulItems
|
|
398
|
+
|
|
399
|
+
Contentful headless CMS integration for displaying content.
|
|
400
|
+
|
|
401
|
+
```tsx
|
|
402
|
+
import { ContentfulItems } from '@pixelated-tech/components';
|
|
403
|
+
|
|
404
|
+
<ContentfulItems
|
|
405
|
+
spaceId="your-space-id"
|
|
406
|
+
accessToken="your-access-token"
|
|
407
|
+
contentType="blogPost"
|
|
408
|
+
limit={10}
|
|
409
|
+
/>
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
#### Props
|
|
413
|
+
| Prop | Type | Default | Description |
|
|
414
|
+
|------|------|---------|-------------|
|
|
415
|
+
| `spaceId` | `string` | - | Contentful space ID |
|
|
416
|
+
| `accessToken` | `string` | - | Contentful access token |
|
|
417
|
+
| `contentType` | `string` | - | Content type to fetch |
|
|
418
|
+
| `limit` | `number` | `10` | Number of items to fetch |
|
|
419
|
+
|
|
420
|
+
### GoogleReviews
|
|
421
|
+
|
|
422
|
+
Google Business Profile reviews integration.
|
|
423
|
+
|
|
424
|
+
```tsx
|
|
425
|
+
import { GoogleReviews } from '@pixelated-tech/components';
|
|
426
|
+
|
|
427
|
+
<GoogleReviews
|
|
428
|
+
placeId="ChIJ1234567890abcdef"
|
|
429
|
+
apiKey="your-google-api-key"
|
|
430
|
+
/>
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
#### Props
|
|
434
|
+
| Prop | Type | Default | Description |
|
|
435
|
+
|------|------|---------|-------------|
|
|
436
|
+
| `placeId` | `string` | - | Google Place ID |
|
|
437
|
+
| `apiKey` | `string` | - | Google API key |
|
|
438
|
+
| `maxReviews` | `number` | `5` | Maximum reviews to display |
|
|
439
|
+
|
|
440
|
+
### Gravatar
|
|
441
|
+
|
|
442
|
+
User avatar integration with Gravatar service.
|
|
443
|
+
|
|
444
|
+
```tsx
|
|
445
|
+
import { Gravatar } from '@pixelated-tech/components';
|
|
446
|
+
|
|
447
|
+
<Gravatar
|
|
448
|
+
email="user@example.com"
|
|
449
|
+
size={100}
|
|
450
|
+
defaultImage="identicon"
|
|
451
|
+
/>
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
#### Props
|
|
455
|
+
| Prop | Type | Default | Description |
|
|
456
|
+
|------|------|---------|-------------|
|
|
457
|
+
| `email` | `string` | - | User email for Gravatar lookup |
|
|
458
|
+
| `size` | `number` | `80` | Avatar size in pixels |
|
|
459
|
+
| `defaultImage` | `string` | `'identicon'` | Default image type |
|
|
460
|
+
|
|
461
|
+
### HubSpot
|
|
462
|
+
|
|
463
|
+
CRM integration for HubSpot forms and tracking.
|
|
464
|
+
|
|
465
|
+
```tsx
|
|
466
|
+
import { HubSpot } from '@pixelated-tech/components';
|
|
467
|
+
|
|
468
|
+
<HubSpot
|
|
469
|
+
portalId="1234567"
|
|
470
|
+
formId="abcd-1234-5678-efgh"
|
|
471
|
+
/>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
#### Props
|
|
475
|
+
| Prop | Type | Default | Description |
|
|
476
|
+
|------|------|---------|-------------|
|
|
477
|
+
| `portalId` | `string` | - | HubSpot portal ID |
|
|
478
|
+
| `formId` | `string` | - | HubSpot form ID |
|
|
479
|
+
| `onFormSubmit` | `function` | - | Form submission callback |
|
|
480
|
+
|
|
481
|
+
### Instagram
|
|
482
|
+
|
|
483
|
+
Instagram feed integration for displaying posts.
|
|
484
|
+
|
|
485
|
+
```tsx
|
|
486
|
+
import { Instagram } from '@pixelated-tech/components';
|
|
487
|
+
|
|
488
|
+
<Instagram
|
|
489
|
+
username="instagram"
|
|
490
|
+
accessToken="your-access-token"
|
|
491
|
+
limit={6}
|
|
492
|
+
/>
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
#### Props
|
|
496
|
+
| Prop | Type | Default | Description |
|
|
497
|
+
|------|------|---------|-------------|
|
|
498
|
+
| `username` | `string` | - | Instagram username |
|
|
499
|
+
| `accessToken` | `string` | - | Instagram API access token |
|
|
500
|
+
| `limit` | `number` | `6` | Number of posts to display |
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
## UI Components
|
|
507
|
+
|
|
508
|
+
### Carousel
|
|
509
|
+
|
|
510
|
+
Image and content slider with multiple variants.
|
|
511
|
+
|
|
512
|
+
#### CarouselHero
|
|
513
|
+
|
|
514
|
+
Full-width hero carousel for landing pages.
|
|
515
|
+
|
|
516
|
+
```tsx
|
|
517
|
+
import { CarouselHero } from '@pixelated-tech/components';
|
|
518
|
+
|
|
519
|
+
const slides = [
|
|
520
|
+
{
|
|
521
|
+
image: '/hero1.jpg',
|
|
522
|
+
title: 'Welcome',
|
|
523
|
+
subtitle: 'To our platform',
|
|
524
|
+
buttonText: 'Get Started',
|
|
525
|
+
buttonUrl: '/signup'
|
|
526
|
+
}
|
|
527
|
+
];
|
|
528
|
+
|
|
529
|
+
<CarouselHero slides={slides} />
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
#### CarouselReviews
|
|
533
|
+
|
|
534
|
+
Customer testimonial carousel.
|
|
535
|
+
|
|
536
|
+
```tsx
|
|
537
|
+
import { CarouselReviews } from '@pixelated-tech/components';
|
|
538
|
+
|
|
539
|
+
const reviews = [
|
|
540
|
+
{
|
|
541
|
+
name: 'John Doe',
|
|
542
|
+
company: 'Tech Corp',
|
|
543
|
+
review: 'Great product!',
|
|
544
|
+
avatar: '/john.jpg'
|
|
545
|
+
}
|
|
546
|
+
];
|
|
547
|
+
|
|
548
|
+
<CarouselReviews reviews={reviews} />
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
### Forms
|
|
552
|
+
|
|
553
|
+
Dynamic form builder that generates forms from JSON configuration.
|
|
554
|
+
|
|
555
|
+
#### FormEngine
|
|
556
|
+
|
|
557
|
+
Complete form rendering engine with validation and submission handling.
|
|
558
|
+
|
|
559
|
+
```tsx
|
|
560
|
+
import { FormEngine } from '@pixelated-tech/components';
|
|
561
|
+
|
|
562
|
+
const formConfig = {
|
|
563
|
+
fields: [
|
|
564
|
+
{
|
|
565
|
+
type: 'text',
|
|
566
|
+
props: {
|
|
567
|
+
name: 'email',
|
|
568
|
+
label: 'Email Address',
|
|
569
|
+
placeholder: 'Enter your email',
|
|
570
|
+
required: true
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
type: 'textarea',
|
|
575
|
+
props: {
|
|
576
|
+
name: 'message',
|
|
577
|
+
label: 'Message',
|
|
578
|
+
placeholder: 'Enter your message',
|
|
579
|
+
rows: 4
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
]
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
<FormEngine
|
|
586
|
+
formData={formConfig}
|
|
587
|
+
onSubmitHandler={(data) => console.log('Form submitted:', data)}
|
|
588
|
+
method="POST"
|
|
589
|
+
/>
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
#### Form Components
|
|
593
|
+
|
|
594
|
+
Individual form field components for custom form building.
|
|
595
|
+
|
|
596
|
+
```tsx
|
|
597
|
+
import * as FC from '@pixelated-tech/components';
|
|
598
|
+
|
|
599
|
+
function CustomForm() {
|
|
600
|
+
return (
|
|
601
|
+
<form>
|
|
602
|
+
<FC.TextInput
|
|
603
|
+
name="username"
|
|
604
|
+
label="Username"
|
|
605
|
+
required={true}
|
|
606
|
+
placeholder="Enter username"
|
|
607
|
+
/>
|
|
608
|
+
<FC.EmailInput
|
|
609
|
+
name="email"
|
|
610
|
+
label="Email"
|
|
611
|
+
required={true}
|
|
612
|
+
/>
|
|
613
|
+
<FC.TextArea
|
|
614
|
+
name="bio"
|
|
615
|
+
label="Bio"
|
|
616
|
+
rows={4}
|
|
617
|
+
placeholder="Tell us about yourself"
|
|
618
|
+
/>
|
|
619
|
+
</form>
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### Menu
|
|
625
|
+
|
|
626
|
+
Navigation components with multiple interaction patterns.
|
|
627
|
+
|
|
628
|
+
#### MenuSimple
|
|
629
|
+
|
|
630
|
+
Basic horizontal navigation menu with automatic active state detection.
|
|
631
|
+
|
|
632
|
+
```tsx
|
|
633
|
+
import { MenuSimple } from '@pixelated-tech/components';
|
|
634
|
+
|
|
635
|
+
const menuItems = [
|
|
636
|
+
{ name: 'Home', path: '/' },
|
|
637
|
+
{ name: 'About', path: '/about' },
|
|
638
|
+
{ name: 'Services', path: '/services' },
|
|
639
|
+
{ name: 'Contact', path: '/contact' }
|
|
640
|
+
];
|
|
641
|
+
|
|
642
|
+
<MenuSimple menuItems={menuItems} />
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
#### MenuAccordion
|
|
646
|
+
|
|
647
|
+
Expandable navigation menu with nested items and groups.
|
|
648
|
+
|
|
649
|
+
```tsx
|
|
650
|
+
import { MenuAccordion } from '@pixelated-tech/components';
|
|
651
|
+
|
|
652
|
+
const menuData = {
|
|
653
|
+
home: { name: 'Home', path: '/' },
|
|
654
|
+
services: {
|
|
655
|
+
name: 'Services',
|
|
656
|
+
routes: {
|
|
657
|
+
webdev: { name: 'Web Development', path: '/services/web-dev' },
|
|
658
|
+
design: { name: 'Design', path: '/services/design' },
|
|
659
|
+
consulting: { name: 'Consulting', path: '/services/consulting' }
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
about: { name: 'About', path: '/about' }
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
<MenuAccordion menuItems={menuData} />
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
#### MenuExpando
|
|
669
|
+
|
|
670
|
+
Expandable menu with smooth animations and toggle states.
|
|
671
|
+
|
|
672
|
+
```tsx
|
|
673
|
+
import { MenuExpando } from '@pixelated-tech/components';
|
|
674
|
+
|
|
675
|
+
const menuItems = [
|
|
676
|
+
{
|
|
677
|
+
name: 'Products',
|
|
678
|
+
path: '/products',
|
|
679
|
+
routes: [
|
|
680
|
+
{ name: 'Software', path: '/products/software' },
|
|
681
|
+
{ name: 'Hardware', path: '/products/hardware' }
|
|
682
|
+
]
|
|
683
|
+
},
|
|
684
|
+
{ name: 'Support', path: '/support' }
|
|
685
|
+
];
|
|
686
|
+
|
|
687
|
+
<MenuExpando menuItems={menuItems} />
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
### Tables
|
|
691
|
+
|
|
692
|
+
Data display component with sorting and image support.
|
|
693
|
+
|
|
694
|
+
```tsx
|
|
695
|
+
import { Table } from '@pixelated-tech/components';
|
|
696
|
+
|
|
697
|
+
const userData = [
|
|
698
|
+
{
|
|
699
|
+
name: 'John Doe',
|
|
700
|
+
email: 'john@example.com',
|
|
701
|
+
avatar: 'https://example.com/avatar1.jpg',
|
|
702
|
+
role: 'Admin'
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
name: 'Jane Smith',
|
|
706
|
+
email: 'jane@example.com',
|
|
707
|
+
avatar: 'https://example.com/avatar2.jpg',
|
|
708
|
+
role: 'User'
|
|
709
|
+
}
|
|
710
|
+
];
|
|
711
|
+
|
|
712
|
+
<Table
|
|
713
|
+
data={userData}
|
|
714
|
+
id="users-table"
|
|
715
|
+
sortable={true}
|
|
716
|
+
/>
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Tiles
|
|
720
|
+
|
|
721
|
+
Image grid layout component for displaying card-based content.
|
|
722
|
+
|
|
723
|
+
```tsx
|
|
724
|
+
import { Tiles } from '@pixelated-tech/components';
|
|
725
|
+
|
|
726
|
+
const cards = [
|
|
727
|
+
{
|
|
728
|
+
image: '/project1.jpg',
|
|
729
|
+
imageAlt: 'Project 1',
|
|
730
|
+
bodyText: 'Portfolio project description',
|
|
731
|
+
link: '/projects/1'
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
image: '/project2.jpg',
|
|
735
|
+
imageAlt: 'Project 2',
|
|
736
|
+
bodyText: 'Another portfolio project',
|
|
737
|
+
link: '/projects/2'
|
|
738
|
+
}
|
|
739
|
+
];
|
|
740
|
+
|
|
741
|
+
<Tiles
|
|
742
|
+
cards={cards}
|
|
743
|
+
rowCount={3}
|
|
744
|
+
/>
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
---
|
|
748
|
+
|
|
749
|
+
## PageBuilder Components
|
|
750
|
+
|
|
751
|
+
### ComponentPropertiesForm
|
|
752
|
+
|
|
753
|
+
Form for editing component properties in the page builder.
|
|
754
|
+
|
|
755
|
+
```tsx
|
|
756
|
+
import { ComponentPropertiesForm } from '@pixelated-tech/components';
|
|
757
|
+
|
|
758
|
+
<ComponentPropertiesForm
|
|
759
|
+
component={selectedComponent}
|
|
760
|
+
onChange={handlePropertyChange}
|
|
761
|
+
onSave={handleSave}
|
|
762
|
+
/>
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
#### Props
|
|
766
|
+
| Prop | Type | Default | Description |
|
|
767
|
+
|------|------|---------|-------------|
|
|
768
|
+
| `component` | `ComponentType` | - | Component being edited |
|
|
769
|
+
| `onChange` | `function` | - | Property change handler |
|
|
770
|
+
| `onSave` | `function` | - | Save handler |
|
|
771
|
+
|
|
772
|
+
### ComponentSelector
|
|
773
|
+
|
|
774
|
+
Component picker for adding new components to pages.
|
|
775
|
+
|
|
776
|
+
```tsx
|
|
777
|
+
import { ComponentSelector } from '@pixelated-tech/components';
|
|
778
|
+
|
|
779
|
+
<ComponentSelector
|
|
780
|
+
onSelect={handleComponentSelect}
|
|
781
|
+
category="general"
|
|
782
|
+
/>
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
#### Props
|
|
786
|
+
| Prop | Type | Default | Description |
|
|
787
|
+
|------|------|---------|-------------|
|
|
788
|
+
| `onSelect` | `function` | - | Component selection handler |
|
|
789
|
+
| `category` | `string` | - | Component category filter |
|
|
790
|
+
|
|
791
|
+
### ComponentTree
|
|
792
|
+
|
|
793
|
+
Visual tree representation of page components.
|
|
794
|
+
|
|
795
|
+
```tsx
|
|
796
|
+
import { ComponentTree } from '@pixelated-tech/components';
|
|
797
|
+
|
|
798
|
+
<ComponentTree
|
|
799
|
+
components={pageComponents}
|
|
800
|
+
onSelect={handleComponentSelect}
|
|
801
|
+
selectedId={selectedComponentId}
|
|
802
|
+
/>
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
#### Props
|
|
806
|
+
| Prop | Type | Default | Description |
|
|
807
|
+
|------|------|---------|-------------|
|
|
808
|
+
| `components` | `ComponentType[]` | - | Page components array |
|
|
809
|
+
| `onSelect` | `function` | - | Component selection handler |
|
|
810
|
+
| `selectedId` | `string` | - | Currently selected component ID |
|
|
811
|
+
|
|
812
|
+
### PageBuilderUI
|
|
813
|
+
|
|
814
|
+
Main page builder interface component.
|
|
815
|
+
|
|
816
|
+
```tsx
|
|
817
|
+
import { PageBuilderUI } from '@pixelated-tech/components';
|
|
818
|
+
|
|
819
|
+
<PageBuilderUI
|
|
820
|
+
initialPage={pageData}
|
|
821
|
+
onSave={handleSave}
|
|
822
|
+
availableComponents={componentLibrary}
|
|
823
|
+
/>
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
#### Props
|
|
827
|
+
| Prop | Type | Default | Description |
|
|
828
|
+
|------|------|---------|-------------|
|
|
829
|
+
| `initialPage` | `PageType` | - | Initial page data |
|
|
830
|
+
| `onSave` | `function` | - | Save handler |
|
|
831
|
+
| `availableComponents` | `ComponentType[]` | - | Available components |
|
|
832
|
+
|
|
833
|
+
### PageEngine
|
|
834
|
+
|
|
835
|
+
Runtime page rendering engine.
|
|
836
|
+
|
|
837
|
+
```tsx
|
|
838
|
+
import { PageEngine } from '@pixelated-tech/components';
|
|
839
|
+
|
|
840
|
+
<PageEngine
|
|
841
|
+
pageData={pageData}
|
|
842
|
+
context={pageContext}
|
|
843
|
+
/>
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
#### Props
|
|
847
|
+
| Prop | Type | Default | Description |
|
|
848
|
+
|------|------|---------|-------------|
|
|
849
|
+
| `pageData` | `PageType` | - | Page structure data |
|
|
850
|
+
| `context` | `object` | - | Runtime context |
|
|
851
|
+
|
|
852
|
+
### SaveLoadSection
|
|
853
|
+
|
|
854
|
+
Save and load functionality for page builder.
|
|
855
|
+
|
|
856
|
+
```tsx
|
|
857
|
+
import { SaveLoadSection } from '@pixelated-tech/components';
|
|
858
|
+
|
|
859
|
+
<SaveLoadSection
|
|
860
|
+
onSave={handleSave}
|
|
861
|
+
onLoad={handleLoad}
|
|
862
|
+
onNew={handleNew}
|
|
863
|
+
/>
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
#### Props
|
|
867
|
+
| Prop | Type | Default | Description |
|
|
868
|
+
|------|------|---------|-------------|
|
|
869
|
+
| `onSave` | `function` | - | Save handler |
|
|
870
|
+
| `onLoad` | `function` | - | Load handler |
|
|
871
|
+
| `onNew` | `function` | - | New page handler |
|
|
872
|
+
|
|
873
|
+
---
|
|
874
|
+
|
|
875
|
+
## SEO & Schema
|
|
876
|
+
|
|
877
|
+
### JSON-LD Schemas
|
|
878
|
+
|
|
879
|
+
Structured data components for SEO.
|
|
880
|
+
|
|
881
|
+
#### LocalBusiness
|
|
882
|
+
|
|
883
|
+
```tsx
|
|
884
|
+
import { LocalBusinessSchema } from '@pixelated-tech/components';
|
|
885
|
+
|
|
886
|
+
<LocalBusinessSchema
|
|
887
|
+
name="My Business"
|
|
888
|
+
address={{
|
|
889
|
+
streetAddress: '123 Main St',
|
|
890
|
+
addressLocality: 'City',
|
|
891
|
+
addressRegion: 'State',
|
|
892
|
+
postalCode: '12345'
|
|
893
|
+
}}
|
|
894
|
+
telephone="(555) 123-4567"
|
|
895
|
+
/>
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
#### Recipe
|
|
899
|
+
|
|
900
|
+
```tsx
|
|
901
|
+
import { RecipeSchema } from '@pixelated-tech/components';
|
|
902
|
+
|
|
903
|
+
<RecipeSchema
|
|
904
|
+
name="Chocolate Chip Cookies"
|
|
905
|
+
author="Chef Name"
|
|
906
|
+
prepTime="PT15M"
|
|
907
|
+
cookTime="PT10M"
|
|
908
|
+
ingredients={[
|
|
909
|
+
'2 cups flour',
|
|
910
|
+
'1 cup butter',
|
|
911
|
+
'1 cup sugar'
|
|
912
|
+
]}
|
|
913
|
+
instructions={[
|
|
914
|
+
{
|
|
915
|
+
text: 'Mix dry ingredients',
|
|
916
|
+
position: 1
|
|
917
|
+
}
|
|
918
|
+
]}
|
|
919
|
+
/>
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
#### Services
|
|
923
|
+
|
|
924
|
+
```tsx
|
|
925
|
+
import { ServicesSchema } from '@pixelated-tech/components';
|
|
926
|
+
|
|
927
|
+
<ServicesSchema
|
|
928
|
+
name="Web Development Services"
|
|
929
|
+
description="Professional web development and design services"
|
|
930
|
+
provider={{
|
|
931
|
+
name: "My Company",
|
|
932
|
+
url: "https://example.com"
|
|
933
|
+
}}
|
|
934
|
+
serviceType="Web Development"
|
|
935
|
+
areaServed="Global"
|
|
936
|
+
/>
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
#### Website
|
|
940
|
+
|
|
941
|
+
```tsx
|
|
942
|
+
import { WebsiteSchema } from '@pixelated-tech/components';
|
|
943
|
+
|
|
944
|
+
<WebsiteSchema
|
|
945
|
+
name="My Website"
|
|
946
|
+
url="https://example.com"
|
|
947
|
+
description="Website description"
|
|
948
|
+
publisher={{
|
|
949
|
+
name: "My Company",
|
|
950
|
+
logo: "https://example.com/logo.png"
|
|
951
|
+
}}
|
|
952
|
+
/>
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
#### BlogPosting
|
|
956
|
+
|
|
957
|
+
```tsx
|
|
958
|
+
import { BlogPostingSchema } from '@pixelated-tech/components';
|
|
959
|
+
|
|
960
|
+
<BlogPostingSchema
|
|
961
|
+
headline="Blog Post Title"
|
|
962
|
+
author={{
|
|
963
|
+
name: "Author Name",
|
|
964
|
+
url: "https://example.com/author"
|
|
965
|
+
}}
|
|
966
|
+
datePublished="2024-01-01"
|
|
967
|
+
dateModified="2024-01-15"
|
|
968
|
+
articleBody="Full blog post content..."
|
|
969
|
+
image="https://example.com/blog-image.jpg"
|
|
970
|
+
/>
|
|
971
|
+
```
|
|
972
|
+
|
|
973
|
+
### 404 Page
|
|
974
|
+
|
|
975
|
+
Custom 404 error page component.
|
|
976
|
+
|
|
977
|
+
```tsx
|
|
978
|
+
import { NotFound } from '@pixelated-tech/components';
|
|
979
|
+
|
|
980
|
+
<NotFound
|
|
981
|
+
title="Page Not Found"
|
|
982
|
+
message="The page you're looking for doesn't exist."
|
|
983
|
+
homeUrl="/"
|
|
984
|
+
/>
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
#### Props
|
|
988
|
+
| Prop | Type | Default | Description |
|
|
989
|
+
|------|------|---------|-------------|
|
|
990
|
+
| `title` | `string` | `'404 - Page Not Found'` | Page title |
|
|
991
|
+
| `message` | `string` | - | Error message |
|
|
992
|
+
| `homeUrl` | `string` | `'/'` | Home page URL |
|
|
993
|
+
|
|
994
|
+
### GoogleAnalytics
|
|
995
|
+
|
|
996
|
+
Google Analytics tracking component.
|
|
997
|
+
|
|
998
|
+
```tsx
|
|
999
|
+
import { GoogleAnalytics } from '@pixelated-tech/components';
|
|
1000
|
+
|
|
1001
|
+
<GoogleAnalytics
|
|
1002
|
+
trackingId="GA_MEASUREMENT_ID"
|
|
1003
|
+
debug={false}
|
|
1004
|
+
/>
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
#### Props
|
|
1008
|
+
| Prop | Type | Default | Description |
|
|
1009
|
+
|------|------|---------|-------------|
|
|
1010
|
+
| `trackingId` | `string` | - | Google Analytics tracking ID |
|
|
1011
|
+
| `debug` | `boolean` | `false` | Enable debug mode |
|
|
1012
|
+
|
|
1013
|
+
### GoogleMap
|
|
1014
|
+
|
|
1015
|
+
Embedded Google Maps component.
|
|
1016
|
+
|
|
1017
|
+
```tsx
|
|
1018
|
+
import { GoogleMap } from '@pixelated-tech/components';
|
|
1019
|
+
|
|
1020
|
+
<GoogleMap
|
|
1021
|
+
apiKey="your-google-api-key"
|
|
1022
|
+
center={{ lat: 40.7128, lng: -74.0060 }}
|
|
1023
|
+
zoom={12}
|
|
1024
|
+
markers={[{ position: { lat: 40.7128, lng: -74.0060 }, title: 'New York' }]}
|
|
1025
|
+
/>
|
|
1026
|
+
```
|
|
1027
|
+
|
|
1028
|
+
#### Props
|
|
1029
|
+
| Prop | Type | Default | Description |
|
|
1030
|
+
|------|------|---------|-------------|
|
|
1031
|
+
| `apiKey` | `string` | - | Google Maps API key |
|
|
1032
|
+
| `center` | `LatLng` | - | Map center coordinates |
|
|
1033
|
+
| `zoom` | `number` | `10` | Map zoom level |
|
|
1034
|
+
| `markers` | `Marker[]` | - | Map markers array |
|
|
1035
|
+
|
|
1036
|
+
### GoogleSearch
|
|
1037
|
+
|
|
1038
|
+
Google Custom Search integration.
|
|
1039
|
+
|
|
1040
|
+
```tsx
|
|
1041
|
+
import { GoogleSearch } from '@pixelated-tech/components';
|
|
1042
|
+
|
|
1043
|
+
<GoogleSearch
|
|
1044
|
+
searchEngineId="your-search-engine-id"
|
|
1045
|
+
apiKey="your-api-key"
|
|
1046
|
+
placeholder="Search our site..."
|
|
1047
|
+
/>
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
#### Props
|
|
1051
|
+
| Prop | Type | Default | Description |
|
|
1052
|
+
|------|------|---------|-------------|
|
|
1053
|
+
| `searchEngineId` | `string` | - | Google Custom Search Engine ID |
|
|
1054
|
+
| `apiKey` | `string` | - | Google API key |
|
|
1055
|
+
| `placeholder` | `string` | `'Search...'` | Search input placeholder |
|
|
1056
|
+
|
|
1057
|
+
### MetadataComponents
|
|
1058
|
+
|
|
1059
|
+
Dynamic meta tag injection for SEO.
|
|
1060
|
+
|
|
1061
|
+
```tsx
|
|
1062
|
+
import { MetadataComponents } from '@pixelated-tech/components';
|
|
1063
|
+
|
|
1064
|
+
<MetadataComponents
|
|
1065
|
+
title="Page Title"
|
|
1066
|
+
description="Page description for SEO"
|
|
1067
|
+
keywords="keyword1, keyword2"
|
|
1068
|
+
ogImage="/social-image.jpg"
|
|
1069
|
+
/>
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
#### Props
|
|
1073
|
+
| Prop | Type | Default | Description |
|
|
1074
|
+
|------|------|---------|-------------|
|
|
1075
|
+
| `title` | `string` | - | Page title |
|
|
1076
|
+
| `description` | `string` | - | Meta description |
|
|
1077
|
+
| `keywords` | `string` | - | Meta keywords |
|
|
1078
|
+
| `ogImage` | `string` | - | Open Graph image URL |
|
|
1079
|
+
|
|
1080
|
+
---
|
|
1081
|
+
|
|
1082
|
+
## Shopping Cart
|
|
1083
|
+
|
|
1084
|
+
### eBay Components
|
|
1085
|
+
|
|
1086
|
+
eBay store integration and product listings.
|
|
1087
|
+
|
|
1088
|
+
```tsx
|
|
1089
|
+
import { eBay } from '@pixelated-tech/components';
|
|
1090
|
+
|
|
1091
|
+
<eBay
|
|
1092
|
+
storeId="your-store-id"
|
|
1093
|
+
keywords="electronics"
|
|
1094
|
+
limit={12}
|
|
1095
|
+
/>
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
#### Props
|
|
1099
|
+
| Prop | Type | Default | Description |
|
|
1100
|
+
|------|------|---------|-------------|
|
|
1101
|
+
| `storeId` | `string` | - | eBay store ID |
|
|
1102
|
+
| `keywords` | `string` | - | Search keywords |
|
|
1103
|
+
| `limit` | `number` | `10` | Number of items to display |
|
|
1104
|
+
|
|
1105
|
+
### PayPal
|
|
1106
|
+
|
|
1107
|
+
PayPal payment integration component.
|
|
1108
|
+
|
|
1109
|
+
```tsx
|
|
1110
|
+
import { PayPal } from '@pixelated-tech/components';
|
|
1111
|
+
|
|
1112
|
+
<PayPal
|
|
1113
|
+
amount={29.99}
|
|
1114
|
+
currency="USD"
|
|
1115
|
+
itemName="Premium Plan"
|
|
1116
|
+
onSuccess={handlePaymentSuccess}
|
|
1117
|
+
/>
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
#### Props
|
|
1121
|
+
| Prop | Type | Default | Description |
|
|
1122
|
+
|------|------|---------|-------------|
|
|
1123
|
+
| `amount` | `number` | - | Payment amount |
|
|
1124
|
+
| `currency` | `string` | `'USD'` | Currency code |
|
|
1125
|
+
| `itemName` | `string` | - | Item description |
|
|
1126
|
+
| `onSuccess` | `function` | - | Success callback |
|
|
1127
|
+
|
|
1128
|
+
### ShoppingCart
|
|
1129
|
+
|
|
1130
|
+
Shopping cart functionality with item management.
|
|
1131
|
+
|
|
1132
|
+
```tsx
|
|
1133
|
+
import { ShoppingCart } from '@pixelated-tech/components';
|
|
1134
|
+
|
|
1135
|
+
<ShoppingCart
|
|
1136
|
+
items={cartItems}
|
|
1137
|
+
onUpdateQuantity={handleQuantityChange}
|
|
1138
|
+
onRemoveItem={handleRemoveItem}
|
|
1139
|
+
/>
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
#### Props
|
|
1143
|
+
| Prop | Type | Default | Description |
|
|
1144
|
+
|------|------|---------|-------------|
|
|
1145
|
+
| `items` | `CartItem[]` | - | Cart items array |
|
|
1146
|
+
| `onUpdateQuantity` | `function` | - | Quantity change handler |
|
|
1147
|
+
| `onRemoveItem` | `function` | - | Item removal handler |
|
|
1148
|
+
|
|
1149
|
+
---
|
|
1150
|
+
|
|
1151
|
+
## Structured Content
|
|
1152
|
+
|
|
1153
|
+
### BuzzwordBingo
|
|
1154
|
+
|
|
1155
|
+
Interactive buzzword bingo game component.
|
|
1156
|
+
|
|
1157
|
+
```tsx
|
|
1158
|
+
import { BuzzwordBingo } from '@pixelated-tech/components';
|
|
1159
|
+
|
|
1160
|
+
<BuzzwordBingo
|
|
1161
|
+
words={['synergy', 'paradigm', 'leverage', 'optimize']}
|
|
1162
|
+
size={5}
|
|
1163
|
+
/>
|
|
1164
|
+
```
|
|
1165
|
+
|
|
1166
|
+
#### Props
|
|
1167
|
+
| Prop | Type | Default | Description |
|
|
1168
|
+
|------|------|---------|-------------|
|
|
1169
|
+
| `words` | `string[]` | - | Array of buzzwords |
|
|
1170
|
+
| `size` | `number` | `5` | Grid size (NxN) |
|
|
1171
|
+
|
|
1172
|
+
### Markdown
|
|
1173
|
+
|
|
1174
|
+
Markdown rendering component with syntax highlighting.
|
|
1175
|
+
|
|
1176
|
+
```tsx
|
|
1177
|
+
import { Markdown } from '@pixelated-tech/components';
|
|
1178
|
+
|
|
1179
|
+
<Markdown
|
|
1180
|
+
content="# Hello World\n\nThis is **markdown** content."
|
|
1181
|
+
allowHtml={false}
|
|
1182
|
+
/>
|
|
1183
|
+
```
|
|
1184
|
+
|
|
1185
|
+
#### Props
|
|
1186
|
+
| Prop | Type | Default | Description |
|
|
1187
|
+
|------|------|---------|-------------|
|
|
1188
|
+
| `content` | `string` | - | Markdown content |
|
|
1189
|
+
| `allowHtml` | `boolean` | `false` | Allow HTML in markdown |
|
|
1190
|
+
|
|
1191
|
+
### Recipe
|
|
1192
|
+
|
|
1193
|
+
Recipe display component with structured data.
|
|
1194
|
+
|
|
1195
|
+
```tsx
|
|
1196
|
+
import { Recipe } from '@pixelated-tech/components';
|
|
1197
|
+
|
|
1198
|
+
<Recipe
|
|
1199
|
+
title="Chocolate Chip Cookies"
|
|
1200
|
+
ingredients={['2 cups flour', '1 cup sugar', '1 cup chocolate chips']}
|
|
1201
|
+
instructions={['Mix dry ingredients', 'Add wet ingredients', 'Bake at 350°F']}
|
|
1202
|
+
prepTime="15 min"
|
|
1203
|
+
cookTime="12 min"
|
|
1204
|
+
/>
|
|
1205
|
+
```
|
|
1206
|
+
|
|
1207
|
+
#### Props
|
|
1208
|
+
| Prop | Type | Default | Description |
|
|
1209
|
+
|------|------|---------|-------------|
|
|
1210
|
+
| `title` | `string` | - | Recipe title |
|
|
1211
|
+
| `ingredients` | `string[]` | - | Ingredient list |
|
|
1212
|
+
| `instructions` | `string[]` | - | Cooking instructions |
|
|
1213
|
+
| `prepTime` | `string` | - | Preparation time |
|
|
1214
|
+
| `cookTime` | `string` | - | Cooking time |
|
|
1215
|
+
|
|
1216
|
+
### Resume
|
|
1217
|
+
|
|
1218
|
+
Professional resume/CV display component.
|
|
1219
|
+
|
|
1220
|
+
```tsx
|
|
1221
|
+
import { Resume } from '@pixelated-tech/components';
|
|
1222
|
+
|
|
1223
|
+
<Resume
|
|
1224
|
+
personalInfo={{ name: 'John Doe', email: 'john@example.com' }}
|
|
1225
|
+
experience={workExperience}
|
|
1226
|
+
education={educationHistory}
|
|
1227
|
+
skills={['React', 'TypeScript', 'Node.js']}
|
|
1228
|
+
/>
|
|
1229
|
+
```
|
|
1230
|
+
|
|
1231
|
+
#### Props
|
|
1232
|
+
| Prop | Type | Default | Description |
|
|
1233
|
+
|------|------|---------|-------------|
|
|
1234
|
+
| `personalInfo` | `object` | - | Personal information |
|
|
1235
|
+
| `experience` | `Experience[]` | - | Work experience |
|
|
1236
|
+
| `education` | `Education[]` | - | Education history |
|
|
1237
|
+
| `skills` | `string[]` | - | Skills list |
|
|
1238
|
+
|
|
1239
|
+
### SocialCard
|
|
1240
|
+
|
|
1241
|
+
Social media card component for sharing.
|
|
1242
|
+
|
|
1243
|
+
```tsx
|
|
1244
|
+
import { SocialCard } from '@pixelated-tech/components';
|
|
1245
|
+
|
|
1246
|
+
<SocialCard
|
|
1247
|
+
title="Check out this article"
|
|
1248
|
+
description="An interesting article about React components"
|
|
1249
|
+
image="/article-image.jpg"
|
|
1250
|
+
url="https://example.com/article"
|
|
1251
|
+
/>
|
|
1252
|
+
```
|
|
1253
|
+
|
|
1254
|
+
#### Props
|
|
1255
|
+
| Prop | Type | Default | Description |
|
|
1256
|
+
|------|------|---------|-------------|
|
|
1257
|
+
| `title` | `string` | - | Card title |
|
|
1258
|
+
| `description` | `string` | - | Card description |
|
|
1259
|
+
| `image` | `string` | - | Card image URL |
|
|
1260
|
+
| `url` | `string` | - | Link URL |
|
|
1261
|
+
|
|
1262
|
+
### Timeline
|
|
1263
|
+
|
|
1264
|
+
Timeline component for displaying chronological events.
|
|
1265
|
+
|
|
1266
|
+
```tsx
|
|
1267
|
+
import { Timeline } from '@pixelated-tech/components';
|
|
1268
|
+
|
|
1269
|
+
<Timeline
|
|
1270
|
+
events={[
|
|
1271
|
+
{ date: '2020-01-01', title: 'Started Company', description: 'Founded XYZ Corp' },
|
|
1272
|
+
{ date: '2021-06-15', title: 'First Product', description: 'Launched flagship product' }
|
|
1273
|
+
]}
|
|
1274
|
+
/>
|
|
1275
|
+
```
|
|
1276
|
+
|
|
1277
|
+
#### Props
|
|
1278
|
+
| Prop | Type | Default | Description |
|
|
1279
|
+
|------|------|---------|-------------|
|
|
1280
|
+
| `events` | `TimelineEvent[]` | - | Array of timeline events |
|
|
1281
|
+
| `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Timeline orientation |
|
|
1282
|
+
|
|
1283
|
+
---
|
|
1284
|
+
|
|
1285
|
+
## Entertainment
|
|
1286
|
+
|
|
1287
|
+
### NerdJoke
|
|
1288
|
+
|
|
1289
|
+
Random nerd joke generator component.
|
|
1290
|
+
|
|
1291
|
+
```tsx
|
|
1292
|
+
import { NerdJoke } from '@pixelated-tech/components';
|
|
1293
|
+
|
|
1294
|
+
<NerdJoke
|
|
1295
|
+
category="programming"
|
|
1296
|
+
refreshInterval={30000}
|
|
1297
|
+
/>
|
|
1298
|
+
```
|
|
1299
|
+
|
|
1300
|
+
#### Props
|
|
1301
|
+
| Prop | Type | Default | Description |
|
|
1302
|
+
|------|------|---------|-------------|
|
|
1303
|
+
| `category` | `string` | `'random'` | Joke category |
|
|
1304
|
+
| `refreshInterval` | `number` | - | Auto-refresh interval (ms) |
|
|
1305
|
+
|
|
1306
|
+
---
|
|
1307
|
+
|
|
1308
|
+
## Configuration Examples
|
|
1309
|
+
|
|
1310
|
+
### PixelatedClientConfigProvider Setup
|
|
1311
|
+
|
|
1312
|
+
For components that use external services, wrap your app with the configuration provider:
|
|
1313
|
+
|
|
1314
|
+
```tsx
|
|
1315
|
+
// app/layout.tsx (Next.js 13+ App Router)
|
|
1316
|
+
import { PixelatedClientConfigProvider } from '@pixelated-tech/components';
|
|
1317
|
+
|
|
1318
|
+
export default function RootLayout({
|
|
1319
|
+
children,
|
|
1320
|
+
}: {
|
|
1321
|
+
children: React.ReactNode;
|
|
1322
|
+
}) {
|
|
1323
|
+
return (
|
|
1324
|
+
<html lang="en">
|
|
1325
|
+
<body>
|
|
1326
|
+
<PixelatedClientConfigProvider config={{
|
|
1327
|
+
cloudinary: {
|
|
1328
|
+
product_env: 'production',
|
|
1329
|
+
baseUrl: 'https://res.cloudinary.com/your-account',
|
|
1330
|
+
transforms: 'f_auto,q_auto,w_auto'
|
|
1331
|
+
},
|
|
1332
|
+
wordpress: {
|
|
1333
|
+
site: 'your-blog.wordpress.com'
|
|
1334
|
+
},
|
|
1335
|
+
// Add other service configurations as needed
|
|
1336
|
+
}}>
|
|
1337
|
+
{children}
|
|
1338
|
+
</PixelatedClientConfigProvider>
|
|
1339
|
+
</body>
|
|
1340
|
+
</html>
|
|
1341
|
+
);
|
|
1342
|
+
}
|
|
1343
|
+
```
|
|
1344
|
+
|
|
1345
|
+
### Cloudinary Configuration
|
|
1346
|
+
|
|
1347
|
+
```tsx
|
|
1348
|
+
const cloudinaryConfig = {
|
|
1349
|
+
product_env: 'production', // Environment identifier
|
|
1350
|
+
baseUrl: 'https://res.cloudinary.com/your-account', // Your Cloudinary URL
|
|
1351
|
+
transforms: 'f_auto,q_auto,w_auto' // Default transformations
|
|
1352
|
+
};
|
|
1353
|
+
```
|
|
1354
|
+
|
|
1355
|
+
### WordPress Configuration
|
|
1356
|
+
|
|
1357
|
+
```tsx
|
|
1358
|
+
const wordpressConfig = {
|
|
1359
|
+
site: 'your-blog.wordpress.com', // WordPress site URL
|
|
1360
|
+
apiVersion: '1.1' // API version (optional)
|
|
1361
|
+
};
|
|
1362
|
+
```
|
|
1363
|
+
|
|
1364
|
+
### Contentful Configuration
|
|
1365
|
+
|
|
1366
|
+
```tsx
|
|
1367
|
+
const contentfulConfig = {
|
|
1368
|
+
spaceId: 'your-space-id', // Contentful space ID
|
|
1369
|
+
accessToken: 'your-access-token', // Contentful access token
|
|
1370
|
+
environment: 'master' // Contentful environment
|
|
1371
|
+
};
|
|
1372
|
+
```
|
|
1373
|
+
|
|
1374
|
+
### Other Service Configurations
|
|
1375
|
+
|
|
1376
|
+
```tsx
|
|
1377
|
+
const config = {
|
|
1378
|
+
calendly: {
|
|
1379
|
+
username: 'your-calendly-username'
|
|
1380
|
+
},
|
|
1381
|
+
hubspot: {
|
|
1382
|
+
portalId: 'your-portal-id',
|
|
1383
|
+
formId: 'your-form-id'
|
|
1384
|
+
},
|
|
1385
|
+
instagram: {
|
|
1386
|
+
accessToken: 'your-access-token'
|
|
1387
|
+
}
|
|
1388
|
+
};
|
|
1389
|
+
```
|
|
1390
|
+
|
|
1391
|
+
---
|
|
1392
|
+
|
|
1393
|
+
## TypeScript Support
|
|
1394
|
+
|
|
1395
|
+
All components include full TypeScript definitions:
|
|
1396
|
+
|
|
1397
|
+
```tsx
|
|
1398
|
+
import type {
|
|
1399
|
+
CalloutType,
|
|
1400
|
+
BlogPostType,
|
|
1401
|
+
CarouselSlide,
|
|
1402
|
+
PixelatedConfig
|
|
1403
|
+
} from '@pixelated-tech/components';
|
|
1404
|
+
```
|
|
1405
|
+
|
|
1406
|
+
## CDN Usage (Not Recommended)
|
|
1407
|
+
|
|
1408
|
+
```html
|
|
1409
|
+
<script src="https://unpkg.com/@pixelated-tech/components@latest/dist/index.js"></script>
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
**Note**: CDN usage is not recommended for production as it doesn't support tree-shaking and may include unnecessary code.
|
|
1413
|
+
|
|
1414
|
+
## Contributing
|
|
1415
|
+
|
|
1416
|
+
When adding new components, please:
|
|
1417
|
+
1. Add TypeScript interfaces to `src/index.d.ts`
|
|
1418
|
+
2. Create Storybook stories in `src/stories/`
|
|
1419
|
+
3. Add comprehensive documentation here
|
|
1420
|
+
4. Include usage examples and prop tables
|
|
1421
|
+
|
|
1422
|
+
---
|
|
1423
|
+
|
|
1424
|
+
*For more examples and advanced usage, check the [Storybook interactive demos](https://your-storybook-url).*
|
|
1425
|
+
|
|
1426
|
+
|
|
1427
|
+
---
|
|
1428
|
+
|
|
1429
|
+
*This documentation is automatically updated when components are modified. Last updated: $(date)*
|