@ng-atomic/common 19.51.0 → 19.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-atomic-common-directives-active-control.mjs +51 -60
- package/fesm2022/ng-atomic-common-directives-active-control.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs +0 -3
- package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-directives-prevent-browser-zoom.mjs +0 -3
- package/fesm2022/ng-atomic-common-directives-prevent-browser-zoom.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-interceptors-authorization.mjs +0 -1
- package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-columns.mjs +0 -1
- package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-domain.mjs +0 -9
- package/fesm2022/ng-atomic-common-pipes-domain.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-smart-field.mjs +0 -3
- package/fesm2022/ng-atomic-common-pipes-smart-field.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-app.mjs +1 -3
- package/fesm2022/ng-atomic-common-services-app.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-auth.mjs +14 -25
- package/fesm2022/ng-atomic-common-services-auth.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-editing.mjs +0 -16
- package/fesm2022/ng-atomic-common-services-editing.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-_index.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-json-schema.mjs +1 -25
- package/fesm2022/ng-atomic-common-services-form-json-schema.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form.mjs +0 -5
- package/fesm2022/ng-atomic-common-services-form.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-query-resolver.mjs +0 -2
- package/fesm2022/ng-atomic-common-services-query-resolver.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-sheets-actions.mjs +0 -1
- package/fesm2022/ng-atomic-common-services-sheets-actions.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-side-app.mjs +0 -1
- package/fesm2022/ng-atomic-common-services-side-app.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs +0 -1
- package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-spreadsheet.mjs +2 -39
- package/fesm2022/ng-atomic-common-services-spreadsheet.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-ui.mjs +0 -2
- package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-entities.mjs +0 -18
- package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-utils.mjs +2 -34
- package/fesm2022/ng-atomic-common-utils.mjs.map +1 -1
- package/fesm2022/ng-atomic-common.mjs +56 -121
- package/fesm2022/ng-atomic-common.mjs.map +1 -1
- package/package.json +3 -3
- package/types/ng-atomic-common-directives-active-control.d.ts +2 -27
- package/types/ng-atomic-common-directives-active-control.d.ts.map +1 -1
- package/types/ng-atomic-common-directives-prevent-browser-zoom.d.ts +0 -3
- package/types/ng-atomic-common-directives-prevent-browser-zoom.d.ts.map +1 -1
- package/types/ng-atomic-common-interceptors-authorization.d.ts +0 -1
- package/types/ng-atomic-common-interceptors-authorization.d.ts.map +1 -1
- package/types/ng-atomic-common-pipes-columns.d.ts +0 -1
- package/types/ng-atomic-common-pipes-columns.d.ts.map +1 -1
- package/types/ng-atomic-common-pipes-domain.d.ts +0 -9
- package/types/ng-atomic-common-pipes-domain.d.ts.map +1 -1
- package/types/ng-atomic-common-pipes-smart-field.d.ts +0 -3
- package/types/ng-atomic-common-pipes-smart-field.d.ts.map +1 -1
- package/types/ng-atomic-common-services-auth.d.ts +4 -2
- package/types/ng-atomic-common-services-auth.d.ts.map +1 -1
- package/types/ng-atomic-common-services-editing.d.ts +0 -16
- package/types/ng-atomic-common-services-editing.d.ts.map +1 -1
- package/types/ng-atomic-common-services-form.d.ts +0 -5
- package/types/ng-atomic-common-services-form.d.ts.map +1 -1
- package/types/ng-atomic-common-services-side-nav-mode.d.ts +0 -1
- package/types/ng-atomic-common-services-side-nav-mode.d.ts.map +1 -1
- package/types/ng-atomic-common-services-spreadsheet.d.ts +0 -4
- package/types/ng-atomic-common-services-spreadsheet.d.ts.map +1 -1
- package/types/ng-atomic-common-stores-entities.d.ts +0 -3
- package/types/ng-atomic-common-stores-entities.d.ts.map +1 -1
- package/types/ng-atomic-common-utils.d.ts +0 -24
- package/types/ng-atomic-common-utils.d.ts.map +1 -1
- package/types/ng-atomic-common.d.ts +2 -77
- package/types/ng-atomic-common.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-services-form.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/form.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/utils.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/ng-atomic-common-services-form.ts"],"sourcesContent":["import { toObject, isIsoString } from '@ng-atomic/common/utils';\nimport dayjs from 'dayjs';\nimport { unflatten, flatten } from 'flat';\nimport { omit, pick } from 'lodash-es';\n\nconst isNumeric = (v: string): boolean => !isNaN(Number(v));\n\nconst parseQueryString = (v: string, key: string): any => key.match(/id$/i) \n ? v\n : typeof v === 'string' && isIsoString(v) \n ? dayjs(v) \n : v === ''\n ? v\n : isNumeric(v)\n ? Number(v)\n : v;\n\nexport class BaseFormService {\n static fromQueryParams<T>(obj: T): object {\n return Object.entries((unflatten(obj) as any)?.form ?? {}).reduce<Record<string, unknown>>((m, [k, v]) => ({\n ...m, [k]: parseQueryString(v as string, k),\n }), {});\n }\n\n static toQueryParams<T>(obj: object): T { \n return flatten({form: Object.entries(obj).reduce((m, [k, v]) => ({\n ...m, [k]: dayjs.isDayjs(v) ? v.isValid() ? v.toISOString() : null : v,\n }), {})});\n }\n\n static dayjsKeys(object: object): string[] {\n return Object.entries(object).filter(([_, v]) => dayjs.isDayjs(v)).map(([k]) => k);\n }\n\n static toValue(object: object): object {\n const keys = this.dayjsKeys(object);\n return {...flatten(omit(toObject(object), keys)), ...pick(toObject(object), keys)};\n }\n\n static fromValue(value: object): object {\n const keys = this.dayjsKeys(value);\n return {...unflatten(omit(value, keys)), ...pick(value, keys)};\n }\n}","import { computed, Signal } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { FormField, FormFieldMap } from \"@ng-atomic/common/pipes/smart-field\";\nimport { getRawValue$ } from \"@ng-atomic/common/utils\";\nimport { computeFake } from \"@ng-atomic/core\";\nimport { derivedAsync } from \"ngxtension/derived-async\";\n\nexport function getFormSignal<T>(form: Signal<AbstractControl<T>>, path: string[] = []): { control: Signal<AbstractControl<T>>, value: Signal<T> } {\n const control = computed(() => {\n const _form = computeFake(form());\n if (path.length === 0) return _form;\n return _form?.get(path) as AbstractControl<T>;\n }) as Signal<AbstractControl<T>>;\n const value = derivedAsync(() => {\n const _control = control();\n if (!_control) return null;\n return getRawValue$(control());\n }) as Signal<T>;\n return { control, value };\n}\n\nexport type SetupFormControl<T, K extends (FormField | FormFieldMap)> = (form: Signal<AbstractControl>, path?: string[]) => {\n control: Signal<AbstractControl<T>>,\n value: Signal<T>,\n field: Signal<K>\n};\n\nexport function createSetupFormControl<T, K extends (FormField | FormFieldMap)>(\n setupFn: (prams: {control: Signal<AbstractControl<T>>, value: Signal<T>}) => Signal<K>,\n): SetupFormControl<T, K> {\n return (form, path) => {\n const { control, value } = getFormSignal(form, path);\n return { control, value, field: setupFn({ control, value }) };\n };\n}\n\n
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-services-form.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/form.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/utils.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/ng-atomic-common-services-form.ts"],"sourcesContent":["import { toObject, isIsoString } from '@ng-atomic/common/utils';\nimport dayjs from 'dayjs';\nimport { unflatten, flatten } from 'flat';\nimport { omit, pick } from 'lodash-es';\n\nconst isNumeric = (v: string): boolean => !isNaN(Number(v));\n\nconst parseQueryString = (v: string, key: string): any => key.match(/id$/i) \n ? v\n : typeof v === 'string' && isIsoString(v) \n ? dayjs(v) \n : v === ''\n ? v\n : isNumeric(v)\n ? Number(v)\n : v;\n\nexport class BaseFormService {\n static fromQueryParams<T>(obj: T): object {\n return Object.entries((unflatten(obj) as any)?.form ?? {}).reduce<Record<string, unknown>>((m, [k, v]) => ({\n ...m, [k]: parseQueryString(v as string, k),\n }), {});\n }\n\n static toQueryParams<T>(obj: object): T { \n return flatten({form: Object.entries(obj).reduce((m, [k, v]) => ({\n ...m, [k]: dayjs.isDayjs(v) ? v.isValid() ? v.toISOString() : null : v,\n }), {})});\n }\n\n static dayjsKeys(object: object): string[] {\n return Object.entries(object).filter(([_, v]) => dayjs.isDayjs(v)).map(([k]) => k);\n }\n\n static toValue(object: object): object {\n const keys = this.dayjsKeys(object);\n return {...flatten(omit(toObject(object), keys)), ...pick(toObject(object), keys)};\n }\n\n static fromValue(value: object): object {\n const keys = this.dayjsKeys(value);\n return {...unflatten(omit(value, keys)), ...pick(value, keys)};\n }\n}","import { computed, Signal } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { FormField, FormFieldMap } from \"@ng-atomic/common/pipes/smart-field\";\nimport { getRawValue$ } from \"@ng-atomic/common/utils\";\nimport { computeFake } from \"@ng-atomic/core\";\nimport { derivedAsync } from \"ngxtension/derived-async\";\n\nexport function getFormSignal<T>(form: Signal<AbstractControl<T>>, path: string[] = []): { control: Signal<AbstractControl<T>>, value: Signal<T> } {\n const control = computed(() => {\n const _form = computeFake(form());\n if (path.length === 0) return _form;\n return _form?.get(path) as AbstractControl<T>;\n }) as Signal<AbstractControl<T>>;\n const value = derivedAsync(() => {\n const _control = control();\n if (!_control) return null;\n return getRawValue$(control());\n }) as Signal<T>;\n return { control, value };\n}\n\nexport type SetupFormControl<T, K extends (FormField | FormFieldMap)> = (form: Signal<AbstractControl>, path?: string[]) => {\n control: Signal<AbstractControl<T>>,\n value: Signal<T>,\n field: Signal<K>\n};\n\nexport function createSetupFormControl<T, K extends (FormField | FormFieldMap)>(\n setupFn: (prams: {control: Signal<AbstractControl<T>>, value: Signal<T>}) => Signal<K>,\n): SetupFormControl<T, K> {\n return (form, path) => {\n const { control, value } = getFormSignal(form, path);\n return { control, value, field: setupFn({ control, value }) };\n };\n}\n\n\nexport function disableControls(control: AbstractControl, fields: string[]): void {\n fields.forEach(field => {\n control.get([field])?.disable();\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,6 @@ function eq(value, query) {
|
|
|
73
73
|
return typeof value === 'string' ? value === query : false;
|
|
74
74
|
}
|
|
75
75
|
function gt(value, query) {
|
|
76
|
-
// const value = dayjs.isDayjs(v) ? v : this.transformer(v, k);
|
|
77
76
|
return typeof value === 'string'
|
|
78
77
|
? parseFloat(value) > parseFloat(query)
|
|
79
78
|
: typeof value === 'number'
|
|
@@ -83,7 +82,6 @@ function gt(value, query) {
|
|
|
83
82
|
: false;
|
|
84
83
|
}
|
|
85
84
|
function lt(value, query) {
|
|
86
|
-
// const value = dayjs.isDayjs(v) ? v : this.transformer(v, k);
|
|
87
85
|
return typeof value === 'string'
|
|
88
86
|
? parseFloat(value) < parseFloat(query)
|
|
89
87
|
: typeof value === 'number'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-services-query-resolver.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/query-resolver/query-resolver.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/query-resolver/ng-atomic-common-services-query-resolver.ts"],"sourcesContent":["import { Injectable, inject } from \"@angular/core\";\nimport { DOMAIN_LANG_MAP } from \"@ng-atomic/common/services/language\";\nimport { defaultExpressionTransformer, EXPRESSION_TRANSFORMER, toObject } from '@ng-atomic/common/utils';\nimport { flattenExcludeDayjs as flatten } from '@nx-ddd/core';\nimport dayjs from 'dayjs';\nimport { DATA_ACCESSOR, defaultDataAccessor } from \"@ng-atomic/common/pipes/data-accessor\";\n\ninterface Query {\n key: string;\n operator: ':' | '>' | '<' | '=';\n value: string;\n not: boolean;\n}\n\n@Injectable({ providedIn: 'any' })\nexport class QueryParserService {\n parse(query: string): Query[] {\n return query.split(' ').filter(q => q.length).map(str => {\n const not = str.startsWith('-');\n if (not) str = str.slice(1);\n\n for (const operator of ['=', '>', '<', ':'] as const) {\n if (str.includes(operator)) {\n const [key, value] = str.split(operator);\n return { key, operator, value, not };\n }\n }\n return { key: '*', operator: ':', value: str, not };\n });\n }\n}\n\n@Injectable({ providedIn: 'any' })\nexport class QueryResolverService<T extends object> {\n protected parser = inject(QueryParserService);\n protected dataAccessor = inject(DATA_ACCESSOR, {optional: true}) ?? defaultDataAccessor;\n protected transformer = inject(EXPRESSION_TRANSFORMER, {optional: true}) ?? defaultExpressionTransformer;\n protected map = inject(DOMAIN_LANG_MAP, {optional: true}) ?? {};\n protected reversedMap = Object.entries(this.map).reduce((p, [k, v]) => ({...p, [v]: k}), {} as Record<string, string>);\n\n resolve(items: T[], queryStr = ''): T[] {\n return this.parser.parse(queryStr).reduce((_items, query) => this.executeQuery(_items, query), items);\n }\n\n protected executeQuery(items: T[], query: Query): T[] {\n if (query.key === '*' && query.operator === ':')\n return items.filter(item => this.operateByAllKey(item, in_, query));\n switch (query.operator) {\n case ':': return items.filter(item => this.operateByKey(item, in_, query));\n case '=': return items.filter(item => this.operateByKey(item, eq, query));\n case '>': return items.filter(item => this.operateByKey(item, gt, query));\n case '<': return items.filter(item => this.operateByKey(item, lt, query));\n }\n }\n\n protected operateByKey(item: T, operator: QueryOperator, {key, value, not}: Query): boolean {\n let itemValue: any;\n itemValue = this.dataAccessor(item, key);\n itemValue = this.transformer(itemValue, key);\n return not ? !operator(itemValue, value) : operator(itemValue, value);\n }\n\n protected operateByAllKey(item: T, operator: QueryOperator, query: Query) {\n const flattenObj = flatten(toObject(item));\n return Object.keys(flattenObj).some((key) => this.operateByKey(item, operator, {...query, key}));\n }\n}\n\ntype QueryOperator = (_value: any, query: string) => boolean;\n\nfunction in_(value: any, query: string): boolean {\n return typeof value === 'string' ? value?.includes(query) : false;\n}\n\nfunction eq(value: any, query: string): boolean {\n return typeof value === 'string' ? value === query : false;\n}\n\nfunction gt(value: any, query: string): boolean {\n
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-services-query-resolver.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/query-resolver/query-resolver.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/query-resolver/ng-atomic-common-services-query-resolver.ts"],"sourcesContent":["import { Injectable, inject } from \"@angular/core\";\nimport { DOMAIN_LANG_MAP } from \"@ng-atomic/common/services/language\";\nimport { defaultExpressionTransformer, EXPRESSION_TRANSFORMER, toObject } from '@ng-atomic/common/utils';\nimport { flattenExcludeDayjs as flatten } from '@nx-ddd/core';\nimport dayjs from 'dayjs';\nimport { DATA_ACCESSOR, defaultDataAccessor } from \"@ng-atomic/common/pipes/data-accessor\";\n\ninterface Query {\n key: string;\n operator: ':' | '>' | '<' | '=';\n value: string;\n not: boolean;\n}\n\n@Injectable({ providedIn: 'any' })\nexport class QueryParserService {\n parse(query: string): Query[] {\n return query.split(' ').filter(q => q.length).map(str => {\n const not = str.startsWith('-');\n if (not) str = str.slice(1);\n\n for (const operator of ['=', '>', '<', ':'] as const) {\n if (str.includes(operator)) {\n const [key, value] = str.split(operator);\n return { key, operator, value, not };\n }\n }\n return { key: '*', operator: ':', value: str, not };\n });\n }\n}\n\n@Injectable({ providedIn: 'any' })\nexport class QueryResolverService<T extends object> {\n protected parser = inject(QueryParserService);\n protected dataAccessor = inject(DATA_ACCESSOR, {optional: true}) ?? defaultDataAccessor;\n protected transformer = inject(EXPRESSION_TRANSFORMER, {optional: true}) ?? defaultExpressionTransformer;\n protected map = inject(DOMAIN_LANG_MAP, {optional: true}) ?? {};\n protected reversedMap = Object.entries(this.map).reduce((p, [k, v]) => ({...p, [v]: k}), {} as Record<string, string>);\n\n resolve(items: T[], queryStr = ''): T[] {\n return this.parser.parse(queryStr).reduce((_items, query) => this.executeQuery(_items, query), items);\n }\n\n protected executeQuery(items: T[], query: Query): T[] {\n if (query.key === '*' && query.operator === ':')\n return items.filter(item => this.operateByAllKey(item, in_, query));\n switch (query.operator) {\n case ':': return items.filter(item => this.operateByKey(item, in_, query));\n case '=': return items.filter(item => this.operateByKey(item, eq, query));\n case '>': return items.filter(item => this.operateByKey(item, gt, query));\n case '<': return items.filter(item => this.operateByKey(item, lt, query));\n }\n }\n\n protected operateByKey(item: T, operator: QueryOperator, {key, value, not}: Query): boolean {\n let itemValue: any;\n itemValue = this.dataAccessor(item, key);\n itemValue = this.transformer(itemValue, key);\n return not ? !operator(itemValue, value) : operator(itemValue, value);\n }\n\n protected operateByAllKey(item: T, operator: QueryOperator, query: Query) {\n const flattenObj = flatten(toObject(item));\n return Object.keys(flattenObj).some((key) => this.operateByKey(item, operator, {...query, key}));\n }\n}\n\ntype QueryOperator = (_value: any, query: string) => boolean;\n\nfunction in_(value: any, query: string): boolean {\n return typeof value === 'string' ? value?.includes(query) : false;\n}\n\nfunction eq(value: any, query: string): boolean {\n return typeof value === 'string' ? value === query : false;\n}\n\nfunction gt(value: any, query: string): boolean {\n \n return typeof value === 'string' \n ? parseFloat(value) > parseFloat(query) \n : typeof value === 'number'\n ? value > parseFloat(query)\n : dayjs.isDayjs(value)\n ? dayjs(query).isBefore(value)\n : false;\n}\n\nfunction lt(value: any, query: string): boolean {\n \n return typeof value === 'string' \n ? parseFloat(value) < parseFloat(query) \n : typeof value === 'number'\n ? value < parseFloat(query)\n : dayjs.isDayjs(value)\n ? dayjs(query).isAfter(value)\n : false;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["flatten"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import * as i1 from '@angular/material/list';
|
|
|
5
5
|
import { MatListModule } from '@angular/material/list';
|
|
6
6
|
import { NgAtomicComponent } from '@ng-atomic/core';
|
|
7
7
|
|
|
8
|
-
// import { IconAtom } from '@ng-atomic/components/atoms/icon';
|
|
9
8
|
class ActionsSheet extends NgAtomicComponent {
|
|
10
9
|
constructor() {
|
|
11
10
|
super(...arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-services-sheets-actions.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/sheets/actions/actions.sheet.ts","../../../../../packages/@ng-atomic/common/src/lib/services/sheets/actions/ng-atomic-common-services-sheets-actions.ts"],"sourcesContent":["\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from '@angular/material/bottom-sheet';\nimport { MatListModule } from '@angular/material/list';\nimport { Action, NgAtomicComponent } from '@ng-atomic/core';\n
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-services-sheets-actions.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/sheets/actions/actions.sheet.ts","../../../../../packages/@ng-atomic/common/src/lib/services/sheets/actions/ng-atomic-common-services-sheets-actions.ts"],"sourcesContent":["\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from '@angular/material/bottom-sheet';\nimport { MatListModule } from '@angular/material/list';\nimport { Action, NgAtomicComponent } from '@ng-atomic/core';\n\n\n@Component({\n selector: 'sheets-actions',\n imports: [\n MatListModule\n],\n template: `\n <mat-action-list>\n @for (action of actions; track action) {\n <button mat-list-item (click)=\"onItemClick(action)\">\n <!-- <atoms-icon matListItemIcon [name]=\"action.icon\" [color]=\"action.color\"></atoms-icon> -->\n <div matListItemTitle [style.color]=\"action.color\">{{ action.name }}</div>\n </button>\n }\n </mat-action-list>\n `,\n styles: [`\n mat-action-list {\n padding: 0;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionsSheet extends NgAtomicComponent {\n protected actions = inject<Action[]>(MAT_BOTTOM_SHEET_DATA);\n private sheetRef = inject(MatBottomSheetRef<ActionsSheet>);\n\n protected onItemClick(action: Action): void {\n this.dispatch(action, 'root');\n this.sheetRef.dismiss(action);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AA6BM,MAAO,YAAa,SAAQ,iBAAiB,CAAA;AAtBnD,IAAA,WAAA,GAAA;;AAuBY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAW,qBAAqB,CAAC;AACnD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAC,iBAA+B,EAAC;AAM3D,IAAA;AAJW,IAAA,WAAW,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B;8GAPW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBX;;;;;;;;;AAST,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXD,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAmBJ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAtBxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACT;qBACH,EAAA,QAAA,EACa;;;;;;;;;KAST,EAAA,eAAA,EAMgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;AC3BnD;;AAEG;;;;"}
|
|
@@ -11,7 +11,6 @@ class SideAppRouter extends Router {
|
|
|
11
11
|
const _commands = extras?.relativeTo ? commands : ['', { outlets: { 'side': commands } }];
|
|
12
12
|
return super.navigate(_commands, merge({
|
|
13
13
|
replaceUrl: true,
|
|
14
|
-
// skipLocationChange: true,
|
|
15
14
|
}, extras)).then((res) => {
|
|
16
15
|
if (extras?.expanded === true) {
|
|
17
16
|
this.sideApp.expand();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-services-side-app.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/side-app/side-app.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/side-app/ng-atomic-common-services-side-app.ts"],"sourcesContent":["import { inject, Injectable, signal } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { merge } from 'lodash-es';\n\n@Injectable({providedIn: 'root'})\nexport class SideAppRouter extends Router {\n protected sideApp!: SideAppService;\n\n setSideApp(sideApp: SideAppService) {\n this.sideApp = sideApp;\n }\n\n navigate(commands: any[], extras?: NavigationExtras & {expanded?: boolean}): Promise<boolean> {\n const _commands = extras?.relativeTo ? commands : ['', {outlets: {'side': commands}}];\n return super.navigate(_commands, merge({\n replaceUrl: true,\n
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-services-side-app.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/side-app/side-app.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/side-app/ng-atomic-common-services-side-app.ts"],"sourcesContent":["import { inject, Injectable, signal } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { merge } from 'lodash-es';\n\n@Injectable({providedIn: 'root'})\nexport class SideAppRouter extends Router {\n protected sideApp!: SideAppService;\n\n setSideApp(sideApp: SideAppService) {\n this.sideApp = sideApp;\n }\n\n navigate(commands: any[], extras?: NavigationExtras & {expanded?: boolean}): Promise<boolean> {\n const _commands = extras?.relativeTo ? commands : ['', {outlets: {'side': commands}}];\n return super.navigate(_commands, merge({\n replaceUrl: true,\n \n }, extras)).then((res) => {\n if (extras?.expanded === true) {\n this.sideApp.expand();\n } else if (extras?.expanded === false) {\n this.sideApp.collapse();\n }\n return res;\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SideAppService {\n readonly opened = signal(false);\n readonly router = inject(SideAppRouter);\n\n constructor() {\n this.router.setSideApp(this);\n }\n\n toggle() {\n this.opened.set(!this.opened());\n }\n\n collapse() {\n this.opened.set(false);\n }\n\n expand() {\n this.opened.set(true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAKM,MAAO,aAAc,SAAQ,MAAM,CAAA;AAGvC,IAAA,UAAU,CAAC,OAAuB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;IAEA,QAAQ,CAAC,QAAe,EAAE,MAAgD,EAAA;QACxE,MAAM,SAAS,GAAG,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAC,OAAO,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAC,EAAC,CAAC;AACrF,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;AACrC,YAAA,UAAU,EAAE,IAAI;SAEjB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACvB,YAAA,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,EAAE;AAC7B,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB;AAAO,iBAAA,IAAI,MAAM,EAAE,QAAQ,KAAK,KAAK,EAAE;AACrC,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;8GApBW,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADD,MAAM,EAAA,CAAA,CAAA;;2FAClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;MA2BnB,cAAc,CAAA;AAIzB,IAAA,WAAA,GAAA;AAHS,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAGrC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;8GAlBW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC9BD;;AAEG;;;;"}
|
|
@@ -5,7 +5,6 @@ class SideNavModeService {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.sideNavMode = signal('collapsed', ...(ngDevMode ? [{ debugName: "sideNavMode" }] : []));
|
|
7
7
|
}
|
|
8
|
-
/** @deprecated use toggle() instead */
|
|
9
8
|
toggleSideNav() {
|
|
10
9
|
this.sideNavMode.set(this.sideNavMode() === 'expanded' ? 'collapsed' : 'expanded');
|
|
11
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-services-side-nav-mode.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/side-nav-mode/side-nav-mode.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/side-nav-mode/ng-atomic-common-services-side-nav-mode.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type SideNavMode = 'expanded' | 'collapsed';\n\n@Injectable({ providedIn: 'root' })\nexport class SideNavModeService {\n readonly sideNavMode = signal<SideNavMode>('collapsed');\n\n
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-services-side-nav-mode.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/side-nav-mode/side-nav-mode.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/side-nav-mode/ng-atomic-common-services-side-nav-mode.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type SideNavMode = 'expanded' | 'collapsed';\n\n@Injectable({ providedIn: 'root' })\nexport class SideNavModeService {\n readonly sideNavMode = signal<SideNavMode>('collapsed');\n\n \n toggleSideNav() {\n this.sideNavMode.set(this.sideNavMode() === 'expanded' ? 'collapsed' : 'expanded');\n }\n\n toggle() {\n this.sideNavMode.set(this.sideNavMode() === 'expanded' ? 'collapsed' : 'expanded');\n }\n\n collapse() {\n this.sideNavMode.set('collapsed');\n }\n\n expand() {\n this.sideNavMode.set('expanded');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAKa,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,WAAW,uDAAC;AAkBxD,IAAA;IAfC,aAAa,GAAA;QACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IACpF;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IACpF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;IACnC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;8GAlBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACJlC;;AAEG;;;;"}
|
|
@@ -125,7 +125,6 @@ class SelectionService {
|
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
isSelected(position) {
|
|
128
|
-
// selectionの範囲に含まれているかどうかを返す
|
|
129
128
|
const selection = this.selection();
|
|
130
129
|
if (!selection)
|
|
131
130
|
return false;
|
|
@@ -311,7 +310,6 @@ class EditorService {
|
|
|
311
310
|
}
|
|
312
311
|
this.selection.clearSelection();
|
|
313
312
|
this.editinngCell.set(position);
|
|
314
|
-
// Notify EditingStateManager about editing start
|
|
315
313
|
const columnId = this.data.displayedColumns()[position.col];
|
|
316
314
|
this.editingStateManager.startEditing(position.row, columnId);
|
|
317
315
|
this.focus(position);
|
|
@@ -319,7 +317,6 @@ class EditorService {
|
|
|
319
317
|
stopEditing() {
|
|
320
318
|
const editingCell = this.editinngCell();
|
|
321
319
|
if (editingCell) {
|
|
322
|
-
// Notify EditingStateManager about editing stop
|
|
323
320
|
const columnId = this.data.displayedColumns()[editingCell.col];
|
|
324
321
|
this.editingStateManager.stopEditing(editingCell.row, columnId);
|
|
325
322
|
}
|
|
@@ -386,12 +383,10 @@ class AutoFillService {
|
|
|
386
383
|
this.resetAutofill();
|
|
387
384
|
}
|
|
388
385
|
updatePreview() {
|
|
389
|
-
// 既存のプレビューをクリア
|
|
390
386
|
this.clearPreview();
|
|
391
387
|
const range = this.targetRange();
|
|
392
388
|
if (!range)
|
|
393
389
|
return;
|
|
394
|
-
// 影響を受けるセルにプレビュークラスを追加
|
|
395
390
|
for (let row = range.start.row + 1; row <= range.end.row; row++) {
|
|
396
391
|
const position = { row, col: range.start.col };
|
|
397
392
|
const cellElement = this.getCellElement(position);
|
|
@@ -427,7 +422,6 @@ class SpreadSheetService {
|
|
|
427
422
|
constructor() {
|
|
428
423
|
this.config = { paste: false };
|
|
429
424
|
this.grid = inject(GridService);
|
|
430
|
-
// readonly data = inject(SpreadSheetDataService);
|
|
431
425
|
this.navigation = inject(NavigationService);
|
|
432
426
|
this.selection = inject(SelectionService);
|
|
433
427
|
this.clipboard = inject(ClipboardService);
|
|
@@ -445,8 +439,6 @@ class SpreadSheetService {
|
|
|
445
439
|
}
|
|
446
440
|
handleKeyDownOnEditing(event) {
|
|
447
441
|
const cell = this.editor.editinngCell();
|
|
448
|
-
// stopPropagation()が呼ばれている場合は処理しない
|
|
449
|
-
// IME入力中やユーザーの意図的な入力中断の場合にValueCellAtomから制御される
|
|
450
442
|
if (event.cancelBubble) {
|
|
451
443
|
return;
|
|
452
444
|
}
|
|
@@ -740,15 +732,12 @@ class AutofillHandleComponent {
|
|
|
740
732
|
}
|
|
741
733
|
show(rect, containerRect) {
|
|
742
734
|
const el = this.elementRef.nativeElement;
|
|
743
|
-
|
|
744
|
-
const handleSize = 14; // 8px + 2px*2 (border)
|
|
735
|
+
const handleSize = 14;
|
|
745
736
|
if (containerRect) {
|
|
746
|
-
// コンテナからの相対位置を計算
|
|
747
737
|
this.renderer.setStyle(el, 'left', `${rect.right - containerRect.left - handleSize / 2}px`);
|
|
748
738
|
this.renderer.setStyle(el, 'top', `${rect.bottom - containerRect.top - handleSize / 2}px`);
|
|
749
739
|
}
|
|
750
740
|
else {
|
|
751
|
-
// position: fixedの場合(フォールバック)
|
|
752
741
|
this.renderer.setStyle(el, 'left', `${rect.right - handleSize}px`);
|
|
753
742
|
this.renderer.setStyle(el, 'top', `${rect.bottom - handleSize}px`);
|
|
754
743
|
}
|
|
@@ -767,10 +756,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
|
|
|
767
756
|
type: HostListener,
|
|
768
757
|
args: ['mousedown', ['$event']]
|
|
769
758
|
}] } });
|
|
770
|
-
/**
|
|
771
|
-
* テーブル全体のオートフィル機能を管理するディレクティブ
|
|
772
|
-
* セルディレクティブから直接呼び出される
|
|
773
|
-
*/
|
|
774
759
|
class GridDataTableAutofill {
|
|
775
760
|
constructor() {
|
|
776
761
|
this.ss = inject(SpreadSheetService);
|
|
@@ -781,12 +766,9 @@ class GridDataTableAutofill {
|
|
|
781
766
|
this.cleanupFunctions = [];
|
|
782
767
|
this.handleComponent = null;
|
|
783
768
|
this.currentCell = null;
|
|
784
|
-
// オートフィル完了イベント
|
|
785
769
|
this.autofillComplete = output();
|
|
786
770
|
this.currentPosition = null;
|
|
787
|
-
// ハンドルコンポーネントを作成
|
|
788
771
|
this.handleComponent = this.viewContainerRef.createComponent(AutofillHandleComponent);
|
|
789
|
-
// ハンドルのmousedownイベントを設定
|
|
790
772
|
this.handleComponent.instance.handleMouseDown.subscribe(() => {
|
|
791
773
|
if (this.currentPosition) {
|
|
792
774
|
this.startAutofill(this.currentPosition);
|
|
@@ -796,10 +778,8 @@ class GridDataTableAutofill {
|
|
|
796
778
|
showHandle(cell, position) {
|
|
797
779
|
this.currentCell = cell;
|
|
798
780
|
this.currentPosition = position;
|
|
799
|
-
// ハンドルを適切な親要素に配置(初回のみ)
|
|
800
781
|
let scrollContainer = null;
|
|
801
782
|
if (!this.handleComponent?.location.nativeElement.parentElement) {
|
|
802
|
-
// スクロールビューポートか、テーブルコンテナを探す
|
|
803
783
|
scrollContainer = (cell.closest('cdk-virtual-scroll-viewport') ||
|
|
804
784
|
cell.closest('.mat-table-container') ||
|
|
805
785
|
cell.closest('table')?.parentElement);
|
|
@@ -807,7 +787,6 @@ class GridDataTableAutofill {
|
|
|
807
787
|
this.renderer.appendChild(scrollContainer, this.handleComponent.location.nativeElement);
|
|
808
788
|
}
|
|
809
789
|
else {
|
|
810
|
-
// フォールバック: document.bodyに追加(position: fixedモード)
|
|
811
790
|
this.renderer.appendChild(document.body, this.handleComponent.location.nativeElement);
|
|
812
791
|
this.renderer.setStyle(this.handleComponent.location.nativeElement, 'position', 'fixed');
|
|
813
792
|
}
|
|
@@ -818,7 +797,6 @@ class GridDataTableAutofill {
|
|
|
818
797
|
const cellRect = cell.getBoundingClientRect();
|
|
819
798
|
const containerRect = scrollContainer?.getBoundingClientRect();
|
|
820
799
|
this.handleComponent?.instance.show(cellRect, containerRect);
|
|
821
|
-
// スクロールイベントのリスナーを設定
|
|
822
800
|
this.setupScrollListener();
|
|
823
801
|
}
|
|
824
802
|
hideHandle() {
|
|
@@ -831,7 +809,7 @@ class GridDataTableAutofill {
|
|
|
831
809
|
}
|
|
832
810
|
setupScrollListener() {
|
|
833
811
|
if (this.cleanupFunctions.some(fn => fn.name === 'scrollCleanup')) {
|
|
834
|
-
return;
|
|
812
|
+
return;
|
|
835
813
|
}
|
|
836
814
|
const scrollHandler = () => {
|
|
837
815
|
if (this.currentCell && this.handleComponent) {
|
|
@@ -841,7 +819,6 @@ class GridDataTableAutofill {
|
|
|
841
819
|
this.handleComponent.instance.show(cellRect, containerRect);
|
|
842
820
|
}
|
|
843
821
|
};
|
|
844
|
-
// スクロール可能な親要素を見つける
|
|
845
822
|
const scrollContainer = this.currentCell?.closest('cdk-virtual-scroll-viewport') ||
|
|
846
823
|
this.currentCell?.closest('.mat-table-container');
|
|
847
824
|
if (scrollContainer) {
|
|
@@ -850,19 +827,15 @@ class GridDataTableAutofill {
|
|
|
850
827
|
Object.defineProperty(cleanup, 'name', { value: 'scrollCleanup' });
|
|
851
828
|
this.cleanupFunctions.push(cleanup);
|
|
852
829
|
}
|
|
853
|
-
// ウィンドウスクロールも監視
|
|
854
830
|
window.addEventListener('scroll', scrollHandler, { passive: true });
|
|
855
831
|
const windowCleanup = () => window.removeEventListener('scroll', scrollHandler);
|
|
856
832
|
Object.defineProperty(windowCleanup, 'name', { value: 'scrollCleanup' });
|
|
857
833
|
this.cleanupFunctions.push(windowCleanup);
|
|
858
834
|
}
|
|
859
|
-
// セルディレクティブから呼び出されるメソッド
|
|
860
835
|
startAutofill(position) {
|
|
861
836
|
this.autofillStartPosition = position;
|
|
862
837
|
this.ss.autofill.startAutofill(position);
|
|
863
|
-
// 既存のリスナーをクリーンアップ
|
|
864
838
|
this.cleanup();
|
|
865
|
-
// マウスイベントの設定
|
|
866
839
|
const onMouseMove = this.onMouseMove.bind(this);
|
|
867
840
|
const onMouseUp = this.onMouseUp.bind(this);
|
|
868
841
|
document.addEventListener('mousemove', onMouseMove);
|
|
@@ -875,7 +848,6 @@ class GridDataTableAutofill {
|
|
|
875
848
|
onMouseMove(event) {
|
|
876
849
|
if (!this.autofillStartPosition)
|
|
877
850
|
return;
|
|
878
|
-
// ドラッグ中のプレビュー処理
|
|
879
851
|
const element = document.elementFromPoint(event.clientX, event.clientY);
|
|
880
852
|
const cell = element?.closest('td[mat-cell]');
|
|
881
853
|
if (cell) {
|
|
@@ -898,26 +870,21 @@ class GridDataTableAutofill {
|
|
|
898
870
|
if (!sourcePosition || !targetRange) {
|
|
899
871
|
return null;
|
|
900
872
|
}
|
|
901
|
-
// GridServiceから実際のコンテキストを収集
|
|
902
873
|
const contexts = [];
|
|
903
874
|
const { start, end } = targetRange;
|
|
904
|
-
// ソースコンテキストを取得
|
|
905
875
|
const sourceContext = this.ss.grid.getContext(sourcePosition);
|
|
906
876
|
if (!sourceContext) {
|
|
907
877
|
console.warn('Source context not found');
|
|
908
878
|
this.ss.autofill.cancelAutofill();
|
|
909
879
|
return null;
|
|
910
880
|
}
|
|
911
|
-
// 影響を受けるセルのコンテキストを収集(表示されているセルのみ)
|
|
912
881
|
for (let row = start.row + 1; row <= end.row; row++) {
|
|
913
882
|
const targetContext = this.ss.grid.getContext({ row, col: start.col });
|
|
914
883
|
if (targetContext) {
|
|
915
884
|
contexts.push({ position: { row, col: start.col }, context: targetContext });
|
|
916
885
|
}
|
|
917
886
|
}
|
|
918
|
-
// コンテキスト情報を保存
|
|
919
887
|
this.lastAutofillContexts = { sourceContext, targetContexts: contexts };
|
|
920
|
-
// オートフィルモードをリセット
|
|
921
888
|
this.ss.autofill.cancelAutofill();
|
|
922
889
|
if (contexts.length > 0) {
|
|
923
890
|
return {
|
|
@@ -963,7 +930,6 @@ class SpreadSheetCellAutofill {
|
|
|
963
930
|
this.ss.selection.isCursorPosition(this.position()) &&
|
|
964
931
|
!this.ss.editor.isEditing(this.position()) &&
|
|
965
932
|
!this.ss.autofill.isAutofillMode(), ...(ngDevMode ? [{ debugName: "shouldShow" }] : []));
|
|
966
|
-
// requestAnimationFrameを使用して、DOMの更新後に実行
|
|
967
933
|
effect(() => {
|
|
968
934
|
if (this.shouldShow()) {
|
|
969
935
|
requestAnimationFrame(() => {
|
|
@@ -971,7 +937,6 @@ class SpreadSheetCellAutofill {
|
|
|
971
937
|
});
|
|
972
938
|
}
|
|
973
939
|
else if (!this.shouldShow() && this.ss.selection.isCursorPosition(this.position())) {
|
|
974
|
-
// 現在のセルがカーソル位置だが表示条件を満たさない場合のみ非表示
|
|
975
940
|
this.table.hideHandle();
|
|
976
941
|
}
|
|
977
942
|
});
|
|
@@ -984,8 +949,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
|
|
|
984
949
|
args: [{ standalone: true, selector: '[gridDataCellAutofill]' }]
|
|
985
950
|
}], ctorParameters: () => [], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridDataCellAutofill", required: false }] }], enabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridDataCellAutofillEnabled", required: false }] }] } });
|
|
986
951
|
|
|
987
|
-
// Components are imported directly by directives to avoid circular dependencies
|
|
988
|
-
|
|
989
952
|
/**
|
|
990
953
|
* Generated bundle index. Do not edit.
|
|
991
954
|
*/
|