pome-ui 2.0.0-preview52 → 2.0.0-preview54

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pome-ui",
3
- "version": "2.0.0-preview52",
3
+ "version": "2.0.0-preview54",
4
4
  "description": "Front-end MVC library",
5
5
  "main": "pome-ui.js",
6
6
  "bin": {
package/pome-skeleton.css CHANGED
@@ -47,7 +47,7 @@
47
47
  ._pome-skeleton span._pome-sk-shimmer,
48
48
  ._pome-skeleton a._pome-sk-shimmer,
49
49
  ._pome-skeleton label._pome-sk-shimmer {
50
- display: inline-block !important;
50
+ display: inline-block;
51
51
  min-width: 100px !important;
52
52
  min-height: 1em !important;
53
53
  border-radius: 4px !important;
@@ -64,7 +64,7 @@
64
64
  ._pome-skeleton li._pome-sk-shimmer,
65
65
  ._pome-skeleton blockquote._pome-sk-shimmer,
66
66
  ._pome-skeleton figcaption._pome-sk-shimmer {
67
- display: block !important;
67
+ display: block;
68
68
  min-height: 1em !important;
69
69
  border-radius: 4px !important;
70
70
  }
@@ -92,7 +92,7 @@
92
92
  ._pome-skeleton input._pome-sk-shimmer,
93
93
  ._pome-skeleton textarea._pome-sk-shimmer,
94
94
  ._pome-skeleton select._pome-sk-shimmer {
95
- display: inline-block !important;
95
+ display: inline-block;
96
96
  min-width: 80px !important;
97
97
  min-height: 1em !important;
98
98
  border-radius: 4px !important;
package/pome-ui.dev.js CHANGED
@@ -18403,10 +18403,13 @@ function build(options, exports) {
18403
18403
  function _skeletonCleanupPass(node) {
18404
18404
  if (!node) return;
18405
18405
  if (node.nodeType === 1) {
18406
- // Strip Vue directives / bindings / event listeners
18406
+ // Strip Vue directives / bindings / event listeners.
18407
+ // Preserve v-show so CSS-driven responsive visibility still works
18408
+ // (the skeleton lives inside a Vue-processed template).
18407
18409
  var attrsToRemove = [];
18408
18410
  for (var i = 0; i < node.attributes.length; i++) {
18409
18411
  var attrName = node.attributes[i].name;
18412
+ if (attrName === 'v-show') continue; // keep v-show for responsive toggling
18410
18413
  if (attrName.indexOf('v-') === 0 || attrName[0] === '@' || attrName[0] === ':' || attrName[0] === '#') {
18411
18414
  attrsToRemove.push(attrName);
18412
18415
  }
@@ -19598,27 +19601,59 @@ function build(options, exports) {
19598
19601
  this.createdPromise = ret;
19599
19602
  if (options.skeleton) {
19600
19603
  var self = this;
19601
- // For skeleton + delayOpen: start the delayOpen animation
19602
- // IMMEDIATELY so the skeleton fades in right away.
19603
- if (options.delayOpen) {
19604
- self.$nextTick(function () {
19605
- requestAnimationFrame(function () {
19604
+ var skeletonShowing = false;
19605
+ var resolved = false;
19606
+ // Only activate the skeleton if the promise is still pending
19607
+ // after skeletonDelay ms. If it resolves faster, skip the
19608
+ // skeleton entirely to avoid a flash.
19609
+ var skeletonDelay = typeof options.skeletonDelay === 'number'
19610
+ ? options.skeletonDelay : 1000;
19611
+ var skeletonTimer = setTimeout(function () {
19612
+ if (resolved) return;
19613
+ skeletonShowing = true;
19614
+ self.pomeSkeletonLoading = true;
19615
+ // Skeleton is now visible. If delayOpen is also set, kick
19616
+ // off its animation so it's primed when skeleton disappears.
19617
+ if (options.delayOpen) {
19618
+ self.$nextTick(function () {
19606
19619
  requestAnimationFrame(function () {
19607
- self.pomeDelayOpening = false;
19620
+ requestAnimationFrame(function () {
19621
+ self.pomeDelayOpening = false;
19622
+ });
19608
19623
  });
19624
+ setTimeout(function () {
19625
+ self.pomeDelayOpened = false;
19626
+ }, options.delayOpen);
19609
19627
  });
19610
- setTimeout(function () {
19611
- self.pomeDelayOpened = false;
19612
- }, options.delayOpen);
19613
- });
19614
- }
19628
+ }
19629
+ }, skeletonDelay);
19615
19630
  ret.then(function () {
19631
+ resolved = true;
19632
+ clearTimeout(skeletonTimer);
19616
19633
  self.pomeSkeletonLoading = false;
19634
+ // Fast path: resolved before skeleton appeared – still need
19635
+ // to run the delayOpen animation now.
19636
+ if (!skeletonShowing && options.delayOpen) {
19637
+ self.$nextTick(function () {
19638
+ requestAnimationFrame(function () {
19639
+ requestAnimationFrame(function () {
19640
+ self.pomeDelayOpening = false;
19641
+ });
19642
+ });
19643
+ setTimeout(function () {
19644
+ self.pomeDelayOpened = false;
19645
+ }, options.delayOpen);
19646
+ });
19647
+ }
19617
19648
  }).catch(function (err) {
19649
+ resolved = true;
19650
+ clearTimeout(skeletonTimer);
19651
+ self.pomeSkeletonLoading = false;
19618
19652
  console.error('[SKELETON] created Promise REJECTED:', err);
19619
19653
  });
19620
19654
  }
19621
19655
  } else if (options.skeleton) {
19656
+ // Sync created – nothing to wait for, ensure skeleton is off.
19622
19657
  this.pomeSkeletonLoading = false;
19623
19658
  }
19624
19659
 
@@ -20130,7 +20165,9 @@ function build(options, exports) {
20130
20165
  var data = func1.call(this, app);
20131
20166
  var data2 = { pomeUiSubTitles: [] };
20132
20167
  if (opt.skeleton) {
20133
- data2.pomeSkeletonLoading = true;
20168
+ // Start hidden; skeleton is only shown after skeletonDelay ms
20169
+ // to avoid a flash when loading completes quickly.
20170
+ data2.pomeSkeletonLoading = false;
20134
20171
  }
20135
20172
  if (opt.skeleton && opt.delayOpen) {
20136
20173
  data2.pomeDelayOpened = true;