@brilo/base-blocks 0.1.37 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/build/.tsbuildinfo +1 -1
  2. package/build/blocks/anchor/anchor-group/factory.d.ts.map +1 -1
  3. package/build/blocks/anchor/anchor-group/factory.js +2 -1
  4. package/build/blocks/anchor/anchor-group/icon.d.ts +2 -0
  5. package/build/blocks/anchor/anchor-group/icon.d.ts.map +1 -0
  6. package/build/blocks/anchor/anchor-group/icon.js +2 -0
  7. package/build/blocks/anchor/anchor-group/index.d.ts.map +1 -1
  8. package/build/blocks/anchor/anchor-group/index.js +1 -0
  9. package/build/blocks/career/career-header/constants.d.ts +2 -0
  10. package/build/blocks/career/career-header/constants.d.ts.map +1 -0
  11. package/build/blocks/career/career-header/constants.js +1 -0
  12. package/build/blocks/career/career-header/edit.d.ts +1 -1
  13. package/build/blocks/career/career-header/edit.d.ts.map +1 -1
  14. package/build/blocks/career/career-header/edit.js +6 -3
  15. package/build/blocks/career/career-header/factory.d.ts.map +1 -1
  16. package/build/blocks/career/career-header/factory.js +3 -1
  17. package/build/blocks/career/career-header/index.d.ts +1 -0
  18. package/build/blocks/career/career-header/index.d.ts.map +1 -1
  19. package/build/blocks/career/career-header/index.js +4 -0
  20. package/build/blocks/career/job-position-group/index.d.ts.map +1 -1
  21. package/build/blocks/career/job-position-group/index.js +1 -0
  22. package/build/blocks/document/documents-grid/index.d.ts +1 -0
  23. package/build/blocks/document/documents-grid/index.d.ts.map +1 -1
  24. package/build/blocks/document/documents-grid/index.js +2 -0
  25. package/build/blocks/form/form-field/edit.d.ts.map +1 -1
  26. package/build/blocks/form/form-field/edit.js +4 -2
  27. package/build/blocks/form/form-field/factory.d.ts.map +1 -1
  28. package/build/blocks/form/form-field/factory.js +2 -0
  29. package/build/blocks/form/form-field/types.d.ts +2 -0
  30. package/build/blocks/form/form-field/types.d.ts.map +1 -1
  31. package/build/blocks/form/form-group/edit.d.ts.map +1 -1
  32. package/build/blocks/form/form-group/edit.js +59 -10
  33. package/build/blocks/form/form-group/factory.d.ts.map +1 -1
  34. package/build/blocks/form/form-group/factory.js +2 -0
  35. package/build/blocks/form/form-group/types.d.ts +2 -0
  36. package/build/blocks/form/form-group/types.d.ts.map +1 -1
  37. package/build/blocks/post/post-content/index.d.ts.map +1 -1
  38. package/build/blocks/post/post-content/index.js +1 -0
  39. package/build/blocks/sections/base-section/controls.d.ts.map +1 -1
  40. package/build/blocks/sections/base-section/edit.d.ts.map +1 -1
  41. package/build/blocks/sections/base-section/edit.js +3 -1
  42. package/build/blocks/sections/base-section/types.d.ts.map +1 -1
  43. package/build/components/Document/DocumentTermSelectModal.d.ts +8 -0
  44. package/build/components/Document/DocumentTermSelectModal.d.ts.map +1 -0
  45. package/build/components/Document/DocumentTermSelectModal.js +49 -0
  46. package/build/components/Post/PostSelectModal.d.ts +7 -0
  47. package/build/components/Post/PostSelectModal.d.ts.map +1 -0
  48. package/build/components/Post/PostSelectModal.js +42 -0
  49. package/build/components/Post/PostTermSelectModal.d.ts +8 -0
  50. package/build/components/Post/PostTermSelectModal.d.ts.map +1 -0
  51. package/build/components/Post/PostTermSelectModal.js +49 -0
  52. package/build/index.d.ts +3 -1
  53. package/build/index.d.ts.map +1 -1
  54. package/build/index.js +3 -1
  55. package/package.json +2 -1
  56. package/src/blocks/anchor/anchor-group/editor.scss +1 -1
  57. package/src/blocks/anchor/anchor-group/factory.tsx +2 -1
  58. package/src/blocks/anchor/anchor-group/icon.tsx +23 -0
  59. package/src/blocks/anchor/anchor-group/index.ts +1 -0
  60. package/src/blocks/anchor/anchor-item/editor.scss +1 -1
  61. package/src/blocks/career/career-header/constants.ts +1 -0
  62. package/src/blocks/career/career-header/edit.tsx +5 -2
  63. package/src/blocks/career/career-header/factory.tsx +2 -1
  64. package/src/blocks/career/career-header/index.ts +4 -0
  65. package/src/blocks/career/job-position-group/index.ts +1 -0
  66. package/src/blocks/document/documents-grid/index.ts +2 -0
  67. package/src/blocks/form/form-field/edit.tsx +26 -1
  68. package/src/blocks/form/form-field/factory.tsx +2 -0
  69. package/src/blocks/form/form-field/types.ts +2 -0
  70. package/src/blocks/form/form-group/edit.tsx +136 -4
  71. package/src/blocks/form/form-group/editor.scss +46 -33
  72. package/src/blocks/form/form-group/factory.tsx +2 -0
  73. package/src/blocks/form/form-group/types.ts +2 -0
  74. package/src/blocks/post/post-content/index.ts +1 -0
  75. package/src/blocks/sections/base-section/controls.tsx +5 -1
  76. package/src/blocks/sections/base-section/edit.tsx +3 -1
  77. package/src/blocks/sections/base-section/types.ts +9 -3
  78. package/src/components/Document/DocumentTermSelectModal.tsx +60 -0
  79. package/src/components/Post/PostSelectModal.tsx +51 -0
  80. package/src/components/Post/PostTermSelectModal.tsx +60 -0
  81. package/src/index.ts +8 -1
@@ -1,41 +1,54 @@
1
1
  .g-form {
2
2
  width: 100%;
3
+ }
3
4
 
4
- &__fields {
5
- display: grid;
6
- grid-template-columns: repeat(12, minmax(0, 1fr));
7
- gap: 16px;
8
- padding: 16px;
9
- padding-bottom: 56px;
10
- outline: 1px dashed #ddd;
5
+ .g-form__fields {
6
+ display: grid;
7
+ grid-template-columns: repeat(12, minmax(0, 1fr));
8
+ gap: 16px;
9
+ padding: 16px;
10
+ padding-bottom: 56px;
11
+ outline: 1px dashed #ddd;
12
+ }
11
13
 
12
- > * {
13
- max-width: 100%;
14
- }
15
- }
14
+ .g-form__fields > * {
15
+ max-width: 100%;
16
+ }
16
17
 
17
- &__gdpr {
18
- margin-top: 16px;
19
- padding: 16px;
20
- border: 1px solid #ddd;
21
- border-radius: 4px;
22
- background: #fff;
23
- }
18
+ .g-form__gdpr {
19
+ margin-top: 16px;
20
+ padding: 16px;
21
+ border: 1px solid #ddd;
22
+ border-radius: 4px;
23
+ background: #fff;
24
+ }
24
25
 
25
- &__gdpr-header {
26
- display: flex;
27
- flex-wrap: wrap;
28
- justify-content: space-between;
29
- align-items: center;
30
- gap: 12px;
31
- margin-bottom: 12px;
32
- }
26
+ .g-form__gdpr-header {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ justify-content: space-between;
30
+ align-items: center;
31
+ gap: 12px;
32
+ margin-bottom: 12px;
33
+ }
34
+
35
+ .g-form__gdpr-content {
36
+ min-height: 56px;
37
+ padding: 10px 12px;
38
+ border: 1px solid #ddd;
39
+ border-radius: 4px;
40
+ background: #fff;
41
+ }
33
42
 
34
- &__gdpr-content {
35
- min-height: 56px;
36
- padding: 10px 12px;
37
- border: 1px solid #ddd;
38
- border-radius: 4px;
39
- background: #fff;
40
- }
43
+ // Rendered inside InspectorControls, not inside the block content area itself.
44
+ .g-form__gtm-preview {
45
+ max-width: 100%;
46
+ padding: 8px;
47
+ overflow-x: auto;
48
+ border: 1px solid #ddd;
49
+ border-radius: 4px;
50
+ background: #f0f0f0;
51
+ font-size: 11px;
52
+ white-space: pre-wrap;
53
+ word-break: break-word;
41
54
  }
@@ -29,6 +29,8 @@ export function createFormGroupBlock(options: FormGroupOptions): BlockConfigurat
29
29
  submit: {type: 'object', default: {label: 'Odeslat'}},
30
30
  gdpr: {type: 'object', default: {content: '', checkbox: true}},
31
31
  successMessage: {type: 'string', default: 'Formulář byl úspěšně odeslán.'},
32
+ gtmEnabled: {type: 'boolean', default: false},
33
+ gtmEventName: {type: 'string', default: ''},
32
34
  },
33
35
  edit: createFormGroupEdit(options),
34
36
  save: () => <InnerBlocks.Content />,
@@ -18,6 +18,8 @@ export interface FormGroupAttributes extends Record<string, unknown> {
18
18
  submit: {label: string}
19
19
  gdpr: {content: string; checkbox: boolean}
20
20
  successMessage: string
21
+ gtmEnabled: boolean
22
+ gtmEventName: string
21
23
  }
22
24
 
23
25
  export interface FormGroupOptions extends BriloBlockType {}
@@ -5,4 +5,5 @@ import type {PostContentOptions} from './types'
5
5
 
6
6
  export const postContentDefaults: PostContentOptions = {
7
7
  name: 'brilo/post-content',
8
+ parent: ['brilo/base-section'],
8
9
  }
@@ -289,7 +289,11 @@ function BackgroundImageControl({value, onChange}: BackgroundImageControlProps)
289
289
  onChange={(next) => update({position: next as BackgroundImagePosition})}
290
290
  />
291
291
 
292
- <BaseControl label={__('Překryv barvou', 'brilo-blocks')} __nextHasNoMarginBottom help={__('Ztmavení/zabarvení obrázku pro lepší čitelnost textu.', 'brilo-blocks')}>
292
+ <BaseControl
293
+ label={__('Překryv barvou', 'brilo-blocks')}
294
+ __nextHasNoMarginBottom
295
+ help={__('Ztmavení/zabarvení obrázku pro lepší čitelnost textu.', 'brilo-blocks')}
296
+ >
293
297
  <ColorPalette
294
298
  colors={paletteColors}
295
299
  value={overlayColor || undefined}
@@ -26,7 +26,9 @@ export function createBaseSectionEdit<TExtra extends Record<string, unknown> = R
26
26
  ? {
27
27
  backgroundImage: [tintLayer, `url(${bgImageSrc})`].filter(Boolean).join(', '),
28
28
  backgroundSize: [tintLayer ? '100% 100%' : null, backgroundImage?.fit ?? 'cover'].filter(Boolean).join(', '),
29
- backgroundPosition: [tintLayer ? 'center center' : null, backgroundImage?.position ?? 'center center'].filter(Boolean).join(', '),
29
+ backgroundPosition: [tintLayer ? 'center center' : null, backgroundImage?.position ?? 'center center']
30
+ .filter(Boolean)
31
+ .join(', '),
30
32
  backgroundRepeat: 'no-repeat',
31
33
  padding: '16px',
32
34
  }
@@ -34,9 +34,15 @@ export interface Decoration {
34
34
  export type BackgroundImageFit = 'cover' | 'contain'
35
35
 
36
36
  export type BackgroundImagePosition =
37
- | 'left top' | 'center top' | 'right top'
38
- | 'left center' | 'center center' | 'right center'
39
- | 'left bottom' | 'center bottom' | 'right bottom'
37
+ | 'left top'
38
+ | 'center top'
39
+ | 'right top'
40
+ | 'left center'
41
+ | 'center center'
42
+ | 'right center'
43
+ | 'left bottom'
44
+ | 'center bottom'
45
+ | 'right bottom'
40
46
 
41
47
  export interface BackgroundImageOverlay {
42
48
  color?: string
@@ -0,0 +1,60 @@
1
+ import type {View} from '@wordpress/dataviews/wp'
2
+ import {__} from '@wordpress/i18n'
3
+ import {createEntitySelectModal} from '~/components/Event/EntitySelectModal'
4
+
5
+ type DocumentCategoryRecord = {
6
+ id: number
7
+ name: string
8
+ slug: string
9
+ count?: number
10
+ }
11
+
12
+ const DEFAULT_VIEW: View = {
13
+ type: 'table',
14
+ search: '',
15
+ filters: [],
16
+ page: 1,
17
+ perPage: 20,
18
+ sort: {field: 'name', direction: 'asc'},
19
+ fields: ['slug', 'count'],
20
+ titleField: 'name',
21
+ }
22
+
23
+ /**
24
+ * Manual document_category picker (table view, search, sort, checkbox
25
+ * selection, reorderable selection list) with name/slug/count columns. See
26
+ * `EntitySelectModal` for the shared DataViews wiring.
27
+ */
28
+ export const DocumentTermSelectModal = createEntitySelectModal<DocumentCategoryRecord>({
29
+ endpoint: '/wp/v2/document_category?per_page=100&orderby=name&order=asc&_fields=id,name,slug,count',
30
+ defaultView: DEFAULT_VIEW,
31
+ buttonLabel: __('Vybrat kategorie', 'brilo-blocks'),
32
+ modalTitle: __('Vybrat kategorie', 'brilo-blocks'),
33
+ emptyLabel: __('Nevybrány žádné kategorie.', 'brilo-blocks'),
34
+ getItemLabel: (item) => item.name,
35
+ matchesSearch: (item, needle) => item.name.toLowerCase().includes(needle) || item.slug.toLowerCase().includes(needle),
36
+ sortValue: (item, field) => (item as Record<string, unknown>)[field] as string | number,
37
+ fields: [
38
+ {
39
+ id: 'name',
40
+ label: __('Název', 'brilo-blocks'),
41
+ enableHiding: false,
42
+ enableSorting: true,
43
+ render: ({item}: {item: DocumentCategoryRecord}) => item.name || __('(bez názvu)', 'brilo-blocks'),
44
+ },
45
+ {
46
+ id: 'slug',
47
+ label: __('Slug', 'brilo-blocks'),
48
+ enableSorting: true,
49
+ render: ({item}: {item: DocumentCategoryRecord}) => item.slug || '—',
50
+ },
51
+ {
52
+ id: 'count',
53
+ label: __('Počet', 'brilo-blocks'),
54
+ enableSorting: true,
55
+ render: ({item}: {item: DocumentCategoryRecord}) => (undefined !== item.count ? String(item.count) : '—'),
56
+ },
57
+ ],
58
+ })
59
+
60
+ export const DocumentTermSelect = DocumentTermSelectModal
@@ -0,0 +1,51 @@
1
+ import type {View} from '@wordpress/dataviews/wp'
2
+ import {__} from '@wordpress/i18n'
3
+ import {createEntitySelectModal} from '~/components/Event/EntitySelectModal'
4
+
5
+ type PostRecord = {
6
+ id: number
7
+ title: {rendered: string}
8
+ date: string
9
+ }
10
+
11
+ const DEFAULT_VIEW: View = {
12
+ type: 'table',
13
+ search: '',
14
+ filters: [],
15
+ page: 1,
16
+ perPage: 20,
17
+ sort: {field: 'title', direction: 'asc'},
18
+ fields: ['date'],
19
+ titleField: 'title',
20
+ }
21
+
22
+ /**
23
+ * Manual post picker (table view, search, sort, checkbox selection,
24
+ * reorderable selection list) with title/date columns. See `EntitySelectModal`
25
+ * for the shared DataViews wiring.
26
+ */
27
+ export const PostSelectModal = createEntitySelectModal<PostRecord>({
28
+ endpoint: '/wp/v2/posts?per_page=100&orderby=title&order=asc&_fields=id,title,date',
29
+ defaultView: DEFAULT_VIEW,
30
+ buttonLabel: __('Vybrat příspěvky', 'brilo-blocks'),
31
+ modalTitle: __('Vybrat příspěvky', 'brilo-blocks'),
32
+ emptyLabel: __('Nevybrány žádné příspěvky.', 'brilo-blocks'),
33
+ getItemLabel: (item) => item.title.rendered,
34
+ matchesSearch: (item, needle) => item.title.rendered.toLowerCase().includes(needle),
35
+ sortValue: (item, field) => ('title' === field ? item.title.rendered : ((item as never)[field] ?? '')),
36
+ fields: [
37
+ {
38
+ id: 'title',
39
+ label: __('Název', 'brilo-blocks'),
40
+ enableHiding: false,
41
+ enableSorting: true,
42
+ render: ({item}: {item: PostRecord}) => item.title.rendered || __('(bez názvu)', 'brilo-blocks'),
43
+ },
44
+ {
45
+ id: 'date',
46
+ label: __('Datum', 'brilo-blocks'),
47
+ enableSorting: true,
48
+ render: ({item}: {item: PostRecord}) => (item.date ? new Date(item.date).toLocaleDateString() : '—'),
49
+ },
50
+ ],
51
+ })
@@ -0,0 +1,60 @@
1
+ import type {View} from '@wordpress/dataviews/wp'
2
+ import {__} from '@wordpress/i18n'
3
+ import {createEntitySelectModal} from '~/components/Event/EntitySelectModal'
4
+
5
+ type PostCategoryRecord = {
6
+ id: number
7
+ name: string
8
+ slug: string
9
+ count?: number
10
+ }
11
+
12
+ const DEFAULT_VIEW: View = {
13
+ type: 'table',
14
+ search: '',
15
+ filters: [],
16
+ page: 1,
17
+ perPage: 20,
18
+ sort: {field: 'name', direction: 'asc'},
19
+ fields: ['slug', 'count'],
20
+ titleField: 'name',
21
+ }
22
+
23
+ /**
24
+ * Manual post category picker (table view, search, sort, checkbox
25
+ * selection, reorderable selection list) with name/slug/count columns. See
26
+ * `EntitySelectModal` for the shared DataViews wiring.
27
+ */
28
+ export const PostTermSelectModal = createEntitySelectModal<PostCategoryRecord>({
29
+ endpoint: '/wp/v2/categories?per_page=100&orderby=name&order=asc&_fields=id,name,slug,count',
30
+ defaultView: DEFAULT_VIEW,
31
+ buttonLabel: __('Vybrat kategorie', 'brilo-blocks'),
32
+ modalTitle: __('Vybrat kategorie', 'brilo-blocks'),
33
+ emptyLabel: __('Nevybrány žádné kategorie.', 'brilo-blocks'),
34
+ getItemLabel: (item) => item.name,
35
+ matchesSearch: (item, needle) => item.name.toLowerCase().includes(needle) || item.slug.toLowerCase().includes(needle),
36
+ sortValue: (item, field) => (item as Record<string, unknown>)[field] as string | number,
37
+ fields: [
38
+ {
39
+ id: 'name',
40
+ label: __('Název', 'brilo-blocks'),
41
+ enableHiding: false,
42
+ enableSorting: true,
43
+ render: ({item}: {item: PostCategoryRecord}) => item.name || __('(bez názvu)', 'brilo-blocks'),
44
+ },
45
+ {
46
+ id: 'slug',
47
+ label: __('Slug', 'brilo-blocks'),
48
+ enableSorting: true,
49
+ render: ({item}: {item: PostCategoryRecord}) => item.slug || '—',
50
+ },
51
+ {
52
+ id: 'count',
53
+ label: __('Počet', 'brilo-blocks'),
54
+ enableSorting: true,
55
+ render: ({item}: {item: PostCategoryRecord}) => (undefined !== item.count ? String(item.count) : '—'),
56
+ },
57
+ ],
58
+ })
59
+
60
+ export const PostTermSelect = PostTermSelectModal
package/src/index.ts CHANGED
@@ -150,6 +150,8 @@ export type {PostSliderGroupAttributes, PostSliderGroupOptions} from './blocks/p
150
150
  export {createPostSliderGroupBlock, postSliderGroupDefaults} from './blocks/post/post-slider-group'
151
151
  export type {PostsGridAttributes, PostsGridOptions} from './blocks/post/posts-grid'
152
152
  export {createPostsGridBlock, postsGridDefaults} from './blocks/post/posts-grid'
153
+ export {PostSelectModal} from './components/Post/PostSelectModal'
154
+ export {PostTermSelectModal} from './components/Post/PostTermSelectModal'
153
155
  export type {
154
156
  DocumentsGridAttributes,
155
157
  DocumentsGridOptions,
@@ -157,7 +159,12 @@ export type {
157
159
  DocumentsGridMode,
158
160
  DocumentsGridSortBy,
159
161
  } from './blocks/document/documents-grid'
160
- export {createDocumentsGridBlock, documentsGridDefaults, DocumentsSelectModal} from './blocks/document/documents-grid'
162
+ export {
163
+ createDocumentsGridBlock,
164
+ documentsGridDefaults,
165
+ DocumentsSelectModal,
166
+ DocumentTermSelectModal,
167
+ } from './blocks/document/documents-grid'
161
168
  export type {LinkItemAttributes, LinkItemIcon, LinkItemOptions} from './blocks/link/link-item'
162
169
  export {createLinkItemBlock, linkItemDefaults} from './blocks/link/link-item'
163
170
  export type {ContentWithAsideAttributes, ContentWithAsideOptions} from './blocks/layout/layout-content-w-aside'