Files
boc/backups/2026-07-12-1023/landvex-prod/assets/PhotoDetail-CGO3w_xn.js
T
Bernt 58ca4e68db feat(boc): Complete Business Operations Center v1.0
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics)
- Rust analytics service with parallel report generation
- C runtime with POSIX shared memory IPC
- PostgreSQL schema with 30+ tables, full migrations
- Redis cache, sessions, pub/sub
- Kafka event streaming with Zookeeper
- WebSocket hub for real-time updates
- Automation engine with cron jobs, workflows, event triggers
- JWT authentication, multi-tenant from start
- Docker Compose with all services
- Nginx reverse proxy with rate limiting
- Integration tests passing
- Feature gap analysis against Fortnox/Odoo/Visma

Refs: BOC-001
2026-07-12 12:41:35 +00:00

12 lines
15 KiB
JavaScript

import{o as h,$ as w,u as j,a as b,r as o,j as e,v as t,q as N,M as D,x as n,y as l,B as M,w as c}from"./index-oAPVDf-r.js";import{B as p}from"./badge-Qwi4CUXx.js";import{k as S,i as P,e as C,m as I,v as B,p as L,n as A,a as R,b as V,l as T,c as E,d as z,f as K,r as H,g as q,h as F,j as G,o as J,w as O,q as W,s as $,t as U,u as Q,x as Y,y as X,z as Z,A as ee,W as ae}from"./taj-mahal-CpmP2aQk.js";import{A as ie}from"./arrow-left-m6EiMbb-.js";import{H as m}from"./heart-BjLemQnU.js";import{E as re}from"./eye-G89nJUb2.js";import{D as g}from"./download-B0vydl5E.js";import{E as te}from"./external-link-C86N9iPS.js";/**
* @license lucide-react v0.462.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const se=h("Printer",[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]]);/**
* @license lucide-react v0.462.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const oe=h("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),ne=[{id:"1",photo_url:S,title:"Marknad i Nairobi",description:"Färgglad lokal marknad med frukt och grönsaker",tags:["marknad","afrika","handel"],category:"Marknader",location:"Nairobi",country:"Kenya",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:234,views_count:1892,is_featured:!0},{id:"2",photo_url:P,title:"By vid Ganges",description:"Traditionell by vid den heliga floden",tags:["by","flod","tradition"],category:"Landsbygd",location:"Varanasi",country:"Indien",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:156,views_count:1245,is_featured:!0},{id:"3",photo_url:C,title:"Simien Mountains",description:"Dramatiska berglandskap i norra Etiopien",tags:["berg","natur","landskap"],category:"Natur",location:"Simien",country:"Etiopien",price_small:35,price_medium:89,price_large:169,price_original:349,downloads_count:312,views_count:2456,is_featured:!0},{id:"4",photo_url:I,title:"Medina i Marrakech",description:"Historiska gränder och traditionellt hantverk",tags:["stad","kultur","arkitektur"],category:"Marknader",location:"Marrakech",country:"Marocko",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:189,views_count:1567,is_featured:!1},{id:"5",photo_url:B,title:"Risterrasser Sapa",description:"Gröna risterrasser i norra Vietnam",tags:["jordbruk","landskap","grön"],category:"Landsbygd",location:"Sapa",country:"Vietnam",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:445,views_count:3234,is_featured:!0},{id:"6",photo_url:L,title:"Andinska höglandet",description:"Traditionell by i Anderna",tags:["by","berg","tradition"],category:"Landsbygd",location:"Cusco",country:"Peru",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:178,views_count:1123,is_featured:!1},{id:"7",photo_url:A,title:"Tropisk regnskog",description:"Lummig grönska och biologisk mångfald",tags:["skog","natur","grön"],category:"Natur",location:"Amazonas",country:"Brasilien",price_small:35,price_medium:89,price_large:169,price_original:349,downloads_count:567,views_count:4521,is_featured:!0},{id:"8",photo_url:R,title:"Soluppgång Himalaya",description:"Majestätiska bergstoppar i gryningen",tags:["berg","soluppgång","landskap"],category:"Natur",location:"Nepal",country:"Nepal",price_small:39,price_medium:99,price_large:189,price_original:399,downloads_count:723,views_count:5678,is_featured:!0},{id:"9",photo_url:V,title:"Flod genom dalen",description:"Kristallklart vatten genom grönt landskap",tags:["flod","dal","natur"],category:"Natur",location:"Himalaya",country:"Nepal",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:234,views_count:1876,is_featured:!1},{id:"10",photo_url:T,title:"Bergssjö i dimma",description:"Stilla vatten speglande snötäckta toppar",tags:["sjö","berg","dimma"],category:"Natur",location:"Patagonia",country:"Argentina",price_small:35,price_medium:89,price_large:169,price_original:349,downloads_count:456,views_count:3421,is_featured:!0},{id:"11",photo_url:E,title:"Savannen vid solnedgång",description:"Ikoniskt afrikanskt landskap",tags:["savann","solnedgång","afrika"],category:"Natur",location:"Serengeti",country:"Tanzania",price_small:39,price_medium:99,price_large:189,price_original:399,downloads_count:678,views_count:4892,is_featured:!0},{id:"12",photo_url:z,title:"Flodbåt i deltat",description:"Traditionell transport på floderna",tags:["båt","flod","transport"],category:"Infrastruktur",location:"Dhaka",country:"Bangladesh",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:145,views_count:987,is_featured:!1},{id:"13",photo_url:K,title:"Byskola i Afrika",description:"Barn i klassrum med böcker och lärare",tags:["skola","utbildning","barn"],category:"Utbildning",location:"Kampala",country:"Uganda",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:312,views_count:2134,is_featured:!0},{id:"14",photo_url:H,title:"Landsbygdssjukhus",description:"Sjukvårdspersonal ger medicinsk vård",tags:["sjukhus","hälsa","sjukvård"],category:"Sjukvård",location:"Nairobi",country:"Kenya",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:245,views_count:1876,is_featured:!0},{id:"15",photo_url:q,title:"Samhällssamling",description:"Lokal gemenskap i traditionell samling",tags:["samhälle","gemenskap","människor"],category:"Samhälle",location:"Accra",country:"Ghana",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:178,views_count:1345,is_featured:!1},{id:"16",photo_url:F,title:"Barn i byn",description:"Glada barn leker på landsbygden",tags:["barn","by","glädje"],category:"Samhälle",location:"Dar es Salaam",country:"Tanzania",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:289,views_count:2012,is_featured:!0},{id:"17",photo_url:G,title:"Klassrum med elever",description:"Studenter i undervisning",tags:["skola","klassrum","studenter"],category:"Utbildning",location:"Mumbai",country:"Indien",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:356,views_count:2567,is_featured:!0},{id:"18",photo_url:J,title:"Medicinsk vård",description:"Läkare och sjuksköterskor i arbete",tags:["medicin","vård","hälsa"],category:"Sjukvård",location:"Lagos",country:"Nigeria",price_small:29,price_medium:79,price_large:149,price_original:299,downloads_count:198,views_count:1543,is_featured:!1},{id:"19",photo_url:O,title:"Vattenbrunn",description:"Rent vatten till lokalt samhälle",tags:["vatten","brunn","infrastruktur"],category:"Infrastruktur",location:"Addis Ababa",country:"Etiopien",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:423,views_count:3124,is_featured:!0},{id:"20",photo_url:W,title:"Jordbrukssamhälle",description:"Bönder arbetar på fälten tillsammans",tags:["jordbruk","bönder","samhälle"],category:"Landsbygd",location:"Phnom Penh",country:"Kambodja",price_small:25,price_medium:69,price_large:129,price_original:249,downloads_count:267,views_count:1897,is_featured:!1},{id:"21",photo_url:$,title:"Kinesiska muren",description:"Världens längsta byggnadsverk sträcker sig över bergen",tags:["underverk","kina","historia","arkitektur"],category:"Världens underverk",location:"Beijing",country:"Kina",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:1245,views_count:8923,is_featured:!0},{id:"22",photo_url:U,title:"Petra",description:"Den rosa stadens fantastiska klippfasader",tags:["underverk","jordan","arkeologi","klippa"],category:"Världens underverk",location:"Petra",country:"Jordanien",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:987,views_count:7654,is_featured:!0},{id:"23",photo_url:Q,title:"Kristusstatyn",description:"Ikonisk staty över Rio de Janeiro",tags:["underverk","brasilien","staty","rio"],category:"Världens underverk",location:"Rio de Janeiro",country:"Brasilien",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:1567,views_count:12345,is_featured:!0},{id:"24",photo_url:Y,title:"Machu Picchu",description:"Inkafolkets förlorade stad i Anderna",tags:["underverk","peru","inka","berg"],category:"Världens underverk",location:"Cusco",country:"Peru",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:2134,views_count:15678,is_featured:!0},{id:"25",photo_url:X,title:"Chichén Itzá",description:"Mayafolkets pyramidtempel",tags:["underverk","mexico","maya","pyramid"],category:"Världens underverk",location:"Yucatán",country:"Mexico",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:1432,views_count:9876,is_featured:!0},{id:"26",photo_url:Z,title:"Colosseum",description:"Romarrikets mäktiga amfiteater",tags:["underverk","italien","rom","antiken"],category:"Världens underverk",location:"Rom",country:"Italien",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:1876,views_count:14532,is_featured:!0},{id:"27",photo_url:ee,title:"Taj Mahal",description:"Indiens vackraste mausoleum i vit marmor",tags:["underverk","indien","mausoleum","marmor"],category:"Världens underverk",location:"Agra",country:"Indien",price_small:49,price_medium:129,price_large:249,price_original:499,downloads_count:2345,views_count:18765,is_featured:!0}],_=29,he=()=>{const{id:s}=w(),d=j(),{t:a}=b(),[u,k]=o.useState(!1),x=[{id:"printique",name:"Printique",description:a("photoDetail.professionalQuality"),url:"https://www.printique.com"},{id:"mpix",name:"Mpix",description:a("photoDetail.balancedTopService"),url:"https://www.mpix.com"}],i=o.useMemo(()=>ne.find(r=>r.id===s),[s]);if(o.useEffect(()=>{window.scrollTo(0,0)},[s]),!i)return e.jsx("div",{className:"min-h-screen bg-background flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-muted-foreground mb-4",children:a("photoDetail.photoNotFound")}),e.jsx(t,{onClick:()=>d("/photo-marketplace"),children:a("photoDetail.backToMarket")})]})});const y=()=>{c.success(a("photoDetail.purchaseInitiated",{title:i.title}),{description:`${a("photoDetail.fullResolution")} - ${_} kr`})},f=r=>{window.open(r.url,"_blank"),c.success(a("photoDetail.opening",{name:r.name}),{description:a("photoDetail.uploadForPrint")})},v=async()=>{if(navigator.share)try{await navigator.share({title:i.title,text:a("photoDetail.checkOutPhoto",{title:i.title}),url:window.location.href})}catch{}else navigator.clipboard.writeText(window.location.href),c.success(a("photoDetail.linkCopied"))};return e.jsxs("div",{className:"min-h-screen bg-background pb-32 safe-area-top safe-area-x",children:[e.jsx("header",{className:"sticky top-0 z-10 bg-background/80 backdrop-blur-md border-b border-border/50 px-4 py-3 safe-area-top",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(t,{variant:"ghost",size:"icon",onClick:()=>d("/photo-marketplace"),children:e.jsx(ie,{className:"w-5 h-5"})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(t,{variant:"ghost",size:"icon",onClick:()=>k(!u),children:e.jsx(m,{className:`w-5 h-5 ${u?"fill-red-500 text-red-500":""}`})}),e.jsx(t,{variant:"ghost",size:"icon",onClick:v,children:e.jsx(oe,{className:"w-5 h-5"})})]})]})}),e.jsxs("main",{className:"px-4 py-4 space-y-4",children:[e.jsxs(N.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},className:"relative rounded-xl overflow-hidden",children:[e.jsx(ae,{src:i.photo_url,alt:i.title,className:"w-full aspect-[4/3]"}),i.is_featured&&e.jsx(p,{className:"absolute top-3 left-3",children:a("photoMarketplace.featured")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-bold",children:i.title}),e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground mt-1",children:[e.jsx(D,{className:"w-4 h-4"}),e.jsxs("span",{children:[i.location,", ",i.country]})]})]}),e.jsx("p",{className:"text-muted-foreground",children:i.description}),i.tags&&i.tags.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:i.tags.map(r=>e.jsx(p,{variant:"secondary",className:"text-xs",children:r},r))}),e.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(re,{className:"w-4 h-4"}),i.views_count.toLocaleString()," ",a("photoDetail.views")]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(g,{className:"w-4 h-4"}),i.downloads_count," ",a("photoDetail.downloads")]})]})]}),e.jsx(n,{className:"border-2 border-primary/30 bg-primary/5",children:e.jsxs(l,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-bold text-lg",children:a("photoDetail.fullResolution")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("photoDetail.fullResolutionDesc")})]}),e.jsx("div",{className:"text-right",children:e.jsxs("span",{className:"text-2xl font-bold text-primary",children:[_," kr"]})})]}),e.jsxs(t,{className:"w-full h-12 text-base gap-2",onClick:y,children:[e.jsx(g,{className:"w-5 h-5"}),a("photoDetail.buyDigitalPhoto")]})]})}),e.jsx(n,{className:"bg-primary/5 border-primary/20",children:e.jsx(l,{className:"p-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center flex-shrink-0",children:e.jsx(m,{className:"w-5 h-5 text-primary"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold text-sm",children:a("photoDetail.charityTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:a("photoDetail.charityDescription")})]})]})})}),e.jsx(n,{children:e.jsxs(l,{className:"p-4 space-y-3",children:[e.jsxs("h2",{className:"font-semibold flex items-center gap-2",children:[e.jsx(se,{className:"w-4 h-4"}),a("photoDetail.orderAsPrint")]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("photoDetail.orderAsPrintDesc")}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:x.map(r=>e.jsxs(t,{variant:"outline",className:"flex flex-col h-auto py-3",onClick:()=>f(r),children:[e.jsxs("span",{className:"font-medium flex items-center gap-1",children:[r.name,e.jsx(te,{className:"w-3 h-3"})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:r.description})]},r.id))})]})})]}),e.jsx(M,{})]})};export{he as default};