@yoamigo.com/core 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -503,6 +503,256 @@ function SafeHtml({ content, className, mode = "read-only" }) {
503
503
  ] });
504
504
  }
505
505
 
506
+ // #style-inject:#style-inject
507
+ function styleInject(css, { insertAt } = {}) {
508
+ if (!css || typeof document === "undefined") return;
509
+ const head = document.head || document.getElementsByTagName("head")[0];
510
+ const style = document.createElement("style");
511
+ style.type = "text/css";
512
+ if (insertAt === "top") {
513
+ if (head.firstChild) {
514
+ head.insertBefore(style, head.firstChild);
515
+ } else {
516
+ head.appendChild(style);
517
+ }
518
+ } else {
519
+ head.appendChild(style);
520
+ }
521
+ if (style.styleSheet) {
522
+ style.styleSheet.cssText = css;
523
+ } else {
524
+ style.appendChild(document.createTextNode(css));
525
+ }
526
+ }
527
+
528
+ // src/components/ya-text.css
529
+ styleInject(`.ya-text-editable {
530
+ cursor: text;
531
+ transition: outline 0.15s ease;
532
+ }
533
+ .ya-text-editable:hover {
534
+ outline: 2px dashed var(--color-primary, #D4A574);
535
+ outline-offset: 4px;
536
+ border-radius: 4px;
537
+ }
538
+ body.builder-selector-active .ya-text-editable:hover {
539
+ outline: none;
540
+ cursor: inherit;
541
+ }
542
+ .ya-text-editing {
543
+ outline: 2px solid var(--color-primary, #D4A574);
544
+ outline-offset: 4px;
545
+ border-radius: 4px;
546
+ position: relative;
547
+ }
548
+ .ya-bubble-menu {
549
+ display: flex;
550
+ gap: 4px;
551
+ padding: 6px 8px;
552
+ background: #1a1a1a;
553
+ border-radius: 8px;
554
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
555
+ animation: ya-bubble-fade-in 0.15s ease;
556
+ font-family:
557
+ system-ui,
558
+ -apple-system,
559
+ BlinkMacSystemFont,
560
+ "Segoe UI",
561
+ sans-serif;
562
+ }
563
+ @keyframes ya-bubble-fade-in {
564
+ from {
565
+ opacity: 0;
566
+ transform: translateY(4px);
567
+ }
568
+ to {
569
+ opacity: 1;
570
+ transform: translateY(0);
571
+ }
572
+ }
573
+ .ya-bubble-btn {
574
+ display: flex;
575
+ align-items: center;
576
+ justify-content: center;
577
+ width: 32px;
578
+ height: 32px;
579
+ padding: 0;
580
+ border: none;
581
+ background: transparent;
582
+ color: #e0e0e0;
583
+ border-radius: 6px;
584
+ cursor: pointer;
585
+ transition: all 0.15s ease;
586
+ font-size: 14px;
587
+ }
588
+ .ya-bubble-btn:hover {
589
+ background: rgba(255, 255, 255, 0.1);
590
+ color: #ffffff;
591
+ }
592
+ .ya-bubble-btn.is-active {
593
+ background: var(--color-primary, #D4A574);
594
+ color: #1a1a1a;
595
+ }
596
+ .ya-bubble-btn.is-active:hover {
597
+ background: var(--color-primary, #D4A574);
598
+ filter: brightness(1.1);
599
+ }
600
+ .ya-bubble-divider {
601
+ width: 1px;
602
+ height: 20px;
603
+ background: rgba(255, 255, 255, 0.2);
604
+ margin: 6px 4px;
605
+ }
606
+ .ya-bubble-select {
607
+ appearance: none;
608
+ background: transparent;
609
+ color: #e0e0e0;
610
+ border: 1px solid rgba(255, 255, 255, 0.2);
611
+ border-radius: 6px;
612
+ padding: 6px 24px 6px 10px;
613
+ font-size: 12px;
614
+ cursor: pointer;
615
+ transition: all 0.15s ease;
616
+ min-width: 70px;
617
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23e0e0e0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
618
+ background-repeat: no-repeat;
619
+ background-position: right 6px center;
620
+ }
621
+ .ya-bubble-select:hover {
622
+ border-color: rgba(255, 255, 255, 0.4);
623
+ background-color: rgba(255, 255, 255, 0.05);
624
+ }
625
+ .ya-bubble-select:focus {
626
+ outline: none;
627
+ border-color: var(--color-primary, #D4A574);
628
+ }
629
+ .ya-bubble-select option {
630
+ background: #1a1a1a;
631
+ color: #e0e0e0;
632
+ padding: 8px;
633
+ }
634
+ .ProseMirror {
635
+ outline: none;
636
+ }
637
+ .ProseMirror p {
638
+ margin: 0;
639
+ }
640
+ .ProseMirror a {
641
+ color: var(--color-primary, #D4A574);
642
+ text-decoration: underline;
643
+ }
644
+ .ProseMirror a:hover {
645
+ color: var(--color-secondary, #5C4033);
646
+ }
647
+ .ProseMirror ::selection {
648
+ background: rgba(212, 165, 116, 0.3);
649
+ }
650
+ .ProseMirror p.is-editor-empty:first-child::before {
651
+ content: attr(data-placeholder);
652
+ float: left;
653
+ color: #adb5bd;
654
+ pointer-events: none;
655
+ height: 0;
656
+ }
657
+ .ya-text-actions {
658
+ display: flex;
659
+ gap: 8px;
660
+ position: absolute;
661
+ bottom: -48px;
662
+ right: 0;
663
+ z-index: 10;
664
+ background: rgba(26, 26, 26, 0.8);
665
+ padding: 8px 10px;
666
+ border-radius: 8px;
667
+ font-family:
668
+ system-ui,
669
+ -apple-system,
670
+ BlinkMacSystemFont,
671
+ "Segoe UI",
672
+ sans-serif;
673
+ }
674
+ .ya-text-btn {
675
+ padding: 6px 14px;
676
+ font-size: 12px;
677
+ font-weight: 500;
678
+ border-radius: 6px;
679
+ cursor: pointer;
680
+ transition: all 0.15s ease;
681
+ border: none;
682
+ }
683
+ .ya-text-btn-cancel {
684
+ background: #333333;
685
+ color: #ffffff;
686
+ border: 1px solid #555555;
687
+ }
688
+ .ya-text-btn-cancel:hover {
689
+ background: #444444;
690
+ color: #ffffff;
691
+ border-color: #666666;
692
+ }
693
+ .ya-text-btn-save {
694
+ background: #D4A574;
695
+ color: #1a1a1a;
696
+ }
697
+ .ya-text-btn-save:hover {
698
+ background: #c4956a;
699
+ }
700
+ .ya-link-popover {
701
+ position: fixed;
702
+ z-index: 9999;
703
+ display: flex;
704
+ align-items: center;
705
+ gap: 6px;
706
+ padding: 8px 12px;
707
+ background: #1a1a1a;
708
+ color: #e0e0e0;
709
+ border-radius: 8px;
710
+ font-size: 13px;
711
+ font-weight: 500;
712
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
713
+ cursor: pointer;
714
+ white-space: nowrap;
715
+ transform: translateX(-50%);
716
+ pointer-events: auto;
717
+ animation: ya-link-popover-fade-in 0.1s ease;
718
+ }
719
+ .ya-link-popover:hover {
720
+ background: #2a2a2a;
721
+ }
722
+ @keyframes ya-link-popover-fade-in {
723
+ from {
724
+ opacity: 0;
725
+ transform: translateX(-50%) translateY(-4px);
726
+ }
727
+ to {
728
+ opacity: 1;
729
+ transform: translateX(-50%) translateY(0);
730
+ }
731
+ }
732
+ .ya-link-popover::before {
733
+ content: "";
734
+ position: absolute;
735
+ top: -6px;
736
+ left: 50%;
737
+ transform: translateX(-50%);
738
+ border-left: 6px solid transparent;
739
+ border-right: 6px solid transparent;
740
+ border-bottom: 6px solid #1a1a1a;
741
+ }
742
+ .ya-link-popover-icon {
743
+ width: 14px;
744
+ height: 14px;
745
+ opacity: 0.8;
746
+ flex-shrink: 0;
747
+ }
748
+ .ya-link-popover-prefix {
749
+ opacity: 0.7;
750
+ }
751
+ .ya-link-popover-name {
752
+ color: var(--color-primary, #D4A574);
753
+ }
754
+ `);
755
+
506
756
  // src/components/YaText.tsx
507
757
  import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
508
758
  var FontSize = Extension.create({
@@ -907,6 +1157,11 @@ function resolveAssetUrl(path) {
907
1157
  // src/components/YaTooltip.tsx
908
1158
  import { useEffect as useEffect4, useRef as useRef4, useState as useState4, useCallback as useCallback4 } from "react";
909
1159
  import { createPortal as createPortal3 } from "react-dom";
1160
+
1161
+ // src/components/ya-tooltip.css
1162
+ styleInject('.ya-tooltip {\n position: fixed;\n z-index: 9999;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: #1a1a1a;\n color: white;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n white-space: nowrap;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n animation: ya-tooltip-fade-in 0.15s ease;\n pointer-events: none;\n}\n@keyframes ya-tooltip-fade-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n.ya-tooltip svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.ya-tooltip-bottom {\n transform: translateX(-50%);\n}\n.ya-tooltip-bottom::before {\n content: "";\n position: absolute;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 6px solid transparent;\n border-bottom-color: #1a1a1a;\n}\n.ya-tooltip-top {\n transform: translateX(-50%);\n}\n.ya-tooltip-top::before {\n content: "";\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 6px solid transparent;\n border-top-color: #1a1a1a;\n}\n.ya-tooltip-right {\n transform: translateY(-50%);\n}\n.ya-tooltip-right::before {\n content: "";\n position: absolute;\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n border: 6px solid transparent;\n border-right-color: #1a1a1a;\n}\n.ya-tooltip-left {\n transform: translateY(-50%);\n}\n.ya-tooltip-left::before {\n content: "";\n position: absolute;\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n border: 6px solid transparent;\n border-left-color: #1a1a1a;\n}\n');
1163
+
1164
+ // src/components/YaTooltip.tsx
910
1165
  import { jsx as jsx5 } from "react/jsx-runtime";
911
1166
  function YaTooltip({
912
1167
  anchorRef,
@@ -1032,6 +1287,9 @@ function YaTooltip({
1032
1287
  );
1033
1288
  }
1034
1289
 
1290
+ // src/components/ya-image.css
1291
+ styleInject('.ya-image-container {\n position: relative;\n display: inline-block;\n min-width: 45px;\n min-height: 45px;\n cursor: pointer;\n transition: outline 0.15s ease;\n}\n.ya-image-container img {\n display: block;\n}\n.ya-image-editable {\n cursor: pointer;\n}\n.ya-image-editable:hover {\n outline: 2px dashed var(--color-primary, #D4A574);\n outline-offset: 4px;\n}\n.ya-image-selected {\n outline: 3px solid var(--color-primary, #D4A574);\n outline-offset: 4px;\n}\n.ya-image-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.2s ease;\n pointer-events: none;\n border-radius: inherit;\n}\n.ya-image-editable:hover .ya-image-overlay {\n opacity: 1;\n}\n.ya-image-selected .ya-image-overlay {\n opacity: 0;\n}\n.ya-image-edit-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n background: white;\n border-radius: 50%;\n color: #1a1a1a;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);\n}\n.ya-image-edit-icon svg {\n width: 24px;\n height: 24px;\n}\n.ya-image-edit-label {\n color: white;\n font-size: 14px;\n font-weight: 500;\n text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n@keyframes ya-image-success {\n 0% {\n outline-color: var(--color-primary, #D4A574);\n }\n 50% {\n outline-color: #22c55e;\n outline-width: 4px;\n }\n 100% {\n outline-color: var(--color-primary, #D4A574);\n outline-width: 2px;\n }\n}\n.ya-image-success {\n animation: ya-image-success 0.4s ease;\n}\n.ya-image-loading::after {\n content: "";\n position: absolute;\n inset: 0;\n background:\n linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.3) 50%,\n rgba(255, 255, 255, 0) 100%);\n background-size: 200% 100%;\n animation: ya-image-shimmer 1.5s infinite;\n}\n@keyframes ya-image-shimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n.ya-image-container:focus {\n outline: 3px solid var(--color-primary, #D4A574);\n outline-offset: 4px;\n}\n.ya-image-container:focus:not(:focus-visible) {\n outline: none;\n}\n.ya-image-container:focus-visible {\n outline: 3px solid var(--color-primary, #D4A574);\n outline-offset: 4px;\n}\n.ya-image-small .ya-image-overlay {\n display: none;\n}\n');
1292
+
1035
1293
  // src/components/YaImage.tsx
1036
1294
  import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
1037
1295
  function parseImageValue(value) {
@@ -1272,6 +1530,11 @@ import StarterKit2 from "@tiptap/starter-kit";
1272
1530
  import { TextStyle as TextStyle2 } from "@tiptap/extension-text-style";
1273
1531
  import { Extension as Extension2 } from "@tiptap/core";
1274
1532
  import { Link as WouterLink, useLocation } from "wouter";
1533
+
1534
+ // src/components/ya-link.css
1535
+ styleInject('.ya-link-wrapper {\n position: relative;\n display: inline;\n}\n.ya-link-editable {\n cursor: pointer;\n transition: outline 0.15s ease;\n}\n.ya-link-editable:hover {\n outline: 2px dashed var(--color-primary, #D4A574);\n outline-offset: 4px;\n border-radius: 4px;\n}\nbody.builder-selector-active .ya-link-editable:hover {\n outline: none;\n cursor: inherit;\n}\n.ya-link-editing {\n outline: 2px solid var(--color-primary, #D4A574);\n outline-offset: 4px;\n border-radius: 4px;\n position: relative;\n}\n.ya-link-actions {\n display: flex;\n gap: 8px;\n position: absolute;\n bottom: -60px;\n right: 0;\n z-index: 10;\n background: rgba(26, 26, 26, 0.95);\n padding: 8px 10px;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n}\n.ya-link-btn {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n border: none;\n}\n.ya-link-btn-cancel {\n background: #333333;\n color: #ffffff;\n border: 1px solid #555555;\n}\n.ya-link-btn-cancel:hover {\n background: #444444;\n color: #ffffff;\n border-color: #666666;\n}\n.ya-link-btn-save {\n background: #D4A574;\n color: #1a1a1a;\n}\n.ya-link-btn-save:hover {\n background: #c4956a;\n}\n.ya-href-popover {\n position: absolute;\n top: 100%;\n left: 50%;\n margin-top: 8px;\n z-index: 10;\n min-width: 280px;\n max-width: 320px;\n background: #1a1a1a;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n transform: translateX(-50%);\n animation: ya-href-popover-fade-in 0.15s ease;\n overflow: hidden;\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n}\n@keyframes ya-href-popover-fade-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n.ya-href-popover::before {\n content: "";\n position: absolute;\n top: -6px;\n left: 50%;\n transform: translateX(-50%);\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid #1a1a1a;\n}\n.ya-href-popover-header {\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 600;\n color: #ffffff;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n.ya-href-popover-section {\n padding: 12px 16px;\n}\n.ya-href-popover-label {\n display: block;\n font-size: 11px;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.6);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n}\n.ya-href-collapsible-header {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n padding: 0;\n background: transparent;\n border: none;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n.ya-href-collapsible-header:hover {\n color: rgba(255, 255, 255, 0.8);\n}\n.ya-href-chevron {\n font-size: 8px;\n color: rgba(255, 255, 255, 0.4);\n}\n.ya-href-popover-pages {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 200px;\n overflow-y: auto;\n}\n.ya-href-page-btn {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n width: 100%;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid transparent;\n border-radius: 8px;\n color: #e0e0e0;\n font-size: 13px;\n font-weight: 500;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.ya-href-page-btn:hover {\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.2);\n}\n.ya-href-page-btn.is-selected {\n background: #D4A574;\n color: #1a1a1a;\n}\n.ya-href-page-btn.is-selected .ya-href-page-path {\n color: rgba(26, 26, 26, 0.6);\n}\n.ya-href-page-path {\n font-size: 11px;\n color: rgba(255, 255, 255, 0.4);\n font-family: monospace;\n word-break: break-all;\n}\n.ya-href-external-toggle {\n display: block;\n width: 100%;\n padding: 10px 16px;\n background: transparent;\n border: none;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n color: #D4A574;\n font-size: 12px;\n font-weight: 500;\n text-align: center;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n.ya-href-external-toggle:hover {\n background: rgba(255, 255, 255, 0.05);\n}\n.ya-href-url-input {\n width: 100%;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 8px;\n color: #ffffff;\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s ease;\n}\n.ya-href-url-input::placeholder {\n color: rgba(255, 255, 255, 0.4);\n}\n.ya-href-url-input:focus {\n border-color: var(--color-primary, #D4A574);\n}\n.ya-href-popover-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n}\n.ya-link-edit-popover {\n position: absolute;\n top: 100%;\n left: 50%;\n margin-top: 8px;\n z-index: 10;\n background: #2a2a2a;\n border-radius: 6px;\n padding: 4px;\n display: flex;\n gap: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n transform: translateX(-50%);\n animation: ya-edit-popover-fade-in 0.1s ease;\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n white-space: nowrap;\n}\n@keyframes ya-edit-popover-fade-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n.ya-link-edit-popover::before {\n content: "";\n position: absolute;\n top: -5px;\n left: 50%;\n transform: translateX(-50%);\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #2a2a2a;\n}\n.ya-link-edit-popover button {\n background: #3a3a3a;\n border: none;\n color: #fff;\n padding: 6px 12px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: background 0.15s ease;\n}\n.ya-link-edit-popover button:hover {\n background: #4a4a4a;\n}\n');
1536
+
1537
+ // src/components/YaLink.tsx
1275
1538
  import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
1276
1539
  function isInternalPath(path) {
1277
1540
  if (!path) return false;
package/dist/plugin.js CHANGED
@@ -19,16 +19,16 @@ function yoamigoPlugin(options = {}) {
19
19
  { find: "react-dom/client", replacement: "preact/compat/client" },
20
20
  { find: "react-dom", replacement: "preact/compat" },
21
21
  { find: "react/jsx-runtime", replacement: "preact/jsx-runtime" },
22
- // === @yoamigo/core -> Production barrel ===
22
+ // === @yoamigo.com/core -> Production barrel ===
23
23
  // Redirect the entire components import to use static versions.
24
24
  // This removes Tiptap and editing UI from the production bundle.
25
25
  {
26
- find: /^@yoamigo\/core$/,
27
- replacement: "@yoamigo/core/prod"
26
+ find: /^@yoamigo\.com\/core$/,
27
+ replacement: "@yoamigo.com/core/prod"
28
28
  },
29
29
  {
30
- find: /^@yoamigo\/core\/lib$/,
31
- replacement: "@yoamigo/core/lib/prod"
30
+ find: /^@yoamigo\.com\/core\/lib$/,
31
+ replacement: "@yoamigo.com/core/lib/prod"
32
32
  }
33
33
  ] : [],
34
34
  // === Template-specific path aliases ===
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoamigo.com/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Core components, router, and utilities for YoAmigo templates",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -30,8 +30,7 @@
30
30
  "./lib/prod": {
31
31
  "types": "./dist/lib-prod.d.ts",
32
32
  "import": "./dist/lib-prod.js"
33
- },
34
- "./styles.css": "./dist/index.css"
33
+ }
35
34
  },
36
35
  "files": [
37
36
  "dist",
package/dist/index.css DELETED
@@ -1,715 +0,0 @@
1
- /* src/components/ya-text.css */
2
- .ya-text-editable {
3
- cursor: text;
4
- transition: outline 0.15s ease;
5
- }
6
- .ya-text-editable:hover {
7
- outline: 2px dashed var(--color-primary, #D4A574);
8
- outline-offset: 4px;
9
- border-radius: 4px;
10
- }
11
- body.builder-selector-active .ya-text-editable:hover {
12
- outline: none;
13
- cursor: inherit;
14
- }
15
- .ya-text-editing {
16
- outline: 2px solid var(--color-primary, #D4A574);
17
- outline-offset: 4px;
18
- border-radius: 4px;
19
- position: relative;
20
- }
21
- .ya-bubble-menu {
22
- display: flex;
23
- gap: 4px;
24
- padding: 6px 8px;
25
- background: #1a1a1a;
26
- border-radius: 8px;
27
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
28
- animation: ya-bubble-fade-in 0.15s ease;
29
- font-family:
30
- system-ui,
31
- -apple-system,
32
- BlinkMacSystemFont,
33
- "Segoe UI",
34
- sans-serif;
35
- }
36
- @keyframes ya-bubble-fade-in {
37
- from {
38
- opacity: 0;
39
- transform: translateY(4px);
40
- }
41
- to {
42
- opacity: 1;
43
- transform: translateY(0);
44
- }
45
- }
46
- .ya-bubble-btn {
47
- display: flex;
48
- align-items: center;
49
- justify-content: center;
50
- width: 32px;
51
- height: 32px;
52
- padding: 0;
53
- border: none;
54
- background: transparent;
55
- color: #e0e0e0;
56
- border-radius: 6px;
57
- cursor: pointer;
58
- transition: all 0.15s ease;
59
- font-size: 14px;
60
- }
61
- .ya-bubble-btn:hover {
62
- background: rgba(255, 255, 255, 0.1);
63
- color: #ffffff;
64
- }
65
- .ya-bubble-btn.is-active {
66
- background: var(--color-primary, #D4A574);
67
- color: #1a1a1a;
68
- }
69
- .ya-bubble-btn.is-active:hover {
70
- background: var(--color-primary, #D4A574);
71
- filter: brightness(1.1);
72
- }
73
- .ya-bubble-divider {
74
- width: 1px;
75
- height: 20px;
76
- background: rgba(255, 255, 255, 0.2);
77
- margin: 6px 4px;
78
- }
79
- .ya-bubble-select {
80
- appearance: none;
81
- background: transparent;
82
- color: #e0e0e0;
83
- border: 1px solid rgba(255, 255, 255, 0.2);
84
- border-radius: 6px;
85
- padding: 6px 24px 6px 10px;
86
- font-size: 12px;
87
- cursor: pointer;
88
- transition: all 0.15s ease;
89
- min-width: 70px;
90
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23e0e0e0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
91
- background-repeat: no-repeat;
92
- background-position: right 6px center;
93
- }
94
- .ya-bubble-select:hover {
95
- border-color: rgba(255, 255, 255, 0.4);
96
- background-color: rgba(255, 255, 255, 0.05);
97
- }
98
- .ya-bubble-select:focus {
99
- outline: none;
100
- border-color: var(--color-primary, #D4A574);
101
- }
102
- .ya-bubble-select option {
103
- background: #1a1a1a;
104
- color: #e0e0e0;
105
- padding: 8px;
106
- }
107
- .ProseMirror {
108
- outline: none;
109
- }
110
- .ProseMirror p {
111
- margin: 0;
112
- }
113
- .ProseMirror a {
114
- color: var(--color-primary, #D4A574);
115
- text-decoration: underline;
116
- }
117
- .ProseMirror a:hover {
118
- color: var(--color-secondary, #5C4033);
119
- }
120
- .ProseMirror ::selection {
121
- background: rgba(212, 165, 116, 0.3);
122
- }
123
- .ProseMirror p.is-editor-empty:first-child::before {
124
- content: attr(data-placeholder);
125
- float: left;
126
- color: #adb5bd;
127
- pointer-events: none;
128
- height: 0;
129
- }
130
- .ya-text-actions {
131
- display: flex;
132
- gap: 8px;
133
- position: absolute;
134
- bottom: -48px;
135
- right: 0;
136
- z-index: 10;
137
- background: rgba(26, 26, 26, 0.8);
138
- padding: 8px 10px;
139
- border-radius: 8px;
140
- font-family:
141
- system-ui,
142
- -apple-system,
143
- BlinkMacSystemFont,
144
- "Segoe UI",
145
- sans-serif;
146
- }
147
- .ya-text-btn {
148
- padding: 6px 14px;
149
- font-size: 12px;
150
- font-weight: 500;
151
- border-radius: 6px;
152
- cursor: pointer;
153
- transition: all 0.15s ease;
154
- border: none;
155
- }
156
- .ya-text-btn-cancel {
157
- background: #333333;
158
- color: #ffffff;
159
- border: 1px solid #555555;
160
- }
161
- .ya-text-btn-cancel:hover {
162
- background: #444444;
163
- color: #ffffff;
164
- border-color: #666666;
165
- }
166
- .ya-text-btn-save {
167
- background: #D4A574;
168
- color: #1a1a1a;
169
- }
170
- .ya-text-btn-save:hover {
171
- background: #c4956a;
172
- }
173
- .ya-link-popover {
174
- position: fixed;
175
- z-index: 9999;
176
- display: flex;
177
- align-items: center;
178
- gap: 6px;
179
- padding: 8px 12px;
180
- background: #1a1a1a;
181
- color: #e0e0e0;
182
- border-radius: 8px;
183
- font-size: 13px;
184
- font-weight: 500;
185
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
186
- cursor: pointer;
187
- white-space: nowrap;
188
- transform: translateX(-50%);
189
- pointer-events: auto;
190
- animation: ya-link-popover-fade-in 0.1s ease;
191
- }
192
- .ya-link-popover:hover {
193
- background: #2a2a2a;
194
- }
195
- @keyframes ya-link-popover-fade-in {
196
- from {
197
- opacity: 0;
198
- transform: translateX(-50%) translateY(-4px);
199
- }
200
- to {
201
- opacity: 1;
202
- transform: translateX(-50%) translateY(0);
203
- }
204
- }
205
- .ya-link-popover::before {
206
- content: "";
207
- position: absolute;
208
- top: -6px;
209
- left: 50%;
210
- transform: translateX(-50%);
211
- border-left: 6px solid transparent;
212
- border-right: 6px solid transparent;
213
- border-bottom: 6px solid #1a1a1a;
214
- }
215
- .ya-link-popover-icon {
216
- width: 14px;
217
- height: 14px;
218
- opacity: 0.8;
219
- flex-shrink: 0;
220
- }
221
- .ya-link-popover-prefix {
222
- opacity: 0.7;
223
- }
224
- .ya-link-popover-name {
225
- color: var(--color-primary, #D4A574);
226
- }
227
-
228
- /* src/components/ya-tooltip.css */
229
- .ya-tooltip {
230
- position: fixed;
231
- z-index: 9999;
232
- display: flex;
233
- align-items: center;
234
- gap: 6px;
235
- padding: 8px 12px;
236
- background: #1a1a1a;
237
- color: white;
238
- border-radius: 6px;
239
- font-size: 13px;
240
- font-weight: 500;
241
- font-family:
242
- system-ui,
243
- -apple-system,
244
- BlinkMacSystemFont,
245
- "Segoe UI",
246
- sans-serif;
247
- white-space: nowrap;
248
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
249
- animation: ya-tooltip-fade-in 0.15s ease;
250
- pointer-events: none;
251
- }
252
- @keyframes ya-tooltip-fade-in {
253
- from {
254
- opacity: 0;
255
- transform: scale(0.95);
256
- }
257
- to {
258
- opacity: 1;
259
- transform: scale(1);
260
- }
261
- }
262
- .ya-tooltip svg {
263
- width: 16px;
264
- height: 16px;
265
- flex-shrink: 0;
266
- }
267
- .ya-tooltip-bottom {
268
- transform: translateX(-50%);
269
- }
270
- .ya-tooltip-bottom::before {
271
- content: "";
272
- position: absolute;
273
- bottom: 100%;
274
- left: 50%;
275
- transform: translateX(-50%);
276
- border: 6px solid transparent;
277
- border-bottom-color: #1a1a1a;
278
- }
279
- .ya-tooltip-top {
280
- transform: translateX(-50%);
281
- }
282
- .ya-tooltip-top::before {
283
- content: "";
284
- position: absolute;
285
- top: 100%;
286
- left: 50%;
287
- transform: translateX(-50%);
288
- border: 6px solid transparent;
289
- border-top-color: #1a1a1a;
290
- }
291
- .ya-tooltip-right {
292
- transform: translateY(-50%);
293
- }
294
- .ya-tooltip-right::before {
295
- content: "";
296
- position: absolute;
297
- right: 100%;
298
- top: 50%;
299
- transform: translateY(-50%);
300
- border: 6px solid transparent;
301
- border-right-color: #1a1a1a;
302
- }
303
- .ya-tooltip-left {
304
- transform: translateY(-50%);
305
- }
306
- .ya-tooltip-left::before {
307
- content: "";
308
- position: absolute;
309
- left: 100%;
310
- top: 50%;
311
- transform: translateY(-50%);
312
- border: 6px solid transparent;
313
- border-left-color: #1a1a1a;
314
- }
315
-
316
- /* src/components/ya-image.css */
317
- .ya-image-container {
318
- position: relative;
319
- display: inline-block;
320
- min-width: 45px;
321
- min-height: 45px;
322
- cursor: pointer;
323
- transition: outline 0.15s ease;
324
- }
325
- .ya-image-container img {
326
- display: block;
327
- }
328
- .ya-image-editable {
329
- cursor: pointer;
330
- }
331
- .ya-image-editable:hover {
332
- outline: 2px dashed var(--color-primary, #D4A574);
333
- outline-offset: 4px;
334
- }
335
- .ya-image-selected {
336
- outline: 3px solid var(--color-primary, #D4A574);
337
- outline-offset: 4px;
338
- }
339
- .ya-image-overlay {
340
- position: absolute;
341
- inset: 0;
342
- display: flex;
343
- flex-direction: column;
344
- align-items: center;
345
- justify-content: center;
346
- gap: 8px;
347
- background: rgba(0, 0, 0, 0.5);
348
- opacity: 0;
349
- transition: opacity 0.2s ease;
350
- pointer-events: none;
351
- border-radius: inherit;
352
- }
353
- .ya-image-editable:hover .ya-image-overlay {
354
- opacity: 1;
355
- }
356
- .ya-image-selected .ya-image-overlay {
357
- opacity: 0;
358
- }
359
- .ya-image-edit-icon {
360
- display: flex;
361
- align-items: center;
362
- justify-content: center;
363
- width: 48px;
364
- height: 48px;
365
- background: white;
366
- border-radius: 50%;
367
- color: #1a1a1a;
368
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
369
- }
370
- .ya-image-edit-icon svg {
371
- width: 24px;
372
- height: 24px;
373
- }
374
- .ya-image-edit-label {
375
- color: white;
376
- font-size: 14px;
377
- font-weight: 500;
378
- text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
379
- }
380
- @keyframes ya-image-success {
381
- 0% {
382
- outline-color: var(--color-primary, #D4A574);
383
- }
384
- 50% {
385
- outline-color: #22c55e;
386
- outline-width: 4px;
387
- }
388
- 100% {
389
- outline-color: var(--color-primary, #D4A574);
390
- outline-width: 2px;
391
- }
392
- }
393
- .ya-image-success {
394
- animation: ya-image-success 0.4s ease;
395
- }
396
- .ya-image-loading::after {
397
- content: "";
398
- position: absolute;
399
- inset: 0;
400
- background:
401
- linear-gradient(
402
- 90deg,
403
- rgba(255, 255, 255, 0) 0%,
404
- rgba(255, 255, 255, 0.3) 50%,
405
- rgba(255, 255, 255, 0) 100%);
406
- background-size: 200% 100%;
407
- animation: ya-image-shimmer 1.5s infinite;
408
- }
409
- @keyframes ya-image-shimmer {
410
- 0% {
411
- background-position: -200% 0;
412
- }
413
- 100% {
414
- background-position: 200% 0;
415
- }
416
- }
417
- .ya-image-container:focus {
418
- outline: 3px solid var(--color-primary, #D4A574);
419
- outline-offset: 4px;
420
- }
421
- .ya-image-container:focus:not(:focus-visible) {
422
- outline: none;
423
- }
424
- .ya-image-container:focus-visible {
425
- outline: 3px solid var(--color-primary, #D4A574);
426
- outline-offset: 4px;
427
- }
428
- .ya-image-small .ya-image-overlay {
429
- display: none;
430
- }
431
-
432
- /* src/components/ya-link.css */
433
- .ya-link-wrapper {
434
- position: relative;
435
- display: inline;
436
- }
437
- .ya-link-editable {
438
- cursor: pointer;
439
- transition: outline 0.15s ease;
440
- }
441
- .ya-link-editable:hover {
442
- outline: 2px dashed var(--color-primary, #D4A574);
443
- outline-offset: 4px;
444
- border-radius: 4px;
445
- }
446
- body.builder-selector-active .ya-link-editable:hover {
447
- outline: none;
448
- cursor: inherit;
449
- }
450
- .ya-link-editing {
451
- outline: 2px solid var(--color-primary, #D4A574);
452
- outline-offset: 4px;
453
- border-radius: 4px;
454
- position: relative;
455
- }
456
- .ya-link-actions {
457
- display: flex;
458
- gap: 8px;
459
- position: absolute;
460
- bottom: -60px;
461
- right: 0;
462
- z-index: 10;
463
- background: rgba(26, 26, 26, 0.95);
464
- padding: 8px 10px;
465
- border-radius: 8px;
466
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
467
- font-family:
468
- system-ui,
469
- -apple-system,
470
- BlinkMacSystemFont,
471
- "Segoe UI",
472
- sans-serif;
473
- }
474
- .ya-link-btn {
475
- padding: 6px 14px;
476
- font-size: 12px;
477
- font-weight: 500;
478
- border-radius: 6px;
479
- cursor: pointer;
480
- transition: all 0.15s ease;
481
- border: none;
482
- }
483
- .ya-link-btn-cancel {
484
- background: #333333;
485
- color: #ffffff;
486
- border: 1px solid #555555;
487
- }
488
- .ya-link-btn-cancel:hover {
489
- background: #444444;
490
- color: #ffffff;
491
- border-color: #666666;
492
- }
493
- .ya-link-btn-save {
494
- background: #D4A574;
495
- color: #1a1a1a;
496
- }
497
- .ya-link-btn-save:hover {
498
- background: #c4956a;
499
- }
500
- .ya-href-popover {
501
- position: absolute;
502
- top: 100%;
503
- left: 50%;
504
- margin-top: 8px;
505
- z-index: 10;
506
- min-width: 280px;
507
- max-width: 320px;
508
- background: #1a1a1a;
509
- border-radius: 12px;
510
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
511
- transform: translateX(-50%);
512
- animation: ya-href-popover-fade-in 0.15s ease;
513
- overflow: hidden;
514
- font-family:
515
- system-ui,
516
- -apple-system,
517
- BlinkMacSystemFont,
518
- "Segoe UI",
519
- sans-serif;
520
- }
521
- @keyframes ya-href-popover-fade-in {
522
- from {
523
- opacity: 0;
524
- transform: translateX(-50%) translateY(-8px);
525
- }
526
- to {
527
- opacity: 1;
528
- transform: translateX(-50%) translateY(0);
529
- }
530
- }
531
- .ya-href-popover::before {
532
- content: "";
533
- position: absolute;
534
- top: -6px;
535
- left: 50%;
536
- transform: translateX(-50%);
537
- border-left: 8px solid transparent;
538
- border-right: 8px solid transparent;
539
- border-bottom: 8px solid #1a1a1a;
540
- }
541
- .ya-href-popover-header {
542
- padding: 12px 16px;
543
- font-size: 13px;
544
- font-weight: 600;
545
- color: #ffffff;
546
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
547
- }
548
- .ya-href-popover-section {
549
- padding: 12px 16px;
550
- }
551
- .ya-href-popover-label {
552
- display: block;
553
- font-size: 11px;
554
- font-weight: 500;
555
- color: rgba(255, 255, 255, 0.6);
556
- text-transform: uppercase;
557
- letter-spacing: 0.5px;
558
- margin-bottom: 8px;
559
- }
560
- .ya-href-collapsible-header {
561
- display: flex;
562
- align-items: center;
563
- gap: 6px;
564
- width: 100%;
565
- padding: 0;
566
- background: transparent;
567
- border: none;
568
- cursor: pointer;
569
- transition: color 0.15s ease;
570
- }
571
- .ya-href-collapsible-header:hover {
572
- color: rgba(255, 255, 255, 0.8);
573
- }
574
- .ya-href-chevron {
575
- font-size: 8px;
576
- color: rgba(255, 255, 255, 0.4);
577
- }
578
- .ya-href-popover-pages {
579
- display: flex;
580
- flex-direction: column;
581
- gap: 4px;
582
- max-height: 200px;
583
- overflow-y: auto;
584
- }
585
- .ya-href-page-btn {
586
- display: flex;
587
- flex-direction: column;
588
- align-items: flex-start;
589
- gap: 4px;
590
- width: 100%;
591
- padding: 10px 12px;
592
- background: rgba(255, 255, 255, 0.05);
593
- border: 1px solid transparent;
594
- border-radius: 8px;
595
- color: #e0e0e0;
596
- font-size: 13px;
597
- font-weight: 500;
598
- text-align: left;
599
- cursor: pointer;
600
- transition: all 0.15s ease;
601
- }
602
- .ya-href-page-btn:hover {
603
- background: rgba(255, 255, 255, 0.1);
604
- border-color: rgba(255, 255, 255, 0.2);
605
- }
606
- .ya-href-page-btn.is-selected {
607
- background: #D4A574;
608
- color: #1a1a1a;
609
- }
610
- .ya-href-page-btn.is-selected .ya-href-page-path {
611
- color: rgba(26, 26, 26, 0.6);
612
- }
613
- .ya-href-page-path {
614
- font-size: 11px;
615
- color: rgba(255, 255, 255, 0.4);
616
- font-family: monospace;
617
- word-break: break-all;
618
- }
619
- .ya-href-external-toggle {
620
- display: block;
621
- width: 100%;
622
- padding: 10px 16px;
623
- background: transparent;
624
- border: none;
625
- border-top: 1px solid rgba(255, 255, 255, 0.1);
626
- color: #D4A574;
627
- font-size: 12px;
628
- font-weight: 500;
629
- text-align: center;
630
- cursor: pointer;
631
- transition: background 0.15s ease;
632
- }
633
- .ya-href-external-toggle:hover {
634
- background: rgba(255, 255, 255, 0.05);
635
- }
636
- .ya-href-url-input {
637
- width: 100%;
638
- padding: 10px 12px;
639
- background: rgba(255, 255, 255, 0.05);
640
- border: 1px solid rgba(255, 255, 255, 0.2);
641
- border-radius: 8px;
642
- color: #ffffff;
643
- font-size: 13px;
644
- outline: none;
645
- transition: border-color 0.15s ease;
646
- }
647
- .ya-href-url-input::placeholder {
648
- color: rgba(255, 255, 255, 0.4);
649
- }
650
- .ya-href-url-input:focus {
651
- border-color: var(--color-primary, #D4A574);
652
- }
653
- .ya-href-popover-actions {
654
- display: flex;
655
- justify-content: flex-end;
656
- gap: 8px;
657
- padding: 12px 16px;
658
- border-top: 1px solid rgba(255, 255, 255, 0.1);
659
- }
660
- .ya-link-edit-popover {
661
- position: absolute;
662
- top: 100%;
663
- left: 50%;
664
- margin-top: 8px;
665
- z-index: 10;
666
- background: #2a2a2a;
667
- border-radius: 6px;
668
- padding: 4px;
669
- display: flex;
670
- gap: 4px;
671
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
672
- transform: translateX(-50%);
673
- animation: ya-edit-popover-fade-in 0.1s ease;
674
- font-family:
675
- system-ui,
676
- -apple-system,
677
- BlinkMacSystemFont,
678
- "Segoe UI",
679
- sans-serif;
680
- white-space: nowrap;
681
- }
682
- @keyframes ya-edit-popover-fade-in {
683
- from {
684
- opacity: 0;
685
- transform: translateX(-50%) translateY(-4px);
686
- }
687
- to {
688
- opacity: 1;
689
- transform: translateX(-50%) translateY(0);
690
- }
691
- }
692
- .ya-link-edit-popover::before {
693
- content: "";
694
- position: absolute;
695
- top: -5px;
696
- left: 50%;
697
- transform: translateX(-50%);
698
- border-left: 6px solid transparent;
699
- border-right: 6px solid transparent;
700
- border-bottom: 6px solid #2a2a2a;
701
- }
702
- .ya-link-edit-popover button {
703
- background: #3a3a3a;
704
- border: none;
705
- color: #fff;
706
- padding: 6px 12px;
707
- border-radius: 4px;
708
- cursor: pointer;
709
- font-size: 13px;
710
- font-weight: 500;
711
- transition: background 0.15s ease;
712
- }
713
- .ya-link-edit-popover button:hover {
714
- background: #4a4a4a;
715
- }