{"version":3,"file":"AddToKitList.DjoCIcbV.mjs","names":["useId","useState","_Fragment","Fragment"],"sources":["https:/framerusercontent.com/modules/LBacydJwTwrjEmrIh5IK/ePcyKZ0tCas4wnq7G7XJ/kit_list_ui.js","https:/framerusercontent.com/modules/BUTnQTTsUYu4R0qzQzMz/pQRHahqy3exvnGItlBum/AddToKitList.js"],"sourcesContent":["// What \"added\" looks like (Jamie, 3 Oct 2026, options B + C of the feedback round): the pure\n// bits AddToKitList.tsx and KitList.tsx share. The button label for each variant and state, and\n// where the drop panel under the header's Kit List button sits. No React, no DOM, so it runs\n// under plain `node --test`. Underscore filename because Framer renames hyphenated code files.\n/** Dropped panel lifetime (ms): paused while hovered or focused. */export const PANEL_MS=4e3;/**\n * Whether an item that is in the list shows \"Remove\" instead of \"✓ Added\": only for a visitor who\n * can hover (mouse) or is keyboard-focused, and never straight after they clicked Add (otherwise\n * the label would flip under the cursor before the \"added\" had registered). Touch never peeks.\n */export function showsRemove(o){return o.inList&&!o.suppressed&&(o.finePointer&&o.hover||o.focusVisible);}/** The visible words on the button. The icon variant has none (✓ or + is drawn by the component). */export function buttonText(o){if(o.variant===\"add\")return!o.inList?\"Add\":o.peekRemove?\"Remove\":\"✓ Added\";if(o.variant===\"button\")return o.inList?\"✓ In your Kit List\":o.label;return\"\";}/** Accessible name: says the state and what a press does, since \"✓\" alone is not a word. */export function buttonAria(o){return o.inList?`${o.name} is in your Kit List. Remove`:o.variant===\"add\"?`Add ${o.name}`:`${o.label}: ${o.name}`;}/** \"3 items in your Kit List\"; an emptied list says so instead of \"0 items\". */export function itemsLine(count){if(count<=0)return\"Your Kit List is empty\";return`${count} ${count===1?\"item\":\"items\"} in your Kit List`;}export const PANEL_WIDTH=320;export const PANEL_GAP=8;export const PANEL_MARGIN=12;/** Below this viewport width (CSS px) the panel is full width under the nav. */export const PANEL_PHONE_MAX=700;/**\n * Anchored: 8px under the header's Kit List button, right-aligned to it, kept 12px inside the\n * viewport. Full: when the button isn't there (not found, hidden: zero size) or the viewport is\n * under 700px, 12px side margins and its top at the nav's bottom. All values are CSS px (rects\n * come through cssRect in css_zoom.ts so the big-screen zoom is already divided out).\n */export function panelPlacement(button,navBottom,viewportWidth){const usable=button!==null&&button.width>0&&button.height>0;if(!usable||viewportWidth<PANEL_PHONE_MAX){return{mode:\"full\",top:Math.max(0,navBottom),left:PANEL_MARGIN,width:Math.max(0,viewportWidth-PANEL_MARGIN*2)};}const width=Math.min(PANEL_WIDTH,viewportWidth-PANEL_MARGIN*2);const left=Math.min(Math.max(button.right-width,PANEL_MARGIN),viewportWidth-width-PANEL_MARGIN);// A nav scrolled out of view (negative bottom) must not take the panel with it.\nreturn{mode:\"anchored\",top:Math.max(button.bottom+PANEL_GAP,PANEL_GAP),left,width};}\nexport const __FramerMetadata__ = {\"exports\":{\"PANEL_PHONE_MAX\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buttonText\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"KitVariant\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PANEL_GAP\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"showsRemove\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PANEL_MS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PANEL_WIDTH\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PANEL_MARGIN\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buttonAria\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PanelPlacement\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"panelPlacement\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"itemsLine\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./kit_list_ui.map","// \"Add to Kit List\" — goes on tiles, the item page and Rate Card rows (spec §4.1, §6).\n//\n// Framer: Assets > Code > New file, paste. Drop it on the Equipment CMS page and bind the\n// four props to the collection fields. It writes localStorage; the header's <KitList /> picks\n// the change up immediately through the shared subscription.\n//\n// Verbs are fixed (§4.1): \"Add to Kit List\", never Cart / Basket / Checkout.\n// Brand system v2 §6 Buttons: Add (tile) = small secondary, 30px, \"Add\". Button (item page) =\n// primary, 48px, full width.\n//\n// \"Added\" is impossible to miss (Jamie, 3 Oct 2026, options B + C):\n// B. What you clicked stays changed. Tile: lime \"✓ Added\" for as long as the item is in the list\n//    (\"Remove\" only while hovered or keyboard-focused with a fine pointer, never straight after\n//    the click; a tap on touch removes). No card frame or tag (Jamie, 3 Oct 2026). Item page:\n//    lime \"✓ In your Kit List\" (not a remove button) with a quiet \"Remove\" text link under it. Icon: lime circle with ✓. Compact\n//    (Rate Card rows): lime \"✓ Added\", no panel.\n// C. The confirmation drops from the header's Kit List button (KitList.tsx marks it\n//    data-fomo-kitlist-button) instead of the old bottom-left toast: thumbnail, \"Name added.\" or\n//    \"Name removed.\", the running count, \"View Kit List →\" and Undo. Graphite, 4s, paused while\n//    hovered or focused, Escape closes, polite live region. Placement maths in kit_list_ui.ts\n//    (tested): 8px under the button, right-aligned; full width under the nav when the button\n//    isn't found or the viewport is under 700px. While it is open it dispatches KIT_PANEL_EVENT so\n//    the header badge goes lime. One panel at a time: a newer one takes over. No slide under\n//    reduced motion.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{Fragment,useEffect,useId,useState}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType}from\"framer\";import{KIT_PANEL_EVENT,addLine,countItems,loadLines,removeLine,subscribe}from\"https://framerusercontent.com/modules/63duGyOXCgUlaPENpqTR/Pmj7uxHcBUlhc3RgvZUl/kit-list.js\";import{PANEL_MS,buttonAria,buttonText,itemsLine,panelPlacement,showsRemove}from\"https://framerusercontent.com/modules/LBacydJwTwrjEmrIh5IK/ePcyKZ0tCas4wnq7G7XJ/kit_list_ui.js\";import{cssPx,cssRect}from\"https://framerusercontent.com/modules/AyMn0EYvTEVJXRY4HaSl/oBkJ4EvMtsU9QBsQ2Ckq/css_zoom.js\";import{colour,focusRingLight,font,labelMono,motion,radius,showFocusRing}from\"https://framerusercontent.com/modules/yG9gp6meCLV2xzqACEat/lENFKffrvr2h5MKUW9vx/theme.js\";// One panel at a time: the instance that owns it, so a newer one can take over silently.\nlet activePanel=null;/** The header's Kit List button, the first one that is actually on screen (hidden copies measure 0). */function findKitListButton(){return Array.from(document.querySelectorAll(\"[data-fomo-kitlist-button]\")).find(b=>b.getBoundingClientRect().width>0)??null;}function measurePanel(){const button=findKitListButton();const nav=(button??document.documentElement).closest(\"nav, header\")??document.querySelector(\"nav, header\");return panelPlacement(button?cssRect(button):null,nav?cssRect(nav).bottom:64,cssPx(window.innerWidth,button??document.documentElement));}export default function AddToKitList({rentmanId=0,name=\"\",slug=\"\",dayRate=0,image,imageUrl=\"\",label=\"Add to Kit List\",compact=false,variant=\"button\",width}){const id=useId();const[inList,setInList]=useState(false);const[hover,setHover]=useState(false);const[focusVisible,setFocusVisible]=useState(false);// Set by an Add click until the pointer leaves or focus moves on, so the label doesn't flip to\n// \"Remove\" under the cursor the instant the item goes in.\nconst[suppressed,setSuppressed]=useState(false);const[panel,setPanel]=useState(null);const[place,setPlace]=useState(null);const[held,setHeld]=useState(false);const[count,setCount]=useState(0);// Reflect the list on mount and whenever it changes elsewhere (another card, the drawer,\n// another tab). Reading in an effect keeps the first server render stable.\nuseEffect(()=>{const sync=()=>{const lines=loadLines();setInList(lines.some(l=>l.rentmanId===rentmanId));setCount(countItems(lines));};sync();return subscribe(sync);},[rentmanId]);// Panel life: measure where it goes, claim the single slot, tell the header, close after 4s\n// unless held, on Escape, or when a newer panel takes over.\nuseEffect(()=>{if(!panel){setPlace(null);return;}setPlace(measurePanel());activePanel=id;window.dispatchEvent(new CustomEvent(KIT_PANEL_EVENT,{detail:{open:true,id}}));const onOther=e=>{const d=e.detail;if(d?.open&&d.id!==id)setPanel(null);};const onKey=e=>{if(e.key===\"Escape\")setPanel(null);};window.addEventListener(KIT_PANEL_EVENT,onOther);document.addEventListener(\"keydown\",onKey);return()=>{window.removeEventListener(KIT_PANEL_EVENT,onOther);document.removeEventListener(\"keydown\",onKey);// Only say \"closed\" if nobody took over, or the header badge would drop while the new one is up.\nif(activePanel===id){activePanel=null;window.dispatchEvent(new CustomEvent(KIT_PANEL_EVENT,{detail:{open:false,id}}));}};},[panel,id]);useEffect(()=>{if(!panel||held)return;const timer=setTimeout(()=>setPanel(null),PANEL_MS);return()=>clearTimeout(timer);},[panel,held]);// A CMS row that hasn't loaded yet, or a badly bound prop, must not write a junk line.\nconst usable=Number.isInteger(rentmanId)&&rentmanId>0&&name.trim()!==\"\";const item={rentmanId,name,slug,dayRate,imageUrl:image?.src||imageUrl};const remove=()=>{const qty=loadLines().find(l=>l.rentmanId===rentmanId)?.qty??1;removeLine(rentmanId);if(!compact)setPanel({kind:\"removed\",qty});};// Tiles and Rate Card rows are links to the item page; the button must not follow them.\nconst handleAdd=event=>{event.preventDefault();event.stopPropagation();if(!usable)return;// A toggle: once the item is on the list, the button takes it back off.\nif(inList){remove();return;}addLine(item);setSuppressed(true);if(!compact)setPanel({kind:\"added\",qty:1});};const undo=()=>{if(panel?.kind===\"added\")removeLine(rentmanId);else if(panel)addLine(item,panel.qty);setPanel(null);};const reduced=typeof window!==\"undefined\"&&window.matchMedia?.(motion.reduced).matches;const finePointer=typeof window!==\"undefined\"&&!!window.matchMedia?.(\"(hover: hover) and (pointer: fine)\").matches;const peekRemove=showsRemove({inList,hover:hover&&usable,focusVisible,finePointer,suppressed});const fade=reduced?\"none\":`background ${motion.t}ms ${motion.ease}, color ${motion.t}ms ${motion.ease}, border-color ${motion.t}ms ${motion.ease}`;const lit=hover&&usable;const lime={color:colour.houseDarkGreen,background:colour.houseLimeGreen};const style=variant===\"icon\"?{width:44,height:44,padding:0,display:\"grid\",placeItems:\"center\",...inList?lime:lit?{color:colour.recordBlack,background:colour.houseLimeGreen}:{color:colour.casetteWhite,background:colour.recordBlack},border:\"none\",borderRadius:radius,transition:fade}:variant===\"add\"?{height:30,padding:\"0 12px\",...labelMono,fontSize:11,letterSpacing:\"0.06em\",...inList?lime:lit?{color:colour.casetteWhite,background:colour.recordBlack}:{color:colour.recordBlack,background:\"transparent\"},border:`1px solid ${inList?colour.houseDarkGreen:lit?colour.recordBlack:colour.tornGray}`,borderRadius:radius,transition:fade}:{width:width??\"100%\",height:48,padding:\"0 16px\",...labelMono,...inList?lime:lit?{color:colour.recordBlack,background:colour.houseLimeGreen}:{color:colour.casetteWhite,background:colour.recordBlack},border:`1px solid ${inList?colour.houseDarkGreen:lit?colour.houseLimeGreen:colour.recordBlack}`,borderRadius:radius,transition:fade};const text=buttonText({variant,inList,peekRemove,label});const focusRingOn=e=>{setFocusVisible(e.currentTarget.matches(\":focus-visible\"));showFocusRing(e.currentTarget,focusRingLight);};const focusRingOff=e=>{setFocusVisible(false);setSuppressed(false);Object.assign(e.currentTarget.style,{outline:\"none\"});};// Item page, in the list: a lime statement, not a remove button; \"Remove\" is the quiet link under it.\nconst statusOnly=variant===\"button\"&&inList;const Wrap=statusOnly?\"div\":Fragment;return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs(Wrap,{...statusOnly?{style:{width:width??\"100%\",display:\"grid\",gap:8,justifyItems:\"start\"}}:{},children:[statusOnly?/*#__PURE__*/_jsx(\"div\",{role:\"status\",style:{...style,width:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",boxSizing:\"border-box\",whiteSpace:\"nowrap\"},children:text}):/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:handleAdd,disabled:!usable,// The icon has no visible words, so the verb (§4.1) lives in the accessible name.\n\"aria-label\":variant===\"button\"&&!inList?undefined:buttonAria({variant,inList,name,label}),onMouseEnter:()=>setHover(true),onMouseLeave:()=>{setHover(false);setSuppressed(false);},style:{...style,cursor:usable?\"pointer\":\"default\",opacity:usable?1:.4,whiteSpace:\"nowrap\"},onFocus:focusRingOn,onBlur:focusRingOff,children:variant===\"icon\"?/*#__PURE__*/_jsx(\"svg\",{width:\"14\",height:\"14\",viewBox:\"0 0 16 16\",\"aria-hidden\":\"true\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"1.4\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:inList?/*#__PURE__*/_jsx(\"path\",{d:\"M3 8.5l3.2 3L13 4.5\"}):/*#__PURE__*/_jsx(\"path\",{d:\"M8 3v10M3 8h10\"})}):text}),statusOnly&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:e=>{e.preventDefault();e.stopPropagation();remove();},\"aria-label\":`Remove ${name} from Kit List`,style:{padding:0,background:\"none\",border:\"none\",fontFamily:font.mono,fontSize:12,lineHeight:1.4,color:colour.mutedOnLight,textDecoration:\"underline\",textUnderlineOffset:3,cursor:\"pointer\",borderRadius:radius},onFocus:e=>showFocusRing(e.currentTarget,focusRingLight),onBlur:e=>Object.assign(e.currentTarget.style,{outline:\"none\"}),children:\"Remove\"})]}),panel&&place&&typeof document!==\"undefined\"&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(\"div\",{// Polite, not assertive: adding kit is not an interruption.\nrole:\"status\",\"aria-live\":\"polite\",className:\"fomo-kit-panel\",onMouseEnter:()=>setHeld(true),onMouseLeave:()=>setHeld(false),onFocus:()=>setHeld(true),onBlur:()=>setHeld(false),style:{position:\"fixed\",top:place.top,left:place.left,width:place.width,boxSizing:\"border-box\",zIndex:9e3,display:\"grid\",gridTemplateColumns:\"52px 1fr\",gap:\"12px\",padding:14,fontFamily:font.body,fontSize:14,lineHeight:1.4,color:colour.casetteWhite,background:colour.graphite,borderRadius:radius,animation:reduced?\"none\":`fomo-kit-panel-in ${motion.t}ms ${motion.ease}`},children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`@keyframes fomo-kit-panel-in { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } } @media ${motion.reduced} { .fomo-kit-panel { animation: none !important; } }`}}),item.imageUrl?/*#__PURE__*/_jsx(\"img\",{src:item.imageUrl,alt:\"\",width:52,height:52,style:{width:52,height:52,objectFit:\"contain\",borderRadius:radius,background:colour.pureWhite}}):/*#__PURE__*/_jsx(\"div\",{style:{width:52,height:52,borderRadius:radius,background:colour.paper}}),/*#__PURE__*/_jsxs(\"div\",{style:{minWidth:0},children:[/*#__PURE__*/_jsxs(\"p\",{style:{margin:0,overflowWrap:\"anywhere\"},children:[/*#__PURE__*/_jsx(\"strong\",{style:{fontWeight:600},children:name}),\" \",panel.kind,\".\"]}),/*#__PURE__*/_jsx(\"p\",{style:{margin:0,color:colour.mutedOnDark,fontVariantNumeric:\"tabular-nums\"},children:itemsLine(count)})]}),/*#__PURE__*/_jsxs(\"div\",{style:{gridColumn:\"1 / -1\",display:\"flex\",justifyContent:\"space-between\",alignItems:\"center\",gap:16,...labelMono,fontSize:11,letterSpacing:\"0.06em\",color:colour.houseLimeGreen},children:[/*#__PURE__*/_jsx(\"a\",{href:\"/kit-list\",style:{color:\"inherit\",textDecoration:\"none\"},onFocus:e=>showFocusRing(e.currentTarget),onBlur:e=>Object.assign(e.currentTarget.style,{outline:\"none\"}),children:\"View Kit List →\"}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:undo,style:{all:\"unset\",cursor:\"pointer\",color:\"inherit\",textTransform:\"inherit\",borderRadius:radius},onFocus:e=>showFocusRing(e.currentTarget),onBlur:e=>Object.assign(e.currentTarget.style,{outline:\"none\"}),children:\"Undo\"})]})]}),document.body)]});}addPropertyControls(AddToKitList,{rentmanId:{type:ControlType.Number,title:\"Rentman ID\",displayStepper:false},name:{type:ControlType.String,title:\"Name\"},slug:{type:ControlType.String,title:\"Slug\"},dayRate:{type:ControlType.Number,title:\"Day rate\",displayStepper:false},image:{type:ControlType.ResponsiveImage,title:\"Image\"},imageUrl:{type:ControlType.String,title:\"Image URL\"},label:{type:ControlType.String,title:\"Label\",defaultValue:\"Add to Kit List\"},variant:{type:ControlType.Enum,title:\"Style\",options:[\"button\",\"add\",\"icon\"],optionTitles:[\"Button (item page)\",\"Add (tile)\",\"Icon (+)\"],defaultValue:\"button\"},compact:{type:ControlType.Boolean,title:\"Compact\",description:\"No drop panel. Use on Rate Card rows\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AddToKitList\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}