@bailierich/booking-components 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +319 -0
  2. package/TENANT_DATA_INTEGRATION.md +402 -0
  3. package/TENANT_SETUP.md +316 -0
  4. package/components/BookingFlow/BookingFlow.tsx +790 -0
  5. package/components/BookingFlow/index.ts +5 -0
  6. package/components/BookingFlow/steps/AddonsSelection.tsx +118 -0
  7. package/components/BookingFlow/steps/Confirmation.tsx +185 -0
  8. package/components/BookingFlow/steps/ContactForm.tsx +292 -0
  9. package/components/BookingFlow/steps/CycleAwareDateSelection.tsx +277 -0
  10. package/components/BookingFlow/steps/DateSelection.tsx +473 -0
  11. package/components/BookingFlow/steps/ServiceSelection.tsx +315 -0
  12. package/components/BookingFlow/steps/TimeSelection.tsx +230 -0
  13. package/components/BookingFlow/steps/index.ts +10 -0
  14. package/components/BottomSheet/index.tsx +120 -0
  15. package/components/Forms/FormBlock.tsx +283 -0
  16. package/components/Forms/FormField.tsx +385 -0
  17. package/components/Forms/FormRenderer.tsx +216 -0
  18. package/components/Forms/FormValidation.ts +122 -0
  19. package/components/Forms/index.ts +4 -0
  20. package/components/HoldTimer/HoldTimer.tsx +266 -0
  21. package/components/HoldTimer/index.ts +2 -0
  22. package/components/SectionRenderer.tsx +558 -0
  23. package/components/Sections/About.tsx +145 -0
  24. package/components/Sections/BeforeAfter.tsx +81 -0
  25. package/components/Sections/BookingSection.tsx +76 -0
  26. package/components/Sections/Contact.tsx +103 -0
  27. package/components/Sections/FAQSection.tsx +239 -0
  28. package/components/Sections/FeatureContent.tsx +113 -0
  29. package/components/Sections/FeaturedLink.tsx +103 -0
  30. package/components/Sections/FixedInfoCard.tsx +189 -0
  31. package/components/Sections/Gallery.tsx +83 -0
  32. package/components/Sections/Header.tsx +78 -0
  33. package/components/Sections/Hero.tsx +178 -0
  34. package/components/Sections/ImageSection.tsx +147 -0
  35. package/components/Sections/InstagramFeed.tsx +38 -0
  36. package/components/Sections/LinkList.tsx +76 -0
  37. package/components/Sections/LocationMap.tsx +202 -0
  38. package/components/Sections/Logo.tsx +61 -0
  39. package/components/Sections/MinimalFooter.tsx +78 -0
  40. package/components/Sections/MinimalHeader.tsx +81 -0
  41. package/components/Sections/MinimalNavigation.tsx +63 -0
  42. package/components/Sections/Navbar.tsx +258 -0
  43. package/components/Sections/PricingTable.tsx +106 -0
  44. package/components/Sections/ScrollingTextDivider.tsx +138 -0
  45. package/components/Sections/ScrollingTextDivider.tsx.bak +138 -0
  46. package/components/Sections/ServicesPreview.tsx +129 -0
  47. package/components/Sections/SocialBar.tsx +177 -0
  48. package/components/Sections/Team.tsx +80 -0
  49. package/components/Sections/Testimonials.tsx +92 -0
  50. package/components/Sections/TextSection.tsx +116 -0
  51. package/components/Sections/VideoSection.tsx +178 -0
  52. package/components/Sections/index.ts +57 -0
  53. package/components/index.ts +21 -0
  54. package/dist/index-DAai7Glf.d.mts +474 -0
  55. package/dist/index-DAai7Glf.d.ts +474 -0
  56. package/dist/index.d.mts +1075 -0
  57. package/dist/index.d.ts +1075 -0
  58. package/dist/index.js +22 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/index.mjs +22 -0
  61. package/dist/index.mjs.map +1 -0
  62. package/dist/styles/index.d.mts +1 -0
  63. package/dist/styles/index.d.ts +1 -0
  64. package/dist/styles/index.js +2 -0
  65. package/dist/styles/index.js.map +1 -0
  66. package/dist/styles/index.mjs +2 -0
  67. package/dist/styles/index.mjs.map +1 -0
  68. package/docs/API.md +849 -0
  69. package/docs/CALLBACKS.md +760 -0
  70. package/docs/COMPLETE_SESSION_SUMMARY.md +404 -0
  71. package/docs/DATA_SHAPES.md +684 -0
  72. package/docs/MIGRATION.md +662 -0
  73. package/docs/PAYMENT_INTEGRATION.md +766 -0
  74. package/docs/SESSION_SUMMARY.md +185 -0
  75. package/docs/STYLING.md +735 -0
  76. package/index.ts +4 -0
  77. package/lib/storage.ts +239 -0
  78. package/package.json +59 -0
  79. package/styles/animations.ts +210 -0
  80. package/styles/index.ts +1 -0
  81. package/tsconfig.json +32 -0
  82. package/tsup.config.ts +13 -0
  83. package/types/index.ts +369 -0
@@ -0,0 +1 @@
1
+ export { N as animations, V as createEntranceAnimation, U as createStaggerAnimation, J as getAnimationDuration, L as getFadeVariants, K as getSlideVariants, M as getTransitionVariants, Q as shouldReduceMotion } from '../index-DAai7Glf.mjs';
@@ -0,0 +1 @@
1
+ export { N as animations, V as createEntranceAnimation, U as createStaggerAnimation, J as getAnimationDuration, L as getFadeVariants, K as getSlideVariants, M as getTransitionVariants, Q as shouldReduceMotion } from '../index-DAai7Glf.js';
@@ -0,0 +1,2 @@
1
+ 'use strict';function s(t,i=false){if(i)return .15;switch(t){case "fast":return .2;case "slow":return .5;default:return .3}}function r(t=50){return {enter:i=>({x:i==="forward"?t:-t,opacity:0}),center:{x:0,opacity:1},exit:i=>({x:i==="forward"?-t:t,opacity:0})}}function o(){return {enter:()=>({opacity:0,scale:.95}),center:{opacity:1,scale:1},exit:()=>({opacity:0,scale:.95})}}function p(t,i){return t==="fade"?o():r(i)}var a={easing:[.4,0,.2,1],spring:{type:"spring",damping:30,stiffness:300},staggerChildren:{staggerChildren:.05,delayChildren:.1},cardHover:{scale:1.02,transition:{duration:.2}},buttonHover:{scale:1.05,transition:{duration:.2}},fadeIn:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},slideUp:{initial:{y:"100%"},animate:{y:0},exit:{y:"100%"}},scaleIn:{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9}},slideInLeft:{initial:{opacity:0,x:-10},animate:{opacity:1,x:0}},slideInRight:{initial:{opacity:0,x:10},animate:{opacity:1,x:0}},backdrop:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}}};function u(){return typeof window>"u"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function y(t,i=.1,n=.05){return Array.from({length:t},(c,e)=>({initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.3,delay:i+e*n,ease:a.easing}}))}function l(t=0,i=.3){return {initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:i,delay:t,ease:a.easing}}}exports.animations=a;exports.createEntranceAnimation=l;exports.createStaggerAnimation=y;exports.getAnimationDuration=s;exports.getFadeVariants=o;exports.getSlideVariants=r;exports.getTransitionVariants=p;exports.shouldReduceMotion=u;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../styles/animations.ts"],"names":["getAnimationDuration","speed","reducedMotion","getSlideVariants","slideDistance","direction","getFadeVariants","getTransitionVariants","style","animations","shouldReduceMotion","createStaggerAnimation","itemCount","baseDelay","delayIncrement","_","index","createEntranceAnimation","delay","duration"],"mappings":"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","file":"index.js","sourcesContent":["import type { AnimationVariants, TransitionDirection } from '../types';\n\n/**\n * Animation duration calculator based on speed and reduced motion preference\n */\nexport function getAnimationDuration(\n speed: 'fast' | 'normal' | 'slow',\n reducedMotion: boolean = false\n): number {\n if (reducedMotion) return 0.15;\n\n switch (speed) {\n case 'fast':\n return 0.2;\n case 'slow':\n return 0.5;\n default:\n return 0.3;\n }\n}\n\n/**\n * Slide animation variants for step transitions\n */\nexport function getSlideVariants(slideDistance: number = 50): AnimationVariants {\n return {\n enter: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? slideDistance : -slideDistance,\n opacity: 0,\n }),\n center: {\n x: 0,\n opacity: 1,\n },\n exit: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? -slideDistance : slideDistance,\n opacity: 0,\n }),\n };\n}\n\n/**\n * Fade animation variants for step transitions\n */\nexport function getFadeVariants(): AnimationVariants {\n return {\n enter: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n center: {\n opacity: 1,\n scale: 1,\n },\n exit: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n };\n}\n\n/**\n * Get transition variants based on style preference\n */\nexport function getTransitionVariants(\n style: 'slide' | 'fade',\n slideDistance?: number\n): AnimationVariants {\n return style === 'fade' ? getFadeVariants() : getSlideVariants(slideDistance);\n}\n\n/**\n * Common animation configurations\n */\nexport const animations = {\n /**\n * Smooth easing curve for natural motion\n */\n easing: [0.4, 0, 0.2, 1] as const,\n\n /**\n * Spring configuration for elastic animations\n */\n spring: {\n type: 'spring' as const,\n damping: 30,\n stiffness: 300,\n },\n\n /**\n * Stagger children animation\n */\n staggerChildren: {\n staggerChildren: 0.05,\n delayChildren: 0.1,\n },\n\n /**\n * Card hover animation\n */\n cardHover: {\n scale: 1.02,\n transition: { duration: 0.2 },\n },\n\n /**\n * Button hover animation\n */\n buttonHover: {\n scale: 1.05,\n transition: { duration: 0.2 },\n },\n\n /**\n * Fade in animation\n */\n fadeIn: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n\n /**\n * Slide up animation (for bottom sheets)\n */\n slideUp: {\n initial: { y: '100%' },\n animate: { y: 0 },\n exit: { y: '100%' },\n },\n\n /**\n * Scale in animation\n */\n scaleIn: {\n initial: { opacity: 0, scale: 0.9 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.9 },\n },\n\n /**\n * Slide in from left\n */\n slideInLeft: {\n initial: { opacity: 0, x: -10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Slide in from right\n */\n slideInRight: {\n initial: { opacity: 0, x: 10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Backdrop animation\n */\n backdrop: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n};\n\n/**\n * Accessibility: Check for reduced motion preference\n */\nexport function shouldReduceMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Create stagger animation for list items\n */\nexport function createStaggerAnimation(\n itemCount: number,\n baseDelay: number = 0.1,\n delayIncrement: number = 0.05\n) {\n return Array.from({ length: itemCount }, (_, index) => ({\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration: 0.3,\n delay: baseDelay + index * delayIncrement,\n ease: animations.easing,\n },\n }));\n}\n\n/**\n * Utility to create entrance animation with delay\n */\nexport function createEntranceAnimation(\n delay: number = 0,\n duration: number = 0.3\n) {\n return {\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration,\n delay,\n ease: animations.easing,\n },\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function s(t,i=false){if(i)return .15;switch(t){case "fast":return .2;case "slow":return .5;default:return .3}}function r(t=50){return {enter:i=>({x:i==="forward"?t:-t,opacity:0}),center:{x:0,opacity:1},exit:i=>({x:i==="forward"?-t:t,opacity:0})}}function o(){return {enter:()=>({opacity:0,scale:.95}),center:{opacity:1,scale:1},exit:()=>({opacity:0,scale:.95})}}function p(t,i){return t==="fade"?o():r(i)}var a={easing:[.4,0,.2,1],spring:{type:"spring",damping:30,stiffness:300},staggerChildren:{staggerChildren:.05,delayChildren:.1},cardHover:{scale:1.02,transition:{duration:.2}},buttonHover:{scale:1.05,transition:{duration:.2}},fadeIn:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},slideUp:{initial:{y:"100%"},animate:{y:0},exit:{y:"100%"}},scaleIn:{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9}},slideInLeft:{initial:{opacity:0,x:-10},animate:{opacity:1,x:0}},slideInRight:{initial:{opacity:0,x:10},animate:{opacity:1,x:0}},backdrop:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}}};function u(){return typeof window>"u"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function y(t,i=.1,n=.05){return Array.from({length:t},(c,e)=>({initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.3,delay:i+e*n,ease:a.easing}}))}function l(t=0,i=.3){return {initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:i,delay:t,ease:a.easing}}}export{a as animations,l as createEntranceAnimation,y as createStaggerAnimation,s as getAnimationDuration,o as getFadeVariants,r as getSlideVariants,p as getTransitionVariants,u as shouldReduceMotion};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../styles/animations.ts"],"names":["getAnimationDuration","speed","reducedMotion","getSlideVariants","slideDistance","direction","getFadeVariants","getTransitionVariants","style","animations","shouldReduceMotion","createStaggerAnimation","itemCount","baseDelay","delayIncrement","_","index","createEntranceAnimation","delay","duration"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AnimationVariants, TransitionDirection } from '../types';\n\n/**\n * Animation duration calculator based on speed and reduced motion preference\n */\nexport function getAnimationDuration(\n speed: 'fast' | 'normal' | 'slow',\n reducedMotion: boolean = false\n): number {\n if (reducedMotion) return 0.15;\n\n switch (speed) {\n case 'fast':\n return 0.2;\n case 'slow':\n return 0.5;\n default:\n return 0.3;\n }\n}\n\n/**\n * Slide animation variants for step transitions\n */\nexport function getSlideVariants(slideDistance: number = 50): AnimationVariants {\n return {\n enter: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? slideDistance : -slideDistance,\n opacity: 0,\n }),\n center: {\n x: 0,\n opacity: 1,\n },\n exit: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? -slideDistance : slideDistance,\n opacity: 0,\n }),\n };\n}\n\n/**\n * Fade animation variants for step transitions\n */\nexport function getFadeVariants(): AnimationVariants {\n return {\n enter: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n center: {\n opacity: 1,\n scale: 1,\n },\n exit: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n };\n}\n\n/**\n * Get transition variants based on style preference\n */\nexport function getTransitionVariants(\n style: 'slide' | 'fade',\n slideDistance?: number\n): AnimationVariants {\n return style === 'fade' ? getFadeVariants() : getSlideVariants(slideDistance);\n}\n\n/**\n * Common animation configurations\n */\nexport const animations = {\n /**\n * Smooth easing curve for natural motion\n */\n easing: [0.4, 0, 0.2, 1] as const,\n\n /**\n * Spring configuration for elastic animations\n */\n spring: {\n type: 'spring' as const,\n damping: 30,\n stiffness: 300,\n },\n\n /**\n * Stagger children animation\n */\n staggerChildren: {\n staggerChildren: 0.05,\n delayChildren: 0.1,\n },\n\n /**\n * Card hover animation\n */\n cardHover: {\n scale: 1.02,\n transition: { duration: 0.2 },\n },\n\n /**\n * Button hover animation\n */\n buttonHover: {\n scale: 1.05,\n transition: { duration: 0.2 },\n },\n\n /**\n * Fade in animation\n */\n fadeIn: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n\n /**\n * Slide up animation (for bottom sheets)\n */\n slideUp: {\n initial: { y: '100%' },\n animate: { y: 0 },\n exit: { y: '100%' },\n },\n\n /**\n * Scale in animation\n */\n scaleIn: {\n initial: { opacity: 0, scale: 0.9 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.9 },\n },\n\n /**\n * Slide in from left\n */\n slideInLeft: {\n initial: { opacity: 0, x: -10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Slide in from right\n */\n slideInRight: {\n initial: { opacity: 0, x: 10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Backdrop animation\n */\n backdrop: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n};\n\n/**\n * Accessibility: Check for reduced motion preference\n */\nexport function shouldReduceMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Create stagger animation for list items\n */\nexport function createStaggerAnimation(\n itemCount: number,\n baseDelay: number = 0.1,\n delayIncrement: number = 0.05\n) {\n return Array.from({ length: itemCount }, (_, index) => ({\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration: 0.3,\n delay: baseDelay + index * delayIncrement,\n ease: animations.easing,\n },\n }));\n}\n\n/**\n * Utility to create entrance animation with delay\n */\nexport function createEntranceAnimation(\n delay: number = 0,\n duration: number = 0.3\n) {\n return {\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration,\n delay,\n ease: animations.easing,\n },\n };\n}\n"]}