@datatechsolutions/tympan 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -1,5 +1,6 @@
1
1
  /* @datatechsolutions/tympan stylesheet entry (FSL-1.1-ALv2). Everything lives in @layer tympan.*. */
2
2
  @layer tympan.tokens, tympan.base, tympan.components;
3
+ @import '@datatechsolutions/tympan-tokens/fonts.css';
3
4
 
4
5
  /* @datatechsolutions/tympan-tokens/tokens.css */
5
6
  /* @datatechsolutions/tympan-tokens (FSL-1.1-ALv2): generated by scripts/build.mjs from src/base/*.tokens.json, src/presets.ts and src/flow.ts. Do not edit. */
@@ -10081,6 +10082,268 @@
10081
10082
  }
10082
10083
  }
10083
10084
 
10085
+ /* ./components/calendar/Calendar.css */
10086
+ /* Calendar (spec: wave-5-general/calendar.md; design direction §2.3, §2.4, §2.6, §2.10). */
10087
+ @layer tympan.components {
10088
+ .ty-calendar {
10089
+ --ty-calendar-cell: calc(var(--ty-control-height) + var(--ty-space-1));
10090
+ display: flex;
10091
+ flex-direction: column;
10092
+ gap: var(--ty-space-2);
10093
+ min-inline-size: 0;
10094
+ }
10095
+ .ty-calendar__rac {
10096
+ display: block;
10097
+ }
10098
+
10099
+ /* Header: previous / title (or pickers) / next. */
10100
+ .ty-calendar__stepper {
10101
+ display: flex;
10102
+ align-items: center;
10103
+ gap: var(--ty-space-1);
10104
+ }
10105
+ .ty-calendar__nav {
10106
+ display: flex;
10107
+ align-items: center;
10108
+ justify-content: center;
10109
+ inline-size: var(--ty-control-height);
10110
+ block-size: var(--ty-control-height);
10111
+ flex: none;
10112
+ border: 0;
10113
+ border-radius: var(--ty-radius-control);
10114
+ background: transparent;
10115
+ color: var(--ty-ink-2);
10116
+ font: inherit;
10117
+ cursor: pointer;
10118
+ outline: none;
10119
+ }
10120
+ .ty-calendar__nav[data-hovered] {
10121
+ background: var(--ty-surface-sunken);
10122
+ }
10123
+ .ty-calendar__nav[data-pressed] {
10124
+ background: var(--ty-surface-sunken);
10125
+ color: var(--ty-ink);
10126
+ }
10127
+ .ty-calendar__nav[data-focus-visible] {
10128
+ outline: var(--ty-focus-width) solid var(--ty-focus-ring);
10129
+ outline-offset: 2px;
10130
+ }
10131
+ .ty-calendar__nav[aria-disabled='true'],
10132
+ .ty-calendar__nav[data-disabled] {
10133
+ color: var(--ty-ink-3);
10134
+ cursor: not-allowed;
10135
+ opacity: 0.45;
10136
+ }
10137
+ .ty-calendar__heading {
10138
+ flex: 1;
10139
+ min-block-size: var(--ty-control-height);
10140
+ display: flex;
10141
+ align-items: center;
10142
+ justify-content: center;
10143
+ padding-inline: var(--ty-space-2);
10144
+ color: var(--ty-ink);
10145
+ font-size: var(--ty-font-size-label);
10146
+ font-weight: var(--ty-font-weight-semibold);
10147
+ text-align: center;
10148
+ }
10149
+ .ty-calendar__pickers {
10150
+ flex: 1;
10151
+ display: flex;
10152
+ justify-content: center;
10153
+ gap: var(--ty-space-2);
10154
+ }
10155
+
10156
+ /* Month grids, side by side, stacked below the small breakpoint. */
10157
+ .ty-calendar__body {
10158
+ display: flex;
10159
+ gap: var(--ty-space-5);
10160
+ }
10161
+ .ty-calendar[data-months='2'] .ty-calendar__body,
10162
+ .ty-calendar[data-months='3'] .ty-calendar__body {
10163
+ justify-content: center;
10164
+ }
10165
+ .ty-calendar__month {
10166
+ display: flex;
10167
+ gap: var(--ty-space-1);
10168
+ min-inline-size: 0;
10169
+ }
10170
+ .ty-calendar__weeks {
10171
+ display: flex;
10172
+ flex-direction: column;
10173
+ padding-block: calc(var(--ty-font-size-meta) + var(--ty-space-2));
10174
+ }
10175
+ .ty-calendar__week {
10176
+ display: flex;
10177
+ align-items: center;
10178
+ justify-content: flex-end;
10179
+ min-block-size: var(--ty-calendar-cell);
10180
+ padding: 1px;
10181
+ color: var(--ty-ink-3);
10182
+ font-size: var(--ty-font-size-meta);
10183
+ font-variant-numeric: tabular-nums;
10184
+ }
10185
+ .ty-calendar__grid {
10186
+ flex: 1;
10187
+ border-collapse: collapse;
10188
+ border-spacing: 0;
10189
+ }
10190
+ .ty-calendar__weekday {
10191
+ padding-block-end: var(--ty-space-1);
10192
+ color: var(--ty-ink-3);
10193
+ font-size: var(--ty-font-size-meta);
10194
+ font-weight: var(--ty-font-weight-regular);
10195
+ text-align: center;
10196
+ }
10197
+ .ty-calendar__grid td {
10198
+ padding: 1px;
10199
+ text-align: center;
10200
+ }
10201
+
10202
+ /* Day cells: states carry shape and colour, never colour alone. */
10203
+ .ty-calendar__day {
10204
+ display: flex;
10205
+ align-items: center;
10206
+ justify-content: center;
10207
+ min-inline-size: var(--ty-calendar-cell);
10208
+ min-block-size: var(--ty-calendar-cell);
10209
+ border-radius: var(--ty-radius-control);
10210
+ color: var(--ty-ink-2);
10211
+ font-size: var(--ty-font-size-body);
10212
+ font-variant-numeric: tabular-nums;
10213
+ cursor: pointer;
10214
+ outline: none;
10215
+ }
10216
+ .ty-calendar__day-box {
10217
+ display: flex;
10218
+ flex-direction: column;
10219
+ align-items: center;
10220
+ justify-content: center;
10221
+ min-inline-size: 100%;
10222
+ min-block-size: 100%;
10223
+ border-radius: inherit;
10224
+ }
10225
+ .ty-calendar__day[data-outside-month] {
10226
+ color: var(--ty-ink-3);
10227
+ }
10228
+ .ty-calendar[data-months='2'] .ty-calendar__day[data-outside-month],
10229
+ .ty-calendar[data-months='3'] .ty-calendar__day[data-outside-month] {
10230
+ visibility: hidden;
10231
+ }
10232
+ .ty-calendar:not([data-outside-days]) .ty-calendar__day[data-outside-month] {
10233
+ display: none;
10234
+ }
10235
+ .ty-calendar__day[data-hovered] {
10236
+ background: var(--ty-surface-sunken);
10237
+ }
10238
+ .ty-calendar__day-box[data-today] {
10239
+ color: var(--ty-ink);
10240
+ font-weight: var(--ty-font-weight-semibold);
10241
+ box-shadow: inset 0 0 0 1px var(--ty-line-strong);
10242
+ }
10243
+ .ty-calendar__day[data-selected] {
10244
+ background: var(--ty-accent);
10245
+ color: var(--ty-on-cta);
10246
+ font-weight: var(--ty-font-weight-semibold);
10247
+ }
10248
+ .ty-calendar__day[data-selected] .ty-calendar__day-box {
10249
+ color: inherit;
10250
+ }
10251
+ .ty-calendar__day[data-selection-start] {
10252
+ border-start-end-radius: 0;
10253
+ border-end-end-radius: 0;
10254
+ }
10255
+ .ty-calendar__day[data-selection-end] {
10256
+ border-start-start-radius: 0;
10257
+ border-end-start-radius: 0;
10258
+ }
10259
+ .ty-calendar__day[data-selected]:not([data-selection-start]):not([data-selection-end]) {
10260
+ border-radius: 0;
10261
+ }
10262
+ .ty-calendar__day[data-focus-visible] {
10263
+ outline: var(--ty-focus-width) solid var(--ty-focus-ring);
10264
+ outline-offset: 1px;
10265
+ }
10266
+ .ty-calendar__day[data-unavailable] .ty-calendar__day-number {
10267
+ color: var(--ty-ink-3);
10268
+ text-decoration: line-through;
10269
+ }
10270
+ .ty-calendar__day[data-disabled],
10271
+ .ty-calendar__day[data-unavailable] {
10272
+ cursor: not-allowed;
10273
+ }
10274
+ .ty-calendar__day[data-disabled] {
10275
+ opacity: 0.45;
10276
+ }
10277
+ .ty-calendar__error {
10278
+ display: flex;
10279
+ align-items: center;
10280
+ gap: var(--ty-space-1);
10281
+ color: var(--ty-danger);
10282
+ font-size: var(--ty-font-size-meta);
10283
+ line-height: var(--ty-font-line-height-meta);
10284
+ }
10285
+ .ty-calendar__footer {
10286
+ display: flex;
10287
+ flex-wrap: wrap;
10288
+ gap: var(--ty-space-2);
10289
+ padding-block-start: var(--ty-space-2);
10290
+ border-block-start: 1px solid var(--ty-line-soft);
10291
+ }
10292
+
10293
+ /* Touch: every day cell reaches the target size. */
10294
+ @media (pointer: coarse), (max-width: 1023.98px) {
10295
+ .ty-calendar {
10296
+ --ty-calendar-cell: var(--ty-control-target);
10297
+ }
10298
+ }
10299
+
10300
+ /* Several months stack below the small breakpoint. */
10301
+ @media (max-width: 639.98px) {
10302
+ .ty-calendar[data-months='2'] .ty-calendar__body,
10303
+ .ty-calendar[data-months='3'] .ty-calendar__body {
10304
+ flex-direction: column;
10305
+ align-items: center;
10306
+ }
10307
+ }
10308
+
10309
+ @media (prefers-reduced-motion: reduce) {
10310
+ .ty-calendar *,
10311
+ .ty-calendar *::before,
10312
+ .ty-calendar *::after {
10313
+ animation-duration: 0s;
10314
+ transition-duration: 0s;
10315
+ }
10316
+ }
10317
+
10318
+ @media (forced-colors: active) {
10319
+ .ty-calendar__day[data-selected] {
10320
+ background: Highlight;
10321
+ color: HighlightText;
10322
+ forced-color-adjust: none;
10323
+ }
10324
+ .ty-calendar__day-box[data-today] {
10325
+ box-shadow: none;
10326
+ outline: 1px solid CanvasText;
10327
+ }
10328
+ .ty-calendar__day[data-unavailable] {
10329
+ color: GrayText;
10330
+ opacity: 1;
10331
+ }
10332
+ .ty-calendar__day[data-disabled] {
10333
+ color: GrayText;
10334
+ opacity: 1;
10335
+ }
10336
+ .ty-calendar__day[data-focus-visible] {
10337
+ outline: 2px solid Highlight;
10338
+ }
10339
+ .ty-calendar__day,
10340
+ .ty-calendar__weekday,
10341
+ .ty-calendar__week {
10342
+ forced-color-adjust: none;
10343
+ }
10344
+ }
10345
+ }
10346
+
10084
10347
  /* ./components/data-table/DataTable.css */
10085
10348
  /* DataTable (spec: wave-1/data-table.md; design direction §2.2, §2.3, §2.6, §2.9). */
10086
10349
  @layer tympan.components {
@@ -10445,6 +10708,148 @@
10445
10708
  }
10446
10709
  }
10447
10710
 
10711
+ /* ./components/date-range-field/DateRangeField.css */
10712
+ /* DateRangeField (spec: wave-5-general/date-range-field.md; tokens as DateField and Calendar). */
10713
+ @layer tympan.components {
10714
+ .ty-date-range-field {
10715
+ display: flex;
10716
+ flex-direction: column;
10717
+ gap: var(--ty-space-1);
10718
+ min-inline-size: 0;
10719
+ }
10720
+ .ty-date-range-field__picker {
10721
+ min-inline-size: 0;
10722
+ }
10723
+ .ty-date-range-field__group {
10724
+ display: flex;
10725
+ align-items: center;
10726
+ gap: var(--ty-space-2);
10727
+ min-block-size: var(--ty-control-height);
10728
+ padding-inline: var(--ty-space-3);
10729
+ border: 1px solid var(--ty-line);
10730
+ border-radius: var(--ty-radius-control);
10731
+ background: var(--ty-input);
10732
+ color: var(--ty-ink);
10733
+ font-size: var(--ty-font-size-body);
10734
+ cursor: text;
10735
+ }
10736
+ .ty-date-range-field__group[data-focus-within] {
10737
+ border-color: var(--ty-accent);
10738
+ }
10739
+ .ty-date-range-field__group[data-focus-visible] {
10740
+ outline: var(--ty-focus-width) solid var(--ty-focus-ring);
10741
+ outline-offset: 1px;
10742
+ }
10743
+ .ty-date-range-field[data-invalid] .ty-date-range-field__group {
10744
+ border-color: var(--ty-danger);
10745
+ }
10746
+ .ty-date-range-field__group[data-disabled] {
10747
+ background: var(--ty-surface-sunken);
10748
+ color: var(--ty-ink-3);
10749
+ cursor: not-allowed;
10750
+ opacity: 0.6;
10751
+ }
10752
+ .ty-date-range-field__input {
10753
+ display: flex;
10754
+ align-items: center;
10755
+ gap: 1px;
10756
+ min-block-size: var(--ty-control-target);
10757
+ padding-inline: var(--ty-space-1);
10758
+ font-variant-numeric: tabular-nums;
10759
+ outline: none;
10760
+ }
10761
+ .ty-date-range-field__segment {
10762
+ padding-inline: 1px;
10763
+ border-radius: calc(var(--ty-radius-control) / 2);
10764
+ color: var(--ty-ink);
10765
+ font-variant-numeric: tabular-nums;
10766
+ outline: none;
10767
+ cursor: inherit;
10768
+ }
10769
+ .ty-date-range-field__segment[data-placeholder] {
10770
+ color: var(--ty-ink-3);
10771
+ }
10772
+ .ty-date-range-field__segment[data-focus-visible] {
10773
+ outline: var(--ty-focus-width) solid var(--ty-focus-ring);
10774
+ outline-offset: 1px;
10775
+ }
10776
+ .ty-date-range-field__dash {
10777
+ color: var(--ty-ink-3);
10778
+ }
10779
+ .ty-date-range-field__trigger {
10780
+ display: flex;
10781
+ align-items: center;
10782
+ justify-content: center;
10783
+ flex: none;
10784
+ inline-size: var(--ty-control-target);
10785
+ block-size: var(--ty-control-target);
10786
+ margin-inline-end: calc((var(--ty-control-target) - var(--ty-control-height)) / -2);
10787
+ border: 0;
10788
+ border-radius: var(--ty-radius-control);
10789
+ background: transparent;
10790
+ color: var(--ty-ink-2);
10791
+ font: inherit;
10792
+ cursor: pointer;
10793
+ outline: none;
10794
+ }
10795
+ .ty-date-range-field__trigger[data-hovered] {
10796
+ background: var(--ty-surface-sunken);
10797
+ color: var(--ty-ink);
10798
+ }
10799
+ .ty-date-range-field__trigger[data-focus-visible] {
10800
+ outline: var(--ty-focus-width) solid var(--ty-focus-ring);
10801
+ outline-offset: 2px;
10802
+ }
10803
+
10804
+ /* Popover panel: presets and calendar, apply actions at the end. */
10805
+ .ty-date-range-field__surface {
10806
+ display: block;
10807
+ }
10808
+ .ty-date-range-field__panel {
10809
+ display: flex;
10810
+ flex-direction: column;
10811
+ gap: var(--ty-space-3);
10812
+ min-inline-size: 0;
10813
+ }
10814
+ .ty-date-range-field__presets {
10815
+ display: flex;
10816
+ flex-wrap: wrap;
10817
+ gap: var(--ty-space-2);
10818
+ }
10819
+ .ty-date-range-field__actions {
10820
+ display: flex;
10821
+ justify-content: flex-end;
10822
+ gap: var(--ty-space-2);
10823
+ padding-block-start: var(--ty-space-2);
10824
+ border-block-start: 1px solid var(--ty-line-soft);
10825
+ }
10826
+
10827
+ /* Narrow screens: the popover is a tray; presets become a chip row that scrolls. */
10828
+ .ty-date-range-field__surface[data-presentation='tray'] .ty-date-range-field__presets {
10829
+ flex-wrap: nowrap;
10830
+ overflow-x: auto;
10831
+ scroll-snap-type: x proximity;
10832
+ padding-block-end: var(--ty-space-1);
10833
+ }
10834
+
10835
+ @media (prefers-reduced-motion: reduce) {
10836
+ .ty-date-range-field__surface {
10837
+ animation-duration: 0s;
10838
+ transition-duration: 0s;
10839
+ }
10840
+ }
10841
+
10842
+ @media (forced-colors: active) {
10843
+ .ty-date-range-field__group {
10844
+ border-color: CanvasText;
10845
+ forced-color-adjust: none;
10846
+ }
10847
+ .ty-date-range-field__trigger[data-focus-visible] {
10848
+ outline: 2px solid Highlight;
10849
+ }
10850
+ }
10851
+ }
10852
+
10448
10853
  /* ./components/drawer/Drawer.css */
10449
10854
  /* Drawer (spec: wave-1/drawer.md; design direction §2.4, §2.5, §2.7, §2.8). */
10450
10855
  @layer tympan.components {
@@ -14519,6 +14924,78 @@
14519
14924
  }
14520
14925
  }
14521
14926
 
14927
+ /* ./components/tooltip/Tooltip.css */
14928
+ /* Tooltip (spec: wave-5-general/tooltip.md; design direction §2.5, §2.7). */
14929
+ @layer tympan.components {
14930
+ .ty-tooltip {
14931
+ box-sizing: border-box;
14932
+ max-inline-size: min(36ch, calc(100vw - 2 * var(--ty-space-4)));
14933
+ padding-block: var(--ty-space-1) var(--ty-space-1);
14934
+ padding-inline: var(--ty-space-2) var(--ty-space-3);
14935
+ border: 1px solid var(--ty-line);
14936
+ border-radius: var(--ty-radius-control);
14937
+ background: var(--ty-surface-raised-solid);
14938
+ color: var(--ty-ink);
14939
+ font-family: var(--ty-font-sans);
14940
+ font-size: var(--ty-font-size-meta);
14941
+ line-height: var(--ty-font-line-height-meta);
14942
+ box-shadow: var(--ty-shadow-floating);
14943
+ z-index: var(--ty-z-popover);
14944
+ }
14945
+
14946
+ /* Entrance and exit use opacity only (WCAG 1.4.13: hoverable, persistent). */
14947
+ .ty-tooltip[data-entering] {
14948
+ animation: ty-tooltip-fade var(--ty-dur-quick) var(--ty-ease);
14949
+ }
14950
+ .ty-tooltip[data-exiting] {
14951
+ animation: ty-tooltip-fade var(--ty-dur-quick) var(--ty-ease-out) reverse;
14952
+ }
14953
+
14954
+ @keyframes ty-tooltip-fade {
14955
+ from {
14956
+ opacity: 0;
14957
+ }
14958
+ }
14959
+
14960
+ .ty-tooltip__content {
14961
+ display: inline-block;
14962
+ }
14963
+
14964
+ .ty-tooltip__arrow svg {
14965
+ display: block;
14966
+ fill: var(--ty-surface-raised-solid);
14967
+ stroke: var(--ty-line);
14968
+ stroke-width: 1px;
14969
+ }
14970
+
14971
+ @media (prefers-reduced-motion: reduce) {
14972
+ .ty-tooltip[data-entering],
14973
+ .ty-tooltip[data-exiting] {
14974
+ animation: none;
14975
+ }
14976
+ }
14977
+
14978
+ @media (prefers-reduced-transparency: reduce) {
14979
+ .ty-tooltip {
14980
+ background: var(--ty-surface-raised-solid);
14981
+ box-shadow: var(--ty-shadow-floating);
14982
+ }
14983
+ }
14984
+
14985
+ @media (forced-colors: active) {
14986
+ .ty-tooltip {
14987
+ border: 1px solid CanvasText;
14988
+ background: Canvas;
14989
+ color: CanvasText;
14990
+ forced-color-adjust: none;
14991
+ }
14992
+ .ty-tooltip__arrow svg {
14993
+ fill: Canvas;
14994
+ stroke: CanvasText;
14995
+ }
14996
+ }
14997
+ }
14998
+
14522
14999
  /* ./groups/forms-a.css */
14523
15000
  /* Stylesheets of the "forms-a" group (imported by src/styles.css). */
14524
15001
  /* ../internal/forms-a/shared.css */
@@ -17377,9 +17854,12 @@
17377
17854
  gap: var(--ty-space-1);
17378
17855
  outline: none;
17379
17856
  }
17857
+ /* Columns follow the surface's width, not the viewport's: a dialog is
17858
+ narrower than the window, and three viewport-driven columns squeezed
17859
+ names such as "Español" into the code beside them. */
17380
17860
  .ty-locale-picker__list[data-layout='grid'] {
17381
17861
  display: grid;
17382
- grid-template-columns: repeat(2, minmax(0, 1fr));
17862
+ grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
17383
17863
  }
17384
17864
  .ty-locale-picker__option {
17385
17865
  display: flex;
@@ -17415,6 +17895,7 @@
17415
17895
  min-inline-size: 0;
17416
17896
  }
17417
17897
  .ty-locale-picker__code {
17898
+ flex: none;
17418
17899
  color: var(--ty-ink-3);
17419
17900
  font-family: var(--ty-font-mono);
17420
17901
  font-size: var(--ty-font-size-meta);
@@ -17434,12 +17915,6 @@
17434
17915
  line-height: var(--ty-font-line-height-meta);
17435
17916
  }
17436
17917
 
17437
- @media (min-width: 640px) {
17438
- .ty-locale-picker__list[data-layout='grid'] {
17439
- grid-template-columns: repeat(3, minmax(0, 1fr));
17440
- }
17441
- }
17442
-
17443
17918
  @media (forced-colors: active) {
17444
17919
  .ty-locale-picker__option[data-selected] {
17445
17920
  background: Highlight;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datatechsolutions/tympan",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "description": "Tympan: accessible React components (React 18.3 or 19) on React Aria Components, styled with --ty-* CSS custom properties in @layer tympan. The flow and provenance canvas (graph viewer, DAG editor, run inspection) ships as the @datatechsolutions/tympan/flow subpath. Generated avatars (DiceBear, CC0/MIT styles only) ship as the /avatars subpath and country and region flags as the /flags subpath.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "author": "Natalia Mesquita",
@@ -154,7 +154,7 @@
154
154
  },
155
155
  "dependencies": {
156
156
  "@dagrejs/dagre": "^3.1.1",
157
- "@datatechsolutions/tympan-tokens": "^0.3.1",
157
+ "@datatechsolutions/tympan-tokens": "^0.4.1",
158
158
  "@dicebear/core": "^9.4.3",
159
159
  "@internationalized/date": "^3.12.4",
160
160
  "@types/d3-array": "^3.2.2",