@kontourai/survey 2.4.0 → 2.4.2

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 (23) hide show
  1. package/dist/example-data/public-directory-review-resource.d.ts +1 -1
  2. package/dist/src/review-workbench/review-workbench-css.generated.js +54 -0
  3. package/dist/src/review-workbench/review-workbench-data.d.ts +6 -6
  4. package/dist/src/review-workbench/review-workbench.css +54 -0
  5. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/OFL-Fraunces.txt +93 -0
  6. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/OFL-HankenGrotesk.txt +94 -0
  7. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/OFL-IBMPlexMono.txt +92 -0
  8. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/README.md +41 -0
  9. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/fraunces-latin-ext.woff2 +0 -0
  10. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/fraunces-latin.woff2 +0 -0
  11. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/hanken-grotesk-latin-ext.woff2 +0 -0
  12. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/hanken-grotesk-latin.woff2 +0 -0
  13. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-400-latin1.woff2 +0 -0
  14. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-400-latin2.woff2 +0 -0
  15. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-500-latin1.woff2 +0 -0
  16. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-500-latin2.woff2 +0 -0
  17. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-600-latin1.woff2 +0 -0
  18. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts/ibm-plex-mono-600-latin2.woff2 +0 -0
  19. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/fonts.css +107 -1
  20. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/index.css +1 -0
  21. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/themes.css +2 -0
  22. package/dist/src/review-workbench/vendor/kontourai-ui/tokens/tokens.css +52 -0
  23. package/package.json +6 -6
@@ -106,12 +106,12 @@ export declare const publicDirectoryReviewItemExample: {
106
106
  collectedBy: string;
107
107
  };
108
108
  projection: {
109
+ reviewOutcomeId?: undefined;
109
110
  rawSourceId: string;
110
111
  extractionId: string;
111
112
  candidateSetId: string;
112
113
  candidateId: string;
113
114
  claimId: string;
114
- reviewOutcomeId?: undefined;
115
115
  };
116
116
  producer: {
117
117
  proposalId: string;
@@ -12,6 +12,13 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
12
12
  --k-line: rgba(150, 180, 210, 0.12);
13
13
  --k-line-strong: rgba(150, 180, 210, 0.22);
14
14
  --k-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95);
15
+ /* Layered, downward-weighted overlay elevation (contact -> ambient falloff).
16
+ The single shadow floating surfaces — dialogs, menus, palettes, toasts —
17
+ should use, so elevation tunes in one place. */
18
+ --k-elevation-overlay:
19
+ 0 1px 2px rgba(0, 0, 0, 0.35),
20
+ 0 12px 32px rgba(0, 0, 0, 0.45),
21
+ 0 24px 56px rgba(0, 0, 0, 0.4);
15
22
 
16
23
  /* text */
17
24
  --k-text: #eef3f8;
@@ -44,6 +51,10 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
44
51
  /* radius */
45
52
  --k-radius-sm: 9px;
46
53
  --k-radius-md: 14px;
54
+ /* Tight, desktop-grade radii for dense product chrome (controls + overlays),
55
+ alongside the softer sm/md. */
56
+ --k-radius-control: 4px;
57
+ --k-radius-overlay: 10px;
47
58
 
48
59
  /* type */
49
60
  --k-text-xs: 11px;
@@ -61,6 +72,38 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
61
72
  /* motion */
62
73
  --k-ease: cubic-bezier(0.22, 1, 0.36, 1);
63
74
  --k-dur: 0.16s;
75
+
76
+ /* border width — replaces the ad-hoc calc(var(--k-space-1) / 4) math that
77
+ hairline borders computed inline across primitives. */
78
+ --k-border-thin: 1px;
79
+ --k-border-thick: 2px;
80
+
81
+ /* line-height — unitless ratios for display headings vs. body copy. */
82
+ --k-leading-tight: 1.1;
83
+ --k-leading-normal: 1.45;
84
+ --k-leading-loose: 1.7;
85
+
86
+ /* letter-spacing — eyebrows/badges track wide; body tracks normal. */
87
+ --k-tracking-tight: -0.01em;
88
+ --k-tracking-normal: 0;
89
+ --k-tracking-wide: 0.08em;
90
+
91
+ /* focus — one ring contract so every interactive primitive (controls,
92
+ buttons, links) shows the same keyboard-focus affordance. */
93
+ --k-focus-ring: var(--k-brand);
94
+ --k-focus-ring-width: 2px;
95
+ --k-focus-ring-offset: 2px;
96
+
97
+ /* z-index — semantic stacking scale for layered surfaces. Overlays read
98
+ these instead of inventing local magic numbers, so cross-product layering
99
+ stays consistent (a Flow toast never renders under a Console dialog). */
100
+ --k-z-base: 0;
101
+ --k-z-sticky: 100;
102
+ --k-z-dropdown: 1000;
103
+ --k-z-overlay: 1100;
104
+ --k-z-modal: 1200;
105
+ --k-z-popover: 1300;
106
+ --k-z-toast: 1400;
64
107
  }
65
108
 
66
109
  .survey-workbench-embed[data-theme="light"]{
@@ -71,9 +114,18 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
71
114
  --k-line: rgba(36, 40, 46, 0.12);
72
115
  --k-line-strong: rgba(36, 40, 46, 0.20);
73
116
  --k-shadow: 0 18px 50px -30px rgba(0, 0, 0, 0.25);
117
+ --k-elevation-overlay:
118
+ 0 1px 2px rgba(0, 0, 0, 0.06),
119
+ 0 8px 24px rgba(0, 0, 0, 0.1),
120
+ 0 18px 48px rgba(0, 0, 0, 0.08);
74
121
  --k-text: #202124;
75
122
  --k-text-muted: #5b626b;
76
123
  --k-text-faint: #707782;
124
+ /* The dark-mode brand (#5ce0c6) is too light to carry white text or read as
125
+ text on the light canvas (~1.6:1). Darken it for light mode: #0e7c64 holds
126
+ the teal hue while clearing WCAG AA both as a button fill (white text,
127
+ 5.1:1) and as text on --k-bg (4.7:1). */
128
+ --k-brand: #0e7c64;
77
129
  --k-brand-contrast: #ffffff;
78
130
  --k-positive: #168257;
79
131
  --k-caution: #8a5a00;
@@ -94,6 +146,8 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
94
146
  --k-font-display: "Aptos Narrow", "DIN Condensed", "IBM Plex Sans Condensed", "Gill Sans", sans-serif;
95
147
  --k-radius-sm: 0;
96
148
  --k-radius-md: 0;
149
+ --k-radius-control: 0;
150
+ --k-radius-overlay: 0;
97
151
  --k-brand: #c9ff4a;
98
152
  --k-brand-contrast: #11120f;
99
153
  --k-bg: #11120f;
@@ -107,12 +107,12 @@ export declare const publicDirectoryReviewItemExample: {
107
107
  collectedBy: string;
108
108
  };
109
109
  projection: {
110
+ reviewOutcomeId?: undefined;
110
111
  rawSourceId: string;
111
112
  extractionId: string;
112
113
  candidateSetId: string;
113
114
  candidateId: string;
114
115
  claimId: string;
115
- reviewOutcomeId?: undefined;
116
116
  };
117
117
  producer: {
118
118
  proposalId: string;
@@ -253,6 +253,7 @@ export declare const regulatedRuleConflictReviewItemExample: {
253
253
  claimId: string;
254
254
  };
255
255
  producer: {
256
+ status?: undefined;
256
257
  sourceSection: string;
257
258
  sourcePage: number;
258
259
  sourceAuthority: {
@@ -260,7 +261,6 @@ export declare const regulatedRuleConflictReviewItemExample: {
260
261
  declaredBy: string;
261
262
  scope: string;
262
263
  };
263
- status?: undefined;
264
264
  };
265
265
  })[];
266
266
  };
@@ -297,6 +297,7 @@ export declare const facilityCredentialReviewItemExample: {
297
297
  feedbackTags: string[];
298
298
  };
299
299
  candidates: ({
300
+ sourceRank?: undefined;
300
301
  id: string;
301
302
  role: "current";
302
303
  value: {
@@ -352,10 +353,9 @@ export declare const facilityCredentialReviewItemExample: {
352
353
  claimId: string;
353
354
  };
354
355
  producer: {
355
- credentialSystem: string;
356
356
  sourceAuthority?: undefined;
357
+ credentialSystem: string;
357
358
  };
358
- sourceRank?: undefined;
359
359
  } | {
360
360
  id: string;
361
361
  role: "proposed";
@@ -535,12 +535,12 @@ export declare const reviewWorkbenchQueueExamples: (ReviewItem | {
535
535
  collectedBy: string;
536
536
  };
537
537
  projection: {
538
+ reviewOutcomeId?: undefined;
538
539
  rawSourceId: string;
539
540
  extractionId: string;
540
541
  candidateSetId: string;
541
542
  candidateId: string;
542
543
  claimId: string;
543
- reviewOutcomeId?: undefined;
544
544
  };
545
545
  producer: {
546
546
  proposalId: string;
@@ -680,6 +680,7 @@ export declare const reviewWorkbenchQueueExamples: (ReviewItem | {
680
680
  claimId: string;
681
681
  };
682
682
  producer: {
683
+ status?: undefined;
683
684
  sourceSection: string;
684
685
  sourcePage: number;
685
686
  sourceAuthority: {
@@ -687,7 +688,6 @@ export declare const reviewWorkbenchQueueExamples: (ReviewItem | {
687
688
  declaredBy: string;
688
689
  scope: string;
689
690
  };
690
- status?: undefined;
691
691
  };
692
692
  })[];
693
693
  };
@@ -9,6 +9,13 @@
9
9
  --k-line: rgba(150, 180, 210, 0.12);
10
10
  --k-line-strong: rgba(150, 180, 210, 0.22);
11
11
  --k-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95);
12
+ /* Layered, downward-weighted overlay elevation (contact -> ambient falloff).
13
+ The single shadow floating surfaces — dialogs, menus, palettes, toasts —
14
+ should use, so elevation tunes in one place. */
15
+ --k-elevation-overlay:
16
+ 0 1px 2px rgba(0, 0, 0, 0.35),
17
+ 0 12px 32px rgba(0, 0, 0, 0.45),
18
+ 0 24px 56px rgba(0, 0, 0, 0.4);
12
19
 
13
20
  /* text */
14
21
  --k-text: #eef3f8;
@@ -41,6 +48,10 @@
41
48
  /* radius */
42
49
  --k-radius-sm: 9px;
43
50
  --k-radius-md: 14px;
51
+ /* Tight, desktop-grade radii for dense product chrome (controls + overlays),
52
+ alongside the softer sm/md. */
53
+ --k-radius-control: 4px;
54
+ --k-radius-overlay: 10px;
44
55
 
45
56
  /* type */
46
57
  --k-text-xs: 11px;
@@ -58,6 +69,38 @@
58
69
  /* motion */
59
70
  --k-ease: cubic-bezier(0.22, 1, 0.36, 1);
60
71
  --k-dur: 0.16s;
72
+
73
+ /* border width — replaces the ad-hoc calc(var(--k-space-1) / 4) math that
74
+ hairline borders computed inline across primitives. */
75
+ --k-border-thin: 1px;
76
+ --k-border-thick: 2px;
77
+
78
+ /* line-height — unitless ratios for display headings vs. body copy. */
79
+ --k-leading-tight: 1.1;
80
+ --k-leading-normal: 1.45;
81
+ --k-leading-loose: 1.7;
82
+
83
+ /* letter-spacing — eyebrows/badges track wide; body tracks normal. */
84
+ --k-tracking-tight: -0.01em;
85
+ --k-tracking-normal: 0;
86
+ --k-tracking-wide: 0.08em;
87
+
88
+ /* focus — one ring contract so every interactive primitive (controls,
89
+ buttons, links) shows the same keyboard-focus affordance. */
90
+ --k-focus-ring: var(--k-brand);
91
+ --k-focus-ring-width: 2px;
92
+ --k-focus-ring-offset: 2px;
93
+
94
+ /* z-index — semantic stacking scale for layered surfaces. Overlays read
95
+ these instead of inventing local magic numbers, so cross-product layering
96
+ stays consistent (a Flow toast never renders under a Console dialog). */
97
+ --k-z-base: 0;
98
+ --k-z-sticky: 100;
99
+ --k-z-dropdown: 1000;
100
+ --k-z-overlay: 1100;
101
+ --k-z-modal: 1200;
102
+ --k-z-popover: 1300;
103
+ --k-z-toast: 1400;
61
104
  }
62
105
 
63
106
  .survey-workbench-embed[data-theme="light"]{
@@ -68,9 +111,18 @@
68
111
  --k-line: rgba(36, 40, 46, 0.12);
69
112
  --k-line-strong: rgba(36, 40, 46, 0.20);
70
113
  --k-shadow: 0 18px 50px -30px rgba(0, 0, 0, 0.25);
114
+ --k-elevation-overlay:
115
+ 0 1px 2px rgba(0, 0, 0, 0.06),
116
+ 0 8px 24px rgba(0, 0, 0, 0.1),
117
+ 0 18px 48px rgba(0, 0, 0, 0.08);
71
118
  --k-text: #202124;
72
119
  --k-text-muted: #5b626b;
73
120
  --k-text-faint: #707782;
121
+ /* The dark-mode brand (#5ce0c6) is too light to carry white text or read as
122
+ text on the light canvas (~1.6:1). Darken it for light mode: #0e7c64 holds
123
+ the teal hue while clearing WCAG AA both as a button fill (white text,
124
+ 5.1:1) and as text on --k-bg (4.7:1). */
125
+ --k-brand: #0e7c64;
74
126
  --k-brand-contrast: #ffffff;
75
127
  --k-positive: #168257;
76
128
  --k-caution: #8a5a00;
@@ -91,6 +143,8 @@
91
143
  --k-font-display: "Aptos Narrow", "DIN Condensed", "IBM Plex Sans Condensed", "Gill Sans", sans-serif;
92
144
  --k-radius-sm: 0;
93
145
  --k-radius-md: 0;
146
+ --k-radius-control: 0;
147
+ --k-radius-overlay: 0;
94
148
  --k-brand: #c9ff4a;
95
149
  --k-brand-contrast: #11120f;
96
150
  --k-bg: #11120f;
@@ -0,0 +1,93 @@
1
+ Copyright 2018 The Fraunces Project Authors (https://github.com/undercasetype/Fraunces)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,94 @@
1
+ Copyright 2021 The Hanken Grotesk Project Authors (https://github.com/marcologous/hanken-grotesk)
2
+
3
+
4
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
5
+ This license is copied below, and is also available with a FAQ at:
6
+ http://scripts.sil.org/OFL
7
+
8
+
9
+ -----------------------------------------------------------
10
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
11
+ -----------------------------------------------------------
12
+
13
+ PREAMBLE
14
+ The goals of the Open Font License (OFL) are to stimulate worldwide
15
+ development of collaborative font projects, to support the font creation
16
+ efforts of academic and linguistic communities, and to provide a free and
17
+ open framework in which fonts may be shared and improved in partnership
18
+ with others.
19
+
20
+ The OFL allows the licensed fonts to be used, studied, modified and
21
+ redistributed freely as long as they are not sold by themselves. The
22
+ fonts, including any derivative works, can be bundled, embedded,
23
+ redistributed and/or sold with any software provided that any reserved
24
+ names are not used by derivative works. The fonts and derivatives,
25
+ however, cannot be released under any other type of license. The
26
+ requirement for fonts to remain under this license does not apply
27
+ to any document created using the fonts or their derivatives.
28
+
29
+ DEFINITIONS
30
+ "Font Software" refers to the set of files released by the Copyright
31
+ Holder(s) under this license and clearly marked as such. This may
32
+ include source files, build scripts and documentation.
33
+
34
+ "Reserved Font Name" refers to any names specified as such after the
35
+ copyright statement(s).
36
+
37
+ "Original Version" refers to the collection of Font Software components as
38
+ distributed by the Copyright Holder(s).
39
+
40
+ "Modified Version" refers to any derivative made by adding to, deleting,
41
+ or substituting -- in part or in whole -- any of the components of the
42
+ Original Version, by changing formats or by porting the Font Software to a
43
+ new environment.
44
+
45
+ "Author" refers to any designer, engineer, programmer, technical
46
+ writer or other person who contributed to the Font Software.
47
+
48
+ PERMISSION & CONDITIONS
49
+ Permission is hereby granted, free of charge, to any person obtaining
50
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
51
+ redistribute, and sell modified and unmodified copies of the Font
52
+ Software, subject to the following conditions:
53
+
54
+ 1) Neither the Font Software nor any of its individual components,
55
+ in Original or Modified Versions, may be sold by itself.
56
+
57
+ 2) Original or Modified Versions of the Font Software may be bundled,
58
+ redistributed and/or sold with any software, provided that each copy
59
+ contains the above copyright notice and this license. These can be
60
+ included either as stand-alone text files, human-readable headers or
61
+ in the appropriate machine-readable metadata fields within text or
62
+ binary files as long as those fields can be easily viewed by the user.
63
+
64
+ 3) No Modified Version of the Font Software may use the Reserved Font
65
+ Name(s) unless explicit written permission is granted by the corresponding
66
+ Copyright Holder. This restriction only applies to the primary font name as
67
+ presented to the users.
68
+
69
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
70
+ Software shall not be used to promote, endorse or advertise any
71
+ Modified Version, except to acknowledge the contribution(s) of the
72
+ Copyright Holder(s) and the Author(s) or with their explicit written
73
+ permission.
74
+
75
+ 5) The Font Software, modified or unmodified, in part or in whole,
76
+ must be distributed entirely under this license, and must not be
77
+ distributed under any other license. The requirement for fonts to
78
+ remain under this license does not apply to any document created
79
+ using the Font Software.
80
+
81
+ TERMINATION
82
+ This license becomes null and void if any of the above conditions are
83
+ not met.
84
+
85
+ DISCLAIMER
86
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
87
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
88
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
89
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
90
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
91
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
92
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
93
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
94
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,92 @@
1
+ Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION & CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,41 @@
1
+ # Vendored brand faces
2
+
3
+ These woff2 files back the `--k-font-display`, `--k-font-ui` and `--k-font-mono` tokens.
4
+ They are self-hosted so a consumer with `default-src 'self'` — the right posture for a tool
5
+ that handles someone's documents — still renders the brand typography, and so no Kontour
6
+ surface makes a third-party request at render time.
7
+
8
+ `tokens/fonts.css` is generated from these files by `scripts/vendor-fonts.mjs`. Run that
9
+ script to refresh a family, weight, or upstream release; do not hand-edit `fonts.css`.
10
+
11
+ ## What ships, and why
12
+
13
+ | Family | Token | Files | License |
14
+ | --- | --- | --- | --- |
15
+ | Fraunces | `--k-font-display` | `fraunces-{latin,latin-ext}.woff2` | [OFL 1.1](./OFL-Fraunces.txt) |
16
+ | Hanken Grotesk | `--k-font-ui` | `hanken-grotesk-{latin,latin-ext}.woff2` | [OFL 1.1](./OFL-HankenGrotesk.txt) |
17
+ | IBM Plex Mono | `--k-font-mono` | `ibm-plex-mono-{400,500,600}-{latin1,latin2}.woff2` | [OFL 1.1](./OFL-IBMPlexMono.txt) |
18
+
19
+ Fraunces and Hanken Grotesk are variable fonts, shipped as one file per unicode subset
20
+ covering the full `100 900` weight axis. Google serves the identical file for every weight
21
+ of a variable family, so vendoring the individual weights the tokens use would have shipped
22
+ the same bytes four and five times over — 496 KB instead of 124 KB for Fraunces alone.
23
+ Fraunces keeps its `opsz` axis variable so optical sizing still works at display sizes.
24
+
25
+ IBM Plex Mono has no variable release, so it ships as three static weights — 400, 500 and
26
+ 600, the weights `tokens.css` and `react/styles.css` ask for.
27
+
28
+ Coverage is latin + latin-ext for every family (IBM's `Latin1` + `Latin2` subsets are the
29
+ equivalent split). Characters outside those ranges fall through to the fallback stacks
30
+ declared in `tokens.css`.
31
+
32
+ ## Provenance
33
+
34
+ - **Fraunces**, **Hanken Grotesk** — the woff2 subsets Google Fonts serves, fetched from
35
+ `fonts.gstatic.com` with their `unicode-range` declarations taken verbatim from the
36
+ Google Fonts CSS. Neither family declares a Reserved Font Name, so the subsetting Google
37
+ applies carries no naming restriction.
38
+ - **IBM Plex Mono** — IBM's own published `@ibm/plex-mono` woff2 artifacts, unmodified.
39
+ IBM Plex reserves the font name "Plex", and OFL clause 5 restricts that name on modified
40
+ versions; taking IBM's own build rather than a re-subset copy keeps the family name
41
+ unambiguously licensed.
@@ -1 +1,107 @@
1
- @import url("https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600;9..144,700;9..144,900&family=Hanken+Grotesk:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap");
1
+ /*
2
+ * Self-hosted brand faces for the --k-font-* tokens.
3
+ *
4
+ * Generated by scripts/vendor-fonts.mjs — edit that script, not this file.
5
+ * No remote requests: a consumer with `default-src 'self'` gets the brand type.
6
+ * Licenses ship alongside the files in tokens/fonts/.
7
+ */
8
+
9
+ /* Fraunces · latin-ext */
10
+ @font-face {
11
+ font-family: "Fraunces";
12
+ font-style: normal;
13
+ font-weight: 100 900;
14
+ font-display: swap;
15
+ src: url("./fonts/fraunces-latin-ext.woff2") format("woff2");
16
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
17
+ }
18
+
19
+ /* Fraunces · latin */
20
+ @font-face {
21
+ font-family: "Fraunces";
22
+ font-style: normal;
23
+ font-weight: 100 900;
24
+ font-display: swap;
25
+ src: url("./fonts/fraunces-latin.woff2") format("woff2");
26
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
27
+ }
28
+
29
+ /* Hanken Grotesk · latin-ext */
30
+ @font-face {
31
+ font-family: "Hanken Grotesk";
32
+ font-style: normal;
33
+ font-weight: 100 900;
34
+ font-display: swap;
35
+ src: url("./fonts/hanken-grotesk-latin-ext.woff2") format("woff2");
36
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
37
+ }
38
+
39
+ /* Hanken Grotesk · latin */
40
+ @font-face {
41
+ font-family: "Hanken Grotesk";
42
+ font-style: normal;
43
+ font-weight: 100 900;
44
+ font-display: swap;
45
+ src: url("./fonts/hanken-grotesk-latin.woff2") format("woff2");
46
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
47
+ }
48
+
49
+ /* IBM Plex Mono 400 · Latin1 */
50
+ @font-face {
51
+ font-family: "IBM Plex Mono";
52
+ font-style: normal;
53
+ font-weight: 400;
54
+ font-display: swap;
55
+ src: url("./fonts/ibm-plex-mono-400-latin1.woff2") format("woff2");
56
+ unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
57
+ }
58
+
59
+ /* IBM Plex Mono 400 · Latin2 */
60
+ @font-face {
61
+ font-family: "IBM Plex Mono";
62
+ font-style: normal;
63
+ font-weight: 400;
64
+ font-display: swap;
65
+ src: url("./fonts/ibm-plex-mono-400-latin2.woff2") format("woff2");
66
+ unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
67
+ }
68
+
69
+ /* IBM Plex Mono 500 · Latin1 */
70
+ @font-face {
71
+ font-family: "IBM Plex Mono";
72
+ font-style: normal;
73
+ font-weight: 500;
74
+ font-display: swap;
75
+ src: url("./fonts/ibm-plex-mono-500-latin1.woff2") format("woff2");
76
+ unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
77
+ }
78
+
79
+ /* IBM Plex Mono 500 · Latin2 */
80
+ @font-face {
81
+ font-family: "IBM Plex Mono";
82
+ font-style: normal;
83
+ font-weight: 500;
84
+ font-display: swap;
85
+ src: url("./fonts/ibm-plex-mono-500-latin2.woff2") format("woff2");
86
+ unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
87
+ }
88
+
89
+ /* IBM Plex Mono 600 · Latin1 */
90
+ @font-face {
91
+ font-family: "IBM Plex Mono";
92
+ font-style: normal;
93
+ font-weight: 600;
94
+ font-display: swap;
95
+ src: url("./fonts/ibm-plex-mono-600-latin1.woff2") format("woff2");
96
+ unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
97
+ }
98
+
99
+ /* IBM Plex Mono 600 · Latin2 */
100
+ @font-face {
101
+ font-family: "IBM Plex Mono";
102
+ font-style: normal;
103
+ font-weight: 600;
104
+ font-display: swap;
105
+ src: url("./fonts/ibm-plex-mono-600-latin2.woff2") format("woff2");
106
+ unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
107
+ }
@@ -1,2 +1,3 @@
1
+ @import "./fonts.css";
1
2
  @import "./tokens.css";
2
3
  @import "./themes.css";
@@ -9,6 +9,8 @@
9
9
  --k-font-display: "Aptos Narrow", "DIN Condensed", "IBM Plex Sans Condensed", "Gill Sans", sans-serif;
10
10
  --k-radius-sm: 0;
11
11
  --k-radius-md: 0;
12
+ --k-radius-control: 0;
13
+ --k-radius-overlay: 0;
12
14
  --k-brand: #c9ff4a;
13
15
  --k-brand-contrast: #11120f;
14
16
  --k-bg: #11120f;
@@ -8,6 +8,13 @@
8
8
  --k-line: rgba(150, 180, 210, 0.12);
9
9
  --k-line-strong: rgba(150, 180, 210, 0.22);
10
10
  --k-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95);
11
+ /* Layered, downward-weighted overlay elevation (contact -> ambient falloff).
12
+ The single shadow floating surfaces — dialogs, menus, palettes, toasts —
13
+ should use, so elevation tunes in one place. */
14
+ --k-elevation-overlay:
15
+ 0 1px 2px rgba(0, 0, 0, 0.35),
16
+ 0 12px 32px rgba(0, 0, 0, 0.45),
17
+ 0 24px 56px rgba(0, 0, 0, 0.4);
11
18
 
12
19
  /* text */
13
20
  --k-text: #eef3f8;
@@ -40,6 +47,10 @@
40
47
  /* radius */
41
48
  --k-radius-sm: 9px;
42
49
  --k-radius-md: 14px;
50
+ /* Tight, desktop-grade radii for dense product chrome (controls + overlays),
51
+ alongside the softer sm/md. */
52
+ --k-radius-control: 4px;
53
+ --k-radius-overlay: 10px;
43
54
 
44
55
  /* type */
45
56
  --k-text-xs: 11px;
@@ -57,6 +68,38 @@
57
68
  /* motion */
58
69
  --k-ease: cubic-bezier(0.22, 1, 0.36, 1);
59
70
  --k-dur: 0.16s;
71
+
72
+ /* border width — replaces the ad-hoc calc(var(--k-space-1) / 4) math that
73
+ hairline borders computed inline across primitives. */
74
+ --k-border-thin: 1px;
75
+ --k-border-thick: 2px;
76
+
77
+ /* line-height — unitless ratios for display headings vs. body copy. */
78
+ --k-leading-tight: 1.1;
79
+ --k-leading-normal: 1.45;
80
+ --k-leading-loose: 1.7;
81
+
82
+ /* letter-spacing — eyebrows/badges track wide; body tracks normal. */
83
+ --k-tracking-tight: -0.01em;
84
+ --k-tracking-normal: 0;
85
+ --k-tracking-wide: 0.08em;
86
+
87
+ /* focus — one ring contract so every interactive primitive (controls,
88
+ buttons, links) shows the same keyboard-focus affordance. */
89
+ --k-focus-ring: var(--k-brand);
90
+ --k-focus-ring-width: 2px;
91
+ --k-focus-ring-offset: 2px;
92
+
93
+ /* z-index — semantic stacking scale for layered surfaces. Overlays read
94
+ these instead of inventing local magic numbers, so cross-product layering
95
+ stays consistent (a Flow toast never renders under a Console dialog). */
96
+ --k-z-base: 0;
97
+ --k-z-sticky: 100;
98
+ --k-z-dropdown: 1000;
99
+ --k-z-overlay: 1100;
100
+ --k-z-modal: 1200;
101
+ --k-z-popover: 1300;
102
+ --k-z-toast: 1400;
60
103
  }
61
104
 
62
105
  [data-theme="light"] {
@@ -67,9 +110,18 @@
67
110
  --k-line: rgba(36, 40, 46, 0.12);
68
111
  --k-line-strong: rgba(36, 40, 46, 0.20);
69
112
  --k-shadow: 0 18px 50px -30px rgba(0, 0, 0, 0.25);
113
+ --k-elevation-overlay:
114
+ 0 1px 2px rgba(0, 0, 0, 0.06),
115
+ 0 8px 24px rgba(0, 0, 0, 0.1),
116
+ 0 18px 48px rgba(0, 0, 0, 0.08);
70
117
  --k-text: #202124;
71
118
  --k-text-muted: #5b626b;
72
119
  --k-text-faint: #707782;
120
+ /* The dark-mode brand (#5ce0c6) is too light to carry white text or read as
121
+ text on the light canvas (~1.6:1). Darken it for light mode: #0e7c64 holds
122
+ the teal hue while clearing WCAG AA both as a button fill (white text,
123
+ 5.1:1) and as text on --k-bg (4.7:1). */
124
+ --k-brand: #0e7c64;
73
125
  --k-brand-contrast: #ffffff;
74
126
  --k-positive: #168257;
75
127
  --k-caution: #8a5a00;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontourai/survey",
3
- "version": "2.4.0",
3
+ "version": "2.4.2",
4
4
  "description": "Producer-side source, extraction, candidate, and review contracts for projecting verified claims into Surface.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -80,12 +80,12 @@
80
80
  }
81
81
  },
82
82
  "devDependencies": {
83
- "@kontourai/traverse": "^0.22.0",
83
+ "@kontourai/traverse": "^0.25.0",
84
84
  "@kontourai/ui": "^1.1.0",
85
- "@playwright/test": "^1.60.0",
86
- "@types/node": "^25.6.0",
87
- "marked": "^16.4.2",
88
- "typescript": "^5.8.0"
85
+ "@playwright/test": "^1.62.0",
86
+ "@types/node": "^26.1.2",
87
+ "marked": "^18.0.7",
88
+ "typescript": "^7.0.2"
89
89
  },
90
90
  "engines": {
91
91
  "node": ">=22"