@dialpad/dialtone-css 8.80.0-next.4 → 8.80.0-next.5

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.
Files changed (127) hide show
  1. package/lib/build/js/dialtone_migrate_chip_interactive/index.mjs +367 -0
  2. package/lib/build/js/dialtone_migrate_chip_interactive/test.mjs +244 -0
  3. package/lib/build/js/dialtone_migrate_scrollbar_always/index.mjs +225 -0
  4. package/lib/build/less/components/box.less +2 -0
  5. package/lib/build/less/components/link.less +14 -19
  6. package/lib/build/less/components/notice.less +1 -1
  7. package/lib/build/less/components/scrollbar.less +22 -0
  8. package/lib/build/less/dialtone.less +7 -0
  9. package/lib/dist/dialtone-default-theme.css +316 -293
  10. package/lib/dist/dialtone-default-theme.min.css +1 -1
  11. package/lib/dist/dialtone-docs.json +1 -1
  12. package/lib/dist/dialtone.css +32 -15
  13. package/lib/dist/dialtone.min.css +1 -1
  14. package/lib/dist/js/dialtone_migrate_chip_interactive/index.mjs +367 -0
  15. package/lib/dist/js/dialtone_migrate_chip_interactive/test.mjs +244 -0
  16. package/lib/dist/js/dialtone_migrate_scrollbar_always/index.mjs +225 -0
  17. package/lib/dist/tokens/tokens-101-dark.css +141 -135
  18. package/lib/dist/tokens/tokens-101-light.css +164 -158
  19. package/lib/dist/tokens/tokens-102-dark.css +141 -135
  20. package/lib/dist/tokens/tokens-102-light.css +164 -158
  21. package/lib/dist/tokens/tokens-103-dark.css +141 -135
  22. package/lib/dist/tokens/tokens-103-light.css +164 -158
  23. package/lib/dist/tokens/tokens-104-dark.css +141 -135
  24. package/lib/dist/tokens/tokens-104-light.css +164 -158
  25. package/lib/dist/tokens/tokens-105-dark.css +141 -135
  26. package/lib/dist/tokens/tokens-105-light.css +164 -158
  27. package/lib/dist/tokens/tokens-106-dark.css +141 -135
  28. package/lib/dist/tokens/tokens-106-light.css +164 -158
  29. package/lib/dist/tokens/tokens-107-dark.css +141 -135
  30. package/lib/dist/tokens/tokens-107-light.css +164 -158
  31. package/lib/dist/tokens/tokens-108-dark.css +141 -135
  32. package/lib/dist/tokens/tokens-108-light.css +164 -158
  33. package/lib/dist/tokens/tokens-109-dark.css +141 -135
  34. package/lib/dist/tokens/tokens-109-light.css +164 -158
  35. package/lib/dist/tokens/tokens-110-dark.css +141 -135
  36. package/lib/dist/tokens/tokens-110-light.css +164 -158
  37. package/lib/dist/tokens/tokens-111-dark.css +141 -135
  38. package/lib/dist/tokens/tokens-111-light.css +164 -158
  39. package/lib/dist/tokens/tokens-112-dark.css +141 -135
  40. package/lib/dist/tokens/tokens-112-light.css +164 -158
  41. package/lib/dist/tokens/tokens-113-dark.css +141 -135
  42. package/lib/dist/tokens/tokens-113-light.css +164 -158
  43. package/lib/dist/tokens/tokens-114-dark.css +141 -135
  44. package/lib/dist/tokens/tokens-114-light.css +164 -158
  45. package/lib/dist/tokens/tokens-115-dark.css +141 -135
  46. package/lib/dist/tokens/tokens-115-light.css +164 -158
  47. package/lib/dist/tokens/tokens-116-dark.css +141 -135
  48. package/lib/dist/tokens/tokens-116-light.css +164 -158
  49. package/lib/dist/tokens/tokens-117-dark.css +141 -135
  50. package/lib/dist/tokens/tokens-117-light.css +164 -158
  51. package/lib/dist/tokens/tokens-118-dark.css +141 -135
  52. package/lib/dist/tokens/tokens-118-light.css +164 -158
  53. package/lib/dist/tokens/tokens-119-dark.css +141 -135
  54. package/lib/dist/tokens/tokens-119-light.css +164 -158
  55. package/lib/dist/tokens/tokens-120-dark.css +141 -135
  56. package/lib/dist/tokens/tokens-120-light.css +164 -158
  57. package/lib/dist/tokens/tokens-121-dark.css +141 -135
  58. package/lib/dist/tokens/tokens-121-light.css +164 -158
  59. package/lib/dist/tokens/tokens-122-dark.css +141 -135
  60. package/lib/dist/tokens/tokens-122-light.css +164 -158
  61. package/lib/dist/tokens/tokens-123-dark.css +141 -135
  62. package/lib/dist/tokens/tokens-123-light.css +164 -158
  63. package/lib/dist/tokens/tokens-124-dark.css +141 -135
  64. package/lib/dist/tokens/tokens-124-light.css +164 -158
  65. package/lib/dist/tokens/tokens-125-dark.css +141 -135
  66. package/lib/dist/tokens/tokens-125-light.css +164 -158
  67. package/lib/dist/tokens/tokens-126-dark.css +141 -135
  68. package/lib/dist/tokens/tokens-126-light.css +164 -158
  69. package/lib/dist/tokens/tokens-127-dark.css +141 -135
  70. package/lib/dist/tokens/tokens-127-light.css +164 -158
  71. package/lib/dist/tokens/tokens-128-dark.css +141 -135
  72. package/lib/dist/tokens/tokens-128-light.css +164 -158
  73. package/lib/dist/tokens/tokens-129-dark.css +141 -135
  74. package/lib/dist/tokens/tokens-129-light.css +164 -158
  75. package/lib/dist/tokens/tokens-130-dark.css +141 -135
  76. package/lib/dist/tokens/tokens-130-light.css +164 -158
  77. package/lib/dist/tokens/tokens-131-dark.css +141 -135
  78. package/lib/dist/tokens/tokens-131-light.css +164 -158
  79. package/lib/dist/tokens/tokens-132-dark.css +141 -135
  80. package/lib/dist/tokens/tokens-132-light.css +164 -158
  81. package/lib/dist/tokens/tokens-133-dark.css +141 -135
  82. package/lib/dist/tokens/tokens-133-light.css +164 -158
  83. package/lib/dist/tokens/tokens-134-dark.css +141 -135
  84. package/lib/dist/tokens/tokens-134-light.css +164 -158
  85. package/lib/dist/tokens/tokens-135-dark.css +141 -135
  86. package/lib/dist/tokens/tokens-135-light.css +164 -158
  87. package/lib/dist/tokens/tokens-136-dark.css +141 -135
  88. package/lib/dist/tokens/tokens-136-light.css +164 -158
  89. package/lib/dist/tokens/tokens-137-dark.css +141 -135
  90. package/lib/dist/tokens/tokens-137-light.css +164 -158
  91. package/lib/dist/tokens/tokens-aegean-dark.css +164 -158
  92. package/lib/dist/tokens/tokens-aegean-light.css +184 -178
  93. package/lib/dist/tokens/tokens-base-dark.css +98 -98
  94. package/lib/dist/tokens/tokens-base-light.css +98 -98
  95. package/lib/dist/tokens/tokens-botany-dark.css +149 -143
  96. package/lib/dist/tokens/tokens-botany-light.css +171 -165
  97. package/lib/dist/tokens/tokens-buttercream-dark.css +148 -142
  98. package/lib/dist/tokens/tokens-buttercream-light.css +171 -165
  99. package/lib/dist/tokens/tokens-ceruleo-dark.css +164 -158
  100. package/lib/dist/tokens/tokens-ceruleo-light.css +184 -178
  101. package/lib/dist/tokens/tokens-contrast-high-dark.css +3 -3
  102. package/lib/dist/tokens/tokens-contrast-high-light.css +10 -10
  103. package/lib/dist/tokens/tokens-debug-dp.css +28 -22
  104. package/lib/dist/tokens/tokens-dp-dark.css +166 -160
  105. package/lib/dist/tokens/tokens-dp-light.css +186 -180
  106. package/lib/dist/tokens/tokens-expressive-dark.css +163 -157
  107. package/lib/dist/tokens/tokens-expressive-light.css +186 -180
  108. package/lib/dist/tokens/tokens-expressive-sm-dark.css +163 -157
  109. package/lib/dist/tokens/tokens-expressive-sm-light.css +186 -180
  110. package/lib/dist/tokens/tokens-high-desert-dark.css +144 -138
  111. package/lib/dist/tokens/tokens-high-desert-light.css +164 -158
  112. package/lib/dist/tokens/tokens-melon-dark.css +145 -139
  113. package/lib/dist/tokens/tokens-melon-light.css +165 -159
  114. package/lib/dist/tokens/tokens-plum-dark.css +153 -147
  115. package/lib/dist/tokens/tokens-plum-light.css +164 -158
  116. package/lib/dist/tokens/tokens-prota-deuter-dark.css +292 -262
  117. package/lib/dist/tokens/tokens-prota-deuter-light.css +315 -285
  118. package/lib/dist/tokens/tokens-sunflower-dark.css +154 -148
  119. package/lib/dist/tokens/tokens-sunflower-light.css +174 -168
  120. package/lib/dist/tokens/tokens-tmo-dark.css +165 -159
  121. package/lib/dist/tokens/tokens-tmo-light.css +185 -179
  122. package/lib/dist/tokens/tokens-trita-dark.css +239 -197
  123. package/lib/dist/tokens/tokens-trita-light.css +263 -221
  124. package/lib/dist/tokens/tokens-verdant-haze-dark.css +144 -138
  125. package/lib/dist/tokens/tokens-verdant-haze-light.css +164 -158
  126. package/lib/dist/tokens-docs.json +1 -1
  127. package/package.json +4 -2
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @fileoverview Migration script for v-dt-scrollbar :never → :always rename.
5
+ *
6
+ * DLT-3158 The `:never` directive argument was renamed to `:always` to reflect
7
+ * its actual meaning (always show the scrollbar, never auto-hide it).
8
+ * The `DtBox` `scrollbar="never"` prop value is similarly renamed to
9
+ * `scrollbar="always"`.
10
+ *
11
+ * This script:
12
+ * - Replaces `v-dt-scrollbar:never` with `v-dt-scrollbar:always` in .vue and .html files.
13
+ * - Replaces `scrollbar="never"` with `scrollbar="always"` (DtBox prop) in .vue files.
14
+ * - Replaces `:scrollbar="'never'"` and `scrollbar='never'` variants in .vue files.
15
+ *
16
+ * Usage:
17
+ * npx dialtone-migrate-scrollbar-always [options]
18
+ *
19
+ * Options:
20
+ * --cwd <path> Working directory (default: cwd)
21
+ * --dry-run Show changes without applying them
22
+ * --yes Apply all changes without prompting
23
+ * --help Show help
24
+ */
25
+
26
+ import fs from 'fs/promises';
27
+ import { realpathSync } from 'node:fs';
28
+ import path from 'path';
29
+ import readline from 'readline';
30
+ import { fileURLToPath } from 'node:url';
31
+
32
+ // ---------------------------------------------------------------------------
33
+ // Transform
34
+ // ---------------------------------------------------------------------------
35
+
36
+ /**
37
+ * Apply all renames to a single file's content.
38
+ * Returns the transformed string (may be identical to input if no matches).
39
+ */
40
+ export function transformContent (content) {
41
+ return content
42
+ // v-dt-scrollbar:never → v-dt-scrollbar:always
43
+ .replace(/v-dt-scrollbar:never\b/g, 'v-dt-scrollbar:always')
44
+ // DtBox scrollbar prop: match the entire opening <dt-box>/<DtBox> tag, rewrite only within it
45
+ .replace(/<(dt-box|DtBox)\b[\s\S]*?>/g, tag =>
46
+ tag
47
+ // scrollbar="never" → scrollbar="always" (unbound prop only; negative lookbehind excludes :scrollbar="never")
48
+ .replace(/(?<!:)\bscrollbar="never"/g, 'scrollbar="always"')
49
+ // scrollbar='never' → scrollbar='always' (unbound prop only)
50
+ .replace(/(?<!:)\bscrollbar='never'/g, 'scrollbar=\'always\'')
51
+ // :scrollbar="'never'" → :scrollbar="'always'"
52
+ .replace(/:scrollbar="'never'"/g, ':scrollbar="\'always\'"')
53
+ // :scrollbar="\"never\"" → :scrollbar="\"always\""
54
+ .replace(/:scrollbar='"never"'/g, ':scrollbar=\'"always"\''),
55
+ );
56
+ }
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // File walker
60
+ // ---------------------------------------------------------------------------
61
+
62
+ function isIgnoredPath (fullPath, ignore) {
63
+ const segments = fullPath.split(path.sep);
64
+ return ignore.some(ig => {
65
+ if (ig.includes('/')) {
66
+ const parts = ig.split('/');
67
+ for (let i = 0; i + parts.length <= segments.length; i++) {
68
+ if (parts.every((p, j) => segments[i + j] === p)) return true;
69
+ }
70
+ return false;
71
+ }
72
+ return segments.includes(ig);
73
+ });
74
+ }
75
+
76
+ async function findFiles (dir, extensions, ignore = []) {
77
+ const results = [];
78
+ async function walk (currentDir) {
79
+ let entries;
80
+ try {
81
+ entries = await fs.readdir(currentDir, { withFileTypes: true });
82
+ } catch {
83
+ return;
84
+ }
85
+ for (const entry of entries) {
86
+ const fullPath = path.join(currentDir, entry.name);
87
+ if (isIgnoredPath(fullPath, ignore)) continue;
88
+ if (entry.isDirectory()) {
89
+ await walk(fullPath);
90
+ } else if (entry.isFile() && extensions.some(ext => entry.name.endsWith(ext))) {
91
+ results.push(fullPath);
92
+ }
93
+ }
94
+ }
95
+ await walk(dir);
96
+ return results;
97
+ }
98
+
99
+ // ---------------------------------------------------------------------------
100
+ // CLI plumbing
101
+ // ---------------------------------------------------------------------------
102
+
103
+ function printHelp () {
104
+ console.log(`
105
+ Usage: npx dialtone-migrate-scrollbar-always [options]
106
+
107
+ Renames the v-dt-scrollbar ":never" directive argument to ":always" (DLT-3158).
108
+ Also renames the DtBox scrollbar="never" prop value to scrollbar="always".
109
+
110
+ Options:
111
+ --cwd <path> Working directory (default: cwd)
112
+ --dry-run Show changes without applying them
113
+ --yes Apply all changes without prompting
114
+ --help Show help
115
+
116
+ Examples:
117
+ npx dialtone-migrate-scrollbar-always
118
+ npx dialtone-migrate-scrollbar-always --dry-run
119
+ npx dialtone-migrate-scrollbar-always --cwd ./src
120
+ npx dialtone-migrate-scrollbar-always --yes
121
+ `);
122
+ }
123
+
124
+ function parseArgs (args) {
125
+ const cwdIndex = args.indexOf('--cwd');
126
+ return {
127
+ help: args.includes('--help'),
128
+ dryRun: args.includes('--dry-run'),
129
+ autoYes: args.includes('--yes'),
130
+ cwd: cwdIndex !== -1 && args[cwdIndex + 1]
131
+ ? path.resolve(args[cwdIndex + 1])
132
+ : process.cwd(),
133
+ };
134
+ }
135
+
136
+ async function prompt (question) {
137
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
138
+ return new Promise(resolve => {
139
+ rl.question(question, answer => {
140
+ rl.close();
141
+ resolve(answer.trim().toLowerCase());
142
+ });
143
+ });
144
+ }
145
+
146
+ async function scanFiles (cwd) {
147
+ const extensions = ['.vue', '.html'];
148
+ const ignore = ['node_modules', 'dist', '.git', '.vuepress/public', '.vuepress/.temp', '.vuepress/.cache', 'storybook-static'];
149
+ const files = await findFiles(cwd, extensions, ignore);
150
+
151
+ const changes = [];
152
+
153
+ for (const file of files) {
154
+ const content = await fs.readFile(file, 'utf8');
155
+ const transformed = transformContent(content);
156
+ if (transformed !== content) {
157
+ changes.push({ file, content, transformed });
158
+ }
159
+ }
160
+
161
+ return changes;
162
+ }
163
+
164
+ async function applyChanges (changes, autoYes) {
165
+ if (!autoYes) {
166
+ const answer = await prompt('\nApply changes? (y/N) ');
167
+ if (answer !== 'y' && answer !== 'yes') {
168
+ console.log('Cancelled.');
169
+ return false;
170
+ }
171
+ }
172
+ for (const { file, transformed } of changes) {
173
+ await fs.writeFile(file, transformed, 'utf8');
174
+ }
175
+ return true;
176
+ }
177
+
178
+ function printChangeSummary (changes, cwd) {
179
+ console.log(`\nFound changes in ${changes.length} file(s):\n`);
180
+ for (const { file } of changes) {
181
+ console.log(` ${path.relative(cwd, file)}`);
182
+ }
183
+ }
184
+
185
+ async function main () {
186
+ const opts = parseArgs(process.argv.slice(2));
187
+ if (opts.help) {
188
+ printHelp();
189
+ process.exit(0);
190
+ }
191
+
192
+ console.log(`\nScanning ${opts.cwd} for v-dt-scrollbar:never and scrollbar="never" usages...`);
193
+
194
+ const changes = await scanFiles(opts.cwd);
195
+
196
+ if (changes.length === 0) {
197
+ console.log('No usages found. Nothing to migrate.');
198
+ process.exit(0);
199
+ }
200
+
201
+ printChangeSummary(changes, opts.cwd);
202
+
203
+ if (opts.dryRun) {
204
+ console.log('\n--dry-run: No files were modified.');
205
+ process.exit(0);
206
+ }
207
+
208
+ const applied = await applyChanges(changes, opts.autoYes);
209
+ if (applied) console.log(`\nMigrated ${changes.length} file(s).\n`);
210
+ }
211
+
212
+ const isDirectRun = (() => {
213
+ try {
214
+ return realpathSync(process.argv[1]) === fileURLToPath(import.meta.url);
215
+ } catch {
216
+ return false;
217
+ }
218
+ })();
219
+
220
+ if (isDirectRun) {
221
+ main().catch(err => {
222
+ console.error(err);
223
+ process.exit(1);
224
+ });
225
+ }
@@ -99,6 +99,7 @@
99
99
  });
100
100
  }
101
101
 
102
+
102
103
  // ============================================================================
103
104
  // $ VALUE LISTS
104
105
  // ----------------------------------------------------------------------------
@@ -140,6 +141,7 @@
140
141
  // Padding cascade: specific → axis → shorthand → 0
141
142
  padding-block: var(--box-pbs, var(--box-pbl, var(--box-p, 0))) var(--box-pbe, var(--box-pbl, var(--box-p, 0)));
142
143
  padding-inline: var(--box-pis, var(--box-pi, var(--box-p, 0))) var(--box-pie, var(--box-pi, var(--box-p, 0)));
144
+
143
145
  }
144
146
 
145
147
  // ============================================================================
@@ -52,7 +52,6 @@
52
52
  }
53
53
 
54
54
  &:active {
55
- // --link-text-decoration: underline;
56
55
  color: var(--link-color-default);
57
56
  }
58
57
 
@@ -191,36 +190,32 @@
191
190
  &--inverted-mention {
192
191
  --link-color-default: var(--dt-color-link-primary-inverted);
193
192
  --link-color-default-hover: var(--dt-color-link-primary-inverted-hover);
194
- --link-text-decoration: none;
195
193
  --link-padding: 0 var(--dt-spacing-25);
196
- --link-background-color: oklch(from var(--dt-color-surface-brand-strong) l c h /0.3);
194
+ --link-background-color: var(--dt-color-link-mention-inverted-background);
197
195
 
198
196
  line-height: var(--dt-font-line-height-200);
199
- border-radius: var(--dt-size-radius-200);
197
+ border-radius: var(--dt-size-radius-300);
198
+
199
+ &:hover {
200
+ --link-background-color: var(--dt-color-link-mention-inverted-background-hover);
201
+ }
200
202
  }
201
203
 
202
204
  // $$ MENTION
203
205
  // ----------------------------------------------------------------------------
204
- // Styling specific to mentions such as @brad.paugh. The underline highlighting
205
- // is reversed compared to a regular link, and it has a light background.
206
+ // Styling for @mention links (e.g. @brad.paugh). Displays as a pill-shaped
207
+ // background using brand surface tokens. Background changes on hover.
206
208
  &--mention {
207
- --link-text-decoration: none;
208
- --link-padding: 0 var(--dt-spacing-25);
209
- --link-background-color: oklch(from var(--dt-color-surface-brand-strong) l c h /0.1);
209
+ --link-color-default: var(--dt-color-link-mention);
210
+ --link-color-default-hover: var(--dt-color-link-mention-hover);
211
+ --link-padding: var(--dt-spacing-1) var(--dt-spacing-25);
212
+ --link-background-color: var(--dt-color-link-mention-background);
210
213
 
211
214
  line-height: var(--dt-font-line-height-200);
212
- border-radius: var(--dt-size-radius-200);
215
+ border-radius: var(--dt-size-radius-300);
213
216
 
214
217
  &:hover {
215
- --link-text-decoration: underline;
216
- --link-background-color: oklch(from var(--dt-color-surface-brand-strong) l c h /0.25);
217
-
218
- text-underline-offset: var(--dt-spacing-25);
219
- text-decoration-thickness: var(--dt-size-border-100);
220
- }
221
-
222
- &:active {
223
- --link-background-color: oklch(from var(--dt-color-surface-brand-strong) l c h /0.1);
218
+ --link-background-color: var(--dt-color-link-mention-background-hover);
224
219
  }
225
220
  }
226
221
  }
@@ -114,7 +114,7 @@
114
114
  .d-notice.d-notice--important,
115
115
  .d-banner.d-banner--important,
116
116
  .d-toast.d-toast--important {
117
- --notice-color-background: var(--dt-color-surface-strong);
117
+ --notice-color-background: var(--dt-color-surface-primary-inverted);
118
118
  --notice-color-text: var(--dt-color-foreground-primary-inverted);
119
119
  --notice-color-icon: var(--notice-color-text);
120
120
  --notice-color-shadow: transparent;
@@ -30,6 +30,28 @@
30
30
  opacity: var(--dt-opacity-1100);
31
31
  }
32
32
  }
33
+
34
+ // Track offsets via CSS custom properties set by v-dt-scrollbar directive.
35
+ // The base rules (0,3,0) beat OS's non-cornerless rules (0,1,0).
36
+ // The cornerless overrides (0,4,0) beat OS's cornerless rules (0,3,0) which reset
37
+ // top/bottom on vertical and left/right on horizontal — regardless of import order.
38
+ &.os-scrollbar-vertical {
39
+ inset-block-start: var(--dt-scrollbar-offset-block-start, 0);
40
+ inset-inline-end: var(--dt-scrollbar-offset-inline-end, 0);
41
+ }
42
+
43
+ &.os-scrollbar-vertical.os-scrollbar-cornerless {
44
+ inset-block: var(--dt-scrollbar-offset-block-start, 0) var(--dt-scrollbar-offset-block-end, 0);
45
+ }
46
+
47
+ &.os-scrollbar-horizontal {
48
+ inset-block-end: var(--dt-scrollbar-offset-block-end, 0);
49
+ inset-inline-start: var(--dt-scrollbar-offset-inline-start, 0);
50
+ }
51
+
52
+ &.os-scrollbar-horizontal.os-scrollbar-cornerless {
53
+ inset-inline: var(--dt-scrollbar-offset-inline-start, 0) var(--dt-scrollbar-offset-inline-end, 0);
54
+ }
33
55
  }
34
56
  }
35
57
 
@@ -133,3 +133,10 @@
133
133
  }
134
134
  }
135
135
  }
136
+
137
+ @layer dialtone.utilities {
138
+ /*
139
+ [data-dt-brand="prota-deuter"] { --dt-color-surface-info-opaque: oklch(from var(--dt-color-blue-300) l c h / 0.5) !important; }
140
+ [data-dt-brand="prota-deuter"][data-dt-mode="dark"] { --dt-color-surface-info-opaque: oklch(from var(--dt-color-blue-300) l c h / 0.6) !important; }
141
+ */
142
+ }