mgv-backoffice 1.36.0 → 1.36.2

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 (60) hide show
  1. package/README.md +1794 -1719
  2. package/dist/components/BaseBadge.vue.d.ts +1 -11
  3. package/dist/components/BaseDropdown.vue.d.ts +1 -1
  4. package/dist/ui-lib.js +942 -925
  5. package/dist/ui-lib.umd.cjs +1 -1
  6. package/dist/utils/specForm.d.ts +1 -1
  7. package/package.json +54 -54
  8. package/src/components/BaseAlert.vue +104 -104
  9. package/src/components/BaseBadge.vue +12 -2
  10. package/src/components/BaseBarDistribution.test.ts +51 -51
  11. package/src/components/BaseBarDistribution.vue +73 -73
  12. package/src/components/BaseChipButton.vue +42 -42
  13. package/src/components/BaseCodeBlock.test.ts +70 -70
  14. package/src/components/BaseCodeBlock.vue +74 -74
  15. package/src/components/BaseCollapsibleSection.vue +113 -113
  16. package/src/components/BaseConfirmModal.vue +114 -114
  17. package/src/components/BaseCredentialsForm.test.ts +108 -108
  18. package/src/components/BaseCredentialsForm.vue +241 -241
  19. package/src/components/BaseDropdown.test.ts +87 -87
  20. package/src/components/BaseDropdown.vue +172 -172
  21. package/src/components/BaseEntityPickerModal.vue +330 -330
  22. package/src/components/BaseFileDropzone.vue +94 -94
  23. package/src/components/BaseFilterChip.test.ts +44 -44
  24. package/src/components/BaseFilterChip.vue +67 -67
  25. package/src/components/BaseModalShell.vue +209 -209
  26. package/src/components/BasePageHeader.vue +120 -120
  27. package/src/components/BasePillPickerModal.test.ts +95 -95
  28. package/src/components/BaseRemoveButton.vue +22 -22
  29. package/src/components/BaseSpecFields.test.ts +39 -0
  30. package/src/components/BaseSpecFields.vue +27 -3
  31. package/src/components/BaseStatBreakdown.test.ts +56 -56
  32. package/src/components/BaseStatBreakdown.vue +49 -49
  33. package/src/components/BaseStatusPill.vue +54 -54
  34. package/src/components/BaseTextInputModal.vue +140 -140
  35. package/src/components/BaseToolbarButton.test.ts +48 -48
  36. package/src/components/BaseToolbarButton.vue +94 -94
  37. package/src/composables/useFieldClasses.test.ts +55 -55
  38. package/src/composables/useFieldClasses.ts +56 -56
  39. package/src/composables/usePolling.test.ts +112 -112
  40. package/src/composables/usePolling.ts +102 -102
  41. package/src/composables/useQueryParamSync.test.ts +56 -56
  42. package/src/composables/useQueryParamSync.ts +42 -42
  43. package/src/composables/useThemeClasses.test.ts +34 -34
  44. package/src/composables/useThemeClasses.ts +137 -137
  45. package/src/index.ts +138 -138
  46. package/src/style.css +32 -32
  47. package/src/types/distribution.ts +7 -7
  48. package/src/types/pillPicker.ts +14 -14
  49. package/src/types/specField.ts +30 -30
  50. package/src/types/statBreakdown.ts +6 -6
  51. package/src/utils/format.test.ts +264 -264
  52. package/src/utils/format.ts +216 -216
  53. package/src/utils/httpColors.test.ts +100 -100
  54. package/src/utils/httpColors.ts +99 -99
  55. package/src/utils/kvRows.test.ts +47 -47
  56. package/src/utils/kvRows.ts +34 -34
  57. package/src/utils/specForm.test.ts +64 -53
  58. package/src/utils/specForm.ts +49 -48
  59. package/src/utils/validate.test.ts +82 -82
  60. package/src/utils/validate.ts +76 -76
package/src/index.ts CHANGED
@@ -1,138 +1,138 @@
1
- import './style.css'
2
-
3
- // Components — existing
4
- export { default as BaseAlert } from './components/BaseAlert.vue'
5
- export { default as BaseBadge } from './components/BaseBadge.vue'
6
- export { default as BaseBreadcrumb } from './components/BaseBreadcrumb.vue'
7
- export { default as BaseButton } from './components/BaseButton.vue'
8
- export { default as BaseLine } from './components/BaseLine.vue'
9
- export { default as BaseLogo } from './components/BaseLogo.vue'
10
- export { default as BaseModal } from './components/BaseModal.vue'
11
- export { default as BaseRow } from './components/BaseRow.vue'
12
- export { default as BaseSpinner } from './components/BaseSpinner.vue'
13
- export { default as BaseToast } from './components/BaseToast.vue'
14
- export { default as ColoredSquares } from './components/ColoredSquares.vue'
15
- export { default as EarningsCard } from './components/EarningsCard.vue'
16
- export { default as EuroAmount } from './components/EuroAmount.vue'
17
- export { default as Pagination } from './components/Pagination.vue'
18
- export { default as TrendArrow } from './components/TrendArrow.vue'
19
-
20
- // Components — extracted from WireMate (Tier 1 + Tier 2)
21
- export { default as BaseModalShell } from './components/BaseModalShell.vue'
22
- export { default as BaseCollapsibleSection } from './components/BaseCollapsibleSection.vue'
23
- export { default as BaseConfirmModal } from './components/BaseConfirmModal.vue'
24
- export { default as BaseTextInputModal } from './components/BaseTextInputModal.vue'
25
- export { default as BaseNotFoundPage } from './components/BaseNotFoundPage.vue'
26
- export { default as BaseSidebar } from './components/BaseSidebar.vue'
27
- export { default as BaseEntityPickerModal } from './components/BaseEntityPickerModal.vue'
28
- export { default as BaseAppLayout } from './components/BaseAppLayout.vue'
29
- export { default as BasePageHeader } from './components/BasePageHeader.vue'
30
- export { default as BaseToolbarButton } from './components/BaseToolbarButton.vue'
31
- export { default as BaseActionButton } from './components/BaseActionButton.vue'
32
- export { default as BaseCopyButton } from './components/BaseCopyButton.vue'
33
- export { default as BaseGoogleSignInButton } from './components/BaseGoogleSignInButton.vue'
34
- export { default as BaseLoginForm } from './components/BaseLoginForm.vue'
35
- export { default as BaseNotificationPanel } from './components/BaseNotificationPanel.vue'
36
- export { default as BaseChipButton } from './components/BaseChipButton.vue'
37
- export { default as BaseRemoveButton } from './components/BaseRemoveButton.vue'
38
- export { default as BaseStatusPill } from './components/BaseStatusPill.vue'
39
- export { default as BaseFileDropzone } from './components/BaseFileDropzone.vue'
40
- export { default as BaseCodeBlock } from './components/BaseCodeBlock.vue'
41
-
42
- // Components — extracted from TradeAutomation
43
- export { default as BaseInput } from './components/BaseInput.vue'
44
- export { default as BaseSelect } from './components/BaseSelect.vue'
45
- export { default as BaseDropdown } from './components/BaseDropdown.vue'
46
- export { default as BaseSegmentedControl } from './components/BaseSegmentedControl.vue'
47
- export { default as BaseTable } from './components/BaseTable.vue'
48
- export { default as BaseSpecFields } from './components/BaseSpecFields.vue'
49
- export { default as BaseStatBreakdown } from './components/BaseStatBreakdown.vue'
50
- export { default as BaseFilterChip } from './components/BaseFilterChip.vue'
51
- export { default as BaseCredentialsForm } from './components/BaseCredentialsForm.vue'
52
- export { default as BasePillPickerModal } from './components/BasePillPickerModal.vue'
53
- export { default as BaseBarDistribution } from './components/BaseBarDistribution.vue'
54
- export type { CredentialsView, CredentialsUpdate } from './components/BaseCredentialsForm.vue'
55
-
56
- // Composables
57
- export { useTheme, initTheme } from './composables/useTheme'
58
- export type { UseThemeOptions } from './composables/useTheme'
59
- export { useThemeClasses } from './composables/useThemeClasses'
60
- export type { ThemeClasses } from './composables/useThemeClasses'
61
- export { useEscapeKey } from './composables/useEscapeKey'
62
- export { useDebouncedRef } from './composables/useDebounce'
63
- export { useToast } from './composables/useToast'
64
- export { useMobileSidebar } from './composables/useMobileSidebar'
65
- export { useSidebarCollapse } from './composables/useSidebarCollapse'
66
- export type { UseSidebarCollapseOptions } from './composables/useSidebarCollapse'
67
- export { useNotifications } from './composables/useNotifications'
68
- export { useQueryParamSync } from './composables/useQueryParamSync'
69
- export { useFieldClasses } from './composables/useFieldClasses'
70
- export type { FieldClasses } from './composables/useFieldClasses'
71
- export { usePolling } from './composables/usePolling'
72
- export type { UsePollingOptions } from './composables/usePolling'
73
-
74
- // Enums
75
- export { AlertEnum } from './enums/AlertEnum'
76
- export { BaseBadgeEnum } from './enums/BaseBadgeEnum'
77
- export { BaseButtonEnum } from './enums/BaseButtonEnum'
78
- export { BaseButtonSizeEnum } from './enums/BaseButtonSizeEnum'
79
- export { BaseLogoEnum, BaseLoginEnum } from './enums/BaseLogoEnum'
80
- export { BaseModalEnum } from './enums/BaseModalEnum'
81
- export { BaseToastEnum } from './enums/BaseToastEnum'
82
- export { ColorsEnums } from './enums/ColorsEnums'
83
- export { LineEnum } from './enums/LineEnum'
84
- export { PositioningEnum } from './enums/PositioningEnum'
85
-
86
- // Types
87
- export type { BreadCrumb } from './components/BaseBreadcrumb.vue'
88
- export type { NavItem, NavSection } from './types/sidebar'
89
- export type { EntityPickerItem } from './types/entityPicker'
90
- export type { LoginCredentials } from './types/auth'
91
- export type { NotificationItem } from './types/notification'
92
- export type { SegmentedOption } from './types/segmented'
93
- export type { DropdownOption } from './types/dropdown'
94
- export type { TableColumn } from './types/table'
95
- export type { SpecField, SpecFieldType, SpecFieldValue } from './types/specField'
96
- export type { StatBreakdownItem } from './types/statBreakdown'
97
- export type { PillPickerItem } from './types/pillPicker'
98
- export type { DistributionBar } from './types/distribution'
99
-
100
- // Utils
101
- export { getBaseColor, getBaseColorOf } from './utils/util'
102
- export {
103
- methodBadgeSolid,
104
- methodBadgeBright,
105
- methodBadgeTinted,
106
- statusBadgeSolid,
107
- statusBadgeTinted,
108
- statusBadgeSoft,
109
- } from './utils/httpColors'
110
- export { rowKeyMissing, rowValueMissing } from './utils/kvRows'
111
- export type { KeyValueRowLike } from './utils/kvRows'
112
- export { sanitizeHtml, isSafeHref } from './utils/sanitizeHtml'
113
- export {
114
- fmtNumber,
115
- fmtDate,
116
- fmtDateTime,
117
- fmtDateTimeMs,
118
- fmtDateShort,
119
- fmtCalendarDate,
120
- fmtCalendarDateTime,
121
- fmtMsAsSeconds,
122
- fmtBytes,
123
- fmtPrice,
124
- fmtPct,
125
- fmtUsd,
126
- fmtDuration,
127
- formatJson,
128
- stringifyValue,
129
- } from './utils/format'
130
- export {
131
- isValidAbsoluteUrl,
132
- isValidJson,
133
- isValidXml,
134
- isValidBase64,
135
- } from './utils/validate'
136
- export { buildSpecParams, firstInvalidNumericSpec } from './utils/specForm'
137
- export { computePnL } from './utils/pnl'
138
- export type { PnL, PnLInputs } from './utils/pnl'
1
+ import './style.css'
2
+
3
+ // Components — existing
4
+ export { default as BaseAlert } from './components/BaseAlert.vue'
5
+ export { default as BaseBadge } from './components/BaseBadge.vue'
6
+ export { default as BaseBreadcrumb } from './components/BaseBreadcrumb.vue'
7
+ export { default as BaseButton } from './components/BaseButton.vue'
8
+ export { default as BaseLine } from './components/BaseLine.vue'
9
+ export { default as BaseLogo } from './components/BaseLogo.vue'
10
+ export { default as BaseModal } from './components/BaseModal.vue'
11
+ export { default as BaseRow } from './components/BaseRow.vue'
12
+ export { default as BaseSpinner } from './components/BaseSpinner.vue'
13
+ export { default as BaseToast } from './components/BaseToast.vue'
14
+ export { default as ColoredSquares } from './components/ColoredSquares.vue'
15
+ export { default as EarningsCard } from './components/EarningsCard.vue'
16
+ export { default as EuroAmount } from './components/EuroAmount.vue'
17
+ export { default as Pagination } from './components/Pagination.vue'
18
+ export { default as TrendArrow } from './components/TrendArrow.vue'
19
+
20
+ // Components — extracted from WireMate (Tier 1 + Tier 2)
21
+ export { default as BaseModalShell } from './components/BaseModalShell.vue'
22
+ export { default as BaseCollapsibleSection } from './components/BaseCollapsibleSection.vue'
23
+ export { default as BaseConfirmModal } from './components/BaseConfirmModal.vue'
24
+ export { default as BaseTextInputModal } from './components/BaseTextInputModal.vue'
25
+ export { default as BaseNotFoundPage } from './components/BaseNotFoundPage.vue'
26
+ export { default as BaseSidebar } from './components/BaseSidebar.vue'
27
+ export { default as BaseEntityPickerModal } from './components/BaseEntityPickerModal.vue'
28
+ export { default as BaseAppLayout } from './components/BaseAppLayout.vue'
29
+ export { default as BasePageHeader } from './components/BasePageHeader.vue'
30
+ export { default as BaseToolbarButton } from './components/BaseToolbarButton.vue'
31
+ export { default as BaseActionButton } from './components/BaseActionButton.vue'
32
+ export { default as BaseCopyButton } from './components/BaseCopyButton.vue'
33
+ export { default as BaseGoogleSignInButton } from './components/BaseGoogleSignInButton.vue'
34
+ export { default as BaseLoginForm } from './components/BaseLoginForm.vue'
35
+ export { default as BaseNotificationPanel } from './components/BaseNotificationPanel.vue'
36
+ export { default as BaseChipButton } from './components/BaseChipButton.vue'
37
+ export { default as BaseRemoveButton } from './components/BaseRemoveButton.vue'
38
+ export { default as BaseStatusPill } from './components/BaseStatusPill.vue'
39
+ export { default as BaseFileDropzone } from './components/BaseFileDropzone.vue'
40
+ export { default as BaseCodeBlock } from './components/BaseCodeBlock.vue'
41
+
42
+ // Components — extracted from TradeAutomation
43
+ export { default as BaseInput } from './components/BaseInput.vue'
44
+ export { default as BaseSelect } from './components/BaseSelect.vue'
45
+ export { default as BaseDropdown } from './components/BaseDropdown.vue'
46
+ export { default as BaseSegmentedControl } from './components/BaseSegmentedControl.vue'
47
+ export { default as BaseTable } from './components/BaseTable.vue'
48
+ export { default as BaseSpecFields } from './components/BaseSpecFields.vue'
49
+ export { default as BaseStatBreakdown } from './components/BaseStatBreakdown.vue'
50
+ export { default as BaseFilterChip } from './components/BaseFilterChip.vue'
51
+ export { default as BaseCredentialsForm } from './components/BaseCredentialsForm.vue'
52
+ export { default as BasePillPickerModal } from './components/BasePillPickerModal.vue'
53
+ export { default as BaseBarDistribution } from './components/BaseBarDistribution.vue'
54
+ export type { CredentialsView, CredentialsUpdate } from './components/BaseCredentialsForm.vue'
55
+
56
+ // Composables
57
+ export { useTheme, initTheme } from './composables/useTheme'
58
+ export type { UseThemeOptions } from './composables/useTheme'
59
+ export { useThemeClasses } from './composables/useThemeClasses'
60
+ export type { ThemeClasses } from './composables/useThemeClasses'
61
+ export { useEscapeKey } from './composables/useEscapeKey'
62
+ export { useDebouncedRef } from './composables/useDebounce'
63
+ export { useToast } from './composables/useToast'
64
+ export { useMobileSidebar } from './composables/useMobileSidebar'
65
+ export { useSidebarCollapse } from './composables/useSidebarCollapse'
66
+ export type { UseSidebarCollapseOptions } from './composables/useSidebarCollapse'
67
+ export { useNotifications } from './composables/useNotifications'
68
+ export { useQueryParamSync } from './composables/useQueryParamSync'
69
+ export { useFieldClasses } from './composables/useFieldClasses'
70
+ export type { FieldClasses } from './composables/useFieldClasses'
71
+ export { usePolling } from './composables/usePolling'
72
+ export type { UsePollingOptions } from './composables/usePolling'
73
+
74
+ // Enums
75
+ export { AlertEnum } from './enums/AlertEnum'
76
+ export { BaseBadgeEnum } from './enums/BaseBadgeEnum'
77
+ export { BaseButtonEnum } from './enums/BaseButtonEnum'
78
+ export { BaseButtonSizeEnum } from './enums/BaseButtonSizeEnum'
79
+ export { BaseLogoEnum, BaseLoginEnum } from './enums/BaseLogoEnum'
80
+ export { BaseModalEnum } from './enums/BaseModalEnum'
81
+ export { BaseToastEnum } from './enums/BaseToastEnum'
82
+ export { ColorsEnums } from './enums/ColorsEnums'
83
+ export { LineEnum } from './enums/LineEnum'
84
+ export { PositioningEnum } from './enums/PositioningEnum'
85
+
86
+ // Types
87
+ export type { BreadCrumb } from './components/BaseBreadcrumb.vue'
88
+ export type { NavItem, NavSection } from './types/sidebar'
89
+ export type { EntityPickerItem } from './types/entityPicker'
90
+ export type { LoginCredentials } from './types/auth'
91
+ export type { NotificationItem } from './types/notification'
92
+ export type { SegmentedOption } from './types/segmented'
93
+ export type { DropdownOption } from './types/dropdown'
94
+ export type { TableColumn } from './types/table'
95
+ export type { SpecField, SpecFieldType, SpecFieldValue } from './types/specField'
96
+ export type { StatBreakdownItem } from './types/statBreakdown'
97
+ export type { PillPickerItem } from './types/pillPicker'
98
+ export type { DistributionBar } from './types/distribution'
99
+
100
+ // Utils
101
+ export { getBaseColor, getBaseColorOf } from './utils/util'
102
+ export {
103
+ methodBadgeSolid,
104
+ methodBadgeBright,
105
+ methodBadgeTinted,
106
+ statusBadgeSolid,
107
+ statusBadgeTinted,
108
+ statusBadgeSoft,
109
+ } from './utils/httpColors'
110
+ export { rowKeyMissing, rowValueMissing } from './utils/kvRows'
111
+ export type { KeyValueRowLike } from './utils/kvRows'
112
+ export { sanitizeHtml, isSafeHref } from './utils/sanitizeHtml'
113
+ export {
114
+ fmtNumber,
115
+ fmtDate,
116
+ fmtDateTime,
117
+ fmtDateTimeMs,
118
+ fmtDateShort,
119
+ fmtCalendarDate,
120
+ fmtCalendarDateTime,
121
+ fmtMsAsSeconds,
122
+ fmtBytes,
123
+ fmtPrice,
124
+ fmtPct,
125
+ fmtUsd,
126
+ fmtDuration,
127
+ formatJson,
128
+ stringifyValue,
129
+ } from './utils/format'
130
+ export {
131
+ isValidAbsoluteUrl,
132
+ isValidJson,
133
+ isValidXml,
134
+ isValidBase64,
135
+ } from './utils/validate'
136
+ export { buildSpecParams, firstInvalidNumericSpec } from './utils/specForm'
137
+ export { computePnL } from './utils/pnl'
138
+ export type { PnL, PnLInputs } from './utils/pnl'
package/src/style.css CHANGED
@@ -1,32 +1,32 @@
1
- /* Brand typography, shipped by the library so every consumer renders the same:
2
- Fira Sans for UI text, Fira Code for numerals/data. External @import (kept
3
- first — CSS ignores @import after any other rule); consumers should add
4
- <link rel="preconnect"> hints for fonts.googleapis.com / fonts.gstatic.com
5
- in their index.html for faster first paint. */
6
- @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');
7
-
8
- @import "tailwindcss";
9
-
10
- /* Register the fonts as the Tailwind theme defaults. The compiled stylesheet
11
- re-declares theme variables in its :root, so in consumers that import this
12
- file after their own `@import "tailwindcss"` these values win the cascade
13
- for font-sans/font-mono utilities AND the body rule below. */
14
- @theme {
15
- --font-sans: 'Fira Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
16
- --font-mono: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
17
- }
18
-
19
- /* Compile `dark:` variants against the `.dark` class that useTheme()/initTheme()
20
- toggle on <html> — NOT the OS-level prefers-color-scheme media query
21
- (Tailwind v4's default). Both consumers (TradeAutomation, WireMate) switch
22
- themes with the class toggle, so media-gated dark rules leak the dark skin
23
- into the light theme for users whose OS prefers dark.
24
- Use a specificity-bearing selector (:is, not :where) so dark: utilities win
25
- over plain base utilities like bg-slate-50 on a cascade tie. */
26
- @custom-variant dark (&:is(.dark, .dark *));
27
-
28
- /* Apply the brand font app-wide. Plain body rule (not preflight-dependent) so
29
- it also styles consumers whose own Tailwind preflight came earlier. */
30
- body {
31
- font-family: var(--font-sans);
32
- }
1
+ /* Brand typography, shipped by the library so every consumer renders the same:
2
+ Fira Sans for UI text, Fira Code for numerals/data. External @import (kept
3
+ first — CSS ignores @import after any other rule); consumers should add
4
+ <link rel="preconnect"> hints for fonts.googleapis.com / fonts.gstatic.com
5
+ in their index.html for faster first paint. */
6
+ @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');
7
+
8
+ @import "tailwindcss";
9
+
10
+ /* Register the fonts as the Tailwind theme defaults. The compiled stylesheet
11
+ re-declares theme variables in its :root, so in consumers that import this
12
+ file after their own `@import "tailwindcss"` these values win the cascade
13
+ for font-sans/font-mono utilities AND the body rule below. */
14
+ @theme {
15
+ --font-sans: 'Fira Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
16
+ --font-mono: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
17
+ }
18
+
19
+ /* Compile `dark:` variants against the `.dark` class that useTheme()/initTheme()
20
+ toggle on <html> — NOT the OS-level prefers-color-scheme media query
21
+ (Tailwind v4's default). Both consumers (TradeAutomation, WireMate) switch
22
+ themes with the class toggle, so media-gated dark rules leak the dark skin
23
+ into the light theme for users whose OS prefers dark.
24
+ Use a specificity-bearing selector (:is, not :where) so dark: utilities win
25
+ over plain base utilities like bg-slate-50 on a cascade tie. */
26
+ @custom-variant dark (&:is(.dark, .dark *));
27
+
28
+ /* Apply the brand font app-wide. Plain body rule (not preflight-dependent) so
29
+ it also styles consumers whose own Tailwind preflight came earlier. */
30
+ body {
31
+ font-family: var(--font-sans);
32
+ }
@@ -1,7 +1,7 @@
1
- /** One bar of a BaseBarDistribution chart. */
2
- export interface DistributionBar {
3
- /** Value rendered under the bar (already formatted for display). */
4
- label: string
5
- /** Occurrences of this value — drives the bar height. */
6
- count: number
7
- }
1
+ /** One bar of a BaseBarDistribution chart. */
2
+ export interface DistributionBar {
3
+ /** Value rendered under the bar (already formatted for display). */
4
+ label: string
5
+ /** Occurrences of this value — drives the bar height. */
6
+ count: number
7
+ }
@@ -1,14 +1,14 @@
1
- /**
2
- * One clickable pill in a BasePillPickerModal.
3
- *
4
- * `id` must be unique (it keys the pill and identifies the pick),
5
- * `label` is what the pill shows and what the free-text filter matches,
6
- * `group` assigns the pill to one of the modal's segmented-filter groups,
7
- * `title` becomes the pill's tooltip.
8
- */
9
- export interface PillPickerItem {
10
- id: string
11
- label: string
12
- group?: string
13
- title?: string
14
- }
1
+ /**
2
+ * One clickable pill in a BasePillPickerModal.
3
+ *
4
+ * `id` must be unique (it keys the pill and identifies the pick),
5
+ * `label` is what the pill shows and what the free-text filter matches,
6
+ * `group` assigns the pill to one of the modal's segmented-filter groups,
7
+ * `title` becomes the pill's tooltip.
8
+ */
9
+ export interface PillPickerItem {
10
+ id: string
11
+ label: string
12
+ group?: string
13
+ title?: string
14
+ }
@@ -1,30 +1,30 @@
1
- /** Which input a BaseSpecFields entry renders. */
2
- export type SpecFieldType = 'decimal' | 'integer' | 'boolean' | 'select'
3
-
4
- /**
5
- * One field of a spec-driven form: the field's key in the value map, its
6
- * label, which input to render, and optional validation/rendering hints.
7
- * Members are loose (`| null` allowed) so backend-described catalogues can be
8
- * passed straight through without mapping.
9
- */
10
- export interface SpecField {
11
- key: string
12
- label: string
13
- type: SpecFieldType
14
- /**
15
- * Default value the form seeds the field with. `null` marks the field as
16
- * OPTIONAL for `firstInvalidNumericSpec` (blank = "knob disabled").
17
- */
18
- default?: SpecFieldValue | null
19
- /** Choices for `type: 'select'`. */
20
- options?: string[] | null
21
- /** Step for numeric inputs; defaults to 1 (integer) / 0.01 (decimal). */
22
- step?: number | null
23
- /** Minimum for numeric inputs. */
24
- min?: number | null
25
- /** Help text rendered under the field. */
26
- help?: string | null
27
- }
28
-
29
- /** A field's current value in the owner's form state. */
30
- export type SpecFieldValue = number | boolean | string
1
+ /** Which input a BaseSpecFields entry renders. */
2
+ export type SpecFieldType = 'decimal' | 'integer' | 'boolean' | 'select'
3
+
4
+ /**
5
+ * One field of a spec-driven form: the field's key in the value map, its
6
+ * label, which input to render, and optional validation/rendering hints.
7
+ * Members are loose (`| null` allowed) so backend-described catalogues can be
8
+ * passed straight through without mapping.
9
+ */
10
+ export interface SpecField {
11
+ key: string
12
+ label: string
13
+ type: SpecFieldType
14
+ /**
15
+ * Default value the form seeds the field with. `null` marks the field as
16
+ * OPTIONAL for `firstInvalidNumericSpec` (blank = "knob disabled").
17
+ */
18
+ default?: SpecFieldValue | null
19
+ /** Choices for `type: 'select'`. */
20
+ options?: string[] | null
21
+ /** Step for numeric inputs; defaults to 1 (integer) / 0.01 (decimal). */
22
+ step?: number | null
23
+ /** Minimum for numeric inputs. */
24
+ min?: number | null
25
+ /** Help text rendered under the field. */
26
+ help?: string | null
27
+ }
28
+
29
+ /** A field's current value in the owner's form state. */
30
+ export type SpecFieldValue = number | boolean | string
@@ -1,6 +1,6 @@
1
- export interface StatBreakdownItem {
2
- /** Row label rendered on the left (e.g. a venue or category name). */
3
- label: string
4
- /** Numeric value; null/undefined renders as an em-dash rather than 0. */
5
- value: number | null | undefined
6
- }
1
+ export interface StatBreakdownItem {
2
+ /** Row label rendered on the left (e.g. a venue or category name). */
3
+ label: string
4
+ /** Numeric value; null/undefined renders as an em-dash rather than 0. */
5
+ value: number | null | undefined
6
+ }