@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.
@@ -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)*