@1interface/widgets 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{A as a,m as e,B as s,n as t,o as r,p as i,C as o,q as d,t as n,v as u,w as l,x as m,D as g,y as C,z as T,F as c,E as p,G as S,I,H as x,J as A,L as F,K as R,N as W,O as E,R as N,P as O,Q as f,S as h,T as v,U as D,V as L,W as _,X as k,Y as B,Z as M,_ as U,$ as w,a0 as P,a1 as V,a2 as b,a3 as H,e as j,a4 as q,a5 as y,a6 as G,a7 as Y,a8 as z,a9 as J,e as K,e as Q,aa as X,ab as Z,f as $,ac as aa,a as ea,u as sa,ad as ta,ae as ra,af as ia,ag as oa,ah as da,ai as na}from"./index-BJAzmYWE.js";import"react/jsx-runtime";import"react";export{a as ACTION_TYPES,e as ActionHandlerContext,s as Badge,t as BasicRoot,r as Box,i as Button,o as CONSUMER_ACTIONS,d as Caption,n as Card,u as Chart,l as Checkbox,m as Col,g as DEFAULT_CONFIG,C as DatePicker,T as Divider,c as FileUploadRequest,p as Form,S as FormContext,I as Icon,x as Image,A as Input,F as Label,R as ListView,W as ListViewItem,E as Markdown,N as REDUCER_ACTIONS,O as RadioGroup,f as Row,h as SELF_CONTAINED_ACTIONS,v as Select,D as Spacer,L as Text,_ as Textarea,k as Title,B as Transition,M as Video,U as WidgetErrorBoundary,w as WidgetRenderer,P as WidgetStateManager,V as WidgetStateProvider,b as WidgetThemeProvider,H as configureMap,j as defaultActionHandler,q as formatOrderItems,y as markRequiredLabels,G as mergeConfig,Y as renderWidget,z as resolveTemplate,J as safeRenderWidget,K as useAction,Q as useActionHandler,X as useFileUploadState,Z as useFormContext,$ as useMessageId,aa as useSelectedCategory,ea as useTheme,sa as useTokens,ta as useVariants,ra as useWidgetDispatch,ia as useWidgetState,oa as useWidgetTheme,da as validateFields,na as validateForm};
1
+ import{A as a,m as e,B as s,n as t,o as r,p as i,C as o,q as d,t as n,v as u,w as l,x as m,D as g,y as C,z as T,F as c,E as p,G as S,I,H as x,J as A,L as F,K as R,N as W,O as E,R as N,P as O,Q as f,S as h,T as v,U as D,V as L,W as _,X as k,Y as B,Z as M,_ as U,$ as w,a0 as P,a1 as V,a2 as b,a3 as H,e as j,a4 as q,a5 as y,a6 as G,a7 as Y,a8 as z,a9 as J,e as K,e as Q,aa as X,ab as Z,f as $,ac as aa,a as ea,u as sa,ad as ta,ae as ra,af as ia,ag as oa,ah as da,ai as na}from"./index-DrYiYn-7.js";import"react/jsx-runtime";import"react";export{a as ACTION_TYPES,e as ActionHandlerContext,s as Badge,t as BasicRoot,r as Box,i as Button,o as CONSUMER_ACTIONS,d as Caption,n as Card,u as Chart,l as Checkbox,m as Col,g as DEFAULT_CONFIG,C as DatePicker,T as Divider,c as FileUploadRequest,p as Form,S as FormContext,I as Icon,x as Image,A as Input,F as Label,R as ListView,W as ListViewItem,E as Markdown,N as REDUCER_ACTIONS,O as RadioGroup,f as Row,h as SELF_CONTAINED_ACTIONS,v as Select,D as Spacer,L as Text,_ as Textarea,k as Title,B as Transition,M as Video,U as WidgetErrorBoundary,w as WidgetRenderer,P as WidgetStateManager,V as WidgetStateProvider,b as WidgetThemeProvider,H as configureMap,j as defaultActionHandler,q as formatOrderItems,y as markRequiredLabels,G as mergeConfig,Y as renderWidget,z as resolveTemplate,J as safeRenderWidget,K as useAction,Q as useActionHandler,X as useFileUploadState,Z as useFormContext,$ as useMessageId,aa as useSelectedCategory,ea as useTheme,sa as useTokens,ta as useVariants,ra as useWidgetDispatch,ia as useWidgetState,oa as useWidgetTheme,da as validateFields,na as validateForm};
@@ -1,4 +1,4 @@
1
- import{jsx as c}from"react/jsx-runtime";import{useRef as T,useState as y,useEffect as H,useCallback as C}from"react";import{ThemeProvider as N,useTheme as P}from"./theme";import{WidgetStateManager as A}from"./state";import{WidgetErrorBoundary as O}from"./WidgetErrorBoundary";import{renderWidget as F}from"./runtime";import{mergeConfig as j}from"./config";import{UserLocationProvider as _}from"./components/Map";import{TEXT_DIRECTIONS as $}from"./schema";const b=390,z=24;function G(e){const t=e.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i)??e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);if(!t)return e;const a=e.startsWith("#"),l=a?parseInt(t[1],16):Number(t[1]),d=a?parseInt(t[2],16):Number(t[2]),g=a?parseInt(t[3],16):Number(t[3]),n=.08,u=Math.round(l*(1-n)+80*n),m=Math.round(d*(1-n)+120*n),f=Math.round(g*(1-n)+200*n);return`rgb(${u}, ${m}, ${f})`}const q=`
1
+ import{jsx as c}from"react/jsx-runtime";import{useRef as W,useState as y,useEffect as H,useCallback as C}from"react";import{ThemeProvider as N,useTheme as O}from"./theme";import{WidgetStateManager as A}from"./state";import{WidgetErrorBoundary as P}from"./WidgetErrorBoundary";import{renderWidget as F}from"./runtime";import{mergeConfig as j}from"./config";import{UserLocationProvider as _}from"./components/Map";import{TEXT_DIRECTIONS as $}from"./schema";const w=390,z=24;function G(e){const t=e.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i)??e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);if(!t)return e;const a=e.startsWith("#"),l=a?parseInt(t[1],16):Number(t[1]),d=a?parseInt(t[2],16):Number(t[2]),g=a?parseInt(t[3],16):Number(t[3]),n=.08,u=Math.round(l*(1-n)+80*n),f=Math.round(d*(1-n)+120*n),m=Math.round(g*(1-n)+200*n);return`rgb(${u}, ${f}, ${m})`}const q=`
2
2
  [data-widget-renderer][data-widget-renderer] *,
3
3
  [data-widget-renderer][data-widget-renderer] *::before,
4
4
  [data-widget-renderer][data-widget-renderer] *::after {
@@ -33,15 +33,18 @@ import{jsx as c}from"react/jsx-runtime";import{useRef as T,useState as y,useEffe
33
33
  -webkit-box-shadow: 0 0 0 9999px var(--widget-input-bg) inset !important;
34
34
  -webkit-text-fill-color: var(--widget-input-fg) !important;
35
35
  }
36
- /* Anchor the card to the reading edge \u2014 leading in LTR, trailing in RTL. The root
37
- View is its flex parent and carries an inline alignItems, so target it directly
38
- with !important; mirror the two directions so LTR and RTL behave symmetrically
39
- (same mechanism, opposite edge). Position only \u2014 the subtree stays ltr (outer
40
- div), so contents don't mirror. */
41
- [data-widget-renderer][data-widget-dir="ltr"] > * {
42
- align-items: flex-start !important;
43
- }
36
+ /* Anchor the widget to the reading edge symmetrically. Both directions use ONE
37
+ mechanism \u2014 the writing direction \u2014 never mismatched align values (stretch for
38
+ LTR / flex-end for RTL is what collapsed LTR fill). LTR is the default (no
39
+ rule), which restores the pre-RTL stretch: a width-capped surface (a maxWidth
40
+ Card, or the card wrapper inside the 100%-wide shell) fills to its cap at the
41
+ leading edge, and a no-width root fills the container. RTL just flips the
42
+ direction on the root, so the same clamp lands at the trailing edge. The root's
43
+ own content is reset to ltr one level down so the card's children never mirror. */
44
44
  [data-widget-renderer][data-widget-dir="rtl"] > * {
45
- align-items: flex-end !important;
45
+ direction: rtl;
46
+ }
47
+ [data-widget-renderer][data-widget-dir="rtl"] > * > * {
48
+ direction: ltr;
46
49
  }
47
- `;let R=!1;function U(){if(R||typeof document>"u")return;if(document.getElementById("widget-renderer-style")){R=!0;return}const e=document.createElement("style");e.id="widget-renderer-style",e.textContent=q,document.head.appendChild(e),R=!0}function ae({widget:e,branding:t,brandingStyles:a,theme:l="light",messageId:d,onConsumerAction:g,config:n,errorFallback:u,userLocation:m,direction:f=$.ltr}){const p=T(null),h=T(null),[w,k]=y(1),[I,E]=y(!1),[M,D]=y(void 0),v=C(()=>{const o=p.current;if(!o)return;const r=o.clientWidth;E(s=>s?r<b+z:r<b);const i=Math.min(r<b?r/b:1,1);k(s=>Math.abs(s-i)<.005?s:i)},[]),x=C(()=>{const o=h.current;if(!o)return;const r=o.scrollHeight;D(i=>i!==void 0&&Math.abs(i-r)<1?i:r)},[]);if(H(()=>{U();const o=p.current,r=h.current;if(!o||!r)return;let i=0;const s=()=>{cancelAnimationFrame(i),i=requestAnimationFrame(()=>{v(),x()})},S=new ResizeObserver(s);S.observe(o);const W=new ResizeObserver(s);return W.observe(r),()=>{cancelAnimationFrame(i),S.disconnect(),W.disconnect()}},[v,x]),!e)return null;const L=t??a,B=j(n);return c(N,{branding:L,mode:l,config:B,children:c(A,{messageId:d,onConsumerAction:g,children:c(_,{location:m??null,children:c(V,{outerRef:p,innerRef:h,theme:l,direction:f,needsScaling:I,innerHeight:M,scale:w,errorFallback:u,widget:e})})})})}function V({outerRef:e,innerRef:t,theme:a,direction:l,needsScaling:d,innerHeight:g,scale:n,errorFallback:u,widget:m}){const{tokens:f,variants:p}=P(),h=p.input.soft.bg,w=G(h);return c("div",{ref:e,style:{direction:"ltr",width:"100%",overflow:"hidden",height:d&&g?g*n:void 0},children:c("div",{ref:t,"data-widget-renderer":"","data-widget-dir":l,"data-theme":a,style:{width:d?`${b}px`:"100%",transformOrigin:"top left",transform:d?`scale(${n})`:void 0,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale","--widget-input-fg":f.color.text,"--widget-input-bg":w},children:c(O,{fallback:u,children:F(m)})})})}export{ae as WidgetRenderer};
50
+ `;let R=!1;function U(){if(R||typeof document>"u")return;if(document.getElementById("widget-renderer-style")){R=!0;return}const e=document.createElement("style");e.id="widget-renderer-style",e.textContent=q,document.head.appendChild(e),R=!0}function ae({widget:e,branding:t,brandingStyles:a,theme:l="light",messageId:d,onConsumerAction:g,config:n,errorFallback:u,userLocation:f,direction:m=$.ltr}){const h=W(null),p=W(null),[b,k]=y(1),[E,I]=y(!1),[M,L]=y(void 0),v=C(()=>{const o=h.current;if(!o)return;const r=o.clientWidth;I(s=>s?r<w+z:r<w);const i=Math.min(r<w?r/w:1,1);k(s=>Math.abs(s-i)<.005?s:i)},[]),x=C(()=>{const o=p.current;if(!o)return;const r=o.scrollHeight;L(i=>i!==void 0&&Math.abs(i-r)<1?i:r)},[]);if(H(()=>{U();const o=h.current,r=p.current;if(!o||!r)return;let i=0;const s=()=>{cancelAnimationFrame(i),i=requestAnimationFrame(()=>{v(),x()})},S=new ResizeObserver(s);S.observe(o);const T=new ResizeObserver(s);return T.observe(r),()=>{cancelAnimationFrame(i),S.disconnect(),T.disconnect()}},[v,x]),!e)return null;const B=t??a,D=j(n);return c(N,{branding:B,mode:l,config:D,children:c(A,{messageId:d,onConsumerAction:g,children:c(_,{location:f??null,children:c(Y,{outerRef:h,innerRef:p,theme:l,direction:m,needsScaling:E,innerHeight:M,scale:b,errorFallback:u,widget:e})})})})}function Y({outerRef:e,innerRef:t,theme:a,direction:l,needsScaling:d,innerHeight:g,scale:n,errorFallback:u,widget:f}){const{tokens:m,variants:h}=O(),p=h.input.soft.bg,b=G(p);return c("div",{ref:e,style:{direction:"ltr",width:"100%",overflow:"hidden",height:d&&g?g*n:void 0},children:c("div",{ref:t,"data-widget-renderer":"","data-widget-dir":l,"data-theme":a,style:{width:d?`${w}px`:"100%",transformOrigin:"top left",transform:d?`scale(${n})`:void 0,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale","--widget-input-fg":m.color.text,"--widget-input-bg":b},children:c(P,{fallback:u,children:F(f)})})})}export{q as WIDGET_CSS,ae as WidgetRenderer};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{View as f}from"react-native";import{ThemeProvider as C}from"./theme";import{WidgetStateManager as W}from"./state";import{WidgetErrorBoundary as u}from"./WidgetErrorBoundary";import{renderWidget as y}from"./runtime";import{mergeConfig as R}from"./config";import{UserLocationProvider as T}from"./components/Map";import{TEXT_DIRECTIONS as r}from"./schema";function L({widget:o,branding:t,brandingStyles:i,theme:n="light",messageId:d,onConsumerAction:a,config:g,errorFallback:m,userLocation:l,direction:s=r.ltr}){if(!o)return null;const c=t??i,p=R(g);return e(C,{branding:c,mode:n,config:p,children:e(W,{messageId:d,onConsumerAction:a,children:e(T,{location:l??null,children:e(f,{style:{width:"100%",direction:"ltr",alignItems:s===r.rtl?"flex-end":"flex-start"},children:e(u,{fallback:m,children:y(o)})})})})})}export{L as WidgetRenderer};
1
+ import{jsx as e}from"react/jsx-runtime";import{View as c}from"react-native";import{ThemeProvider as f}from"./theme";import{WidgetStateManager as C}from"./state";import{WidgetErrorBoundary as W}from"./WidgetErrorBoundary";import{renderWidget as u}from"./runtime";import{mergeConfig as y}from"./config";import{UserLocationProvider as R}from"./components/Map";import{TEXT_DIRECTIONS as T}from"./schema";import{rootAlignItems as h}from"./runtime/rootAnchor";function E({widget:o,branding:r,brandingStyles:t,theme:i="light",messageId:n,onConsumerAction:d,config:a,errorFallback:m,userLocation:g,direction:s=T.ltr}){if(!o)return null;const l=r??t,p=y(a);return e(f,{branding:l,mode:i,config:p,children:e(C,{messageId:n,onConsumerAction:d,children:e(R,{location:g??null,children:e(c,{style:{width:"100%",direction:"ltr",alignItems:h(s)},children:e(W,{fallback:m,children:u(o)})})})})})}export{E as WidgetRenderer};
@@ -0,0 +1 @@
1
+ import{TEXT_DIRECTIONS as e}from"../schema";function n(t){return t===e.rtl?"flex-end":"stretch"}export{n as rootAlignItems};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1interface/widgets",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,