@gostudent/shared-ui-library-mcp 1.28.0 → 1.30.0-DT-17034.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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "libraryVersion": "1.28.0",
2
+ "libraryVersion": "1.30.0",
3
3
  "components": [
4
4
  {
5
5
  "name": "Avatar",
@@ -228,6 +228,11 @@
228
228
  "description": "Label for the Today button. Defaults to \"Today\".",
229
229
  "options": []
230
230
  },
231
+ {
232
+ "name": "hasTodayButton",
233
+ "description": "Show the \"Today\" button. When false under `appearance=\"bottomSheet\"`, the header also reverts to an edge-arrow layout (arrow, month label, arrow). Defaults to true.",
234
+ "options": []
235
+ },
231
236
  {
232
237
  "name": "previousMonthLabel",
233
238
  "description": "Accessible label for the previous month nav button. Defaults to \"Previous month\".",
@@ -646,6 +651,11 @@
646
651
  "stretch"
647
652
  ]
648
653
  },
654
+ {
655
+ "name": "fluid",
656
+ "description": "Fill the containing block instead of capping at the layout content max-width and auto-centering on desktop. Use when the Grid is nested inside a flex/grid parent (or any narrower container), where the default centering would otherwise add side margins. Defaults to `false`.",
657
+ "options": []
658
+ },
649
659
  {
650
660
  "name": "as",
651
661
  "description": "Renders as this HTML element or React component. Defaults to `div`.",
@@ -1339,12 +1349,20 @@
1339
1349
  "compositions": [
1340
1350
  {
1341
1351
  "name": "CalendarSheet",
1342
- "description": "Mobile bottom-sheet calendar. Composes `Drawer position=\"bottom\"` with\n`<Calendar appearance=\"bottomSheet\">` — no calendar internals are re-implemented.\n\nSelecting a date closes the sheet by default (`closeOnSelect`). Dismiss via\nscrim-tap, Escape, or date selection. The grabber handle is visual-only (v1).\n\nPair with `CalendarTrigger` for the month-selector control that opens the sheet.\n\n### Usage\n\n```tsx\nimport { CalendarSheet, CalendarTrigger } from '@gostudent/shared-ui-library';\n\nconst [open, setOpen] = useState(false);\nconst [date, setDate] = useState<Date | null>(null);\n\n<CalendarTrigger\n label={date ? format(date, 'd MMM yyyy') : 'Select date'}\n onOpen={() => setOpen(true)}\n onClear={() => setDate(null)}\n hasSelection={!!date}\n/>\n\n<CalendarSheet\n isOpen={open}\n onClose={() => setOpen(false)}\n value={date}\n onChange={setDate}\n markedDates={bookedDates}\n/>\n```",
1352
+ "description": "Mobile bottom-sheet calendar. Composes `Drawer position=\"bottom\"` with\n`<Calendar appearance=\"bottomSheet\">` — no calendar internals are re-implemented.\n\nSelecting a date closes the sheet by default (`closeOnSelect`). Dismiss via\nscrim-tap, Escape, or date selection. The grabber handle is visual-only (v1).\n\nPair with `CalendarTrigger` for the month-selector control that opens the sheet.\n\nSet `variant=\"inline\"` to render the calendar directly in a layout instead of\nan overlay — useful for desktop two-pane flows where the calendar sits alongside\nother content. `isOpen`/`onClose` are ignored in this mode; see the `Inline` story.\n\n### Usage\n\n```tsx\nimport { CalendarSheet, CalendarTrigger } from '@gostudent/shared-ui-library';\n\nconst [open, setOpen] = useState(false);\nconst [date, setDate] = useState<Date | null>(null);\n\n<CalendarTrigger\n label={date ? format(date, 'd MMM yyyy') : 'Select date'}\n onOpen={() => setOpen(true)}\n onClear={() => setDate(null)}\n hasSelection={!!date}\n/>\n\n<CalendarSheet\n isOpen={open}\n onClose={() => setOpen(false)}\n value={date}\n onChange={setDate}\n markedDates={bookedDates}\n/>\n```",
1343
1353
  "storybookUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/docs/compositions-calendarsheet",
1344
1354
  "props": [
1355
+ {
1356
+ "name": "variant",
1357
+ "description": "'overlay' (default): bottom-sheet via Drawer, requires isOpen/onClose. 'inline': renders the calendar directly in the layout, no Drawer/portal — isOpen/onClose are ignored.",
1358
+ "options": [
1359
+ "overlay",
1360
+ "inline"
1361
+ ]
1362
+ },
1345
1363
  {
1346
1364
  "name": "isOpen",
1347
- "description": "Controls whether the sheet is visible.",
1365
+ "description": "Controls whether the sheet is visible. Ignored when variant is \"inline\".",
1348
1366
  "options": []
1349
1367
  },
1350
1368
  {
@@ -1402,6 +1420,11 @@
1402
1420
  "description": "0 = week starts Sunday, 1 = week starts Monday (default).",
1403
1421
  "options": []
1404
1422
  },
1423
+ {
1424
+ "name": "hasTodayButton",
1425
+ "description": "Show the \"Today\" button. When false, the header reverts to the pre-Today-button edge-arrow layout (arrow, month label, arrow). Default: true.",
1426
+ "options": []
1427
+ },
1405
1428
  {
1406
1429
  "name": "sheetHeight",
1407
1430
  "description": "Override the sheet panel height. Default: 488px (Figma spec).",
@@ -1593,6 +1616,88 @@
1593
1616
  }
1594
1617
  ]
1595
1618
  },
1619
+ {
1620
+ "name": "StudentLessonCard",
1621
+ "description": "The student-portal counterpart to `TutorLessonCard`. It displays a lesson session from the\nstudent's perspective: the identity block shows the **tutor**, and group lessons additionally show\nan `AvatarGroup` of the fellow classmates.\n\nSupports states driven by the `lessonState`, `type`, `modality`, and `feedbackState` props:\n\n| `lessonState` | `modality` | `feedbackState` | Actions |\n|------------------|-------------|-------------------|---------|\n| `upcoming` | `online` | — | \"Workspace\" link + \"Start lesson\" + \"Rate lesson\" (inactive) |\n| `upcoming` | `offline` | — | \"Rate lesson\" (inactive) |\n| `in-progress` | `online` | — | \"Workspace\" link + \"Start lesson\" + \"Rate lesson\" (active) |\n| `in-progress` | `offline` | — | \"Rate lesson\" (active) |\n| `completed` | any | `pending` | \"Rate lesson\" button (primary, active) |\n| `completed` | any | `submitted` | \"Check feedback\" button (secondary) |\n\n### Usage\n\n```tsx\nimport { StudentLessonCard } from '@gostudent/shared-ui-library';\n\n<StudentLessonCard\n title=\"English lesson\"\n modality=\"online\"\n type=\"individual\"\n subjects={['English']}\n time=\"17:00 - 18:00\"\n lessonState=\"upcoming\"\n tutor={{ name: 'Jane Tutor' }}\n isStartLessonDisabled\n/>\n```",
1622
+ "storybookUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/docs/compositions-studentlessoncard",
1623
+ "props": [
1624
+ {
1625
+ "name": "title",
1626
+ "description": "Lesson title shown as the card heading.",
1627
+ "options": [
1628
+ "online",
1629
+ "offline"
1630
+ ]
1631
+ },
1632
+ {
1633
+ "name": "type",
1634
+ "description": "Lesson type — group lessons show a classmate AvatarGroup beside the tutor.",
1635
+ "options": [
1636
+ "individual",
1637
+ "group"
1638
+ ]
1639
+ },
1640
+ {
1641
+ "name": "subjects",
1642
+ "description": "Array of subject labels rendered as Tag pills.",
1643
+ "options": []
1644
+ },
1645
+ {
1646
+ "name": "time",
1647
+ "description": "Formatted time range, e.g. \"17:00 - 18:00\".",
1648
+ "options": [
1649
+ "upcoming",
1650
+ "in-progress",
1651
+ "completed"
1652
+ ]
1653
+ },
1654
+ {
1655
+ "name": "feedbackState",
1656
+ "description": "Feedback phase for completed lessons.",
1657
+ "options": [
1658
+ "pending",
1659
+ "submitted"
1660
+ ]
1661
+ },
1662
+ {
1663
+ "name": "isStartLessonDisabled",
1664
+ "description": "Disables the \"Start lesson\" button.",
1665
+ "options": []
1666
+ },
1667
+ {
1668
+ "name": "hasKebab",
1669
+ "description": "Show or hide the kebab menu. When enabled, passes menu items to the card.",
1670
+ "options": []
1671
+ },
1672
+ {
1673
+ "name": "tutor",
1674
+ "description": "Tutor object ({ name, avatarSrc }) shown in the identity block.",
1675
+ "options": []
1676
+ },
1677
+ {
1678
+ "name": "onStartLesson",
1679
+ "description": "Called when \"Start lesson\" is clicked.",
1680
+ "options": []
1681
+ }
1682
+ ],
1683
+ "examples": [
1684
+ {
1685
+ "name": "UpcomingIndividual",
1686
+ "jsx": "<StudentLessonCard title=\"Individual lesson\" modality=\"online\" type=\"individual\" subjects={['English']} time=\"17:00 - 18:00\" lessonState=\"upcoming\" isStartLessonDisabled={true} tutor={TUTOR} hasKebab={true} />",
1687
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-studentlessoncard--upcoming-individual"
1688
+ },
1689
+ {
1690
+ "name": "UpcomingGroup",
1691
+ "jsx": "<StudentLessonCard title=\"Group lesson\" modality=\"online\" type=\"group\" subjects={['English', 'Biology', 'Math']} time=\"17:00 - 18:00\" lessonState=\"upcoming\" isStartLessonDisabled={true} tutor={TUTOR} classmates={CLASSMATES} hasKebab={true} />",
1692
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-studentlessoncard--upcoming-group"
1693
+ },
1694
+ {
1695
+ "name": "UpcomingGroupOffline",
1696
+ "jsx": "<StudentLessonCard title=\"Group lesson\" modality=\"offline\" type=\"group\" subjects={['English', 'Biology', 'Math']} time=\"17:00 - 18:00\" room=\"Room 1\" lessonCenter=\"Centrostudi Navigli\" lessonState=\"upcoming\" tutor={TUTOR} classmates={CLASSMATES} hasKebab={true} />",
1697
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-studentlessoncard--upcoming-group-offline"
1698
+ }
1699
+ ]
1700
+ },
1596
1701
  {
1597
1702
  "name": "TopNavigation",
1598
1703
  "description": "Responsive top navigation bar. On **mobile/tablet** (< 1024 px) it shows the logo and a hamburger button that opens a slide-in drawer.\nOn **desktop** (≥ 1024 px) it shows the logo, a tab list, and the user section (Avatar + name + role Tag + chevron) with a dropdown.\n\nThe drawer open/close state is managed internally — no external state needed.\n\n### Usage\n\n```tsx\nimport { TopNavigation } from '@gostudent/shared-ui-library';\n\n<TopNavigation\n tabs={[\n { label: 'Lessons', isSelected: true, onClick: () => {} },\n { label: 'My availability', isSelected: false, onClick: () => {} },\n ]}\n userName=\"Anna James\"\n userRole=\"tutor\"\n navItems={[\n { icon: DashboardIcon, label: 'Lessons', isSelected: true, onClick: () => {} },\n ]}\n languages={[{ value: 'en', label: 'English' }]}\n onLanguageClick={() => {}}\n onLogout={() => {}}\n/>\n```",
@@ -1702,6 +1807,57 @@
1702
1807
  }
1703
1808
  ]
1704
1809
  },
1810
+ {
1811
+ "name": "TutorDetails",
1812
+ "description": "Renders a single tutor as an **Avatar** plus name in a horizontal row.\n\nBy default the name is shown in full. Set `truncate` to clip it with an ellipsis **on mobile**\nwhen it overflows — from the `tablet` breakpoint up the full name is always shown.\n\nTwo sizes are available — `md` (32px avatar, default) and `sm` (24px avatar).\n\nSetting `disabled` dims the row to 50% opacity and shows an \"Unavailable\" tooltip on hover/focus\n(override via `disabledLabel`).\n\nIntended for use inside `StudentLessonCard` as the tutor identity block — the student-portal\ncounterpart to `StudentDetails`.\n\n### Usage\n\n```tsx\nimport { TutorDetails } from '@gostudent/shared-ui-library';\n\n<TutorDetails name=\"John Doe\" avatarSrc=\"https://i.pravatar.cc/150?u=john\" />\n```",
1813
+ "storybookUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/docs/compositions-tutordetails",
1814
+ "props": [
1815
+ {
1816
+ "name": "name",
1817
+ "description": "Avatar status badge.",
1818
+ "options": [
1819
+ "default",
1820
+ "done",
1821
+ "pending"
1822
+ ]
1823
+ },
1824
+ {
1825
+ "name": "size",
1826
+ "description": "Avatar size: sm=24px, md=32px (default).",
1827
+ "options": [
1828
+ "sm",
1829
+ "md"
1830
+ ]
1831
+ },
1832
+ {
1833
+ "name": "truncate",
1834
+ "description": "Truncate the name with an ellipsis on mobile when it overflows. Off by default.",
1835
+ "options": []
1836
+ },
1837
+ {
1838
+ "name": "disabled",
1839
+ "description": "Tooltip text shown on hover/focus when disabled. Defaults to \"Unavailable\".",
1840
+ "options": []
1841
+ }
1842
+ ],
1843
+ "examples": [
1844
+ {
1845
+ "name": "Default",
1846
+ "jsx": "<TutorDetails name=\"John Doe\" />",
1847
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-tutordetails--default"
1848
+ },
1849
+ {
1850
+ "name": "WithAvatarImage",
1851
+ "jsx": "<TutorDetails name=\"John Doe\" avatarSrc=\"https://i.pravatar.cc/150?u=john\" />",
1852
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-tutordetails--with-avatar-image"
1853
+ },
1854
+ {
1855
+ "name": "Small",
1856
+ "jsx": "<TutorDetails name=\"John Doe\" size=\"sm\" />",
1857
+ "storyUrl": "https://62835ff8873d45004a627ad4-snugmmtvrg.chromatic.com/?path=/story/compositions-tutordetails--small"
1858
+ }
1859
+ ]
1860
+ },
1705
1861
  {
1706
1862
  "name": "TutorLessonCard",
1707
1863
  "description": "A domain-level card that displays a lesson session with all associated metadata.\n\nSupports states driven by the `lessonState`, `type`, `modality`, and `feedbackState` props:\n\n| `lessonState` | `type` | `modality` | `feedbackState` | Description |\n|----------------|-----------------|--------------|-----------------|-------------|\n| `upcoming` | `individual` | `online` | — | Metadata row (time) + actions in a wrapping flex row, \"Workspace\" link + \"Start GoClass\" button, `StudentDetails` always visible below |\n| `upcoming` | `group` | `online` | — | Metadata row (time, student count) + actions in a wrapping flex row, optional kebab menu, always-visible `StudentDetails` (desktop) / \"N students\" disclosure (mobile) below |\n| `upcoming` | `individual` | `offline` | — | Offline modality tag, metadata row includes room/lesson center, single \"Document lesson\" button |\n| `upcoming` | `group` | `offline` | — | Offline modality tag, metadata row includes room/lesson center, \"N students\" disclosure below |\n| `completed` | `individual` | `online` | `pending` | `StudentDetails` (24px, pending badge) inline, no dropdown, \"Document lesson\" button |\n| `completed` | `group` | `online` | `pending` | Disclosure toggle revealing `StudentDetails` (24px, done/pending badges), \"Document lesson\" button |\n| `completed` | `group` | `online` | `submitted` | \"Review feedback\" button, always-visible `StudentDetails` (desktop) / \"N students\" disclosure (mobile) |\n| `completed` | `individual` | `online` | `submitted` | \"Review feedback\" button, `StudentDetails` inline at both breakpoints |\n\nOnline lessons also show a \"Workspace\" link (secondary/link-styled) alongside \"Start GoClass\" /\n\"Document lesson\", for every lesson state.\n\n### Usage\n\n```tsx\nimport { TutorLessonCard } from '@gostudent/shared-ui-library';\n\n<TutorLessonCard\n title=\"English lesson\"\n modality=\"online\"\n type=\"individual\"\n subjects={['English']}\n time=\"17:00 - 18:00\"\n lessonState=\"upcoming\"\n students={[{ name: 'Alice Smith', grade: '8', subject: 'English' }]}\n isStartLessonDisabled\n/>\n```",
@@ -1755,6 +1911,11 @@
1755
1911
  "description": "Disables the \"Start lesson\" button in upcoming state.",
1756
1912
  "options": []
1757
1913
  },
1914
+ {
1915
+ "name": "isDocumentLessonDisabled",
1916
+ "description": "Shows \"Document lesson\" disabled with a tooltip explaining why, instead of hiding it. Used before the 30-minute pre-lesson documentation window opens.",
1917
+ "options": []
1918
+ },
1758
1919
  {
1759
1920
  "name": "hasKebab",
1760
1921
  "description": "Show or hide the kebab menu. When enabled, passes menu items to the card.",
@@ -1774,6 +1935,31 @@
1774
1935
  "name": "onStartLesson",
1775
1936
  "description": "Called when \"Start GoClass\" is clicked.",
1776
1937
  "options": []
1938
+ },
1939
+ {
1940
+ "name": "docs",
1941
+ "description": "",
1942
+ "options": []
1943
+ },
1944
+ {
1945
+ "name": "docs",
1946
+ "description": "",
1947
+ "options": []
1948
+ },
1949
+ {
1950
+ "name": "labels",
1951
+ "description": "",
1952
+ "options": []
1953
+ },
1954
+ {
1955
+ "name": "labels",
1956
+ "description": "",
1957
+ "options": []
1958
+ },
1959
+ {
1960
+ "name": "labels",
1961
+ "description": "",
1962
+ "options": []
1777
1963
  }
1778
1964
  ],
1779
1965
  "examples": [
@@ -1799,6 +1985,9 @@
1799
1985
  "names": [
1800
1986
  "ArrowLeftIcon",
1801
1987
  "ArrowRightIcon",
1988
+ "BookIcon",
1989
+ "BookStarIcon",
1990
+ "CakeIcon",
1802
1991
  "CancelFilledIcon",
1803
1992
  "ChevronDownIcon",
1804
1993
  "ChevronLeftIcon",
@@ -1812,6 +2001,7 @@
1812
2001
  "ErrorFilledIcon",
1813
2002
  "EventNoteIcon",
1814
2003
  "GlobeIcon",
2004
+ "GradeIcon",
1815
2005
  "GraduationCapIcon",
1816
2006
  "GroupIcon",
1817
2007
  "HistoryIcon",
@@ -1820,17 +2010,23 @@
1820
2010
  "InfoIcon",
1821
2011
  "KebabIcon",
1822
2012
  "LocationCenterIcon",
2013
+ "LocationIcon",
1823
2014
  "LogoutIcon",
1824
2015
  "MenuIcon",
2016
+ "MoreIcon",
1825
2017
  "OfflineIcon",
1826
2018
  "PendingFilledIcon",
2019
+ "PhoneIcon",
1827
2020
  "PlanetIcon",
1828
2021
  "PlusIcon",
2022
+ "SearchIcon",
1829
2023
  "StarsIcon",
2024
+ "TagIcon",
1830
2025
  "TickFilledIcon",
1831
2026
  "TickIcon",
1832
2027
  "UploadIcon",
1833
- "WarningFilledIcon"
2028
+ "WarningFilledIcon",
2029
+ "WarningOutlinedIcon"
1834
2030
  ],
1835
2031
  "sizes": [
1836
2032
  "sm",
@@ -1854,7 +2050,8 @@
1854
2050
  "breakpointDesktopScreenWidth": "var(--breakpoint-desktop-screen-width)",
1855
2051
  "breakpointTabletScreenWidth": "var(--breakpoint-tablet-screen-width)",
1856
2052
  "breakpointMobileScreenWidth": "var(--breakpoint-mobile-screen-width)",
1857
- "breakpointLayoutContentMaxWidth": "var(--breakpoint-layout-content-max-width)"
2053
+ "breakpointLayoutContentMaxWidth": "var(--breakpoint-layout-content-max-width)",
2054
+ "breakpointTooltipContentMaxWidth": "var(--breakpoint-tooltip-content-max-width)"
1858
2055
  },
1859
2056
  "error": {
1860
2057
  "error50": "var(--error-50)",
@@ -2239,6 +2436,7 @@
2239
2436
  "colorBorderFeedbackDefault": "var(--color-border-feedback-default)",
2240
2437
  "colorBorderDark": "var(--color-border-dark)",
2241
2438
  "colorBorderPill": "var(--color-border-pill)",
2439
+ "colorBorderSelected": "var(--color-border-selected)",
2242
2440
  "colorTextPrimary": "var(--color-text-primary)",
2243
2441
  "colorTextSecondary": "var(--color-text-secondary)",
2244
2442
  "colorTextInverse": "var(--color-text-inverse)",
@@ -2522,6 +2720,7 @@
2522
2720
  "colorBorderFeedbackDefault": "var(--color-border-feedback-default)",
2523
2721
  "colorBorderDark": "var(--color-border-dark)",
2524
2722
  "colorBorderPill": "var(--color-border-pill)",
2723
+ "colorBorderSelected": "var(--color-border-selected)",
2525
2724
  "colorTextPrimary": "var(--color-text-primary)",
2526
2725
  "colorTextSecondary": "var(--color-text-secondary)",
2527
2726
  "colorTextInverse": "var(--color-text-inverse)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gostudent/shared-ui-library-mcp",
3
- "version": "1.28.0",
3
+ "version": "1.30.0-DT-17034.1",
4
4
  "description": "MCP server for @gostudent/shared-ui-library — exposes components, icons, and tokens to Claude",
5
5
  "type": "module",
6
6
  "bin": {