@sentropic/design-system-vue 0.9.0 → 0.11.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/styles.css CHANGED
@@ -2395,6 +2395,14 @@
2395
2395
  .st-forceGraph__node { transition: opacity 120ms ease; }
2396
2396
  .st-forceGraph__node--dim { opacity: 0.3; }
2397
2397
 
2398
+ /* During a merge the opacity/transform are driven per-frame via rAF, so the
2399
+ CSS transitions are disabled to avoid a lag that would smear the glide. The
2400
+ fading/masked `from` node is also taken out of hit-testing so the invisible
2401
+ node cannot be hovered, focused or clicked. */
2402
+ .st-forceGraph__node--merging,
2403
+ .st-forceGraph__edge--merging { transition: none; }
2404
+ .st-forceGraph__node--merging { pointer-events: none; }
2405
+
2398
2406
  .st-forceGraph__dot {
2399
2407
  cursor: pointer;
2400
2408
  fill-opacity: 0.9;
@@ -8106,3 +8114,167 @@
8106
8114
  animation: none;
8107
8115
  }
8108
8116
  }
8117
+
8118
+ .st-portal {
8119
+ display: contents;
8120
+ }
8121
+
8122
+ .st-popper {
8123
+ z-index: var(--st-component-popover-zIndex, 80);
8124
+ }
8125
+
8126
+ .st-popper__arrow {
8127
+ position: absolute;
8128
+ width: 0.5rem;
8129
+ height: 0.5rem;
8130
+ background: inherit;
8131
+ border: inherit;
8132
+ transform: rotate(45deg);
8133
+ pointer-events: none;
8134
+ }
8135
+
8136
+ .st-popper__arrow[data-popper-side="bottom"] {
8137
+ top: -0.25rem;
8138
+ left: 50%;
8139
+ margin-left: -0.25rem;
8140
+ }
8141
+
8142
+ .st-popper__arrow[data-popper-side="top"] {
8143
+ bottom: -0.25rem;
8144
+ left: 50%;
8145
+ margin-left: -0.25rem;
8146
+ }
8147
+
8148
+ .st-popper__arrow[data-popper-side="right"] {
8149
+ left: -0.25rem;
8150
+ top: 50%;
8151
+ margin-top: -0.25rem;
8152
+ }
8153
+
8154
+ .st-popper__arrow[data-popper-side="left"] {
8155
+ right: -0.25rem;
8156
+ top: 50%;
8157
+ margin-top: -0.25rem;
8158
+ }
8159
+
8160
+ /* ---------------------------------------------------------------------------
8161
+ SelectableRow — compact, full-width selectable list/rail row. By DEFAULT the
8162
+ selected state is just two calm signals — a tinted surface + accented text —
8163
+ deliberately NOT the off-theme "boudin box" (inset box-shadow + heavy rounded
8164
+ border) it replaces, and NOT a reflow-causing font-weight bump. The fine left
8165
+ accent bar is OPT-IN via the `accentBar` prop / `--accentBar` modifier.
8166
+ --------------------------------------------------------------------------- */
8167
+ .st-selectableRow {
8168
+ align-items: center;
8169
+ background: transparent;
8170
+ border-radius: var(--st-radius-sm, 0.25rem);
8171
+ box-sizing: border-box;
8172
+ color: var(--st-semantic-text-secondary, #475569);
8173
+ cursor: pointer;
8174
+ display: flex;
8175
+ gap: var(--st-spacing-2, 0.5rem);
8176
+ padding: 0.5rem 0.75rem;
8177
+ position: relative;
8178
+ text-align: left;
8179
+ transition:
8180
+ background-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
8181
+ color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
8182
+ user-select: none;
8183
+ width: 100%;
8184
+ }
8185
+
8186
+ /* Opt-in accent bar: reserve the 2px gutter only when enabled so text never
8187
+ shifts on selection. */
8188
+ .st-selectableRow--accentBar {
8189
+ padding-left: calc(0.75rem - 2px);
8190
+ border-left: 2px solid transparent;
8191
+ }
8192
+
8193
+ .st-selectableRow:hover:not(.st-selectableRow--disabled):not(.st-selectableRow--selected) {
8194
+ background: var(
8195
+ --st-component-control-hoverBackground,
8196
+ var(--st-semantic-surface-subtle, #f8fafc)
8197
+ );
8198
+ color: var(--st-semantic-text-primary, #0f172a);
8199
+ }
8200
+
8201
+ /* Focus ring as an EXTERNAL offset (not inset) so it reads as a focus
8202
+ affordance around the row rather than an inner stroke. */
8203
+ .st-selectableRow:focus-visible {
8204
+ outline: 2px solid var(--st-semantic-border-interactive, var(--st-semantic-action-primary));
8205
+ outline-offset: 2px;
8206
+ }
8207
+
8208
+ /* Selected: two signals by default — tinted surface + accented (contrast-safe)
8209
+ text. The token values carry a flat fallback; the inline color-mix is only a
8210
+ last-resort default when the token is unset. */
8211
+ .st-selectableRow--selected {
8212
+ background: var(
8213
+ --st-component-selectableRow-selectedBackground,
8214
+ color-mix(in oklch, var(--st-semantic-action-primary, #2563eb) 12%, transparent)
8215
+ );
8216
+ color: var(
8217
+ --st-component-selectableRow-selectedText,
8218
+ color-mix(in oklch, var(--st-semantic-action-primary, #2563eb) 78%, black)
8219
+ );
8220
+ }
8221
+
8222
+ /* The left accent bar paints only when opt-in AND selected. */
8223
+ .st-selectableRow--accentBar.st-selectableRow--selected {
8224
+ border-left-color: var(
8225
+ --st-component-selectableRow-selectedAccent,
8226
+ var(--st-semantic-action-primary, #2563eb)
8227
+ );
8228
+ }
8229
+
8230
+ /* color-mix fallback: engines without color-mix() get a flat tinted surface +
8231
+ a solid accent text from the resolved tokens' plain values. */
8232
+ @supports not (color: color-mix(in oklch, red, blue)) {
8233
+ .st-selectableRow--selected {
8234
+ background: var(
8235
+ --st-component-selectableRow-selectedBackground,
8236
+ var(--st-semantic-surface-subtle, #eef2ff)
8237
+ );
8238
+ color: var(
8239
+ --st-component-selectableRow-selectedText,
8240
+ var(--st-semantic-action-primary, #1d4ed8)
8241
+ );
8242
+ }
8243
+ }
8244
+
8245
+ .st-selectableRow--disabled {
8246
+ cursor: not-allowed;
8247
+ opacity: 0.55;
8248
+ }
8249
+
8250
+ .st-selectableRow__leading,
8251
+ .st-selectableRow__trailing {
8252
+ align-items: center;
8253
+ display: inline-flex;
8254
+ flex: 0 0 auto;
8255
+ }
8256
+
8257
+ .st-selectableRow__content {
8258
+ flex: 1 1 auto;
8259
+ min-width: 0;
8260
+ overflow: hidden;
8261
+ text-overflow: ellipsis;
8262
+ white-space: nowrap;
8263
+ }
8264
+
8265
+ @media (prefers-reduced-motion: reduce) {
8266
+ .st-selectableRow {
8267
+ transition: none;
8268
+ }
8269
+ }
8270
+
8271
+ /* ---------------------------------------------------------------------------
8272
+ SelectableList — accessible listbox wrapper owning a roving tabindex for its
8273
+ SelectableRow children (role=listbox → option).
8274
+ --------------------------------------------------------------------------- */
8275
+ .st-selectableList {
8276
+ display: flex;
8277
+ flex-direction: column;
8278
+ gap: var(--st-spacing-1, 0.25rem);
8279
+ width: 100%;
8280
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/design-system-vue",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Vue 3 components for the Sentropic design system.",
5
5
  "type": "module",
6
6
  "publishConfig": {