codicent-app-sdk 0.6.0 → 0.6.2
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/dist/cjs/components/LanguageSelector.d.ts.map +1 -1
- package/dist/cjs/components/LanguageSelector.js +1 -1
- package/dist/cjs/components/ListView.d.ts.map +1 -1
- package/dist/cjs/components/ListView.js +1 -1
- package/dist/cjs/hooks/useLocalization.d.ts.map +1 -1
- package/dist/cjs/hooks/useLocalization.js +1 -1
- package/dist/cjs/hooks/useUserRoles.d.ts.map +1 -1
- package/dist/cjs/hooks/useUserRoles.js +1 -1
- package/dist/cjs/pages/Home.d.ts +2 -0
- package/dist/cjs/pages/Home.d.ts.map +1 -1
- package/dist/cjs/pages/Home.js +1 -1
- package/dist/cjs/pages/ListPage.d.ts +7 -1
- package/dist/cjs/pages/ListPage.d.ts.map +1 -1
- package/dist/cjs/pages/ListPage.js +1 -1
- package/dist/cjs/pages/Menu.d.ts +2 -0
- package/dist/cjs/pages/Menu.d.ts.map +1 -1
- package/dist/cjs/pages/Menu.js +1 -1
- package/dist/cjs/types/index.d.ts +18 -2
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/esm/components/LanguageSelector.d.ts.map +1 -1
- package/dist/esm/components/LanguageSelector.js +1 -1
- package/dist/esm/components/ListView.d.ts.map +1 -1
- package/dist/esm/components/ListView.js +1 -1
- package/dist/esm/hooks/useLocalization.d.ts.map +1 -1
- package/dist/esm/hooks/useLocalization.js +1 -1
- package/dist/esm/hooks/useUserRoles.d.ts.map +1 -1
- package/dist/esm/hooks/useUserRoles.js +1 -1
- package/dist/esm/pages/Home.d.ts +2 -0
- package/dist/esm/pages/Home.d.ts.map +1 -1
- package/dist/esm/pages/Home.js +1 -1
- package/dist/esm/pages/ListPage.d.ts +7 -1
- package/dist/esm/pages/ListPage.d.ts.map +1 -1
- package/dist/esm/pages/ListPage.js +1 -1
- package/dist/esm/pages/Menu.d.ts +2 -0
- package/dist/esm/pages/Menu.d.ts.map +1 -1
- package/dist/esm/pages/Menu.js +1 -1
- package/dist/esm/types/index.d.ts +18 -2
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/index.d.ts +29 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageSelector.d.ts","sourceRoot":"","sources":["../../../src/components/LanguageSelector.tsx"],"names":[],"mappings":"AAuCA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"LanguageSelector.d.ts","sourceRoot":"","sources":["../../../src/components/LanguageSelector.tsx"],"names":[],"mappings":"AAuCA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+D5D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),a=require("@fluentui/react-components"),t=require("../hooks/useLocalization.js"),n=require("react");const o=a.makeStyles({container:{marginTop:"16px",marginBottom:"16px"},label:{fontSize:"14px",fontWeight:"600",marginBottom:"8px"}}),r=[{key:"en",name:"English"},{key:"sv",name:"Svenska"},{key:"de",name:"Deutsch"},{key:"dk",name:"Dansk"},{key:"fr",name:"Français"},{key:"no",name:"Norsk"},{key:"zh",name:"中文"},{key:"pl",name:"Polski"}],s=e=>{if("undefined"!=typeof navigator&&navigator.language){const a=navigator.language.toLowerCase().split("-")[0];if(e.some((e=>e.key===a)))return a}return"en"},u=({languages:u=r,defaultLanguage:l="en"})=>{const i=o(),{t:g,currentLanguage:c,setCurrentLanguage:m}=t.default(),[d,k]=n.useState((()=>localStorage.getItem("user_language")||"auto"));n.useEffect((()=>{const e=localStorage.getItem("user_language");k(e&&"auto"!==e?e:"auto")}),[c]);const p=s(u),f=u.find((e=>e.key===p))?.name||"English";return e.jsxs("div",{className:i.container,children:[e.jsx("div",{className:i.label,children:g("Language")}),e.jsxs(a.Dropdown,{value:"auto"===d?`${g("Auto")} (${f})`:u.find((e=>e.key===d))?.name||g("Select language"),selectedOptions:[d],onOptionSelect:(e,a)=>{const t=a.value;if(k(t),"auto"===t){const e=s(u);localStorage.setItem("user_language","auto"),m(e)}else localStorage.setItem("user_language",t),m(t)},children:[e.jsxs(a.Option,{value:"auto",text:`${g("Auto")} (${f})`,children:[g("Auto")," (",f,")"]}),u.map((t=>e.jsx(a.Option,{value:t.key,text:t.name,children:t.name},t.key)))]})]})};exports.LanguageSelector=u,exports.default=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),a=require("@fluentui/react-components"),t=require("../hooks/useLocalization.js"),n=require("react");const o=a.makeStyles({container:{marginTop:"16px",marginBottom:"16px"},label:{fontSize:"14px",fontWeight:"600",marginBottom:"8px"}}),r=[{key:"en",name:"English"},{key:"sv",name:"Svenska"},{key:"de",name:"Deutsch"},{key:"dk",name:"Dansk"},{key:"fr",name:"Français"},{key:"no",name:"Norsk"},{key:"zh",name:"中文"},{key:"pl",name:"Polski"}],s=e=>{if("undefined"!=typeof navigator&&navigator.language){const a=navigator.language.toLowerCase().split("-")[0];if(e.some((e=>e.key===a)))return a}return"en"},u=({languages:u=r,defaultLanguage:l="en"})=>{const i=o(),{t:g,currentLanguage:c,setCurrentLanguage:m}=t.default(),[d,k]=n.useState((()=>localStorage.getItem("user_language")||"auto"));n.useEffect((()=>{const e=localStorage.getItem("user_language");k(e&&"auto"!==e?e:"auto")}),[c]);const p=s(u),f=u.find((e=>e.key===p))?.name||"English";return e.jsxs("div",{className:i.container,children:[e.jsx("div",{className:i.label,children:g("Language")}),e.jsxs(a.Dropdown,{value:"auto"===d?`${g("Auto")} (${f})`:u.find((e=>e.key===d))?.name||g("Select language"),selectedOptions:[d],onOptionSelect:(e,a)=>{const t=a.optionValue??a.value;if(t)if(k(t),"auto"===t){const e=s(u);localStorage.setItem("user_language","auto"),m(e)}else localStorage.setItem("user_language",t),m(t)},children:[e.jsxs(a.Option,{value:"auto",text:`${g("Auto")} (${f})`,children:[g("Auto")," (",f,")"]}),u.map((t=>e.jsx(a.Option,{value:t.key,text:t.name,children:t.name},t.key)))]})]})};exports.LanguageSelector=u,exports.default=u;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/components/ListView.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAmB5D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,kHAAkH;IAClH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqLD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1E,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,2HAA2H;IAC3H,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,wFAAwF;IACxF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kFAAkF;IAClF,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,2HAA2H;IAC3H,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oIAAoI;IACpI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AA2GD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/components/ListView.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAmB5D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,kHAAkH;IAClH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqLD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1E,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,2HAA2H;IAC3H,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,wFAAwF;IACxF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kFAAkF;IAClF,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,2HAA2H;IAC3H,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oIAAoI;IACpI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AA2GD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmiB5C,CAAC;;AAGF,wBAAoC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("@fluentui/react-components"),i=require("@fluentui/react-icons"),r=require("../services/codicent.js"),o=require("../hooks/useLocalization.js");const a=n.makeStyles({container:{width:"100%",overflowX:"auto",userSelect:"text"},table:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",fontSize:"14px",tableLayout:"fixed",userSelect:"text"},th:{textAlign:"left",padding:"12px 8px",borderBottom:"2px solid #e0e0e0",fontWeight:"600",backgroundColor:"#f5f5f5",position:"sticky",top:0,zIndex:1,cursor:"pointer",userSelect:"none","&:hover":{backgroundColor:"#e8e8e8"}},td:{padding:"12px 8px",borderBottom:"1px solid #e0e0e0",verticalAlign:"top",wordWrap:"break-word",overflow:"hidden",userSelect:"text"},tdTruncated:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap","@media (hover: none)":{cursor:"pointer"}},tr:{"&:hover":{backgroundColor:"#f9f9f9"}},emptyState:{padding:"20px",textAlign:"center",color:"#666"},sortIndicator:{marginLeft:"4px",fontSize:"10px"},hideOnMobile:{"@media (max-width: 768px)":{display:"none"}},dialogContent:{wordWrap:"break-word",whiteSpace:"pre-wrap",maxHeight:"60vh",overflowY:"auto"},thumbnail:{maxWidth:"50px",maxHeight:"50px",objectFit:"cover"},tooltip:{maxWidth:"600px",whiteSpace:"normal",wordWrap:"break-word"},editButton:{minWidth:"auto",padding:"4px 8px"},actionsColumn:{width:"100px",textAlign:"center"},filterInput:{width:"100%",padding:"4px 8px",fontSize:"14px",border:"1px solid #e0e0e0",borderRadius:"4px",paddingRight:"28px"},filterWrapper:{position:"relative"},clearFilterButton:{position:"absolute",right:"6px",top:"50%",transform:"translateY(-50%)",minWidth:"auto",height:"20px",padding:"0 6px",lineHeight:"18px"},filterToolbar:{display:"flex",justifyContent:"flex-end",padding:"8px",gap:"8px"},cellWithAction:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},actionIcon:{minWidth:"auto",padding:"2px",marginLeft:"4px",flexShrink:0,cursor:"pointer",opacity:.7,"&:hover":{opacity:1}},cellText:{flex:1,overflow:"hidden",textOverflow:"ellipsis"}}),l=e=>{if(/^\d{4}-\d{2}-\d{2}/.test(e)){const t=new Date(e);if(!isNaN(t.getTime()))return t.getTime()}const t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})/);if(t){const e=parseInt(t[1],10),n=parseInt(t[2],10)-1,i=parseInt(t[3],10),r=new Date(i,n,e);if(r.getFullYear()===i&&r.getMonth()===n&&r.getDate()===e)return r.getTime()}return null},s=(e,t)=>{if("string"==typeof t)return e[t];for(const n of t)if(void 0!==e[n])return e[n]},c=({value:i,options:r,optionsLoader:o,minChars:a=2,maxResults:l=50,columnKey:s,item:c,actualIndex:d,onEnumChange:u,label:p,t:h})=>{const[x,m]=t.useState(i),[f,g]=t.useState([]),[y,j]=t.useState(!1),b=t.useRef(null);t.useEffect((()=>{m(i)}),[i]),t.useEffect((()=>{if(o){if(!(x.length<a))return b.current&&clearTimeout(b.current),b.current=setTimeout((async()=>{j(!0);try{const e=await o(x);g(e.slice(0,l))}finally{j(!1)}}),250),()=>{b.current&&clearTimeout(b.current)};g([])}}),[x,o,a,l]);const C=t.useMemo((()=>(r??[]).filter((e=>e.toLowerCase().includes(x.toLowerCase()))).slice(0,l)),[r,x,l]),w=o?f:C;return e.jsx(n.Combobox,{value:x,freeform:!0,"aria-label":p,placeholder:y?h("Loading..."):o&&x.length<a?h(`Type ${a}+ characters to search...`):void 0,onChange:e=>m(e.target.value),onOptionSelect:(e,t)=>{t.optionValue&&(m(t.optionValue),u&&u(c,s,t.optionValue,d))},onBlur:()=>{u&&u(c,s,x,d)},style:{width:"100%"},children:w.map((t=>e.jsx(n.Option,{value:t,children:t},t)))})},d=({data:d,columns:u,canEdit:p,onEdit:h,onDelete:x,onToggleCheckbox:m,onEnumChange:f,onFilteredDataChange:g})=>{const y=a(),{visibleColumns:j,defaultSortIndex:b,defaultSortDirection:C}=t.useMemo((()=>{const e=d&&d.length>0?Array.from(new Set(d.flatMap((e=>Object.keys(e))))):[],t=(u||e.map((e=>({key:e})))).filter((e=>!e.hidden)),n=t.findIndex((e=>e.defaultSort));return{visibleColumns:t,defaultSortIndex:n,defaultSortDirection:n>=0&&t[n].defaultSort||null}}),[d,u]),[w,k]=t.useState(b>=0?b:null),[v,S]=t.useState(C),[N,W]=t.useState(!1),[O,$]=t.useState({title:"",text:""}),[L,M]=t.useState({}),[T,I]=t.useState(0),{t:A}=o.default(),D=e=>e.title?A(e.title):Array.isArray(e.key)?e.key[0]:e.key,B=e=>{const t=[];return e.hideOnMobile&&t.push(y.hideOnMobile),t.join(" ")},E=e=>null==e||"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?"":"object"==typeof e?JSON.stringify(e):String(e),F=t.useMemo((()=>{const e=[...d];if(null!==w&&v){const t=j[w];e.sort(((e,n)=>{const i=s(e,t.key),r=s(n,t.key);if(null==i)return 1;if(null==r)return-1;let o=0;if("string"==typeof i&&"string"==typeof r){const e=l(i),t=l(r);if(null!==e&&null!==t)o=e-t;else{const e=i.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),t=r.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),n=Number(e),a=Number(t);o=""!==e&&""!==t&&isFinite(n)&&isFinite(a)?n-a:i.localeCompare(r)}}else o="number"==typeof i&&"number"==typeof r?i-r:String(i).localeCompare(String(r));return"asc"===v?o:-o}))}return e}),[d,w,v,j]),R=t.useMemo((()=>F.filter((e=>{for(const[t,n]of Object.entries(L)){const i=parseInt(t),r=j[i],o=s(e,r.key),a=E(o).toLowerCase(),l=n.toLowerCase();if(!a.includes(l))return!1}return!0}))),[F,L,j]);t.useEffect((()=>{g&&g(R)}),[R,g]);const q="undefined"!=typeof window?window.innerHeight-250:600,z=Math.max(0,Math.floor(T/49)-5),H=Math.min(R.length,Math.ceil((T+q)/49)+5),P=R.slice(z,H),V=49*R.length,Y=49*z,_=(e,t)=>{if(void 0!==e.id)return String(e.id);return`row-${t}-${(e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)})(j.slice(0,3).map((t=>String(s(e,t.key)??""))).join("-"))}`};return d&&0!==d.length?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:y.container,onScroll:e=>{I(e.currentTarget.scrollTop)},style:{maxHeight:"calc(100vh - 200px)",overflowY:"auto"},children:e.jsxs("table",{className:y.table,children:[e.jsxs("thead",{children:[e.jsxs("tr",{children:[j.map(((t,n)=>{const i=t.maxWidth?{width:`${t.maxWidth}px`,maxWidth:`${t.maxWidth}px`}:{};return e.jsxs("th",{className:`${y.th} ${B(t)}`.trim(),style:i,onClick:()=>(e=>{w===e?"asc"===v?S("desc"):"desc"===v&&(k(null),S(null)):(k(e),S("asc"))})(n),children:[D(t),w===n&&e.jsx("span",{className:y.sortIndicator,children:"asc"===v?"▲":"▼"})]},n)})),p&&e.jsx("th",{className:`${y.th} ${y.actionsColumn}`,style:{width:"100px"},children:A("Actions")})]}),e.jsxs("tr",{children:[j.map(((t,i)=>{const r=t.maxWidth?{width:`${t.maxWidth}px`,maxWidth:`${t.maxWidth}px`}:{};return e.jsx("th",{className:B(t),style:r,children:t.filterable&&e.jsxs("div",{className:y.filterWrapper,children:[e.jsx("input",{type:"text",className:y.filterInput,placeholder:A("Filter")+"...",value:L[i]||"",onChange:e=>((e,t)=>{M((n=>{const i={...n};return""===t.trim()?delete i[e]:i[e]=t,i}))})(i,e.target.value),onClick:e=>e.stopPropagation()}),(L[i]||"").length>0&&e.jsx(n.Button,{appearance:"subtle",className:y.clearFilterButton,onClick:e=>{e.stopPropagation(),(e=>{M((t=>{const n={...t};return delete n[e],n}))})(i)},children:"×"})]})},i)})),p&&e.jsx("th",{className:y.actionsColumn})]})]}),e.jsxs("tbody",{children:[z>0&&e.jsx("tr",{style:{height:`${Y}px`},children:e.jsx("td",{colSpan:j.length+(p?1:0),style:{padding:0,border:"none"}})}),P.map(((t,o)=>{const a=t._index,l="number"==typeof a?a:z+o;return e.jsxs("tr",{className:y.tr,children:[j.map(((i,o)=>{const a=s(t,i.key),d=i.format?i.format(a):E(a),u=i.maxWidth?`${y.td} ${y.tdTruncated} ${B(i)}`.trim():`${y.td} ${B(i)}`.trim(),p=()=>{window.matchMedia("(hover: hover)").matches||i.maxWidth&&d.length>0&&($({title:D(i),text:d}),W(!0))};if("file"===i.type&&d)return e.jsx("td",{className:u,onClick:p,children:e.jsx("a",{href:r.CodicentService.getFileUrl(d),target:"_blank",rel:"noopener noreferrer",children:A("Download")})},o);if("checkbox"===i.type){const r=!0===a||"true"===a||"yes"===a||"1"===a;return e.jsx("td",{className:u,children:e.jsx(n.Checkbox,{checked:r,onChange:(e,n)=>{m&&m(t,i.key,!0===n.checked,l)}})},o)}if("enum"===i.type&&i.enumOptions&&i.editable)return e.jsx("td",{className:u,children:e.jsxs(n.Select,{value:d,"aria-label":i.title?A(i.title):Array.isArray(i.key)?i.key[0]:i.key,onChange:(e,n)=>{f&&f(t,i.key,n.value,l)},style:{width:"100%"},children:[!i.enumOptions.includes(d)&&d&&e.jsx("option",{value:d,children:d}),i.enumOptions.map((t=>e.jsx("option",{value:t,children:A(t)},t)))]})},o);if("combobox"===i.type&&i.editable&&(i.enumOptions||i.enumOptionsLoader))return e.jsx("td",{className:u,children:e.jsx(c,{value:d,options:i.enumOptions,optionsLoader:i.enumOptionsLoader,minChars:i.enumOptionsLoaderMinChars,maxResults:i.enumOptionsLoaderMaxResults,columnKey:i.key,item:t,actualIndex:l,onEnumChange:f,label:i.title?A(i.title):Array.isArray(i.key)?i.key[0]:i.key,t:A})},o);const h=()=>i.maxWidth&&d.length>0?e.jsx(n.Tooltip,{content:{children:d,style:{maxWidth:"600px",whiteSpace:"normal"}},relationship:"description",children:e.jsx("span",{children:d})}):d,x=()=>{if(!i.action)return null;const r=i.action,o=i.action.icon,a=e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(o,{}),className:y.actionIcon,onClick:e=>{e.stopPropagation(),r.onClick(t)},size:"small"});return r.tooltip?e.jsx(n.Tooltip,{content:A(r.tooltip),relationship:"label",children:a}):a};return e.jsx("td",{className:u,onClick:p,children:i.action?e.jsxs("div",{className:y.cellWithAction,children:[i.action.iconLeft&&x(),e.jsx("span",{className:y.cellText,children:h()}),!i.action.iconLeft&&x()]}):h()},o)})),p&&(h||x)&&e.jsx("td",{className:`${y.td} ${y.actionsColumn}`,children:e.jsxs("div",{style:{display:"flex",gap:"4px",justifyContent:"center"},children:[h&&e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(i.Edit24Regular,{}),className:y.editButton,onClick:()=>h(t,l),title:A("Edit")}),x&&e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(i.Delete24Regular,{}),className:y.editButton,onClick:()=>x(t,l),title:A("Delete")})]})})]},_(t,l))})),H<R.length&&e.jsx("tr",{style:{height:V-Y-49*P.length+"px"},children:e.jsx("td",{colSpan:j.length+(p?1:0),style:{padding:0,border:"none"}})})]})]})}),e.jsx(n.Dialog,{open:N,onOpenChange:(e,t)=>W(t.open),children:e.jsx(n.DialogSurface,{children:e.jsxs(n.DialogBody,{children:[e.jsx(n.DialogTitle,{children:O.title}),e.jsx(n.DialogContent,{className:y.dialogContent,children:O.text})]})})})]}):e.jsx("div",{className:y.emptyState,children:A("No data to display")})};var u=t.memo(d);exports.ListView=d,exports.default=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("@fluentui/react-components"),i=require("@fluentui/react-icons"),o=require("../services/codicent.js"),r=require("../hooks/useLocalization.js");const l=n.makeStyles({container:{width:"100%",overflowX:"auto",userSelect:"text"},table:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",fontSize:"14px",tableLayout:"fixed",userSelect:"text"},th:{textAlign:"left",padding:"12px 8px",borderBottom:"2px solid #e0e0e0",fontWeight:"600",backgroundColor:"#f5f5f5",position:"sticky",top:0,zIndex:1,cursor:"pointer",userSelect:"none","&:hover":{backgroundColor:"#e8e8e8"}},td:{padding:"12px 8px",borderBottom:"1px solid #e0e0e0",verticalAlign:"top",wordWrap:"break-word",overflow:"hidden",userSelect:"text"},tdTruncated:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap","@media (hover: none)":{cursor:"pointer"}},tr:{"&:hover":{backgroundColor:"#f9f9f9"}},emptyState:{padding:"20px",textAlign:"center",color:"#666"},sortIndicator:{marginLeft:"4px",fontSize:"10px"},hideOnMobile:{"@media (max-width: 768px)":{display:"none"}},dialogContent:{wordWrap:"break-word",whiteSpace:"pre-wrap",maxHeight:"60vh",overflowY:"auto"},thumbnail:{maxWidth:"50px",maxHeight:"50px",objectFit:"cover"},tooltip:{maxWidth:"600px",whiteSpace:"normal",wordWrap:"break-word"},editButton:{minWidth:"auto",padding:"4px 8px"},actionsColumn:{width:"100px",textAlign:"center"},filterInput:{width:"100%",padding:"4px 8px",fontSize:"14px",border:"1px solid #e0e0e0",borderRadius:"4px",paddingRight:"28px"},filterWrapper:{position:"relative"},clearFilterButton:{position:"absolute",right:"6px",top:"50%",transform:"translateY(-50%)",minWidth:"auto",height:"20px",padding:"0 6px",lineHeight:"18px"},filterToolbar:{display:"flex",justifyContent:"flex-end",padding:"8px",gap:"8px"},cellWithAction:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},actionIcon:{minWidth:"auto",padding:"2px",marginLeft:"4px",flexShrink:0,cursor:"pointer",opacity:.7,"&:hover":{opacity:1}},cellText:{flex:1,overflow:"hidden",textOverflow:"ellipsis"}}),a=e=>{if(/^\d{4}-\d{2}-\d{2}/.test(e)){const t=new Date(e);if(!isNaN(t.getTime()))return t.getTime()}const t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})/);if(t){const e=parseInt(t[1],10),n=parseInt(t[2],10)-1,i=parseInt(t[3],10),o=new Date(i,n,e);if(o.getFullYear()===i&&o.getMonth()===n&&o.getDate()===e)return o.getTime()}return null},s=(e,t)=>{if("string"==typeof t)return e[t];for(const n of t)if(void 0!==e[n])return e[n]},c=({value:i,options:o,optionsLoader:r,minChars:l=2,maxResults:a=50,columnKey:s,item:c,actualIndex:d,onEnumChange:u,label:p,t:h})=>{const[x,m]=t.useState(i),[f,g]=t.useState([]),[y,j]=t.useState(!1),b=t.useRef(null);t.useEffect((()=>{m(i)}),[i]),t.useEffect((()=>{if(r){if(!(x.length<l))return b.current&&clearTimeout(b.current),b.current=setTimeout((async()=>{j(!0);try{const e=await r(x);g(e.slice(0,a))}finally{j(!1)}}),250),()=>{b.current&&clearTimeout(b.current)};g([])}}),[x,r,l,a]);const C=t.useMemo((()=>(o??[]).filter((e=>e.toLowerCase().includes(x.toLowerCase()))).slice(0,a)),[o,x,a]),v=r?f:C;return e.jsx(n.Combobox,{value:x,freeform:!0,"aria-label":p,placeholder:y?h("Loading..."):r&&x.length<l?h(`Type ${l}+ characters to search...`):void 0,onChange:e=>m(e.target.value),onOptionSelect:(e,t)=>{t.optionValue&&(m(t.optionValue),u&&u(c,s,t.optionValue,d))},onBlur:()=>{u&&u(c,s,x,d)},style:{width:"100%"},children:v.map((t=>e.jsx(n.Option,{value:t,children:t},t)))})},d=({data:d,columns:u,canEdit:p,onEdit:h,onDelete:x,onToggleCheckbox:m,onEnumChange:f,onFilteredDataChange:g})=>{const y=l(),{visibleColumns:j,defaultSortIndex:b,defaultSortDirection:C}=t.useMemo((()=>{const e=d&&d.length>0?Array.from(new Set(d.flatMap((e=>Object.keys(e))))):[],t=(u||e.map((e=>({key:e})))).filter((e=>!e.hidden)),n=t.findIndex((e=>e.defaultSort));return{visibleColumns:t,defaultSortIndex:n,defaultSortDirection:n>=0&&t[n].defaultSort||null}}),[d,u]),[v,w]=t.useState(b>=0?b:null),[k,S]=t.useState(C),[N,W]=t.useState(!1),[O,$]=t.useState({title:"",text:""}),[I,L]=t.useState({}),[M,T]=t.useState(0),{t:A}=r.default(),D=e=>e.title?A(e.title):Array.isArray(e.key)?e.key[0]:e.key,B=e=>{const t=[];return e.hideOnMobile&&t.push(y.hideOnMobile),t.join(" ")},F=(e,t)=>{L((n=>{const i={...n};return""===t.trim()?delete i[e]:i[e]=t,i}))},E=e=>null==e||"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?"":"object"==typeof e?JSON.stringify(e):String(e),R=t.useMemo((()=>{const e=[...d];if(null!==v&&k){const t=j[v];e.sort(((e,n)=>{const i=s(e,t.key),o=s(n,t.key);if(null==i)return 1;if(null==o)return-1;let r=0;if("string"==typeof i&&"string"==typeof o){const e=a(i),t=a(o);if(null!==e&&null!==t)r=e-t;else{const e=i.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),t=o.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),n=Number(e),l=Number(t);r=""!==e&&""!==t&&isFinite(n)&&isFinite(l)?n-l:i.localeCompare(o)}}else r="number"==typeof i&&"number"==typeof o?i-o:String(i).localeCompare(String(o));return"asc"===k?r:-r}))}return e}),[d,v,k,j]),q=t.useMemo((()=>R.filter((e=>{for(const[t,n]of Object.entries(I)){const i=parseInt(t),o=j[i],r=s(e,o.key),l=E(r).toLowerCase(),a=n.toLowerCase();if(!("enum"===o.type&&o.enumOptions?l===a:l.includes(a)))return!1}return!0}))),[R,I,j]);t.useEffect((()=>{g&&g(q)}),[q,g]);const z="undefined"!=typeof window?window.innerHeight-250:600,H=Math.max(0,Math.floor(M/49)-5),P=Math.min(q.length,Math.ceil((M+z)/49)+5),V=q.slice(H,P),Y=49*q.length,_=49*H,K=(e,t)=>{if(void 0!==e.id)return String(e.id);return`row-${t}-${(e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)})(j.slice(0,3).map((t=>String(s(e,t.key)??""))).join("-"))}`};return d&&0!==d.length?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:y.container,onScroll:e=>{T(e.currentTarget.scrollTop)},style:{maxHeight:"calc(100vh - 200px)",overflowY:"auto"},children:e.jsxs("table",{className:y.table,children:[e.jsxs("thead",{children:[e.jsxs("tr",{children:[j.map(((t,n)=>{const i=t.maxWidth?{width:`${t.maxWidth}px`,maxWidth:`${t.maxWidth}px`}:{};return e.jsxs("th",{className:`${y.th} ${B(t)}`.trim(),style:i,onClick:()=>(e=>{v===e?"asc"===k?S("desc"):"desc"===k&&(w(null),S(null)):(w(e),S("asc"))})(n),children:[D(t),v===n&&e.jsx("span",{className:y.sortIndicator,children:"asc"===k?"▲":"▼"})]},n)})),p&&e.jsx("th",{className:`${y.th} ${y.actionsColumn}`,style:{width:"100px"},children:A("Actions")})]}),e.jsxs("tr",{children:[j.map(((t,i)=>{const o=t.maxWidth?{width:`${t.maxWidth}px`,maxWidth:`${t.maxWidth}px`}:{};return e.jsx("th",{className:B(t),style:o,children:t.filterable&&e.jsx("div",{className:y.filterWrapper,children:"enum"===t.type&&t.enumOptions?e.jsxs(n.Select,{className:y.filterInput,value:I[i]||"",onChange:(e,t)=>F(i,t.value),onClick:e=>e.stopPropagation(),children:[e.jsx("option",{value:"",children:A("All")}),t.enumOptions.filter((e=>""!==e)).map((t=>e.jsx("option",{value:t,children:A(t)},t)))]}):e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",className:y.filterInput,placeholder:A("Filter")+"...",value:I[i]||"",onChange:e=>F(i,e.target.value),onClick:e=>e.stopPropagation()}),(I[i]||"").length>0&&e.jsx(n.Button,{appearance:"subtle",className:y.clearFilterButton,onClick:e=>{e.stopPropagation(),(e=>{L((t=>{const n={...t};return delete n[e],n}))})(i)},children:"×"})]})})},i)})),p&&e.jsx("th",{className:y.actionsColumn})]})]}),e.jsxs("tbody",{children:[H>0&&e.jsx("tr",{style:{height:`${_}px`},children:e.jsx("td",{colSpan:j.length+(p?1:0),style:{padding:0,border:"none"}})}),V.map(((t,r)=>{const l=t._index,a="number"==typeof l?l:H+r;return e.jsxs("tr",{className:y.tr,children:[j.map(((i,r)=>{const l=s(t,i.key),d=i.format?i.format(l):E(l),u=i.maxWidth?`${y.td} ${y.tdTruncated} ${B(i)}`.trim():`${y.td} ${B(i)}`.trim(),p=()=>{window.matchMedia("(hover: hover)").matches||i.maxWidth&&d.length>0&&($({title:D(i),text:d}),W(!0))};if("file"===i.type&&d)return e.jsx("td",{className:u,onClick:p,children:e.jsx("a",{href:o.CodicentService.getFileUrl(d),target:"_blank",rel:"noopener noreferrer",children:A("Download")})},r);if("checkbox"===i.type){const o=!0===l||"true"===l||"yes"===l||"1"===l;return e.jsx("td",{className:u,children:e.jsx(n.Checkbox,{checked:o,onChange:(e,n)=>{m&&m(t,i.key,!0===n.checked,a)}})},r)}if("enum"===i.type&&i.enumOptions&&i.editable)return e.jsx("td",{className:u,children:e.jsxs(n.Select,{value:d,"aria-label":i.title?A(i.title):Array.isArray(i.key)?i.key[0]:i.key,onChange:(e,n)=>{f&&f(t,i.key,n.value,a)},style:{width:"100%"},children:[!i.enumOptions.includes(d)&&d&&e.jsx("option",{value:d,children:d}),i.enumOptions.map((t=>e.jsx("option",{value:t,children:A(t)},t)))]})},r);if("combobox"===i.type&&i.editable&&(i.enumOptions||i.enumOptionsLoader))return e.jsx("td",{className:u,children:e.jsx(c,{value:d,options:i.enumOptions,optionsLoader:i.enumOptionsLoader,minChars:i.enumOptionsLoaderMinChars,maxResults:i.enumOptionsLoaderMaxResults,columnKey:i.key,item:t,actualIndex:a,onEnumChange:f,label:i.title?A(i.title):Array.isArray(i.key)?i.key[0]:i.key,t:A})},r);const h=()=>i.maxWidth&&d.length>0?e.jsx(n.Tooltip,{content:{children:d,style:{maxWidth:"600px",whiteSpace:"normal"}},relationship:"description",children:e.jsx("span",{children:d})}):d,x=()=>{if(!i.action)return null;const o=i.action,r=i.action.icon,l=e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(r,{}),className:y.actionIcon,onClick:e=>{e.stopPropagation(),o.onClick(t)},size:"small"});return o.tooltip?e.jsx(n.Tooltip,{content:A(o.tooltip),relationship:"label",children:l}):l};return e.jsx("td",{className:u,onClick:p,children:i.action?e.jsxs("div",{className:y.cellWithAction,children:[i.action.iconLeft&&x(),e.jsx("span",{className:y.cellText,children:h()}),!i.action.iconLeft&&x()]}):h()},r)})),p&&(h||x)&&e.jsx("td",{className:`${y.td} ${y.actionsColumn}`,children:e.jsxs("div",{style:{display:"flex",gap:"4px",justifyContent:"center"},children:[h&&e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(i.Edit24Regular,{}),className:y.editButton,onClick:()=>h(t,a),title:A("Edit")}),x&&e.jsx(n.Button,{appearance:"subtle",icon:e.jsx(i.Delete24Regular,{}),className:y.editButton,onClick:()=>x(t,a),title:A("Delete")})]})})]},K(t,a))})),P<q.length&&e.jsx("tr",{style:{height:Y-_-49*V.length+"px"},children:e.jsx("td",{colSpan:j.length+(p?1:0),style:{padding:0,border:"none"}})})]})]})}),e.jsx(n.Dialog,{open:N,onOpenChange:(e,t)=>W(t.open),children:e.jsx(n.DialogSurface,{children:e.jsxs(n.DialogBody,{children:[e.jsx(n.DialogTitle,{children:O.title}),e.jsx(n.DialogContent,{className:y.dialogContent,children:O.text})]})})})]}):e.jsx("div",{className:y.emptyState,children:A("No data to display")})};var u=t.memo(d);exports.ListView=d,exports.default=u;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocalization.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLocalization.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"useLocalization.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLocalization.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6GD,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAa/C,QAAA,MAAM,eAAe;aA2CX,MAAM;kBAkFA,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;;+BApGC,MAAM;;;CA2K9C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../node_modules/i18next/dist/esm/i18next.js"),a=require("../services/codicent.js"),n=require("../config/index.js"),r=require("../node_modules/react-i18next/dist/es/initReactI18next.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../node_modules/i18next/dist/esm/i18next.js"),a=require("../services/codicent.js"),n=require("../config/index.js"),r=require("../node_modules/react-i18next/dist/es/initReactI18next.js"),i=require("../node_modules/react-i18next/dist/es/useTranslation.js");const s=()=>{const e=n.getConfigValue("FORCE_LANGUAGE");if(e)return{source:"force_config",language:e};if("undefined"!=typeof window){const e=new URLSearchParams(window.location.search),t=e.get("lang")||e.get("language");if(t)return{source:"url_param",language:t}}if("undefined"!=typeof window&&"undefined"!=typeof localStorage){const e=localStorage.getItem("user_language");if(e&&"auto"!==e)return{source:"user_preference",language:e};if("auto"===e&&"undefined"!=typeof navigator&&navigator.language){return{source:"browser",language:navigator.language.split("-")[0]}}}const t=n.getConfigValue("DEFAULT_LANGUAGE");if(t)return{source:"default",language:t};if("undefined"!=typeof navigator&&navigator.language){return{source:"browser",language:navigator.language.split("-")[0]}}return{source:"default",language:"sv"}},o=()=>s().language,l=()=>{const e=n.getConfigValue("TRANSLATIONS");if(e){const t={};for(const[a,n]of Object.entries(e))t[a]={translation:n};return t}return{en:{translation:{Hello:"Hello"}},sv:{translation:{Hello:"Hej"}}}},u=()=>{if(t.default.isInitialized){const e=l();Object.keys(e).forEach((a=>{t.default.addResourceBundle(a,"translation",e[a].translation,!0,!0)}))}else t.default.use(r.initReactI18next).init({resources:l(),lng:o(),fallbackLng:n.getConfigValue("DEFAULT_LANGUAGE")||"sv",interpolation:{escapeValue:!1}})};u();const c=new Set;let g=JSON.parse(localStorage.getItem("app-translations")||"{}");const d=new Set;exports.default=()=>{const{t:t,i18n:r}=i.useTranslation(),[l,f]=e.useState((()=>o())),[_,m]=e.useState(g);e.useEffect((()=>{if(globalThis.__CODICENT_REINIT_I18N__){u(),globalThis.__CODICENT_REINIT_I18N__=!1;const e=o();f(e)}}),[]),e.useEffect((()=>{r.changeLanguage(l)}),[l,r]);const p=e.useCallback((e=>{const{source:t}=s();"force_config"!==t?"url_param"!==t?f(e):console.warn("Language setting ignored due to URL parameter"):console.warn("Language setting ignored due to FORCE_LANGUAGE configuration")}),[]),h=e.useCallback((()=>s()),[]);return{t:e.useCallback((e=>{if(!r.exists(e)){if(!n.getConfigValue("AUTO_TRANSLATE")&&"sv"!==l){const t=`${l}:${e}`;d.has(t)||(d.add(t),console.warn(`[i18n] Missing translation for key "${e}" in language "${l}"`))}(async(e,t)=>{const r=`${t} - ${e}`;let i=g[t]?.[e]||void 0;if(n.getConfigValue("AUTO_TRANSLATE")&&!i&&!c.has(r)){c.add(r),localStorage.setItem("app-translations",JSON.stringify(g));try{i=(await a.CodicentService.getTranslations(e,t)).translation}catch(e){console.error("Error fetching translation:",e),i=void 0}finally{c.delete(r)}i&&i.includes("Error code:")&&(i=void 0),i&&(!e.trim().startsWith('"')&&i.trim().startsWith('"')&&i.trim().endsWith('"')&&(i=i.trim().slice(1,-1)),!e.trim().startsWith("'")&&i.trim().startsWith("'")&&i.trim().endsWith("'")&&(i=i.trim().slice(1,-1)),g[t]={...g[t],[e]:i},localStorage.setItem("app-translations",JSON.stringify(g)),m({...g}))}return i||e})(e,l).then((t=>{r.addResource(l,"translation",e,t)}))}return t(e)}),[r,t,l]),tAsync:e.useCallback((async e=>{const t=await(async(e,t)=>{const r=`${t} - ${e}`;let i=g[t]?.[e]||void 0;if(n.getConfigValue("AUTO_TRANSLATE")&&!i&&!c.has(r)){c.add(r),localStorage.setItem("app-translations",JSON.stringify(g));try{i=(await a.CodicentService.getTranslations(e,t)).translation}catch(e){console.error("Error fetching translation:",e),i=void 0}finally{c.delete(r)}i&&i.includes("Error code:")&&(i=void 0),i&&(!e.trim().startsWith('"')&&i.trim().startsWith('"')&&i.trim().endsWith('"')&&(i=i.trim().slice(1,-1)),!e.trim().startsWith("'")&&i.trim().startsWith("'")&&i.trim().endsWith("'")&&(i=i.trim().slice(1,-1)),g[t]={...g[t],[e]:i},localStorage.setItem("app-translations",JSON.stringify(g)),m({...g}))}return i||e})(e,l);return r.exists(e)||r.addResource(l,"translation",e,t),t}),[r,l]),currentLanguage:l,setCurrentLanguage:p,getLanguageInfo:h,isForced:["force_config","url_param"].includes(s().source)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserRoles.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserRoles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,YAAa,eAAe,oBAAoB,MAAM,oBAAoB,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"useUserRoles.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserRoles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,YAAa,eAAe,oBAAoB,MAAM,oBAAoB,MAAM;;;;oCAmC1F,MAAM,KAAG,MAAM;gCAgBO,MAAM,KAAG,MAAM;8BAUjB,MAAM,QAAQ,QAAQ,KAAG,OAAO;+BAe/B,MAAM,KAAG,QAAQ,GAAG,SAAS;mCAKzB,MAAM,KAAG,MAAM,EAAE;8BASxB,QAAQ,GAAG,SAAS;8BAKR,MAAM;CAiBlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("react"),r=require("../utils/MessageContent.js");exports.useUserRoles=(t,s,n)=>{const[a,o]=e.useState([]),[i,
|
|
1
|
+
"use strict";var e=require("react"),r=require("../utils/MessageContent.js");exports.useUserRoles=(t,s,n)=>{const[a,o]=e.useState([]),[i,l]=e.useState(!0),[u,c]=e.useState(null);e.useEffect((()=>{if(!s||!n)return void l(!1);(async()=>{try{l(!0),c(null);const e=(await t.getMessagesFast(["user_role"],void 0,100)).map((e=>{const t=new r.default(e.content).data;return t&&"object"==typeof t?t:null})).filter((e=>null!==e));o(e)}catch(e){console.error("Failed to fetch user roles:",e),c(e instanceof Error?e.message:"Failed to fetch user roles")}finally{l(!1)}})()}),[t,s,n]);const m=e.useCallback((e=>{if(!e)return"";const r=e.toLowerCase(),t=a.find((e=>{if(!e.nicknames)return!1;return e.nicknames.toLowerCase().split(",").map((e=>e.trim())).some((e=>e===r))}));return t?.name||e}),[a]),f=(e,r)=>{if(!e||!r)return!1;const t=e.toLowerCase();if(r.nicknames){if(r.nicknames.toLowerCase().split(",").map((e=>e.trim())).some((e=>e===t)))return!0}return r.name?.toLowerCase()===t||r.email?.toLowerCase()===t},C=e=>{if(e)return a.find((r=>f(e,r)))},d=e.useCallback((()=>s?m(s):""),[s,m]);return{userRoles:a,loading:i,error:u,getNameFromNickname:m,getNicknameFromName:e=>{if(!e)return"";const r=a.find((r=>r.name?.toLowerCase()===e.toLowerCase()));if(r?.nicknames){return r.nicknames.split(",").map((e=>e.trim()))[0]||e}return e},isUserMatch:f,findUserRole:C,getClaimsForUser:e=>{const r=C(e);return r?.claims?r.claims.split(",").map((e=>e.trim())).filter(Boolean):[]},getCurrentUserRole:()=>{if(s)return C(s)},getCurrentUserName:d}};
|
package/dist/cjs/pages/Home.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ export interface HomePageProps {
|
|
|
35
35
|
buttonStyles?: HomeButtonStyles;
|
|
36
36
|
/** App name used when sending an invite request. */
|
|
37
37
|
appName?: string;
|
|
38
|
+
/** URL for a support link shown at the bottom of the home screen. */
|
|
39
|
+
supportUrl?: string;
|
|
38
40
|
}
|
|
39
41
|
export declare const Home: React.FC<HomePageProps>;
|
|
40
42
|
export default Home;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../../../src/pages/Home.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../../../src/pages/Home.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA2BnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAA+D,MAAM,UAAU,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAmCD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmJD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sGAAsG;IACtG,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gHAAgH;IAChH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmbxC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/cjs/pages/Home.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("@fluentui/react-components"),n=require("@fluentui/react-icons"),i=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js");var s=require("../components/Button.js");require("../components/CompoundButton.js");var o=require("../components/Title.js"),a=require("../components/Text.js"),l=require("../components/Spinner.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var c=require("../hooks/useStateWithLocalStorage.js");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./ListPage.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var u=require("../components/Content.js"),d=require("../components/Page.js");require("./QrScan.js");var p=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var m=require("../hooks/useCodicentState.js");require("../hooks/useAppStyles.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var g=require("../components/UrlProcessor.js");require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js"),require("../components/ListView.js"),require("../components/RecordModal.js");var j=require("../components/BulkUploadDialog.js");function h(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var x=h(n);const q=t=>{if(!t)return null;const r=x[t];if(r&&("function"==typeof r||"object"==typeof r))try{return e.jsx(r,{})}catch{return null}return null},v=t=>{switch(t){case"Start Your CV AI Assistant":return e.jsx(n.Rocket24Regular,{});case"Smart CV Matching":return e.jsx(n.Briefcase24Regular,{});case"Enhance & Optimize CVs":return e.jsx(n.Sparkle24Regular,{});case"View CV Database":return e.jsx(n.Database24Regular,{});case"Create Job Requirements":return e.jsx(n.Target24Regular,{});case"Chat with CV AI":return e.jsx(n.Chat24Regular,{});default:return null}},f=r.makeStyles({main:{flexGrow:1,...r.shorthands.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...r.shorthands.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...r.shorthands.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"}}),b=({state:h,audio:x,voice:b,buttons:k,backgroundImageUrl:C,welcomeText:S,slogan:w,indexTitle:y,developerMode:A,onEditClick:I,buttonStyles:D={},appName:P})=>{const{selectedApp:T,nickname:B,apps:N,name:z}=h.context,{service:M,error:R,stateMachine:_,currentStateName:E,fixAppUrl:F}=h,L=f(),[W,$]=c.default("app-buttons_"+T,[]),[U,V]=t.useState(!1),[O,H]=t.useState(!1),[Q,Y]=t.useState([]),[G,K]=t.useState(""),[J,X]=t.useState(""),[Z,ee]=t.useState(""),[te,re]=t.useState(new Set),{updating:ne,welcomeStatusText:ie}=m.default(_),{t:se}=p.default();t.useEffect((()=>{void 0!==k?$(k):T&&M.getAppButtons().then((e=>$(e))).catch(console.warn)}),[M,$,T,k]);const oe=e=>{e.preventDefault(),e.stopPropagation()},ae=!T||"hasAccess"!==E,le=!T||"hasAccess"!==E,ce=T&&"hasAccess"===E,ue=!T&&"hasAccess"===E&&N.length>1,de=!R&&!T&&!P,pe="noAccess"===E&&(1===N.length||!!P),me=T&&"hasAccess"===E;return e.jsx(d.Page,{hideHeader:ae,hideFooter:le,audio:x,voice:b,children:e.jsxs("div",{className:L.root,style:{backgroundImage:C?`url(${C})`:void 0},children:[A&&I&&"hasAccess"===E&&e.jsx("div",{className:L.editButton,children:e.jsx(r.Tooltip,{content:se("Edit settings")||"Edit settings",relationship:"label",children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.Edit24Regular,{}),"aria-label":se("Edit settings")||"Edit settings",onClick:I,size:"small"})})}),e.jsx("div",{className:L.item,children:e.jsx("div",{className:L.item,children:e.jsxs("div",{className:L.buttonsList,children:[ue&&e.jsxs(e.Fragment,{children:[e.jsx(o.Title,{children:se("Välkommen, vart vill du gå?")}),N.map(((t,n)=>e.jsx("div",{children:e.jsx(s.Button,{size:"large",appearance:"primary",onClick:()=>_.setSelectedApp(t.id),children:e.jsxs("div",{className:L.buttonContent,children:[t.logo&&e.jsx(r.Image,{src:t.logo,height:24}),t.title||t.id]})})},"codicent_button_"+n)))]}),de&&e.jsxs(e.Fragment,{children:[e.jsx(o.Title,{children:se("Skapa ny?")}),e.jsx(a.Text,{size:400,children:se("Här går du vidare för att skapa din egna privata digitala assistent.")}),e.jsx(s.Button,{size:"large",appearance:"primary",onClick:()=>_.update(),children:se("Kör!")})]}),pe&&e.jsx("div",{children:e.jsxs(u.default,{children:[e.jsx(o.Title,{children:`${se("Välkommen till")} ${y}`}),!U&&e.jsx(a.Text,{size:400,children:se("Du är inte medlem än. Skicka begäran för att komma in!")}),!U&&e.jsx(s.Button,{size:"large",appearance:"primary",onClick:async()=>{if(V(!0),!P)return console.error("appName prop not provided."),alert("appName not defined."),void V(!1);await M.requestInvite(B,P)?alert(se("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(V(!1),alert(se("Misslyckades att skicka begäran. Försök igen senare.")))},children:se("Skicka begäran")}),!U&&e.jsxs(a.Text,{size:300,children:[se("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e.jsx(i.Link,{to:"/logout",children:se("Logga ut")})," ",se("och sedan in igen för att komma igång.")]}),U&&e.jsx(a.Text,{size:400,children:se("Begäran skickad till ägaren.")}),U&&e.jsx(s.Button,{size:"large",onClick:()=>{window.location.href="./"},children:se("Kontrollera åtkomst")})]})}),me&&e.jsxs("div",{className:L.welcomeInfo,children:[e.jsx(a.Text,{weight:"semibold",size:500,align:"center",children:S?S.replace("{{username}}",z||B||""):se("Välkommen")}),w&&e.jsx(a.Text,{weight:"semibold",italic:!0,size:400,align:"center",children:w}),ne&&e.jsx(l.Spinner,{}),!ne&&ie&&e.jsx(a.Text,{size:400,align:"center",children:se(ie)})]}),ce&&W.map(((t,n)=>{const i="file_drop"===t.type,o="multi_option"===t.type,a=t.options&&Array.isArray(t.options)?t.options:[],l=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){K(t[0]?.trim()||""),X(t[1]?.trim()||""),ee(t[2]?.trim()||"");const e=t[3]?.trim()||"";Y(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{K(""),X(""),ee("");const e=t[0]?.trim()||"";Y(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}H(!0)},c=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&b?.updateInstructions(t),b?.connectConversation()}else e.startsWith("upload:")?l(e):e.startsWith("app:")?t(e.replace("app:",F("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e.jsx("div",{children:i?e.jsx("div",{className:`${L.item} ${te.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${D.textColor||"#ccc"}`,backgroundColor:te.has(n)?D.activeColor||void 0:D.backgroundColor||void 0,color:D.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),re((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),re((e=>{const r=new Set(e);return r.delete(t),r}))})(e,n),onDragOver:oe,onDrop:e=>(async(e,t,r)=>{e.preventDefault(),e.stopPropagation(),re((e=>{const t=new Set(e);return t.delete(r),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),r=(e.length>=4?e[3]:e[0])?.trim()||"";i=r?r.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const r=await M.uploadFile(e.name,t);if(!r)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await M.sendMessage(`@${T} ${n}\n\n${e.name}\n#file:${r}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,t,n),onClick:()=>t.url.startsWith("upload:")&&l(t.url),children:e.jsxs("div",{className:L.buttonContentColumn,children:[e.jsxs("div",{className:L.buttonContentRow,children:[q(t.icon)||v(t.title),e.jsx("span",{children:se(t.title)})]}),e.jsx("div",{className:L.buttonSubtitle,children:te.has(n)?se("Drop files here..."):se("Drag files here or click")})]})}):o?e.jsxs(r.Menu,{children:[e.jsx(r.MenuTrigger,{children:e.jsx(r.MenuButton,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:D.backgroundColor||void 0,color:D.textColor||void 0,padding:"1.2rem 1rem"},children:e.jsxs("div",{className:L.buttonContentColumn,children:[e.jsxs("div",{className:L.buttonContentRow,children:[q(t.icon)||v(t.title),e.jsx("span",{children:se(t.title)})]}),t.subtitle&&e.jsx("div",{className:L.buttonSubtitle,children:se(t.subtitle)})]})})}),e.jsx(r.MenuPopover,{className:L.menuPopover,children:e.jsx(r.MenuList,{children:a.map(((t,i)=>e.jsx(g.UrlProcessor,{service:M,children:n=>e.jsx(r.MenuItem,{onClick:()=>c(t.url,n),children:e.jsxs("div",{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[q(t.icon)&&e.jsx("div",{className:L.menuItemIconBadge,children:q(t.icon)}),e.jsx("span",{className:L.menuItemTitle,children:se(t.title)})]}),t.subtitle&&e.jsx("div",{className:L.menuItemSubtitle,children:se(t.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e.jsx(g.UrlProcessor,{service:M,children:r=>e.jsx(s.Button,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:D.backgroundColor||void 0,color:D.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>c(t.url,r),children:e.jsxs("div",{className:L.buttonContentColumn,children:[e.jsxs("div",{className:L.buttonContentRow,children:[q(t.icon)||v(t.title),e.jsx("span",{children:se(t.title)})]}),t.subtitle&&e.jsx("div",{className:L.buttonSubtitle,children:se(t.subtitle)})]})})})},"button_"+n)}))]})})}),R&&e.jsx("div",{className:"error",children:R}),e.jsx(j.default,{project:T||"",hidden:!O,onDismiss:()=>{H(!1),K(""),X(""),ee(""),Y([])},sendMessage:async e=>{try{return await M.sendMessage(e)}catch{return}},onUploaded:()=>{H(!1),K(""),X(""),ee(""),Y([])},service:M,tags:Q,title:G,description:J,dropText:Z})]})})};exports.Home=b,exports.default=b;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("@fluentui/react-components"),n=require("@fluentui/react-icons"),i=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js");var s=require("../components/Button.js");require("../components/CompoundButton.js");var o=require("../components/Title.js"),a=require("../components/Text.js"),l=require("../components/Spinner.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var c=require("../hooks/useStateWithLocalStorage.js");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./ListPage.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var u=require("../components/Content.js"),d=require("../components/Page.js");require("./QrScan.js");var p=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var m=require("../hooks/useCodicentState.js");require("../hooks/useAppStyles.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var g=require("../components/UrlProcessor.js");require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js"),require("../components/ListView.js"),require("../components/RecordModal.js");var j=require("../components/BulkUploadDialog.js");function h(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var x=h(n);const f=t=>{if(!t)return null;const r=x[t];if(r&&("function"==typeof r||"object"==typeof r))try{return e.jsx(r,{})}catch{return null}return null},v=t=>{switch(t){case"Start Your CV AI Assistant":return e.jsx(n.Rocket24Regular,{});case"Smart CV Matching":return e.jsx(n.Briefcase24Regular,{});case"Enhance & Optimize CVs":return e.jsx(n.Sparkle24Regular,{});case"View CV Database":return e.jsx(n.Database24Regular,{});case"Create Job Requirements":return e.jsx(n.Target24Regular,{});case"Chat with CV AI":return e.jsx(n.Chat24Regular,{});default:return null}},q=r.makeStyles({main:{flexGrow:1,...r.shorthands.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...r.shorthands.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...r.shorthands.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"},supportLink:{position:"absolute",top:"80px",right:"52px",zIndex:10,display:"flex",alignItems:"center",gap:"4px",fontSize:"0.8rem",opacity:.6,textDecoration:"none",color:"inherit",pointerEvents:"auto","&:hover":{opacity:1}}}),b=({state:h,audio:x,voice:b,buttons:k,backgroundImageUrl:C,welcomeText:S,slogan:y,indexTitle:w,developerMode:A,onEditClick:I,buttonStyles:D={},appName:N,supportUrl:P})=>{const{selectedApp:T,nickname:B,apps:z,name:M}=h.context,{service:R,error:_,stateMachine:E,currentStateName:L,fixAppUrl:F}=h,W=q(),[U,$]=c.default("app-buttons_"+T,[]),[V,O]=t.useState(!1),[H,Q]=t.useState(!1),[Y,G]=t.useState([]),[K,J]=t.useState(""),[X,Z]=t.useState(""),[ee,te]=t.useState(""),[re,ne]=t.useState(new Set),{updating:ie,welcomeStatusText:se}=m.default(E),{t:oe}=p.default();t.useEffect((()=>{void 0!==k?$(k):T&&R.getAppButtons().then((e=>$(e))).catch(console.warn)}),[R,$,T,k]);const ae=e=>{e.preventDefault(),e.stopPropagation()},le=!T||"hasAccess"!==L,ce=!T||"hasAccess"!==L,ue=T&&"hasAccess"===L,de=!T&&"hasAccess"===L&&z.length>1,pe=!_&&!T&&!N,me="noAccess"===L&&(1===z.length||!!N),ge=T&&"hasAccess"===L;return e.jsx(d.Page,{hideHeader:le,hideFooter:ce,audio:x,voice:b,children:e.jsxs("div",{className:W.root,style:{backgroundImage:C?`url(${C})`:void 0},children:[P&&e.jsx("a",{href:P,target:"_blank",rel:"noopener noreferrer",className:W.supportLink,children:e.jsx(n.QuestionCircle24Regular,{})}),A&&I&&"hasAccess"===L&&e.jsx("div",{className:W.editButton,children:e.jsx(r.Tooltip,{content:oe("Edit settings")||"Edit settings",relationship:"label",children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.Edit24Regular,{}),"aria-label":oe("Edit settings")||"Edit settings",onClick:I,size:"small"})})}),e.jsx("div",{className:W.item,children:e.jsx("div",{className:W.item,children:e.jsxs("div",{className:W.buttonsList,children:[de&&e.jsxs(e.Fragment,{children:[e.jsx(o.Title,{children:oe("Välkommen, vart vill du gå?")}),z.map(((t,n)=>e.jsx("div",{children:e.jsx(s.Button,{size:"large",appearance:"primary",onClick:()=>E.setSelectedApp(t.id),children:e.jsxs("div",{className:W.buttonContent,children:[t.logo&&e.jsx(r.Image,{src:t.logo,height:24}),t.title||t.id]})})},"codicent_button_"+n)))]}),pe&&e.jsxs(e.Fragment,{children:[e.jsx(o.Title,{children:oe("Skapa ny?")}),e.jsx(a.Text,{size:400,children:oe("Här går du vidare för att skapa din egna privata digitala assistent.")}),e.jsx(s.Button,{size:"large",appearance:"primary",onClick:()=>E.update(),children:oe("Kör!")})]}),me&&e.jsx("div",{children:e.jsxs(u.default,{children:[e.jsx(o.Title,{children:`${oe("Välkommen till")} ${w}`}),!V&&e.jsx(a.Text,{size:400,children:oe("Du är inte medlem än. Skicka begäran för att komma in!")}),!V&&e.jsx(s.Button,{size:"large",appearance:"primary",onClick:async()=>{if(O(!0),!N)return console.error("appName prop not provided."),alert("appName not defined."),void O(!1);await R.requestInvite(B,N)?alert(oe("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(O(!1),alert(oe("Misslyckades att skicka begäran. Försök igen senare.")))},children:oe("Skicka begäran")}),!V&&e.jsxs(a.Text,{size:300,children:[oe("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e.jsx(i.Link,{to:"/logout",children:oe("Logga ut")})," ",oe("och sedan in igen för att komma igång.")]}),V&&e.jsx(a.Text,{size:400,children:oe("Begäran skickad till ägaren.")}),V&&e.jsx(s.Button,{size:"large",onClick:()=>{window.location.href="./"},children:oe("Kontrollera åtkomst")})]})}),ge&&e.jsxs("div",{className:W.welcomeInfo,children:[e.jsx(a.Text,{weight:"semibold",size:500,align:"center",children:S?S.replace("{{username}}",M||B||""):oe("Välkommen")}),y&&e.jsx(a.Text,{weight:"semibold",italic:!0,size:400,align:"center",children:y}),ie&&e.jsx(l.Spinner,{}),!ie&&se&&e.jsx(a.Text,{size:400,align:"center",children:oe(se)})]}),ue&&U.map(((t,n)=>{const i="file_drop"===t.type,o="multi_option"===t.type,a=t.options&&Array.isArray(t.options)?t.options:[],l=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){J(t[0]?.trim()||""),Z(t[1]?.trim()||""),te(t[2]?.trim()||"");const e=t[3]?.trim()||"";G(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{J(""),Z(""),te("");const e=t[0]?.trim()||"";G(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}Q(!0)},c=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&b?.updateInstructions(t),b?.connectConversation()}else e.startsWith("upload:")?l(e):e.startsWith("app:")?t(e.replace("app:",F("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e.jsx("div",{children:i?e.jsx("div",{className:`${W.item} ${re.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${D.textColor||"#ccc"}`,backgroundColor:re.has(n)?D.activeColor||void 0:D.backgroundColor||void 0,color:D.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ne((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ne((e=>{const r=new Set(e);return r.delete(t),r}))})(e,n),onDragOver:ae,onDrop:e=>(async(e,t,r)=>{e.preventDefault(),e.stopPropagation(),ne((e=>{const t=new Set(e);return t.delete(r),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),r=(e.length>=4?e[3]:e[0])?.trim()||"";i=r?r.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const r=await R.uploadFile(e.name,t);if(!r)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await R.sendMessage(`@${T} ${n}\n\n${e.name}\n#file:${r}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,t,n),onClick:()=>t.url.startsWith("upload:")&&l(t.url),children:e.jsxs("div",{className:W.buttonContentColumn,children:[e.jsxs("div",{className:W.buttonContentRow,children:[f(t.icon)||v(t.title),e.jsx("span",{children:oe(t.title)})]}),e.jsx("div",{className:W.buttonSubtitle,children:re.has(n)?oe("Drop files here..."):oe("Drag files here or click")})]})}):o?e.jsxs(r.Menu,{children:[e.jsx(r.MenuTrigger,{children:e.jsx(r.MenuButton,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:D.backgroundColor||void 0,color:D.textColor||void 0,padding:"1.2rem 1rem"},children:e.jsxs("div",{className:W.buttonContentColumn,children:[e.jsxs("div",{className:W.buttonContentRow,children:[f(t.icon)||v(t.title),e.jsx("span",{children:oe(t.title)})]}),t.subtitle&&e.jsx("div",{className:W.buttonSubtitle,children:oe(t.subtitle)})]})})}),e.jsx(r.MenuPopover,{className:W.menuPopover,children:e.jsx(r.MenuList,{children:a.map(((t,i)=>e.jsx(g.UrlProcessor,{service:R,children:n=>e.jsx(r.MenuItem,{onClick:()=>c(t.url,n),children:e.jsxs("div",{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[f(t.icon)&&e.jsx("div",{className:W.menuItemIconBadge,children:f(t.icon)}),e.jsx("span",{className:W.menuItemTitle,children:oe(t.title)})]}),t.subtitle&&e.jsx("div",{className:W.menuItemSubtitle,children:oe(t.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e.jsx(g.UrlProcessor,{service:R,children:r=>e.jsx(s.Button,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:D.backgroundColor||void 0,color:D.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>c(t.url,r),children:e.jsxs("div",{className:W.buttonContentColumn,children:[e.jsxs("div",{className:W.buttonContentRow,children:[f(t.icon)||v(t.title),e.jsx("span",{children:oe(t.title)})]}),t.subtitle&&e.jsx("div",{className:W.buttonSubtitle,children:oe(t.subtitle)})]})})})},"button_"+n)}))]})})}),P&&e.jsx("a",{href:P,target:"_blank",rel:"noopener noreferrer",className:W.supportLink,children:e.jsx(n.QuestionCircle24Regular,{})}),_&&e.jsx("div",{className:"error",children:_}),e.jsx(j.default,{project:T||"",hidden:!H,onDismiss:()=>{Q(!1),J(""),Z(""),te(""),G([])},sendMessage:async e=>{try{return await R.sendMessage(e)}catch{return}},onUploaded:()=>{Q(!1),J(""),Z(""),te(""),G([])},service:R,tags:Y,title:K,description:X,dropText:ee})]})})};exports.Home=b,exports.default=b;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import type { ColumnDefinition } from "../components/ListView";
|
|
2
|
+
import type { ListConfig } from "../types";
|
|
2
3
|
import { CodicentAppState } from "../hooks/useCodicentApp";
|
|
3
4
|
export interface ListPageProps {
|
|
4
5
|
state: CodicentAppState;
|
|
5
6
|
/** Returns column definitions for a given tag. Falls back to all data keys if not provided. */
|
|
6
7
|
getColumnDefs?: (tag: string) => ColumnDefinition[];
|
|
8
|
+
/**
|
|
9
|
+
* Returns full list configuration (columns + optional deduplicateBy) for a given tag.
|
|
10
|
+
* When provided, takes precedence over getColumnDefs for deriving column definitions.
|
|
11
|
+
*/
|
|
12
|
+
getListConfig?: (tag: string) => ListConfig | undefined;
|
|
7
13
|
/** Optional data filter applied after fetch. Useful for app-specific filtering (e.g. empty notes). */
|
|
8
14
|
filterData?: (data: DataMessage[], tag: string) => DataMessage[];
|
|
9
15
|
}
|
|
10
|
-
export declare const ListPage: ({ state, getColumnDefs, filterData }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare const ListPage: ({ state, getColumnDefs, getListConfig, filterData }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
17
|
export default ListPage;
|
|
12
18
|
//# sourceMappingURL=ListPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAuB3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAkE3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;IACpD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACxD,sGAAsG;IACtG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;CAClE;AAED,eAAO,MAAM,QAAQ,wDAAyD,aAAa,4CAylB1F,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var r=require("@fluentui/react-components");require("../components/Spinner.js");var a=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("@fluentui/react-icons");require("../services/codicent.js");var s=require("../services/dataCache.js"),o=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/excelExport.js");require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js");var c=require("react-router-dom");require("./Purchase.js"),require("../components/Content.js");var l=require("../components/Page.js");require("./QrScan.js");var u=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js");var d=require("../hooks/useUserRoles.js");require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js");var p=require("../components/SearchBox.js");require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js");var m=require("../components/ListView.js"),g=require("../components/RecordModal.js");require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var j=require("../node_modules/lodash/lodash.js");const h=r.makeStyles({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),f=500,q=({state:q,getColumnDefs:x,filterData:C})=>{const[S,w]=c.useSearchParams(),A=S.get("tag")||"logbook",v=S.get("title")||"",y=S.get("contentTitle"),k="true"===S.get("loadAll"),b="true"===S.get("canAdd"),D="true"===S.get("canEdit"),M="false"!==S.get("canExport"),E=S.get("addUrl")||"",R=S.get("q")||"",[B,P]=t.useState(R),[I,T]=t.useState(R),{service:_}=q,[$,N]=t.useState([]),[L,F]=t.useState(!1),[U,O]=t.useState(!1),[H,W]=t.useState(!1),z=t.useRef(null),V=t.useRef(R),G=t.useRef(""),J=t.useRef(!0),[Q,K]=t.useState(0),[X,Y]=t.useState(null),Z=h(),{t:ee}=u.default(),te=c.useNavigate(),{getCurrentUserName:re}=d.useUserRoles(_,q.context.nickname,q.context.selectedApp),ae=t.useMemo((()=>(y?[{key:y,title:y,maxWidth:250}]:x?x(A):[]).map((e=>({...e,title:e.title?ee(e.title):void 0})))),[y,A,ee,x]),[ne,se]=t.useState(!1),[oe,ie]=t.useState(null),[ce,le]=t.useState(!1),[ue,de]=t.useState(null),pe=t.useMemo((()=>`listpage_searches_${A}`),[A]),me=e=>{try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}},[ge,je]=t.useState((()=>me(pe)));t.useEffect((()=>{je(me(pe))}),[pe]);const he=t.useCallback((e=>{const t=e.trim();t&&je((e=>{const r=[t,...e.filter((e=>e!==t))].slice(0,20);try{localStorage.setItem(pe,JSON.stringify(r))}catch{}return r}))}),[pe]),fe=t.useCallback((e=>{je((t=>{const r=t.filter((t=>t!==e));try{localStorage.setItem(pe,JSON.stringify(r))}catch{}return r}))}),[pe]),qe=t.useMemo((()=>j.lodashExports.debounce((e=>T(e)),500)),[T]);t.useEffect((()=>()=>{qe.cancel()}),[qe]);const xe=t.useCallback((e=>{P(e),qe(e)}),[qe]),Ce=t.useCallback((e=>{he(e)}),[he]);t.useEffect((()=>{if(!S.get("q")){const e=S.get(`filter_${A}`);if(e){let t=e;if("%USERNAME%"===t){const e=re();if(!e)return;t=e}P(t),T(t),V.current=t}}}),[A,S,re]),t.useEffect((()=>{const e=S.get("q")||"";e!==V.current&&(P(e),T(e),V.current=e,G.current="")}),[S]),t.useEffect((()=>(z.current&&clearTimeout(z.current),z.current=setTimeout((()=>{if(V.current!==B){const e={title:v,tag:A};y&&(e.contentTitle=y),B&&(e.q=B),k&&(e.loadAll="true"),w(e,{replace:!0}),V.current=B}}),500),()=>{z.current&&clearTimeout(z.current)})),[B,A,v,y,k,w]),t.useEffect((()=>{J.current=!0;const e=`${A}-${y}-${k}-${Q}-${I}`;if(e===G.current)return;G.current=e;const t=y?`${A}-${I}-${y}`:`${A}-${I||"all"}`,r=s.dataCache.get(t);if(!r){if(O(!1),F(!0),y)_.getMessagesFast([A],I).then((e=>{if(!J.current)return void F(!1);const r=e.map((e=>{const t=new Date(e.createdAt).toLocaleString();return{id:e.id,data:{[y]:new o.default(e.content).content,createdAt:t},fileId:null,fileIds:[],tags:[A],mentions:[_.codicent],createdAt:t}}));s.dataCache.set(t,r),J.current&&N(r)})).catch(console.warn).finally((()=>F(!1)));else{const e=I||"",r=k||e?void 0:f;_.readDataMessages(A,e,void 0,0,r).then((r=>{s.dataCache.set(t,r),J.current?(N(r),O(!k&&!e&&r.length===f)):F(!1)})).catch(console.warn).finally((()=>F(!1)))}return()=>{J.current=!1}}if(N(r),O(!k&&!y&&r.length>=f),!y&&!I&&r.length>0){const e=r.reduce(((e,t)=>t.createdAt>e?t.createdAt:e),r[0].createdAt);_.readDataMessages(A,"",void 0,void 0,void 0,e).then((e=>{J.current&&N((r=>{const a=new Set(r.map((e=>e.id))),n=e.filter((e=>!a.has(e.id)));if(0===n.length)return r;const o=[...n,...r];return s.dataCache.set(t,o),o}))})).catch(console.warn)}}),[_,A,y,k,I,Q]);const Se=t.useMemo((()=>{const e={};S.forEach(((t,r)=>{r.startsWith("filter_")&&(e[r.replace("filter_","")]=t)}));let t=$.map(((e,t)=>({item:e,index:t})));for(const[r,a]of Object.entries(e)){const e=a.replace("%USERNAME%",re()),n=q.context.nickname||"";t=t.filter((({item:t})=>{const a=t.data[r];return null!=a&&(String(a).includes(e)||String(a).includes(n))}))}if(C){const e=C(t.map((({item:e})=>e)),A),r=new Set(e.map((e=>e.id)));t=t.filter((({item:e})=>r.has(e.id)))}return t.map((({item:e,index:t})=>({...e.data,createdAt:e.createdAt,_id:e.id,originalMessageId:e.originalMessageId||e.id,_index:t})))}),[$,S,q.context.nickname,re,C,A]),we=t.useMemo((()=>{const e=(B||"").trim().toLowerCase();if(!e)return Se;const t=ae.filter((e=>!e.hidden)).map((e=>e.key));return Se.filter((r=>{for(const a of t)if(Array.isArray(a))for(const t of a){const a=r[t];if(null!=a&&String(a).toLowerCase().includes(e))return!0}else{const t=r[a];if(null!=t&&String(t).toLowerCase().includes(e))return!0}return!1}))}),[Se,B,ae]),Ae=t.useCallback((()=>{s.dataCache.clearPattern(A),G.current="",K((e=>e+1))}),[A]),ve=t.useCallback((async()=>{W(!0);try{const e=await _.readDataMessages(A,"",void 0,$.length,f),t=[...$,...e];N(t),s.dataCache.set(`${A}-all`,t),O(e.length===f)}catch(e){console.warn(e)}finally{W(!1)}}),[$,_,A]),ye=t.useCallback((e=>{Y(e)}),[]),ke=()=>{le(!1),de(null)},be=t.useCallback((async()=>{const e=`${A}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const t=null!==X?X:we;await i.exportToExcel(t,ae,e,ee)||console.warn("No data to export")}),[X,we,ae,A,ee]),De=t.useMemo((()=>null!==X?X.length:we.length),[X,we]);return e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:Z.container,children:[e.jsx("div",{className:Z.backButton,children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowLeft24Regular,{}),onClick:()=>te(-1),children:ee("Tillbaka")})}),e.jsxs("div",{className:Z.headerRow,children:[e.jsx(a.default,{title:ee(v||"Loggbok")}),e.jsxs("div",{className:Z.buttonGroup,children:[e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowClockwise24Regular,{}),onClick:Ae,title:ee("Refresh"),children:ee("Refresh")}),M&&e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowDownload24Regular,{}),onClick:be,title:ee("Export to Excel"),children:ee("Export to Excel")}),(b||E)&&e.jsx(r.Button,{appearance:"primary",icon:e.jsx(n.Add24Regular,{}),onClick:b?()=>{ie(null),se(!0)}:()=>window.open(E,"_blank"),className:Z.addButton,children:ee("Add Record")})]})]}),e.jsx("div",{className:Z.searchBox,children:e.jsx(p.default,{placeholder:ee("Sök")+"...",value:B,onChange:xe,recentSearches:ge,onCommitSearch:Ce,onRemoveRecentSearch:fe})}),!L&&e.jsxs("div",{className:Z.recordsCount,children:[ee("Total"),": ",De," ",ee("records"),De!==$.length&&` (${ee("filtered from")} ${$.length})`]}),e.jsxs("div",{className:Z.listContainer,children:[L&&e.jsx("p",{children:ee("Söker")+"..."}),!L&&e.jsx(m.default,{data:we,columns:ae,canEdit:D,onEdit:(e,t)=>{const r=$[t];r&&(ie({data:{...r.data},index:t}),se(!0))},onDelete:(e,t)=>{const r=$[t];r&&(de({index:t,id:r.id}),le(!0))},onToggleCheckbox:async(e,t,r,a)=>{const n=$[a];if(n){const e=Array.isArray(t)?t[0]:t,o={...n.data,[e]:String(r)},i=await _.updateDataMessage(n.id,o);N((e=>{const t=[...e];return t[a]={...n,id:i,data:o},t})),s.dataCache.clearPattern(A)}},onEnumChange:async(e,t,r,a)=>{const n=$[a];if(n){const e=Array.isArray(t)?t[0]:t,o={...n.data,[e]:r},i=await _.updateDataMessage(n.id,o);N((e=>{const t=[...e];return t[a]={...n,id:i,data:o},t})),s.dataCache.clearPattern(A)}},onFilteredDataChange:ye})]}),U&&!B.trim()&&e.jsx("div",{className:Z.loadMoreContainer,children:e.jsx(r.Button,{appearance:"primary",size:"medium",onClick:ve,disabled:H,children:H?ee("Laddar..."):ee("Visa fler")+` (${$.length} ${ee("laddade")})`})}),e.jsx(g.RecordModal,{open:ne,onClose:()=>se(!1),onSave:async e=>{if(oe){const t=$[oe.index];if(t){const r={};for(const t in e){const a=e[t];r[t]=null==a?"":String(a)}const a=await _.updateDataMessage(t.id,r);N((e=>{const n=[...e];return n[oe.index]={...t,id:a,data:r},n})),s.dataCache.clearPattern(A)}}else{const t={};for(const r in e){const a=e[r];t[r]=null==a?"":String(a)}const r={id:await _.createDataMessage(A,t),data:t,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[A],mentions:[_.codicent]};N((e=>[r,...e])),s.dataCache.clearPattern(A)}},columns:ae,initialData:oe?.data}),e.jsx(r.Dialog,{open:ce,onOpenChange:(e,t)=>!t.open&&ke(),children:e.jsx(r.DialogSurface,{children:e.jsxs(r.DialogBody,{children:[e.jsx(r.DialogTitle,{children:ee("Confirm Delete")}),e.jsx(r.DialogContent,{children:ee("Are you sure you want to delete this record? This action cannot be undone.")}),e.jsxs(r.DialogActions,{children:[e.jsx(r.Button,{appearance:"secondary",onClick:ke,children:ee("Cancel")}),e.jsx(r.Button,{appearance:"primary",onClick:async()=>{if(ue)try{await _.deleteDataMessage(ue.id),N((e=>e.filter(((e,t)=>t!==ue.index)))),s.dataCache.clearPattern(A)}catch(e){console.error("Failed to delete record:",e)}finally{le(!1),de(null)}},children:ee("Delete")})]})]})})})]})})};exports.ListPage=q,exports.default=q;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var r=require("@fluentui/react-components");require("../components/Spinner.js");var a=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("@fluentui/react-icons");require("../services/codicent.js");var s=require("../services/dataCache.js"),o=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/excelExport.js");require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Menu.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js");var c=require("react-router-dom");require("./Purchase.js"),require("../components/Content.js");var l=require("../components/Page.js");require("./QrScan.js");var u=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js");var d=require("../hooks/useUserRoles.js");require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/AiInput.js");var p=require("../components/SearchBox.js");require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js"),require("../components/LanguageSelector.js");var m=require("../components/ListView.js"),g=require("../components/RecordModal.js");require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");var h=require("../node_modules/lodash/lodash.js");const j=r.makeStyles({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),f=500,q=({state:q,getColumnDefs:x,getListConfig:C,filterData:S})=>{const[w,y]=c.useSearchParams(),A=w.get("tag")||"logbook",v=w.get("title")||"",k=w.get("contentTitle"),b="true"===w.get("loadAll"),D="true"===w.get("canAdd"),M="true"===w.get("canEdit"),B="false"!==w.get("canExport"),E=w.get("addUrl")||"",R=w.get("q")||"",[P,I]=t.useState(R),[T,_]=t.useState(R),{service:$}=q,[N,L]=t.useState([]),[F,U]=t.useState(!1),[O,H]=t.useState(!1),[W,z]=t.useState(!1),V=t.useRef(null),G=t.useRef(R),J=t.useRef(""),Q=t.useRef(!0),[K,X]=t.useState(0),[Y,Z]=t.useState(null),ee=j(),{t:te}=u.default(),re=c.useNavigate(),{getCurrentUserName:ae}=d.useUserRoles($,q.context.nickname,q.context.selectedApp),ne=t.useMemo((()=>(k?[{key:k,title:k,maxWidth:250}]:C?C(A)?.columns??[]:x?x(A):[]).map((e=>({...e,title:e.title?te(e.title):void 0})))),[k,A,te,x,C]),[se,oe]=t.useState(!1),[ie,ce]=t.useState(null),[le,ue]=t.useState(!1),[de,pe]=t.useState(null),me=t.useMemo((()=>`listpage_searches_${A}`),[A]),ge=e=>{try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}},[he,je]=t.useState((()=>ge(me)));t.useEffect((()=>{je(ge(me))}),[me]);const fe=t.useCallback((e=>{const t=e.trim();t&&je((e=>{const r=[t,...e.filter((e=>e!==t))].slice(0,20);try{localStorage.setItem(me,JSON.stringify(r))}catch{}return r}))}),[me]),qe=t.useCallback((e=>{je((t=>{const r=t.filter((t=>t!==e));try{localStorage.setItem(me,JSON.stringify(r))}catch{}return r}))}),[me]),xe=t.useMemo((()=>h.lodashExports.debounce((e=>_(e)),500)),[_]);t.useEffect((()=>()=>{xe.cancel()}),[xe]);const Ce=t.useCallback((e=>{I(e),xe(e)}),[xe]),Se=t.useCallback((e=>{fe(e)}),[fe]);t.useEffect((()=>{if(!w.get("q")){const e=w.get(`filter_${A}`);if(e){let t=e;if("%USERNAME%"===t){const e=ae();if(!e)return;t=e}I(t),_(t),G.current=t}}}),[A,w,ae]),t.useEffect((()=>{const e=w.get("q")||"";e!==G.current&&(I(e),_(e),G.current=e,J.current="")}),[w]),t.useEffect((()=>(V.current&&clearTimeout(V.current),V.current=setTimeout((()=>{if(G.current!==P){const e={title:v,tag:A};k&&(e.contentTitle=k),P&&(e.q=P),b&&(e.loadAll="true"),y(e,{replace:!0}),G.current=P}}),500),()=>{V.current&&clearTimeout(V.current)})),[P,A,v,k,b,y]),t.useEffect((()=>{Q.current=!0;const e=`${A}-${k}-${b}-${K}-${T}`;if(e===J.current)return;J.current=e;const t=k?`${A}-${T}-${k}`:`${A}-${T||"all"}`,r=s.dataCache.get(t);if(!r){if(H(!1),U(!0),k)$.getMessagesFast([A],T).then((e=>{if(!Q.current)return void U(!1);const r=e.map((e=>{const t=new Date(e.createdAt).toLocaleString();return{id:e.id,data:{[k]:new o.default(e.content).content,createdAt:t},fileId:null,fileIds:[],tags:[A],mentions:[$.codicent],createdAt:t}}));s.dataCache.set(t,r),Q.current&&L(r)})).catch(console.warn).finally((()=>U(!1)));else{const e=T||"",r=b||e?void 0:f;$.readDataMessages(A,e,void 0,0,r).then((r=>{s.dataCache.set(t,r),Q.current?(L(r),H(!b&&!e&&r.length===f)):U(!1)})).catch(console.warn).finally((()=>U(!1)))}return()=>{Q.current=!1}}if(L(r),H(!b&&!k&&r.length>=f),!k&&!T&&r.length>0){const e=r.reduce(((e,t)=>t.createdAt>e?t.createdAt:e),r[0].createdAt);$.readDataMessages(A,"",void 0,void 0,void 0,e).then((e=>{Q.current&&L((r=>{const a=new Set(r.map((e=>e.id))),n=e.filter((e=>!a.has(e.id)));if(0===n.length)return r;const o=[...n,...r];return s.dataCache.set(t,o),o}))})).catch(console.warn)}}),[$,A,k,b,T,K]);const we=t.useMemo((()=>{const e={};w.forEach(((t,r)=>{r.startsWith("filter_")&&(e[r.replace("filter_","")]=t)}));let t=N.map(((e,t)=>({item:e,index:t})));for(const[r,a]of Object.entries(e)){const e=a.replace("%USERNAME%",ae()),n=q.context.nickname||"";t=t.filter((({item:t})=>{const a=t.data[r];return null!=a&&(String(a).includes(e)||String(a).includes(n))}))}if(S){const e=S(t.map((({item:e})=>e)),A),r=new Set(e.map((e=>e.id)));t=t.filter((({item:e})=>r.has(e.id)))}const r=t.map((({item:e,index:t})=>({...e.data,createdAt:e.createdAt,_id:e.id,originalMessageId:e.originalMessageId||e.id,_index:t}))),a=C?.(A)?.deduplicateBy;if(a){const e=Array.isArray(a)?a:[a],t=t=>{for(const r of e){const e=t[r];if(null!=e&&""!==String(e).trim())return String(e)}},n=new Set;return r.filter((e=>{const r=t(e);return void 0===r||!n.has(r)&&(n.add(r),!0)}))}return r}),[N,w,q.context.nickname,ae,S,A,C]),ye=t.useMemo((()=>{const e=(P||"").trim().toLowerCase();if(!e)return we;const t=ne.filter((e=>!e.hidden)).map((e=>e.key));return we.filter((r=>{for(const a of t)if(Array.isArray(a))for(const t of a){const a=r[t];if(null!=a&&String(a).toLowerCase().includes(e))return!0}else{const t=r[a];if(null!=t&&String(t).toLowerCase().includes(e))return!0}return!1}))}),[we,P,ne]),Ae=t.useCallback((()=>{s.dataCache.clearPattern(A),J.current="",X((e=>e+1))}),[A]),ve=t.useCallback((async()=>{z(!0);try{const e=await $.readDataMessages(A,"",void 0,N.length,f),t=[...N,...e];L(t),s.dataCache.set(`${A}-all`,t),H(e.length===f)}catch(e){console.warn(e)}finally{z(!1)}}),[N,$,A]),ke=t.useCallback((e=>{Z(e)}),[]),be=()=>{ue(!1),pe(null)},De=t.useCallback((async()=>{const e=`${A}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const t=null!==Y?Y:ye;await i.exportToExcel(t,ne,e,te)||console.warn("No data to export")}),[Y,ye,ne,A,te]),Me=t.useMemo((()=>null!==Y?Y.length:ye.length),[Y,ye]);return e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:ee.container,children:[e.jsx("div",{className:ee.backButton,children:e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowLeft24Regular,{}),onClick:()=>re(-1),children:te("Tillbaka")})}),e.jsxs("div",{className:ee.headerRow,children:[e.jsx(a.default,{title:te(v||"Loggbok")}),e.jsxs("div",{className:ee.buttonGroup,children:[e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowClockwise24Regular,{}),onClick:Ae,title:te("Refresh"),children:te("Refresh")}),B&&e.jsx(r.Button,{appearance:"subtle",icon:e.jsx(n.ArrowDownload24Regular,{}),onClick:De,title:te("Export to Excel"),children:te("Export to Excel")}),(D||E)&&e.jsx(r.Button,{appearance:"primary",icon:e.jsx(n.Add24Regular,{}),onClick:D?()=>{ce(null),oe(!0)}:()=>window.open(E,"_blank"),className:ee.addButton,children:te("Add Record")})]})]}),e.jsx("div",{className:ee.searchBox,children:e.jsx(p.default,{placeholder:te("Sök")+"...",value:P,onChange:Ce,recentSearches:he,onCommitSearch:Se,onRemoveRecentSearch:qe})}),!F&&e.jsxs("div",{className:ee.recordsCount,children:[te("Total"),": ",Me," ",te("records"),Me!==N.length&&` (${te("filtered from")} ${N.length})`]}),e.jsxs("div",{className:ee.listContainer,children:[F&&e.jsx("p",{children:te("Söker")+"..."}),!F&&e.jsx(m.default,{data:ye,columns:ne,canEdit:M,onEdit:(e,t)=>{const r=N[t];r&&(ce({data:{...r.data},index:t}),oe(!0))},onDelete:(e,t)=>{const r=N[t];r&&(pe({index:t,id:r.id}),ue(!0))},onToggleCheckbox:async(e,t,r,a)=>{const n=N[a];if(n){const e=Array.isArray(t)?t[0]:t,o={...n.data,[e]:String(r)},i=await $.updateDataMessage(n.id,o);L((e=>{const t=[...e];return t[a]={...n,id:i,data:o},t})),s.dataCache.clearPattern(A)}},onEnumChange:async(e,t,r,a)=>{const n=N[a];if(n){const e=Array.isArray(t)?t[0]:t,o={...n.data,[e]:r},i=await $.updateDataMessage(n.id,o);L((e=>{const t=[...e];return t[a]={...n,id:i,data:o},t})),s.dataCache.clearPattern(A)}},onFilteredDataChange:ke})]}),O&&!P.trim()&&e.jsx("div",{className:ee.loadMoreContainer,children:e.jsx(r.Button,{appearance:"primary",size:"medium",onClick:ve,disabled:W,children:W?te("Laddar..."):te("Visa fler")+` (${N.length} ${te("laddade")})`})}),e.jsx(g.RecordModal,{open:se,onClose:()=>oe(!1),onSave:async e=>{if(ie){const t=N[ie.index];if(t){const r={};for(const t in e){const a=e[t];r[t]=null==a?"":String(a)}const a=await $.updateDataMessage(t.id,r);L((e=>{const n=[...e];return n[ie.index]={...t,id:a,data:r},n})),s.dataCache.clearPattern(A)}}else{const t={};for(const r in e){const a=e[r];t[r]=null==a?"":String(a)}const r={id:await $.createDataMessage(A,t),data:t,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[A],mentions:[$.codicent]};L((e=>[r,...e])),s.dataCache.clearPattern(A)}},columns:ne,initialData:ie?.data}),e.jsx(r.Dialog,{open:le,onOpenChange:(e,t)=>!t.open&&be(),children:e.jsx(r.DialogSurface,{children:e.jsxs(r.DialogBody,{children:[e.jsx(r.DialogTitle,{children:te("Confirm Delete")}),e.jsx(r.DialogContent,{children:te("Are you sure you want to delete this record? This action cannot be undone.")}),e.jsxs(r.DialogActions,{children:[e.jsx(r.Button,{appearance:"secondary",onClick:be,children:te("Cancel")}),e.jsx(r.Button,{appearance:"primary",onClick:async()=>{if(de)try{await $.deleteDataMessage(de.id),L((e=>e.filter(((e,t)=>t!==de.index)))),s.dataCache.clearPattern(A)}catch(e){console.error("Failed to delete record:",e)}finally{ue(!1),pe(null)}},children:te("Delete")})]})]})})})]})})};exports.ListPage=q,exports.default=q;
|
package/dist/cjs/pages/Menu.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface MenuPageProps {
|
|
|
17
17
|
stripeCustomerPortal?: string;
|
|
18
18
|
/** Show the app selector widget (multi-app instances). */
|
|
19
19
|
showAppSelector?: boolean;
|
|
20
|
+
/** URL for a support link shown at the top of the menu list. */
|
|
21
|
+
supportUrl?: string;
|
|
20
22
|
}
|
|
21
23
|
export declare const Menu: React.FC<MenuPageProps>;
|
|
22
24
|
export default Menu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/pages/Menu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8B3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/pages/Menu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8B3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAuIxC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/cjs/pages/Menu.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("@fluentui/react-components"),t=require("react-router-dom"),o=require("../components/Markdown.js");require("../components/Textarea.js");var i=require("../components/Button.js");require("../components/CompoundButton.js"),require("../components/Spinner.js");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("@fluentui/react-components"),t=require("react-router-dom"),o=require("../components/Markdown.js");require("../components/Textarea.js");var i=require("../components/Button.js");require("../components/CompoundButton.js"),require("../components/Spinner.js");var n=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("react"),require("@fluentui/react-icons"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./AppFrame.js"),require("./Canvas.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Log.js"),require("./Login.js"),require("./Home.js"),require("./ListPage.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../components/Content.js");var s=require("../components/Page.js");require("./QrScan.js");var a=require("../hooks/useLocalization.js");require("../components/FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var u=require("../hooks/useAppStyles.js");require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js");var c=require("../components/Profile.js");require("../components/MessageItem.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/DataMessagePicker.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/QrCodeDialog.js"),require("../components/QrScanner.js"),require("../components/OfflineMessage.js");var l=require("../components/LanguageSelector.js");require("../components/ListView.js"),require("../components/RecordModal.js"),require("../components/BulkUploadDialog.js"),require("../components/CookieBanner.js"),require("../components/audit/AuditCircularProgress.js"),require("../components/audit/AuditHorizontalProgress.js"),require("../components/audit/AuditRoleIndicator.js"),require("../components/audit/AuditUnitSwitcher.js"),require("../components/audit/AuditAnswerCell.js"),require("../components/audit/AuditSearchBar.js"),require("../components/audit/AuditFilterChips.js"),require("../components/audit/AuditFilterBar.js"),require("../components/audit/AuditGroupsProgress.js"),require("../components/audit/AuditSummaryDashboard.js"),require("../components/audit/AuditRequirementDialog.js"),require("../components/audit/AuditUnitExportDialog.js"),require("../components/audit/AuditUnitImportDialog.js"),require("../components/audit/AuditBulkExportDialog.js"),require("../components/audit/AuditBulkUploadDialog.js"),require("../components/audit/AuditSortPresets.js");const p=r.makeStyles({container:{backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",touchAction:"pan-y",margin:"0 auto",maxWidth:"800px"},menu_items:{overflowY:"auto",height:"calc(100vh - 130px)",paddingLeft:"10px",paddingRight:"10px"},divider:{fontSize:"20px",fontWeight:"bold",marginTop:"32px",marginBottom:"20px"},appButton:{margin:"2px"}}),d=({state:d,title:j,aboutText:m,version:q,backgroundImageUrl:g,showHelpButton:h,showLogbookButton:x,stripeCustomerPortal:v,showAppSelector:C=!0,supportUrl:b})=>{const A=t.useNavigate(),B=u.default(),S=p(),{auth:f}=d,{t:k}=a.default(),w=m?m.replace("{{version}}",(()=>{const e=new Date,r=e.toISOString().split("T")[0],t=e.getHours().toString().padStart(2,"0");return q||`v${r}.${t}`})()):void 0;return e.jsx(s.Page,{hideHeader:!0,children:e.jsxs("div",{className:S.container,style:{backgroundImage:g?`url(${g})`:void 0},children:[e.jsx(n.default,{title:j||k("Meny")}),e.jsxs("div",{className:S.menu_items,children:[e.jsx(c.default,{state:d}),e.jsx(l.LanguageSelector,{}),e.jsx("hr",{}),b&&e.jsx("div",{children:e.jsx(i.Button,{icon:"QuestionCircle24Regular",size:"large",className:B.menuButton,onClick:()=>window.open(b,"_blank","noopener,noreferrer"),iconPosition:"after",appearance:"transparent",children:k("Support")})}),e.jsx("div",{children:e.jsx(i.Button,{icon:"ChevronRightFilled",size:"large",className:B.menuButton,onClick:()=>{f.logout(),d.stateMachine.logout()},iconPosition:"after",appearance:"transparent",children:k("Logga ut")})}),v&&e.jsx(i.Button,{icon:"Payment24Regular",size:"large",className:B.menuButton,onClick:()=>window.location.href=v,iconPosition:"after",appearance:"transparent",children:k("Abonnemang")}),C&&d.context.apps&&d.context.apps.length>1&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{children:k("Mina codicents")}),d.context.apps.map((t=>e.jsx(i.Button,{className:S.appButton,image:t.logo?e.jsx(r.Image,{src:t.logo,height:"24px"}):void 0,onClick:()=>d.stateMachine.setSelectedApp(t.id),title:t.title||t.id,children:t.title||t.id},t.id)))]}),x&&e.jsxs(e.Fragment,{children:[e.jsx("hr",{}),e.jsx(i.Button,{className:B.menuButton,icon:"ChevronRightFilled",size:"large",appearance:"subtle",iconPosition:"after",onClick:()=>A("/log"),children:k("Loggboken")})]}),e.jsx("hr",{}),w&&e.jsx(o.default,{content:w}),h&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{children:k("Behöver du hjälp?")}),e.jsx(i.Button,{icon:"QuestionCircle24Regular",className:B.button,size:"large",appearance:"subtle",onClick:()=>A("/help"),children:k("Visa hjälp")})]})]})]})})};exports.Menu=d,exports.default=d;
|
|
@@ -29,11 +29,27 @@ export * from "./audit";
|
|
|
29
29
|
import type { ColumnAction, ColumnDefinition } from "../components/ListView";
|
|
30
30
|
export type { ColumnAction, ColumnDefinition };
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Configuration for a single list view, supporting column definitions and optional deduplication.
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export interface ListConfig {
|
|
36
|
+
/** Column definitions for this list */
|
|
37
|
+
columns: ColumnDefinition[];
|
|
38
|
+
/**
|
|
39
|
+
* When set, only the most recent message per unique value of this key is shown.
|
|
40
|
+
* When an array is provided, keys are tried in order and the first truthy value is used.
|
|
41
|
+
* Useful for cases where multiple independent messages represent the same entity
|
|
42
|
+
* (e.g. same customer number or offer number) and only the latest should be displayed.
|
|
43
|
+
*/
|
|
44
|
+
deduplicateBy?: string | string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* List definitions keyed by tag name (e.g., "customer2", "offertjson").
|
|
48
|
+
* Each entry can be a plain column-definition array (backward-compatible) or a full ListConfig.
|
|
33
49
|
* @public
|
|
34
50
|
*/
|
|
35
51
|
export interface ListDefinitions {
|
|
36
|
-
[tagName: string]: ColumnDefinition[];
|
|
52
|
+
[tagName: string]: ColumnDefinition[] | ListConfig;
|
|
37
53
|
}
|
|
38
54
|
/**
|
|
39
55
|
* AI chat instructions configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAGD,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAGD,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,UAAU,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,qEAAqE;IACrE,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,YAAY,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,IAAI,EACJ,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageSelector.d.ts","sourceRoot":"","sources":["../../../src/components/LanguageSelector.tsx"],"names":[],"mappings":"AAuCA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"LanguageSelector.d.ts","sourceRoot":"","sources":["../../../src/components/LanguageSelector.tsx"],"names":[],"mappings":"AAuCA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+D5D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e,jsx as a}from"react/jsx-runtime";import{makeStyles as t,Dropdown as n,Option as o}from"@fluentui/react-components";import r from"../hooks/useLocalization.js";import{useState as l,useEffect as u}from"react";const
|
|
1
|
+
import{jsxs as e,jsx as a}from"react/jsx-runtime";import{makeStyles as t,Dropdown as n,Option as o}from"@fluentui/react-components";import r from"../hooks/useLocalization.js";import{useState as l,useEffect as u}from"react";const i=t({container:{marginTop:"16px",marginBottom:"16px"},label:{fontSize:"14px",fontWeight:"600",marginBottom:"8px"}}),s=[{key:"en",name:"English"},{key:"sv",name:"Svenska"},{key:"de",name:"Deutsch"},{key:"dk",name:"Dansk"},{key:"fr",name:"Français"},{key:"no",name:"Norsk"},{key:"zh",name:"中文"},{key:"pl",name:"Polski"}],g=e=>{if("undefined"!=typeof navigator&&navigator.language){const a=navigator.language.toLowerCase().split("-")[0];if(e.some((e=>e.key===a)))return a}return"en"},m=({languages:t=s,defaultLanguage:m="en"})=>{const c=i(),{t:k,currentLanguage:f,setCurrentLanguage:p}=r(),[d,y]=l((()=>localStorage.getItem("user_language")||"auto"));u((()=>{const e=localStorage.getItem("user_language");y(e&&"auto"!==e?e:"auto")}),[f]);const h=g(t),v=t.find((e=>e.key===h))?.name||"English";return e("div",{className:c.container,children:[a("div",{className:c.label,children:k("Language")}),e(n,{value:"auto"===d?`${k("Auto")} (${v})`:t.find((e=>e.key===d))?.name||k("Select language"),selectedOptions:[d],onOptionSelect:(e,a)=>{const n=a.optionValue??a.value;if(n)if(y(n),"auto"===n){const e=g(t);localStorage.setItem("user_language","auto"),p(e)}else localStorage.setItem("user_language",n),p(n)},children:[e(o,{value:"auto",text:`${k("Auto")} (${v})`,children:[k("Auto")," (",v,")"]}),t.map((e=>a(o,{value:e.key,text:e.name,children:e.name},e.key)))]})]})};export{m as LanguageSelector,m as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/components/ListView.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAmB5D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,kHAAkH;IAClH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqLD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1E,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,2HAA2H;IAC3H,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,wFAAwF;IACxF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kFAAkF;IAClF,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,2HAA2H;IAC3H,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oIAAoI;IACpI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AA2GD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/components/ListView.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAmB5D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,kHAAkH;IAClH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpD,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqLD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1E,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,2HAA2H;IAC3H,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,wFAAwF;IACxF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kFAAkF;IAClF,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,2HAA2H;IAC3H,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oIAAoI;IACpI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AA2GD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmiB5C,CAAC;;AAGF,wBAAoC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import i,{useMemo as r,useState as o,useEffect as l}from"react";import{makeStyles as a,Button as c,Checkbox as s,Select as d,Dialog as p,DialogSurface as h,DialogBody as u,DialogTitle as m,DialogContent as f,Combobox as x,Option as g,Tooltip as y}from"@fluentui/react-components";import{Edit24Regular as b,Delete24Regular as w}from"@fluentui/react-icons";import{CodicentService as C}from"../services/codicent.js";import k from"../hooks/useLocalization.js";const v=a({container:{width:"100%",overflowX:"auto",userSelect:"text"},table:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",fontSize:"14px",tableLayout:"fixed",userSelect:"text"},th:{textAlign:"left",padding:"12px 8px",borderBottom:"2px solid #e0e0e0",fontWeight:"600",backgroundColor:"#f5f5f5",position:"sticky",top:0,zIndex:1,cursor:"pointer",userSelect:"none","&:hover":{backgroundColor:"#e8e8e8"}},td:{padding:"12px 8px",borderBottom:"1px solid #e0e0e0",verticalAlign:"top",wordWrap:"break-word",overflow:"hidden",userSelect:"text"},tdTruncated:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap","@media (hover: none)":{cursor:"pointer"}},tr:{"&:hover":{backgroundColor:"#f9f9f9"}},emptyState:{padding:"20px",textAlign:"center",color:"#666"},sortIndicator:{marginLeft:"4px",fontSize:"10px"},hideOnMobile:{"@media (max-width: 768px)":{display:"none"}},dialogContent:{wordWrap:"break-word",whiteSpace:"pre-wrap",maxHeight:"60vh",overflowY:"auto"},thumbnail:{maxWidth:"50px",maxHeight:"50px",objectFit:"cover"},tooltip:{maxWidth:"600px",whiteSpace:"normal",wordWrap:"break-word"},editButton:{minWidth:"auto",padding:"4px 8px"},actionsColumn:{width:"100px",textAlign:"center"},filterInput:{width:"100%",padding:"4px 8px",fontSize:"14px",border:"1px solid #e0e0e0",borderRadius:"4px",paddingRight:"28px"},filterWrapper:{position:"relative"},clearFilterButton:{position:"absolute",right:"6px",top:"50%",transform:"translateY(-50%)",minWidth:"auto",height:"20px",padding:"0 6px",lineHeight:"18px"},filterToolbar:{display:"flex",justifyContent:"flex-end",padding:"8px",gap:"8px"},cellWithAction:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},actionIcon:{minWidth:"auto",padding:"2px",marginLeft:"4px",flexShrink:0,cursor:"pointer",opacity:.7,"&:hover":{opacity:1}},cellText:{flex:1,overflow:"hidden",textOverflow:"ellipsis"}}),S=e=>{if(/^\d{4}-\d{2}-\d{2}/.test(e)){const t=new Date(e);if(!isNaN(t.getTime()))return t.getTime()}const t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})/);if(t){const e=parseInt(t[1],10),n=parseInt(t[2],10)-1,i=parseInt(t[3],10),r=new Date(i,n,e);if(r.getFullYear()===i&&r.getMonth()===n&&r.getDate()===e)return r.getTime()}return null},N=(e,t)=>{if("string"==typeof t)return e[t];for(const n of t)if(void 0!==e[n])return e[n]},W=({value:t,options:n,optionsLoader:a,minChars:c=2,maxResults:s=50,columnKey:d,item:p,actualIndex:h,onEnumChange:u,label:m,t:f})=>{const[y,b]=o(t),[w,C]=o([]),[k,v]=o(!1),S=i.useRef(null);l((()=>{b(t)}),[t]),l((()=>{if(a){if(!(y.length<c))return S.current&&clearTimeout(S.current),S.current=setTimeout((async()=>{v(!0);try{const e=await a(y);C(e.slice(0,s))}finally{v(!1)}}),250),()=>{S.current&&clearTimeout(S.current)};C([])}}),[y,a,c,s]);const N=r((()=>(n??[]).filter((e=>e.toLowerCase().includes(y.toLowerCase()))).slice(0,s)),[n,y,s]),W=a?w:N;return e(x,{value:y,freeform:!0,"aria-label":m,placeholder:k?f("Loading..."):a&&y.length<c?f(`Type ${c}+ characters to search...`):void 0,onChange:e=>b(e.target.value),onOptionSelect:(e,t)=>{t.optionValue&&(b(t.optionValue),u&&u(p,d,t.optionValue,h))},onBlur:()=>{u&&u(p,d,y,h)},style:{width:"100%"},children:W.map((t=>e(g,{value:t,children:t},t)))})},O=({data:i,columns:a,canEdit:x,onEdit:g,onDelete:O,onToggleCheckbox:$,onEnumChange:I,onFilteredDataChange:L})=>{const A=v(),{visibleColumns:T,defaultSortIndex:M,defaultSortDirection:j}=r((()=>{const e=i&&i.length>0?Array.from(new Set(i.flatMap((e=>Object.keys(e))))):[],t=(a||e.map((e=>({key:e})))).filter((e=>!e.hidden)),n=t.findIndex((e=>e.defaultSort));return{visibleColumns:t,defaultSortIndex:n,defaultSortDirection:n>=0&&t[n].defaultSort||null}}),[i,a]),[D,F]=o(M>=0?M:null),[B,z]=o(j),[E,R]=o(!1),[H,Y]=o({title:"",text:""}),[P,V]=o({}),[K,_]=o(0),{t:J}=k(),U=e=>e.title?J(e.title):Array.isArray(e.key)?e.key[0]:e.key,X=e=>{const t=[];return e.hideOnMobile&&t.push(A.hideOnMobile),t.join(" ")},q=e=>null==e||"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?"":"object"==typeof e?JSON.stringify(e):String(e),G=r((()=>{const e=[...i];if(null!==D&&B){const t=T[D];e.sort(((e,n)=>{const i=N(e,t.key),r=N(n,t.key);if(null==i)return 1;if(null==r)return-1;let o=0;if("string"==typeof i&&"string"==typeof r){const e=S(i),t=S(r);if(null!==e&&null!==t)o=e-t;else{const e=i.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),t=r.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),n=Number(e),l=Number(t);o=""!==e&&""!==t&&isFinite(n)&&isFinite(l)?n-l:i.localeCompare(r)}}else o="number"==typeof i&&"number"==typeof r?i-r:String(i).localeCompare(String(r));return"asc"===B?o:-o}))}return e}),[i,D,B,T]),Q=r((()=>G.filter((e=>{for(const[t,n]of Object.entries(P)){const i=parseInt(t),r=T[i],o=N(e,r.key),l=q(o).toLowerCase(),a=n.toLowerCase();if(!l.includes(a))return!1}return!0}))),[G,P,T]);l((()=>{L&&L(Q)}),[Q,L]);const Z="undefined"!=typeof window?window.innerHeight-250:600,ee=Math.max(0,Math.floor(K/49)-5),te=Math.min(Q.length,Math.ceil((K+Z)/49)+5),ne=Q.slice(ee,te),ie=49*Q.length,re=49*ee,oe=(e,t)=>{if(void 0!==e.id)return String(e.id);return`row-${t}-${(e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)})(T.slice(0,3).map((t=>String(N(e,t.key)??""))).join("-"))}`};return i&&0!==i.length?t(n,{children:[e("div",{className:A.container,onScroll:e=>{_(e.currentTarget.scrollTop)},style:{maxHeight:"calc(100vh - 200px)",overflowY:"auto"},children:t("table",{className:A.table,children:[t("thead",{children:[t("tr",{children:[T.map(((n,i)=>{const r=n.maxWidth?{width:`${n.maxWidth}px`,maxWidth:`${n.maxWidth}px`}:{};return t("th",{className:`${A.th} ${X(n)}`.trim(),style:r,onClick:()=>(e=>{D===e?"asc"===B?z("desc"):"desc"===B&&(F(null),z(null)):(F(e),z("asc"))})(i),children:[U(n),D===i&&e("span",{className:A.sortIndicator,children:"asc"===B?"▲":"▼"})]},i)})),x&&e("th",{className:`${A.th} ${A.actionsColumn}`,style:{width:"100px"},children:J("Actions")})]}),t("tr",{children:[T.map(((n,i)=>{const r=n.maxWidth?{width:`${n.maxWidth}px`,maxWidth:`${n.maxWidth}px`}:{};return e("th",{className:X(n),style:r,children:n.filterable&&t("div",{className:A.filterWrapper,children:[e("input",{type:"text",className:A.filterInput,placeholder:J("Filter")+"...",value:P[i]||"",onChange:e=>((e,t)=>{V((n=>{const i={...n};return""===t.trim()?delete i[e]:i[e]=t,i}))})(i,e.target.value),onClick:e=>e.stopPropagation()}),(P[i]||"").length>0&&e(c,{appearance:"subtle",className:A.clearFilterButton,onClick:e=>{e.stopPropagation(),(e=>{V((t=>{const n={...t};return delete n[e],n}))})(i)},children:"×"})]})},i)})),x&&e("th",{className:A.actionsColumn})]})]}),t("tbody",{children:[ee>0&&e("tr",{style:{height:`${re}px`},children:e("td",{colSpan:T.length+(x?1:0),style:{padding:0,border:"none"}})}),ne.map(((n,i)=>{const r=n._index,o="number"==typeof r?r:ee+i;return t("tr",{className:A.tr,children:[T.map(((i,r)=>{const l=N(n,i.key),a=i.format?i.format(l):q(l),p=i.maxWidth?`${A.td} ${A.tdTruncated} ${X(i)}`.trim():`${A.td} ${X(i)}`.trim(),h=()=>{window.matchMedia("(hover: hover)").matches||i.maxWidth&&a.length>0&&(Y({title:U(i),text:a}),R(!0))};if("file"===i.type&&a)return e("td",{className:p,onClick:h,children:e("a",{href:C.getFileUrl(a),target:"_blank",rel:"noopener noreferrer",children:J("Download")})},r);if("checkbox"===i.type){return e("td",{className:p,children:e(s,{checked:!0===l||"true"===l||"yes"===l||"1"===l,onChange:(e,t)=>{$&&$(n,i.key,!0===t.checked,o)}})},r)}if("enum"===i.type&&i.enumOptions&&i.editable)return e("td",{className:p,children:t(d,{value:a,"aria-label":i.title?J(i.title):Array.isArray(i.key)?i.key[0]:i.key,onChange:(e,t)=>{I&&I(n,i.key,t.value,o)},style:{width:"100%"},children:[!i.enumOptions.includes(a)&&a&&e("option",{value:a,children:a}),i.enumOptions.map((t=>e("option",{value:t,children:J(t)},t)))]})},r);if("combobox"===i.type&&i.editable&&(i.enumOptions||i.enumOptionsLoader))return e("td",{className:p,children:e(W,{value:a,options:i.enumOptions,optionsLoader:i.enumOptionsLoader,minChars:i.enumOptionsLoaderMinChars,maxResults:i.enumOptionsLoaderMaxResults,columnKey:i.key,item:n,actualIndex:o,onEnumChange:I,label:i.title?J(i.title):Array.isArray(i.key)?i.key[0]:i.key,t:J})},r);const u=()=>i.maxWidth&&a.length>0?e(y,{content:{children:a,style:{maxWidth:"600px",whiteSpace:"normal"}},relationship:"description",children:e("span",{children:a})}):a,m=()=>{if(!i.action)return null;const t=i.action,r=i.action.icon,o=e(c,{appearance:"subtle",icon:e(r,{}),className:A.actionIcon,onClick:e=>{e.stopPropagation(),t.onClick(n)},size:"small"});return t.tooltip?e(y,{content:J(t.tooltip),relationship:"label",children:o}):o};return e("td",{className:p,onClick:h,children:i.action?t("div",{className:A.cellWithAction,children:[i.action.iconLeft&&m(),e("span",{className:A.cellText,children:u()}),!i.action.iconLeft&&m()]}):u()},r)})),x&&(g||O)&&e("td",{className:`${A.td} ${A.actionsColumn}`,children:t("div",{style:{display:"flex",gap:"4px",justifyContent:"center"},children:[g&&e(c,{appearance:"subtle",icon:e(b,{}),className:A.editButton,onClick:()=>g(n,o),title:J("Edit")}),O&&e(c,{appearance:"subtle",icon:e(w,{}),className:A.editButton,onClick:()=>O(n,o),title:J("Delete")})]})})]},oe(n,o))})),te<Q.length&&e("tr",{style:{height:ie-re-49*ne.length+"px"},children:e("td",{colSpan:T.length+(x?1:0),style:{padding:0,border:"none"}})})]})]})}),e(p,{open:E,onOpenChange:(e,t)=>R(t.open),children:e(h,{children:t(u,{children:[e(m,{children:H.title}),e(f,{className:A.dialogContent,children:H.text})]})})})]}):e("div",{className:A.emptyState,children:J("No data to display")})};var $=i.memo(O);export{O as ListView,$ as default};
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import i,{useMemo as r,useState as o,useEffect as l}from"react";import{makeStyles as a,Select as c,Button as s,Checkbox as d,Dialog as p,DialogSurface as u,DialogBody as h,DialogTitle as m,DialogContent as f,Combobox as x,Option as g,Tooltip as y}from"@fluentui/react-components";import{Edit24Regular as b,Delete24Regular as w}from"@fluentui/react-icons";import{CodicentService as C}from"../services/codicent.js";import v from"../hooks/useLocalization.js";const k=a({container:{width:"100%",overflowX:"auto",userSelect:"text"},table:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",fontSize:"14px",tableLayout:"fixed",userSelect:"text"},th:{textAlign:"left",padding:"12px 8px",borderBottom:"2px solid #e0e0e0",fontWeight:"600",backgroundColor:"#f5f5f5",position:"sticky",top:0,zIndex:1,cursor:"pointer",userSelect:"none","&:hover":{backgroundColor:"#e8e8e8"}},td:{padding:"12px 8px",borderBottom:"1px solid #e0e0e0",verticalAlign:"top",wordWrap:"break-word",overflow:"hidden",userSelect:"text"},tdTruncated:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap","@media (hover: none)":{cursor:"pointer"}},tr:{"&:hover":{backgroundColor:"#f9f9f9"}},emptyState:{padding:"20px",textAlign:"center",color:"#666"},sortIndicator:{marginLeft:"4px",fontSize:"10px"},hideOnMobile:{"@media (max-width: 768px)":{display:"none"}},dialogContent:{wordWrap:"break-word",whiteSpace:"pre-wrap",maxHeight:"60vh",overflowY:"auto"},thumbnail:{maxWidth:"50px",maxHeight:"50px",objectFit:"cover"},tooltip:{maxWidth:"600px",whiteSpace:"normal",wordWrap:"break-word"},editButton:{minWidth:"auto",padding:"4px 8px"},actionsColumn:{width:"100px",textAlign:"center"},filterInput:{width:"100%",padding:"4px 8px",fontSize:"14px",border:"1px solid #e0e0e0",borderRadius:"4px",paddingRight:"28px"},filterWrapper:{position:"relative"},clearFilterButton:{position:"absolute",right:"6px",top:"50%",transform:"translateY(-50%)",minWidth:"auto",height:"20px",padding:"0 6px",lineHeight:"18px"},filterToolbar:{display:"flex",justifyContent:"flex-end",padding:"8px",gap:"8px"},cellWithAction:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},actionIcon:{minWidth:"auto",padding:"2px",marginLeft:"4px",flexShrink:0,cursor:"pointer",opacity:.7,"&:hover":{opacity:1}},cellText:{flex:1,overflow:"hidden",textOverflow:"ellipsis"}}),N=e=>{if(/^\d{4}-\d{2}-\d{2}/.test(e)){const t=new Date(e);if(!isNaN(t.getTime()))return t.getTime()}const t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})/);if(t){const e=parseInt(t[1],10),n=parseInt(t[2],10)-1,i=parseInt(t[3],10),r=new Date(i,n,e);if(r.getFullYear()===i&&r.getMonth()===n&&r.getDate()===e)return r.getTime()}return null},S=(e,t)=>{if("string"==typeof t)return e[t];for(const n of t)if(void 0!==e[n])return e[n]},W=({value:t,options:n,optionsLoader:a,minChars:c=2,maxResults:s=50,columnKey:d,item:p,actualIndex:u,onEnumChange:h,label:m,t:f})=>{const[y,b]=o(t),[w,C]=o([]),[v,k]=o(!1),N=i.useRef(null);l((()=>{b(t)}),[t]),l((()=>{if(a){if(!(y.length<c))return N.current&&clearTimeout(N.current),N.current=setTimeout((async()=>{k(!0);try{const e=await a(y);C(e.slice(0,s))}finally{k(!1)}}),250),()=>{N.current&&clearTimeout(N.current)};C([])}}),[y,a,c,s]);const S=r((()=>(n??[]).filter((e=>e.toLowerCase().includes(y.toLowerCase()))).slice(0,s)),[n,y,s]),W=a?w:S;return e(x,{value:y,freeform:!0,"aria-label":m,placeholder:v?f("Loading..."):a&&y.length<c?f(`Type ${c}+ characters to search...`):void 0,onChange:e=>b(e.target.value),onOptionSelect:(e,t)=>{t.optionValue&&(b(t.optionValue),h&&h(p,d,t.optionValue,u))},onBlur:()=>{h&&h(p,d,y,u)},style:{width:"100%"},children:W.map((t=>e(g,{value:t,children:t},t)))})},O=({data:i,columns:a,canEdit:x,onEdit:g,onDelete:O,onToggleCheckbox:$,onEnumChange:I,onFilteredDataChange:L})=>{const A=k(),{visibleColumns:T,defaultSortIndex:M,defaultSortDirection:j}=r((()=>{const e=i&&i.length>0?Array.from(new Set(i.flatMap((e=>Object.keys(e))))):[],t=(a||e.map((e=>({key:e})))).filter((e=>!e.hidden)),n=t.findIndex((e=>e.defaultSort));return{visibleColumns:t,defaultSortIndex:n,defaultSortDirection:n>=0&&t[n].defaultSort||null}}),[i,a]),[D,F]=o(M>=0?M:null),[B,z]=o(j),[E,R]=o(!1),[H,P]=o({title:"",text:""}),[Y,V]=o({}),[K,_]=o(0),{t:J}=v(),U=e=>e.title?J(e.title):Array.isArray(e.key)?e.key[0]:e.key,X=e=>{const t=[];return e.hideOnMobile&&t.push(A.hideOnMobile),t.join(" ")},q=(e,t)=>{V((n=>{const i={...n};return""===t.trim()?delete i[e]:i[e]=t,i}))},G=e=>null==e||"string"==typeof e&&e.startsWith("[")&&e.endsWith("]")?"":"object"==typeof e?JSON.stringify(e):String(e),Q=r((()=>{const e=[...i];if(null!==D&&B){const t=T[D];e.sort(((e,n)=>{const i=S(e,t.key),r=S(n,t.key);if(null==i)return 1;if(null==r)return-1;let o=0;if("string"==typeof i&&"string"==typeof r){const e=N(i),t=N(r);if(null!==e&&null!==t)o=e-t;else{const e=i.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),t=r.trim().replace(/[\s\u00a0]/g,"").replace(/,/g,""),n=Number(e),l=Number(t);o=""!==e&&""!==t&&isFinite(n)&&isFinite(l)?n-l:i.localeCompare(r)}}else o="number"==typeof i&&"number"==typeof r?i-r:String(i).localeCompare(String(r));return"asc"===B?o:-o}))}return e}),[i,D,B,T]),Z=r((()=>Q.filter((e=>{for(const[t,n]of Object.entries(Y)){const i=parseInt(t),r=T[i],o=S(e,r.key),l=G(o).toLowerCase(),a=n.toLowerCase();if(!("enum"===r.type&&r.enumOptions?l===a:l.includes(a)))return!1}return!0}))),[Q,Y,T]);l((()=>{L&&L(Z)}),[Z,L]);const ee="undefined"!=typeof window?window.innerHeight-250:600,te=Math.max(0,Math.floor(K/49)-5),ne=Math.min(Z.length,Math.ceil((K+ee)/49)+5),ie=Z.slice(te,ne),re=49*Z.length,oe=49*te,le=(e,t)=>{if(void 0!==e.id)return String(e.id);return`row-${t}-${(e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)})(T.slice(0,3).map((t=>String(S(e,t.key)??""))).join("-"))}`};return i&&0!==i.length?t(n,{children:[e("div",{className:A.container,onScroll:e=>{_(e.currentTarget.scrollTop)},style:{maxHeight:"calc(100vh - 200px)",overflowY:"auto"},children:t("table",{className:A.table,children:[t("thead",{children:[t("tr",{children:[T.map(((n,i)=>{const r=n.maxWidth?{width:`${n.maxWidth}px`,maxWidth:`${n.maxWidth}px`}:{};return t("th",{className:`${A.th} ${X(n)}`.trim(),style:r,onClick:()=>(e=>{D===e?"asc"===B?z("desc"):"desc"===B&&(F(null),z(null)):(F(e),z("asc"))})(i),children:[U(n),D===i&&e("span",{className:A.sortIndicator,children:"asc"===B?"▲":"▼"})]},i)})),x&&e("th",{className:`${A.th} ${A.actionsColumn}`,style:{width:"100px"},children:J("Actions")})]}),t("tr",{children:[T.map(((i,r)=>{const o=i.maxWidth?{width:`${i.maxWidth}px`,maxWidth:`${i.maxWidth}px`}:{};return e("th",{className:X(i),style:o,children:i.filterable&&e("div",{className:A.filterWrapper,children:"enum"===i.type&&i.enumOptions?t(c,{className:A.filterInput,value:Y[r]||"",onChange:(e,t)=>q(r,t.value),onClick:e=>e.stopPropagation(),children:[e("option",{value:"",children:J("All")}),i.enumOptions.filter((e=>""!==e)).map((t=>e("option",{value:t,children:J(t)},t)))]}):t(n,{children:[e("input",{type:"text",className:A.filterInput,placeholder:J("Filter")+"...",value:Y[r]||"",onChange:e=>q(r,e.target.value),onClick:e=>e.stopPropagation()}),(Y[r]||"").length>0&&e(s,{appearance:"subtle",className:A.clearFilterButton,onClick:e=>{e.stopPropagation(),(e=>{V((t=>{const n={...t};return delete n[e],n}))})(r)},children:"×"})]})})},r)})),x&&e("th",{className:A.actionsColumn})]})]}),t("tbody",{children:[te>0&&e("tr",{style:{height:`${oe}px`},children:e("td",{colSpan:T.length+(x?1:0),style:{padding:0,border:"none"}})}),ie.map(((n,i)=>{const r=n._index,o="number"==typeof r?r:te+i;return t("tr",{className:A.tr,children:[T.map(((i,r)=>{const l=S(n,i.key),a=i.format?i.format(l):G(l),p=i.maxWidth?`${A.td} ${A.tdTruncated} ${X(i)}`.trim():`${A.td} ${X(i)}`.trim(),u=()=>{window.matchMedia("(hover: hover)").matches||i.maxWidth&&a.length>0&&(P({title:U(i),text:a}),R(!0))};if("file"===i.type&&a)return e("td",{className:p,onClick:u,children:e("a",{href:C.getFileUrl(a),target:"_blank",rel:"noopener noreferrer",children:J("Download")})},r);if("checkbox"===i.type){return e("td",{className:p,children:e(d,{checked:!0===l||"true"===l||"yes"===l||"1"===l,onChange:(e,t)=>{$&&$(n,i.key,!0===t.checked,o)}})},r)}if("enum"===i.type&&i.enumOptions&&i.editable)return e("td",{className:p,children:t(c,{value:a,"aria-label":i.title?J(i.title):Array.isArray(i.key)?i.key[0]:i.key,onChange:(e,t)=>{I&&I(n,i.key,t.value,o)},style:{width:"100%"},children:[!i.enumOptions.includes(a)&&a&&e("option",{value:a,children:a}),i.enumOptions.map((t=>e("option",{value:t,children:J(t)},t)))]})},r);if("combobox"===i.type&&i.editable&&(i.enumOptions||i.enumOptionsLoader))return e("td",{className:p,children:e(W,{value:a,options:i.enumOptions,optionsLoader:i.enumOptionsLoader,minChars:i.enumOptionsLoaderMinChars,maxResults:i.enumOptionsLoaderMaxResults,columnKey:i.key,item:n,actualIndex:o,onEnumChange:I,label:i.title?J(i.title):Array.isArray(i.key)?i.key[0]:i.key,t:J})},r);const h=()=>i.maxWidth&&a.length>0?e(y,{content:{children:a,style:{maxWidth:"600px",whiteSpace:"normal"}},relationship:"description",children:e("span",{children:a})}):a,m=()=>{if(!i.action)return null;const t=i.action,r=i.action.icon,o=e(s,{appearance:"subtle",icon:e(r,{}),className:A.actionIcon,onClick:e=>{e.stopPropagation(),t.onClick(n)},size:"small"});return t.tooltip?e(y,{content:J(t.tooltip),relationship:"label",children:o}):o};return e("td",{className:p,onClick:u,children:i.action?t("div",{className:A.cellWithAction,children:[i.action.iconLeft&&m(),e("span",{className:A.cellText,children:h()}),!i.action.iconLeft&&m()]}):h()},r)})),x&&(g||O)&&e("td",{className:`${A.td} ${A.actionsColumn}`,children:t("div",{style:{display:"flex",gap:"4px",justifyContent:"center"},children:[g&&e(s,{appearance:"subtle",icon:e(b,{}),className:A.editButton,onClick:()=>g(n,o),title:J("Edit")}),O&&e(s,{appearance:"subtle",icon:e(w,{}),className:A.editButton,onClick:()=>O(n,o),title:J("Delete")})]})})]},le(n,o))})),ne<Z.length&&e("tr",{style:{height:re-oe-49*ie.length+"px"},children:e("td",{colSpan:T.length+(x?1:0),style:{padding:0,border:"none"}})})]})]})}),e(p,{open:E,onOpenChange:(e,t)=>R(t.open),children:e(u,{children:t(h,{children:[e(m,{children:H.title}),e(f,{className:A.dialogContent,children:H.text})]})})})]}):e("div",{className:A.emptyState,children:J("No data to display")})};var $=i.memo(O);export{O as ListView,$ as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocalization.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLocalization.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"useLocalization.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLocalization.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6GD,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAa/C,QAAA,MAAM,eAAe;aA2CX,MAAM;kBAkFA,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;;+BApGC,MAAM;;;CA2K9C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as t,useEffect as e,useCallback as n}from"react";import
|
|
1
|
+
import{useState as t,useEffect as e,useCallback as n}from"react";import a from"../node_modules/i18next/dist/esm/i18next.js";import{CodicentService as r}from"../services/codicent.js";import{getConfigValue as o}from"../config/index.js";import{initReactI18next as s}from"../node_modules/react-i18next/dist/es/initReactI18next.js";import{useTranslation as i}from"../node_modules/react-i18next/dist/es/useTranslation.js";const l=()=>{const t=o("FORCE_LANGUAGE");if(t)return{source:"force_config",language:t};if("undefined"!=typeof window){const t=new URLSearchParams(window.location.search),e=t.get("lang")||t.get("language");if(e)return{source:"url_param",language:e}}if("undefined"!=typeof window&&"undefined"!=typeof localStorage){const t=localStorage.getItem("user_language");if(t&&"auto"!==t)return{source:"user_preference",language:t};if("auto"===t&&"undefined"!=typeof navigator&&navigator.language){return{source:"browser",language:navigator.language.split("-")[0]}}}const e=o("DEFAULT_LANGUAGE");if(e)return{source:"default",language:e};if("undefined"!=typeof navigator&&navigator.language){return{source:"browser",language:navigator.language.split("-")[0]}}return{source:"default",language:"sv"}},c=()=>l().language,g=()=>{const t=o("TRANSLATIONS");if(t){const e={};for(const[n,a]of Object.entries(t))e[n]={translation:a};return e}return{en:{translation:{Hello:"Hello"}},sv:{translation:{Hello:"Hej"}}}},u=()=>{if(a.isInitialized){const t=g();Object.keys(t).forEach((e=>{a.addResourceBundle(e,"translation",t[e].translation,!0,!0)}))}else a.use(s).init({resources:g(),lng:c(),fallbackLng:o("DEFAULT_LANGUAGE")||"sv",interpolation:{escapeValue:!1}})};u();const d=new Set;let f=JSON.parse(localStorage.getItem("app-translations")||"{}");const m=new Set,p=()=>{const{t:a,i18n:s}=i(),[g,p]=t((()=>c())),[_,h]=t(f);e((()=>{if(globalThis.__CODICENT_REINIT_I18N__){u(),globalThis.__CODICENT_REINIT_I18N__=!1;const t=c();p(t)}}),[]),e((()=>{s.changeLanguage(g)}),[g,s]);const A=n((t=>{const{source:e}=l();"force_config"!==e?"url_param"!==e?p(t):console.warn("Language setting ignored due to URL parameter"):console.warn("Language setting ignored due to FORCE_LANGUAGE configuration")}),[]),T=n((()=>l()),[]);return{t:n((t=>{if(!s.exists(t)){if(!o("AUTO_TRANSLATE")&&"sv"!==g){const e=`${g}:${t}`;m.has(e)||(m.add(e),console.warn(`[i18n] Missing translation for key "${t}" in language "${g}"`))}(async(t,e)=>{const n=`${e} - ${t}`;let a=f[e]?.[t]||void 0;if(o("AUTO_TRANSLATE")&&!a&&!d.has(n)){d.add(n),localStorage.setItem("app-translations",JSON.stringify(f));try{a=(await r.getTranslations(t,e)).translation}catch(t){console.error("Error fetching translation:",t),a=void 0}finally{d.delete(n)}a&&a.includes("Error code:")&&(a=void 0),a&&(!t.trim().startsWith('"')&&a.trim().startsWith('"')&&a.trim().endsWith('"')&&(a=a.trim().slice(1,-1)),!t.trim().startsWith("'")&&a.trim().startsWith("'")&&a.trim().endsWith("'")&&(a=a.trim().slice(1,-1)),f[e]={...f[e],[t]:a},localStorage.setItem("app-translations",JSON.stringify(f)),h({...f}))}return a||t})(t,g).then((e=>{s.addResource(g,"translation",t,e)}))}return a(t)}),[s,a,g]),tAsync:n((async t=>{const e=await(async(t,e)=>{const n=`${e} - ${t}`;let a=f[e]?.[t]||void 0;if(o("AUTO_TRANSLATE")&&!a&&!d.has(n)){d.add(n),localStorage.setItem("app-translations",JSON.stringify(f));try{a=(await r.getTranslations(t,e)).translation}catch(t){console.error("Error fetching translation:",t),a=void 0}finally{d.delete(n)}a&&a.includes("Error code:")&&(a=void 0),a&&(!t.trim().startsWith('"')&&a.trim().startsWith('"')&&a.trim().endsWith('"')&&(a=a.trim().slice(1,-1)),!t.trim().startsWith("'")&&a.trim().startsWith("'")&&a.trim().endsWith("'")&&(a=a.trim().slice(1,-1)),f[e]={...f[e],[t]:a},localStorage.setItem("app-translations",JSON.stringify(f)),h({...f}))}return a||t})(t,g);return s.exists(t)||s.addResource(g,"translation",t,e),e}),[s,g]),currentLanguage:g,setCurrentLanguage:A,getLanguageInfo:T,isForced:["force_config","url_param"].includes(l().source)}};export{p as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserRoles.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserRoles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,YAAa,eAAe,oBAAoB,MAAM,oBAAoB,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"useUserRoles.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserRoles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,YAAa,eAAe,oBAAoB,MAAM,oBAAoB,MAAM;;;;oCAmC1F,MAAM,KAAG,MAAM;gCAgBO,MAAM,KAAG,MAAM;8BAUjB,MAAM,QAAQ,QAAQ,KAAG,OAAO;+BAe/B,MAAM,KAAG,QAAQ,GAAG,SAAS;mCAKzB,MAAM,KAAG,MAAM,EAAE;8BASxB,QAAQ,GAAG,SAAS;8BAKR,MAAM;CAiBlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as e,useEffect as r,useCallback as t}from"react";import n from"../utils/MessageContent.js";const
|
|
1
|
+
import{useState as e,useEffect as r,useCallback as t}from"react";import n from"../utils/MessageContent.js";const o=(o,s,a)=>{const[i,m]=e([]),[l,c]=e(!0),[u,f]=e(null);r((()=>{if(!s||!a)return void c(!1);(async()=>{try{c(!0),f(null);const e=(await o.getMessagesFast(["user_role"],void 0,100)).map((e=>{const r=new n(e.content).data;return r&&"object"==typeof r?r:null})).filter((e=>null!==e));m(e)}catch(e){console.error("Failed to fetch user roles:",e),f(e instanceof Error?e.message:"Failed to fetch user roles")}finally{c(!1)}})()}),[o,s,a]);const p=t((e=>{if(!e)return"";const r=e.toLowerCase(),t=i.find((e=>{if(!e.nicknames)return!1;return e.nicknames.toLowerCase().split(",").map((e=>e.trim())).some((e=>e===r))}));return t?.name||e}),[i]),C=(e,r)=>{if(!e||!r)return!1;const t=e.toLowerCase();if(r.nicknames){if(r.nicknames.toLowerCase().split(",").map((e=>e.trim())).some((e=>e===t)))return!0}return r.name?.toLowerCase()===t||r.email?.toLowerCase()===t},d=e=>{if(e)return i.find((r=>C(e,r)))},g=t((()=>s?p(s):""),[s,p]);return{userRoles:i,loading:l,error:u,getNameFromNickname:p,getNicknameFromName:e=>{if(!e)return"";const r=i.find((r=>r.name?.toLowerCase()===e.toLowerCase()));if(r?.nicknames){return r.nicknames.split(",").map((e=>e.trim()))[0]||e}return e},isUserMatch:C,findUserRole:d,getClaimsForUser:e=>{const r=d(e);return r?.claims?r.claims.split(",").map((e=>e.trim())).filter(Boolean):[]},getCurrentUserRole:()=>{if(s)return d(s)},getCurrentUserName:g}};export{o as useUserRoles};
|
package/dist/esm/pages/Home.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ export interface HomePageProps {
|
|
|
35
35
|
buttonStyles?: HomeButtonStyles;
|
|
36
36
|
/** App name used when sending an invite request. */
|
|
37
37
|
appName?: string;
|
|
38
|
+
/** URL for a support link shown at the bottom of the home screen. */
|
|
39
|
+
supportUrl?: string;
|
|
38
40
|
}
|
|
39
41
|
export declare const Home: React.FC<HomePageProps>;
|
|
40
42
|
export default Home;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../../../src/pages/Home.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../../../src/pages/Home.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AA2BnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAA+D,MAAM,UAAU,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAmCD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmJD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sGAAsG;IACtG,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gHAAgH;IAChH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmbxC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/esm/pages/Home.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{useState as n,useEffect as i}from"react";import{makeStyles as r,shorthands as a,Tooltip as s,Button as l,Image as c,Menu as p,MenuTrigger as m,MenuButton as d,MenuPopover as u,MenuList as h,MenuItem as g}from"@fluentui/react-components";import*as f from"@fluentui/react-icons";import{Edit24Regular as j,Chat24Regular as b,Target24Regular as v,Database24Regular as x,Sparkle24Regular as k,Briefcase24Regular as C,Rocket24Regular as w}from"@fluentui/react-icons";import{Link as y}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as S}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as A}from"../components/Title.js";import{Text as I}from"../components/Text.js";import{Spinner as D}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import N from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import z from"../components/Content.js";import{Page as P}from"../components/Page.js";import"./QrScan.js";import B from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import M from"../hooks/useCodicentState.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{UrlProcessor as _}from"../components/UrlProcessor.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import T from"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const E=t=>{if(!t)return null;const o=f[t];if(o&&("function"==typeof o||"object"==typeof o))try{return e(o,{})}catch{return null}return null},F=t=>{switch(t){case"Start Your CV AI Assistant":return e(w,{});case"Smart CV Matching":return e(C,{});case"Enhance & Optimize CVs":return e(k,{});case"View CV Database":return e(x,{});case"Create Job Requirements":return e(v,{});case"Chat with CV AI":return e(b,{});default:return null}},W=r({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...a.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...a.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"}}),L=({state:r,audio:a,voice:f,buttons:b,backgroundImageUrl:v,welcomeText:x,slogan:k,indexTitle:C,developerMode:w,onEditClick:L,buttonStyles:$={},appName:R})=>{const{selectedApp:V,nickname:U,apps:H,name:q}=r.context,{service:O,error:Q,stateMachine:Y,currentStateName:G,fixAppUrl:K}=r,J=W(),[X,Z]=N("app-buttons_"+V,[]),[ee,te]=n(!1),[oe,ne]=n(!1),[ie,re]=n([]),[ae,se]=n(""),[le,ce]=n(""),[pe,me]=n(""),[de,ue]=n(new Set),{updating:he,welcomeStatusText:ge}=M(Y),{t:fe}=B();i((()=>{void 0!==b?Z(b):V&&O.getAppButtons().then((e=>Z(e))).catch(console.warn)}),[O,Z,V,b]);const je=e=>{e.preventDefault(),e.stopPropagation()},be=!V||"hasAccess"!==G,ve=!V||"hasAccess"!==G,xe=V&&"hasAccess"===G,ke=!V&&"hasAccess"===G&&H.length>1,Ce=!Q&&!V&&!R,we="noAccess"===G&&(1===H.length||!!R),ye=V&&"hasAccess"===G;return e(P,{hideHeader:be,hideFooter:ve,audio:a,voice:f,children:t("div",{className:J.root,style:{backgroundImage:v?`url(${v})`:void 0},children:[w&&L&&"hasAccess"===G&&e("div",{className:J.editButton,children:e(s,{content:fe("Edit settings")||"Edit settings",relationship:"label",children:e(l,{appearance:"subtle",icon:e(j,{}),"aria-label":fe("Edit settings")||"Edit settings",onClick:L,size:"small"})})}),e("div",{className:J.item,children:e("div",{className:J.item,children:t("div",{className:J.buttonsList,children:[ke&&t(o,{children:[e(A,{children:fe("Välkommen, vart vill du gå?")}),H.map(((o,n)=>e("div",{children:e(S,{size:"large",appearance:"primary",onClick:()=>Y.setSelectedApp(o.id),children:t("div",{className:J.buttonContent,children:[o.logo&&e(c,{src:o.logo,height:24}),o.title||o.id]})})},"codicent_button_"+n)))]}),Ce&&t(o,{children:[e(A,{children:fe("Skapa ny?")}),e(I,{size:400,children:fe("Här går du vidare för att skapa din egna privata digitala assistent.")}),e(S,{size:"large",appearance:"primary",onClick:()=>Y.update(),children:fe("Kör!")})]}),we&&e("div",{children:t(z,{children:[e(A,{children:`${fe("Välkommen till")} ${C}`}),!ee&&e(I,{size:400,children:fe("Du är inte medlem än. Skicka begäran för att komma in!")}),!ee&&e(S,{size:"large",appearance:"primary",onClick:async()=>{if(te(!0),!R)return console.error("appName prop not provided."),alert("appName not defined."),void te(!1);await O.requestInvite(U,R)?alert(fe("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(te(!1),alert(fe("Misslyckades att skicka begäran. Försök igen senare.")))},children:fe("Skicka begäran")}),!ee&&t(I,{size:300,children:[fe("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e(y,{to:"/logout",children:fe("Logga ut")})," ",fe("och sedan in igen för att komma igång.")]}),ee&&e(I,{size:400,children:fe("Begäran skickad till ägaren.")}),ee&&e(S,{size:"large",onClick:()=>{window.location.href="./"},children:fe("Kontrollera åtkomst")})]})}),ye&&t("div",{className:J.welcomeInfo,children:[e(I,{weight:"semibold",size:500,align:"center",children:x?x.replace("{{username}}",q||U||""):fe("Välkommen")}),k&&e(I,{weight:"semibold",italic:!0,size:400,align:"center",children:k}),he&&e(D,{}),!he&&ge&&e(I,{size:400,align:"center",children:fe(ge)})]}),xe&&X.map(((o,n)=>{const i="file_drop"===o.type,r="multi_option"===o.type,a=o.options&&Array.isArray(o.options)?o.options:[],s=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){se(t[0]?.trim()||""),ce(t[1]?.trim()||""),me(t[2]?.trim()||"");const e=t[3]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{se(""),ce(""),me("");const e=t[0]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}ne(!0)},l=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&f?.updateInstructions(t),f?.connectConversation()}else e.startsWith("upload:")?s(e):e.startsWith("app:")?t(e.replace("app:",K("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e("div",{children:i?e("div",{className:`${J.item} ${de.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${$.textColor||"#ccc"}`,backgroundColor:de.has(n)?$.activeColor||void 0:$.backgroundColor||void 0,color:$.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const o=new Set(e);return o.delete(t),o}))})(e,n),onDragOver:je,onDrop:e=>(async(e,t,o)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const t=new Set(e);return t.delete(o),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),o=(e.length>=4?e[3]:e[0])?.trim()||"";i=o?o.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const o=await O.uploadFile(e.name,t);if(!o)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await O.sendMessage(`@${V} ${n}\n\n${e.name}\n#file:${o}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,o,n),onClick:()=>o.url.startsWith("upload:")&&s(o.url),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),e("div",{className:J.buttonSubtitle,children:de.has(n)?fe("Drop files here..."):fe("Drag files here or click")})]})}):r?t(p,{children:[e(m,{children:e(d,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:$.backgroundColor||void 0,color:$.textColor||void 0,padding:"1.2rem 1rem"},children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})}),e(u,{className:J.menuPopover,children:e(h,{children:a.map(((o,i)=>e(_,{service:O,children:n=>e(g,{onClick:()=>l(o.url,n),children:t("div",{children:[t("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[E(o.icon)&&e("div",{className:J.menuItemIconBadge,children:E(o.icon)}),e("span",{className:J.menuItemTitle,children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.menuItemSubtitle,children:fe(o.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e(_,{service:O,children:n=>e(S,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:$.backgroundColor||void 0,color:$.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>l(o.url,n),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})})},"button_"+n)}))]})})}),Q&&e("div",{className:"error",children:Q}),e(T,{project:V||"",hidden:!oe,onDismiss:()=>{ne(!1),se(""),ce(""),me(""),re([])},sendMessage:async e=>{try{return await O.sendMessage(e)}catch{return}},onUploaded:()=>{ne(!1),se(""),ce(""),me(""),re([])},service:O,tags:ie,title:ae,description:le,dropText:pe})]})})};export{L as Home,L as default};
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{useState as n,useEffect as i}from"react";import{makeStyles as r,shorthands as a,Tooltip as s,Button as l,Image as p,Menu as c,MenuTrigger as m,MenuButton as d,MenuPopover as u,MenuList as h,MenuItem as g}from"@fluentui/react-components";import*as f from"@fluentui/react-icons";import{QuestionCircle24Regular as j,Edit24Regular as b,Chat24Regular as v,Target24Regular as x,Database24Regular as k,Sparkle24Regular as C,Briefcase24Regular as w,Rocket24Regular as y}from"@fluentui/react-icons";import{Link as S}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as A}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as I}from"../components/Title.js";import{Text as D}from"../components/Text.js";import{Spinner as N}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import z from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import P from"../components/Content.js";import{Page as B}from"../components/Page.js";import"./QrScan.js";import _ from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import M from"../hooks/useCodicentState.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{UrlProcessor as L}from"../components/UrlProcessor.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import E from"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const T=t=>{if(!t)return null;const o=f[t];if(o&&("function"==typeof o||"object"==typeof o))try{return e(o,{})}catch{return null}return null},F=t=>{switch(t){case"Start Your CV AI Assistant":return e(y,{});case"Smart CV Matching":return e(w,{});case"Enhance & Optimize CVs":return e(C,{});case"View CV Database":return e(k,{});case"Create Job Requirements":return e(x,{});case"Chat with CV AI":return e(v,{});default:return null}},W=r({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...a.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...a.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"},supportLink:{position:"absolute",top:"80px",right:"52px",zIndex:10,display:"flex",alignItems:"center",gap:"4px",fontSize:"0.8rem",opacity:.6,textDecoration:"none",color:"inherit",pointerEvents:"auto","&:hover":{opacity:1}}}),$=({state:r,audio:a,voice:f,buttons:v,backgroundImageUrl:x,welcomeText:k,slogan:C,indexTitle:w,developerMode:y,onEditClick:$,buttonStyles:R={},appName:V,supportUrl:U})=>{const{selectedApp:H,nickname:q,apps:O,name:Q}=r.context,{service:Y,error:G,stateMachine:K,currentStateName:J,fixAppUrl:X}=r,Z=W(),[ee,te]=z("app-buttons_"+H,[]),[oe,ne]=n(!1),[ie,re]=n(!1),[ae,se]=n([]),[le,pe]=n(""),[ce,me]=n(""),[de,ue]=n(""),[he,ge]=n(new Set),{updating:fe,welcomeStatusText:je}=M(K),{t:be}=_();i((()=>{void 0!==v?te(v):H&&Y.getAppButtons().then((e=>te(e))).catch(console.warn)}),[Y,te,H,v]);const ve=e=>{e.preventDefault(),e.stopPropagation()},xe=!H||"hasAccess"!==J,ke=!H||"hasAccess"!==J,Ce=H&&"hasAccess"===J,we=!H&&"hasAccess"===J&&O.length>1,ye=!G&&!H&&!V,Se="noAccess"===J&&(1===O.length||!!V),Ae=H&&"hasAccess"===J;return e(B,{hideHeader:xe,hideFooter:ke,audio:a,voice:f,children:t("div",{className:Z.root,style:{backgroundImage:x?`url(${x})`:void 0},children:[U&&e("a",{href:U,target:"_blank",rel:"noopener noreferrer",className:Z.supportLink,children:e(j,{})}),y&&$&&"hasAccess"===J&&e("div",{className:Z.editButton,children:e(s,{content:be("Edit settings")||"Edit settings",relationship:"label",children:e(l,{appearance:"subtle",icon:e(b,{}),"aria-label":be("Edit settings")||"Edit settings",onClick:$,size:"small"})})}),e("div",{className:Z.item,children:e("div",{className:Z.item,children:t("div",{className:Z.buttonsList,children:[we&&t(o,{children:[e(I,{children:be("Välkommen, vart vill du gå?")}),O.map(((o,n)=>e("div",{children:e(A,{size:"large",appearance:"primary",onClick:()=>K.setSelectedApp(o.id),children:t("div",{className:Z.buttonContent,children:[o.logo&&e(p,{src:o.logo,height:24}),o.title||o.id]})})},"codicent_button_"+n)))]}),ye&&t(o,{children:[e(I,{children:be("Skapa ny?")}),e(D,{size:400,children:be("Här går du vidare för att skapa din egna privata digitala assistent.")}),e(A,{size:"large",appearance:"primary",onClick:()=>K.update(),children:be("Kör!")})]}),Se&&e("div",{children:t(P,{children:[e(I,{children:`${be("Välkommen till")} ${w}`}),!oe&&e(D,{size:400,children:be("Du är inte medlem än. Skicka begäran för att komma in!")}),!oe&&e(A,{size:"large",appearance:"primary",onClick:async()=>{if(ne(!0),!V)return console.error("appName prop not provided."),alert("appName not defined."),void ne(!1);await Y.requestInvite(q,V)?alert(be("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(ne(!1),alert(be("Misslyckades att skicka begäran. Försök igen senare.")))},children:be("Skicka begäran")}),!oe&&t(D,{size:300,children:[be("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e(S,{to:"/logout",children:be("Logga ut")})," ",be("och sedan in igen för att komma igång.")]}),oe&&e(D,{size:400,children:be("Begäran skickad till ägaren.")}),oe&&e(A,{size:"large",onClick:()=>{window.location.href="./"},children:be("Kontrollera åtkomst")})]})}),Ae&&t("div",{className:Z.welcomeInfo,children:[e(D,{weight:"semibold",size:500,align:"center",children:k?k.replace("{{username}}",Q||q||""):be("Välkommen")}),C&&e(D,{weight:"semibold",italic:!0,size:400,align:"center",children:C}),fe&&e(N,{}),!fe&&je&&e(D,{size:400,align:"center",children:be(je)})]}),Ce&&ee.map(((o,n)=>{const i="file_drop"===o.type,r="multi_option"===o.type,a=o.options&&Array.isArray(o.options)?o.options:[],s=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){pe(t[0]?.trim()||""),me(t[1]?.trim()||""),ue(t[2]?.trim()||"");const e=t[3]?.trim()||"";se(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{pe(""),me(""),ue("");const e=t[0]?.trim()||"";se(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}re(!0)},l=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&f?.updateInstructions(t),f?.connectConversation()}else e.startsWith("upload:")?s(e):e.startsWith("app:")?t(e.replace("app:",X("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e("div",{children:i?e("div",{className:`${Z.item} ${he.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${R.textColor||"#ccc"}`,backgroundColor:he.has(n)?R.activeColor||void 0:R.backgroundColor||void 0,color:R.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ge((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ge((e=>{const o=new Set(e);return o.delete(t),o}))})(e,n),onDragOver:ve,onDrop:e=>(async(e,t,o)=>{e.preventDefault(),e.stopPropagation(),ge((e=>{const t=new Set(e);return t.delete(o),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),o=(e.length>=4?e[3]:e[0])?.trim()||"";i=o?o.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const o=await Y.uploadFile(e.name,t);if(!o)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await Y.sendMessage(`@${H} ${n}\n\n${e.name}\n#file:${o}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,o,n),onClick:()=>o.url.startsWith("upload:")&&s(o.url),children:t("div",{className:Z.buttonContentColumn,children:[t("div",{className:Z.buttonContentRow,children:[T(o.icon)||F(o.title),e("span",{children:be(o.title)})]}),e("div",{className:Z.buttonSubtitle,children:he.has(n)?be("Drop files here..."):be("Drag files here or click")})]})}):r?t(c,{children:[e(m,{children:e(d,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:R.backgroundColor||void 0,color:R.textColor||void 0,padding:"1.2rem 1rem"},children:t("div",{className:Z.buttonContentColumn,children:[t("div",{className:Z.buttonContentRow,children:[T(o.icon)||F(o.title),e("span",{children:be(o.title)})]}),o.subtitle&&e("div",{className:Z.buttonSubtitle,children:be(o.subtitle)})]})})}),e(u,{className:Z.menuPopover,children:e(h,{children:a.map(((o,i)=>e(L,{service:Y,children:n=>e(g,{onClick:()=>l(o.url,n),children:t("div",{children:[t("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[T(o.icon)&&e("div",{className:Z.menuItemIconBadge,children:T(o.icon)}),e("span",{className:Z.menuItemTitle,children:be(o.title)})]}),o.subtitle&&e("div",{className:Z.menuItemSubtitle,children:be(o.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e(L,{service:Y,children:n=>e(A,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:R.backgroundColor||void 0,color:R.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>l(o.url,n),children:t("div",{className:Z.buttonContentColumn,children:[t("div",{className:Z.buttonContentRow,children:[T(o.icon)||F(o.title),e("span",{children:be(o.title)})]}),o.subtitle&&e("div",{className:Z.buttonSubtitle,children:be(o.subtitle)})]})})})},"button_"+n)}))]})})}),U&&e("a",{href:U,target:"_blank",rel:"noopener noreferrer",className:Z.supportLink,children:e(j,{})}),G&&e("div",{className:"error",children:G}),e(E,{project:H||"",hidden:!ie,onDismiss:()=>{re(!1),pe(""),me(""),ue(""),se([])},sendMessage:async e=>{try{return await Y.sendMessage(e)}catch{return}},onUploaded:()=>{re(!1),pe(""),me(""),ue(""),se([])},service:Y,tags:ae,title:le,description:ce,dropText:de})]})})};export{$ as Home,$ as default};
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import type { ColumnDefinition } from "../components/ListView";
|
|
2
|
+
import type { ListConfig } from "../types";
|
|
2
3
|
import { CodicentAppState } from "../hooks/useCodicentApp";
|
|
3
4
|
export interface ListPageProps {
|
|
4
5
|
state: CodicentAppState;
|
|
5
6
|
/** Returns column definitions for a given tag. Falls back to all data keys if not provided. */
|
|
6
7
|
getColumnDefs?: (tag: string) => ColumnDefinition[];
|
|
8
|
+
/**
|
|
9
|
+
* Returns full list configuration (columns + optional deduplicateBy) for a given tag.
|
|
10
|
+
* When provided, takes precedence over getColumnDefs for deriving column definitions.
|
|
11
|
+
*/
|
|
12
|
+
getListConfig?: (tag: string) => ListConfig | undefined;
|
|
7
13
|
/** Optional data filter applied after fetch. Useful for app-specific filtering (e.g. empty notes). */
|
|
8
14
|
filterData?: (data: DataMessage[], tag: string) => DataMessage[];
|
|
9
15
|
}
|
|
10
|
-
export declare const ListPage: ({ state, getColumnDefs, filterData }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare const ListPage: ({ state, getColumnDefs, getListConfig, filterData }: ListPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
17
|
export default ListPage;
|
|
12
18
|
//# sourceMappingURL=ListPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ListPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAuB3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAkE3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;IACpD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACxD,sGAAsG;IACtG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;CAClE;AAED,eAAO,MAAM,QAAQ,wDAAyD,aAAa,4CAylB1F,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t,jsxs as e}from"react/jsx-runtime";import{useState as o,useRef as n,useMemo as r,useEffect as i,useCallback as a}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{makeStyles as s,Button as c,Dialog as l,DialogSurface as m,DialogBody as p,DialogTitle as d,DialogContent as u,DialogActions as g}from"@fluentui/react-components";import"../components/Spinner.js";import h from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{ArrowLeft24Regular as f,ArrowClockwise24Regular as j,ArrowDownload24Regular as x,Add24Regular as w}from"@fluentui/react-icons";import"../services/codicent.js";import{dataCache as C}from"../services/dataCache.js";import y from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{exportToExcel as A}from"../utils/excelExport.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useSearchParams as S,useNavigate as v}from"react-router-dom";import"./Purchase.js";import"../components/Content.js";import{Page as k}from"../components/Page.js";import"./QrScan.js";import b from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import{useUserRoles as D}from"../hooks/useUserRoles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import M from"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import I from"../components/ListView.js";import{RecordModal as T}from"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import{l as $}from"../node_modules/lodash/lodash.js";const _=s({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),P=500,E=({state:s,getColumnDefs:E,filterData:B})=>{const[N,R]=S(),F=N.get("tag")||"logbook",L=N.get("title")||"",U=N.get("contentTitle"),H="true"===N.get("loadAll"),O="true"===N.get("canAdd"),W="true"===N.get("canEdit"),q="false"!==N.get("canExport"),z=N.get("addUrl")||"",V=N.get("q")||"",[G,J]=o(V),[Q,K]=o(V),{service:X}=s,[Y,Z]=o([]),[tt,et]=o(!1),[ot,nt]=o(!1),[rt,it]=o(!1),at=n(null),st=n(V),ct=n(""),lt=n(!0),[mt,pt]=o(0),[dt,ut]=o(null),gt=_(),{t:ht}=b(),ft=v(),{getCurrentUserName:jt}=D(X,s.context.nickname,s.context.selectedApp),xt=r((()=>(U?[{key:U,title:U,maxWidth:250}]:E?E(F):[]).map((t=>({...t,title:t.title?ht(t.title):void 0})))),[U,F,ht,E]),[wt,Ct]=o(!1),[yt,At]=o(null),[St,vt]=o(!1),[kt,bt]=o(null),Dt=r((()=>`listpage_searches_${F}`),[F]),Mt=t=>{try{const e=localStorage.getItem(t);return e?JSON.parse(e):[]}catch{return[]}},[It,Tt]=o((()=>Mt(Dt)));i((()=>{Tt(Mt(Dt))}),[Dt]);const $t=a((t=>{const e=t.trim();e&&Tt((t=>{const o=[e,...t.filter((t=>t!==e))].slice(0,20);try{localStorage.setItem(Dt,JSON.stringify(o))}catch{}return o}))}),[Dt]),_t=a((t=>{Tt((e=>{const o=e.filter((e=>e!==t));try{localStorage.setItem(Dt,JSON.stringify(o))}catch{}return o}))}),[Dt]),Pt=r((()=>$.debounce((t=>K(t)),500)),[K]);i((()=>()=>{Pt.cancel()}),[Pt]);const Et=a((t=>{J(t),Pt(t)}),[Pt]),Bt=a((t=>{$t(t)}),[$t]);i((()=>{if(!N.get("q")){const t=N.get(`filter_${F}`);if(t){let e=t;if("%USERNAME%"===e){const t=jt();if(!t)return;e=t}J(e),K(e),st.current=e}}}),[F,N,jt]),i((()=>{const t=N.get("q")||"";t!==st.current&&(J(t),K(t),st.current=t,ct.current="")}),[N]),i((()=>(at.current&&clearTimeout(at.current),at.current=setTimeout((()=>{if(st.current!==G){const t={title:L,tag:F};U&&(t.contentTitle=U),G&&(t.q=G),H&&(t.loadAll="true"),R(t,{replace:!0}),st.current=G}}),500),()=>{at.current&&clearTimeout(at.current)})),[G,F,L,U,H,R]),i((()=>{lt.current=!0;const t=`${F}-${U}-${H}-${mt}-${Q}`;if(t===ct.current)return;ct.current=t;const e=U?`${F}-${Q}-${U}`:`${F}-${Q||"all"}`,o=C.get(e);if(!o){if(nt(!1),et(!0),U)X.getMessagesFast([F],Q).then((t=>{if(!lt.current)return void et(!1);const o=t.map((t=>{const e=new Date(t.createdAt).toLocaleString();return{id:t.id,data:{[U]:new y(t.content).content,createdAt:e},fileId:null,fileIds:[],tags:[F],mentions:[X.codicent],createdAt:e}}));C.set(e,o),lt.current&&Z(o)})).catch(console.warn).finally((()=>et(!1)));else{const t=Q||"",o=H||t?void 0:P;X.readDataMessages(F,t,void 0,0,o).then((o=>{C.set(e,o),lt.current?(Z(o),nt(!H&&!t&&o.length===P)):et(!1)})).catch(console.warn).finally((()=>et(!1)))}return()=>{lt.current=!1}}if(Z(o),nt(!H&&!U&&o.length>=P),!U&&!Q&&o.length>0){const t=o.reduce(((t,e)=>e.createdAt>t?e.createdAt:t),o[0].createdAt);X.readDataMessages(F,"",void 0,void 0,void 0,t).then((t=>{lt.current&&Z((o=>{const n=new Set(o.map((t=>t.id))),r=t.filter((t=>!n.has(t.id)));if(0===r.length)return o;const i=[...r,...o];return C.set(e,i),i}))})).catch(console.warn)}}),[X,F,U,H,Q,mt]);const Nt=r((()=>{const t={};N.forEach(((e,o)=>{o.startsWith("filter_")&&(t[o.replace("filter_","")]=e)}));let e=Y.map(((t,e)=>({item:t,index:e})));for(const[o,n]of Object.entries(t)){const t=n.replace("%USERNAME%",jt()),r=s.context.nickname||"";e=e.filter((({item:e})=>{const n=e.data[o];return null!=n&&(String(n).includes(t)||String(n).includes(r))}))}if(B){const t=B(e.map((({item:t})=>t)),F),o=new Set(t.map((t=>t.id)));e=e.filter((({item:t})=>o.has(t.id)))}return e.map((({item:t,index:e})=>({...t.data,createdAt:t.createdAt,_id:t.id,originalMessageId:t.originalMessageId||t.id,_index:e})))}),[Y,N,s.context.nickname,jt,B,F]),Rt=r((()=>{const t=(G||"").trim().toLowerCase();if(!t)return Nt;const e=xt.filter((t=>!t.hidden)).map((t=>t.key));return Nt.filter((o=>{for(const n of e)if(Array.isArray(n))for(const e of n){const n=o[e];if(null!=n&&String(n).toLowerCase().includes(t))return!0}else{const e=o[n];if(null!=e&&String(e).toLowerCase().includes(t))return!0}return!1}))}),[Nt,G,xt]),Ft=a((()=>{C.clearPattern(F),ct.current="",pt((t=>t+1))}),[F]),Lt=a((async()=>{it(!0);try{const t=await X.readDataMessages(F,"",void 0,Y.length,P),e=[...Y,...t];Z(e),C.set(`${F}-all`,e),nt(t.length===P)}catch(t){console.warn(t)}finally{it(!1)}}),[Y,X,F]),Ut=a((t=>{ut(t)}),[]),Ht=()=>{vt(!1),bt(null)},Ot=a((async()=>{const t=`${F}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const e=null!==dt?dt:Rt;await A(e,xt,t,ht)||console.warn("No data to export")}),[dt,Rt,xt,F,ht]),Wt=r((()=>null!==dt?dt.length:Rt.length),[dt,Rt]);return t(k,{hideHeader:!0,children:e("div",{className:gt.container,children:[t("div",{className:gt.backButton,children:t(c,{appearance:"subtle",icon:t(f,{}),onClick:()=>ft(-1),children:ht("Tillbaka")})}),e("div",{className:gt.headerRow,children:[t(h,{title:ht(L||"Loggbok")}),e("div",{className:gt.buttonGroup,children:[t(c,{appearance:"subtle",icon:t(j,{}),onClick:Ft,title:ht("Refresh"),children:ht("Refresh")}),q&&t(c,{appearance:"subtle",icon:t(x,{}),onClick:Ot,title:ht("Export to Excel"),children:ht("Export to Excel")}),(O||z)&&t(c,{appearance:"primary",icon:t(w,{}),onClick:O?()=>{At(null),Ct(!0)}:()=>window.open(z,"_blank"),className:gt.addButton,children:ht("Add Record")})]})]}),t("div",{className:gt.searchBox,children:t(M,{placeholder:ht("Sök")+"...",value:G,onChange:Et,recentSearches:It,onCommitSearch:Bt,onRemoveRecentSearch:_t})}),!tt&&e("div",{className:gt.recordsCount,children:[ht("Total"),": ",Wt," ",ht("records"),Wt!==Y.length&&` (${ht("filtered from")} ${Y.length})`]}),e("div",{className:gt.listContainer,children:[tt&&t("p",{children:ht("Söker")+"..."}),!tt&&t(I,{data:Rt,columns:xt,canEdit:W,onEdit:(t,e)=>{const o=Y[e];o&&(At({data:{...o.data},index:e}),Ct(!0))},onDelete:(t,e)=>{const o=Y[e];o&&(bt({index:e,id:o.id}),vt(!0))},onToggleCheckbox:async(t,e,o,n)=>{const r=Y[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:String(o)},a=await X.updateDataMessage(r.id,i);Z((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),C.clearPattern(F)}},onEnumChange:async(t,e,o,n)=>{const r=Y[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:o},a=await X.updateDataMessage(r.id,i);Z((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),C.clearPattern(F)}},onFilteredDataChange:Ut})]}),ot&&!G.trim()&&t("div",{className:gt.loadMoreContainer,children:t(c,{appearance:"primary",size:"medium",onClick:Lt,disabled:rt,children:rt?ht("Laddar..."):ht("Visa fler")+` (${Y.length} ${ht("laddade")})`})}),t(T,{open:wt,onClose:()=>Ct(!1),onSave:async t=>{if(yt){const e=Y[yt.index];if(e){const o={};for(const e in t){const n=t[e];o[e]=null==n?"":String(n)}const n=await X.updateDataMessage(e.id,o);Z((t=>{const r=[...t];return r[yt.index]={...e,id:n,data:o},r})),C.clearPattern(F)}}else{const e={};for(const o in t){const n=t[o];e[o]=null==n?"":String(n)}const o={id:await X.createDataMessage(F,e),data:e,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[F],mentions:[X.codicent]};Z((t=>[o,...t])),C.clearPattern(F)}},columns:xt,initialData:yt?.data}),t(l,{open:St,onOpenChange:(t,e)=>!e.open&&Ht(),children:t(m,{children:e(p,{children:[t(d,{children:ht("Confirm Delete")}),t(u,{children:ht("Are you sure you want to delete this record? This action cannot be undone.")}),e(g,{children:[t(c,{appearance:"secondary",onClick:Ht,children:ht("Cancel")}),t(c,{appearance:"primary",onClick:async()=>{if(kt)try{await X.deleteDataMessage(kt.id),Z((t=>t.filter(((t,e)=>e!==kt.index)))),C.clearPattern(F)}catch(t){console.error("Failed to delete record:",t)}finally{vt(!1),bt(null)}},children:ht("Delete")})]})]})})})]})})};export{E as ListPage,E as default};
|
|
1
|
+
import{jsx as t,jsxs as e}from"react/jsx-runtime";import{useState as o,useRef as n,useMemo as r,useEffect as i,useCallback as a}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{makeStyles as s,Button as c,Dialog as l,DialogSurface as d,DialogBody as m,DialogTitle as p,DialogContent as u,DialogActions as g}from"@fluentui/react-components";import"../components/Spinner.js";import f from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{ArrowLeft24Regular as h,ArrowClockwise24Regular as j,ArrowDownload24Regular as x,Add24Regular as w}from"@fluentui/react-icons";import"../services/codicent.js";import{dataCache as y}from"../services/dataCache.js";import C from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{exportToExcel as A}from"../utils/excelExport.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useSearchParams as S,useNavigate as v}from"react-router-dom";import"./Purchase.js";import"../components/Content.js";import{Page as k}from"../components/Page.js";import"./QrScan.js";import b from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import{useUserRoles as D}from"../hooks/useUserRoles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import M from"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import I from"../components/ListView.js";import{RecordModal as T}from"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import{l as $}from"../node_modules/lodash/lodash.js";const _=s({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),P=500,B=({state:s,getColumnDefs:B,getListConfig:E,filterData:N})=>{const[R,L]=S(),F=R.get("tag")||"logbook",U=R.get("title")||"",H=R.get("contentTitle"),O="true"===R.get("loadAll"),W="true"===R.get("canAdd"),q="true"===R.get("canEdit"),z="false"!==R.get("canExport"),V=R.get("addUrl")||"",G=R.get("q")||"",[J,Q]=o(G),[K,X]=o(G),{service:Y}=s,[Z,tt]=o([]),[et,ot]=o(!1),[nt,rt]=o(!1),[it,at]=o(!1),st=n(null),ct=n(G),lt=n(""),dt=n(!0),[mt,pt]=o(0),[ut,gt]=o(null),ft=_(),{t:ht}=b(),jt=v(),{getCurrentUserName:xt}=D(Y,s.context.nickname,s.context.selectedApp),wt=r((()=>(H?[{key:H,title:H,maxWidth:250}]:E?E(F)?.columns??[]:B?B(F):[]).map((t=>({...t,title:t.title?ht(t.title):void 0})))),[H,F,ht,B,E]),[yt,Ct]=o(!1),[At,St]=o(null),[vt,kt]=o(!1),[bt,Dt]=o(null),Mt=r((()=>`listpage_searches_${F}`),[F]),It=t=>{try{const e=localStorage.getItem(t);return e?JSON.parse(e):[]}catch{return[]}},[Tt,$t]=o((()=>It(Mt)));i((()=>{$t(It(Mt))}),[Mt]);const _t=a((t=>{const e=t.trim();e&&$t((t=>{const o=[e,...t.filter((t=>t!==e))].slice(0,20);try{localStorage.setItem(Mt,JSON.stringify(o))}catch{}return o}))}),[Mt]),Pt=a((t=>{$t((e=>{const o=e.filter((e=>e!==t));try{localStorage.setItem(Mt,JSON.stringify(o))}catch{}return o}))}),[Mt]),Bt=r((()=>$.debounce((t=>X(t)),500)),[X]);i((()=>()=>{Bt.cancel()}),[Bt]);const Et=a((t=>{Q(t),Bt(t)}),[Bt]),Nt=a((t=>{_t(t)}),[_t]);i((()=>{if(!R.get("q")){const t=R.get(`filter_${F}`);if(t){let e=t;if("%USERNAME%"===e){const t=xt();if(!t)return;e=t}Q(e),X(e),ct.current=e}}}),[F,R,xt]),i((()=>{const t=R.get("q")||"";t!==ct.current&&(Q(t),X(t),ct.current=t,lt.current="")}),[R]),i((()=>(st.current&&clearTimeout(st.current),st.current=setTimeout((()=>{if(ct.current!==J){const t={title:U,tag:F};H&&(t.contentTitle=H),J&&(t.q=J),O&&(t.loadAll="true"),L(t,{replace:!0}),ct.current=J}}),500),()=>{st.current&&clearTimeout(st.current)})),[J,F,U,H,O,L]),i((()=>{dt.current=!0;const t=`${F}-${H}-${O}-${mt}-${K}`;if(t===lt.current)return;lt.current=t;const e=H?`${F}-${K}-${H}`:`${F}-${K||"all"}`,o=y.get(e);if(!o){if(rt(!1),ot(!0),H)Y.getMessagesFast([F],K).then((t=>{if(!dt.current)return void ot(!1);const o=t.map((t=>{const e=new Date(t.createdAt).toLocaleString();return{id:t.id,data:{[H]:new C(t.content).content,createdAt:e},fileId:null,fileIds:[],tags:[F],mentions:[Y.codicent],createdAt:e}}));y.set(e,o),dt.current&&tt(o)})).catch(console.warn).finally((()=>ot(!1)));else{const t=K||"",o=O||t?void 0:P;Y.readDataMessages(F,t,void 0,0,o).then((o=>{y.set(e,o),dt.current?(tt(o),rt(!O&&!t&&o.length===P)):ot(!1)})).catch(console.warn).finally((()=>ot(!1)))}return()=>{dt.current=!1}}if(tt(o),rt(!O&&!H&&o.length>=P),!H&&!K&&o.length>0){const t=o.reduce(((t,e)=>e.createdAt>t?e.createdAt:t),o[0].createdAt);Y.readDataMessages(F,"",void 0,void 0,void 0,t).then((t=>{dt.current&&tt((o=>{const n=new Set(o.map((t=>t.id))),r=t.filter((t=>!n.has(t.id)));if(0===r.length)return o;const i=[...r,...o];return y.set(e,i),i}))})).catch(console.warn)}}),[Y,F,H,O,K,mt]);const Rt=r((()=>{const t={};R.forEach(((e,o)=>{o.startsWith("filter_")&&(t[o.replace("filter_","")]=e)}));let e=Z.map(((t,e)=>({item:t,index:e})));for(const[o,n]of Object.entries(t)){const t=n.replace("%USERNAME%",xt()),r=s.context.nickname||"";e=e.filter((({item:e})=>{const n=e.data[o];return null!=n&&(String(n).includes(t)||String(n).includes(r))}))}if(N){const t=N(e.map((({item:t})=>t)),F),o=new Set(t.map((t=>t.id)));e=e.filter((({item:t})=>o.has(t.id)))}const o=e.map((({item:t,index:e})=>({...t.data,createdAt:t.createdAt,_id:t.id,originalMessageId:t.originalMessageId||t.id,_index:e}))),n=E?.(F)?.deduplicateBy;if(n){const t=Array.isArray(n)?n:[n],e=e=>{for(const o of t){const t=e[o];if(null!=t&&""!==String(t).trim())return String(t)}},r=new Set;return o.filter((t=>{const o=e(t);return void 0===o||!r.has(o)&&(r.add(o),!0)}))}return o}),[Z,R,s.context.nickname,xt,N,F,E]),Lt=r((()=>{const t=(J||"").trim().toLowerCase();if(!t)return Rt;const e=wt.filter((t=>!t.hidden)).map((t=>t.key));return Rt.filter((o=>{for(const n of e)if(Array.isArray(n))for(const e of n){const n=o[e];if(null!=n&&String(n).toLowerCase().includes(t))return!0}else{const e=o[n];if(null!=e&&String(e).toLowerCase().includes(t))return!0}return!1}))}),[Rt,J,wt]),Ft=a((()=>{y.clearPattern(F),lt.current="",pt((t=>t+1))}),[F]),Ut=a((async()=>{at(!0);try{const t=await Y.readDataMessages(F,"",void 0,Z.length,P),e=[...Z,...t];tt(e),y.set(`${F}-all`,e),rt(t.length===P)}catch(t){console.warn(t)}finally{at(!1)}}),[Z,Y,F]),Ht=a((t=>{gt(t)}),[]),Ot=()=>{kt(!1),Dt(null)},Wt=a((async()=>{const t=`${F}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const e=null!==ut?ut:Lt;await A(e,wt,t,ht)||console.warn("No data to export")}),[ut,Lt,wt,F,ht]),qt=r((()=>null!==ut?ut.length:Lt.length),[ut,Lt]);return t(k,{hideHeader:!0,children:e("div",{className:ft.container,children:[t("div",{className:ft.backButton,children:t(c,{appearance:"subtle",icon:t(h,{}),onClick:()=>jt(-1),children:ht("Tillbaka")})}),e("div",{className:ft.headerRow,children:[t(f,{title:ht(U||"Loggbok")}),e("div",{className:ft.buttonGroup,children:[t(c,{appearance:"subtle",icon:t(j,{}),onClick:Ft,title:ht("Refresh"),children:ht("Refresh")}),z&&t(c,{appearance:"subtle",icon:t(x,{}),onClick:Wt,title:ht("Export to Excel"),children:ht("Export to Excel")}),(W||V)&&t(c,{appearance:"primary",icon:t(w,{}),onClick:W?()=>{St(null),Ct(!0)}:()=>window.open(V,"_blank"),className:ft.addButton,children:ht("Add Record")})]})]}),t("div",{className:ft.searchBox,children:t(M,{placeholder:ht("Sök")+"...",value:J,onChange:Et,recentSearches:Tt,onCommitSearch:Nt,onRemoveRecentSearch:Pt})}),!et&&e("div",{className:ft.recordsCount,children:[ht("Total"),": ",qt," ",ht("records"),qt!==Z.length&&` (${ht("filtered from")} ${Z.length})`]}),e("div",{className:ft.listContainer,children:[et&&t("p",{children:ht("Söker")+"..."}),!et&&t(I,{data:Lt,columns:wt,canEdit:q,onEdit:(t,e)=>{const o=Z[e];o&&(St({data:{...o.data},index:e}),Ct(!0))},onDelete:(t,e)=>{const o=Z[e];o&&(Dt({index:e,id:o.id}),kt(!0))},onToggleCheckbox:async(t,e,o,n)=>{const r=Z[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:String(o)},a=await Y.updateDataMessage(r.id,i);tt((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),y.clearPattern(F)}},onEnumChange:async(t,e,o,n)=>{const r=Z[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:o},a=await Y.updateDataMessage(r.id,i);tt((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),y.clearPattern(F)}},onFilteredDataChange:Ht})]}),nt&&!J.trim()&&t("div",{className:ft.loadMoreContainer,children:t(c,{appearance:"primary",size:"medium",onClick:Ut,disabled:it,children:it?ht("Laddar..."):ht("Visa fler")+` (${Z.length} ${ht("laddade")})`})}),t(T,{open:yt,onClose:()=>Ct(!1),onSave:async t=>{if(At){const e=Z[At.index];if(e){const o={};for(const e in t){const n=t[e];o[e]=null==n?"":String(n)}const n=await Y.updateDataMessage(e.id,o);tt((t=>{const r=[...t];return r[At.index]={...e,id:n,data:o},r})),y.clearPattern(F)}}else{const e={};for(const o in t){const n=t[o];e[o]=null==n?"":String(n)}const o={id:await Y.createDataMessage(F,e),data:e,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[F],mentions:[Y.codicent]};tt((t=>[o,...t])),y.clearPattern(F)}},columns:wt,initialData:At?.data}),t(l,{open:vt,onOpenChange:(t,e)=>!e.open&&Ot(),children:t(d,{children:e(m,{children:[t(p,{children:ht("Confirm Delete")}),t(u,{children:ht("Are you sure you want to delete this record? This action cannot be undone.")}),e(g,{children:[t(c,{appearance:"secondary",onClick:Ot,children:ht("Cancel")}),t(c,{appearance:"primary",onClick:async()=>{if(bt)try{await Y.deleteDataMessage(bt.id),tt((t=>t.filter(((t,e)=>e!==bt.index)))),y.clearPattern(F)}catch(t){console.error("Failed to delete record:",t)}finally{kt(!1),Dt(null)}},children:ht("Delete")})]})]})})})]})})};export{B as ListPage,B as default};
|
package/dist/esm/pages/Menu.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface MenuPageProps {
|
|
|
17
17
|
stripeCustomerPortal?: string;
|
|
18
18
|
/** Show the app selector widget (multi-app instances). */
|
|
19
19
|
showAppSelector?: boolean;
|
|
20
|
+
/** URL for a support link shown at the top of the menu list. */
|
|
21
|
+
supportUrl?: string;
|
|
20
22
|
}
|
|
21
23
|
export declare const Menu: React.FC<MenuPageProps>;
|
|
22
24
|
export default Menu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/pages/Menu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8B3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/pages/Menu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8B3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAuIxC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/esm/pages/Menu.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{makeStyles as i,Image as n}from"@fluentui/react-components";import{useNavigate as r}from"react-router-dom";import s from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import
|
|
1
|
+
import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{makeStyles as i,Image as n}from"@fluentui/react-components";import{useNavigate as r}from"react-router-dom";import s from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import a from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as m}from"../components/Page.js";import"./QrScan.js";import c from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import l from"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import d from"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import{LanguageSelector as u}from"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const j=i({container:{backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",touchAction:"pan-y",margin:"0 auto",maxWidth:"800px"},menu_items:{overflowY:"auto",height:"calc(100vh - 130px)",paddingLeft:"10px",paddingRight:"10px"},divider:{fontSize:"20px",fontWeight:"bold",marginTop:"32px",marginBottom:"20px"},appButton:{margin:"2px"}}),g=({state:i,title:g,aboutText:h,version:f,backgroundImageUrl:v,showHelpButton:C,showLogbookButton:A,stripeCustomerPortal:b,showAppSelector:x=!0,supportUrl:S})=>{const k=r(),w=l(),B=j(),{auth:P}=i,{t:M}=c(),y=h?h.replace("{{version}}",(()=>{const o=new Date,t=o.toISOString().split("T")[0],e=o.getHours().toString().padStart(2,"0");return f||`v${t}.${e}`})()):void 0;return o(m,{hideHeader:!0,children:t("div",{className:B.container,style:{backgroundImage:v?`url(${v})`:void 0},children:[o(a,{title:g||M("Meny")}),t("div",{className:B.menu_items,children:[o(d,{state:i}),o(u,{}),o("hr",{}),S&&o("div",{children:o(p,{icon:"QuestionCircle24Regular",size:"large",className:w.menuButton,onClick:()=>window.open(S,"_blank","noopener,noreferrer"),iconPosition:"after",appearance:"transparent",children:M("Support")})}),o("div",{children:o(p,{icon:"ChevronRightFilled",size:"large",className:w.menuButton,onClick:()=>{P.logout(),i.stateMachine.logout()},iconPosition:"after",appearance:"transparent",children:M("Logga ut")})}),b&&o(p,{icon:"Payment24Regular",size:"large",className:w.menuButton,onClick:()=>window.location.href=b,iconPosition:"after",appearance:"transparent",children:M("Abonnemang")}),x&&i.context.apps&&i.context.apps.length>1&&t(e,{children:[o("h3",{children:M("Mina codicents")}),i.context.apps.map((t=>o(p,{className:B.appButton,image:t.logo?o(n,{src:t.logo,height:"24px"}):void 0,onClick:()=>i.stateMachine.setSelectedApp(t.id),title:t.title||t.id,children:t.title||t.id},t.id)))]}),A&&t(e,{children:[o("hr",{}),o(p,{className:w.menuButton,icon:"ChevronRightFilled",size:"large",appearance:"subtle",iconPosition:"after",onClick:()=>k("/log"),children:M("Loggboken")})]}),o("hr",{}),y&&o(s,{content:y}),C&&t(e,{children:[o("h3",{children:M("Behöver du hjälp?")}),o(p,{icon:"QuestionCircle24Regular",className:w.button,size:"large",appearance:"subtle",onClick:()=>k("/help"),children:M("Visa hjälp")})]})]})]})})};export{g as Menu,g as default};
|
|
@@ -29,11 +29,27 @@ export * from "./audit";
|
|
|
29
29
|
import type { ColumnAction, ColumnDefinition } from "../components/ListView";
|
|
30
30
|
export type { ColumnAction, ColumnDefinition };
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Configuration for a single list view, supporting column definitions and optional deduplication.
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export interface ListConfig {
|
|
36
|
+
/** Column definitions for this list */
|
|
37
|
+
columns: ColumnDefinition[];
|
|
38
|
+
/**
|
|
39
|
+
* When set, only the most recent message per unique value of this key is shown.
|
|
40
|
+
* When an array is provided, keys are tried in order and the first truthy value is used.
|
|
41
|
+
* Useful for cases where multiple independent messages represent the same entity
|
|
42
|
+
* (e.g. same customer number or offer number) and only the latest should be displayed.
|
|
43
|
+
*/
|
|
44
|
+
deduplicateBy?: string | string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* List definitions keyed by tag name (e.g., "customer2", "offertjson").
|
|
48
|
+
* Each entry can be a plain column-definition array (backward-compatible) or a full ListConfig.
|
|
33
49
|
* @public
|
|
34
50
|
*/
|
|
35
51
|
export interface ListDefinitions {
|
|
36
|
-
[tagName: string]: ColumnDefinition[];
|
|
52
|
+
[tagName: string]: ColumnDefinition[] | ListConfig;
|
|
37
53
|
}
|
|
38
54
|
/**
|
|
39
55
|
* AI chat instructions configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAGD,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAGD,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,UAAU,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,qEAAqE;IACrE,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrH,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,YAAY,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,IAAI,EACJ,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1870,11 +1870,27 @@ interface ButtonConfig {
|
|
|
1870
1870
|
}
|
|
1871
1871
|
|
|
1872
1872
|
/**
|
|
1873
|
-
*
|
|
1873
|
+
* Configuration for a single list view, supporting column definitions and optional deduplication.
|
|
1874
|
+
* @public
|
|
1875
|
+
*/
|
|
1876
|
+
interface ListConfig {
|
|
1877
|
+
/** Column definitions for this list */
|
|
1878
|
+
columns: ColumnDefinition[];
|
|
1879
|
+
/**
|
|
1880
|
+
* When set, only the most recent message per unique value of this key is shown.
|
|
1881
|
+
* When an array is provided, keys are tried in order and the first truthy value is used.
|
|
1882
|
+
* Useful for cases where multiple independent messages represent the same entity
|
|
1883
|
+
* (e.g. same customer number or offer number) and only the latest should be displayed.
|
|
1884
|
+
*/
|
|
1885
|
+
deduplicateBy?: string | string[];
|
|
1886
|
+
}
|
|
1887
|
+
/**
|
|
1888
|
+
* List definitions keyed by tag name (e.g., "customer2", "offertjson").
|
|
1889
|
+
* Each entry can be a plain column-definition array (backward-compatible) or a full ListConfig.
|
|
1874
1890
|
* @public
|
|
1875
1891
|
*/
|
|
1876
1892
|
interface ListDefinitions {
|
|
1877
|
-
[tagName: string]: ColumnDefinition[];
|
|
1893
|
+
[tagName: string]: ColumnDefinition[] | ListConfig;
|
|
1878
1894
|
}
|
|
1879
1895
|
/**
|
|
1880
1896
|
* AI chat instructions configuration
|
|
@@ -2461,6 +2477,8 @@ interface MenuPageProps {
|
|
|
2461
2477
|
stripeCustomerPortal?: string;
|
|
2462
2478
|
/** Show the app selector widget (multi-app instances). */
|
|
2463
2479
|
showAppSelector?: boolean;
|
|
2480
|
+
/** URL for a support link shown at the top of the menu list. */
|
|
2481
|
+
supportUrl?: string;
|
|
2464
2482
|
}
|
|
2465
2483
|
declare const Menu: React.FC<MenuPageProps>;
|
|
2466
2484
|
|
|
@@ -2525,6 +2543,8 @@ interface HomePageProps {
|
|
|
2525
2543
|
buttonStyles?: HomeButtonStyles;
|
|
2526
2544
|
/** App name used when sending an invite request. */
|
|
2527
2545
|
appName?: string;
|
|
2546
|
+
/** URL for a support link shown at the bottom of the home screen. */
|
|
2547
|
+
supportUrl?: string;
|
|
2528
2548
|
}
|
|
2529
2549
|
declare const Home: React__default.FC<HomePageProps>;
|
|
2530
2550
|
|
|
@@ -2532,10 +2552,15 @@ interface ListPageProps {
|
|
|
2532
2552
|
state: CodicentAppState;
|
|
2533
2553
|
/** Returns column definitions for a given tag. Falls back to all data keys if not provided. */
|
|
2534
2554
|
getColumnDefs?: (tag: string) => ColumnDefinition[];
|
|
2555
|
+
/**
|
|
2556
|
+
* Returns full list configuration (columns + optional deduplicateBy) for a given tag.
|
|
2557
|
+
* When provided, takes precedence over getColumnDefs for deriving column definitions.
|
|
2558
|
+
*/
|
|
2559
|
+
getListConfig?: (tag: string) => ListConfig | undefined;
|
|
2535
2560
|
/** Optional data filter applied after fetch. Useful for app-specific filtering (e.g. empty notes). */
|
|
2536
2561
|
filterData?: (data: DataMessage[], tag: string) => DataMessage[];
|
|
2537
2562
|
}
|
|
2538
|
-
declare const ListPage: ({ state, getColumnDefs, filterData }: ListPageProps) => react_jsx_runtime.JSX.Element;
|
|
2563
|
+
declare const ListPage: ({ state, getColumnDefs, getListConfig, filterData }: ListPageProps) => react_jsx_runtime.JSX.Element;
|
|
2539
2564
|
|
|
2540
2565
|
declare const CrmPage: React__default.FC<{
|
|
2541
2566
|
state: CodicentAppState;
|
|
@@ -2708,4 +2733,4 @@ interface CodicentApp {
|
|
|
2708
2733
|
*/
|
|
2709
2734
|
declare function createCodicentApp(config: CreateAppConfig): CodicentApp;
|
|
2710
2735
|
|
|
2711
|
-
export { AUDIT_CHECKBOX_OPTIONS, AiInput, AppButtonsConfig, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, AuditAnswer, AuditAnswerCell, AuditAnswerMode, AuditAnswerOption, AuditBulkExportDialog, AuditBulkUploadDialog, AuditCircularProgress, AuditConfig, AuditFilterBar, AuditFilterChips, AuditFilterState, AuditGroupsProgress, AuditHorizontalProgress, AuditManagerFilterState, AuditManagerStats, AuditPackage, AuditRequirement, AuditRequirementDialog, AuditRequirementDialogProps, AuditRequirementFieldMapping, AuditRequirementStatus, AuditRequirementsFilterState, AuditRole, AuditRoleCapabilities, AuditRoleIndicator, AuditRoleLabels, AuditSearchBar, AuditSortPreset, AuditSortPresets, AuditSummaryDashboard, AuditTagConfig, AuditTerminology, AuditTimeRemaining, AuditUnitExportDialog, AuditUnitFieldMapping, AuditUnitImportDialog, AuditUnitOption, AuditUnitStats, AuditUnitSwitcher, AuthStateOptions, BulkUploadDialog, Button, ButtonConfig, CacheEntry, CacheManager, CachedUserSession, Canvas, CanvasPageProps, Chat, ChatInput, ChatInstructions, ChatMessage, ChatProps, CodicentApp, CodicentAppState, CodicentMessage, CodicentService, CodicentServiceOptions, ColorPicker, ColumnAction, ColumnDefinition, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CookieBanner, CookieBannerProps, CreateAppConfig, CrmPage, CrmPagePersistent, DEFAULT_AUDIT_VALIDITY_PERIOD_MONTHS, DataCacheEntry, DataMessage$1 as DataMessage, DataMessagePicker, DataMessagePickerProps, DataMessagePickerSelection, DataSchemas, DatePicker, Debug, ErrorBoundary, ExcelColumnDefinition, FileInfo$1 as FileInfo, FilePlaceholder, FileThumbnail, Footer, Form$1 as Form, FormAccept, FormInvite, Form as FormPage, GenericJsonRenderer, Header, Help, Home, HomeButtonStyles, HomePageProps, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, LanguageSelector, ListDefinitions, ListPage, ListPageProps, _default as ListView, ListViewProps, Log, LogPageProps, LogTagDefinition, Login, Logout, Markdown, MemberInfo, Menu, MenuPageProps, Message$2 as Message, Content$1 as MessageContent, MessageInput, MessageItem, ModuleFlags, OfflineMessage, Page, Profile, Prompt, Purchase, QrCodeDialog, QrScan, QrScanner, RealtimeVoice, RecordModal, RecordModalProps, ResolvedAuditConfig, Sales, Schema, SchemaDefinition, SchemaEditor, SchemaItem, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolMergeStrategy, ToolsConfig, TranslationDictionary, TranslationResponse, Translations, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuditFiltersResult, UseAuditManagerDataParams, UseAuditManagerDataResult, UseAuditManagerFiltersResult, UseAuditRequirementsFiltersResult, UseAuditRoleCheckParams, UseAuditRoleCheckResult, UseAuditStateParams, UseAuditStateResult, UseAuthState, UseCodicentAppOptions, UserInfo, UserRole, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, buildAuditPackage, calcValidUntil, calculateAuditTimeRemaining, createAppStateMachine, createCodicentApp, dataCache, exportAuditPackageAsHtml, exportAuditPackageAsJson, exportToExcel, formatValidityPeriod, generateBrandVariants, getAuditComplianceRate, getAuditRoleCapabilities, getAuditUrgencyColor, getConfigValue, getEffectiveAnswerOptions, getGpsLocation, getTimeString, importAuditPackageFromHtml, importAuditPackageFromJson, initCodicentApp, isAnswerCompliant, isMobileDevice, log, parseValidityPeriod, resolveAuditConfig, setBaseUrl, setSignalRHost, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuditFilters, useAuditManagerData, useAuditManagerFilters, useAuditRequirementsFilters, useAuditRoleCheck, useAuditState, useAuthState, useChat, useCodicentApp, useCodicentState, useDebugLogs, useLocalization, useObserveDataSchemas, useOnlineStatus, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, useUserRoles, withWakeLock };
|
|
2736
|
+
export { AUDIT_CHECKBOX_OPTIONS, AiInput, AppButtonsConfig, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, AuditAnswer, AuditAnswerCell, AuditAnswerMode, AuditAnswerOption, AuditBulkExportDialog, AuditBulkUploadDialog, AuditCircularProgress, AuditConfig, AuditFilterBar, AuditFilterChips, AuditFilterState, AuditGroupsProgress, AuditHorizontalProgress, AuditManagerFilterState, AuditManagerStats, AuditPackage, AuditRequirement, AuditRequirementDialog, AuditRequirementDialogProps, AuditRequirementFieldMapping, AuditRequirementStatus, AuditRequirementsFilterState, AuditRole, AuditRoleCapabilities, AuditRoleIndicator, AuditRoleLabels, AuditSearchBar, AuditSortPreset, AuditSortPresets, AuditSummaryDashboard, AuditTagConfig, AuditTerminology, AuditTimeRemaining, AuditUnitExportDialog, AuditUnitFieldMapping, AuditUnitImportDialog, AuditUnitOption, AuditUnitStats, AuditUnitSwitcher, AuthStateOptions, BulkUploadDialog, Button, ButtonConfig, CacheEntry, CacheManager, CachedUserSession, Canvas, CanvasPageProps, Chat, ChatInput, ChatInstructions, ChatMessage, ChatProps, CodicentApp, CodicentAppState, CodicentMessage, CodicentService, CodicentServiceOptions, ColorPicker, ColumnAction, ColumnDefinition, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CookieBanner, CookieBannerProps, CreateAppConfig, CrmPage, CrmPagePersistent, DEFAULT_AUDIT_VALIDITY_PERIOD_MONTHS, DataCacheEntry, DataMessage$1 as DataMessage, DataMessagePicker, DataMessagePickerProps, DataMessagePickerSelection, DataSchemas, DatePicker, Debug, ErrorBoundary, ExcelColumnDefinition, FileInfo$1 as FileInfo, FilePlaceholder, FileThumbnail, Footer, Form$1 as Form, FormAccept, FormInvite, Form as FormPage, GenericJsonRenderer, Header, Help, Home, HomeButtonStyles, HomePageProps, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, LanguageSelector, ListConfig, ListDefinitions, ListPage, ListPageProps, _default as ListView, ListViewProps, Log, LogPageProps, LogTagDefinition, Login, Logout, Markdown, MemberInfo, Menu, MenuPageProps, Message$2 as Message, Content$1 as MessageContent, MessageInput, MessageItem, ModuleFlags, OfflineMessage, Page, Profile, Prompt, Purchase, QrCodeDialog, QrScan, QrScanner, RealtimeVoice, RecordModal, RecordModalProps, ResolvedAuditConfig, Sales, Schema, SchemaDefinition, SchemaEditor, SchemaItem, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolMergeStrategy, ToolsConfig, TranslationDictionary, TranslationResponse, Translations, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuditFiltersResult, UseAuditManagerDataParams, UseAuditManagerDataResult, UseAuditManagerFiltersResult, UseAuditRequirementsFiltersResult, UseAuditRoleCheckParams, UseAuditRoleCheckResult, UseAuditStateParams, UseAuditStateResult, UseAuthState, UseCodicentAppOptions, UserInfo, UserRole, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, buildAuditPackage, calcValidUntil, calculateAuditTimeRemaining, createAppStateMachine, createCodicentApp, dataCache, exportAuditPackageAsHtml, exportAuditPackageAsJson, exportToExcel, formatValidityPeriod, generateBrandVariants, getAuditComplianceRate, getAuditRoleCapabilities, getAuditUrgencyColor, getConfigValue, getEffectiveAnswerOptions, getGpsLocation, getTimeString, importAuditPackageFromHtml, importAuditPackageFromJson, initCodicentApp, isAnswerCompliant, isMobileDevice, log, parseValidityPeriod, resolveAuditConfig, setBaseUrl, setSignalRHost, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuditFilters, useAuditManagerData, useAuditManagerFilters, useAuditRequirementsFilters, useAuditRoleCheck, useAuditState, useAuthState, useChat, useCodicentApp, useCodicentState, useDebugLogs, useLocalization, useObserveDataSchemas, useOnlineStatus, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, useUserRoles, withWakeLock };
|