@evotecit/canopyx 0.3.18 → 0.3.20

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 (117) hide show
  1. package/CanopyX.Html/Assets/canopyx-board.css +12 -12
  2. package/CanopyX.Html/Assets/canopyx-board.js +1 -1
  3. package/CanopyX.Html/Assets/canopyx-calendar.css +70 -57
  4. package/CanopyX.Html/Assets/canopyx-calendar.js +14 -14
  5. package/CanopyX.Html/Assets/canopyx-cell-range.css +4 -4
  6. package/CanopyX.Html/Assets/canopyx-cell-range.js +1 -1
  7. package/CanopyX.Html/Assets/canopyx-changes.css +55 -55
  8. package/CanopyX.Html/Assets/canopyx-changes.js +1 -1
  9. package/CanopyX.Html/Assets/canopyx-column-groups.css +5 -1
  10. package/CanopyX.Html/Assets/canopyx-column-groups.js +15 -9
  11. package/CanopyX.Html/Assets/canopyx-compare.css +4 -4
  12. package/CanopyX.Html/Assets/canopyx-compare.js +1 -1
  13. package/CanopyX.Html/Assets/canopyx-detail-rows.css +4 -4
  14. package/CanopyX.Html/Assets/canopyx-detail-rows.js +1 -1
  15. package/CanopyX.Html/Assets/canopyx-editing.css +3 -3
  16. package/CanopyX.Html/Assets/canopyx-editing.js +1 -1
  17. package/CanopyX.Html/Assets/canopyx-enhance.js +2 -2
  18. package/CanopyX.Html/Assets/canopyx-export.js +8 -8
  19. package/CanopyX.Html/Assets/canopyx-facets.css +19 -18
  20. package/CanopyX.Html/Assets/canopyx-facets.js +1 -1
  21. package/CanopyX.Html/Assets/canopyx-filter-editor.css +24 -24
  22. package/CanopyX.Html/Assets/canopyx-filter-editor.js +3 -3
  23. package/CanopyX.Html/Assets/canopyx-flow-checks.css +2 -2
  24. package/CanopyX.Html/Assets/canopyx-flow-checks.js +1 -1
  25. package/CanopyX.Html/Assets/canopyx-flow-command.css +3 -3
  26. package/CanopyX.Html/Assets/canopyx-flow-command.js +1 -1
  27. package/CanopyX.Html/Assets/canopyx-flow-dialog.css +2 -2
  28. package/CanopyX.Html/Assets/canopyx-flow-dialog.js +1 -1
  29. package/CanopyX.Html/Assets/canopyx-flow-drafts.css +2 -2
  30. package/CanopyX.Html/Assets/canopyx-flow-drafts.js +1 -1
  31. package/CanopyX.Html/Assets/canopyx-flow-entry.css +24 -23
  32. package/CanopyX.Html/Assets/canopyx-flow-entry.js +4 -4
  33. package/CanopyX.Html/Assets/canopyx-flow-host.css +2 -2
  34. package/CanopyX.Html/Assets/canopyx-flow-host.js +1 -1
  35. package/CanopyX.Html/Assets/canopyx-flow-module.mjs +4 -4
  36. package/CanopyX.Html/Assets/canopyx-flow-pick.css +4 -4
  37. package/CanopyX.Html/Assets/canopyx-flow-pick.js +1 -1
  38. package/CanopyX.Html/Assets/canopyx-flow-preview.css +1 -1
  39. package/CanopyX.Html/Assets/canopyx-flow-preview.js +1 -1
  40. package/CanopyX.Html/Assets/canopyx-flow-records.css +2 -2
  41. package/CanopyX.Html/Assets/canopyx-flow-records.js +1 -1
  42. package/CanopyX.Html/Assets/canopyx-flow-tasks.css +4 -4
  43. package/CanopyX.Html/Assets/canopyx-flow-tasks.js +1 -1
  44. package/CanopyX.Html/Assets/canopyx-flow.css +41 -41
  45. package/CanopyX.Html/Assets/canopyx-flow.js +1 -1
  46. package/CanopyX.Html/Assets/canopyx-format-editor.css +9 -9
  47. package/CanopyX.Html/Assets/canopyx-format-editor.js +1 -1
  48. package/CanopyX.Html/Assets/canopyx-formatting.css +13 -13
  49. package/CanopyX.Html/Assets/canopyx-formatting.js +3 -3
  50. package/CanopyX.Html/Assets/canopyx-forms.css +3 -3
  51. package/CanopyX.Html/Assets/canopyx-forms.js +1 -1
  52. package/CanopyX.Html/Assets/canopyx-grid-module.mjs +53 -42
  53. package/CanopyX.Html/Assets/canopyx-grid-options.css +8 -8
  54. package/CanopyX.Html/Assets/canopyx-grid-options.js +9 -2
  55. package/CanopyX.Html/Assets/canopyx-grid.css +99 -96
  56. package/CanopyX.Html/Assets/canopyx-grid.js +53 -42
  57. package/CanopyX.Html/Assets/canopyx-grouping.css +7 -7
  58. package/CanopyX.Html/Assets/canopyx-grouping.js +1 -1
  59. package/CanopyX.Html/Assets/canopyx-highlight.css +10 -10
  60. package/CanopyX.Html/Assets/canopyx-highlight.js +1 -1
  61. package/CanopyX.Html/Assets/canopyx-interactive.css +50 -49
  62. package/CanopyX.Html/Assets/canopyx-interactive.js +10 -8
  63. package/CanopyX.Html/Assets/canopyx-layouts.css +9 -9
  64. package/CanopyX.Html/Assets/canopyx-layouts.js +2 -2
  65. package/CanopyX.Html/Assets/canopyx-link.css +3 -3
  66. package/CanopyX.Html/Assets/canopyx-link.js +3 -3
  67. package/CanopyX.Html/Assets/canopyx-links.js +2 -2
  68. package/CanopyX.Html/Assets/canopyx-live.css +2 -2
  69. package/CanopyX.Html/Assets/canopyx-live.js +1 -1
  70. package/CanopyX.Html/Assets/canopyx-matrix.css +31 -31
  71. package/CanopyX.Html/Assets/canopyx-matrix.js +1 -1
  72. package/CanopyX.Html/Assets/canopyx-module.mjs +10 -8
  73. package/CanopyX.Html/Assets/canopyx-pager.css +1 -1
  74. package/CanopyX.Html/Assets/canopyx-pager.js +1 -1
  75. package/CanopyX.Html/Assets/canopyx-path.css +8 -8
  76. package/CanopyX.Html/Assets/canopyx-path.js +1 -1
  77. package/CanopyX.Html/Assets/canopyx-pivot.css +10 -10
  78. package/CanopyX.Html/Assets/canopyx-pivot.js +3 -3
  79. package/CanopyX.Html/Assets/canopyx-plan.css +24 -17
  80. package/CanopyX.Html/Assets/canopyx-plan.js +13 -9
  81. package/CanopyX.Html/Assets/canopyx-record-panel.css +47 -42
  82. package/CanopyX.Html/Assets/canopyx-record-panel.js +16 -9
  83. package/CanopyX.Html/Assets/canopyx-reporting-module.mjs +56 -52
  84. package/CanopyX.Html/Assets/canopyx-reporting.css +104 -101
  85. package/CanopyX.Html/Assets/canopyx-reporting.js +56 -52
  86. package/CanopyX.Html/Assets/canopyx-stack.css +6 -6
  87. package/CanopyX.Html/Assets/canopyx-stack.js +1 -1
  88. package/CanopyX.Html/Assets/canopyx-time-slider.css +5 -5
  89. package/CanopyX.Html/Assets/canopyx-time-slider.js +1 -1
  90. package/CanopyX.Html/Assets/canopyx-timeline.css +19 -19
  91. package/CanopyX.Html/Assets/canopyx-timeline.js +2 -2
  92. package/CanopyX.Html/Assets/canopyx-tree-tools.css +21 -21
  93. package/CanopyX.Html/Assets/canopyx-tree-tools.js +3 -3
  94. package/CanopyX.Html/Assets/canopyx-ui-menu.css +7 -7
  95. package/CanopyX.Html/Assets/canopyx-ui-menu.js +1 -1
  96. package/CanopyX.Html/Assets/canopyx-ui-navigation.css +5 -5
  97. package/CanopyX.Html/Assets/canopyx-ui-navigation.js +1 -1
  98. package/CanopyX.Html/Assets/canopyx-ui-overlays.css +5 -5
  99. package/CanopyX.Html/Assets/canopyx-ui-overlays.js +5 -2
  100. package/CanopyX.Html/Assets/canopyx-ui-picker.css +2 -2
  101. package/CanopyX.Html/Assets/canopyx-ui-picker.js +1 -1
  102. package/CanopyX.Html/Assets/canopyx-ui-stepper.css +12 -12
  103. package/CanopyX.Html/Assets/canopyx-ui-stepper.js +1 -1
  104. package/CanopyX.Html/Assets/canopyx-ui-tabs.css +8 -8
  105. package/CanopyX.Html/Assets/canopyx-ui-tabs.js +1 -1
  106. package/CanopyX.Html/Assets/canopyx-view-intents.css +1 -1
  107. package/CanopyX.Html/Assets/canopyx-view-intents.js +1 -1
  108. package/CanopyX.Html/Assets/canopyx.css +47 -46
  109. package/CanopyX.Html/Assets/canopyx.js +10 -8
  110. package/JavaScript/column-groups.d.ts +24 -4
  111. package/JavaScript/grid.d.ts +11 -1
  112. package/JavaScript/hosts.d.ts +2 -0
  113. package/JavaScript/protocol.d.ts +2 -0
  114. package/JavaScript/records.d.ts +2 -0
  115. package/README.md +76 -206
  116. package/README.nuget.md +63 -87
  117. package/package.json +1 -1
@@ -8,11 +8,11 @@
8
8
  }
9
9
  }
10
10
  @layer hfx.components{
11
- :where(.cx-tabs,.cx-stepper-host,.cx-dialog,.cx-drawer,.cx-popover,.cx-menu,.cx-tooltip,[data-cx-open]){box-sizing:border-box;font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem));color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
11
+ :where(.cx-tabs,.cx-stepper-host,.cx-dialog,.cx-drawer,.cx-popover,.cx-menu,.cx-tooltip,[data-cx-open]){box-sizing:border-box;font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem));color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
12
12
  :where(.cx-tabs,.cx-stepper-host,.cx-dialog,.cx-drawer,.cx-popover,.cx-menu) *,:where(.cx-tabs,.cx-stepper-host,.cx-dialog,.cx-drawer,.cx-popover,.cx-menu) *::before{box-sizing:border-box;}
13
13
  .cx-visually-hidden{position:absolute;inline-size:var(--hfx-border-width,1px);block-size:var(--hfx-border-width,1px);padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;}
14
14
  :where(.cx-tabs,.cx-stepper-host,.cx-dialog,.cx-drawer,.cx-popover,.cx-menu) :focus-visible,[data-cx-open]:focus-visible{outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:var(--hfx-focus-offset,2px);}
15
- .cx-dialog,.cx-drawer,.cx-popover{padding:0;border:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-overlay,var(--hfx-radius-lg,10px));color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-surface-raised,light-dark(#ffffff,#1e2126));box-shadow:var(--hfx-elevation-3,0 2px 4px rgba(22,24,28,.06),0 16px 36px -16px rgba(22,24,28,.28));overflow:hidden;}
15
+ .cx-dialog,.cx-drawer,.cx-popover{padding:0;border:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));border-radius:var(--hfx-radius-overlay,var(--hfx-radius-lg,10px));color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));background:var(--hfx-color-surface-raised,light-dark(#ffffff,#1e2126));box-shadow:var(--hfx-elevation-3,0 2px 4px rgba(22,24,28,.06),0 16px 36px -16px rgba(22,24,28,.28));overflow:hidden;}
16
16
  .cx-dialog[open]{display:flex;flex-direction:column;max-block-size:calc(var(--cx-ui-viewport-block) - var(--hfx-space-4,1rem) * 2);}
17
17
  .cx-dialog{inline-size:min(var(--cx-ui-dialog-md),calc(100% - var(--hfx-space-4,1rem) * 2));max-inline-size:none;}
18
18
  .cx-dialog[data-size="sm"]{inline-size:min(var(--cx-ui-dialog-sm),calc(100% - var(--hfx-space-4,1rem) * 2));}
@@ -20,9 +20,9 @@
20
20
  :is(.cx-dialog,.cx-drawer)::backdrop{background:var(--hfx-color-overlay,light-dark(rgba(22,24,28,0.42),rgba(0,0,0,0.66)));}
21
21
  :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="header"]{display:flex;flex:none;align-items:center;gap:var(--hfx-space-3,0.75rem);min-block-size:var(--hfx-card-header-height,calc(52px - var(--cx-compact,0) * 8px));padding:var(--hfx-space-4,1rem) var(--hfx-card-padding-x,calc(20px - var(--cx-compact,0) * 4px));border-block-end:var(--hfx-border-width,1px) solid transparent;}
22
22
  :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="title"]{flex:1;margin:0;font-family:var(--hfx-font-display,"Segoe UI Variable Display","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--hfx-type-heading-size,0.9375rem);font-weight:var(--hfx-weight-semibold,600);line-height:var(--hfx-type-heading-line,1.4);}
23
- :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="body"]{flex:1;overflow:auto;min-block-size:0;padding:var(--hfx-card-padding-y,calc(16px - var(--cx-compact,0) * 4px)) var(--hfx-card-padding-x,calc(20px - var(--cx-compact,0) * 4px));max-block-size:var(--cx-ui-dialog-body-max);color:var(--hfx-color-text-secondary,light-dark(#4d525b,#b0b4bc));font-size:var(--hfx-type-small-size,0.8125rem);line-height:var(--hfx-type-small-line,1.4);}
24
- :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="footer"]{display:flex;flex:none;justify-content:flex-end;gap:var(--hfx-space-2,0.5rem);padding:var(--hfx-space-3,0.75rem) var(--hfx-card-padding-x,calc(20px - var(--cx-compact,0) * 4px));border-block-start:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));}
25
- :is(.cx-dialog,.cx-drawer)[data-scrolled="true"] [data-hfx-part="header"]{border-block-end-color:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
23
+ :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="body"]{flex:1;overflow:auto;overscroll-behavior:contain;min-block-size:0;padding:var(--hfx-card-padding-y,calc(16px - var(--cx-compact,0) * 4px)) var(--hfx-card-padding-x,calc(20px - var(--cx-compact,0) * 4px));max-block-size:var(--cx-ui-dialog-body-max);color:var(--hfx-color-text-secondary,light-dark(#4d525b,#b0b4bc));font-size:var(--hfx-type-small-size,0.8125rem);line-height:var(--hfx-type-small-line,1.4);}
24
+ :is(.cx-dialog,.cx-drawer,.cx-popover) [data-hfx-part="footer"]{display:flex;flex:none;justify-content:flex-end;gap:var(--hfx-space-2,0.5rem);padding:var(--hfx-space-3,0.75rem) var(--hfx-card-padding-x,calc(20px - var(--cx-compact,0) * 4px));border-block-start:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));}
25
+ :is(.cx-dialog,.cx-drawer)[data-scrolled="true"] [data-hfx-part="header"]{border-block-end-color:var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));}
26
26
  .cx-overlay-close{flex:none;inline-size:var(--hfx-control-height-sm,calc(28px - var(--cx-compact,0) * 4px));min-block-size:var(--hfx-control-height-sm,calc(28px - var(--cx-compact,0) * 4px));padding:0;background:transparent;border-color:transparent;font-size:0;}
27
27
  .cx-overlay-close::before{content:"\00d7" / "";font-size:var(--hfx-icon-lg,20px);line-height:1;}
28
28
  .cx-drawer{position:fixed;inset:0 0 0 auto;margin:0;inline-size:min(var(--cx-ui-drawer-md),100%);max-inline-size:none;block-size:var(--cx-ui-viewport-block);max-block-size:none;border-radius:var(--hfx-radius-none,0);}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"68a7687b9c3c8a28",install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;const UI_LABELS={tabsMore:"More",tabsMoreSelected:"More: {label}",tabsScrollPrevious:"Previous tabs",tabsScrollNext:"Next tabs",tabsSection:"Section",tabsPosition:"{current} of {total}",tabsPause:"Pause",tabsPlay:"Play",tabsMotionDisabled:"Automatic tabs are disabled by reduced motion",stepperStepOf:"Step {current} of {total}",stepperBack:"Back",stepperNext:"Next",stepperFinish:"Finish",stepperSkip:"Skip",stepperSaveDraft:"Save draft",stepperAllSteps:"All steps",stepperOptional:"Optional",stepperCompleted:"Completed",stepperSkipped:"Skipped",stepperIssues:"{count} issues to fix",stepperIssue:"1 issue to fix",dialogClose:"Close",drawerClose:"Close",drawerPrevious:"Previous record",drawerNext:"Next record",stateLoading:"Loading…",stateRetry:"Retry",stateDetails:"Details"};const uiFocusSelector='button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';Object.assign(UI_TOOLS,{labels:values=>Object.assign({},UI_LABELS,values),content:(element,value)=>{if(value?.nodeType)element.replaceChildren(value);else hostHtml(element,value,null,"detail")},emit:(root,prefix,name,detail,cancelable=false)=>root.dispatchEvent(new CustomEvent("cx-"+prefix+":"+name,{detail,bubbles:true,cancelable})),focusables:root=>[...root.querySelectorAll(uiFocusSelector)].filter(element=>element.checkVisibility()&&!element.closest("[inert]")),observe(root,changed,signal){let width=-1,frame=0;const read=()=>{const next=root.getBoundingClientRect().width;if(next!==width){width=next;changed(width)}};const observer=new ResizeObserver(()=>{frame||=requestAnimationFrame(()=>{frame=0;read()})});observer.observe(root);read();const dispose=()=>{observer.disconnect();cancelAnimationFrame(frame)};signal?.addEventListener("abort",dispose,{once:true});return dispose},theme(host,element){const previous=new Map([...element.style].map(name=>[name,element.style.getPropertyValue(name)]));overlayTheme(host,element);for(const[name,value]of previous)if(name.startsWith("--hfx-")||name.startsWith("--cx-"))element.style.setProperty(name,value);const written=new Map([...element.style].map(name=>[name,element.style.getPropertyValue(name)]));return()=>{for(const[name,value]of written)if(element.style.getPropertyValue(name)===value){if(previous.has(name))element.style.setProperty(name,previous.get(name));else element.style.removeProperty(name)}}},position(element,anchor,placement="bottom-start",point){const viewport=global.visualViewport,width=viewport?.width||document.documentElement.clientWidth,height=viewport?.height||global.innerHeight;const offsetX=viewport?.offsetLeft||0,offsetY=viewport?.offsetTop||0;const style=getComputedStyle(element),gap=parseFloat(style.marginTop)||0,marginX=parseFloat(style.marginLeft)||0;const edge=Math.max(8,gap);const box=element.getBoundingClientRect(),target=point?{left:point.x,right:point.x,top:point.y,bottom:point.y}:anchor.getBoundingClientRect();const rtl=getComputedStyle(anchor).direction==="rtl",side=placement.split("-")[0],align=placement.split("-")[1]||"center";let x=(target.left+target.right-box.width)/ 2, y = target.bottom + gap, actual = side;
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"8dc12c5deb018c2c",install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;const UI_LABELS={tabsMore:"More",tabsMoreSelected:"More: {label}",tabsScrollPrevious:"Previous tabs",tabsScrollNext:"Next tabs",tabsSection:"Section",tabsPosition:"{current} of {total}",tabsPause:"Pause",tabsPlay:"Play",tabsMotionDisabled:"Automatic tabs are disabled by reduced motion",stepperStepOf:"Step {current} of {total}",stepperBack:"Back",stepperNext:"Next",stepperFinish:"Finish",stepperSkip:"Skip",stepperSaveDraft:"Save draft",stepperAllSteps:"All steps",stepperOptional:"Optional",stepperCompleted:"Completed",stepperSkipped:"Skipped",stepperIssues:"{count} issues to fix",stepperIssue:"1 issue to fix",dialogClose:"Close",drawerClose:"Close",drawerPrevious:"Previous record",drawerNext:"Next record",stateLoading:"Loading…",stateRetry:"Retry",stateDetails:"Details"};const uiFocusSelector='button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';Object.assign(UI_TOOLS,{labels:values=>Object.assign({},UI_LABELS,values),content:(element,value)=>{if(value?.nodeType)element.replaceChildren(value);else hostHtml(element,value,null,"detail")},emit:(root,prefix,name,detail,cancelable=false)=>root.dispatchEvent(new CustomEvent("cx-"+prefix+":"+name,{detail,bubbles:true,cancelable})),focusables:root=>[...root.querySelectorAll(uiFocusSelector)].filter(element=>element.checkVisibility()&&!element.closest("[inert]")),observe(root,changed,signal){let width=-1,frame=0;const read=()=>{const next=root.getBoundingClientRect().width;if(next!==width){width=next;changed(width)}};const observer=new ResizeObserver(()=>{frame||=requestAnimationFrame(()=>{frame=0;read()})});observer.observe(root);read();const dispose=()=>{observer.disconnect();cancelAnimationFrame(frame)};signal?.addEventListener("abort",dispose,{once:true});return dispose},theme(host,element){const previous=new Map([...element.style].map(name=>[name,element.style.getPropertyValue(name)]));overlayTheme(host,element);for(const[name,value]of previous)if(name.startsWith("--hfx-")||name.startsWith("--cx-"))element.style.setProperty(name,value);const written=new Map([...element.style].map(name=>[name,element.style.getPropertyValue(name)]));return()=>{for(const[name,value]of written)if(element.style.getPropertyValue(name)===value){if(previous.has(name))element.style.setProperty(name,previous.get(name));else element.style.removeProperty(name)}}},position(element,anchor,placement="bottom-start",point){const viewport=global.visualViewport,width=viewport?.width||document.documentElement.clientWidth,height=viewport?.height||global.innerHeight;const offsetX=viewport?.offsetLeft||0,offsetY=viewport?.offsetTop||0;const style=getComputedStyle(element),gap=parseFloat(style.marginTop)||0,marginX=parseFloat(style.marginLeft)||0;const edge=Math.max(8,gap);const box=element.getBoundingClientRect(),target=point?{left:point.x,right:point.x,top:point.y,bottom:point.y}:anchor.getBoundingClientRect();const rtl=getComputedStyle(anchor).direction==="rtl",side=placement.split("-")[0],align=placement.split("-")[1]||"center";let x=(target.left+target.right-box.width)/ 2, y = target.bottom + gap, actual = side;
2
2
  if(side==="top")y=target.top-box.height-gap;if(side==="left"||side==="right"){x=side==="left"?target.left-box.width-gap:target.right+gap;y=target.top}
3
3
  else if(align!=="center")x=(align==="start")!==rtl?target.left:target.right-box.width;if(side==="top"&&y<offsetY){y=target.bottom+gap;actual="bottom"}
4
4
  else if(side==="bottom"&&y+box.height>height+offsetY){y=target.top-box.height-gap;actual="top"}
@@ -34,7 +34,10 @@ const cancel=event=>{event.preventDefault();if(uiTopOverlay()===entry)close("can
34
34
  if(opened)close("native",options.focus!==false,true)};element.addEventListener("close",nativeClose,true);function setModal(value){if(!opened||modal===value)return;const active=document.activeElement;if(element.localName==="dialog"&&element.open){closeNative(true);if(value)element.showModal();else element.show()}
35
35
  uiLockScroll(value);modal=value;if(value)element.setAttribute("aria-modal","true");else element.removeAttribute("aria-modal");if(active&&element.contains(active))active.focus({preventScroll:true})}
36
36
  const destroy=()=>{close("destroy",false,true);element.removeEventListener("cancel",cancel);element.removeEventListener("close",nativeClose,true);if(hadTabindex===null)element.removeAttribute("tabindex");else element.setAttribute("tabindex",hadTabindex)};signal?.addEventListener("abort",destroy,{once:true});return{element,open,close,destroy,setModal,get opened(){return opened},get modal(){return modal}}};function uiDialog(root,options,signal,drawer){const labels=UI_TOOLS.labels(options.labels),trigger=options.trigger||document.getElementById(root.dataset.cxTrigger||"");const container=options.container||root.parentElement||document.body,alert=root.getAttribute("role")==="alertdialog";let phone=false;const overlay=UI_TOOLS.overlay(root,{kind:drawer?"drawer":"dialog",trigger,host:options.host||container,focus:options.focus,dismissible:options.dismissible??root.dataset.dismissible!=="false",initialFocus:options.initialFocus||(element=>
37
- alert?element.querySelector('[data-cx-cancel],button:not([data-danger]):not([type="submit"])'):element.querySelector("input:not([type=hidden]),select,textarea"))},signal);const open=()=>overlay.open({modal:!drawer||phone||options.modal===true||root.dataset.modal==="true"});UI_TOOLS.observe(container,width=>{phone=width<640;root.dataset.phone=String(phone);root.classList.toggle("cx-phone",phone);if(drawer&&overlay.opened)overlay.setModal(phone||options.modal===true||root.dataset.modal==="true")},signal);trigger?.addEventListener("click",open,{signal});root.addEventListener("click",event=>{if(event.target.closest("[data-cx-close],[data-cx-cancel]"))overlay.close("cancel")},{signal});const body=root.querySelector('[data-hfx-part="body"]');body?.addEventListener("scroll",()=>{root.dataset.scrolled=String(body.scrollTop>0)},{signal});if(drawer)root.addEventListener("keydown",event=>{if(!options.records||/^(?:INPUT|TEXTAREA|SELECT)$/.test(event.target.tagName) || event.target.isContentEditable) return;
37
+ alert?element.querySelector('[data-cx-cancel],button:not([data-danger]):not([type="submit"])'):element.querySelector("input:not([type=hidden]),select,textarea"))},signal);const ownerHidden=()=>!container.getClientRects().length||/^(hidden|collapse)$/.test(getComputedStyle(container).visibility);
38
+ const closeHidden=()=>{if(!options.closeWhenHidden||!overlay.opened||!ownerHidden()||matchMedia("print").matches)return false;root._cxHidden=true;overlay.close("hidden",false,true);return true};if(options.closeWhenHidden){const visibility=new MutationObserver(closeHidden);for(let owner=container;owner;owner=owner.parentElement)visibility.observe(owner,{attributes:true,attributeFilter:["style","class","hidden"]});signal?.addEventListener("abort",()=>visibility.disconnect(),{once:true})}
39
+ const open=()=>{const opened=overlay.open({modal:!drawer||phone||options.modal===true||root.dataset.modal==="true"});return opened&&!closeHidden()};UI_TOOLS.observe(container,width=>{if(!width&&!container.getClientRects().length){closeHidden();return}
40
+ phone=width<640;root.dataset.phone=String(phone);root.classList.toggle("cx-phone",phone);if(drawer&&overlay.opened)overlay.setModal(phone||options.modal===true||root.dataset.modal==="true")},signal);trigger?.addEventListener("click",open,{signal});root.addEventListener("click",event=>{if(event.target.closest("[data-cx-close],[data-cx-cancel]"))overlay.close("cancel")},{signal});const body=root.querySelector('[data-hfx-part="body"]');body?.addEventListener("scroll",()=>{root.dataset.scrolled=String(body.scrollTop>0)},{signal});if(drawer)root.addEventListener("keydown",event=>{if(!options.records||/^(?:INPUT|TEXTAREA|SELECT)$/.test(event.target.tagName) || event.target.isContentEditable) return;
38
41
  if(event.key==="ArrowUp"||event.key==="ArrowDown"){event.preventDefault();options.records(event.key==="ArrowUp"?-1:1)}},{signal});for(const button of root.querySelectorAll(".cx-overlay-close"))button.setAttribute("aria-label",drawer?labels.drawerClose:labels.dialogClose);return{...overlay,open,refresh(){},getState:()=>({open:overlay.opened,modal:overlay.modal})}}
39
42
  UI_IMPL.dialog=(root,options,signal)=>uiDialog(root,options,signal,false);UI_IMPL.drawer=(root,options,signal)=>uiDialog(root,options,signal,true);UI_IMPL.popover=(root,options,signal)=>{const trigger=options.trigger||document.getElementById(root.dataset.cxTrigger||"");const overlay=UI_TOOLS.overlay(root,{...options,trigger,kind:"popover",anchored:true},signal);trigger?.addEventListener("click",()=>overlay.opened?overlay.close():overlay.open(),{signal});trigger?.addEventListener("keydown",event=>{if(event.key==="ArrowDown"){event.preventDefault();overlay.open()}},{signal});root.addEventListener("keydown",event=>{if(event.key!=="Tab")return;const items=UI_TOOLS.focusables(root),at=items.indexOf(document.activeElement);if(event.shiftKey&&at===0||!event.shiftKey&&at===items.length-1){const outside=UI_TOOLS.focusables(trigger?.closest("dialog[open]")||document).filter(item=>!root.contains(item));const next=event.shiftKey?trigger:outside[outside.indexOf(trigger)+ 1];if(overlay.close("tab",false)){event.preventDefault();(next||trigger)?.focus()}}},{signal});return overlay};UI_IMPL.tooltip=(root,options,signal)=>{const trigger=options.trigger||document.getElementById(root.dataset.cxTrigger||"");if(!trigger)throw new Error("CanopyX: tooltip needs a labelled trigger.");const overlay=UI_TOOLS.overlay(root,{...options,trigger,kind:"tooltip",anchored:true,placement:options.placement||root.dataset.placement||"top",focus:false},signal);const described=trigger.getAttribute("aria-describedby"),ids=new Set((described||"").split(/\s+/).filter(Boolean));
40
43
  if(!root.id)root.id=trigger.id+"-tooltip";const hadDescription=ids.has(root.id);ids.add(root.id);trigger.setAttribute("aria-describedby",[...ids].join(" "));let showTimer,hideTimer;const hide=()=>{clearTimeout(showTimer);clearTimeout(hideTimer);if(document.activeElement!==trigger)hideTimer=setTimeout(()=>overlay.close("leave",false),100)};const show=delay=>{clearTimeout(showTimer);clearTimeout(hideTimer);showTimer=setTimeout(()=>overlay.open(),delay)};trigger.addEventListener("pointerenter",()=>show(400),{signal});trigger.addEventListener("pointerleave",hide,{signal});root.addEventListener("pointerenter",()=>clearTimeout(hideTimer),{signal});root.addEventListener("pointerleave",hide,{signal});trigger.addEventListener("focus",()=>{clearTimeout(hideTimer);overlay.open()},{signal});trigger.addEventListener("blur",hide,{signal});const destroy=()=>{clearTimeout(showTimer);clearTimeout(hideTimer);overlay.destroy();const current=new Set((trigger.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean));
@@ -1,8 +1,8 @@
1
1
  @layer hfx.components{
2
2
  .cx-picker{min-inline-size:0;font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem));}
3
3
  .cx-picker-trigger{inline-size:100%;justify-content:flex-start;min-inline-size:0;text-align:start;}
4
- .cx-picker-lead,.cx-picker-separator,.cx-picker-chevron{flex:none;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-weight:var(--hfx-weight-regular,400);}
5
- .cx-picker-label{min-inline-size:0;overflow-wrap:anywhere;color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
4
+ .cx-picker-lead,.cx-picker-separator,.cx-picker-chevron{flex:none;color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));font-weight:var(--hfx-weight-regular,400);}
5
+ .cx-picker-label{min-inline-size:0;overflow-wrap:anywhere;color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
6
6
  .cx-picker-icon{display:inline-flex;flex:none;align-items:center;justify-content:center;inline-size:var(--hfx-icon-md,16px);block-size:var(--hfx-icon-md,16px);}
7
7
  .cx-picker-icon > :is(svg,img){inline-size:100%;block-size:100%;}
8
8
  .cx-picker-chevron{margin-inline-start:auto;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"02ff3779dd1c1ef4",requires:["ui-menu"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;let uiPickerIdentity=0;UI_TOOLS.picker=(root,options={})=>{const element=h('div','cx-picker');element.dataset.hfxPart='picker';const trigger=h('button','cx-picker-trigger cx-ui-button');trigger.type='button';const lead=h('span','cx-picker-lead'),separator=h('span','cx-picker-separator');separator.setAttribute('aria-hidden','true');setText(separator,'·');const icon=h('span','cx-picker-icon');icon.setAttribute('aria-hidden','true');const label=h('span','cx-picker-label'),badge=h('span','cx-picker-badge');badge.dataset.hfxPart='badge';const chevron=h('span','cx-picker-chevron');chevron.setAttribute('aria-hidden','true');setText(chevron,'▾');trigger.append(lead,separator,icon,label,badge,chevron);const menu=h('div','cx-menu');menu.hidden=true;menu.setAttribute('role','menu');menu.id='cx-ui-picker-menu-' + ++uiPickerIdentity;trigger.id=menu.id+'-trigger';element.append(trigger,menu);root.append(element);let state={...options},destroyed=false,selectionVersion=0;const renderIcon=value=>value?.nodeType?value.cloneNode(true):value;const controller=UI_IMPL.menu(menu,{trigger,host:root,renderIcon,async onSelect(item){const ticket=++selectionVersion;syncChecks();try{await state.onSelect?.(item.id)}
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"d415103478faf52a",requires:["ui-menu"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;let uiPickerIdentity=0;UI_TOOLS.picker=(root,options={})=>{const element=h('div','cx-picker');element.dataset.hfxPart='picker';const trigger=h('button','cx-picker-trigger cx-ui-button');trigger.type='button';const lead=h('span','cx-picker-lead'),separator=h('span','cx-picker-separator');separator.setAttribute('aria-hidden','true');setText(separator,'·');const icon=h('span','cx-picker-icon');icon.setAttribute('aria-hidden','true');const label=h('span','cx-picker-label'),badge=h('span','cx-picker-badge');badge.dataset.hfxPart='badge';const chevron=h('span','cx-picker-chevron');chevron.setAttribute('aria-hidden','true');setText(chevron,'▾');trigger.append(lead,separator,icon,label,badge,chevron);const menu=h('div','cx-menu');menu.hidden=true;menu.setAttribute('role','menu');menu.id='cx-ui-picker-menu-' + ++uiPickerIdentity;trigger.id=menu.id+'-trigger';element.append(trigger,menu);root.append(element);let state={...options},destroyed=false,selectionVersion=0;const renderIcon=value=>value?.nodeType?value.cloneNode(true):value;const controller=UI_IMPL.menu(menu,{trigger,host:root,renderIcon,async onSelect(item){const ticket=++selectionVersion;syncChecks();try{await state.onSelect?.(item.id)}
2
2
  catch{}
3
3
  finally{if(!destroyed&&ticket===selectionVersion)syncChecks()}}});function syncChecks(){for(const item of menu.querySelectorAll('[role="menuitemradio"]')){const checked=item.dataset.itemId===state.selected;item.setAttribute('aria-checked',String(checked));item.dataset.state=item.getAttribute('aria-disabled')==='true'?'disabled':checked?'selected':''}}
4
4
  function update(next={}){if(destroyed)return;selectionVersion++;state={...state,...next};const items=state.items||[],selected=items.find(item=>item.id===state.selected);setText(lead,state.lead);lead.hidden=!state.lead;setText(label,selected?.label);label.hidden=!selected;separator.hidden=!state.lead||!selected;setText(badge,selected?.badge);badge.hidden=selected?.badge==null||selected.badge==='';icon.replaceChildren();icon.hidden=selected?.icon==null;if(selected?.icon?.nodeType)icon.append(selected.icon.cloneNode(true));else if(selected?.icon!=null)setText(icon,selected.icon);trigger.setAttribute('aria-label',[state.lead,selected?.label,selected?.badge].filter(value=>value!=null&&value!=='').join(' '));trigger.disabled=!items.length;element.dataset.state=!items.length?'disabled':selected?'selected':'';controller.close('update',false,true);UI_TOOLS.menuItems(menu,items.map(item=>({...item,kind:'radio',checked:item.id===state.selected})),{renderIcon});controller.refresh()}
@@ -51,8 +51,8 @@ inline-size:var(--hfx-step-marker,28px);
51
51
  block-size:var(--hfx-step-marker,28px);
52
52
  border:var(--hfx-indicator-width,2px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));
53
53
  border-radius:50%;
54
- background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));
55
- color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));
54
+ background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));
55
+ color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));
56
56
  font-size:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem));
57
57
  font-weight:var(--hfx-weight-semibold,600);
58
58
  line-height:1;
@@ -61,15 +61,15 @@ line-height:1;
61
61
  .cx-step-desc,.cx-step-position,.cx-step-state{
62
62
  font-size:var(--hfx-type-caption-size,0.75rem);
63
63
  line-height:var(--hfx-type-caption-line,1.35);
64
- color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));
64
+ color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));
65
65
  }
66
- .cx-step[aria-current="step"]{color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
66
+ .cx-step[aria-current="step"]{color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
67
67
  .cx-step[aria-current="step"] .cx-step-marker{
68
68
  border-color:var(--hfx-color-accent-indicator,light-dark(#11776f,#37c9b8));
69
69
  color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));
70
70
  box-shadow:0 0 0 var(--hfx-space-1,0.25rem) var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));
71
71
  }
72
- .cx-step[data-state="done"]{color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
72
+ .cx-step[data-state="done"]{color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
73
73
  .cx-step[data-state="done"] .cx-step-marker{
74
74
  background:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));
75
75
  border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));
@@ -87,12 +87,12 @@ color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));
87
87
  .cx-step[data-state="disabled"]{color:var(--hfx-color-text-disabled,light-dark(#a3a8b0,#5a5f68));}
88
88
  .cx-step[data-state="disabled"] .cx-step-marker{
89
89
  background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));
90
- border-color:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
90
+ border-color:var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
91
91
  color:var(--hfx-color-text-disabled,light-dark(#a3a8b0,#5a5f68));
92
92
  }
93
- .cx-step[data-state="disabled"]::after{background:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
93
+ .cx-step[data-state="disabled"]::after{background:var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));}
94
94
  .cx-step-panel{min-inline-size:0;}
95
- .cx-step-print-state{display:none;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-size:var(--hfx-type-caption-size,0.75rem);line-height:var(--hfx-type-caption-line,1.35);}
95
+ .cx-step-print-state{display:none;color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));font-size:var(--hfx-type-caption-size,0.75rem);line-height:var(--hfx-type-caption-line,1.35);}
96
96
  .cx-step-print-marker{display:none;}
97
97
  .cx-step-panel > h3{margin-block:0 var(--hfx-space-3,0.75rem);font-size:var(--hfx-type-heading-size,0.9375rem);font-weight:var(--hfx-weight-semibold,600);}
98
98
  .cx-stepper-footer{
@@ -102,7 +102,7 @@ justify-content:end;
102
102
  flex-wrap:wrap;
103
103
  gap:var(--hfx-space-2,0.5rem);
104
104
  padding-block-start:var(--hfx-space-3,0.75rem);
105
- border-block-start:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
105
+ border-block-start:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
106
106
  }
107
107
  .cx-step-position{margin-inline-end:auto;}
108
108
  .cx-stepper-footer button,.cx-stepper-phone-back{
@@ -110,8 +110,8 @@ min-block-size:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px
110
110
  padding:var(--hfx-space-1,0.25rem) var(--hfx-control-padding-x,calc(14px - var(--cx-compact,0) * 4px));
111
111
  border:var(--hfx-border-width,1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));
112
112
  border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));
113
- background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));
114
- color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));
113
+ background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));
114
+ color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));
115
115
  font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);
116
116
  font-size:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem));
117
117
  font-weight:var(--hfx-weight-medium,500);
@@ -147,7 +147,7 @@ block-size:auto;
147
147
  .cx-stepper-phone{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--hfx-space-2,0.5rem);}
148
148
  .cx-stepper-phone > :only-child{grid-column:1 / -1;}
149
149
  .cx-stepper-phone-back[hidden] + [data-hfx-part="picker"]{grid-column:1 / -1;}
150
- .cx-stepper-progress{grid-column:1 / -1;block-size:var(--hfx-space-1,0.25rem);border-radius:var(--hfx-radius-pill,999px);background:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));overflow:hidden;}
150
+ .cx-stepper-progress{grid-column:1 / -1;block-size:var(--hfx-space-1,0.25rem);border-radius:var(--hfx-radius-pill,999px);background:var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));overflow:hidden;}
151
151
  .cx-stepper-progress > span{display:block;block-size:100%;background:var(--hfx-color-accent-indicator,light-dark(#11776f,#37c9b8));border-radius:inherit;}
152
152
  .cx-stepper-host[data-phone="true"]{grid-template-columns:minmax(0,1fr);}
153
153
  .cx-stepper-host[data-phone="true"] > :is(.cx-step-panel,.cx-stepper-footer){grid-column:1;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"89aeb7d73c4b8160",requires:["ui-navigation"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;UI_IMPL.stepper=(root,options={},signal)=>{const n=UI_TOOLS.navigation,life=n.scope(signal),labels=UI_TOOLS.labels(options.labels);const mode=options.mode||root.dataset.mode||'interactive';const linear=options.linear??root.dataset.linear!=='false';let items=n.records(root,'stepper',options);let current=n.resolve(items,options.selectedIndex??options.selected)||items.find(item=>item.element.hasAttribute('aria-current'))||items.find(item=>!item.disabled);if(current?.disabled)current=items.find(item=>!item.disabled);let destroyed=false,completed=false,view,finishSelection;root.dataset.mode=mode;const states=new Map(items.map(item=>[item.id,item.state==='current'?'upcoming':item.state]));const visited=new Set(items.filter(item=>item.visited||item.index<(current?.index??0)||['done','error','skipped'].includes(item.state)).map(item=>item.id));if(current)visited.add(current.id);function syncRecords(){items.forEach(item=>{item.state=item===current&&!completed&&states.get(item.id)!=='error'?'current':states.get(item.id);item.visited=visited.has(item.id)});return current}
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"a31fd5d0b314cdef",requires:["ui-navigation"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;UI_IMPL.stepper=(root,options={},signal)=>{const n=UI_TOOLS.navigation,life=n.scope(signal),labels=UI_TOOLS.labels(options.labels);const mode=options.mode||root.dataset.mode||'interactive';const linear=options.linear??root.dataset.linear!=='false';let items=n.records(root,'stepper',options);let current=n.resolve(items,options.selectedIndex??options.selected)||items.find(item=>item.element.hasAttribute('aria-current'))||items.find(item=>!item.disabled);if(current?.disabled)current=items.find(item=>!item.disabled);let destroyed=false,completed=false,view,finishSelection;root.dataset.mode=mode;const states=new Map(items.map(item=>[item.id,item.state==='current'?'upcoming':item.state]));const visited=new Set(items.filter(item=>item.visited||item.index<(current?.index??0)||['done','error','skipped'].includes(item.state)).map(item=>item.id));if(current)visited.add(current.id);function syncRecords(){items.forEach(item=>{item.state=item===current&&!completed&&states.get(item.id)!=='error'?'current':states.get(item.id);item.visited=visited.has(item.id)});return current}
2
2
  function getState(){syncRecords();return{selected:current?.id??null,finished:completed,steps:items.map(item=>({id:item.id,state:item.state,current:item===current,visited:item.visited,optional:item.optional}))}}
3
3
  function allowed(item){return!!item&&!item.disabled&&(!linear||item===current||visited.has(item.id)||['done','error','skipped'].includes(states.get(item.id)))}
4
4
  if(mode!=='interactive')return{select:async()=>false,getSelected:()=>current?.id??null,refresh(){},destroy(){life.abort()},preparePrint:async()=>{},next:async()=>false,back:async()=>false,skip:async()=>false,finish:async()=>false,setStepState(){return false},getState,ready:Promise.resolve()};const errors=UI_TOOLS.stepperErrors(root,labels);const deferred=n.deferred(root,'stepper',options,life,id=>select(id,'retry'));function render(focus=false){syncRecords();root.dataset.finished=String(completed);view?.update(items,current,states,visited,allowed,focus)}
@@ -17,7 +17,7 @@ gap:var(--hfx-space-1,0.25rem);
17
17
  min-inline-size:0;
18
18
  overflow:auto;
19
19
  scrollbar-width:none;
20
- border-block-end:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
20
+ border-block-end:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
21
21
  }
22
22
  .cx-tablist::-webkit-scrollbar{display:none;}
23
23
  .cx-tab{
@@ -39,9 +39,9 @@ line-height:var(--hfx-type-body-line,1.5);
39
39
  cursor:pointer;
40
40
  white-space:nowrap;
41
41
  }
42
- .cx-tab:hover:not([aria-disabled="true"]){color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
42
+ .cx-tab:hover:not([aria-disabled="true"]){color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
43
43
  .cx-tab:active:not([aria-disabled="true"]){background:var(--hfx-color-active,light-dark(#ebebec,#2e3034));}
44
- .cx-tab[aria-selected="true"]{color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));font-weight:var(--hfx-weight-semibold,600);}
44
+ .cx-tab[aria-selected="true"]{color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));font-weight:var(--hfx-weight-semibold,600);}
45
45
  .cx-tab[aria-disabled="true"]{color:var(--hfx-color-text-disabled,light-dark(#a3a8b0,#5a5f68));cursor:default;}
46
46
  .cx-tab:focus-visible{outline-offset:calc(-1 * var(--hfx-focus-width,2px));}
47
47
  .cx-tab-icon{inline-size:var(--hfx-icon-md,16px);block-size:var(--hfx-icon-md,16px);}
@@ -76,14 +76,14 @@ border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));
76
76
  .cx-tabs--segmented > .cx-tablist{
77
77
  background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));
78
78
  padding:var(--hfx-space-0-5,2px);
79
- border:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
79
+ border:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
80
80
  border-radius:calc(var(--hfx-radius-control,var(--hfx-radius-md,6px)) + var(--hfx-space-0-5,2px));
81
81
  overflow:visible;
82
82
  }
83
83
  .cx-tabs--segmented > .cx-tablist > .cx-tab{flex:1 1 0;min-inline-size:0;white-space:normal;}
84
84
  .cx-tabs--segmented > .cx-tablist > .cx-tab[aria-selected="true"]{
85
85
  background:var(--hfx-color-surface-raised,light-dark(#ffffff,#1e2126));
86
- box-shadow:var(--hfx-elevation-1,0 1px 2px rgba(22,24,28,.06)),0 0 0 var(--hfx-border-width,1px) var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
86
+ box-shadow:var(--hfx-elevation-1,0 1px 2px rgba(22,24,28,.06)),0 0 0 var(--hfx-border-width,1px) var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
87
87
  }
88
88
  :is(.cx-tabs--pills,.cx-tabs--segmented,.cx-tabs--vertical) > .cx-tablist > .cx-tabs-indicator{display:none;}
89
89
  .cx-tabs--vertical{grid-template-columns:auto minmax(0,1fr);}
@@ -93,7 +93,7 @@ align-items:stretch;
93
93
  grid-column:1;
94
94
  grid-row:1 / span 3;
95
95
  border-block-end:0;
96
- border-inline-end:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
96
+ border-inline-end:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));
97
97
  }
98
98
  .cx-tabs--vertical > .cx-tablist > .cx-tab{min-block-size:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px));justify-content:start;}
99
99
  .cx-tabs--vertical .cx-tab-badge{margin-inline-start:auto;}
@@ -120,14 +120,14 @@ font:inherit;
120
120
  cursor:pointer;
121
121
  }
122
122
  :is(.cx-tabs-scroll,.cx-tabs-play):hover{background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
123
- .cx-tabs-play{grid-column:2;display:inline-flex;align-items:center;gap:var(--hfx-space-2,0.5rem);border:var(--hfx-border-width,1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));}
123
+ .cx-tabs-play{grid-column:2;display:inline-flex;align-items:center;gap:var(--hfx-space-2,0.5rem);border:var(--hfx-border-width,1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
124
124
  .cx-tabs-play::before{content:'\25b6' / '';}
125
125
  .cx-tabs-play[data-state="playing"]::before{content:'\23f8' / '';}
126
126
  .cx-tabs-play:disabled{color:var(--hfx-color-text-disabled,light-dark(#a3a8b0,#5a5f68));cursor:default;}
127
127
  .cx-tabpanel{grid-column:1 / -1;min-inline-size:0;padding-block:var(--hfx-space-4,1rem);}
128
128
  .cx-tabs--vertical > .cx-tabpanel{grid-column:2;grid-row:1 / span 3;padding-inline-start:var(--hfx-space-4,1rem);}
129
129
  .cx-tabs[data-cx-ready] > .cx-tabpanel > .cx-tabpanel-heading{display:none;}
130
- .cx-tabs-position{grid-column:1 / -1;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-size:var(--hfx-type-caption-size,0.75rem);line-height:var(--hfx-type-caption-line,1.35);margin-block:var(--hfx-space-1,0.25rem);}
130
+ .cx-tabs-position{grid-column:1 / -1;color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));font-size:var(--hfx-type-caption-size,0.75rem);line-height:var(--hfx-type-caption-line,1.35);margin-block:var(--hfx-space-1,0.25rem);}
131
131
  .cx-tabs-phone-picker{grid-column:1 / -1;inline-size:100%;}
132
132
  .cx-tabs[data-phone="true"]{grid-template-columns:minmax(0,1fr);}
133
133
  .cx-tabs[data-phone="true"] > .cx-tabs-tools{grid-column:1;grid-row:auto;justify-content:end;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"96f562187c7e0732",requires:["ui-navigation"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;UI_IMPL.tabs=(root,options={},signal)=>{const n=UI_TOOLS.navigation,life=n.scope(signal),labels=UI_TOOLS.labels(options.labels);const list=n.owned(root,'[role="tablist"]')[0];let items=[],current,layout,auto,destroyed=false;const style=options.style||['vertical','segmented','pills'].find(s=>root.classList.contains('cx-tabs--'+s))||'underline';for(const variant of['underline','pills','segmented','vertical'])root.classList.toggle('cx-tabs--'+variant,variant===style);root.classList.add('cx-tabs');const effectiveStyle=style==='segmented'&&n.owned(root,'[role="tab"]').length>5?'pills':style;if(effectiveStyle!==style){root.classList.replace('cx-tabs--segmented','cx-tabs--pills');if(options.debug===true)console.warn('[CanopyX] tabs: segmented supports 2–5 options; rendering as pills')}
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"96b84956100933e7",requires:["ui-navigation"],install(context){if(installed.has(context.UI_IMPL))return;const{UI_IMPL,UI_TOOLS,h,setText,fill,watchTheme,overlayTheme,hostHtml}=context;UI_IMPL.tabs=(root,options={},signal)=>{const n=UI_TOOLS.navigation,life=n.scope(signal),labels=UI_TOOLS.labels(options.labels);const list=n.owned(root,'[role="tablist"]')[0];let items=[],current,layout,auto,destroyed=false;const style=options.style||['vertical','segmented','pills'].find(s=>root.classList.contains('cx-tabs--'+s))||'underline';for(const variant of['underline','pills','segmented','vertical'])root.classList.toggle('cx-tabs--'+variant,variant===style);root.classList.add('cx-tabs');const effectiveStyle=style==='segmented'&&n.owned(root,'[role="tab"]').length>5?'pills':style;if(effectiveStyle!==style){root.classList.replace('cx-tabs--segmented','cx-tabs--pills');if(options.debug===true)console.warn('[CanopyX] tabs: segmented supports 2–5 options; rendering as pills')}
2
2
  root.dataset.overflow=options.overflow||root.dataset.overflow||'scroll';if(root.dataset.overflow==='wrap'&&effectiveStyle!=='pills')root.dataset.overflow='scroll';root.dataset.collapse=options.collapse||root.dataset.collapse||(effectiveStyle==='segmented'?'none':'picker');root.dataset.print=options.print||root.dataset.print||'all';root.dataset.transition=options.transition||'none';list?.setAttribute('aria-orientation',effectiveStyle==='vertical'?'vertical':'horizontal');const deferred=n.deferred(root,'tabs',options,life,id=>select(id));function render(){for(const item of items){const selected=item===current;item.element.setAttribute('aria-selected',String(selected));item.element.tabIndex=selected?0:-1;item.element.dataset.state=item.disabled?'disabled':selected?'selected':'';if(item.panel){item.panel.hidden=!selected;item.panel.dataset.state=selected?'selected':'';n.panelTabStop(item.panel)}}
3
3
  layout?.update(items,current)}
4
4
  const selection=n.selection(root,'tabs',options,life,()=>current,async(from,to,loadSignal,live)=>{if(from!==to)deferred.leave(from);current=to;render();if(options.hash&&root.id)writeHash(to.id);if(from!==to)UI_TOOLS.emit(root,'tabs','change',{from,to});const loaded=await deferred.load(to,loadSignal,live);if(live()&&loaded)animate(to,from);if(live())layout?.update(items,current)});function select(value,source='api'){if(destroyed)return Promise.resolve(false);if(source!=='auto'&&source!=='initial')auto?.stop();const target=n.resolve(items,value);if(!target||target.disabled){selection.cancel();return Promise.resolve(false)}
@@ -1,4 +1,4 @@
1
- body .cx-host.cx-view-intent-preview{height:auto;min-width:0;margin-top:var(--hfx-space-3,0.75rem);padding:var(--hfx-space-3,0.75rem);border:var(--hfx-border-width,1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
1
+ body .cx-host.cx-view-intent-preview{height:auto;min-width:0;margin-top:var(--hfx-space-3,0.75rem);padding:var(--hfx-space-3,0.75rem);border:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
2
2
  .cx-view-intent-preview h3{margin:0 0 var(--hfx-space-2,0.5rem);font-size:inherit;font-weight:var(--hfx-weight-semibold,600);}
3
3
  .cx-view-intent-preview .cx-grid-query-chips{display:flex;flex-wrap:wrap;gap:var(--hfx-space-1-5,6px);margin-bottom:var(--hfx-space-3,0.75rem);}
4
4
  .cx-view-intent-preview .cx-grid-chip{display:inline-block;max-width:100%;height:auto;padding:var(--hfx-space-1,0.25rem) var(--hfx-space-2,0.5rem);border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));white-space:normal;overflow-wrap:anywhere;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"26b4233395638945",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,gridButton,gridVariant,gridQuery,gridQueryStart,gridFreeze,GRID_FILTER_LABELS,GRID_REPORTING,watchOverlayTheme}=context;const VIEW_INTENT_LABELS={viewIntentPreview:"Proposed changes",viewIntentApplied:"View changes applied.",viewIntentSuperseded:"The view changed. Preview the proposal again.",viewIntentSearch:"Search: {search}",viewIntentSort:"Sort by {columns}",viewIntentGroup:"Group rows by {columns}",viewIntentColumns:"Show columns: {columns}",viewIntentWords:"Whole words",viewIntentSubstring:"Text contains",viewIntentClearSearch:"Clear search",viewIntentRemoveGrouping:"Remove grouping",viewIntentFlat:"Show records",viewIntentAscending:"ascending",viewIntentDescending:"descending",viewIntentNotEqual:"is not",viewIntentGreater:"greater than",viewIntentAtLeast:"at least",viewIntentLess:"less than",viewIntentAtMost:"at most",viewIntentFilter:"Show rows where {column} {operator} {values}",viewIntentOnly:"Show only {column}: {values}",viewIntentPivot:"Rows: {rows}; columns: {columns}; values: {values}",viewIntentAllRows:"all records",viewIntentTotals:"totals",viewIntentTuples:"Show matching combinations of {columns}: {values}",viewIntentExcludeTuples:"Exclude matching combinations of {columns}: {values}",viewIntentNoChanges:"This view is already selected."};const VIEW_INTENT_MAX=65536;function viewIntentSnapshot(input){let nodes=0,text=0;const visit=(value,depth)=>{if(++nodes>VIEW_INTENT_MAX||depth>32)throw new Error("CanopyX: view intent exceeds its input bounds.");if(value===null||typeof value==="boolean")return value;if(typeof value==="string"){if((text +=value.length)>VIEW_INTENT_MAX)throw new Error("CanopyX: view intent is too large.");return value}
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"dbd26360f2b90a49",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,gridButton,gridVariant,gridQuery,gridQueryStart,gridFreeze,GRID_FILTER_LABELS,GRID_REPORTING,watchOverlayTheme}=context;const VIEW_INTENT_LABELS={viewIntentPreview:"Proposed changes",viewIntentApplied:"View changes applied.",viewIntentSuperseded:"The view changed. Preview the proposal again.",viewIntentSearch:"Search: {search}",viewIntentSort:"Sort by {columns}",viewIntentGroup:"Group rows by {columns}",viewIntentColumns:"Show columns: {columns}",viewIntentWords:"Whole words",viewIntentSubstring:"Text contains",viewIntentClearSearch:"Clear search",viewIntentRemoveGrouping:"Remove grouping",viewIntentFlat:"Show records",viewIntentAscending:"ascending",viewIntentDescending:"descending",viewIntentNotEqual:"is not",viewIntentGreater:"greater than",viewIntentAtLeast:"at least",viewIntentLess:"less than",viewIntentAtMost:"at most",viewIntentFilter:"Show rows where {column} {operator} {values}",viewIntentOnly:"Show only {column}: {values}",viewIntentPivot:"Rows: {rows}; columns: {columns}; values: {values}",viewIntentAllRows:"all records",viewIntentTotals:"totals",viewIntentTuples:"Show matching combinations of {columns}: {values}",viewIntentExcludeTuples:"Exclude matching combinations of {columns}: {values}",viewIntentNoChanges:"This view is already selected."};const VIEW_INTENT_MAX=65536;function viewIntentSnapshot(input){let nodes=0,text=0;const visit=(value,depth)=>{if(++nodes>VIEW_INTENT_MAX||depth>32)throw new Error("CanopyX: view intent exceeds its input bounds.");if(value===null||typeof value==="boolean")return value;if(typeof value==="string"){if((text +=value.length)>VIEW_INTENT_MAX)throw new Error("CanopyX: view intent is too large.");return value}
2
2
  if(typeof value==="number"&&Number.isFinite(value)&&Math.abs(value)<=Number.MAX_SAFE_INTEGER)return value;if(!value||typeof value!=="object"||![Object.prototype,null,Array.prototype].includes(Object.getPrototypeOf(value)))
3
3
  throw new Error("CanopyX: view intents contain JSON data only.");const array=Array.isArray(value),descriptors=Object.getOwnPropertyDescriptors(value),keys=Reflect.ownKeys(descriptors);if(keys.some(key=>typeof key!=="string"||key!=="length"&&!Object.hasOwn(descriptors[key],"value")))
4
4
  throw new Error("CanopyX: view intents cannot contain accessors or symbols.");if(array){if(value.length>VIEW_INTENT_MAX||keys.length!==value.length+1||keys.some(key=>key!=="length"&&!/^(0|[1-9]\d*)$/.test(key)))