@datatechsolutions/tympan 0.3.1 → 0.4.0

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