@genexus/genexus-ide-ui 1.1.51 → 1.1.53
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/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-start-page.cjs.entry.js +5 -9
- package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +14 -7
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/start-page/start-page.js +23 -9
- package/dist/collection/components/start-page/start-page.js.map +1 -1
- package/dist/collection/components/team-dev/update/update.js +14 -7
- package/dist/collection/components/team-dev/update/update.js.map +1 -1
- package/dist/components/gx-ide-start-page.js +6 -9
- package/dist/components/gx-ide-start-page.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update.js +14 -7
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-start-page.entry.js +5 -9
- package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +14 -7
- package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/{p-083d8e94.entry.js → p-547fbde8.entry.js} +13 -8
- package/dist/genexus-ide-ui/p-547fbde8.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-b25d91e5.entry.js → p-c5eac770.entry.js} +7 -9
- package/dist/genexus-ide-ui/p-c5eac770.entry.js.map +1 -0
- package/dist/types/components/start-page/start-page.d.ts +4 -0
- package/dist/types/components.d.ts +8 -0
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-083d8e94.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-b25d91e5.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","updateCss","CSS_BUNDLES","CHECKBOX_CHECKED_VALUE","CHECKBOX_UNCHECKED_VALUE","DETAIL_LABEL_CLASSES","ADD_ICON","getIconPath","category","colorType","EDITED_ICON","FILTER_ICON","SEARCH_ICON","SUBSTRACT_ICON","WARNING_ICON","ERROR_ICON","SUCCESS_ICON","INFO_ICON","REFRESH_ICON","GxIdeTeamDevUpdate","_GxIdeTeamDevUpdate_componentLocale","set","this","_GxIdeTeamDevUpdate_actionsComboBoxModel","_GxIdeTeamDevUpdate_rowCheckedChangedByTheUser","_GxIdeTeamDevUpdate_chGridPendingForUpdateEl","_GxIdeTeamDevUpdate_updateCheckedClickedHandler","async","__classPrivateFieldGet","_GxIdeTeamDevUpdate_updateObjectsHandler","call","markedObjectsSet","_GxIdeTeamDevUpdate_reloadClickedHandler","_GxIdeTeamDevUpdate_loadData","selection","__classPrivateFieldSet","updating","forEach","itemToUpdate","objectsStatusMap","updateResult","updateCallback","objectResult","messages","length","objectsMessagesDataMap","delete","result","alreadyUpdatedObjectsIdsSet","Set","add","markRow","_GxIdeTeamDevUpdate_renderActionCellContent","action","iconColor","actions","insert","modify","modifyWithConflicts","h","class","type","src","style","backgroundColor","_GxIdeTeamDevUpdate_updateSingleObject","objectId","newobjectsStatusMap","Map","_GxIdeTeamDevUpdate_renderObjectStatus","status","get","updatePillAsButton","update","classes","onClick","_GxIdeTeamDevUpdate_renderRows","objects","pendingObjectsAfterActionFilter","ignoredObjectsAfterActionFilter","object","typeIcon","alreadyUpdated","has","hideCheckbox","marked","key","rowid","ref","el","setAttribute","size","renderObjectTypeWithIcon","description","formatDate","modifiedOn","message","MESSAGE_ICON","text","_GxIdeTeamDevUpdate_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","filter","markedObjectId","_GxIdeTeamDevUpdate_updatePendingCheckedItems","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevUpdate_revertPendingCommitsCheckboxes","_GxIdeTeamDevUpdate_togglePendingCommitsCheckboxes","_GxIdeTeamDevUpdate_searchInputHandler","searchValue","_GxIdeTeamDevUpdate_actionChangedHandler","selectedAction","_GxIdeTeamDevUpdate_typeChangedHandler","selectedType","_GxIdeTeamDevUpdate_setInitialObjectsStatus","pendingAndIgnored","pendingForUpdate","pendingObject","_a","ignoredObjects","ignoredObject","forceLoad","filters","search","kbProperties","kbPropertiesChecked","loading","clear","loadCallback","_GxIdeTeamDevUpdate_markPendingObjects","error","pendingId","pendingIdsSet","_GxIdeTeamDevUpdate_applyClientFilter","_GxIdeTeamDevUpdate_onRowContextMenuHandler","ev","preventDefault","stopPropagation","getSelectedRows","selectedRowId","getSelectedCell","rowId","source","filteredSelection","ignoredIdsSet","selectRow","push","contextMenuCallback","clientX","clientY","itemsToToggle","itemsToCheck","itemsToUncheck","_GxIdeTeamDevUpdate_kbPropertiesChangedHandler","_GxIdeTeamDevUpdate_sortTabularGridColumnCallback","e","columnId","objectProperty","dateType","COLUMNS_IDS","lastSynchronized","sortTabularGridColumn","_GxIdeTeamDevUpdate_columnSelectorClickedCallback","allRowsChecked","getMarkedRows","ignoredMarkedRowsIds","uncheckIgnoredObjects","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","alreadyUpdatedObjectsIdsSetChanged","newUpdatedObjectsIdsSet","pendingIdsSetAndUpdatedIdsSetAreEqual","areSetsEqual","allPendingAreUpdated","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","state","pendingAndIgnoredChanged","pending","ignored","componentWillLoad","Locale","getComponentStrings","allActions","types","typesComboBoxModel","componentDidLoad","reload","render","disableControls","gridIsEmpty","Host","model","commitDetail","title","genexusServer","openServerCallback","updateFrom","serverUrl","knowledgeBase","kbName","version","versionName","lastFullUpdate","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","debounce","config","inputDebounce","typeAccesibleName","typePlaceholder","actionAccesibleName","actionPlaceholder","checkedValue","keyboardNavigationMode","rowSelectionMode","onRowMarkingChanged","onRowContextMenu","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","sortable","onColumnSortChanged","onColumnSelectorClicked","tabularGrid","colSize","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/version-control/common/object-type-to-combo-box.ts","src/components/team-dev/update/update.scss?tag=gx-ide-team-dev-update&encapsulation=shadow","src/components/team-dev/update/update.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../../components\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\n","@import \"../common/styles.scss\";\n@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n --pill-border-radius: 12px;\n --pill-padding-inline: 8px;\n --pill-padding-block: 2px;\n --pill-font-size: var(--font-size-body-s);\n\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content max-content 1fr;\n}\n$header-item-common-inline-padding: 24px;\n$header-item-common-separator-border: 1px solid\n var(--mer-border-color__on-elevation--01);\n\n%header-item-common {\n padding-inline: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-start {\n padding-inline-end: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-end {\n padding-inline-start: $header-item-common-inline-padding;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n display: grid;\n grid-template-columns: 1fr max-content;\n}\n\n// header detail\n.header__detail {\n display: grid;\n row-gap: var(--mer-spacing--md);\n grid-auto-columns: max-content;\n grid-auto-rows: max-content;\n grid-template-areas:\n \"detail-heading-gx . . .\"\n \"detail-genexus-server detail-knowledge-base detail-version detail-last-full-update\";\n}\n.detail__label {\n color: var(--mer-color__neutral-gray--400);\n}\n\n.detail__heading-genexus-server {\n grid-area: detail-heading-gx;\n}\n.detail__genexus-server {\n grid-area: detail-genexus-server;\n @extend %header-item-common-start;\n\n > a {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n }\n}\n.detail__link {\n align-items: start;\n color: var(--mer-text__primary);\n text-decoration: underline;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n}\n.detail__knowledge-base {\n grid-area: detail-knowledge-base;\n @extend %header-item-common;\n}\n.detail__version {\n grid-area: detail-version;\n @extend %header-item-common;\n}\n.detail__last-full-update {\n grid-area: detail-last-full-update;\n @extend %header-item-common-end;\n}\n\n// filter\n.filter-container {\n container-type: inline-size;\n box-sizing: border-box;\n}\n.filter {\n display: grid;\n margin-block-start: var(--mer-spacing--lg);\n grid-template-areas: \"filter-search filter-types filter-actions filter-kb-properties filter-buttons\";\n grid-template-columns: 200px 200px 200px max-content 1fr;\n gap: 12px;\n}\n@container (max-width: 1100px) {\n .filter-container > .filter {\n grid-template-columns: 200px 200px 200px 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions filter-buttons\"\n \"filter-kb-properties . . .\";\n grid-auto-rows: max-content;\n }\n}\n@container (max-width: 900px) {\n .filter-container > .filter {\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions\"\n \"filter-kb-properties filter-buttons filter-buttons\";\n grid-auto-rows: max-content;\n }\n}\n.filter__search {\n grid-area: filter-search;\n}\n.filter__types {\n grid-area: filter-types;\n}\n.filter__actions {\n grid-area: filter-actions;\n}\n.filter__kb-properties {\n grid-area: filter-kb-properties;\n}\n.filter__buttons {\n margin-inline-start: auto;\n grid-area: filter-buttons;\n}\n\n// main\n.main {\n position: relative;\n display: grid;\n overflow: auto;\n}\n.loader {\n position: relative;\n inline-size: 100%;\n block-size: 100%;\n inset-block-start: 0;\n}\n.tabular-grid {\n border-radius: 4px;\n overflow: hidden;\n}\n\n.empty-state {\n block-size: 100%;\n}\n.loader {\n --elevation-background-color: var(--mer-surface__elevation--01);\n}\n\n.messages-list {\n margin: 0;\n padding: 0;\n list-style: none;\n max-inline-size: 800px;\n padding: 8px 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--3xs);\n}\n.message-description {\n line-height: 1.5; // WA. Line height looks too tight.\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.message-icon {\n flex-shrink: 0;\n}\n\n.tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\n// - - - - - - - - - - - - - -\n// WA (WORK AROUNDS)\n// - - - - - - - - - - - - - -\n\n.input-comments-container {\n position: relative;\n}\n// ch-edit for comments WA's\n// Figma design for this component displays the textarea witout border, and with a little more line-height.\n// The following styles are a temporary WA that should be brouhgt to Mercury DS.\n.input-comments {\n --control__border-color: transparent;\n padding-block: 0 !important;\n padding-inline: 0 !important;\n --line-height-tight: 1.4;\n block-size: 100%;\n background-color: var(--mer-surface);\n transition:\n var(--mer-timing--super-fast) block-size,\n var(--mer-timing--super-fast) background-color,\n var(--mer-timing--super-fast) padding-block,\n var(--mer-timing--super-fast) padding-inline;\n}\n.input-comments:focus {\n position: absolute;\n block-size: 200px;\n inline-size: 100%;\n z-index: 99;\n background-color: var(--mer-surface__elevation--01);\n padding-block: var(--control__padding-block) !important;\n padding-inline: var(--control__padding-inline) !important;\n}\n\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n background-size: contain; //force icon fit container\n margin-inline-end: 0;\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--enabled);\n cursor: pointer;\n &:hover {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--hover);\n }\n &:active {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--active);\n }\n}\n\n.tabular-grid-row-actions::part(main),\n.property-grid-row-actions::part(main) {\n // gap not required since buttons are tertiary.\n // extra space perceived.\n gap: 0 !important;\n}\n\n.tabular-grid-row-actions {\n // Butons are center by default, but design dictates start alignemnt\n > button {\n justify-content: start;\n }\n}\n\n// These static type of pills do not exist on Mercury yet.\n// They should be defined on Mercury. The actual pills on Mercury\n// are combo-boxes. Not what we need for this case.\n\n.pill {\n --pill-background-color: transparent;\n --pill-color: transparent;\n --pill-border-color: transparent;\n\n background-color: var(--pill-background-color);\n color: var(--pill-color);\n border: 1px solid var(--pill-border-color);\n inline-size: 100%;\n padding: var(--pill-padding-block) var(--pill-padding-inline);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--pill-border-radius);\n position: relative;\n font-weight: var(--font-weight-semi-bold);\n\n &--update,\n &--pending {\n --pill-background-color: var();\n --pill-color: var(--mer-color__neutral-gray--400);\n --pill-border-color: var();\n }\n &--to-merge-marked {\n --pill-background-color: var();\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var();\n }\n &--ignored {\n --pill-background-color: var(--mer-surface__elevation--02);\n --pill-color: var(--mer-text__on-disabled);\n --pill-border-color: var(--mer-border-color__primary--disabled);\n }\n &--pending {\n --pill-background-color: var(--mer-color__tinted-primary--8);\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var(--mer-color__tinted-primary--50);\n }\n &--warning {\n --pill-background-color: var(--mer-color__tinted-yellow--5);\n --pill-color: var(--mer-border-color__warning);\n --pill-border-color: var(--mer-color__tinted-yellow--60);\n }\n &--error {\n --pill-background-color: var(--mer-color__tinted-red--5);\n --pill-color: var(--mer-border-color__error);\n --pill-border-color: var(--mer-color__tinted-red--60);\n }\n &--updated {\n --pill-background-color: var(--mer-color__tinted-green--5);\n --pill-color: var(--mer-border-color__success);\n --pill-border-color: var(--mer-color__tinted-green--60);\n }\n &--transitioning {\n // used to hide the text, before updating the caption (smooth transtion)\n --pill-color: transparent;\n }\n}\n.updating-spinner-caption {\n display: flex;\n align-items: center;\n gap: 6px;\n $size: 14px;\n --status-circle-color: transparent;\n --status-circle-size: $size;\n --status-circle-inset-inline-start: 14px;\n --pill-color: var(--mer-border-color__primary);\n &::before {\n display: inline-block;\n content: \"\";\n\n @include spinner(\n $size,\n var(--mer-color__primary--300),\n var(--mer-color__tinted-primary--50)\n );\n }\n}\n.tabular-grid .button-secondary {\n --control__padding-block: var(--pill-padding-block);\n --control__padding-inline: var(--pill-padding-inline);\n font-size: inherit;\n font-weight: inherit;\n /* font-size: var(--pill-font-size); */\n}\n\n.tabular-grid .tabular-grid-cell--for-pill {\n --grid-cell__padding-block: 4px;\n align-items: center;\n justify-content: center;\n\n // --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(selector-label),\n.tabular-grid.disabled-custom-selector .tabular-grid-column::part(bar-selector),\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(actions-icon) {\n pointer-events: none;\n opacity: 0.5;\n}\n.tabular-grid-column--settings-custom-selector,\n.tabular-grid-cell--settings-custom-selector {\n --grid-cell__padding-inline: 0;\n --grid-cell__padding-block: 0;\n}\n.tabular-grid-cell::part(actions-icon) {\n padding-block: 6px;\n}\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n block-size: 100%;\n display: block;\n background-size: 14px;\n padding-inline: 16px;\n}\n\n.tabular-grid-cell.no-checkbox-custom-selector::part(selector-label) {\n visibility: hidden;\n pointer-events: none;\n}\n\n.tabular-grid-row-actions::part(window) {\n background-color: var(--mer-surface__elevation--02) !important;\n}\n\n.tabular-grid-row .tabular-grid-cell:nth-child(3) {\n min-inline-size: 200px;\n}\n\n// - - - - - - - - - - - - - -\n// END OF WA\n// - - - - - - - - - - - - - -\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n JSX,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../../common/locale\";\nimport {\n ChCheckboxCustomEvent,\n ChEditCustomEvent,\n ComboBoxModel,\n TabularGridColumnSelectorClickedEvent,\n TabularGridColumnSortChangedEvent,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport uncheckIgnoredObjects from \"../version-control/common/uncheck-ignored\";\nimport { renderObjectTypeWithIcon } from \"../common/utilities\";\nimport { formatDate } from \"../../../common/helpers\";\nimport {\n ContextMenuInfo,\n ItemsCheckedResult,\n ItemsCheckedState,\n ObjectType\n} from \"../../../common/types\";\nimport { config } from \"../../../common/config\";\nimport { mapObjectTypeToComboBoxItemModel } from \"../version-control/common/object-type-to-combo-box\";\nimport { COLUMNS_IDS } from \"../version-control/common/tabular-grid-render\";\nimport sortTabularGridColumn, {\n type SortTabularGridColumnDataType\n} from \"../../../common/chameleon/tabular-grid-column-sort\";\nimport areSetsEqual from \"../version-control/common/are-sets-equal\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tabular-grid\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHECKBOX_CHECKED_VALUE = \"true\";\nconst CHECKBOX_UNCHECKED_VALUE = \"false\";\n\nconst DETAIL_LABEL_CLASSES = \"detail__label body-semi-bold-s\";\n\n// icons\nconst ADD_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"on-elevation\"\n});\nconst EDITED_ICON = getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"on-elevation\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\nconst SUBSTRACT_ICON = getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"on-elevation\"\n});\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n});\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"error\"\n});\nconst SUCCESS_ICON = getIconPath({\n category: \"system\",\n name: \"check \",\n colorType: \"success\"\n});\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n});\nconst REFRESH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-update\",\n styleUrl: \"update.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-update\"]\n})\nexport class GxIdeTeamDevUpdate {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #actionsComboBoxModel: { caption: string; value: ActionForFilter }[];\n\n /**\n * Used to determine if pendingItemsCheckedCallback callback has to be called or not.\n * It should be ignored if the grid checkboxes state is changed programmatically, by\n * setting markRow to false once the object has been successfully updated, for example.\n */\n #rowCheckedChangedByTheUser: boolean = true;\n\n @Element() el: HTMLGxIdeTeamDevBringChangesElement;\n\n #chGridPendingForUpdateEl!: HTMLChTabularGridElement;\n\n // - - - - - - - - - - - - -\n // States Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * It hols a boolean indicating if at least one object from the tabular-grid is checked, for merging.\n */\n @State() atLeastOneObjectIsChecked: boolean = false;\n\n /**\n * True while commitObjects hasn't been loaded or is empty. Used to display a loader.\n */\n @State() loading: boolean = true;\n\n /**\n * The current search filter value\n */\n @State() menuContextAction: Action;\n\n /**\n * The current search filter value\n */\n @State() searchValue: string = \"\";\n\n /**\n * The current state filter value\n */\n @State() selectedAction: ActionForFilter = \"all-actions\";\n\n /**\n * A set that stores the marked state of each object cell. This is necessary because filtering the grid * causes marked cells to lose their state.\n */\n @State() markedObjectsSet: Set<string> = new Set<string>([]);\n @Watch(\"markedObjectsSet\")\n markedObjectsSetChanged(newMarkedObjectsSet: Set<string>) {\n this.atLeastOneObjectIsChecked = newMarkedObjectsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of the objects that have been updated already.\n */\n @State() alreadyUpdatedObjectsIdsSet: Set<string> = new Set<string>([]);\n @Watch(\"alreadyUpdatedObjectsIdsSet\")\n alreadyUpdatedObjectsIdsSetChanged(newUpdatedObjectsIdsSet: Set<string>) {\n const pendingIdsSetAndUpdatedIdsSetAreEqual = areSetsEqual(\n newUpdatedObjectsIdsSet,\n this.pendingIdsSet\n );\n\n this.allPendingAreUpdated =\n pendingIdsSetAndUpdatedIdsSetAreEqual && this.pendingIdsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of all the pending objects. Used to quickly determine if the selected rows belong\n * to \"pending\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() pendingIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the id's of all the ignored objects. Used to quickly determine if the selected rows belong\n * to \"ignored\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() ignoredIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A map that holds object messages, after trying to update ('info' | ‘success’ | 'warning' | 'error')\n */\n @State() objectsMessagesDataMap: Map<string, MessageData[]> = new Map();\n\n /**\n * Set to true when objects are being mered. This helps disabling controls until all objects are done.\n */\n @State() updating: boolean = false;\n\n // - - - - - - - - - - - - -\n // State Update\n // - - - - - - - - - - - - -\n\n /**\n * A boolean that indicates if all the pending objects, have been updated\n * already.\n */\n @State() allPendingAreUpdated: boolean = false;\n\n /**\n * The \"KB Properties\" checkbox value\n */\n @State() kbPropertiesChecked: boolean = false;\n\n /**\n * The combobox model for the types filter.\n */\n @State() typesComboBoxModel: ComboBoxModel;\n\n /**\n * The selected type\n */\n @State() selectedType: string;\n\n /**\n * A map that holds the current update objects states (\"inserted\" | \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" | \"update\")\n */\n @State() objectsStatusMap: Map<string, StatusInternal> = new Map();\n @Watch(\"objectsStatusMap\")\n objectsStatusMapChanged(newObjectsStatusMap: Map<string, StatusInternal>) {\n const someObjectIsUpdating = [...newObjectsStatusMap.entries()].find(\n ([, state]) => state === \"updating\"\n );\n\n if (!someObjectIsUpdating) {\n this.updating = false;\n }\n }\n\n // - - - - - - - - - - - - -\n // Properties Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when user activates the context menu on any of the grids.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * All objects (\"pending for update\" and \"ignored objects\") before \"state\" filter\n */\n @State() pendingAndIgnored: UpdateData = {\n pendingForUpdate: [],\n ignoredObjects: []\n };\n @Watch(\"pendingAndIgnored\")\n pendingAndIgnoredChanged() {\n this.pendingIdsSet.clear(); // before pendingIdsSet.add\n this.ignoredIdsSet.clear(); // before pendingIdsSet.add\n this.objectsMessagesDataMap = new Map();\n this.alreadyUpdatedObjectsIdsSet = new Set();\n this.markedObjectsSet = new Set(); // before #markPendingObjects\n\n this.pendingAndIgnored.pendingForUpdate.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n\n this.pendingAndIgnored.ignoredObjects.forEach(ignored => {\n this.ignoredIdsSet.add(ignored.id);\n });\n\n this.#markPendingObjects(); // after pendingIdsSet.add and ignoredIdsSet.add\n this.#setInitialObjectsStatus(); // after pendingIdsSet.add and ignoredIdsSet.add\n\n this.#applyClientFilter();\n }\n\n /**\n * Pending objects after \"action\" filter\n */\n @State() pendingObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Ignored objects after \"action\" filter\n */\n @State() ignoredObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Callback invoked to return the list of data types loaded from file or url.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Callback invoked to return information of a Font type of data.\n */\n @Prop() readonly pendingItemsCheckedCallback!: PendingItemsCheckedCallback;\n\n /**\n * Possible values for type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * If true, the \"Action\" column will display a button instead of a pill, only when the action is\n */\n @Prop() readonly updatePillAsButton: boolean = false;\n\n // - - - - - - - - - - - - -\n // Properties Update\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when the update process is to be started (’Update’ button).\n */\n @Prop() readonly updateCallback!: UpdateCallback;\n\n /**\n * Callback invoked when user clicks in server url of Update From group.\n */\n @Prop() readonly openServerCallback!: () => Promise<void>;\n\n /**\n * Information to show in Update From group.\n */\n @Prop() readonly updateFrom: UpdateFromData;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Initiate \"actions\" combo box filter\n this.#actionsComboBoxModel = [\n {\n caption: this.#componentLocale.actions.allActions,\n value: \"all-actions\"\n },\n {\n caption: this.#componentLocale.actions.insert,\n value: \"inserted\"\n },\n {\n caption: this.#componentLocale.actions.modify,\n value: \"modified\"\n },\n {\n caption: this.#componentLocale.actions.modifyWithConflicts,\n value: \"modified-with-conflicts\"\n },\n {\n caption: this.#componentLocale.actions.delete,\n value: \"deleted\"\n }\n ];\n\n // Set type initial value\n this.selectedType = this.types[0]?.id;\n\n this.typesComboBoxModel = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n await this.#loadData(true);\n\n // initialize \"allPendingAreUpdated\"\n this.alreadyUpdatedObjectsIdsSetChanged(this.alreadyUpdatedObjectsIdsSet);\n }\n\n /**\n * Used by the host to instruct the component to force a data reload in the grids.\n */\n @Method()\n async reload() {\n this.#loadData(true);\n }\n\n #updateCheckedClickedHandler = async () => {\n this.#updateObjectsHandler([...this.markedObjectsSet]);\n };\n\n #reloadClickedHandler = async () => {\n this.#loadData(true);\n };\n\n #updateObjectsHandler = async (selection: string[]) => {\n this.#rowCheckedChangedByTheUser = false;\n this.updating = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"updating\");\n });\n\n const updateResult = await this.updateCallback(selection);\n updateResult.forEach(async objectResult => {\n const messages = objectResult.messages;\n if (messages.length) {\n this.objectsMessagesDataMap.set(objectResult.id, objectResult.messages);\n } else {\n // clear messages\n this.objectsMessagesDataMap.delete(objectResult.id);\n }\n if (objectResult.result === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet = new Set(\n this.alreadyUpdatedObjectsIdsSet\n ).add(objectResult.id);\n\n this.objectsStatusMap.set(objectResult.id, \"updated\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n this.updating = false;\n };\n\n #renderActionCellContent = (\n action: Action\n ): JSX.Element[] | null | string => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (action === \"deleted\") {\n icon = SUBSTRACT_ICON;\n caption = this.#componentLocale.actions.delete;\n iconColor = \"--mer-icon__error\";\n } else if (action === \"inserted\") {\n icon = ADD_ICON;\n caption = this.#componentLocale.actions.insert;\n iconColor = \"--mer-icon__success\";\n } else if (action === \"modified\") {\n icon = EDITED_ICON;\n caption = this.#componentLocale.actions.modify;\n iconColor = \"--mer-icon__warning\";\n } else if (action === \"modified-with-conflicts\") {\n icon = WARNING_ICON;\n caption = this.#componentLocale.actions.modifyWithConflicts;\n iconColor = \"--mer-icon__warning\";\n } else if (!action) {\n // proably is \"ignored\"\n return null;\n }\n\n return (\n <span class=\"custom-icon-text-wrapper\">\n <ch-image\n type=\"mask\"\n class=\"icon-md\"\n src={icon}\n style={{ backgroundColor: `var(${iconColor})` }}\n ></ch-image>\n {`${caption}`}\n </span>\n );\n };\n\n #updateSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n const newobjectsStatusMap = new Map(this.objectsStatusMap);\n newobjectsStatusMap.set(objectId, \"updating\");\n this.objectsStatusMap = newobjectsStatusMap;\n this.#updateObjectsHandler([objectId]);\n };\n\n #renderObjectStatus = (objectId: string): JSX.Element[] => {\n const status = this.objectsStatusMap.get(objectId);\n\n const caption =\n status === \"pending\" && this.updatePillAsButton\n ? this.#componentLocale.status.update\n : this.#componentLocale.status[status];\n if (status === \"updating\") {\n return <span class=\"updating-spinner-caption\">{caption}</span>;\n }\n const classes = `pill pill--${status}`;\n if (this.updatePillAsButton && status === \"pending\") {\n return (\n <button\n class=\"button-secondary pill pill--update\"\n onClick={this.#updateSingleObject(objectId)}\n >\n {caption}\n </button>\n );\n } else {\n return <span class={classes}>{caption}</span>;\n }\n };\n\n #renderRows = (type: UpdateSourceType): JSX.Element[] => {\n let objects: ModifiedObject[];\n if (type === \"pending\") {\n objects = this.pendingObjectsAfterActionFilter;\n } else if (type === \"ignored\") {\n objects = this.ignoredObjectsAfterActionFilter;\n }\n\n return objects.map(object => {\n const objectType: ObjectType = {\n id: object.id,\n icon: object.typeIcon,\n name: object.type\n };\n\n const alreadyUpdated = this.alreadyUpdatedObjectsIdsSet.has(object.id);\n const hideCheckbox = alreadyUpdated || type === \"ignored\";\n\n const marked = this.markedObjectsSet.has(object.id);\n\n const messages = this.objectsMessagesDataMap.get(object.id);\n\n return (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n key={object.id}\n rowid={object.id}\n ref={(el: HTMLElement) =>\n marked && el?.setAttribute(\"marked\", \"true\")\n }\n >\n <ch-tabular-grid-cell\n cell-type=\"rich\"\n row-selector=\"true\"\n class={{\n \"tabular-grid-cell\": true,\n \"no-checkbox-custom-selector\": hideCheckbox\n }}\n size=\"max-content\"\n >\n {object.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(objectType)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {object.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.modifiedOn)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderActionCellContent(object.action)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {this.#renderObjectStatus(object.id)}\n </ch-tabular-grid-cell>\n\n {messages?.length && (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty\n class={{\n \"tabular-grid-rowset-empty\": true\n }}\n >\n <ul class=\"messages-list\">\n {messages.map(message => {\n let MESSAGE_ICON;\n if (message.type === \"error\") {\n MESSAGE_ICON = ERROR_ICON;\n } else if (message.type === \"warning\") {\n MESSAGE_ICON = WARNING_ICON;\n } else if (message.type === \"success\") {\n MESSAGE_ICON = SUCCESS_ICON;\n } else {\n // info\n MESSAGE_ICON = INFO_ICON;\n }\n\n return (\n <li class=\"message-description\">\n <ch-image\n class=\"icon-md message-icon\"\n src={MESSAGE_ICON}\n ></ch-image>\n {message.text}\n </li>\n );\n })}\n </ul>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid-row>\n );\n });\n };\n\n #rowMarkingChangedHandler = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const markedRowsIds = event.detail.rowsId;\n this.markedObjectsSet = new Set(\n markedRowsIds.filter(\n markedObjectId => !this.alreadyUpdatedObjectsIdsSet.has(markedObjectId)\n )\n );\n\n if (this.#rowCheckedChangedByTheUser) {\n this.#updatePendingCheckedItems(event);\n }\n };\n\n #updatePendingCheckedItems = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n\n const pendingItemCheckedResult = await this.pendingItemsCheckedCallback({\n itemsChecked: addedRowsIds,\n itemsUnchecked: removedRowsId\n });\n\n if (pendingItemCheckedResult === undefined) {\n // undo check/uncheck\n await this.#revertPendingCommitsCheckboxes(addedRowsIds, removedRowsId);\n } else {\n await this.#togglePendingCommitsCheckboxes(pendingItemCheckedResult);\n }\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = event.detail as string;\n this.#loadData();\n };\n\n // Local Methods Update\n\n #actionChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedAction = event.detail as ActionForFilter;\n this.#loadData();\n };\n\n #typeChangedHandler = async (event: CustomEvent<string> | InputEvent) => {\n this.selectedType = event.detail as string;\n this.#loadData();\n };\n\n #setInitialObjectsStatus = (): void => {\n this.pendingAndIgnored.pendingForUpdate.forEach(pendingObject => {\n const status: StatusInternal =\n (pendingObject.status as Status) ?? \"pending\";\n\n this.objectsStatusMap.set(pendingObject.id, status);\n if (status === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet.add(pendingObject.id);\n }\n });\n this.pendingAndIgnored.ignoredObjects.forEach(ignoredObject => {\n const status: StatusInternal =\n (ignoredObject.status as Status) ?? \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (forceLoad: boolean = false): Promise<void> => {\n const filters: FiltersData = {\n search: this.searchValue,\n type: this.selectedType,\n kbProperties: this.kbPropertiesChecked,\n action: this.selectedAction\n };\n\n try {\n this.loading = true;\n this.objectsMessagesDataMap.clear();\n\n this.pendingAndIgnored = await this.loadCallback(filters, forceLoad);\n this.#setInitialObjectsStatus();\n\n // Is is required to mark/check all objects after loadCallback.\n this.#markPendingObjects();\n } catch (error) {\n // Error handling for update operation\n } finally {\n this.loading = false;\n }\n };\n\n /**\n * Marks all pending objects that have not been committed yet.\n *\n * Iterates through all pending object IDs and adds them to the marked objects set\n * if they are not already in the committed objects set. This effectively identifies\n * and marks all the pending objects that still need to be processed.\n **/\n #markPendingObjects = () => {\n for (const pendingId of this.pendingIdsSet) {\n if (!this.alreadyUpdatedObjectsIdsSet.has(pendingId)) {\n this.markedObjectsSet = new Set([...this.markedObjectsSet, pendingId]);\n }\n }\n };\n\n #applyClientFilter = () => {\n // this.pendingObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.pendingForUpdate\n // );\n this.pendingObjectsAfterActionFilter =\n this.pendingAndIgnored.pendingForUpdate;\n // this.ignoredObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.ignoredObjects\n // );\n this.ignoredObjectsAfterActionFilter =\n this.pendingAndIgnored.ignoredObjects;\n };\n\n // #filteredObjects = (objects: ModifiedObject[]): ModifiedObject[] => {\n // let filtered = objects;\n\n // // name or description\n // if (this.searchValue.length) {\n // filtered = filtered.filter(object => {\n // const nameFiltered = object.name\n // .toLowerCase()\n // .includes(this.searchValue.toLowerCase());\n\n // const descriptionFiltered = object.description\n // .toLowerCase()\n // .includes(this.searchValue.toLowerCase());\n\n // return nameFiltered || descriptionFiltered;\n // });\n // }\n\n // return filtered;\n // };\n\n #onRowContextMenuHandler =\n () => async (ev: CustomEvent<TabularGridRowContextMenuEvent>) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const selection = await this.#chGridPendingForUpdateEl.getSelectedRows();\n\n const selectedRowId = (\n await this.#chGridPendingForUpdateEl.getSelectedCell()\n ).rowId;\n\n const source: UpdateSourceType = this.pendingIdsSet.has(selectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n let filteredSelection: string[] = [];\n // remove selected rows from the other source, if any.\n if (selection.length > 1 && source === \"pending\") {\n selection.forEach(async selectedRowId => {\n if (this.ignoredIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else if (selection.length > 1 && source === \"ignored\") {\n selection.forEach(async selectedRowId => {\n if (this.pendingIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else {\n filteredSelection = selection;\n }\n\n await this.contextMenuCallback(source, {\n selection: filteredSelection,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n #revertPendingCommitsCheckboxes = async (\n addedRowsIds: string[],\n removedRowsId: string[]\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n for (const rowId of addedRowsIds) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n for (const rowId of removedRowsId) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n }\n };\n\n #togglePendingCommitsCheckboxes = async (\n itemsToToggle: ItemsCheckedResult\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n const itemsToCheck: string[] = itemsToToggle.itemsToCheck;\n const itemsToUncheck: string[] = itemsToToggle.itemsToUncheck;\n // check\n for (const rowId of itemsToCheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n // uncheck\n for (const rowId of itemsToUncheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n }\n };\n\n #kbPropertiesChangedHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.kbPropertiesChecked = event.detail === CHECKBOX_CHECKED_VALUE;\n this.#loadData(true);\n };\n\n #sortTabularGridColumnCallback = (\n e: CustomEvent<TabularGridColumnSortChangedEvent>\n ) => {\n const columnId = e.detail.columnId;\n\n let objectProperty;\n let dateType: SortTabularGridColumnDataType = \"string\";\n if (columnId === COLUMNS_IDS.lastSynchronized) {\n dateType = \"dateString\";\n }\n\n this.pendingObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.pendingObjectsAfterActionFilter,\n dateType,\n objectProperty\n )\n ];\n this.ignoredObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.ignoredObjectsAfterActionFilter,\n dateType,\n objectProperty\n )\n ];\n };\n\n /**\n * WA: Ignored objects must always remain unchecked.\n * Because `tabular-grid` selects all rows when the checkbox column is toggled,\n * we need to manually unselect the ignored IDs. // TODO: Move this function\n * to common\n */\n #columnSelectorClickedCallback = async (\n e: CustomEvent<TabularGridColumnSelectorClickedEvent>\n ) => {\n const allRowsChecked = e.detail;\n if (allRowsChecked) {\n const markedRowsIds =\n await this.#chGridPendingForUpdateEl.getMarkedRows();\n const ignoredMarkedRowsIds = markedRowsIds.filter(rowId => {\n return this.ignoredIdsSet.has(rowId);\n });\n if (ignoredMarkedRowsIds.length) {\n uncheckIgnoredObjects(\n ignoredMarkedRowsIds,\n this.#chGridPendingForUpdateEl\n );\n }\n }\n };\n\n render() {\n const disableControls = this.updating || this.loading;\n const gridIsEmpty =\n this.pendingObjectsAfterActionFilter.length === 0 &&\n this.ignoredObjectsAfterActionFilter.length === 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header spacing-body-inline spacing-body-block-start\">\n <div\n // header details\n class=\"header__detail header__detail-1\"\n >\n <p class=\"detail__heading-genexus-server subtitle-semi-bold-s\">\n {this.#componentLocale.commitDetail.title}\n </p>\n <div\n // genexus server\n class=\"detail__genexus-server field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.genexusServer}\n </span>\n <button\n class=\"detail__link body-regular-s\"\n onClick={this.openServerCallback}\n >\n {this.updateFrom ? this.updateFrom.serverUrl : \"\"}\n </button>\n </div>\n\n <div\n // knowledge base\n class=\"detail__knowledge-base field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.knowledgeBase}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.kbName : \"\"}\n </p>\n </div>\n\n <div\n // version\n class=\"detail__version field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.version}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.versionName : \"\"}\n </p>\n </div>\n\n <div\n // last full update\n class=\"detail__last-full-update field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.lastFullUpdate}\n </span>\n <p class=\"body-regular-s\">\n {formatDate(this.updateFrom.lastFullUpdate)}\n </p>\n </div>\n </div>\n </header>\n\n <div class=\"filter-container spacing-body-inline\">\n <div class=\"filter\">\n <ch-edit\n // search\n class=\"input filter__search\"\n disabled={disableControls}\n startImgSrc={SEARCH_ICON}\n accessibleName={\n this.#componentLocale.filter.searchAccessibleName\n }\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n debounce={config.inputDebounce}\n ></ch-edit>\n\n <ch-combo-box-render\n // types\n class=\"combo-box filter__types\"\n disabled={disableControls}\n model={this.typesComboBoxModel}\n value={this.selectedType}\n accessibleName={this.#componentLocale.filter.typeAccesibleName}\n placeholder={this.#componentLocale.filter.typePlaceholder}\n onInput={this.#typeChangedHandler}\n ></ch-combo-box-render>\n\n <ch-combo-box-render\n // actions\n class=\"combo-box filter__actions\"\n disabled={disableControls}\n model={this.#actionsComboBoxModel}\n value={this.selectedAction}\n onInput={this.#actionChangedHandler}\n accessibleName={\n this.#componentLocale.filter.actionAccesibleName\n }\n placeholder={this.#componentLocale.filter.actionPlaceholder}\n ></ch-combo-box-render>\n\n <ch-checkbox\n // kb properties\n class=\"checkbox filter__kb-properties\"\n caption={this.#componentLocale.filter.kbProperties}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n value={CHECKBOX_UNCHECKED_VALUE}\n onInput={this.#kbPropertiesChangedHandler}\n disabled={disableControls}\n />\n\n <div class=\"buttons-spacer filter__buttons\">\n <button\n // reload button\n class=\"button-secondary button-icon-and-text\"\n disabled={disableControls}\n onClick={this.#reloadClickedHandler}\n >\n <ch-image class=\"icon-md\" src={REFRESH_ICON}></ch-image>\n {this.#componentLocale.filter.reload}\n </button>\n <button\n // update button\n class=\"button-primary button-update\"\n disabled={!this.atLeastOneObjectIsChecked || disableControls}\n onClick={this.#updateCheckedClickedHandler}\n >\n {this.#componentLocale.filter.update}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"main spacing-body\">\n {!this.loading ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.updating,\n \"empty-result\": gridIsEmpty\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#onRowContextMenuHandler()}\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridPendingForUpdateEl = el)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.name}\n columnName={this.#componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={!this.allPendingAreUpdated}\n richRowSelectorMode=\"mark\"\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n onColumnSelectorClicked={\n this.#columnSelectorClickedCallback\n }\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.type}\n columnName={this.#componentLocale.objects.type}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.description}\n columnName={this.#componentLocale.objects.description}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size={config.tabularGrid.colSize.description}\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.modifiedOn}\n columnName={this.#componentLocale.objects.modifiedOn}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.action}\n columnName={this.#componentLocale.objects.action}\n settingable={false}\n sortable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n // size of this column should the enough for the largest pill, and no more.\n // this prevents layout shifts when pills state changes.\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.status}\n columnName={this.#componentLocale.objects.status}\n settingable={false}\n sortable={false}\n size=\"100px\"\n />\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty\n ? [\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.pending}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"pending\")}\n </ch-tabular-grid-rowset>,\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.ignored}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"ignored\")}\n </ch-tabular-grid-rowset>\n ]\n : null}\n\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {gridIsEmpty && (\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n class=\"empty-state\"\n isAnimated\n stateIconSrc={FILTER_ICON}\n stateTitle=\"No object matched your filter\"\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n )}\n </ch-tabular-grid-rowset>\n </ch-tabular-grid>\n ) : (\n <gx-ide-loader\n cancelLabel={this.#componentLocale.loader.cancelLabel}\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n show\n class=\"loader\"\n ></gx-ide-loader>\n )}\n </div>\n </section>\n </Host>\n );\n }\n}\n\n// - - - - - - - - - - - - -\n// Types from Update\n// - - - - - - - - - - - - -\n\nexport type Status = \"pending\" | \"updated\" | \"ignored\";\n\nexport type StatusInternal = Status | \"updating\" | \"ignored\";\n\nexport type Action =\n | \"inserted\"\n | \"modified\"\n | \"modified-with-conflicts\"\n | \"deleted\";\n\ntype ActionForFilter = Action | \"all-actions\";\n\nexport type ContextMenuCallback = (\n source: UpdateSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type PendingItemsCheckedCallback = (\n pendingItemsCheckedState: ItemsCheckedState\n) => Promise<ItemsCheckedResult | undefined>;\n\nexport type UpdateSourceType = \"pending\" | \"ignored\";\n\nexport type LoadCallback = (\n filters: FiltersData,\n forceLoad: boolean\n) => Promise<UpdateData>;\n\nexport interface ModifiedObject {\n id: string;\n typeIcon: string;\n action?: Action;\n name: string;\n type: string;\n description?: string;\n modifiedOn?: Date;\n status?: Status;\n}\nexport interface UpdateData {\n pendingForUpdate: ModifiedObject[];\n ignoredObjects: ModifiedObject[];\n}\n\nexport interface FiltersData {\n search: string;\n type: string;\n kbProperties: boolean;\n action: ActionForFilter;\n}\n\nexport interface UpdateFromData {\n serverUrl: string;\n kbName: string;\n versionName: string;\n lastFullUpdate: Date;\n}\n\nexport type UpdateCallback = (\n selection: string[]\n) => Promise<UpdateResultData[]>;\n\nexport interface UpdateResultData {\n id: string;\n result: Status;\n messages: MessageData[];\n}\n\nexport interface MessageData {\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n text: string;\n}\n"],"mappings":"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"}
|
|
@@ -2317,6 +2317,7 @@ const oe = class {
|
|
|
2317
2317
|
this.kbFilterValue = "";
|
|
2318
2318
|
this.loading = true;
|
|
2319
2319
|
this.createKBCallback = undefined;
|
|
2320
|
+
this.hideOpenExistingProject = false;
|
|
2320
2321
|
this.kbs = undefined;
|
|
2321
2322
|
this.kbsFilterThreshold = undefined;
|
|
2322
2323
|
this.openKbCallback = undefined;
|
|
@@ -2343,10 +2344,7 @@ const oe = class {
|
|
|
2343
2344
|
render() {
|
|
2344
2345
|
var n, a;
|
|
2345
2346
|
this.loading = (!this.kbs || ((n = this.kbs) === null || n === void 0 ? void 0 : n.length) === 0) && !this.secondarySection;
|
|
2346
|
-
const i = this.
|
|
2347
|
-
const o = this.openKbCallback;
|
|
2348
|
-
const r = ((a = this.samples) === null || a === void 0 ? void 0 : a.length) && this.openSampleCallback;
|
|
2349
|
-
const s = i || o || r;
|
|
2347
|
+
const i = ((a = this.samples) === null || a === void 0 ? void 0 : a.length) && this.openSampleCallback;
|
|
2350
2348
|
return e(t, {
|
|
2351
2349
|
class: "scrollable"
|
|
2352
2350
|
}, e("ch-theme", {
|
|
@@ -2363,9 +2361,9 @@ const oe = class {
|
|
|
2363
2361
|
class: "heading-5 section-create-new-kb__title"
|
|
2364
2362
|
}, En(this, Hn, "f").createKB.title), e("p", {
|
|
2365
2363
|
class: "body-regular-m"
|
|
2366
|
-
}, En(this, Hn, "f").createKB.description)),
|
|
2364
|
+
}, En(this, Hn, "f").createKB.description)), e("section", {
|
|
2367
2365
|
class: "section-create-new-kb__actions scrollable"
|
|
2368
|
-
},
|
|
2366
|
+
}, e("article", {
|
|
2369
2367
|
// create project
|
|
2370
2368
|
class: "card card-filled"
|
|
2371
2369
|
}, e("header", {
|
|
@@ -2381,7 +2379,7 @@ const oe = class {
|
|
|
2381
2379
|
}, e("button", {
|
|
2382
2380
|
class: "button-primary",
|
|
2383
2381
|
onClick: En(this, Jn, "f").call(this, false)
|
|
2384
|
-
}, En(this, Hn, "f").createProject.buttonCaption))),
|
|
2382
|
+
}, En(this, Hn, "f").createProject.buttonCaption))), !this.hideOpenExistingProject ? e("article", {
|
|
2385
2383
|
// open existing project
|
|
2386
2384
|
class: "card-filled"
|
|
2387
2385
|
}, e("header", {
|
|
@@ -2397,7 +2395,7 @@ const oe = class {
|
|
|
2397
2395
|
}, e("button", {
|
|
2398
2396
|
class: "button-secondary cancel-btn",
|
|
2399
2397
|
onClick: En(this, Jn, "f").call(this, true)
|
|
2400
|
-
}, En(this, Hn, "f").openExistingProject.buttonCaption))),
|
|
2398
|
+
}, En(this, Hn, "f").openExistingProject.buttonCaption))) : null, i ? e("article", {
|
|
2401
2399
|
// view samples
|
|
2402
2400
|
class: "card-filled"
|
|
2403
2401
|
}, e("header", {
|
|
@@ -2446,4 +2444,4 @@ Vn = new WeakMap, Kn = new WeakMap, Gn = new WeakMap, qn = new WeakSet, Bn = fun
|
|
|
2446
2444
|
oe.style = Nn;
|
|
2447
2445
|
|
|
2448
2446
|
export { oe as gx_ide_start_page };
|
|
2449
|
-
//# sourceMappingURL=p-
|
|
2447
|
+
//# sourceMappingURL=p-c5eac770.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["minutesInMonth","minutesInDay","constructFromSymbol","Symbol","for","constructFrom","date","value","Date","constructor","toDate","argument","context","defaultOptions","getDefaultOptions","startOfWeek","options","weekStartsOn","locale","_date","in","day","getDay","diff","setDate","getDate","setHours","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","getMonth","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","normalizeDates","dates","normalize","bind","find","map","compareAsc","dateLeft","dateRight","constructNow","now","differenceInCalendarMonths","laterDate","earlierDate","laterDate_","earlierDate_","yearsDiff","monthsDiff","getRoundingMethod","method","number","round","Math","trunc","result","differenceInMilliseconds","endOfDay","endOfMonth","month","setFullYear","isLastDayOfMonth","differenceInMonths","workingLaterDate","sign","difference","abs","setMonth","isLastMonthNotFull","differenceInSeconds","roundingMethod","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatDistance","token","count","tokenValue","replace","toString","addSuffix","comparison","buildFormatLongFn","args","width","String","defaultWidth","format","formats","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatLong","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","formatRelative","_baseDate","_options","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","values","index","argumentCallback","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","am","pm","midnight","noon","morning","afternoon","evening","night","formattingDayPeriodValues","ordinalNumber","dirtyNumber","Number","rem100","localize","era","quarter","dayPeriod","buildMatchFn","string","matchPattern","matchPatterns","defaultMatchWidth","matchResult","match","matchedString","parsePatterns","defaultParseWidth","key","Array","isArray","findIndex","pattern","test","findKey","valueCallback","rest","slice","length","object","predicate","Object","prototype","hasOwnProperty","call","undefined","array","buildMatchPatternFn","parseResult","parsePattern","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","parseInt","enUS","code","firstWeekContainsDate","defaultLocale","minutesInAlmostTwoDays","isNaN","RangeError","localizeOptions","assign","seconds","offsetInSeconds","minutes","months","includeSeconds","hours","days","nearestMonth","monthsSinceStartOfYear","years","formatDistanceToNow","isSameWeek","oneWithSuffix","otherWithSuffix","unit","ja","checkWeek","baseDate","baseFormat","getTime","zhCN","startPageCss","LANGS_DATE_FNS_MAP","en","DETAIL_ICON","getIconPath","category","name","colorType","FILTER_ICON","KB_DEFAULT_ICON","SEARCH_ICON","PROJECT_NAME_PLACEHOLDER","CSS_BUNDLES","GxIdeStartPage","_GxIdeStartPage_componentLocale","set","this","_GxIdeStartPage_userLanguage","_GxIdeStartPage_createKBClickHandler","fromServer","event","stopPropagation","createKBCallback","_GxIdeStartPage_filterKbs","kbFilterValue","detail","_GxIdeStartPage_openKbClickHandler","kbId","openKbCallback","_GxIdeStartPage_renderKbsSection","hideKbsFilter","kbs","kbsFilterThreshold","kbsListEmpty","filteredKbs","contentToRender","__classPrivateFieldGet","_GxIdeStartPage_renderKbs","h","isAnimated","stateIconSrc","stateTitle","recentKBs","noMatches","class","htmlFor","title","id","input","startImgSrc","placeholder","filterKbsPlaceholder","onInput","disabled","scrollable","_a","kb","relativeDate","lastOpenedDate","dateAsDate","dateFormated","formatDate","kbIcon","icon","src","onClick","opened","_GxIdeStartPage_renderSecondarySection","secondarySection","multipleCards","cards","card","ariaLabel","description","paragraph","action","callback","caption","kbFilterValueChanged","newKbFilterValue","filter","toLowerCase","includes","toLocaleLowerCase","kbsChanged","newKbs","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","userLanguage","document","documentElement","lang","render","loading","renderViewSamplesCard","_b","samples","openSampleCallback","Host","model","createKB","createProject","buttonCaption","hideOpenExistingProject","openExistingProject","viewSamples","sample","open","loaderTitle","loaderDescription","show","_GxIdeStartPage_instances","_GxIdeStartPage_evaluateContentToRender"],"sources":["node_modules/date-fns/constants.js","node_modules/date-fns/constructFrom.js","node_modules/date-fns/toDate.js","node_modules/date-fns/_lib/defaultOptions.js","node_modules/date-fns/startOfWeek.js","node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","node_modules/date-fns/_lib/normalizeDates.js","node_modules/date-fns/compareAsc.js","node_modules/date-fns/constructNow.js","node_modules/date-fns/differenceInCalendarMonths.js","node_modules/date-fns/_lib/getRoundingMethod.js","node_modules/date-fns/differenceInMilliseconds.js","node_modules/date-fns/endOfDay.js","node_modules/date-fns/endOfMonth.js","node_modules/date-fns/isLastDayOfMonth.js","node_modules/date-fns/differenceInMonths.js","node_modules/date-fns/differenceInSeconds.js","node_modules/date-fns/locale/en-US/_lib/formatDistance.js","node_modules/date-fns/locale/_lib/buildFormatLongFn.js","node_modules/date-fns/locale/en-US/_lib/formatLong.js","node_modules/date-fns/locale/en-US/_lib/formatRelative.js","node_modules/date-fns/locale/_lib/buildLocalizeFn.js","node_modules/date-fns/locale/en-US/_lib/localize.js","node_modules/date-fns/locale/_lib/buildMatchFn.js","node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","node_modules/date-fns/locale/en-US/_lib/match.js","node_modules/date-fns/locale/en-US.js","node_modules/date-fns/formatDistance.js","node_modules/date-fns/formatDistanceToNow.js","node_modules/date-fns/isSameWeek.js","node_modules/date-fns/locale/ja/_lib/formatDistance.js","node_modules/date-fns/locale/ja/_lib/formatLong.js","node_modules/date-fns/locale/ja/_lib/formatRelative.js","node_modules/date-fns/locale/ja/_lib/localize.js","node_modules/date-fns/locale/ja/_lib/match.js","node_modules/date-fns/locale/ja.js","node_modules/date-fns/locale/zh-CN/_lib/formatDistance.js","node_modules/date-fns/locale/zh-CN/_lib/formatLong.js","node_modules/date-fns/locale/zh-CN/_lib/formatRelative.js","node_modules/date-fns/locale/zh-CN/_lib/localize.js","node_modules/date-fns/locale/zh-CN/_lib/match.js","node_modules/date-fns/locale/zh-CN.js","src/components/start-page/start-page.scss?tag=gx-ide-start-page&encapsulation=shadow","src/components/start-page/start-page.tsx"],"sourcesContent":["/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport function compareAsc(dateLeft, dateRight) {\n const diff = +toDate(dateLeft) - +toDate(dateRight);\n\n if (diff < 0) return -1;\n else if (diff > 0) return 1;\n\n // Return 0 if diff is 0; return NaN if diff is NaN\n return diff;\n}\n\n// Fallback for modularized imports:\nexport default compareAsc;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name constructNow\n * @category Generic Helpers\n * @summary Constructs a new current date using the passed value constructor.\n * @pure false\n *\n * @description\n * The function constructs a new current date using the constructor from\n * the reference date. It helps to build generic functions that accept date\n * extensions and use the current date.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @param date - The reference date to take constructor from\n *\n * @returns Current date initialized using the given date constructor\n *\n * @example\n * import { constructNow, isSameDay } from 'date-fns'\n *\n * function isToday<DateType extends Date>(\n * date: DateArg<DateType>,\n * ): boolean {\n * // If we were to use `new Date()` directly, the function would behave\n * // differently in different timezones and return false for the same date.\n * return isSameDay(date, constructNow(date));\n * }\n */\nexport function constructNow(date) {\n return constructFrom(date, Date.now());\n}\n\n// Fallback for modularized imports:\nexport default constructNow;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","export function getRoundingMethod(method) {\n return (number) => {\n const round = method ? Math[method] : Math.trunc;\n const result = round(number);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n };\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { endOfDay } from \"./endOfDay.js\";\nimport { endOfMonth } from \"./endOfMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport function isLastDayOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n return +endOfDay(_date, options) === +endOfMonth(_date, options);\n}\n\n// Fallback for modularized imports:\nexport default isLastDayOfMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.js\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.js\";\n\n/**\n * The {@link differenceInMonths} function options.\n */\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport function differenceInMonths(laterDate, earlierDate, options) {\n const [laterDate_, workingLaterDate, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n laterDate,\n earlierDate,\n );\n\n const sign = compareAsc(workingLaterDate, earlierDate_);\n const difference = Math.abs(\n differenceInCalendarMonths(workingLaterDate, earlierDate_),\n );\n\n if (difference < 1) return 0;\n\n if (workingLaterDate.getMonth() === 1 && workingLaterDate.getDate() > 27)\n workingLaterDate.setDate(30);\n\n workingLaterDate.setMonth(workingLaterDate.getMonth() - sign * difference);\n\n let isLastMonthNotFull = compareAsc(workingLaterDate, earlierDate_) === -sign;\n\n if (\n isLastDayOfMonth(laterDate_) &&\n difference === 1 &&\n compareAsc(laterDate_, earlierDate_) === 1\n ) {\n isLastMonthNotFull = false;\n }\n\n const result = sign * (difference - +isLastMonthNotFull);\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInMonths;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(laterDate, earlierDate, options) {\n const diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { minutesInDay, minutesInMonth } from \"./constants.js\";\nimport { differenceInMonths } from \"./differenceInMonths.js\";\nimport { differenceInSeconds } from \"./differenceInSeconds.js\";\n\n/**\n * The {@link formatDistance} function options.\n */\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @param laterDate - The date\n * @param earlierDate - The date to compare with\n * @param options - An object with options\n *\n * @returns The distance in words\n *\n * @throws `date` must not be Invalid Date\n * @throws `baseDate` must not be Invalid Date\n * @throws `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\nexport function formatDistance(laterDate, earlierDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n const minutesInAlmostTwoDays = 2520;\n\n const comparison = compareAsc(laterDate, earlierDate);\n\n if (isNaN(comparison)) throw new RangeError(\"Invalid time value\");\n\n const localizeOptions = Object.assign({}, options, {\n addSuffix: options?.addSuffix,\n comparison: comparison,\n });\n\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n ...(comparison > 0 ? [earlierDate, laterDate] : [laterDate, earlierDate]),\n );\n\n const seconds = differenceInSeconds(earlierDate_, laterDate_);\n const offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(earlierDate_) -\n getTimezoneOffsetInMilliseconds(laterDate_)) /\n 1000;\n const minutes = Math.round((seconds - offsetInSeconds) / 60);\n let months;\n\n // 0 up to 2 mins\n if (minutes < 2) {\n if (options?.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance(\"lessThanXSeconds\", 5, localizeOptions);\n } else if (seconds < 10) {\n return locale.formatDistance(\"lessThanXSeconds\", 10, localizeOptions);\n } else if (seconds < 20) {\n return locale.formatDistance(\"lessThanXSeconds\", 20, localizeOptions);\n } else if (seconds < 40) {\n return locale.formatDistance(\"halfAMinute\", 0, localizeOptions);\n } else if (seconds < 60) {\n return locale.formatDistance(\"lessThanXMinutes\", 1, localizeOptions);\n } else {\n return locale.formatDistance(\"xMinutes\", 1, localizeOptions);\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance(\"lessThanXMinutes\", 1, localizeOptions);\n } else {\n return locale.formatDistance(\"xMinutes\", minutes, localizeOptions);\n }\n }\n\n // 2 mins up to 0.75 hrs\n } else if (minutes < 45) {\n return locale.formatDistance(\"xMinutes\", minutes, localizeOptions);\n\n // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance(\"aboutXHours\", 1, localizeOptions);\n\n // 1.5 hrs up to 24 hrs\n } else if (minutes < minutesInDay) {\n const hours = Math.round(minutes / 60);\n return locale.formatDistance(\"aboutXHours\", hours, localizeOptions);\n\n // 1 day up to 1.75 days\n } else if (minutes < minutesInAlmostTwoDays) {\n return locale.formatDistance(\"xDays\", 1, localizeOptions);\n\n // 1.75 days up to 30 days\n } else if (minutes < minutesInMonth) {\n const days = Math.round(minutes / minutesInDay);\n return locale.formatDistance(\"xDays\", days, localizeOptions);\n\n // 1 month up to 2 months\n } else if (minutes < minutesInMonth * 2) {\n months = Math.round(minutes / minutesInMonth);\n return locale.formatDistance(\"aboutXMonths\", months, localizeOptions);\n }\n\n months = differenceInMonths(earlierDate_, laterDate_);\n\n // 2 months up to 12 months\n if (months < 12) {\n const nearestMonth = Math.round(minutes / minutesInMonth);\n return locale.formatDistance(\"xMonths\", nearestMonth, localizeOptions);\n\n // 1 year up to max Date\n } else {\n const monthsSinceStartOfYear = months % 12;\n const years = Math.trunc(months / 12);\n\n // N years up to 1 years 3 months\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance(\"aboutXYears\", years, localizeOptions);\n\n // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance(\"overXYears\", years, localizeOptions);\n\n // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance(\"almostXYears\", years + 1, localizeOptions);\n }\n }\n}\n\n// Fallback for modularized imports:\nexport default formatDistance;\n","import { constructNow } from \"./constructNow.js\";\n\nimport { formatDistance } from \"./formatDistance.js\";\n\n/**\n * The {@link formatDistanceToNow} function options.\n */\n\n/**\n * @name formatDistanceToNow\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now | Result |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @param date - The given date\n * @param options - The object with options\n *\n * @returns The distance in words\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNow(\n * new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNow(\n * new Date(2015, 0, 1, 0, 0, 15),\n * {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNow(\n * new Date(2016, 0, 1),\n * {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNow(\n * new Date(2016, 7, 1),\n * {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nexport function formatDistanceToNow(date, options) {\n return formatDistance(date, constructNow(date), options);\n}\n\n// Fallback for modularized imports:\nexport default formatDistanceToNow;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link isSameWeek} function options.\n */\n\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week (and month and year)?\n *\n * @description\n * Are the given dates in the same week (and month and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same week (and month and year)\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n * weekStartsOn: 1\n * })\n * //=> false\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same week?\n * const result = isSameWeek(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport function isSameWeek(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return (\n +startOfWeek(laterDate_, options) === +startOfWeek(earlierDate_, options)\n );\n}\n\n// Fallback for modularized imports:\nexport default isSameWeek;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"1秒未満\",\n other: \"{{count}}秒未満\",\n oneWithSuffix: \"約1秒\",\n otherWithSuffix: \"約{{count}}秒\",\n },\n\n xSeconds: {\n one: \"1秒\",\n other: \"{{count}}秒\",\n },\n\n halfAMinute: \"30秒\",\n\n lessThanXMinutes: {\n one: \"1分未満\",\n other: \"{{count}}分未満\",\n oneWithSuffix: \"約1分\",\n otherWithSuffix: \"約{{count}}分\",\n },\n\n xMinutes: {\n one: \"1分\",\n other: \"{{count}}分\",\n },\n\n aboutXHours: {\n one: \"約1時間\",\n other: \"約{{count}}時間\",\n },\n\n xHours: {\n one: \"1時間\",\n other: \"{{count}}時間\",\n },\n\n xDays: {\n one: \"1日\",\n other: \"{{count}}日\",\n },\n\n aboutXWeeks: {\n one: \"約1週間\",\n other: \"約{{count}}週間\",\n },\n\n xWeeks: {\n one: \"1週間\",\n other: \"{{count}}週間\",\n },\n\n aboutXMonths: {\n one: \"約1か月\",\n other: \"約{{count}}か月\",\n },\n\n xMonths: {\n one: \"1か月\",\n other: \"{{count}}か月\",\n },\n\n aboutXYears: {\n one: \"約1年\",\n other: \"約{{count}}年\",\n },\n\n xYears: {\n one: \"1年\",\n other: \"{{count}}年\",\n },\n\n overXYears: {\n one: \"1年以上\",\n other: \"{{count}}年以上\",\n },\n\n almostXYears: {\n one: \"1年近く\",\n other: \"{{count}}年近く\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n options = options || {};\n\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n if (options.addSuffix && tokenValue.oneWithSuffix) {\n result = tokenValue.oneWithSuffix;\n } else {\n result = tokenValue.one;\n }\n } else {\n if (options.addSuffix && tokenValue.otherWithSuffix) {\n result = tokenValue.otherWithSuffix.replace(\"{{count}}\", String(count));\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n }\n\n if (options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return result + \"後\";\n } else {\n return result + \"前\";\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"y年M月d日EEEE\",\n long: \"y年M月d日\",\n medium: \"y/MM/dd\",\n short: \"y/MM/dd\",\n};\n\nconst timeFormats = {\n full: \"H時mm分ss秒 zzzz\",\n long: \"H:mm:ss z\",\n medium: \"H:mm:ss\",\n short: \"H:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} {{time}}\",\n long: \"{{date}} {{time}}\",\n medium: \"{{date}} {{time}}\",\n short: \"{{date}} {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"先週のeeeeのp\",\n yesterday: \"昨日のp\",\n today: \"今日のp\",\n tomorrow: \"明日のp\",\n nextWeek: \"翌週のeeeeのp\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) => {\n return formatRelativeLocale[token];\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"BC\", \"AC\"],\n abbreviated: [\"紀元前\", \"西暦\"],\n wide: [\"紀元前\", \"西暦\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"第1四半期\", \"第2四半期\", \"第3四半期\", \"第4四半期\"],\n};\n\nconst monthValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\n\n abbreviated: [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n ],\n\n wide: [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"],\n short: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"],\n abbreviated: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"],\n wide: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n abbreviated: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n wide: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n abbreviated: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n wide: {\n am: \"午前\",\n pm: \"午後\",\n midnight: \"深夜\",\n noon: \"正午\",\n morning: \"朝\",\n afternoon: \"午後\",\n evening: \"夜\",\n night: \"深夜\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, options) => {\n const number = Number(dirtyNumber);\n const unit = String(options?.unit);\n\n switch (unit) {\n case \"year\":\n return `${number}年`;\n case \"quarter\":\n return `第${number}四半期`;\n case \"month\":\n return `${number}月`;\n case \"week\":\n return `第${number}週`;\n case \"date\":\n return `${number}日`;\n case \"hour\":\n return `${number}時`;\n case \"minute\":\n return `${number}分`;\n case \"second\":\n return `${number}秒`;\n default:\n return `${number}`;\n }\n};\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => Number(quarter) - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^第?\\d+(年|四半期|月|週|日|時|分|秒)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(B\\.?C\\.?|A\\.?D\\.?)/i,\n abbreviated: /^(紀元[前後]|西暦)/i,\n wide: /^(紀元[前後]|西暦)/i,\n};\nconst parseEraPatterns = {\n narrow: [/^B/i, /^A/i],\n any: [/^(紀元前)/i, /^(西暦|紀元後)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^Q[1234]/i,\n wide: /^第[1234一二三四1234]四半期/i,\n};\nconst parseQuarterPatterns = {\n any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^([123456789]|1[012])/,\n abbreviated: /^([123456789]|1[012])月/i,\n wide: /^([123456789]|1[012])月/i,\n};\nconst parseMonthPatterns = {\n any: [\n /^1\\D/,\n /^2/,\n /^3/,\n /^4/,\n /^5/,\n /^6/,\n /^7/,\n /^8/,\n /^9/,\n /^10/,\n /^11/,\n /^12/,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[日月火水木金土]/,\n short: /^[日月火水木金土]/,\n abbreviated: /^[日月火水木金土]/,\n wide: /^[日月火水木金土]曜日/,\n};\nconst parseDayPatterns = {\n any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/],\n};\n\nconst matchDayPeriodPatterns = {\n any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^(A|午前)/i,\n pm: /^(P|午後)/i,\n midnight: /^深夜|真夜中/i,\n noon: /^正午/i,\n morning: /^朝/i,\n afternoon: /^午後/i,\n evening: /^夜/i,\n night: /^深夜/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n },\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ja/_lib/formatDistance.js\";\nimport { formatLong } from \"./ja/_lib/formatLong.js\";\nimport { formatRelative } from \"./ja/_lib/formatRelative.js\";\nimport { localize } from \"./ja/_lib/localize.js\";\nimport { match } from \"./ja/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Japanese locale.\n * @language Japanese\n * @iso-639-2 jpn\n * @author Thomas Eilmsteiner [@DeMuu](https://github.com/DeMuu)\n * @author Yamagishi Kazutoshi [@ykzts](https://github.com/ykzts)\n * @author Luca Ban [@mesqueeb](https://github.com/mesqueeb)\n * @author Terrence Lam [@skyuplam](https://github.com/skyuplam)\n * @author Taiki IKeda [@so99ynoodles](https://github.com/so99ynoodles)\n */\nexport const ja = {\n code: \"ja\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default ja;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"不到 1 秒\",\n other: \"不到 {{count}} 秒\",\n },\n\n xSeconds: {\n one: \"1 秒\",\n other: \"{{count}} 秒\",\n },\n\n halfAMinute: \"半分钟\",\n\n lessThanXMinutes: {\n one: \"不到 1 分钟\",\n other: \"不到 {{count}} 分钟\",\n },\n\n xMinutes: {\n one: \"1 分钟\",\n other: \"{{count}} 分钟\",\n },\n\n xHours: {\n one: \"1 小时\",\n other: \"{{count}} 小时\",\n },\n\n aboutXHours: {\n one: \"大约 1 小时\",\n other: \"大约 {{count}} 小时\",\n },\n\n xDays: {\n one: \"1 天\",\n other: \"{{count}} 天\",\n },\n\n aboutXWeeks: {\n one: \"大约 1 个星期\",\n other: \"大约 {{count}} 个星期\",\n },\n\n xWeeks: {\n one: \"1 个星期\",\n other: \"{{count}} 个星期\",\n },\n\n aboutXMonths: {\n one: \"大约 1 个月\",\n other: \"大约 {{count}} 个月\",\n },\n\n xMonths: {\n one: \"1 个月\",\n other: \"{{count}} 个月\",\n },\n\n aboutXYears: {\n one: \"大约 1 年\",\n other: \"大约 {{count}} 年\",\n },\n\n xYears: {\n one: \"1 年\",\n other: \"{{count}} 年\",\n },\n\n overXYears: {\n one: \"超过 1 年\",\n other: \"超过 {{count}} 年\",\n },\n\n almostXYears: {\n one: \"将近 1 年\",\n other: \"将近 {{count}} 年\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return result + \"内\";\n } else {\n return result + \"前\";\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"y'年'M'月'd'日' EEEE\",\n long: \"y'年'M'月'd'日'\",\n medium: \"yyyy-MM-dd\",\n short: \"yy-MM-dd\",\n};\n\nconst timeFormats = {\n full: \"zzzz a h:mm:ss\",\n long: \"z a h:mm:ss\",\n medium: \"a h:mm:ss\",\n short: \"a h:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} {{time}}\",\n long: \"{{date}} {{time}}\",\n medium: \"{{date}} {{time}}\",\n short: \"{{date}} {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","import { isSameWeek } from \"../../../isSameWeek.js\";\n\nfunction checkWeek(date, baseDate, options) {\n const baseFormat = \"eeee p\";\n\n if (isSameWeek(date, baseDate, options)) {\n return baseFormat; // in same week\n } else if (date.getTime() > baseDate.getTime()) {\n return \"'下个'\" + baseFormat; // in next week\n }\n return \"'上个'\" + baseFormat; // in last week\n}\n\nconst formatRelativeLocale = {\n lastWeek: checkWeek, // days before yesterday, maybe in this week or last week\n yesterday: \"'昨天' p\",\n today: \"'今天' p\",\n tomorrow: \"'明天' p\",\n nextWeek: checkWeek, // days after tomorrow, maybe in this week or next week\n other: \"PP p\",\n};\n\nexport const formatRelative = (token, date, baseDate, options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date, baseDate, options);\n }\n\n return format;\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"前\", \"公元\"],\n abbreviated: [\"前\", \"公元\"],\n wide: [\"公元前\", \"公元\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"第一季\", \"第二季\", \"第三季\", \"第四季\"],\n wide: [\"第一季度\", \"第二季度\", \"第三季度\", \"第四季度\"],\n};\n\nconst monthValues = {\n narrow: [\n \"一\",\n \"二\",\n \"三\",\n \"四\",\n \"五\",\n \"六\",\n \"七\",\n \"八\",\n \"九\",\n \"十\",\n \"十一\",\n \"十二\",\n ],\n\n abbreviated: [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n ],\n\n wide: [\n \"一月\",\n \"二月\",\n \"三月\",\n \"四月\",\n \"五月\",\n \"六月\",\n \"七月\",\n \"八月\",\n \"九月\",\n \"十月\",\n \"十一月\",\n \"十二月\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"],\n short: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"],\n abbreviated: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"],\n\n wide: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"上\",\n pm: \"下\",\n midnight: \"凌晨\",\n noon: \"午\",\n morning: \"早\",\n afternoon: \"下午\",\n evening: \"晚\",\n night: \"夜\",\n },\n abbreviated: {\n am: \"上午\",\n pm: \"下午\",\n midnight: \"凌晨\",\n noon: \"中午\",\n morning: \"早晨\",\n afternoon: \"中午\",\n evening: \"晚上\",\n night: \"夜间\",\n },\n wide: {\n am: \"上午\",\n pm: \"下午\",\n midnight: \"凌晨\",\n noon: \"中午\",\n morning: \"早晨\",\n afternoon: \"中午\",\n evening: \"晚上\",\n night: \"夜间\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"上\",\n pm: \"下\",\n midnight: \"凌晨\",\n noon: \"午\",\n morning: \"早\",\n afternoon: \"下午\",\n evening: \"晚\",\n night: \"夜\",\n },\n abbreviated: {\n am: \"上午\",\n pm: \"下午\",\n midnight: \"凌晨\",\n noon: \"中午\",\n morning: \"早晨\",\n afternoon: \"中午\",\n evening: \"晚上\",\n night: \"夜间\",\n },\n wide: {\n am: \"上午\",\n pm: \"下午\",\n midnight: \"凌晨\",\n noon: \"中午\",\n morning: \"早晨\",\n afternoon: \"中午\",\n evening: \"晚上\",\n night: \"夜间\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, options) => {\n const number = Number(dirtyNumber);\n\n switch (options?.unit) {\n case \"date\":\n return number.toString() + \"日\";\n case \"hour\":\n return number.toString() + \"时\";\n case \"minute\":\n return number.toString() + \"分\";\n case \"second\":\n return number.toString() + \"秒\";\n default:\n return \"第 \" + number.toString();\n }\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(第\\s*)?\\d+(日|时|分|秒)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(前)/i,\n abbreviated: /^(前)/i,\n wide: /^(公元前|公元)/i,\n};\nconst parseEraPatterns = {\n any: [/^(前)/i, /^(公元)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^第[一二三四]刻/i,\n wide: /^第[一二三四]刻钟/i,\n};\nconst parseQuarterPatterns = {\n any: [/(1|一)/i, /(2|二)/i, /(3|三)/i, /(4|四)/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^(一|二|三|四|五|六|七|八|九|十[二一])/i,\n abbreviated: /^(一|二|三|四|五|六|七|八|九|十[二一]|\\d|1[12])月/i,\n wide: /^(一|二|三|四|五|六|七|八|九|十[二一])月/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^一/i,\n /^二/i,\n /^三/i,\n /^四/i,\n /^五/i,\n /^六/i,\n /^七/i,\n /^八/i,\n /^九/i,\n /^十(?!(一|二))/i,\n /^十一/i,\n /^十二/i,\n ],\n\n any: [\n /^一|1/i,\n /^二|2/i,\n /^三|3/i,\n /^四|4/i,\n /^五|5/i,\n /^六|6/i,\n /^七|7/i,\n /^八|8/i,\n /^九|9/i,\n /^十(?!(一|二))|10/i,\n /^十一|11/i,\n /^十二|12/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[一二三四五六日]/i,\n short: /^[一二三四五六日]/i,\n abbreviated: /^周[一二三四五六日]/i,\n wide: /^星期[一二三四五六日]/i,\n};\nconst parseDayPatterns = {\n any: [/日/i, /一/i, /二/i, /三/i, /四/i, /五/i, /六/i],\n};\n\nconst matchDayPeriodPatterns = {\n any: /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^上午?/i,\n pm: /^下午?/i,\n midnight: /^午夜/i,\n noon: /^[中正]午/i,\n morning: /^早上/i,\n afternoon: /^下午/i,\n evening: /^晚上?/i,\n night: /^凌晨/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./zh-CN/_lib/formatDistance.js\";\nimport { formatLong } from \"./zh-CN/_lib/formatLong.js\";\nimport { formatRelative } from \"./zh-CN/_lib/formatRelative.js\";\nimport { localize } from \"./zh-CN/_lib/localize.js\";\nimport { match } from \"./zh-CN/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Chinese Simplified locale.\n * @language Chinese Simplified\n * @iso-639-2 zho\n * @author Changyu Geng [@KingMario](https://github.com/KingMario)\n * @author Song Shuoyun [@fnlctrl](https://github.com/fnlctrl)\n * @author sabrinaM [@sabrinamiao](https://github.com/sabrinamiao)\n * @author Carney Wu [@cubicwork](https://github.com/cubicwork)\n * @author Terrence Lam [@skyuplam](https://github.com/skyuplam)\n */\nexport const zhCN = {\n code: \"zh-CN\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 4,\n },\n};\n\n// Fallback for modularized imports:\nexport default zhCN;\n","@import \"../../global/gx-ide-mixins.scss\";\n\n$cardsCommonGap: var(--mer-spacing--md);\n\n:host {\n --common-spacing: var(--mer-spacing--lg);\n --spacing-body-block-start: var(--common-spacing);\n --spacing-body-block-end: var(--common-spacing);\n --spacing-body-inline-start: var(--common-spacing);\n --spacing-body-inline-end: 0;\n --spacing-body-inline-start: 0;\n\n display: grid;\n block-size: 100%;\n overflow: auto;\n}\n\n// padding-inline-start and padding-inline-end should not apply on the host.\n// This way the cards container (.section-create-new-kb__actions) can span full\n:host(.spacing-body),\n:host(.spacing-body-inline) {\n .section-secondary,\n .section-create-new-kb__header,\n .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n padding-inline-end: var(--common-spacing);\n }\n}\n:host(.spacing-body-inline-start) {\n .section-secondary,\n .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n }\n}\n:host(.spacing-body-inline-end) {\n .section-secondary,\n .section-create-new-kb__actions {\n padding-inline-end: var(--common-spacing);\n }\n}\n// - - - - - - - - - - - - - -\n// General\n// - - - - - - - - - - - - - -\n\n.main {\n animation: fadeIn var(--mer-timing--fast) forwards;\n display: grid;\n block-size: 100%;\n // overflow: visible;\n overflow: auto;\n opacity: 0;\n // grid-template-rows: max-content minmax(400px, 1fr);\n grid-template-rows: max-content 1fr;\n gap: var(--mer-spacing--lg);\n}\n\n// - - - - - - - - - - - - - -\n// Animations\n// - - - - - - - - - - - - - -\n\n@keyframes bounce {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-30px);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n// - - - - - - - - - - - - - -\n// Sections General Styles\n// - - - - - - - - - - - - - -\n\n.section-create-new-kb__actions,\n.section-secondary__actions {\n display: grid;\n grid-auto-flow: column;\n gap: $cardsCommonGap;\n overflow-x: auto;\n padding-block-end: var(--mer-spacing--xs);\n}\n\n// - - - - - - - - - - - - - -\n// Cards\n// - - - - - - - - - - - - - -\n\n.card-filled,\n.card-outlined {\n display: grid;\n gap: var(--mer-spacing--md);\n align-content: space-between;\n border-radius: var(--mer-border__radius--md);\n}\n.card-filled {\n background-color: var(--mer-surface__elevation--01);\n padding: var(--mer-spacing--md);\n}\n.card-outlined {\n border: var(--mer-border__width--sm) solid var(--mer-border-color__on-surface);\n grid-template-columns: max-content 1fr;\n align-items: center;\n padding: var(--mer-spacing--md) var(--mer-spacing--md) var(--mer-spacing--xs)\n var(--mer-spacing--md);\n}\n\n.icon-capsule {\n $size: 40px;\n pointer-events: none;\n display: inline-flex;\n block-size: $size;\n inline-size: $size;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n border: var(--mer-border__width--sm) dashed\n var(--mer-border-color__on-elevation--02);\n\n .icon-circular {\n --ch-image-size: 20px; // WA\n }\n}\n\n.card__header {\n display: grid;\n gap: var(--mer-spacing--sm);\n justify-items: self-start;\n}\n.card__header-description {\n display: grid;\n gap: var(--mer-spacing--xs);\n --font-weight-regular: 300; // WA.\n}\n\n// - - - - - - - - - - - - - -\n// Create a new Knowledge Base\n// - - - - - - - - - - - - - -\n\n.section-create-new-kb {\n display: grid;\n grid-auto-rows: max-content;\n gap: var(--mer-spacing--lg);\n\n &__header {\n display: grid;\n gap: var(--mer-spacing--xs);\n }\n\n &__title {\n color: var(--mer-text__bright);\n font-weight: 500; // WA.\n }\n\n &__actions {\n display: grid;\n gap: var(--mer-spacing--md);\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: 330px;\n }\n}\n\n// View Samples Card\n.samples-buttons-container {\n flex-wrap: wrap;\n}\n\n// - - - - - - - - - - - - - - - - - - - -\n// Where to start / Recent Knowledge Bases\n// - - - - - - - - - - - - - - - - - - - -\n\n.section-secondary {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n\n &__title {\n display: grid;\n grid-template-columns: 1fr max-content 1fr;\n gap: var(--mer-spacing--md);\n align-items: center;\n\n font-weight: 300; // WA;\n\n &::before,\n &::after {\n content: \"\";\n block-size: var(--mer-border__width--sm);\n background-color: var(--mer-border-color__on-elevation--01);\n }\n }\n\n &__actions {\n display: grid;\n }\n &__actions--two-cards {\n grid-template-columns: repeat(2, minmax(430px, 1fr));\n }\n &__actions--multiple-cards {\n grid-auto-columns: 670px;\n }\n}\n.section-no-kbs {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n grid-template-rows: max-content max-content;\n gap: var(--mer-spacing--md);\n}\n\n// - - - - - - - - - - - - - - - - - - - -\n// Kbs\n// - - - - - - - - - - - - - - - - - - - -\n\n.section-kbs {\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--sm);\n display: grid;\n container-type: inline-size;\n grid-template-rows: auto 1fr;\n overflow: hidden;\n\n &__header {\n display: grid;\n grid-template-columns: max-content 230px;\n align-items: center;\n gap: var(--mer-spacing--xl);\n border-block-end: var(--mer-border__width--sm) solid\n var(--mer-border-color__on-elevation--01);\n padding-block-end: var(--mer-spacing--sm);\n\n &--no-border {\n border-block-end-color: transparent !important;\n }\n }\n &__title {\n //WA to prevent \"FOUC\" caused from .input\n align-items: center;\n display: flex;\n min-block-size: 31px;\n }\n &__filter--hidden {\n opacity: 0;\n }\n &__list {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr;\n row-gap: var(--mer-spacing--xs);\n column-gap: var(--mer-spacing--md);\n overflow: auto;\n position: relative;\n padding-block-start: var(--mer-spacing--sm);\n\n &--empty {\n grid-template-columns: 1fr;\n grid-auto-rows: 1fr;\n overflow: hidden;\n }\n\n @container (max-width: 768px) {\n grid-template-columns: 1fr;\n }\n }\n}\n\n.kb {\n &__item {\n --font-weight-regular: 300; // WA.\n background-color: var(--mer-surface__elevation--02);\n padding: var(--mer-spacing--sm);\n display: grid;\n grid-template-columns: auto max-content;\n gap: var(--mer-spacing--3xl);\n }\n &__details {\n display: grid;\n grid-template-columns: max-content 1fr;\n align-items: center;\n gap: var(--mer-spacing--sm);\n }\n &__name {\n @include ellipsis();\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n &:hover {\n color: var(--mer-text__bright);\n }\n }\n &__modified {\n @include ellipsis();\n text-align: end;\n font-variant-numeric: tabular-nums;\n }\n}\n\n@include hiChar;\n\n.loader {\n border: var(--mer-border__width--sm) solid var(--mer-border-color__on-surface);\n}\n\n// WA's / TODO's:\n.heading-2,\n.heading-3 {\n margin: 0; // remove titles margins, this should be done in Mercury probably\n font-weight: 600 !important; // see #WA-font-weight\n color: #ffffff !important; // this color does not exists in mercury ds for dark theme.\n}\n.card-filled {\n .heading-3 {\n color: var(--mer-text__on-surface) !important;\n }\n}\n.text-body-regular-m,\n.card__footer {\n // #WA-font-weight\n // Apparently font-weights appear to be one step bolder on the navigator.\n // ie.: What looks 700 in Figma, here has to be 600 to look as bolder.\n // This is something to review with designers.\n font-weight: var(--mer-font__weight--light) !important;\n --control__font-weight--regular: var(--mer-font__weight--light);\n}\n\n// WA: --line-height-tight is too tight.\n// WA: --font-weight-regular appears 400.\n// TODO: replace with new line-height tokens when available in V1.\n.card__header-description {\n --line-height-tight: 1.7;\n --font-weight-regular: 300;\n}\n.card__header-title {\n color: var(--mer-text__bright);\n}\n\n.button-tertiary-no-padding-inline-start.button-tertiary {\n // WA.\n padding-inline-start: 0;\n}\n","// Stencil\nimport { Component, Host, h, Prop, State, Element, Watch } from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { formatDistanceToNow, Locale as LocaleDateFns } from \"date-fns\";\nimport { ja, zhCN, enUS } from \"date-fns/locale\";\n// import { enUS } from \"date-fns/locale\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n// Custom\nimport { Locale } from \"../../common/locale\";\n\n// const locale = enUS; // use `zhCN` for Chinese, `ja` for Japanese, `enUS` for English\n\nimport { formatDate } from \"../../common/helpers\";\n\nconst LANGS_DATE_FNS_MAP: LanguageMap = {\n \"en\": enUS,\n \"ja\": ja,\n \"zh-CN\": zhCN,\n \"zh-TW\": zhCN,\n \"zh-HK\": zhCN\n};\n\nconst DETAIL_ICON = getIconPath({\n category: \"system\",\n name: \"detail\",\n colorType: \"primary\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst KB_DEFAULT_ICON = getIconPath({\n category: \"objects\",\n name: \"knowledge-base\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\n\nconst PROJECT_NAME_PLACEHOLDER = \"[projectName]\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/layout\",\n \"components/edit\",\n \"components/icon\",\n \"components/button\",\n \"chameleon/scrollbar\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-start-page\",\n styleUrl: \"start-page.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/start-page\"]\n})\nexport class GxIdeStartPage {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #userLanguage: LocaleDateFns;\n\n @Element() el: HTMLGxIdeStartPageElement;\n\n /**\n * The kbs after the filter value.\n */\n @State() filteredKbs: RecentKBData[];\n\n @State() kbFilterValue: string = \"\";\n @Watch(\"kbFilterValue\")\n kbFilterValueChanged(newKbFilterValue: string) {\n this.filteredKbs = this.kbs.filter(kb =>\n kb.name.toLowerCase().includes(newKbFilterValue.toLocaleLowerCase())\n );\n }\n\n /**\n * True if the start page is waiting, either for the kb's list or the secondary section.\n */\n @State() loading: boolean = true;\n\n /**\n * Callback invoked to create a new KB. It must be specified whether this create is create from server or not, through the parameter 'fromServer'.\n */\n @Prop() readonly createKBCallback!: (fromServer: boolean) => Promise<void>;\n\n /**\n * A temporary property to hide the \"Open Existing Project\" card.\n */\n @Prop() readonly hideOpenExistingProject: boolean = false;\n\n /**\n * User's kbs array\n */\n @Prop() readonly kbs: RecentKBData[];\n @Watch(\"kbs\")\n kbsChanged(newKbs: RecentKBData[]) {\n this.filteredKbs = newKbs;\n this.kbFilterValue = \"\"; // clear filter\n }\n\n /**\n * The minimum required of kbs to display a filter.\n */\n @Prop() readonly kbsFilterThreshold: number;\n\n /**\n * Callback invoked to open a KB when the user clicks on a KB card.\n */\n @Prop() readonly openKbCallback!: (id: string) => Promise<void>;\n\n /**\n * Callback invoked when the user clicks a button to open a sample.\n */\n @Prop() readonly openSampleCallback!: (sampleId: string) => Promise<void>;\n\n /**\n * List of samples available to be displayed in the samples card.\n */\n @Prop() readonly samples?: SampleData[];\n\n /**\n * The secondary section that will appear below the \"Create a new Knowledge Base\" main section. This section will be displayed if there are no recent kbs.\n */\n @Prop() readonly secondarySection?: SecondarySection;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize filteredKbs\n this.kbsChanged(this.kbs);\n\n // get user language to display the kb \"last opened\" value in the appropriate language.\n const userLanguage: keyof LanguageMap = document.documentElement\n .lang as keyof LanguageMap;\n this.#userLanguage = LANGS_DATE_FNS_MAP[userLanguage];\n }\n\n #createKBClickHandler = (fromServer: boolean) => (event: MouseEvent) => {\n event.stopPropagation();\n this.createKBCallback(fromServer);\n };\n\n #filterKbs = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbFilterValue = event.detail as string;\n };\n\n #openKbClickHandler = (kbId: string) => (event: MouseEvent) => {\n event.stopPropagation();\n this.openKbCallback(kbId);\n };\n\n // renders\n\n #evaluateContentToRender() {\n return this.kbs && this.kbs.length > 0\n ? this.#renderKbsSection()\n : this.#renderSecondarySection();\n }\n\n #renderKbsSection = () => {\n const hideKbsFilter = this.kbs.length < this.kbsFilterThreshold;\n const kbsListEmpty = this.filteredKbs.length === 0;\n let contentToRender: HTMLGxgIdeLoaderElement | HTMLElement[];\n\n // Evaluate what is the content to display.\n if (this.filteredKbs.length > 0) {\n contentToRender = this.#renderKbs();\n } else {\n // No kb has pass the filter. Display an empty-state.\n contentToRender = (\n <gx-ide-empty-state\n isAnimated\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.recentKBs.noMatches}\n ></gx-ide-empty-state>\n );\n }\n\n return (\n <section class=\"section-kbs\">\n <header\n class={{\n \"section-kbs__header\": true\n }}\n >\n <label\n class=\"subtitle-regular-s section-kbs__title\"\n htmlFor=\"filter-kbs\"\n >\n {this.#componentLocale.recentKBs.title}\n </label>\n <ch-edit\n // Render always, and display or hide, ro prevent FOUC, and also prevent\n // the header block-size from growing a little bit when the input renders.\n id=\"filter-kbs\"\n value={this.kbFilterValue}\n class={{\n \"input\": true,\n \"section-kbs__filter--hidden\": hideKbsFilter\n }}\n startImgSrc={SEARCH_ICON}\n placeholder={this.#componentLocale.recentKBs.filterKbsPlaceholder}\n onInput={!hideKbsFilter && this.#filterKbs}\n disabled={hideKbsFilter}\n ></ch-edit>\n </header>\n\n <div\n class={{\n \"section-kbs__list\": true,\n \"section-kbs__list--empty\": kbsListEmpty,\n \"scrollable\": true\n }}\n >\n {this.filteredKbs.length > 0 ? this.#renderKbs() : contentToRender}\n </div>\n </section>\n );\n };\n\n #renderKbs = (): HTMLElement[] => {\n return this.filteredKbs?.map((kb, index) => {\n // relative time ago\n\n const relativeDate = kb.lastOpenedDate\n ? formatDistanceToNow(new Date(kb.lastOpenedDate), {\n addSuffix: true,\n locale: this.#userLanguage\n })\n : undefined;\n\n // convert date to date format, since toISOString() requires date as Date.\n const dateAsDate = kb.lastOpenedDate\n ? new Date(kb.lastOpenedDate)\n : undefined;\n\n let dateFormated = formatDate(dateAsDate, \"date-time-short\");\n\n // icon\n const kbIcon = kb.icon ?? KB_DEFAULT_ICON;\n\n return (\n <article class=\"kb__item\" key={index}>\n <div class=\"kb__details\">\n <ch-image class=\"icon-md\" src={kbIcon}></ch-image>\n <button\n class=\"body-regular-m kb__name\"\n onClick={this.#openKbClickHandler(kb.id)}\n >\n {kb.name}\n </button>\n </div>\n {relativeDate && (\n <p class=\"body-regular-m kb__modified\">\n {`${this.#componentLocale.recentKBs.opened}`}{\" \"}\n <time dateTime={dateFormated}>{dateFormated}</time>\n </p>\n )}\n </article>\n );\n });\n };\n\n #renderSecondarySection = (): HTMLElement | null => {\n if (!this.secondarySection) {\n return null;\n }\n\n const multipleCards = this.secondarySection.cards.length > 2;\n\n return (\n <section\n // Recent Knowledge Bases\n class=\"section-no-kbs\"\n >\n <header>\n <h2 class=\"body-regular-s section-secondary__title\">\n {this.secondarySection.title}\n </h2>\n </header>\n\n <section\n class={{\n \"section-secondary__actions\": true,\n \"section-secondary__actions--two-cards\": !multipleCards,\n \"section-secondary__actions--multiple-cards\": multipleCards,\n \"scrollable\": true\n }}\n >\n {this.secondarySection.cards.map((card, index) => {\n return (\n <article class=\"card card-outlined\" key={index}>\n <span class=\"icon-capsule\">\n <ch-image\n class=\"icon-md icon-circular\"\n src={card.icon.src}\n aria-label={card.icon.ariaLabel}\n ></ch-image>\n </span>\n <header class=\"card__header\">\n <h2 class=\"subtitle-semi-bold-xs card__header-title\">\n {card.title}\n </h2>\n {card.description.map(paragraph => (\n <p class=\"body-regular-s card__header-description\">\n {paragraph}\n </p>\n ))}\n {card.action && (\n <button\n class=\"button-tertiary button-icon-and-text button-tertiary-no-padding-inline-start\"\n onClick={card.action.callback && card.action.callback}\n >\n <ch-image class=\"icon-md\" src={DETAIL_ICON}></ch-image>\n {card.action.caption}\n </button>\n )}\n </header>\n </article>\n );\n })}\n </section>\n </section>\n );\n };\n\n render() {\n this.loading =\n (!this.kbs || this.kbs?.length === 0) && !this.secondarySection;\n\n const renderViewSamplesCard =\n this.samples?.length && this.openSampleCallback;\n\n return (\n <Host class=\"scrollable\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"main scrollable\">\n <section\n // Create a new Knowledge Base\n class=\"section-create-new-kb\"\n >\n <header\n // main header\n class=\"section-create-new-kb__header\"\n >\n <h1 class=\"heading-5 section-create-new-kb__title\">\n {this.#componentLocale.createKB.title}\n </h1>\n <p class=\"body-regular-m\">\n {this.#componentLocale.createKB.description}\n </p>\n </header>\n\n <section class=\"section-create-new-kb__actions scrollable\">\n <article\n // create project\n class=\"card card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs card__header-title\">\n {this.#componentLocale.createProject.title}\n </h2>\n <p class=\"body-regular-s\">\n {this.#componentLocale.createProject.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-primary\"\n onClick={this.#createKBClickHandler(false)}\n >\n {this.#componentLocale.createProject.buttonCaption}\n </button>\n </footer>\n </article>\n\n {!this.hideOpenExistingProject ? (\n <article\n // open existing project\n class=\"card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs\">\n {this.#componentLocale.openExistingProject.title}\n </h2>\n <p class=\"body-regular-s\">\n {this.#componentLocale.openExistingProject.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-secondary cancel-btn\"\n onClick={this.#createKBClickHandler(true)}\n >\n {this.#componentLocale.openExistingProject.buttonCaption}\n </button>\n </footer>\n </article>\n ) : null}\n\n {renderViewSamplesCard ? (\n <article\n // view samples\n class=\"card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs\">\n {this.#componentLocale.viewSamples.title}\n </h2>\n <p class=\"body-regular-s\">\n {this.#componentLocale.viewSamples.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <div class=\"buttons-spacer samples-buttons-container\">\n {this.samples.map(sample => {\n return (\n <button\n class=\"button-secondary\"\n onClick={() => this.openSampleCallback(sample.id)}\n >\n {this.#componentLocale.viewSamples.open.replace(\n PROJECT_NAME_PLACEHOLDER,\n sample.name\n )}\n </button>\n );\n })}\n </div>\n </footer>\n </article>\n ) : null}\n </section>\n </section>\n <section class=\"section-secondary scrollable\">\n {this.loading ? (\n <gx-ide-loader\n class=\"loader\"\n loaderTitle={this.#componentLocale.recentKBs.loaderTitle}\n description={this.#componentLocale.recentKBs.loaderDescription}\n show\n ></gx-ide-loader>\n ) : (\n this.#evaluateContentToRender()\n )}\n </section>\n </main>\n </Host>\n );\n }\n}\n\nexport type CardInfo = {\n icon?: {\n src: string;\n ariaLabel: string;\n };\n title: string;\n description: string[];\n action?: {\n iconSrc: string;\n caption: string;\n callback?: () => void;\n };\n};\n\ntype LanguageMap = {\n \"en\": LocaleDateFns;\n \"ja\": LocaleDateFns;\n \"zh-CN\": LocaleDateFns;\n \"zh-TW\": LocaleDateFns;\n \"zh-HK\": LocaleDateFns;\n};\n\nexport type RecentKBData = {\n id?: string;\n name: string;\n lastOpenedDate?: Date;\n icon: string;\n};\n\nexport type SampleData = {\n id: string;\n name: string;\n};\n\nexport type SecondarySection = {\n title: string;\n cards: CardInfo[];\n};\n"],"mappings":"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"}
|