@portel/photon 1.14.0 → 1.16.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 (90) hide show
  1. package/dist/auto-ui/beam/routes/api-config.d.ts.map +1 -1
  2. package/dist/auto-ui/beam/routes/api-config.js +29 -8
  3. package/dist/auto-ui/beam/routes/api-config.js.map +1 -1
  4. package/dist/auto-ui/beam/routes/api-marketplace.d.ts.map +1 -1
  5. package/dist/auto-ui/beam/routes/api-marketplace.js +3 -0
  6. package/dist/auto-ui/beam/routes/api-marketplace.js.map +1 -1
  7. package/dist/auto-ui/beam.d.ts.map +1 -1
  8. package/dist/auto-ui/beam.js +167 -48
  9. package/dist/auto-ui/beam.js.map +1 -1
  10. package/dist/auto-ui/bridge/index.d.ts.map +1 -1
  11. package/dist/auto-ui/bridge/index.js +578 -0
  12. package/dist/auto-ui/bridge/index.js.map +1 -1
  13. package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
  14. package/dist/auto-ui/bridge/renderers.js +7 -3
  15. package/dist/auto-ui/bridge/renderers.js.map +1 -1
  16. package/dist/auto-ui/bridge/types.d.ts +6 -0
  17. package/dist/auto-ui/bridge/types.d.ts.map +1 -1
  18. package/dist/auto-ui/frontend/pure-view.html +289 -0
  19. package/dist/auto-ui/photon-bridge.d.ts +11 -0
  20. package/dist/auto-ui/photon-bridge.d.ts.map +1 -1
  21. package/dist/auto-ui/photon-bridge.js +75 -1
  22. package/dist/auto-ui/photon-bridge.js.map +1 -1
  23. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  24. package/dist/auto-ui/streamable-http-transport.js +29 -3
  25. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  26. package/dist/beam-form.bundle.js +5707 -0
  27. package/dist/beam-form.bundle.js.map +7 -0
  28. package/dist/beam.bundle.js +1947 -523
  29. package/dist/beam.bundle.js.map +4 -4
  30. package/dist/cli/commands/info.d.ts.map +1 -1
  31. package/dist/cli/commands/info.js +15 -2
  32. package/dist/cli/commands/info.js.map +1 -1
  33. package/dist/daemon/client.d.ts +5 -0
  34. package/dist/daemon/client.d.ts.map +1 -1
  35. package/dist/daemon/client.js +50 -0
  36. package/dist/daemon/client.js.map +1 -1
  37. package/dist/daemon/manager.d.ts +15 -0
  38. package/dist/daemon/manager.d.ts.map +1 -1
  39. package/dist/daemon/manager.js +142 -11
  40. package/dist/daemon/manager.js.map +1 -1
  41. package/dist/deploy/cloudflare.d.ts.map +1 -1
  42. package/dist/deploy/cloudflare.js +10 -2
  43. package/dist/deploy/cloudflare.js.map +1 -1
  44. package/dist/loader.d.ts.map +1 -1
  45. package/dist/loader.js +50 -3
  46. package/dist/loader.js.map +1 -1
  47. package/dist/marketplace-manager.d.ts +9 -0
  48. package/dist/marketplace-manager.d.ts.map +1 -1
  49. package/dist/marketplace-manager.js +115 -42
  50. package/dist/marketplace-manager.js.map +1 -1
  51. package/dist/meta.d.ts +51 -0
  52. package/dist/meta.d.ts.map +1 -0
  53. package/dist/meta.js +320 -0
  54. package/dist/meta.js.map +1 -0
  55. package/dist/photon-cli-runner.d.ts.map +1 -1
  56. package/dist/photon-cli-runner.js +30 -5
  57. package/dist/photon-cli-runner.js.map +1 -1
  58. package/dist/photon-doc-extractor.d.ts +1 -0
  59. package/dist/photon-doc-extractor.d.ts.map +1 -1
  60. package/dist/photon-doc-extractor.js +33 -21
  61. package/dist/photon-doc-extractor.js.map +1 -1
  62. package/dist/photons/docs/ui/docs.html +441 -0
  63. package/dist/photons/docs.photon.d.ts +237 -0
  64. package/dist/photons/docs.photon.d.ts.map +1 -0
  65. package/dist/photons/docs.photon.js +483 -0
  66. package/dist/photons/docs.photon.js.map +1 -0
  67. package/dist/photons/docs.photon.ts +536 -0
  68. package/dist/photons/slides.photon.d.ts +212 -0
  69. package/dist/photons/slides.photon.d.ts.map +1 -0
  70. package/dist/photons/slides.photon.js +355 -0
  71. package/dist/photons/slides.photon.js.map +1 -0
  72. package/dist/photons/slides.photon.ts +370 -0
  73. package/dist/photons/spreadsheet/ui/spreadsheet.html +779 -0
  74. package/dist/photons/spreadsheet.photon.d.ts +554 -0
  75. package/dist/photons/spreadsheet.photon.d.ts.map +1 -0
  76. package/dist/photons/spreadsheet.photon.js +1050 -0
  77. package/dist/photons/spreadsheet.photon.js.map +1 -0
  78. package/dist/photons/spreadsheet.photon.ts +1239 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +17 -57
  81. package/dist/server.js.map +1 -1
  82. package/dist/shared/error-handler.d.ts +8 -0
  83. package/dist/shared/error-handler.d.ts.map +1 -1
  84. package/dist/shared/error-handler.js +50 -0
  85. package/dist/shared/error-handler.js.map +1 -1
  86. package/dist/shared-utils.d.ts +3 -2
  87. package/dist/shared-utils.d.ts.map +1 -1
  88. package/dist/shared-utils.js +4 -3
  89. package/dist/shared-utils.js.map +1 -1
  90. package/package.json +7 -2
@@ -202,6 +202,10 @@ export function generateBridgeScript(context) {
202
202
  if (m.type === 'photon:result') {
203
203
  toolOutput = m.data;
204
204
  listeners.result.forEach(function(cb) { cb(m.data); });
205
+ // Also dispatch to named event listeners (proxy.onResult uses photon.on('result', cb))
206
+ if (eventListeners['result']) {
207
+ eventListeners['result'].forEach(function(cb) { cb(m.data); });
208
+ }
205
209
  }
206
210
  else if (m.type === 'photon:theme-change') {
207
211
  ctx.theme = m.theme || 'dark';
@@ -462,13 +466,61 @@ export function generateBridgeScript(context) {
462
466
 
463
467
  // Render data in any auto UI format: table, chart:bar, gauge, metric, etc.
464
468
  // Usage: photon.render(container, data, 'chart:bar', { label: 'name', value: 'count' })
469
+ // Accepts optional motion config: photon.render(el, data, 'table', { enter: 'scale-in', transition: 'matte:radial' })
465
470
  // Lazy-loads the renderer bundle on first call.
466
471
  render: function(container, data, format, opts) {
467
472
  if (!container) return;
468
473
  format = format || 'json';
474
+ opts = opts || {};
475
+
476
+ // Extract motion options
477
+ var motionEnter = opts.enter;
478
+ var motionTransition = opts.transition;
469
479
 
470
480
  function doRender() {
481
+ // Capture existing content for matte transition
482
+ var existingHTML = '';
483
+ if (motionTransition && container.innerHTML.trim()) {
484
+ existingHTML = container.innerHTML;
485
+ }
486
+
471
487
  window._photonRenderers.render(container, data, format, opts);
488
+
489
+ // Apply matte transition if there was previous content
490
+ if (existingHTML && motionTransition) {
491
+ var matteType = motionTransition.replace('matte:', '');
492
+ var outgoing = document.createElement('div');
493
+ outgoing.innerHTML = existingHTML;
494
+ outgoing.style.position = 'absolute';
495
+ outgoing.style.inset = '0';
496
+
497
+ var incoming = document.createElement('div');
498
+ while (container.firstChild) incoming.appendChild(container.firstChild);
499
+
500
+ container.style.position = 'relative';
501
+ container.appendChild(outgoing);
502
+ container.appendChild(incoming);
503
+
504
+ // Apply matte class
505
+ if (matteType === 'radial' || matteType === 'diagonal') {
506
+ incoming.classList.add('motion-matte-' + matteType);
507
+ } else {
508
+ incoming.classList.add('motion-matte-reveal');
509
+ incoming.style.maskImage = "url('" + matteType + "')";
510
+ incoming.style.webkitMaskImage = "url('" + matteType + "')";
511
+ }
512
+
513
+ // Clean up after animation
514
+ incoming.addEventListener('animationend', function() {
515
+ outgoing.remove();
516
+ while (incoming.firstChild) container.appendChild(incoming.firstChild);
517
+ incoming.remove();
518
+ container.style.position = '';
519
+ }, { once: true });
520
+ } else if (motionEnter) {
521
+ // Simple enter animation on the container
522
+ container.classList.add('motion-' + motionEnter);
523
+ }
472
524
  }
473
525
 
474
526
  if (window._photonRenderers) { doRender(); return; }
@@ -496,6 +548,67 @@ export function generateBridgeScript(context) {
496
548
  container.innerHTML = '<pre style="font-size:11px;color:#888;">' + JSON.stringify(data, null, 2) + '</pre>';
497
549
  };
498
550
  document.head.appendChild(s);
551
+ },
552
+
553
+ // ─────────────────────────────────────────────────────────────────────────
554
+ // MOTION API
555
+ // Usage: photon.motion.enter(el, 'slide-up')
556
+ // photon.motion.exit(el, 'fade-out').then(() => console.log('removed'))
557
+ // photon.motion.stagger(container)
558
+ // photon.motion.depth(el, 'float')
559
+ // ─────────────────────────────────────────────────────────────────────────
560
+ motion: {
561
+ enter: function(el, effect) {
562
+ if (!el) return;
563
+ effect = effect || 'fade-in';
564
+ el.classList.add('motion-' + effect);
565
+ },
566
+ exit: function(el, effect) {
567
+ if (!el) return Promise.resolve();
568
+ effect = effect || 'fade-out';
569
+
570
+ // Respect reduced motion
571
+ if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
572
+ el.remove();
573
+ return Promise.resolve();
574
+ }
575
+
576
+ el.classList.add('motion-' + effect);
577
+ return new Promise(function(resolve) {
578
+ function onEnd() {
579
+ el.removeEventListener('animationend', onEnd);
580
+ el.remove();
581
+ resolve();
582
+ }
583
+ el.addEventListener('animationend', onEnd);
584
+ // Safety timeout
585
+ setTimeout(function() {
586
+ if (el.parentElement) {
587
+ el.removeEventListener('animationend', onEnd);
588
+ el.remove();
589
+ resolve();
590
+ }
591
+ }, 1000);
592
+ });
593
+ },
594
+ stagger: function(container) {
595
+ if (!container) return;
596
+ container.classList.add('motion-stagger');
597
+ },
598
+ depth: function(el, preset) {
599
+ if (!el) return;
600
+ preset = preset || 'float';
601
+ // Ensure parent has perspective
602
+ var parent = el.parentElement;
603
+ if (parent && !parent.classList.contains('motion-perspective')) {
604
+ parent.classList.add('motion-perspective');
605
+ }
606
+ if (preset === 'tilt' || preset === 'tilt-right') {
607
+ el.classList.add('motion-' + preset);
608
+ } else {
609
+ el.classList.add('motion-depth-' + preset);
610
+ }
611
+ }
499
612
  }
500
613
  };
501
614
 
@@ -600,6 +713,122 @@ export function generateBridgeScript(context) {
600
713
  // Apply initial theme
601
714
  applyThemeTokens();
602
715
 
716
+ // ═══════════════════════════════════════════════════════════════════════════
717
+ // MOTION STYLES INJECTION
718
+ // ═══════════════════════════════════════════════════════════════════════════
719
+
720
+ function _injectMotionStyles() {
721
+ var style = document.createElement('style');
722
+ style.id = 'photon-motion';
723
+ style.textContent = [
724
+ '/* ═══ TIMING TOKENS ═══ */',
725
+ ':root {',
726
+ ' --motion-fast: 0.15s;',
727
+ ' --motion-normal: 0.3s;',
728
+ ' --motion-slow: 0.5s;',
729
+ ' --motion-slower: 0.8s;',
730
+ ' --motion-ease-out: cubic-bezier(0.16, 1, 0.3, 1);',
731
+ ' --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);',
732
+ ' --motion-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);',
733
+ '}',
734
+ '',
735
+ '/* ═══ ENTER ANIMATIONS ═══ */',
736
+ '@keyframes motion-fade-in { from { opacity: 0; } to { opacity: 1; } }',
737
+ '@keyframes motion-slide-up { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }',
738
+ '@keyframes motion-slide-down { from { opacity: 0; transform: translateY(-16px); } to { opacity: 1; transform: translateY(0); } }',
739
+ '@keyframes motion-slide-in-right { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } }',
740
+ '@keyframes motion-slide-in-left { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }',
741
+ '@keyframes motion-scale-in { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }',
742
+ '@keyframes motion-scale-up { from { opacity: 0; transform: scale(0.5); } to { opacity: 1; transform: scale(1); } }',
743
+ '@keyframes motion-flip-in { from { opacity: 0; transform: perspective(800px) rotateY(90deg); } to { opacity: 1; transform: perspective(800px) rotateY(0deg); } }',
744
+ '@keyframes motion-drop-in { from { opacity: 0; transform: translateY(-40px) scale(0.95); } 60% { opacity: 1; transform: translateY(4px) scale(1.01); } to { opacity: 1; transform: translateY(0) scale(1); } }',
745
+ '',
746
+ '/* ═══ EXIT ANIMATIONS ═══ */',
747
+ '@keyframes motion-fade-out { from { opacity: 1; } to { opacity: 0; } }',
748
+ '@keyframes motion-slide-out-down { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(16px); } }',
749
+ '@keyframes motion-scale-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.92); } }',
750
+ '@keyframes motion-zoom-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.5); } }',
751
+ '@keyframes motion-flip-out { from { opacity: 1; transform: perspective(800px) rotateY(0deg); } to { opacity: 0; transform: perspective(800px) rotateY(-90deg); } }',
752
+ '',
753
+ '/* ═══ PERSISTENT EFFECTS ═══ */',
754
+ '@keyframes motion-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }',
755
+ '@keyframes motion-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.03); } }',
756
+ '@keyframes motion-glow { 0%, 100% { box-shadow: 0 0 0 0 var(--glow-primary, rgba(100, 180, 255, 0)); } 50% { box-shadow: 0 0 12px 2px var(--glow-primary, rgba(100, 180, 255, 0.3)); } }',
757
+ '',
758
+ '/* ═══ ENTER CLASSES ═══ */',
759
+ '.motion-fade-in { animation: motion-fade-in var(--motion-normal) var(--motion-ease-out) both; }',
760
+ '.motion-slide-up { animation: motion-slide-up var(--motion-normal) var(--motion-ease-out) both; }',
761
+ '.motion-slide-down { animation: motion-slide-down var(--motion-normal) var(--motion-ease-out) both; }',
762
+ '.motion-slide-in-right { animation: motion-slide-in-right var(--motion-normal) var(--motion-ease-out) both; }',
763
+ '.motion-slide-in-left { animation: motion-slide-in-left var(--motion-normal) var(--motion-ease-out) both; }',
764
+ '.motion-scale-in { animation: motion-scale-in var(--motion-normal) var(--motion-ease-out) both; }',
765
+ '.motion-scale-up { animation: motion-scale-up var(--motion-normal) var(--motion-ease-spring) both; }',
766
+ '.motion-flip-in { animation: motion-flip-in var(--motion-slow) var(--motion-ease-out) both; }',
767
+ '.motion-drop-in { animation: motion-drop-in var(--motion-slow) var(--motion-ease-out) both; }',
768
+ '',
769
+ '/* ═══ EXIT CLASSES ═══ */',
770
+ '.motion-fade-out { animation: motion-fade-out var(--motion-normal) var(--motion-ease-in-out) both; }',
771
+ '.motion-slide-out-down { animation: motion-slide-out-down var(--motion-normal) var(--motion-ease-in-out) both; }',
772
+ '.motion-scale-out { animation: motion-scale-out var(--motion-normal) var(--motion-ease-in-out) both; }',
773
+ '.motion-zoom-out { animation: motion-zoom-out var(--motion-normal) var(--motion-ease-in-out) both; }',
774
+ '.motion-flip-out { animation: motion-flip-out var(--motion-slow) var(--motion-ease-in-out) both; }',
775
+ '',
776
+ '/* ═══ PERSISTENT CLASSES ═══ */',
777
+ '.motion-float { animation: motion-float 3s ease-in-out infinite; }',
778
+ '.motion-pulse { animation: motion-pulse 2s ease-in-out infinite; }',
779
+ '.motion-glow { animation: motion-glow 2s ease-in-out infinite; }',
780
+ '',
781
+ '/* ═══ STAGGER ═══ */',
782
+ '.motion-stagger > * { animation: motion-slide-up var(--motion-normal) var(--motion-ease-out) both; }',
783
+ '.motion-stagger > *:nth-child(1) { animation-delay: 0ms; }',
784
+ '.motion-stagger > *:nth-child(2) { animation-delay: 50ms; }',
785
+ '.motion-stagger > *:nth-child(3) { animation-delay: 100ms; }',
786
+ '.motion-stagger > *:nth-child(4) { animation-delay: 150ms; }',
787
+ '.motion-stagger > *:nth-child(5) { animation-delay: 200ms; }',
788
+ '.motion-stagger > *:nth-child(6) { animation-delay: 250ms; }',
789
+ '.motion-stagger > *:nth-child(7) { animation-delay: 300ms; }',
790
+ '.motion-stagger > *:nth-child(8) { animation-delay: 350ms; }',
791
+ '.motion-stagger > *:nth-child(9) { animation-delay: 400ms; }',
792
+ '.motion-stagger > *:nth-child(10) { animation-delay: 450ms; }',
793
+ '.motion-stagger > *:nth-child(n+11) { animation-delay: 500ms; }',
794
+ '',
795
+ '.motion-stagger-fast > * { animation: motion-fade-in var(--motion-fast) var(--motion-ease-out) both; }',
796
+ '.motion-stagger-fast > *:nth-child(1) { animation-delay: 0ms; }',
797
+ '.motion-stagger-fast > *:nth-child(2) { animation-delay: 30ms; }',
798
+ '.motion-stagger-fast > *:nth-child(3) { animation-delay: 60ms; }',
799
+ '.motion-stagger-fast > *:nth-child(4) { animation-delay: 90ms; }',
800
+ '.motion-stagger-fast > *:nth-child(5) { animation-delay: 120ms; }',
801
+ '.motion-stagger-fast > *:nth-child(n+6) { animation-delay: 150ms; }',
802
+ '',
803
+ '/* ═══ DEPTH / PERSPECTIVE ═══ */',
804
+ '.motion-perspective { perspective: 1200px; perspective-origin: center; }',
805
+ '.motion-depth-front { transform: translateZ(30px); }',
806
+ '.motion-depth-back { transform: translateZ(-20px) scale(1.04); filter: blur(0.5px); opacity: 0.85; }',
807
+ '.motion-depth-float { transform: translateZ(15px); filter: drop-shadow(0 8px 16px rgba(0, 0, 0, 0.25)); }',
808
+ '.motion-tilt { transform: rotateY(-5deg) rotateX(2deg); transition: transform var(--motion-slow) var(--motion-ease-out); }',
809
+ '.motion-tilt:hover { transform: rotateY(0deg) rotateX(0deg); }',
810
+ '.motion-tilt-right { transform: rotateY(5deg) rotateX(2deg); transition: transform var(--motion-slow) var(--motion-ease-out); }',
811
+ '.motion-tilt-right:hover { transform: rotateY(0deg) rotateX(0deg); }',
812
+ '',
813
+ '/* ═══ MATTE TRANSITIONS ═══ */',
814
+ '.motion-matte-reveal { mask-size: 0% auto; mask-repeat: no-repeat; mask-position: center; animation: motion-matte-wipe var(--motion-slower) var(--motion-ease-out) forwards; }',
815
+ '@keyframes motion-matte-wipe { to { mask-size: 300% auto; } }',
816
+ '.motion-matte-radial { mask-image: radial-gradient(circle, white, black); mask-size: 0% 0%; mask-position: center; mask-repeat: no-repeat; animation: motion-matte-radial-reveal var(--motion-slower) var(--motion-ease-out) forwards; }',
817
+ '@keyframes motion-matte-radial-reveal { to { mask-size: 200% 200%; } }',
818
+ '.motion-matte-diagonal { mask-image: linear-gradient(135deg, white 0%, black 100%); mask-size: 300% 300%; mask-position: 100% 100%; animation: motion-matte-diagonal-reveal var(--motion-slower) var(--motion-ease-out) forwards; }',
819
+ '@keyframes motion-matte-diagonal-reveal { to { mask-position: 0% 0%; } }',
820
+ '',
821
+ '/* ═══ REDUCED MOTION ═══ */',
822
+ '@media (prefers-reduced-motion: reduce) {',
823
+ ' *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }',
824
+ ' .motion-float, .motion-pulse, .motion-glow { animation: none !important; }',
825
+ '}'
826
+ ].join('\\n');
827
+ document.head.appendChild(style);
828
+ }
829
+
830
+ _injectMotionStyles();
831
+
603
832
  // ═══════════════════════════════════════════════════════════════════════════
604
833
  // DECLARATIVE DATA BINDING (Datastar-inspired, metadata-driven)
605
834
  // ═══════════════════════════════════════════════════════════════════════════
@@ -635,6 +864,283 @@ export function generateBridgeScript(context) {
635
864
  // Track bound elements and their last results for theme-change re-rendering
636
865
  var _boundElements = [];
637
866
 
867
+ // ═══════════════════════════════════════════════════════════════════════════
868
+ // FORM CSS (injected once on first form generation)
869
+ // ═══════════════════════════════════════════════════════════════════════════
870
+ var _formCSSInjected = false;
871
+ function _injectFormCSS() {
872
+ if (_formCSSInjected) return;
873
+ _formCSSInjected = true;
874
+ var style = document.createElement('style');
875
+ style.id = 'photon-form-css';
876
+ style.textContent = [
877
+ '.photon-auto-form { font-family: Inter, system-ui, sans-serif; max-width: 480px; margin: 0 auto; }',
878
+ '.photon-auto-form .pf-group { margin-bottom: 12px; }',
879
+ '.photon-auto-form label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 4px; color: var(--color-on-surface, var(--text, #c0caf5)); }',
880
+ '.photon-auto-form label .pf-req { color: var(--color-error, var(--error, #f7768e)); margin-left: 2px; }',
881
+ '.photon-auto-form input, .photon-auto-form select, .photon-auto-form textarea {',
882
+ ' width: 100%; box-sizing: border-box; padding: 8px 10px; border-radius: 6px;',
883
+ ' border: 1px solid var(--color-outline-variant, var(--border, #3b3d57)); background: var(--color-surface-container, var(--input, #1e2030));',
884
+ ' color: var(--color-on-surface, var(--text, #c0caf5)); font-size: 14px; font-family: inherit; outline: none;',
885
+ '}',
886
+ '.photon-auto-form input:focus, .photon-auto-form select:focus, .photon-auto-form textarea:focus {',
887
+ ' border-color: var(--color-primary, var(--accent, #7aa2f7));',
888
+ '}',
889
+ '.photon-auto-form input[type="checkbox"] { width: auto; margin-right: 8px; }',
890
+ '.photon-auto-form .pf-check-group { display: flex; align-items: center; }',
891
+ '.photon-auto-form .pf-desc { font-size: 11px; color: var(--color-on-surface-muted, var(--muted, #565f89)); margin-top: 2px; }',
892
+ '.photon-auto-form button[type="submit"] {',
893
+ ' margin-top: 16px; padding: 10px 24px; border-radius: 6px; border: none; cursor: pointer;',
894
+ ' background: var(--color-primary, var(--accent, #7aa2f7)); color: var(--color-on-primary, #fff); font-size: 14px; font-weight: 500;',
895
+ ' font-family: inherit; width: 100%;',
896
+ '}',
897
+ '.photon-auto-form button[type="submit"]:hover { opacity: 0.9; }',
898
+ '.photon-auto-form button[type="submit"]:disabled { opacity: 0.5; cursor: not-allowed; }',
899
+ '.photon-auto-form .pf-result { margin-top: 16px; }',
900
+ '.photon-auto-form .pf-error { color: var(--color-error, var(--error, #f7768e)); font-size: 13px; margin-top: 8px; }',
901
+ ].join('\\n');
902
+ document.head.appendChild(style);
903
+ }
904
+
905
+ // ═══════════════════════════════════════════════════════════════════════════
906
+ // FORM GENERATION (vanilla JS from JSON Schema)
907
+ // ═══════════════════════════════════════════════════════════════════════════
908
+
909
+ function _shouldShowForm(meta, args) {
910
+ // Explicit data-view overrides auto-detection
911
+ // Otherwise: show form if any required params are missing from args
912
+ var schema = meta.inputSchema;
913
+ if (!schema || !schema.properties) return false; // no params → result
914
+ var required = schema.required || [];
915
+ if (required.length === 0) return false; // no required params → result
916
+ for (var i = 0; i < required.length; i++) {
917
+ if (!(required[i] in args)) return true; // missing required → form
918
+ }
919
+ return false; // all required present → result
920
+ }
921
+
922
+ function _escHtml(s) {
923
+ return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
924
+ }
925
+
926
+ /**
927
+ * Load Beam's invoke-form component (Lit) for rich form rendering.
928
+ * Lazy-loads the form bundle on first use — provides custom inputs
929
+ * (date-picker, segmented-control, star-rating, etc.) in pure-view context.
930
+ */
931
+ function _loadRichForm(el, method, meta, args, proxy, format, renderResult) {
932
+ // Inject form bundle script (once)
933
+ if (!document.querySelector('script[data-form-bundle]')) {
934
+ var s = document.createElement('script');
935
+ s.type = 'module';
936
+ s.src = '/beam-form.bundle.js';
937
+ s.setAttribute('data-form-bundle', '1');
938
+ document.head.appendChild(s);
939
+ }
940
+
941
+ // Wait for invoke-form custom element to be defined
942
+ customElements.whenDefined('invoke-form').then(function() {
943
+ var form = document.createElement('invoke-form');
944
+ form.photonName = ctx.photon;
945
+ form.methodName = method;
946
+ form.params = meta.inputSchema.properties || {};
947
+ // Pass along any pre-set args as shared values
948
+ if (args && Object.keys(args).length > 0) {
949
+ form.sharedValues = args;
950
+ }
951
+
952
+ // Handle form submission — call the method via bridge proxy
953
+ form.addEventListener('submit', function(e) {
954
+ form.loading = true;
955
+ try {
956
+ var p = proxy[method](e.detail.args);
957
+ if (p && typeof p.then === 'function') {
958
+ p.then(function(r) {
959
+ form.loading = false;
960
+ renderResult(r);
961
+ }).catch(function(err) {
962
+ form.loading = false;
963
+ el.insertAdjacentHTML('beforeend',
964
+ '<div style="color:var(--color-error,#f87171);padding:8px;">Error: ' + _escHtml(err.message) + '</div>');
965
+ });
966
+ } else {
967
+ form.loading = false;
968
+ renderResult(p);
969
+ }
970
+ } catch (err) {
971
+ form.loading = false;
972
+ el.insertAdjacentHTML('beforeend',
973
+ '<div style="color:var(--color-error,#f87171);padding:8px;">Error: ' + _escHtml(err.message) + '</div>');
974
+ }
975
+ });
976
+
977
+ el.innerHTML = '';
978
+ el.appendChild(form);
979
+ });
980
+ }
981
+
982
+ function _generateForm(el, method, meta, args, proxy, format, renderResult) {
983
+ _injectFormCSS();
984
+ var schema = meta.inputSchema;
985
+ var props = schema.properties || {};
986
+ var required = schema.required || [];
987
+ var keys = Object.keys(props);
988
+
989
+ var form = document.createElement('form');
990
+ form.className = 'photon-auto-form';
991
+ form.setAttribute('autocomplete', 'off');
992
+
993
+ for (var i = 0; i < keys.length; i++) {
994
+ (function(key) {
995
+ var prop = props[key];
996
+ var isReq = required.indexOf(key) !== -1;
997
+ var type = prop.type || 'string';
998
+ var group = document.createElement('div');
999
+ group.className = 'pf-group';
1000
+
1001
+ var prefilled = args[key] !== undefined ? args[key] : (prop.default !== undefined ? prop.default : '');
1002
+
1003
+ if (type === 'boolean') {
1004
+ group.className += ' pf-check-group';
1005
+ var cb = document.createElement('input');
1006
+ cb.type = 'checkbox';
1007
+ cb.name = key;
1008
+ cb.id = 'pf-' + key;
1009
+ if (prefilled === true || prefilled === 'true') cb.checked = true;
1010
+ var lbl = document.createElement('label');
1011
+ lbl.htmlFor = 'pf-' + key;
1012
+ lbl.textContent = prop.title || key;
1013
+ group.appendChild(cb);
1014
+ group.appendChild(lbl);
1015
+ } else {
1016
+ var lbl = document.createElement('label');
1017
+ lbl.htmlFor = 'pf-' + key;
1018
+ lbl.innerHTML = _escHtml(prop.title || key) + (isReq ? '<span class="pf-req">*</span>' : '');
1019
+ group.appendChild(lbl);
1020
+
1021
+ var input;
1022
+ if (prop.enum && prop.enum.length > 0) {
1023
+ input = document.createElement('select');
1024
+ input.name = key;
1025
+ input.id = 'pf-' + key;
1026
+ var placeholder = document.createElement('option');
1027
+ placeholder.value = '';
1028
+ placeholder.textContent = 'Select...';
1029
+ input.appendChild(placeholder);
1030
+ for (var j = 0; j < prop.enum.length; j++) {
1031
+ var opt = document.createElement('option');
1032
+ opt.value = prop.enum[j];
1033
+ opt.textContent = prop.enum[j];
1034
+ if (String(prefilled) === String(prop.enum[j])) opt.selected = true;
1035
+ input.appendChild(opt);
1036
+ }
1037
+ } else if (type === 'number' || type === 'integer') {
1038
+ input = document.createElement('input');
1039
+ input.type = 'number';
1040
+ input.name = key;
1041
+ input.id = 'pf-' + key;
1042
+ if (prop.minimum !== undefined) input.min = String(prop.minimum);
1043
+ if (prop.maximum !== undefined) input.max = String(prop.maximum);
1044
+ if (type === 'integer') input.step = '1';
1045
+ if (prefilled !== '') input.value = String(prefilled);
1046
+ } else if (prop.format === 'date') {
1047
+ input = document.createElement('input');
1048
+ input.type = 'date';
1049
+ input.name = key;
1050
+ input.id = 'pf-' + key;
1051
+ if (prefilled) input.value = String(prefilled);
1052
+ } else if (prop.maxLength && prop.maxLength > 200) {
1053
+ input = document.createElement('textarea');
1054
+ input.name = key;
1055
+ input.id = 'pf-' + key;
1056
+ input.rows = 4;
1057
+ if (prefilled) input.value = String(prefilled);
1058
+ } else {
1059
+ input = document.createElement('input');
1060
+ input.type = 'text';
1061
+ input.name = key;
1062
+ input.id = 'pf-' + key;
1063
+ if (prefilled !== '') input.value = String(prefilled);
1064
+ }
1065
+
1066
+ if (isReq) input.required = true;
1067
+ if (prop.description) input.placeholder = prop.description;
1068
+ group.appendChild(input);
1069
+
1070
+ if (prop.description) {
1071
+ var desc = document.createElement('div');
1072
+ desc.className = 'pf-desc';
1073
+ desc.textContent = prop.description;
1074
+ group.appendChild(desc);
1075
+ }
1076
+ }
1077
+
1078
+ form.appendChild(group);
1079
+ })(keys[i]);
1080
+ }
1081
+
1082
+ var submitBtn = document.createElement('button');
1083
+ submitBtn.type = 'submit';
1084
+ submitBtn.textContent = 'Run';
1085
+ form.appendChild(submitBtn);
1086
+
1087
+ var resultDiv = document.createElement('div');
1088
+ resultDiv.className = 'pf-result';
1089
+ form.appendChild(resultDiv);
1090
+
1091
+ form.addEventListener('submit', function(e) {
1092
+ e.preventDefault();
1093
+ submitBtn.disabled = true;
1094
+ submitBtn.textContent = 'Running...';
1095
+
1096
+ // Collect form values
1097
+ var formArgs = {};
1098
+ for (var k = 0; k < keys.length; k++) {
1099
+ var key = keys[k];
1100
+ var prop = props[key];
1101
+ var type = prop.type || 'string';
1102
+ var inputEl = form.querySelector('[name="' + key + '"]');
1103
+ if (!inputEl) continue;
1104
+ if (type === 'boolean') {
1105
+ formArgs[key] = inputEl.checked;
1106
+ } else if (type === 'number' || type === 'integer') {
1107
+ var val = inputEl.value;
1108
+ if (val !== '') formArgs[key] = type === 'integer' ? parseInt(val, 10) : parseFloat(val);
1109
+ } else {
1110
+ var val = inputEl.value;
1111
+ if (val !== '') formArgs[key] = val;
1112
+ }
1113
+ }
1114
+
1115
+ try {
1116
+ var p = proxy[method](formArgs);
1117
+ if (p && typeof p.then === 'function') {
1118
+ p.then(function(r) {
1119
+ submitBtn.disabled = false;
1120
+ submitBtn.textContent = 'Run';
1121
+ resultDiv.innerHTML = '';
1122
+ if (format) {
1123
+ window.photon.render(resultDiv, r, format);
1124
+ } else {
1125
+ renderResult(r);
1126
+ }
1127
+ }).catch(function(err) {
1128
+ submitBtn.disabled = false;
1129
+ submitBtn.textContent = 'Run';
1130
+ resultDiv.innerHTML = '<div class="pf-error">Error: ' + _escHtml(err.message) + '</div>';
1131
+ });
1132
+ }
1133
+ } catch (err) {
1134
+ submitBtn.disabled = false;
1135
+ submitBtn.textContent = 'Run';
1136
+ resultDiv.innerHTML = '<div class="pf-error">Error: ' + _escHtml(err.message) + '</div>';
1137
+ }
1138
+ });
1139
+
1140
+ el.innerHTML = '';
1141
+ el.appendChild(form);
1142
+ }
1143
+
638
1144
  function _bindElements() {
639
1145
  if (!ctx.photon) return;
640
1146
  var proxy = window[ctx.photon];
@@ -736,6 +1242,31 @@ export function generateBridgeScript(context) {
736
1242
  _originalRender(result);
737
1243
  };
738
1244
 
1245
+ // ── Auto-detect: form vs result ──
1246
+ // data-view="form" forces form, data-view="result" forces invoke
1247
+ // Otherwise: show form if required params are missing from args
1248
+ var viewOverride = el.getAttribute('data-view');
1249
+ var showForm = false;
1250
+ if (viewOverride === 'form') {
1251
+ showForm = true;
1252
+ } else if (viewOverride === 'result') {
1253
+ showForm = false;
1254
+ } else {
1255
+ showForm = _shouldShowForm(meta, args);
1256
+ }
1257
+
1258
+ if (showForm && meta.inputSchema) {
1259
+ // Use rich invoke-form (Lit component) for pure-view form mode.
1260
+ // The form bundle is lazy-loaded on first use — provides custom inputs
1261
+ // (date-picker, segmented-control, etc.) without loading full Beam chrome.
1262
+ if (viewOverride === 'form') {
1263
+ _loadRichForm(el, method, meta, args, proxy, format, renderResult);
1264
+ } else {
1265
+ _generateForm(el, method, meta, args, proxy, format, renderResult);
1266
+ }
1267
+ return; // form handles its own lifecycle
1268
+ }
1269
+
739
1270
  // ── Call method and render ──
740
1271
  function load() {
741
1272
  el.classList.add('photon-loading');
@@ -810,11 +1341,58 @@ export function generateBridgeScript(context) {
810
1341
  }
811
1342
  }
812
1343
 
1344
+ // ═══════════════════════════════════════════════════════════════════════════
1345
+ // VIEWPORT-FILL SCALING (for standalone pure-view pages)
1346
+ // ═══════════════════════════════════════════════════════════════════════════
1347
+ function _setupViewportScaling() {
1348
+ var container = document.getElementById('pure-view');
1349
+ if (!container) return; // not a standalone pure-view page
1350
+
1351
+ var observer = new ResizeObserver(function() {
1352
+ // Get the rendered content's natural size
1353
+ var content = container.firstElementChild;
1354
+ if (!content) return;
1355
+
1356
+ // Don't scale forms — they should stay at natural size
1357
+ if (content.classList && content.classList.contains('photon-auto-form')) return;
1358
+
1359
+ var viewportH = window.innerHeight;
1360
+ var viewportW = window.innerWidth;
1361
+ var contentH = content.scrollHeight || content.offsetHeight;
1362
+ var contentW = content.scrollWidth || content.offsetWidth;
1363
+
1364
+ if (contentH < 10 || contentW < 10) return; // not yet rendered
1365
+
1366
+ var pad = 32;
1367
+ var zoomH = (viewportH - pad) / contentH;
1368
+ var zoomW = (viewportW - pad) / contentW;
1369
+ var zoom = Math.min(zoomH, zoomW);
1370
+ var clamped = Math.max(0.5, Math.min(3, zoom));
1371
+
1372
+ if (clamped > 1.02 || clamped < 0.95) {
1373
+ container.style.zoom = String(clamped);
1374
+ } else {
1375
+ container.style.zoom = '';
1376
+ }
1377
+ });
1378
+
1379
+ observer.observe(container);
1380
+ window.addEventListener('resize', function() {
1381
+ // Re-trigger observer measurement
1382
+ if (container.firstElementChild) {
1383
+ observer.unobserve(container);
1384
+ observer.observe(container);
1385
+ }
1386
+ });
1387
+ }
1388
+
813
1389
  // Only run declarative data binding for .photon.html templates
814
1390
  // (signaled by <meta name="photon-template"> injected by custom-ui-renderer)
815
1391
  function _maybeBindElements() {
816
1392
  if (document.querySelector('meta[name="photon-template"]')) {
817
1393
  _bindElements();
1394
+ // Set up viewport scaling after binding (for pure-view standalone pages)
1395
+ _setupViewportScaling();
818
1396
  }
819
1397
  }
820
1398
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auto-ui/bridge/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAgB5D,6DAA6D;AAC7D,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAC/D,2DAA2D;IAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO;;;;;;;;;cASK,WAAW;sBACH,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAy0B3B,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAS5C;IACC,OAAO,oBAAoB,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auto-ui/bridge/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/bridge/renderers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,wBAAgB,uBAAuB,IAAI,MAAM,CA8tChD"}
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../src/auto-ui/bridge/renderers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,wBAAgB,uBAAuB,IAAI,MAAM,CAkuChD"}