@nextcloud/vue 8.17.0 → 8.17.1

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 (73) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/Components/NcAppNavigation.cjs +1 -1
  3. package/dist/Components/NcAppNavigation.mjs +1 -1
  4. package/dist/Components/NcAppSidebar.cjs +1 -1
  5. package/dist/Components/NcAppSidebar.mjs +1 -1
  6. package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
  7. package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
  8. package/dist/Components/NcDateTime.cjs +1 -1
  9. package/dist/Components/NcDateTime.mjs +1 -1
  10. package/dist/Components/NcDateTimePicker.cjs +2 -2
  11. package/dist/Components/NcDateTimePicker.mjs +2 -2
  12. package/dist/Components/NcDateTimePickerNative.cjs +1 -1
  13. package/dist/Components/NcDateTimePickerNative.mjs +1 -1
  14. package/dist/Components/NcHeaderMenu.cjs +1 -1
  15. package/dist/Components/NcHeaderMenu.mjs +1 -1
  16. package/dist/Components/NcModal.cjs +1 -1
  17. package/dist/Components/NcModal.mjs +1 -1
  18. package/dist/Components/NcRichContenteditable.cjs +1 -1
  19. package/dist/Components/NcRichContenteditable.mjs +1 -1
  20. package/dist/Components/NcRichText.cjs +1 -1
  21. package/dist/Components/NcRichText.mjs +2 -2
  22. package/dist/Composables/useHotKey.cjs +3 -1
  23. package/dist/Composables/useHotKey.cjs.map +1 -1
  24. package/dist/Composables/useHotKey.mjs +3 -1
  25. package/dist/Composables/useHotKey.mjs.map +1 -1
  26. package/dist/assets/{NcAppNavigation-YKWEqLwF.css → NcAppNavigation-fhylfTxx.css} +15 -12
  27. package/dist/assets/{NcCheckboxRadioSwitch-DWtZ7faS.css → NcCheckboxRadioSwitch-D5gP42gi.css} +31 -31
  28. package/dist/assets/{NcDateTimePicker-C7MhJgGO.css → NcDateTimePicker-BshzbbKT.css} +7 -7
  29. package/dist/assets/{NcHeaderMenu-6C_FnkA6.css → NcHeaderMenu-DjPL7Ozo.css} +12 -13
  30. package/dist/assets/{NcRichText-BKnmtD0n.css → NcRichText-DqDAPQPD.css} +3 -3
  31. package/dist/chunks/{NcAppNavigation-DAUiOJeC.mjs → NcAppNavigation-BDbJ4m0b.mjs} +2 -2
  32. package/dist/chunks/{NcAppNavigation-DAUiOJeC.mjs.map → NcAppNavigation-BDbJ4m0b.mjs.map} +1 -1
  33. package/dist/chunks/{NcAppNavigation-BSPUmFOP.cjs → NcAppNavigation-BPcFGTv2.cjs} +2 -2
  34. package/dist/chunks/{NcAppNavigation-BSPUmFOP.cjs.map → NcAppNavigation-BPcFGTv2.cjs.map} +1 -1
  35. package/dist/chunks/{NcAppSidebar-CxX00b2d.cjs → NcAppSidebar-BUP_CGWJ.cjs} +1 -1
  36. package/dist/chunks/{NcAppSidebar-CxX00b2d.cjs.map → NcAppSidebar-BUP_CGWJ.cjs.map} +1 -1
  37. package/dist/chunks/{NcAppSidebar-CiTS4hjx.mjs → NcAppSidebar-DZb0qhUN.mjs} +1 -1
  38. package/dist/chunks/{NcAppSidebar-CiTS4hjx.mjs.map → NcAppSidebar-DZb0qhUN.mjs.map} +1 -1
  39. package/dist/chunks/{NcCheckboxRadioSwitch-DeufC6NH.cjs → NcCheckboxRadioSwitch-B5i9ebMR.cjs} +4 -4
  40. package/dist/chunks/{NcCheckboxRadioSwitch-DnnuXT1_.mjs.map → NcCheckboxRadioSwitch-B5i9ebMR.cjs.map} +1 -1
  41. package/dist/chunks/{NcCheckboxRadioSwitch-DnnuXT1_.mjs → NcCheckboxRadioSwitch-D1Iu7jy1.mjs} +4 -4
  42. package/dist/chunks/{NcCheckboxRadioSwitch-DeufC6NH.cjs.map → NcCheckboxRadioSwitch-D1Iu7jy1.mjs.map} +1 -1
  43. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_feaabebe_lang-BRgyzABt.mjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_00597cce_lang-BwT3zLFj.mjs} +1 -1
  44. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_00597cce_lang-BwT3zLFj.mjs.map +1 -0
  45. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_feaabebe_lang-jOhbAsqn.cjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_00597cce_lang-CP9n1exV.cjs} +1 -1
  46. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_00597cce_lang-CP9n1exV.cjs.map +1 -0
  47. package/dist/chunks/{NcDateTime-CFcnq5-P.mjs → NcDateTime-3T3J08Bd.mjs} +7 -7
  48. package/dist/chunks/NcDateTime-3T3J08Bd.mjs.map +1 -0
  49. package/dist/chunks/{NcDateTime-Bfv9PBx5.cjs → NcDateTime-4AuZ9Qlt.cjs} +7 -7
  50. package/dist/chunks/NcDateTime-4AuZ9Qlt.cjs.map +1 -0
  51. package/dist/chunks/{NcHeaderMenu-DGrf5SDZ.mjs → NcHeaderMenu-CeU4L29l.mjs} +2 -2
  52. package/dist/chunks/{NcHeaderMenu-DGrf5SDZ.mjs.map → NcHeaderMenu-CeU4L29l.mjs.map} +1 -1
  53. package/dist/chunks/{NcHeaderMenu-D6vHevbN.cjs → NcHeaderMenu-CwgL6yg6.cjs} +2 -2
  54. package/dist/chunks/{NcHeaderMenu-D6vHevbN.cjs.map → NcHeaderMenu-CwgL6yg6.cjs.map} +1 -1
  55. package/dist/chunks/{NcRichContenteditable-CxlVyONK.mjs → NcRichContenteditable-CZOXY-O9.mjs} +2 -2
  56. package/dist/chunks/{NcRichContenteditable-CxlVyONK.mjs.map → NcRichContenteditable-CZOXY-O9.mjs.map} +1 -1
  57. package/dist/chunks/{NcRichContenteditable-DgpXktip.cjs → NcRichContenteditable-DglXhZSr.cjs} +2 -2
  58. package/dist/chunks/{NcRichContenteditable-DgpXktip.cjs.map → NcRichContenteditable-DglXhZSr.cjs.map} +1 -1
  59. package/dist/chunks/{NcRichText-BvfYsu9z.mjs → NcRichText-BX80Ezvi.mjs} +5 -3
  60. package/dist/chunks/{NcRichText-BvfYsu9z.mjs.map → NcRichText-BX80Ezvi.mjs.map} +1 -1
  61. package/dist/chunks/{NcRichText-C90luaNZ.cjs → NcRichText-SLTQmr1-.cjs} +5 -3
  62. package/dist/chunks/{NcRichText-C90luaNZ.cjs.map → NcRichText-SLTQmr1-.cjs.map} +1 -1
  63. package/dist/chunks/{ScopeComponent-BWAf-wih.cjs → ScopeComponent-DDA-FdAa.cjs} +1 -1
  64. package/dist/chunks/{ScopeComponent-BWAf-wih.cjs.map → ScopeComponent-DDA-FdAa.cjs.map} +1 -1
  65. package/dist/chunks/{ScopeComponent-lSfP0CG7.mjs → ScopeComponent-_wrdOOmW.mjs} +1 -1
  66. package/dist/chunks/{ScopeComponent-lSfP0CG7.mjs.map → ScopeComponent-_wrdOOmW.mjs.map} +1 -1
  67. package/dist/index.cjs +8 -8
  68. package/dist/index.mjs +9 -9
  69. package/package.json +1 -1
  70. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_feaabebe_lang-BRgyzABt.mjs.map +0 -1
  71. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_feaabebe_lang-jOhbAsqn.cjs.map +0 -1
  72. package/dist/chunks/NcDateTime-Bfv9PBx5.cjs.map +0 -1
  73. package/dist/chunks/NcDateTime-CFcnq5-P.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcDateTime-CFcnq5-P.mjs","sources":["../../src/composables/useFormatDateTime.ts","../../src/components/NcDateTime/NcDateTime.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'\nimport { computed, onUnmounted, ref, onMounted, watch, unref, type Ref } from 'vue'\nimport { t } from '../l10n.js'\n\nconst FEW_SECONDS_AGO = {\n\tlong: t('a few seconds ago'),\n\tshort: t('seconds ago'), // FOR TRANSLATORS: Shorter version of 'a few seconds ago'\n\tnarrow: t('sec. ago'), // FOR TRANSLATORS: If possible in your language an even shorter version of 'a few seconds ago'\n}\n\ninterface FormatDateOptions {\n\t/**\n\t * The format used for displaying, or if relative time is used the format used for the title\n\t */\n\tformat?: Intl.DateTimeFormatOptions\n\t/**\n\t * Ignore seconds when displaying the relative time and just show `a few seconds ago`\n\t */\n\tignoreSeconds?: boolean\n\t/**\n\t * Wether to display the timestamp as time from now\n\t */\n\trelativeTime?: false | 'long' | 'short' | 'narrow'\n}\n\ntype MaybeRef<T> = T | Ref<T>\n\n/**\n * Composable for formatting time stamps using current users locale and language\n *\n * @param {Date | number | import('vue').Ref<Date> | import('vue').Ref<number>} timestamp Current timestamp\n * @param {object} opts Optional options\n * @param {Intl.DateTimeFormatOptions} opts.format The format used for displaying, or if relative time is used the format used for the title (optional)\n * @param {boolean} opts.ignoreSeconds Ignore seconds when displaying the relative time and just show `a few seconds ago`\n * @param {false | 'long' | 'short' | 'narrow'} opts.relativeTime Wether to display the timestamp as time from now (optional)\n */\nexport function useFormatDateTime(\n\ttimestamp: MaybeRef<Date|number> = Date.now(),\n\topts: MaybeRef<FormatDateOptions> = {},\n) {\n\t// Current time as Date.now is not reactive\n\tconst currentTime = ref(Date.now())\n\t// The interval ID for the window\n\tlet intervalId: number|undefined\n\n\tconst options = ref({\n\t\tformat: {\n\t\t\ttimeStyle: 'medium',\n\t\t\tdateStyle: 'short',\n\t\t} as Intl.DateTimeFormatOptions,\n\t\trelativeTime: 'long' as const,\n\t\tignoreSeconds: false,\n\t\t...unref(opts),\n\t})\n\tconst wrappedOptions = computed<Required<FormatDateOptions>>(() => ({ ...unref(opts), ...options.value }))\n\n\t/** ECMA Date object of the timestamp */\n\tconst date = computed(() => new Date(unref(timestamp)))\n\n\tconst formattedFullTime = computed<string>(() => {\n\t\tconst formatter = new Intl.DateTimeFormat(getCanonicalLocale(), wrappedOptions.value.format)\n\t\treturn formatter.format(date.value)\n\t})\n\n\t/** Time string formatted for main text */\n\tconst formattedTime = computed<string>(() => {\n\t\tif (wrappedOptions.value.relativeTime !== false) {\n\t\t\tconst formatter = new Intl.RelativeTimeFormat(getLanguage(), { numeric: 'auto', style: wrappedOptions.value.relativeTime })\n\n\t\t\tconst diff = date.value.getTime() - currentTime.value\n\t\t\tconst seconds = diff / 1000\n\t\t\tif (Math.abs(seconds) <= 90) {\n\t\t\t\tif (wrappedOptions.value.ignoreSeconds) {\n\t\t\t\t\treturn FEW_SECONDS_AGO[wrappedOptions.value.relativeTime]\n\t\t\t\t} else {\n\t\t\t\t\treturn formatter.format(Math.round(seconds), 'second')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst minutes = seconds / 60\n\t\t\tif (Math.abs(minutes) <= 90) {\n\t\t\t\treturn formatter.format(Math.round(minutes), 'minute')\n\t\t\t}\n\t\t\tconst hours = minutes / 60\n\t\t\tif (Math.abs(hours) <= 24) {\n\t\t\t\treturn formatter.format(Math.round(hours), 'hour')\n\t\t\t}\n\t\t\tconst days = hours / 24\n\t\t\tif (Math.abs(days) <= 6) {\n\t\t\t\treturn formatter.format(Math.round(days), 'day')\n\t\t\t}\n\t\t\tconst weeks = days / 7\n\t\t\tif (Math.abs(weeks) <= 4) {\n\t\t\t\treturn formatter.format(Math.round(weeks), 'week')\n\t\t\t}\n\t\t\tconst months = days / 30\n\t\t\tif (Math.abs(months) <= 12) {\n\t\t\t\treturn formatter.format(Math.round(months), 'month')\n\t\t\t}\n\t\t\treturn formatter.format(Math.round(days / 365), 'year')\n\t\t}\n\t\treturn formattedFullTime.value\n\t})\n\n\t// Set or clear interval if relative time is dis/enabled\n\twatch([wrappedOptions], () => {\n\t\twindow.clearInterval(intervalId)\n\t\tintervalId = undefined\n\t\tif (wrappedOptions.value.relativeTime) {\n\t\t\tintervalId = window.setInterval(() => { currentTime.value = Date.now() }, 1000)\n\t\t}\n\t})\n\n\t// Start the interval for setting the current time if relative time is enabled\n\tonMounted(() => {\n\t\tif (wrappedOptions.value.relativeTime !== false) {\n\t\t\tintervalId = window.setInterval(() => { currentTime.value = Date.now() }, 1000)\n\t\t}\n\t})\n\n\t// ensure interval is cleared\n\tonUnmounted(() => {\n\t\twindow.clearInterval(intervalId)\n\t})\n\n\treturn {\n\t\tformattedTime,\n\t\tformattedFullTime,\n\t\toptions,\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n\n### General description\n\nThis components purpose is to display a timestamp in the users local time format.\nIt also supports relative time, for examples *6 seconds ago*.\n\n#### Standard usage\n\nWithout any optional parameters the timestamp is displayed as a relative datetime and a title with the full date is added.\n\n```vue\n<template>\n\t<NcDateTime :timestamp=\"timestamp\" />\n</template>\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t}\n\t\t},\n\t}\n</script>\n```\n\n#### Ignore seconds\n\nIf you do not want the seconds to be counted up until minutes are reached you can simply use the `ignore-seconds` property.\n\n```vue\n<template>\n\t<NcDateTime :timestamp=\"timestamp\" :ignore-seconds=\"true\" />\n</template>\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t}\n\t\t},\n\t}\n</script>\n```\n\n#### Custom date or time format\n\nThe component allows to format the full date for the title by settings the `format` property.\nIt is also possible to disable relative time by setting the `relativeTime` property to `false`.\n\n```vue\n<template>\n\t<div>\n\t\t<h4>Short relative time</h4>\n\t\t<NcDateTime :timestamp=\"timestamp\" relative-time=\"short\" />\n\n\t\t<h4>Custom title format</h4>\n\t\t<NcDateTime :timestamp=\"timestamp\" :format=\"timeFormat\" />\n\n\t\t<h4>Without relative time</h4>\n\t\t<NcDateTime :timestamp=\"timestamp\" :format=\"timeFormat\" :relative-time=\"false\" />\n\t</div>\n</template>\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t/** For allowed formats see the Intl.DateTimeFormat options */\n\t\t\t\ttimeFormat: {\n\t\t\t\t\tdateStyle: 'short',\n\t\t\t\t\ttimeStyle: 'full'\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t}\n</script>\n<style>\nh4 {\n\tfont-weight: bold;\n\tmargin-top: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<span class=\"nc-datetime\"\n\t\t:data-timestamp=\"timestamp\"\n\t\t:title=\"formattedFullTime\"\n\t\tv-text=\"formattedTime\" />\n</template>\n\n<script>\nimport { computed } from 'vue'\nimport { useFormatDateTime } from '../../composables/useFormatDateTime.ts'\n\nexport default {\n\tname: 'NcDateTime',\n\n\tprops: {\n\t\t/**\n\t\t * The timestamp to display, either an unix timestamp (in milliseconds) or a Date object\n\t\t */\n\t\ttimestamp: {\n\t\t\ttype: [Date, Number],\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * The format used for displaying, or if relative time is used the format used for the title (optional)\n\t\t *\n\t\t * @type {Intl.DateTimeFormatOptions}\n\t\t */\n\t\tformat: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({ timeStyle: 'medium', dateStyle: 'short' }),\n\t\t},\n\t\t/**\n\t\t * Wether to display the timestamp as time from now (optional)\n\t\t *\n\t\t * - `false`: Disable relative time\n\t\t * - `'long'`: Long text, like *2 seconds ago* (default)\n\t\t * - `'short'`: Short text, like *2 sec. ago*\n\t\t * - `'narrow'`: Even shorter text (same as `'short'` on some languages)\n\t\t */\n\t\trelativeTime: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: 'long',\n\t\t\tvalidator: (v) => v === false || ['long', 'short', 'narrow'].includes(v),\n\t\t},\n\t\t/**\n\t\t * Ignore seconds when displaying the relative time and just show `a few seconds ago`\n\t\t */\n\t\tignoreSeconds: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup(props) {\n\t\tconst timestamp = computed(() => props.timestamp)\n\t\tconst { formattedTime, formattedFullTime } = useFormatDateTime(timestamp, props)\n\t\treturn {\n\t\t\tformattedTime,\n\t\t\tformattedFullTime,\n\t\t}\n\t},\n}\n</script>\n"],"names":[],"mappings":"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"}