@cloudron/pankow 3.2.3 → 3.2.4
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/components/CircleChart.vue +40 -0
- package/components/TableView.vue +5 -1
- package/package.json +2 -2
- package/utils.js +17 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
|
|
3
|
+
import { computed } from 'vue';
|
|
4
|
+
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
values: Array,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
// const normalizedValue = computed(() => {
|
|
10
|
+
// if (props.value < 0) return 0;
|
|
11
|
+
// if (props.value > 100) return 100;
|
|
12
|
+
// return props.value;
|
|
13
|
+
// });
|
|
14
|
+
|
|
15
|
+
// we want 100 to be the circumverence so we can neatly use percentage: radius = 100 / ( 3,14159 * 2 ) = 15,9155
|
|
16
|
+
const radius = 15.9155;
|
|
17
|
+
const stroke = 10;
|
|
18
|
+
|
|
19
|
+
function calculateViewbox() {
|
|
20
|
+
return `0 0 ${radius*2+stroke} ${radius*2+stroke}`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function calculateArcPath() {
|
|
24
|
+
return `M${radius+stroke/2} ${stroke/2} a ${radius} ${radius} 0 0 1 0 ${radius*2} a ${radius} ${radius} 0 0 1 0 -${radius*2}`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<div class="pankow-circle-chart">
|
|
31
|
+
<svg :viewBox="calculateViewbox()" xmlns="http://www.w3.org/2000/svg">
|
|
32
|
+
<path :d="calculateArcPath()" fill="none" stroke="red" :stroke-width="stroke" stroke-dasharray="75, 100" @click.stop="onClick('red')" />
|
|
33
|
+
<path :d="calculateArcPath()" fill="none" stroke="green" :stroke-width="stroke" stroke-dasharray="30, 100" @click.stop="onClick('green') "/>
|
|
34
|
+
</svg>
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<style>
|
|
39
|
+
|
|
40
|
+
</style>
|
package/components/TableView.vue
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<tr v-if="busy"><td :colspan="Object.keys(columns).length" style="text-align: center; padding: 20px;"><ProgressBar mode="indeterminate" :show-label="false" :slim="true"/></td></tr>
|
|
16
16
|
<tr v-else-if="!busy && sortedItems.length === 0"><td :colspan="Object.keys(columns).length" class="pankow-table-placeholder">{{ placeholder }}</td></tr>
|
|
17
17
|
<tr v-else class="pankow-table-row" :class="{ 'pankow-table-row-with-hover': hover }" v-for="item in sortedItems" @click="onRowClick(item)">
|
|
18
|
-
<td class="pankow-table-cell" v-for="column in Object.keys(columns)" :style="{ width: typeof columns[column].width === 'string' ? columns[column].width : 'auto' }" :class="{ 'pankow-table-cell-hide-mobile': columns[column].hideMobile }">
|
|
18
|
+
<td class="pankow-table-cell" v-for="column in Object.keys(columns)" :style="{ width: typeof columns[column].width === 'string' ? columns[column].width : 'auto' }" :class="{ 'pankow-table-cell-hide-mobile': columns[column].hideMobile, 'pankow-table-cell-nowrap': columns[column].nowrap }">
|
|
19
19
|
<slot :name="column" v-if="$slots[column]" v-bind="item"/>
|
|
20
20
|
<span v-if="!$slots[column]">{{ (column in item) ? (item[column].label || item[column]) : `TableView Error: item has no property '${column}' nor a template with that name` }}</span>
|
|
21
21
|
</td>
|
|
@@ -178,6 +178,10 @@ export default {
|
|
|
178
178
|
height: 50px;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
.pankow-table-cell-nowrap {
|
|
182
|
+
white-space: nowrap;
|
|
183
|
+
}
|
|
184
|
+
|
|
181
185
|
@media (max-width: 576px) {
|
|
182
186
|
.pankow-table-cell-hide-mobile {
|
|
183
187
|
display: none;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudron/pankow",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.4",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"scripts": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@vitejs/plugin-vue": "^6.0.0",
|
|
22
|
-
"vite": "^7.0.
|
|
22
|
+
"vite": "^7.0.5",
|
|
23
23
|
"vue": "^3.5.17"
|
|
24
24
|
}
|
|
25
25
|
}
|
package/utils.js
CHANGED
|
@@ -103,6 +103,21 @@ function prettyDate(value) {
|
|
|
103
103
|
return fromNow(date);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
function prettyShortDate(value) {
|
|
107
|
+
if (!value) return 'unknown';
|
|
108
|
+
|
|
109
|
+
const date = new Date(value);
|
|
110
|
+
if (isNaN(date.getTime())) return 'unknown';
|
|
111
|
+
|
|
112
|
+
const formatter = new Intl.DateTimeFormat(undefined, {
|
|
113
|
+
timeStyle: 'medium'
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const formattedDate = formatter.format(date);
|
|
117
|
+
|
|
118
|
+
return formattedDate;
|
|
119
|
+
}
|
|
120
|
+
|
|
106
121
|
function prettyLongDate(value) {
|
|
107
122
|
if (!value) return 'unknown';
|
|
108
123
|
|
|
@@ -376,6 +391,7 @@ export {
|
|
|
376
391
|
prettyBinarySize,
|
|
377
392
|
prettyDecimalSize,
|
|
378
393
|
prettyDate,
|
|
394
|
+
prettyShortDate,
|
|
379
395
|
prettyLongDate,
|
|
380
396
|
prettyFileSize,
|
|
381
397
|
prettyEmailAddresses,
|
|
@@ -403,6 +419,7 @@ export default {
|
|
|
403
419
|
prettyBinarySize,
|
|
404
420
|
prettyDecimalSize,
|
|
405
421
|
prettyDate,
|
|
422
|
+
prettyShortDate,
|
|
406
423
|
prettyLongDate,
|
|
407
424
|
prettyFileSize,
|
|
408
425
|
prettyEmailAddresses,
|