@1interface/widgets 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 (119) hide show
  1. package/dist/Chart.web-DQzthytj.js +1 -0
  2. package/dist/GoogleMapsComponent-CtYLbyvO.js +1 -0
  3. package/dist/Markdown.web-vx2MyFJ8.js +1 -0
  4. package/dist/OpenStreetMapComponent-BWRPzQtp.js +1 -0
  5. package/dist/constants-D8-vgQM1.js +1 -0
  6. package/dist/index-DvAx4AnX.js +1 -0
  7. package/dist/index.d.ts +2556 -0
  8. package/dist/index.mjs +1 -0
  9. package/dist/widgets.css +1 -0
  10. package/native/WidgetErrorBoundary.js +1 -0
  11. package/native/WidgetRenderer.js +36 -0
  12. package/native/WidgetRenderer.native.js +1 -0
  13. package/native/assets/image-placeholder.png +0 -0
  14. package/native/compat/FormContext.js +1 -0
  15. package/native/compat/WidgetStateContext.js +1 -0
  16. package/native/compat/WidgetThemeContext.js +1 -0
  17. package/native/components/BackgroundFill.js +1 -0
  18. package/native/components/Badge.js +1 -0
  19. package/native/components/BasicRoot.js +1 -0
  20. package/native/components/Box.js +1 -0
  21. package/native/components/Button.js +1 -0
  22. package/native/components/Card.js +1 -0
  23. package/native/components/Chart.js +1 -0
  24. package/native/components/ChartWidget.js +1 -0
  25. package/native/components/Checkbox.js +1 -0
  26. package/native/components/DatePicker.js +1 -0
  27. package/native/components/DatePicker.native.js +1 -0
  28. package/native/components/Divider.js +1 -0
  29. package/native/components/FileUploadRequest.js +1 -0
  30. package/native/components/Form.js +1 -0
  31. package/native/components/GlassSurface.js +1 -0
  32. package/native/components/Icon.js +1 -0
  33. package/native/components/Image.js +1 -0
  34. package/native/components/Input.js +1 -0
  35. package/native/components/ListView.js +1 -0
  36. package/native/components/Map/index.js +1 -0
  37. package/native/components/Map/index.native.js +1 -0
  38. package/native/components/Map/native/CalloutContent.js +1 -0
  39. package/native/components/Map/native/MapWebView.js +132 -0
  40. package/native/components/Map/native/NativeMapDisplay.js +1 -0
  41. package/native/components/Map/native/NativeMapInput.js +3 -0
  42. package/native/components/Map/native/NativeSearchOverlay.js +1 -0
  43. package/native/components/Map/shared/getLng.js +1 -0
  44. package/native/components/Map/shared/nominatim.js +1 -0
  45. package/native/components/Map/shared/partitionOverlays.js +1 -0
  46. package/native/components/Map/shared/types.js +0 -0
  47. package/native/components/Map/web/UserLocationContext.js +1 -0
  48. package/native/components/Map/web/adapters/GoogleMapsComponent.js +1 -0
  49. package/native/components/Map/web/adapters/OpenStreetMapComponent.js +1 -0
  50. package/native/components/Map/web/adapters/google.js +1 -0
  51. package/native/components/Map/web/adapters/index.js +1 -0
  52. package/native/components/Map/web/adapters/openstreetmap.js +1 -0
  53. package/native/components/Map/web/components/AdvancedMapMarker.js +1 -0
  54. package/native/components/Map/web/components/DataMarkerPopupContent.js +1 -0
  55. package/native/components/Map/web/components/GoogleInfoWindowTheme.js +15 -0
  56. package/native/components/Map/web/components/LeafletPopupTheme.js +8 -0
  57. package/native/components/Map/web/components/MapInputShell.js +1 -0
  58. package/native/components/Map/web/components/MapSearchOverlay.js +1 -0
  59. package/native/components/Map/web/components/MapSelectionIndicator.js +1 -0
  60. package/native/components/Map/web/components/MapShell.js +1 -0
  61. package/native/components/Map/web/components/MapSkeleton.js +1 -0
  62. package/native/components/Map/web/components/PopupContent.js +1 -0
  63. package/native/components/Map/web/components/SafeMapContainer.js +1 -0
  64. package/native/components/Map/web/components/SearchMarkerPopupContent.js +1 -0
  65. package/native/components/Map/web/constants.js +1 -0
  66. package/native/components/Map/web/hooks/useDirectionsUrl.js +1 -0
  67. package/native/components/Map/web/hooks/useMapFeatures.js +1 -0
  68. package/native/components/Map/web/hooks/useMapInput.js +3 -0
  69. package/native/components/Map/web/mapConfig.js +1 -0
  70. package/native/components/Map/web/mapRenderer.js +1 -0
  71. package/native/components/Map/web/services/google/googlePlaces.js +1 -0
  72. package/native/components/Map/web/services/index.js +1 -0
  73. package/native/components/Map/web/services/nominatim.js +1 -0
  74. package/native/components/Map/web/types.js +1 -0
  75. package/native/components/Map/web/utils/partitionOverlays.js +1 -0
  76. package/native/components/Map/web/utils.js +1 -0
  77. package/native/components/MapWidget.js +1 -0
  78. package/native/components/MapWidget.native.js +1 -0
  79. package/native/components/Markdown.js +3 -0
  80. package/native/components/MarkdownWidget.js +1 -0
  81. package/native/components/MediaDownloadButton.native.js +1 -0
  82. package/native/components/Placeholder.js +1 -0
  83. package/native/components/RadioGroup.js +1 -0
  84. package/native/components/Select.js +1 -0
  85. package/native/components/Spacer.js +1 -0
  86. package/native/components/Text.js +1 -0
  87. package/native/components/Textarea.js +1 -0
  88. package/native/components/Transition.js +1 -0
  89. package/native/components/Video.js +1 -0
  90. package/native/components/index.js +1 -0
  91. package/native/config.js +1 -0
  92. package/native/constants/validation.js +1 -0
  93. package/native/icons/icon-map.js +1 -0
  94. package/native/index.js +1 -0
  95. package/native/lib/utils.js +1 -0
  96. package/native/runtime/index.js +1 -0
  97. package/native/runtime/layoutContext.js +1 -0
  98. package/native/runtime/render.js +1 -0
  99. package/native/schema/action-types.js +1 -0
  100. package/native/schema/branding-types.js +0 -0
  101. package/native/schema/index.js +1 -0
  102. package/native/schema/widget-types.js +1 -0
  103. package/native/state/context.js +1 -0
  104. package/native/state/index.js +1 -0
  105. package/native/state/reducer.js +1 -0
  106. package/native/theme/ThemeContext.js +1 -0
  107. package/native/theme/defaults.js +1 -0
  108. package/native/theme/index.js +1 -0
  109. package/native/theme/resolveBranding.js +1 -0
  110. package/native/theme/style.js +1 -0
  111. package/native/theme/stylePipeline.js +1 -0
  112. package/native/theme/tokens.js +1 -0
  113. package/native/theme/variants.js +1 -0
  114. package/native/utils/formValidation.js +1 -0
  115. package/native/utils/formValidation.native.js +1 -0
  116. package/native/utils/formValidationCore.js +1 -0
  117. package/native/utils/safeRender.js +1 -0
  118. package/native/utils/widgetUtils.js +1 -0
  119. package/package.json +110 -0
@@ -0,0 +1 @@
1
+ import{Badge as t}from"./components/Badge";import{BasicRoot as a}from"./components/BasicRoot";import{Box as i,Row as m,Col as d}from"./components/Box";import{Button as f}from"./components/Button";import{Card as s}from"./components/Card";import{Checkbox as l}from"./components/Checkbox";import{DatePicker as u}from"./components/DatePicker";import{Divider as W}from"./components/Divider";import{FileUploadRequest as T}from"./components/FileUploadRequest";import{Form as R}from"./components/Form";import{Icon as A}from"./components/Icon";import{Image as I}from"./components/Image";import{Video as E}from"./components/Video";import{Input as O}from"./components/Input";import{Label as D}from"./components/Text";import{ListView as v,ListViewItem as w}from"./components/ListView";import{RadioGroup as L}from"./components/RadioGroup";import{Select as U}from"./components/Select";import{Spacer as H}from"./components/Spacer";import{Text as q,Title as G,Caption as Y}from"./components/Text";import{Textarea as z}from"./components/Textarea";import{Transition as K}from"./components/Transition";import{ChartWidget as X}from"./components/ChartWidget";import{MarkdownWidget as $}from"./components/MarkdownWidget";import{WidgetThemeProvider as oe,useWidgetTheme as te}from"./compat/WidgetThemeContext";import{WidgetRenderer as ae}from"./WidgetRenderer";import{WidgetErrorBoundary as ie}from"./WidgetErrorBoundary";import{WidgetStateManager as de,useMessageId as ne,useSelectedCategory as fe,useFileUploadState as xe,WidgetStateProvider as se}from"./compat/WidgetStateContext";import{ACTION_TYPES as le,SELF_CONTAINED_ACTIONS as Ce,CONSUMER_ACTIONS as ue}from"./schema";import{renderWidget as We}from"./runtime";import{safeRenderWidget as Te}from"./utils/safeRender";import{useActionHandler as Re,formatOrderItems as he,resolveTemplate as Ae,ActionHandlerContext as Fe,defaultActionHandler as Ie}from"./utils/widgetUtils";import{useWidgetState as Ee,useWidgetDispatch as Me,useActionHandler as Oe}from"./state";import{REDUCER_ACTIONS as De}from"./state";import{validateFields as ve}from"./utils/formValidationCore";import{validateForm as Be,markRequiredLabels as Le}from"./utils/formValidation";import{useFormContext as Ue,FormContext as _e}from"./compat/FormContext";import{useTheme as be,useTokens as qe,useVariants as Ge}from"./theme";import{mergeConfig as je,DEFAULT_CONFIG as ze}from"./config";import{configureMap as Ke}from"./components/Map";export{le as ACTION_TYPES,Fe as ActionHandlerContext,t as Badge,a as BasicRoot,i as Box,f as Button,ue as CONSUMER_ACTIONS,Y as Caption,s as Card,X as Chart,l as Checkbox,d as Col,ze as DEFAULT_CONFIG,u as DatePicker,W as Divider,T as FileUploadRequest,R as Form,_e as FormContext,A as Icon,I as Image,O as Input,D as Label,v as ListView,w as ListViewItem,$ as Markdown,De as REDUCER_ACTIONS,L as RadioGroup,m as Row,Ce as SELF_CONTAINED_ACTIONS,U as Select,H as Spacer,q as Text,z as Textarea,G as Title,K as Transition,E as Video,ie as WidgetErrorBoundary,ae as WidgetRenderer,de as WidgetStateManager,se as WidgetStateProvider,oe as WidgetThemeProvider,Ke as configureMap,Ie as defaultActionHandler,he as formatOrderItems,Le as markRequiredLabels,je as mergeConfig,We as renderWidget,Ae as resolveTemplate,Te as safeRenderWidget,Oe as useAction,Re as useActionHandler,xe as useFileUploadState,Ue as useFormContext,ne as useMessageId,fe as useSelectedCategory,be as useTheme,qe as useTokens,Ge as useVariants,Me as useWidgetDispatch,Ee as useWidgetState,te as useWidgetTheme,ve as validateFields,Be as validateForm};
@@ -0,0 +1 @@
1
+ import{clsx as a}from"clsx";import{twMerge as c}from"tailwind-merge";function p(...r){return c(a(r))}const g=(r,e)=>{if(!r)return"";const t=r.split(" ");return t.length>e?t.slice(0,e).join(" "):r},m=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{const e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)}),h=(r,e=new Date)=>{if(!r)return"";const t=new Date(r);if(isNaN(t.getTime()))return"";const n=e.getTime()-t.getTime(),s=Math.floor(n/(1e3*60)),o=Math.floor(n/(1e3*60*60)),i=Math.floor(n/(1e3*60*60*24));return s<1?"Just now":s<60?`${s}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:new Intl.DateTimeFormat("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(t)},d=r=>r?r.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",y=r=>r?r.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^(.)/,e=>e.toUpperCase()).split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim():"",C=r=>r?r.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",D=r=>r.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),u=r=>{const e=r.match(/^(\d{2})\/(\d{2})$/);if(!e)return!1;const t=Number(e[1]),n=Number(e[2]);if(t<1||t>12)return!1;const s=new Date,o=s.getFullYear()%100,i=s.getMonth()+1;return!(n<o||n===o&&t<i||t>12)},l=r=>{if(!r)return"";if(!u(r)){const e=r.match(/^(\d{2})\/(\d{2})$/);if(e){const t=Number(e[1]),n=Number(e[2]),s=new Date,o=s.getFullYear()%100,i=s.getMonth()+1;if(n<o||n===o&&t<i||t>12)return""}}return r},T=r=>{const e=r.replace(/\D/g,"").slice(0,4);if(e.length===4){const t=e.slice(0,2)+"/"+e.slice(2);return l(t)}else{if(e.length>=3)return`${e.slice(0,2)}/${e.slice(2)}`;if(e.length>=1)return e}return""},M=r=>r.replace(/\D/g,"").slice(0,4);function $(r){return Array.isArray(r)&&Array.isArray(r[0])?r.flat():r}export{d as capitalizeFirst,p as cn,M as formatCVC,y as formatCamelCaseToTitle,D as formatCardNumber,T as formatExpiryDate,h as formatTimestamp,m as generateUniqueId,$ as getArrayOfObjects,C as removeSpecialCharsAndSpaces,l as sanitizeExpiryDate,g as truncateWordLimit,u as validateExpiryDate};
@@ -0,0 +1 @@
1
+ import{renderWidget as t,prepareProps as o}from"./render";import{SizedParentContext as i,GridRowContext as p,ScrollableContext as x,isPercentString as a,hasConcreteHeight as d}from"./layoutContext";export{p as GridRowContext,x as ScrollableContext,i as SizedParentContext,d as hasConcreteHeight,a as isPercentString,o as prepareProps,t as renderWidget};
@@ -0,0 +1 @@
1
+ import{createContext as t}from"react";import{Platform as i}from"react-native";const x=t(!1),f=t(!1),c=t(0),u=t(!1),a=t(16),d=t(void 0),p=t(!1),C=t(!1),g=t(!1),m=t(0),h=t(!1),b=t(null),w=t("stretch"),P=t("column"),S=t(!1);function r(e){return typeof e=="string"&&/^-?\d+(?:\.\d+)?%$/.test(e.trim())}function k(e){const n=e.height??e.size;if(n!=null){if(typeof n=="number")return!0;if(typeof n=="string")return!r(n)}if(i.OS==="web"){const o=e.minHeight??e.minSize;if(o!=null){if(typeof o=="number")return!0;if(typeof o=="string")return!r(o)}}return!1}export{a as CardPaddingContext,g as CarouselItemRootContext,h as FillHeightContext,f as GridRowContext,c as GridRowHeightContext,C as HorizontalCarouselContext,S as InsideTileRowContext,m as PageWidthContext,w as ParentCrossAlignContext,P as ParentDirectionContext,u as ScrollableContext,p as ScrollableListContext,x as SizedParentContext,d as TabIdContext,b as TileCheckboxRegistry,k as hasConcreteHeight,r as isPercentString};
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{Fragment as k}from"react";import{defaults as m}from"../theme/defaults";import{withDefaults as l}from"../theme/style";import{BasicRoot as d}from"../components/BasicRoot";import{Card as w}from"../components/Card";import{ListView as C,ListViewItem as g}from"../components/ListView";import{Box as P,Col as R,Row as I}from"../components/Box";import{Spacer as W}from"../components/Spacer";import{Divider as b}from"../components/Divider";import{Caption as x,Label as B,Text as T,Title as h}from"../components/Text";import{Image as D}from"../components/Image";import{Transition as L}from"../components/Transition";import{Icon as V}from"../components/Icon";import{Button as A}from"../components/Button";import{Checkbox as E}from"../components/Checkbox";import{Input as F}from"../components/Input";import{Textarea as M}from"../components/Textarea";import{Select as S}from"../components/Select";import{RadioGroup as j}from"../components/RadioGroup";import{DatePicker as v}from"../components/DatePicker";import{Form as G}from"../components/Form";import{Badge as U}from"../components/Badge";import{Video as q}from"../components/Video";import{FileUploadRequest as N}from"../components/FileUploadRequest";import{Placeholder as $}from"../components/Placeholder";import{MapWidget as H}from"../components/MapWidget";import{ChartWidget as K}from"../components/ChartWidget";import{MarkdownWidget as z}from"../components/MarkdownWidget";function u(t){return typeof t=="object"&&t!==null&&"$$typeof"in t}function f(t){if(t==null||typeof t!="object")return!1;const r=t;return r.type==="Col"&&r.justify!=null&&r.justify!==""&&r.flex!=null?!0:r.children==null?!1:(Array.isArray(r.children)?r.children.flat(1/0):[r.children]).some(e=>f(e))}function J(t){if(t==null)return[];const r=Array.isArray(t)?t:[t],n=[];return r.flat(1/0).forEach(e=>{if(!(e==null||e===!1||e===!0)){if(typeof e=="string"||typeof e=="number"){n.push(String(e));return}if(u(e)){n.push(e);return}if(typeof e=="object"&&e!==null&&"type"in e){n.push(X(e));return}}}),n}function O(t,r){return(t.key??null)!==null?t:o(k,{children:t},`w-${r}`)}function Q(t){const r=t,n=r.type,{children:e,...a}=r;n==="Button"&&a.color===void 0&&typeof a.style=="string"&&(a.color=a.style);const y=n&&n in m?m[n]:{},s=l(y,a);if(s.id!==void 0&&s.nativeID===void 0&&(s.nativeID=s.id),e!==void 0)if(n==="Map")s.children=e;else{const i=J(e);s.children=i.length>0?i.map((p,c)=>u(p)?O(p,c):p):[]}return s}function X(t){if(u(t))return t;const r=t.type,n=Q(t),e=n.key??void 0;switch(delete n.key,r){case"Basic":return o(d,{...n},e);case"Card":return o(w,{...n},e);case"ListView":return o(C,{...n},e);case"ListViewItem":return o(g,{stretchTallest:f(t),...n},e);case"Box":return o(P,{...n},e);case"Row":return o(I,{...n},e);case"Col":return o(R,{...n},e);case"Spacer":return o(W,{...n},e);case"Divider":return o(b,{...n},e);case"Transition":return o(L,{...n},e);case"Text":return o(T,{...n},e);case"Title":return o(h,{...n},e);case"Caption":return o(x,{...n},e);case"Label":return o(B,{...n},e);case"Icon":return o(V,{...n},e);case"Image":return o(D,{...n},e);case"Video":return o(q,{...n},e);case"Button":return o(A,{...n},e);case"Checkbox":return o(E,{...n},e);case"Input":return o(F,{...n},e);case"Textarea":return o(M,{...n},e);case"Select":return o(S,{...n},e);case"RadioGroup":return o(j,{...n},e);case"DatePicker":return o(v,{...n},e);case"Form":return o(G,{...n},e);case"Badge":return o(U,{...n},e);case"FileUploadRequest":return o(N,{...n},e);case"Chart":return o(K,{...n},e);case"Markdown":return o(z,{...n},e);case"Map":return o(H,{...n},e);default:return o($,{label:r??"Unknown",note:"Widget type not supported"},e)}}export{Q as prepareProps,X as renderWidget};
@@ -0,0 +1 @@
1
+ const e={URL:"url",TABS:"tabs",DATA_CHECKBOX:"data-checkbox",DATA_SELECT:"data-select",QUANTITY_CHANGE:"quantity.change",UPLOAD_SELECT:"upload.select",UPLOAD_REMOVE:"upload.remove",UPLOAD_ERROR:"upload.error",REPLY:"reply",REPLY_TEMPLATE:"reply-template",UPLOAD_SUBMIT:"upload.submit",ORDER_SUBMIT:"order.submit",MODE_CHANGE:"mode-change"},t=new Set([e.URL,e.TABS,e.DATA_CHECKBOX,e.DATA_SELECT,e.QUANTITY_CHANGE,e.UPLOAD_SELECT,e.UPLOAD_REMOVE,e.UPLOAD_ERROR]),o=new Set([e.REPLY,e.REPLY_TEMPLATE,e.UPLOAD_SUBMIT,e.ORDER_SUBMIT,e.MODE_CHANGE]);export{e as ACTION_TYPES,o as CONSUMER_ACTIONS,t as SELF_CONTAINED_ACTIONS};
File without changes
@@ -0,0 +1 @@
1
+ export*from"./widget-types";export*from"./action-types";export*from"./branding-types";
@@ -0,0 +1 @@
1
+ const e={Basic:"Basic",Card:"Card",ListView:"ListView",ListViewItem:"ListViewItem",Box:"Box",Row:"Row",Col:"Col",Form:"Form",Spacer:"Spacer",Divider:"Divider",Transition:"Transition",Title:"Title",Caption:"Caption",Text:"Text",Markdown:"Markdown",Badge:"Badge",Icon:"Icon",Image:"Image",Video:"Video",Button:"Button",Input:"Input",Textarea:"Textarea",Select:"Select",DatePicker:"DatePicker",Checkbox:"Checkbox",RadioGroup:"RadioGroup",Label:"Label",Chart:"Chart",FileUploadRequest:"FileUploadRequest",Map:"Map",MapMarker:"MapMarker",MapPolyline:"MapPolyline",MapCircle:"MapCircle",MapPolygon:"MapPolygon"},t={row:"row",col:"col"},o={start:"start",center:"center",end:"end",baseline:"baseline",stretch:"stretch"},r={start:"start",center:"center",end:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},n={nowrap:"nowrap",wrap:"wrap","wrap-reverse":"wrap-reverse"},i={start:"start",center:"center",end:"end"},p={normal:"normal",medium:"medium",semibold:"semibold",bold:"bold"},s={light:"light",dark:"dark"},a={clear:"clear"},l={"2xs":"2xs",xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl","3xl":"3xl","4xl":"4xl",full:"full","100%":"100%",none:"none"},g={solid:"solid",dashed:"dashed",dotted:"dotted",double:"double",groove:"groove",ridge:"ridge",inset:"inset",outset:"outset"},y={cover:"cover",contain:"contain",fill:"fill","scale-down":"scale-down",none:"none"},d={"top left":"top left",top:"top","top right":"top right",left:"left",center:"center",right:"right","bottom left":"bottom left",bottom:"bottom","bottom right":"bottom right"},c={solid:"solid",soft:"soft",outline:"outline",ghost:"ghost",tabs:"tabs"},x={soft:"soft",outline:"outline"},u={"3xs":"3xs","2xs":"2xs",xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl","3xl":"3xl"},S={"2xs":"2xs",xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl"},b={"2xs":"2xs",xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl","3xl":"3xl"},m={sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl","3xl":"3xl","4xl":"4xl","5xl":"5xl"},f={sm:"sm",md:"md",lg:"lg"},T={xs:"xs",sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl","3xl":"3xl",button:"button"},I={sm:"sm",md:"md",lg:"lg",xl:"xl","2xl":"2xl"},C={sm:"sm",md:"md",lg:"lg",full:"full"},P={primary:"primary",secondary:"secondary",info:"info",discovery:"discovery",success:"success",caution:"caution",warning:"warning",danger:"danger"},E={primary:"primary",secondary:"secondary"},k={primary:"primary",secondary:"secondary",success:"success",danger:"danger",warning:"warning",info:"info",discovery:"discovery"},A={solid:"solid",soft:"soft",outline:"outline"},h={sm:"sm",md:"md",lg:"lg"},_={number:"number",email:"email",text:"text",password:"password",tel:"tel",url:"url",card_number:"card_number",month_year:"month_year",cvc:"cvc",counter:"counter"},M={top:"top",bottom:"bottom",left:"left",right:"right"},O={start:"start",center:"center",end:"end"},B={auto:"auto",metadata:"metadata",none:"none"},R="auto",V={display:"display",input:"input"},w={bar:"bar",area:"area",line:"line"},N={basis:"basis",basisClosed:"basisClosed",basisOpen:"basisOpen",bumpX:"bumpX",bumpY:"bumpY",bump:"bump",linear:"linear",linearClosed:"linearClosed",natural:"natural",monotoneX:"monotoneX",monotoneY:"monotoneY",monotone:"monotone",step:"step",stepBefore:"stepBefore",stepAfter:"stepAfter"};export{o as ALIGNMENTS,k as BADGE_COLORS,h as BADGE_SIZES,A as BADGE_VARIANTS,g as BORDER_STYLES,P as BUTTON_COLORS,I as BUTTON_ICON_SIZES,E as BUTTON_STYLE_SHORTHANDS,f as CAPTION_SIZES,C as CARD_SIZES,u as CONTROL_SIZES,c as CONTROL_VARIANTS,N as CURVE_TYPES,t as DIRECTIONS,y as FIT_MODES,p as FONT_WEIGHTS,S as GUTTER_SIZES,T as ICON_SIZES,d as IMAGE_POSITIONS,_ as INPUT_TYPES,x as INPUT_VARIANTS,r as JUSTIFICATIONS,R as LIMIT_AUTO,V as MAP_MODES,O as POPOVER_ALIGNS,M as POPOVER_SIDES,B as PRELOAD_MODES,l as RADIUS_VALUES,w as SERIES_TYPES,i as TEXT_ALIGNS,b as TEXT_SIZES,s as THEME_MODES,a as TINTS,m as TITLE_SIZES,e as WIDGET_TYPES,n as WRAP_MODES};
@@ -0,0 +1 @@
1
+ import{jsx as O}from"react/jsx-runtime";import{createContext as y,useCallback as _,useContext as g,useMemo as h,useReducer as k,useRef as C}from"react";import{Linking as L}from"react-native";import{ACTION_TYPES as o,CONSUMER_ACTIONS as W,SELF_CONTAINED_ACTIONS as b}from"../schema";import{createInitialWidgetState as T,REDUCER_ACTIONS as f,widgetStateReducer as N}from"./reducer";import{useRendererConfig as P}from"../theme/ThemeContext";import{DEFAULT_CONFIG as D}from"../config";const v=n=>{console.warn("[widget-renderer] action dispatched outside WidgetStateManager:",n)},I=y(v);function V(){return g(I)}const m=y({state:T(),dispatch:()=>{}});function B({messageId:n,children:a,onConsumerAction:l}){const[r,e]=k(N,void 0,T),u=P(),s=C(r);s.current=r;const p=C(l);p.current=l;const S=C(u);S.current=u;const R=C(n);R.current=n;const E=h(()=>({messageId:n,state:r,dispatch:e}),[n,r]),A=_(x=>{if(!x?.type)return;const c=x.type,t=x.payload||{};if(c===o.URL){const i=t.text;typeof i=="string"&&i&&L.openURL(i).catch(()=>{});return}if(b.has(c)){switch(c){case o.TABS:e({type:f.SET_SELECTED_CATEGORY,payload:{id:String(t.id??"")}});break;case o.DATA_CHECKBOX:case o.DATA_SELECT:e({type:f.TOGGLE_CHECKBOX,payload:{data:String(t.data??"")}});break;case o.QUANTITY_CHANGE:{const i=String(t.name??""),d=Number(t.delta??0);e({type:f.TOGGLE_QUANTITY,payload:{id:i,delta:Number.isFinite(d)?d:0}});break}case o.UPLOAD_SELECT:e({type:f.UPLOAD_FILE,payload:{requestId:String(t.fileRequestId??""),file:t.file}});break;case o.UPLOAD_REMOVE:e({type:f.REMOVE_FILE,payload:{requestId:String(t.fileRequestId??"")}});break;case o.UPLOAD_ERROR:e({type:f.SET_UPLOAD_ERROR,payload:{requestId:String(t.fileRequestId??""),error:typeof t.error=="string"?t.error:null}});break}return}if(W.has(c)){const i=s.current,d={...t};R.current&&!d.messageId&&(d.messageId=R.current),c===o.REPLY_TEMPLATE&&(d.resolvedText=w(String(t.text??""),i,t,S.current)),c===o.ORDER_SUBMIT&&(d.resolvedText=U(i.formFields)),p.current?.({type:c,payload:d,state:i});return}console.warn("[widget-renderer] unhandled action",c,t)},[]);return O(m.Provider,{value:E,children:O(I.Provider,{value:A,children:a})})}function Y(){return g(m).state}function K(){return g(m).dispatch}function Q(){return g(m).messageId}function X(){return g(m).state.selectedCategory}function $(n){return g(m).state.fileUpload.files[n]}function w(n,a,l={},r=D){let e=n;const u=a.checkboxes?.selected?.join(", ")||"";e=e.split(r.template.dataSelectToken).join(u),e=e.split(r.template.dataCheckboxToken).join(u);const{text:s,messageId:p,...S}=l,R=Object.values(S).filter(Boolean).join(", ");return e=e.split(r.template.dataInputToken).join(R),a.formFields&&(e=e.replace(new RegExp(r.template.dataFieldPattern.source,"g"),(E,A)=>a.formFields?.[A]||"")),e=e.replace(new RegExp(r.template.formPlaceholderPattern.source,"g"),(E,A)=>String(S[A.trim()]??"")),e}function U(n){const a=Object.entries(n),l=a.filter(([e])=>e.startsWith("items."));return(l.length>0?l:a).map(([e,u])=>{const s=Number(u);if(!Number.isFinite(s)||s<=0)return null;const p=e.replace(/^items\./,"");return`${s}x ${p}`}).filter(Boolean).join(", ")}export{I as ActionHandlerContext,B as WidgetStateManager,U as formatOrderItems,w as resolveTemplate,V as useActionHandler,$ as useFileUploadState,Q as useMessageId,X as useSelectedCategory,K as useWidgetDispatch,Y as useWidgetState};
@@ -0,0 +1 @@
1
+ import{WidgetStateManager as r,useWidgetState as a,useWidgetDispatch as d,useMessageId as o,useSelectedCategory as s,useFileUploadState as g,useActionHandler as i,resolveTemplate as u,formatOrderItems as l}from"./context";import{widgetStateReducer as S,REDUCER_ACTIONS as m}from"./reducer";export{m as REDUCER_ACTIONS,r as WidgetStateManager,l as formatOrderItems,u as resolveTemplate,i as useActionHandler,g as useFileUploadState,o as useMessageId,s as useSelectedCategory,d as useWidgetDispatch,a as useWidgetState,S as widgetStateReducer};
@@ -0,0 +1 @@
1
+ function a(){return{fileUpload:{files:{},loading:!1,error:null},checkboxes:{selected:[],disabled:[],maxSelection:20},quantities:{},selectedCategory:void 0,formFields:{}}}const r={TOGGLE_CHECKBOX:"TOGGLE_CHECKBOX",SET_CHECKBOX_DATA:"SET_CHECKBOX_DATA",CLEAR_SELECTIONS:"CLEAR_SELECTIONS",SET_SELECTED_CATEGORY:"SET_SELECTED_CATEGORY",TOGGLE_QUANTITY:"TOGGLE_QUANTITY",UPLOAD_FILE:"UPLOAD_FILE",REMOVE_FILE:"REMOVE_FILE",SET_UPLOAD_ERROR:"SET_UPLOAD_ERROR",RESET_UPLOADS:"RESET_UPLOADS",SET_FORM_FIELD:"SET_FORM_FIELD"};function c(e,E){switch(E.type){case r.TOGGLE_CHECKBOX:{const{data:n}=E.payload,{selected:l,maxSelection:o}=e.checkboxes;return l.includes(n)?{...e,checkboxes:{...e.checkboxes,selected:l.filter(i=>i!==n)}}:l.length>=o?e:{...e,checkboxes:{...e.checkboxes,selected:[...l,n]}}}case r.SET_CHECKBOX_DATA:{const{data:n,checked:l}=E.payload,{selected:o,maxSelection:i}=e.checkboxes,d=o.includes(n);return l===d?e:l?o.length>=i?e:{...e,checkboxes:{...e.checkboxes,selected:[...o,n]}}:{...e,checkboxes:{...e.checkboxes,selected:o.filter(t=>t!==n)}}}case r.CLEAR_SELECTIONS:return{...e,checkboxes:{...e.checkboxes,disabled:e.checkboxes.selected,selected:[]}};case r.SET_SELECTED_CATEGORY:return{...e,selectedCategory:E.payload.id};case r.TOGGLE_QUANTITY:{const{id:n,delta:l}=E.payload;if(!n||l===0)return e;const o=e.quantities[n]??0,i=Math.max(0,o+l),d={...e.quantities};return i===0?delete d[n]:d[n]=i,{...e,quantities:d}}case r.UPLOAD_FILE:{const{requestId:n,file:l}=E.payload,o=(l&&typeof l=="object"&&"name"in l?String(l.name??""):null)||null;return{...e,fileUpload:{...e.fileUpload,loading:!1,files:{...e.fileUpload.files,[n]:{file:l,fileName:o,uploaded:!0,loading:!1,error:null}}}}}case r.REMOVE_FILE:{const{requestId:n}=E.payload,{[n]:l,...o}=e.fileUpload.files;return{...e,fileUpload:{...e.fileUpload,files:o}}}case r.SET_UPLOAD_ERROR:{const{requestId:n,error:l}=E.payload;return{...e,fileUpload:{...e.fileUpload,files:{...e.fileUpload.files,[n]:{...e.fileUpload.files[n],error:l,uploaded:!1,fileName:null,loading:!1}}}}}case r.RESET_UPLOADS:return{...e,fileUpload:a().fileUpload};case r.SET_FORM_FIELD:{const{name:n,value:l}=E.payload;return{...e,formFields:{...e.formFields,[n]:l}}}default:return e}}export{r as REDUCER_ACTIONS,a as createInitialWidgetState,c as widgetStateReducer};
@@ -0,0 +1 @@
1
+ import{jsx as l}from"react/jsx-runtime";import{createContext as p,useContext as n,useMemo as h}from"react";import{DEFAULT_CONFIG as s}from"../config";import{resolveBranding as u}from"./resolveBranding";import{buildVariants as a}from"./variants";import{freshTokens as v}from"./tokens";const d=v(),C=a(d),k={tokens:d,variants:C,mode:"light",config:s},e=p(k);function P({branding:f,mode:r="light",config:t=s,children:g}){const m=n(e),o=f??m.branding,T=h(()=>{const i=u(o,r),c=a(i,r==="dark");return{tokens:i,variants:c,mode:r,config:t,branding:o}},[o,r,t]);return l(e.Provider,{value:T,children:g})}function A(){return n(e)}function V(){return n(e).tokens}function b(){return n(e).variants}function F(){return n(e).config}export{P as ThemeProvider,F as useRendererConfig,A as useTheme,V as useTokens,b as useVariants};
@@ -0,0 +1 @@
1
+ const e={Button:{size:"lg",variant:"solid",color:"primary",pill:!0},Input:{size:"md",variant:"soft",inputType:"text"},Select:{size:"md",variant:"soft"},Textarea:{size:"md",variant:"soft",rows:3},DatePicker:{size:"md",variant:"soft"},Badge:{size:"md",variant:"soft",color:"secondary",pill:!0},Card:{size:"md"},Text:{size:"md",weight:"normal"},Title:{size:"lg",weight:"semibold"},Caption:{size:"sm",weight:"normal"},Label:{size:"md",weight:"medium"},Icon:{size:"md"},Box:{direction:"col"},Row:{},Col:{},Basic:{direction:"col"},ListView:{},ListViewItem:{},Spacer:{},Divider:{},Transition:{},Image:{},Video:{},Form:{direction:"col"},Checkbox:{},RadioGroup:{direction:"col"},FileUploadRequest:{}};export{e as defaults};
@@ -0,0 +1 @@
1
+ import{ThemeProvider as o,useTheme as t,useTokens as s,useVariants as l,useRendererConfig as n}from"./ThemeContext";import{BASE_TOKENS as a}from"./tokens";import{buildVariants as f}from"./variants";export*from"./style";import{resolveBranding as y,resolveBrandingStyles as S}from"./resolveBranding";import{defaults as T}from"./defaults";import{resolveStyle as v,applyDefaults as E,platformTranslate as I,platformRepair as K,PRIMITIVE_KINDS as P}from"./stylePipeline";export{a as BASE_TOKENS,T as DEFAULTS,P as PRIMITIVE_KINDS,o as ThemeProvider,E as applyDefaults,f as buildVariants,K as platformRepair,I as platformTranslate,y as resolveBranding,S as resolveBrandingStyles,v as resolveStyle,n as useRendererConfig,t as useTheme,s as useTokens,l as useVariants};
@@ -0,0 +1 @@
1
+ import{BASE_TOKENS as p,freshTokens as g}from"./tokens";import{hexToRgba as S}from"./style";const i={solid:"#3B4FFE",background:"#E5F3FF",text:"#FFFFFF"},l={surface:"#212121",surfaceAlt:"#181818",surfaceTertiary:"#131313",text:"#DCDCDC",textMuted:"#8F8F8F",textFaint:"#767676",border:"rgba(255,255,255,0.12)"};function f(r,o,t="rgba(0,0,0,0.1)"){if(!r)return t;const d=typeof o=="number"?o:100;if(d>=100)return r;const n=Math.max(0,Math.min(1,d/100));return S(r,n)??r}function B(r){return r.widgetBg!==void 0}function x(r){if(typeof r=="number")return r;if(typeof r!="string")return 12;switch(r){case"none":case"sharp":return 0;case"sm":return 8;case"md":case"rounded":return 12;case"pill":return 16;default:{const o=parseFloat(r);return Number.isFinite(o)?o:12}}}function m(r){return typeof r=="string"&&r==="pill"}function h(r,o){if(typeof r=="number")return r;if(typeof r!="string")return o;const t=parseFloat(r);return Number.isFinite(t)?t:o}function y(r){return typeof r!="string"||!r?"System":r.includes(",")?r:`${/\s/.test(r)?`"${r}"`:r}, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif`}function b(r){return{none:0,"2xs":Math.max(Math.round(r*.125),1),xs:Math.max(Math.round(r*.25),2),sm:Math.max(Math.round(r*.375),2),md:Math.max(Math.round(r*.5),4),lg:Math.max(Math.round(r*.625),6),xl:Math.max(Math.round(r*.75),8),"2xl":Math.round(r),"3xl":Math.round(r*1.25),"4xl":Math.round(r*1.5),pill:9999}}function M(r,o){const t=g(),d=r.borderRadius??12;t.radius=b(d);const n=o?l:void 0;return t.color.surface=r.widgetBg||n?.surface||"#FFFFFF",t.color.surfaceAlt=r.inputBgColor||n?.surfaceAlt||"#F4F4F5",t.color.surfaceTertiary=n?.surfaceTertiary??"#F3F3F3",t.color.text=r.primaryText||n?.text||"#1A1A1A",t.color.textMuted=r.secondaryText||n?.textMuted||"#6B6B6B",t.color.textFaint=r.tertiaryText||n?.textFaint||"#9B9B9B",t.color.placeholder=r.placeholderColor||n?.textFaint||"#9B9B9B",t.color.border=o?l.border:f(r.widgetBorderColor,r.widgetBorderOpacity),t.color.borderInput=o?l.border:f(r.inputBorderColor,r.inputBorderOpacity),r.widgetBorderStyle==="none"&&(t.ui.cardBorderWidth=0),t.color.primary=s(r.statusPrimary),t.color.secondary=s(r.statusSecondary),t.color.success=s(r.statusSuccess),t.color.danger=s(r.statusDanger),t.color.warning=s(r.statusWarning),t.color.info=s(r.statusInfo),t.color.discovery=s(r.statusDiscovery),t.font.family=y(r.fontFamily),t.font.baseSize=r.fontSize||p.font.baseSize,t.button.alwaysPill=r.cornerRadiusMode==="pill",t}function s(r){return{solid:r?.solid??i.solid,bg:r?.background??i.background,text:r?.text??i.text}}function T(r,o,t,d,n){const e=g();e.radius=b(t);const a=r.surface.widget,u=r.surface.input,c=n?l:void 0;e.color.surface=a?.background??c?.surface??"#FFFFFF",e.color.surfaceAlt=u?.background??c?.surfaceAlt??"#F4F4F5",e.color.surfaceTertiary=c?.surfaceTertiary??"#F3F3F3",e.color.text=r.text.primary??c?.text??"#1A1A1A",e.color.textMuted=r.text.secondary??c?.textMuted??"#6B6B6B",e.color.textFaint=r.text.tertiary??c?.textFaint??"#9B9B9B",e.color.placeholder=u?.placeholder_color??r.text.tertiary??c?.textFaint??"#9B9B9B";const F=n?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.1)";return e.color.border=f(a?.border?.color,a?.border?.opacity,F),e.color.borderInput=f(u?.border?.color,u?.border?.opacity,F),a?.border?.style==="none"&&(e.ui.cardBorderWidth=0),e.color.primary=s(r.status.primary),e.color.secondary=s(r.status.secondary),e.color.success=s(r.status.success),e.color.danger=s(r.status.danger),e.color.warning=s(r.status.warning),e.color.info=s(r.status.info??i),e.color.discovery=s(r.status.discovery??i),e.font.family=y(o.font_family),e.font.baseSize=h(o.font_size,p.font.baseSize),e.button.alwaysPill=d,e}function C(r,o="light"){const t=o==="dark";if(!r)return g();if(B(r))return M(r,t);const d=t&&r.themes.dark||r.themes.light,n=x(r.corner_radius),e=m(r.corner_radius);return T(d,r.typography,n,e,t)}function _(r,o="light"){if(B(r))return r;const t=o==="dark"&&r.themes.dark||r.themes.light,d=x(r.corner_radius),n=m(r.corner_radius),e=t.surface.widget,a=t.surface.input;return{widgetBg:e?.background??"#FFFFFF",inputBgColor:a?.background??"#F4F4F5",widgetBorderStyle:e?.border?.style??"solid",widgetBorderColor:e?.border?.color??"#000000",widgetBorderWidth:e?.border?.width??"1px",widgetBorderOpacity:e?.border?.opacity??10,inputBorderStyle:a?.border?.style??"solid",inputBorderColor:a?.border?.color??"#000000",inputBorderWidth:a?.border?.width??"1px",inputBorderOpacity:a?.border?.opacity??10,primaryText:t.text.primary,secondaryText:t.text.secondary,tertiaryText:t.text.tertiary,placeholderColor:a?.placeholder_color??t.text.tertiary,statusPrimary:t.status.primary??i,statusSecondary:t.status.secondary??i,statusSuccess:t.status.success??i,statusDanger:t.status.danger??i,statusWarning:t.status.warning??i,statusInfo:t.status.info??i,statusDiscovery:t.status.discovery??i,fontFamily:y(r.typography.font_family),fontSize:h(r.typography.font_size,14),borderRadius:d,cornerRadiusMode:n?"pill":typeof r.corner_radius=="string"&&r.corner_radius==="sharp"?"sharp":"rounded"}}export{C as resolveBranding,_ as resolveBrandingStyles};
@@ -0,0 +1 @@
1
+ function x(e,r){const n={...e};for(const t in r)r[t]!==void 0&&(n[t]=r[t]);return n}function y(e,r){return typeof e=="number"?e*r.spacingUnit:e}function T(e,r,n){if(e==null)return{};if(typeof e=="number"||typeof e=="string")return{[r]:y(e,n)};const t={},{top:o,right:i,bottom:d,left:p,x:s,y:a}=e,f=(h,b)=>{t[`${r}${h}`]=y(b,n)};return a!==void 0&&(f("Top",a),f("Bottom",a)),s!==void 0&&(f("Left",s),f("Right",s)),o!==void 0&&f("Top",o),i!==void 0&&f("Right",i),d!==void 0&&f("Bottom",d),p!==void 0&&f("Left",p),t}function u(e,r,n="light"){if(e==null)return;if(typeof e=="object")return n==="dark"?e.dark:e.light;switch(e){case"default":return r.color.text;case"primary":return r.color.primary.solid;case"secondary":return r.color.secondary.solid;case"success":return r.color.success.solid;case"danger":return r.color.danger.solid;case"warning":return r.color.warning.solid;case"info":return r.color.info.solid;case"discovery":return r.color.discovery.solid;case"tertiary":return r.color.textFaint;case"surface":case"surface-primary":return n==="dark"?"#212121":"#FFFFFF";case"surface-secondary":{const i=n==="dark"?g:l;return n==="dark"?i[100]:i[50]}case"surface-tertiary":{const i=n==="dark"?g:l;return n==="dark"?i[50]:i[75]}case"subtle":return c(r.color.text,.06)??r.color.border;case"emphasis":return r.color.text;case"muted":return r.color.textMuted;case"transparent":case"white":case"black":return e}const t=/^alpha-(\d{1,3})$/.exec(e);if(t){const i=Math.min(100,Math.max(0,parseInt(t[1],10)));return c(r.color.text,i/100)??e}const o=/^gray-(\d{1,4})$/.exec(e);if(o){const i=o[1],d=n==="dark"?g:l;if(i in d)return d[i]}return e}const l={0:"#ffffff",25:"#fcfcfc",50:"#f9f9f9",75:"#f3f3f3",100:"#ededed",150:"#dfdfdf",200:"#cdcdcd",250:"#b9b9b9",300:"#afafaf",350:"#9f9f9f",400:"#8f8f8f",450:"#767676",500:"#5d5d5d",550:"#4f4f4f",600:"#414141",650:"#393939",700:"#303030",750:"#282828",800:"#212121",850:"#1c1c1c",900:"#181818",925:"#161616",950:"#131313",975:"#101010",1e3:"#0d0d0d"},g={0:"#0d0d0d",25:"#101010",50:"#131313",75:"#161616",100:"#181818",150:"#1c1c1c",200:"#212121",250:"#282828",300:"#303030",350:"#393939",400:"#414141",450:"#4f4f4f",500:"#5d5d5d",550:"#767676",600:"#8f8f8f",650:"#9f9f9f",700:"#afafaf",750:"#b9b9b9",800:"#cdcdcd",850:"#dcdcdc",900:"#ededed",925:"#f3f3f3",950:"#f3f3f3",975:"#f9f9f9",1e3:"#ffffff"};function w(e,r,n="light"){if(e==null)return r.color.text;if(typeof e=="object")return n==="dark"?e.dark:e.light;switch(e){case"primary":return r.color.text;case"secondary":return r.color.textMuted;case"tertiary":return r.color.textFaint}return u(e,r,n)??r.color.text}function R(e,r,n="light"){if(e==null)return;if(typeof e=="object")return n==="dark"?e.dark:e.light;const t={primary:r.color.primary,secondary:r.color.secondary,success:r.color.success,danger:r.color.danger,warning:r.color.warning,info:r.color.info,discovery:r.color.discovery};return t[e]?t[e].solid:u(e,r,n)}function S(e,r){if(e==null)return{};if(typeof e=="number")return{borderWidth:e,borderColor:c(r.color.text,r.ui.hairlineAlpha)??"rgba(0,0,0,0.1)",borderStyle:"solid"};if("size"in e){const i=(e.color==="default"?void 0:u(e.color,r))??c(r.color.text,r.ui.hairlineAlpha)??"rgba(0,0,0,0.1)";return{borderWidth:e.size,borderColor:i,borderStyle:m(e.style)}}const n={},t=e,o=(i,d)=>{if(typeof d=="number"){n[`border${i}Width`]=d,n[`border${i}Color`]=c(r.color.text,r.ui.hairlineAlpha)??"rgba(0,0,0,0.1)";return}n[`border${i}Width`]=d.size,n[`border${i}Color`]=(d.color==="default"?void 0:u(d.color,r))??c(r.color.text,r.ui.hairlineAlpha)??"rgba(0,0,0,0.1)"};return t.y!==void 0&&(o("Top",t.y),o("Bottom",t.y)),t.x!==void 0&&(o("Left",t.x),o("Right",t.x)),t.top!==void 0&&o("Top",t.top),t.right!==void 0&&o("Right",t.right),t.bottom!==void 0&&o("Bottom",t.bottom),t.left!==void 0&&o("Left",t.left),n}function m(e){return e==="dotted"?"dotted":e==="dashed"?"dashed":"solid"}function C(e,r){if(e==null)return;if(typeof e=="number")return e;if(e==="full"||e==="100%")return r.radius.pill;if(e in r.radius)return r.radius[e];const n=parseFloat(String(e));return Number.isFinite(n)?n:void 0}function $(e,r,n){if(n)return r.radius.pill;const t=e??"md",o=r.control.size[t]?.radiusScale??.5;return Math.max(Math.round(r.radius["2xl"]*o),2)}function F(e,r,n){if(n)return r.radius.pill;const t=e??"md",o=r.badge.size[t]?.radiusScale??.25;return Math.max(Math.round(r.radius["2xl"]*o),2)}function B(e){return e.radius["2xl"]}function N(e){if(e==null)return;if(typeof e=="number"||typeof e=="string"&&/%$/.test(e))return e;const r=/^(-?\d+(\.\d+)?)(px)?$/.exec(e);return r?parseFloat(r[1]):e}function M(e){switch(e){case"start":return"flex-start";case"center":return"center";case"end":return"flex-end";case"baseline":return"baseline";case"stretch":return"stretch";default:return}}function V(e){switch(e){case"start":return"flex-start";case"center":return"center";case"end":return"flex-end";case"between":return"space-between";case"around":return"space-around";case"evenly":return"space-evenly";case"stretch":return"flex-start";default:return}}function c(e,r){if(typeof e!="string")return;let n=e.replace("#","");if(n.length===3&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),n.length===8&&(n=n.slice(0,6)),n.length!==6)return;const t=parseInt(n.slice(0,2),16),o=parseInt(n.slice(2,4),16),i=parseInt(n.slice(4,6),16);if(!(Number.isNaN(t)||Number.isNaN(o)||Number.isNaN(i)))return`rgba(${t}, ${o}, ${i}, ${r})`}function A(e){return typeof e=="string"&&/-gradient\(/.test(e)}export{M as alignToFlex,F as badgeRadius,S as borderToStyle,B as cardRadius,$ as controlRadius,c as hexToRgba,A as isGradient,V as justifyToFlex,C as radiusToNumber,u as resolveColor,w as resolveTextColor,R as resolveTypographyColor,N as sizeToRN,T as spacingToStyle,y as spacingValue,x as withDefaults};
@@ -0,0 +1 @@
1
+ import{Platform as f}from"react-native";import{LINE_HEIGHT_RATIO as d}from"./tokens";const r={BOX:"box",TEXT:"text",IMAGE:"image"};function l(n){return n.platformOS??f.OS}const S=20;function y(n,o,t){if(o===r.TEXT){const i=n;l(t)==="web"&&i.lineHeight==null&&typeof i.fontSize=="number"&&(i.lineHeight=Math.round(i.fontSize*d))}return n}function s(n,o,t){if(l(t)==="web"){if(o===r.BOX&&t.clearTintFilter){const e=n;e.backdropFilter=t.clearTintFilter,e.WebkitBackdropFilter=t.clearTintFilter}return n}if(o===r.BOX){const e=n;e.flex!==void 0&&(e.flexGrow=Number(e.flex),delete e.flex)}return n}function u(n,o,t){const i=l(t);if(o===r.BOX){const e=n;t.controlHeightPx!==void 0&&(i==="web"?e.height===void 0&&(e.height=t.controlHeightPx):e.minHeight===void 0&&(e.minHeight=t.controlHeightPx)),i==="web"?e.minHeight===void 0&&(e.minHeight="auto"):t.hasBackground&&e.borderRadius!==void 0&&(e.flexShrink=0)}if(o===r.TEXT&&i!=="web"){const e=n;typeof t.textWidthPx=="number"&&t.textWidthPx<=S&&(e.lineHeight=typeof e.fontSize=="number"?e.fontSize:14,e.height=e.lineHeight,e.textAlignVertical="center"),i==="android"&&e.includeFontPadding===void 0&&(e.includeFontPadding=!1)}return n}function I(n,o,t={}){const i={...n},e=y(i,o,t),a=s(e,o,t);return u(a,o,t)}export{r as PRIMITIVE_KINDS,y as applyDefaults,u as platformRepair,s as platformTranslate,I as resolveStyle};
@@ -0,0 +1 @@
1
+ import{Platform as e}from"react-native";const r=3,s=1.2,i={xs:12,sm:14,md:16,lg:18,xl:20,"2xl":24,"3xl":32},n={xs:14,sm:16,md:18,lg:20,xl:22,"2xl":24,"3xl":26};function t(){try{return require("react-native")?.StyleSheet?.hairlineWidth??.5}catch{return .5}}const a={spacingUnit:r,space:{0:0,2:2,4:4,6:6,8:8,10:10,12:12,14:14,16:16,20:20,24:24,32:32},radius:{none:0,"2xs":2,xs:4,sm:6,md:8,lg:10,xl:12,"2xl":16,"3xl":20,"4xl":24,pill:9999},font:{family:"System",monoFamily:"monospace",baseSize:14,weight:{normal:"400",medium:"500",semibold:e.OS==="android"?"700":"600",bold:"700"},size:{text:{"2xs":10,...i},title:{sm:18,md:20,lg:24,xl:32,"2xl":36,"3xl":48,"4xl":60,"5xl":72},caption:{sm:14,md:16,lg:18}}},color:{surface:"#FFFFFF",surfaceAlt:"#F4F4F5",surfaceTertiary:"#F3F3F3",text:"#1A1A1A",textMuted:"#6B6B6B",textFaint:"#9B9B9B",placeholder:"#9B9B9B",border:"rgba(0,0,0,0.1)",borderInput:"rgba(0,0,0,0.1)",transparent:"transparent",primary:{solid:"#3B4FFE",bg:"#E5F3FF",text:"#FFFFFF"},secondary:{solid:"#5D5D5D",bg:"#F3F3F3",text:"#0D0D0D"},success:{solid:"#00A240",bg:"#D9F4E4",text:"#FFFFFF"},danger:{solid:"#E02E2A",bg:"#FFD9D9",text:"#FFFFFF"},warning:{solid:"#E25507",bg:"#FFE4D0",text:"#FFFFFF"},info:{solid:"#0285FF",bg:"#D7ECFF",text:"#FFFFFF"},discovery:{solid:"#8B5CF6",bg:"#EDE6FF",text:"#FFFFFF"}},control:{size:{"3xs":{h:22,padH:6,font:12,gap:3,iconPx:12,radiusScale:.375},"2xs":{h:24,padH:8,font:12,gap:4,iconPx:12,radiusScale:.375},xs:{h:26,padH:8,font:14,gap:4,iconPx:14,radiusScale:.375},sm:{h:28,padH:10,font:14,gap:4,iconPx:16,radiusScale:.375},md:{h:32,padH:12,font:14,gap:6,iconPx:18,radiusScale:.5},lg:{h:36,padH:12,font:14,gap:6,iconPx:20,radiusScale:.5},xl:{h:40,padH:14,font:16,gap:6,iconPx:22,radiusScale:.625},"2xl":{h:44,padH:16,font:16,gap:6,iconPx:24,radiusScale:.625},"3xl":{h:48,padH:16,font:16,gap:6,iconPx:24,radiusScale:.625}}},badge:{size:{sm:{padH:5,font:12,lineHeight:20,radiusScale:.25},md:{padH:6,font:14,lineHeight:22,radiusScale:.25},lg:{padH:8,font:14,lineHeight:24,radiusScale:.375}},gap:4,fontWeight:e.OS==="android"?"700":"600"},card:{size:{sm:400,md:448,lg:800,full:9999},defaultPadPx:16,contentGap:12,actionRowGap:8,shellGap:12,actionButtonSize:"lg"},icon:{size:{button:18,...n},wrapperPad:6,wrapperRoundingPct:.2},ui:{disabledOpacity:.5,pressedOpacity:.85,pressedOverlayAlpha:.04,hairlineAlpha:.1,hairlineBorder:t(),cardBorderWidth:t()},button:{alwaysPill:!1},checkbox:{size:18,borderWidth:1.5,radius:4,tick:{fontSize:12,lineHeight:14,weight:"700"},rowGap:8},radio:{ring:20,ringBorder:2,dot:10,rowGap:8,groupGap:12},counter:{btn:32,btnRadius:8,glyph:{fontSize:20,lineHeight:22,weight:e.OS==="android"?"700":"400"},valueMinWidth:24,rowGap:8},modal:{backdrop:"rgba(0,0,0,0.4)",sheetMaxHeight:"60%",sheetTopRadius:16,sheetPadV:4,optionPadV:12,optionPadH:16},overlay:{video:"rgba(0,0,0,0.15)",videoDefaultH:200},glass:{fallbackBg:"rgba(255,255,255,0.04)",fallbackBorder:"rgba(255,255,255,0.10)",fallbackBorderWidth:.5,webFilter:"blur(40px) saturate(1.3) brightness(1.1)",nativeIntensity:28,nativeTint:{dark:"systemUltraThinMaterialDark",light:"systemUltraThinMaterialLight"},androidTint:{dark:"dark",light:"light"},androidBlurMethod:"dimezisBlurView"},placeholder:{padding:16,minHeight:80,innerGap:4,borderWidth:1,label:{fontSize:13,weight:e.OS==="android"?"700":"600"},note:{fontSize:11}},fileUpload:{rowGap:12,padV:10,padH:14,colGap:2,label:{fontSize:14,weight:"500"},hint:{fontSize:11}},banner:{padV:8,padH:12,gap:6,defaultTextSize:"sm"},listItem:{gap:4,padV:8},text:{captionOpacity:.9,titleLetterSpacing:-.1,requiredMarker:{marginLeft:4}},layout:{button:{base:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",justifyContent:"center"},block:{alignSelf:"stretch",flexShrink:1,...e.OS==="web"?{width:"100%"}:{flex:1}}},badge:{pill:{flexDirection:"row",alignItems:"center",justifyContent:"center"}},card:{shell:{width:"100%",flexShrink:0},wrapper:{width:"100%",overflow:"hidden"},banner:{flexDirection:"row",alignItems:"center"},actionRow:{flexDirection:"row",flexWrap:"wrap",justifyContent:"flex-start",alignItems:"center",width:"100%",flexShrink:0}},checkbox:{row:{flexDirection:"row",alignItems:"center"},box:{alignItems:"center",justifyContent:"center"}},radio:{row:{flexDirection:"row",alignItems:"center"},ring:{alignItems:"center",justifyContent:"center"},group:{flexWrap:"wrap"}},counter:{row:{flexDirection:"row",alignItems:"center"},btn:{alignItems:"center",justifyContent:"center"},valueText:{textAlign:"center"}},input:{wrap:{justifyContent:"center"},field:{flex:1}},select:{backdrop:{flex:1,justifyContent:"flex-end"},trigger:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},block:{alignSelf:"stretch"},sheetList:{flexGrow:0},option:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},label:{flex:1}},textarea:{input:{textAlignVertical:"top"}},datePicker:{input:{flex:1}},label:{row:{flexDirection:"row",alignItems:"center",marginBottom:4}},fileUpload:{row:{flexDirection:"row",alignItems:"center"},col:{flex:1}},placeholder:{wrap:{borderStyle:"dashed",alignItems:"center",justifyContent:"center"}},video:{wrap:{overflow:"hidden",alignItems:"center",justifyContent:"center"},overlay:{alignItems:"center",justifyContent:"center"}},icon:{wrapper:{alignItems:"center",justifyContent:"center",flexShrink:0}},image:{base:{backgroundColor:"transparent"},placeholder:{alignItems:"center",justifyContent:"center"}},divider:{base:{alignSelf:"stretch"}},spacer:{base:{flex:1}},listItem:{row:{flexDirection:"row",alignSelf:"stretch"}},backgroundFill:{imageWrap:{overflow:"hidden"}}}};function d(){return JSON.parse(JSON.stringify(a))}export{a as BASE_TOKENS,n as ICON_SIZE_SCALE,s as LINE_HEIGHT_RATIO,r as SPACING_UNIT,i as TEXT_SIZE_SCALE,d as freshTokens};
@@ -0,0 +1 @@
1
+ import{hexToRgba as c}from"./style";const b=["primary","secondary","success","danger","warning","info","discovery"];function s(r,e,n=!1){const a={};for(const t of b){const o=r.color[t];switch(e){case"solid":a[t]={bg:o.solid,fg:o.text,border:"transparent",borderWidth:0};break;case"soft":{const d=t==="secondary"?c(r.color.text,n?.12:.08)??o.bg:c(o.solid,.14)??o.bg,l=t==="primary"||t==="secondary"?r.color.text:o.solid;a[t]={bg:d,fg:l,border:"transparent",borderWidth:0};break}case"outline":{const d=t==="primary"?r.color.text:t==="secondary"?r.color.textMuted:o.solid,l=t==="primary"||t==="secondary"?c(r.color.text,.3)??o.solid:o.solid;a[t]={bg:"transparent",fg:d,border:l,borderWidth:1}}break;case"ghost":{const d=t==="primary"?r.color.text:t==="secondary"?r.color.textMuted:o.solid;a[t]={bg:"transparent",fg:d,border:"transparent",borderWidth:0}}break;case"tabs":a[t]={bg:r.color.surface,fg:r.color.textMuted,border:"transparent",borderWidth:0};break}}return a}function i(r,e,n=!1){const a={};for(const t of b){const o=r.color[t];switch(e){case"solid":a[t]={bg:o.solid,fg:t==="secondary"||t==="primary"?"#FFFFFF":o.text,border:"transparent",borderWidth:0};break;case"soft":{const d=t==="secondary";a[t]={bg:d?c(r.color.text,n?.12:.08)??o.bg:c(o.solid,.15)??o.bg,fg:d?r.color.textMuted:o.solid,border:"transparent",borderWidth:0};break}case"outline":a[t]={bg:"transparent",fg:o.solid,border:o.solid,borderWidth:1};break}}return a}function f(r,e=!1){return{button:{solid:s(r,"solid",e),soft:s(r,"soft",e),outline:s(r,"outline",e),ghost:s(r,"ghost",e),tabs:s(r,"tabs",e)},input:{soft:{bg:r.color.surfaceAlt,fg:r.color.text,border:"transparent",borderWidth:0},outline:{bg:"transparent",fg:r.color.text,border:r.color.borderInput,borderWidth:1},ghost:{bg:"transparent",fg:r.color.text,border:"transparent",borderWidth:0}},badge:{solid:i(r,"solid",e),soft:i(r,"soft",e),outline:i(r,"outline",e)},card:{default:{bg:r.color.surface,fg:r.color.text,border:r.color.border,borderWidth:r.ui.cardBorderWidth}}}}export{f as buildVariants};
@@ -0,0 +1 @@
1
+ import{validateFields as f}from"./formValidationCore";import{validateFields as T}from"./formValidationCore";function g(t){if(!t)return document.body;let r=t;for(;r&&r!==document.body;){if(r.hasAttribute("data-radix-portal")||r.getAttribute("aria-modal")==="true")return r;r=r.parentElement}return document.body}function h(t,r,s){const a=s?.closest("[data-widget-renderer]"),o=a?.getAttribute("data-theme")||"dark",n=document.createElement("div");n.className="widget-alert-overlay",n.setAttribute("data-theme",o);const i=document.createElement("div");if(i.className="widget-alert-dialog",a){const c=a.style.cssText.split(";").filter(u=>u.trimStart().startsWith("--")).join(";");c&&(i.style.cssText=c)}i.setAttribute("role","alertdialog"),i.setAttribute("aria-labelledby","widget-alert-title"),i.setAttribute("aria-describedby","widget-alert-msg");const e=document.createElement("p");e.id="widget-alert-title",e.className="widget-alert-title",e.textContent=t,i.appendChild(e);const l=document.createElement("p");l.id="widget-alert-msg",l.className="widget-alert-message",l.textContent=r,i.appendChild(l);const d=document.createElement("button");d.className="widget-alert-btn",d.textContent="OK",d.addEventListener("click",()=>n.remove()),i.appendChild(d),n.appendChild(i),g(s).appendChild(n),d.focus()}function E(t){t.querySelectorAll(".widget-field-error-col").forEach(r=>{const s=r.parentElement;s&&(Array.from(r.children).forEach(o=>{o.classList.contains("widget-field-error")||s.insertBefore(o,r)}),r.remove())}),t.querySelectorAll(".widget-field-error").forEach(r=>r.remove()),t.querySelectorAll("[data-invalid]").forEach(r=>r.removeAttribute("data-invalid"))}function m(t){const r=t.tagName==="SELECT"?"change":"input",s=()=>{t.removeAttribute("data-invalid"),t.closest("form")?.querySelector(`.select-trigger[data-invalid][data-name="${t.getAttribute("name")}"]`)?.removeAttribute("data-invalid");const o=t.getAttribute("name"),n=t.closest(".widget-field-error-col");if(n){const i=n.parentElement;i&&(Array.from(n.children).forEach(l=>{l.classList.contains("widget-field-error")||i.insertBefore(l,n)}),n.remove())}else(t.parentElement?.querySelector(`.widget-field-error[data-for="${o}"]`)??t.closest(".radio-group")?.parentElement?.querySelector(`.widget-field-error[data-for="${o}"]`)??t.closest(".counter-wrapper")?.parentElement?.querySelector(`.widget-field-error[data-for="${o}"]`))?.remove();t.removeEventListener(r,s)};t.addEventListener(r,s,{once:!0})}function p(t,r,s){const a=document.createElement("span");a.className="widget-field-error",a.setAttribute("data-for",r),a.textContent=s;const o=t.closest(".counter-wrapper")||t.closest(".checkbox-wrapper")||t.closest(".radio-group")||t;if(o.classList.contains("radio-group")&&o.parentElement?.querySelector(`.widget-field-error[data-for="${r}"]`))return;const n=o.parentElement;if(!n)return;const i=getComputedStyle(n);if(i.display==="flex"&&i.flexDirection==="row"){const e=document.createElement("div");e.className="widget-field-error-col",e.style.display="flex",e.style.flexDirection="column",e.style.flex="1",n.insertBefore(e,o),e.appendChild(o),e.appendChild(a)}else n.insertBefore(a,o.nextSibling)}function y(t){E(t);const r=t.querySelectorAll("input[name], textarea[name], select[name]"),s=[],a=new Map;r.forEach(e=>{const l=e.getAttribute("name"),d=e instanceof HTMLInputElement&&e.type==="checkbox",c=e instanceof HTMLInputElement&&e.type==="radio";if(s.push({name:l,value:d?"":e.value?.trim()??"",type:e instanceof HTMLInputElement?e.type:e instanceof HTMLSelectElement?"select":"textarea",required:e.hasAttribute("required"),checked:e instanceof HTMLInputElement?e.checked:void 0,pattern:e.getAttribute("pattern")||void 0,dataPattern:e.getAttribute("data-pattern")||void 0}),c){if(!a.has(l)){const u=t.querySelector(`.radio-group input[name="${l}"]`);a.set(l,u??e)}}else a.set(l,e)});const n=f(s).errors.map(e=>({name:e.name,message:e.message,element:a.get(e.name)??t}));n.forEach(({element:e,name:l,message:d})=>{if(e.setAttribute("data-invalid","true"),e instanceof HTMLInputElement&&e.type==="hidden"){const c=t.querySelector(".select-trigger");if(c){c.setAttribute("data-invalid","true"),c.setAttribute("data-name",l),p(c,l,d),m(e);return}}p(e,l,d),m(e)});let i;if(n.length>0){const e=n[0].element;if(e.closest('[style*="display: none"]')){const d=e.closest("[data-tab-id]");d&&(i=d.getAttribute("data-tab-id")||void 0)}i||(e instanceof HTMLInputElement&&e.type==="hidden"?t.querySelector(".select-trigger")?.focus():(e.scrollIntoView({behavior:"smooth",block:"nearest"}),e.focus()))}return{valid:n.length===0,errors:n,firstInvalidStepId:i}}function L(t){if(!t)return;t.querySelectorAll("[required]").forEach(s=>{const a=s.getAttribute("name");if(!a)return;const o=t.querySelector(`label[for="${a}"]`);o&&o.setAttribute("data-required","true")})}export{L as markRequiredLabels,h as showFormAlert,T as validateFields,y as validateForm};
@@ -0,0 +1 @@
1
+ import{validateFields as l}from"./formValidationCore";function o(r,e){}function t(r){return{isValid:!0,errors:[]}}function i(r){}export{i as markRequiredLabels,o as showFormAlert,l as validateFields,t as validateForm};
@@ -0,0 +1 @@
1
+ import{DEFAULT_INPUT_PATTERNS as C}from"../constants/validation";function P(c){const n=[],d=new Set;for(const u of c){const{name:t,value:i,type:r,required:m,checked:h,pattern:x,dataPattern:k}=u,l=r==="checkbox",o=r==="radio",v=r==="hidden";if(o){if(d.has(t))continue;d.add(t)}if(m){let e=!1;if(l?e=!h:o?e=!c.some(s=>s.name===t&&s.type==="radio"&&s.checked):e=!i,e){n.push({name:t,message:"This field is required"});continue}}if(!i||l||o||v)continue;const f=x||k,p=C[r],a=f||p?.regex;if(!a)continue;let g;try{g=new RegExp("^(?:"+a+")$")}catch(e){console.warn(`[formValidation] Invalid pattern for field "${t}", skipping pattern check:`,a,e);continue}if(!g.test(i)){const e=f?"Invalid format":p?.message??"Invalid format";n.push({name:t,message:e})}}return{valid:n.length===0,errors:n}}export{P as validateFields};
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{WidgetErrorBoundary as o}from"../WidgetErrorBoundary";import{renderWidget as t}from"../runtime";function g(e){return r(o,{children:t(e)})}export{g as safeRenderWidget};
@@ -0,0 +1 @@
1
+ import{useActionHandler as a,resolveTemplate as l,formatOrderItems as i}from"../state";import{useActionHandler as c}from"../state";import{createContext as d}from"react";import{createContext as o}from"react";const t=o(null);export{t as ActionHandlerContext,d as createContext,c as defaultActionHandler,i as formatOrderItems,l as resolveTemplate,a as useActionHandler};
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "@1interface/widgets",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "license": "UNLICENSED",
6
+ "private": false,
7
+ "main": "./dist/index.mjs",
8
+ "module": "./dist/index.mjs",
9
+ "react-native": "./native/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "react-native": "./native/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.mjs",
16
+ "default": "./dist/index.mjs"
17
+ },
18
+ "./style.css": "./dist/widgets.css"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "native"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "dependencies": {
28
+ "@react-google-maps/api": "^2.20.8",
29
+ "leaflet": "^1.9.4",
30
+ "react-leaflet": "^5.0.0",
31
+ "react-markdown": "^10.1.0",
32
+ "react-native-web": "^0.21.2",
33
+ "recharts": "^3.8.1"
34
+ },
35
+ "peerDependencies": {
36
+ "expo-blur": ">=12.0.0",
37
+ "expo-glass-effect": ">=0.1.0",
38
+ "expo-document-picker": ">=12.0.0",
39
+ "expo-image-picker": ">=15.0.0",
40
+ "expo-linear-gradient": ">=13.0.0",
41
+ "expo-video": ">=2.0.0",
42
+ "lucide-react-native": ">=0.400.0",
43
+ "react": ">=18.0.0",
44
+ "react-dom": ">=18.0.0",
45
+ "react-native": ">=0.74.0",
46
+ "react-native-gifted-charts": ">=1.4.0",
47
+ "react-native-maps": ">=1.10.0",
48
+ "react-native-markdown-display": ">=7.0.0",
49
+ "react-native-svg": ">=15.0.0"
50
+ },
51
+ "peerDependenciesMeta": {
52
+ "react-native": {
53
+ "optional": true
54
+ },
55
+ "react-native-svg": {
56
+ "optional": true
57
+ },
58
+ "lucide-react-native": {
59
+ "optional": true
60
+ },
61
+ "expo-blur": {
62
+ "optional": true
63
+ },
64
+ "expo-glass-effect": {
65
+ "optional": true
66
+ },
67
+ "expo-linear-gradient": {
68
+ "optional": true
69
+ },
70
+ "expo-document-picker": {
71
+ "optional": true
72
+ },
73
+ "expo-image-picker": {
74
+ "optional": true
75
+ },
76
+ "expo-video": {
77
+ "optional": true
78
+ },
79
+ "react-native-markdown-display": {
80
+ "optional": true
81
+ },
82
+ "react-native-gifted-charts": {
83
+ "optional": true
84
+ },
85
+ "react-native-maps": {
86
+ "optional": true
87
+ }
88
+ },
89
+ "devDependencies": {
90
+ "@rollup/plugin-terser": "^1.0.0",
91
+ "@types/leaflet": "^1.9.21",
92
+ "@types/react": "^19.2.15",
93
+ "@types/react-dom": "^19.2.3",
94
+ "@vitejs/plugin-react": "5.1.1",
95
+ "esbuild": "0.27.2",
96
+ "jsdom": "^27.4.0",
97
+ "react-native": "^0.85.3",
98
+ "terser": "5.46.1",
99
+ "typescript": "~5.9.3",
100
+ "vite": "7.3.2",
101
+ "vite-plugin-dts": "^4.5.4",
102
+ "vitest": "4.1.0"
103
+ },
104
+ "scripts": {
105
+ "build": "vite build && node scripts/build-native.mjs",
106
+ "dev": "vite build --watch",
107
+ "test": "vitest",
108
+ "postinstall": "rm -rf node_modules/react node_modules/react-dom 2>/dev/null || true"
109
+ }
110
+ }