@astryxdesign/lab 0.1.4-canary.f5fcc51 → 0.1.4-canary.f767ee2

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 (133) hide show
  1. package/dist/CodeEditor/CodeEditor.d.ts +4 -1
  2. package/dist/CodeEditor/CodeEditor.d.ts.map +1 -1
  3. package/dist/CodeEditor/CodeEditor.js +3 -0
  4. package/dist/Sankey/SankeyChart.d.ts.map +1 -1
  5. package/dist/Sankey/SankeyChart.js +3 -0
  6. package/dist/Schedule/ListView.d.ts.map +1 -1
  7. package/dist/Schedule/ListView.js +7 -4
  8. package/dist/Schedule/MonthlyView.js +3 -2
  9. package/dist/Schedule/Schedule.d.ts +3 -1
  10. package/dist/Schedule/Schedule.d.ts.map +1 -1
  11. package/dist/Schedule/Schedule.js +9 -4
  12. package/dist/Schedule/TimeGridView.js +3 -2
  13. package/dist/Schedule/context.d.ts +2 -0
  14. package/dist/Schedule/context.d.ts.map +1 -1
  15. package/dist/index.d.ts +0 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -2
  18. package/dist/lab.css +0 -15
  19. package/package.json +2 -2
  20. package/src/CodeEditor/CodeEditor.test.tsx +21 -0
  21. package/src/CodeEditor/CodeEditor.tsx +5 -0
  22. package/src/InfoTip/InfoTip.doc.mjs +1 -1
  23. package/src/Sankey/SankeyChart.test.tsx +77 -0
  24. package/src/Sankey/SankeyChart.tsx +3 -0
  25. package/src/Schedule/ListView.tsx +5 -2
  26. package/src/Schedule/MonthlyView.tsx +2 -2
  27. package/src/Schedule/Schedule.test.tsx +39 -0
  28. package/src/Schedule/Schedule.tsx +8 -0
  29. package/src/Schedule/TimeGridView.tsx +2 -2
  30. package/src/Schedule/context.tsx +2 -0
  31. package/src/index.ts +2 -46
  32. package/dist/ChartV2/Chart.d.ts +0 -32
  33. package/dist/ChartV2/Chart.d.ts.map +0 -1
  34. package/dist/ChartV2/Chart.js +0 -281
  35. package/dist/ChartV2/ChartAxis.d.ts +0 -36
  36. package/dist/ChartV2/ChartAxis.d.ts.map +0 -1
  37. package/dist/ChartV2/ChartAxis.js +0 -161
  38. package/dist/ChartV2/ChartGrid.d.ts +0 -20
  39. package/dist/ChartV2/ChartGrid.d.ts.map +0 -1
  40. package/dist/ChartV2/ChartGrid.js +0 -76
  41. package/dist/ChartV2/ChartLegend.d.ts +0 -14
  42. package/dist/ChartV2/ChartLegend.d.ts.map +0 -1
  43. package/dist/ChartV2/ChartLegend.js +0 -54
  44. package/dist/ChartV2/ChartSwatch.d.ts +0 -36
  45. package/dist/ChartV2/ChartSwatch.d.ts.map +0 -1
  46. package/dist/ChartV2/ChartSwatch.js +0 -82
  47. package/dist/ChartV2/ChartTooltip.d.ts +0 -46
  48. package/dist/ChartV2/ChartTooltip.d.ts.map +0 -1
  49. package/dist/ChartV2/ChartTooltip.js +0 -267
  50. package/dist/ChartV2/ChartV2Context.d.ts +0 -4
  51. package/dist/ChartV2/ChartV2Context.d.ts.map +0 -1
  52. package/dist/ChartV2/ChartV2Context.js +0 -12
  53. package/dist/ChartV2/index.d.ts +0 -13
  54. package/dist/ChartV2/index.d.ts.map +0 -1
  55. package/dist/ChartV2/index.js +0 -10
  56. package/dist/ChartV2/layout.d.ts +0 -25
  57. package/dist/ChartV2/layout.d.ts.map +0 -1
  58. package/dist/ChartV2/layout.js +0 -195
  59. package/dist/ChartV2/legend.d.ts +0 -18
  60. package/dist/ChartV2/legend.d.ts.map +0 -1
  61. package/dist/ChartV2/legend.js +0 -24
  62. package/dist/ChartV2/marks/area.d.ts +0 -19
  63. package/dist/ChartV2/marks/area.d.ts.map +0 -1
  64. package/dist/ChartV2/marks/area.js +0 -109
  65. package/dist/ChartV2/marks/band.d.ts +0 -9
  66. package/dist/ChartV2/marks/band.d.ts.map +0 -1
  67. package/dist/ChartV2/marks/band.js +0 -59
  68. package/dist/ChartV2/marks/bar.d.ts +0 -17
  69. package/dist/ChartV2/marks/bar.d.ts.map +0 -1
  70. package/dist/ChartV2/marks/bar.js +0 -120
  71. package/dist/ChartV2/marks/candlestick.d.ts +0 -15
  72. package/dist/ChartV2/marks/candlestick.d.ts.map +0 -1
  73. package/dist/ChartV2/marks/candlestick.js +0 -83
  74. package/dist/ChartV2/marks/dot.d.ts +0 -15
  75. package/dist/ChartV2/marks/dot.d.ts.map +0 -1
  76. package/dist/ChartV2/marks/dot.js +0 -65
  77. package/dist/ChartV2/marks/dotGL.d.ts +0 -16
  78. package/dist/ChartV2/marks/dotGL.d.ts.map +0 -1
  79. package/dist/ChartV2/marks/dotGL.js +0 -178
  80. package/dist/ChartV2/marks/dotGLInteractive.d.ts +0 -30
  81. package/dist/ChartV2/marks/dotGLInteractive.d.ts.map +0 -1
  82. package/dist/ChartV2/marks/dotGLInteractive.js +0 -464
  83. package/dist/ChartV2/marks/errorBar.d.ts +0 -27
  84. package/dist/ChartV2/marks/errorBar.d.ts.map +0 -1
  85. package/dist/ChartV2/marks/errorBar.js +0 -87
  86. package/dist/ChartV2/marks/heatmapGL.d.ts +0 -23
  87. package/dist/ChartV2/marks/heatmapGL.d.ts.map +0 -1
  88. package/dist/ChartV2/marks/heatmapGL.js +0 -242
  89. package/dist/ChartV2/marks/index.d.ts +0 -13
  90. package/dist/ChartV2/marks/index.d.ts.map +0 -1
  91. package/dist/ChartV2/marks/index.js +0 -14
  92. package/dist/ChartV2/marks/line.d.ts +0 -18
  93. package/dist/ChartV2/marks/line.d.ts.map +0 -1
  94. package/dist/ChartV2/marks/line.js +0 -76
  95. package/dist/ChartV2/marks/referenceLine.d.ts +0 -35
  96. package/dist/ChartV2/marks/referenceLine.d.ts.map +0 -1
  97. package/dist/ChartV2/marks/referenceLine.js +0 -186
  98. package/dist/ChartV2/marks/streamGL.d.ts +0 -36
  99. package/dist/ChartV2/marks/streamGL.d.ts.map +0 -1
  100. package/dist/ChartV2/marks/streamGL.js +0 -204
  101. package/dist/ChartV2/tooltip.d.ts +0 -38
  102. package/dist/ChartV2/tooltip.d.ts.map +0 -1
  103. package/dist/ChartV2/tooltip.js +0 -54
  104. package/dist/ChartV2/types.d.ts +0 -115
  105. package/dist/ChartV2/types.d.ts.map +0 -1
  106. package/dist/ChartV2/types.js +0 -35
  107. package/src/ChartV2/Chart.tsx +0 -348
  108. package/src/ChartV2/ChartAxis.tsx +0 -209
  109. package/src/ChartV2/ChartGrid.tsx +0 -99
  110. package/src/ChartV2/ChartLegend.tsx +0 -69
  111. package/src/ChartV2/ChartSwatch.doc.mjs +0 -17
  112. package/src/ChartV2/ChartSwatch.tsx +0 -86
  113. package/src/ChartV2/ChartTooltip.tsx +0 -382
  114. package/src/ChartV2/ChartV2.doc.mjs +0 -16
  115. package/src/ChartV2/ChartV2Context.ts +0 -15
  116. package/src/ChartV2/index.ts +0 -62
  117. package/src/ChartV2/layout.ts +0 -223
  118. package/src/ChartV2/legend.ts +0 -32
  119. package/src/ChartV2/marks/area.tsx +0 -122
  120. package/src/ChartV2/marks/band.tsx +0 -70
  121. package/src/ChartV2/marks/bar.tsx +0 -159
  122. package/src/ChartV2/marks/candlestick.tsx +0 -106
  123. package/src/ChartV2/marks/dot.tsx +0 -64
  124. package/src/ChartV2/marks/dotGL.tsx +0 -202
  125. package/src/ChartV2/marks/dotGLInteractive.tsx +0 -546
  126. package/src/ChartV2/marks/errorBar.tsx +0 -89
  127. package/src/ChartV2/marks/heatmapGL.tsx +0 -299
  128. package/src/ChartV2/marks/index.ts +0 -14
  129. package/src/ChartV2/marks/line.tsx +0 -94
  130. package/src/ChartV2/marks/referenceLine.tsx +0 -224
  131. package/src/ChartV2/marks/streamGL.tsx +0 -251
  132. package/src/ChartV2/tooltip.ts +0 -70
  133. package/src/ChartV2/types.ts +0 -129
@@ -9,6 +9,8 @@ export interface CodeEditorProps extends Omit<BaseProps<HTMLDivElement>, 'onChan
9
9
  onChange: (value: string) => void;
10
10
  /** Language for highlighting. @default "plaintext" */
11
11
  language?: string;
12
+ /** Label for the code editor — used as the accessible name of the editable region. */
13
+ label: string;
12
14
  /** Show line numbers. @default false */
13
15
  hasLineNumbers?: boolean;
14
16
  /** Read-only mode. @default false */
@@ -32,6 +34,7 @@ export interface CodeEditorProps extends Omit<BaseProps<HTMLDivElement>, 'onChan
32
34
  * ```tsx
33
35
  * const [code, setCode] = useState('');
34
36
  * <CodeEditor
37
+ * label="Source code"
35
38
  * value={code}
36
39
  * onChange={setCode}
37
40
  * language="typescript"
@@ -39,7 +42,7 @@ export interface CodeEditorProps extends Omit<BaseProps<HTMLDivElement>, 'onChan
39
42
  * />
40
43
  * ```
41
44
  */
42
- export declare function CodeEditor({ value, onChange, language, hasLineNumbers, isReadOnly, placeholder, maxHeight, size, tokenizer: customTokenizer, xstyle, className, style, ref, ...props }: CodeEditorProps): import("react").JSX.Element;
45
+ export declare function CodeEditor({ value, onChange, language, hasLineNumbers, isReadOnly, placeholder, maxHeight, size, tokenizer: customTokenizer, label, xstyle, className, style, ref, ...props }: CodeEditorProps): import("react").JSX.Element;
43
46
  export declare namespace CodeEditor {
44
47
  var displayName: string;
45
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../src/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAiBlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAuF5D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;CAC7D;AA6BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAsB,EACtB,cAAsB,EACtB,UAAkB,EAClB,WAAW,EACX,SAAS,EACT,IAAW,EACX,SAAS,EAAE,eAAe,EAC1B,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,+BAiQjB;yBAhRe,UAAU"}
1
+ {"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../src/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAiBlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAuF5D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;CAC7D;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAsB,EACtB,cAAsB,EACtB,UAAkB,EAClB,WAAW,EACX,SAAS,EACT,IAAW,EACX,SAAS,EAAE,eAAe,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,+BAkQjB;yBAlRe,UAAU"}
@@ -132,6 +132,7 @@ let editorInstanceCounter = 0;
132
132
  * ```tsx
133
133
  * const [code, setCode] = useState('');
134
134
  * <CodeEditor
135
+ * label="Source code"
135
136
  * value={code}
136
137
  * onChange={setCode}
137
138
  * language="typescript"
@@ -149,6 +150,7 @@ export function CodeEditor({
149
150
  maxHeight,
150
151
  size = 'md',
151
152
  tokenizer: customTokenizer,
153
+ label,
152
154
  xstyle,
153
155
  className,
154
156
  style,
@@ -379,6 +381,7 @@ export function CodeEditor({
379
381
  contentEditable: isReadOnly ? false : 'plaintext-only',
380
382
  role: "textbox",
381
383
  "aria-multiline": "true",
384
+ "aria-label": label,
382
385
  "aria-readonly": isReadOnly,
383
386
  spellCheck: false,
384
387
  onInput: handleInput,
@@ -1 +1 @@
1
- {"version":3,"file":"SankeyChart.d.ts","sourceRoot":"","sources":["../../src/Sankey/SankeyChart.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,uBAAuB;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA+CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAY,EACZ,SAAc,EACd,OAAY,EACZ,SAAS,EACT,cAAoB,EACpB,QAAQ,GACT,EAAE,gBAAgB,+BAkFlB;yBA5Fe,WAAW"}
1
+ {"version":3,"file":"SankeyChart.d.ts","sourceRoot":"","sources":["../../src/Sankey/SankeyChart.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,uBAAuB;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA+CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAY,EACZ,SAAc,EACd,OAAY,EACZ,SAAS,EACT,cAAoB,EACpB,QAAQ,GACT,EAAE,gBAAgB,+BAqFlB;yBA/Fe,WAAW"}
@@ -140,6 +140,9 @@ export function SankeyChart({
140
140
  width: '100%'
141
141
  },
142
142
  children: ctx && /*#__PURE__*/_jsx("div", {
143
+ role: needsScroll ? 'group' : undefined,
144
+ "aria-label": needsScroll ? 'Sankey chart' : undefined,
145
+ tabIndex: needsScroll ? 0 : undefined,
143
146
  style: needsScroll ? {
144
147
  overflowX: 'auto',
145
148
  overflowY: 'hidden'
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/Schedule/ListView.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,YAAY,EAEb,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAqID,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EAAE,QAAY,GACnB,GAAE,uBAA4B,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAmCtE"}
1
+ {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/Schedule/ListView.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,YAAY,EAEb,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAwID,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EAAE,QAAY,GACnB,GAAE,uBAA4B,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAmCtE"}
@@ -22,7 +22,8 @@ function ScheduleListView(_props) {
22
22
  events,
23
23
  timezoneID,
24
24
  range,
25
- isLoading
25
+ isLoading,
26
+ headingLevel
26
27
  } = useScheduleContext();
27
28
  const days = enumerateDates(range.startDate, range.endDate);
28
29
  const currentTime = useCurrentTime();
@@ -59,7 +60,8 @@ function ScheduleListView(_props) {
59
60
  children: [/*#__PURE__*/_jsx(ListDayHeading, {
60
61
  day: day,
61
62
  isCurrentDay: isCurrentDay,
62
- timezoneID: timezoneID
63
+ timezoneID: timezoneID,
64
+ headingLevel: headingLevel
63
65
  }), /*#__PURE__*/_jsx("div", {
64
66
  ...stylex.props(styles.listEvents),
65
67
  children: renderListRows({
@@ -76,10 +78,11 @@ function ScheduleListView(_props) {
76
78
  function ListDayHeading({
77
79
  day,
78
80
  isCurrentDay,
79
- timezoneID
81
+ timezoneID,
82
+ headingLevel
80
83
  }) {
81
84
  return /*#__PURE__*/_jsxs(Heading, {
82
- level: 4,
85
+ level: headingLevel,
83
86
  color: "secondary",
84
87
  display: "block",
85
88
  "aria-label": formatFullDate(day, timezoneID),
@@ -25,7 +25,8 @@ function ScheduleMonthlyView(_props) {
25
25
  focusDate,
26
26
  timezoneID,
27
27
  range,
28
- isLoading
28
+ isLoading,
29
+ headingLevel
29
30
  } = useScheduleContext();
30
31
  const rangeDate = date.toPlainDate();
31
32
  const highlightedDate = focusDate.toPlainDate();
@@ -55,7 +56,7 @@ function ScheduleMonthlyView(_props) {
55
56
  "aria-colindex": index + 1,
56
57
  ...stylex.props(styles.weekdayLabel),
57
58
  children: /*#__PURE__*/_jsx(Heading, {
58
- level: 4,
59
+ level: headingLevel,
59
60
  color: "secondary",
60
61
  display: "block",
61
62
  xstyle: styles.weekdayHeading,
@@ -17,6 +17,8 @@ export interface ScheduleProps<Options extends ScheduleViewOptions = ScheduleVie
17
17
  timezoneID?: string;
18
18
  /** Header/rendering plugins. Defaults to pagination controls. */
19
19
  plugins?: ReadonlyArray<SchedulePlugin>;
20
+ /** Heading level for sub-headings (day labels, weekday headers) within the schedule. @default 3 */
21
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
20
22
  }
21
- export declare function Schedule({ view, events, categories, date, focusDate: focusDateProp, onChangeDate, timezoneID: timezoneIDProp, plugins, xstyle, className, style, ...rest }: ScheduleProps): import("react").JSX.Element;
23
+ export declare function Schedule({ view, events, categories, date, focusDate: focusDateProp, onChangeDate, timezoneID: timezoneIDProp, plugins, headingLevel, xstyle, className, style, ...rest }: ScheduleProps): import("react").JSX.Element;
22
24
  //# sourceMappingURL=Schedule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/Schedule/Schedule.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAQlD,OAAO,KAAK,EAEV,OAAO,EAEP,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,aAAa,CAC5B,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CACzD,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjC,iEAAiE;IACjE,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC5B,sFAAsF;IACtF,MAAM,EAAE,mBAAmB,CAAC;IAC5B,qFAAqF;IACrF,UAAU,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC7C,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACzC;AAiJD,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,UAAe,EACf,IAAI,EACJ,SAAS,EAAE,aAAa,EACxB,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,OAAgC,EAChC,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,aAAa,+BA0Ff"}
1
+ {"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/Schedule/Schedule.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAQlD,OAAO,KAAK,EAEV,OAAO,EAEP,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,aAAa,CAC5B,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CACzD,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjC,iEAAiE;IACjE,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC5B,sFAAsF;IACtF,MAAM,EAAE,mBAAmB,CAAC;IAC5B,qFAAqF;IACrF,UAAU,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC7C,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACxC,mGAAmG;IACnG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAoJD,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,UAAe,EACf,IAAI,EACJ,SAAS,EAAE,aAAa,EACxB,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,OAAgC,EAChC,YAAgB,EAChB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,aAAa,+BA4Ff"}
@@ -84,7 +84,8 @@ function ScheduleViewContent({
84
84
  onToday,
85
85
  onNextDate,
86
86
  nextDateLabel,
87
- plugins
87
+ plugins,
88
+ headingLevel
88
89
  }) {
89
90
  const Component = view.component;
90
91
  const range = getRange(view, date);
@@ -104,7 +105,8 @@ function ScheduleViewContent({
104
105
  onNextDate,
105
106
  nextDateLabel,
106
107
  view,
107
- plugins
108
+ plugins,
109
+ headingLevel
108
110
  },
109
111
  children: /*#__PURE__*/_jsx(Component, {
110
112
  options: view.options
@@ -120,6 +122,7 @@ export function Schedule({
120
122
  onChangeDate,
121
123
  timezoneID: timezoneIDProp,
122
124
  plugins = defaultSchedulePlugins,
125
+ headingLevel = 3,
123
126
  xstyle,
124
127
  className,
125
128
  style,
@@ -164,7 +167,8 @@ export function Schedule({
164
167
  onToday: onToday,
165
168
  onNextDate: onNextDate,
166
169
  nextDateLabel: nextDateRange.label,
167
- plugins: plugins
170
+ plugins: plugins,
171
+ headingLevel: headingLevel
168
172
  }),
169
173
  children: /*#__PURE__*/_jsx(ScheduleViewContent, {
170
174
  view: view,
@@ -178,7 +182,8 @@ export function Schedule({
178
182
  onToday: onToday,
179
183
  onNextDate: onNextDate,
180
184
  nextDateLabel: nextDateRange.label,
181
- plugins: plugins
185
+ plugins: plugins,
186
+ headingLevel: headingLevel
182
187
  })
183
188
  })
184
189
  });
@@ -26,7 +26,8 @@ export function TimeGridView({
26
26
  hourHeight
27
27
  }) {
28
28
  const {
29
- categories
29
+ categories,
30
+ headingLevel
30
31
  } = useScheduleContext();
31
32
  const normalizedMinHour = Math.max(0, Math.min(23, Math.floor(minHour)));
32
33
  const normalizedMaxHour = Math.max(normalizedMinHour + 1, Math.min(24, Math.floor(maxHour)));
@@ -60,7 +61,7 @@ export function TimeGridView({
60
61
  children: days.map((day, index) => /*#__PURE__*/_jsx("div", {
61
62
  ...stylex.props(styles.timeGridHeaderCell, index === days.length - 1 && styles.timeGridHeaderCellLast),
62
63
  children: /*#__PURE__*/_jsx(Heading, {
63
- level: 4,
64
+ level: headingLevel,
64
65
  color: "secondary",
65
66
  display: "block",
66
67
  xstyle: styles.timeGridHeaderHeading,
@@ -14,6 +14,8 @@ export interface ScheduleContextValue {
14
14
  nextDateLabel: string;
15
15
  view: ScheduleViewBase;
16
16
  plugins: ReadonlyArray<SchedulePlugin>;
17
+ /** Heading level used for sub-headings within the schedule (day labels, weekday headers). */
18
+ headingLevel: 2 | 3 | 4 | 5 | 6;
17
19
  }
18
20
  export declare const ScheduleContext: import("react").Context<ScheduleContextValue | null>;
19
21
  export declare function useScheduleContext(): ScheduleContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/Schedule/context.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACrC,UAAU,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,eAAe,sDAE3B,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/Schedule/context.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACrC,UAAU,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,6FAA6F;IAC7F,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,eAAe,sDAE3B,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD"}
package/dist/index.d.ts CHANGED
@@ -21,7 +21,6 @@ export { RadialChart, type RadialChartProps, RadialGrid, type RadialGridProps, R
21
21
  export { ThreeDChart, type ThreeDChartProps, ThreeDScatter, ThreeDScatterGL, type ThreeDScatterProps, type ThreeDScatterGLProps, ThreeDBar, type ThreeDBarProps, ThreeDGrid, type ThreeDGridProps, ThreeDAxis, type ThreeDAxisProps, ThreeDSurface, type ThreeDSurfaceProps, use3D, type ThreeDContext, type Camera, type Point3D, type ProjectedPoint, } from './ThreeD';
22
22
  export { ChartBrush, type ChartBrushProps, type BrushMode, type BrushRange, ChartZoom, type ChartZoomProps, ChartSelect, type ChartSelectProps, ChartReferenceLine, type ChartReferenceLineProps, } from './Chart';
23
23
  export { SankeyChart, type SankeyChartProps, SankeyLink, type SankeyLinkProps, SankeyNode, type SankeyNodeProps, SankeyLabel, type SankeyLabelProps, useSankey, type SankeyNodeDatum, type SankeyLinkDatum, type SankeyColumn, type SankeyColumnDef, type SankeyNodeLayout, type SankeyLinkLayout, type SankeyColumnLayout, SankeyGrid, type SankeyGridProps, type SankeyContext, } from './Sankey';
24
- export { Chart as ChartV2, type ChartProps as ChartV2Props, ChartLegend as ChartV2Legend, type ChartLegendProps as ChartV2LegendProps, type LegendItem as ChartV2LegendItem, ChartAxis as ChartV2Axis, type ChartAxisProps as ChartV2AxisProps, ChartGrid as ChartV2Grid, type ChartGridProps as ChartV2GridProps, ChartSwatch as ChartV2Swatch, swatchVariantForType as xdsChartV2SwatchVariantForType, type ChartSwatchProps as ChartV2SwatchProps, type ChartSwatchVariant as ChartV2SwatchVariant, ChartTooltip as ChartV2Tooltip, type ChartTooltipProps as ChartV2TooltipProps, type ChartTooltipPlacement as ChartV2TooltipPlacement, type TooltipSeriesValue as ChartV2TooltipSeriesValue, bar, line, dot, area, band, candlestick, errorBar, referenceLine, dotGL, dotGLInteractive, heatmapGL, streamGL, useChartV2, type SeriesDef, type ChartV2Context, type ChartPointerEvent, type ResolvedPoint, type ResolvedPositions, type SeriesContext, type ErrorBarOptions, type ReferenceLineOptions, type DotGLOptions, type DotGLInteractiveOptions, type HeatmapGLOptions, type StreamGLOptions, type StreamGLHandle, } from './ChartV2';
25
24
  export * from './Stepper';
26
25
  export * from './CircularProgress';
27
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ export { ChartBrush, ChartZoom, ChartSelect, ChartReferenceLine } from "./Chart/
44
44
  // Sankey / flow diagrams — ribbon-based flow visualization
45
45
  export { SankeyChart, SankeyLink, SankeyNode, SankeyLabel, useSankey, SankeyGrid } from "./Sankey/index.js";
46
46
 
47
- // Chart v2 config model
48
- export { Chart as ChartV2, ChartLegend as ChartV2Legend, ChartAxis as ChartV2Axis, ChartGrid as ChartV2Grid, ChartSwatch as ChartV2Swatch, swatchVariantForType as xdsChartV2SwatchVariantForType, ChartTooltip as ChartV2Tooltip, bar, line, dot, area, band, candlestick, errorBar, referenceLine, dotGL, dotGLInteractive, heatmapGL, streamGL, useChartV2 } from "./ChartV2/index.js";
47
+ // Chart v2 (config model) moved to its own package: @astryxdesign/charts.
48
+ // It is no longer re-exported from @astryxdesign/lab.
49
49
  export * from "./Stepper/index.js";
50
50
  export * from "./CircularProgress/index.js";
package/dist/lab.css CHANGED
@@ -74,8 +74,6 @@
74
74
  .x1r9gxr1:not(#\#):not(#\#){border-color:var(--color-border-teal)}
75
75
  .x1kpnwn1:not(#\#):not(#\#){border-color:var(--color-border-yellow)}
76
76
  .x14i3s5s:not(#\#):not(#\#){border-color:var(--color-border)}
77
- .xbvija:not(#\#):not(#\#){border-radius:1.5px}
78
- .x1cum3z5:not(#\#):not(#\#){border-radius:2px}
79
77
  .x1hviunn:not(#\#):not(#\#){border-radius:var(--radius-container)}
80
78
  .xh6dtrn:not(#\#):not(#\#){border-radius:var(--radius-element)}
81
79
  .xjspbzw:not(#\#):not(#\#){border-radius:var(--radius-full)}
@@ -102,7 +100,6 @@
102
100
  .x33j1x8:not(#\#):not(#\#){grid-row:var(--x-gridRow)}
103
101
  .x17y0mx6:not(#\#):not(#\#){inset-inline:0}
104
102
  .x1yqqeh1:not(#\#):not(#\#){margin-block:var(--spacing-0-5)}
105
- .xckhbgb:not(#\#):not(#\#){margin-inline:1px}
106
103
  .x1a2a7pz:not(#\#):not(#\#){outline:none}
107
104
  .xysyzu8:not(#\#):not(#\#){overflow:auto}
108
105
  .xb3r6kr:not(#\#):not(#\#){overflow:hidden}
@@ -166,7 +163,6 @@
166
163
  .xwmxj5m:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-muted)}
167
164
  .x1e9xt6e:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-orange)}
168
165
  .xnpoty2:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-pink)}
169
- .x1prclbq:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-popover)}
170
166
  .x16i6n6f:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-purple)}
171
167
  .x1cibrc5:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-red)}
172
168
  .x1jtji5o:not(#\#):not(#\#):not(#\#){background-color:var(--color-background-teal)}
@@ -192,7 +188,6 @@
192
188
  .x10w94by:not(#\#):not(#\#):not(#\#){border-inline-end-width:0}
193
189
  .xw8tdv1:not(#\#):not(#\#):not(#\#){border-inline-end-width:var(--border-width)}
194
190
  .x18oyj42:not(#\#):not(#\#):not(#\#){box-shadow:0 0 0 1px var(--color-accent)}
195
- .x14hfi27:not(#\#):not(#\#):not(#\#){box-shadow:var(--shadow-med)}
196
191
  .x1ftfhsn:not(#\#):not(#\#):not(#\#){caret-color:var(--color-text-primary)}
197
192
  .xeh89do:not(#\#):not(#\#):not(#\#){clip:rect(0 0 0 0)}
198
193
  .xzpqnlu:not(#\#):not(#\#):not(#\#){clip:rect(0,0,0,0)}
@@ -240,7 +235,6 @@
240
235
  .x78zum5:not(#\#):not(#\#):not(#\#){display:flex}
241
236
  .xrvj5dj:not(#\#):not(#\#):not(#\#){display:grid}
242
237
  .x3nfvp2:not(#\#):not(#\#):not(#\#){display:inline-flex}
243
- .x1s85apg:not(#\#):not(#\#):not(#\#){display:none}
244
238
  .xbh8q5q:not(#\#):not(#\#):not(#\#){fill:none}
245
239
  .xdt5ytf:not(#\#):not(#\#):not(#\#){flex-direction:column}
246
240
  .x1q0g3np:not(#\#):not(#\#):not(#\#){flex-direction:row}
@@ -303,19 +297,15 @@
303
297
  .x67bb7w:not(#\#):not(#\#):not(#\#){pointer-events:auto}
304
298
  .x47corl:not(#\#):not(#\#):not(#\#){pointer-events:none}
305
299
  .x10l6tqk:not(#\#):not(#\#):not(#\#){position:absolute}
306
- .xixxii4:not(#\#):not(#\#):not(#\#){position:fixed}
307
300
  .x1n2onr6:not(#\#):not(#\#):not(#\#){position:relative}
308
301
  .x1owpc8m:not(#\#):not(#\#):not(#\#){stroke-linecap:round}
309
- .xnpr05h:not(#\#):not(#\#):not(#\#){stroke-width:1}
310
302
  .ximx5ud:not(#\#):not(#\#):not(#\#){stroke:var(--color-accent-muted)}
311
303
  .xjsr54c:not(#\#):not(#\#):not(#\#){stroke:var(--color-accent)}
312
- .x113i6qz:not(#\#):not(#\#):not(#\#){stroke:var(--color-border-emphasized)}
313
304
  .xjswp7v:not(#\#):not(#\#):not(#\#){stroke:var(--color-error-muted)}
314
305
  .x1vco6zm:not(#\#):not(#\#):not(#\#){stroke:var(--color-error)}
315
306
  .x1uro670:not(#\#):not(#\#):not(#\#){stroke:var(--color-success-muted)}
316
307
  .x8y33gb:not(#\#):not(#\#):not(#\#){stroke:var(--color-success)}
317
308
  .xuxf9kk:not(#\#):not(#\#):not(#\#){stroke:var(--color-text-disabled)}
318
- .x1lo1t26:not(#\#):not(#\#):not(#\#){stroke:var(--color-text-primary)}
319
309
  .xpi25hw:not(#\#):not(#\#):not(#\#){stroke:var(--color-track)}
320
310
  .x1wjzxuj:not(#\#):not(#\#):not(#\#){stroke:var(--color-warning-muted)}
321
311
  .x9ezeq1:not(#\#):not(#\#):not(#\#){stroke:var(--color-warning)}
@@ -342,7 +332,6 @@
342
332
  .x1lldw8n:not(#\#):not(#\#):not(#\#){word-break:normal}
343
333
  .x1vjfegm:not(#\#):not(#\#):not(#\#){z-index:1}
344
334
  .x1355qak:not(#\#):not(#\#):not(#\#){z-index:20}
345
- .x1q2oy4v:not(#\#):not(#\#):not(#\#){z-index:9999}
346
335
  .xr3buco:not(#\#):not(#\#):not(#\#){z-index:var(--x-zIndex)}
347
336
  .x7s97pk:focus-visible:not(#\#):not(#\#):not(#\#){outline-offset:2px}
348
337
  .xyxi2l3:active:not(#\#):not(#\#):not(#\#){background-color:var(--color-overlay-pressed)}
@@ -363,16 +352,13 @@
363
352
  .xjm9jq1:not(#\#):not(#\#):not(#\#):not(#\#){height:1px}
364
353
  .xxk0z11:not(#\#):not(#\#):not(#\#):not(#\#){height:24px}
365
354
  .x1gnnpzl:not(#\#):not(#\#):not(#\#):not(#\#){height:30px}
366
- .xuoj239:not(#\#):not(#\#):not(#\#):not(#\#){height:3px}
367
355
  .xqu0tyb:not(#\#):not(#\#):not(#\#):not(#\#){height:4px}
368
356
  .x1d9x2de:not(#\#):not(#\#):not(#\#):not(#\#){height:640px}
369
- .xdk7pt:not(#\#):not(#\#):not(#\#):not(#\#){height:8px}
370
357
  .xhigkf7:not(#\#):not(#\#):not(#\#):not(#\#){height:var(--icon-size)}
371
358
  .x6b6gus:not(#\#):not(#\#):not(#\#):not(#\#){height:var(--spacing-4)}
372
359
  .x1grt7ep:not(#\#):not(#\#):not(#\#):not(#\#){height:var(--spacing-5)}
373
360
  .x16ye13r:not(#\#):not(#\#):not(#\#):not(#\#){height:var(--x-height)}
374
361
  .x1unci72:not(#\#):not(#\#):not(#\#):not(#\#){left:var(--spacing-4)}
375
- .x1yztbdb:not(#\#):not(#\#):not(#\#):not(#\#){margin-bottom:16px}
376
362
  .xlstkdb:not(#\#):not(#\#):not(#\#):not(#\#){margin-bottom:var(--spacing-0-5)}
377
363
  .x160xvyo:not(#\#):not(#\#):not(#\#):not(#\#){margin-top:calc(var(--spacing-1) * -1)}
378
364
  .xtbrsbv:not(#\#):not(#\#):not(#\#):not(#\#){margin-top:var(--spacing-2)}
@@ -401,7 +387,6 @@
401
387
  .xvy4d1p:not(#\#):not(#\#):not(#\#):not(#\#){width:24px}
402
388
  .x1849jeq:not(#\#):not(#\#):not(#\#):not(#\#){width:30px}
403
389
  .x51ohtg:not(#\#):not(#\#):not(#\#):not(#\#){width:4px}
404
- .x1xc55vz:not(#\#):not(#\#):not(#\#):not(#\#){width:8px}
405
390
  .x1oai4fc:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--icon-size)}
406
391
  .x12xnipv:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--spacing-4)}
407
392
  .xfyiiit:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--spacing-5)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/lab",
3
- "version": "0.1.4-canary.f5fcc51",
3
+ "version": "0.1.4-canary.f767ee2",
4
4
  "description": "Experimental Astryx components — published to npm only under the @canary dist-tag for early testing; never released as a stable (latest) version.",
5
5
  "author": "Meta Open Source",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@stylexjs/stylex": ">=0.10.0",
48
- "@astryxdesign/core": "0.1.4-canary.f5fcc51",
48
+ "@astryxdesign/core": "0.1.4-canary.f767ee2",
49
49
  "react": ">=19.0.0",
50
50
  "react-dom": ">=19.0.0"
51
51
  },
@@ -0,0 +1,21 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ import {describe, it, expect} from 'vitest';
4
+ import {render, screen} from '@testing-library/react';
5
+ import {CodeEditor} from './CodeEditor';
6
+
7
+ describe('CodeEditor', () => {
8
+ it('uses the label prop as the accessible name', () => {
9
+ render(
10
+ <CodeEditor
11
+ value=""
12
+ onChange={() => {}}
13
+ language="typescript"
14
+ label="Edit snippet"
15
+ />,
16
+ );
17
+ expect(
18
+ screen.getByRole('textbox', {name: 'Edit snippet'}),
19
+ ).toBeInTheDocument();
20
+ });
21
+ });
@@ -131,6 +131,8 @@ export interface CodeEditorProps extends Omit<
131
131
  onChange: (value: string) => void;
132
132
  /** Language for highlighting. @default "plaintext" */
133
133
  language?: string;
134
+ /** Label for the code editor — used as the accessible name of the editable region. */
135
+ label: string;
134
136
  /** Show line numbers. @default false */
135
137
  hasLineNumbers?: boolean;
136
138
  /** Read-only mode. @default false */
@@ -182,6 +184,7 @@ let editorInstanceCounter = 0;
182
184
  * ```tsx
183
185
  * const [code, setCode] = useState('');
184
186
  * <CodeEditor
187
+ * label="Source code"
185
188
  * value={code}
186
189
  * onChange={setCode}
187
190
  * language="typescript"
@@ -199,6 +202,7 @@ export function CodeEditor({
199
202
  maxHeight,
200
203
  size = 'md',
201
204
  tokenizer: customTokenizer,
205
+ label,
202
206
  xstyle,
203
207
  className,
204
208
  style,
@@ -447,6 +451,7 @@ export function CodeEditor({
447
451
  contentEditable={isReadOnly ? false : ('plaintext-only' as any)}
448
452
  role="textbox"
449
453
  aria-multiline="true"
454
+ aria-label={label}
450
455
  aria-readonly={isReadOnly}
451
456
  spellCheck={false}
452
457
  onInput={handleInput}
@@ -11,7 +11,7 @@ export const docs = {
11
11
  {
12
12
  name: 'content',
13
13
  type: 'ReactNode',
14
- description: 'Content to display in the tooltip. Typically short, non-interactive text. Mirrors Tooltips content prop.',
14
+ description: 'Content to display in the tooltip. Typically short, non-interactive text. Mirrors Tooltip\'s content prop.',
15
15
  required: true,
16
16
  },
17
17
  {
@@ -0,0 +1,77 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ import {describe, it, expect, beforeEach, afterEach, vi} from 'vitest';
4
+ import {render, screen, act} from '@testing-library/react';
5
+ import {SankeyChart} from './SankeyChart';
6
+ import {SankeyNode} from './SankeyNode';
7
+
8
+ const nodes = [
9
+ {id: 'a', label: 'A', value: 10},
10
+ {id: 'b', label: 'B', value: 10},
11
+ {id: 'c', label: 'C', value: 10},
12
+ ];
13
+ const links = [
14
+ {source: 'a', target: 'b', value: 5},
15
+ {source: 'b', target: 'c', value: 5},
16
+ ];
17
+
18
+ // Capture the ResizeObserver callback so tests can drive the reported width.
19
+ let resizeCallback: ResizeObserverCallback | undefined;
20
+
21
+ beforeEach(() => {
22
+ resizeCallback = undefined;
23
+ vi.stubGlobal(
24
+ 'ResizeObserver',
25
+ class {
26
+ constructor(cb: ResizeObserverCallback) {
27
+ resizeCallback = cb;
28
+ }
29
+ observe() {}
30
+ unobserve() {}
31
+ disconnect() {}
32
+ },
33
+ );
34
+ });
35
+
36
+ afterEach(() => {
37
+ vi.unstubAllGlobals();
38
+ });
39
+
40
+ function reportWidth(width: number) {
41
+ act(() => {
42
+ resizeCallback?.(
43
+ [{contentRect: {width}} as unknown as ResizeObserverEntry],
44
+ {} as ResizeObserver,
45
+ );
46
+ });
47
+ }
48
+
49
+ describe('SankeyChart scroll container', () => {
50
+ it('is keyboard-focusable when the chart needs horizontal scrolling', () => {
51
+ render(
52
+ <SankeyChart nodes={nodes} links={links} minColumnWidth={400}>
53
+ <SankeyNode />
54
+ </SankeyChart>,
55
+ );
56
+
57
+ // Container narrower than the minimum column width forces scrolling.
58
+ reportWidth(300);
59
+
60
+ const scrollRegion = screen.getByRole('group', {name: 'Sankey chart'});
61
+ expect(scrollRegion).toHaveAttribute('tabindex', '0');
62
+ });
63
+
64
+ it('does not add a focusable scroll region when everything fits', () => {
65
+ render(
66
+ <SankeyChart nodes={nodes} links={links} minColumnWidth={50}>
67
+ <SankeyNode />
68
+ </SankeyChart>,
69
+ );
70
+
71
+ reportWidth(1000);
72
+
73
+ expect(
74
+ screen.queryByRole('group', {name: 'Sankey chart'}),
75
+ ).not.toBeInTheDocument();
76
+ });
77
+ });
@@ -202,6 +202,9 @@ export function SankeyChart({
202
202
  <div ref={containerRef} style={{width: '100%'}}>
203
203
  {ctx && (
204
204
  <div
205
+ role={needsScroll ? 'group' : undefined}
206
+ aria-label={needsScroll ? 'Sankey chart' : undefined}
207
+ tabIndex={needsScroll ? 0 : undefined}
205
208
  style={
206
209
  needsScroll ? {overflowX: 'auto', overflowY: 'hidden'} : undefined
207
210
  }>
@@ -52,7 +52,7 @@ export interface ScheduleListViewOptions {
52
52
  function ScheduleListView(
53
53
  _props: ScheduleViewComponentProps<ScheduleListViewOptions>,
54
54
  ) {
55
- const {events, timezoneID, range, isLoading} = useScheduleContext();
55
+ const {events, timezoneID, range, isLoading, headingLevel} = useScheduleContext();
56
56
  const days = enumerateDates(range.startDate, range.endDate);
57
57
  const currentTime = useCurrentTime();
58
58
  const currentPlainDate = plainDateFromInstant(currentTime, timezoneID);
@@ -97,6 +97,7 @@ function ScheduleListView(
97
97
  day={day}
98
98
  isCurrentDay={isCurrentDay}
99
99
  timezoneID={timezoneID}
100
+ headingLevel={headingLevel}
100
101
  />
101
102
  <div {...stylex.props(styles.listEvents)}>
102
103
  {renderListRows({
@@ -117,14 +118,16 @@ function ListDayHeading({
117
118
  day,
118
119
  isCurrentDay,
119
120
  timezoneID,
121
+ headingLevel,
120
122
  }: {
121
123
  day: PlainDate;
122
124
  isCurrentDay: boolean;
123
125
  timezoneID: string;
126
+ headingLevel: 2 | 3 | 4 | 5 | 6;
124
127
  }) {
125
128
  return (
126
129
  <Heading
127
- level={4}
130
+ level={headingLevel}
128
131
  color="secondary"
129
132
  display="block"
130
133
  aria-label={formatFullDate(day, timezoneID)}
@@ -57,7 +57,7 @@ export interface ScheduleMonthlyViewOptions {
57
57
  function ScheduleMonthlyView(
58
58
  _props: ScheduleViewComponentProps<ScheduleMonthlyViewOptions>,
59
59
  ) {
60
- const {events, categories, date, focusDate, timezoneID, range, isLoading} =
60
+ const {events, categories, date, focusDate, timezoneID, range, isLoading, headingLevel} =
61
61
  useScheduleContext();
62
62
  const rangeDate = date.toPlainDate();
63
63
  const highlightedDate = focusDate.toPlainDate();
@@ -86,7 +86,7 @@ function ScheduleMonthlyView(
86
86
  aria-colindex={index + 1}
87
87
  {...stylex.props(styles.weekdayLabel)}>
88
88
  <Heading
89
- level={4}
89
+ level={headingLevel}
90
90
  color="secondary"
91
91
  display="block"
92
92
  xstyle={styles.weekdayHeading}>
@@ -99,6 +99,45 @@ describe('Schedule', () => {
99
99
  expect(screen.queryByText('Outside range')).not.toBeInTheDocument();
100
100
  });
101
101
 
102
+ it('renders monthly weekday headings at the configured headingLevel (default 3)', async () => {
103
+ render(
104
+ <Schedule
105
+ view={createScheduleMonthlyView()}
106
+ events={events}
107
+ categories={categories}
108
+ date={Date.UTC(2026, 4, 13)}
109
+ focusDate={Date.UTC(2026, 4, 13)}
110
+ timezoneID="UTC"
111
+ />,
112
+ );
113
+
114
+ await waitFor(() => {
115
+ expect(screen.getByText('Visible sync')).toBeInTheDocument();
116
+ });
117
+ expect(
118
+ screen.getAllByRole('heading', {level: 3}).length,
119
+ ).toBeGreaterThan(0);
120
+ });
121
+
122
+ it('renders list day headings at the configured headingLevel (default 3)', async () => {
123
+ render(
124
+ <Schedule
125
+ view={createScheduleListView({days: 7})}
126
+ events={events}
127
+ categories={categories}
128
+ date={Date.UTC(2026, 4, 13)}
129
+ timezoneID="UTC"
130
+ />,
131
+ );
132
+
133
+ await waitFor(() => {
134
+ expect(screen.getByText('Visible sync')).toBeInTheDocument();
135
+ });
136
+ expect(
137
+ screen.getAllByRole('heading', {level: 3}).length,
138
+ ).toBeGreaterThan(0);
139
+ });
140
+
102
141
  it('loads async events with Instant range boundaries', async () => {
103
142
  const loader = vi.fn(
104
143
  async (_start: Instant, _end: Instant) =>