rich-react-component 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/dist/base/Accordion.d.ts +17 -0
  4. package/dist/base/Alert.d.ts +15 -0
  5. package/dist/base/AutoComplete.d.ts +20 -0
  6. package/dist/base/Avatar.d.ts +8 -0
  7. package/dist/base/Badge.d.ts +9 -0
  8. package/dist/base/Breadcrumb.d.ts +10 -0
  9. package/dist/base/Button.d.ts +13 -0
  10. package/dist/base/Card.d.ts +9 -0
  11. package/dist/base/CheckBox.d.ts +17 -0
  12. package/dist/base/Col.d.ts +12 -0
  13. package/dist/base/ComboBox.d.ts +17 -0
  14. package/dist/base/Confirm.d.ts +25 -0
  15. package/dist/base/Container.d.ts +7 -0
  16. package/dist/base/DataGrid.d.ts +43 -0
  17. package/dist/base/DatePicker.d.ts +23 -0
  18. package/dist/base/DateTimePicker.d.ts +17 -0
  19. package/dist/base/Divider.d.ts +8 -0
  20. package/dist/base/FileInput.d.ts +19 -0
  21. package/dist/base/FormField.d.ts +12 -0
  22. package/dist/base/Icon.d.ts +15 -0
  23. package/dist/base/Input.d.ts +30 -0
  24. package/dist/base/Menu.d.ts +21 -0
  25. package/dist/base/Modal.d.ts +19 -0
  26. package/dist/base/MultiSelect.d.ts +25 -0
  27. package/dist/base/Navbar.d.ts +16 -0
  28. package/dist/base/NumberInput.d.ts +17 -0
  29. package/dist/base/PageHeader.d.ts +12 -0
  30. package/dist/base/Pagination.d.ts +15 -0
  31. package/dist/base/PasswordInput.d.ts +10 -0
  32. package/dist/base/Popover.d.ts +10 -0
  33. package/dist/base/ProgressBar.d.ts +10 -0
  34. package/dist/base/RadioButton.d.ts +18 -0
  35. package/dist/base/RadioGroup.d.ts +14 -0
  36. package/dist/base/Rating.d.ts +9 -0
  37. package/dist/base/Row.d.ts +6 -0
  38. package/dist/base/Select.d.ts +24 -0
  39. package/dist/base/Sidebar.d.ts +31 -0
  40. package/dist/base/Skeleton.d.ts +8 -0
  41. package/dist/base/Slider.d.ts +10 -0
  42. package/dist/base/Spinner.d.ts +7 -0
  43. package/dist/base/Stack.d.ts +12 -0
  44. package/dist/base/Stepper.d.ts +12 -0
  45. package/dist/base/Switch.d.ts +16 -0
  46. package/dist/base/Tabs.d.ts +16 -0
  47. package/dist/base/Tag.d.ts +14 -0
  48. package/dist/base/TextArea.d.ts +11 -0
  49. package/dist/base/TimePicker.d.ts +20 -0
  50. package/dist/base/Toast.d.ts +27 -0
  51. package/dist/base/Tooltip.d.ts +21 -0
  52. package/dist/base/index.d.ts +56 -0
  53. package/dist/base/shared/BooleanFieldControl.d.ts +22 -0
  54. package/dist/base/shared/FieldShell.d.ts +22 -0
  55. package/dist/base/shared/Label.d.ts +9 -0
  56. package/dist/base/shared/Popup.d.ts +25 -0
  57. package/dist/base/shared/ValidationMessage.d.ts +11 -0
  58. package/dist/base/shared/classNames.d.ts +1 -0
  59. package/dist/base/shared/fieldTypes.d.ts +26 -0
  60. package/dist/base/shared/index.d.ts +9 -0
  61. package/dist/base/shared/useControllableState.d.ts +16 -0
  62. package/dist/base/shared/useEscapeKey.d.ts +2 -0
  63. package/dist/base/shared/useListNavigation.d.ts +18 -0
  64. package/dist/index.cjs +2 -0
  65. package/dist/index.cjs.map +1 -0
  66. package/dist/index.d.ts +18 -0
  67. package/dist/index.js +2092 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/remote/RemoteAutoComplete.d.ts +22 -0
  70. package/dist/remote/RemoteComboBox.d.ts +21 -0
  71. package/dist/remote/RemoteDataGrid.d.ts +24 -0
  72. package/dist/remote/RemoteMultiSelect.d.ts +13 -0
  73. package/dist/remote/RemoteSelect.d.ts +17 -0
  74. package/dist/remote/hooks/useDebouncedValue.d.ts +1 -0
  75. package/dist/remote/hooks/useRemoteData.d.ts +31 -0
  76. package/dist/remote/http/HttpClient.d.ts +31 -0
  77. package/dist/remote/index.d.ts +9 -0
  78. package/dist/remote/mapping.d.ts +8 -0
  79. package/dist/smart/SmartAction.d.ts +14 -0
  80. package/dist/smart/SmartActions.d.ts +14 -0
  81. package/dist/smart/SmartField.d.ts +18 -0
  82. package/dist/smart/SmartForm.d.ts +19 -0
  83. package/dist/smart/actionRegistry.d.ts +11 -0
  84. package/dist/smart/componentRegistry.d.ts +24 -0
  85. package/dist/smart/dataSourceRegistry.d.ts +17 -0
  86. package/dist/smart/index.d.ts +26 -0
  87. package/dist/smart/resolvers/comboBoxResolver.d.ts +10 -0
  88. package/dist/smart/resolvers/dataGridResolver.d.ts +11 -0
  89. package/dist/smart/resolvers/datePickerResolver.d.ts +3 -0
  90. package/dist/smart/resolvers/index.d.ts +13 -0
  91. package/dist/smart/resolvers/inputResolver.d.ts +8 -0
  92. package/dist/smart/runtime.d.ts +26 -0
  93. package/dist/smart/types.d.ts +114 -0
  94. package/dist/smart/useSmartAction.d.ts +36 -0
  95. package/dist/smart/useSmartDependencies.d.ts +13 -0
  96. package/dist/smart/useSmartField.d.ts +47 -0
  97. package/package.json +68 -0
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),f=require("react");function m(...e){return e.filter(Boolean).join(" ")}function oe({htmlFor:e,required:n,className:t,children:r}){return s.jsxs("label",{htmlFor:e,className:m("form-label",t),children:[r,n&&s.jsx("span",{className:"text-danger",children:" *"})]})}function Q({error:e,helpText:n,className:t}){return e?s.jsx("div",{className:m("invalid-feedback d-block",t),children:e}):n?s.jsx("div",{className:m("form-text",t),children:n}):null}function P({id:e,label:n,required:t,error:r,helpText:a,className:l,children:c}){return s.jsxs("div",{className:m("mb-3",l),children:[n&&s.jsx(oe,{htmlFor:e,required:t,children:n}),c,s.jsx(Q,{error:r,helpText:a})]})}function D({value:e,defaultValue:n,onChange:t}){const r=e!==void 0,a=f.useRef(r);process.env.NODE_ENV!=="production"&&a.current!==r&&console.error("[react-components] A component switched between controlled and uncontrolled `value`. Decide between passing `value` (controlled) or `defaultValue` (uncontrolled) for the lifetime of the component, per the library's controlled/uncontrolled policy.");const[l,c]=f.useState(n),o=r?e:l,i=f.useCallback(d=>{r||c(d),t==null||t(d)},[r,t]);return[o,i]}function B(e){const{id:n,name:t,disabled:r,readOnly:a,required:l,className:c,label:o,placeholder:i,helpText:d,error:u,value:b,defaultValue:h,onChange:x,onBlur:v,type:N="text",maxLength:j,autoFocus:p,inputProps:y,endAdornment:g}=e,[S,k]=D({value:b,defaultValue:h??"",onChange:x}),w=f.useId(),I=n??w,V=s.jsx("input",{id:I,name:t,className:m("form-control",u&&"is-invalid"),disabled:r,readOnly:a,required:l,placeholder:i,maxLength:j,autoFocus:p,value:S,onChange:A=>k(A.target.value),onBlur:v,type:N,...y});return s.jsx(P,{id:I,label:o,required:l,error:u,helpText:d,className:c,children:g?s.jsxs("div",{className:"input-group",children:[V,g]}):V})}function Ke(e){const{id:n,name:t,disabled:r,readOnly:a,required:l,className:c,label:o,placeholder:i,helpText:d,error:u,value:b,defaultValue:h,onChange:x,onBlur:v,rows:N=3,maxLength:j}=e,[p,y]=D({value:b,defaultValue:h??"",onChange:x}),g=f.useId(),S=n??g;return s.jsx(P,{id:S,label:o,required:l,error:u,helpText:d,className:c,children:s.jsx("textarea",{id:S,name:t,className:m("form-control",u&&"is-invalid"),disabled:r,readOnly:a,required:l,placeholder:i,rows:N,maxLength:j,value:p,onChange:k=>y(k.target.value),onBlur:v})})}function Be({value:e,defaultValue:n,onChange:t,min:r,max:a,step:l,...c}){const[o,i]=D({value:e,defaultValue:n??null,onChange:t});return s.jsx(B,{...c,value:o===null?"":String(o),onChange:d=>{if(d.trim()===""){i(null);return}const u=Number(d);Number.isNaN(u)||i(u)},inputProps:{inputMode:"decimal",min:r,max:a,step:l}})}function He(e){const[n,t]=f.useState(!1);return s.jsx(B,{...e,inputProps:{type:n?"text":"password",autoComplete:"current-password"},endAdornment:s.jsx("button",{type:"button",className:"btn btn-outline-secondary","aria-label":n?"Hide password":"Show password","aria-pressed":n,onClick:()=>t(r=>!r),children:n?"Hide":"Show"})})}function qe({id:e,name:n,disabled:t,required:r,className:a,label:l,helpText:c,error:o,accept:i,multiple:d,onChange:u}){const b=f.useId(),h=e??b;return s.jsx(P,{id:h,label:l,required:r,error:o,helpText:c,className:a,children:s.jsx("input",{id:h,name:n,type:"file",className:m("form-control",o&&"is-invalid"),disabled:t,required:r,accept:i,multiple:d,onChange:x=>u==null?void 0:u(x.target.files)})})}function ce({id:e,name:n,disabled:t,required:r,wrapperClassName:a,role:l,label:c,helpText:o,error:i,checked:d,onChange:u,className:b}){const h=f.useId(),x=e??h;return s.jsxs("div",{className:m(a,b),children:[s.jsx("input",{id:x,name:n,type:"checkbox",role:l,className:m("form-check-input",i&&"is-invalid"),disabled:t,required:r,checked:d,onChange:v=>u(v.target.checked)}),c&&s.jsx("label",{htmlFor:x,className:"form-check-label",children:c}),s.jsx(Q,{error:i,helpText:o})]})}function Ge(e){const[n,t]=D({value:e.checked,defaultValue:e.defaultChecked??!1,onChange:e.onChange});return s.jsx(ce,{id:e.id,name:e.name,disabled:e.disabled,required:e.required,className:e.className,wrapperClassName:"form-check mb-3",label:e.label,helpText:e.helpText,error:e.error,checked:n,onChange:t})}function Ue(e){const[n,t]=D({value:e.checked,defaultValue:e.defaultChecked??!1,onChange:e.onChange});return s.jsx(ce,{id:e.id,name:e.name,disabled:e.disabled,required:e.required,className:e.className,wrapperClassName:"form-check form-switch mb-3",role:"switch",label:e.label,helpText:e.helpText,error:e.error,checked:n,onChange:t})}function de({id:e,name:n,value:t,label:r,checked:a,disabled:l,className:c,onChange:o}){const i=f.useId(),d=e??i;return s.jsxs("div",{className:m("form-check",c),children:[s.jsx("input",{id:d,name:n,type:"radio",className:"form-check-input",value:String(t),checked:a,disabled:l,onChange:()=>o==null?void 0:o(t)}),r&&s.jsx("label",{htmlFor:d,className:"form-check-label",children:r})]})}function _e({options:e,value:n,defaultValue:t,onChange:r,inline:a,id:l,name:c,disabled:o,required:i,className:d,label:u,helpText:b,error:h}){const[x,v]=D({value:n,defaultValue:t??null,onChange:p=>{p!==null&&(r==null||r(p))}}),N=f.useId(),j=c??l??N;return s.jsx(P,{label:u,required:i,error:h,helpText:b,className:d,children:s.jsx("div",{role:"radiogroup","aria-label":u,"aria-required":i,className:m(a&&"d-flex gap-3"),children:e.map(p=>s.jsx(de,{name:j,value:p.value,label:p.label,checked:p.value===x,disabled:o||p.disabled,onChange:y=>v(y)},String(p.value)))})})}function ue({options:e,value:n,defaultValue:t,onChange:r,placeholder:a,loading:l,id:c,name:o,disabled:i,readOnly:d,required:u,className:b,label:h,helpText:x,error:v}){const[N,j]=D({value:n,defaultValue:t??null,onChange:r}),p=f.useId(),y=c??p;return s.jsx(P,{id:y,label:h,required:u,error:v,helpText:x,className:b,children:s.jsxs("select",{id:y,name:o,className:m("form-select",v&&"is-invalid"),disabled:i||d||l,required:u,value:N===null?"":String(N),onChange:g=>{const S=g.target.value;if(S===""){j(null);return}const k=e.find(w=>String(w.value)===S);j(k?k.value:null)},children:[l&&s.jsx("option",{value:"",children:"Loading…"}),!l&&a&&s.jsx("option",{value:"",children:a}),e.map(g=>s.jsx("option",{value:String(g.value),disabled:g.disabled,children:g.label},String(g.value)))]})})}function W(e,n){f.useEffect(()=>{if(!e)return;function t(r){r.key==="Escape"&&n()}return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e,n])}function $({open:e,onClose:n,anchorRef:t,className:r,role:a,children:l}){const c=f.useRef(null);return W(e,n),f.useEffect(()=>{if(!e)return;function o(i){var u,b;const d=i.target;(u=c.current)!=null&&u.contains(d)||(b=t.current)!=null&&b.contains(d)||n()}return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[e,n,t]),e?s.jsx("div",{ref:c,className:m("show",r),role:a,children:l}):null}function Y({itemCount:e,isOpen:n,onSelect:t,onClose:r}){const[a,l]=f.useState(-1);f.useEffect(()=>{n||l(-1)},[n]),W(n,r);const c=f.useCallback(o=>{if(!n){(o.key==="ArrowDown"||o.key==="Enter")&&o.preventDefault();return}switch(o.key){case"ArrowDown":o.preventDefault(),l(i=>e===0?-1:(i+1)%e);break;case"ArrowUp":o.preventDefault(),l(i=>e===0?-1:(i-1+e)%e);break;case"Home":o.preventDefault(),l(e===0?-1:0);break;case"End":o.preventDefault(),l(e===0?-1:e-1);break;case"Enter":a>=0&&(o.preventDefault(),t(a));break}},[n,e,a,t]);return{activeIndex:a,setActiveIndex:l,handleKeyDown:c}}function fe({options:e,values:n,defaultValues:t,onChange:r,loading:a,emptyText:l="No options",id:c,name:o,disabled:i,readOnly:d,required:u,className:b,label:h,placeholder:x="Select...",helpText:v,error:N}){const[j,p]=D({value:n,defaultValue:t??[],onChange:r}),[y,g]=f.useState(!1),S=f.useRef(null),k=f.useId(),w=c??k,I=new Set(j),V=f.useCallback(()=>g(!1),[]),A=f.useCallback(C=>{const E=e[C];if(!E||E.disabled)return;const _=I.has(E.value)?j.filter(Z=>Z!==E.value):[...j,E.value];p(_)},[e,j,I,p]),{activeIndex:L,setActiveIndex:U,handleKeyDown:K}=Y({itemCount:e.length,isOpen:y,onSelect:A,onClose:V}),R=e.filter(C=>I.has(C.value)).map(C=>C.label).join(", ");return s.jsx(P,{id:w,label:h,required:u,error:N,helpText:v,className:b,children:s.jsxs("div",{className:"position-relative",children:[s.jsx("button",{ref:S,id:w,type:"button",name:o,className:m("form-select text-start",N&&"is-invalid"),disabled:i||d,"aria-haspopup":"listbox","aria-expanded":y,onClick:()=>g(C=>!C),onKeyDown:K,children:R||s.jsx("span",{className:"text-body-secondary",children:x})}),s.jsx($,{open:y,onClose:V,anchorRef:S,className:"dropdown-menu w-100",role:"listbox",children:a?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:"Loading…"}):e.length===0?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:l}):e.map((C,E)=>s.jsxs("div",{role:"option","aria-selected":I.has(C.value),className:m("dropdown-item d-flex align-items-center gap-2",E===L&&"active",C.disabled&&"disabled"),onMouseEnter:()=>U(E),onMouseDown:_=>{_.preventDefault(),C.disabled||A(E)},children:[s.jsx("input",{type:"checkbox",className:"form-check-input m-0",checked:I.has(C.value),readOnly:!0,tabIndex:-1}),C.label]},String(C.value)))})]})})}function O(e){if(!e)return"";const n=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${n}-${t}-${r}`}function X(e){if(!e)return null;const n=e.split("-").map(Number),[t,r,a]=n;return!t||!r||!a?null:new Date(t,r-1,a)}function me({value:e,defaultValue:n,onChange:t,min:r,max:a,...l}){const[c,o]=D({value:e,defaultValue:n??null,onChange:t});return s.jsx(B,{...l,value:O(c),onChange:i=>o(X(i)),inputProps:{type:"date",min:r?O(r):void 0,max:a?O(a):void 0}})}function ee(e){if(!e)return"";const n=String(e.getHours()).padStart(2,"0"),t=String(e.getMinutes()).padStart(2,"0");return`${n}:${t}`}function ne(e){if(!e)return null;const[n,t]=e.split(":").map(Number);return n===void 0||t===void 0||Number.isNaN(n)||Number.isNaN(t)?null:new Date(1970,0,1,n,t,0,0)}function Je({value:e,defaultValue:n,onChange:t,step:r,...a}){const[l,c]=D({value:e,defaultValue:n??null,onChange:t});return s.jsx(B,{...a,value:ee(l),onChange:o=>c(ne(o)),inputProps:{type:"time",step:r}})}function re(e,n){const t=X(e);if(!t)return null;const r=ne(n||"00:00");return r&&t.setHours(r.getHours(),r.getMinutes(),0,0),t}function ze({value:e,defaultValue:n,onChange:t,min:r,max:a,id:l,name:c,disabled:o,readOnly:i,required:d,className:u,label:b,helpText:h,error:x}){const[v,N]=D({value:e,defaultValue:n??null,onChange:t}),j=f.useId(),p=l??j,y=O(v),g=ee(v);return s.jsx(P,{id:p,label:b,required:d,error:x,helpText:h,className:u,children:s.jsxs("div",{className:"d-flex gap-2",children:[s.jsx("input",{id:p,name:c?`${c}-date`:void 0,type:"date",className:m("form-control",x&&"is-invalid"),disabled:o,readOnly:i,required:d,min:r?O(r):void 0,max:a?O(a):void 0,value:y,onChange:S=>N(re(S.target.value,g))}),s.jsx("input",{name:c?`${c}-time`:void 0,type:"time",className:m("form-control",x&&"is-invalid"),disabled:o,readOnly:i,required:d,value:g,onChange:S=>N(re(y||O(new Date),S.target.value))})]})})}function he({options:e,value:n,defaultValue:t,onChange:r,loading:a,emptyText:l="No options",id:c,name:o,disabled:i,readOnly:d,required:u,className:b,label:h,placeholder:x="Select...",helpText:v,error:N}){const[j,p]=D({value:n,defaultValue:t??null,onChange:r}),[y,g]=f.useState(!1),S=f.useRef(null),k=f.useId(),w=c??k,I=e.find(T=>T.value===j)??null,V=f.useCallback(()=>g(!1),[]),A=f.useCallback(T=>{const R=e[T];!R||R.disabled||(p(R.value),V())},[e,p,V]),{activeIndex:L,setActiveIndex:U,handleKeyDown:K}=Y({itemCount:e.length,isOpen:y,onSelect:A,onClose:V});return s.jsx(P,{id:w,label:h,required:u,error:N,helpText:v,className:b,children:s.jsxs("div",{className:"position-relative",children:[s.jsx("button",{ref:S,id:w,type:"button",name:o,className:m("form-select text-start",N&&"is-invalid"),disabled:i||d,"aria-haspopup":"listbox","aria-expanded":y,onClick:()=>g(T=>!T),onKeyDown:K,children:I?I.label:s.jsx("span",{className:"text-body-secondary",children:x})}),s.jsx($,{open:y,onClose:V,anchorRef:S,className:"dropdown-menu w-100",role:"listbox",children:a?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:"Loading…"}):e.length===0?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:l}):e.map((T,R)=>s.jsx("div",{role:"option","aria-selected":T.value===j,className:m("dropdown-item",R===L&&"active",T.disabled&&"disabled"),onMouseEnter:()=>U(R),onMouseDown:C=>{C.preventDefault(),T.disabled||A(R)},children:T.label},String(T.value)))})]})})}function Ye(e,n){return n?e.label.toLowerCase().includes(n.toLowerCase()):!0}function be({options:e,value:n,defaultValue:t,onChange:r,inputValue:a,onInputValueChange:l,loading:c,emptyText:o="No results",filter:i,id:d,name:u,disabled:b,readOnly:h,required:x,className:v,label:N,placeholder:j,helpText:p,error:y}){const[g,S]=D({value:n,defaultValue:t??null,onChange:r}),k=e.find(M=>M.value===g)??null,[w,I]=D({value:a,defaultValue:(k==null?void 0:k.label)??"",onChange:l}),[V,A]=f.useState(!1),L=f.useRef(null),U=f.useId(),K=d??U,T=i??Ye,R=e.filter(M=>T(M,w)),C=f.useCallback(()=>A(!1),[]),E=f.useCallback(M=>{const F=R[M];!F||F.disabled||(S(F.value),I(F.label),C())},[R,S,I,C]),{activeIndex:_,setActiveIndex:Z,handleKeyDown:$e}=Y({itemCount:R.length,isOpen:V,onSelect:E,onClose:C});return s.jsx(P,{id:K,label:N,required:x,error:y,helpText:p,className:v,children:s.jsxs("div",{className:"position-relative",children:[s.jsx("input",{ref:L,id:K,name:u,type:"text",className:m("form-control",y&&"is-invalid"),disabled:b,readOnly:h,required:x,placeholder:j,autoComplete:"off",role:"combobox","aria-expanded":V,"aria-haspopup":"listbox",value:w,onFocus:()=>A(!0),onChange:M=>{const F=M.target.value;I(F),A(!0),g!==null&&S(null)},onKeyDown:$e}),s.jsx($,{open:V,onClose:C,anchorRef:L,className:"dropdown-menu w-100",role:"listbox",children:c?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:"Loading…"}):R.length===0?s.jsx("div",{className:"px-3 py-2 text-body-secondary",children:o}):R.map((M,F)=>s.jsx("div",{role:"option","aria-selected":M.value===g,className:m("dropdown-item",F===_&&"active",M.disabled&&"disabled"),onMouseEnter:()=>Z(F),onMouseDown:Le=>{Le.preventDefault(),M.disabled||E(F)},children:M.label},String(M.value)))})]})})}function Ze(e){return s.jsx(P,{...e})}function xe({open:e,onClose:n,title:t,children:r,footer:a,className:l}){return W(e,n),e?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"modal d-block",tabIndex:-1,role:"dialog","aria-modal":"true",children:s.jsx("div",{className:m("modal-dialog",l),role:"document",children:s.jsxs("div",{className:"modal-content",children:[s.jsxs("div",{className:"modal-header",children:[t&&s.jsx("h5",{className:"modal-title",children:t}),s.jsx("button",{type:"button",className:"btn-close","aria-label":"Close",onClick:n})]}),s.jsx("div",{className:"modal-body",children:r}),a&&s.jsx("div",{className:"modal-footer",children:a})]})})}),s.jsx("div",{className:"modal-backdrop show",onClick:n})]}):null}function Qe(e,n,t){const r=[],a=Math.max(1,e-t),l=Math.min(n,e+t);a>1&&(r.push(1),a>2&&r.push("ellipsis"));for(let c=a;c<=l;c++)r.push(c);return l<n&&(l<n-1&&r.push("ellipsis"),r.push(n)),r}function ve({currentPage:e,pageSize:n,totalItems:t,onPageChange:r,siblingCount:a=1,className:l}){const c=Math.max(1,Math.ceil(t/n)),o=Qe(e,c,a);return s.jsx("nav",{"aria-label":"Pagination",className:l,children:s.jsxs("ul",{className:"pagination mb-0",children:[s.jsx("li",{className:m("page-item",e<=1&&"disabled"),children:s.jsx("button",{type:"button",className:"page-link",disabled:e<=1,onClick:()=>r(e-1),children:"Previous"})}),o.map((i,d)=>i==="ellipsis"?s.jsx("li",{className:"page-item disabled",children:s.jsx("span",{className:"page-link",children:"…"})},`ellipsis-${d}`):s.jsx("li",{className:m("page-item",i===e&&"active"),children:s.jsx("button",{type:"button",className:"page-link","aria-current":i===e?"page":void 0,onClick:()=>r(i),children:i})},i)),s.jsx("li",{className:m("page-item",e>=c&&"disabled"),children:s.jsx("button",{type:"button",className:"page-link",disabled:e>=c,onClick:()=>r(e+1),children:"Next"})})]})})}function We(e,n){return!e||e.key!==n?{key:n,direction:"asc"}:e.direction==="asc"?{key:n,direction:"desc"}:null}function pe({columns:e,rows:n,rowKey:t,loading:r,error:a,emptyText:l="No data",className:c,selectedRowKeys:o,onSelectionChange:i,sort:d,onSortChange:u,page:b,pageSize:h,totalCount:x,onPageChange:v}){const N=!!i,j=new Set(o??[]),p=b!==void 0&&h!==void 0&&x!==void 0,y=p?Math.max(1,Math.ceil(x/h)):1;function g(){i&&(j.size===n.length?i([]):i(n.map(t)))}function S(k){if(!i)return;const w=new Set(j);w.has(k)?w.delete(k):w.add(k),i(Array.from(w))}return s.jsxs("div",{className:m("table-responsive",c),children:[s.jsxs("table",{className:"table table-hover align-middle",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[N&&s.jsx("th",{style:{width:"2.5rem"},children:s.jsx("input",{type:"checkbox",className:"form-check-input",checked:n.length>0&&j.size===n.length,onChange:g,"aria-label":"Select all rows"})}),e.map(k=>s.jsxs("th",{style:{width:k.width},role:k.sortable?"button":void 0,onClick:k.sortable&&u?()=>u(We(d,k.key)):void 0,children:[k.header,k.sortable&&(d==null?void 0:d.key)===k.key&&s.jsxs("span",{"aria-hidden":"true",children:[" ",d.direction==="asc"?"▲":"▼"]})]},k.key))]})}),s.jsx("tbody",{children:r?s.jsx("tr",{children:s.jsx("td",{colSpan:e.length+(N?1:0),className:"text-center text-body-secondary py-4",children:"Loading…"})}):a?s.jsx("tr",{children:s.jsx("td",{colSpan:e.length+(N?1:0),className:"text-center text-danger py-4",children:a})}):n.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:e.length+(N?1:0),className:"text-center text-body-secondary py-4",children:l})}):n.map(k=>{const w=t(k);return s.jsxs("tr",{children:[N&&s.jsx("td",{children:s.jsx("input",{type:"checkbox",className:"form-check-input",checked:j.has(w),onChange:()=>S(w),"aria-label":"Select row"})}),e.map(I=>s.jsx("td",{children:I.render?I.render(k):String(k[I.key]??"")},I.key))]},w)})})]}),p&&s.jsxs("div",{className:"d-flex justify-content-between align-items-center mt-2",children:[s.jsxs("span",{className:"text-body-secondary small",children:["Page ",b," of ",y," (",x," rows)"]}),s.jsx(ve,{currentPage:b,pageSize:h,totalItems:x,onPageChange:v})]})]})}function ge({size:e="md",variant:n,className:t,label:r="Loading..."}){return s.jsx("span",{className:m("spinner-border",e==="sm"&&"spinner-border-sm",n&&`text-${n}`,t),role:"status",children:s.jsx("span",{className:"visually-hidden",children:r})})}function z({variant:e="primary",size:n,disabled:t,loading:r,type:a="button",className:l,children:c,onClick:o,...i}){const d=t||r;return s.jsxs("button",{type:a,className:m("btn",`btn-${e}`,n&&`btn-${n}`,l),disabled:d,"aria-busy":r||void 0,onClick:d?void 0:o,...i,children:[r&&s.jsx(ge,{size:"sm",className:"me-2",label:""}),c]})}function te({variant:e="info",dismissible:n,onDismiss:t,className:r,children:a}){return s.jsxs("div",{className:m("alert",`alert-${e}`,n&&"alert-dismissible",r),role:"alert",children:[a,n&&s.jsx("button",{type:"button",className:"btn-close","aria-label":"Close",onClick:t})]})}const je=f.createContext(null),Xe=4e3;function en({children:e}){const[n,t]=f.useState([]),r=f.useRef(0),a=f.useRef(new Map);f.useEffect(()=>{const i=a.current;return()=>{i.forEach(clearTimeout),i.clear()}},[]);const l=f.useCallback(i=>{const d=a.current.get(i);d&&(clearTimeout(d),a.current.delete(i)),t(u=>u.filter(b=>b.id!==i))},[]),c=f.useCallback((i,d)=>{const u=r.current++,b=(d==null?void 0:d.variant)??"info",h=(d==null?void 0:d.duration)??Xe;return t(x=>[...x,{id:u,message:i,variant:b}]),h>0&&a.current.set(u,setTimeout(()=>l(u),h)),u},[l]),o=f.useMemo(()=>({show:c,dismiss:l,success:(i,d)=>c(i,{...d,variant:"success"}),error:(i,d)=>c(i,{...d,variant:"danger"}),info:(i,d)=>c(i,{...d,variant:"info"}),warning:(i,d)=>c(i,{...d,variant:"warning"})}),[c,l]);return s.jsxs(je.Provider,{value:o,children:[e,s.jsx("div",{className:"toast-container position-fixed bottom-0 end-0 p-3",style:{zIndex:1090},children:n.map(i=>s.jsx(te,{variant:i.variant,dismissible:!0,onDismiss:()=>l(i.id),className:"shadow-sm",children:i.message},i.id))})]})}function nn(){const e=f.useContext(je);if(!e)throw new Error("useToast must be used within a ToastProvider");return e}const ye=f.createContext(null);function tn({children:e}){const[n,t]=f.useState(null),r=f.useCallback(l=>new Promise(c=>{t({...l,resolve:c})}),[]),a=f.useCallback(l=>{n==null||n.resolve(l),t(null)},[n]);return s.jsxs(ye.Provider,{value:r,children:[e,s.jsx(xe,{open:n!==null,onClose:()=>a(!1),title:(n==null?void 0:n.title)??"Confirm",footer:s.jsxs(s.Fragment,{children:[s.jsx(z,{variant:"outline-secondary",onClick:()=>a(!1),children:(n==null?void 0:n.cancelLabel)??"Cancel"}),s.jsx(z,{variant:(n==null?void 0:n.confirmVariant)??"danger",onClick:()=>a(!0),children:(n==null?void 0:n.confirmLabel)??"Confirm"})]}),children:n==null?void 0:n.message})]})}function sn(){const e=f.useContext(ye);if(!e)throw new Error("useConfirm must be used within a ConfirmProvider");return e}function rn({variant:e="primary",pill:n,className:t,children:r}){return s.jsx("span",{className:m("badge",`bg-${e}`,n&&"rounded-pill",t),children:r})}function an({items:e,activeKey:n,defaultActiveKey:t,onChange:r,className:a}){var i;const[l,c]=D({value:n,defaultValue:t??((i=e[0])==null?void 0:i.key)??"",onChange:r}),o=e.find(d=>d.key===l);return s.jsxs("div",{className:a,children:[s.jsx("ul",{className:"nav nav-tabs",role:"tablist",children:e.map(d=>s.jsx("li",{className:"nav-item",role:"presentation",children:s.jsx("button",{type:"button",className:m("nav-link",d.key===l&&"active"),role:"tab","aria-selected":d.key===l,disabled:d.disabled,onClick:()=>c(d.key),children:d.label})},d.key))}),s.jsx("div",{className:"tab-content pt-3",role:"tabpanel",children:o==null?void 0:o.content})]})}function Ne({items:e,multiple:n=!1,openKeys:t,defaultOpenKeys:r,onChange:a,className:l}){const[c,o]=D({value:t,defaultValue:r??[],onChange:a}),i=new Set(c);function d(u){i.has(u)?o(c.filter(b=>b!==u)):o(n?[...c,u]:[u])}return s.jsx("div",{className:m("accordion",l),children:e.map(u=>{const b=i.has(u.key);return s.jsxs("div",{className:"accordion-item",children:[s.jsx("h2",{className:"accordion-header",children:s.jsx("button",{type:"button",className:m("accordion-button",!b&&"collapsed"),"aria-expanded":b,disabled:u.disabled,onClick:()=>d(u.key),children:u.header})}),b&&s.jsx("div",{className:"accordion-collapse",children:s.jsx("div",{className:"accordion-body",children:u.content})})]},u.key)})})}function ln({content:e,children:n,placement:t="top",className:r}){const[a,l]=f.useState(!1),c=f.useRef(null),o=f.useId();return s.jsxs("span",{ref:c,className:"position-relative d-inline-block",onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onFocus:()=>l(!0),onBlur:()=>l(!1),"aria-describedby":a?o:void 0,children:[n,s.jsx($,{open:a,onClose:()=>l(!1),anchorRef:c,className:m("tooltip show",`bs-tooltip-${t}`,"position-absolute","w-auto",r),children:s.jsx("span",{id:o,role:"tooltip",className:"tooltip-inner",children:e})})]})}function on({title:e,content:n,children:t,placement:r="bottom",className:a}){const[l,c]=f.useState(!1),o=f.useRef(null);return s.jsxs("span",{ref:o,className:"position-relative d-inline-block",onClick:()=>c(i=>!i),children:[t,s.jsxs($,{open:l,onClose:()=>c(!1),anchorRef:o,className:m("popover show",`bs-popover-${r}`,"position-absolute","w-auto",a),children:[e&&s.jsx("h3",{className:"popover-header",children:e}),s.jsx("div",{className:"popover-body",children:n})]})]})}function cn({header:e,footer:n,className:t,children:r}){return s.jsxs("div",{className:m("card",t),children:[e&&s.jsx("div",{className:"card-header",children:e}),s.jsx("div",{className:"card-body",children:r}),n&&s.jsx("div",{className:"card-footer",children:n})]})}function dn({className:e,vertical:n,label:t}){return n?s.jsx("div",{className:m("vr",e),role:"separator","aria-orientation":"vertical"}):t?s.jsxs("div",{className:m("d-flex align-items-center gap-2 my-3",e),role:"separator",children:[s.jsx("hr",{className:"flex-grow-1 m-0"}),s.jsx("span",{className:"text-body-secondary small",children:t}),s.jsx("hr",{className:"flex-grow-1 m-0"})]}):s.jsx("hr",{className:m("my-3",e),role:"separator"})}function un({direction:e="column",gap:n=2,align:t,justify:r,wrap:a,className:l,children:c}){return s.jsx("div",{className:m("d-flex",e==="row"?"flex-row":"flex-column",`gap-${n}`,t&&`align-items-${t}`,r&&`justify-content-${r}`,a&&"flex-wrap",l),children:c})}function fn({fluid:e,className:n,children:t}){return s.jsx("div",{className:m(e?"container-fluid":"container",n),children:t})}function mn({className:e,children:n}){return s.jsx("div",{className:m("row",e),children:n})}function hn({span:e,sm:n,md:t,lg:r,xl:a,className:l,children:c}){return s.jsx("div",{className:m(e?`col-${e}`:"col",n?`col-sm-${n}`:void 0,t?`col-md-${t}`:void 0,r?`col-lg-${r}`:void 0,a?`col-xl-${a}`:void 0,l),children:c})}function ke({items:e,className:n}){return s.jsx("nav",{"aria-label":"breadcrumb",className:n,children:s.jsx("ol",{className:"breadcrumb mb-0",children:e.map((t,r)=>{const a=r===e.length-1,l=!a&&(t.href||t.onClick);return s.jsx("li",{className:m("breadcrumb-item",a&&"active"),"aria-current":a?"page":void 0,children:l?s.jsx("a",{href:t.href??"#",onClick:c=>{var o;t.href||c.preventDefault(),(o=t.onClick)==null||o.call(t)},children:t.label}):t.label},r)})})})}function bn({items:e,children:n,placement:t="start",className:r}){const[a,l]=f.useState(!1),c=f.useRef(null),o=f.useCallback(()=>l(!1),[]),i=f.useCallback(h=>{var v;const x=e[h];!x||x.disabled||((v=x.onSelect)==null||v.call(x),o())},[e,o]),{activeIndex:d,setActiveIndex:u,handleKeyDown:b}=Y({itemCount:e.length,isOpen:a,onSelect:i,onClose:o});return s.jsxs("span",{ref:c,className:"position-relative d-inline-block",onClick:()=>l(h=>!h),onKeyDown:b,children:[n,s.jsx($,{open:a,onClose:o,anchorRef:c,role:"menu",className:m("dropdown-menu show",t==="end"&&"dropdown-menu-end",r),children:e.map((h,x)=>s.jsx("button",{type:"button",role:"menuitem",className:m("dropdown-item",x===d&&"active",h.disabled&&"disabled",h.danger&&"text-danger"),disabled:h.disabled,onMouseEnter:()=>u(x),onMouseDown:v=>v.preventDefault(),onClick:v=>{v.stopPropagation(),i(x)},children:h.label},h.key))})]})}function xn({steps:e,currentStep:n,className:t}){return s.jsx("ol",{className:m("d-flex list-unstyled align-items-center",t),children:e.map((r,a)=>{const l=a<n?"complete":a===n?"active":"upcoming",c=a===e.length-1;return s.jsxs("li",{className:m("d-flex align-items-center",!c&&"flex-grow-1"),children:[s.jsxs("div",{className:"d-flex align-items-center gap-2",children:[s.jsx("span",{className:m("d-flex align-items-center justify-content-center rounded-circle flex-shrink-0",l==="complete"?"bg-primary text-white":l==="active"?"border border-primary text-primary":"border text-body-secondary"),style:{width:"2rem",height:"2rem"},"aria-current":l==="active"?"step":void 0,children:l==="complete"?"✓":a+1}),s.jsxs("div",{children:[s.jsx("div",{className:m("small fw-semibold",l==="upcoming"&&"text-body-secondary"),children:r.label}),r.description&&s.jsx("div",{className:"small text-body-secondary",children:r.description})]})]}),!c&&s.jsx("hr",{className:"flex-grow-1 mx-2"})]},r.key)})})}function vn(e){var a,l;const n=e.trim().split(/\s+/),t=((a=n[0])==null?void 0:a[0])??"",r=n.length>1?((l=n[n.length-1])==null?void 0:l[0])??"":"";return(t+r).toUpperCase()}const pn={sm:"1.75rem",md:"2.5rem",lg:"3.5rem"};function gn({src:e,name:n,size:t="md",className:r}){const a=pn[t];return e?s.jsx("img",{src:e,alt:n??"",className:m("rounded-circle",r),style:{width:a,height:a,objectFit:"cover"}}):s.jsx("span",{className:m("d-inline-flex align-items-center justify-content-center rounded-circle bg-secondary text-white",r),style:{width:a,height:a,fontSize:`calc(${a} * 0.4)`},role:n?"img":void 0,"aria-label":n,children:n?vn(n):null})}function jn({variant:e="secondary",onRemove:n,className:t,children:r}){return s.jsxs("span",{className:m("badge d-inline-flex align-items-center gap-1",`bg-${e}`,t),children:[r,n&&s.jsx("button",{type:"button",className:"btn-close btn-close-white",style:{fontSize:"0.55rem"},"aria-label":"Remove",onClick:n})]})}function yn({width:e="100%",height:n="1rem",circle:t,className:r}){return s.jsx("span",{className:m("placeholder-glow d-inline-block",r),style:{width:e,height:n},"aria-hidden":"true",children:s.jsx("span",{className:m("placeholder w-100 h-100 d-block",t&&"rounded-circle")})})}function Nn({value:e,defaultValue:n,onChange:t,min:r=0,max:a=100,step:l=1,id:c,name:o,disabled:i,required:d,className:u,label:b,helpText:h,error:x}){const[v,N]=D({value:e,defaultValue:n??r,onChange:t}),j=f.useId(),p=c??j;return s.jsxs(P,{id:p,label:b,required:d,error:x,helpText:h,className:u,children:[s.jsx("input",{id:p,name:o,type:"range",className:"form-range",disabled:i,required:d,min:r,max:a,step:l,value:v,onChange:y=>N(Number(y.target.value))}),s.jsx("div",{className:"small text-body-secondary",children:v})]})}function kn({value:e,defaultValue:n,onChange:t,max:r=5,disabled:a,className:l}){const[c,o]=D({value:e,defaultValue:n??0,onChange:t});return s.jsx("div",{className:m("d-inline-flex gap-1",l),role:"radiogroup","aria-label":"Rating",children:Array.from({length:r},(i,d)=>d+1).map(i=>s.jsx("button",{type:"button",className:"btn btn-link p-0 border-0",disabled:a,role:"radio","aria-checked":i===c,"aria-label":`${i} star${i>1?"s":""}`,onClick:()=>o(i),children:s.jsx("span",{"aria-hidden":"true",style:{fontSize:"1.25rem",color:i<=c?"#f5b301":"#ced4da"},children:"★"})},i))})}function Sn({value:e,variant:n="primary",label:t,className:r}){const a=Math.max(0,Math.min(100,e));return s.jsx("div",{className:m("progress",r),role:"progressbar","aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,children:s.jsx("div",{className:m("progress-bar",`bg-${n}`),style:{width:`${a}%`},children:t?`${Math.round(a)}%`:null})})}const wn={sm:"0.875em",lg:"1.5em",xl:"2em"};function Cn({name:e,size:n,className:t,label:r}){return s.jsx("i",{className:m(e,t),style:n?{fontSize:wn[n]}:void 0,role:r?"img":void 0,"aria-label":r,"aria-hidden":r?void 0:!0})}function In({brand:e,start:n,end:t,variant:r="light",className:a}){return s.jsx("nav",{className:m("navbar navbar-expand-lg border-bottom",r==="dark"?"navbar-dark bg-dark":"navbar-light bg-light",a),children:s.jsxs("div",{className:"container-fluid",children:[e&&s.jsx("span",{className:"navbar-brand mb-0",children:e}),n&&s.jsx("div",{className:"d-flex align-items-center gap-3",children:n}),t&&s.jsx("div",{className:"d-flex align-items-center gap-3 ms-auto",children:t})]})})}function Dn(e){return"items"in e}function ae({item:e}){return s.jsxs("a",{href:e.href??"#",className:m("nav-link d-flex align-items-center gap-2",e.active&&"active",e.disabled&&"disabled"),"aria-current":e.active?"page":void 0,"aria-disabled":e.disabled,onClick:n=>{var t;e.href||n.preventDefault(),!e.disabled&&((t=e.onClick)==null||t.call(e))},children:[e.icon,e.label]})}function Rn({sections:e,header:n,footer:t,className:r}){return s.jsxs("div",{className:m("d-flex flex-column h-100",r),children:[n&&s.jsx("div",{className:"p-3 border-bottom",children:n}),s.jsx("nav",{className:"nav flex-column flex-grow-1 p-2 gap-1",children:e.map(a=>Dn(a)?s.jsx(Ne,{className:"border-0",defaultOpenKeys:a.defaultOpen?[a.key]:[],items:[{key:a.key,header:a.label,content:s.jsx("div",{className:"nav flex-column ps-2 gap-1",children:a.items.map(l=>s.jsx(ae,{item:l},l.key))})}]},a.key):s.jsx(ae,{item:a},a.key))}),t&&s.jsx("div",{className:"p-3 border-top",children:t})]})}function Vn({title:e,description:n,breadcrumbItems:t,actions:r,className:a}){return s.jsxs("div",{className:m("mb-4",a),children:[t&&t.length>0&&s.jsx(ke,{items:t,className:"mb-2"}),s.jsxs("div",{className:"d-flex align-items-start justify-content-between gap-3 flex-wrap",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"h3 mb-1",children:e}),n&&s.jsx("p",{className:"text-body-secondary mb-0",children:n})]}),r&&s.jsx("div",{className:"d-flex align-items-center gap-2",children:r})]})]})}class Se extends Error{constructor(n,t,r){super(`HTTP ${n} ${t} for ${r}`),this.name="HttpError",this.status=n,this.statusText=t,this.url=r}}function Tn(e){if(!e)return"";const n=new URLSearchParams;for(const[r,a]of Object.entries(e))a!=null&&n.set(r,String(a));const t=n.toString();return t?`?${t}`:""}function we(e={}){const{baseUrl:n="",fetcher:t=fetch,buildRequestInit:r}=e;return{async get(a,l={}){const c=`${n}${a}${Tn(l.params)}`;let o={method:"GET",signal:l.signal};r&&(o=r(c,o));const i=await t(c,o);if(!i.ok)throw new Se(i.status,i.statusText,c);return await i.json()}}}const Ce=we();function Mn(e){return Object.keys(e).sort().reduce((n,t)=>(n[t]=e[t],n),{})}function H({client:e=Ce,url:n,params:t,mapResponse:r,enabled:a=!0}){const[l,c]=f.useState("idle"),[o,i]=f.useState([]),[d,u]=f.useState(null),[b,h]=f.useState(0),x=f.useMemo(()=>t?JSON.stringify(Mn(t)):"",[t]),v=f.useRef(0),N=f.useRef(r);N.current=r,f.useEffect(()=>{if(!a||!n){c("idle"),i([]),u(null);return}const p=++v.current,y=new AbortController;return c("loading"),u(null),e.get(n,{params:t,signal:y.signal}).then(g=>{if(p!==v.current)return;const S=N.current(g);i(S),c(S.length===0?"empty":"success")}).catch(g=>{p===v.current&&(g instanceof DOMException&&g.name==="AbortError"||(u(g instanceof Error?g:new Error(String(g))),c("error")))}),()=>{y.abort()}},[e,n,x,a,b]);const j=f.useCallback(()=>h(p=>p+1),[]);return{state:l,items:o,error:d,reload:j}}function Ie(e,n){const[t,r]=f.useState(e);return f.useEffect(()=>{const a=setTimeout(()=>r(e),n);return()=>clearTimeout(a)},[e,n]),t}function q(e){if(Array.isArray(e))return e;if(e&&typeof e=="object"&&Array.isArray(e.items))return e.items;throw new Error("Unable to normalize remote response into an array. Provide an explicit `mapResponse` for this endpoint's response shape.")}function J(e,n,t){if(e===null||typeof e!="object")throw new Error("Remote item is not an object; cannot read valueMember/displayMember from it.");const r=e;return{value:r[n],label:String(r[t]??"")}}function De({url:e,params:n,valueMember:t,displayMember:r,mapResponse:a,client:l,enabled:c,...o}){const{state:i,items:d,error:u}=H({client:l,url:e,params:n,enabled:c,mapResponse:h=>(a?a(h):q(h)).map(v=>J(v,t,r))}),b=o.error??(i==="error"?(u==null?void 0:u.message)??"Failed to load options":void 0);return s.jsx(he,{...o,options:d,loading:i==="loading",error:b})}function En({url:e,params:n,searchParam:t,valueMember:r,displayMember:a,mapResponse:l,minSearchLength:c=1,debounceMs:o=300,client:i,inputValue:d,onInputValueChange:u,...b}){const[h,x]=D({value:d,defaultValue:"",onChange:u}),v=Ie(h,o),N=v.length>=c,{state:j,items:p,error:y}=H({client:i,url:e,enabled:N,params:{...n,[t]:v},mapResponse:S=>(l?l(S):q(S)).map(w=>J(w,r,a))}),g=b.error??(j==="error"?(y==null?void 0:y.message)??"Failed to load suggestions":void 0);return s.jsx(be,{...b,options:p,loading:j==="loading",error:g,inputValue:h,onInputValueChange:x,filter:()=>!0})}function Re({url:e,params:n,mapResponse:t,getTotalCount:r,pageSize:a=20,client:l,...c}){const[o,i]=f.useState(1),[d,u]=f.useState(null),b=f.useMemo(()=>JSON.stringify(n??{}),[n]),h=f.useRef(!0);f.useEffect(()=>{if(h.current){h.current=!1;return}i(1)},[b]);const x=f.useMemo(()=>({...n,page:o,pageSize:a,...d?{sortKey:d.key,sortDirection:d.direction}:{}}),[n,o,a,d]),v=f.useRef(void 0),{state:N,items:j,error:p}=H({client:l,url:e,params:x,mapResponse:w=>(v.current=w,t?t(w):q(w))}),y=v.current!==void 0?r==null?void 0:r(v.current):void 0,S=j.length>=a&&a>0?o*a+1:(o-1)*a+j.length,k=y??S;return s.jsx(pe,{...c,rows:j,loading:N==="loading",error:p==null?void 0:p.message,page:o,pageSize:a,totalCount:k,onPageChange:i,sort:d,onSortChange:w=>{u(w),i(1)}})}function An({url:e,params:n,valueMember:t,displayMember:r,mapResponse:a,client:l,enabled:c,...o}){const{state:i,items:d,error:u}=H({client:l,url:e,params:n,enabled:c,mapResponse:h=>(a?a(h):q(h)).map(v=>J(v,t,r))}),b=o.error??(i==="error"?(u==null?void 0:u.message)??"Failed to load options":void 0);return s.jsx(ue,{...o,options:d,loading:i==="loading",error:b})}function Pn({url:e,params:n,valueMember:t,displayMember:r,mapResponse:a,client:l,enabled:c,...o}){const{state:i,items:d,error:u}=H({client:l,url:e,params:n,enabled:c,mapResponse:h=>(a?a(h):q(h)).map(v=>J(v,t,r))}),b=o.error??(i==="error"?(u==null?void 0:u.message)??"Failed to load options":void 0);return s.jsx(fe,{...o,options:d,loading:i==="loading",error:b})}function Fn(){const e=new Map,n=new Set;return{register(t,r){e.set(t,r)},resolve(t,r){const a=e.get(t.component);return a?a(t,r):(n.has(t.component)||(n.add(t.component),console.warn(`Smart: no resolver registered for component "${t.component}" (field "${t.name}"). Skipping.`)),null)},has(t){return e.has(t)}}}function On(e){const n=new Map(Object.entries(e??{}));return{register(t,r){n.set(t,r)},resolve(t){return n.get(t)}}}function $n(){const e=new Map;return{register(n,t){e.set(n,t)},resolve(n){return e.get(n)}}}function Ln(e){return"dataSource"in e}function Kn(e,n){if(!e)return;const t={};for(const[r,a]of Object.entries(e))t[r]=a.kind==="static"?a.value:n[a.field];return t}function le(e,n,t){return n&&t?t(n):e}function G(e,n){const{values:t,translate:r}=n;return{metadata:e,visible:e.visible??!0,readOnly:e.readOnly??!1,disabled:e.disabled??!1,required:e.required??!1,label:le(e.label,e.labelKey,r),placeholder:e.placeholder,helpText:e.helpText,validationMessage:le(e.validationMessage,e.validationMessageKey,r),params:Ln(e)?Kn(e.dataSource.params,t):void 0}}function Bn(e,n,t){const r=n==null?void 0:n.fields.find(a=>a.name===e);if(r)return G(r,t)}const Hn=[];function qn(e,n){const t={};for(const r of n)t[r]=e[r];return t}function Ve(e,n,t){const r=e??Hn,a=qn(n,r),l=r.length===0?"":JSON.stringify(a),c=f.useRef(null),o=f.useRef(t);o.current=t,f.useEffect(()=>{var d;if(r.length===0)return;const i=c.current;if(i&&i.key!==l)for(const u of r)Object.is(i.snapshot[u],a[u])||(d=o.current)==null||d.call(o,u);c.current={key:l,snapshot:a}},[l])}function se(e,n){const{actions:t,translate:r}=n,a=t.resolve(e.id);return{metadata:e,visible:e.visible??!0,enabled:(e.enabled??!0)&&!!a,label:e.labelKey&&r?r(e.labelKey):e.label,handler:a}}function Gn(e,n,t){var a;const r=(a=n==null?void 0:n.actions)==null?void 0:a.find(l=>l.id===e);if(r)return se(r,t)}const Te=(e,n)=>{const t=G(e,{values:n.values,translate:n.translate});if(!t.visible)return null;const r=n.dataSources.resolve(e.dataSource.id);return r?s.jsx(De,{label:t.label,url:r.url,client:r.client,params:t.params,valueMember:e.valueMember,displayMember:e.displayMember,required:t.required,readOnly:t.readOnly,disabled:t.disabled,helpText:t.helpText,error:t.validationMessage,value:n.values[e.name]??null,onChange:a=>n.onFieldChange(e.name,a)}):(console.warn(`Smart: no data source registered for id "${e.dataSource.id}" (field "${e.name}"). Skipping.`),null)},Un={text:e=>e==null?"":String(e),boolean:(e,n)=>n?n(e?"smart.boolean.true":"smart.boolean.false"):e?"Yes":"No",date:e=>{if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(String(e));return Number.isNaN(n.getTime())?String(e):n.toLocaleDateString()},currency:e=>{const n=Number(e);return Number.isFinite(n)?n.toLocaleString(void 0,{style:"currency",currency:"USD"}):String(e??"")}};function _n(e,n){if(e.visible===!1)return null;const t=e.headerKey&&n?n(e.headerKey):e.header??e.key,r=e.format?Un[e.format]:void 0;return{key:e.key,header:t,sortable:e.sortable,render:r?a=>r(a[e.key],n):void 0}}const Me=(e,n)=>{const t=G(e,{values:n.values,translate:n.translate});if(!t.visible)return null;const r=n.dataSources.resolve(e.dataSource.id);if(!r)return console.warn(`Smart: no data source registered for id "${e.dataSource.id}" (field "${e.name}"). Skipping.`),null;const a=e.columns.map(o=>_n(o,n.translate)).filter(o=>o!==null),l=e.totalCountField,c=l?o=>{const i=o==null?void 0:o[l];return typeof i=="number"?i:void 0}:void 0;return s.jsx(Re,{url:r.url,client:r.client,params:t.params,columns:a,rowKey:o=>o[e.rowKey],getTotalCount:c})};function ie(e){if(!e)return;const n=new Date(e);return Number.isNaN(n.getTime())?void 0:n}const Ee=(e,n)=>{const t=G(e,{values:n.values,translate:n.translate});return t.visible?s.jsx(me,{label:t.label,required:t.required,readOnly:t.readOnly,disabled:t.disabled,helpText:t.helpText,error:t.validationMessage,min:ie(e.minDate),max:ie(e.maxDate),value:n.values[e.name]??null,onChange:r=>n.onFieldChange(e.name,r)}):null},Ae=(e,n)=>{const t=G(e,{values:n.values,translate:n.translate});return t.visible?s.jsx(B,{label:t.label,required:t.required,readOnly:t.readOnly,disabled:t.disabled,helpText:t.helpText,placeholder:t.placeholder,error:t.validationMessage,maxLength:e.maxLength,value:n.values[e.name]??"",onChange:r=>n.onFieldChange(e.name,r)}):null};function Jn(e){e.register("Input",Ae),e.register("ComboBox",Te),e.register("DatePicker",Ee),e.register("DataGrid",Me)}function Pe({metadata:e,ctx:n}){const t=n.onMetadataRefreshNeeded;return Ve(e.dependsOn,n.values,t?r=>t(e.name,r):void 0),e.visible===!1?null:n.registry.resolve(e,n)}const Fe=1;function zn(e){const n=Number(e.split(".")[0]);return Number.isFinite(n)&&n===Fe}function Yn({metadata:e,ctx:n}){return zn(e.schemaVersion)?s.jsx(s.Fragment,{children:e.fields.map(t=>s.jsx(Pe,{metadata:t,ctx:n},t.name))}):s.jsxs(te,{variant:"danger",children:['Unsupported form schema version "',e.schemaVersion,'" — this app understands schema version ',Fe,".x."]})}function Oe({metadata:e,ctx:n}){const t=se(e,n);return t.visible?s.jsx(z,{disabled:!t.enabled,onClick:()=>{var r;return(r=t.handler)==null?void 0:r.call(t)},children:t.label??e.id}):null}function Zn({metadata:e,ctx:n}){return!e.actions||e.actions.length===0?null:s.jsx(s.Fragment,{children:e.actions.map(t=>s.jsx(Oe,{metadata:t,ctx:n},t.id))})}exports.Accordion=Ne;exports.Alert=te;exports.AutoComplete=be;exports.Avatar=gn;exports.Badge=rn;exports.Breadcrumb=ke;exports.Button=z;exports.Card=cn;exports.CheckBox=Ge;exports.Col=hn;exports.ComboBox=he;exports.ConfirmProvider=tn;exports.Container=fn;exports.DataGrid=pe;exports.DatePicker=me;exports.DateTimePicker=ze;exports.Divider=dn;exports.FileInput=qe;exports.FormField=Ze;exports.HttpError=Se;exports.Icon=Cn;exports.Input=B;exports.Label=oe;exports.Menu=bn;exports.Modal=xe;exports.MultiSelect=fe;exports.Navbar=In;exports.NumberInput=Be;exports.PageHeader=Vn;exports.Pagination=ve;exports.PasswordInput=He;exports.Popover=on;exports.Popup=$;exports.ProgressBar=Sn;exports.RadioButton=de;exports.RadioGroup=_e;exports.Rating=kn;exports.RemoteAutoComplete=En;exports.RemoteComboBox=De;exports.RemoteDataGrid=Re;exports.RemoteMultiSelect=Pn;exports.RemoteSelect=An;exports.Row=mn;exports.Select=ue;exports.Sidebar=Rn;exports.Skeleton=yn;exports.Slider=Nn;exports.SmartAction=Oe;exports.SmartActions=Zn;exports.SmartField=Pe;exports.SmartForm=Yn;exports.Spinner=ge;exports.Stack=un;exports.Stepper=xn;exports.Switch=Ue;exports.Tabs=an;exports.Tag=jn;exports.TextArea=Ke;exports.TimePicker=Je;exports.ToastProvider=en;exports.Tooltip=ln;exports.ValidationMessage=Q;exports.comboBoxResolver=Te;exports.createHttpClient=we;exports.createSmartActionRegistry=$n;exports.createSmartComponentRegistry=Fn;exports.createSmartDataSourceRegistry=On;exports.dataGridResolver=Me;exports.datePickerResolver=Ee;exports.defaultArrayNormalization=q;exports.defaultHttpClient=Ce;exports.fromDateInputValue=X;exports.fromTimeInputValue=ne;exports.inputResolver=Ae;exports.registerBuiltInResolvers=Jn;exports.resolveSmartActionMetadata=se;exports.resolveSmartFieldMetadata=G;exports.toDateInputValue=O;exports.toSelectOption=J;exports.toTimeInputValue=ee;exports.useConfirm=sn;exports.useDebouncedValue=Ie;exports.useRemoteData=H;exports.useSmartAction=Gn;exports.useSmartDependencies=Ve;exports.useSmartField=Bn;exports.useToast=nn;
2
+ //# sourceMappingURL=index.cjs.map