@cratis/scene.blueprint.default 4.31.0 → 4.33.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.
- package/ComponentName.ts +24 -0
- package/defaultBlueprint.ts +2 -1
- package/defaultBlueprintComponentMetadata.ts +2 -0
- package/defaultBlueprintComponents.ts +9 -0
- package/dist/cjs/ComponentName.js +8 -0
- package/dist/cjs/ComponentName.js.map +1 -1
- package/dist/cjs/defaultBlueprint.js +9 -5
- package/dist/cjs/defaultBlueprint.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponentMetadata.js +8 -0
- package/dist/cjs/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponents.js +21 -1
- package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
- package/dist/cjs/foundation/ActionButton.js +33 -0
- package/dist/cjs/foundation/ActionButton.js.map +1 -0
- package/dist/cjs/foundation/ChartWrapper.js +520 -0
- package/dist/cjs/foundation/ChartWrapper.js.map +1 -0
- package/dist/cjs/foundation/ColumnChooser.js +156 -0
- package/dist/cjs/foundation/ColumnChooser.js.map +1 -0
- package/dist/cjs/foundation/ComponentState.js +42 -0
- package/dist/cjs/foundation/ComponentState.js.map +1 -0
- package/dist/cjs/foundation/EmptyState.js +31 -0
- package/dist/cjs/foundation/EmptyState.js.map +1 -0
- package/dist/cjs/foundation/FilterBuilder.js +307 -0
- package/dist/cjs/foundation/FilterBuilder.js.map +1 -0
- package/dist/cjs/foundation/FoundationIcon.js +58 -0
- package/dist/cjs/foundation/FoundationIcon.js.map +1 -0
- package/dist/cjs/foundation/FoundationStates.js +62 -0
- package/dist/cjs/foundation/FoundationStates.js.map +1 -0
- package/dist/cjs/foundation/PermissionRule.js +22 -0
- package/dist/cjs/foundation/PermissionRule.js.map +1 -0
- package/dist/cjs/foundation/SavedViewsMenu.js +199 -0
- package/dist/cjs/foundation/SavedViewsMenu.js.map +1 -0
- package/dist/cjs/foundation/StatCard.js +61 -0
- package/dist/cjs/foundation/StatCard.js.map +1 -0
- package/dist/cjs/foundation/StateFrame.js +200 -0
- package/dist/cjs/foundation/StateFrame.js.map +1 -0
- package/dist/cjs/foundation/StatusChip.js +64 -0
- package/dist/cjs/foundation/StatusChip.js.map +1 -0
- package/dist/cjs/foundation/TrendChip.js +93 -0
- package/dist/cjs/foundation/TrendChip.js.map +1 -0
- package/dist/cjs/foundation/chartGeometry.js +101 -0
- package/dist/cjs/foundation/chartGeometry.js.map +1 -0
- package/dist/cjs/foundation/columnModel.js +43 -0
- package/dist/cjs/foundation/columnModel.js.map +1 -0
- package/dist/cjs/foundation/filterModel.js +123 -0
- package/dist/cjs/foundation/filterModel.js.map +1 -0
- package/dist/cjs/foundation/formatting.js +85 -0
- package/dist/cjs/foundation/formatting.js.map +1 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js +69 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -0
- package/dist/cjs/foundation/foundationDescriptors.js +385 -0
- package/dist/cjs/foundation/foundationDescriptors.js.map +1 -0
- package/dist/cjs/foundation/foundationSamples.js +201 -0
- package/dist/cjs/foundation/foundationSamples.js.map +1 -0
- package/dist/cjs/foundation/foundationStrings.js +130 -0
- package/dist/cjs/foundation/foundationStrings.js.map +1 -0
- package/dist/cjs/foundation/useElementWidth.js +31 -0
- package/dist/cjs/foundation/useElementWidth.js.map +1 -0
- package/dist/cjs/foundation/viewModel.js +24 -0
- package/dist/cjs/foundation/viewModel.js.map +1 -0
- package/dist/cjs/index.js +90 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/themes/dark.js +9 -1
- package/dist/cjs/themes/dark.js.map +1 -1
- package/dist/cjs/themes/light.js +10 -2
- package/dist/cjs/themes/light.js.map +1 -1
- package/dist/esm/ComponentName.d.ts +9 -1
- package/dist/esm/ComponentName.d.ts.map +1 -1
- package/dist/esm/ComponentName.js +8 -0
- package/dist/esm/ComponentName.js.map +1 -1
- package/dist/esm/defaultBlueprint.d.ts.map +1 -1
- package/dist/esm/defaultBlueprint.js +9 -5
- package/dist/esm/defaultBlueprint.js.map +1 -1
- package/dist/esm/defaultBlueprintComponentMetadata.d.ts.map +1 -1
- package/dist/esm/defaultBlueprintComponentMetadata.js +8 -0
- package/dist/esm/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
- package/dist/esm/defaultBlueprintComponents.js +21 -1
- package/dist/esm/defaultBlueprintComponents.js.map +1 -1
- package/dist/esm/foundation/ActionButton.d.ts +13 -0
- package/dist/esm/foundation/ActionButton.d.ts.map +1 -0
- package/dist/esm/foundation/ActionButton.js +31 -0
- package/dist/esm/foundation/ActionButton.js.map +1 -0
- package/dist/esm/foundation/ChartWrapper.d.ts +5 -0
- package/dist/esm/foundation/ChartWrapper.d.ts.map +1 -0
- package/dist/esm/foundation/ChartWrapper.js +517 -0
- package/dist/esm/foundation/ChartWrapper.js.map +1 -0
- package/dist/esm/foundation/ColumnChooser.d.ts +3 -0
- package/dist/esm/foundation/ColumnChooser.d.ts.map +1 -0
- package/dist/esm/foundation/ColumnChooser.js +154 -0
- package/dist/esm/foundation/ColumnChooser.js.map +1 -0
- package/dist/esm/foundation/ComponentState.d.ts +12 -0
- package/dist/esm/foundation/ComponentState.d.ts.map +1 -0
- package/dist/esm/foundation/ComponentState.js +38 -0
- package/dist/esm/foundation/ComponentState.js.map +1 -0
- package/dist/esm/foundation/EmptyState.d.ts +3 -0
- package/dist/esm/foundation/EmptyState.d.ts.map +1 -0
- package/dist/esm/foundation/EmptyState.js +29 -0
- package/dist/esm/foundation/EmptyState.js.map +1 -0
- package/dist/esm/foundation/FilterBuilder.d.ts +3 -0
- package/dist/esm/foundation/FilterBuilder.d.ts.map +1 -0
- package/dist/esm/foundation/FilterBuilder.js +305 -0
- package/dist/esm/foundation/FilterBuilder.js.map +1 -0
- package/dist/esm/foundation/Foundation.stories.d.ts +37 -0
- package/dist/esm/foundation/Foundation.stories.d.ts.map +1 -0
- package/dist/esm/foundation/Foundation.stories.js +34 -0
- package/dist/esm/foundation/Foundation.stories.js.map +1 -0
- package/dist/esm/foundation/FoundationIcon.d.ts +7 -0
- package/dist/esm/foundation/FoundationIcon.d.ts.map +1 -0
- package/dist/esm/foundation/FoundationIcon.js +55 -0
- package/dist/esm/foundation/FoundationIcon.js.map +1 -0
- package/dist/esm/foundation/FoundationStates.d.ts +8 -0
- package/dist/esm/foundation/FoundationStates.d.ts.map +1 -0
- package/dist/esm/foundation/FoundationStates.js +60 -0
- package/dist/esm/foundation/FoundationStates.js.map +1 -0
- package/dist/esm/foundation/PermissionRule.d.ts +8 -0
- package/dist/esm/foundation/PermissionRule.d.ts.map +1 -0
- package/dist/esm/foundation/PermissionRule.js +19 -0
- package/dist/esm/foundation/PermissionRule.js.map +1 -0
- package/dist/esm/foundation/SavedViewsMenu.d.ts +4 -0
- package/dist/esm/foundation/SavedViewsMenu.d.ts.map +1 -0
- package/dist/esm/foundation/SavedViewsMenu.js +196 -0
- package/dist/esm/foundation/SavedViewsMenu.js.map +1 -0
- package/dist/esm/foundation/StatCard.d.ts +3 -0
- package/dist/esm/foundation/StatCard.d.ts.map +1 -0
- package/dist/esm/foundation/StatCard.js +59 -0
- package/dist/esm/foundation/StatCard.js.map +1 -0
- package/dist/esm/foundation/StateFrame.d.ts +15 -0
- package/dist/esm/foundation/StateFrame.d.ts.map +1 -0
- package/dist/esm/foundation/StateFrame.js +197 -0
- package/dist/esm/foundation/StateFrame.js.map +1 -0
- package/dist/esm/foundation/StatusChip.d.ts +13 -0
- package/dist/esm/foundation/StatusChip.d.ts.map +1 -0
- package/dist/esm/foundation/StatusChip.js +59 -0
- package/dist/esm/foundation/StatusChip.js.map +1 -0
- package/dist/esm/foundation/TrendChip.d.ts +18 -0
- package/dist/esm/foundation/TrendChip.d.ts.map +1 -0
- package/dist/esm/foundation/TrendChip.js +88 -0
- package/dist/esm/foundation/TrendChip.js.map +1 -0
- package/dist/esm/foundation/chartGeometry.d.ts +34 -0
- package/dist/esm/foundation/chartGeometry.d.ts.map +1 -0
- package/dist/esm/foundation/chartGeometry.js +93 -0
- package/dist/esm/foundation/chartGeometry.js.map +1 -0
- package/dist/esm/foundation/columnModel.d.ts +11 -0
- package/dist/esm/foundation/columnModel.d.ts.map +1 -0
- package/dist/esm/foundation/columnModel.js +38 -0
- package/dist/esm/foundation/columnModel.js.map +1 -0
- package/dist/esm/foundation/filterModel.d.ts +33 -0
- package/dist/esm/foundation/filterModel.d.ts.map +1 -0
- package/dist/esm/foundation/filterModel.js +112 -0
- package/dist/esm/foundation/filterModel.js.map +1 -0
- package/dist/esm/foundation/formatting.d.ts +13 -0
- package/dist/esm/foundation/formatting.d.ts.map +1 -0
- package/dist/esm/foundation/formatting.js +78 -0
- package/dist/esm/foundation/formatting.js.map +1 -0
- package/dist/esm/foundation/foundationComponentMetadata.d.ts +3 -0
- package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -0
- package/dist/esm/foundation/foundationComponentMetadata.js +67 -0
- package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -0
- package/dist/esm/foundation/foundationDescriptors.d.ts +6 -0
- package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -0
- package/dist/esm/foundation/foundationDescriptors.js +380 -0
- package/dist/esm/foundation/foundationDescriptors.js.map +1 -0
- package/dist/esm/foundation/foundationSamples.d.ts +10 -0
- package/dist/esm/foundation/foundationSamples.d.ts.map +1 -0
- package/dist/esm/foundation/foundationSamples.js +198 -0
- package/dist/esm/foundation/foundationSamples.js.map +1 -0
- package/dist/esm/foundation/foundationStrings.d.ts +103 -0
- package/dist/esm/foundation/foundationStrings.d.ts.map +1 -0
- package/dist/esm/foundation/foundationStrings.js +126 -0
- package/dist/esm/foundation/foundationStrings.js.map +1 -0
- package/dist/esm/foundation/index.d.ts +25 -0
- package/dist/esm/foundation/index.d.ts.map +1 -0
- package/dist/esm/foundation/index.js +25 -0
- package/dist/esm/foundation/index.js.map +1 -0
- package/dist/esm/foundation/useElementWidth.d.ts +3 -0
- package/dist/esm/foundation/useElementWidth.d.ts.map +1 -0
- package/dist/esm/foundation/useElementWidth.js +29 -0
- package/dist/esm/foundation/useElementWidth.js.map +1 -0
- package/dist/esm/foundation/viewModel.d.ts +7 -0
- package/dist/esm/foundation/viewModel.d.ts.map +1 -0
- package/dist/esm/foundation/viewModel.js +22 -0
- package/dist/esm/foundation/viewModel.js.map +1 -0
- package/dist/esm/gallery/widgets.js +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +24 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/themes/dark.d.ts.map +1 -1
- package/dist/esm/themes/dark.js +9 -1
- package/dist/esm/themes/dark.js.map +1 -1
- package/dist/esm/themes/light.d.ts.map +1 -1
- package/dist/esm/themes/light.js +10 -2
- package/dist/esm/themes/light.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/foundation/ActionButton.tsx +39 -0
- package/foundation/ChartWrapper.tsx +252 -0
- package/foundation/ColumnChooser.tsx +73 -0
- package/foundation/ComponentState.ts +53 -0
- package/foundation/EmptyState.tsx +22 -0
- package/foundation/FilterBuilder.tsx +144 -0
- package/foundation/Foundation.stories.tsx +46 -0
- package/foundation/FoundationIcon.tsx +49 -0
- package/foundation/FoundationStates.tsx +46 -0
- package/foundation/PermissionRule.ts +26 -0
- package/foundation/SavedViewsMenu.tsx +94 -0
- package/foundation/StatCard.tsx +44 -0
- package/foundation/StateFrame.tsx +126 -0
- package/foundation/StatusChip.tsx +51 -0
- package/foundation/TrendChip.tsx +78 -0
- package/foundation/chartGeometry.ts +108 -0
- package/foundation/columnModel.ts +39 -0
- package/foundation/filterModel.ts +111 -0
- package/foundation/formatting.ts +69 -0
- package/foundation/foundationComponentMetadata.ts +21 -0
- package/foundation/foundationDescriptors.ts +204 -0
- package/foundation/foundationSamples.ts +63 -0
- package/foundation/foundationStrings.ts +137 -0
- package/foundation/index.ts +27 -0
- package/foundation/useElementWidth.ts +31 -0
- package/foundation/viewModel.ts +21 -0
- package/index.ts +1 -0
- package/package.json +9 -8
- package/shell/layout.css +526 -0
- package/themes/dark.ts +8 -0
- package/themes/light.ts +9 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/** What a filterable field holds, which decides the operators offered for it. */ var FilterFieldType = /*#__PURE__*/ function(FilterFieldType) {
|
|
6
|
+
FilterFieldType["Text"] = "text";
|
|
7
|
+
FilterFieldType["Number"] = "number";
|
|
8
|
+
FilterFieldType["Date"] = "date";
|
|
9
|
+
FilterFieldType["Select"] = "select";
|
|
10
|
+
FilterFieldType["Boolean"] = "boolean";
|
|
11
|
+
return FilterFieldType;
|
|
12
|
+
}({});
|
|
13
|
+
/** The deepest a group may nest; deeper filters are unreadable, and a runaway value is cut rather than rendered forever. */ const maximumFilterDepth = 3;
|
|
14
|
+
/** An empty group. */ const emptyFilter = ()=>({
|
|
15
|
+
operator: 'and',
|
|
16
|
+
conditions: [],
|
|
17
|
+
groups: []
|
|
18
|
+
});
|
|
19
|
+
/** The operators of each field type, in the order they are offered; the first is the default. */ const filterOperators = {
|
|
20
|
+
["text"]: [
|
|
21
|
+
'contains',
|
|
22
|
+
'equals',
|
|
23
|
+
'notEquals',
|
|
24
|
+
'startsWith',
|
|
25
|
+
'isEmpty'
|
|
26
|
+
],
|
|
27
|
+
["number"]: [
|
|
28
|
+
'equals',
|
|
29
|
+
'notEquals',
|
|
30
|
+
'greater',
|
|
31
|
+
'greaterOrEqual',
|
|
32
|
+
'less',
|
|
33
|
+
'lessOrEqual'
|
|
34
|
+
],
|
|
35
|
+
["date"]: [
|
|
36
|
+
'on',
|
|
37
|
+
'before',
|
|
38
|
+
'after'
|
|
39
|
+
],
|
|
40
|
+
["select"]: [
|
|
41
|
+
'is',
|
|
42
|
+
'isNot'
|
|
43
|
+
],
|
|
44
|
+
["boolean"]: [
|
|
45
|
+
'true',
|
|
46
|
+
'false'
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
/** The operators that need no value to compare with. */ const valuelessOperators = [
|
|
50
|
+
'isEmpty',
|
|
51
|
+
'true',
|
|
52
|
+
'false'
|
|
53
|
+
];
|
|
54
|
+
/** Reads fields out of a property value, dropping entries without a name, and defaulting what is unknown to text. */ function readFilterFields(value) {
|
|
55
|
+
if (!Array.isArray(value)) return [];
|
|
56
|
+
return value.flatMap((entry)=>{
|
|
57
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];
|
|
58
|
+
const { name, label, type, options } = entry;
|
|
59
|
+
if (typeof name !== 'string' || name.length === 0) return [];
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
name,
|
|
63
|
+
label: typeof label === 'string' && label.length > 0 ? label : name,
|
|
64
|
+
type: Object.values(FilterFieldType).includes(type) ? type : "text",
|
|
65
|
+
options: Array.isArray(options) ? options.filter((option)=>typeof option === 'string') : []
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** Reads a filter out of a property value, keeping the conditions on known fields with operators their type offers. */ function normalizeFilter(value, fields, depth = 1) {
|
|
71
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return emptyFilter();
|
|
72
|
+
const { operator, conditions, groups } = value;
|
|
73
|
+
return {
|
|
74
|
+
operator: operator === 'or' ? 'or' : 'and',
|
|
75
|
+
conditions: Array.isArray(conditions) ? conditions.flatMap((entry)=>{
|
|
76
|
+
if (typeof entry !== 'object' || entry === null) return [];
|
|
77
|
+
const condition = entry;
|
|
78
|
+
const field = fields.find((candidate)=>candidate.name === condition.field);
|
|
79
|
+
if (!field) return [];
|
|
80
|
+
const operators = filterOperators[field.type];
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
field: field.name,
|
|
84
|
+
operator: typeof condition.operator === 'string' && operators.includes(condition.operator) ? condition.operator : operators[0],
|
|
85
|
+
value: typeof condition.value === 'string' ? condition.value : typeof condition.value === 'number' ? String(condition.value) : ''
|
|
86
|
+
}
|
|
87
|
+
];
|
|
88
|
+
}) : [],
|
|
89
|
+
groups: depth < maximumFilterDepth && Array.isArray(groups) ? groups.map((group)=>normalizeFilter(group, fields, depth + 1)) : []
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** How many conditions are in force: a condition that needs a value and has none is not filtering anything. */ function countActiveConditions(group) {
|
|
93
|
+
const own = group.conditions.filter((condition)=>valuelessOperators.includes(condition.operator) || condition.value.trim().length > 0).length;
|
|
94
|
+
return own + group.groups.reduce((sum, nested)=>sum + countActiveConditions(nested), 0);
|
|
95
|
+
}
|
|
96
|
+
/** Applies a change to the group at a path of nested group indexes, leaving the rest as it was. */ function updateGroupAt(root, path, change) {
|
|
97
|
+
if (path.length === 0) return change(root);
|
|
98
|
+
const [index, ...rest] = path;
|
|
99
|
+
return {
|
|
100
|
+
...root,
|
|
101
|
+
groups: root.groups.map((group, position)=>position === index ? updateGroupAt(group, rest, change) : group)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** A new condition on the first field, with that field's default operator. */ function newCondition(fields) {
|
|
105
|
+
const field = fields[0];
|
|
106
|
+
return {
|
|
107
|
+
field: field?.name ?? '',
|
|
108
|
+
operator: field ? filterOperators[field.type][0] : 'contains',
|
|
109
|
+
value: ''
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
exports.FilterFieldType = FilterFieldType;
|
|
114
|
+
exports.countActiveConditions = countActiveConditions;
|
|
115
|
+
exports.emptyFilter = emptyFilter;
|
|
116
|
+
exports.filterOperators = filterOperators;
|
|
117
|
+
exports.maximumFilterDepth = maximumFilterDepth;
|
|
118
|
+
exports.newCondition = newCondition;
|
|
119
|
+
exports.normalizeFilter = normalizeFilter;
|
|
120
|
+
exports.readFilterFields = readFilterFields;
|
|
121
|
+
exports.updateGroupAt = updateGroupAt;
|
|
122
|
+
exports.valuelessOperators = valuelessOperators;
|
|
123
|
+
//# sourceMappingURL=filterModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterModel.js","sources":["../../../foundation/filterModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** What a filterable field holds, which decides the operators offered for it. */\nexport enum FilterFieldType {\n Text = 'text',\n Number = 'number',\n Date = 'date',\n Select = 'select',\n Boolean = 'boolean',\n}\n\n/** A field a filter can be built on. */\nexport interface FilterField {\n name: string;\n label: string;\n type: FilterFieldType;\n options: string[];\n}\n\n/** One test of a field. */\nexport interface FilterCondition {\n field: string;\n operator: string;\n value: string;\n}\n\n/** Conditions and nested groups joined by AND or OR. */\nexport interface FilterGroup {\n operator: 'and' | 'or';\n conditions: FilterCondition[];\n groups: FilterGroup[];\n}\n\n/** The deepest a group may nest; deeper filters are unreadable, and a runaway value is cut rather than rendered forever. */\nexport const maximumFilterDepth = 3;\n\n/** An empty group. */\nexport const emptyFilter = (): FilterGroup => ({ operator: 'and', conditions: [], groups: [] });\n\n/** The operators of each field type, in the order they are offered; the first is the default. */\nexport const filterOperators: Record<FilterFieldType, string[]> = {\n [FilterFieldType.Text]: ['contains', 'equals', 'notEquals', 'startsWith', 'isEmpty'],\n [FilterFieldType.Number]: ['equals', 'notEquals', 'greater', 'greaterOrEqual', 'less', 'lessOrEqual'],\n [FilterFieldType.Date]: ['on', 'before', 'after'],\n [FilterFieldType.Select]: ['is', 'isNot'],\n [FilterFieldType.Boolean]: ['true', 'false'],\n};\n\n/** The operators that need no value to compare with. */\nexport const valuelessOperators = ['isEmpty', 'true', 'false'];\n\n/** Reads fields out of a property value, dropping entries without a name, and defaulting what is unknown to text. */\nexport function readFilterFields(value: unknown): FilterField[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry): FilterField[] => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];\n const { name, label, type, options } = entry as Record<string, unknown>;\n if (typeof name !== 'string' || name.length === 0) return [];\n return [{\n name,\n label: typeof label === 'string' && label.length > 0 ? label : name,\n type: (Object.values(FilterFieldType) as string[]).includes(type as string) ? (type as FilterFieldType) : FilterFieldType.Text,\n options: Array.isArray(options) ? options.filter((option): option is string => typeof option === 'string') : [],\n }];\n });\n}\n\n/** Reads a filter out of a property value, keeping the conditions on known fields with operators their type offers. */\nexport function normalizeFilter(value: unknown, fields: FilterField[], depth = 1): FilterGroup {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return emptyFilter();\n\n const { operator, conditions, groups } = value as Record<string, unknown>;\n return {\n operator: operator === 'or' ? 'or' : 'and',\n conditions: Array.isArray(conditions) ? conditions.flatMap((entry): FilterCondition[] => {\n if (typeof entry !== 'object' || entry === null) return [];\n const condition = entry as Record<string, unknown>;\n const field = fields.find(candidate => candidate.name === condition.field);\n if (!field) return [];\n const operators = filterOperators[field.type];\n return [{\n field: field.name,\n operator: typeof condition.operator === 'string' && operators.includes(condition.operator) ? condition.operator : operators[0],\n value: typeof condition.value === 'string' ? condition.value : typeof condition.value === 'number' ? String(condition.value) : '',\n }];\n }) : [],\n groups: depth < maximumFilterDepth && Array.isArray(groups) ? groups.map(group => normalizeFilter(group, fields, depth + 1)) : [],\n };\n}\n\n/** How many conditions are in force: a condition that needs a value and has none is not filtering anything. */\nexport function countActiveConditions(group: FilterGroup): number {\n const own = group.conditions.filter(condition => valuelessOperators.includes(condition.operator) || condition.value.trim().length > 0).length;\n return own + group.groups.reduce((sum, nested) => sum + countActiveConditions(nested), 0);\n}\n\n/** Applies a change to the group at a path of nested group indexes, leaving the rest as it was. */\nexport function updateGroupAt(root: FilterGroup, path: number[], change: (group: FilterGroup) => FilterGroup): FilterGroup {\n if (path.length === 0) return change(root);\n\n const [index, ...rest] = path;\n return { ...root, groups: root.groups.map((group, position) => (position === index ? updateGroupAt(group, rest, change) : group)) };\n}\n\n/** A new condition on the first field, with that field's default operator. */\nexport function newCondition(fields: FilterField[]): FilterCondition {\n const field = fields[0];\n return { field: field?.name ?? '', operator: field ? filterOperators[field.type][0] : 'contains', value: '' };\n}\n"],"names":["FilterFieldType","maximumFilterDepth","emptyFilter","operator","conditions","groups","filterOperators","valuelessOperators","readFilterFields","value","Array","isArray","flatMap","entry","name","label","type","options","length","Object","values","includes","filter","option","normalizeFilter","fields","depth","condition","field","find","candidate","operators","String","map","group","countActiveConditions","own","trim","reduce","sum","nested","updateGroupAt","root","path","change","index","rest","position","newCondition"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/** How a number is presented. */ var NumberFormat = /*#__PURE__*/ function(NumberFormat) {
|
|
6
|
+
NumberFormat["Number"] = "number";
|
|
7
|
+
NumberFormat["Currency"] = "currency";
|
|
8
|
+
NumberFormat["Percent"] = "percent";
|
|
9
|
+
NumberFormat["Compact"] = "compact";
|
|
10
|
+
return NumberFormat;
|
|
11
|
+
}({});
|
|
12
|
+
/**
|
|
13
|
+
* The locale a component formats dates, numbers and currency in: the element's `locale`, else the document language, else the
|
|
14
|
+
* runtime's. Formatting never goes through a fixed locale, so the same screen reads correctly in every one.
|
|
15
|
+
*/ function readLocale(element) {
|
|
16
|
+
const supplied = element.properties.locale;
|
|
17
|
+
if (typeof supplied === 'string' && supplied.length > 0) return supplied;
|
|
18
|
+
if (typeof document !== 'undefined' && document.documentElement.lang) return document.documentElement.lang;
|
|
19
|
+
return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en';
|
|
20
|
+
}
|
|
21
|
+
/** Whether the locale reads right to left, so a component can mirror what direction-sensitive CSS cannot. */ function isRightToLeft(locale) {
|
|
22
|
+
try {
|
|
23
|
+
const info = new Intl.Locale(locale);
|
|
24
|
+
const direction = info.getTextInfo?.().direction ?? info.textInfo?.direction;
|
|
25
|
+
return direction === 'rtl';
|
|
26
|
+
} catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Formats a number for a locale, as a plain number, currency, percent (the value is the percentage, 12.5 is 12.5%) or compact. */ function formatNumber(value, locale, format = "number", currency = 'USD', maximumFractionDigits) {
|
|
31
|
+
try {
|
|
32
|
+
switch(format){
|
|
33
|
+
case "currency":
|
|
34
|
+
return new Intl.NumberFormat(locale, {
|
|
35
|
+
style: 'currency',
|
|
36
|
+
currency,
|
|
37
|
+
...maximumFractionDigits === undefined ? {} : {
|
|
38
|
+
maximumFractionDigits
|
|
39
|
+
}
|
|
40
|
+
}).format(value);
|
|
41
|
+
case "percent":
|
|
42
|
+
return new Intl.NumberFormat(locale, {
|
|
43
|
+
style: 'percent',
|
|
44
|
+
maximumFractionDigits: maximumFractionDigits ?? 1
|
|
45
|
+
}).format(value / 100);
|
|
46
|
+
case "compact":
|
|
47
|
+
return new Intl.NumberFormat(locale, {
|
|
48
|
+
notation: 'compact',
|
|
49
|
+
maximumFractionDigits: maximumFractionDigits ?? 1
|
|
50
|
+
}).format(value);
|
|
51
|
+
default:
|
|
52
|
+
return new Intl.NumberFormat(locale, {
|
|
53
|
+
maximumFractionDigits: maximumFractionDigits ?? 2
|
|
54
|
+
}).format(value);
|
|
55
|
+
}
|
|
56
|
+
} catch {
|
|
57
|
+
return String(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Reads a number format name, defaulting to a plain number. */ function readNumberFormat(element, property = 'format') {
|
|
61
|
+
const value = element.properties[property];
|
|
62
|
+
return Object.values(NumberFormat).includes(value) ? value : "number";
|
|
63
|
+
}
|
|
64
|
+
/** Formats a date or an ISO 8601 date-time for a locale; a value that is not a date is returned as it was written. */ function formatDate(value, locale, withTime = false) {
|
|
65
|
+
const date = value instanceof Date ? value : typeof value === 'string' || typeof value === 'number' ? new Date(value) : undefined;
|
|
66
|
+
if (!date || Number.isNaN(date.getTime())) return typeof value === 'string' ? value : '';
|
|
67
|
+
try {
|
|
68
|
+
return new Intl.DateTimeFormat(locale, withTime ? {
|
|
69
|
+
dateStyle: 'medium',
|
|
70
|
+
timeStyle: 'short'
|
|
71
|
+
} : {
|
|
72
|
+
dateStyle: 'medium'
|
|
73
|
+
}).format(date);
|
|
74
|
+
} catch {
|
|
75
|
+
return date.toISOString();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
exports.NumberFormat = NumberFormat;
|
|
80
|
+
exports.formatDate = formatDate;
|
|
81
|
+
exports.formatNumber = formatNumber;
|
|
82
|
+
exports.isRightToLeft = isRightToLeft;
|
|
83
|
+
exports.readLocale = readLocale;
|
|
84
|
+
exports.readNumberFormat = readNumberFormat;
|
|
85
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sources":["../../../foundation/formatting.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ExternalComponent } from '@cratis/scene.model';\n\n/** How a number is presented. */\nexport enum NumberFormat {\n Number = 'number',\n Currency = 'currency',\n Percent = 'percent',\n Compact = 'compact',\n}\n\n/**\n * The locale a component formats dates, numbers and currency in: the element's `locale`, else the document language, else the\n * runtime's. Formatting never goes through a fixed locale, so the same screen reads correctly in every one.\n */\nexport function readLocale(element: ExternalComponent): string {\n const supplied = element.properties.locale;\n if (typeof supplied === 'string' && supplied.length > 0) return supplied;\n if (typeof document !== 'undefined' && document.documentElement.lang) return document.documentElement.lang;\n return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en';\n}\n\n/** Whether the locale reads right to left, so a component can mirror what direction-sensitive CSS cannot. */\nexport function isRightToLeft(locale: string): boolean {\n try {\n const info = new Intl.Locale(locale) as Intl.Locale & { getTextInfo?: () => { direction: string }; textInfo?: { direction: string } };\n const direction = info.getTextInfo?.().direction ?? info.textInfo?.direction;\n return direction === 'rtl';\n } catch {\n return false;\n }\n}\n\n/** Formats a number for a locale, as a plain number, currency, percent (the value is the percentage, 12.5 is 12.5%) or compact. */\nexport function formatNumber(value: number, locale: string, format: NumberFormat = NumberFormat.Number, currency = 'USD', maximumFractionDigits?: number): string {\n try {\n switch (format) {\n case NumberFormat.Currency:\n return new Intl.NumberFormat(locale, { style: 'currency', currency, ...(maximumFractionDigits === undefined ? {} : { maximumFractionDigits }) }).format(value);\n case NumberFormat.Percent:\n return new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: maximumFractionDigits ?? 1 }).format(value / 100);\n case NumberFormat.Compact:\n return new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: maximumFractionDigits ?? 1 }).format(value);\n default:\n return new Intl.NumberFormat(locale, { maximumFractionDigits: maximumFractionDigits ?? 2 }).format(value);\n }\n } catch {\n return String(value);\n }\n}\n\n/** Reads a number format name, defaulting to a plain number. */\nexport function readNumberFormat(element: ExternalComponent, property = 'format'): NumberFormat {\n const value = element.properties[property];\n return (Object.values(NumberFormat) as string[]).includes(value as string) ? (value as NumberFormat) : NumberFormat.Number;\n}\n\n/** Formats a date or an ISO 8601 date-time for a locale; a value that is not a date is returned as it was written. */\nexport function formatDate(value: unknown, locale: string, withTime = false): string {\n const date = value instanceof Date ? value : typeof value === 'string' || typeof value === 'number' ? new Date(value) : undefined;\n if (!date || Number.isNaN(date.getTime())) return typeof value === 'string' ? value : '';\n try {\n return new Intl.DateTimeFormat(locale, withTime ? { dateStyle: 'medium', timeStyle: 'short' } : { dateStyle: 'medium' }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n"],"names":["NumberFormat","readLocale","element","supplied","properties","locale","length","document","documentElement","lang","navigator","language","isRightToLeft","info","Intl","Locale","direction","getTextInfo","textInfo","formatNumber","value","format","currency","maximumFractionDigits","style","undefined","notation","String","readNumberFormat","property","Object","values","includes","formatDate","withTime","date","Date","Number","isNaN","getTime","DateTimeFormat","dateStyle","timeStyle","toISOString"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var scene_model = require('@cratis/scene.model');
|
|
4
|
+
var scene_react = require('@cratis/scene.react');
|
|
5
|
+
var ComponentName = require('../ComponentName.js');
|
|
6
|
+
|
|
7
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
8
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
9
|
+
/**
|
|
10
|
+
* The category, icon, keywords and picker badge of every foundation component (CMP1), keyed by bare component name.
|
|
11
|
+
* The names are those of `ComponentName`; the metadata of the rest of the package lives in `defaultBlueprintComponentMetadata`.
|
|
12
|
+
*/ const foundationComponentMetadata = {
|
|
13
|
+
[ComponentName.ComponentName.EmptyState]: scene_react.componentMetadata('Empty state', scene_model.ComponentCategory.Feedback, 'inbox', [
|
|
14
|
+
'no data',
|
|
15
|
+
'nothing',
|
|
16
|
+
'blank slate',
|
|
17
|
+
'zero state'
|
|
18
|
+
]),
|
|
19
|
+
[ComponentName.ComponentName.StatCard]: scene_react.componentMetadata('Stat card', scene_model.ComponentCategory.DataDisplay, 'gauge', [
|
|
20
|
+
'kpi',
|
|
21
|
+
'metric',
|
|
22
|
+
'figure',
|
|
23
|
+
'number',
|
|
24
|
+
'dashboard'
|
|
25
|
+
]),
|
|
26
|
+
[ComponentName.ComponentName.TrendChip]: scene_react.componentMetadata('Trend chip', scene_model.ComponentCategory.DataDisplay, 'trending-up', [
|
|
27
|
+
'delta',
|
|
28
|
+
'change',
|
|
29
|
+
'arrow',
|
|
30
|
+
'comparison'
|
|
31
|
+
]),
|
|
32
|
+
[ComponentName.ComponentName.StatusChip]: scene_react.componentMetadata('Status chip', scene_model.ComponentCategory.DataDisplay, 'badge-check', [
|
|
33
|
+
'badge',
|
|
34
|
+
'state',
|
|
35
|
+
'tag',
|
|
36
|
+
'label'
|
|
37
|
+
]),
|
|
38
|
+
[ComponentName.ComponentName.ChartWrapper]: scene_react.componentMetadata('Chart', scene_model.ComponentCategory.DataDisplay, 'chart-line', [
|
|
39
|
+
'graph',
|
|
40
|
+
'line',
|
|
41
|
+
'bar',
|
|
42
|
+
'stacked',
|
|
43
|
+
'donut',
|
|
44
|
+
'pie',
|
|
45
|
+
'funnel',
|
|
46
|
+
'plot'
|
|
47
|
+
]),
|
|
48
|
+
[ComponentName.ComponentName.FilterBuilder]: scene_react.componentMetadata('Filter builder', scene_model.ComponentCategory.Input, 'list-filter', [
|
|
49
|
+
'filter',
|
|
50
|
+
'query',
|
|
51
|
+
'conditions',
|
|
52
|
+
'and or',
|
|
53
|
+
'search'
|
|
54
|
+
]),
|
|
55
|
+
[ComponentName.ComponentName.ColumnChooser]: scene_react.componentMetadata('Column chooser', scene_model.ComponentCategory.Actions, 'columns-3', [
|
|
56
|
+
'columns',
|
|
57
|
+
'fields',
|
|
58
|
+
'show hide',
|
|
59
|
+
'table'
|
|
60
|
+
]),
|
|
61
|
+
[ComponentName.ComponentName.SavedViewsMenu]: scene_react.componentMetadata('Saved views menu', scene_model.ComponentCategory.Actions, 'bookmark', [
|
|
62
|
+
'views',
|
|
63
|
+
'presets',
|
|
64
|
+
'saved filters'
|
|
65
|
+
])
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
exports.foundationComponentMetadata = foundationComponentMetadata;
|
|
69
|
+
//# sourceMappingURL=foundationComponentMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foundationComponentMetadata.js","sources":["../../../foundation/foundationComponentMetadata.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ComponentCategory } from '@cratis/scene.model';\nimport { ComponentMetadata, componentMetadata as m } from '@cratis/scene.react';\nimport { ComponentName } from '../ComponentName';\n\n/**\n * The category, icon, keywords and picker badge of every foundation component (CMP1), keyed by bare component name.\n * The names are those of `ComponentName`; the metadata of the rest of the package lives in `defaultBlueprintComponentMetadata`.\n */\nexport const foundationComponentMetadata: Record<string, ComponentMetadata> = {\n [ComponentName.EmptyState]: m('Empty state', ComponentCategory.Feedback, 'inbox', ['no data', 'nothing', 'blank slate', 'zero state']),\n [ComponentName.StatCard]: m('Stat card', ComponentCategory.DataDisplay, 'gauge', ['kpi', 'metric', 'figure', 'number', 'dashboard']),\n [ComponentName.TrendChip]: m('Trend chip', ComponentCategory.DataDisplay, 'trending-up', ['delta', 'change', 'arrow', 'comparison']),\n [ComponentName.StatusChip]: m('Status chip', ComponentCategory.DataDisplay, 'badge-check', ['badge', 'state', 'tag', 'label']),\n [ComponentName.ChartWrapper]: m('Chart', ComponentCategory.DataDisplay, 'chart-line', ['graph', 'line', 'bar', 'stacked', 'donut', 'pie', 'funnel', 'plot']),\n [ComponentName.FilterBuilder]: m('Filter builder', ComponentCategory.Input, 'list-filter', ['filter', 'query', 'conditions', 'and or', 'search']),\n [ComponentName.ColumnChooser]: m('Column chooser', ComponentCategory.Actions, 'columns-3', ['columns', 'fields', 'show hide', 'table']),\n [ComponentName.SavedViewsMenu]: m('Saved views menu', ComponentCategory.Actions, 'bookmark', ['views', 'presets', 'saved filters']),\n};\n"],"names":["foundationComponentMetadata","ComponentName","EmptyState","m","ComponentCategory","Feedback","StatCard","DataDisplay","TrendChip","StatusChip","ChartWrapper","FilterBuilder","Input","ColumnChooser","Actions","SavedViewsMenu"],"mappings":";;;;;;AAAA;AACA;AAMA;;;UAIaA,2BAAAA,GAAiE;IAC1E,CAACC,2BAAAA,CAAcC,UAAU,GAAGC,8BAAE,aAAA,EAAeC,6BAAAA,CAAkBC,QAAQ,EAAE,OAAA,EAAS;AAAC,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,aAAA;AAAe,QAAA;AAAa,KAAA,CAAA;IACrI,CAACJ,2BAAAA,CAAcK,QAAQ,GAAGH,8BAAE,WAAA,EAAaC,6BAAAA,CAAkBG,WAAW,EAAE,OAAA,EAAS;AAAC,QAAA,KAAA;AAAO,QAAA,QAAA;AAAU,QAAA,QAAA;AAAU,QAAA,QAAA;AAAU,QAAA;AAAY,KAAA,CAAA;IACnI,CAACN,2BAAAA,CAAcO,SAAS,GAAGL,8BAAE,YAAA,EAAcC,6BAAAA,CAAkBG,WAAW,EAAE,aAAA,EAAe;AAAC,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,OAAA;AAAS,QAAA;AAAa,KAAA,CAAA;IACnI,CAACN,2BAAAA,CAAcQ,UAAU,GAAGN,8BAAE,aAAA,EAAeC,6BAAAA,CAAkBG,WAAW,EAAE,aAAA,EAAe;AAAC,QAAA,OAAA;AAAS,QAAA,OAAA;AAAS,QAAA,KAAA;AAAO,QAAA;AAAQ,KAAA,CAAA;IAC7H,CAACN,2BAAAA,CAAcS,YAAY,GAAGP,8BAAE,OAAA,EAASC,6BAAAA,CAAkBG,WAAW,EAAE,YAAA,EAAc;AAAC,QAAA,OAAA;AAAS,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,SAAA;AAAW,QAAA,OAAA;AAAS,QAAA,KAAA;AAAO,QAAA,QAAA;AAAU,QAAA;AAAO,KAAA,CAAA;IAC3J,CAACN,2BAAAA,CAAcU,aAAa,GAAGR,8BAAE,gBAAA,EAAkBC,6BAAAA,CAAkBQ,KAAK,EAAE,aAAA,EAAe;AAAC,QAAA,QAAA;AAAU,QAAA,OAAA;AAAS,QAAA,YAAA;AAAc,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA,CAAA;IAChJ,CAACX,2BAAAA,CAAcY,aAAa,GAAGV,8BAAE,gBAAA,EAAkBC,6BAAAA,CAAkBU,OAAO,EAAE,WAAA,EAAa;AAAC,QAAA,SAAA;AAAW,QAAA,QAAA;AAAU,QAAA,WAAA;AAAa,QAAA;AAAQ,KAAA,CAAA;IACtI,CAACb,2BAAAA,CAAcc,cAAc,GAAGZ,8BAAE,kBAAA,EAAoBC,6BAAAA,CAAkBU,OAAO,EAAE,UAAA,EAAY;AAAC,QAAA,OAAA;AAAS,QAAA,SAAA;AAAW,QAAA;AAAgB,KAAA;AACtI;;"}
|