@joewinke/jatui 0.54.0 → 0.54.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/CLAUDE.md CHANGED
@@ -59,7 +59,7 @@ Then import:
59
59
  | `TimeSlotPicker` | Slots grouped morning/afternoon/evening as one `role="radiogroup"` (`role="radio"` + `aria-checked`, full spoken date+time): roving arrows skip unavailable slots, Up/Down jump a visual row, Home/End, Space/Enter choose. Times and grouping follow `timeZone`'s wall clock. | `slots: TimeSlot[]`, `onSelect`, `selectedSlot`, `loading`, `accentColor`, `hourCycle?` ('h12' \| 'h23'), `timeZone?` (IANA), `locale?`, `selectOnFocus?`, `timezone?` (snippet row above the slots) |
60
60
  | `BookingScheduler` | Calendly-shaped composition over `CalendarPicker` + `TimeSlotPicker`: details pane (host, duration, location, zone), time-zone select + 12h/24h toggle, slot list, Confirm. Container-query layout (3 panes → 2 → 1). Host supplies data; nothing is booked here. | `getSlots(date, timeZone)` (sync/async, stale responses dropped), `getAvailability?`, `selectedDate`/`selectedSlot`/`timeZone`/`hourCycle` (bindable), `title`, `durationMinutes`, `hostName`, `location`, `description`, `details?` (snippet), `onConfirm(slot, {timeZone})`, `confirming` |
61
61
  | `EventCalendar` | Month / week / day / agenda event calendar, engine upstreamed from MOS `CalendarGrid`: one lane allocator per month row (`packWeek`/`computeVisibility`, measured lane capacity), "+N more" expands the week IN PLACE, week/day time grid with side-by-side overlap layout (`layoutDay`) + all-day bar row + now-line, agenda list, month-switcher pill (the shared month panel), details popover snippet, HTML5 drag-to-move, drag- or Shift+arrow range select. Event colours from `--jatui-event-N{,-bg,-fg}`. Generic over your event type. | `events: CalendarEventItem[]` (`{id,title,start,end?,allDay?,color?: 1-6 \| semantic,…}`), `view`/`date` (bindable), `views`, `weekStart`, `locale`, `hourCycle`, `dayStartHour`/`dayEndHour`, `hourHeight`, `height`, `eventDetails?`/`eventContent?`/`toolbarEnd?` (snippets), `moreAction`, `onEventClick`, `onDayClick`, `onCreate(date, hour?)`, `onEventMove(ev, {date, hour?, allDay})`, `onRangeSelect`, `onRangeChange(range, view)` |
62
- | `CalendarMonthGrid` | The shared month panel every picker uses — exported for custom surfaces. `<table role="grid">`, roving tabindex, range band that bridges cell gaps and rounds at week edges, disabled days stay focusable (`aria-disabled`), `day` snippet + `describeDay` for extra per-day content/name. Pair with `createCalendarGrid()`. | `month`, `focusedDate`, `onFocusDate`, `onSelect`, `selected?`, `range?`, `isDisabled?`, `min`/`max`, `weekStart`, `locale`, `showOutsideDays`, `fixedWeeks`, `size`, `onHover?`, `day?`, `describeDay?` |
62
+ | `CalendarMonthGrid` | The shared month panel every picker uses — exported for custom surfaces. `<table role="grid">`, roving tabindex, range band that bridges cell gaps and rounds at week edges, disabled days stay focusable (`aria-disabled`), `day` snippet + `describeDay` for extra per-day content/name. Pair with `createCalendarGrid()`. | `month`, `focusedDate`, `onFocusDate`, `onSelect`, `selected?`, `range?`, `isDisabled?`, `min`/`max`, `weekStart`, `locale`, `showOutsideDays`, `fixedWeeks`, `size`, `fill?` (true; pass `false` in a `max-content` popover or other shrink-to-fit host — a filling table's max-content is unbounded in Chrome), `onHover?`, `day?`, `describeDay?` |
63
63
  | `AvailabilityModal` | Date override editor (modal) | `date`, `overrides`, `onSave`, `onClose` |
64
64
  | `BookingForm` | Guest info form for booking | `onSubmit`, `submitting`, `requirePhone`, `accentColor`, `showAttendeeOption` |
65
65
  | `CountdownTimer` | Countdown to target date | `targetDate: Date`, `label` |
@@ -322,6 +322,7 @@
322
322
  max={maxDay}
323
323
  fixedWeeks
324
324
  size="sm"
325
+ fill={false}
325
326
  onSelect={choose}
326
327
  onFocusDate={cal.focus}
327
328
  />
@@ -398,6 +398,7 @@
398
398
  showOutsideDays={false}
399
399
  fixedWeeks
400
400
  size="sm"
401
+ fill={false}
401
402
  onSelect={pickDate}
402
403
  onFocusDate={handleFocusDate}
403
404
  onHover={(d) => (hover = d)}
@@ -790,6 +790,7 @@
790
790
  {locale}
791
791
  selected={date}
792
792
  size="sm"
793
+ fill={false}
793
794
  fixedWeeks
794
795
  onSelect={pickFromSwitcher}
795
796
  onFocusDate={(d) => {
@@ -38,6 +38,14 @@
38
38
  /** Tint every enabled in-month day (booking calendars: "these days are open"). */
39
39
  highlightEnabled?: boolean;
40
40
  size?: 'sm' | 'md' | 'lg';
41
+ /**
42
+ * Stretch to the container's width (default). Pass `false` inside a
43
+ * shrink-to-fit host — a popover with `width: max-content`, a flex item
44
+ * sized by its content: a `width: 100%` table's max-content is unbounded
45
+ * in Chrome, so the host grows to ~670,000px and the days land off-screen
46
+ * (jatui-ewfh3). `false` sizes the grid to seven cells and centres it.
47
+ */
48
+ fill?: boolean;
41
49
  /** Accessible name; defaults to "March 2026". */
42
50
  ariaLabel?: string;
43
51
  rtl?: boolean;
@@ -83,6 +91,7 @@
83
91
  hideWeekdays = false,
84
92
  highlightEnabled = false,
85
93
  size = 'md',
94
+ fill = true,
86
95
  ariaLabel,
87
96
  rtl = false,
88
97
  onSelect,
@@ -143,6 +152,7 @@
143
152
  <table
144
153
  bind:this={gridEl}
145
154
  class="jatui-month-grid jatui-month-grid--{size} {className}"
155
+ class:jatui-month-grid--intrinsic={!fill}
146
156
  role="grid"
147
157
  aria-label={label}
148
158
  dir={rtl ? 'rtl' : undefined}
@@ -230,6 +240,10 @@
230
240
  width: 100%;
231
241
  min-width: calc(var(--_cell) * 7);
232
242
  }
243
+ .jatui-month-grid--intrinsic {
244
+ width: calc(var(--_cell) * 7);
245
+ margin-inline: auto;
246
+ }
233
247
  .jatui-month-grid--sm {
234
248
  --_cell: 2rem;
235
249
  }
@@ -35,6 +35,14 @@ export interface MonthGridProps {
35
35
  /** Tint every enabled in-month day (booking calendars: "these days are open"). */
36
36
  highlightEnabled?: boolean;
37
37
  size?: 'sm' | 'md' | 'lg';
38
+ /**
39
+ * Stretch to the container's width (default). Pass `false` inside a
40
+ * shrink-to-fit host — a popover with `width: max-content`, a flex item
41
+ * sized by its content: a `width: 100%` table's max-content is unbounded
42
+ * in Chrome, so the host grows to ~670,000px and the days land off-screen
43
+ * (jatui-ewfh3). `false` sizes the grid to seven cells and centres it.
44
+ */
45
+ fill?: boolean;
38
46
  /** Accessible name; defaults to "March 2026". */
39
47
  ariaLabel?: string;
40
48
  rtl?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joewinke/jatui",
3
- "version": "0.54.0",
3
+ "version": "0.54.1",
4
4
  "private": false,
5
5
  "description": "Shared Svelte 5 component library for JAT projects",
6
6
  "type": "module",