@dereekb/dbx-components-mcp 14.8.0 → 14.10.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/dbx-components-mcp.js +3 -3
- package/generated/dereekb-dbx-core.filters.mcp.generated.json +50 -0
- package/generated/dereekb-dbx-web.css-utilities.mcp.generated.json +257 -11
- package/generated/dereekb-dbx-web.tokens.mcp.generated.json +148 -0
- package/generated/dereekb-demo.dbx-docs-ui-examples.mcp.generated.json +89 -0
- package/generated/dereekb-firebase.model-firebase-index.mcp.generated.json +83 -14
- package/package.json +3 -3
package/dbx-components-mcp.js
CHANGED
|
@@ -10,7 +10,7 @@ var __export = (target, all) => {
|
|
|
10
10
|
// packages/dbx-components-mcp/package.json
|
|
11
11
|
var package_default = {
|
|
12
12
|
name: "@dereekb/dbx-components-mcp",
|
|
13
|
-
version: "14.
|
|
13
|
+
version: "14.10.0",
|
|
14
14
|
sideEffects: false,
|
|
15
15
|
type: "module",
|
|
16
16
|
bin: {
|
|
@@ -22,8 +22,8 @@ var package_default = {
|
|
|
22
22
|
"ts-morph": "^21.0.0"
|
|
23
23
|
},
|
|
24
24
|
peerDependencies: {
|
|
25
|
-
"@dereekb/dbx-cli": "14.
|
|
26
|
-
"@dereekb/util": "14.
|
|
25
|
+
"@dereekb/dbx-cli": "14.10.0",
|
|
26
|
+
"@dereekb/util": "14.10.0"
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
|
|
@@ -83,6 +83,31 @@
|
|
|
83
83
|
"dbx__ref__dbx-component-patterns"
|
|
84
84
|
]
|
|
85
85
|
},
|
|
86
|
+
{
|
|
87
|
+
"kind": "directive",
|
|
88
|
+
"slug": "map-merge-source",
|
|
89
|
+
"selector": "[dbxFilterMapMergeSource]",
|
|
90
|
+
"className": "DbxFilterMapMergeSourceDirective",
|
|
91
|
+
"module": "@dereekb/dbx-core",
|
|
92
|
+
"description": "Provides a read-only {@link FilterSource} that merges the filters of several keys in an ancestor {@link FilterMap} into one filter. Lets separate filter controls (e.g. a date popover and an attributes popover) each own a key while children consume a single combined filter.\n\nKeys later in the array win when two keys set the same field, and the merged filter has no `preset`. Every key needs a value (e.g. a default filter) before the merged filter emits.",
|
|
93
|
+
"inputs": [
|
|
94
|
+
{
|
|
95
|
+
"name": "dbxFilterMapMergeSource",
|
|
96
|
+
"type": "Maybe<FilterMapKey[]>",
|
|
97
|
+
"description": "The map keys to merge, in priority order."
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"outputs": [],
|
|
101
|
+
"example": "<div dbxFilterMap>\n <my-date-filter-button [dbxFilterMapSourceConnector]=\"'date'\"></my-date-filter-button>\n <my-attributes-filter-button [dbxFilterMapSourceConnector]=\"'attributes'\"></my-attributes-filter-button>\n <div [dbxFilterMapMergeSource]=\"['date', 'attributes']\">\n <my-filtered-list></my-filtered-list>\n </div>\n</div>",
|
|
102
|
+
"relatedSlugs": [
|
|
103
|
+
"map",
|
|
104
|
+
"map-source",
|
|
105
|
+
"map-source-connector"
|
|
106
|
+
],
|
|
107
|
+
"skillRefs": [
|
|
108
|
+
"dbx__ref__dbx-component-patterns"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
86
111
|
{
|
|
87
112
|
"kind": "directive",
|
|
88
113
|
"slug": "map-source",
|
|
@@ -107,6 +132,31 @@
|
|
|
107
132
|
"dbx__ref__dbx-component-patterns"
|
|
108
133
|
]
|
|
109
134
|
},
|
|
135
|
+
{
|
|
136
|
+
"kind": "directive",
|
|
137
|
+
"slug": "map-storage",
|
|
138
|
+
"selector": "[dbxFilterMapStorage]",
|
|
139
|
+
"className": "DbxFilterMapStorageDirective",
|
|
140
|
+
"module": "@dereekb/dbx-core",
|
|
141
|
+
"description": "Saves the filter of a keyed entry in an ancestor {@link FilterMap} to storage (localStorage by default), and loads it again when the page loads. The saved filter becomes the key's default filter, and every later change to the key is saved.\n\nUse {@link reset} to set the key back to its default filter and remove the saved filter.\n\nRequires {@link provideDbxFilterStorage}.",
|
|
142
|
+
"inputs": [
|
|
143
|
+
{
|
|
144
|
+
"name": "dbxFilterMapStorage",
|
|
145
|
+
"type": "Maybe<DbxFilterMapStorageConfig<F, J>>",
|
|
146
|
+
"description": "The key to save and how to save it."
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"outputs": [],
|
|
150
|
+
"example": "<div dbxFilterMap>\n <my-filter-button [dbxFilterMapSourceConnector]=\"'list'\" [dbxFilterMapStorage]=\"{ key: 'list', storageKey: 'my.list.filter', defaultFilter: {} }\"></my-filter-button>\n</div>",
|
|
151
|
+
"relatedSlugs": [
|
|
152
|
+
"map",
|
|
153
|
+
"map-source-connector",
|
|
154
|
+
"map-merge-source"
|
|
155
|
+
],
|
|
156
|
+
"skillRefs": [
|
|
157
|
+
"dbx__ref__dbx-component-patterns"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
110
160
|
{
|
|
111
161
|
"kind": "pattern",
|
|
112
162
|
"slug": "clickable-preset",
|
|
@@ -2607,7 +2607,7 @@
|
|
|
2607
2607
|
"source": "@dereekb/dbx-web",
|
|
2608
2608
|
"module": "@dereekb/dbx-web",
|
|
2609
2609
|
"file": "src/lib/layout/list/_list.scss",
|
|
2610
|
-
"line":
|
|
2610
|
+
"line": 632,
|
|
2611
2611
|
"declarations": [
|
|
2612
2612
|
{
|
|
2613
2613
|
"property": "height",
|
|
@@ -2628,7 +2628,7 @@
|
|
|
2628
2628
|
"source": "@dereekb/dbx-web",
|
|
2629
2629
|
"module": "@dereekb/dbx-web",
|
|
2630
2630
|
"file": "src/lib/layout/list/_list.scss",
|
|
2631
|
-
"line":
|
|
2631
|
+
"line": 338,
|
|
2632
2632
|
"declarations": [
|
|
2633
2633
|
{
|
|
2634
2634
|
"property": "--dbx-list-card-items-list-gap",
|
|
@@ -2651,13 +2651,259 @@
|
|
|
2651
2651
|
"--dbx-list-card-items-list-gap"
|
|
2652
2652
|
]
|
|
2653
2653
|
},
|
|
2654
|
+
{
|
|
2655
|
+
"slug": "list-detail-item",
|
|
2656
|
+
"selector": ".dbx-list-detail-item",
|
|
2657
|
+
"source": "@dereekb/dbx-web",
|
|
2658
|
+
"module": "@dereekb/dbx-web",
|
|
2659
|
+
"file": "src/lib/layout/list/_list.scss",
|
|
2660
|
+
"line": 467,
|
|
2661
|
+
"declarations": [
|
|
2662
|
+
{
|
|
2663
|
+
"property": "--dbx-list-detail-item-padding-resolved",
|
|
2664
|
+
"value": "var(--dbx-list-detail-item-padding, var(--dbx-padding-3))"
|
|
2665
|
+
},
|
|
2666
|
+
{
|
|
2667
|
+
"property": "display",
|
|
2668
|
+
"value": "flex"
|
|
2669
|
+
},
|
|
2670
|
+
{
|
|
2671
|
+
"property": "flex-direction",
|
|
2672
|
+
"value": "row"
|
|
2673
|
+
},
|
|
2674
|
+
{
|
|
2675
|
+
"property": "align-items",
|
|
2676
|
+
"value": "stretch"
|
|
2677
|
+
},
|
|
2678
|
+
{
|
|
2679
|
+
"property": "gap",
|
|
2680
|
+
"value": "var(--dbx-list-detail-item-gap, var(--dbx-padding-3))"
|
|
2681
|
+
},
|
|
2682
|
+
{
|
|
2683
|
+
"property": "min-width",
|
|
2684
|
+
"value": "0"
|
|
2685
|
+
},
|
|
2686
|
+
{
|
|
2687
|
+
"property": "padding",
|
|
2688
|
+
"value": "var(--dbx-list-detail-item-padding-resolved)"
|
|
2689
|
+
},
|
|
2690
|
+
{
|
|
2691
|
+
"property": "box-sizing",
|
|
2692
|
+
"value": "border-box"
|
|
2693
|
+
}
|
|
2694
|
+
],
|
|
2695
|
+
"role": "layout",
|
|
2696
|
+
"intent": "detail list-row layout — flex row of a leading slot, a content column (bold `.item-title` + `.item-line` rows with optional leading icons) and a trailing slot, paired with nested `.item-leading` / `.item-leading-block` / `.item-content` / `.item-title` / `.item-line` / `.item-trailing` / `.item-trailing-divided` helpers; the row pads itself, so pair with `dbx-list-item-p0` on the view",
|
|
2697
|
+
"seeAlso": [
|
|
2698
|
+
"dbx-list-two-line-item",
|
|
2699
|
+
"dbx-list-item-p0",
|
|
2700
|
+
"dbx-list-detail-item-highlight"
|
|
2701
|
+
],
|
|
2702
|
+
"tokensRead": [
|
|
2703
|
+
"--dbx-list-detail-item-gap",
|
|
2704
|
+
"--dbx-list-detail-item-line-gap",
|
|
2705
|
+
"--dbx-list-detail-item-line-icon-size",
|
|
2706
|
+
"--dbx-list-detail-item-padding",
|
|
2707
|
+
"--dbx-list-detail-item-padding-resolved",
|
|
2708
|
+
"--dbx-padding-1",
|
|
2709
|
+
"--dbx-padding-3",
|
|
2710
|
+
"--mat-sys-body-medium",
|
|
2711
|
+
"--mat-sys-on-surface",
|
|
2712
|
+
"--mat-sys-on-surface-variant",
|
|
2713
|
+
"--mat-sys-title-medium"
|
|
2714
|
+
],
|
|
2715
|
+
"tokensSet": [
|
|
2716
|
+
"--dbx-list-detail-item-padding-resolved"
|
|
2717
|
+
]
|
|
2718
|
+
},
|
|
2719
|
+
{
|
|
2720
|
+
"slug": "list-detail-item-gap",
|
|
2721
|
+
"selector": ".dbx-list-detail-item-gap",
|
|
2722
|
+
"source": "@dereekb/dbx-web",
|
|
2723
|
+
"module": "@dereekb/dbx-web",
|
|
2724
|
+
"file": "src/lib/layout/list/_list.scss",
|
|
2725
|
+
"line": 564,
|
|
2726
|
+
"declarations": [
|
|
2727
|
+
{
|
|
2728
|
+
"property": "display",
|
|
2729
|
+
"value": "flex"
|
|
2730
|
+
},
|
|
2731
|
+
{
|
|
2732
|
+
"property": "align-items",
|
|
2733
|
+
"value": "center"
|
|
2734
|
+
},
|
|
2735
|
+
{
|
|
2736
|
+
"property": "gap",
|
|
2737
|
+
"value": "var(--dbx-list-detail-item-gap, var(--dbx-padding-3))"
|
|
2738
|
+
},
|
|
2739
|
+
{
|
|
2740
|
+
"property": "padding",
|
|
2741
|
+
"value": "var(--dbx-list-detail-item-gap-marker-padding, var(--dbx-padding-3)) 0"
|
|
2742
|
+
},
|
|
2743
|
+
{
|
|
2744
|
+
"property": "font",
|
|
2745
|
+
"value": "var(--mat-sys-label-medium)"
|
|
2746
|
+
},
|
|
2747
|
+
{
|
|
2748
|
+
"property": "color",
|
|
2749
|
+
"value": "var(--mat-sys-on-surface-variant)"
|
|
2750
|
+
}
|
|
2751
|
+
],
|
|
2752
|
+
"role": "layout",
|
|
2753
|
+
"intent": "non-interactive \"…\" gap marker between runs of `.dbx-list-detail-item` rows (e.g. non-consecutive dates) — a compact muted row whose `.item-leading` column lines up with `.item-leading-block`; render it as the separator component of a list view's `separatorConfig` so it sits between rows without row styling",
|
|
2754
|
+
"seeAlso": [
|
|
2755
|
+
"dbx-list-detail-item",
|
|
2756
|
+
"dbx-list-detail-item-leading-block"
|
|
2757
|
+
],
|
|
2758
|
+
"parent": "list-detail-item",
|
|
2759
|
+
"tokensRead": [
|
|
2760
|
+
"--dbx-list-detail-item-gap",
|
|
2761
|
+
"--dbx-list-detail-item-gap-marker-padding",
|
|
2762
|
+
"--dbx-list-detail-item-leading-block-width",
|
|
2763
|
+
"--dbx-padding-3",
|
|
2764
|
+
"--mat-sys-label-medium",
|
|
2765
|
+
"--mat-sys-on-surface-variant"
|
|
2766
|
+
]
|
|
2767
|
+
},
|
|
2768
|
+
{
|
|
2769
|
+
"slug": "list-detail-item-highlight",
|
|
2770
|
+
"selector": ".dbx-list-detail-item-highlight",
|
|
2771
|
+
"source": "@dereekb/dbx-web",
|
|
2772
|
+
"module": "@dereekb/dbx-web",
|
|
2773
|
+
"file": "src/lib/layout/list/_list.scss",
|
|
2774
|
+
"line": 586,
|
|
2775
|
+
"declarations": [
|
|
2776
|
+
{
|
|
2777
|
+
"property": "background",
|
|
2778
|
+
"value": "color-mix(in srgb, var(--dbx-list-detail-item-highlight-color, var(--dbx-notice-color)) var(--dbx-list-detail-item-highlight-tone, 14%), transparent)"
|
|
2779
|
+
},
|
|
2780
|
+
{
|
|
2781
|
+
"property": "border-radius",
|
|
2782
|
+
"value": "var(--mat-sys-corner-medium, 12px)"
|
|
2783
|
+
}
|
|
2784
|
+
],
|
|
2785
|
+
"role": "state",
|
|
2786
|
+
"intent": "flag a `.dbx-list-detail-item` row as urgent — a rounded tonal wash of `--dbx-list-detail-item-highlight-color` (default `--dbx-notice-color`) at `--dbx-list-detail-item-highlight-tone` (default 14%); inside a `.dbx-list` the hosting list row paints the wash instead, so it also spans the view's built-in meta slot (e.g. the chevron)",
|
|
2787
|
+
"seeAlso": [
|
|
2788
|
+
"dbx-list-detail-item"
|
|
2789
|
+
],
|
|
2790
|
+
"parent": "list-detail-item",
|
|
2791
|
+
"tokensRead": [
|
|
2792
|
+
"--dbx-list-detail-item-highlight-color",
|
|
2793
|
+
"--dbx-list-detail-item-highlight-tone",
|
|
2794
|
+
"--dbx-notice-color",
|
|
2795
|
+
"--mat-sys-corner-medium"
|
|
2796
|
+
]
|
|
2797
|
+
},
|
|
2798
|
+
{
|
|
2799
|
+
"slug": "list-detail-item-leading-block",
|
|
2800
|
+
"selector": ".dbx-list-detail-item",
|
|
2801
|
+
"source": "@dereekb/dbx-web",
|
|
2802
|
+
"module": "@dereekb/dbx-web",
|
|
2803
|
+
"file": "src/lib/layout/list/_list.scss",
|
|
2804
|
+
"line": 525,
|
|
2805
|
+
"declarations": [
|
|
2806
|
+
{
|
|
2807
|
+
"property": "display",
|
|
2808
|
+
"value": "flex"
|
|
2809
|
+
},
|
|
2810
|
+
{
|
|
2811
|
+
"property": "flex-direction",
|
|
2812
|
+
"value": "column"
|
|
2813
|
+
},
|
|
2814
|
+
{
|
|
2815
|
+
"property": "justify-content",
|
|
2816
|
+
"value": "center"
|
|
2817
|
+
},
|
|
2818
|
+
{
|
|
2819
|
+
"property": "align-items",
|
|
2820
|
+
"value": "flex-start"
|
|
2821
|
+
},
|
|
2822
|
+
{
|
|
2823
|
+
"property": "align-self",
|
|
2824
|
+
"value": "stretch"
|
|
2825
|
+
},
|
|
2826
|
+
{
|
|
2827
|
+
"property": "gap",
|
|
2828
|
+
"value": "var(--dbx-padding-1)"
|
|
2829
|
+
},
|
|
2830
|
+
{
|
|
2831
|
+
"property": "flex",
|
|
2832
|
+
"value": "none"
|
|
2833
|
+
},
|
|
2834
|
+
{
|
|
2835
|
+
"property": "min-width",
|
|
2836
|
+
"value": "var(--dbx-list-detail-item-leading-block-width, 112px)"
|
|
2837
|
+
},
|
|
2838
|
+
{
|
|
2839
|
+
"property": "margin",
|
|
2840
|
+
"value": "calc(-1 * var(--dbx-list-detail-item-padding-resolved)) 0 calc(-1 * var(--dbx-list-detail-item-padding-resolved)) calc(-1 * var(--dbx-list-detail-item-padding-resolved))"
|
|
2841
|
+
},
|
|
2842
|
+
{
|
|
2843
|
+
"property": "padding",
|
|
2844
|
+
"value": "var(--dbx-list-detail-item-padding-resolved)"
|
|
2845
|
+
},
|
|
2846
|
+
{
|
|
2847
|
+
"property": "box-sizing",
|
|
2848
|
+
"value": "border-box"
|
|
2849
|
+
}
|
|
2850
|
+
],
|
|
2851
|
+
"role": "layout",
|
|
2852
|
+
"intent": "full-height leading column for a `.dbx-list-detail-item` (e.g. a weekday / date / status block) — bleeds out to the row's top, bottom and start edges so a `[dbxColor]` + `.dbx-color-bg` wash fills the row edge; never shrinks below `--dbx-list-detail-item-leading-block-width` (112px), so every row's block stays the same width and only grows when its own content is wider",
|
|
2853
|
+
"seeAlso": [
|
|
2854
|
+
"dbx-list-detail-item",
|
|
2855
|
+
"dbx-color-bg"
|
|
2856
|
+
],
|
|
2857
|
+
"parent": "list-detail-item",
|
|
2858
|
+
"selectorContext": ".dbx-list-detail-item .item-leading-block",
|
|
2859
|
+
"tokensRead": [
|
|
2860
|
+
"--dbx-list-detail-item-leading-block-width",
|
|
2861
|
+
"--dbx-list-detail-item-padding-resolved",
|
|
2862
|
+
"--dbx-padding-1"
|
|
2863
|
+
]
|
|
2864
|
+
},
|
|
2865
|
+
{
|
|
2866
|
+
"slug": "list-detail-item-trailing-divided",
|
|
2867
|
+
"selector": ".dbx-list-detail-item",
|
|
2868
|
+
"source": "@dereekb/dbx-web",
|
|
2869
|
+
"module": "@dereekb/dbx-web",
|
|
2870
|
+
"file": "src/lib/layout/list/_list.scss",
|
|
2871
|
+
"line": 546,
|
|
2872
|
+
"declarations": [
|
|
2873
|
+
{
|
|
2874
|
+
"property": "align-self",
|
|
2875
|
+
"value": "stretch"
|
|
2876
|
+
},
|
|
2877
|
+
{
|
|
2878
|
+
"property": "padding-left",
|
|
2879
|
+
"value": "var(--dbx-list-detail-item-gap, var(--dbx-padding-3))"
|
|
2880
|
+
},
|
|
2881
|
+
{
|
|
2882
|
+
"property": "border-left",
|
|
2883
|
+
"value": "1px solid var(--dbx-list-detail-item-divider-color, var(--mat-sys-outline-variant))"
|
|
2884
|
+
}
|
|
2885
|
+
],
|
|
2886
|
+
"role": "layout",
|
|
2887
|
+
"intent": "trailing slot of a `.dbx-list-detail-item` set off from the content by a hairline start border — for a trailing button column; recolor via `--dbx-list-detail-item-divider-color`",
|
|
2888
|
+
"seeAlso": [
|
|
2889
|
+
"dbx-list-detail-item"
|
|
2890
|
+
],
|
|
2891
|
+
"parent": "list-detail-item",
|
|
2892
|
+
"selectorContext": ".dbx-list-detail-item .item-trailing-divided",
|
|
2893
|
+
"tokensRead": [
|
|
2894
|
+
"--dbx-list-detail-item-divider-color",
|
|
2895
|
+
"--dbx-list-detail-item-gap",
|
|
2896
|
+
"--dbx-padding-3",
|
|
2897
|
+
"--mat-sys-outline-variant"
|
|
2898
|
+
]
|
|
2899
|
+
},
|
|
2654
2900
|
{
|
|
2655
2901
|
"slug": "list-item-p0",
|
|
2656
2902
|
"selector": ".dbx-list-item-p0",
|
|
2657
2903
|
"source": "@dereekb/dbx-web",
|
|
2658
2904
|
"module": "@dereekb/dbx-web",
|
|
2659
2905
|
"file": "src/lib/layout/list/_list.scss",
|
|
2660
|
-
"line":
|
|
2906
|
+
"line": 647,
|
|
2661
2907
|
"declarations": [
|
|
2662
2908
|
{
|
|
2663
2909
|
"property": "padding",
|
|
@@ -2677,7 +2923,7 @@
|
|
|
2677
2923
|
"source": "@dereekb/dbx-web",
|
|
2678
2924
|
"module": "@dereekb/dbx-web",
|
|
2679
2925
|
"file": "src/lib/layout/list/_list.scss",
|
|
2680
|
-
"line":
|
|
2926
|
+
"line": 300,
|
|
2681
2927
|
"declarations": [
|
|
2682
2928
|
{
|
|
2683
2929
|
"property": "min-height",
|
|
@@ -2706,7 +2952,7 @@
|
|
|
2706
2952
|
"source": "@dereekb/dbx-web",
|
|
2707
2953
|
"module": "@dereekb/dbx-web",
|
|
2708
2954
|
"file": "src/lib/layout/list/_list.scss",
|
|
2709
|
-
"line":
|
|
2955
|
+
"line": 309,
|
|
2710
2956
|
"declarations": [
|
|
2711
2957
|
{
|
|
2712
2958
|
"property": "min-height",
|
|
@@ -2732,7 +2978,7 @@
|
|
|
2732
2978
|
"source": "@dereekb/dbx-web",
|
|
2733
2979
|
"module": "@dereekb/dbx-web",
|
|
2734
2980
|
"file": "src/lib/layout/list/_list.scss",
|
|
2735
|
-
"line":
|
|
2981
|
+
"line": 607,
|
|
2736
2982
|
"declarations": [
|
|
2737
2983
|
{
|
|
2738
2984
|
"property": "cursor",
|
|
@@ -2749,7 +2995,7 @@
|
|
|
2749
2995
|
"source": "@dereekb/dbx-web",
|
|
2750
2996
|
"module": "@dereekb/dbx-web",
|
|
2751
2997
|
"file": "src/lib/layout/list/_list.scss",
|
|
2752
|
-
"line":
|
|
2998
|
+
"line": 619,
|
|
2753
2999
|
"declarations": [
|
|
2754
3000
|
{
|
|
2755
3001
|
"property": "padding",
|
|
@@ -2769,7 +3015,7 @@
|
|
|
2769
3015
|
"source": "@dereekb/dbx-web",
|
|
2770
3016
|
"module": "@dereekb/dbx-web",
|
|
2771
3017
|
"file": "src/lib/layout/list/_list.scss",
|
|
2772
|
-
"line":
|
|
3018
|
+
"line": 392,
|
|
2773
3019
|
"declarations": [
|
|
2774
3020
|
{
|
|
2775
3021
|
"property": "--dbx-list-item-border-radius",
|
|
@@ -2796,7 +3042,7 @@
|
|
|
2796
3042
|
"source": "@dereekb/dbx-web",
|
|
2797
3043
|
"module": "@dereekb/dbx-web",
|
|
2798
3044
|
"file": "src/lib/layout/list/_list.scss",
|
|
2799
|
-
"line":
|
|
3045
|
+
"line": 281,
|
|
2800
3046
|
"declarations": [],
|
|
2801
3047
|
"role": "state",
|
|
2802
3048
|
"intent": "pin `.dbx-list-view-group-header` rows to the top of the list while scrolling"
|
|
@@ -2807,7 +3053,7 @@
|
|
|
2807
3053
|
"source": "@dereekb/dbx-web",
|
|
2808
3054
|
"module": "@dereekb/dbx-web",
|
|
2809
3055
|
"file": "src/lib/layout/list/_list.scss",
|
|
2810
|
-
"line":
|
|
3056
|
+
"line": 409,
|
|
2811
3057
|
"declarations": [
|
|
2812
3058
|
{
|
|
2813
3059
|
"property": "display",
|
|
@@ -2834,7 +3080,7 @@
|
|
|
2834
3080
|
"source": "@dereekb/dbx-web",
|
|
2835
3081
|
"module": "@dereekb/dbx-web",
|
|
2836
3082
|
"file": "src/lib/layout/list/_list.scss",
|
|
2837
|
-
"line":
|
|
3083
|
+
"line": 258,
|
|
2838
3084
|
"declarations": [],
|
|
2839
3085
|
"role": "spacing",
|
|
2840
3086
|
"intent": "strip the leading + trailing padding around `mdc-list-item--with-trailing-meta` rows so meta-only items hug their container"
|
|
@@ -1453,6 +1453,154 @@
|
|
|
1453
1453
|
},
|
|
1454
1454
|
"componentScope": "list"
|
|
1455
1455
|
},
|
|
1456
|
+
{
|
|
1457
|
+
"cssVariable": "--dbx-list-content-max-height",
|
|
1458
|
+
"source": "dbx-web",
|
|
1459
|
+
"role": "size",
|
|
1460
|
+
"intents": [
|
|
1461
|
+
"list content max height"
|
|
1462
|
+
],
|
|
1463
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `100%`.",
|
|
1464
|
+
"defaults": {
|
|
1465
|
+
"light": "100%"
|
|
1466
|
+
},
|
|
1467
|
+
"componentScope": "list"
|
|
1468
|
+
},
|
|
1469
|
+
{
|
|
1470
|
+
"cssVariable": "--dbx-list-detail-item-divider-color",
|
|
1471
|
+
"source": "dbx-web",
|
|
1472
|
+
"role": "color",
|
|
1473
|
+
"intents": [
|
|
1474
|
+
"list detail item divider color"
|
|
1475
|
+
],
|
|
1476
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `var(--mat-sys-outline-variant)`.",
|
|
1477
|
+
"defaults": {
|
|
1478
|
+
"light": "var(--mat-sys-outline-variant)"
|
|
1479
|
+
},
|
|
1480
|
+
"componentScope": "list"
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
"cssVariable": "--dbx-list-detail-item-gap",
|
|
1484
|
+
"source": "dbx-web",
|
|
1485
|
+
"role": "spacing",
|
|
1486
|
+
"intents": [
|
|
1487
|
+
"list detail item gap",
|
|
1488
|
+
"list detail item gap spacing"
|
|
1489
|
+
],
|
|
1490
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `var(--dbx-padding-3)`.",
|
|
1491
|
+
"defaults": {
|
|
1492
|
+
"light": "var(--dbx-padding-3)"
|
|
1493
|
+
},
|
|
1494
|
+
"componentScope": "list"
|
|
1495
|
+
},
|
|
1496
|
+
{
|
|
1497
|
+
"cssVariable": "--dbx-list-detail-item-gap-marker-padding",
|
|
1498
|
+
"source": "dbx-web",
|
|
1499
|
+
"role": "spacing",
|
|
1500
|
+
"intents": [
|
|
1501
|
+
"list detail item gap marker padding",
|
|
1502
|
+
"list detail item gap marker padding spacing"
|
|
1503
|
+
],
|
|
1504
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `var(--dbx-padding-3)`.",
|
|
1505
|
+
"defaults": {
|
|
1506
|
+
"light": "var(--dbx-padding-3)"
|
|
1507
|
+
},
|
|
1508
|
+
"componentScope": "list"
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"cssVariable": "--dbx-list-detail-item-highlight-color",
|
|
1512
|
+
"source": "dbx-web",
|
|
1513
|
+
"role": "color",
|
|
1514
|
+
"intents": [
|
|
1515
|
+
"list detail item highlight color"
|
|
1516
|
+
],
|
|
1517
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `var(--dbx-notice-color)`.",
|
|
1518
|
+
"defaults": {
|
|
1519
|
+
"light": "var(--dbx-notice-color)"
|
|
1520
|
+
},
|
|
1521
|
+
"componentScope": "list"
|
|
1522
|
+
},
|
|
1523
|
+
{
|
|
1524
|
+
"cssVariable": "--dbx-list-detail-item-highlight-tone",
|
|
1525
|
+
"source": "dbx-web",
|
|
1526
|
+
"role": "misc",
|
|
1527
|
+
"intents": [
|
|
1528
|
+
"list detail item highlight tone"
|
|
1529
|
+
],
|
|
1530
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `14%`.",
|
|
1531
|
+
"defaults": {
|
|
1532
|
+
"light": "14%"
|
|
1533
|
+
},
|
|
1534
|
+
"componentScope": "list"
|
|
1535
|
+
},
|
|
1536
|
+
{
|
|
1537
|
+
"cssVariable": "--dbx-list-detail-item-leading-block-width",
|
|
1538
|
+
"source": "dbx-web",
|
|
1539
|
+
"role": "size",
|
|
1540
|
+
"intents": [
|
|
1541
|
+
"list detail item leading block width"
|
|
1542
|
+
],
|
|
1543
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `112px`.",
|
|
1544
|
+
"defaults": {
|
|
1545
|
+
"light": "112px"
|
|
1546
|
+
},
|
|
1547
|
+
"componentScope": "list"
|
|
1548
|
+
},
|
|
1549
|
+
{
|
|
1550
|
+
"cssVariable": "--dbx-list-detail-item-line-gap",
|
|
1551
|
+
"source": "dbx-web",
|
|
1552
|
+
"role": "spacing",
|
|
1553
|
+
"intents": [
|
|
1554
|
+
"list detail item line gap",
|
|
1555
|
+
"list detail item line gap spacing"
|
|
1556
|
+
],
|
|
1557
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `2px`.",
|
|
1558
|
+
"defaults": {
|
|
1559
|
+
"light": "2px"
|
|
1560
|
+
},
|
|
1561
|
+
"componentScope": "list"
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"cssVariable": "--dbx-list-detail-item-line-icon-size",
|
|
1565
|
+
"source": "dbx-web",
|
|
1566
|
+
"role": "size",
|
|
1567
|
+
"intents": [
|
|
1568
|
+
"list detail item line icon size"
|
|
1569
|
+
],
|
|
1570
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `18px`.",
|
|
1571
|
+
"defaults": {
|
|
1572
|
+
"light": "18px"
|
|
1573
|
+
},
|
|
1574
|
+
"componentScope": "list"
|
|
1575
|
+
},
|
|
1576
|
+
{
|
|
1577
|
+
"cssVariable": "--dbx-list-detail-item-padding",
|
|
1578
|
+
"source": "dbx-web",
|
|
1579
|
+
"role": "spacing",
|
|
1580
|
+
"intents": [
|
|
1581
|
+
"list detail item padding",
|
|
1582
|
+
"list detail item padding spacing"
|
|
1583
|
+
],
|
|
1584
|
+
"description": "Component-scoped override point (`list`) read in `packages/dbx-web/src/lib/layout/list/_list.scss` — set it (from an app, or via the owning dbx directive where one exists) to override; unset, it falls back to `var(--dbx-padding-3)`.",
|
|
1585
|
+
"defaults": {
|
|
1586
|
+
"light": "var(--dbx-padding-3)"
|
|
1587
|
+
},
|
|
1588
|
+
"componentScope": "list"
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
"cssVariable": "--dbx-list-detail-item-padding-resolved",
|
|
1592
|
+
"source": "dbx-web",
|
|
1593
|
+
"role": "spacing",
|
|
1594
|
+
"intents": [
|
|
1595
|
+
"list detail item padding resolved",
|
|
1596
|
+
"list detail item padding resolved spacing"
|
|
1597
|
+
],
|
|
1598
|
+
"description": "Component-scoped token (`list`) declared in `packages/dbx-web/src/lib/layout/list/_list.scss`. Add a sassdoc `///` block above the declaration for richer guidance.",
|
|
1599
|
+
"defaults": {
|
|
1600
|
+
"light": "var(--dbx-list-detail-item-padding, var(--dbx-padding-3))"
|
|
1601
|
+
},
|
|
1602
|
+
"componentScope": "list"
|
|
1603
|
+
},
|
|
1456
1604
|
{
|
|
1457
1605
|
"cssVariable": "--dbx-list-empty-content-padding",
|
|
1458
1606
|
"source": "dbx-web",
|
|
@@ -315,6 +315,95 @@
|
|
|
315
315
|
}
|
|
316
316
|
]
|
|
317
317
|
},
|
|
318
|
+
{
|
|
319
|
+
"slug": "list-detail-item-schedule-todo",
|
|
320
|
+
"category": "list",
|
|
321
|
+
"summary": "Shared .dbx-list-detail-item row (bold title + lines between leading/trailing slots) rendering a hover-free, button-only Schedule list with a full-height date block and \"…\" separatorConfig gap markers between non-consecutive days, and a row-clickable To Do list with the built-in chevron, an urgent highlight, and an empty state.",
|
|
322
|
+
"header": ".dbx-list-detail-item Schedule + To Do Lists",
|
|
323
|
+
"className": "DocListDetailItemExampleComponent",
|
|
324
|
+
"selector": "doc-list-detail-item-example",
|
|
325
|
+
"module": "apps/demo",
|
|
326
|
+
"appRef": "apps/demo",
|
|
327
|
+
"hint": "One shared row utility — bold title + lines between leading/trailing slots — powering a hover-free, button-only schedule list and a row-clickable to do list.",
|
|
328
|
+
"relatedSlugs": [
|
|
329
|
+
"dbx-list",
|
|
330
|
+
"dbx-list-detail-item",
|
|
331
|
+
"dbx-list-no-hover-effects",
|
|
332
|
+
"dbx-list-card-items-list",
|
|
333
|
+
"dbx-list-empty-content",
|
|
334
|
+
"dbx-list-detail-item-gap",
|
|
335
|
+
"dbx-anchor",
|
|
336
|
+
"dbx-button",
|
|
337
|
+
"dbx-chip",
|
|
338
|
+
"dbx-icon-tile",
|
|
339
|
+
"dbx-color"
|
|
340
|
+
],
|
|
341
|
+
"info": "<p>\n Both panels render\n <code>.dbx-list-detail-item</code>\n rows: an\n <code>.item-content</code>\n column of one bold\n <code>.item-title</code>\n followed by any number of\n <code>.item-line</code>\n rows (a leading\n <code><mat-icon></code>\n is sized for you), framed by an\n <code>.item-leading</code>\n and an\n <code>.item-trailing</code>\n slot. The row pads itself, so each view sets\n <code>dbx-list-item-p0</code>\n on its host.\n</p>\n<p>\n <strong>Your Schedule</strong>\n is hover-free and button-only. The wrapper host applies\n <code>dbx-list-no-hover-effects dbx-list-card-items-list</code>\n , and the view's\n <code>mapValuesToItemValues</code>\n drops\n <code>anchor</code>\n so the row is never a click target and the list turns its ripple off — only the\n <code><dbx-anchor></code>\n -wrapped button inside the\n <code>.item-trailing-divided</code>\n slot reacts. The date column is an\n <code>.item-leading-block</code>\n that bleeds to the row's edges, painted by\n <code>[dbxColor]</code>\n +\n <code>[dbxColorTone]</code>\n +\n <code>.dbx-color-bg</code>\n .\n</p>\n<p>\n When a day doesn't follow the previous one, a \"…\"\n <code>.dbx-list-detail-item-gap</code>\n marker sits between them. The view config sets a\n <code>separatorConfig</code>\n : a separator component plus a\n <code>showSeparator(previous, next)</code>\n function that returns true when the next day isn't the following calendar day. The list calls it for each pair of neighbouring rows (and once before the first and after the last row, with the missing side undefined), and injects the component through\n <code>dbx-injection</code>\n wherever it returns true. The component reads both rows from\n <code>DBX_VALUE_LIST_VIEW_ITEM_SEPARATOR</code>\n to label the gap. Separators sit outside the list rows, so the marker picks up no row hover, ripple or card styling, and its icon column shares the date block's width so it lines up underneath.\n</p>\n<p>\n <strong>To Do</strong>\n keeps the default hover and ripple, and the whole row is the click target (the view keeps\n <code>anchor</code>\n ). The view's\n <code>metaConfig: DbxListViewMetaIconComponent.metaConfig('chevron_right')</code>\n adds the built-in chevron, so the rows need no\n <code>.item-trailing</code>\n slot. The urgent row adds\n <code>.dbx-list-detail-item-highlight</code>\n , which paints the hosting list row through\n <code>:has()</code>\n so the wash also covers the chevron (tune it with\n <code>--dbx-list-detail-item-highlight-color</code>\n /\n <code>--dbx-list-detail-item-highlight-tone</code>\n ). With no items the list shows its projected\n <code><dbx-list-empty-content empty></code>\n .\n</p>\n<p>\n Both lists size to their rows and cap their height with\n <code>--dbx-list-content-max-height</code>\n set on the wrapper host, so\n <code>.dbx-list-content</code>\n — the list's own scroll container — scrolls past the limit instead of the card growing (and a paged list's load-more keeps working).\n</p>\n<p>\n Last clicked:\n <code>{{ clickedKey() ?? '(none)' }}</code>\n</p>",
|
|
342
|
+
"snippet": "<div class=\"dbx-button-wrap-group dbx-mb3\">\n @for (option of todoPresentationOptions; track option.presentation) {\n <button mat-stroked-button (click)=\"todoPresentationSignal.set(option.presentation)\" [disabled]=\"todoPresentationSignal() === option.presentation\">{{ option.label }}</button>\n }\n</div>\n<div gdColumns=\"7fr 5fr\" gdColumns.lt-md=\"1fr\" gdGap=\"var(--dbx-padding-3)\">\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <h3 class=\"dbx-text-headline-small dbx-m0\">Your Schedule</h3>\n <p class=\"dbx-hint dbx-mb3\">{{ bookedCount }} upcoming weekdays booked</p>\n <doc-schedule-day-item-list class=\"doc-list-detail-item-list\" [state]=\"scheduleState\"></doc-schedule-day-item-list>\n </mat-card-content>\n </mat-card>\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <h3 class=\"dbx-text-headline-small dbx-m0\">To Do</h3>\n @if (todoCountLabelSignal(); as todoCountLabel) {\n <p class=\"dbx-hint dbx-mb3\">{{ todoCountLabel }}</p>\n }\n <doc-todo-item-list class=\"doc-list-detail-item-list\" [state]=\"todoStateSignal()\">\n <dbx-list-empty-content empty>\n <div class=\"dbx-flex-column dbx-flex-center dbx-text-center dbx-pv4\">\n <dbx-icon-tile class=\"dbx-mb3\" icon=\"task_alt\" [round]=\"true\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"dbx-text-title-medium\">You're all caught up</div>\n <div class=\"dbx-hint\">No action items right now. We'll let you know if something needs your attention.</div>\n </div>\n </dbx-list-empty-content>\n </doc-todo-item-list>\n </mat-card-content>\n </mat-card>\n</div>",
|
|
343
|
+
"uses": [
|
|
344
|
+
{
|
|
345
|
+
"kind": "component",
|
|
346
|
+
"className": "DocScheduleDayItemListComponent",
|
|
347
|
+
"role": "list",
|
|
348
|
+
"selector": "doc-schedule-day-item-list",
|
|
349
|
+
"classSource": "@Component({\n selector: 'doc-schedule-day-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n }\n})\nexport class DocScheduleDayItemListComponent extends AbstractDbxSelectionListWrapperDirective<ScheduleDayItemValue> {\n constructor() {\n super({\n componentClass: DocScheduleDayItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"kind": "component",
|
|
353
|
+
"className": "DocScheduleDayItemListViewComponent",
|
|
354
|
+
"role": "view",
|
|
355
|
+
"selector": "doc-schedule-day-item-list-view",
|
|
356
|
+
"classSource": "@Component({\n selector: 'doc-schedule-day-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocScheduleDayItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocScheduleDayItemListViewComponent extends AbstractDbxSelectionListViewDirective<ScheduleDayItemValue> {\n // Drop `anchor` (the trailing button owns it; the row stays non-clickable and ripple-free).\n // Separate two days with a \"…\" gap whenever the next day isn't the following calendar day.\n readonly config: DbxSelectionValueListViewConfig<ScheduleDayItemValueWithSelection> = {\n componentClass: DocScheduleDayItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, anchor: undefined }))),\n separatorConfig: {\n componentClass: DocScheduleDayGapComponent,\n showSeparator: dbxValueListItemSeparatorDecisionFunction<ScheduleDayItemValue>((previous, next) => previous != null && next != null && skippedDaysBetweenScheduleDays(previous.day, next.day) > 0)\n }\n };\n}"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"kind": "component",
|
|
360
|
+
"className": "DocScheduleDayItemListViewItemComponent",
|
|
361
|
+
"role": "item",
|
|
362
|
+
"selector": "doc-schedule-day-item-list-view-item",
|
|
363
|
+
"classSource": "@Component({\n selector: 'doc-schedule-day-item-list-view-item',\n template: `\n <div class=\"dbx-list-detail-item\">\n <div class=\"item-leading-block dbx-color-bg\" [dbxColor]=\"stateColor\" [dbxColorTone]=\"14\">\n <span class=\"dbx-text-label-medium dbx-uppercase dbx-tracked-wide\">{{ dayLabel }}</span>\n <span class=\"dbx-text-title-large\">{{ dateLabel }}</span>\n @if (session) {\n <dbx-chip [color]=\"stateColor\" [tone]=\"100\" [small]=\"true\">BOOKED</dbx-chip>\n } @else {\n <dbx-chip [color]=\"stateColor\" [small]=\"true\">\n <span class=\"dbx-dot\"></span>\n <span class=\"dbx-pl1\">OPEN</span>\n </dbx-chip>\n }\n </div>\n <div class=\"item-content\">\n @if (session; as session) {\n <span class=\"item-title\">{{ session.title }}</span>\n <span class=\"item-line\">\n <mat-icon>location_on</mat-icon>\n {{ session.locationName }}\n </span>\n <span class=\"item-line\">\n <mat-icon>calendar_today</mat-icon>\n {{ session.dateRange }}\n </span>\n <span class=\"item-line\">\n <mat-icon>schedule</mat-icon>\n {{ session.timeRange }}\n </span>\n } @else {\n <span class=\"item-title\">Nothing booked</span>\n <span class=\"item-line\">This day is still free.</span>\n }\n </div>\n <div class=\"item-trailing item-trailing-divided\">\n <dbx-anchor [anchor]=\"anchor\">\n @if (session) {\n <dbx-button class=\"dbx-nowrap\" [stroked]=\"true\" text=\"View Details\"></dbx-button>\n } @else {\n <dbx-button class=\"dbx-nowrap\" [tonal]=\"true\" color=\"primary\" text=\"Browse sessions\"></dbx-button>\n }\n </dbx-anchor>\n </div>\n </div>\n `,\n imports: [MatIconModule, DbxAnchorComponent, DbxButtonComponent, DbxChipDirective, DbxColorDirective]\n})\nexport class DocScheduleDayItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<ScheduleDayItemValue> {\n get dayLabel(): string {\n return this.itemValue.dayLabel;\n }\n\n get dateLabel(): string {\n return this.itemValue.dateLabel;\n }\n\n get session(): Maybe<ScheduleDaySession> {\n return this.itemValue.session;\n }\n\n get stateColor(): DbxThemeColor {\n return this.itemValue.state === 'booked' ? 'success' : 'notice';\n }\n\n get anchor(): ClickableAnchor {\n return this.itemValue.anchor;\n }\n}"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"kind": "component",
|
|
367
|
+
"className": "DocScheduleDayGapComponent",
|
|
368
|
+
"role": "separator",
|
|
369
|
+
"selector": "doc-schedule-day-gap",
|
|
370
|
+
"classSource": "@Component({\n selector: 'doc-schedule-day-gap',\n template: `\n <div class=\"dbx-list-detail-item-gap\">\n <span class=\"item-leading\"><mat-icon>more_vert</mat-icon></span>\n <span>{{ label }}</span>\n </div>\n `,\n imports: [MatIconModule]\n})\nexport class DocScheduleDayGapComponent {\n readonly separator = inject<DbxValueListItemSeparatorContext<ScheduleDayItemValue>>(DBX_VALUE_LIST_VIEW_ITEM_SEPARATOR);\n\n get label(): string {\n const { previous, next } = this.separator;\n const skippedDays = previous && next ? skippedDaysBetweenScheduleDays(previous.itemValue.day, next.itemValue.day) : 0;\n return `${skippedDays} ${skippedDays === 1 ? 'day' : 'days'} skipped`;\n }\n}"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"kind": "interface",
|
|
374
|
+
"className": "ScheduleDayItemValue",
|
|
375
|
+
"role": "data",
|
|
376
|
+
"classSource": "export interface ScheduleDayItemValue {\n readonly key: string;\n /**\n * The schedule day. Days are weekdays, sorted ascending.\n */\n readonly day: ISO8601DayString;\n /**\n * Short weekday label, e.g. `Fri`.\n */\n readonly dayLabel: string;\n /**\n * Short date label, e.g. `Sep 25`.\n */\n readonly dateLabel: string;\n readonly state: ScheduleDayItemState;\n /**\n * The booked session. Only set when {@link state} is `'booked'`.\n */\n readonly session?: Maybe<ScheduleDaySession>;\n /**\n * Fired by the row's trailing button — \"View Details\" for a booked day, \"Browse sessions\" for an open day.\n */\n readonly anchor: ClickableAnchor;\n}"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"kind": "component",
|
|
380
|
+
"className": "DocTodoItemListComponent",
|
|
381
|
+
"role": "list",
|
|
382
|
+
"selector": "doc-todo-item-list",
|
|
383
|
+
"classSource": "@Component({\n selector: 'doc-todo-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-auto-height'\n }\n})\nexport class DocTodoItemListComponent extends AbstractDbxSelectionListWrapperDirective<TodoItemValue> {\n constructor() {\n super({\n componentClass: DocTodoItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"kind": "component",
|
|
387
|
+
"className": "DocTodoItemListViewComponent",
|
|
388
|
+
"role": "view",
|
|
389
|
+
"selector": "doc-todo-item-list-view",
|
|
390
|
+
"classSource": "@Component({\n selector: 'doc-todo-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocTodoItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocTodoItemListViewComponent extends AbstractDbxSelectionListViewDirective<TodoItemValue> {\n // Drop `icon` (template paints its own tile); keep `anchor` so the whole row is the click target.\n readonly config: DbxSelectionValueListViewConfig<TodoItemValueWithSelection> = {\n componentClass: DocTodoItemListViewItemComponent,\n metaConfig: DbxListViewMetaIconComponent.metaConfig('chevron_right'),\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined })))\n };\n}"
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"kind": "component",
|
|
394
|
+
"className": "DocTodoItemListViewItemComponent",
|
|
395
|
+
"role": "item",
|
|
396
|
+
"selector": "doc-todo-item-list-view-item",
|
|
397
|
+
"classSource": "@Component({\n selector: 'doc-todo-item-list-view-item',\n template: `\n <div class=\"dbx-list-detail-item\" [class.dbx-list-detail-item-highlight]=\"highlight\">\n <dbx-icon-tile class=\"item-leading\" [icon]=\"icon\" [round]=\"true\" [dbxColor]=\"highlight ? 'notice' : 'grey'\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-content\">\n <span class=\"item-title\">{{ title }}</span>\n <span class=\"item-line\">{{ detail }}</span>\n @if (chip; as chip) {\n <span class=\"item-line dbx-pt1\">\n <dbx-chip [color]=\"chip.color\" [small]=\"true\">{{ chip.text }}</dbx-chip>\n </span>\n }\n </div>\n </div>\n `,\n imports: [DbxChipDirective, DbxColorDirective, DbxIconTileComponent]\n})\nexport class DocTodoItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<TodoItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get detail(): string {\n return this.itemValue.detail;\n }\n\n get chip(): Maybe<TodoItemChip> {\n return this.itemValue.chip;\n }\n\n get highlight(): boolean {\n return this.itemValue.highlight === true;\n }\n}"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"kind": "interface",
|
|
401
|
+
"className": "TodoItemValue",
|
|
402
|
+
"role": "data",
|
|
403
|
+
"classSource": "export interface TodoItemValue {\n readonly key: string;\n readonly icon: string;\n readonly title: string;\n readonly detail: string;\n readonly chip?: Maybe<TodoItemChip>;\n /**\n * Whether to paint the row with the urgent `.dbx-list-detail-item-highlight` wash.\n */\n readonly highlight?: Maybe<boolean>;\n /**\n * Whole-row click target.\n */\n readonly anchor: ClickableAnchor;\n}"
|
|
404
|
+
}
|
|
405
|
+
]
|
|
406
|
+
},
|
|
318
407
|
{
|
|
319
408
|
"slug": "list-progress-with-button",
|
|
320
409
|
"category": "list",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"name": "formSpacesQueuedForProcessingQuery",
|
|
188
188
|
"module": "@dereekb/firebase",
|
|
189
189
|
"subpath": "model/formspace/formspace.query",
|
|
190
|
-
"signature": "formSpacesQueuedForProcessingQuery(
|
|
190
|
+
"signature": "formSpacesQueuedForProcessingQuery(): FirestoreQueryConstraint[]",
|
|
191
191
|
"description": "Returns query constraints for FormSpaces awaiting a processing task (`ps == QUEUED_FOR_PROCESSING`).\n\nThis is the backstop sweep: submission normally creates the task inline, so a space that is still sitting\nhere is one whose task creation was lost.",
|
|
192
192
|
"model": "FormSpace",
|
|
193
193
|
"collection": "fsp",
|
|
@@ -196,14 +196,7 @@
|
|
|
196
196
|
"manual": false,
|
|
197
197
|
"skip": false,
|
|
198
198
|
"category": "sweep",
|
|
199
|
-
"params": [
|
|
200
|
-
{
|
|
201
|
-
"name": "limitCount",
|
|
202
|
-
"type": "Maybe<number>",
|
|
203
|
-
"description": "- Maximum number of results. Omit for unbounded.",
|
|
204
|
-
"optional": true
|
|
205
|
-
}
|
|
206
|
-
],
|
|
199
|
+
"params": [],
|
|
207
200
|
"returns": "Firestore query constraints for FormSpaces queued for processing.",
|
|
208
201
|
"tags": [
|
|
209
202
|
"sweep",
|
|
@@ -225,10 +218,21 @@
|
|
|
225
218
|
"normally",
|
|
226
219
|
"creates"
|
|
227
220
|
],
|
|
228
|
-
"constraintSequences": [
|
|
221
|
+
"constraintSequences": [
|
|
222
|
+
{
|
|
223
|
+
"pathLabel": "all",
|
|
224
|
+
"entries": [
|
|
225
|
+
{
|
|
226
|
+
"kind": "where",
|
|
227
|
+
"fieldPath": "ps",
|
|
228
|
+
"operator": "=="
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
],
|
|
229
233
|
"derivedComposites": [],
|
|
230
234
|
"derivedFieldOverrides": [],
|
|
231
|
-
"example": "const constraints = formSpacesQueuedForProcessingQuery(
|
|
235
|
+
"example": "const constraints = formSpacesQueuedForProcessingQuery();"
|
|
232
236
|
},
|
|
233
237
|
{
|
|
234
238
|
"slug": "form-spaces-due-for-expiration-query",
|
|
@@ -248,7 +252,7 @@
|
|
|
248
252
|
{
|
|
249
253
|
"name": "input",
|
|
250
254
|
"type": "FormSpacesDueForExpirationQueryInput",
|
|
251
|
-
"description": "- The pinned cutoff
|
|
255
|
+
"description": "- The pinned cutoff.",
|
|
252
256
|
"optional": false
|
|
253
257
|
}
|
|
254
258
|
],
|
|
@@ -273,10 +277,27 @@
|
|
|
273
277
|
"note",
|
|
274
278
|
"firestore"
|
|
275
279
|
],
|
|
276
|
-
"constraintSequences": [
|
|
280
|
+
"constraintSequences": [
|
|
281
|
+
{
|
|
282
|
+
"pathLabel": "all",
|
|
283
|
+
"entries": [
|
|
284
|
+
{
|
|
285
|
+
"kind": "orderBy",
|
|
286
|
+
"fieldPath": "eat",
|
|
287
|
+
"direction": "asc"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"kind": "where",
|
|
291
|
+
"fieldPath": "eat",
|
|
292
|
+
"operator": "<=",
|
|
293
|
+
"fromHelper": "whereDateIsOnOrBefore"
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
],
|
|
277
298
|
"derivedComposites": [],
|
|
278
299
|
"derivedFieldOverrides": [],
|
|
279
|
-
"example": "const constraints = formSpacesDueForExpirationQuery({ before: new Date()
|
|
300
|
+
"example": "const constraints = formSpacesDueForExpirationQuery({ before: new Date() });"
|
|
280
301
|
},
|
|
281
302
|
{
|
|
282
303
|
"slug": "storage-files-for-form-space-query",
|
|
@@ -783,6 +804,54 @@
|
|
|
783
804
|
}
|
|
784
805
|
]
|
|
785
806
|
},
|
|
807
|
+
{
|
|
808
|
+
"slug": "notifications-newest-first-query",
|
|
809
|
+
"name": "notificationsNewestFirstQuery",
|
|
810
|
+
"module": "@dereekb/firebase",
|
|
811
|
+
"subpath": "model/notification/notification.query",
|
|
812
|
+
"signature": "notificationsNewestFirstQuery(): FirestoreQueryConstraint[]",
|
|
813
|
+
"description": "Query constraints for listing the {@link Notification} documents in one {@link NotificationBox}, newest first.\n\nRun against a single box's notification collection — this is how an admin finds the notifications sent to a\nmodel (e.g. every notification for a profile) when their ids are auto-generated and not otherwise known. Pair it\nwith a limit; a busy box can hold many notifications between cleanup sweeps.",
|
|
814
|
+
"model": "Notification",
|
|
815
|
+
"collection": "nbn",
|
|
816
|
+
"isNested": true,
|
|
817
|
+
"scope": "COLLECTION",
|
|
818
|
+
"manual": false,
|
|
819
|
+
"skip": false,
|
|
820
|
+
"category": "lookup",
|
|
821
|
+
"params": [],
|
|
822
|
+
"returns": "Array of Firestore query constraints ordering notifications by creation date, newest first.",
|
|
823
|
+
"tags": [
|
|
824
|
+
"lookup",
|
|
825
|
+
"notification",
|
|
826
|
+
"notifications",
|
|
827
|
+
"newest",
|
|
828
|
+
"first",
|
|
829
|
+
"query",
|
|
830
|
+
"notificationsnewestfirstquery",
|
|
831
|
+
"constraints",
|
|
832
|
+
"listing",
|
|
833
|
+
"link",
|
|
834
|
+
"documents",
|
|
835
|
+
"one",
|
|
836
|
+
"notificationbox",
|
|
837
|
+
"run",
|
|
838
|
+
"against"
|
|
839
|
+
],
|
|
840
|
+
"constraintSequences": [
|
|
841
|
+
{
|
|
842
|
+
"pathLabel": "all",
|
|
843
|
+
"entries": [
|
|
844
|
+
{
|
|
845
|
+
"kind": "orderBy",
|
|
846
|
+
"fieldPath": "cat",
|
|
847
|
+
"direction": "desc"
|
|
848
|
+
}
|
|
849
|
+
]
|
|
850
|
+
}
|
|
851
|
+
],
|
|
852
|
+
"derivedComposites": [],
|
|
853
|
+
"derivedFieldOverrides": []
|
|
854
|
+
},
|
|
786
855
|
{
|
|
787
856
|
"slug": "notification-logged-event-days-older-than-query",
|
|
788
857
|
"name": "notificationLoggedEventDaysOlderThanQuery",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-components-mcp",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.10.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"ts-morph": "^21.0.0"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@dereekb/dbx-cli": "14.
|
|
16
|
-
"@dereekb/util": "14.
|
|
15
|
+
"@dereekb/dbx-cli": "14.10.0",
|
|
16
|
+
"@dereekb/util": "14.10.0"
|
|
17
17
|
}
|
|
18
18
|
}
|