@gitlab/ui 126.3.4 → 126.4.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 (90) hide show
  1. package/dist/components/base/alert/alert.js +9 -0
  2. package/dist/components/base/breadcrumb/breadcrumb.js +3 -0
  3. package/dist/components/base/breadcrumb/breadcrumb_item.js +15 -0
  4. package/dist/components/base/datepicker/datepicker.js +54 -0
  5. package/dist/components/base/daterange_picker/daterange_picker.js +70 -1
  6. package/dist/components/base/filtered_search/filtered_search.js +1 -1
  7. package/dist/components/base/form/form_input_group/form_input_group.js +9 -1
  8. package/dist/components/base/path/data.js +1 -1
  9. package/dist/components/base/search_box_by_click/search_box_by_click.js +9 -1
  10. package/dist/components/dashboards/dashboard_panel/dashboard_panel.js +10 -2
  11. package/dist/directives/resize_observer/resize_observer.js +10 -3
  12. package/dist/index.css.map +1 -1
  13. package/dist/tailwind.css +1 -1
  14. package/dist/tailwind.css.map +1 -1
  15. package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +7 -2
  16. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +8 -0
  17. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +4 -0
  18. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +8 -4
  19. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +3 -19
  20. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +1 -16
  21. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +8 -2
  22. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +4 -0
  23. package/dist/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.js +15 -7
  24. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +15 -13
  25. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +24 -21
  26. package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +10 -9
  27. package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +3 -0
  28. package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +29 -21
  29. package/dist/vendor/bootstrap-vue/src/constants/events.js +1 -5
  30. package/dist/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +15 -13
  31. package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +15 -16
  32. package/dist/vendor/bootstrap-vue/src/mixins/attrs.js +1 -18
  33. package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +8 -3
  34. package/dist/vendor/bootstrap-vue/src/mixins/has-listener.js +1 -1
  35. package/dist/vendor/bootstrap-vue/src/mixins/listeners.js +13 -12
  36. package/dist/vendor/bootstrap-vue/src/utils/cache.js +35 -13
  37. package/dist/vendor/bootstrap-vue/src/utils/config-set.js +16 -11
  38. package/dist/vendor/bootstrap-vue/src/utils/config.js +4 -10
  39. package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +102 -3
  40. package/dist/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +3 -9
  41. package/dist/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +1 -3
  42. package/dist/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +22 -0
  43. package/dist/vendor/bootstrap-vue/src/utils/plugins.js +2 -21
  44. package/dist/vendor/bootstrap-vue/src/utils/router.js +15 -1
  45. package/dist/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +1 -1
  46. package/dist/vendor/bootstrap-vue/src/vue.js +16 -81
  47. package/package.json +6 -6
  48. package/src/components/base/alert/alert.vue +9 -0
  49. package/src/components/base/breadcrumb/breadcrumb.vue +3 -0
  50. package/src/components/base/breadcrumb/breadcrumb_item.vue +15 -0
  51. package/src/components/base/datepicker/datepicker.vue +54 -0
  52. package/src/components/base/daterange_picker/daterange_picker.vue +70 -1
  53. package/src/components/base/filtered_search/filtered_search.vue +1 -1
  54. package/src/components/base/form/form_input_group/form_input_group.vue +9 -1
  55. package/src/components/base/path/data.js +1 -1
  56. package/src/components/base/search_box_by_click/search_box_by_click.vue +9 -0
  57. package/src/components/dashboards/dashboard_panel/dashboard_panel.vue +27 -9
  58. package/src/directives/resize_observer/resize_observer.js +6 -0
  59. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +6 -1
  60. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +8 -0
  61. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +4 -0
  62. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +9 -4
  63. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +3 -24
  64. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +1 -20
  65. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +8 -2
  66. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +4 -0
  67. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.js +15 -13
  68. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +14 -13
  69. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +16 -23
  70. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +10 -9
  71. package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +4 -0
  72. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +36 -26
  73. package/src/vendor/bootstrap-vue/src/constants/events.js +0 -5
  74. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +17 -13
  75. package/src/vendor/bootstrap-vue/src/directives/visible/visible.js +13 -9
  76. package/src/vendor/bootstrap-vue/src/mixins/attrs.js +1 -17
  77. package/src/vendor/bootstrap-vue/src/mixins/dropdown.js +8 -3
  78. package/src/vendor/bootstrap-vue/src/mixins/has-listener.js +1 -1
  79. package/src/vendor/bootstrap-vue/src/mixins/listeners.js +14 -14
  80. package/src/vendor/bootstrap-vue/src/utils/cache.js +27 -7
  81. package/src/vendor/bootstrap-vue/src/utils/config-set.js +16 -11
  82. package/src/vendor/bootstrap-vue/src/utils/config.js +4 -10
  83. package/src/vendor/bootstrap-vue/src/utils/create-new-child-component.js +85 -2
  84. package/src/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +3 -10
  85. package/src/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +1 -4
  86. package/src/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +21 -0
  87. package/src/vendor/bootstrap-vue/src/utils/plugins.js +1 -26
  88. package/src/vendor/bootstrap-vue/src/utils/router.js +13 -1
  89. package/src/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +1 -1
  90. package/src/vendor/bootstrap-vue/src/vue.js +11 -98
@@ -1,5 +1,3 @@
1
- import { isVue3 } from '../vue';
2
-
3
- const getInstanceFromDirective = (vnode, bindings) => isVue3 ? bindings.instance : vnode.context;
1
+ const getInstanceFromDirective = (vnode, bindings) => bindings.instance || vnode.context;
4
2
 
5
3
  export { getInstanceFromDirective };
@@ -0,0 +1,22 @@
1
+ import { isVue3 } from '../vue';
2
+
3
+ /**
4
+ * Register a callback to be called when a Vue instance is destroyed/unmounted.
5
+ *
6
+ * For Vue 2: Uses $once with 'hook:destroyed' event
7
+ * For Vue 3: Uses scope.cleanups for proper effect scope cleanup
8
+ *
9
+ * @param {Object} instance - The Vue instance to watch for destruction
10
+ * @param {Function} callback - The callback to run when the instance is destroyed
11
+ */
12
+ const onInstanceDestroy = (instance, callback) => {
13
+ if (isVue3(instance)) {
14
+ // onScopeDispose is not available on instance and we do
15
+ // not want to import 'vue' in this file
16
+ instance.$.scope.cleanups.push(callback);
17
+ return;
18
+ }
19
+ instance.$once('hook:destroyed', callback);
20
+ };
21
+
22
+ export { onInstanceDestroy };
@@ -1,23 +1,5 @@
1
- import { Vue } from '../vue';
2
- import { IS_JSDOM, HAS_WINDOW_SUPPORT } from '../constants/env';
1
+ import { HAS_WINDOW_SUPPORT } from '../constants/env';
3
2
  import { setConfig } from './config-set';
4
- import { warn } from './warn';
5
-
6
- /**
7
- * Checks if there are multiple instances of Vue, and warns (once) about possible issues.
8
- * @param {object} Vue
9
- */
10
- const checkMultipleVue = (() => {
11
- let checkMultipleVueWarned = false;
12
- const MULTIPLE_VUE_WARNING = ['Multiple instances of Vue detected!', 'You may need to set up an alias for Vue in your bundler config.', 'See: https://bootstrap-vue.org/docs#using-module-bundlers'].join('\n');
13
- return Vue$1 => {
14
- /* istanbul ignore next */
15
- if (!checkMultipleVueWarned && Vue !== Vue$1 && !IS_JSDOM) {
16
- warn(MULTIPLE_VUE_WARNING);
17
- }
18
- checkMultipleVueWarned = true;
19
- };
20
- })();
21
3
 
22
4
  /**
23
5
  * Plugin install factory function.
@@ -37,7 +19,6 @@ const installFactory = function () {
37
19
  return;
38
20
  }
39
21
  install.installed = true;
40
- checkMultipleVue(Vue);
41
22
  setConfig(config, Vue);
42
23
  registerComponents(Vue, components);
43
24
  registerDirectives(Vue, directives);
@@ -140,4 +121,4 @@ const vueUse = VuePlugin => {
140
121
  }
141
122
  };
142
123
 
143
- export { checkMultipleVue, installFactory, pluginFactory, registerComponent, registerComponents, registerDirective, registerDirectives, registerPlugins, vueUse };
124
+ export { installFactory, pluginFactory, registerComponent, registerComponents, registerDirective, registerDirectives, registerPlugins, vueUse };
@@ -1,4 +1,5 @@
1
1
  import { RX_QUERY_START, RX_PLUS, RX_ENCODE_REVERSE, RX_ENCODED_COMMA } from '../constants/regex';
2
+ import { isVue3 } from '../vue';
2
3
  import { isTag } from './dom';
3
4
  import { isPlainObject, isUndefined, isNull, isArray, isString } from './inspect';
4
5
  import { keys } from './object';
@@ -66,6 +67,18 @@ const parseQuery = query => {
66
67
  return parsed;
67
68
  };
68
69
  const isLink = props => !!(props.href || props.to);
70
+ const routerLink = {
71
+ functional: true,
72
+ _name: 'router-link',
73
+ render(h, ctx) {
74
+ // $hasNormal is Vue.js 2 legacy way to check if default slot is scoped or not
75
+ // in bootstrap-vue codebase we never use scoped slots router-link rendering
76
+ return h('router-link', ctx.data, {
77
+ ...ctx.children,
78
+ $hasNormal: true
79
+ });
80
+ }
81
+ };
69
82
  const isRouterLink = tag => !!(tag && !isTag(tag, 'a'));
70
83
  const computeTag = (_ref, thisOrParent) => {
71
84
  let {
@@ -87,7 +100,8 @@ const computeTag = (_ref, thisOrParent) => {
87
100
  // exists = names.some(name => !!thisOrParent.$options.components[name])
88
101
  // And may want to cache the result for performance or we just let the render fail
89
102
  // if the component is not registered
90
- return routerComponentName || (hasNuxt ? 'nuxt-link' : 'router-link');
103
+ const actualRouterLink = isVue3(thisOrParent) ? routerLink : 'router-link';
104
+ return routerComponentName || (hasNuxt ? 'nuxt-link' : actualRouterLink);
91
105
  };
92
106
  const computeRel = function () {
93
107
  let {
@@ -1,7 +1,7 @@
1
1
  import { isVue3 } from '../vue';
2
2
 
3
3
  function safeVueInstance(target) {
4
- if (!isVue3) {
4
+ if (!isVue3(target)) {
5
5
  return target;
6
6
  }
7
7
  return new Proxy(target, {
@@ -1,18 +1,11 @@
1
1
  import Vue from 'vue';
2
- export { default as Vue } from 'vue';
3
- export { mergeData } from 'vue-functional-data-merge';
2
+ import { mergeData as mergeData$1 } from 'vue-functional-data-merge';
4
3
 
5
4
  // --- Constants ---
6
5
  const COMPONENT_UID_KEY = '_uid';
7
- const isVue3 = Vue.version.startsWith('3');
8
- const REF_FOR_KEY = isVue3 ? 'ref_for' : 'refInFor';
9
- const ALLOWED_FIELDS_IN_DATA = ['class', 'staticClass', 'style', 'attrs', 'props', 'domProps', 'on', 'nativeOn', 'directives', 'scopedSlots', 'slot', 'key', 'ref', 'refInFor'];
10
- let extend = Vue.extend.bind(Vue);
11
- if (isVue3) {
12
- const {
13
- extend: originalExtend
14
- } = Vue;
15
- const KNOWN_COMPONENTS = ['router-link', 'transition', 'transition-group'];
6
+ const isGlobalVue3 = Vue.version.startsWith('3');
7
+ const REF_FOR_KEY = isGlobalVue3 ? 'ref_for' : 'refInFor';
8
+ if (isGlobalVue3) {
16
9
  const originalVModelDynamicCreated = Vue.vModelDynamic.created;
17
10
  const originalVModelDynamicBeforeUpdate = Vue.vModelDynamic.beforeUpdate;
18
11
  let assignSymbol;
@@ -46,75 +39,17 @@ if (isVue3) {
46
39
  el[assignSymbol] = function () {};
47
40
  }
48
41
  };
49
- extend = function patchedBootstrapVueExtend(definition) {
50
- if (typeof definition === 'object' && definition.render && !definition.__alreadyPatched) {
51
- const originalRender = definition.render;
52
- definition.__alreadyPatched = true;
53
- definition.render = function (h) {
54
- const patchedH = function (tag, dataObjOrChildren, rawSlots) {
55
- const slots = rawSlots === undefined ? [] : [Array.isArray(rawSlots) ? rawSlots.filter(Boolean) : rawSlots];
56
- const isTag = typeof tag === 'string' && !KNOWN_COMPONENTS.includes(tag);
57
- const isSecondArgumentDataObject = dataObjOrChildren && typeof dataObjOrChildren === 'object' && !Array.isArray(dataObjOrChildren);
58
- if (!isSecondArgumentDataObject) {
59
- return h(tag, dataObjOrChildren, ...slots);
60
- }
61
- const {
62
- attrs,
63
- props,
64
- ...restData
65
- } = dataObjOrChildren;
66
- const normalizedData = {
67
- ...restData,
68
- attrs,
69
- props: isTag ? {} : props
70
- };
71
- if (tag === 'router-link' && !normalizedData.slots && !normalizedData.scopedSlots) {
72
- // terrible workaround to fix router-link rendering with compat vue-router
73
- normalizedData.scopedSlots = {
74
- $hasNormal: () => {}
75
- };
76
- }
77
- return h(tag, normalizedData, ...slots);
78
- };
79
- if (definition.functional) {
80
- var _ctx$children, _ctx$children$default;
81
- const ctx = arguments[1];
82
- const patchedCtx = {
83
- ...ctx
84
- };
85
- patchedCtx.data = {
86
- attrs: {
87
- ...(ctx.data.attrs || {})
88
- },
89
- props: {
90
- ...(ctx.data.props || {})
91
- }
92
- };
93
- Object.keys(ctx.data || {}).forEach(key => {
94
- if (ALLOWED_FIELDS_IN_DATA.includes(key)) {
95
- patchedCtx.data[key] = ctx.data[key];
96
- } else if (key in ctx.props) {
97
- patchedCtx.data.props[key] = ctx.data[key];
98
- } else if (!key.startsWith('on')) {
99
- patchedCtx.data.attrs[key] = ctx.data[key];
100
- }
101
- });
102
- const IGNORED_CHILDREN_KEYS = ['_ctx'];
103
- const children = ((_ctx$children = ctx.children) === null || _ctx$children === void 0 ? void 0 : (_ctx$children$default = _ctx$children.default) === null || _ctx$children$default === void 0 ? void 0 : _ctx$children$default.call(_ctx$children)) || ctx.children;
104
- if (children && Object.keys(patchedCtx.children).filter(k => !IGNORED_CHILDREN_KEYS.includes(k)).length === 0) {
105
- delete patchedCtx.children;
106
- } else {
107
- patchedCtx.children = children;
108
- }
109
- patchedCtx.data.on = ctx.listeners;
110
- return originalRender.call(this, patchedH, patchedCtx);
111
- }
112
- return originalRender.call(this, patchedH);
113
- };
114
- }
115
- return originalExtend.call(this, definition);
116
- }.bind(Vue);
117
42
  }
118
- const nextTick = Vue.nextTick;
43
+ const isVue3 = instance => Boolean(instance.$);
44
+ const extend = Vue.extend.bind(Vue);
45
+ function mergeData() {
46
+ var _result$attrs, _result$props;
47
+ const result = mergeData$1(...arguments);
48
+ return {
49
+ ...result,
50
+ ...((_result$attrs = result.attrs) !== null && _result$attrs !== void 0 ? _result$attrs : {}),
51
+ ...((_result$props = result.props) !== null && _result$props !== void 0 ? _result$props : {})
52
+ };
53
+ }
119
54
 
120
- export { COMPONENT_UID_KEY, REF_FOR_KEY, extend, isVue3, nextTick };
55
+ export { COMPONENT_UID_KEY, REF_FOR_KEY, extend, isGlobalVue3, isVue3, mergeData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "126.3.4",
3
+ "version": "126.4.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -67,7 +67,7 @@
67
67
  "dependencies": {
68
68
  "@floating-ui/dom": "1.7.4",
69
69
  "echarts": "^5.6.0",
70
- "gridstack": "^12.3.3",
70
+ "gridstack": "^12.4.2",
71
71
  "iframe-resizer": "^4.4.5",
72
72
  "lodash": "^4.17.21",
73
73
  "popper.js": "^1.16.1",
@@ -128,10 +128,10 @@
128
128
  "@yarnpkg/lockfile": "^1.1.0",
129
129
  "acorn": "^8.15.0",
130
130
  "acorn-walk": "^8.3.4",
131
- "autoprefixer": "10.4.22",
131
+ "autoprefixer": "10.4.23",
132
132
  "axe-playwright": "^2.2.2",
133
133
  "babel-loader": "^9.2.1",
134
- "cypress": "15.7.1",
134
+ "cypress": "15.8.1",
135
135
  "cypress-real-events": "^1.15.0",
136
136
  "dompurify": "^3.1.2",
137
137
  "emoji-regex": "^10.6.0",
@@ -159,7 +159,7 @@
159
159
  "rollup-plugin-string": "^3.0.0",
160
160
  "rollup-plugin-svg": "^2.0.0",
161
161
  "rollup-plugin-vue": "^5.1.9",
162
- "sass": "^1.95.0",
162
+ "sass": "^1.97.2",
163
163
  "sass-loader": "^10.5.2",
164
164
  "sass-true": "^9",
165
165
  "start-server-and-test": "^2.1.3",
@@ -167,7 +167,7 @@
167
167
  "storybook-dark-mode": "4.0.2",
168
168
  "style-dictionary": "^5.1.1",
169
169
  "style-loader": "^4",
170
- "tailwindcss": "3.4.18",
170
+ "tailwindcss": "3.4.19",
171
171
  "vue": "2.7.16",
172
172
  "vue-docgen-loader": "1.5.1",
173
173
  "vue-loader": "^15.11.1",
@@ -18,6 +18,9 @@ export default {
18
18
  GlButton,
19
19
  },
20
20
  props: {
21
+ /**
22
+ * The title text to display in the alert header.
23
+ */
21
24
  title: {
22
25
  type: String,
23
26
  required: false,
@@ -39,6 +42,9 @@ export default {
39
42
  required: false,
40
43
  default: () => translate('GlAlert.closeButtonTitle', 'Dismiss'),
41
44
  },
45
+ /**
46
+ * The variant of the alert.
47
+ */
42
48
  variant: {
43
49
  type: String,
44
50
  required: false,
@@ -77,6 +83,9 @@ export default {
77
83
  required: false,
78
84
  default: '',
79
85
  },
86
+ /**
87
+ * When true, the alert stays fixed at the top of its container.
88
+ */
80
89
  sticky: {
81
90
  type: Boolean,
82
91
  required: false,
@@ -36,6 +36,9 @@ export default {
36
36
  });
37
37
  },
38
38
  },
39
+ /**
40
+ * Accessible label for the breadcrumb navigation.
41
+ */
39
42
  ariaLabel: {
40
43
  type: String,
41
44
  required: false,
@@ -9,21 +9,33 @@ export default {
9
9
  },
10
10
  inheritAttrs: false,
11
11
  props: {
12
+ /**
13
+ * The text content to display in the breadcrumb item.
14
+ */
12
15
  text: {
13
16
  type: String,
14
17
  required: false,
15
18
  default: null,
16
19
  },
20
+ /**
21
+ * Vue Router location object or path string for navigation.
22
+ */
17
23
  to: {
18
24
  type: [String, Object],
19
25
  required: false,
20
26
  default: null,
21
27
  },
28
+ /**
29
+ * URL for the breadcrumb link when not using Vue Router.
30
+ */
22
31
  href: {
23
32
  type: String,
24
33
  required: false,
25
34
  default: null,
26
35
  },
36
+ /**
37
+ * Indicates the current page within the breadcrumb trail for accessibility.
38
+ */
27
39
  ariaCurrent: {
28
40
  type: [String, Boolean],
29
41
  required: false,
@@ -32,6 +44,9 @@ export default {
32
44
  return [false, 'page'].indexOf(value) !== -1;
33
45
  },
34
46
  },
47
+ /**
48
+ * The size variant of the breadcrumb item.
49
+ */
35
50
  size: {
36
51
  type: String,
37
52
  required: false,
@@ -85,26 +85,41 @@ export default {
85
85
  required: false,
86
86
  default: '',
87
87
  },
88
+ /**
89
+ * The currently selected date.
90
+ */
88
91
  value: {
89
92
  type: Date,
90
93
  required: false,
91
94
  default: null,
92
95
  },
96
+ /**
97
+ * The earliest selectable date.
98
+ */
93
99
  minDate: {
94
100
  type: Date,
95
101
  required: false,
96
102
  default: null,
97
103
  },
104
+ /**
105
+ * The latest selectable date.
106
+ */
98
107
  maxDate: {
99
108
  type: Date,
100
109
  required: false,
101
110
  default: null,
102
111
  },
112
+ /**
113
+ * Start date for range selection highlighting.
114
+ */
103
115
  startRange: {
104
116
  type: Date,
105
117
  required: false,
106
118
  default: null,
107
119
  },
120
+ /**
121
+ * End date for range selection highlighting.
122
+ */
108
123
  endRange: {
109
124
  type: Date,
110
125
  required: false,
@@ -118,16 +133,25 @@ export default {
118
133
  required: false,
119
134
  default: null,
120
135
  },
136
+ /**
137
+ * First day of the week (0 = Sunday, 1 = Monday, etc.).
138
+ */
121
139
  firstDay: {
122
140
  type: Number,
123
141
  required: false,
124
142
  default: () => defaultConfig.firstDayOfWeek || 0, // Defaults to 0 (Sunday)
125
143
  },
144
+ /**
145
+ * Accessible label for the datepicker.
146
+ */
126
147
  ariaLabel: {
127
148
  type: String,
128
149
  required: false,
129
150
  default: '',
130
151
  },
152
+ /**
153
+ * Placeholder text for the input field.
154
+ */
131
155
  placeholder: {
132
156
  type: String,
133
157
  required: false,
@@ -141,16 +165,25 @@ export default {
141
165
  required: false,
142
166
  default: '',
143
167
  },
168
+ /**
169
+ * Whether the datepicker is disabled.
170
+ */
144
171
  disabled: {
145
172
  type: Boolean,
146
173
  required: false,
147
174
  default: false,
148
175
  },
176
+ /**
177
+ * Whether to display the default input field.
178
+ */
149
179
  displayField: {
150
180
  type: Boolean,
151
181
  required: false,
152
182
  default: true,
153
183
  },
184
+ /**
185
+ * Whether the datepicker should be open on mount.
186
+ */
154
187
  startOpened: {
155
188
  type: Boolean,
156
189
  required: false,
@@ -164,31 +197,49 @@ export default {
164
197
  required: false,
165
198
  default: null,
166
199
  },
200
+ /**
201
+ * Internationalization object for Pikaday labels and month/day names.
202
+ */
167
203
  i18n: {
168
204
  type: Object,
169
205
  required: false,
170
206
  default: null,
171
207
  },
208
+ /**
209
+ * Additional CSS class for the Pikaday calendar theme.
210
+ */
172
211
  theme: {
173
212
  type: String,
174
213
  required: false,
175
214
  default: '',
176
215
  },
216
+ /**
217
+ * Whether to show a clear button when a date is selected.
218
+ */
177
219
  showClearButton: {
178
220
  type: Boolean,
179
221
  required: false,
180
222
  default: false,
181
223
  },
224
+ /**
225
+ * The id attribute for the input element.
226
+ */
182
227
  inputId: {
183
228
  type: String,
184
229
  required: false,
185
230
  default: null,
186
231
  },
232
+ /**
233
+ * Accessible label for the input element.
234
+ */
187
235
  inputLabel: {
188
236
  type: String,
189
237
  required: false,
190
238
  default: 'Enter date',
191
239
  },
240
+ /**
241
+ * The name attribute for the input element.
242
+ */
192
243
  inputName: {
193
244
  type: String,
194
245
  required: false,
@@ -203,6 +254,9 @@ export default {
203
254
  default: null,
204
255
  validator: (value) => Object.keys(datepickerWidthOptionsMap).includes(value),
205
256
  },
257
+ /**
258
+ * Validation state of the input. `true` for valid, `false` for invalid, `null` for no validation styling.
259
+ */
206
260
  state: {
207
261
  type: Boolean,
208
262
  required: false,