sinho 0.3.2 → 0.3.4

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/src/component.ts CHANGED
@@ -348,7 +348,7 @@ declare abstract class ComponentInner<M extends Metadata> {
348
348
 
349
349
  export type Component<M extends Metadata = {}> = {
350
350
  -readonly [K in keyof Props<M>]: Props<M>[K] extends Signal<infer T>
351
- ? T
351
+ ? T | undefined
352
352
  : never;
353
353
  } & ComponentInner<M> &
354
354
  HTMLElement;
@@ -356,7 +356,7 @@ export type Component<M extends Metadata = {}> = {
356
356
  export interface ComponentConstructor<M extends Metadata = {}> {
357
357
  /** @ignore */
358
358
  readonly [componentSym]: {
359
- readonly _tagName: string;
359
+ readonly _tagName: string | null;
360
360
  };
361
361
  readonly observedAttributes: readonly string[];
362
362
 
@@ -403,7 +403,7 @@ export const useMountEffect = (
403
403
  *
404
404
  * @example
405
405
  * ```tsx
406
- * class MyComponent extends Component("my-component", {
406
+ * class MyComponent extends Component({
407
407
  * myProp: prop<string>("Hello, world!"),
408
408
  * onMyEvent: event(),
409
409
  * }) {
@@ -417,19 +417,34 @@ export const useMountEffect = (
417
417
  * },
418
418
  * }
419
419
  *
420
- * customElements.define("my-component", MyComponent);
420
+ * defineComponents(MyComponent);
421
421
  * ```
422
422
  */
423
- export const Component: ((tagName: string) => ComponentConstructor<{}>) &
423
+ export const Component: ((tagName?: string) => ComponentConstructor<{}>) &
424
424
  (<const M extends Metadata>(
425
425
  tagName: string,
426
426
  metadata: M,
427
427
  opts?: ComponentOptions,
428
+ ) => ComponentConstructor<M>) &
429
+ (<const M extends Metadata>(
430
+ metadata: M,
431
+ opts?: ComponentOptions,
428
432
  ) => ComponentConstructor<M>) = ((
429
- tagName: string,
430
- metadata: Metadata = {},
431
- opts: ComponentOptions = {},
433
+ tagNameOrMetadata?: string | Metadata,
434
+ metadataOrOpts?: Metadata | ComponentOptions,
435
+ optsParam?: ComponentOptions,
432
436
  ): ComponentConstructor => {
437
+ const tagName =
438
+ typeof tagNameOrMetadata === "string" ? tagNameOrMetadata : null;
439
+ const metadata =
440
+ typeof tagNameOrMetadata === "string"
441
+ ? (metadataOrOpts as Metadata)
442
+ : tagNameOrMetadata;
443
+ const opts =
444
+ (typeof tagNameOrMetadata === "string"
445
+ ? optsParam
446
+ : (metadataOrOpts as ComponentOptions)) ?? {};
447
+
433
448
  // Extract attribute information
434
449
 
435
450
  const observedAttributes: string[] = [];
@@ -477,7 +492,7 @@ export const Component: ((tagName: string) => ComponentConstructor<{}>) &
477
492
 
478
493
  const getRenderParent = (component: _Component) =>
479
494
  opts.shadow
480
- ? component.shadowRoot ?? component.attachShadow(opts.shadow)
495
+ ? (component.shadowRoot ?? component.attachShadow(opts.shadow))
481
496
  : component;
482
497
  abstract class _Component extends HTMLElement {
483
498
  static readonly [componentSym]: ComponentConstructor[typeof componentSym] =
@@ -513,7 +528,14 @@ export const Component: ((tagName: string) => ComponentConstructor<{}>) &
513
528
 
514
529
  Object.defineProperty(this, name, {
515
530
  get: getter.peek,
516
- set: (value) => setter(() => value, { force: true }),
531
+ set: (value) =>
532
+ setter(
533
+ () =>
534
+ !context && value === undefined
535
+ ? meta._defaultOrContext
536
+ : value,
537
+ { force: true },
538
+ ),
517
539
  });
518
540
  } else if (meta._tag == "e" && name.startsWith("on")) {
519
541
  const eventName = jsxPropNameToEventName(name as `on${string}`);
@@ -573,9 +595,7 @@ export const Component: ((tagName: string) => ComponentConstructor<{}>) &
573
595
  this[prop.name as keyof this] =
574
596
  value != null
575
597
  ? prop.meta.attribute.transform.call(this, value)
576
- : isContext(prop.meta._defaultOrContext)
577
- ? undefined
578
- : prop.meta._defaultOrContext;
598
+ : undefined;
579
599
  }
580
600
  }
581
601
 
@@ -624,6 +644,11 @@ export const defineComponents: ((
624
644
  : ["", args as ComponentConstructor[]];
625
645
 
626
646
  for (const component of components) {
627
- customElements.define(prefix + component[componentSym]._tagName, component);
647
+ customElements.define(
648
+ prefix +
649
+ (component[componentSym]._tagName ??
650
+ camelCaseToKebabCase(component.name)),
651
+ component,
652
+ );
628
653
  }
629
654
  };
package/src/dom.ts CHANGED
@@ -30,7 +30,6 @@ import {
30
30
  type MaybeSignal,
31
31
  type RefSignalSetter,
32
32
  } from "./mod.js";
33
- import { isComponent } from "./component.js";
34
33
 
35
34
  const IS_NON_DIMENSIONAL =
36
35
  /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;
@@ -555,10 +554,10 @@ interface HtmlProps<in E> extends DomProps<E> {
555
554
  }
556
555
 
557
556
  interface SvgProps<in E> extends HtmlProps<E> {
558
- accentHeight?: MaybeSignal<number | string | undefined>;
557
+ "accent-height"?: MaybeSignal<number | string | undefined>;
559
558
  accumulate?: MaybeSignal<"none" | "sum" | undefined>;
560
559
  additive?: MaybeSignal<"replace" | "sum" | undefined>;
561
- alignmentBaseline?: MaybeSignal<
560
+ "alignment-baseline"?: MaybeSignal<
562
561
  | "auto"
563
562
  | "baseline"
564
563
  | "before-edge"
@@ -574,36 +573,35 @@ interface SvgProps<in E> extends HtmlProps<E> {
574
573
  | "inherit"
575
574
  | undefined
576
575
  >;
577
- allowReorder?: MaybeSignal<"no" | "yes" | undefined>;
576
+ "allow-reorder"?: MaybeSignal<"no" | "yes" | undefined>;
578
577
  alphabetic?: MaybeSignal<number | string | undefined>;
579
578
  amplitude?: MaybeSignal<number | string | undefined>;
580
- arabicForm?: MaybeSignal<
579
+ "arabic-form"?: MaybeSignal<
581
580
  "initial" | "medial" | "terminal" | "isolated" | undefined
582
581
  >;
583
582
  ascent?: MaybeSignal<number | string | undefined>;
584
583
  attributeName?: MaybeSignal<string | undefined>;
585
584
  attributeType?: MaybeSignal<string | undefined>;
586
- autoReverse?: MaybeSignal<number | string | undefined>;
587
585
  azimuth?: MaybeSignal<number | string | undefined>;
588
586
  baseFrequency?: MaybeSignal<number | string | undefined>;
589
- baselineShift?: MaybeSignal<number | string | undefined>;
587
+ "baseline-shift"?: MaybeSignal<number | string | undefined>;
590
588
  baseProfile?: MaybeSignal<number | string | undefined>;
591
589
  bbox?: MaybeSignal<number | string | undefined>;
592
590
  begin?: MaybeSignal<number | string | undefined>;
593
591
  bias?: MaybeSignal<number | string | undefined>;
594
592
  by?: MaybeSignal<number | string | undefined>;
595
593
  calcMode?: MaybeSignal<number | string | undefined>;
596
- capHeight?: MaybeSignal<number | string | undefined>;
594
+ "cap-height"?: MaybeSignal<number | string | undefined>;
597
595
  clip?: MaybeSignal<number | string | undefined>;
598
- clipPath?: MaybeSignal<string | undefined>;
596
+ "clip-path"?: MaybeSignal<string | undefined>;
599
597
  clipPathUnits?: MaybeSignal<number | string | undefined>;
600
- clipRule?: MaybeSignal<number | string | undefined>;
601
- colorInterpolation?: MaybeSignal<number | string | undefined>;
602
- colorInterpolationFilters?: MaybeSignal<
598
+ "clip-rule"?: MaybeSignal<number | string | undefined>;
599
+ "color-interpolation"?: MaybeSignal<number | string | undefined>;
600
+ "color-interpolation-filters"?: MaybeSignal<
603
601
  "auto" | "sRGB" | "linearRGB" | "inherit" | undefined
604
602
  >;
605
- colorProfile?: MaybeSignal<number | string | undefined>;
606
- colorRendering?: MaybeSignal<number | string | undefined>;
603
+ "color-profile"?: MaybeSignal<number | string | undefined>;
604
+ "color-rendering"?: MaybeSignal<number | string | undefined>;
607
605
  contentScriptType?: MaybeSignal<number | string | undefined>;
608
606
  contentStyleType?: MaybeSignal<number | string | undefined>;
609
607
  cursor?: MaybeSignal<number | string | undefined>;
@@ -616,49 +614,49 @@ interface SvgProps<in E> extends HtmlProps<E> {
616
614
  direction?: MaybeSignal<number | string | undefined>;
617
615
  display?: MaybeSignal<number | string | undefined>;
618
616
  divisor?: MaybeSignal<number | string | undefined>;
619
- dominantBaseline?: MaybeSignal<number | string | undefined>;
617
+ "dominant-baseline"?: MaybeSignal<number | string | undefined>;
620
618
  dur?: MaybeSignal<number | string | undefined>;
621
619
  dx?: MaybeSignal<number | string | undefined>;
622
620
  dy?: MaybeSignal<number | string | undefined>;
623
621
  edgeMode?: MaybeSignal<number | string | undefined>;
624
622
  elevation?: MaybeSignal<number | string | undefined>;
625
- enableBackground?: MaybeSignal<number | string | undefined>;
623
+ "enable-background"?: MaybeSignal<number | string | undefined>;
626
624
  end?: MaybeSignal<number | string | undefined>;
627
625
  exponent?: MaybeSignal<number | string | undefined>;
628
626
  externalResourcesRequired?: MaybeSignal<number | string | undefined>;
629
627
  fill?: MaybeSignal<string | undefined>;
630
- fillOpacity?: MaybeSignal<number | string | undefined>;
631
- fillRule?: MaybeSignal<"nonzero" | "evenodd" | "inherit" | undefined>;
628
+ "fill-opacity"?: MaybeSignal<number | string | undefined>;
629
+ "fill-rule"?: MaybeSignal<"nonzero" | "evenodd" | "inherit" | undefined>;
632
630
  filter?: MaybeSignal<string | undefined>;
633
631
  filterRes?: MaybeSignal<number | string | undefined>;
634
632
  filterUnits?: MaybeSignal<number | string | undefined>;
635
- floodColor?: MaybeSignal<number | string | undefined>;
636
- floodOpacity?: MaybeSignal<number | string | undefined>;
633
+ "flood-color"?: MaybeSignal<number | string | undefined>;
634
+ "flood-opacity"?: MaybeSignal<number | string | undefined>;
637
635
  focusable?: MaybeSignal<number | string | undefined>;
638
- fontFamily?: MaybeSignal<string | undefined>;
639
- fontSize?: MaybeSignal<number | string | undefined>;
640
- fontSizeAdjust?: MaybeSignal<number | string | undefined>;
641
- fontStretch?: MaybeSignal<number | string | undefined>;
642
- fontStyle?: MaybeSignal<number | string | undefined>;
643
- fontVariant?: MaybeSignal<number | string | undefined>;
644
- fontWeight?: MaybeSignal<number | string | undefined>;
636
+ "font-family"?: MaybeSignal<string | undefined>;
637
+ "font-size"?: MaybeSignal<number | string | undefined>;
638
+ "font-size-adjust"?: MaybeSignal<number | string | undefined>;
639
+ "font-stretch"?: MaybeSignal<number | string | undefined>;
640
+ "font-style"?: MaybeSignal<number | string | undefined>;
641
+ "font-variant"?: MaybeSignal<number | string | undefined>;
642
+ "font-weight"?: MaybeSignal<number | string | undefined>;
645
643
  format?: MaybeSignal<number | string | undefined>;
646
644
  from?: MaybeSignal<number | string | undefined>;
647
645
  fx?: MaybeSignal<number | string | undefined>;
648
646
  fy?: MaybeSignal<number | string | undefined>;
649
647
  g1?: MaybeSignal<number | string | undefined>;
650
648
  g2?: MaybeSignal<number | string | undefined>;
651
- glyphName?: MaybeSignal<number | string | undefined>;
652
- glyphOrientationHorizontal?: MaybeSignal<number | string | undefined>;
653
- glyphOrientationVertical?: MaybeSignal<number | string | undefined>;
649
+ "glyph-name"?: MaybeSignal<number | string | undefined>;
650
+ "glyph-orientation-horizontal"?: MaybeSignal<number | string | undefined>;
651
+ "glyph-orientation-vertical"?: MaybeSignal<number | string | undefined>;
654
652
  glyphRef?: MaybeSignal<number | string | undefined>;
655
653
  gradientTransform?: MaybeSignal<string | undefined>;
656
654
  gradientUnits?: MaybeSignal<string | undefined>;
657
655
  hanging?: MaybeSignal<number | string | undefined>;
658
- horizAdvX?: MaybeSignal<number | string | undefined>;
659
- horizOriginX?: MaybeSignal<number | string | undefined>;
656
+ "horiz-adv-x"?: MaybeSignal<number | string | undefined>;
657
+ "horiz-origin-x"?: MaybeSignal<number | string | undefined>;
660
658
  ideographic?: MaybeSignal<number | string | undefined>;
661
- imageRendering?: MaybeSignal<number | string | undefined>;
659
+ "image-rendering"?: MaybeSignal<number | string | undefined>;
662
660
  in2?: MaybeSignal<number | string | undefined>;
663
661
  in?: MaybeSignal<string | undefined>;
664
662
  intercept?: MaybeSignal<number | string | undefined>;
@@ -674,14 +672,14 @@ interface SvgProps<in E> extends HtmlProps<E> {
674
672
  keySplines?: MaybeSignal<number | string | undefined>;
675
673
  keyTimes?: MaybeSignal<number | string | undefined>;
676
674
  lengthAdjust?: MaybeSignal<number | string | undefined>;
677
- letterSpacing?: MaybeSignal<number | string | undefined>;
678
- lightingColor?: MaybeSignal<number | string | undefined>;
675
+ "letter-spacing"?: MaybeSignal<number | string | undefined>;
676
+ "lighting-color"?: MaybeSignal<number | string | undefined>;
679
677
  limitingConeAngle?: MaybeSignal<number | string | undefined>;
680
678
  local?: MaybeSignal<number | string | undefined>;
681
- markerEnd?: MaybeSignal<string | undefined>;
679
+ "marker-end"?: MaybeSignal<string | undefined>;
682
680
  markerHeight?: MaybeSignal<number | string | undefined>;
683
- markerMid?: MaybeSignal<string | undefined>;
684
- markerStart?: MaybeSignal<string | undefined>;
681
+ "marker-mid"?: MaybeSignal<string | undefined>;
682
+ "marker-start"?: MaybeSignal<string | undefined>;
685
683
  markerUnits?: MaybeSignal<number | string | undefined>;
686
684
  markerWidth?: MaybeSignal<number | string | undefined>;
687
685
  mask?: MaybeSignal<string | undefined>;
@@ -698,15 +696,15 @@ interface SvgProps<in E> extends HtmlProps<E> {
698
696
  orientation?: MaybeSignal<number | string | undefined>;
699
697
  origin?: MaybeSignal<number | string | undefined>;
700
698
  overflow?: MaybeSignal<number | string | undefined>;
701
- overlinePosition?: MaybeSignal<number | string | undefined>;
702
- overlineThickness?: MaybeSignal<number | string | undefined>;
703
- paintOrder?: MaybeSignal<number | string | undefined>;
704
- panose1?: MaybeSignal<number | string | undefined>;
699
+ "overline-position"?: MaybeSignal<number | string | undefined>;
700
+ "overline-thickness"?: MaybeSignal<number | string | undefined>;
701
+ "paint-order"?: MaybeSignal<number | string | undefined>;
702
+ "panose-1"?: MaybeSignal<number | string | undefined>;
705
703
  pathLength?: MaybeSignal<number | string | undefined>;
706
704
  patternContentUnits?: MaybeSignal<string | undefined>;
707
705
  patternTransform?: MaybeSignal<number | string | undefined>;
708
706
  patternUnits?: MaybeSignal<string | undefined>;
709
- pointerEvents?: MaybeSignal<number | string | undefined>;
707
+ "pointer-events"?: MaybeSignal<number | string | undefined>;
710
708
  points?: MaybeSignal<string | undefined>;
711
709
  pointsAtX?: MaybeSignal<number | string | undefined>;
712
710
  pointsAtY?: MaybeSignal<number | string | undefined>;
@@ -718,7 +716,7 @@ interface SvgProps<in E> extends HtmlProps<E> {
718
716
  radius?: MaybeSignal<number | string | undefined>;
719
717
  refX?: MaybeSignal<number | string | undefined>;
720
718
  refY?: MaybeSignal<number | string | undefined>;
721
- renderingIntent?: MaybeSignal<number | string | undefined>;
719
+ "rendering-intent"?: MaybeSignal<number | string | undefined>;
722
720
  repeatCount?: MaybeSignal<number | string | undefined>;
723
721
  repeatDur?: MaybeSignal<number | string | undefined>;
724
722
  requiredExtensions?: MaybeSignal<number | string | undefined>;
@@ -730,7 +728,7 @@ interface SvgProps<in E> extends HtmlProps<E> {
730
728
  ry?: MaybeSignal<number | string | undefined>;
731
729
  scale?: MaybeSignal<number | string | undefined>;
732
730
  seed?: MaybeSignal<number | string | undefined>;
733
- shapeRendering?: MaybeSignal<number | string | undefined>;
731
+ "shape-rendering"?: MaybeSignal<number | string | undefined>;
734
732
  slope?: MaybeSignal<number | string | undefined>;
735
733
  spacing?: MaybeSignal<number | string | undefined>;
736
734
  specularConstant?: MaybeSignal<number | string | undefined>;
@@ -742,23 +740,23 @@ interface SvgProps<in E> extends HtmlProps<E> {
742
740
  stemh?: MaybeSignal<number | string | undefined>;
743
741
  stemv?: MaybeSignal<number | string | undefined>;
744
742
  stitchTiles?: MaybeSignal<number | string | undefined>;
745
- stopColor?: MaybeSignal<string | undefined>;
746
- stopOpacity?: MaybeSignal<number | string | undefined>;
747
- strikethroughPosition?: MaybeSignal<number | string | undefined>;
748
- strikethroughThickness?: MaybeSignal<number | string | undefined>;
743
+ "stop-color"?: MaybeSignal<string | undefined>;
744
+ "stop-opacity"?: MaybeSignal<number | string | undefined>;
745
+ "strikethrough-position"?: MaybeSignal<number | string | undefined>;
746
+ "strikethrough-thickness"?: MaybeSignal<number | string | undefined>;
749
747
  string?: MaybeSignal<number | string | undefined>;
750
748
  stroke?: MaybeSignal<string | undefined>;
751
- strokeDasharray?: MaybeSignal<number | string | undefined>;
752
- strokeDashoffset?: MaybeSignal<number | string | undefined>;
753
- strokeLinecap?: MaybeSignal<
749
+ "stroke-dasharray"?: MaybeSignal<number | string | undefined>;
750
+ "stroke-dashoffset"?: MaybeSignal<number | string | undefined>;
751
+ "stroke-linecap"?: MaybeSignal<
754
752
  "butt" | "round" | "square" | "inherit" | undefined
755
753
  >;
756
- strokeLinejoin?: MaybeSignal<
754
+ "stroke-linejoin"?: MaybeSignal<
757
755
  "miter" | "round" | "bevel" | "inherit" | undefined
758
756
  >;
759
- strokeMiterlimit?: MaybeSignal<number | string | undefined>;
760
- strokeOpacity?: MaybeSignal<number | string | undefined>;
761
- strokeWidth?: MaybeSignal<number | string | undefined>;
757
+ "stroke-miterlimit"?: MaybeSignal<number | string | undefined>;
758
+ "stroke-opacity"?: MaybeSignal<number | string | undefined>;
759
+ "stroke-width"?: MaybeSignal<number | string | undefined>;
762
760
  surfaceScale?: MaybeSignal<number | string | undefined>;
763
761
  systemLanguage?: MaybeSignal<number | string | undefined>;
764
762
  tableValues?: MaybeSignal<number | string | undefined>;
@@ -770,47 +768,36 @@ interface SvgProps<in E> extends HtmlProps<E> {
770
768
  textRendering?: MaybeSignal<number | string | undefined>;
771
769
  to?: MaybeSignal<number | string | undefined>;
772
770
  transform?: MaybeSignal<string | undefined>;
771
+ "transform-origin"?: MaybeSignal<string | undefined>;
773
772
  u1?: MaybeSignal<number | string | undefined>;
774
773
  u2?: MaybeSignal<number | string | undefined>;
775
- underlinePosition?: MaybeSignal<number | string | undefined>;
776
- underlineThickness?: MaybeSignal<number | string | undefined>;
774
+ "underline-position"?: MaybeSignal<number | string | undefined>;
775
+ "underline-thickness"?: MaybeSignal<number | string | undefined>;
777
776
  unicode?: MaybeSignal<number | string | undefined>;
778
- unicodeBidi?: MaybeSignal<number | string | undefined>;
779
- unicodeRange?: MaybeSignal<number | string | undefined>;
780
- unitsPerEm?: MaybeSignal<number | string | undefined>;
781
- vAlphabetic?: MaybeSignal<number | string | undefined>;
777
+ "unicode-bidi"?: MaybeSignal<number | string | undefined>;
778
+ "unicode-range"?: MaybeSignal<number | string | undefined>;
779
+ "units-per-em"?: MaybeSignal<number | string | undefined>;
780
+ "v-alphabetic"?: MaybeSignal<number | string | undefined>;
782
781
  values?: MaybeSignal<string | undefined>;
783
782
  vectorEffect?: MaybeSignal<number | string | undefined>;
784
783
  version?: MaybeSignal<string | undefined>;
785
- vertAdvY?: MaybeSignal<number | string | undefined>;
786
- vertOriginX?: MaybeSignal<number | string | undefined>;
787
- vertOriginY?: MaybeSignal<number | string | undefined>;
788
- vHanging?: MaybeSignal<number | string | undefined>;
789
- vIdeographic?: MaybeSignal<number | string | undefined>;
784
+ "vert-adv-y"?: MaybeSignal<number | string | undefined>;
785
+ "vert-origin-x"?: MaybeSignal<number | string | undefined>;
786
+ "vert-origin-y"?: MaybeSignal<number | string | undefined>;
787
+ "v-hanging"?: MaybeSignal<number | string | undefined>;
788
+ "v-ideographic"?: MaybeSignal<number | string | undefined>;
790
789
  viewBox?: MaybeSignal<string | undefined>;
791
790
  viewTarget?: MaybeSignal<number | string | undefined>;
792
791
  visibility?: MaybeSignal<number | string | undefined>;
793
- vMathematical?: MaybeSignal<number | string | undefined>;
792
+ "v-mathematical"?: MaybeSignal<number | string | undefined>;
794
793
  widths?: MaybeSignal<number | string | undefined>;
795
- wordSpacing?: MaybeSignal<number | string | undefined>;
794
+ "word-spacing"?: MaybeSignal<number | string | undefined>;
796
795
  writingMode?: MaybeSignal<number | string | undefined>;
797
796
  x1?: MaybeSignal<number | string | undefined>;
798
797
  x2?: MaybeSignal<number | string | undefined>;
799
798
  x?: MaybeSignal<number | string | undefined>;
800
799
  xChannelSelector?: MaybeSignal<string | undefined>;
801
- xHeight?: MaybeSignal<number | string | undefined>;
802
- xlinkActuate?: MaybeSignal<string | undefined>;
803
- xlinkArcrole?: MaybeSignal<string | undefined>;
804
- xlinkHref?: MaybeSignal<string | undefined>;
805
- xlinkRole?: MaybeSignal<string | undefined>;
806
- xlinkShow?: MaybeSignal<string | undefined>;
807
- xlinkTitle?: MaybeSignal<string | undefined>;
808
- xlinkType?: MaybeSignal<string | undefined>;
809
- xmlBase?: MaybeSignal<string | undefined>;
810
- xmlLang?: MaybeSignal<string | undefined>;
811
- xmlns?: MaybeSignal<string | undefined>;
812
- xmlnsXlink?: MaybeSignal<string | undefined>;
813
- xmlSpace?: MaybeSignal<string | undefined>;
800
+ "x-height"?: MaybeSignal<number | string | undefined>;
814
801
  y1?: MaybeSignal<number | string | undefined>;
815
802
  y2?: MaybeSignal<number | string | undefined>;
816
803
  y?: MaybeSignal<number | string | undefined>;
@@ -94,7 +94,7 @@ export const TagComponent = (
94
94
  ? document.createElement(tagName)
95
95
  : document.createElementNS("http://www.w3.org/2000/svg", tagName),
96
96
  ),
97
- svg,
97
+ svg && tagName === "foreignObject" ? false : svg,
98
98
  props,
99
99
  true,
100
100
  );
package/src/scope.ts CHANGED
@@ -68,8 +68,8 @@ export type Cleanup = (() => void) | void | undefined | null;
68
68
 
69
69
  export interface Scope<out T = {}> {
70
70
  readonly _parent?: Scope;
71
- _effects: Effect[];
72
- _subscopes: Scope[];
71
+ _effects: Set<Effect>;
72
+ _subscopes: Set<Scope>;
73
73
  _details: T;
74
74
 
75
75
  _run<T>(fn: () => T): T;
@@ -79,8 +79,8 @@ export interface Scope<out T = {}> {
79
79
  const createScope = (parent?: Scope): Scope => {
80
80
  return {
81
81
  _parent: parent,
82
- _effects: [],
83
- _subscopes: [],
82
+ _effects: new Set(),
83
+ _subscopes: new Set(),
84
84
  _details: { ...parent?._details },
85
85
 
86
86
  _run<T>(fn: () => T): T {
@@ -95,22 +95,23 @@ const createScope = (parent?: Scope): Scope => {
95
95
  },
96
96
 
97
97
  _cleanup(): void {
98
- for (let i = this._subscopes.length - 1; i >= 0; i--) {
99
- this._subscopes[i]._cleanup();
100
- }
98
+ [...this._subscopes].forEach((_, i, arr) => {
99
+ const subscope = arr[arr.length - 1 - i];
100
+ subscope._cleanup();
101
+ });
101
102
 
102
- this._subscopes = [];
103
+ this._subscopes = new Set();
103
104
 
104
- for (let i = this._effects.length - 1; i >= 0; i--) {
105
- const effect = this._effects[i];
105
+ [...this._effects].forEach((_, i, arr) => {
106
+ const effect = arr[arr.length - 1 - i];
106
107
  effect._clean?.();
107
108
  effect._run = () => {};
108
109
 
109
110
  effect._deps.forEach((signal) => signal._effects.delete(effect));
110
111
  effect._deps.clear();
111
- }
112
+ });
112
113
 
113
- this._effects = [];
114
+ this._effects = new Set();
114
115
  },
115
116
  };
116
117
  };
@@ -307,14 +308,14 @@ export const useEffect = (
307
308
  },
308
309
  };
309
310
 
310
- currScope._effects.push(effect);
311
+ currScope._effects.add(effect);
311
312
  effect._run();
312
313
 
313
314
  if (!effect._deps.size && !effect._clean) {
314
315
  // Optimization: Destroy effect since there's no cleanup and this effect
315
316
  // won't be called again
316
317
 
317
- currScope._effects.pop();
318
+ currScope._effects.delete(effect);
318
319
  }
319
320
  };
320
321
 
@@ -363,17 +364,13 @@ export const useSubscope = <T>(
363
364
  Object.assign(scope._details, opts?.details);
364
365
 
365
366
  try {
366
- parent._subscopes.push(scope);
367
+ parent._subscopes.add(scope);
367
368
  const result = scope._run(fn);
368
369
 
369
370
  return [
370
371
  result,
371
372
  () => {
372
- const index = parent._subscopes.indexOf(scope);
373
- if (index >= 0) {
374
- parent._subscopes.splice(index, 1);
375
- }
376
-
373
+ parent._subscopes.delete(scope);
377
374
  scope._cleanup();
378
375
  },
379
376
  ];