@pgcorp/ui-kit 0.8.1 → 0.10.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.
Files changed (113) hide show
  1. package/README.md +332 -9
  2. package/docs/getting-started.md +135 -0
  3. package/docs/public-api.md +53 -4
  4. package/docs/rich-document.md +216 -0
  5. package/docs/scroll-viewport.md +167 -0
  6. package/docs/theming.md +17 -0
  7. package/package.json +108 -50
  8. package/src/components/layout/SAppShell.vue +3 -1
  9. package/src/components/layout/SDockRegion.vue +5 -3
  10. package/src/components/layout/SResizeHandle.vue +45 -5
  11. package/src/components/layout/SWorkbenchPanelShell.vue +4 -2
  12. package/src/components/shared/_internal/SDialogSurface.css +23 -0
  13. package/src/components/shared/_internal/SDialogSurface.vue +9 -2
  14. package/src/components/shared/_internal/SToastItem.css +4 -0
  15. package/src/components/shared/_internal/SToastItem.vue +44 -8
  16. package/src/components/shared/_internal/STreeNode.vue +24 -11
  17. package/src/components/shared/_internal/dialogSurface.ts +7 -1
  18. package/src/components/shared/complex/SKanbanLane.vue +4 -2
  19. package/src/components/shared/containers/SCloudChromeRow.vue +3 -2
  20. package/src/components/shared/containers/SDrawer.css +11 -2
  21. package/src/components/shared/containers/SDrawer.vue +48 -9
  22. package/src/components/shared/containers/SModal.vue +5 -2
  23. package/src/components/shared/containers/SPanel.vue +4 -2
  24. package/src/components/shared/containers/SPopover.vue +7 -3
  25. package/src/components/shared/containers/SUiKitLocaleProvider.vue +57 -0
  26. package/src/components/shared/controls/SButton.css +14 -10
  27. package/src/components/shared/controls/SCombobox.vue +8 -6
  28. package/src/components/shared/controls/SComboboxTrigger.css +7 -4
  29. package/src/components/shared/controls/SComboboxTrigger.vue +5 -2
  30. package/src/components/shared/controls/SContextToggleButton.vue +6 -4
  31. package/src/components/shared/controls/SDragHandle.vue +8 -4
  32. package/src/components/shared/controls/SDropdownMenu.vue +7 -4
  33. package/src/components/shared/controls/SInputText.css +5 -4
  34. package/src/components/shared/controls/SListbox.vue +4 -2
  35. package/src/components/shared/controls/SSelect.vue +4 -2
  36. package/src/components/shared/controls/STextarea.ts +13 -0
  37. package/src/components/shared/controls/STextarea.vue +391 -37
  38. package/src/components/shared/controls/_internal/SInlineTokenSurface.vue +4 -2
  39. package/src/components/shared/data-display/SChart.vue +7 -5
  40. package/src/components/shared/data-display/SChip.vue +3 -1
  41. package/src/components/shared/data-display/SCodeBlock.css +4 -0
  42. package/src/components/shared/data-display/SCodeBlock.vue +46 -22
  43. package/src/components/shared/data-display/SCodeEditor.css +17 -0
  44. package/src/components/shared/data-display/SCodeEditor.vue +173 -8
  45. package/src/components/shared/data-display/SCodeSearchPanel.vue +48 -33
  46. package/src/components/shared/data-display/SCodeWorkspaceEditor.css +13 -0
  47. package/src/components/shared/data-display/SCodeWorkspaceEditor.vue +355 -0
  48. package/src/components/shared/data-display/SControlledToastViewport.css +89 -0
  49. package/src/components/shared/data-display/SControlledToastViewport.vue +205 -0
  50. package/src/components/shared/data-display/SCopyField.vue +12 -10
  51. package/src/components/shared/data-display/SDiffViewer.css +122 -0
  52. package/src/components/shared/data-display/SDiffViewer.vue +499 -0
  53. package/src/components/shared/data-display/SDocBlock.vue +99 -71
  54. package/src/components/shared/data-display/SExpandableText.vue +10 -8
  55. package/src/components/shared/data-display/SJsonTree.vue +4 -2
  56. package/src/components/shared/data-display/SLinkedSystemsList.vue +4 -2
  57. package/src/components/shared/data-display/SMessage.vue +6 -6
  58. package/src/components/shared/data-display/SRichDocument.css +8 -0
  59. package/src/components/shared/data-display/SRichDocument.vue +65 -0
  60. package/src/components/shared/data-display/SScrollViewport.css +53 -0
  61. package/src/components/shared/data-display/SScrollViewport.vue +470 -0
  62. package/src/components/shared/data-display/STable.vue +38 -19
  63. package/src/components/shared/data-display/SToastContainer.vue +22 -17
  64. package/src/components/shared/data-display/SVirtualList.ts +33 -0
  65. package/src/components/shared/data-display/SVirtualList.vue +321 -36
  66. package/src/components/shared/data-display/_internal/SCodeTokenLine.css +72 -0
  67. package/src/components/shared/data-display/_internal/SCodeTokenLine.vue +79 -0
  68. package/src/components/shared/data-display/_internal/SRichBlockNode.css +85 -0
  69. package/src/components/shared/data-display/_internal/SRichBlockNode.vue +282 -0
  70. package/src/components/shared/data-display/_internal/SRichInlineNode.css +6 -0
  71. package/src/components/shared/data-display/_internal/SRichInlineNode.vue +76 -0
  72. package/src/components/shared/data-display/_internal/SRichMath.css +42 -0
  73. package/src/components/shared/data-display/_internal/SRichMath.vue +102 -0
  74. package/src/components/shared/data-display/codeEditor.ts +200 -0
  75. package/src/components/shared/data-display/codeWorkspace.ts +233 -0
  76. package/src/components/shared/data-display/diff.ts +541 -0
  77. package/src/components/shared/data-display/richDocument.ts +876 -0
  78. package/src/components/shared/data-display/scrollViewport.ts +47 -0
  79. package/src/components/shared/data-display/toast.ts +194 -0
  80. package/src/components/shared/database/SDataGrid.vue +7 -4
  81. package/src/components/shared/database/SSqlEditor.vue +39 -39
  82. package/src/components/shared/feedback/SAsyncState.vue +3 -1
  83. package/src/components/shared/graph/SGraphViewport.vue +11 -9
  84. package/src/components/shared/navigation/SBreadcrumbs.vue +8 -5
  85. package/src/components/shared/navigation/SCatalogNavigator.vue +26 -20
  86. package/src/components/shared/navigation/STabList.vue +10 -6
  87. package/src/components/shared/navigation/STabs.vue +15 -11
  88. package/src/components/shared/navigation/SWizardSteps.vue +4 -2
  89. package/src/components/shared/persona/SPersonaProjectPicker.vue +31 -27
  90. package/src/components/shared/persona/SPersonaRunWorkbench.vue +39 -33
  91. package/src/components/shared/persona/_internal/SPersonaRunConsole.vue +8 -6
  92. package/src/components/shared/persona/_internal/labels.ts +66 -57
  93. package/src/components/shared/persona/presentation.ts +140 -110
  94. package/src/composables/useFloatingPosition.ts +39 -2
  95. package/src/composables/useUiKitLocale.ts +17 -0
  96. package/src/internal/codeHighlight.ts +110 -0
  97. package/src/internal/diffEngine.ts +464 -0
  98. package/src/internal/diffRuntime.ts +189 -0
  99. package/src/internal/feedbackPresentation.ts +33 -14
  100. package/src/internal/localeContext.ts +22 -0
  101. package/src/internal/ownedAttrs.ts +8 -0
  102. package/src/internal/runtimeContract.ts +11 -9
  103. package/src/internal/semanticSizing.ts +13 -0
  104. package/src/locales/catalog.ts +634 -0
  105. package/src/locales/locale.ts +472 -0
  106. package/src/locales/messages.generated.ts +1826 -0
  107. package/src/locales/messages.ts +150 -0
  108. package/src/stores/useNotifierStore.ts +61 -44
  109. package/src/styles/tokens.css +23 -2
  110. package/src/theme.ts +59 -32
  111. package/src/workers/diff.worker.ts +73 -0
  112. package/src/workers/diffProtocol.ts +155 -0
  113. package/src/components/shared/data-display/SToastContainer.css +0 -53
@@ -0,0 +1,155 @@
1
+ import {
2
+ validateDiffComputationOptions,
3
+ validateDiffResult,
4
+ validateDiffSource,
5
+ type SDiffComputationOptions,
6
+ type SDiffResult,
7
+ type SDiffSource,
8
+ } from '../components/shared/data-display/diff'
9
+ import { validateExactString, validateNonEmptyString } from '../internal/runtimeContract'
10
+
11
+ export const S_DIFF_WORKER_PROTOCOL_VERSION = 1 as const
12
+
13
+ export interface SDiffWorkerComputeRequest {
14
+ readonly version: typeof S_DIFF_WORKER_PROTOCOL_VERSION
15
+ readonly type: 'compute'
16
+ readonly requestId: string
17
+ readonly before: SDiffSource
18
+ readonly after: SDiffSource
19
+ readonly options: Required<SDiffComputationOptions>
20
+ }
21
+
22
+ export interface SDiffWorkerCancelRequest {
23
+ readonly version: typeof S_DIFF_WORKER_PROTOCOL_VERSION
24
+ readonly type: 'cancel'
25
+ readonly requestId: string
26
+ }
27
+
28
+ export type SDiffWorkerRequest = SDiffWorkerComputeRequest | SDiffWorkerCancelRequest
29
+
30
+ export interface SDiffWorkerResultResponse {
31
+ readonly version: typeof S_DIFF_WORKER_PROTOCOL_VERSION
32
+ readonly type: 'result'
33
+ readonly requestId: string
34
+ readonly result: SDiffResult
35
+ }
36
+
37
+ export interface SDiffWorkerCancelledResponse {
38
+ readonly version: typeof S_DIFF_WORKER_PROTOCOL_VERSION
39
+ readonly type: 'cancelled'
40
+ readonly requestId: string
41
+ }
42
+
43
+ export interface SDiffWorkerErrorResponse {
44
+ readonly version: typeof S_DIFF_WORKER_PROTOCOL_VERSION
45
+ readonly type: 'error'
46
+ readonly requestId: string
47
+ readonly error: {
48
+ readonly name: string
49
+ readonly message: string
50
+ }
51
+ }
52
+
53
+ export type SDiffWorkerResponse =
54
+ | SDiffWorkerResultResponse
55
+ | SDiffWorkerCancelledResponse
56
+ | SDiffWorkerErrorResponse
57
+
58
+ const REQUEST_TYPES = ['compute', 'cancel'] as const
59
+ const RESPONSE_TYPES = ['result', 'cancelled', 'error'] as const
60
+ const COMPUTE_KEYS = new Set(['version', 'type', 'requestId', 'before', 'after', 'options'])
61
+ const CANCEL_KEYS = new Set(['version', 'type', 'requestId'])
62
+ const RESULT_KEYS = new Set(['version', 'type', 'requestId', 'result'])
63
+ const CANCELLED_KEYS = new Set(['version', 'type', 'requestId'])
64
+ const ERROR_KEYS = new Set(['version', 'type', 'requestId', 'error'])
65
+ const ERROR_RECORD_KEYS = new Set(['name', 'message'])
66
+
67
+ function assertPlainExactRecord(
68
+ owner: string,
69
+ coordinate: string,
70
+ value: unknown,
71
+ allowed: ReadonlySet<string>,
72
+ ): Record<string, unknown> {
73
+ if (
74
+ typeof value !== 'object'
75
+ || value === null
76
+ || Array.isArray(value)
77
+ || Object.getPrototypeOf(value) !== Object.prototype
78
+ ) {
79
+ throw new TypeError(`${owner}: ${coordinate} must be a plain object.`)
80
+ }
81
+ const record = value as Record<string, unknown>
82
+ const unexpected = Object.keys(record).filter((key) => !allowed.has(key))
83
+ if (unexpected.length > 0) {
84
+ throw new TypeError(`${owner}.${coordinate}: unknown fields ${unexpected.map((key) => JSON.stringify(key)).join(', ')}.`)
85
+ }
86
+ return record
87
+ }
88
+
89
+ function validateVersion(owner: string, value: unknown): typeof S_DIFF_WORKER_PROTOCOL_VERSION {
90
+ if (value === S_DIFF_WORKER_PROTOCOL_VERSION) return value
91
+ throw new RangeError(`${owner}: unsupported diff worker protocol version ${String(value)}.`)
92
+ }
93
+
94
+ function validateRequestId(owner: string, value: unknown): string {
95
+ const requestId = validateNonEmptyString(owner, 'requestId', value)
96
+ if (requestId === requestId.trim()) return requestId
97
+ throw new TypeError(`${owner}: requestId must not contain surrounding whitespace.`)
98
+ }
99
+
100
+ export function validateDiffWorkerRequest(value: unknown): SDiffWorkerRequest {
101
+ const envelope = assertPlainExactRecord('SDiffWorkerRequest', 'message', value, new Set([
102
+ ...COMPUTE_KEYS,
103
+ ...CANCEL_KEYS,
104
+ ]))
105
+ const type = validateExactString('SDiffWorkerRequest', 'type', envelope.type, REQUEST_TYPES)
106
+ const record = assertPlainExactRecord(
107
+ 'SDiffWorkerRequest',
108
+ 'message',
109
+ value,
110
+ type === 'compute' ? COMPUTE_KEYS : CANCEL_KEYS,
111
+ )
112
+ const version = validateVersion('SDiffWorkerRequest', record.version)
113
+ const requestId = validateRequestId('SDiffWorkerRequest', record.requestId)
114
+ if (type === 'cancel') return Object.freeze({ version, type, requestId })
115
+ return Object.freeze({
116
+ version,
117
+ type,
118
+ requestId,
119
+ before: validateDiffSource('SDiffWorkerRequest', 'before', record.before),
120
+ after: validateDiffSource('SDiffWorkerRequest', 'after', record.after),
121
+ options: validateDiffComputationOptions('SDiffWorkerRequest', record.options),
122
+ })
123
+ }
124
+
125
+ export function validateDiffWorkerResponse(value: unknown): SDiffWorkerResponse {
126
+ const envelope = assertPlainExactRecord('SDiffWorkerResponse', 'message', value, new Set([
127
+ ...RESULT_KEYS,
128
+ ...CANCELLED_KEYS,
129
+ ...ERROR_KEYS,
130
+ ]))
131
+ const type = validateExactString('SDiffWorkerResponse', 'type', envelope.type, RESPONSE_TYPES)
132
+ const allowed = type === 'result' ? RESULT_KEYS : type === 'error' ? ERROR_KEYS : CANCELLED_KEYS
133
+ const record = assertPlainExactRecord('SDiffWorkerResponse', 'message', value, allowed)
134
+ const version = validateVersion('SDiffWorkerResponse', record.version)
135
+ const requestId = validateRequestId('SDiffWorkerResponse', record.requestId)
136
+ if (type === 'cancelled') return Object.freeze({ version, type, requestId })
137
+ if (type === 'result') {
138
+ return Object.freeze({
139
+ version,
140
+ type,
141
+ requestId,
142
+ result: validateDiffResult('SDiffWorkerResponse', record.result),
143
+ })
144
+ }
145
+ const error = assertPlainExactRecord('SDiffWorkerResponse', 'error', record.error, ERROR_RECORD_KEYS)
146
+ return Object.freeze({
147
+ version,
148
+ type,
149
+ requestId,
150
+ error: Object.freeze({
151
+ name: validateNonEmptyString('SDiffWorkerResponse', 'error.name', error.name),
152
+ message: validateNonEmptyString('SDiffWorkerResponse', 'error.message', error.message),
153
+ }),
154
+ })
155
+ }
@@ -1,53 +0,0 @@
1
- @reference "../../../styles/reference.css";
2
-
3
- .s-toast-container {
4
- @apply fixed top-0 right-0 flex max-h-full min-w-0 w-full max-w-md flex-col overflow-y-auto overscroll-contain p-4;
5
- z-index: var(--s-layer-root-toast);
6
- @apply pointer-events-none;
7
- }
8
-
9
- .s-toast-transition-wrapper {
10
- @apply flex flex-col items-end gap-2;
11
- }
12
-
13
- /*
14
- Transition classes for TransitionGroup.
15
- This animates toasts sliding in and out from the right.
16
- */
17
-
18
- /* 1. Enter transitions */
19
- .notification-transition-enter-active {
20
- transition: all var(--s-motion-standard) ease-out;
21
- }
22
-
23
- .notification-transition-enter-from {
24
- opacity: 0;
25
- transform: translate3d(16px, 12px, 0) scale(0.98);
26
- }
27
-
28
- .notification-transition-enter-to {
29
- opacity: 1;
30
- transform: translate3d(0, 0, 0) scale(1);
31
- }
32
-
33
- /* 2. Leave transitions */
34
- .notification-transition-leave-active {
35
- transition: all var(--s-motion-fast) ease-in;
36
- /* To keep layout from jumping, we make the leaving element absolute */
37
- position: absolute;
38
- }
39
-
40
- .notification-transition-leave-from {
41
- opacity: 1;
42
- transform: translate3d(0, 0, 0) scale(1);
43
- }
44
-
45
- .notification-transition-leave-to {
46
- opacity: 0;
47
- transform: translate3d(12px, 8px, 0) scale(0.98);
48
- }
49
-
50
- /* 3. Move transition */
51
- .notification-transition-move {
52
- transition: transform var(--s-motion-standard) ease;
53
- }