polen 0.11.0-next.18 → 0.11.0-next.19

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 (123) hide show
  1. package/build/api/errors.d.ts +278 -0
  2. package/build/api/errors.d.ts.map +1 -0
  3. package/build/api/errors.js +153 -0
  4. package/build/api/errors.js.map +1 -0
  5. package/build/api/schema/input-source/$$.d.ts +1 -0
  6. package/build/api/schema/input-source/$$.d.ts.map +1 -1
  7. package/build/api/schema/input-source/$$.js +1 -0
  8. package/build/api/schema/input-source/$$.js.map +1 -1
  9. package/build/api/schema/input-source/errors.d.ts +36 -0
  10. package/build/api/schema/input-source/errors.d.ts.map +1 -0
  11. package/build/api/schema/input-source/errors.js +17 -0
  12. package/build/api/schema/input-source/errors.js.map +1 -0
  13. package/build/api/schema/input-source/input-source.d.ts +1 -7
  14. package/build/api/schema/input-source/input-source.d.ts.map +1 -1
  15. package/build/api/schema/input-source/input-source.js +0 -6
  16. package/build/api/schema/input-source/input-source.js.map +1 -1
  17. package/build/api/schema/input-sources/directory.d.ts.map +1 -1
  18. package/build/api/schema/input-sources/directory.js +17 -4
  19. package/build/api/schema/input-sources/directory.js.map +1 -1
  20. package/build/api/schema/input-sources/file.d.ts.map +1 -1
  21. package/build/api/schema/input-sources/file.js +15 -4
  22. package/build/api/schema/input-sources/file.js.map +1 -1
  23. package/build/api/schema/input-sources/introspection-file.d.ts.map +1 -1
  24. package/build/api/schema/input-sources/introspection-file.js +28 -6
  25. package/build/api/schema/input-sources/introspection-file.js.map +1 -1
  26. package/build/api/schema/input-sources/introspection.d.ts.map +1 -1
  27. package/build/api/schema/input-sources/introspection.js +35 -7
  28. package/build/api/schema/input-sources/introspection.js.map +1 -1
  29. package/build/api/schema/input-sources/memory.d.ts.map +1 -1
  30. package/build/api/schema/input-sources/memory.js +15 -3
  31. package/build/api/schema/input-sources/memory.js.map +1 -1
  32. package/build/api/schema/input-sources/versioned-directory.js +20 -4
  33. package/build/api/schema/input-sources/versioned-directory.js.map +1 -1
  34. package/build/api/schema/load.d.ts +1 -1
  35. package/build/api/schema/load.d.ts.map +1 -1
  36. package/build/api/schema/load.js +1 -1
  37. package/build/api/schema/load.js.map +1 -1
  38. package/build/cli/commands/hero-image.d.ts +1 -2
  39. package/build/cli/commands/hero-image.d.ts.map +1 -1
  40. package/build/cli/index.d.ts +1 -1
  41. package/build/template/components/ReferenceVersionPicker.d.ts +9 -0
  42. package/build/template/components/ReferenceVersionPicker.d.ts.map +1 -0
  43. package/build/template/components/ReferenceVersionPicker.js +79 -0
  44. package/build/template/components/ReferenceVersionPicker.js.map +1 -0
  45. package/build/template/components/VersionPicker.d.ts +8 -3
  46. package/build/template/components/VersionPicker.d.ts.map +1 -1
  47. package/build/template/components/VersionPicker.js +12 -77
  48. package/build/template/components/VersionPicker.js.map +1 -1
  49. package/build/template/routes/changelog/ChangelogBody.d.ts +6 -0
  50. package/build/template/routes/changelog/ChangelogBody.d.ts.map +1 -0
  51. package/build/template/{components/Changelog/Changelog.js → routes/changelog/ChangelogBody.js} +8 -58
  52. package/build/template/routes/changelog/ChangelogBody.js.map +1 -0
  53. package/build/template/routes/changelog/ChangelogSidebar.d.ts +7 -0
  54. package/build/template/routes/changelog/ChangelogSidebar.d.ts.map +1 -0
  55. package/build/template/routes/changelog/ChangelogSidebar.js +46 -0
  56. package/build/template/routes/changelog/ChangelogSidebar.js.map +1 -0
  57. package/build/template/routes/changelog/ChangelogSidebarItem.d.ts +11 -0
  58. package/build/template/routes/changelog/ChangelogSidebarItem.d.ts.map +1 -0
  59. package/build/template/routes/changelog/ChangelogSidebarItem.js +35 -0
  60. package/build/template/routes/changelog/ChangelogSidebarItem.js.map +1 -0
  61. package/build/template/routes/changelog/_.d.ts +3264 -0
  62. package/build/template/routes/changelog/_.d.ts.map +1 -0
  63. package/build/template/routes/changelog/_.js +111 -0
  64. package/build/template/routes/changelog/_.js.map +1 -0
  65. package/build/template/routes/changelog/utils.d.ts +3 -0
  66. package/build/template/routes/changelog/utils.d.ts.map +1 -0
  67. package/build/template/routes/changelog/utils.js +11 -0
  68. package/build/template/routes/changelog/utils.js.map +1 -0
  69. package/build/template/routes/reference.js +2 -2
  70. package/build/template/routes/reference.js.map +1 -1
  71. package/build/template/routes/root.js +1 -1
  72. package/build/template/routes/root.js.map +1 -1
  73. package/build/template/theme/swiss-sharp.css +14 -14
  74. package/build/vite/plugins/schemas.d.ts +1 -2
  75. package/build/vite/plugins/schemas.d.ts.map +1 -1
  76. package/build/vite/plugins/schemas.js +0 -1
  77. package/build/vite/plugins/schemas.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/api/errors.ts +227 -0
  80. package/src/api/schema/input-source/$$.ts +1 -0
  81. package/src/api/schema/input-source/errors.ts +26 -0
  82. package/src/api/schema/input-source/input-source.ts +1 -22
  83. package/src/api/schema/input-sources/directory.ts +18 -13
  84. package/src/api/schema/input-sources/file.ts +17 -4
  85. package/src/api/schema/input-sources/introspection-file.ts +30 -15
  86. package/src/api/schema/input-sources/introspection.ts +38 -7
  87. package/src/api/schema/input-sources/memory.ts +19 -3
  88. package/src/api/schema/input-sources/versioned-directory.ts +20 -20
  89. package/src/api/schema/load.ts +3 -2
  90. package/src/template/components/ReferenceVersionPicker.tsx +107 -0
  91. package/src/template/components/VersionPicker.tsx +32 -98
  92. package/src/template/{components/Changelog/Changelog.tsx → routes/changelog/ChangelogBody.tsx} +7 -64
  93. package/src/template/routes/changelog/ChangelogSidebar.tsx +80 -0
  94. package/src/template/routes/changelog/ChangelogSidebarItem.tsx +68 -0
  95. package/src/template/routes/changelog/_.tsx +129 -0
  96. package/src/template/routes/changelog/utils.ts +13 -0
  97. package/src/template/routes/reference.tsx +2 -2
  98. package/src/template/routes/root.tsx +1 -1
  99. package/src/template/theme/swiss-sharp.css +14 -14
  100. package/src/vite/plugins/schemas.ts +0 -1
  101. package/build/sandbox.d.ts +0 -2
  102. package/build/sandbox.d.ts.map +0 -1
  103. package/build/sandbox.js +0 -17
  104. package/build/sandbox.js.map +0 -1
  105. package/build/template/components/Changelog/Changelog.d.ts +0 -8
  106. package/build/template/components/Changelog/Changelog.d.ts.map +0 -1
  107. package/build/template/components/Changelog/Changelog.js.map +0 -1
  108. package/build/template/components/Changelog/ChangelogVersionPicker.d.ts +0 -8
  109. package/build/template/components/Changelog/ChangelogVersionPicker.d.ts.map +0 -1
  110. package/build/template/components/Changelog/ChangelogVersionPicker.js +0 -16
  111. package/build/template/components/Changelog/ChangelogVersionPicker.js.map +0 -1
  112. package/build/template/components/SimpleVersionPicker.d.ts +0 -15
  113. package/build/template/components/SimpleVersionPicker.d.ts.map +0 -1
  114. package/build/template/components/SimpleVersionPicker.js +0 -15
  115. package/build/template/components/SimpleVersionPicker.js.map +0 -1
  116. package/build/template/routes/changelog.d.ts +0 -1635
  117. package/build/template/routes/changelog.d.ts.map +0 -1
  118. package/build/template/routes/changelog.js +0 -168
  119. package/build/template/routes/changelog.js.map +0 -1
  120. package/src/sandbox.ts +0 -15
  121. package/src/template/components/Changelog/ChangelogVersionPicker.tsx +0 -36
  122. package/src/template/components/SimpleVersionPicker.tsx +0 -48
  123. package/src/template/routes/changelog.tsx +0 -267
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Api } from '#api/iso';
3
+ import { Version } from '#lib/version/$';
4
+ import { HashMap, Option } from 'effect';
5
+ import { useNavigate } from 'react-router';
6
+ import { schemasCatalog } from 'virtual:polen/project/schemas';
7
+ import { useReferencePath } from '../hooks/useReferencePath.js';
8
+ import { Stores } from '../stores/$.js';
9
+ import { tryWithToast } from '../utils/try-with-toast.js';
10
+ import { VersionPicker } from './VersionPicker.js';
11
+ export const ReferenceVersionPicker = ({ data, current }) => {
12
+ const navigate = useNavigate();
13
+ const currentPath = useReferencePath();
14
+ const handleVersionChange = async (version) => {
15
+ const newVersion = Version.encodeSync(version);
16
+ const error = await tryWithToast(async () => {
17
+ // Get the full catalog to find the target schema
18
+ if (!schemasCatalog) {
19
+ throw new Error('No catalog available');
20
+ }
21
+ const catalog = schemasCatalog;
22
+ // This component is only used for versioned catalogs
23
+ if (catalog._tag !== 'CatalogVersioned') {
24
+ throw new Error('VersionPicker used with non-versioned catalog');
25
+ }
26
+ // Find the schema for the target version
27
+ // Note: newVersion is a string that we need to parse
28
+ const targetSchemaOption = Option.map(HashMap.findFirst(catalog.entries, (_, key) => Version.encodeSync(key) === newVersion), ([, value]) => value);
29
+ if (Option.isNone(targetSchemaOption)) {
30
+ throw new Error(`Version ${newVersion} not found`);
31
+ }
32
+ const targetSchema = Option.getOrThrow(targetSchemaOption);
33
+ // Find fallback path if needed
34
+ const fallbackPath = Api.Schema.Validation.findFallbackPath(targetSchema.definition, currentPath);
35
+ // Get redirect description if path changed
36
+ const redirectDescription = Api.Schema.Validation.getRedirectDescription(targetSchema.definition, currentPath, fallbackPath, newVersion);
37
+ // Create the new path - parse newVersion string to Version type
38
+ const newPath = Api.Schema.Routing.createReferencePath({
39
+ version: Version.fromString(newVersion),
40
+ type: fallbackPath.type || '',
41
+ field: fallbackPath.field || '',
42
+ });
43
+ // Show toast notification if schema location redirect will occur
44
+ if (redirectDescription) {
45
+ Stores.Toast.store.info(redirectDescription, {
46
+ duration: 160_000,
47
+ actions: [
48
+ {
49
+ label: 'Go back',
50
+ onClick() {
51
+ navigate(-1);
52
+ },
53
+ },
54
+ {
55
+ label: 'View changelog',
56
+ onClick() {
57
+ // Navigate to changelog page
58
+ navigate('/changelog');
59
+ },
60
+ },
61
+ ],
62
+ });
63
+ }
64
+ navigate(newPath);
65
+ }, 'Failed to switch version');
66
+ // Fallback logic if error occurred
67
+ if (error) {
68
+ // Fallback to simple navigation if schema loading fails
69
+ const newPath = Api.Schema.Routing.createReferencePath({
70
+ version: Version.fromString(newVersion),
71
+ type: currentPath.type || '',
72
+ field: currentPath.field || '',
73
+ });
74
+ navigate(newPath);
75
+ }
76
+ };
77
+ return (_jsx(VersionPicker, { versions: data, currentVersion: current, onVersionChange: handleVersionChange }));
78
+ };
79
+ //# sourceMappingURL=ReferenceVersionPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceVersionPicker.js","sourceRoot":"","sources":["../../../src/template/components/ReferenceVersionPicker.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
- import type { React } from '#dep/react/index';
2
1
  import { Version } from '#lib/version/$';
2
+ import type * as React from 'react';
3
3
  interface Props {
4
- data: readonly Version.Version[];
5
- current: Version.Version;
4
+ versions: readonly Version.Version[];
5
+ currentVersion: Version.Version;
6
+ onVersionChange: (version: Version.Version) => void;
6
7
  }
8
+ /**
9
+ * A generic version picker component that can be used for any versioned content.
10
+ * This is a controlled component - parent manages the state.
11
+ */
7
12
  export declare const VersionPicker: React.FC<Props>;
8
13
  export {};
9
14
  //# sourceMappingURL=VersionPicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionPicker.d.ts","sourceRoot":"","sources":["../../../src/template/components/VersionPicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AASxC,UAAU,KAAK;IACb,IAAI,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE,CAAA;IAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0FzC,CAAA"}
1
+ {"version":3,"file":"VersionPicker.d.ts","sourceRoot":"","sources":["../../../src/template/components/VersionPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE,CAAA;IACpC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAA;IAC/B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,CAAA;CACpD;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2BzC,CAAA"}
@@ -1,80 +1,15 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Api } from '#api/iso';
3
- import { Catalog } from '#lib/catalog/$';
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
4
2
  import { Version } from '#lib/version/$';
5
- import { HashMap, Option } from 'effect';
6
- import { useNavigate } from 'react-router';
7
- import { schemasCatalog } from 'virtual:polen/project/schemas';
8
- import { useReferencePath } from '../hooks/useReferencePath.js';
9
- import { Stores } from '../stores/$.js';
10
- import { tryWithToast } from '../utils/try-with-toast.js';
11
- import { SimpleVersionPicker } from './SimpleVersionPicker.js';
12
- export const VersionPicker = ({ data, current }) => {
13
- const navigate = useNavigate();
14
- const currentPath = useReferencePath();
15
- const handleVersionChange = async (version) => {
16
- const newVersion = Version.encodeSync(version);
17
- const error = await tryWithToast(async () => {
18
- // Get the full catalog to find the target schema
19
- if (!schemasCatalog) {
20
- throw new Error('No catalog available');
21
- }
22
- const catalog = schemasCatalog;
23
- // This component is only used for versioned catalogs
24
- if (catalog._tag !== 'CatalogVersioned') {
25
- throw new Error('VersionPicker used with non-versioned catalog');
26
- }
27
- // Find the schema for the target version
28
- // Note: newVersion is a string that we need to parse
29
- const targetSchemaOption = Option.map(HashMap.findFirst(catalog.entries, (_, key) => Version.encodeSync(key) === newVersion), ([, value]) => value);
30
- if (Option.isNone(targetSchemaOption)) {
31
- throw new Error(`Version ${newVersion} not found`);
32
- }
33
- const targetSchema = Option.getOrThrow(targetSchemaOption);
34
- // Find fallback path if needed
35
- const fallbackPath = Api.Schema.Validation.findFallbackPath(targetSchema.definition, currentPath);
36
- // Get redirect description if path changed
37
- const redirectDescription = Api.Schema.Validation.getRedirectDescription(targetSchema.definition, currentPath, fallbackPath, newVersion);
38
- // Create the new path - parse newVersion string to Version type
39
- const newPath = Api.Schema.Routing.createReferencePath({
40
- version: Version.fromString(newVersion),
41
- type: fallbackPath.type || '',
42
- field: fallbackPath.field || '',
43
- });
44
- // Show toast notification if schema location redirect will occur
45
- if (redirectDescription) {
46
- Stores.Toast.store.info(redirectDescription, {
47
- duration: 160_000,
48
- actions: [
49
- {
50
- label: 'Go back',
51
- onClick() {
52
- navigate(-1);
53
- },
54
- },
55
- {
56
- label: 'View changelog',
57
- onClick() {
58
- // Navigate to changelog page
59
- navigate('/changelog');
60
- },
61
- },
62
- ],
63
- });
64
- }
65
- navigate(newPath);
66
- }, 'Failed to switch version');
67
- // Fallback logic if error occurred
68
- if (error) {
69
- // Fallback to simple navigation if schema loading fails
70
- const newPath = Api.Schema.Routing.createReferencePath({
71
- version: Version.fromString(newVersion),
72
- type: currentPath.type || '',
73
- field: currentPath.field || '',
74
- });
75
- navigate(newPath);
76
- }
77
- };
78
- return (_jsx(SimpleVersionPicker, { versions: data, currentVersion: current, onVersionChange: handleVersionChange }));
3
+ import { Select } from '@radix-ui/themes';
4
+ /**
5
+ * A generic version picker component that can be used for any versioned content.
6
+ * This is a controlled component - parent manages the state.
7
+ */
8
+ export const VersionPicker = ({ versions, currentVersion, onVersionChange, }) => {
9
+ // Don't show selector if only one version
10
+ if (versions.length <= 1) {
11
+ return null;
12
+ }
13
+ return (_jsxs(Select.Root, { value: Version.encodeSync(currentVersion), onValueChange: (versionEncoded) => onVersionChange(Version.fromString(versionEncoded)), children: [_jsxs(Select.Trigger, { style: { minWidth: '120px' }, children: ["Version ", Version.encodeSync(currentVersion)] }), _jsx(Select.Content, { position: 'popper', sideOffset: 5, children: versions.map(version => (_jsxs(Select.Item, { value: Version.encodeSync(version), children: ["Version ", Version.encodeSync(version)] }, Version.encodeSync(version)))) })] }));
79
14
  };
80
15
  //# sourceMappingURL=VersionPicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionPicker.js","sourceRoot":"","sources":["../../../src/template/components/VersionPicker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VersionPicker.js","sourceRoot":"","sources":["../../../src/template/components/VersionPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AASzC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB,CAAC,EAC7C,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,EAAE,EAAE;IACH,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,MAAC,MAAM,CAAC,IAAI,IACV,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EACzC,aAAa,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,aAEtF,MAAC,MAAM,CAAC,OAAO,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,yBACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,IAC5B,EACjB,KAAC,MAAM,CAAC,OAAO,IAAC,QAAQ,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,YAC5C,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CACvB,MAAC,MAAM,CAAC,IAAI,IAAmC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,yBACtE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KADpB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAE/B,CACf,CAAC,GACa,IACL,CACf,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Schema } from '#lib/schema/$';
2
+ import React from 'react';
3
+ export declare const ChangelogBody: React.FC<{
4
+ schema: Schema.Schema;
5
+ }>;
6
+ //# sourceMappingURL=ChangelogBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogBody.d.ts","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogBody.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAItC,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;CAAE,CAW7D,CAAA"}
@@ -1,68 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Catalog } from '#lib/catalog/$';
3
3
  import { Change } from '#lib/change/$';
4
- import { DateOnly } from '#lib/date-only/$';
5
4
  import { Revision } from '#lib/revision/$';
6
5
  import { Schema } from '#lib/schema/$';
7
- import { Version } from '#lib/version/$';
8
- import { HashMap, Option } from 'effect';
9
6
  const CRITICALITY_LEVELS = ['BREAKING', 'DANGEROUS', 'NON_BREAKING'];
10
7
  import { Box, Heading } from '@radix-ui/themes';
11
- import React, { useEffect } from 'react';
8
+ import React from 'react';
12
9
  import { useMemo } from 'react';
13
- import { useNavigate, useParams } from 'react-router';
14
- import { ComponentDispatch } from '../ComponentDispatch.js';
15
- import { CriticalitySection } from './CriticalitySection.js';
16
- import * as Group from './groups/index.js';
17
- export const renderDate = (dateOnly) => {
18
- const date = DateOnly.toDate(dateOnly);
19
- const year = date.getUTCFullYear();
20
- return `${year} ${date.toLocaleString('default', {
21
- month: 'long',
22
- day: 'numeric',
23
- timeZone: 'UTC',
24
- })}`;
25
- };
26
- export const Changelog = ({ catalog }) => {
27
- const params = useParams();
28
- const navigate = useNavigate();
29
- const urlVersion = params['version'];
30
- // Redirect to latest version if versioned catalog and no version specified
31
- useEffect(() => {
32
- if (urlVersion)
33
- return;
34
- if (Catalog.Unversioned.is(catalog))
35
- return;
36
- const latestSchema = Catalog.Versioned.getLatestOrThrow(catalog);
37
- const latestVersion = Version.encodeSync(latestSchema.version);
38
- navigate(`/changelog/version/${latestVersion}`, { replace: true });
39
- }, [catalog, urlVersion, navigate]);
40
- // Get revisions and corresponding schema based on catalog type and URL params
41
- const { revisions, schema } = useMemo(() => {
42
- if (Catalog.Unversioned.is(catalog)) {
43
- return {
44
- revisions: catalog.schema.revisions,
45
- schema: catalog.schema,
46
- };
47
- }
48
- else {
49
- // For versioned catalogs, always show specific version (never all)
50
- if (urlVersion) {
51
- const entryOption = Option.map(HashMap.findFirst(catalog.entries, (_, key) => Version.encodeSync(key) === urlVersion), ([, value]) => value);
52
- return Option.match(entryOption, {
53
- onNone: () => ({ revisions: [], schema: null }),
54
- onSome: (entry) => ({ revisions: entry.revisions, schema: entry }),
55
- });
56
- }
57
- // This shouldn't happen due to redirect above, but return empty as fallback
58
- return { revisions: [], schema: null };
59
- }
60
- }, [catalog, urlVersion]);
61
- // Don't render anything while redirecting
62
- if (Catalog.Versioned.is(catalog) && !urlVersion) {
63
- return null;
64
- }
65
- return (_jsxs(Box, { children: [_jsx(Heading, { size: '5', style: { padding: '1rem 0', borderBottom: '1px solid var(--gray-4)', marginBottom: '1.5rem' }, children: "Changelog" }), revisions.map(revision => _jsx(Changeset, { revision: revision, schema: schema }, revision.date))] }));
10
+ import { CriticalitySection } from '../../components/Changelog/CriticalitySection.js';
11
+ import * as Group from '../../components/Changelog/groups/index.js';
12
+ import { ComponentDispatch } from '../../components/ComponentDispatch.js';
13
+ import { renderDate } from './utils.js';
14
+ export const ChangelogBody = ({ schema }) => {
15
+ return (_jsxs(Box, { children: [_jsx(Heading, { size: '5', style: { padding: '1rem 0', borderBottom: '1px solid var(--gray-4)', marginBottom: '1.5rem' }, children: "Changelog" }), schema.revisions.map(revision => _jsx(Changeset, { revision: revision, schema: schema }, revision.date))] }));
66
16
  };
67
17
  const Changeset = ({ revision, schema }) => {
68
18
  // Group changes by criticality level
@@ -108,4 +58,4 @@ const Changeset = ({ revision, schema }) => {
108
58
  return (_jsx(ComponentDispatch, { components: Group, name: type, props: { change, schema } }, `${change._tag}-${change.path || change.message}-${index}`));
109
59
  }) }, group.level)))] }));
110
60
  };
111
- //# sourceMappingURL=Changelog.js.map
61
+ //# sourceMappingURL=ChangelogBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogBody.js","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogBody.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Catalog } from '#lib/catalog/$';
2
+ import { Schema } from '#lib/schema/$';
3
+ export declare const ChangelogSidebar: React.FC<{
4
+ catalog: Catalog.Catalog;
5
+ schema: Schema.Schema;
6
+ }>;
7
+ //# sourceMappingURL=ChangelogSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogSidebar.d.ts","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogSidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAStC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;CACtB,CAkEA,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Catalog } from '#lib/catalog/$';
3
+ import { Schema } from '#lib/schema/$';
4
+ import { Swiss } from '#lib/swiss/$';
5
+ import { Version } from '#lib/version';
6
+ import { Box, Text } from '@radix-ui/themes';
7
+ import { useEffect, useState } from 'react';
8
+ import { useNavigate, useParams } from 'react-router';
9
+ import { VersionPicker } from '../../components/VersionPicker.js';
10
+ import { ChangelogSidebarItem } from './ChangelogSidebarItem.js';
11
+ export const ChangelogSidebar = ({ catalog, schema }) => {
12
+ {
13
+ const navigate = useNavigate();
14
+ // Get revisions for the current version (for sidebar)
15
+ const revisions = schema.revisions;
16
+ const [activeRevision, setActiveRevision] = useState(null);
17
+ // Track active revision based on URL hash
18
+ useEffect(() => {
19
+ const handleHashChange = () => {
20
+ const hash = window.location.hash.slice(1);
21
+ setActiveRevision(hash || null);
22
+ };
23
+ // Set initial active revision
24
+ handleHashChange();
25
+ // Listen for hash changes
26
+ window.addEventListener('hashchange', handleHashChange);
27
+ // Listen for pushState/replaceState (custom event we'll dispatch)
28
+ window.addEventListener('pushstate', handleHashChange);
29
+ return () => {
30
+ window.removeEventListener('hashchange', handleHashChange);
31
+ window.removeEventListener('pushstate', handleHashChange);
32
+ };
33
+ }, []);
34
+ return (_jsxs(Swiss.Item, { cols: 3, style: {
35
+ position: 'sticky',
36
+ top: '2rem',
37
+ height: 'fit-content',
38
+ minWidth: '250px',
39
+ maxHeight: 'calc(100vh - 4rem)',
40
+ overflowY: 'auto',
41
+ }, children: [Catalog.Versioned.is(catalog) && Schema.Versioned.is(schema) && (_jsx(Box, { mb: '3', children: _jsx(VersionPicker, { versions: Catalog.Versioned.getVersions(catalog), currentVersion: schema.version, onVersionChange: (newVersion) => {
42
+ navigate(`/changelog/version/${Version.encodeSync(newVersion)}`);
43
+ } }) })), _jsx(Text, { size: '2', weight: 'medium', mb: '3', style: { display: 'block' }, children: "Revisions" }), revisions.map((revision) => (_jsx(ChangelogSidebarItem, { revision: revision, isActive: activeRevision === revision.date }, revision.date)))] }));
44
+ }
45
+ };
46
+ //# sourceMappingURL=ChangelogSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogSidebar.js","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogSidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Revision } from '#lib/revision';
2
+ export declare const ChangelogSidebarItem: React.FC<{
3
+ revision: Revision.Revision;
4
+ isActive: boolean;
5
+ }>;
6
+ export declare const calculateCounts: (revision: Revision.Revision) => {
7
+ breaking: number;
8
+ dangerous: number;
9
+ safe: number;
10
+ };
11
+ //# sourceMappingURL=ChangelogSidebarItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogSidebarItem.d.ts","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogSidebarItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAIxC,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;CAClB,CAmDA,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,UAAU,QAAQ,CAAC,QAAQ;;;;CAM1D,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Change } from '#lib/change';
3
+ import { Revision } from '#lib/revision';
4
+ import { Box, Flex, Text } from '@radix-ui/themes';
5
+ import { renderDate } from './utils.js';
6
+ export const ChangelogSidebarItem = ({ revision, isActive }) => {
7
+ const counts = calculateCounts(revision);
8
+ return (_jsx(Box, { mb: '2', children: _jsxs("a", { href: `#${revision.date}`, style: {
9
+ textDecoration: 'none',
10
+ display: 'flex',
11
+ alignItems: 'center',
12
+ justifyContent: 'space-between',
13
+ padding: '0.5rem 0.75rem',
14
+ borderRadius: '4px',
15
+ backgroundColor: isActive ? 'var(--gray-a3)' : 'transparent',
16
+ color: 'inherit',
17
+ transition: 'background-color 0.2s',
18
+ }, onClick: (e) => {
19
+ e.preventDefault();
20
+ // Update URL hash
21
+ window.history.pushState(null, '', `#${revision.date}`);
22
+ // Dispatch custom event for pushState
23
+ window.dispatchEvent(new Event('pushstate'));
24
+ // Smooth scroll to element
25
+ document.getElementById(revision.date)?.scrollIntoView({ behavior: 'smooth' });
26
+ }, children: [_jsx(Text, { size: '2', weight: isActive ? 'medium' : 'regular', children: renderDate(revision.date) }), _jsxs(Flex, { gap: '2', align: 'center', children: [counts.breaking > 0 && (_jsx(Text, { size: '1', weight: 'medium', style: { color: '#ef4444' }, children: counts.breaking })), counts.dangerous > 0 && (_jsx(Text, { size: '1', weight: 'medium', style: { color: '#f59e0b' }, children: counts.dangerous })), counts.safe > 0 && (_jsx(Text, { size: '1', weight: 'medium', style: { color: '#10b981' }, children: counts.safe }))] })] }) }));
27
+ };
28
+ export const calculateCounts = (revision) => {
29
+ return {
30
+ breaking: revision.changes.filter(Change.isBreaking).length,
31
+ dangerous: revision.changes.filter(Change.isDangerous).length,
32
+ safe: revision.changes.filter(Change.isSafe).length,
33
+ };
34
+ };
35
+ //# sourceMappingURL=ChangelogSidebarItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogSidebarItem.js","sourceRoot":"","sources":["../../../../src/template/routes/changelog/ChangelogSidebarItem.tsx"],"names":[],"mappings":"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"}