proto-table-wc 0.0.324 → 0.0.327
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/cjs/demo-table_2.cjs.entry.js +1 -1
- package/dist/cjs/{index-7e27bef2.js → index-a6d8dc88.js} +183 -43
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/proto-table-wc.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/demo-table/demo-table.js +12 -12
- package/dist/collection/components/proto-table/proto-table.js +77 -81
- package/dist/esm/demo-table_2.entry.js +1 -1
- package/dist/esm/{index-c660fbbf.js → index-db21c56b.js} +183 -43
- package/dist/esm/loader.js +2 -2
- package/dist/esm/proto-table-wc.js +2 -2
- package/dist/proto-table-wc/{p-33ec0835.entry.js → p-1f6f46a5.entry.js} +1 -1
- package/dist/proto-table-wc/{p-fe8bd63d.js → p-9746b0d9.js} +0 -0
- package/dist/proto-table-wc/proto-table-wc.esm.js +1 -1
- package/loader/package.json +1 -0
- package/package.json +5 -5
@@ -40,7 +40,7 @@ const uniqueTime = (key, measureText) => {
|
|
40
40
|
};
|
41
41
|
}
|
42
42
|
};
|
43
|
-
const rootAppliedStyles = new WeakMap();
|
43
|
+
const rootAppliedStyles = /*@__PURE__*/ new WeakMap();
|
44
44
|
const registerStyle = (scopeId, cssText, allowCS) => {
|
45
45
|
let style = styles.get(scopeId);
|
46
46
|
if (supportsConstructableStylesheets && allowCS) {
|
@@ -62,7 +62,7 @@ const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
|
|
62
62
|
const style = styles.get(scopeId);
|
63
63
|
// if an element is NOT connected then getRootNode() will return the wrong root node
|
64
64
|
// so the fallback is to always use the document for the root node in those cases
|
65
|
-
styleContainerNode = styleContainerNode.nodeType === 11 /* DocumentFragment */ ? styleContainerNode : doc;
|
65
|
+
styleContainerNode = styleContainerNode.nodeType === 11 /* NODE_TYPE.DocumentFragment */ ? styleContainerNode : doc;
|
66
66
|
if (style) {
|
67
67
|
if (typeof style === 'string') {
|
68
68
|
styleContainerNode = styleContainerNode.head || styleContainerNode;
|
@@ -96,7 +96,7 @@ const attachStyles = (hostRef) => {
|
|
96
96
|
const flags = cmpMeta.$flags$;
|
97
97
|
const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);
|
98
98
|
const scopeId = addStyle(elm.shadowRoot ? elm.shadowRoot : elm.getRootNode(), cmpMeta);
|
99
|
-
if (flags & 10 /* needsScopedEncapsulation */) {
|
99
|
+
if (flags & 10 /* CMP_FLAGS.needsScopedEncapsulation */) {
|
100
100
|
// only required when we're NOT using native shadow dom (slot)
|
101
101
|
// or this browser doesn't support native shadow dom
|
102
102
|
// and this host element was NOT created with SSR
|
@@ -295,7 +295,7 @@ const setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags) => {
|
|
295
295
|
}
|
296
296
|
}
|
297
297
|
}
|
298
|
-
else if ((!isProp || flags & 4 /* isHost */ || isSvg) && !isComplex) {
|
298
|
+
else if ((!isProp || flags & 4 /* VNODE_FLAGS.isHost */ || isSvg) && !isComplex) {
|
299
299
|
newValue = newValue === true ? '' : newValue;
|
300
300
|
{
|
301
301
|
elm.setAttribute(memberName, newValue);
|
@@ -310,7 +310,7 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
|
|
310
310
|
// if the element passed in is a shadow root, which is a document fragment
|
311
311
|
// then we want to be adding attrs/props to the shadow root's "host" element
|
312
312
|
// if it's not a shadow root, then we add attrs/props to the same element
|
313
|
-
const elm = newVnode.$elm$.nodeType === 11 /* DocumentFragment */ && newVnode.$elm$.host
|
313
|
+
const elm = newVnode.$elm$.nodeType === 11 /* NODE_TYPE.DocumentFragment */ && newVnode.$elm$.host
|
314
314
|
? newVnode.$elm$.host
|
315
315
|
: newVnode.$elm$;
|
316
316
|
const oldVnodeAttrs = (oldVnode && oldVnode.$attrs$) || EMPTY_OBJ;
|
@@ -328,6 +328,16 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
|
|
328
328
|
setAccessor(elm, memberName, oldVnodeAttrs[memberName], newVnodeAttrs[memberName], isSvgMode, newVnode.$flags$);
|
329
329
|
}
|
330
330
|
};
|
331
|
+
/**
|
332
|
+
* Create a DOM Node corresponding to one of the children of a given VNode.
|
333
|
+
*
|
334
|
+
* @param oldParentVNode the parent VNode from the previous render
|
335
|
+
* @param newParentVNode the parent VNode from the current render
|
336
|
+
* @param childIndex the index of the VNode, in the _new_ parent node's
|
337
|
+
* children, for which we will create a new DOM node
|
338
|
+
* @param parentElm the parent DOM node which our new node will be a child of
|
339
|
+
* @returns the newly created node
|
340
|
+
*/
|
331
341
|
const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
|
332
342
|
// tslint:disable-next-line: prefer-const
|
333
343
|
const newVNode = newParentVNode.$children$[childIndex];
|
@@ -407,6 +417,74 @@ const removeVnodes = (vnodes, startIdx, endIdx, vnode, elm) => {
|
|
407
417
|
}
|
408
418
|
}
|
409
419
|
};
|
420
|
+
/**
|
421
|
+
* Reconcile the children of a new VNode with the children of an old VNode by
|
422
|
+
* traversing the two collections of children, identifying nodes that are
|
423
|
+
* conserved or changed, calling out to `patch` to make any necessary
|
424
|
+
* updates to the DOM, and rearranging DOM nodes as needed.
|
425
|
+
*
|
426
|
+
* The algorithm for reconciling children works by analyzing two 'windows' onto
|
427
|
+
* the two arrays of children (`oldCh` and `newCh`). We keep track of the
|
428
|
+
* 'windows' by storing start and end indices and references to the
|
429
|
+
* corresponding array entries. Initially the two 'windows' are basically equal
|
430
|
+
* to the entire array, but we progressively narrow the windows until there are
|
431
|
+
* no children left to update by doing the following:
|
432
|
+
*
|
433
|
+
* 1. Skip any `null` entries at the beginning or end of the two arrays, so
|
434
|
+
* that if we have an initial array like the following we'll end up dealing
|
435
|
+
* only with a window bounded by the highlighted elements:
|
436
|
+
*
|
437
|
+
* [null, null, VNode1 , ... , VNode2, null, null]
|
438
|
+
* ^^^^^^ ^^^^^^
|
439
|
+
*
|
440
|
+
* 2. Check to see if the elements at the head and tail positions are equal
|
441
|
+
* across the windows. This will basically detect elements which haven't
|
442
|
+
* been added, removed, or changed position, i.e. if you had the following
|
443
|
+
* VNode elements (represented as HTML):
|
444
|
+
*
|
445
|
+
* oldVNode: `<div><p><span>HEY</span></p></div>`
|
446
|
+
* newVNode: `<div><p><span>THERE</span></p></div>`
|
447
|
+
*
|
448
|
+
* Then when comparing the children of the `<div>` tag we check the equality
|
449
|
+
* of the VNodes corresponding to the `<p>` tags and, since they are the
|
450
|
+
* same tag in the same position, we'd be able to avoid completely
|
451
|
+
* re-rendering the subtree under them with a new DOM element and would just
|
452
|
+
* call out to `patch` to handle reconciling their children and so on.
|
453
|
+
*
|
454
|
+
* 3. Check, for both windows, to see if the element at the beginning of the
|
455
|
+
* window corresponds to the element at the end of the other window. This is
|
456
|
+
* a heuristic which will let us identify _some_ situations in which
|
457
|
+
* elements have changed position, for instance it _should_ detect that the
|
458
|
+
* children nodes themselves have not changed but merely moved in the
|
459
|
+
* following example:
|
460
|
+
*
|
461
|
+
* oldVNode: `<div><element-one /><element-two /></div>`
|
462
|
+
* newVNode: `<div><element-two /><element-one /></div>`
|
463
|
+
*
|
464
|
+
* If we find cases like this then we also need to move the concrete DOM
|
465
|
+
* elements corresponding to the moved children to write the re-order to the
|
466
|
+
* DOM.
|
467
|
+
*
|
468
|
+
* 4. Finally, if VNodes have the `key` attribute set on them we check for any
|
469
|
+
* nodes in the old children which have the same key as the first element in
|
470
|
+
* our window on the new children. If we find such a node we handle calling
|
471
|
+
* out to `patch`, moving relevant DOM nodes, and so on, in accordance with
|
472
|
+
* what we find.
|
473
|
+
*
|
474
|
+
* Finally, once we've narrowed our 'windows' to the point that either of them
|
475
|
+
* collapse (i.e. they have length 0) we then handle any remaining VNode
|
476
|
+
* insertion or deletion that needs to happen to get a DOM state that correctly
|
477
|
+
* reflects the new child VNodes. If, for instance, after our window on the old
|
478
|
+
* children has collapsed we still have more nodes on the new children that
|
479
|
+
* we haven't dealt with yet then we need to add them, or if the new children
|
480
|
+
* collapse but we still have unhandled _old_ children then we need to make
|
481
|
+
* sure the corresponding DOM nodes are removed.
|
482
|
+
*
|
483
|
+
* @param parentElm the node into which the parent VNode is rendered
|
484
|
+
* @param oldCh the old children of the parent node
|
485
|
+
* @param newVNode the new VNode which will replace the parent
|
486
|
+
* @param newCh the new children of the parent node
|
487
|
+
*/
|
410
488
|
const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
|
411
489
|
let oldStartIdx = 0;
|
412
490
|
let newStartIdx = 0;
|
@@ -419,7 +497,7 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
|
|
419
497
|
let node;
|
420
498
|
while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
|
421
499
|
if (oldStartVnode == null) {
|
422
|
-
//
|
500
|
+
// VNode might have been moved left
|
423
501
|
oldStartVnode = oldCh[++oldStartIdx];
|
424
502
|
}
|
425
503
|
else if (oldEndVnode == null) {
|
@@ -432,34 +510,67 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
|
|
432
510
|
newEndVnode = newCh[--newEndIdx];
|
433
511
|
}
|
434
512
|
else if (isSameVnode(oldStartVnode, newStartVnode)) {
|
513
|
+
// if the start nodes are the same then we should patch the new VNode
|
514
|
+
// onto the old one, and increment our `newStartIdx` and `oldStartIdx`
|
515
|
+
// indices to reflect that. We don't need to move any DOM Nodes around
|
516
|
+
// since things are matched up in order.
|
435
517
|
patch(oldStartVnode, newStartVnode);
|
436
518
|
oldStartVnode = oldCh[++oldStartIdx];
|
437
519
|
newStartVnode = newCh[++newStartIdx];
|
438
520
|
}
|
439
521
|
else if (isSameVnode(oldEndVnode, newEndVnode)) {
|
522
|
+
// likewise, if the end nodes are the same we patch new onto old and
|
523
|
+
// decrement our end indices, and also likewise in this case we don't
|
524
|
+
// need to move any DOM Nodes.
|
440
525
|
patch(oldEndVnode, newEndVnode);
|
441
526
|
oldEndVnode = oldCh[--oldEndIdx];
|
442
527
|
newEndVnode = newCh[--newEndIdx];
|
443
528
|
}
|
444
529
|
else if (isSameVnode(oldStartVnode, newEndVnode)) {
|
445
530
|
patch(oldStartVnode, newEndVnode);
|
531
|
+
// We need to move the element for `oldStartVnode` into a position which
|
532
|
+
// will be appropriate for `newEndVnode`. For this we can use
|
533
|
+
// `.insertBefore` and `oldEndVnode.$elm$.nextSibling`. If there is a
|
534
|
+
// sibling for `oldEndVnode.$elm$` then we want to move the DOM node for
|
535
|
+
// `oldStartVnode` between `oldEndVnode` and it's sibling, like so:
|
536
|
+
//
|
537
|
+
// <old-start-node />
|
538
|
+
// <some-intervening-node />
|
539
|
+
// <old-end-node />
|
540
|
+
// <!-- -> <-- `oldStartVnode.$elm$` should be inserted here
|
541
|
+
// <next-sibling />
|
542
|
+
//
|
543
|
+
// If instead `oldEndVnode.$elm$` has no sibling then we just want to put
|
544
|
+
// the node for `oldStartVnode` at the end of the children of
|
545
|
+
// `parentElm`. Luckily, `Node.nextSibling` will return `null` if there
|
546
|
+
// aren't any siblings, and passing `null` to `Node.insertBefore` will
|
547
|
+
// append it to the children of the parent element.
|
446
548
|
parentElm.insertBefore(oldStartVnode.$elm$, oldEndVnode.$elm$.nextSibling);
|
447
549
|
oldStartVnode = oldCh[++oldStartIdx];
|
448
550
|
newEndVnode = newCh[--newEndIdx];
|
449
551
|
}
|
450
552
|
else if (isSameVnode(oldEndVnode, newStartVnode)) {
|
451
553
|
patch(oldEndVnode, newStartVnode);
|
554
|
+
// We've already checked above if `oldStartVnode` and `newStartVnode` are
|
555
|
+
// the same node, so since we're here we know that they are not. Thus we
|
556
|
+
// can move the element for `oldEndVnode` _before_ the element for
|
557
|
+
// `oldStartVnode`, leaving `oldStartVnode` to be reconciled in the
|
558
|
+
// future.
|
452
559
|
parentElm.insertBefore(oldEndVnode.$elm$, oldStartVnode.$elm$);
|
453
560
|
oldEndVnode = oldCh[--oldEndIdx];
|
454
561
|
newStartVnode = newCh[++newStartIdx];
|
455
562
|
}
|
456
563
|
else {
|
457
564
|
{
|
458
|
-
//
|
565
|
+
// We either didn't find an element in the old children that matches
|
566
|
+
// the key of the first new child OR the build is not using `key`
|
567
|
+
// attributes at all. In either case we need to create a new element
|
568
|
+
// for the new node.
|
459
569
|
node = createElm(oldCh && oldCh[newStartIdx], newVNode, newStartIdx);
|
460
570
|
newStartVnode = newCh[++newStartIdx];
|
461
571
|
}
|
462
572
|
if (node) {
|
573
|
+
// if we created a new node then handle inserting it to the DOM
|
463
574
|
{
|
464
575
|
oldStartVnode.$elm$.parentNode.insertBefore(node, oldStartVnode.$elm$);
|
465
576
|
}
|
@@ -467,20 +578,49 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
|
|
467
578
|
}
|
468
579
|
}
|
469
580
|
if (oldStartIdx > oldEndIdx) {
|
581
|
+
// we have some more new nodes to add which don't match up with old nodes
|
470
582
|
addVnodes(parentElm, newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].$elm$, newVNode, newCh, newStartIdx, newEndIdx);
|
471
583
|
}
|
472
584
|
else if (newStartIdx > newEndIdx) {
|
585
|
+
// there are nodes in the `oldCh` array which no longer correspond to nodes
|
586
|
+
// in the new array, so lets remove them (which entails cleaning up the
|
587
|
+
// relevant DOM nodes)
|
473
588
|
removeVnodes(oldCh, oldStartIdx, oldEndIdx);
|
474
589
|
}
|
475
590
|
};
|
476
|
-
|
591
|
+
/**
|
592
|
+
* Compare two VNodes to determine if they are the same
|
593
|
+
*
|
594
|
+
* **NB**: This function is an equality _heuristic_ based on the available
|
595
|
+
* information set on the two VNodes and can be misleading under certain
|
596
|
+
* circumstances. In particular, if the two nodes do not have `key` attrs
|
597
|
+
* (available under `$key$` on VNodes) then the function falls back on merely
|
598
|
+
* checking that they have the same tag.
|
599
|
+
*
|
600
|
+
* So, in other words, if `key` attrs are not set on VNodes which may be
|
601
|
+
* changing order within a `children` array or something along those lines then
|
602
|
+
* we could obtain a false positive and then have to do needless re-rendering.
|
603
|
+
*
|
604
|
+
* @param leftVNode the first VNode to check
|
605
|
+
* @param rightVNode the second VNode to check
|
606
|
+
* @returns whether they're equal or not
|
607
|
+
*/
|
608
|
+
const isSameVnode = (leftVNode, rightVNode) => {
|
477
609
|
// compare if two vnode to see if they're "technically" the same
|
478
610
|
// need to have the same element tag, and same key to be the same
|
479
|
-
if (
|
611
|
+
if (leftVNode.$tag$ === rightVNode.$tag$) {
|
480
612
|
return true;
|
481
613
|
}
|
482
614
|
return false;
|
483
615
|
};
|
616
|
+
/**
|
617
|
+
* Handle reconciling an outdated VNode with a new one which corresponds to
|
618
|
+
* it. This function handles flushing updates to the DOM and reconciling the
|
619
|
+
* children of the two nodes (if any).
|
620
|
+
*
|
621
|
+
* @param oldVNode an old VNode whose DOM element and children we want to update
|
622
|
+
* @param newVNode a new VNode representing an updated version of the old one
|
623
|
+
*/
|
484
624
|
const patch = (oldVNode, newVNode) => {
|
485
625
|
const elm = (newVNode.$elm$ = oldVNode.$elm$);
|
486
626
|
const oldChildren = oldVNode.$children$;
|
@@ -493,7 +633,6 @@ const patch = (oldVNode, newVNode) => {
|
|
493
633
|
// only add this to the when the compiler sees we're using an svg somewhere
|
494
634
|
isSvgMode = tag === 'svg' ? true : tag === 'foreignObject' ? false : isSvgMode;
|
495
635
|
}
|
496
|
-
// element node
|
497
636
|
{
|
498
637
|
{
|
499
638
|
// either this is the first render of an element OR it's an update
|
@@ -504,6 +643,7 @@ const patch = (oldVNode, newVNode) => {
|
|
504
643
|
}
|
505
644
|
if (oldChildren !== null && newChildren !== null) {
|
506
645
|
// looks like there's child vnodes for both the old and new vnodes
|
646
|
+
// so we need to call `updateChildren` to reconcile them
|
507
647
|
updateChildren(elm, oldChildren, newVNode, newChildren);
|
508
648
|
}
|
509
649
|
else if (newChildren !== null) {
|
@@ -541,7 +681,7 @@ const renderVdom = (hostRef, renderFnResults) => {
|
|
541
681
|
const rootVnode = isHost(renderFnResults) ? renderFnResults : h(null, null, renderFnResults);
|
542
682
|
hostTagName = hostElm.tagName;
|
543
683
|
rootVnode.$tag$ = null;
|
544
|
-
rootVnode.$flags$ |= 4 /* isHost */;
|
684
|
+
rootVnode.$flags$ |= 4 /* VNODE_FLAGS.isHost */;
|
545
685
|
hostRef.$vnode$ = rootVnode;
|
546
686
|
rootVnode.$elm$ = oldVNode.$elm$ = (hostElm.shadowRoot || hostElm );
|
547
687
|
{
|
@@ -569,10 +709,10 @@ const attachToAncestor = (hostRef, ancestorComponent) => {
|
|
569
709
|
};
|
570
710
|
const scheduleUpdate = (hostRef, isInitialLoad) => {
|
571
711
|
{
|
572
|
-
hostRef.$flags$ |= 16 /* isQueuedForUpdate */;
|
712
|
+
hostRef.$flags$ |= 16 /* HOST_FLAGS.isQueuedForUpdate */;
|
573
713
|
}
|
574
|
-
if (hostRef.$flags$ & 4 /* isWaitingForChildren */) {
|
575
|
-
hostRef.$flags$ |= 512 /* needsRerender */;
|
714
|
+
if (hostRef.$flags$ & 4 /* HOST_FLAGS.isWaitingForChildren */) {
|
715
|
+
hostRef.$flags$ |= 512 /* HOST_FLAGS.needsRerender */;
|
576
716
|
return;
|
577
717
|
}
|
578
718
|
attachToAncestor(hostRef, hostRef.$ancestorComponent$);
|
@@ -624,7 +764,7 @@ const updateComponent = async (hostRef, instance, isInitialLoad) => {
|
|
624
764
|
}
|
625
765
|
else {
|
626
766
|
Promise.all(childrenPromises).then(postUpdate);
|
627
|
-
hostRef.$flags$ |= 4 /* isWaitingForChildren */;
|
767
|
+
hostRef.$flags$ |= 4 /* HOST_FLAGS.isWaitingForChildren */;
|
628
768
|
childrenPromises.length = 0;
|
629
769
|
}
|
630
770
|
}
|
@@ -633,10 +773,10 @@ const callRender = (hostRef, instance, elm) => {
|
|
633
773
|
try {
|
634
774
|
instance = instance.render() ;
|
635
775
|
{
|
636
|
-
hostRef.$flags$ &= ~16 /* isQueuedForUpdate */;
|
776
|
+
hostRef.$flags$ &= ~16 /* HOST_FLAGS.isQueuedForUpdate */;
|
637
777
|
}
|
638
778
|
{
|
639
|
-
hostRef.$flags$ |= 2 /* hasRendered */;
|
779
|
+
hostRef.$flags$ |= 2 /* HOST_FLAGS.hasRendered */;
|
640
780
|
}
|
641
781
|
{
|
642
782
|
{
|
@@ -660,8 +800,8 @@ const postUpdateComponent = (hostRef) => {
|
|
660
800
|
const endPostUpdate = createTime('postUpdate', tagName);
|
661
801
|
const instance = hostRef.$lazyInstance$ ;
|
662
802
|
const ancestorComponent = hostRef.$ancestorComponent$;
|
663
|
-
if (!(hostRef.$flags$ & 64 /* hasLoadedComponent */)) {
|
664
|
-
hostRef.$flags$ |= 64 /* hasLoadedComponent */;
|
803
|
+
if (!(hostRef.$flags$ & 64 /* HOST_FLAGS.hasLoadedComponent */)) {
|
804
|
+
hostRef.$flags$ |= 64 /* HOST_FLAGS.hasLoadedComponent */;
|
665
805
|
{
|
666
806
|
// DOM WRITE!
|
667
807
|
addHydratedFlag(elm);
|
@@ -687,10 +827,10 @@ const postUpdateComponent = (hostRef) => {
|
|
687
827
|
hostRef.$onRenderResolve$();
|
688
828
|
hostRef.$onRenderResolve$ = undefined;
|
689
829
|
}
|
690
|
-
if (hostRef.$flags$ & 512 /* needsRerender */) {
|
830
|
+
if (hostRef.$flags$ & 512 /* HOST_FLAGS.needsRerender */) {
|
691
831
|
nextTick(() => scheduleUpdate(hostRef, false));
|
692
832
|
}
|
693
|
-
hostRef.$flags$ &= ~(4 /* isWaitingForChildren */ | 512 /* needsRerender */);
|
833
|
+
hostRef.$flags$ &= ~(4 /* HOST_FLAGS.isWaitingForChildren */ | 512 /* HOST_FLAGS.needsRerender */);
|
694
834
|
}
|
695
835
|
// ( •_•)
|
696
836
|
// ( •_•)>⌐■-■
|
@@ -764,12 +904,12 @@ const setValue = (ref, propName, newVal, cmpMeta) => {
|
|
764
904
|
// explicitly check for NaN on both sides, as `NaN === NaN` is always false
|
765
905
|
const areBothNaN = Number.isNaN(oldVal) && Number.isNaN(newVal);
|
766
906
|
const didValueChange = newVal !== oldVal && !areBothNaN;
|
767
|
-
if ((!(flags & 8 /* isConstructingInstance */) || oldVal === undefined) && didValueChange) {
|
907
|
+
if ((!(flags & 8 /* HOST_FLAGS.isConstructingInstance */) || oldVal === undefined) && didValueChange) {
|
768
908
|
// gadzooks! the property's value has changed!!
|
769
909
|
// set our new value!
|
770
910
|
hostRef.$instanceValues$.set(propName, newVal);
|
771
911
|
if (instance) {
|
772
|
-
if ((flags & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {
|
912
|
+
if ((flags & (2 /* HOST_FLAGS.hasRendered */ | 16 /* HOST_FLAGS.isQueuedForUpdate */)) === 2 /* HOST_FLAGS.hasRendered */) {
|
773
913
|
// looks like this value actually changed, so we've got work to do!
|
774
914
|
// but only if we've already rendered, otherwise just chill out
|
775
915
|
// queue that we need to do an update, but don't worry about queuing
|
@@ -785,8 +925,8 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
785
925
|
const members = Object.entries(cmpMeta.$members$);
|
786
926
|
const prototype = Cstr.prototype;
|
787
927
|
members.map(([memberName, [memberFlags]]) => {
|
788
|
-
if ((memberFlags & 31 /* Prop */ ||
|
789
|
-
((flags & 2 /* proxyState */) && memberFlags & 32 /* State */))) {
|
928
|
+
if ((memberFlags & 31 /* MEMBER_FLAGS.Prop */ ||
|
929
|
+
((flags & 2 /* PROXY_FLAGS.proxyState */) && memberFlags & 32 /* MEMBER_FLAGS.State */))) {
|
790
930
|
// proxyComponent - prop
|
791
931
|
Object.defineProperty(prototype, memberName, {
|
792
932
|
get() {
|
@@ -802,7 +942,7 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
802
942
|
});
|
803
943
|
}
|
804
944
|
});
|
805
|
-
if ((flags & 1 /* isElementConstructor */)) {
|
945
|
+
if ((flags & 1 /* PROXY_FLAGS.isElementConstructor */)) {
|
806
946
|
const attrNameToPropName = new Map();
|
807
947
|
prototype.attributeChangedCallback = function (attrName, _oldValue, newValue) {
|
808
948
|
plt.jmp(() => {
|
@@ -858,7 +998,7 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
858
998
|
// create an array of attributes to observe
|
859
999
|
// and also create a map of html attribute name to js property name
|
860
1000
|
Cstr.observedAttributes = members
|
861
|
-
.filter(([_, m]) => m[0] & 15 /* HasAttribute */) // filter to only keep props that should match attributes
|
1001
|
+
.filter(([_, m]) => m[0] & 15 /* MEMBER_FLAGS.HasAttribute */) // filter to only keep props that should match attributes
|
862
1002
|
.map(([propName, m]) => {
|
863
1003
|
const attrName = m[1] || propName;
|
864
1004
|
attrNameToPropName.set(attrName, propName);
|
@@ -870,10 +1010,10 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
870
1010
|
};
|
871
1011
|
const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) => {
|
872
1012
|
// initializeComponent
|
873
|
-
if ((hostRef.$flags$ & 32 /* hasInitializedComponent */) === 0) {
|
1013
|
+
if ((hostRef.$flags$ & 32 /* HOST_FLAGS.hasInitializedComponent */) === 0) {
|
874
1014
|
{
|
875
1015
|
// we haven't initialized this element yet
|
876
|
-
hostRef.$flags$ |= 32 /* hasInitializedComponent */;
|
1016
|
+
hostRef.$flags$ |= 32 /* HOST_FLAGS.hasInitializedComponent */;
|
877
1017
|
// lazy loaded components
|
878
1018
|
// request the component's implementation to be
|
879
1019
|
// wired up with the host element
|
@@ -885,7 +1025,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
|
|
885
1025
|
endLoad();
|
886
1026
|
}
|
887
1027
|
if (!Cstr.isProxied) {
|
888
|
-
proxyComponent(Cstr, cmpMeta, 2 /* proxyState */);
|
1028
|
+
proxyComponent(Cstr, cmpMeta, 2 /* PROXY_FLAGS.proxyState */);
|
889
1029
|
Cstr.isProxied = true;
|
890
1030
|
}
|
891
1031
|
const endNewInstance = createTime('createInstance', cmpMeta.$tagName$);
|
@@ -893,7 +1033,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
|
|
893
1033
|
// but let's keep track of when we start and stop
|
894
1034
|
// so that the getters/setters don't incorrectly step on data
|
895
1035
|
{
|
896
|
-
hostRef.$flags$ |= 8 /* isConstructingInstance */;
|
1036
|
+
hostRef.$flags$ |= 8 /* HOST_FLAGS.isConstructingInstance */;
|
897
1037
|
}
|
898
1038
|
// construct the lazy-loaded component implementation
|
899
1039
|
// passing the hostRef is very important during
|
@@ -906,7 +1046,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
|
|
906
1046
|
consoleError(e);
|
907
1047
|
}
|
908
1048
|
{
|
909
|
-
hostRef.$flags$ &= ~8 /* isConstructingInstance */;
|
1049
|
+
hostRef.$flags$ &= ~8 /* HOST_FLAGS.isConstructingInstance */;
|
910
1050
|
}
|
911
1051
|
endNewInstance();
|
912
1052
|
}
|
@@ -916,7 +1056,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
|
|
916
1056
|
const scopeId = getScopeId(cmpMeta);
|
917
1057
|
if (!styles.has(scopeId)) {
|
918
1058
|
const endRegisterStyles = createTime('registerStyles', cmpMeta.$tagName$);
|
919
|
-
registerStyle(scopeId, style, !!(cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */));
|
1059
|
+
registerStyle(scopeId, style, !!(cmpMeta.$flags$ & 1 /* CMP_FLAGS.shadowDomEncapsulation */));
|
920
1060
|
endRegisterStyles();
|
921
1061
|
}
|
922
1062
|
}
|
@@ -938,13 +1078,13 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
|
|
938
1078
|
}
|
939
1079
|
};
|
940
1080
|
const connectedCallback = (elm) => {
|
941
|
-
if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {
|
1081
|
+
if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
|
942
1082
|
const hostRef = getHostRef(elm);
|
943
1083
|
const cmpMeta = hostRef.$cmpMeta$;
|
944
1084
|
const endConnected = createTime('connectedCallback', cmpMeta.$tagName$);
|
945
|
-
if (!(hostRef.$flags$ & 1 /* hasConnected */)) {
|
1085
|
+
if (!(hostRef.$flags$ & 1 /* HOST_FLAGS.hasConnected */)) {
|
946
1086
|
// first time this component has connected
|
947
|
-
hostRef.$flags$ |= 1 /* hasConnected */;
|
1087
|
+
hostRef.$flags$ |= 1 /* HOST_FLAGS.hasConnected */;
|
948
1088
|
{
|
949
1089
|
// find the first ancestor component (if there is one) and register
|
950
1090
|
// this component as one of the actively loading child components for its ancestor
|
@@ -964,7 +1104,7 @@ const connectedCallback = (elm) => {
|
|
964
1104
|
// https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties
|
965
1105
|
if (cmpMeta.$members$) {
|
966
1106
|
Object.entries(cmpMeta.$members$).map(([memberName, [memberFlags]]) => {
|
967
|
-
if (memberFlags & 31 /* Prop */ && elm.hasOwnProperty(memberName)) {
|
1107
|
+
if (memberFlags & 31 /* MEMBER_FLAGS.Prop */ && elm.hasOwnProperty(memberName)) {
|
968
1108
|
const value = elm[memberName];
|
969
1109
|
delete elm[memberName];
|
970
1110
|
elm[memberName] = value;
|
@@ -979,7 +1119,7 @@ const connectedCallback = (elm) => {
|
|
979
1119
|
}
|
980
1120
|
};
|
981
1121
|
const disconnectedCallback = (elm) => {
|
982
|
-
if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {
|
1122
|
+
if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
|
983
1123
|
getHostRef(elm);
|
984
1124
|
}
|
985
1125
|
};
|
@@ -1015,7 +1155,7 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
|
|
1015
1155
|
super(self);
|
1016
1156
|
self = this;
|
1017
1157
|
registerHost(self, cmpMeta);
|
1018
|
-
if (cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {
|
1158
|
+
if (cmpMeta.$flags$ & 1 /* CMP_FLAGS.shadowDomEncapsulation */) {
|
1019
1159
|
// this component is using shadow dom
|
1020
1160
|
// and this browser supports shadow dom
|
1021
1161
|
// add the read-only property "shadowRoot" to the host element
|
@@ -1050,7 +1190,7 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
|
|
1050
1190
|
cmpMeta.$lazyBundleId$ = lazyBundle[0];
|
1051
1191
|
if (!exclude.includes(tagName) && !customElements.get(tagName)) {
|
1052
1192
|
cmpTags.push(tagName);
|
1053
|
-
customElements.define(tagName, proxyComponent(HostElement, cmpMeta, 1 /* isElementConstructor */));
|
1193
|
+
customElements.define(tagName, proxyComponent(HostElement, cmpMeta, 1 /* PROXY_FLAGS.isElementConstructor */));
|
1054
1194
|
}
|
1055
1195
|
});
|
1056
1196
|
});
|
@@ -1072,7 +1212,7 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
|
|
1072
1212
|
// Fallback appLoad event
|
1073
1213
|
endBootstrap();
|
1074
1214
|
};
|
1075
|
-
const hostRefs = new WeakMap();
|
1215
|
+
const hostRefs = /*@__PURE__*/ new WeakMap();
|
1076
1216
|
const getHostRef = (ref) => hostRefs.get(ref);
|
1077
1217
|
const registerInstance = (lazyInstance, hostRef) => hostRefs.set((hostRef.$lazyInstance$ = lazyInstance), hostRef);
|
1078
1218
|
const registerHost = (elm, cmpMeta) => {
|
@@ -1113,14 +1253,14 @@ const loadModule = (cmpMeta, hostRef, hmrVersionId) => {
|
|
1113
1253
|
return importedModule[exportName];
|
1114
1254
|
}, consoleError);
|
1115
1255
|
};
|
1116
|
-
const styles = new Map();
|
1256
|
+
const styles = /*@__PURE__*/ new Map();
|
1117
1257
|
const queueDomReads = [];
|
1118
1258
|
const queueDomWrites = [];
|
1119
1259
|
const queueTask = (queue, write) => (cb) => {
|
1120
1260
|
queue.push(cb);
|
1121
1261
|
if (!queuePending) {
|
1122
1262
|
queuePending = true;
|
1123
|
-
if (write && plt.$flags$ & 4 /* queueSync */) {
|
1263
|
+
if (write && plt.$flags$ & 4 /* PLATFORM_FLAGS.queueSync */) {
|
1124
1264
|
nextTick(flush);
|
1125
1265
|
}
|
1126
1266
|
else {
|
package/dist/esm/loader.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { p as promiseResolve, b as bootstrapLazy } from './index-
|
1
|
+
import { p as promiseResolve, b as bootstrapLazy } from './index-db21c56b.js';
|
2
2
|
|
3
3
|
/*
|
4
|
-
Stencil Client Patch Esm v2.
|
4
|
+
Stencil Client Patch Esm v2.18.0 | MIT Licensed | https://stenciljs.com
|
5
5
|
*/
|
6
6
|
const patchEsm = () => {
|
7
7
|
return promiseResolve();
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import { p as promiseResolve, b as bootstrapLazy } from './index-
|
1
|
+
import { p as promiseResolve, b as bootstrapLazy } from './index-db21c56b.js';
|
2
2
|
|
3
3
|
/*
|
4
|
-
Stencil Client Patch Browser v2.
|
4
|
+
Stencil Client Patch Browser v2.18.0 | MIT Licensed | https://stenciljs.com
|
5
5
|
*/
|
6
6
|
const patchBrowser = () => {
|
7
7
|
const importMeta = import.meta.url;
|
@@ -1 +1 @@
|
|
1
|
-
import{r as t,h as e}from"./p-
|
1
|
+
import{r as t,h as e}from"./p-9746b0d9.js";const r=class{constructor(r){t(this,r),this.fields=[{label:"Date",prop:"date"},{label:"List Price",prop:"price"},{label:"% of Market",prop:"market"},{label:"ProfitTime Score",prop:"score"}],this.items=[],this.table=void 0,this.renderDetails=t=>{const{tags:r=[]}=t;return e("div",{class:"detailWrapper"},e("span",null,r.length," details..."),e("ul",null,r.map((t=>e("li",null,t)))))}}componentWillLoad(){this.items=[{date:"08/30/2020",price:"$24,000",market:"98%",score:"No Score",tags:["one","two","three"]},{date:"08/31/2020",price:"$24,000",market:"99%",score:"No Score",tags:["uno","duo"]},{date:"09/01/2020",price:"$27,000",market:"102%",score:"Platinum"},{date:"09/02/2020",price:"$27,423",market:"104%",score:"Platinum",tags:["dog","cat","fish","hamster"]},{date:"09/03/2020",price:"$27,521",market:"106%",score:"Platinum",tags:["4wd","sports"]},{date:"09/04/2020",price:"$27,687",market:"107%",score:"Platinum",tags:["leather","chrome"]}]}componentDidLoad(){const{table:t,items:e,fields:r}=this;t.data=e,t.fields=r,t.details=this.renderDetails}render(){return e("proto-table",{ref:t=>this.table=t})}};r.style=".detailWrapper{font-weight:100;font-size:13px;display:flex;flex-direction:column;justify-items:start;padding:5px;padding-left:30px}";const s={down:"M12 15.4L6.6 10 8 8.6l4 4 4-4 1.4 1.4z",up:"M16 15.4l-4-4-4 4L6.6 14 12 8.6l5.4 5.4z",left:"M14 17.4L8.6 12 14 6.6 15.4 8l-4 4 4 4z",right:"M10 17.4L8.6 16l4-4-4-4L10 6.6l5.4 5.4z",more:"M12 14a2 2 0 100-4 2 2 0 000 4zm-6 0a2 2 0 100-4 2 2 0 000 4zm12 0a2 2 0 100-4 2 2 0 000 4z","arrow-up":"M5.3 10.7l1.4 1.4L11 7.8V20h2V7.8l4.3 4.3 1.4-1.4L12 4z","arrow-down":"M18.7 13.3l-1.4-1.4-4.3 4.3V4h-2v12.2l-4.3-4.3-1.4 1.4L12 20z"},i={right:"show",down:"hide","arrow-up":"sort","arrow-down":"sort"},l=class{constructor(r){t(this,r),this.data=[],this.details=void 0,this.fields=[],this.expanded=void 0,this.sort=void 0,this.clicks=0,this.protoIcon=(t,r,l=24)=>{const o=s[t];return e("svg",{width:l,height:l,viewBox:"0 0 24 24",role:"img","aria-labelledby":"title"},e("title",null,(t=>i[t])(t)),e("g",{fill:r},e("path",{d:o})),e("path",{d:"M0 0h24v24H0z",fill:"none"}))},this.handleCellClick=(t,e)=>()=>{0===t&&(this.expanded=this.expanded===e?void 0:e)},this.handleSortClick=t=>()=>{this.sort===t?2===this.clicks?(this.clicks=0,this.sort=void 0):this.clicks=this.clicks+1:(this.sort=t,this.clicks=1)},this.iconFor=t=>this.sort===t&&2===this.clicks?"arrow-up":"arrow-down",this.header=()=>{const{fields:t,iconFor:r,protoIcon:s}=this;return e("div",{class:"header"},t.map((({label:t},i)=>{const l=i===this.sort?"headerCell sort":"headerCell",o=r(i);return e("div",{class:l,onClick:this.handleSortClick(i)},s(o),e("span",null,t))})))},this.row=(t,r)=>{const{fields:s,protoIcon:i}=this;return e("div",{class:"rowContainer"},e("div",{class:this.expanded===r?"row expanded":"row"},s.map((({prop:s},l)=>e("div",{class:l===this.sort?"cell sort":"cell",onClick:this.handleCellClick(l,r)},i(0===l&&this.details?this.expanded===r?"down":"right":"pad"),t[s])))),this.details&&this.expanded===r&&this.details(t))}}render(){const t=this.data||[];return e("div",{class:"table"},this.header(),t.map(((t,e)=>this.row(t,e))))}};l.style=".table{font-weight:400;font-size:13px;display:flex;flex-direction:column;width:100%;border:1px solid var(--clrs-navy);border-radius:2px}.table svg{fill:var(--clrs-navy)}.header{display:flex}.headerCell{flex-basis:100%;display:flex;align-items:center;justify-items:start;border-right:1px solid var(--clrs-navy);border-bottom:1px solid var(--clrs-navy);padding:5px;cursor:pointer}.headerCell svg g{display:none}.headerCell.sort svg g{display:inline}.headerCell:hover svg g{display:inline}.headerCell:hover{background-color:var(--clrs-silver)}.headerCell:last-child{border-right:none}.cell{flex-basis:100%;display:flex;align-items:center;justify-items:start;padding:5px}.cell:first-child svg{cursor:pointer}.sort{background-color:var(--cx-column-sort)}.row{display:flex;justify-items:stretch;width:100%}.row.expanded{background-color:var(--cx-row-expanded)}.row.expanded svg{fill:var(--clrs-red)}.row:hover{background-color:var(--cx-row-hover)}";export{r as demo_table,l as proto_table}
|
File without changes
|
@@ -1 +1 @@
|
|
1
|
-
import{p as
|
1
|
+
import{p as t,b as a}from"./p-9746b0d9.js";(()=>{const a=import.meta.url,e={};return""!==a&&(e.resourcesUrl=new URL(".",a).href),t(e)})().then((t=>a([["p-1f6f46a5",[[1,"demo-table"],[0,"proto-table",{data:[16],details:[8],fields:[16],expanded:[32],sort:[32],clicks:[32]}]]]],t)));
|
package/loader/package.json
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "proto-table-wc",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.327",
|
4
4
|
"description": "Stencil Component Starter",
|
5
5
|
"main": "dist/index.cjs.js",
|
6
6
|
"module": "dist/index.js",
|
@@ -27,13 +27,13 @@
|
|
27
27
|
"format": "prettier --write src"
|
28
28
|
},
|
29
29
|
"dependencies": {
|
30
|
-
"@stencil/core": "2.
|
30
|
+
"@stencil/core": "2.18.0"
|
31
31
|
},
|
32
32
|
"devDependencies": {
|
33
|
-
"@types/jest": "29.0.
|
33
|
+
"@types/jest": "29.0.1",
|
34
34
|
"@types/puppeteer": "5.4.6",
|
35
|
-
"cspell": "6.8.
|
36
|
-
"eslint": "8.23.
|
35
|
+
"cspell": "6.8.2",
|
36
|
+
"eslint": "8.23.1",
|
37
37
|
"jest": "29.0.3",
|
38
38
|
"prettier": "2.7.1",
|
39
39
|
"puppeteer": "17.1.3",
|