@wireweave/core 2.6.2-beta.0 → 2.7.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -7070,8 +7070,21 @@ function generateContainerStyles(prefix) {
7070
7070
  border-bottom: 1px solid var(--${prefix}-border);
7071
7071
  font-size: 16px;
7072
7072
  font-weight: 500;
7073
+ line-height: 1.5;
7073
7074
  cursor: pointer;
7074
7075
  text-align: left;
7076
+ outline: none;
7077
+ }
7078
+
7079
+ .${prefix}-accordion-header::after {
7080
+ content: '';
7081
+ width: 8px;
7082
+ height: 8px;
7083
+ border-right: 2px solid var(--${prefix}-muted);
7084
+ border-bottom: 2px solid var(--${prefix}-muted);
7085
+ transform: rotate(45deg);
7086
+ flex-shrink: 0;
7087
+ transition: transform 0.2s ease;
7075
7088
  }
7076
7089
 
7077
7090
  .${prefix}-accordion-header:hover {
@@ -7087,8 +7100,10 @@ function generateContainerStyles(prefix) {
7087
7100
  function generateTextStyles(prefix) {
7088
7101
  return `/* Text Components */
7089
7102
  .${prefix}-text {
7103
+ display: block;
7090
7104
  margin: 0;
7091
7105
  line-height: 1.5;
7106
+ white-space: normal;
7092
7107
  }
7093
7108
 
7094
7109
  .${prefix}-text-xs { font-size: 12px; }
@@ -7113,6 +7128,7 @@ function generateTextStyles(prefix) {
7113
7128
  .${prefix}-text-muted { color: var(--${prefix}-muted); }
7114
7129
 
7115
7130
  .${prefix}-title {
7131
+ display: block;
7116
7132
  margin: 0 0 8px 0;
7117
7133
  font-weight: 600;
7118
7134
  line-height: 1.25;
@@ -7131,6 +7147,7 @@ h5.${prefix}-title { font-size: 18px; }
7131
7147
  h6.${prefix}-title { font-size: 16px; }
7132
7148
 
7133
7149
  .${prefix}-link {
7150
+ display: inline;
7134
7151
  color: var(--${prefix}-fg);
7135
7152
  text-decoration: underline;
7136
7153
  cursor: pointer;
@@ -7165,6 +7182,7 @@ function generateInputStyles(_theme, prefix) {
7165
7182
  border-radius: var(--${prefix}-radius);
7166
7183
  font-family: inherit;
7167
7184
  font-size: 14px;
7185
+ line-height: 1.5;
7168
7186
  background: var(--${prefix}-bg);
7169
7187
  color: var(--${prefix}-fg);
7170
7188
  transition: border-color 0.15s ease;
@@ -7238,11 +7256,14 @@ function generateInputStyles(_theme, prefix) {
7238
7256
  }
7239
7257
 
7240
7258
  .${prefix}-textarea {
7259
+ display: block;
7241
7260
  min-height: 80px;
7242
7261
  resize: vertical;
7262
+ white-space: pre-wrap;
7243
7263
  }
7244
7264
 
7245
7265
  .${prefix}-select {
7266
+ cursor: pointer;
7246
7267
  appearance: none;
7247
7268
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
7248
7269
  background-repeat: no-repeat;
@@ -7260,6 +7281,7 @@ function generateInputStyles(_theme, prefix) {
7260
7281
 
7261
7282
  .${prefix}-checkbox input,
7262
7283
  .${prefix}-radio input {
7284
+ appearance: auto;
7263
7285
  width: 18px;
7264
7286
  height: 18px;
7265
7287
  margin: 0;
@@ -7315,12 +7337,14 @@ function generateInputStyles(_theme, prefix) {
7315
7337
  }
7316
7338
 
7317
7339
  .${prefix}-slider {
7340
+ display: block;
7318
7341
  appearance: none;
7319
7342
  width: 100%;
7320
7343
  height: 6px;
7321
7344
  background: var(--${prefix}-border);
7322
7345
  border-radius: 3px;
7323
7346
  outline: none;
7347
+ margin: 8px 0;
7324
7348
  }
7325
7349
 
7326
7350
  .${prefix}-slider::-webkit-slider-thumb {
@@ -7358,6 +7382,7 @@ function generateButtonStyles(_theme, prefix) {
7358
7382
  font-family: inherit;
7359
7383
  font-size: 14px;
7360
7384
  font-weight: 500;
7385
+ line-height: 1.5;
7361
7386
  cursor: pointer;
7362
7387
  transition: all 0.15s ease;
7363
7388
  white-space: nowrap;
@@ -7684,16 +7709,32 @@ svg.${prefix}-icon-xl { width: 32px; height: 32px; }
7684
7709
  function generateDataStyles(_theme, prefix) {
7685
7710
  return `/* Data Components */
7686
7711
  .${prefix}-table {
7712
+ display: table;
7687
7713
  width: 100%;
7688
7714
  border-collapse: collapse;
7689
7715
  border: 1px solid var(--${prefix}-border);
7690
7716
  font-size: 14px;
7691
7717
  }
7692
7718
 
7719
+ .${prefix}-table thead {
7720
+ display: table-header-group;
7721
+ }
7722
+
7723
+ .${prefix}-table tbody {
7724
+ display: table-row-group;
7725
+ }
7726
+
7727
+ .${prefix}-table tr {
7728
+ display: table-row;
7729
+ }
7730
+
7693
7731
  .${prefix}-table th,
7694
7732
  .${prefix}-table td {
7733
+ display: table-cell;
7695
7734
  padding: 10px 12px;
7696
7735
  text-align: left;
7736
+ line-height: 1.5;
7737
+ vertical-align: top;
7697
7738
  border-bottom: 1px solid var(--${prefix}-border);
7698
7739
  }
7699
7740
 
@@ -7716,6 +7757,7 @@ function generateDataStyles(_theme, prefix) {
7716
7757
  }
7717
7758
 
7718
7759
  .${prefix}-list {
7760
+ display: block;
7719
7761
  list-style: none;
7720
7762
  padding: 0;
7721
7763
  margin: 0;
@@ -7726,11 +7768,17 @@ function generateDataStyles(_theme, prefix) {
7726
7768
  padding-left: 24px;
7727
7769
  }
7728
7770
 
7771
+ .${prefix}-list-ordered .${prefix}-list-item {
7772
+ display: list-item;
7773
+ list-style: decimal;
7774
+ }
7775
+
7729
7776
  .${prefix}-list-none {
7730
7777
  list-style: none;
7731
7778
  }
7732
7779
 
7733
7780
  .${prefix}-list-item {
7781
+ display: list-item;
7734
7782
  padding: 8px 0;
7735
7783
  border-bottom: 1px solid var(--${prefix}-border);
7736
7784
  }
@@ -7764,6 +7812,7 @@ function generateFeedbackStyles(_theme, prefix) {
7764
7812
  background: transparent;
7765
7813
  border: none;
7766
7814
  font-size: 18px;
7815
+ line-height: 1;
7767
7816
  cursor: pointer;
7768
7817
  opacity: 0.5;
7769
7818
  }
@@ -7781,17 +7830,28 @@ function generateFeedbackStyles(_theme, prefix) {
7781
7830
  font-size: 14px;
7782
7831
  }
7783
7832
 
7833
+ .${prefix}-progress-wrapper {
7834
+ display: flex;
7835
+ align-items: center;
7836
+ gap: 12px;
7837
+ }
7838
+
7839
+ .${prefix}-progress-wrapper .${prefix}-progress {
7840
+ flex: 1;
7841
+ }
7842
+
7784
7843
  .${prefix}-progress {
7785
- height: 8px;
7786
- background: var(--${prefix}-border);
7787
- border-radius: 4px;
7844
+ height: 10px;
7845
+ background: #e0e0e0;
7846
+ border-radius: 5px;
7788
7847
  overflow: hidden;
7848
+ border: 1px solid var(--${prefix}-border);
7789
7849
  }
7790
7850
 
7791
7851
  .${prefix}-progress-bar {
7792
7852
  height: 100%;
7793
7853
  background: var(--${prefix}-fg);
7794
- border-radius: 4px;
7854
+ border-radius: 5px;
7795
7855
  transition: width 0.3s ease;
7796
7856
  }
7797
7857
 
@@ -7812,6 +7872,15 @@ function generateFeedbackStyles(_theme, prefix) {
7812
7872
  color: var(--${prefix}-muted);
7813
7873
  }
7814
7874
 
7875
+ .${prefix}-progress-value {
7876
+ font-size: 12px;
7877
+ font-weight: 500;
7878
+ color: var(--${prefix}-fg);
7879
+ white-space: nowrap;
7880
+ min-width: 32px;
7881
+ text-align: right;
7882
+ }
7883
+
7815
7884
  .${prefix}-spinner {
7816
7885
  display: inline-block;
7817
7886
  width: 20px;
@@ -7916,6 +7985,7 @@ function generateOverlayStyles(_theme, prefix) {
7916
7985
  border: none;
7917
7986
  text-align: left;
7918
7987
  font-size: 14px;
7988
+ line-height: 1.5;
7919
7989
  cursor: pointer;
7920
7990
  }
7921
7991
 
@@ -7954,6 +8024,7 @@ function generateNavigationStyles(_theme, prefix) {
7954
8024
  text-decoration: none;
7955
8025
  border-radius: var(--${prefix}-radius);
7956
8026
  font-size: 14px;
8027
+ line-height: 1.5;
7957
8028
  transition: background-color 0.15s ease;
7958
8029
  }
7959
8030
 
@@ -7987,6 +8058,7 @@ function generateNavigationStyles(_theme, prefix) {
7987
8058
  }
7988
8059
 
7989
8060
  .${prefix}-nav-divider {
8061
+ display: block;
7990
8062
  margin: 8px 0;
7991
8063
  border: none;
7992
8064
  border-top: 1px solid var(--${prefix}-border);
@@ -8008,6 +8080,7 @@ function generateNavigationStyles(_theme, prefix) {
8008
8080
  border: none;
8009
8081
  border-bottom: 2px solid transparent;
8010
8082
  font-size: 14px;
8083
+ line-height: 1.5;
8011
8084
  color: var(--${prefix}-fg);
8012
8085
  cursor: pointer;
8013
8086
  transition: all 0.15s ease;
@@ -8029,6 +8102,7 @@ function generateNavigationStyles(_theme, prefix) {
8029
8102
  }
8030
8103
 
8031
8104
  .${prefix}-breadcrumb-item {
8105
+ display: inline-flex;
8032
8106
  color: var(--${prefix}-fg);
8033
8107
  text-decoration: none;
8034
8108
  }
@@ -8178,6 +8252,7 @@ function generateDividerStyles(prefix = "wf") {
8178
8252
  return `
8179
8253
  /* Divider */
8180
8254
  .${prefix}-divider {
8255
+ display: block;
8181
8256
  margin: 8px 0;
8182
8257
  border: none;
8183
8258
  border-top: 1px solid var(--${prefix}-border);
@@ -8403,6 +8478,12 @@ function generateBaseStyles(prefix) {
8403
8478
  box-sizing: inherit;
8404
8479
  }
8405
8480
 
8481
+ /* Host CSS isolation reset - :where() keeps specificity at (0,0,0) so component styles always win */
8482
+ .${prefix}-page :where(input, button, select, textarea, a, table, thead, tbody, th, td, tr, ul, ol, li, label, hr, h1, h2, h3, h4, h5, h6, p, nav, fieldset, legend) {
8483
+ all: unset;
8484
+ box-sizing: border-box;
8485
+ }
8486
+
8406
8487
  /* Page with flex layout - enables justify/align for centering content */
8407
8488
  .${prefix}-page.${prefix}-flex,
8408
8489
  .${prefix}-page[class*="${prefix}-justify-"],
@@ -55782,12 +55863,9 @@ function renderProgress(node, ctx) {
55782
55863
  const percentage = Math.round(value / max * 100);
55783
55864
  const label = node.label ? `<span class="${ctx.prefix}-progress-label">${ctx.escapeHtml(node.label)}</span>` : "";
55784
55865
  if (node.indeterminate) {
55785
- return `<div class="${classes} ${ctx.prefix}-progress-indeterminate"${styleAttr} role="progressbar">${label}</div>`;
55866
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes} ${ctx.prefix}-progress-indeterminate" role="progressbar"><div class="${ctx.prefix}-progress-bar"></div></div></div>`;
55786
55867
  }
55787
- return `<div class="${classes}"${styleAttr} role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}">
55788
- ${label}
55789
- <div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div>
55790
- </div>`;
55868
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes}" role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}"><div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div></div><span class="${ctx.prefix}-progress-value">${percentage}%</span></div>`;
55791
55869
  }
55792
55870
  function renderSpinner(node, ctx) {
55793
55871
  const sizeResolved = resolveSizeValue(node.size, "spinner", ctx.prefix);
package/dist/index.js CHANGED
@@ -6930,8 +6930,21 @@ function generateContainerStyles(prefix) {
6930
6930
  border-bottom: 1px solid var(--${prefix}-border);
6931
6931
  font-size: 16px;
6932
6932
  font-weight: 500;
6933
+ line-height: 1.5;
6933
6934
  cursor: pointer;
6934
6935
  text-align: left;
6936
+ outline: none;
6937
+ }
6938
+
6939
+ .${prefix}-accordion-header::after {
6940
+ content: '';
6941
+ width: 8px;
6942
+ height: 8px;
6943
+ border-right: 2px solid var(--${prefix}-muted);
6944
+ border-bottom: 2px solid var(--${prefix}-muted);
6945
+ transform: rotate(45deg);
6946
+ flex-shrink: 0;
6947
+ transition: transform 0.2s ease;
6935
6948
  }
6936
6949
 
6937
6950
  .${prefix}-accordion-header:hover {
@@ -6947,8 +6960,10 @@ function generateContainerStyles(prefix) {
6947
6960
  function generateTextStyles(prefix) {
6948
6961
  return `/* Text Components */
6949
6962
  .${prefix}-text {
6963
+ display: block;
6950
6964
  margin: 0;
6951
6965
  line-height: 1.5;
6966
+ white-space: normal;
6952
6967
  }
6953
6968
 
6954
6969
  .${prefix}-text-xs { font-size: 12px; }
@@ -6973,6 +6988,7 @@ function generateTextStyles(prefix) {
6973
6988
  .${prefix}-text-muted { color: var(--${prefix}-muted); }
6974
6989
 
6975
6990
  .${prefix}-title {
6991
+ display: block;
6976
6992
  margin: 0 0 8px 0;
6977
6993
  font-weight: 600;
6978
6994
  line-height: 1.25;
@@ -6991,6 +7007,7 @@ h5.${prefix}-title { font-size: 18px; }
6991
7007
  h6.${prefix}-title { font-size: 16px; }
6992
7008
 
6993
7009
  .${prefix}-link {
7010
+ display: inline;
6994
7011
  color: var(--${prefix}-fg);
6995
7012
  text-decoration: underline;
6996
7013
  cursor: pointer;
@@ -7025,6 +7042,7 @@ function generateInputStyles(_theme, prefix) {
7025
7042
  border-radius: var(--${prefix}-radius);
7026
7043
  font-family: inherit;
7027
7044
  font-size: 14px;
7045
+ line-height: 1.5;
7028
7046
  background: var(--${prefix}-bg);
7029
7047
  color: var(--${prefix}-fg);
7030
7048
  transition: border-color 0.15s ease;
@@ -7098,11 +7116,14 @@ function generateInputStyles(_theme, prefix) {
7098
7116
  }
7099
7117
 
7100
7118
  .${prefix}-textarea {
7119
+ display: block;
7101
7120
  min-height: 80px;
7102
7121
  resize: vertical;
7122
+ white-space: pre-wrap;
7103
7123
  }
7104
7124
 
7105
7125
  .${prefix}-select {
7126
+ cursor: pointer;
7106
7127
  appearance: none;
7107
7128
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
7108
7129
  background-repeat: no-repeat;
@@ -7120,6 +7141,7 @@ function generateInputStyles(_theme, prefix) {
7120
7141
 
7121
7142
  .${prefix}-checkbox input,
7122
7143
  .${prefix}-radio input {
7144
+ appearance: auto;
7123
7145
  width: 18px;
7124
7146
  height: 18px;
7125
7147
  margin: 0;
@@ -7175,12 +7197,14 @@ function generateInputStyles(_theme, prefix) {
7175
7197
  }
7176
7198
 
7177
7199
  .${prefix}-slider {
7200
+ display: block;
7178
7201
  appearance: none;
7179
7202
  width: 100%;
7180
7203
  height: 6px;
7181
7204
  background: var(--${prefix}-border);
7182
7205
  border-radius: 3px;
7183
7206
  outline: none;
7207
+ margin: 8px 0;
7184
7208
  }
7185
7209
 
7186
7210
  .${prefix}-slider::-webkit-slider-thumb {
@@ -7218,6 +7242,7 @@ function generateButtonStyles(_theme, prefix) {
7218
7242
  font-family: inherit;
7219
7243
  font-size: 14px;
7220
7244
  font-weight: 500;
7245
+ line-height: 1.5;
7221
7246
  cursor: pointer;
7222
7247
  transition: all 0.15s ease;
7223
7248
  white-space: nowrap;
@@ -7544,16 +7569,32 @@ svg.${prefix}-icon-xl { width: 32px; height: 32px; }
7544
7569
  function generateDataStyles(_theme, prefix) {
7545
7570
  return `/* Data Components */
7546
7571
  .${prefix}-table {
7572
+ display: table;
7547
7573
  width: 100%;
7548
7574
  border-collapse: collapse;
7549
7575
  border: 1px solid var(--${prefix}-border);
7550
7576
  font-size: 14px;
7551
7577
  }
7552
7578
 
7579
+ .${prefix}-table thead {
7580
+ display: table-header-group;
7581
+ }
7582
+
7583
+ .${prefix}-table tbody {
7584
+ display: table-row-group;
7585
+ }
7586
+
7587
+ .${prefix}-table tr {
7588
+ display: table-row;
7589
+ }
7590
+
7553
7591
  .${prefix}-table th,
7554
7592
  .${prefix}-table td {
7593
+ display: table-cell;
7555
7594
  padding: 10px 12px;
7556
7595
  text-align: left;
7596
+ line-height: 1.5;
7597
+ vertical-align: top;
7557
7598
  border-bottom: 1px solid var(--${prefix}-border);
7558
7599
  }
7559
7600
 
@@ -7576,6 +7617,7 @@ function generateDataStyles(_theme, prefix) {
7576
7617
  }
7577
7618
 
7578
7619
  .${prefix}-list {
7620
+ display: block;
7579
7621
  list-style: none;
7580
7622
  padding: 0;
7581
7623
  margin: 0;
@@ -7586,11 +7628,17 @@ function generateDataStyles(_theme, prefix) {
7586
7628
  padding-left: 24px;
7587
7629
  }
7588
7630
 
7631
+ .${prefix}-list-ordered .${prefix}-list-item {
7632
+ display: list-item;
7633
+ list-style: decimal;
7634
+ }
7635
+
7589
7636
  .${prefix}-list-none {
7590
7637
  list-style: none;
7591
7638
  }
7592
7639
 
7593
7640
  .${prefix}-list-item {
7641
+ display: list-item;
7594
7642
  padding: 8px 0;
7595
7643
  border-bottom: 1px solid var(--${prefix}-border);
7596
7644
  }
@@ -7624,6 +7672,7 @@ function generateFeedbackStyles(_theme, prefix) {
7624
7672
  background: transparent;
7625
7673
  border: none;
7626
7674
  font-size: 18px;
7675
+ line-height: 1;
7627
7676
  cursor: pointer;
7628
7677
  opacity: 0.5;
7629
7678
  }
@@ -7641,17 +7690,28 @@ function generateFeedbackStyles(_theme, prefix) {
7641
7690
  font-size: 14px;
7642
7691
  }
7643
7692
 
7693
+ .${prefix}-progress-wrapper {
7694
+ display: flex;
7695
+ align-items: center;
7696
+ gap: 12px;
7697
+ }
7698
+
7699
+ .${prefix}-progress-wrapper .${prefix}-progress {
7700
+ flex: 1;
7701
+ }
7702
+
7644
7703
  .${prefix}-progress {
7645
- height: 8px;
7646
- background: var(--${prefix}-border);
7647
- border-radius: 4px;
7704
+ height: 10px;
7705
+ background: #e0e0e0;
7706
+ border-radius: 5px;
7648
7707
  overflow: hidden;
7708
+ border: 1px solid var(--${prefix}-border);
7649
7709
  }
7650
7710
 
7651
7711
  .${prefix}-progress-bar {
7652
7712
  height: 100%;
7653
7713
  background: var(--${prefix}-fg);
7654
- border-radius: 4px;
7714
+ border-radius: 5px;
7655
7715
  transition: width 0.3s ease;
7656
7716
  }
7657
7717
 
@@ -7672,6 +7732,15 @@ function generateFeedbackStyles(_theme, prefix) {
7672
7732
  color: var(--${prefix}-muted);
7673
7733
  }
7674
7734
 
7735
+ .${prefix}-progress-value {
7736
+ font-size: 12px;
7737
+ font-weight: 500;
7738
+ color: var(--${prefix}-fg);
7739
+ white-space: nowrap;
7740
+ min-width: 32px;
7741
+ text-align: right;
7742
+ }
7743
+
7675
7744
  .${prefix}-spinner {
7676
7745
  display: inline-block;
7677
7746
  width: 20px;
@@ -7776,6 +7845,7 @@ function generateOverlayStyles(_theme, prefix) {
7776
7845
  border: none;
7777
7846
  text-align: left;
7778
7847
  font-size: 14px;
7848
+ line-height: 1.5;
7779
7849
  cursor: pointer;
7780
7850
  }
7781
7851
 
@@ -7814,6 +7884,7 @@ function generateNavigationStyles(_theme, prefix) {
7814
7884
  text-decoration: none;
7815
7885
  border-radius: var(--${prefix}-radius);
7816
7886
  font-size: 14px;
7887
+ line-height: 1.5;
7817
7888
  transition: background-color 0.15s ease;
7818
7889
  }
7819
7890
 
@@ -7847,6 +7918,7 @@ function generateNavigationStyles(_theme, prefix) {
7847
7918
  }
7848
7919
 
7849
7920
  .${prefix}-nav-divider {
7921
+ display: block;
7850
7922
  margin: 8px 0;
7851
7923
  border: none;
7852
7924
  border-top: 1px solid var(--${prefix}-border);
@@ -7868,6 +7940,7 @@ function generateNavigationStyles(_theme, prefix) {
7868
7940
  border: none;
7869
7941
  border-bottom: 2px solid transparent;
7870
7942
  font-size: 14px;
7943
+ line-height: 1.5;
7871
7944
  color: var(--${prefix}-fg);
7872
7945
  cursor: pointer;
7873
7946
  transition: all 0.15s ease;
@@ -7889,6 +7962,7 @@ function generateNavigationStyles(_theme, prefix) {
7889
7962
  }
7890
7963
 
7891
7964
  .${prefix}-breadcrumb-item {
7965
+ display: inline-flex;
7892
7966
  color: var(--${prefix}-fg);
7893
7967
  text-decoration: none;
7894
7968
  }
@@ -8038,6 +8112,7 @@ function generateDividerStyles(prefix = "wf") {
8038
8112
  return `
8039
8113
  /* Divider */
8040
8114
  .${prefix}-divider {
8115
+ display: block;
8041
8116
  margin: 8px 0;
8042
8117
  border: none;
8043
8118
  border-top: 1px solid var(--${prefix}-border);
@@ -8263,6 +8338,12 @@ function generateBaseStyles(prefix) {
8263
8338
  box-sizing: inherit;
8264
8339
  }
8265
8340
 
8341
+ /* Host CSS isolation reset - :where() keeps specificity at (0,0,0) so component styles always win */
8342
+ .${prefix}-page :where(input, button, select, textarea, a, table, thead, tbody, th, td, tr, ul, ol, li, label, hr, h1, h2, h3, h4, h5, h6, p, nav, fieldset, legend) {
8343
+ all: unset;
8344
+ box-sizing: border-box;
8345
+ }
8346
+
8266
8347
  /* Page with flex layout - enables justify/align for centering content */
8267
8348
  .${prefix}-page.${prefix}-flex,
8268
8349
  .${prefix}-page[class*="${prefix}-justify-"],
@@ -55642,12 +55723,9 @@ function renderProgress(node, ctx) {
55642
55723
  const percentage = Math.round(value / max * 100);
55643
55724
  const label = node.label ? `<span class="${ctx.prefix}-progress-label">${ctx.escapeHtml(node.label)}</span>` : "";
55644
55725
  if (node.indeterminate) {
55645
- return `<div class="${classes} ${ctx.prefix}-progress-indeterminate"${styleAttr} role="progressbar">${label}</div>`;
55726
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes} ${ctx.prefix}-progress-indeterminate" role="progressbar"><div class="${ctx.prefix}-progress-bar"></div></div></div>`;
55646
55727
  }
55647
- return `<div class="${classes}"${styleAttr} role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}">
55648
- ${label}
55649
- <div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div>
55650
- </div>`;
55728
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes}" role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}"><div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div></div><span class="${ctx.prefix}-progress-value">${percentage}%</span></div>`;
55651
55729
  }
55652
55730
  function renderSpinner(node, ctx) {
55653
55731
  const sizeResolved = resolveSizeValue(node.size, "spinner", ctx.prefix);
package/dist/renderer.cjs CHANGED
@@ -219,8 +219,21 @@ function generateContainerStyles(prefix) {
219
219
  border-bottom: 1px solid var(--${prefix}-border);
220
220
  font-size: 16px;
221
221
  font-weight: 500;
222
+ line-height: 1.5;
222
223
  cursor: pointer;
223
224
  text-align: left;
225
+ outline: none;
226
+ }
227
+
228
+ .${prefix}-accordion-header::after {
229
+ content: '';
230
+ width: 8px;
231
+ height: 8px;
232
+ border-right: 2px solid var(--${prefix}-muted);
233
+ border-bottom: 2px solid var(--${prefix}-muted);
234
+ transform: rotate(45deg);
235
+ flex-shrink: 0;
236
+ transition: transform 0.2s ease;
224
237
  }
225
238
 
226
239
  .${prefix}-accordion-header:hover {
@@ -236,8 +249,10 @@ function generateContainerStyles(prefix) {
236
249
  function generateTextStyles(prefix) {
237
250
  return `/* Text Components */
238
251
  .${prefix}-text {
252
+ display: block;
239
253
  margin: 0;
240
254
  line-height: 1.5;
255
+ white-space: normal;
241
256
  }
242
257
 
243
258
  .${prefix}-text-xs { font-size: 12px; }
@@ -262,6 +277,7 @@ function generateTextStyles(prefix) {
262
277
  .${prefix}-text-muted { color: var(--${prefix}-muted); }
263
278
 
264
279
  .${prefix}-title {
280
+ display: block;
265
281
  margin: 0 0 8px 0;
266
282
  font-weight: 600;
267
283
  line-height: 1.25;
@@ -280,6 +296,7 @@ h5.${prefix}-title { font-size: 18px; }
280
296
  h6.${prefix}-title { font-size: 16px; }
281
297
 
282
298
  .${prefix}-link {
299
+ display: inline;
283
300
  color: var(--${prefix}-fg);
284
301
  text-decoration: underline;
285
302
  cursor: pointer;
@@ -314,6 +331,7 @@ function generateInputStyles(_theme, prefix) {
314
331
  border-radius: var(--${prefix}-radius);
315
332
  font-family: inherit;
316
333
  font-size: 14px;
334
+ line-height: 1.5;
317
335
  background: var(--${prefix}-bg);
318
336
  color: var(--${prefix}-fg);
319
337
  transition: border-color 0.15s ease;
@@ -387,11 +405,14 @@ function generateInputStyles(_theme, prefix) {
387
405
  }
388
406
 
389
407
  .${prefix}-textarea {
408
+ display: block;
390
409
  min-height: 80px;
391
410
  resize: vertical;
411
+ white-space: pre-wrap;
392
412
  }
393
413
 
394
414
  .${prefix}-select {
415
+ cursor: pointer;
395
416
  appearance: none;
396
417
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
397
418
  background-repeat: no-repeat;
@@ -409,6 +430,7 @@ function generateInputStyles(_theme, prefix) {
409
430
 
410
431
  .${prefix}-checkbox input,
411
432
  .${prefix}-radio input {
433
+ appearance: auto;
412
434
  width: 18px;
413
435
  height: 18px;
414
436
  margin: 0;
@@ -464,12 +486,14 @@ function generateInputStyles(_theme, prefix) {
464
486
  }
465
487
 
466
488
  .${prefix}-slider {
489
+ display: block;
467
490
  appearance: none;
468
491
  width: 100%;
469
492
  height: 6px;
470
493
  background: var(--${prefix}-border);
471
494
  border-radius: 3px;
472
495
  outline: none;
496
+ margin: 8px 0;
473
497
  }
474
498
 
475
499
  .${prefix}-slider::-webkit-slider-thumb {
@@ -507,6 +531,7 @@ function generateButtonStyles(_theme, prefix) {
507
531
  font-family: inherit;
508
532
  font-size: 14px;
509
533
  font-weight: 500;
534
+ line-height: 1.5;
510
535
  cursor: pointer;
511
536
  transition: all 0.15s ease;
512
537
  white-space: nowrap;
@@ -833,16 +858,32 @@ svg.${prefix}-icon-xl { width: 32px; height: 32px; }
833
858
  function generateDataStyles(_theme, prefix) {
834
859
  return `/* Data Components */
835
860
  .${prefix}-table {
861
+ display: table;
836
862
  width: 100%;
837
863
  border-collapse: collapse;
838
864
  border: 1px solid var(--${prefix}-border);
839
865
  font-size: 14px;
840
866
  }
841
867
 
868
+ .${prefix}-table thead {
869
+ display: table-header-group;
870
+ }
871
+
872
+ .${prefix}-table tbody {
873
+ display: table-row-group;
874
+ }
875
+
876
+ .${prefix}-table tr {
877
+ display: table-row;
878
+ }
879
+
842
880
  .${prefix}-table th,
843
881
  .${prefix}-table td {
882
+ display: table-cell;
844
883
  padding: 10px 12px;
845
884
  text-align: left;
885
+ line-height: 1.5;
886
+ vertical-align: top;
846
887
  border-bottom: 1px solid var(--${prefix}-border);
847
888
  }
848
889
 
@@ -865,6 +906,7 @@ function generateDataStyles(_theme, prefix) {
865
906
  }
866
907
 
867
908
  .${prefix}-list {
909
+ display: block;
868
910
  list-style: none;
869
911
  padding: 0;
870
912
  margin: 0;
@@ -875,11 +917,17 @@ function generateDataStyles(_theme, prefix) {
875
917
  padding-left: 24px;
876
918
  }
877
919
 
920
+ .${prefix}-list-ordered .${prefix}-list-item {
921
+ display: list-item;
922
+ list-style: decimal;
923
+ }
924
+
878
925
  .${prefix}-list-none {
879
926
  list-style: none;
880
927
  }
881
928
 
882
929
  .${prefix}-list-item {
930
+ display: list-item;
883
931
  padding: 8px 0;
884
932
  border-bottom: 1px solid var(--${prefix}-border);
885
933
  }
@@ -913,6 +961,7 @@ function generateFeedbackStyles(_theme, prefix) {
913
961
  background: transparent;
914
962
  border: none;
915
963
  font-size: 18px;
964
+ line-height: 1;
916
965
  cursor: pointer;
917
966
  opacity: 0.5;
918
967
  }
@@ -930,17 +979,28 @@ function generateFeedbackStyles(_theme, prefix) {
930
979
  font-size: 14px;
931
980
  }
932
981
 
982
+ .${prefix}-progress-wrapper {
983
+ display: flex;
984
+ align-items: center;
985
+ gap: 12px;
986
+ }
987
+
988
+ .${prefix}-progress-wrapper .${prefix}-progress {
989
+ flex: 1;
990
+ }
991
+
933
992
  .${prefix}-progress {
934
- height: 8px;
935
- background: var(--${prefix}-border);
936
- border-radius: 4px;
993
+ height: 10px;
994
+ background: #e0e0e0;
995
+ border-radius: 5px;
937
996
  overflow: hidden;
997
+ border: 1px solid var(--${prefix}-border);
938
998
  }
939
999
 
940
1000
  .${prefix}-progress-bar {
941
1001
  height: 100%;
942
1002
  background: var(--${prefix}-fg);
943
- border-radius: 4px;
1003
+ border-radius: 5px;
944
1004
  transition: width 0.3s ease;
945
1005
  }
946
1006
 
@@ -961,6 +1021,15 @@ function generateFeedbackStyles(_theme, prefix) {
961
1021
  color: var(--${prefix}-muted);
962
1022
  }
963
1023
 
1024
+ .${prefix}-progress-value {
1025
+ font-size: 12px;
1026
+ font-weight: 500;
1027
+ color: var(--${prefix}-fg);
1028
+ white-space: nowrap;
1029
+ min-width: 32px;
1030
+ text-align: right;
1031
+ }
1032
+
964
1033
  .${prefix}-spinner {
965
1034
  display: inline-block;
966
1035
  width: 20px;
@@ -1065,6 +1134,7 @@ function generateOverlayStyles(_theme, prefix) {
1065
1134
  border: none;
1066
1135
  text-align: left;
1067
1136
  font-size: 14px;
1137
+ line-height: 1.5;
1068
1138
  cursor: pointer;
1069
1139
  }
1070
1140
 
@@ -1103,6 +1173,7 @@ function generateNavigationStyles(_theme, prefix) {
1103
1173
  text-decoration: none;
1104
1174
  border-radius: var(--${prefix}-radius);
1105
1175
  font-size: 14px;
1176
+ line-height: 1.5;
1106
1177
  transition: background-color 0.15s ease;
1107
1178
  }
1108
1179
 
@@ -1136,6 +1207,7 @@ function generateNavigationStyles(_theme, prefix) {
1136
1207
  }
1137
1208
 
1138
1209
  .${prefix}-nav-divider {
1210
+ display: block;
1139
1211
  margin: 8px 0;
1140
1212
  border: none;
1141
1213
  border-top: 1px solid var(--${prefix}-border);
@@ -1157,6 +1229,7 @@ function generateNavigationStyles(_theme, prefix) {
1157
1229
  border: none;
1158
1230
  border-bottom: 2px solid transparent;
1159
1231
  font-size: 14px;
1232
+ line-height: 1.5;
1160
1233
  color: var(--${prefix}-fg);
1161
1234
  cursor: pointer;
1162
1235
  transition: all 0.15s ease;
@@ -1178,6 +1251,7 @@ function generateNavigationStyles(_theme, prefix) {
1178
1251
  }
1179
1252
 
1180
1253
  .${prefix}-breadcrumb-item {
1254
+ display: inline-flex;
1181
1255
  color: var(--${prefix}-fg);
1182
1256
  text-decoration: none;
1183
1257
  }
@@ -1327,6 +1401,7 @@ function generateDividerStyles(prefix = "wf") {
1327
1401
  return `
1328
1402
  /* Divider */
1329
1403
  .${prefix}-divider {
1404
+ display: block;
1330
1405
  margin: 8px 0;
1331
1406
  border: none;
1332
1407
  border-top: 1px solid var(--${prefix}-border);
@@ -1552,6 +1627,12 @@ function generateBaseStyles(prefix) {
1552
1627
  box-sizing: inherit;
1553
1628
  }
1554
1629
 
1630
+ /* Host CSS isolation reset - :where() keeps specificity at (0,0,0) so component styles always win */
1631
+ .${prefix}-page :where(input, button, select, textarea, a, table, thead, tbody, th, td, tr, ul, ol, li, label, hr, h1, h2, h3, h4, h5, h6, p, nav, fieldset, legend) {
1632
+ all: unset;
1633
+ box-sizing: border-box;
1634
+ }
1635
+
1555
1636
  /* Page with flex layout - enables justify/align for centering content */
1556
1637
  .${prefix}-page.${prefix}-flex,
1557
1638
  .${prefix}-page[class*="${prefix}-justify-"],
@@ -48902,12 +48983,9 @@ function renderProgress(node, ctx) {
48902
48983
  const percentage = Math.round(value / max * 100);
48903
48984
  const label = node.label ? `<span class="${ctx.prefix}-progress-label">${ctx.escapeHtml(node.label)}</span>` : "";
48904
48985
  if (node.indeterminate) {
48905
- return `<div class="${classes} ${ctx.prefix}-progress-indeterminate"${styleAttr} role="progressbar">${label}</div>`;
48986
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes} ${ctx.prefix}-progress-indeterminate" role="progressbar"><div class="${ctx.prefix}-progress-bar"></div></div></div>`;
48906
48987
  }
48907
- return `<div class="${classes}"${styleAttr} role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}">
48908
- ${label}
48909
- <div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div>
48910
- </div>`;
48988
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes}" role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}"><div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div></div><span class="${ctx.prefix}-progress-value">${percentage}%</span></div>`;
48911
48989
  }
48912
48990
  function renderSpinner(node, ctx) {
48913
48991
  const sizeResolved = resolveSizeValue(node.size, "spinner", ctx.prefix);
package/dist/renderer.js CHANGED
@@ -181,8 +181,21 @@ function generateContainerStyles(prefix) {
181
181
  border-bottom: 1px solid var(--${prefix}-border);
182
182
  font-size: 16px;
183
183
  font-weight: 500;
184
+ line-height: 1.5;
184
185
  cursor: pointer;
185
186
  text-align: left;
187
+ outline: none;
188
+ }
189
+
190
+ .${prefix}-accordion-header::after {
191
+ content: '';
192
+ width: 8px;
193
+ height: 8px;
194
+ border-right: 2px solid var(--${prefix}-muted);
195
+ border-bottom: 2px solid var(--${prefix}-muted);
196
+ transform: rotate(45deg);
197
+ flex-shrink: 0;
198
+ transition: transform 0.2s ease;
186
199
  }
187
200
 
188
201
  .${prefix}-accordion-header:hover {
@@ -198,8 +211,10 @@ function generateContainerStyles(prefix) {
198
211
  function generateTextStyles(prefix) {
199
212
  return `/* Text Components */
200
213
  .${prefix}-text {
214
+ display: block;
201
215
  margin: 0;
202
216
  line-height: 1.5;
217
+ white-space: normal;
203
218
  }
204
219
 
205
220
  .${prefix}-text-xs { font-size: 12px; }
@@ -224,6 +239,7 @@ function generateTextStyles(prefix) {
224
239
  .${prefix}-text-muted { color: var(--${prefix}-muted); }
225
240
 
226
241
  .${prefix}-title {
242
+ display: block;
227
243
  margin: 0 0 8px 0;
228
244
  font-weight: 600;
229
245
  line-height: 1.25;
@@ -242,6 +258,7 @@ h5.${prefix}-title { font-size: 18px; }
242
258
  h6.${prefix}-title { font-size: 16px; }
243
259
 
244
260
  .${prefix}-link {
261
+ display: inline;
245
262
  color: var(--${prefix}-fg);
246
263
  text-decoration: underline;
247
264
  cursor: pointer;
@@ -276,6 +293,7 @@ function generateInputStyles(_theme, prefix) {
276
293
  border-radius: var(--${prefix}-radius);
277
294
  font-family: inherit;
278
295
  font-size: 14px;
296
+ line-height: 1.5;
279
297
  background: var(--${prefix}-bg);
280
298
  color: var(--${prefix}-fg);
281
299
  transition: border-color 0.15s ease;
@@ -349,11 +367,14 @@ function generateInputStyles(_theme, prefix) {
349
367
  }
350
368
 
351
369
  .${prefix}-textarea {
370
+ display: block;
352
371
  min-height: 80px;
353
372
  resize: vertical;
373
+ white-space: pre-wrap;
354
374
  }
355
375
 
356
376
  .${prefix}-select {
377
+ cursor: pointer;
357
378
  appearance: none;
358
379
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23333' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
359
380
  background-repeat: no-repeat;
@@ -371,6 +392,7 @@ function generateInputStyles(_theme, prefix) {
371
392
 
372
393
  .${prefix}-checkbox input,
373
394
  .${prefix}-radio input {
395
+ appearance: auto;
374
396
  width: 18px;
375
397
  height: 18px;
376
398
  margin: 0;
@@ -426,12 +448,14 @@ function generateInputStyles(_theme, prefix) {
426
448
  }
427
449
 
428
450
  .${prefix}-slider {
451
+ display: block;
429
452
  appearance: none;
430
453
  width: 100%;
431
454
  height: 6px;
432
455
  background: var(--${prefix}-border);
433
456
  border-radius: 3px;
434
457
  outline: none;
458
+ margin: 8px 0;
435
459
  }
436
460
 
437
461
  .${prefix}-slider::-webkit-slider-thumb {
@@ -469,6 +493,7 @@ function generateButtonStyles(_theme, prefix) {
469
493
  font-family: inherit;
470
494
  font-size: 14px;
471
495
  font-weight: 500;
496
+ line-height: 1.5;
472
497
  cursor: pointer;
473
498
  transition: all 0.15s ease;
474
499
  white-space: nowrap;
@@ -795,16 +820,32 @@ svg.${prefix}-icon-xl { width: 32px; height: 32px; }
795
820
  function generateDataStyles(_theme, prefix) {
796
821
  return `/* Data Components */
797
822
  .${prefix}-table {
823
+ display: table;
798
824
  width: 100%;
799
825
  border-collapse: collapse;
800
826
  border: 1px solid var(--${prefix}-border);
801
827
  font-size: 14px;
802
828
  }
803
829
 
830
+ .${prefix}-table thead {
831
+ display: table-header-group;
832
+ }
833
+
834
+ .${prefix}-table tbody {
835
+ display: table-row-group;
836
+ }
837
+
838
+ .${prefix}-table tr {
839
+ display: table-row;
840
+ }
841
+
804
842
  .${prefix}-table th,
805
843
  .${prefix}-table td {
844
+ display: table-cell;
806
845
  padding: 10px 12px;
807
846
  text-align: left;
847
+ line-height: 1.5;
848
+ vertical-align: top;
808
849
  border-bottom: 1px solid var(--${prefix}-border);
809
850
  }
810
851
 
@@ -827,6 +868,7 @@ function generateDataStyles(_theme, prefix) {
827
868
  }
828
869
 
829
870
  .${prefix}-list {
871
+ display: block;
830
872
  list-style: none;
831
873
  padding: 0;
832
874
  margin: 0;
@@ -837,11 +879,17 @@ function generateDataStyles(_theme, prefix) {
837
879
  padding-left: 24px;
838
880
  }
839
881
 
882
+ .${prefix}-list-ordered .${prefix}-list-item {
883
+ display: list-item;
884
+ list-style: decimal;
885
+ }
886
+
840
887
  .${prefix}-list-none {
841
888
  list-style: none;
842
889
  }
843
890
 
844
891
  .${prefix}-list-item {
892
+ display: list-item;
845
893
  padding: 8px 0;
846
894
  border-bottom: 1px solid var(--${prefix}-border);
847
895
  }
@@ -875,6 +923,7 @@ function generateFeedbackStyles(_theme, prefix) {
875
923
  background: transparent;
876
924
  border: none;
877
925
  font-size: 18px;
926
+ line-height: 1;
878
927
  cursor: pointer;
879
928
  opacity: 0.5;
880
929
  }
@@ -892,17 +941,28 @@ function generateFeedbackStyles(_theme, prefix) {
892
941
  font-size: 14px;
893
942
  }
894
943
 
944
+ .${prefix}-progress-wrapper {
945
+ display: flex;
946
+ align-items: center;
947
+ gap: 12px;
948
+ }
949
+
950
+ .${prefix}-progress-wrapper .${prefix}-progress {
951
+ flex: 1;
952
+ }
953
+
895
954
  .${prefix}-progress {
896
- height: 8px;
897
- background: var(--${prefix}-border);
898
- border-radius: 4px;
955
+ height: 10px;
956
+ background: #e0e0e0;
957
+ border-radius: 5px;
899
958
  overflow: hidden;
959
+ border: 1px solid var(--${prefix}-border);
900
960
  }
901
961
 
902
962
  .${prefix}-progress-bar {
903
963
  height: 100%;
904
964
  background: var(--${prefix}-fg);
905
- border-radius: 4px;
965
+ border-radius: 5px;
906
966
  transition: width 0.3s ease;
907
967
  }
908
968
 
@@ -923,6 +983,15 @@ function generateFeedbackStyles(_theme, prefix) {
923
983
  color: var(--${prefix}-muted);
924
984
  }
925
985
 
986
+ .${prefix}-progress-value {
987
+ font-size: 12px;
988
+ font-weight: 500;
989
+ color: var(--${prefix}-fg);
990
+ white-space: nowrap;
991
+ min-width: 32px;
992
+ text-align: right;
993
+ }
994
+
926
995
  .${prefix}-spinner {
927
996
  display: inline-block;
928
997
  width: 20px;
@@ -1027,6 +1096,7 @@ function generateOverlayStyles(_theme, prefix) {
1027
1096
  border: none;
1028
1097
  text-align: left;
1029
1098
  font-size: 14px;
1099
+ line-height: 1.5;
1030
1100
  cursor: pointer;
1031
1101
  }
1032
1102
 
@@ -1065,6 +1135,7 @@ function generateNavigationStyles(_theme, prefix) {
1065
1135
  text-decoration: none;
1066
1136
  border-radius: var(--${prefix}-radius);
1067
1137
  font-size: 14px;
1138
+ line-height: 1.5;
1068
1139
  transition: background-color 0.15s ease;
1069
1140
  }
1070
1141
 
@@ -1098,6 +1169,7 @@ function generateNavigationStyles(_theme, prefix) {
1098
1169
  }
1099
1170
 
1100
1171
  .${prefix}-nav-divider {
1172
+ display: block;
1101
1173
  margin: 8px 0;
1102
1174
  border: none;
1103
1175
  border-top: 1px solid var(--${prefix}-border);
@@ -1119,6 +1191,7 @@ function generateNavigationStyles(_theme, prefix) {
1119
1191
  border: none;
1120
1192
  border-bottom: 2px solid transparent;
1121
1193
  font-size: 14px;
1194
+ line-height: 1.5;
1122
1195
  color: var(--${prefix}-fg);
1123
1196
  cursor: pointer;
1124
1197
  transition: all 0.15s ease;
@@ -1140,6 +1213,7 @@ function generateNavigationStyles(_theme, prefix) {
1140
1213
  }
1141
1214
 
1142
1215
  .${prefix}-breadcrumb-item {
1216
+ display: inline-flex;
1143
1217
  color: var(--${prefix}-fg);
1144
1218
  text-decoration: none;
1145
1219
  }
@@ -1289,6 +1363,7 @@ function generateDividerStyles(prefix = "wf") {
1289
1363
  return `
1290
1364
  /* Divider */
1291
1365
  .${prefix}-divider {
1366
+ display: block;
1292
1367
  margin: 8px 0;
1293
1368
  border: none;
1294
1369
  border-top: 1px solid var(--${prefix}-border);
@@ -1514,6 +1589,12 @@ function generateBaseStyles(prefix) {
1514
1589
  box-sizing: inherit;
1515
1590
  }
1516
1591
 
1592
+ /* Host CSS isolation reset - :where() keeps specificity at (0,0,0) so component styles always win */
1593
+ .${prefix}-page :where(input, button, select, textarea, a, table, thead, tbody, th, td, tr, ul, ol, li, label, hr, h1, h2, h3, h4, h5, h6, p, nav, fieldset, legend) {
1594
+ all: unset;
1595
+ box-sizing: border-box;
1596
+ }
1597
+
1517
1598
  /* Page with flex layout - enables justify/align for centering content */
1518
1599
  .${prefix}-page.${prefix}-flex,
1519
1600
  .${prefix}-page[class*="${prefix}-justify-"],
@@ -48864,12 +48945,9 @@ function renderProgress(node, ctx) {
48864
48945
  const percentage = Math.round(value / max * 100);
48865
48946
  const label = node.label ? `<span class="${ctx.prefix}-progress-label">${ctx.escapeHtml(node.label)}</span>` : "";
48866
48947
  if (node.indeterminate) {
48867
- return `<div class="${classes} ${ctx.prefix}-progress-indeterminate"${styleAttr} role="progressbar">${label}</div>`;
48948
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes} ${ctx.prefix}-progress-indeterminate" role="progressbar"><div class="${ctx.prefix}-progress-bar"></div></div></div>`;
48868
48949
  }
48869
- return `<div class="${classes}"${styleAttr} role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}">
48870
- ${label}
48871
- <div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div>
48872
- </div>`;
48950
+ return `${label}<div class="${ctx.prefix}-progress-wrapper"${styleAttr}><div class="${classes}" role="progressbar" aria-valuenow="${value}" aria-valuemin="0" aria-valuemax="${max}"><div class="${ctx.prefix}-progress-bar" style="width: ${percentage}%"></div></div><span class="${ctx.prefix}-progress-value">${percentage}%</span></div>`;
48873
48951
  }
48874
48952
  function renderSpinner(node, ctx) {
48875
48953
  const sizeResolved = resolveSizeValue(node.size, "spinner", ctx.prefix);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wireweave/core",
3
- "version": "2.6.2-beta.0",
3
+ "version": "2.7.0-beta.0",
4
4
  "description": "Core parser and renderer for wireweave",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -32,16 +32,21 @@
32
32
  "build": "pnpm build:grammar && pnpm build:ts",
33
33
  "test": "vitest run",
34
34
  "test:watch": "vitest",
35
+ "storybook": "storybook dev -p 6006",
36
+ "build-storybook": "storybook build",
35
37
  "clean": "rm -rf dist",
36
38
  "release": "release-it"
37
39
  },
38
40
  "devDependencies": {
39
41
  "@release-it/conventional-changelog": "^10.0.4",
42
+ "@storybook/html": "^10.2.18",
43
+ "@storybook/html-vite": "^10.2.18",
40
44
  "@types/node": "^25.0.8",
41
45
  "@vitest/coverage-v8": "^3.2.4",
42
46
  "lucide": "^0.562.0",
43
47
  "peggy": "^5.0.0",
44
48
  "release-it": "^19.2.3",
49
+ "storybook": "^10.2.18",
45
50
  "tsup": "^8.3.5",
46
51
  "typescript": "^5.7.2",
47
52
  "vitest": "^3.1.1"